/* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ #ifndef _PK11_HPKE_H_ #define _PK11_HPKE_H_ 1 #include "blapit.h" #include "seccomon.h" #define CLEANUP \ PORT_Assert(rv == SECSuccess); \ cleanup /* Error code must already be set. */ #define CHECK_RV(rv) \ if ((rv) != SECSuccess) { \ goto cleanup; \ } /* Error code must already be set. */ #define CHECK_FAIL(cond) \ if ((cond)) { \ rv = SECFailure; \ goto cleanup; \ } #define CHECK_FAIL_ERR(cond, err) \ if ((cond)) { \ PORT_SetError((err)); \ rv = SECFailure; \ goto cleanup; \ } typedef enum { HpkeModeBase = 0, HpkeModePsk = 1, } HpkeModeId; /* https://datatracker.ietf.org/doc/html/draft-irtf-cfrg-hpke-08#section-7.1 */ typedef enum { HpkeDhKemX25519Sha256 = 0x20, } HpkeKemId; typedef enum { HpkeKdfHkdfSha256 = 1, HpkeKdfHkdfSha384 = 2, HpkeKdfHkdfSha512 = 3, } HpkeKdfId; typedef enum { HpkeAeadAes128Gcm = 1, HpkeAeadAes256Gcm = 2, HpkeAeadChaCha20Poly1305 = 3, } HpkeAeadId; typedef struct hpkeKemParamsStr { HpkeKemId id; unsigned int Nsk; unsigned int Nsecret; unsigned int Npk; SECOidTag oidTag; CK_MECHANISM_TYPE hashMech; } hpkeKemParams; typedef struct hpkeKdfParamsStr { HpkeKdfId id; unsigned int Nh; CK_MECHANISM_TYPE mech; } hpkeKdfParams; typedef struct hpkeAeadParamsStr { HpkeAeadId id; unsigned int Nk; unsigned int Nn; unsigned int tagLen; CK_MECHANISM_TYPE mech; } hpkeAeadParams; typedef struct HpkeContextStr HpkeContext; #endif /* _PK11_HPKE_H_ */