1234567891011121314151617181920212223242526272829303132333435363738394041424344 |
- """A simple example how to use PBKDF PKCS #12 algorithm."""
- import wolfssl
- import os
- import random
- import string
- PASSWORD_LENGTH = 16
- SALT_LENGTH = 8
- KEY_LENGTH = 16
- ITERATIONS = 256
- SHA256 = 2 # Hashtype, stands for Sha256 in wolfssl.
- def to_c_byte_array(content):
- output = wolfssl.byteArray(len(content))
- for i, ch in enumerate(content):
- output[i] = ord(ch)
- return output
- 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]
|