| Copyright | © Jeremy Bornstein 2019 |
|---|---|
| License | Apache 2.0 |
| Maintainer | jeremy@bornstein.org |
| Stability | experimental |
| Portability | portable |
| Safe Haskell | Safe |
| Language | Haskell2010 |
Crypto.NewHope.CCA_KEM
Description
IND-CCA-secure operations for the NewHope key exchange protocol. The
algorithm name is either NewHope512-CCAKEM or NewHope1024-CCAKEM,
depending on the value of N.
This module contains the public interface. Implementation definitions are in the Crypto.NewHope.Internal.CCA_KEM module.
- Sample usage
-- Alice initiates the exchange seedA = makeRandomSeed fortyEightBytesOfEntropyA -- Seed the pseudorandom number generator (Alice's side) ctxA = randomBytesInit seedA Nothing 256 -- Source of pseudorandomness (pk, skA, ctxA') = keypair ctxA N1024 -- Alice generates a public key and her secret key -- [Alice sends the public key to Bob] -- Bob uses the public key to derive the shared secret along with data to send to Alice seedB = makeRandomSeed fortyEightBytesOfEntropyB -- Seed the pseudorandom number generator (Bob's side) ctxB = randomBytesInit seedB Nothing 256 -- Source of pseudorandomness (sendb, keyB, ctxB') = encrypt ctxB pk -- Bob derives a secret key and creates a response -- [Bob sends sendb back to Alice] keyA = decrypt sendb skA -- Alice derives her copy of the shared secret
Documentation
keypair :: Context -> N -> (PublicKey, SecretKey, Context) Source #
The first step of the NewHope key exchange protocol. Called by
the initiating party, generates PublicKey and SecretKey. The
PublicKey is sent to the receiving party for the next step in the
protocol.
encrypt :: Context -> PublicKey -> (CipherText, SharedSecret, Context) Source #
For the provided PublicKey, generates a CipherText and
SharedSecret. Called by the receiving party, this produces that
party's version of the SharedSecret and also the message to
transmit to the initiating party (CipherText).
decrypt :: CipherText -> SecretKey -> (Bool, SharedSecret) Source #
Called by the party initiating the protocol, this function
generates the SharedSecret for the given CipherText and
SecretKey. The result is the initiating party's copy of the
SecretKey. (In terms of encryption functions per se, it is also a
cleartext value.)