Skip to content

Commit 0072426

Browse files
author
ipl_ci
committed
[SB][Lib][Feature] Add ML-DSA FIPS selftests (#886)
1 parent 5da8604 commit 0072426

10 files changed

Lines changed: 3063 additions & 10 deletions

File tree

CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,9 @@
22

33
This is a list of notable changes to Intel® Cryptography Primitives Library, in reverse chronological order.
44

5+
## Intel(R) Cryptography Primitives Library 2.1.0
6+
- Added FIPS self-tests for ML-DSA (Module-Lattice-Based Digital Signature Algorithm) operations including key generation, signing, and verification functionality.
7+
58
## Intel(R) Cryptography Primitives Library 2.0.0
69
- Fixed an issue in LMS key and signature generation for certain values of `extraBufSize`.
710
- Added more precise input parameters validation for multi-buffer functions (`mbx_sm3_msg_digest_mb16`, `mbx_sm3_update_mb16`, `mbx_exp_mb8` and `mbx_exp{1024,2048,3072,4096}_mb8`).

README_FIPS.md

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -334,6 +334,24 @@ fips_test_status fips_selftest_ippsLMSVerify (Ipp8u *pBuffer);
334334

335335
, where `pBuffer` is the valid buffer for selftest of size indicated by `fips_selftest_ippsLMSVerify_get_size`.
336336

337+
##### ML-DSA keygen/sign/verify
338+
339+
```cpp
340+
fips_test_status fips_selftest_ippsMLDSA_Sign_get_size_data_buff (int *pDataBuffSize);
341+
fips_test_status fips_selftest_ippsMLDSA_Verify_get_size_data_buff (int *pDataBuffSize);
342+
fips_test_status fips_selftest_ippsMLDSA_KeyGen_get_size_data_buff (int *pDataBuffSize);
343+
fips_test_status fips_selftest_ippsMLDSA_Sign_get_size (int *pBufferSize, Ipp8u *pDataBuff);
344+
fips_test_status fips_selftest_ippsMLDSA_Verify_get_size (int *pBufferSize, Ipp8u *pDataBuff);
345+
fips_test_status fips_selftest_ippsMLDSA_KeyGen_get_size (int *pBufferSize, Ipp8u *pDataBuff);
346+
fips_test_status fips_selftest_ippsMLDSA_Sign (Ipp8u *pBuffer, Ipp8u *pDataBuff);
347+
fips_test_status fips_selftest_ippsMLDSA_Verify (Ipp8u *pBuffer, Ipp8u *pDataBuff);
348+
fips_test_status fips_selftest_ippsMLDSA_KeyGen (Ipp8u *pBuffer, Ipp8u *pDataBuff);
349+
```
350+
351+
, where `pDataBuff` is the valid persistent data buffer of size indicated by
352+
`fips_selftest_ippsMLDSASignVerify_get_size_data_buff`, and `pBuffer` is the valid scratch buffer
353+
of size indicated by `fips_selftest_ippsMLDSASignVerify_get_size`.
354+
337355
##### API for an indicator if a function is FIPS-approved
338356
339357
```cpp

include/ippcp/fips_cert.h

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,17 @@ IPPAPI(fips_test_status, fips_selftest_ippsGFpECSharedSecretDH, (Ipp8u *pGFpBuff
116116
IPPAPI(fips_test_status, fips_selftest_ippsLMSVerify_get_size, (int *pBufferSize))
117117
IPPAPI(fips_test_status, fips_selftest_ippsLMSVerify, (Ipp8u *pDataBuff))
118118

119+
/* ML-DSA keygen/sign/verify */
120+
IPPAPI(fips_test_status, fips_selftest_ippsMLDSA_Sign_get_size_data_buff, (int* pDataBuffSize))
121+
IPPAPI(fips_test_status, fips_selftest_ippsMLDSA_Verify_get_size_data_buff, (int* pDataBuffSize))
122+
IPPAPI(fips_test_status, fips_selftest_ippsMLDSA_KeyGen_get_size_data_buff, (int* pDataBuffSize))
123+
IPPAPI(fips_test_status, fips_selftest_ippsMLDSA_Sign_get_size, (int* pBufferSize, Ipp8u* pDataBuff))
124+
IPPAPI(fips_test_status, fips_selftest_ippsMLDSA_Verify_get_size, (int* pBufferSize, Ipp8u* pDataBuff))
125+
IPPAPI(fips_test_status, fips_selftest_ippsMLDSA_KeyGen_get_size, (int* pBufferSize, Ipp8u* pDataBuff))
126+
IPPAPI(fips_test_status, fips_selftest_ippsMLDSA_Sign, (Ipp8u* pBuffer, Ipp8u* pDataBuff))
127+
IPPAPI(fips_test_status, fips_selftest_ippsMLDSA_Verify, (Ipp8u* pBuffer, Ipp8u* pDataBuff))
128+
IPPAPI(fips_test_status, fips_selftest_ippsMLDSA_KeyGen, (Ipp8u* pBuffer, Ipp8u* pDataBuff))
129+
119130
/*
120131
// Enumerator that contains information about FIPS-approved
121132
// functions inside the ippcp cryptographic boundary
@@ -170,6 +181,9 @@ enum FIPS_IPPCP_FUNC {
170181
RSAEncrypt_OAEP_rmf,
171182
RSADecrypt_OAEP_rmf,
172183
LMSVerify,
184+
MLDSA_KeyGen,
185+
MLDSA_Sign,
186+
MLDSA_Verify,
173187

174188
/* Not approved functions or
175189
* FIPS-mode is not yet implemented, < 0
@@ -247,9 +261,6 @@ enum FIPS_IPPCP_FUNC {
247261
HKDF_extract,
248262
HKDF_expand,
249263
PBKDF2_PKCS5v2,
250-
MLDSA_KeyGen,
251-
MLDSA_Sign,
252-
MLDSA_Verify,
253264
HashDRBG_Instantiate,
254265
HashDRBG_Uninstantiate,
255266
HashDRBG_Reseed,

sources/include/fips_cert_internal/common.h

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -26,12 +26,13 @@
2626

2727
#define IPPCP_IV128_BYTE_LEN (16)
2828

29-
#define IPPCP_AES_ALIGNMENT ((int)sizeof(void*))
30-
#define IPPCP_HASH_ALIGNMENT ((int)sizeof(void*))
31-
#define IPPCP_HMAC_ALIGNMENT ((int)sizeof(void*))
32-
#define IPPCP_GFP_ALIGNMENT ((int)sizeof(void*))
33-
#define IPPCP_BN_ALIGNMENT ((int)sizeof(void*))
34-
#define IPPCP_RSA_ALIGNMENT ((int)sizeof(BNU_CHUNK_T))
29+
#define IPPCP_AES_ALIGNMENT ((int)sizeof(void*))
30+
#define IPPCP_HASH_ALIGNMENT ((int)sizeof(void*))
31+
#define IPPCP_HMAC_ALIGNMENT ((int)sizeof(void*))
32+
#define IPPCP_GFP_ALIGNMENT ((int)sizeof(void*))
33+
#define IPPCP_BN_ALIGNMENT ((int)sizeof(void*))
34+
#define IPPCP_MLDSA_ALIGNMENT ((int)sizeof(void*))
35+
#define IPPCP_RSA_ALIGNMENT ((int)sizeof(BNU_CHUNK_T))
3536

3637
// convert bitsize into 32-bit wordsize
3738
#define IPPCP_BITSIZE_2_WORDSIZE(N_BITS) (((N_BITS) + 31) >> 5)

0 commit comments

Comments
 (0)