in dev/pbkdf2.py [0:0]
def test():
failed = []
def check(data, salt, iterations, keylen, expected):
rv = pbkdf2_hex(data, salt, iterations, keylen)
if rv != expected:
print("Test failed:")
print(" Expected: %s" % expected)
print(" Got: %s" % rv)
print(" Parameters:")
print(" data=%s" % data)
print(" salt=%s" % salt)
print(" iterations=%d" % iterations)
failed.append(1)
# From RFC 6070
check("password", "salt", 1, 20, "0c60c80f961f0e71f3a9b524af6012062fe037a6")
check("password", "salt", 2, 20, "ea6c014dc72d6f8ccd1ed92ace1d41f0d8de8957")
check("password", "salt", 4096, 20, "4b007901b765489abead49d926f721d065a429c1")
check(
"passwordPASSWORDpassword",
"saltSALTsaltSALTsaltSALTsaltSALTsalt",
4096,
25,
"3d2eec4fe41c849b80c8d83662c0e44a8b291a964cf2f07038",
)
check("pass\x00word", "sa\x00lt", 4096, 16, "56fa6aa75548099dcc37d7f03425e0c3")
# This one is from the RFC but it just takes for ages
##check('password', 'salt', 16777216, 20,
## 'eefe3d61cd4da4e4e9945b3d6ba2158c2634e984')
# From Crypt-PBKDF2
check(
"password", "ATHENA.MIT.EDUraeburn", 1, 16, "cdedb5281bb2f801565a1122b2563515"
)
check(
"password",
"ATHENA.MIT.EDUraeburn",
1,
32,
"cdedb5281bb2f801565a1122b25635150ad1f7a04bb9f3a333ecc0e2e1f70837",
)
check(
"password", "ATHENA.MIT.EDUraeburn", 2, 16, "01dbee7f4a9e243e988b62c73cda935d"
)
check(
"password",
"ATHENA.MIT.EDUraeburn",
2,
32,
"01dbee7f4a9e243e988b62c73cda935da05378b93244ec8f48a99e61ad799d86",
)
check(
"password",
"ATHENA.MIT.EDUraeburn",
1200,
32,
"5c08eb61fdf71e4e4ec3cf6ba1f5512ba7e52ddbc5e5142f708a31e2e62b1e13",
)
check(
"X" * 64,
"pass phrase equals block size",
1200,
32,
"139c30c0966bc32ba55fdbf212530ac9c5ec59f1a452f5cc9ad940fea0598ed1",
)
check(
"X" * 65,
"pass phrase exceeds block size",
1200,
32,
"9ccad6d468770cd51b10e6a68721be611a8b4d282601db3b36be9246915ec82a",
)
raise SystemExit(bool(failed))