Skip to content

Commit c0d53cf

Browse files
committed
Merged PR 12004683: Fix ML-DSA kernel mode tests
## Description: Fixes ML-DSA kernel mode tests by removing places where the test driver tries to dereference key objects which may be in kernel address space. Also removed deprecated "kernel" option from `symcryptunittest.exe`, which doesn't do anything anymore and hasn't for some time.
1 parent 083be6c commit c0d53cf

File tree

4 files changed

+23
-25
lines changed

4 files changed

+23
-25
lines changed

unittest/inc/algorithm_base.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -865,6 +865,12 @@ class DsaImplementation: public AlgorithmImplementation
865865
#define SYMCRYPT_TEST_MLDSA_MAX_KEY_SIZE (4896) // Maximum size of an encoded ML-DSA private + public key - see SymCryptMlDsaInternalParams87
866866
#define SYMCRYPT_TEST_MLDSA_MAX_SIG_SIZE SYMCRYPT_MLDSA_SIGNATURE_SIZE_MLDSA87
867867

868+
typedef struct _SYMCRYPT_PERF_MLDSAKEY {
869+
SIZE_T keySize;
870+
SYMCRYPT_MLDSA_PARAMS params;
871+
PSYMCRYPT_MLDSAKEY pkMlDsakey;
872+
} SYMCRYPT_PERF_MLDSAKEY, *PSYMCRYPT_PERF_MLDSAKEY;
873+
868874
typedef struct _MLDSAKEY_TESTBLOB {
869875
SYMCRYPT_MLDSA_PARAMS params;
870876
SYMCRYPT_MLDSAKEY_FORMAT format;

unittest/inc/sc_implementations_pattern.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -513,9 +513,11 @@ template<>
513513
class PqDsaImpState<ImpXxx, AlgMlDsa> {
514514
public:
515515
PSYMCRYPT_MLDSAKEY pKey;
516+
SYMCRYPT_MLDSA_PARAMS params;
516517

517518
PqDsaImpState() :
518-
pKey(nullptr)
519+
pKey(nullptr),
520+
params(SYMCRYPT_MLDSA_PARAMS_NULL)
519521
{ }
520522

521523
~PqDsaImpState()

unittest/lib/main.cpp

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,6 @@ SIZE_T g_modeCfbShiftParam = 1;
5757
Rng g_rng;
5858

5959
BOOL g_modifiedCpuFeatures = FALSE;
60-
BOOL g_runKernelmodeTest = FALSE;
6160
BOOL g_failRegisterSave = FALSE;
6261
BOOL g_runRsaAverageKeyPerf = FALSE;
6362

@@ -465,7 +464,6 @@ usage()
465464
" output of test command with a specific string. This can enable\n"
466465
" easier concatenation of many test runs on differing platforms into\n"
467466
" a single .csv for postprocessing.\n"
468-
" kernel Run the kernel-mode tests \n"
469467
" verbose Print detailed information for some algorithms\n"
470468
" noperftests Skip running the performance tests - only run functional tests\n"
471469
" profile:xxx [key=yyy] Run one or more algorithms in a tight loop, xxx times for\n"
@@ -734,12 +732,6 @@ processSingleOption( _In_ PSTR option )
734732
optionHandled = TRUE;
735733
}
736734

737-
if( STRICMP( &option[0], "kernel" ) == 0 )
738-
{
739-
g_runKernelmodeTest = TRUE;
740-
optionHandled = TRUE;
741-
}
742-
743735
if( STRICMP( &option[0], "rsakgp" ) == 0 )
744736
{
745737
g_runRsaAverageKeyPerf = TRUE;
@@ -1380,7 +1372,7 @@ runFunctionalTests()
13801372
VOID
13811373
runPerfTests()
13821374
{
1383-
if( g_runKernelmodeTest || g_noPerfTests )
1375+
if( g_noPerfTests )
13841376
{
13851377
return;
13861378
}

unittest/lib/sc_imp_pattern.cpp

Lines changed: 13 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -10487,11 +10487,7 @@ ArithImp<ImpXxx, AlgMlKemkeySetValue>::~ArithImp()
1048710487
////////////////////////////////////////////////////////////////////////////
1048810488

1048910489
// Table with the ML-DSA keys' sizes and pointers to keys
10490-
struct {
10491-
SIZE_T keySize;
10492-
SYMCRYPT_MLDSA_PARAMS params;
10493-
PSYMCRYPT_MLDSAKEY pkMlDsakey;
10494-
} CONCAT2(g_precomputedMlDsaKeys, ImpXxx)[] = {
10490+
SYMCRYPT_PERF_MLDSAKEY CONCAT2(g_precomputedMlDsaKeys, ImpXxx)[] = {
1049510491
{ PERF_KEY_MLDSA_44, SYMCRYPT_MLDSA_PARAMS_MLDSA44, NULL },
1049610492
{ PERF_KEY_MLDSA_65, SYMCRYPT_MLDSA_PARAMS_MLDSA65, NULL },
1049710493
{ PERF_KEY_MLDSA_87, SYMCRYPT_MLDSA_PARAMS_MLDSA87, NULL },
@@ -10526,7 +10522,7 @@ SetupSymCryptMlDsaKey<ImpXxx>( PBYTE pbKey, SIZE_T keySize )
1052610522

1052710523
CHECK( bFound, "Invalid ML-DSA parameter set (key size)" );
1052810524

10529-
*((PSYMCRYPT_MLDSAKEY *) pbKey) = CONCAT2(g_precomputedMlDsaKeys, ImpXxx)[i].pkMlDsakey;
10525+
*((PSYMCRYPT_PERF_MLDSAKEY *) pbKey) = &(CONCAT2(g_precomputedMlDsaKeys, ImpXxx)[i]);
1053010526
}
1053110527

1053210528
template<>
@@ -10538,7 +10534,7 @@ algImpKeyPerfFunction<ImpXxx, AlgMlDsa>( PBYTE pbKey, PBYTE buf2, PBYTE buf3, SI
1053810534

1053910535
SYMCRYPT_ERROR scError = SYMCRYPT_NO_ERROR;
1054010536
SYMCRYPT_MLDSA_PARAMS params = SYMCRYPT_MLDSA_PARAMS_NULL;
10541-
PSYMCRYPT_MLDSAKEY* ppkMlDsakey = (PSYMCRYPT_MLDSAKEY *) pbKey;
10537+
PSYMCRYPT_PERF_MLDSAKEY* ppKeyInfo = (PSYMCRYPT_PERF_MLDSAKEY *) pbKey;
1054210538

1054310539
switch( keySize )
1054410540
{
@@ -10558,7 +10554,7 @@ algImpKeyPerfFunction<ImpXxx, AlgMlDsa>( PBYTE pbKey, PBYTE buf2, PBYTE buf3, SI
1055810554

1055910555
SetupSymCryptMlDsaKey<ImpXxx>( pbKey, keySize );
1056010556

10561-
scError = ScShimSymCryptMlDsakeyGenerate( *ppkMlDsakey, 0 );
10557+
scError = ScShimSymCryptMlDsakeyGenerate( (*ppKeyInfo)->pkMlDsakey, 0 );
1056210558
CHECK( scError == SYMCRYPT_NO_ERROR, "SymCryptMlDsakeyGenerate" );
1056310559
}
1056410560

@@ -10567,17 +10563,17 @@ VOID
1056710563
algImpDataPerfFunction<ImpXxx, AlgMlDsa>( PBYTE pbKey, PBYTE pbMessage, PBYTE pbSignature, SIZE_T cbData )
1056810564
{
1056910565
SYMCRYPT_ERROR scError = SYMCRYPT_NO_ERROR;
10570-
PCSYMCRYPT_MLDSAKEY* ppkMlDsakey = (PCSYMCRYPT_MLDSAKEY*) pbKey;
10566+
PSYMCRYPT_PERF_MLDSAKEY* ppKeyInfo = (PSYMCRYPT_PERF_MLDSAKEY *) pbKey;
1057110567
SIZE_T cbSignature = 0;
1057210568

1057310569
scError = ScShimSymCryptMlDsaSizeofSignatureFromParams(
10574-
(SYMCRYPT_MLDSA_PARAMS) (*ppkMlDsakey)->pParams->params,
10570+
(*ppKeyInfo)->params,
1057510571
&cbSignature );
1057610572
CHECK( scError == SYMCRYPT_NO_ERROR, "SymCryptMlDsaSizeofSignatureFromParams" );
1057710573
CHECK( cbSignature <= PERF_BUFFER_SIZE, "Signature buffer too small" );
1057810574

1057910575
scError = ScShimSymCryptMlDsaSign(
10580-
*ppkMlDsakey,
10576+
(*ppKeyInfo)->pkMlDsakey,
1058110577
pbMessage, cbData,
1058210578
nullptr, 0, // context
1058310579
0, // flags
@@ -10590,17 +10586,17 @@ VOID
1059010586
algImpDecryptPerfFunction<ImpXxx, AlgMlDsa>( PBYTE pbKey, PBYTE pbMessage, PBYTE pbSignature, SIZE_T cbData )
1059110587
{
1059210588
SYMCRYPT_ERROR scError = SYMCRYPT_NO_ERROR;
10593-
PCSYMCRYPT_MLDSAKEY* ppkMlDsakey = (PCSYMCRYPT_MLDSAKEY*) pbKey;
10589+
PSYMCRYPT_PERF_MLDSAKEY* ppKeyInfo = (PSYMCRYPT_PERF_MLDSAKEY *) pbKey;
1059410590
SIZE_T cbSignature = 0;
1059510591

1059610592
scError = ScShimSymCryptMlDsaSizeofSignatureFromParams(
10597-
(SYMCRYPT_MLDSA_PARAMS) (*ppkMlDsakey)->pParams->params,
10593+
(*ppKeyInfo)->params,
1059810594
&cbSignature );
1059910595
CHECK( scError == SYMCRYPT_NO_ERROR, "SymCryptMlDsaSizeofSignatureFromParams" );
1060010596
CHECK( cbSignature <= PERF_BUFFER_SIZE, "Signature buffer too small" );
1060110597

1060210598
scError = ScShimSymCryptMlDsaVerify(
10603-
*ppkMlDsakey,
10599+
(*ppKeyInfo)->pkMlDsakey,
1060410600
pbMessage, cbData,
1060510601
nullptr, 0, // context
1060610602
pbSignature, cbSignature,
@@ -10641,6 +10637,8 @@ PqDsaImp<ImpXxx, AlgMlDsa>::setKey(
1064110637
state.pKey = ScShimSymCryptMlDsakeyAllocate( testMldsakey->params );
1064210638
CHECK( state.pKey != nullptr, "SymCryptMlDsakeyAllocate" );
1064310639

10640+
state.params = testMldsakey->params;
10641+
1064410642
scError = ScShimSymCryptMlDsakeySetValue(
1064510643
testMldsakey->abKeyBlob,
1064610644
testMldsakey->cbKeyBlob,
@@ -10663,7 +10661,7 @@ PqDsaImp<ImpXxx, AlgMlDsa>::getBlobFromKey(
1066310661
SIZE_T cbExpected = 0;
1066410662

1066510663
scError = ScShimSymCryptMlDsaSizeofKeyFormatFromParams(
10666-
(SYMCRYPT_MLDSA_PARAMS) state.pKey->pParams->params,
10664+
state.params,
1066710665
(SYMCRYPT_MLDSAKEY_FORMAT) keyFormat,
1066810666
&cbExpected );
1066910667
CHECK( scError == SYMCRYPT_NO_ERROR, "SymCryptMlDsaSizeofKeyFormatFromParams" );

0 commit comments

Comments
 (0)