void CECPQ1_accept(uint8_t shared_key[CECPQ1_SHARED_KEY_BYTES], uint8_t send[CECPQ1_ACCEPT_BYTES], const uint8_t received[CECPQ1_OFFER_BYTES], RandomNumberGenerator& rng) { secure_vector<byte> x25519_key = rng.random_vec(32); curve25519_basepoint(send, x25519_key.data()); curve25519_donna(shared_key, x25519_key.data(), received); newhope_sharedb(shared_key + 32, send + 32, received + 32, rng, Newhope_Mode::BoringSSL); }
int main(void) { poly sk_a; unsigned char key_b[32]; unsigned char senda[NEWHOPE_SENDABYTES]; unsigned char sendb[NEWHOPE_SENDBBYTES]; unsigned long i; long t = 0; for(i=0;i<NRUNS;i++) { newhope_keygen(senda, &sk_a); newhope_sharedb(key_b, sendb, senda); t += hamming32(key_b); } printf("ones: %ld\n",t); printf("zeroes: %ld\n",256*NRUNS-t); printf("diff: %ld\n",256*NRUNS-2*t); return 0; }
OQS_STATUS OQS_KEX_rlwe_newhope_avx2_bob(UNUSED OQS_KEX *k, const uint8_t *alice_msg, const size_t alice_msg_len, uint8_t **bob_msg, size_t *bob_msg_len, uint8_t **key, size_t *key_len) { OQS_STATUS ret; if (alice_msg_len != NEWHOPE_SENDABYTES) { goto err; } /* allocate message and session key */ *bob_msg = malloc(NEWHOPE_SENDBBYTES); if (*bob_msg == NULL) { goto err; } *key = malloc(32); if (*key == NULL) { goto err; } /* generate Bob's response */ newhope_sharedb(*key, *bob_msg, alice_msg); *bob_msg_len = NEWHOPE_SENDBBYTES; *key_len = 32; ret = OQS_SUCCESS; goto cleanup; err: ret = OQS_ERROR; OQS_MEM_insecure_free(*bob_msg); *bob_msg = NULL; OQS_MEM_secure_free(*key, *key_len); *key = NULL; cleanup: return ret; }
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; }