Skip to content

Commit 72421bf

Browse files
committed
API: Add check_sk and check_pk to external API
Signed-off-by: Hanno Becker <beckphan@amazon.co.uk>
1 parent 18b4bd7 commit 72421bf

File tree

3 files changed

+45
-4
lines changed

3 files changed

+45
-4
lines changed

mlkem/mlkem_native.h

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -262,6 +262,45 @@ int MLK_API_NAMESPACE(dec)(
262262
const uint8_t ct[MLKEM_CIPHERTEXTBYTES(MLK_CONFIG_API_PARAMETER_SET)],
263263
const uint8_t sk[MLKEM_SECRETKEYBYTES(MLK_CONFIG_API_PARAMETER_SET)]);
264264

265+
/*************************************************
266+
* Name: crypto_kem_check_pk
267+
*
268+
* Description: Implements modulus check mandated by FIPS 203,
269+
* i.e., ensures that coefficients are in [0,q-1].
270+
*
271+
* Arguments: - const uint8_t *pk: pointer to input public key, an array of
272+
* MLKEM{512,768,1024}_PUBLICKEYBYTES bytes.
273+
*
274+
* Returns: - 0 on success
275+
* - -1 on failure
276+
*
277+
* Specification: Implements @[FIPS203, Section 7.2, 'modulus check']
278+
*
279+
**************************************************/
280+
MLK_API_MUST_CHECK_RETURN_VALUE
281+
int MLK_API_NAMESPACE(check_pk)(
282+
const uint8_t pk[MLKEM_PUBLICKEYBYTES(MLK_CONFIG_API_PARAMETER_SET)]);
283+
284+
/*************************************************
285+
* Name: crypto_kem_check_sk
286+
*
287+
* Description: Implements public key hash check mandated by FIPS 203,
288+
* i.e., ensures that
289+
* sk[768𝑘+32 ∶ 768𝑘+64] = H(pk)= H(sk[384𝑘 : 768𝑘+32])
290+
*
291+
* Arguments: - const uint8_t *sk: pointer to input private key, an array of
292+
* MLKEM{512,768,1024}_SECRETKEYBYTES bytes.
293+
*
294+
* Returns: - 0 on success
295+
* - -1 on failure
296+
*
297+
* Specification: Implements @[FIPS203, Section 7.3, 'hash check']
298+
*
299+
**************************************************/
300+
MLK_API_MUST_CHECK_RETURN_VALUE
301+
int MLK_API_NAMESPACE(check_sk)(
302+
const uint8_t sk[MLKEM_SECRETKEYBYTES(MLK_CONFIG_API_PARAMETER_SET)]);
303+
265304
/****************************** SUPERCOP API *********************************/
266305

267306
#if !defined(MLK_CONFIG_API_NO_SUPERCOP)
@@ -278,6 +317,8 @@ int MLK_API_NAMESPACE(dec)(
278317
#define crypto_kem_enc_derand MLK_API_NAMESPACE(enc_derand)
279318
#define crypto_kem_enc MLK_API_NAMESPACE(enc)
280319
#define crypto_kem_dec MLK_API_NAMESPACE(dec)
320+
#define crypto_kem_check_pk MLK_API_NAMESPACE(check_pk)
321+
#define crypto_kem_check_sk MLK_API_NAMESPACE(check_sk)
281322

282323
#else /* !MLK_CONFIG_API_NO_SUPERCOP */
283324

mlkem/src/kem.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ __contract__(
5050

5151

5252
/* Reference: Not implemented in the reference implementation @[REF]. */
53-
MLK_INTERNAL_API
53+
MLK_EXTERNAL_API
5454
MLK_MUST_CHECK_RETURN_VALUE
5555
int crypto_kem_check_pk(const uint8_t pk[MLKEM_INDCCA_PUBLICKEYBYTES])
5656
{
@@ -75,7 +75,7 @@ int crypto_kem_check_pk(const uint8_t pk[MLKEM_INDCCA_PUBLICKEYBYTES])
7575

7676

7777
/* Reference: Not implemented in the reference implementation @[REF]. */
78-
MLK_INTERNAL_API
78+
MLK_EXTERNAL_API
7979
MLK_MUST_CHECK_RETURN_VALUE
8080
int crypto_kem_check_sk(const uint8_t sk[MLKEM_INDCCA_SECRETKEYBYTES])
8181
{

mlkem/src/kem.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@
7777
**************************************************/
7878

7979
/* Reference: Not implemented in the reference implementation @[REF]. */
80-
MLK_INTERNAL_API
80+
MLK_EXTERNAL_API
8181
MLK_MUST_CHECK_RETURN_VALUE
8282
int crypto_kem_check_pk(const uint8_t pk[MLKEM_INDCCA_PUBLICKEYBYTES])
8383
__contract__(
@@ -105,7 +105,7 @@ __contract__(
105105
**************************************************/
106106

107107
/* Reference: Not implemented in the reference implementation @[REF]. */
108-
MLK_INTERNAL_API
108+
MLK_EXTERNAL_API
109109
MLK_MUST_CHECK_RETURN_VALUE
110110
int crypto_kem_check_sk(const uint8_t sk[MLKEM_INDCCA_SECRETKEYBYTES])
111111
__contract__(

0 commit comments

Comments
 (0)