def test_combine_secret_3_users(): """ Acceptance test with 3 users and not-full access groups """ secrets = [7, 9] user_num = 4 dealer = Dealer(17, user_num, secrets, [[[1, 4]], [[2, 3, 4]]]) dealer.split_secrets() print('Secrets shared!') user_shares = [] # for user in dealer.access_structures[0][0] for user in range( user_num ): # here only users who are in access group should give their shares share = dealer.get_user_key_share(user) user_shares.append(share) shares_for_secret_0 = [share[0] for share in user_shares] #shares_for_secret_0 = [share1[0], share2[0]]it print('Combine using shares: %r', shares_for_secret_0) assert False secret_key_0 = dealer.combine_secret_key(0, shares_for_secret_0) assert_equal(secret_key_0.to_bytes(dealer.AES_KEY_LEN, byteorder='big'), dealer.cipher_keys[0]) secret0_bytes = dealer.cipher_decrypt(dealer.public_shares_M[0], secret_key_0) secret0 = int.from_bytes(secret0_bytes, byteorder='big') assert_equal(secret0, secrets[0])
def test_split_secret_keys(): dealer = Dealer(p256, n_participants, s_secrets, access_structures) # this function invokes low-level methods dealer.split_secrets() print(dealer.key_shares) assert_equal(len(dealer.key_shares), len(dealer.s_secrets))
def test_get_user_key_share(): dealer = Dealer(p256, n_participants, s_secrets, access_structures) # this function invokes low-level methods dealer.split_secrets() user_share = dealer.get_user_key_share(1) print('All key shares', dealer.key_shares) print('User 0 key share', user_share) assert_equal(user_share[0], dealer.key_shares[0][0][0]) # user 2 has internally index 1 assert_equal(dealer.get_user_key_share(2)[1], dealer.key_shares[1][0][1]) assert_equal(dealer.get_user_key_share(2)[0], dealer.key_shares[0][0][1])
def test_combine_secret_2_users(): """ Acceptance test with 2 users """ secrets = [7, 9] dealer = Dealer(p256, 2, secrets, [[[1, 2]], [[1, 2]]]) dealer.split_secrets() share1 = dealer.get_user_key_share(1) share2 = dealer.get_user_key_share(2) print('Secrets shared!') shares_for_secret_0 = [share1[0], share2[0]] print('Combine using shares: %r', shares_for_secret_0) secret_key_0 = dealer.combine_secret_key(0, shares_for_secret_0) assert_equal(secret_key_0.to_bytes(dealer.AES_KEY_LEN, byteorder='big'), dealer.cipher_keys[0]) secret0_bytes = dealer.cipher_decrypt(dealer.public_shares_M[0], secret_key_0) secret0 = int.from_bytes(secret0_bytes, byteorder='big') assert_equal(secret0, secrets[0])