v/vlib/crypto/pbkdf2/pbkdf2_test.v

96 lines
3.4 KiB
V

import crypto.sha512
import crypto.sha256
import crypto.pbkdf2
import encoding.hex
struct TestCaseData {
name string
password string
salt string
count int
key_length int
sha224 string
sha256 string
sha384 string
sha512 string
}
const cases = [
TestCaseData{
name: 'test case 1'
password: 'password'
salt: 'salt'
count: 1
key_length: 20
sha224: '3c198cbdb9464b7857966bd05b7bc92bc1cc4e6e'
sha256: '120fb6cffcf8b32c43e7225256c4f837a86548c9'
sha384: 'c0e14f06e49e32d73f9f52ddf1d0c5c719160923'
sha512: '867f70cf1ade02cff3752599a3a53dc4af34c7a6'
},
TestCaseData{
name: 'test case 2'
password: 'password'
salt: 'salt'
count: 2
key_length: 20
sha224: '93200ffa96c5776d38fa10abdf8f5bfc0054b971'
sha256: 'ae4d0c95af6b46d32d0adff928f06dd02a303f8e'
sha384: '54f775c6d790f21930459162fc535dbf04a93918'
sha512: 'e1d9c16aa681708a45f5c7c4e215ceb66e011a2e'
},
TestCaseData{
name: 'test case 3'
password: 'password'
salt: 'salt'
count: 4096
key_length: 20
sha224: '218c453bf90635bd0a21a75d172703ff6108ef60'
sha256: 'c5e478d59288c841aa530db6845c4c8d962893a0'
sha384: '559726be38db125bc85ed7895f6e3cf574c7a01c'
sha512: 'd197b1b33db0143e018b12f3d1d1479e6cdebdcc'
},
TestCaseData{
name: 'test case 7'
password: 'passwd'
salt: 'salt'
count: 1
key_length: 128
sha224: 'e55bd77cfc18b012ac6362e22d7cdf77c4b03879a6af51fbf0045bc32a03e7f0d829d26b765bff0ca5873e07a8e85804ff4a17683ed706130d51657456bc0ebd07c35ca0675b3113ad9c33fe48a5eb9e9dc6c6a8cf5cf6de1318b414dbe667bfaeb863ef8399ff4a732520dab4ba82336513a25077ddfc11fc618c11efaf04ae'
sha256: '55ac046e56e3089fec1691c22544b605f94185216dde0465e68b9d57c20dacbc49ca9cccf179b645991664b39d77ef317c71b845b1e30bd509112041d3a19783c294e850150390e1160c34d62e9665d659ae49d314510fc98274cc79681968104b8f89237e69b2d549111868658be62f59bd715cac44a1147ed5317c9bae6b2a'
sha384: 'cd3443723a41cf1460cca9efeede428a8898a82d2ad4d1fc5cca08ed3f4d3cb47a62a70b3cb9ce65dcbfb9fb9d425027a8be69b53e2a22674b0939e5e0a682f76d21f449ad184562a3bc4c519b4d048de6d8e0999fb88770f95e40185e19fc8b68767417ccc064f47a455d045b3bafda7e81b97ad0e4c5581af1aa27871cd5e4'
sha512: 'c74319d99499fc3e9013acff597c23c5baf0a0bec5634c46b8352b793e324723d55caa76b2b25c43402dcfdc06cdcf66f95b7d0429420b39520006749c51a04ef3eb99e576617395a178ba33214793e48045132928a9e9bf2661769fdc668f31798597aaf6da70dd996a81019726084d70f152baed8aafe2227c07636c6ddece'
},
]
fn test_sha224() {
for c in cases {
expected_result := hex.decode(c.sha224)!
key := pbkdf2.key(c.password.bytes(), c.salt.bytes(), c.count, c.key_length, sha256.new224())!
assert key == expected_result, 'failed ${c.name}'
}
}
fn test_sha256() {
for c in cases {
expected_result := hex.decode(c.sha256)!
key := pbkdf2.key(c.password.bytes(), c.salt.bytes(), c.count, c.key_length, sha256.new())!
assert key == expected_result, 'failed ${c.name}'
}
}
fn test_sha384() {
for c in cases {
expected_result := hex.decode(c.sha384)!
key := pbkdf2.key(c.password.bytes(), c.salt.bytes(), c.count, c.key_length, sha512.new384())!
assert key == expected_result, 'failed ${c.name}'
}
}
fn test_sha512() {
for c in cases {
expected_result := hex.decode(c.sha512)!
key := pbkdf2.key(c.password.bytes(), c.salt.bytes(), c.count, c.key_length, sha512.new())!
assert key == expected_result, 'failed ${c.name}'
}
}