6 from ctypes import c_char_p,c_int, c_void_p, create_string_buffer
7 from ctypescrypto import libcrypto
8 from ctypescrypto.digest import DigestType
12 def pbkdf2(password,salt,outlen,digesttype="sha1",iterations=2000):
14 Interface to PKCS5_PBKDF2_HMAC function
17 @param password - password to derive key from
18 @param salt - random salt to use for key derivation
19 @param outlen - number of bytes to derive
20 @param digesttype - name of digest to use to use (default sha1)
21 @param iterations - number of iterations to use
23 @returns outlen bytes of key material derived from password and salt
25 dt=DigestType(digesttype)
26 out=create_string_buffer(outlen)
27 res=libcrypto.PKCS5_PBKDF2_HMAC(password,len(password),salt,len(salt),
28 iterations,dt.digest,outlen,out)
30 raise LibCryptoError("error computing PBKDF2")
33 libcrypto.PKCS5_PBKDF2_HMAC.argtypes=(c_char_p,c_int,c_char_p,c_int,c_int,
34 c_void_p,c_int,c_char_p)
35 libcrypto.PKCS5_PBKDF2_HMAC.restupe=c_int