示例#1
0
 def test_encrypt_decrypt(self):
     pubpke = CHKPKE(pubkey=self.pke.pubkey())
     self.assertIsNotNone(self.pke.privkey(12,12))
     with self.assertRaises(ValueError):
         cpriv = pubpke.privkey(12,12)
     e = Element(self.pke).random()
     m = pubpke.encrypt(e, 12);
     f = self.pke.decrypt(m, 12);
     self.assertEqual(e.to_bytes(), f.to_bytes())
     for i in range(0,4096):
         if i != 12:
             g = self.pke.decrypt(m, i);
             self.assertNotEqual(e.to_bytes(), g.to_bytes())
     with self.assertRaises(ValueError):
         h = pubpke.decrypt(m, 12)
示例#2
0
if clargs.file is None:
    message = sys.stdin.read()
else:
    with open(clargs.file, 'r') as msgfile:
        message = msgfile.read()

if (message is None) or (len(message) == 0):
    sys.exit('Error: Plaintext length 0, aborting.')

# derive a random shared key as sha256(Element().random().to_bytes)
e = Element(pubkey).random()

chachakey = sha256(e.to_bytes()).digest()

# encrypt shared secret
enckey = pubkey.encrypt(e, clargs.interval)

# generate a random 64 bit
nonce = pysodium.randombytes(
    pysodium.crypto_aead_chacha20poly1305_ietf_NPUBBYTES)
assert pysodium.crypto_aead_chacha20poly1305_ietf_NPUBBYTES == 12

# write additional data into a single DER structure
encoder = asn1.Encoder()
encoder.start()
encoder.enter(asn1.Numbers.Sequence)
encoder.write(enckey, asn1.Numbers.OctetString)
encoder.write(nonce, asn1.Numbers.OctetString)
encoder.write(clargs.interval, asn1.Numbers.Integer)
encoder.leave()
AD = encoder.output()