/src/openssh/crypto_api.h
Line | Count | Source |
1 | | /* $OpenBSD: crypto_api.h,v 1.11 2026/06/14 03:59:34 djm Exp $ */ |
2 | | |
3 | | /* |
4 | | * Assembled from generated headers and source files by Markus Friedl. |
5 | | * Placed in the public domain. |
6 | | */ |
7 | | |
8 | | #ifndef crypto_api_h |
9 | | #define crypto_api_h |
10 | | |
11 | | #include "includes.h" |
12 | | |
13 | | #include <stdint.h> |
14 | | #include <stdlib.h> |
15 | | |
16 | | typedef int8_t crypto_int8; |
17 | | typedef uint8_t crypto_uint8; |
18 | | typedef int16_t crypto_int16; |
19 | | typedef uint16_t crypto_uint16; |
20 | | typedef int32_t crypto_int32; |
21 | | typedef uint32_t crypto_uint32; |
22 | | typedef int64_t crypto_int64; |
23 | | typedef uint64_t crypto_uint64; |
24 | | |
25 | | #define randombytes(buf, buf_len) arc4random_buf((buf), (buf_len)) |
26 | | #define small_random32() arc4random() |
27 | | |
28 | 0 | #define crypto_hash_sha512_BYTES 64U |
29 | | |
30 | | #ifdef WITH_OPENSSL |
31 | | #include <openssl/evp.h> |
32 | | static inline int |
33 | | crypto_hash_sha512(unsigned char *out, const unsigned char *in, |
34 | | unsigned long long inlen) |
35 | 0 | { |
36 | |
|
37 | 0 | if (!EVP_Digest(in, inlen, out, NULL, EVP_sha512(), NULL)) |
38 | 0 | return -1; |
39 | 0 | return 0; |
40 | 0 | } Unexecuted instantiation: sshkey.c:crypto_hash_sha512 Unexecuted instantiation: ssh-ed25519-sk.c:crypto_hash_sha512 Unexecuted instantiation: ssh-ed25519.c:crypto_hash_sha512 Unexecuted instantiation: ssh-mldsa-eddsa.c:crypto_hash_sha512 Unexecuted instantiation: ed25519-openssl.c:crypto_hash_sha512 Unexecuted instantiation: libcrux-mlkem-mldsa.c:crypto_hash_sha512 Unexecuted instantiation: bcrypt_pbkdf.c:crypto_hash_sha512 |
41 | | #else /* WITH_OPENSSL */ |
42 | | # ifdef HAVE_SHA2_H |
43 | | # include <sha2.h> |
44 | | # endif |
45 | | static inline int |
46 | | crypto_hash_sha512(unsigned char *out, const unsigned char *in, |
47 | | unsigned long long inlen) |
48 | | { |
49 | | |
50 | | SHA2_CTX ctx; |
51 | | |
52 | | SHA512Init(&ctx); |
53 | | SHA512Update(&ctx, in, inlen); |
54 | | SHA512Final(out, &ctx); |
55 | | return 0; |
56 | | } |
57 | | #endif /* WITH_OPENSSL */ |
58 | | |
59 | 9.07k | #define crypto_sign_ed25519_SECRETKEYBYTES 64U |
60 | 20.8k | #define crypto_sign_ed25519_PUBLICKEYBYTES 32U |
61 | 0 | #define crypto_sign_ed25519_SEEDBYTES 32U |
62 | 8 | #define crypto_sign_ed25519_BYTES 64U |
63 | | |
64 | | int crypto_sign_ed25519(unsigned char *, unsigned long long *, |
65 | | const unsigned char *, unsigned long long, const unsigned char *); |
66 | | int crypto_sign_ed25519_open(unsigned char *, unsigned long long *, |
67 | | const unsigned char *, unsigned long long, const unsigned char *); |
68 | | int crypto_sign_ed25519_keypair(unsigned char *, unsigned char *); |
69 | | int crypto_sign_ed25519_keypair_from_seed(unsigned char *, unsigned char *, |
70 | | const unsigned char *); |
71 | | |
72 | | #define crypto_kem_sntrup761_PUBLICKEYBYTES 1158 |
73 | | #define crypto_kem_sntrup761_SECRETKEYBYTES 1763 |
74 | | #define crypto_kem_sntrup761_CIPHERTEXTBYTES 1039 |
75 | | #define crypto_kem_sntrup761_BYTES 32 |
76 | | #define crypto_kem_mlkem768_ENCSEEDBYTES 32 |
77 | | #define crypto_kem_mlkem768_KEYPAIRSEEDBYTES 64 |
78 | | |
79 | | int crypto_kem_sntrup761_enc(unsigned char *cstr, unsigned char *k, |
80 | | const unsigned char *pk); |
81 | | int crypto_kem_sntrup761_dec(unsigned char *k, |
82 | | const unsigned char *cstr, const unsigned char *sk); |
83 | | int crypto_kem_sntrup761_keypair(unsigned char *pk, unsigned char *sk); |
84 | | |
85 | | /* ML-KEM-768 */ |
86 | 0 | #define crypto_kem_mlkem768_PUBLICKEYBYTES 1184 |
87 | 0 | #define crypto_kem_mlkem768_SECRETKEYBYTES 2400 |
88 | 0 | #define crypto_kem_mlkem768_CIPHERTEXTBYTES 1088 |
89 | 0 | #define crypto_kem_mlkem768_BYTES 32 |
90 | | |
91 | | /* Aliases for MLKEM768 */ |
92 | | #define MLKEM768_PUBLICKEYBYTES crypto_kem_mlkem768_PUBLICKEYBYTES |
93 | | #define MLKEM768_SECRETKEYBYTES crypto_kem_mlkem768_SECRETKEYBYTES |
94 | | #define MLKEM768_CIPHERTEXTBYTES crypto_kem_mlkem768_CIPHERTEXTBYTES |
95 | | #define MLKEM768_BYTES crypto_kem_mlkem768_BYTES |
96 | | |
97 | | int crypto_kem_mlkem768_keypair(uint8_t pk[crypto_kem_mlkem768_PUBLICKEYBYTES], |
98 | | uint8_t sk[crypto_kem_mlkem768_SECRETKEYBYTES]); |
99 | | int crypto_kem_mlkem768_enc(uint8_t ct[crypto_kem_mlkem768_CIPHERTEXTBYTES], |
100 | | uint8_t shared_secret[crypto_kem_mlkem768_BYTES], |
101 | | const uint8_t pk[crypto_kem_mlkem768_PUBLICKEYBYTES]); |
102 | | int crypto_kem_mlkem768_dec(uint8_t shared_secret[crypto_kem_mlkem768_BYTES], |
103 | | const uint8_t ct[crypto_kem_mlkem768_CIPHERTEXTBYTES], |
104 | | const uint8_t sk[crypto_kem_mlkem768_SECRETKEYBYTES]); |
105 | | int crypto_kem_mlkem768_keypair_seeded(uint8_t pk[crypto_kem_mlkem768_PUBLICKEYBYTES], |
106 | | uint8_t sk[crypto_kem_mlkem768_SECRETKEYBYTES], const uint8_t seed[64]); |
107 | | int crypto_kem_mlkem768_enc_seeded(uint8_t ct[crypto_kem_mlkem768_CIPHERTEXTBYTES], |
108 | | uint8_t shared_secret[crypto_kem_mlkem768_BYTES], |
109 | | const uint8_t pk[crypto_kem_mlkem768_PUBLICKEYBYTES], |
110 | | const uint8_t seed[32]); |
111 | | |
112 | | /* ML-DSA-44 */ |
113 | 0 | #define MLDSA44_PUBLICKEYBYTES 1312 |
114 | 0 | #define MLDSA44_SECRETKEYBYTES 2560 |
115 | 0 | #define MLDSA44_SIGBYTES 2420 |
116 | 0 | #define MLDSA44_SEEDBYTES 32 |
117 | | |
118 | | int crypto_sign_mldsa44_keypair(uint8_t pk[MLDSA44_PUBLICKEYBYTES], |
119 | | uint8_t sk[MLDSA44_SECRETKEYBYTES]); |
120 | | int crypto_sign_mldsa44(uint8_t sig[MLDSA44_SIGBYTES], |
121 | | const uint8_t *msg, size_t msglen, |
122 | | const uint8_t *ctx, size_t ctxlen, |
123 | | const uint8_t sk[MLDSA44_SECRETKEYBYTES]); |
124 | | int crypto_sign_mldsa44_verify(const uint8_t sig[MLDSA44_SIGBYTES], |
125 | | const uint8_t *msg, size_t msglen, |
126 | | const uint8_t *ctx, size_t ctxlen, |
127 | | const uint8_t pk[MLDSA44_PUBLICKEYBYTES]); |
128 | | int crypto_sign_mldsa44_keypair_seeded(uint8_t pk[MLDSA44_PUBLICKEYBYTES], |
129 | | uint8_t sk[MLDSA44_SECRETKEYBYTES], const uint8_t seed[MLDSA44_SEEDBYTES]); |
130 | | int crypto_sign_mldsa44_seeded(uint8_t sig[MLDSA44_SIGBYTES], |
131 | | const uint8_t *msg, size_t msglen, |
132 | | const uint8_t *ctx, size_t ctxlen, |
133 | | const uint8_t sk[MLDSA44_SECRETKEYBYTES], |
134 | | const uint8_t seed[MLDSA44_SEEDBYTES]); |
135 | | |
136 | | /* ML-DSA-65 */ |
137 | | #define MLDSA65_PUBLICKEYBYTES 1952 |
138 | | #define MLDSA65_SECRETKEYBYTES 4032 |
139 | | #define MLDSA65_SIGBYTES 3309 |
140 | | #define MLDSA65_SEEDBYTES 32 |
141 | | |
142 | | #if 0 |
143 | | int crypto_sign_mldsa65_keypair(uint8_t pk[MLDSA65_PUBLICKEYBYTES], |
144 | | uint8_t sk[MLDSA65_SECRETKEYBYTES]); |
145 | | int crypto_sign_mldsa65(uint8_t sig[MLDSA65_SIGBYTES], |
146 | | const uint8_t *msg, size_t msglen, |
147 | | const uint8_t *ctx, size_t ctxlen, |
148 | | const uint8_t sk[MLDSA65_SECRETKEYBYTES]); |
149 | | int crypto_sign_mldsa65_verify(const uint8_t sig[MLDSA65_SIGBYTES], |
150 | | const uint8_t *msg, size_t msglen, |
151 | | const uint8_t *ctx, size_t ctxlen, |
152 | | const uint8_t pk[MLDSA65_PUBLICKEYBYTES]); |
153 | | int crypto_sign_mldsa65_keypair_seeded(uint8_t pk[MLDSA65_PUBLICKEYBYTES], |
154 | | uint8_t sk[MLDSA65_SECRETKEYBYTES], const uint8_t seed[MLDSA65_SEEDBYTES]); |
155 | | int crypto_sign_mldsa65_seeded(uint8_t sig[MLDSA65_SIGBYTES], |
156 | | const uint8_t *msg, size_t msglen, |
157 | | const uint8_t *ctx, size_t ctxlen, |
158 | | const uint8_t sk[MLDSA65_SECRETKEYBYTES], |
159 | | const uint8_t seed[MLDSA65_SEEDBYTES]); |
160 | | #endif |
161 | | |
162 | | /* ML-DSA-87 */ |
163 | | #define MLDSA87_PUBLICKEYBYTES 2592 |
164 | | #define MLDSA87_SECRETKEYBYTES 4896 |
165 | | #define MLDSA87_SIGBYTES 4627 |
166 | | #define MLDSA87_SEEDBYTES 32 |
167 | | |
168 | | int crypto_sign_mldsa87_keypair(uint8_t pk[MLDSA87_PUBLICKEYBYTES], |
169 | | uint8_t sk[MLDSA87_SECRETKEYBYTES]); |
170 | | int crypto_sign_mldsa87(uint8_t sig[MLDSA87_SIGBYTES], |
171 | | const uint8_t *msg, size_t msglen, |
172 | | const uint8_t *ctx, size_t ctxlen, |
173 | | const uint8_t sk[MLDSA87_SECRETKEYBYTES]); |
174 | | int crypto_sign_mldsa87_verify(const uint8_t sig[MLDSA87_SIGBYTES], |
175 | | const uint8_t *msg, size_t msglen, |
176 | | const uint8_t *ctx, size_t ctxlen, |
177 | | const uint8_t pk[MLDSA87_PUBLICKEYBYTES]); |
178 | | int crypto_sign_mldsa87_keypair_seeded(uint8_t pk[MLDSA87_PUBLICKEYBYTES], |
179 | | uint8_t sk[MLDSA87_SECRETKEYBYTES], const uint8_t seed[MLDSA87_SEEDBYTES]); |
180 | | int crypto_sign_mldsa87_seeded(uint8_t sig[MLDSA87_SIGBYTES], |
181 | | const uint8_t *msg, size_t msglen, |
182 | | const uint8_t *ctx, size_t ctxlen, |
183 | | const uint8_t sk[MLDSA87_SECRETKEYBYTES], |
184 | | const uint8_t seed[MLDSA87_SEEDBYTES]); |
185 | | |
186 | | /* MLDSA44-Ed25519-SHA512 */ |
187 | 0 | #define MLDSA44_ED25519_PK_SZ (MLDSA44_PUBLICKEYBYTES + crypto_sign_ed25519_PUBLICKEYBYTES) |
188 | 0 | #define MLDSA44_ED25519_SK_SZ (MLDSA44_SEEDBYTES + crypto_sign_ed25519_SEEDBYTES) |
189 | 0 | #define MLDSA44_ED25519_SIG_SZ (MLDSA44_SIGBYTES + crypto_sign_ed25519_BYTES) |
190 | | |
191 | | int crypto_sign_mldsa44_ed25519_keygen(uint8_t pk[MLDSA44_ED25519_PK_SZ], |
192 | | uint8_t sk[MLDSA44_ED25519_SK_SZ]); |
193 | | int crypto_sign_mldsa44_ed25519_keygen_seeded(uint8_t pk[MLDSA44_ED25519_PK_SZ], |
194 | | uint8_t sk[MLDSA44_ED25519_SK_SZ], |
195 | | const uint8_t mldsa_seed[MLDSA44_SEEDBYTES], |
196 | | const uint8_t ed25519_seed[crypto_sign_ed25519_SEEDBYTES]); |
197 | | int crypto_sign_mldsa44_ed25519_sign(uint8_t sig[MLDSA44_ED25519_SIG_SZ], |
198 | | const uint8_t *msg, size_t msglen, |
199 | | const uint8_t *ctx, size_t ctxlen, |
200 | | const uint8_t sk[MLDSA44_ED25519_SK_SZ]); |
201 | | int crypto_sign_mldsa44_ed25519_verify(const uint8_t sig[MLDSA44_ED25519_SIG_SZ], |
202 | | const uint8_t *msg, size_t msglen, |
203 | | const uint8_t *ctx, size_t ctxlen, |
204 | | const uint8_t pk[MLDSA44_ED25519_PK_SZ]); |
205 | | |
206 | | /* Utility */ |
207 | | void sha3_256(uint8_t digest[32], const uint8_t *data, size_t len); |
208 | | void sha3_512(uint8_t digest[64], const uint8_t *data, size_t len); |
209 | | |
210 | | #endif /* crypto_api_h */ |