Classes | Macros | Functions | Variables
hpke.c File Reference
#include <openssl/hpke.h>
#include <assert.h>
#include <string.h>
#include <openssl/aead.h>
#include <openssl/bytestring.h>
#include <openssl/curve25519.h>
#include <openssl/digest.h>
#include <openssl/err.h>
#include <openssl/evp_errors.h>
#include <openssl/hkdf.h>
#include <openssl/rand.h>
#include <openssl/sha.h>
#include "../internal.h"
Include dependency graph for hpke.c:

Go to the source code of this file.

Classes

struct  evp_hpke_aead_st
 
struct  evp_hpke_kdf_st
 
struct  evp_hpke_kem_st
 

Macros

#define HPKE_MODE_BASE   0
 
#define HPKE_SUITE_ID_LEN   10
 
#define MAX_SEED_LEN   X25519_PRIVATE_KEY_LEN
 
#define MAX_SHARED_SECRET_LEN   SHA256_DIGEST_LENGTH
 

Functions

static int add_label_string (CBB *cbb, const char *label)
 
static int dhkem_extract_and_expand (uint16_t kem_id, const EVP_MD *hkdf_md, uint8_t *out_key, size_t out_len, const uint8_t *dh, size_t dh_len, const uint8_t *kem_context, size_t kem_context_len)
 
const EVP_AEADEVP_HPKE_AEAD_aead (const EVP_HPKE_AEAD *aead)
 
uint16_t EVP_HPKE_AEAD_id (const EVP_HPKE_AEAD *aead)
 
const EVP_HPKE_AEADEVP_hpke_aes_128_gcm (void)
 
const EVP_HPKE_AEADEVP_hpke_aes_256_gcm (void)
 
const EVP_HPKE_AEADEVP_hpke_chacha20_poly1305 (void)
 
const EVP_HPKE_AEADEVP_HPKE_CTX_aead (const EVP_HPKE_CTX *ctx)
 
void EVP_HPKE_CTX_cleanup (EVP_HPKE_CTX *ctx)
 
int EVP_HPKE_CTX_export (const EVP_HPKE_CTX *ctx, uint8_t *out, size_t secret_len, const uint8_t *context, size_t context_len)
 
void EVP_HPKE_CTX_free (EVP_HPKE_CTX *ctx)
 
const EVP_HPKE_KDFEVP_HPKE_CTX_kdf (const EVP_HPKE_CTX *ctx)
 
size_t EVP_HPKE_CTX_max_overhead (const EVP_HPKE_CTX *ctx)
 
EVP_HPKE_CTXEVP_HPKE_CTX_new (void)
 
int EVP_HPKE_CTX_open (EVP_HPKE_CTX *ctx, uint8_t *out, size_t *out_len, size_t max_out_len, const uint8_t *in, size_t in_len, const uint8_t *ad, size_t ad_len)
 
int EVP_HPKE_CTX_seal (EVP_HPKE_CTX *ctx, uint8_t *out, size_t *out_len, size_t max_out_len, const uint8_t *in, size_t in_len, const uint8_t *ad, size_t ad_len)
 
int EVP_HPKE_CTX_setup_recipient (EVP_HPKE_CTX *ctx, const EVP_HPKE_KEY *key, const EVP_HPKE_KDF *kdf, const EVP_HPKE_AEAD *aead, const uint8_t *enc, size_t enc_len, const uint8_t *info, size_t info_len)
 
int EVP_HPKE_CTX_setup_sender (EVP_HPKE_CTX *ctx, uint8_t *out_enc, size_t *out_enc_len, size_t max_enc, const EVP_HPKE_KEM *kem, const EVP_HPKE_KDF *kdf, const EVP_HPKE_AEAD *aead, const uint8_t *peer_public_key, size_t peer_public_key_len, const uint8_t *info, size_t info_len)
 
