Code review of NewHope wrapper.

This commit is contained in:
Douglas Stebila 2016-10-17 21:07:39 -04:00
parent c6a9fae2ac
commit 62f630ff15
3 changed files with 21 additions and 15 deletions

View File

@ -51,11 +51,9 @@ $(KEX_RLWE_BCNS15_OBJS): $(KEX_RLWE_BCNS15_HEADERS)
# KEX_NEWHOPE # KEX_NEWHOPE
KEX_RLWE_NEWHOPE_OBJS := $(addprefix objs/kex_rlwe_newhope/, \ KEX_RLWE_NEWHOPE_OBJS := $(addprefix objs/kex_rlwe_newhope/, kex_rlwe_newhope.o)
kex_rlwe_newhope.o)
KEX_RLWE_NEWHOPE_HEADERS := $(addprefix src/kex_rlwe_newhope/, \ KEX_RLWE_NEWHOPE_HEADERS := $(addprefix src/kex_rlwe_newhope/, kex_rlwe_newhope.h fips202.c newhope.c params.h poly.c precomp.c)
kex_rlwe_newhope.h)
$(KEX_RLWE_NEWHOPE_OBJS): $(KEX_RLWE_NEWHOPE_HEADERS) $(KEX_RLWE_NEWHOPE_OBJS): $(KEX_RLWE_NEWHOPE_HEADERS)

View File

@ -371,7 +371,7 @@ static void keccak_squeezeblocks(unsigned char *h, unsigned long long int nblock
} }
} }
void shake128_absorb(uint64_t *s, const unsigned char *input, unsigned int inputByteLen) { static void shake128_absorb(uint64_t *s, const unsigned char *input, unsigned int inputByteLen) {
keccak_absorb(s, SHAKE128_RATE, input, inputByteLen, 0x1F); keccak_absorb(s, SHAKE128_RATE, input, inputByteLen, 0x1F);
} }

View File

@ -18,6 +18,9 @@ OQS_KEX *OQS_KEX_rlwe_newhope_new(OQS_RAND *rand) {
k->method_name = strdup("RLWE NewHope"); k->method_name = strdup("RLWE NewHope");
k->estimated_classical_security = 229; // http://eprint.iacr.org/2015/1092.pdf Table 1 NewHope dual known classical k->estimated_classical_security = 229; // http://eprint.iacr.org/2015/1092.pdf Table 1 NewHope dual known classical
k->estimated_quantum_security = 206; // http://eprint.iacr.org/2015/1092.pdf Table 1 NewHope dual known quantum k->estimated_quantum_security = 206; // http://eprint.iacr.org/2015/1092.pdf Table 1 NewHope dual known quantum
k->seed = NULL;
k->seed_len = 0;
k->named_parameters = 0;
k->rand = rand; k->rand = rand;
k->params = NULL; k->params = NULL;
k->alice_0 = &OQS_KEX_rlwe_newhope_alice_0; k->alice_0 = &OQS_KEX_rlwe_newhope_alice_0;
@ -32,9 +35,6 @@ int OQS_KEX_rlwe_newhope_alice_0(UNUSED OQS_KEX *k, void **alice_priv, uint8_t *
int ret; int ret;
*alice_priv = NULL;
*alice_msg = NULL;
/* allocate public/private key pair */ /* allocate public/private key pair */
*alice_msg = malloc(NEWHOPE_SENDABYTES); *alice_msg = malloc(NEWHOPE_SENDABYTES);
if (*alice_msg == NULL) goto err; if (*alice_msg == NULL) goto err;
@ -51,7 +51,10 @@ int OQS_KEX_rlwe_newhope_alice_0(UNUSED OQS_KEX *k, void **alice_priv, uint8_t *
err: err:
ret = 0; ret = 0;
free(*alice_msg); free(*alice_msg);
*alice_msg = NULL;
free(*alice_priv); free(*alice_priv);
*alice_priv = NULL;
cleanup: cleanup:
return ret; return ret;
@ -62,9 +65,6 @@ int OQS_KEX_rlwe_newhope_bob(UNUSED OQS_KEX *k, const uint8_t *alice_msg, const
int ret; int ret;
*bob_msg = NULL;
*key = NULL;
if (alice_msg_len != NEWHOPE_SENDABYTES) goto err; if (alice_msg_len != NEWHOPE_SENDABYTES) goto err;
/* allocate message and session key */ /* allocate message and session key */
@ -84,7 +84,10 @@ int OQS_KEX_rlwe_newhope_bob(UNUSED OQS_KEX *k, const uint8_t *alice_msg, const
err: err:
ret = 0; ret = 0;
free(*bob_msg); free(*bob_msg);
*bob_msg = NULL;
free(*key); free(*key);
*key = NULL;
cleanup: cleanup:
return ret; return ret;
@ -95,8 +98,6 @@ int OQS_KEX_rlwe_newhope_alice_1(UNUSED OQS_KEX *k, const void *alice_priv, cons
int ret; int ret;
*key = NULL;
if (bob_msg_len != NEWHOPE_SENDBBYTES) goto err; if (bob_msg_len != NEWHOPE_SENDBBYTES) goto err;
/* allocate session key */ /* allocate session key */
@ -113,6 +114,8 @@ int OQS_KEX_rlwe_newhope_alice_1(UNUSED OQS_KEX *k, const void *alice_priv, cons
err: err:
ret = 0; ret = 0;
free(*key); free(*key);
*key = NULL;
cleanup: cleanup:
return ret; return ret;
@ -120,10 +123,15 @@ cleanup:
} }
void OQS_KEX_rlwe_newhope_alice_priv_free(UNUSED OQS_KEX *k, void *alice_priv) { void OQS_KEX_rlwe_newhope_alice_priv_free(UNUSED OQS_KEX *k, void *alice_priv) {
free(alice_priv); if (alice_priv) {
free(alice_priv);
}
} }
void OQS_KEX_rlwe_newhope_free(OQS_KEX *k) { void OQS_KEX_rlwe_newhope_free(OQS_KEX *k) {
if (k) free(k->method_name); if (k) {
free(k->method_name);
k->method_name = NULL;
}
free(k); free(k);
} }