20 if( scError != SYMCRYPT_NO_ERROR )
32 if( scError != SYMCRYPT_NO_ERROR )
55 return SYMCRYPT_WRONG_KEY_SIZE;
59 return SYMCRYPT_FIPS_FAILURE;
77#define N_PARALLEL_TWEAKS 16
79#define SYMCRYPT_XTS_AES_LOCALSCRATCH_DEFN \
80 SYMCRYPT_ALIGN BYTE localScratch[N_PARALLEL_TWEAKS * SYMCRYPT_AES_BLOCK_SIZE];
82#define SYMCRYPT_AesEcbEncryptXxx SymCryptAesEcbEncryptC
84#define SYMCRYPT_XtsAesXxx SymCryptXtsAesEncryptInternalC
85#define SYMCRYPT_XTSAESDATAUNIT_INVOKE \
86 SymCryptXtsAesEncryptDataUnitC( &pExpandedKey->key1, &tweakBuf[i], pbSrc, pbDst, cbDataUnit );
88#undef SYMCRYPT_XtsAesXxx
89#undef SYMCRYPT_XTSAESDATAUNIT_INVOKE
91#define SYMCRYPT_XtsAesXxx SymCryptXtsAesDecryptInternalC
92#define SYMCRYPT_XTSAESDATAUNIT_INVOKE \
93 SymCryptXtsAesDecryptDataUnitC( &pExpandedKey->key1, &tweakBuf[i], pbSrc, pbDst, cbDataUnit );
95#undef SYMCRYPT_XtsAesXxx
96#undef SYMCRYPT_XTSAESDATAUNIT_INVOKE
98#undef SYMCRYPT_AesEcbEncryptXxx
101#if SYMCRYPT_CPU_AMD64 | SYMCRYPT_CPU_X86 | SYMCRYPT_CPU_ARM
102#define SYMCRYPT_AesEcbEncryptXxx SymCryptAesEcbEncryptAsm
104#define SYMCRYPT_XtsAesXxx SymCryptXtsAesEncryptInternalAsm
105#define SYMCRYPT_XTSAESDATAUNIT_INVOKE \
106 SymCryptXtsAesEncryptDataUnitAsm( &pExpandedKey->key1, &tweakBuf[i], pbSrc, pbDst, cbDataUnit );
108#undef SYMCRYPT_XtsAesXxx
109#undef SYMCRYPT_XTSAESDATAUNIT_INVOKE
111#define SYMCRYPT_XtsAesXxx SymCryptXtsAesDecryptInternalAsm
112#define SYMCRYPT_XTSAESDATAUNIT_INVOKE \
113 SymCryptXtsAesDecryptDataUnitAsm( &pExpandedKey->key1, &tweakBuf[i], pbSrc, pbDst, cbDataUnit );
115#undef SYMCRYPT_XtsAesXxx
116#undef SYMCRYPT_XTSAESDATAUNIT_INVOKE
118#undef SYMCRYPT_AesEcbEncryptXxx
121#if SYMCRYPT_CPU_ARM64
122#define SYMCRYPT_AesEcbEncryptXxx SymCryptAesEcbEncryptNeon
124#define SYMCRYPT_XtsAesXxx SymCryptXtsAesEncryptInternalNeon
125#define SYMCRYPT_XTSAESDATAUNIT_INVOKE \
126 SymCryptXtsAesEncryptDataUnitNeon( &pExpandedKey->key1, &tweakBuf[i], pbSrc, pbDst, cbDataUnit );
128#undef SYMCRYPT_XtsAesXxx
129#undef SYMCRYPT_XTSAESDATAUNIT_INVOKE
131#define SYMCRYPT_XtsAesXxx SymCryptXtsAesDecryptInternalNeon
132#define SYMCRYPT_XTSAESDATAUNIT_INVOKE \
133 SymCryptXtsAesDecryptDataUnitNeon( &pExpandedKey->key1, &tweakBuf[i], pbSrc, pbDst, cbDataUnit );
135#undef SYMCRYPT_XtsAesXxx
136#undef SYMCRYPT_XTSAESDATAUNIT_INVOKE
138#undef SYMCRYPT_AesEcbEncryptXxx
141#undef SYMCRYPT_XTS_AES_LOCALSCRATCH_DEFN
144#if SYMCRYPT_CPU_X86 | SYMCRYPT_CPU_AMD64
146#define SYMCRYPT_XTS_AES_LOCALSCRATCH_DEFN \
148 __m128i localScratch[ N_PARALLEL_TWEAKS + 16 ];
149#define SYMCRYPT_AesEcbEncryptXxx SymCryptAesEcbEncryptXmm
151#define SYMCRYPT_XtsAesXxx SymCryptXtsAesEncryptInternalXmm
152#define SYMCRYPT_XTSAESDATAUNIT_INVOKE \
153 SymCryptXtsAesEncryptDataUnitXmm( &pExpandedKey->key1, &tweakBuf[i], (PBYTE) &localScratch[N_PARALLEL_TWEAKS], pbSrc, pbDst, cbDataUnit );
155#undef SYMCRYPT_XtsAesXxx
156#undef SYMCRYPT_XTSAESDATAUNIT_INVOKE
158#define SYMCRYPT_XtsAesXxx SymCryptXtsAesDecryptInternalXmm
159#define SYMCRYPT_XTSAESDATAUNIT_INVOKE \
160 SymCryptXtsAesDecryptDataUnitXmm( &pExpandedKey->key1, &tweakBuf[i], (PBYTE) &localScratch[N_PARALLEL_TWEAKS], pbSrc, pbDst, cbDataUnit );
162#undef SYMCRYPT_XtsAesXxx
163#undef SYMCRYPT_XTSAESDATAUNIT_INVOKE
165#define SYMCRYPT_XtsAesXxx SymCryptXtsAesEncryptInternalYmm
166#define SYMCRYPT_XTSAESDATAUNIT_INVOKE \
167 SymCryptXtsAesEncryptDataUnitYmm_2048( &pExpandedKey->key1, &tweakBuf[i], (PBYTE) &localScratch[N_PARALLEL_TWEAKS], pbSrc, pbDst, cbDataUnit );
169#undef SYMCRYPT_XtsAesXxx
170#undef SYMCRYPT_XTSAESDATAUNIT_INVOKE
172#define SYMCRYPT_XtsAesXxx SymCryptXtsAesDecryptInternalYmm
173#define SYMCRYPT_XTSAESDATAUNIT_INVOKE \
174 SymCryptXtsAesDecryptDataUnitYmm_2048( &pExpandedKey->key1, &tweakBuf[i], (PBYTE) &localScratch[N_PARALLEL_TWEAKS], pbSrc, pbDst, cbDataUnit );
176#undef SYMCRYPT_XtsAesXxx
177#undef SYMCRYPT_XTSAESDATAUNIT_INVOKE
181#define SYMCRYPT_XtsAesXxx SymCryptXtsAesEncryptInternalZmm
182#define SYMCRYPT_XTSAESDATAUNIT_INVOKE \
183 SymCryptXtsAesEncryptDataUnitZmm_2048( &pExpandedKey->key1, &tweakBuf[i], (PBYTE) &localScratch[N_PARALLEL_TWEAKS], pbSrc, pbDst, cbDataUnit );
185#undef SYMCRYPT_XtsAesXxx
186#undef SYMCRYPT_XTSAESDATAUNIT_INVOKE
188#define SYMCRYPT_XtsAesXxx SymCryptXtsAesDecryptInternalZmm
189#define SYMCRYPT_XTSAESDATAUNIT_INVOKE \
190 SymCryptXtsAesDecryptDataUnitZmm_2048( &pExpandedKey->key1, &tweakBuf[i], (PBYTE) &localScratch[N_PARALLEL_TWEAKS], pbSrc, pbDst, cbDataUnit );
192#undef SYMCRYPT_XtsAesXxx
193#undef SYMCRYPT_XTSAESDATAUNIT_INVOKE
197#undef SYMCRYPT_XTS_AES_LOCALSCRATCH_DEFN
198#undef SYMCRYPT_AesEcbEncryptXxx
213#if SYMCRYPT_CPU_AMD64
214 SYMCRYPT_EXTENDED_SAVE_DATA
SaveData;
219 SymCryptSaveYmm( &
SaveData ) == SYMCRYPT_NO_ERROR )
228#elif SYMCRYPT_CPU_X86
229 SYMCRYPT_EXTENDED_SAVE_DATA
SaveData;
232 SymCryptSaveXmm( &
SaveData ) == SYMCRYPT_NO_ERROR )
239#elif SYMCRYPT_CPU_ARM
241#elif SYMCRYPT_CPU_ARM64
312#if SYMCRYPT_CPU_AMD64
313 SYMCRYPT_EXTENDED_SAVE_DATA
SaveData;
318 SymCryptSaveYmm( &
SaveData ) == SYMCRYPT_NO_ERROR )
327#elif SYMCRYPT_CPU_X86
328 SYMCRYPT_EXTENDED_SAVE_DATA
SaveData;
331 SymCryptSaveXmm( &
SaveData ) == SYMCRYPT_NO_ERROR )
338#elif SYMCRYPT_CPU_ARM
340#elif SYMCRYPT_CPU_ARM64
435 UINT64 r0 = (b0 << 1) ^ feedback;
596 pbTweakBlock = &tweakBuf[0];
687 0xef, 0xe5, 0x8b, 0x1a, 0x0b, 0xaf, 0xc1, 0x08,
688 0xe9, 0xb7, 0x74, 0x1c, 0xcb, 0xdc, 0xf8, 0x53,
689 0x4f, 0x90, 0x55, 0x32, 0x53, 0xf6, 0x18, 0xd2,
690 0x34, 0xd5, 0xf2, 0x29, 0xf6, 0x4f, 0xd3, 0x8c,
COMPILER_DEPENDENT_INT64 INT64
COMPILER_DEPENDENT_UINT64 UINT64
const SYMCRYPT_BLOCKCIPHER SymCryptAesBlockCipherNoOpt
VOID SaveData(HWND hwndDlg)
static void cleanup(void)
_ACRTIMP int __cdecl memcmp(const void *, const void *, size_t)
GLenum GLuint GLenum GLsizei const GLchar * buf
#define memcpy(s1, s2, n)
static CRYPT_DATA_BLOB b1[]
#define _Inout_updates_(s)
VOID SYMCRYPT_CALL SymCryptInjectError(PBYTE pbData, SIZE_T cbData)
#define SYMCRYPT_CPU_FEATURES_FOR_AESNI_CODE
#define SYMCRYPT_CPU_FEATURES_FOR_VAES_256_CODE
PSYMCRYPT_BLOCKCIPHER_CRYPT decryptFunc
PSYMCRYPT_BLOCKCIPHER_CRYPT encryptFunc
#define SYMCRYPT_ASSERT(_x)
FORCEINLINE VOID SYMCRYPT_CALL SymCryptWipeKnownSize(_Out_writes_bytes_(cbData) PVOID pbData, SIZE_T cbData)
_Analysis_noreturn_ VOID SYMCRYPT_CALL SymCryptFatal(UINT32 fatalCode)
#define SYMCRYPT_LOAD_LSBFIRST64(p)
SYMCRYPT_ERROR SYMCRYPT_CALL SymCryptAesExpandKey(_Out_ PSYMCRYPT_AES_EXPANDED_KEY pExpandedKey, _In_reads_(cbKey) PCBYTE pbKey, SIZE_T cbKey)
SYMCRYPT_ERROR SYMCRYPT_CALL SymCryptAesExpandKeyEncryptOnly(_Out_ PSYMCRYPT_AES_EXPANDED_KEY pExpandedKey, _In_reads_(cbKey) PCBYTE pbKey, SIZE_T cbKey)
VOID SYMCRYPT_CALL SymCryptXorBytes(_In_reads_(cbBytes) PCBYTE pbSrc1, _In_reads_(cbBytes) PCBYTE pbSrc2, _Out_writes_(cbBytes) PBYTE pbResult, SIZE_T cbBytes)
#define SYMCRYPT_AES_BLOCK_SIZE
#define SYMCRYPT_FLAG_KEY_NO_FIPS
#define SYMCRYPT_STORE_LSBFIRST64(p, v)
BOOLEAN SYMCRYPT_CALL SymCryptEqual(_In_reads_(cbBytes) PCBYTE pbSrc1, _In_reads_(cbBytes) PCBYTE pbSrc2, SIZE_T cbBytes)
VOID SYMCRYPT_CALL SymCryptAesKeyCopy(_In_ PCSYMCRYPT_AES_EXPANDED_KEY pSrc, _Out_ PSYMCRYPT_AES_EXPANDED_KEY pDst)
#define SYMCRYPT_CPU_FEATURES_PRESENT(x)
SYMCRYPT_XTS_AES_EXPANDED_KEY
* PSYMCRYPT_XTS_AES_EXPANDED_KEY
const SYMCRYPT_AES_EXPANDED_KEY * PCSYMCRYPT_AES_EXPANDED_KEY
PCSYMCRYPT_BLOCKCIPHER pBlockCipher
PCBYTE PBYTE SIZE_T cbData
const SYMCRYPT_XTS_AES_EXPANDED_KEY * PCSYMCRYPT_XTS_AES_EXPANDED_KEY
VOID SYMCRYPT_CALL SymCryptXtsAesEncryptDataUnitC(_In_ PCSYMCRYPT_AES_EXPANDED_KEY pExpandedKey, _Inout_updates_(SYMCRYPT_AES_BLOCK_SIZE) PBYTE pbTweakBlock, _In_reads_(cbData) PCBYTE pbSrc, _Out_writes_(cbData) PBYTE pbDst, SIZE_T cbData)
SYMCRYPT_ERROR SYMCRYPT_CALL SymCryptXtsAesExpandKeyEx(_Out_ PSYMCRYPT_XTS_AES_EXPANDED_KEY pExpandedKey, _In_reads_(cbKey) PCBYTE pbKey, SIZE_T cbKey, UINT32 flags)
VOID SYMCRYPT_CALL SymCryptXtsAesDecrypt(_In_ PCSYMCRYPT_XTS_AES_EXPANDED_KEY pExpandedKey, SIZE_T cbDataUnit, UINT64 tweak, _In_reads_(cbData) PCBYTE pbSrc, _Out_writes_(cbData) PBYTE pbDst, SIZE_T cbData)
VOID SYMCRYPT_CALL SymCryptXtsAesSelftest(void)
VOID SYMCRYPT_CALL SymCryptXtsAesDecryptInternal(_In_ PCSYMCRYPT_XTS_AES_EXPANDED_KEY pExpandedKey, SIZE_T cbDataUnit, _In_reads_(SYMCRYPT_AES_BLOCK_SIZE) PCBYTE pbTweak, _In_reads_(cbData) PCBYTE pbSrc, _Out_writes_(cbData) PBYTE pbDst, SIZE_T cbData, BOOLEAN bOverflow)
VOID SYMCRYPT_CALL SymCryptXtsAesEncrypt(_In_ PCSYMCRYPT_XTS_AES_EXPANDED_KEY pExpandedKey, SIZE_T cbDataUnit, UINT64 tweak, _In_reads_(cbData) PCBYTE pbSrc, _Out_writes_(cbData) PBYTE pbDst, SIZE_T cbData)
VOID SYMCRYPT_CALL SymCryptXtsAesEncryptWith128bTweak(_In_ PCSYMCRYPT_XTS_AES_EXPANDED_KEY pExpandedKey, SIZE_T cbDataUnit, _In_reads_(SYMCRYPT_AES_BLOCK_SIZE) PCBYTE pbTweak, _In_reads_(cbData) PCBYTE pbSrc, _Out_writes_(cbData) PBYTE pbDst, SIZE_T cbData)
VOID SYMCRYPT_CALL SymCryptXtsAesEncryptInternal(_In_ PCSYMCRYPT_XTS_AES_EXPANDED_KEY pExpandedKey, SIZE_T cbDataUnit, _In_reads_(SYMCRYPT_AES_BLOCK_SIZE) PCBYTE pbTweak, _In_reads_(cbData) PCBYTE pbSrc, _Out_writes_(cbData) PBYTE pbDst, SIZE_T cbData, BOOLEAN bOverflow)
VOID SYMCRYPT_CALL SymCryptXtsAesDecryptWith128bTweak(_In_ PCSYMCRYPT_XTS_AES_EXPANDED_KEY pExpandedKey, SIZE_T cbDataUnit, _In_reads_(SYMCRYPT_AES_BLOCK_SIZE) PCBYTE pbTweak, _In_reads_(cbData) PCBYTE pbSrc, _Out_writes_(cbData) PBYTE pbDst, SIZE_T cbData)
VOID SYMCRYPT_CALL SymCryptXtsAesDecryptDataUnitC(_In_ PCSYMCRYPT_AES_EXPANDED_KEY pExpandedKey, _Inout_updates_(SYMCRYPT_AES_BLOCK_SIZE) PBYTE pbTweakBlock, _In_reads_(cbData) PCBYTE pbSrc, _Out_writes_(cbData) PBYTE pbDst, SIZE_T cbData)
VOID SYMCRYPT_CALL SymCryptXtsAesDecryptDataUnitAsm(_In_ PCSYMCRYPT_AES_EXPANDED_KEY pExpandedKey, _Inout_updates_(SYMCRYPT_AES_BLOCK_SIZE) PBYTE pbTweakBlock, _In_reads_(cbData) PCBYTE pbSrc, _Out_writes_(cbData) PBYTE pbDst, SIZE_T cbData)
VOID SYMCRYPT_CALL SymCryptXtsUpdateTweak(_Inout_updates_(SYMCRYPT_AES_BLOCK_SIZE) PBYTE buf)
VOID SYMCRYPT_CALL SymCryptXtsAesKeyCopy(_In_ PCSYMCRYPT_XTS_AES_EXPANDED_KEY pSrc, _Out_ PSYMCRYPT_XTS_AES_EXPANDED_KEY pDst)
VOID SYMCRYPT_CALL SymCryptXtsEncryptDataUnit(_In_ PCSYMCRYPT_BLOCKCIPHER pBlockCipher, _In_ PCVOID pExpandedKey, _Inout_updates_(pBlockCipher->blockSize) PBYTE pbTweakBlock, _In_reads_(cbData) PCBYTE pbSrc, _Out_writes_(cbData) PBYTE pbDst, SIZE_T cbData)
static const BYTE SymCryptXtsAesCiphertext[32]
VOID SYMCRYPT_CALL SymCryptXtsAesEncryptDataUnitAsm(_In_ PCSYMCRYPT_AES_EXPANDED_KEY pExpandedKey, _Inout_updates_(SYMCRYPT_AES_BLOCK_SIZE) PBYTE pbTweakBlock, _In_reads_(cbData) PCBYTE pbSrc, _Out_writes_(cbData) PBYTE pbDst, SIZE_T cbData)
SYMCRYPT_ERROR SYMCRYPT_CALL SymCryptXtsAesExpandKey(_Out_ PSYMCRYPT_XTS_AES_EXPANDED_KEY pExpandedKey, _In_reads_(cbKey) PCBYTE pbKey, SIZE_T cbKey)
VOID SYMCRYPT_CALL SymCryptXtsDecryptDataUnit(_In_ PCSYMCRYPT_BLOCKCIPHER pBlockCipher, _In_ PCVOID pExpandedKey, _Inout_updates_(pBlockCipher->blockSize) PBYTE pbTweakBlock, _In_reads_(cbData) PCBYTE pbSrc, _Out_writes_(cbData) PBYTE pbDst, SIZE_T cbData)