OQS_STATUS OQS_KEX_rlwe_newhope_avx2_alice_1(UNUSED OQS_KEX *k, const void *alice_priv, const uint8_t *bob_msg, const size_t bob_msg_len, uint8_t **key, size_t *key_len) { OQS_STATUS ret; if (bob_msg_len != NEWHOPE_SENDBBYTES) { goto err; } /* allocate session key */ *key = malloc(32); if (*key == NULL) { goto err; } /* generate Alice's session key */ newhope_shareda(*key, (poly *) alice_priv, bob_msg); *key_len = 32; ret = OQS_SUCCESS; goto cleanup; err: ret = OQS_ERROR; OQS_MEM_secure_free(*key, *key_len); *key = NULL; cleanup: return ret; }
void CECPQ1_finish(uint8_t shared_key[CECPQ1_SHARED_KEY_BYTES], const CECPQ1_key& offer_key, const uint8_t received[CECPQ1_ACCEPT_BYTES]) { curve25519_donna(shared_key, offer_key.m_x25519.data(), received); newhope_shareda(shared_key + 32, &offer_key.m_newhope, received + 32, Newhope_Mode::BoringSSL); }
int main(void) { clock_setup(); gpio_setup(); usart_setup(115200); rng_setup(); int i; unsigned char output[32]; poly sk; unsigned char key_a[32], key_b[32]; unsigned char senda[NEWHOPE_SENDABYTES]; unsigned char sendb[NEWHOPE_SENDBBYTES]; for(i=0;i<NTESTS;i++) { /*send_USART_str((unsigned char *)"starting to keygen\n");*/ newhope_keygen(senda,&sk); /*send_USART_str((unsigned char *)"starting to sharedb\n");*/ newhope_sharedb(key_a,sendb,senda); /*send_USART_str((unsigned char *)"starting to shareda\n");*/ newhope_shareda(key_b,&sk,sendb); if(memcmp(key_a,key_b,32)) { sprintf((char *)output, "Error in keys"); send_USART_str(output); } } sprintf((char *)output, "done!"); send_USART_str(output); signal_host(); return 0; }
int main(void) { poly sk_a; unsigned char key_a[32], key_b[32]; unsigned char senda[NTESTS*NEWHOPE_SENDABYTES]; unsigned char sendb[NTESTS*NEWHOPE_SENDBBYTES]; unsigned char seed[NEWHOPE_SEEDBYTES]; int i; for(i=0; i<NTESTS; i++) { t[i] = cpucycles(); randombytes(seed, NEWHOPE_SEEDBYTES); poly_uniform(&sk_a, seed); } print_results("poly_uniform: ", t, NTESTS); for(i=0; i<NTESTS; i++) { t[i] = cpucycles(); poly_ntt(&sk_a); } print_results("poly_ntt: ", t, NTESTS); for(i=0; i<NTESTS; i++) { t[i] = cpucycles(); poly_invntt(&sk_a); } print_results("poly_invntt: ", t, NTESTS); for(i=0; i<NTESTS; i++) { t[i] = cpucycles(); poly_getnoise(&sk_a,seed,0); } print_results("poly_getnoise: ", t, NTESTS); for(i=0; i<NTESTS; i++) { t[i] = cpucycles(); helprec(&sk_a, &sk_a, seed, 0); } print_results("helprec: ", t, NTESTS); for(i=0; i<NTESTS; i++) { t[i] = cpucycles(); rec(key_a, &sk_a, &sk_a); } print_results("rec: ", t, NTESTS); for(i=0; i<NTESTS; i++) { t[i] = cpucycles(); newhope_keygen(senda+i*NEWHOPE_SENDABYTES, &sk_a); } print_results("newhope_keygen: ", t, NTESTS); for(i=0; i<NTESTS; i++) { t[i] = cpucycles(); newhope_sharedb(key_b, sendb+i*NEWHOPE_SENDBBYTES, senda+i*NEWHOPE_SENDABYTES); } print_results("newhope_sharedb: ", t, NTESTS); for(i=0; i<NTESTS; i++) { t[i] = cpucycles(); newhope_shareda(key_a, &sk_a, sendb+i*NEWHOPE_SENDBBYTES); } print_results("newhope_shareda: ", t, NTESTS); return 0; }