OQS_STATUS OQS_KEX_rlwe_newhope_avx2_alice_0(UNUSED OQS_KEX *k, void **alice_priv, uint8_t **alice_msg, size_t *alice_msg_len) {

	OQS_STATUS ret;

	/* allocate public/private key pair */
	*alice_msg = malloc(NEWHOPE_SENDABYTES);
	if (*alice_msg == NULL) {
		goto err;
	}
	*alice_priv = malloc(sizeof(poly));
	if (*alice_priv == NULL) {
		goto err;
	}

	/* generate public/private key pair */
	newhope_keygen(*alice_msg, (poly *) (*alice_priv));
	*alice_msg_len = NEWHOPE_SENDABYTES;

	ret = OQS_SUCCESS;
	goto cleanup;

err:
	ret = OQS_ERROR;
	OQS_MEM_insecure_free(*alice_msg);
	*alice_msg = NULL;
	OQS_MEM_secure_free(*alice_priv, sizeof(poly));
	*alice_priv = NULL;

cleanup:

	return ret;
}
示例#2
0
文件: cecpq1.cpp 项目: louiz/botan
void CECPQ1_offer(uint8_t send[CECPQ1_OFFER_BYTES],
                  CECPQ1_key* offer_key_output,
                  RandomNumberGenerator& rng)
   {
   offer_key_output->m_x25519 = rng.random_vec(32);
   curve25519_basepoint(send, offer_key_output->m_x25519.data());

   newhope_keygen(send + 32, &offer_key_output->m_newhope,
                  rng, Newhope_Mode::BoringSSL);
   }
示例#3
0
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;
}
示例#4
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;
}
示例#5
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;
}