Botan  2.4.0
Crypto and TLS for C++11
newhope.h
Go to the documentation of this file.
1 /*
2 * NEWHOPE Ring-LWE scheme
3 * Based on the public domain reference implementation by the
4 * designers (https://github.com/tpoeppelmann/newhope)
5 *
6 * Further changes
7 * (C) 2016 Jack Lloyd
8 *
9 * Botan is released under the Simplified BSD License (see license.txt)
10 */
11 
12 #ifndef BOTAN_NEWHOPE_H_
13 #define BOTAN_NEWHOPE_H_
14 
15 #include <botan/mem_ops.h>
16 
17 namespace Botan {
18 
19 class RandomNumberGenerator;
20 
21 /*
22 * WARNING: This API is preliminary and will change
23 * Currently pubkey.h does not support a 2-phase KEM scheme of
24 * the sort NEWHOPE exports.
25 */
26 
27 // TODO: change to just a secure_vector
28 class newhope_poly final
29  {
30  public:
31  uint16_t coeffs[1024];
32  ~newhope_poly() { secure_scrub_memory(coeffs, sizeof(coeffs)); }
33  };
34 
36  {
39 
43 
46 
50  };
51 
52 /**
53 * This chooses the XOF + hash for NewHope
54 * The official NewHope specification and reference implementation use
55 * SHA-3 and SHAKE-128. BoringSSL instead uses SHA-256 and AES-128 in
56 * CTR mode. CECPQ1 (x25519+NewHope) always uses BoringSSL's mode
57 */
58 enum class Newhope_Mode
59  {
60  SHA3,
61  BoringSSL
62  };
63 
64 // offer
65 void BOTAN_PUBLIC_API(2,0) newhope_keygen(uint8_t send[NEWHOPE_SENDABYTES],
66  newhope_poly* sk,
69 
70 // accept
71 void BOTAN_PUBLIC_API(2,0) newhope_sharedb(uint8_t sharedkey[NEWHOPE_SHARED_KEY_BYTES],
72  uint8_t send[],
73  const uint8_t* received,
76 
77 // finish
78 void BOTAN_PUBLIC_API(2,0) newhope_shareda(uint8_t sharedkey[NEWHOPE_SHARED_KEY_BYTES],
79  const newhope_poly* ska,
80  const uint8_t* received,
82 
83 }
84 
85 #endif
Newhope_Mode
Definition: newhope.h:58
void newhope_keygen(uint8_t *send, poly *sk, RandomNumberGenerator &rng, Newhope_Mode mode)
Definition: newhope.cpp:712
#define BOTAN_PUBLIC_API(maj, min)
Definition: compiler.h:27
void newhope_sharedb(uint8_t *sharedkey, uint8_t *send, const uint8_t *received, RandomNumberGenerator &rng, Newhope_Mode mode)
Definition: newhope.cpp:734
Definition: alg_id.cpp:13
void secure_scrub_memory(void *ptr, size_t n)
Definition: os_utils.cpp:37
uint16_t coeffs[1024]
Definition: newhope.h:31
void newhope_shareda(uint8_t sharedkey[], const poly *sk, const uint8_t received[], Newhope_Mode mode)
Definition: newhope.cpp:771
Newhope_Params
Definition: newhope.h:35