nucypher/tests/keystore/test_keystore.py

72 lines
2.7 KiB
Python
Raw Normal View History

2017-10-11 20:02:27 +00:00
import unittest
2017-10-20 22:20:53 +00:00
import sha3
2017-11-03 00:10:06 +00:00
from sqlalchemy import create_engine
from nkms.keystore.db import Base
2017-10-11 20:02:27 +00:00
from nkms.keystore import keystore, keypairs
class TestKeyStore(unittest.TestCase):
def setUp(self):
2017-11-03 00:50:09 +00:00
engine = create_engine('sqlite:///:memory:')
Base.metadata.create_all(engine)
self.ks = keystore.KeyStore(engine)
2017-10-11 20:02:27 +00:00
def test_ecies_keypair_generation(self):
keypair = self.ks.gen_ecies_keypair()
self.assertEqual(keypairs.EncryptingKeypair, type(keypair))
self.assertEqual(bytes, type(keypair.privkey))
self.assertEqual(bytes, type(keypair.pubkey))
def test_ecdsa_keypair_generation(self):
keypair = self.ks.gen_ecdsa_keypair()
self.assertEqual(keypairs.SigningKeypair, type(keypair))
self.assertEqual(bytes, type(keypair.privkey))
self.assertEqual(bytes, type(keypair.pubkey))
2017-11-03 00:10:06 +00:00
def test_sqlite_keystore(self):
2017-10-20 22:20:53 +00:00
keypair = self.ks.gen_ecies_keypair()
self.assertEqual(keypairs.EncryptingKeypair, type(keypair))
self.assertEqual(bytes, type(keypair.privkey))
self.assertEqual(bytes, type(keypair.pubkey))
2017-11-03 00:10:06 +00:00
# Test add pubkey
2017-10-20 22:20:53 +00:00
fingerprint_pub = self.ks.add_key(keypair, store_pub=True)
self.assertEqual(bytes, type(fingerprint_pub))
self.assertEqual(64, len(fingerprint_pub))
key_hash = sha3.keccak_256(keypair.pubkey).hexdigest().encode()
self.assertEqual(key_hash, fingerprint_pub)
2017-11-03 00:10:06 +00:00
# Test add privkey
2017-10-20 22:20:53 +00:00
fingerprint_priv = self.ks.add_key(keypair, store_pub=False)
self.assertEqual(bytes, type(fingerprint_priv))
self.assertEqual(64, len(fingerprint_priv))
key_hash = sha3.keccak_256(keypair.privkey).hexdigest().encode()
self.assertEqual(key_hash, fingerprint_priv)
2017-11-03 00:10:06 +00:00
# Test get pubkey
2017-10-20 22:20:53 +00:00
keypair_pub = self.ks.get_key(fingerprint_pub)
self.assertEqual(keypairs.EncryptingKeypair, type(keypair_pub))
self.assertTrue(keypair_pub.public_only)
self.assertEqual(keypair.pubkey, keypair_pub.pubkey)
2017-11-03 00:10:06 +00:00
# Test get privkey
2017-10-20 22:20:53 +00:00
keypair_priv = self.ks.get_key(fingerprint_priv)
self.assertEqual(keypairs.EncryptingKeypair, type(keypair_priv))
self.assertFalse(keypair_priv.public_only)
self.assertEqual(keypair.privkey, keypair_priv.privkey)
self.assertIsNotNone(keypair_priv.pubkey)
self.assertEqual(keypair.pubkey, keypair_priv.pubkey)
2017-10-11 20:02:27 +00:00
2017-11-03 00:10:06 +00:00
# Test del pubkey
2017-10-20 22:20:53 +00:00
self.ks.del_key(fingerprint_pub)
2017-10-23 20:24:17 +00:00
with self.assertRaises(keystore.KeyNotFound):
key = self.ks.get_key(fingerprint_pub)
2017-10-11 20:02:27 +00:00
2017-11-03 00:10:06 +00:00
# Test del privkey
2017-10-20 22:20:53 +00:00
self.ks.del_key(fingerprint_priv)
2017-10-23 20:24:17 +00:00
with self.assertRaises(keystore.KeyNotFound):
key = self.ks.get_key(fingerprint_priv)