Updated Identity tests
This commit is contained in:
parent
ec90af750d
commit
701c624d0a
@ -20,14 +20,70 @@ fixed_keys = [
|
|||||||
|
|
||||||
class TestIdentity(unittest.TestCase):
|
class TestIdentity(unittest.TestCase):
|
||||||
|
|
||||||
def test_create_from_bytes(self):
|
def test_0_create_from_bytes(self):
|
||||||
for entry in fixed_keys:
|
for entry in fixed_keys:
|
||||||
key, id_hash = entry
|
key, id_hash = entry
|
||||||
i = RNS.Identity.from_bytes(bytes.fromhex(key))
|
i = RNS.Identity.from_bytes(bytes.fromhex(key))
|
||||||
self.assertEqual(i.hash, bytes.fromhex(id_hash))
|
self.assertEqual(i.hash, bytes.fromhex(id_hash))
|
||||||
self.assertEqual(i.get_private_key(), bytes.fromhex(key))
|
self.assertEqual(i.get_private_key(), bytes.fromhex(key))
|
||||||
|
|
||||||
def test_sign(self):
|
def test_1_encrypt(self):
|
||||||
|
print("")
|
||||||
|
|
||||||
|
# Test decryption of known token
|
||||||
|
fid = RNS.Identity.from_bytes(bytes.fromhex(fixed_keys[0][0]))
|
||||||
|
self.assertEqual(fid.hash, bytes.fromhex(fixed_keys[0][1]))
|
||||||
|
plaintext = fid.decrypt(bytes.fromhex(fixed_token))
|
||||||
|
self.assertEqual(plaintext, bytes.fromhex(encrypted_message))
|
||||||
|
|
||||||
|
# Test encrypt and decrypt of random chunks
|
||||||
|
print("Testing random small chunk encrypt/decrypt")
|
||||||
|
b = 0
|
||||||
|
e_t = 0
|
||||||
|
d_t = 0
|
||||||
|
for i in range(1, 500):
|
||||||
|
mlen = i % (RNS.Reticulum.MTU//2) + (RNS.Reticulum.MTU//2)
|
||||||
|
msg = os.urandom(mlen)
|
||||||
|
b += mlen
|
||||||
|
id1 = RNS.Identity()
|
||||||
|
id2 = RNS.Identity(create_keys=False)
|
||||||
|
id2.load_public_key(id1.get_public_key())
|
||||||
|
|
||||||
|
e_start = time.time()
|
||||||
|
token = id2.encrypt(msg)
|
||||||
|
e_t += time.time() - e_start
|
||||||
|
|
||||||
|
d_start = time.time()
|
||||||
|
decrypted = id1.decrypt(token)
|
||||||
|
self.assertEqual(msg, decrypted)
|
||||||
|
d_t += time.time() - d_start
|
||||||
|
|
||||||
|
print("Encrypt chunks < MTU: "+self.size_str(b/e_t, "b")+"ps")
|
||||||
|
print("Decrypt chunks < MTU: "+self.size_str(b/d_t, "b")+"ps")
|
||||||
|
print("")
|
||||||
|
|
||||||
|
# Test encrypt and decrypt of large chunks
|
||||||
|
print("Testing large chunk encrypt/decrypt")
|
||||||
|
mlen = 8*1000*1000
|
||||||
|
for i in range(1, 3):
|
||||||
|
msg = os.urandom(mlen)
|
||||||
|
b += mlen
|
||||||
|
id1 = RNS.Identity()
|
||||||
|
id2 = RNS.Identity(create_keys=False)
|
||||||
|
id2.load_public_key(id1.get_public_key())
|
||||||
|
|
||||||
|
e_start = time.time()
|
||||||
|
token = id2.encrypt(msg)
|
||||||
|
e_t += time.time() - e_start
|
||||||
|
|
||||||
|
d_start = time.time()
|
||||||
|
self.assertEqual(msg, id1.decrypt(token))
|
||||||
|
d_t += time.time() - d_start
|
||||||
|
|
||||||
|
print("Encrypt "+self.size_str(mlen)+" chunks: "+self.size_str(b/e_t, "b")+"ps")
|
||||||
|
print("Decrypt "+self.size_str(mlen)+" chunks: "+self.size_str(b/d_t, "b")+"ps")
|
||||||
|
|
||||||
|
def test_2_sign(self):
|
||||||
print("")
|
print("")
|
||||||
|
|
||||||
# Test known signature
|
# Test known signature
|
||||||
@ -68,58 +124,6 @@ class TestIdentity(unittest.TestCase):
|
|||||||
|
|
||||||
print("Sign/validate 16KB chunks: "+self.size_str(b/t, "b")+"ps")
|
print("Sign/validate 16KB chunks: "+self.size_str(b/t, "b")+"ps")
|
||||||
|
|
||||||
def test_encrypt(self):
|
|
||||||
print("")
|
|
||||||
|
|
||||||
# Test decryption of known token
|
|
||||||
fid = RNS.Identity.from_bytes(bytes.fromhex(fixed_keys[0][0]))
|
|
||||||
self.assertEqual(fid.hash, bytes.fromhex(fixed_keys[0][1]))
|
|
||||||
plaintext = fid.decrypt(bytes.fromhex(fixed_token))
|
|
||||||
self.assertEqual(plaintext, bytes.fromhex(encrypted_message))
|
|
||||||
|
|
||||||
# Test encrypt and decrypt of random chunks
|
|
||||||
b = 0
|
|
||||||
e_t = 0
|
|
||||||
d_t = 0
|
|
||||||
for i in range(1, 500):
|
|
||||||
mlen = i % (RNS.Reticulum.MTU//2) + (RNS.Reticulum.MTU//2)
|
|
||||||
msg = os.urandom(mlen)
|
|
||||||
b += mlen
|
|
||||||
id1 = RNS.Identity()
|
|
||||||
id2 = RNS.Identity(create_keys=False)
|
|
||||||
id2.load_public_key(id1.get_public_key())
|
|
||||||
|
|
||||||
e_start = time.time()
|
|
||||||
token = id2.encrypt(msg)
|
|
||||||
e_t += time.time() - e_start
|
|
||||||
|
|
||||||
d_start = time.time()
|
|
||||||
self.assertEqual(msg, id1.decrypt(token))
|
|
||||||
d_t += time.time() - d_start
|
|
||||||
|
|
||||||
print("Encrypt chunks < MTU: "+self.size_str(b/e_t, "b")+"ps")
|
|
||||||
print("Decrypt chunks < MTU: "+self.size_str(b/d_t, "b")+"ps")
|
|
||||||
print("")
|
|
||||||
|
|
||||||
# Test encrypt and decrypt of large chunks
|
|
||||||
mlen = 8*1000*1000
|
|
||||||
for i in range(1, 8):
|
|
||||||
msg = os.urandom(mlen)
|
|
||||||
b += mlen
|
|
||||||
id1 = RNS.Identity()
|
|
||||||
id2 = RNS.Identity(create_keys=False)
|
|
||||||
id2.load_public_key(id1.get_public_key())
|
|
||||||
|
|
||||||
e_start = time.time()
|
|
||||||
token = id2.encrypt(msg)
|
|
||||||
e_t += time.time() - e_start
|
|
||||||
|
|
||||||
d_start = time.time()
|
|
||||||
self.assertEqual(msg, id1.decrypt(token))
|
|
||||||
d_t += time.time() - d_start
|
|
||||||
|
|
||||||
print("Encrypt "+self.size_str(mlen)+" chunks: "+self.size_str(b/e_t, "b")+"ps")
|
|
||||||
print("Decrypt "+self.size_str(mlen)+" chunks: "+self.size_str(b/d_t, "b")+"ps")
|
|
||||||
|
|
||||||
def size_str(self, num, suffix='B'):
|
def size_str(self, num, suffix='B'):
|
||||||
units = ['','K','M','G','T','P','E','Z']
|
units = ['','K','M','G','T','P','E','Z']
|
||||||
@ -141,4 +145,4 @@ class TestIdentity(unittest.TestCase):
|
|||||||
return "%.2f%s%s" % (num, last_unit, suffix)
|
return "%.2f%s%s" % (num, last_unit, suffix)
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
unittest.main(verbosity=1)
|
unittest.main(verbosity=2)
|
||||||
|
Loading…
Reference in New Issue
Block a user