Exemple #1
0
static uint32_t Hacl_Box_ZeroPad_crypto_box_beforenm(uint8_t *k1, uint8_t *pk, uint8_t *sk)
{
  uint8_t tmp[48U] = { 0U };
  uint8_t *hsalsa_k = tmp;
  uint8_t *hsalsa_n = tmp + (uint32_t)32U;
  Hacl_Curve25519_crypto_scalarmult(hsalsa_k, sk, pk);
  Hacl_Salsa20_hsalsa20(k1, hsalsa_k, hsalsa_n);
  return (uint32_t)0U;
}
Exemple #2
0
/**
 * Generate private and public key pairs for future use.
 */
void gec_generate_ephemeral_keys(struct gec_privkey *sk)
{
  for (uint16_t i = 0; i < PPRZ_KEY_LEN; i += sizeof(uint32_t)) {
    uint32_t tmp = rng_wait_and_get();
    sk->priv[i] = (uint8_t) tmp;
    sk->priv[i + 1] = (uint8_t)(tmp >> 8);
    sk->priv[i + 2] = (uint8_t)(tmp >> 16);
    sk->priv[i + 3] = (uint8_t)(tmp >> 24);
  }
  uint8_t basepoint[32] = {0};
  basepoint[0] = 9; // default basepoint
  Hacl_Curve25519_crypto_scalarmult(sk->pub, sk->priv, basepoint);
  sk->ready = true;
}
Exemple #3
0
static uint32_t
Hacl_Box_ZeroPad_crypto_box_detached(
  uint8_t *c,
  uint8_t *mac,
  uint8_t *m,
  uint64_t mlen,
  uint8_t *n1,
  uint8_t *pk,
  uint8_t *sk
)
{
  uint8_t key[80U] = { 0U };
  uint8_t *k1 = key;
  uint8_t *subkey = key + (uint32_t)32U;
  uint8_t *hsalsa_n = key + (uint32_t)64U;
  Hacl_Curve25519_crypto_scalarmult(k1, sk, pk);
  Hacl_Salsa20_hsalsa20(subkey, k1, hsalsa_n);
  uint32_t z = Hacl_SecretBox_ZeroPad_crypto_secretbox_detached(c, mac, m, mlen, n1, subkey);
  return z;
}