nucypher/tests/network/test_default_crypto.py

44 lines
1.3 KiB
Python

from nkms.crypto import default_algorithm
from nkms.crypto import symmetric_from_algorithm
from nkms.crypto import pre_from_algorithm
from nkms.crypto import api
def test_symmetric():
Cipher = symmetric_from_algorithm(default_algorithm)
key = api.secure_random(Cipher.KEY_SIZE)
cipher = Cipher(key)
data = b'Hello world' * 10
edata = cipher.encrypt(data)
assert edata != data
assert cipher.decrypt(edata) == data
def test_pre():
pre = pre_from_algorithm(default_algorithm)
sk_alice = b'a' * 32
sk_bob = b'b' * 32
pk_alice = pre.priv2pub(sk_alice)
pk_bob = pre.priv2pub(sk_bob)
assert len(pk_alice) == 34
assert len(pk_bob) == 34
assert pk_alice[0] == 1
assert pk_bob[0] == 1
cleartext = b'Hello world'
cyphertext_for_alice = pre.encrypt(pk_alice, cleartext)
assert pre.decrypt(sk_alice, cyphertext_for_alice) == cleartext # Alice can read her message.
assert pre.decrypt(sk_bob, cyphertext_for_alice) != cleartext # But Bob can't!
# Now we make a re-encryption key from Alice to Bob
rk_alice_bob = pre.rekey(sk_alice, pk_bob)
# Use the key on Alice's cyphertext...
cyphertext_for_bob = pre.reencrypt(rk_alice_bob, cyphertext_for_alice)
# ...and sure enough, Bob can read it!
assert pre.decrypt(sk_bob, cyphertext_for_bob) == cleartext