int EVP_HPKE_CTX_setup_sender_with_seed_for_testing (EVP_HPKE_CTX *ctx, uint8_t *out_enc, size_t *out_enc_len, size_t max_enc, const EVP_HPKE_KEM *kem, const EVP_HPKE_KDF *kdf, const EVP_HPKE_AEAD *aead, const uint8_t *peer_public_key, size_t peer_public_key_len, const uint8_t *info, size_t info_len, const uint8_t *seed, size_t seed_len)
 
void EVP_HPKE_CTX_zero (EVP_HPKE_CTX *ctx)
 
const EVP_HPKE_KDFEVP_hpke_hkdf_sha256 (void)
 
uint16_t EVP_HPKE_KDF_id (const EVP_HPKE_KDF *kdf)
 
uint16_t EVP_HPKE_KEM_id (const EVP_HPKE_KEM *kem)
 
void EVP_HPKE_KEY_cleanup (EVP_HPKE_KEY *key)
 
int EVP_HPKE_KEY_copy (EVP_HPKE_KEY *dst, const EVP_HPKE_KEY *src)
 
void EVP_HPKE_KEY_free (EVP_HPKE_KEY *key)
 
int EVP_HPKE_KEY_generate (EVP_HPKE_KEY *key, const EVP_HPKE_KEM *kem)
 
int EVP_HPKE_KEY_init (EVP_HPKE_KEY *key, const EVP_HPKE_KEM *kem, const uint8_t *priv_key, size_t priv_key_len)
 
const EVP_HPKE_KEMEVP_HPKE_KEY_kem (const EVP_HPKE_KEY *key)
 
EVP_HPKE_KEYEVP_HPKE_KEY_new (void)
 
int EVP_HPKE_KEY_private_key (const EVP_HPKE_KEY *key, uint8_t *out, size_t *out_len, size_t max_out)
 
int EVP_HPKE_KEY_public_key (const EVP_HPKE_KEY *key, uint8_t *out, size_t *out_len, size_t max_out)
 
void EVP_HPKE_KEY_zero (EVP_HPKE_KEY *key)
 
const EVP_HPKE_KEMEVP_hpke_x25519_hkdf_sha256 (void)
 
static int hpke_build_suite_id (const EVP_HPKE_CTX *ctx, uint8_t out[HPKE_SUITE_ID_LEN])
 
static int hpke_key_schedule (EVP_HPKE_CTX *ctx, const uint8_t *shared_secret, size_t shared_secret_len, const uint8_t *info, size_t info_len)
 
static int hpke_labeled_expand (const EVP_MD *hkdf_md, uint8_t *out_key, size_t out_len, const uint8_t *prk, size_t prk_len, const uint8_t *suite_id, size_t suite_id_len, const char *label, const uint8_t *info, size_t info_len)
 
static int hpke_labeled_extract (const EVP_MD *hkdf_md, uint8_t *out_key, size_t *out_len, const uint8_t *salt, size_t salt_len, const uint8_t *suite_id, size_t suite_id_len, const char *label, const uint8_t *ikm, size_t ikm_len)
 
static void hpke_nonce (const EVP_HPKE_CTX *ctx, uint8_t *out_nonce, size_t nonce_len)
 
static int x25519_decap (const EVP_HPKE_KEY *key, uint8_t *out_shared_secret, size_t *out_shared_secret_len, const uint8_t *enc, size_t enc_len)
 
static int x25519_encap_with_seed (const EVP_HPKE_KEM *kem, uint8_t *out_shared_secret, size_t *out_shared_secret_len, uint8_t *out_enc, size_t *out_enc_len, size_t max_enc, const uint8_t *peer_public_key, size_t peer_public_key_len, const uint8_t *seed, size_t seed_len)
 
static int x25519_generate_key (EVP_HPKE_KEY *key)
 
static int x25519_init_key (EVP_HPKE_KEY *key, const uint8_t *priv_key, size_t priv_key_len)
 

Variables

static const char kHpkeVersionId [] = "HPKE-v1"
 

Macro Definition Documentation

