1import unittest 2from util import * 3 4ENTROPY_LEN_128, ENTROPY_LEN_256, ENTROPY_LEN_512 = 16, 32, 64 5HMAC_SHA512_LEN = 64 6 7class SymmetricTests(unittest.TestCase): 8 9 def test_symmetric_key(self): 10 seed128, seed128_len = make_cbuffer('01' * ENTROPY_LEN_128) 11 seed256, seed256_len = make_cbuffer('01' * ENTROPY_LEN_256) 12 seed512, seed512_len = make_cbuffer('01' * ENTROPY_LEN_512) 13 label, label_len = make_cbuffer('0f0000') 14 key_out, key_out_len = make_cbuffer('00' * HMAC_SHA512_LEN) 15 16 # wally_symmetric_key_from_seed 17 # Invalid args 18 cases = [ 19 (None, seed128_len, key_out, key_out_len), # Null bytes 20 (seed128, 0, key_out, key_out_len), # 0 Length bytes 21 (seed128, seed128_len-1, key_out, key_out_len), # Bad bytes length 22 (seed128, seed128_len, None, key_out_len), # Null dest 23 (seed128, seed128_len, key_out, 0), # 0 length dest 24 (seed128, seed128_len, key_out, key_out_len+1), # Bad dest length 25 ] 26 for bytes_in, bytes_len, out, out_len in cases: 27 ret = wally_symmetric_key_from_seed(bytes_in, bytes_len, out, out_len) 28 self.assertEqual(ret, WALLY_EINVAL) 29 30 # Valid args 31 for bytes_in, bytes_len in [(seed128, seed128_len), 32 (seed256, seed256_len), 33 (seed512, seed512_len)]: 34 ret = wally_symmetric_key_from_seed(bytes_in, bytes_len, key_out, key_out_len) 35 self.assertEqual(ret, WALLY_OK) 36 37 # wally_symmetric_key_from_parent 38 key_in, key_len = make_cbuffer('01' * HMAC_SHA512_LEN) 39 # Invalid args 40 cases = [ 41 (None, key_len, 0, label, label_len, key_out, key_out_len), # Null key 42 (key_in, 0, 0, label, label_len, key_out, key_out_len), # 0 Length key 43 (key_in, key_len-1, 1, label, label_len, key_out, key_out_len), # Bad key length 44 (key_in, key_len, 1, label, label_len, key_out, key_out_len), # Bad version 45 (key_in, key_len, 0, None, label_len, key_out, key_out_len), # Null label 46 (key_in, key_len, 0, label, 0, key_out, key_out_len), # Bad label length 47 (key_in, key_len, 0, label, label_len, None, key_out_len), # Null dest 48 (key_in, key_len, 0, label, label_len, key_out, 0), # 0 length dest 49 (key_in, key_len, 0, label, label_len, key_out, key_out_len+1), # Bad dest length 50 ] 51 for bytes_in, bytes_len, ver, l, l_len, out, out_len in cases: 52 ret = wally_symmetric_key_from_parent(bytes_in, bytes_len, ver, l, l_len, out, out_len) 53 self.assertEqual(ret, WALLY_EINVAL) 54 55 # Valid args 56 ret = wally_symmetric_key_from_parent(key_in, key_len, 0, label, label_len, key_out, key_out_len) 57 self.assertEqual(ret, WALLY_OK) 58 59 # Check labels around length LABEL_SIZE (64) 60 label, label_len = make_cbuffer('0f' * 65) 61 for l_len in (label_len-1, label_len, label_len+1): 62 ret = wally_symmetric_key_from_parent(key_in, key_len, 0, label, l_len, key_out, key_out_len) 63 self.assertEqual(ret, WALLY_OK) 64 65 66if __name__ == '__main__': 67 unittest.main() 68