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; }
/** * 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; }
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; }