◆ HPKE_MODE_BASE

#define HPKE_MODE_BASE   0

Definition at line 362 of file hpke.c.

◆ HPKE_SUITE_ID_LEN

#define HPKE_SUITE_ID_LEN   10

Definition at line 346 of file hpke.c.

◆ MAX_SEED_LEN

#define MAX_SEED_LEN   X25519_PRIVATE_KEY_LEN

Definition at line 35 of file hpke.c.

◆ MAX_SHARED_SECRET_LEN

#define MAX_SHARED_SECRET_LEN   SHA256_DIGEST_LENGTH

Definition at line 36 of file hpke.c.

Function Documentation

◆ add_label_string()

static int add_label_string ( CBB cbb,
const char *  label 
)
static

Definition at line 73 of file hpke.c.

◆ dhkem_extract_and_expand()

static int dhkem_extract_and_expand ( uint16_t  kem_id,
const EVP_MD hkdf_md,
uint8_t out_key,
size_t  out_len,
const uint8_t dh,
size_t  dh_len,
const uint8_t kem_context,
size_t  kem_context_len 
)
static

Definition at line 119 of file hpke.c.

◆ EVP_HPKE_AEAD_aead()

const EVP_AEAD* EVP_HPKE_AEAD_aead ( const EVP_HPKE_AEAD aead)

Definition at line 338 of file hpke.c.

◆ EVP_HPKE_AEAD_id()

uint16_t EVP_HPKE_AEAD_id ( const EVP_HPKE_AEAD aead)

Definition at line 336 of file hpke.c.

◆ EVP_hpke_aes_128_gcm()

const EVP_HPKE_AEAD* EVP_hpke_aes_128_gcm ( void  )

Definition at line 318 of file hpke.c.

◆ EVP_hpke_aes_256_gcm()

const EVP_HPKE_AEAD* EVP_hpke_aes_256_gcm ( void  )

Definition at line 324 of file hpke.c.

◆ EVP_hpke_chacha20_poly1305()

const EVP_HPKE_AEAD* EVP_hpke_chacha20_poly1305 ( void  )

Definition at line 330 of file hpke.c.

◆ EVP_HPKE_CTX_aead()

const EVP_HPKE_AEAD* EVP_HPKE_CTX_aead ( const EVP_HPKE_CTX ctx)

Definition at line 612 of file hpke.c.

◆ EVP_HPKE_CTX_cleanup()

void EVP_HPKE_CTX_cleanup ( EVP_HPKE_CTX ctx)

Definition at line 447 of file hpke.c.

◆ EVP_HPKE_CTX_export()

int EVP_HPKE_CTX_export ( const EVP_HPKE_CTX ctx,
uint8_t out,
size_t  secret_len,
const uint8_t context,
size_t  context_len 
)

Definition at line 591 of file hpke.c.

◆ EVP_HPKE_CTX_free()

void EVP_HPKE_CTX_free ( EVP_HPKE_CTX ctx)

Definition at line 461 of file hpke.c.

◆ EVP_HPKE_CTX_kdf()

const EVP_HPKE_KDF* EVP_HPKE_CTX_kdf ( const EVP_HPKE_CTX ctx)

Definition at line 616 of file hpke.c.

◆ EVP_HPKE_CTX_max_overhead()

size_t EVP_HPKE_CTX_max_overhead ( const EVP_HPKE_CTX ctx)

Definition at line 607 of file hpke.c.

◆ EVP_HPKE_CTX_new()

EVP_HPKE_CTX* EVP_HPKE_CTX_new ( void  )

Definition at line 451 of file hpke.c.

◆ EVP_HPKE_CTX_open()

int EVP_HPKE_CTX_open ( EVP_HPKE_CTX ctx,
uint8_t out,
size_t *  out_len,
size_t  max_out_len,
const uint8_t in,
size_t  in_len,
const uint8_t ad,
size_t  ad_len 
)

Definition at line 543 of file hpke.c.

