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;
}
示例#2
0
文件: cecpq1.cpp 项目: louiz/botan
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);
   }
示例#3
0
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;
}
示例#4
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;
}