Coverage Report

Created: 2026-07-10 07:10

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/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 */