◆ EVP_HPKE_CTX_seal()

int EVP_HPKE_CTX_seal ( EVP_HPKE_CTX ctx,
uint8_t out,
size_t *  out_len,
size_t  max_out_len,
const uint8_t in,
size_t  in_len,
const uint8_t ad,
size_t  ad_len 
)

Definition at line 567 of file hpke.c.

◆ EVP_HPKE_CTX_setup_recipient()

int EVP_HPKE_CTX_setup_recipient ( EVP_HPKE_CTX ctx,
const EVP_HPKE_KEY key,
const EVP_HPKE_KDF kdf,
const EVP_HPKE_AEAD aead,
const uint8_t enc,
size_t  enc_len,
const uint8_t info,
size_t  info_len 
)

Definition at line 505 of file hpke.c.

◆ EVP_HPKE_CTX_setup_sender()

int EVP_HPKE_CTX_setup_sender ( EVP_HPKE_CTX ctx,
uint8_t out_enc,
size_t *  out_enc_len,
size_t  max_enc,
const EVP_HPKE_KEM kem,
const EVP_HPKE_KDF kdf,
const EVP_HPKE_AEAD aead,
const uint8_t peer_public_key,
size_t  peer_public_key_len,
const uint8_t info,
size_t  info_len 
)

Definition at line 468 of file hpke.c.

◆ EVP_HPKE_CTX_setup_sender_with_seed_for_testing()

int EVP_HPKE_CTX_setup_sender_with_seed_for_testing ( EVP_HPKE_CTX ctx,
uint8_t out_enc,
size_t *  out_enc_len,
size_t  max_enc,
const EVP_HPKE_KEM kem,
const EVP_HPKE_KDF kdf,
const EVP_HPKE_AEAD aead,
const uint8_t peer_public_key,
size_t  peer_public_key_len,
const uint8_t info,
size_t  info_len,
const uint8_t seed,
size_t  seed_len 
)

Definition at line 482 of file hpke.c.

◆ EVP_HPKE_CTX_zero()

void EVP_HPKE_CTX_zero ( EVP_HPKE_CTX ctx)

Definition at line 442 of file hpke.c.

◆ EVP_hpke_hkdf_sha256()

const EVP_HPKE_KDF* EVP_hpke_hkdf_sha256 ( void  )

Definition at line 311 of file hpke.c.

◆ EVP_HPKE_KDF_id()

uint16_t EVP_HPKE_KDF_id ( const EVP_HPKE_KDF kdf)

Definition at line 316 of file hpke.c.

◆ EVP_HPKE_KEM_id()

uint16_t EVP_HPKE_KEM_id ( const EVP_HPKE_KEM kem)

Definition at line 227 of file hpke.c.

◆ EVP_HPKE_KEY_cleanup()

void EVP_HPKE_KEY_cleanup ( EVP_HPKE_KEY key)

Definition at line 233 of file hpke.c.

◆ EVP_HPKE_KEY_copy()

int EVP_HPKE_KEY_copy ( EVP_HPKE_KEY dst,
const EVP_HPKE_KEY src 
)

Definition at line 255 of file hpke.c.

◆ EVP_HPKE_KEY_free()

void EVP_HPKE_KEY_free ( EVP_HPKE_KEY key)

Definition at line 248 of file hpke.c.

◆ EVP_HPKE_KEY_generate()

int EVP_HPKE_KEY_generate ( EVP_HPKE_KEY key,
const EVP_HPKE_KEM kem 
)

Definition at line 272 of file hpke.c.

◆ EVP_HPKE_KEY_init()

int EVP_HPKE_KEY_init ( EVP_HPKE_KEY key,
const EVP_HPKE_KEM kem,
const uint8_t priv_key,
size_t  priv_key_len 
)

Definition at line 261 of file hpke.c.

◆ EVP_HPKE_KEY_kem()

const EVP_HPKE_KEM* EVP_HPKE_KEY_kem ( const EVP_HPKE_KEY key)

