Skip to content

Commit

Permalink
Merge pull request #348 from chrisccoulson/pbkdf2-test-time-param
Browse files Browse the repository at this point in the history
pbkdf2: ensure that the time cost is correct in tests
  • Loading branch information
chrisccoulson authored Nov 20, 2024
2 parents b3ae517 + eb5f4e7 commit b240ede
Showing 1 changed file with 30 additions and 9 deletions.
39 changes: 30 additions & 9 deletions pbkdf2_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -34,65 +34,80 @@ type pbkdf2Suite struct{}
var _ = Suite(&pbkdf2Suite{})

func (s *pbkdf2Suite) TestKDFParamsDefault(c *C) {
var expectedTime int
restore := MockPBKDF2Benchmark(func(targetDuration time.Duration, hashAlg crypto.Hash) (uint, error) {
c.Check(targetDuration, Equals, 2*time.Second)
c.Check(hashAlg, Equals, crypto.SHA256)
return pbkdf2.Benchmark(targetDuration, hashAlg)
iter, err := pbkdf2.Benchmark(targetDuration, hashAlg)
c.Check(err, IsNil)
expectedTime = int(iter)
return iter, err
})
defer restore()

var opts PBKDF2Options
params, err := opts.KdfParams(32)
c.Assert(err, IsNil)
c.Check(params.Type, Equals, "pbkdf2")
c.Check(params.Time, Equals, expectedTime)
c.Check(params.Hash, Equals, HashAlg(crypto.SHA256))
c.Check(params.Memory, Equals, 0)
c.Check(params.CPUs, Equals, 0)
}

func (s *pbkdf2Suite) TestKDFParamsDefault48(c *C) {
var expectedTime int
restore := MockPBKDF2Benchmark(func(targetDuration time.Duration, hashAlg crypto.Hash) (uint, error) {
c.Check(targetDuration, Equals, 2*time.Second)
c.Check(hashAlg, Equals, crypto.SHA384)
return pbkdf2.Benchmark(targetDuration, hashAlg)
iter, err := pbkdf2.Benchmark(targetDuration, hashAlg)
c.Check(err, IsNil)
expectedTime = int(iter)
return iter, err
})
defer restore()

var opts PBKDF2Options
params, err := opts.KdfParams(48)
c.Assert(err, IsNil)
c.Check(params.Type, Equals, "pbkdf2")
c.Check(params.Time, Equals, expectedTime)
c.Check(params.Hash, Equals, HashAlg(crypto.SHA384))
c.Check(params.Memory, Equals, 0)
c.Check(params.CPUs, Equals, 0)
}

func (s *pbkdf2Suite) TestKDFParamsDefault64(c *C) {
var expectedTime int
restore := MockPBKDF2Benchmark(func(targetDuration time.Duration, hashAlg crypto.Hash) (uint, error) {
c.Check(targetDuration, Equals, 2*time.Second)
c.Check(hashAlg, Equals, crypto.SHA512)
return pbkdf2.Benchmark(targetDuration, hashAlg)
iter, err := pbkdf2.Benchmark(targetDuration, hashAlg)
c.Check(err, IsNil)
expectedTime = int(iter)
return iter, err
})
defer restore()

var opts PBKDF2Options
params, err := opts.KdfParams(64)
c.Assert(err, IsNil)
c.Check(params.Type, Equals, "pbkdf2")
c.Check(params.Time, Equals, expectedTime)
c.Check(params.Hash, Equals, HashAlg(crypto.SHA512))
c.Check(params.Memory, Equals, 0)
c.Check(params.CPUs, Equals, 0)
}

func (s *pbkdf2Suite) TestKDFParamsTargetDuration(c *C) {
var expectedTime int
restore := MockPBKDF2Benchmark(func(targetDuration time.Duration, hashAlg crypto.Hash) (uint, error) {
c.Logf("benchmarking (%d)", targetDuration)
if targetDuration != 200*time.Millisecond {
panic("")
}
c.Check(targetDuration, Equals, 200*time.Millisecond)
c.Check(hashAlg, Equals, crypto.SHA256)
return pbkdf2.Benchmark(targetDuration, hashAlg)
iter, err := pbkdf2.Benchmark(targetDuration, hashAlg)
c.Check(err, IsNil)
expectedTime = int(iter)
return iter, err
})
defer restore()

Expand All @@ -101,6 +116,7 @@ func (s *pbkdf2Suite) TestKDFParamsTargetDuration(c *C) {
params, err := opts.KdfParams(32)
c.Assert(err, IsNil)
c.Check(params.Type, Equals, "pbkdf2")
c.Check(params.Time, Equals, expectedTime)
c.Check(params.Hash, Equals, HashAlg(crypto.SHA256))
c.Check(params.Memory, Equals, 0)
c.Check(params.CPUs, Equals, 0)
Expand All @@ -119,10 +135,14 @@ func (s *pbkdf2Suite) TestKDFParamsForceIterations(c *C) {
}

func (s *pbkdf2Suite) TestKDFParamsCustomHash(c *C) {
var expectedTime int
restore := MockPBKDF2Benchmark(func(targetDuration time.Duration, hashAlg crypto.Hash) (uint, error) {
c.Check(targetDuration, Equals, 2*time.Second)
c.Check(hashAlg, Equals, crypto.SHA512)
return pbkdf2.Benchmark(targetDuration, hashAlg)
iter, err := pbkdf2.Benchmark(targetDuration, hashAlg)
c.Check(err, IsNil)
expectedTime = int(iter)
return iter, err
})
defer restore()

Expand All @@ -131,6 +151,7 @@ func (s *pbkdf2Suite) TestKDFParamsCustomHash(c *C) {
params, err := opts.KdfParams(32)
c.Assert(err, IsNil)
c.Check(params.Type, Equals, "pbkdf2")
c.Check(params.Time, Equals, expectedTime)
c.Check(params.Hash, Equals, HashAlg(crypto.SHA512))
c.Check(params.Memory, Equals, 0)
c.Check(params.CPUs, Equals, 0)
Expand Down

0 comments on commit b240ede

Please sign in to comment.