1/* This Source Code Form is subject to the terms of the Mozilla Public
2 * License, v. 2.0. If a copy of the MPL was not distributed with this
3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
4
5#ifndef _PK11_HPKE_H_
6#define _PK11_HPKE_H_ 1
7
8#include "blapit.h"
9#include "seccomon.h"
10
11#define CLEANUP \
12 PORT_Assert(rv == SECSuccess); \
13 cleanup
14
15/* Error code must already be set. */
16#define CHECK_RV(rv) \
17 if ((rv) != SECSuccess) { \
18 goto cleanup; \
19 }
20
21/* Error code must already be set. */
22#define CHECK_FAIL(cond) \
23 if ((cond)) { \
24 rv = SECFailure; \
25 goto cleanup; \
26 }
27
28#define CHECK_FAIL_ERR(cond, err) \
29 if ((cond)) { \
30 PORT_SetError((err)); \
31 rv = SECFailure; \
32 goto cleanup; \
33 }
34
35typedef enum {
36 HpkeModeBase = 0,
37 HpkeModePsk = 1,
38} HpkeModeId;
39
40/* https://datatracker.ietf.org/doc/html/draft-irtf-cfrg-hpke-08#section-7.1 */
41typedef enum {
42 HpkeDhKemX25519Sha256 = 0x20,
43} HpkeKemId;
44
45typedef enum {
46 HpkeKdfHkdfSha256 = 1,
47 HpkeKdfHkdfSha384 = 2,
48 HpkeKdfHkdfSha512 = 3,
49} HpkeKdfId;
50
51typedef enum {
52 HpkeAeadAes128Gcm = 1,
53 HpkeAeadAes256Gcm = 2,
54 HpkeAeadChaCha20Poly1305 = 3,
55} HpkeAeadId;
56
57typedef struct hpkeKemParamsStr {
58 HpkeKemId id;
59 unsigned int Nsk;
60 unsigned int Nsecret;
61 unsigned int Npk;
62 SECOidTag oidTag;
63 CK_MECHANISM_TYPE hashMech;
64} hpkeKemParams;
65
66typedef struct hpkeKdfParamsStr {
67 HpkeKdfId id;
68 unsigned int Nh;
69 CK_MECHANISM_TYPE mech;
70} hpkeKdfParams;
71
72typedef struct hpkeAeadParamsStr {
73 HpkeAeadId id;
74 unsigned int Nk;
75 unsigned int Nn;
76 unsigned int tagLen;
77 CK_MECHANISM_TYPE mech;
78} hpkeAeadParams;
79
80typedef struct HpkeContextStr HpkeContext;
81
82#endif /* _PK11_HPKE_H_ */
83

source code of include/nss/pk11hpke.h