Definition at line 282 of file hpke.c.

◆ EVP_HPKE_KEY_new()

EVP_HPKE_KEY* EVP_HPKE_KEY_new ( void  )

Definition at line 238 of file hpke.c.

◆ EVP_HPKE_KEY_private_key()

int EVP_HPKE_KEY_private_key ( const EVP_HPKE_KEY key,
uint8_t out,
size_t *  out_len,
size_t  max_out 
)

Definition at line 297 of file hpke.c.

◆ EVP_HPKE_KEY_public_key()

int EVP_HPKE_KEY_public_key ( const EVP_HPKE_KEY key,
uint8_t out,
size_t *  out_len,
size_t  max_out 
)

Definition at line 286 of file hpke.c.

◆ EVP_HPKE_KEY_zero()

void EVP_HPKE_KEY_zero ( EVP_HPKE_KEY key)

Definition at line 229 of file hpke.c.

◆ EVP_hpke_x25519_hkdf_sha256()

const EVP_HPKE_KEM* EVP_hpke_x25519_hkdf_sha256 ( void  )

Definition at line 213 of file hpke.c.

◆ hpke_build_suite_id()

static int hpke_build_suite_id ( const EVP_HPKE_CTX ctx,
uint8_t  out[HPKE_SUITE_ID_LEN] 
)
static

Definition at line 350 of file hpke.c.

◆ hpke_key_schedule()

static int hpke_key_schedule ( EVP_HPKE_CTX ctx,
const uint8_t shared_secret,
size_t  shared_secret_len,
const uint8_t info,
size_t  info_len 
)
static

Definition at line 364 of file hpke.c.

◆ hpke_labeled_expand()

static int hpke_labeled_expand ( const EVP_MD hkdf_md,
uint8_t out_key,
size_t  out_len,
const uint8_t prk,
size_t  prk_len,
const uint8_t suite_id,
size_t  suite_id_len,
const char *  label,
const uint8_t info,
size_t  info_len 
)
static

Definition at line 95 of file hpke.c.

◆ hpke_labeled_extract()

static int hpke_labeled_extract ( const EVP_MD hkdf_md,
uint8_t out_key,
size_t *  out_len,
const uint8_t salt,
size_t  salt_len,
const uint8_t suite_id,
size_t  suite_id_len,
const char *  label,
const uint8_t ikm,
size_t  ikm_len 
)
static

Definition at line 77 of file hpke.c.

◆ hpke_nonce()

static void hpke_nonce ( const EVP_HPKE_CTX ctx,
uint8_t out_nonce,
size_t  nonce_len 
)
static

Definition at line 525 of file hpke.c.

◆ x25519_decap()

static int x25519_decap ( const EVP_HPKE_KEY key,
uint8_t out_shared_secret,
size_t *  out_shared_secret_len,
const uint8_t enc,
size_t  enc_len 
)
static

Definition at line 189 of file hpke.c.

◆ x25519_encap_with_seed()

static int x25519_encap_with_seed ( const EVP_HPKE_KEM kem,
uint8_t out_shared_secret,
size_t *  out_shared_secret_len,
uint8_t out_enc,
size_t *  out_enc_len,
size_t  max_enc,
const uint8_t peer_public_key,
size_t  peer_public_key_len,
const uint8_t seed,
size_t  seed_len 
)
static

Definition at line 152 of file hpke.c.

◆ x25519_generate_key()

static int x25519_generate_key ( EVP_HPKE_KEY key)
static

Definition at line 147 of file hpke.c.

◆ x25519_init_key()

static int x25519_init_key ( EVP_HPKE_KEY key,
const uint8_t priv_key,
size_t  priv_key_len 
)
static

Definition at line 135 of file hpke.c.

Variable Documentation

◆ kHpkeVersionId

const char kHpkeVersionId[] = "HPKE-v1"
static

Definition at line 71 of file hpke.c.



grpc
Author(s):
autogenerated on Fri May 16 2025 03:01:19