22#ifndef CRYPT_EAL_HPKE_H
23#define CRYPT_EAL_HPKE_H
26#include "crypt_errno.h"
27#include "crypt_types.h"
28#include "crypt_eal_pkey.h"
35 CRYPT_HPKE_MODE_BASE = 0x00,
36 CRYPT_HPKE_MODE_PSK = 0x01,
37 CRYPT_HPKE_MODE_AUTH = 0x02,
38 CRYPT_HPKE_MODE_AUTH_PSK = 0x03
42 CRYPT_KEM_DHKEM_P256_HKDF_SHA256 = 0x0010,
43 CRYPT_KEM_DHKEM_P384_HKDF_SHA384 = 0x0011,
44 CRYPT_KEM_DHKEM_P521_HKDF_SHA512 = 0x0012,
45 CRYPT_KEM_DHKEM_X25519_HKDF_SHA256 = 0x0020,
46} CRYPT_HPKE_KEM_AlgId;
49 CRYPT_KDF_HKDF_SHA256 = 0x0001,
50 CRYPT_KDF_HKDF_SHA384 = 0x0002,
51 CRYPT_KDF_HKDF_SHA512 = 0x0003
52} CRYPT_HPKE_KDF_AlgId;
55 CRYPT_AEAD_AES_128_GCM = 0x0001,
56 CRYPT_AEAD_AES_256_GCM = 0x0002,
57 CRYPT_AEAD_CHACHA20_POLY1305 = 0x0003,
58 CRYPT_AEAD_EXPORT_ONLY = 0xffff
59} CRYPT_HPKE_AEAD_AlgId;
62 CRYPT_HPKE_KEM_AlgId kemId;
63 CRYPT_HPKE_KDF_AlgId kdfId;
64 CRYPT_HPKE_AEAD_AlgId aeadId;
68 CRYPT_HPKE_SENDER = 0,
69 CRYPT_HPKE_RECIPIENT = 1,
72typedef struct CRYPT_EAL_HpkeCtx CRYPT_EAL_HpkeCtx;
142 uint8_t *pkR, uint32_t pkRLen, uint8_t *encapKey, uint32_t *encapKeyLen);
159int32_t
CRYPT_EAL_HpkeSeal(CRYPT_EAL_HpkeCtx *ctx, uint8_t *aad, uint32_t aadLen,
const uint8_t *plainText,
160 uint32_t plainTextLen, uint8_t *cipherText, uint32_t *cipherTextLen);
180 uint8_t *encapKey, uint32_t encapKeyLen);
197int32_t
CRYPT_EAL_HpkeOpen(CRYPT_EAL_HpkeCtx *ctx, uint8_t *aad, uint32_t aadLen,
const uint8_t *cipherText,
198 uint32_t cipherTextLen, uint8_t *plainText, uint32_t *plainTextLen);
292int32_t
CRYPT_EAL_HpkeSetPsk(CRYPT_EAL_HpkeCtx *ctx,uint8_t* psk,uint32_t pskLen,uint8_t* pskId,uint32_t pskIdLen);
int32_t CRYPT_EAL_HpkeSetAuthPubKey(CRYPT_EAL_HpkeCtx *ctx, uint8_t *pub, uint32_t pubLen)
Set the authentication public key in the HPKE context
int32_t CRYPT_EAL_HpkeGetEncapKeyLen(CRYPT_HPKE_CipherSuite cipherSuite, uint32_t *encapKeyLen)
Get the length of the encapsulated key for the specified cipher suite
int32_t CRYPT_EAL_HpkeOpen(CRYPT_EAL_HpkeCtx *ctx, uint8_t *aad, uint32_t aadLen, const uint8_t *cipherText, uint32_t cipherTextLen, uint8_t *plainText, uint32_t *plainTextLen)
Open an HPKE-encrypted message
int32_t CRYPT_EAL_HpkeSetupRecipient(CRYPT_EAL_HpkeCtx *ctx, CRYPT_EAL_PkeyCtx *pkey, uint8_t *info, uint32_t infoLen, uint8_t *encapKey, uint32_t encapKeyLen)
Setup HPKE for the recipient
void CRYPT_EAL_HpkeFreeCtx(CRYPT_EAL_HpkeCtx *ctx)
Free HPKE context and associated resources
int32_t CRYPT_EAL_HpkeSeal(CRYPT_EAL_HpkeCtx *ctx, uint8_t *aad, uint32_t aadLen, const uint8_t *plainText, uint32_t plainTextLen, uint8_t *cipherText, uint32_t *cipherTextLen)
Seal (encrypt) data using HPKE context
int32_t CRYPT_EAL_HpkeSetPsk(CRYPT_EAL_HpkeCtx *ctx, uint8_t *psk, uint32_t pskLen, uint8_t *pskId, uint32_t pskIdLen)
Setup psk and pskId for mode_psk and mode_auth_psk
int32_t CRYPT_EAL_HpkeGetSharedSecret(CRYPT_EAL_HpkeCtx *ctx, uint8_t *buff, uint32_t *buffLen)
Retrieve the shared secret from the HPKE context
int32_t CRYPT_EAL_HpkeGetSeq(CRYPT_EAL_HpkeCtx *ctx, uint64_t *seq)
Retrieve the sequence number from the HPKE context
CRYPT_EAL_HpkeCtx * CRYPT_EAL_HpkeNewCtx(CRYPT_EAL_LibCtx *libCtx, const char *attrName, CRYPT_HPKE_Role role, CRYPT_HPKE_Mode mode, CRYPT_HPKE_CipherSuite cipherSuite)
Create a new HPKE context
int32_t CRYPT_EAL_HpkeSetupSender(CRYPT_EAL_HpkeCtx *ctx, CRYPT_EAL_PkeyCtx *pkey, uint8_t *info, uint32_t infoLen, uint8_t *pkR, uint32_t pkRLen, uint8_t *encapKey, uint32_t *encapKeyLen)
Setup HPKE base mode for sender
int32_t CRYPT_EAL_HpkeSetSeq(CRYPT_EAL_HpkeCtx *ctx, uint64_t seq)
Set the sequence number for the HPKE context
int32_t CRYPT_EAL_HpkeGenerateKeyPair(CRYPT_EAL_LibCtx *libCtx, const char *attrName, CRYPT_HPKE_CipherSuite cipherSuite, uint8_t *ikm, uint32_t ikmLen, CRYPT_EAL_PkeyCtx **pkey)
Generate a key pair for HPKE using the specified cipher suite and input key material
int32_t CRYPT_EAL_HpkeSetAuthPriKey(CRYPT_EAL_HpkeCtx *ctx, CRYPT_EAL_PkeyCtx *pkey)
Set the authentication private key in the HPKE context
int32_t CRYPT_EAL_HpkeExportSecret(CRYPT_EAL_HpkeCtx *ctx, uint8_t *info, uint32_t infoLen, uint8_t *key, uint32_t keyLen)
Export a secret from the HPKE context
int32_t CRYPT_EAL_HpkeSetSharedSecret(CRYPT_EAL_HpkeCtx *ctx, uint8_t *info, uint32_t infoLen, uint8_t *buff, uint32_t buffLen)
Set the shared secret in the HPKE context
struct EAL_PkeyCtx CRYPT_EAL_PkeyCtx
定义 crypt_eal_pkey.h:108