31#include "sodium/crypto_scalarmult.h"
32#include "sodium/crypto_scalarmult_curve25519.h"
33#include "sodium/utils.h"
52 const void *
salt,
size_t salt_len,
53 const void *label,
size_t label_len,
54 const void *ikm,
size_t ikm_len,
55 const uint8_t *suite_id,
size_t suite_id_len,
58 size_t labeled_ikm_len = strlen (ctx_str) + suite_id_len
59 + label_len + ikm_len;
60 uint8_t labeled_ikm[labeled_ikm_len];
61 uint8_t *tmp = labeled_ikm;
64 memcpy (tmp, ctx_str, strlen (ctx_str));
65 tmp += strlen (ctx_str);
66 memcpy (tmp, suite_id, suite_id_len);
68 memcpy (tmp, label, label_len);
70 memcpy (tmp, ikm, ikm_len);
74 labeled_ikm, labeled_ikm_len);
96 const char *label,
size_t label_len,
97 const void *
info,
size_t info_len,
98 const uint8_t *suite_id,
size_t suite_id_len,
102 uint8_t labeled_info[2 + strlen (ctx_str) + suite_id_len + label_len
104 uint8_t *tmp = labeled_info;
105 uint16_t out_len_nbo = htons (out_len);
109 memcpy (tmp, &out_len_nbo, 2);
111 memcpy (tmp, ctx_str, strlen (ctx_str));
112 tmp += strlen (ctx_str);
113 memcpy (tmp, suite_id, suite_id_len);
115 memcpy (tmp, label, label_len);
117 memcpy (tmp,
info, info_len);
119 labeled_info,
sizeof labeled_info, NULL);
126 const char *extract_ctx,
127 const char *expand_ctx,
128 const void*extract_lbl,
size_t
130 const void*expand_lbl,
size_t
132 const uint8_t *kem_context,
133 size_t kem_context_len,
134 const uint8_t *suite_id,
size_t
143 extract_lbl, extract_lbl_len,
145 suite_id, suite_id_len,
149 expand_lbl, expand_lbl_len,
150 kem_context, kem_context_len,
151 suite_id, suite_id_len,
152 shared_secret,
sizeof *shared_secret);
175 uint8_t kem_context[
sizeof *c +
sizeof *pkR +
sizeof pkS];
195 memcpy (kem_context, c,
sizeof *c);
196 memcpy (kem_context +
sizeof *c, pkR,
sizeof *pkR);
197 memcpy (kem_context +
sizeof *c +
sizeof *pkR, &pkS,
sizeof pkS);
203 "eae_prk", strlen (
"eae_prk"),
204 "shared_secret", strlen (
"shared_secret"),
205 kem_context,
sizeof kem_context,
206 suite_id, suite_id_len,
225 pkR, skS, c, skE, shared_secret);
253 uint8_t kem_context[
sizeof *c +
sizeof *pkR];
260 "HPKE KEM encaps: Validation error\n");
266 memcpy (kem_context, c,
sizeof *c);
267 memcpy (kem_context +
sizeof *c, pkR,
sizeof *pkR);
273 "eae_prk", strlen (
"eae_prk"),
274 "shared_secret", strlen (
"shared_secret"),
275 kem_context,
sizeof kem_context,
276 suite_id, suite_id_len,
294 pkR,
enc, skE, shared_secret);
319 if (0 != crypto_sign_ed25519_pk_to_curve25519 (pkR.
q_y,
pub->
q_y))
334 uint8_t pkR[crypto_scalarmult_BYTES];
335 uint8_t kem_context[
sizeof *c +
sizeof pkR +
sizeof *pkS];
349 crypto_scalarmult_curve25519_base (pkR, skR->
d);
351 memcpy (kem_context, c,
sizeof *c);
352 memcpy (kem_context +
sizeof *c, pkR,
sizeof pkR);
353 memcpy (kem_context +
sizeof *c +
sizeof pkR,
360 "eae_prk", strlen (
"eae_prk"),
361 "shared_secret", strlen (
"shared_secret"),
362 kem_context,
sizeof kem_context,
375 uint8_t kem_context[
sizeof *c + crypto_scalarmult_curve25519_BYTES];
376 uint8_t pkR[crypto_scalarmult_BYTES];
387 crypto_scalarmult_curve25519_base (pkR, skR->
d);
389 memcpy (kem_context, c,
sizeof *c);
390 memcpy (kem_context +
sizeof *c, pkR,
sizeof pkR);
396 "eae_prk", strlen (
"eae_prk"),
397 "shared_secret", strlen (
"shared_secret"),
398 kem_context,
sizeof kem_context,
415 if (0 != crypto_sign_ed25519_sk_to_curve25519 (skR.
d, priv->
d))
424 uint8_t random_tweak,
442 pkR, c, (
const struct
454 uint8_t random_tweak;
465 &skE, shared_secret);
478 uint8_t kem_context[
sizeof *
r + crypto_scalarmult_curve25519_BYTES];
479 uint8_t pkR[crypto_scalarmult_BYTES];
488 crypto_scalarmult_curve25519_base (pkR, skR->
d);
489 memcpy (kem_context,
r,
sizeof *
r);
490 memcpy (kem_context +
sizeof *
r, pkR,
sizeof pkR);
496 "eae_prk", strlen (
"eae_prk"),
497 "shared_secret", strlen (
"shared_secret"),
498 kem_context,
sizeof kem_context,
548 const uint8_t *psk,
size_t psk_len,
549 const uint8_t *psk_id,
size_t psk_id_len)
554 got_psk = (0 != psk_len);
555 got_psk_id = (0 != psk_id_len);
557 if (got_psk != got_psk_id)
560 "Inconsistent PSK inputs\n");
569 "PSK input provided when not needed\n");
577 "Missing required PSK input\n");
588 const uint8_t *
info,
size_t info_len,
589 const uint8_t *psk,
size_t psk_len,
590 const uint8_t *psk_id,
size_t psk_id_len,
596 uint8_t key_schedule_context[1 +
sizeof info_hash * 2];
597 uint8_t suite_id[strlen (
"HPKE") + 6];
598 uint16_t kem_id = htons (32);
599 uint16_t kdf_id = htons (1);
600 uint16_t aead_id = htons (3);
604 memcpy (suite_id,
"HPKE", 4);
605 memcpy (suite_id + 4, &kem_id, 2);
606 memcpy (suite_id + 6, &kdf_id, 2);
607 memcpy (suite_id + 8, &aead_id, 2);
613 "psk_id_hash", strlen (
"psk_id_hash"),
615 suite_id,
sizeof suite_id, &psk_id_hash))
618 "info_hash", strlen (
"info_hash"),
620 suite_id,
sizeof suite_id, &info_hash))
622 memcpy (key_schedule_context, &
mode, 1);
623 memcpy (key_schedule_context + 1, &psk_id_hash,
sizeof psk_id_hash);
624 memcpy (key_schedule_context + 1 +
sizeof psk_id_hash,
625 &info_hash,
sizeof info_hash);
627 shared_secret,
sizeof *shared_secret,
628 "secret", strlen (
"secret"),
630 suite_id,
sizeof suite_id, &secret))
636 "key", strlen (
"key"),
637 &key_schedule_context,
638 sizeof key_schedule_context,
639 suite_id,
sizeof suite_id,
640 ctx->key,
sizeof ctx->key))
646 "base_nonce", strlen (
"base_nonce"),
647 &key_schedule_context,
648 sizeof key_schedule_context,
649 suite_id,
sizeof suite_id,
650 ctx->base_nonce,
sizeof ctx->base_nonce))
656 "exp", strlen (
"exp"),
657 &key_schedule_context,
658 sizeof key_schedule_context,
659 suite_id,
sizeof suite_id,
660 &
ctx->exporter_secret,
661 sizeof ctx->exporter_secret))
676 const uint8_t *
info,
size_t info_len,
677 const uint8_t *psk,
size_t psk_len,
678 const uint8_t *psk_id,
size_t psk_id_len,
698 uint8_t random_tweak;
739 const uint8_t *
info,
size_t info_len,
766 const uint8_t *
info,
size_t info_len,
767 const uint8_t *psk,
size_t psk_len,
768 const uint8_t *psk_id,
size_t psk_id_len,
820 const uint8_t *
info,
size_t info_len,
828 NULL, 0, NULL, 0,
ctx);
835 if (
ctx->seq >= UINT64_MAX)
855 memset (&nonce[i],
ctx->base_nonce[i], 1);
857 nonce[i] =
ctx->base_nonce[i] ^ ((uint8_t*) &
ctx->seq)[j++];
864 const uint8_t*aad,
size_t aad_len,
865 const uint8_t *pt,
size_t pt_len,
866 uint8_t *ct,
unsigned long long *ct_len_p)
872 "HPKE: Wrong role; called as receiver (%d)!\n",
877 crypto_aead_chacha20poly1305_ietf_encrypt (ct, ct_len_p,
886 "HPKE: Seq increment failed!\n");
895 const uint8_t*aad,
size_t aad_len,
896 const uint8_t *ct,
size_t ct_len,
897 uint8_t *pt,
unsigned long long *pt_len)
903 "HPKE: Wrong role; called as sender (%d)!\n",
908 if (0 != crypto_aead_chacha20poly1305_ietf_decrypt (pt, pt_len,
921 "HPKE: Seq increment failed!\n");
930 const uint8_t *
info,
size_t info_len,
931 const uint8_t*aad,
size_t aad_len,
932 const uint8_t *pt,
size_t pt_len,
933 uint8_t *ct,
unsigned long long *ct_len_p)
940 ct_off = (uint8_t*) &
enc[1];
946 "HPKE: Sender setup failed!\n");
960 const uint8_t *
info,
size_t info_len,
961 const uint8_t*aad,
size_t aad_len,
962 const uint8_t *ct,
size_t ct_len,
963 uint8_t *pt,
unsigned long long *pt_len_p)
970 ct_off = (uint8_t*) &
enc[1];
976 "HPKE: Receiver setup failed!\n");
982 ct_len -
sizeof *
enc,
995 if (0 != crypto_sign_ed25519_pk_to_curve25519 (x25519->
q_y,
1000 if (0 != crypto_sign_ed25519_pk_to_curve25519 (x25519->
q_y,
1016 switch (ntohl (sk->
type))
1023 if (0 != crypto_sign_ed25519_sk_to_curve25519 (x25519->
d,
static enum GNUNET_GenericReturnValue authkem_encaps_norand(uint8_t *suite_id, size_t suite_id_len, const struct GNUNET_CRYPTO_EcdhePublicKey *pkR, const struct GNUNET_CRYPTO_EcdhePrivateKey *skS, struct GNUNET_CRYPTO_HpkeEncapsulation *c, const struct GNUNET_CRYPTO_EcdhePrivateKey *skE, struct GNUNET_ShortHashCode *shared_secret)
static void compute_nonce(struct GNUNET_CRYPTO_HpkeContext *ctx, uint8_t *nonce)
static enum GNUNET_GenericReturnValue key_schedule(enum GNUNET_CRYPTO_HpkeRole role, enum GNUNET_CRYPTO_HpkeMode mode, const struct GNUNET_ShortHashCode *shared_secret, const uint8_t *info, size_t info_len, const uint8_t *psk, size_t psk_len, const uint8_t *psk_id, size_t psk_id_len, struct GNUNET_CRYPTO_HpkeContext *ctx)
static enum GNUNET_GenericReturnValue increment_seq(struct GNUNET_CRYPTO_HpkeContext *ctx)
static enum GNUNET_GenericReturnValue labeled_extract(const char *ctx_str, const void *salt, size_t salt_len, const void *label, size_t label_len, const void *ikm, size_t ikm_len, const uint8_t *suite_id, size_t suite_id_len, struct GNUNET_ShortHashCode *prk)
A RFC9180 inspired labeled extract.
static enum GNUNET_GenericReturnValue kem_encaps_norand(uint8_t *suite_id, size_t suite_id_len, const struct GNUNET_CRYPTO_EcdhePublicKey *pkR, const struct GNUNET_CRYPTO_HpkeEncapsulation *c, const struct GNUNET_CRYPTO_EcdhePrivateKey *skE, struct GNUNET_ShortHashCode *shared_secret)
static enum GNUNET_GenericReturnValue verify_psk_inputs(enum GNUNET_CRYPTO_HpkeMode mode, const uint8_t *psk, size_t psk_len, const uint8_t *psk_id, size_t psk_id_len)
static uint8_t GNUNET_CRYPTO_HPKE_KEM_SUITE_ID[]
static enum GNUNET_GenericReturnValue GNUNET_CRYPTO_hpke_labeled_extract_and_expand(const void *dh, size_t dh_len, const char *extract_ctx, const char *expand_ctx, const void *extract_lbl, size_t extract_lbl_len, const void *expand_lbl, size_t expand_lbl_len, const uint8_t *kem_context, size_t kem_context_len, const uint8_t *suite_id, size_t suite_id_len, struct GNUNET_ShortHashCode *shared_secret)
static enum GNUNET_GenericReturnValue labeled_expand(const char *ctx_str, const struct GNUNET_ShortHashCode *prk, const char *label, size_t label_len, const void *info, size_t info_len, const uint8_t *suite_id, size_t suite_id_len, void *out_buf, uint16_t out_len)
A RFC9180 inspired labeled extract.
static uint8_t GNUNET_CRYPTO_HPKE_KEM_ELLIGATOR_SUITE_ID[]
static struct GNUNET_FS_Handle * ctx
static OpusEncoder * enc
OPUS encoder.
struct GNUNET_CRYPTO_PrivateKey pk
Private key from command line option, or NULL.
static struct GNUNET_CRYPTO_EddsaPublicKey pub
static struct GNUNET_CRYPTO_PowSalt salt
Salt for PoW calculations.
commonly used definitions; globals in this file are exempt from the rule that the module name ("commo...
static enum @44 mode
Should we do a PUT (mode = 0) or GET (mode = 1);.
enum GNUNET_GenericReturnValue GNUNET_CRYPTO_hpke_kem_encaps_norand(const struct GNUNET_CRYPTO_EcdhePublicKey *pkR, struct GNUNET_CRYPTO_HpkeEncapsulation *enc, const struct GNUNET_CRYPTO_EcdhePrivateKey *skE, struct GNUNET_ShortHashCode *shared_secret)
Deterministic variant of GNUNET_CRYPTO_hpke_kem_encaps.
void GNUNET_CRYPTO_ecdhe_key_create(struct GNUNET_CRYPTO_EcdhePrivateKey *pk)
Create a new private key.
enum GNUNET_GenericReturnValue GNUNET_CRYPTO_hpke_authkem_encaps_norand(const struct GNUNET_CRYPTO_EcdhePublicKey *pkR, const struct GNUNET_CRYPTO_EcdhePrivateKey *skS, struct GNUNET_CRYPTO_HpkeEncapsulation *c, const struct GNUNET_CRYPTO_EcdhePrivateKey *skE, struct GNUNET_ShortHashCode *shared_secret)
Encapsulate authenticated key material for a X25519 public key.
enum GNUNET_GenericReturnValue GNUNET_CRYPTO_eddsa_kem_decaps(const struct GNUNET_CRYPTO_EddsaPrivateKey *priv, const struct GNUNET_CRYPTO_HpkeEncapsulation *c, struct GNUNET_ShortHashCode *shared_secret)
Decapsulate a key for a private EdDSA key.
enum GNUNET_GenericReturnValue GNUNET_CRYPTO_ecdhe_elligator_key_get_public(const struct GNUNET_CRYPTO_ElligatorEcdhePrivateKey *sk, struct GNUNET_CRYPTO_EcdhePublicKey *pub, struct GNUNET_CRYPTO_ElligatorRepresentative *repr)
Generates a valid public key for elligator's inverse map by adding a lower order point to a prime ord...
enum GNUNET_GenericReturnValue GNUNET_CRYPTO_x25519_ecdh(const struct GNUNET_CRYPTO_EcdhePrivateKey *sk, const struct GNUNET_CRYPTO_EcdhePublicKey *pk, struct GNUNET_CRYPTO_EcdhePublicKey *dh)
Derive key material from a ECDH public key and a private X25519 key.
void GNUNET_CRYPTO_ecdhe_elligator_key_create(struct GNUNET_CRYPTO_ElligatorEcdhePrivateKey *sk)
Generates a private key for Curve25519.
enum GNUNET_GenericReturnValue GNUNET_CRYPTO_hpke_elligator_kem_decaps(const struct GNUNET_CRYPTO_EcdhePrivateKey *skR, const struct GNUNET_CRYPTO_HpkeEncapsulation *c, struct GNUNET_ShortHashCode *shared_secret)
Carries out ecdh decapsulation with own private key and the representative of the received public key...
enum GNUNET_GenericReturnValue GNUNET_CRYPTO_hpke_kem_encaps(const struct GNUNET_CRYPTO_EcdhePublicKey *pub, struct GNUNET_CRYPTO_HpkeEncapsulation *c, struct GNUNET_ShortHashCode *shared_secret)
Encapsulate key material for a X25519 public key.
void GNUNET_CRYPTO_random_block(enum GNUNET_CRYPTO_Quality mode, void *buffer, size_t length)
Fill block with a random values.
enum GNUNET_GenericReturnValue GNUNET_CRYPTO_hpke_authkem_decaps(const struct GNUNET_CRYPTO_EcdhePrivateKey *skR, const struct GNUNET_CRYPTO_EcdhePublicKey *pkS, const struct GNUNET_CRYPTO_HpkeEncapsulation *c, struct GNUNET_ShortHashCode *shared_secret)
Decapsulate a key for a private X25519 key.
enum GNUNET_GenericReturnValue GNUNET_CRYPTO_hpke_kem_decaps(const struct GNUNET_CRYPTO_EcdhePrivateKey *skR, const struct GNUNET_CRYPTO_HpkeEncapsulation *c, struct GNUNET_ShortHashCode *shared_secret)
Decapsulate a key for a private X25519 key.
void GNUNET_CRYPTO_ecdhe_elligator_decoding(struct GNUNET_CRYPTO_EcdhePublicKey *point, bool *high_y, const struct GNUNET_CRYPTO_ElligatorRepresentative *representative)
Clears the most significant bit and second most significant bit of the serialized representaive befor...
enum GNUNET_GenericReturnValue GNUNET_CRYPTO_ecdhe_elligator_key_get_public_norand(uint8_t random_tweak, const struct GNUNET_CRYPTO_ElligatorEcdhePrivateKey *sk, struct GNUNET_CRYPTO_EcdhePublicKey *pub, struct GNUNET_CRYPTO_ElligatorRepresentative *repr)
Generates a valid public key for elligator's inverse map by adding a lower order point to a prime ord...
enum GNUNET_GenericReturnValue GNUNET_CRYPTO_hpke_elligator_kem_encaps(const struct GNUNET_CRYPTO_EcdhePublicKey *pkR, struct GNUNET_CRYPTO_HpkeEncapsulation *c, struct GNUNET_ShortHashCode *shared_secret)
Carries out ecdh encapsulation with given public key and the private key from a freshly created ephem...
enum GNUNET_GenericReturnValue GNUNET_CRYPTO_hpke_elligator_kem_encaps_norand(uint8_t random_tweak, const struct GNUNET_CRYPTO_EcdhePublicKey *pkR, struct GNUNET_CRYPTO_HpkeEncapsulation *c, const struct GNUNET_CRYPTO_ElligatorEcdhePrivateKey *skE, struct GNUNET_ShortHashCode *shared_secret)
Carries out ecdh encapsulation with given public key and the private key from a freshly created ephem...
enum GNUNET_GenericReturnValue GNUNET_CRYPTO_ecdh_x25519(const struct GNUNET_CRYPTO_EcdhePrivateKey *priv, const struct GNUNET_CRYPTO_EcdhePublicKey *pub, struct GNUNET_CRYPTO_EcdhePublicKey *dh)
Derive key material from a EdDSA public key and a private ECDH key.
enum GNUNET_GenericReturnValue GNUNET_CRYPTO_eddsa_kem_encaps(const struct GNUNET_CRYPTO_EddsaPublicKey *pub, struct GNUNET_CRYPTO_HpkeEncapsulation *c, struct GNUNET_ShortHashCode *shared_secret)
Encapsulate key material for a EdDSA public key.
enum GNUNET_GenericReturnValue GNUNET_CRYPTO_hpke_authkem_encaps(const struct GNUNET_CRYPTO_EcdhePublicKey *pkR, const struct GNUNET_CRYPTO_EcdhePrivateKey *skS, struct GNUNET_CRYPTO_HpkeEncapsulation *c, struct GNUNET_ShortHashCode *shared_secret)
Encapsulate authenticated key material for a X25519 public key.
void GNUNET_CRYPTO_ecdhe_key_get_public(const struct GNUNET_CRYPTO_EcdhePrivateKey *priv, struct GNUNET_CRYPTO_EcdhePublicKey *pub)
Extract the public key for the given private key.
enum GNUNET_GenericReturnValue GNUNET_CRYPTO_hpke_elligator_authkem_encaps_norand(const struct GNUNET_CRYPTO_EcdhePublicKey *pkR, const struct GNUNET_CRYPTO_EcdhePrivateKey *skS, struct GNUNET_CRYPTO_HpkeEncapsulation *c, const struct GNUNET_CRYPTO_ElligatorEcdhePrivateKey *skE, struct GNUNET_ShortHashCode *shared_secret)
Encapsulate authenticated key material for a X25519 public key.
enum GNUNET_GenericReturnValue GNUNET_CRYPTO_hpke_elligator_authkem_encaps(const struct GNUNET_CRYPTO_EcdhePublicKey *pkR, const struct GNUNET_CRYPTO_EcdhePrivateKey *skS, struct GNUNET_CRYPTO_HpkeEncapsulation *c, struct GNUNET_ShortHashCode *shared_secret)
Encapsulate authenticated key material for a X25519 public key.
@ GNUNET_CRYPTO_QUALITY_NONCE
Randomness for IVs etc.
enum GNUNET_GenericReturnValue GNUNET_CRYPTO_hkdf_extract(struct GNUNET_ShortHashCode *prk, const void *salt, size_t salt_len, const void *ikm, size_t ikm_len)
HKDF-Extract using SHA256.
enum GNUNET_GenericReturnValue GNUNET_CRYPTO_hkdf_expand(void *result, size_t out_len, const struct GNUNET_ShortHashCode *prk,...)
HKDF-Expand using SHA256.
enum GNUNET_GenericReturnValue GNUNET_CRYPTO_hpke_open_oneshot(const struct GNUNET_CRYPTO_EcdhePrivateKey *skR, const uint8_t *info, size_t info_len, const uint8_t *aad, size_t aad_len, const uint8_t *ct, size_t ct_len, uint8_t *pt, unsigned long long *pt_len_p)
RFC9180 HPKE encryption.
enum GNUNET_GenericReturnValue GNUNET_CRYPTO_hpke_sender_setup2(enum GNUNET_CRYPTO_HpkeKem kem, enum GNUNET_CRYPTO_HpkeMode mode, struct GNUNET_CRYPTO_EcdhePrivateKey *skE, struct GNUNET_CRYPTO_EcdhePrivateKey *skS, const struct GNUNET_CRYPTO_EcdhePublicKey *pkR, const uint8_t *info, size_t info_len, const uint8_t *psk, size_t psk_len, const uint8_t *psk_id, size_t psk_id_len, struct GNUNET_CRYPTO_HpkeEncapsulation *enc, struct GNUNET_CRYPTO_HpkeContext *ctx)
RFC9180 HPKE encryption.
#define GNUNET_log(kind,...)
enum GNUNET_GenericReturnValue GNUNET_CRYPTO_hpke_seal_oneshot(const struct GNUNET_CRYPTO_EcdhePublicKey *pkR, const uint8_t *info, size_t info_len, const uint8_t *aad, size_t aad_len, const uint8_t *pt, size_t pt_len, uint8_t *ct, unsigned long long *ct_len_p)
RFC9180 HPKE encryption.
enum GNUNET_GenericReturnValue GNUNET_CRYPTO_hpke_seal(struct GNUNET_CRYPTO_HpkeContext *ctx, const uint8_t *aad, size_t aad_len, const uint8_t *pt, size_t pt_len, uint8_t *ct, unsigned long long *ct_len_p)
RFC9180 HPKE encryption.
uint64_t GNUNET_ntohll(uint64_t n)
Convert unsigned 64-bit integer to host byte order.
enum GNUNET_GenericReturnValue GNUNET_CRYPTO_hpke_open(struct GNUNET_CRYPTO_HpkeContext *ctx, const uint8_t *aad, size_t aad_len, const uint8_t *ct, size_t ct_len, uint8_t *pt, unsigned long long *pt_len)
RFC9180 HPKE encryption.
uint64_t GNUNET_htonll(uint64_t n)
Convert unsigned 64-bit integer to network byte order.
#define GNUNET_CRYPTO_HPKE_NONCE_LEN
enum GNUNET_GenericReturnValue GNUNET_CRYPTO_hpke_sk_to_x25519(const struct GNUNET_CRYPTO_PrivateKey *sk, struct GNUNET_CRYPTO_EcdhePrivateKey *x25519)
Convert a GNUnet identity key to a key sutiable for HPKE (X25519)
GNUNET_CRYPTO_HpkeMode
HPKE RFC 9180.
enum GNUNET_GenericReturnValue GNUNET_CRYPTO_hpke_pk_to_x25519(const struct GNUNET_CRYPTO_PublicKey *pk, struct GNUNET_CRYPTO_EcdhePublicKey *x25519)
Convert a GNUnet identity key to a key sutiable for HPKE (X25519)
GNUNET_GenericReturnValue
Named constants for return values.
enum GNUNET_GenericReturnValue GNUNET_CRYPTO_hpke_receiver_setup(const struct GNUNET_CRYPTO_HpkeEncapsulation *enc, const struct GNUNET_CRYPTO_EcdhePrivateKey *skR, const uint8_t *info, size_t info_len, struct GNUNET_CRYPTO_HpkeContext *ctx)
RFC9180 HPKE encryption.
enum GNUNET_GenericReturnValue GNUNET_CRYPTO_hpke_receiver_setup2(enum GNUNET_CRYPTO_HpkeKem kem, enum GNUNET_CRYPTO_HpkeMode mode, const struct GNUNET_CRYPTO_HpkeEncapsulation *enc, const struct GNUNET_CRYPTO_EcdhePrivateKey *skR, const struct GNUNET_CRYPTO_EcdhePublicKey *pkS, const uint8_t *info, size_t info_len, const uint8_t *psk, size_t psk_len, const uint8_t *psk_id, size_t psk_id_len, struct GNUNET_CRYPTO_HpkeContext *ctx)
RFC9180 HPKE encryption.
enum GNUNET_GenericReturnValue GNUNET_CRYPTO_hpke_sender_setup(const struct GNUNET_CRYPTO_EcdhePublicKey *pkR, const uint8_t *info, size_t info_len, struct GNUNET_CRYPTO_HpkeEncapsulation *enc, struct GNUNET_CRYPTO_HpkeContext *ctx)
RFC9180 HPKE encryption.
@ GNUNET_CRYPTO_HPKE_KEM_DH_X25519_HKDF256
@ GNUNET_CRYPTO_HPKE_KEM_DH_X25519ELLIGATOR_HKDF256
@ GNUNET_PUBLIC_KEY_TYPE_EDDSA
EDDSA identity.
@ GNUNET_PUBLIC_KEY_TYPE_ECDSA
The identity type.
@ GNUNET_CRYPTO_HPKE_MODE_PSK
@ GNUNET_CRYPTO_HPKE_MODE_AUTH_PSK
@ GNUNET_CRYPTO_HPKE_MODE_BASE
@ GNUNET_CRYPTO_HPKE_MODE_AUTH
@ GNUNET_CRYPTO_HPKE_ROLE_R
@ GNUNET_CRYPTO_HPKE_ROLE_S
#define GNUNET_assert(cond)
Use this for fatal errors that cannot be handled.
@ GNUNET_ERROR_TYPE_ERROR
Private ECC key encoded for transmission.
unsigned char d[256/8]
d is a value mod n, where n has at most 256 bits.
Public ECC key (always for Curve25519) encoded in a format suitable for network transmission and encr...
unsigned char q_y[256/8]
Q consists of an x- and a y-value, each mod p (256 bits), given here in affine coordinates and Ed2551...
unsigned char d[256/8]
d is a value mod n, where n has at most 256 bits.
Private ECC key encoded for transmission.
unsigned char d[256/8]
d is a value mod n, where n has at most 256 bits.
Public ECC key (always for curve Ed25519) encoded in a format suitable for network transmission and E...
unsigned char q_y[256/8]
Point Q consists of a y-value mod p (256 bits); the x-value is always positive.
Special private ECC key generated by GNUNET_CRYPTO_ecdhe_elligator_key_create.
Elligator representative (always for Curve25519)
uint8_t r[256/8]
Represents an element of Curve25519 finite field.
HPKE DHKEM encapsulation (X25519) See RFC 9180.
A private key for an identity as per LSD0001.
uint32_t type
Type of public key.
struct GNUNET_CRYPTO_EddsaPrivateKey eddsa_key
AN EdDSA identtiy key.
struct GNUNET_CRYPTO_EcdsaPrivateKey ecdsa_key
An ECDSA identity key.
An identity key as per LSD0001.