26
26
27
27
#include "./ml_kem.h"
28
28
29
+ // AArch64 backend
30
+ #if defined(OPENSSL_AARCH64 ) && !defined(OPENSSL_NO_ASM )
31
+ #include "aarch64/constants.c"
32
+ #endif
33
+
29
34
typedef struct {
30
35
uint8_t * buffer ;
31
36
size_t * length ;
@@ -92,7 +97,7 @@ int ml_kem_512_keypair_deterministic_no_self_test(uint8_t *public_key /* OUT */
92
97
if (!check_buffer (pkey ) || !check_buffer (skey )) {
93
98
return 1 ;
94
99
}
95
- const int res = mlkem512_keypair_derand (pkey .buffer , skey .buffer , seed );
100
+ const int res = mlkem_native512_keypair_derand (pkey .buffer , skey .buffer , seed );
96
101
#if defined(AWSLC_FIPS )
97
102
/* PCT failure is the only failure condition for key generation. */
98
103
if (res != 0 ) {
@@ -110,7 +115,7 @@ int ml_kem_512_keypair(uint8_t *public_key /* OUT */,
110
115
size_t * secret_len /* IN_OUT */ ) {
111
116
output_buffer pkey = {public_key , public_len , MLKEM512_PUBLIC_KEY_BYTES };
112
117
output_buffer skey = {secret_key , secret_len , MLKEM512_SECRET_KEY_BYTES };
113
- return ml_kem_common_keypair (mlkem512_keypair , pkey , skey );
118
+ return ml_kem_common_keypair (mlkem_native512_keypair , pkey , skey );
114
119
}
115
120
116
121
int ml_kem_512_encapsulate_deterministic (uint8_t * ciphertext /* OUT */ ,
@@ -131,7 +136,7 @@ int ml_kem_512_encapsulate_deterministic_no_self_test(uint8_t *ciphertext
131
136
const uint8_t * seed /* IN */ ) {
132
137
output_buffer ctext = {ciphertext , ciphertext_len , MLKEM512_CIPHERTEXT_BYTES };
133
138
output_buffer ss = {shared_secret , shared_secret_len , MLKEM512_SHARED_SECRET_LEN };
134
- return ml_kem_common_encapsulate_deterministic (mlkem512_enc_derand , ctext , ss , public_key , seed );
139
+ return ml_kem_common_encapsulate_deterministic (mlkem_native512_enc_derand , ctext , ss , public_key , seed );
135
140
}
136
141
137
142
int ml_kem_512_encapsulate (uint8_t * ciphertext /* OUT */ ,
@@ -141,7 +146,7 @@ int ml_kem_512_encapsulate(uint8_t *ciphertext /* OUT */,
141
146
const uint8_t * public_key /* IN */ ) {
142
147
output_buffer ctext = {ciphertext , ciphertext_len , MLKEM512_CIPHERTEXT_BYTES };
143
148
output_buffer ss = {shared_secret , shared_secret_len , MLKEM512_SHARED_SECRET_LEN };
144
- return ml_kem_common_encapsulate (mlkem512_enc , ctext , ss , public_key );
149
+ return ml_kem_common_encapsulate (mlkem_native512_enc , ctext , ss , public_key );
145
150
}
146
151
147
152
int ml_kem_512_decapsulate (uint8_t * shared_secret /* OUT */ ,
@@ -157,7 +162,7 @@ int ml_kem_512_decapsulate_no_self_test(uint8_t *shared_secret /* OUT */,
157
162
const uint8_t * ciphertext /* IN */ ,
158
163
const uint8_t * secret_key /* IN */ ) {
159
164
output_buffer ss = {shared_secret , shared_secret_len , MLKEM512_SHARED_SECRET_LEN };
160
- return ml_kem_common_decapsulate (mlkem512_dec , ss , ciphertext , secret_key );
165
+ return ml_kem_common_decapsulate (mlkem_native512_dec , ss , ciphertext , secret_key );
161
166
}
162
167
163
168
@@ -181,7 +186,7 @@ int ml_kem_768_keypair_deterministic_no_self_test(uint8_t *public_key /* OUT */,
181
186
if (!check_buffer (pkey ) || !check_buffer (skey )) {
182
187
return 1 ;
183
188
}
184
- const int res = mlkem768_keypair_derand (pkey .buffer , skey .buffer , seed );
189
+ const int res = mlkem_native768_keypair_derand (pkey .buffer , skey .buffer , seed );
185
190
#if defined(AWSLC_FIPS )
186
191
/* PCT failure is the only failure condition for key generation. */
187
192
if (res != 0 ) {
@@ -199,7 +204,7 @@ int ml_kem_768_keypair(uint8_t *public_key /* OUT */,
199
204
size_t * secret_len /* IN_OUT */ ) {
200
205
output_buffer pkey = {public_key , public_len , MLKEM768_PUBLIC_KEY_BYTES };
201
206
output_buffer skey = {secret_key , secret_len , MLKEM768_SECRET_KEY_BYTES };
202
- return ml_kem_common_keypair (mlkem768_keypair , pkey , skey );
207
+ return ml_kem_common_keypair (mlkem_native768_keypair , pkey , skey );
203
208
}
204
209
205
210
int ml_kem_768_encapsulate_deterministic (uint8_t * ciphertext /* OUT */ ,
@@ -220,7 +225,7 @@ int ml_kem_768_encapsulate_deterministic_no_self_test(uint8_t *ciphertext
220
225
const uint8_t * seed /* IN */ ) {
221
226
output_buffer ctext = {ciphertext , ciphertext_len , MLKEM768_CIPHERTEXT_BYTES };
222
227
output_buffer ss = {shared_secret , shared_secret_len , MLKEM768_SHARED_SECRET_LEN };
223
- return ml_kem_common_encapsulate_deterministic (mlkem768_enc_derand , ctext , ss , public_key , seed );
228
+ return ml_kem_common_encapsulate_deterministic (mlkem_native768_enc_derand , ctext , ss , public_key , seed );
224
229
}
225
230
226
231
int ml_kem_768_encapsulate (uint8_t * ciphertext /* OUT */ ,
@@ -230,7 +235,7 @@ int ml_kem_768_encapsulate(uint8_t *ciphertext /* OUT */,
230
235
const uint8_t * public_key /* IN */ ) {
231
236
output_buffer ctext = {ciphertext , ciphertext_len , MLKEM768_CIPHERTEXT_BYTES };
232
237
output_buffer ss = {shared_secret , shared_secret_len , MLKEM768_SHARED_SECRET_LEN };
233
- return ml_kem_common_encapsulate (mlkem768_enc , ctext , ss , public_key );
238
+ return ml_kem_common_encapsulate (mlkem_native768_enc , ctext , ss , public_key );
234
239
}
235
240
236
241
int ml_kem_768_decapsulate (uint8_t * shared_secret /* OUT */ ,
@@ -246,7 +251,7 @@ int ml_kem_768_decapsulate_no_self_test(uint8_t *shared_secret /* OUT */,
246
251
const uint8_t * ciphertext /* IN */ ,
247
252
const uint8_t * secret_key /* IN */ ) {
248
253
output_buffer ss = {shared_secret , shared_secret_len , MLKEM768_SHARED_SECRET_LEN };
249
- return ml_kem_common_decapsulate (mlkem768_dec , ss , ciphertext , secret_key );
254
+ return ml_kem_common_decapsulate (mlkem_native768_dec , ss , ciphertext , secret_key );
250
255
}
251
256
252
257
int ml_kem_1024_keypair_deterministic (uint8_t * public_key /* OUT */ ,
@@ -268,7 +273,7 @@ int ml_kem_1024_keypair_deterministic_no_self_test(uint8_t *public_key /* OUT */
268
273
if (!check_buffer (pkey ) || !check_buffer (skey )) {
269
274
return 1 ;
270
275
}
271
- const int res = mlkem1024_keypair_derand (pkey .buffer , skey .buffer , seed );
276
+ const int res = mlkem_native1024_keypair_derand (pkey .buffer , skey .buffer , seed );
272
277
#if defined(AWSLC_FIPS )
273
278
/* PCT failure is the only failure condition for key generation. */
274
279
if (res != 0 ) {
@@ -286,7 +291,7 @@ int ml_kem_1024_keypair(uint8_t *public_key /* OUT */,
286
291
size_t * secret_len /* IN_OUT */ ) {
287
292
output_buffer pkey = {public_key , public_len , MLKEM1024_PUBLIC_KEY_BYTES };
288
293
output_buffer skey = {secret_key , secret_len , MLKEM1024_SECRET_KEY_BYTES };
289
- return ml_kem_common_keypair (mlkem1024_keypair , pkey , skey );
294
+ return ml_kem_common_keypair (mlkem_native1024_keypair , pkey , skey );
290
295
}
291
296
292
297
int ml_kem_1024_encapsulate_deterministic (uint8_t * ciphertext /* OUT */ ,
@@ -307,7 +312,7 @@ int ml_kem_1024_encapsulate_deterministic_no_self_test(uint8_t *ciphertext
307
312
const uint8_t * seed /* IN */ ) {
308
313
output_buffer ctext = {ciphertext , ciphertext_len , MLKEM1024_CIPHERTEXT_BYTES };
309
314
output_buffer ss = {shared_secret , shared_secret_len , MLKEM1024_SHARED_SECRET_LEN };
310
- return ml_kem_common_encapsulate_deterministic (mlkem1024_enc_derand , ctext , ss , public_key , seed );
315
+ return ml_kem_common_encapsulate_deterministic (mlkem_native1024_enc_derand , ctext , ss , public_key , seed );
311
316
}
312
317
313
318
int ml_kem_1024_encapsulate (uint8_t * ciphertext /* OUT */ ,
@@ -317,7 +322,7 @@ int ml_kem_1024_encapsulate(uint8_t *ciphertext /* OUT */,
317
322
const uint8_t * public_key /* IN */ ) {
318
323
output_buffer ctext = {ciphertext , ciphertext_len , MLKEM1024_CIPHERTEXT_BYTES };
319
324
output_buffer ss = {shared_secret , shared_secret_len , MLKEM1024_SHARED_SECRET_LEN };
320
- return ml_kem_common_encapsulate (mlkem1024_enc , ctext , ss , public_key );
325
+ return ml_kem_common_encapsulate (mlkem_native1024_enc , ctext , ss , public_key );
321
326
}
322
327
323
328
int ml_kem_1024_decapsulate (uint8_t * shared_secret /* OUT */ ,
@@ -333,7 +338,7 @@ int ml_kem_1024_decapsulate_no_self_test(uint8_t *shared_secret /* OUT */,
333
338
const uint8_t * ciphertext /* IN */ ,
334
339
const uint8_t * secret_key /* IN */ ) {
335
340
output_buffer ss = {shared_secret , shared_secret_len , MLKEM1024_SHARED_SECRET_LEN };
336
- return ml_kem_common_decapsulate (mlkem1024_dec , ss , ciphertext , secret_key );
341
+ return ml_kem_common_decapsulate (mlkem_native1024_dec , ss , ciphertext , secret_key );
337
342
}
338
343
339
344
int ml_kem_common_keypair (int (* keypair )(uint8_t * public_key , uint8_t * secret_key ),
0 commit comments