Skip to content

Commit 0df2f18

Browse files
committed
Merged PR 15511162: Temporarily disable AES-GCM ZMM implementation for v103.12.0
We need to backport the new composite ML-KEM and composite ML-DSA releases into servicing branches, but we don't want to backport the AES-GCM ZMM implementation yet as it hasn't had enough bake time. This change temporarily disables the implementation for v103.12.0.
1 parent 212ca66 commit 0df2f18

2 files changed

Lines changed: 10 additions & 6 deletions

File tree

CHANGELOG.md

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,15 @@
22
New changes will be listed here as they are developed. The version number is determined
33
prior to the creation of a new release, based on the changes contained in that release.
44

5-
- Added `SymCryptModuleInitEx` function and `SYMCRYPT_MODULE_INIT_EX` macro. Unlike `SymCryptModuleInit` which calls `SymCryptFatal` on version mismatch, `SymCryptModuleInitEx` returns `SYMCRYPT_INVALID_ARGUMENT`, allowing callers to handle the error gracefully.
6-
- Removed enforcement of minimum hash collision strength for HashML-DSA. Per PQC forum discussions, FIPS 204 recommends that hash algorithms used in HashML-DSA should provide collision resistance at least equal to lambda, but this is a recommendation to the caller, not a requirement for the implementation.
7-
85
# Version 103.12.0
96

10-
- Add ZMM (AVX512) implementation of AES-GCM: improves performance by up to 35% on supported hardware
117
- Add loop bounds to ML-DSA functions which use probabilistic sampling, as defense-in-depth against denial of service by maliciously formed keys
128
- There is no known vulnerability associated with this, but adding upper bounds provides additional hardening
139
- Also fixes [#55](https://github.com/microsoft/SymCrypt/issues/55); thanks to Sunwoo Lee and Seunghyun Yoon, Korea Institute of Energy Technology (KENTECH) for filing this issue
1410
- Add Elevated Debugger environment
1511
- Add Composite ML-DSA implementation
12+
- Added `SymCryptModuleInitEx` function and `SYMCRYPT_MODULE_INIT_EX` macro. Unlike `SymCryptModuleInit` which calls `SymCryptFatal` on version mismatch, `SymCryptModuleInitEx` returns `SYMCRYPT_INVALID_ARGUMENT`, allowing callers to handle the error gracefully.
13+
- Removed enforcement of minimum hash collision strength for HashML-DSA. Per PQC forum discussions, FIPS 204 recommends that hash algorithms used in HashML-DSA should provide collision resistance at least equal to lambda, but this is a recommendation to the caller, not a requirement for the implementation.
1614

1715
# Version 103.11.0
1816

lib/aes-default.c

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -507,6 +507,7 @@ SymCryptAesGcmEncryptPartOnePass(
507507
SYMCRYPT_ASSERT( pState->pKey->pBlockCipher->blockSize == SYMCRYPT_GCM_BLOCK_SIZE );
508508

509509
#if SYMCRYPT_CPU_AMD64
510+
#if 0 // AES-GCM ZMM temporarily disabled for backport
510511
// We use SYMCRYPT_CPU_FEATURE_SAVEZMM_NOFAIL to exclude kernel mode, where the use of ZMM
511512
// registers has historically caused problems. We still call SaveZmm/RestoreZmm and
512513
// gracefully fall back if it fails.
@@ -523,7 +524,9 @@ SymCryptAesGcmEncryptPartOnePass(
523524
bytesToProcess );
524525

525526
SymCryptRestoreZmm( &SaveData );
526-
} else if( SYMCRYPT_CPU_FEATURES_PRESENT( SYMCRYPT_CPU_FEATURES_FOR_VAES_256_CODE ) &&
527+
} else
528+
#endif // AES-GCM ZMM disabled
529+
if( SYMCRYPT_CPU_FEATURES_PRESENT( SYMCRYPT_CPU_FEATURES_FOR_VAES_256_CODE ) &&
527530
(bytesToProcess >= GCM_YMM_MINBLOCKS * SYMCRYPT_GCM_BLOCK_SIZE) &&
528531
SymCryptSaveYmm( &SaveData ) == SYMCRYPT_NO_ERROR )
529532
{
@@ -684,6 +687,7 @@ SymCryptAesGcmDecryptPartOnePass(
684687
SYMCRYPT_ASSERT( pState->pKey->pBlockCipher->blockSize == SYMCRYPT_GCM_BLOCK_SIZE );
685688

686689
#if SYMCRYPT_CPU_AMD64
690+
#if 0 // AES-GCM ZMM temporarily disabled for backport
687691
// We use SYMCRYPT_CPU_FEATURE_SAVEZMM_NOFAIL to exclude kernel mode, where the use of ZMM
688692
// registers has historically caused problems. We still call SaveZmm/RestoreZmm and
689693
// gracefully fall back if it fails.
@@ -700,7 +704,9 @@ SymCryptAesGcmDecryptPartOnePass(
700704
bytesToProcess );
701705

702706
SymCryptRestoreZmm( &SaveData );
703-
} else if( SYMCRYPT_CPU_FEATURES_PRESENT( SYMCRYPT_CPU_FEATURES_FOR_VAES_256_CODE ) &&
707+
} else
708+
#endif // AES-GCM ZMM disabled
709+
if( SYMCRYPT_CPU_FEATURES_PRESENT( SYMCRYPT_CPU_FEATURES_FOR_VAES_256_CODE ) &&
704710
(bytesToProcess >= GCM_YMM_MINBLOCKS * SYMCRYPT_GCM_BLOCK_SIZE) &&
705711
SymCryptSaveYmm( &SaveData ) == SYMCRYPT_NO_ERROR )
706712
{

0 commit comments

Comments
 (0)