/usr/share/cagefs-skeleton/usr/include/openssl
/* * Copyright 2022-2024 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ /* APIs and data structures for HPKE (RFC9180) */ #ifndef OSSL_HPKE_H # define OSSL_HPKE_H # pragma once # include <openssl/types.h> /* HPKE modes */ # define OSSL_HPKE_MODE_BASE 0 /* Base mode */ # define OSSL_HPKE_MODE_PSK 1 /* Pre-shared key mode */ # define OSSL_HPKE_MODE_AUTH 2 /* Authenticated mode */ # define OSSL_HPKE_MODE_PSKAUTH 3 /* PSK+authenticated mode */ /* * Max for ikm, psk, pskid, info and exporter contexts. * RFC9180, section 7.2.1 RECOMMENDS 64 octets but we have test vectors from * Appendix A.6.1 with a 66 octet IKM so we'll allow that. */ # define OSSL_HPKE_MAX_PARMLEN 66 # define OSSL_HPKE_MIN_PSKLEN 32 # define OSSL_HPKE_MAX_INFOLEN 1024 /* * The (16bit) HPKE algorithm ID IANA codepoints * If/when new IANA codepoints are added there are tables in * crypto/hpke/hpke_util.c that must also be updated. */ # define OSSL_HPKE_KEM_ID_RESERVED 0x0000 /* not used */ # define OSSL_HPKE_KEM_ID_P256 0x0010 /* NIST P-256 */ # define OSSL_HPKE_KEM_ID_P384 0x0011 /* NIST P-384 */ # define OSSL_HPKE_KEM_ID_P521 0x0012 /* NIST P-521 */ # define OSSL_HPKE_KEM_ID_X25519 0x0020 /* Curve25519 */ # define OSSL_HPKE_KEM_ID_X448 0x0021 /* Curve448 */ # define OSSL_HPKE_KDF_ID_RESERVED 0x0000 /* not used */ # define OSSL_HPKE_KDF_ID_HKDF_SHA256 0x0001 /* HKDF-SHA256 */ # define OSSL_HPKE_KDF_ID_HKDF_SHA384 0x0002 /* HKDF-SHA384 */ # define OSSL_HPKE_KDF_ID_HKDF_SHA512 0x0003 /* HKDF-SHA512 */ # define OSSL_HPKE_AEAD_ID_RESERVED 0x0000 /* not used */ # define OSSL_HPKE_AEAD_ID_AES_GCM_128 0x0001 /* AES-GCM-128 */ # define OSSL_HPKE_AEAD_ID_AES_GCM_256 0x0002 /* AES-GCM-256 */ # define OSSL_HPKE_AEAD_ID_CHACHA_POLY1305 0x0003 /* Chacha20-Poly1305 */ # define OSSL_HPKE_AEAD_ID_EXPORTONLY 0xFFFF /* export-only fake ID */ /* strings for suite components */ # define OSSL_HPKE_KEMSTR_P256 "P-256" /* KEM id 0x10 */ # define OSSL_HPKE_KEMSTR_P384 "P-384" /* KEM id 0x11 */ # define OSSL_HPKE_KEMSTR_P521 "P-521" /* KEM id 0x12 */ # define OSSL_HPKE_KEMSTR_X25519 "X25519" /* KEM id 0x20 */ # define OSSL_HPKE_KEMSTR_X448 "X448" /* KEM id 0x21 */ # define OSSL_HPKE_KDFSTR_256 "hkdf-sha256" /* KDF id 1 */ # define OSSL_HPKE_KDFSTR_384 "hkdf-sha384" /* KDF id 2 */ # define OSSL_HPKE_KDFSTR_512 "hkdf-sha512" /* KDF id 3 */ # define OSSL_HPKE_AEADSTR_AES128GCM "aes-128-gcm" /* AEAD id 1 */ # define OSSL_HPKE_AEADSTR_AES256GCM "aes-256-gcm" /* AEAD id 2 */ # define OSSL_HPKE_AEADSTR_CP "chacha20-poly1305" /* AEAD id 3 */ # define OSSL_HPKE_AEADSTR_EXP "exporter" /* AEAD id 0xff */ /* * Roles for use in creating an OSSL_HPKE_CTX, most * important use of this is to control nonce re-use. */ # define OSSL_HPKE_ROLE_SENDER 0 # define OSSL_HPKE_ROLE_RECEIVER 1 # ifdef __cplusplus extern "C" { # endif typedef struct { uint16_t kem_id; /* Key Encapsulation Method id */ uint16_t kdf_id; /* Key Derivation Function id */ uint16_t aead_id; /* AEAD alg id */ } OSSL_HPKE_SUITE; /** * Suite constants, use this like: * OSSL_HPKE_SUITE myvar = OSSL_HPKE_SUITE_DEFAULT; */ # ifndef OPENSSL_NO_ECX # define OSSL_HPKE_SUITE_DEFAULT \ {\ OSSL_HPKE_KEM_ID_X25519, \ OSSL_HPKE_KDF_ID_HKDF_SHA256, \ OSSL_HPKE_AEAD_ID_AES_GCM_128 \ } # else # define OSSL_HPKE_SUITE_DEFAULT \ {\ OSSL_HPKE_KEM_ID_P256, \ OSSL_HPKE_KDF_ID_HKDF_SHA256, \ OSSL_HPKE_AEAD_ID_AES_GCM_128 \ } #endif typedef struct ossl_hpke_ctx_st OSSL_HPKE_CTX; OSSL_HPKE_CTX *OSSL_HPKE_CTX_new(int mode, OSSL_HPKE_SUITE suite, int role, OSSL_LIB_CTX *libctx, const char *propq); void OSSL_HPKE_CTX_free(OSSL_HPKE_CTX *ctx); int OSSL_HPKE_encap(OSSL_HPKE_CTX *ctx, unsigned char *enc, size_t *enclen, const unsigned char *pub, size_t publen, const unsigned char *info, size_t infolen); int OSSL_HPKE_seal(OSSL_HPKE_CTX *ctx, unsigned char *ct, size_t *ctlen, const unsigned char *aad, size_t aadlen, const unsigned char *pt, size_t ptlen); int OSSL_HPKE_keygen(OSSL_HPKE_SUITE suite, unsigned char *pub, size_t *publen, EVP_PKEY **priv, const unsigned char *ikm, size_t ikmlen, OSSL_LIB_CTX *libctx, const char *propq); int OSSL_HPKE_decap(OSSL_HPKE_CTX *ctx, const unsigned char *enc, size_t enclen, EVP_PKEY *recippriv, const unsigned char *info, size_t infolen); int OSSL_HPKE_open(OSSL_HPKE_CTX *ctx, unsigned char *pt, size_t *ptlen, const unsigned char *aad, size_t aadlen, const unsigned char *ct, size_t ctlen); int OSSL_HPKE_export(OSSL_HPKE_CTX *ctx, unsigned char *secret, size_t secretlen, const unsigned char *label, size_t labellen); int OSSL_HPKE_CTX_set1_authpriv(OSSL_HPKE_CTX *ctx, EVP_PKEY *priv); int OSSL_HPKE_CTX_set1_authpub(OSSL_HPKE_CTX *ctx, const unsigned char *pub, size_t publen); int OSSL_HPKE_CTX_set1_psk(OSSL_HPKE_CTX *ctx, const char *pskid, const unsigned char *psk, size_t psklen); int OSSL_HPKE_CTX_set1_ikme(OSSL_HPKE_CTX *ctx, const unsigned char *ikme, size_t ikmelen); int OSSL_HPKE_CTX_set_seq(OSSL_HPKE_CTX *ctx, uint64_t seq); int OSSL_HPKE_CTX_get_seq(OSSL_HPKE_CTX *ctx, uint64_t *seq); int OSSL_HPKE_suite_check(OSSL_HPKE_SUITE suite); int OSSL_HPKE_get_grease_value(const OSSL_HPKE_SUITE *suite_in, OSSL_HPKE_SUITE *suite, unsigned char *enc, size_t *enclen, unsigned char *ct, size_t ctlen, OSSL_LIB_CTX *libctx, const char *propq); int OSSL_HPKE_str2suite(const char *str, OSSL_HPKE_SUITE *suite); size_t OSSL_HPKE_get_ciphertext_size(OSSL_HPKE_SUITE suite, size_t clearlen); size_t OSSL_HPKE_get_public_encap_size(OSSL_HPKE_SUITE suite); size_t OSSL_HPKE_get_recommended_ikmelen(OSSL_HPKE_SUITE suite); # ifdef __cplusplus } # endif #endif
.
Edit
..
Edit
aes.h
Edit
asn1.h
Edit
asn1_mac.h
Edit
asn1err.h
Edit
asn1t.h
Edit
async.h
Edit
asyncerr.h
Edit
bio.h
Edit
bioerr.h
Edit
blowfish.h
Edit
bn.h
Edit
bnerr.h
Edit
buffer.h
Edit
buffererr.h
Edit
camellia.h
Edit
cast.h
Edit
cmac.h
Edit
cmp.h
Edit
cmp_util.h
Edit
cmperr.h
Edit
cms.h
Edit
cmserr.h
Edit
comp.h
Edit
comperr.h
Edit
conf.h
Edit
conf_api.h
Edit
conferr.h
Edit
configuration-x86_64.h
Edit
configuration.h
Edit
conftypes.h
Edit
core.h
Edit
core_dispatch.h
Edit
core_names.h
Edit
core_object.h
Edit
crmf.h
Edit
crmferr.h
Edit
crypto.h
Edit
cryptoerr.h
Edit
cryptoerr_legacy.h
Edit
ct.h
Edit
cterr.h
Edit
decoder.h
Edit
decodererr.h
Edit
des.h
Edit
dh.h
Edit
dherr.h
Edit
dsa.h
Edit
dsaerr.h
Edit
dtls1.h
Edit
e_os2.h
Edit
e_ostime.h
Edit
ebcdic.h
Edit
ec.h
Edit
ecdh.h
Edit
ecdsa.h
Edit
ecerr.h
Edit
encoder.h
Edit
encodererr.h
Edit
engine.h
Edit
engineerr.h
Edit
err.h
Edit
ess.h
Edit
esserr.h
Edit
evp.h
Edit
evperr.h
Edit
fips.h
Edit
fips_names.h
Edit
fipskey.h
Edit
hmac.h
Edit
hpke.h
Edit
http.h
Edit
httperr.h
Edit
idea.h
Edit
kdf.h
Edit
kdferr.h
Edit
lhash.h
Edit
macros.h
Edit
md2.h
Edit
md4.h
Edit
md5.h
Edit
mdc2.h
Edit
modes.h
Edit
obj_mac.h
Edit
objects.h
Edit
objectserr.h
Edit
ocsp.h
Edit
ocsperr.h
Edit
opensslconf.h
Edit
opensslv.h
Edit
ossl_typ.h
Edit
param_build.h
Edit
params.h
Edit
pem.h
Edit
pem2.h
Edit
pemerr.h
Edit
pkcs12.h
Edit
pkcs12err.h
Edit
pkcs7.h
Edit
pkcs7err.h
Edit
prov_ssl.h
Edit
proverr.h
Edit
provider.h
Edit
quic.h
Edit
rand.h
Edit
randerr.h
Edit
rc2.h
Edit
rc4.h
Edit
rc5.h
Edit
ripemd.h
Edit
rsa.h
Edit
rsaerr.h
Edit
safestack.h
Edit
seed.h
Edit
self_test.h
Edit
sha.h
Edit
srp.h
Edit
srtp.h
Edit
ssl.h
Edit
ssl2.h
Edit
ssl3.h
Edit
sslerr.h
Edit
sslerr_legacy.h
Edit
stack.h
Edit
store.h
Edit
storeerr.h
Edit
symhacks.h
Edit
thread.h
Edit
tls1.h
Edit
trace.h
Edit
ts.h
Edit
tserr.h
Edit
txt_db.h
Edit
types.h
Edit
ui.h
Edit
uierr.h
Edit
whrlpool.h
Edit
x509.h
Edit
x509_vfy.h
Edit
x509err.h
Edit
x509v3.h
Edit
x509v3err.h
Edit