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 | |
35 | typedef 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 */ |
41 | typedef enum { |
42 | HpkeDhKemX25519Sha256 = 0x20, |
43 | } HpkeKemId; |
44 | |
45 | typedef enum { |
46 | HpkeKdfHkdfSha256 = 1, |
47 | HpkeKdfHkdfSha384 = 2, |
48 | HpkeKdfHkdfSha512 = 3, |
49 | } HpkeKdfId; |
50 | |
51 | typedef enum { |
52 | HpkeAeadAes128Gcm = 1, |
53 | HpkeAeadAes256Gcm = 2, |
54 | HpkeAeadChaCha20Poly1305 = 3, |
55 | } HpkeAeadId; |
56 | |
57 | typedef 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 | |
66 | typedef struct hpkeKdfParamsStr { |
67 | HpkeKdfId id; |
68 | unsigned int Nh; |
69 | CK_MECHANISM_TYPE mech; |
70 | } hpkeKdfParams; |
71 | |
72 | typedef 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 | |
80 | typedef struct HpkeContextStr HpkeContext; |
81 | |
82 | #endif /* _PK11_HPKE_H_ */ |
83 | |