password = ''.join( random.choice(string.ascii_uppercase + string.digits) for x in range(PASSWORD_LENGTH)) salt = os.urandom(SALT_LENGTH) key = wolfssl.byteArray(KEY_LENGTH) # params: # key :: bytearray output # passwd :: bytearray password that is used to derive the key # pLen :: password length # salt :: bytearray salt # sLen :: salt length # iterations :: number of iterations # kLen :: key length # hashType :: int, SHA256 stands for 2 # purpose :: int, not really sure what it does, 1 was used in the tests wolfssl.wc_PKCS12_PBKDF(key, to_c_byte_array(password), PASSWORD_LENGTH, to_c_byte_array(salt), SALT_LENGTH, ITERATIONS, KEY_LENGTH, SHA256, 1) key = wolfssl.cdata(key, KEY_LENGTH) assert len( key ) == KEY_LENGTH, "Generated key has length %s, whereas should have length %s" % ( len(key), KEY_LENGTH) print 'Generated key: %s\nfor password: %s' % (key, password) print 'Bytes:' print[b for b in key]
def to_c_byte_array(content): output = wolfssl.byteArray(len(content)) for i, ch in enumerate(content): output[i] = ord(ch) return output password = '******' salt = '\x0a\x58\xCF\x64\x53\x0d\x82\x3f' key = wolfssl.byteArray(KEY_LENGTH) verify = '\x27\xE9\x0D\x7E\xD5\xA1\xC4\x11\xBA\x87\x8B\xC0\x90\xF5\xCE\xBE\x5E\x9D\x5F\xE3\xD6\x2B\x73\xAA' wolfssl.wc_PKCS12_PBKDF(key, to_c_byte_array(password), len(password), to_c_byte_array(salt), len(salt), 1, KEY_LENGTH, SHA256, 1) key = wolfssl.cdata(key, KEY_LENGTH) assert key == verify password = '******' salt = '\x16\x82\xC0\xfC\x5b\x3f\x7e\xc5' key = wolfssl.byteArray(KEY_LENGTH) verify = '\x90\x1B\x49\x70\xF0\x94\xF0\xF8\x45\xC0\xF3\xF3\x13\x59\x18\x6A\x35\xE3\x67\xFE\xD3\x21\xFD\x7C' wolfssl.wc_PKCS12_PBKDF(key, to_c_byte_array(password), len(password), to_c_byte_array(salt), len(salt), 1000, KEY_LENGTH, SHA256, 1) key = wolfssl.cdata(key, KEY_LENGTH) assert key == verify
salt = os.urandom(SALT_LENGTH) key = wolfssl.byteArray(KEY_LENGTH) # params: # key :: bytearray output # passwd :: bytearray password that is used to derive the key # pLen :: password length # salt :: bytearray salt # sLen :: salt length # iterations :: number of iterations # kLen :: key length # hashType :: int, SHA256 stands for 2 # purpose :: int, not really sure what it does, 1 was used in the tests wolfssl.wc_PKCS12_PBKDF( key, to_c_byte_array(password), PASSWORD_LENGTH, to_c_byte_array(salt), SALT_LENGTH, ITERATIONS, KEY_LENGTH, SHA256, 1, ) key = wolfssl.cdata(key, KEY_LENGTH) assert len(key) == KEY_LENGTH, "Generated key has length %s, whereas should have length %s" % (len(key), KEY_LENGTH) print "Generated key: %s\nfor password: %s" % (key, password) print "Bytes:" print [b for b in key]
def to_c_byte_array(content): output = wolfssl.byteArray(len(content)) for i, ch in enumerate(content): output[i] = ord(ch) return output password = "******" salt = "\x0a\x58\xCF\x64\x53\x0d\x82\x3f" key = wolfssl.byteArray(KEY_LENGTH) verify = "\x27\xE9\x0D\x7E\xD5\xA1\xC4\x11\xBA\x87\x8B\xC0\x90\xF5\xCE\xBE\x5E\x9D\x5F\xE3\xD6\x2B\x73\xAA" wolfssl.wc_PKCS12_PBKDF( key, to_c_byte_array(password), len(password), to_c_byte_array(salt), len(salt), 1, KEY_LENGTH, SHA256, 1 ) key = wolfssl.cdata(key, KEY_LENGTH) assert key == verify password = "******" salt = "\x16\x82\xC0\xfC\x5b\x3f\x7e\xc5" key = wolfssl.byteArray(KEY_LENGTH) verify = "\x90\x1B\x49\x70\xF0\x94\xF0\xF8\x45\xC0\xF3\xF3\x13\x59\x18\x6A\x35\xE3\x67\xFE\xD3\x21\xFD\x7C" wolfssl.wc_PKCS12_PBKDF( key, to_c_byte_array(password), len(password), to_c_byte_array(salt), len(salt), 1000, KEY_LENGTH, SHA256, 1 ) key = wolfssl.cdata(key, KEY_LENGTH) assert key == verify