Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

dilithium: small cleanup to support wolfboot. #7983

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion wolfcrypt/src/dilithium.c
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@
* but is slower.
* WOLFSSL_DILITHIUM_SMALL_MEM_POLY64 Default: OFF
* Compiles the small memory implementations to use a 64-bit polynomial.
* Uses 2KB of memory but is slighlty quicker (2.75-7%).
* Uses 2KB of memory but is slightly quicker (2.75-7%).
*
* WOLFSSL_DILITHIUM_ALIGNMENT Default: 8
* Use to indicate whether loading and storing of words needs to be aligned.
Expand Down
26 changes: 26 additions & 0 deletions wolfcrypt/test/test.c
Original file line number Diff line number Diff line change
Expand Up @@ -42080,16 +42080,25 @@ static wc_test_ret_t dilithium_param_vfy_test(int param, const byte* pubKey,
{
byte msg[512];
dilithium_key* key;
byte * pubExported = NULL;
wc_test_ret_t ret;
int i;
int res = 0;
word32 lenExported = pubKeyLen;
int n_diff = 0;

key = (dilithium_key*)XMALLOC(sizeof(*key), HEAP_HINT,
DYNAMIC_TYPE_TMP_BUFFER);
if (key == NULL) {
ERROR_OUT(WC_TEST_RET_ENC_ERRNO, out);
}

pubExported = (byte*)XMALLOC(pubKeyLen, HEAP_HINT,
DYNAMIC_TYPE_TMP_BUFFER);
if (pubExported == NULL) {
ERROR_OUT(WC_TEST_RET_ENC_ERRNO, out);
}

/* make dummy msg */
for (i = 0; i < (int)sizeof(msg); i++) {
msg[i] = (byte)i;
Expand All @@ -42108,6 +42117,22 @@ static wc_test_ret_t dilithium_param_vfy_test(int param, const byte* pubKey,
if (ret != 0)
ERROR_OUT(WC_TEST_RET_ENC_EC(ret), out);

/* Now test the ExportPubRaw API, verify we recover the original pub. */
ret = wc_dilithium_export_public(key, pubExported, &lenExported);
if (ret != 0) {
ERROR_OUT(WC_TEST_RET_ENC_EC(ret), out);
}

if (lenExported <= 0 || lenExported != pubKeyLen) {
ERROR_OUT(WC_TEST_RET_ENC_EC(lenExported), out);
}

n_diff = XMEMCMP(pubExported, pubKey, pubKeyLen);

if (n_diff) {
ERROR_OUT(WC_TEST_RET_ENC_EC(n_diff), out);
}

#ifndef WOLFSSL_DILITHIUM_FIPS204_DRAFT
ret = wc_dilithium_verify_ctx_msg(sig, sigLen, NULL, 0, msg,
(word32)sizeof(msg), &res, key);
Expand All @@ -42122,6 +42147,7 @@ static wc_test_ret_t dilithium_param_vfy_test(int param, const byte* pubKey,
out:
wc_dilithium_free(key);
XFREE(key, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER);
XFREE(pubExported, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER);
return ret;
}

Expand Down
5 changes: 3 additions & 2 deletions wolfssl/wolfcrypt/dilithium.h
Original file line number Diff line number Diff line change
Expand Up @@ -726,6 +726,7 @@ int wc_dilithium_export_public(dilithium_key* key, byte* out, word32* outLen);
#ifdef WOLFSSL_DILITHIUM_PRIVATE_KEY
WOLFSSL_API
int wc_dilithium_export_private(dilithium_key* key, byte* out, word32* outLen);
#define wc_dilithium_export_private_only wc_dilithium_export_private
JacobBarthelmeh marked this conversation as resolved.
Show resolved Hide resolved
#endif
#ifdef WOLFSSL_DILITHIUM_PRIVATE_KEY
WOLFSSL_API
Expand Down Expand Up @@ -798,15 +799,15 @@ WOLFSSL_API int wc_Dilithium_PrivateKeyToDer(dilithium_key* key, byte* output,
#define wc_MlDsaKey_ExportPrivRaw(key, out, outLen) \
wc_dilithium_export_private_only(key, out, outLen)
#define wc_MlDsaKey_ImportPrivRaw(key, in, inLen) \
wc_dilithium_import_private_only(out, outLen, key)
wc_dilithium_import_private_only(in, inLen, key)
#define wc_MlDsaKey_Sign(key, sig, sigSz, msg, msgSz, rng) \
wc_dilithium_sign_msg(msg, msgSz, sig, sigSz, key, rng)
#define wc_MlDsaKey_Free(key) \
wc_dilithium_free(key)
#define wc_MlDsaKey_ExportPubRaw(key, out, outLen) \
wc_dilithium_export_public(key, out, outLen)
#define wc_MlDsaKey_ImportPubRaw(key, in, inLen) \
wc_dilithium_import_public(out, outLen, key)
wc_dilithium_import_public(in, inLen, key)
#define wc_MlDsaKey_Verify(key, sig, sigSz, msg, msgSz, res) \
wc_dilithium_verify_msg(sig, sigSz, msg, msgSz, res, key)

Expand Down