-
Notifications
You must be signed in to change notification settings - Fork 2
/
test_network.py
53 lines (36 loc) · 1.3 KB
/
test_network.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#! /usr/bin/env python3
from umbral import pre, keys, config
from nucypher import MockNetwork
# Setup pypre
config.set_default_curve()
mock_kms = MockNetwork()
# Generate Keys and setup mock network
alice_privkey = keys.UmbralPrivateKey.gen_key()
alice_pubkey = alice_privkey.get_pubkey()
bob_privkey = keys.UmbralPrivateKey.gen_key()
bob_pubkey = bob_privkey.get_pubkey()
# Encrypt some data
plaintext = b'attack at dawn!'
ciphertext, capsule = pre.encrypt(alice_pubkey, plaintext)
# Perform split-rekey and grant re-encryption policy
alice_kfrags = pre.split_rekey(alice_privkey, bob_pubkey, 10, 20)
assert len(alice_kfrags) == 20
policy_id = mock_kms.grant(alice_kfrags)
assert type(policy_id) == str
print(alice_kfrags[0])
# Perform re-encryption request
bob_cfrags = mock_kms.reencrypt(policy_id, capsule, 10)
assert len(bob_cfrags) == 10
# Simulate capsule handoff,
bob_capsule = capsule
for cfrag in bob_cfrags:
bob_capsule.attach_cfrag(cfrag)
decrypted_data = pre.decrypt(bob_capsule, bob_privkey, ciphertext, alice_pubkey)
assert decrypted_data == plaintext
# Perform revoke request
mock_kms.revoke(policy_id)
# This should throw a `ValueError`.
try:
mock_kms.reencrypt(policy_id, capsule, 10)
except ValueError:
print("An Error was thrown indicating the expected response. Tests have been run.")