2018-11-04 19:23:11 +00:00
|
|
|
|
2020-05-13 03:23:33 +00:00
|
|
|
|
2018-02-13 20:28:39 +00:00
|
|
|
import sha3
|
2018-06-23 03:28:08 +00:00
|
|
|
from constant_sorrow.constants import PUBLIC_ONLY
|
2018-08-11 22:56:27 +00:00
|
|
|
|
2021-12-24 22:28:33 +00:00
|
|
|
from nucypher_core.umbral import SecretKey
|
|
|
|
|
2020-09-14 11:34:37 +00:00
|
|
|
from nucypher.crypto import keypairs
|
2017-10-11 19:51:58 +00:00
|
|
|
|
|
|
|
|
2018-02-13 20:28:39 +00:00
|
|
|
def test_gen_keypair_if_needed():
|
2018-12-13 21:17:22 +00:00
|
|
|
new_dec_keypair = keypairs.DecryptingKeypair()
|
|
|
|
assert new_dec_keypair._privkey is not None
|
|
|
|
assert new_dec_keypair.pubkey is not None
|
2021-06-08 03:05:35 +00:00
|
|
|
assert new_dec_keypair.pubkey == new_dec_keypair._privkey.public_key()
|
2017-10-11 19:51:58 +00:00
|
|
|
|
2018-02-13 20:28:39 +00:00
|
|
|
new_sig_keypair = keypairs.SigningKeypair()
|
2018-11-08 11:06:35 +00:00
|
|
|
assert new_sig_keypair._privkey is not None
|
|
|
|
assert new_sig_keypair.pubkey is not None
|
2021-06-08 03:05:35 +00:00
|
|
|
assert new_sig_keypair.pubkey == new_sig_keypair._privkey.public_key()
|
2017-10-11 19:51:58 +00:00
|
|
|
|
|
|
|
|
2018-02-13 20:28:39 +00:00
|
|
|
def test_keypair_with_umbral_keys():
|
2021-06-08 03:05:35 +00:00
|
|
|
umbral_privkey = SecretKey.random()
|
|
|
|
umbral_pubkey = umbral_privkey.public_key()
|
2017-10-11 19:54:13 +00:00
|
|
|
|
2018-02-13 21:00:15 +00:00
|
|
|
new_keypair_from_priv = keypairs.Keypair(umbral_privkey)
|
2021-03-24 04:45:51 +00:00
|
|
|
assert new_keypair_from_priv._privkey == umbral_privkey
|
2021-06-08 03:05:35 +00:00
|
|
|
assert bytes(new_keypair_from_priv.pubkey) == bytes(umbral_pubkey)
|
2017-10-11 19:54:13 +00:00
|
|
|
|
2018-07-21 02:05:04 +00:00
|
|
|
new_keypair_from_pub = keypairs.Keypair(public_key=umbral_pubkey)
|
2021-06-08 03:05:35 +00:00
|
|
|
assert bytes(new_keypair_from_pub.pubkey) == bytes(umbral_pubkey)
|
2018-06-23 03:28:08 +00:00
|
|
|
assert new_keypair_from_pub._privkey == PUBLIC_ONLY
|
2017-10-11 19:54:13 +00:00
|
|
|
|
2017-10-17 20:13:12 +00:00
|
|
|
|
2018-02-13 20:28:39 +00:00
|
|
|
def test_keypair_serialization():
|
2021-06-08 03:05:35 +00:00
|
|
|
umbral_pubkey = SecretKey.random().public_key()
|
2018-07-21 02:05:04 +00:00
|
|
|
new_keypair = keypairs.Keypair(public_key=umbral_pubkey)
|
2017-10-17 20:59:25 +00:00
|
|
|
|
2021-06-08 03:05:35 +00:00
|
|
|
pubkey_bytes = bytes(new_keypair.pubkey)
|
2018-02-13 20:28:39 +00:00
|
|
|
assert pubkey_bytes == bytes(umbral_pubkey)
|
2017-10-17 20:59:25 +00:00
|
|
|
|
2017-11-07 22:13:45 +00:00
|
|
|
|
2018-02-13 20:28:39 +00:00
|
|
|
def test_keypair_fingerprint():
|
2021-06-08 03:05:35 +00:00
|
|
|
umbral_pubkey = SecretKey.random().public_key()
|
2018-07-21 02:05:04 +00:00
|
|
|
new_keypair = keypairs.Keypair(public_key=umbral_pubkey)
|
2017-10-17 20:59:25 +00:00
|
|
|
|
2018-02-14 00:39:24 +00:00
|
|
|
fingerprint = new_keypair.fingerprint()
|
2018-11-08 11:06:35 +00:00
|
|
|
assert fingerprint is not None
|
2017-10-17 20:59:25 +00:00
|
|
|
|
2018-02-13 20:28:39 +00:00
|
|
|
umbral_fingerprint = sha3.keccak_256(bytes(umbral_pubkey)).hexdigest().encode()
|
|
|
|
assert fingerprint == umbral_fingerprint
|
2017-10-17 20:59:25 +00:00
|
|
|
|
2017-10-17 20:13:12 +00:00
|
|
|
|
2018-02-13 20:28:39 +00:00
|
|
|
def test_signing():
|
2021-06-08 03:05:35 +00:00
|
|
|
umbral_privkey = SecretKey.random()
|
2018-02-13 21:00:15 +00:00
|
|
|
sig_keypair = keypairs.SigningKeypair(umbral_privkey)
|
2017-10-17 20:13:12 +00:00
|
|
|
|
2018-11-08 11:06:35 +00:00
|
|
|
msg = b'peace at dawn'
|
2018-02-13 20:28:39 +00:00
|
|
|
signature = sig_keypair.sign(msg)
|
2021-06-08 03:05:35 +00:00
|
|
|
assert signature.verify(sig_keypair.pubkey, msg)
|
2017-10-17 20:13:12 +00:00
|
|
|
|
2018-02-13 20:34:31 +00:00
|
|
|
bad_msg = b'bad message'
|
2021-06-08 03:05:35 +00:00
|
|
|
assert not signature.verify(sig_keypair.pubkey, bad_msg)
|
2017-10-17 20:13:12 +00:00
|
|
|
|
|
|
|
|
2018-12-13 21:17:22 +00:00
|
|
|
# TODO: Add test for DecryptingKeypair.decrypt
|