ReactOS 0.4.17-dev-1005-g171e1de
sc_lib.h
Go to the documentation of this file.
1//
2// sc_lib.h
3//
4// Copyright (c) Microsoft Corporation. Licensed under the MIT license.
5//
6// Internal definitions for the symcrypt library.
7// This include file is used only for the files inside the library, not by
8// the code that calls the library.
9//
10
11
12#if SYMCRYPT_MS_VC
13#define SYMCRYPT_DISABLE_CFG __declspec(guard(nocf))
14#else
15#define SYMCRYPT_DISABLE_CFG
16#endif
17
18//
19// Global flags
20//
21
22#define SYMCRYPT_FLAG_LIB_INITIALIZED 0x00000001
23
25
26//==============================================================================================
27// Common environment functions
28//==============================================================================================
29
30VOID
33
35VOID
37SymCryptFatalHang( UINT32 fatalcode );
38
39#include <symcrypt_low_level.h>
40
41// Types
42
43typedef int BOOL;
44
45#if !defined(TRUE)
46#define TRUE (1)
47#endif
48
49#if !defined(FALSE)
50#define FALSE (0)
51#endif
52
53#if !defined(UNREFERENCED_PARAMETER)
54#define UNREFERENCED_PARAMETER(x) ((void)x)
55#endif
56
57#if !defined(FAST_FAIL_CRYPTO_LIBRARY)
58#define FAST_FAIL_CRYPTO_LIBRARY 22
59#endif
60
61//
62// We want to write some of our code to use the native register size provided by the platform we are using to enable
63// generic code to compile into reasonable performant versions on 32b and 64b platforms. Below definitions give us
64// this flexibility without relying on compiler specifics.
65//
66// WARNING: Some use of NATIVE_UINT also relies on the little-endianness of the 64b platform; our generic code normally
67// uses UINT32, and at the time of writing mixing UINT32 and NATIVE_UINT will not work on a big-endian 64b platform!
68//
69#if SYMCRYPT_CPU_AMD64 | SYMCRYPT_CPU_ARM64
70typedef INT64 NATIVE_INT;
71typedef UINT64 NATIVE_UINT;
72#define NATIVE_BITS (64)
73#define NATIVE_BYTES (8)
74#define NATIVE_BYTES_LOG2 (3)
75#else
78#define NATIVE_BITS (32)
79#define NATIVE_BYTES (4)
80#define NATIVE_BYTES_LOG2 (2)
81#endif
82
83
84//
85// Our Wipe code uses FORCE_WRITE* which are implemented using
86// WriteNoFence* functions. Unfortunately, they declare their parameter
87// to be interlocked, and the compiler complains when we also access the variable
88// using non-interlocked code.
89// This warning is nonsensical in our situation, so we disable it.
90// The second warning is about accessing a local variable via an interlocked ptr.
91//
92#pragma prefast( disable:28112 )
93#pragma prefast( disable:28113 )
94#pragma warning( disable: 4702 ) // unreachable code. The compilers are not equally smart, and some complain
95 // about 'function must return a value' and some about 'unreachable code'
96#pragma warning( disable: 4296 ) // expression is always false - this warning is forced to be an error by a
97 // pragma in the SDK warning.h, but we don't consider it useful
98
99
100//
101// These macros allow a bunch of generic code to be written.
102// For example, the Hash append function is written once generically
103// using these macros.
104//
105
106#define CONCAT_I2( a, b ) a##b
107#define CONCAT_I3( a, b, c ) a##b##c
108
109
110#define CONCAT2( a, b ) CONCAT_I2( a, b )
111#define CONCAT3( a, b, c ) CONCAT_I3( a, b, c )
112//#define CONCAT4( a, b, c, d) a##b##c##d
113
114
115
116#define SYMCRYPT_XXX_STATE CONCAT3( SYMCRYPT_, ALG, _STATE )
117#define PSYMCRYPT_XXX_STATE CONCAT3( PSYMCRYPT_, ALG, _STATE )
118#define PCSYMCRYPT_XXX_STATE CONCAT3( PCSYMCRYPT_, ALG, _STATE )
119
120#define SYMCRYPT_Xxx CONCAT2( SymCrypt, Alg )
121
122#define SYMCRYPT_XxxStateCopy CONCAT3( SymCrypt, Alg, StateCopy )
123#define SYMCRYPT_XxxInit CONCAT3( SymCrypt, Alg, Init )
124#define SYMCRYPT_XxxAppend CONCAT3( SymCrypt, Alg, Append )
125#define SYMCRYPT_XxxResult CONCAT3( SymCrypt, Alg, Result )
126#define SYMCRYPT_XxxAppendBlocks CONCAT3( SymCrypt, Alg, AppendBlocks )
127#define SYMCRYPT_XxxStateImport CONCAT3( SymCrypt, Alg, StateImport)
128#define SYMCRYPT_XxxStateExport CONCAT3( SymCrypt, Alg, StateExport)
129
130// for XOFs and KMAC
131#define SYMCRYPT_XXX_EXPANDED_KEY CONCAT3( SYMCRYPT_, ALG, _EXPANDED_KEY )
132#define PSYMCRYPT_XXX_EXPANDED_KEY CONCAT3( PSYMCRYPT_, ALG, _EXPANDED_KEY )
133#define PCSYMCRYPT_XXX_EXPANDED_KEY CONCAT3( PCSYMCRYPT_, ALG, _EXPANDED_KEY )
134#define SYMCRYPT_XxxEx CONCAT3( SymCrypt, Alg, Ex)
135#define SYMCRYPT_XxxDefault CONCAT3( SymCrypt, Alg, Default )
136#define SYMCRYPT_XxxExpandKey CONCAT3( SymCrypt, Alg, ExpandKey )
137#define SYMCRYPT_XxxExpandKeyEx CONCAT3( SymCrypt, Alg, ExpandKeyEx )
138#define SYMCRYPT_XxxExtract CONCAT3( SymCrypt, Alg, Extract )
139#define SYMCRYPT_XxxResultEx CONCAT3( SymCrypt, Alg, ResultEx )
140#define SYMCRYPT_XxxKeyCopy CONCAT3( SymCrypt, Alg, KeyCopy )
141
142#define SYMCRYPT_HmacXxx CONCAT2( SymCryptHmac, Alg )
143#define SYMCRYPT_HmacXxxStateCopy CONCAT3( SymCryptHmac, Alg, StateCopy )
144#define SYMCRYPT_HmacXxxKeyCopy CONCAT3( SymCryptHmac, Alg, KeyCopy )
145#define SYMCRYPT_HmacXxxExpandKey CONCAT3( SymCryptHmac, Alg, ExpandKey )
146#define SYMCRYPT_HmacXxxInit CONCAT3( SymCryptHmac, Alg, Init )
147#define SYMCRYPT_HmacXxxAppend CONCAT3( SymCryptHmac, Alg, Append )
148#define SYMCRYPT_HmacXxxResult CONCAT3( SymCryptHmac, Alg, Result )
149
150
151#define SYMCRYPT_XXX_INPUT_BLOCK_SIZE CONCAT3( SYMCRYPT_, ALG, _INPUT_BLOCK_SIZE )
152#define SYMCRYPT_XXX_RESULT_SIZE CONCAT3( SYMCRYPT_, ALG, _RESULT_SIZE )
153
154#define SYMCRYPT_HMAC_XXX_INPUT_BLOCK_SIZE SYMCRYPT_XXX_INPUT_BLOCK_SIZE
155#define SYMCRYPT_HMAC_XXX_RESULT_SIZE SYMCRYPT_XXX_RESULT_SIZE
156
157#define PSYMCRYPT_HMAC_XXX_EXPANDED_KEY CONCAT3( PSYMCRYPT_HMAC_, ALG, _EXPANDED_KEY )
158#define PCSYMCRYPT_HMAC_XXX_EXPANDED_KEY CONCAT3( PCSYMCRYPT_HMAC_, ALG, _EXPANDED_KEY )
159#define SYMCRYPT_HMAC_XXX_STATE CONCAT3( SYMCRYPT_HMAC_, ALG, _STATE )
160#define PSYMCRYPT_HMAC_XXX_STATE CONCAT3( PSYMCRYPT_HMAC_, ALG, _STATE )
161#define PCSYMCRYPT_HMAC_XXX_STATE CONCAT3( PCSYMCRYPT_HMAC_, ALG, _STATE )
162
163
164//==============================================================================================
165// PLATFORM SPECIFICS
166//==============================================================================================
167
168#if SYMCRYPT_CPU_X86 | SYMCRYPT_CPU_AMD64
169
170//
171// The XMM save/restore functions need to be passed a buffer in which they can store their data.
172// We have two different places where we use this, in kernel mode and in user mode (while testing)
173// We can't declare a union of the two structs as we can't include the kernel-mode headers in this file
174// when compiled for a user-mode app.
175// Instead we define a structure with reserved space, and have each environment check the size and
176// cast the pointer.
177//
178// We always use the KeSaveExtendedProcessorState call, and not the KeSaveFloatingPointState as it
179// allows us to save only the XMM registers and not touch the X87/MMX registers which should
180// save time.
181//
182#if SYMCRYPT_CPU_X86
183
184//
185// The XSTATE_SAVE structure consists of a union between
186// struct:
187// - INT64 8
188// - INT32 4
189// - Pointer 4
190// - Pointer 4
191// - Pointer 4
192// - Pointer 4
193// - BYTE 1 + 3 padding
194// 32 total
195// - XSTATE_CONTEXT
196// - UINT64 8
197// - UINT32 4
198// - UINT32 4
199// - Pointer + UINT32 8
200// - Pointer + UINT32 8
201// 32 total
202//
203// Experimentally: need 4 more bytes, don't know why yet.
204// Should have a look with the debugger when I have time.
205//
206
207#define SYMCRYPT_XSTATE_SAVE_SIZE (32)
208
209#elif SYMCRYPT_CPU_AMD64
210
211//
212// The XSTATE_SAVE structure consists of
213// - pointer 8
214// - pointer 8
215// - BYTE 1 + 7 padding
216// - XSTATE_CONTEXT
217// - UINT64 8
218// - UINT32 4
219// - UINT32 4
220// - Pointer 8
221// - Pointer 8
222//
223#define SYMCRYPT_XSTATE_SAVE_SIZE (56)
224
225#endif
226
227typedef
229struct _SYMCRYPT_EXTENDED_SAVE_DATA {
230 SYMCRYPT_ALIGN BYTE data[SYMCRYPT_XSTATE_SAVE_SIZE];
232} SYMCRYPT_EXTENDED_SAVE_DATA, *PSYMCRYPT_EXTENDED_SAVE_DATA;
233
234
235//
236// Two functions to save/restore the XMM registers.
237// These must ALWAYS be called in pairs, even if the SaveXmm function returned an error.
238// XMM registers cannot be used if the save function returned an error.
239// If the SYMCRYPT_CPU_FEATURE_SAVEXMM_NOFAIL feature is present, then the
240// SymCryptSaveXmm function will never return an error.
241//
242
243//
244// Functions to save/restore the XMM or YMM registers.
245// If the Save*mm function is called and succeeds, then the corresponding
246// Restore*mm function MUST be called later on the same thread.
247// The extended registers cannot be called if the Save function returns an error.
248//
249
252SymCryptSaveXmm( _Out_ PSYMCRYPT_EXTENDED_SAVE_DATA pSaveData );
253
254VOID
256SymCryptRestoreXmm( _Inout_ PSYMCRYPT_EXTENDED_SAVE_DATA pSaveData );
257
258
261SymCryptSaveYmm( _Out_ PSYMCRYPT_EXTENDED_SAVE_DATA pSaveData );
262
263VOID
265SymCryptRestoreYmm( _Inout_ PSYMCRYPT_EXTENDED_SAVE_DATA pSaveData );
266#endif
267
268
269//==============================================================================================
270// Library declarations
271//==============================================================================================
272
273//
274// Function to check that the library has been initialized
275//
276#if SYMCRYPT_DEBUG
277
278VOID
280SymCryptLibraryWasNotInitialized(void);
281
283VOID
286{
288 {
289 SymCryptLibraryWasNotInitialized();
290 }
291}
292#else
294VOID
297{
298}
299#endif
300
301#define HMAC_IPAD_BYTE 0x36
302#define HMAC_OPAD_BYTE 0x5c
303
304// SYMCRYPT_CPU_FEATURES
305#define SYMCRYPT_CPU_FEATURES_FOR_PCLMULQDQ_CODE (SYMCRYPT_CPU_FEATURE_PCLMULQDQ | SYMCRYPT_CPU_FEATURE_SSSE3 | SYMCRYPT_CPU_FEATURE_SAVEXMM_NOFAIL )
306
307#define SYMCRYPT_CPU_FEATURES_FOR_AESNI_CODE (SYMCRYPT_CPU_FEATURE_SSSE3 | SYMCRYPT_CPU_FEATURE_AESNI)
308#define SYMCRYPT_CPU_FEATURES_FOR_AESNI_PCLMULQDQ_CODE (SYMCRYPT_CPU_FEATURES_FOR_AESNI_CODE | SYMCRYPT_CPU_FEATURES_FOR_PCLMULQDQ_CODE)
309#define SYMCRYPT_CPU_FEATURES_FOR_VAES_256_CODE (SYMCRYPT_CPU_FEATURES_FOR_AESNI_CODE | SYMCRYPT_CPU_FEATURE_AVX2 | SYMCRYPT_CPU_FEATURE_VAES)
310#define SYMCRYPT_CPU_FEATURES_FOR_VAES_512_CODE (SYMCRYPT_CPU_FEATURES_FOR_AESNI_CODE | SYMCRYPT_CPU_FEATURE_AVX512 | SYMCRYPT_CPU_FEATURE_VAES)
311
312#define SYMCRYPT_CPU_FEATURES_FOR_SHANI_CODE (SYMCRYPT_CPU_FEATURE_SSSE3 | SYMCRYPT_CPU_FEATURE_SHANI)
313
314#define SYMCRYPT_CPU_FEATURES_FOR_MULX (SYMCRYPT_CPU_FEATURE_BMI2 | SYMCRYPT_CPU_FEATURE_ADX | SYMCRYPT_CPU_FEATURE_SSE2 )
315
316//
317// ROTATE OPERATIONS
318//
319//
320// If this lib is ever ported to a platform that doesn't have the _rotx functions
321// the macros can be replaced by portable definitions just like the ROL16/ROR16
322//
323
324#define ROL16( x, n ) ((UINT16)( ( ((x) << (n)) | ((x) >> (16-(n))) ) ))
325#define ROR16( x, n ) ((UINT16)( ( ((x) >> (n)) | ((x) << (16-(n))) ) ))
326
327#if SYMCRYPT_MS_VC
328 #define ROL32( x, n ) _rotl( (x), (n) )
329 #define ROR32( x, n ) _rotr( (x), (n) )
330 #define ROL64( x, n ) _rotl64( (x), (n) )
331 #define ROR64( x, n ) _rotr64( (x), (n) )
332#elif SYMCRYPT_GNUC
333 #define ROL32( x, n ) ((UINT32)( ( ((x) << (n)) | ((x) >> (32-(n))) ) ))
334 #define ROR32( x, n ) ((UINT32)( ( ((x) >> (n)) | ((x) << (32-(n))) ) ))
335 #define ROL64( x, n ) ((UINT64)( ( ((x) << (n)) | ((x) >> (64-(n))) ) ))
336 #define ROR64( x, n ) ((UINT64)( ( ((x) >> (n)) | ((x) << (64-(n))) ) ))
337#else
338 #error Unknown compiler
339#endif
340
341
342#define SYMCRYPT_ARRAY_SIZE(_x) (sizeof(_x)/sizeof(_x[0]))
343
344enum{
345 STATE_NEXT = 0, // starting state = 0, set by structure wipe.
348 STATE_RESULT2, // 2nd phase of result computation (1st phase is at STATE_NEXT when the result operation is found)
349 STATE_RESULT_DONE, // 3rd phase of result computation
350};
351
352
353
354//==========================================================================
355// Inline implementations ...
356//==========================================================================
357
358//
359// These are a bunch of functions to convert between an array of
360// 32 or 64-bit integers to an array of bytes in LSBfirst or MSBfirst convention.
361// Not all variations have been implemented yet. We add them as they are
362// needed.
363//
364
365//
366// These implementations are optimized for inlining, especially when the
367// size of the data to be converted is a compile-time constant.
368//
369
370//
371// SymCryptUint32ToMsbFirst & SymCryptMsbFirstToUint32.
372// This is used by the SHA family
373//
374#if SYMCRYPT_CPU_AMD64
375
376//
377// On AMD64 we can do 2 UINT32s at once by doing a ROL(x,32) and a BSWAP.
378//
380VOID
383 _Out_writes_(4*cuData) PBYTE pbResult,
384 SIZE_T cuData )
385{
386 while( cuData >= 2 )
387 {
388 SYMCRYPT_STORE_MSBFIRST64( pbResult, ROL64( *(UINT64*)puData, 32 ));
389 pbResult += 8;
390 puData += 2;
391 cuData -= 2;
392 }
393
394 if( cuData != 0 )
395 {
397 }
398}
399
400#else // not _AMD64_
401
403VOID
406 _Out_writes_(4*cuData) PBYTE pbResult,
407 SIZE_T cuData )
408{
409 while( cuData != 0 )
410 {
412 puData++;
413 pbResult += 4;
414 cuData--;
415 }
416}
417#endif // platform switch for SymCryptUint32ToMsbFirst
418
420VOID
423 _Out_writes_(cuResult) PUINT32 puResult,
424 SIZE_T cuResult )
425{
426 while( cuResult != 0 )
427 {
428 *puResult = SYMCRYPT_LOAD_MSBFIRST32( pbData );
429 puResult++;
430 pbData += 4;
431 cuResult--;
432 }
433}
434
435
436//
437// SymCryptUint32ToLsbFirst & SymCryptLsbFirstToUint32
438// These are used by the MD4 and MD5 hash functions
439//
440#if SYMCRYPT_CPU_X86 | SYMCRYPT_CPU_AMD64 | SYMCRYPT_CPU_ARM | SYMCRYPT_CPU_ARM64
441
442//
443// On AMD64, X86, and ARM this is just a memcpy
444//
446VOID
449 _Out_writes_(4*cuData) PBYTE pbResult,
450 SIZE_T cuData )
451
452{
453 memcpy( pbResult, puData, 4*cuData );
454}
455
457VOID
460 _Out_writes_(cuResult) PUINT32 puResult,
461 SIZE_T cuResult )
462{
463 memcpy( puResult, pbData, 4*cuResult );
464}
465
466#else // not (AMD64_ or X86_ or ARM or ARM64)
467
469VOID
472 _Out_writes_(4*cuData) PBYTE pbResult,
473 SIZE_T cuData )
474{
475 while( cuData != 0 )
476 {
478 puData++;
479 pbResult += 4;
480 cuData--;
481 }
482}
483
485VOID
488 _Out_writes_(cuResult) PUINT32 puResult,
489 SIZE_T cuResult )
490{
491 while( cuResult != 0 )
492 {
493 *puResult = SYMCRYPT_LOAD_LSBFIRST32( pbData );
494 pbData += 4;
495 puResult++;
496 cuResult--;
497 }
498}
499
500#endif // Platform switch for SymCryptUint32ToLsbFirst
501
502
503//
504// SymCryptUint64ToLsbFirst & SymCryptLsbFirstToUint64
505// These are used by Keccak.
506//
507#if SYMCRYPT_CPU_X86 | SYMCRYPT_CPU_AMD64 | SYMCRYPT_CPU_ARM | SYMCRYPT_CPU_ARM64
508
509//
510// On AMD64, X86, and ARM this is just a memcpy
511//
513VOID
516 _Out_writes_(8*cuData) PBYTE pbResult,
517 SIZE_T cuData )
518
519{
520 memcpy( pbResult, puData, 8*cuData );
521}
522
524VOID
527 _Out_writes_(cuResult) PUINT64 puResult,
528 SIZE_T cuResult )
529{
530 memcpy( puResult, pbData, 8*cuResult );
531}
532
533#else // not (AMD64_ or X86_ or ARM or ARM64)
534
536VOID
539 _Out_writes_(8*cuData) PBYTE pbResult,
540 SIZE_T cuData )
541{
542 while( cuData != 0 )
543 {
545 puData++;
546 pbResult += 8;
547 cuData--;
548 }
549}
550
552VOID
555 _Out_writes_(cuResult) PUINT64 puResult,
556 SIZE_T cuResult )
557{
558 while( cuResult != 0 )
559 {
560 *puResult = SYMCRYPT_LOAD_LSBFIRST64( pbData );
561 pbData += 8;
562 puResult++;
563 cuResult--;
564 }
565}
566
567#endif // Platform switch for SymCryptUint64ToLsbFirst & SymCryptLsbFirstToUint64
568
569
570//
571// SymCryptUint64ToMsbFirst & SymCryptMsbFirstToUint64
572//
574VOID
577 _Out_writes_(8*cuData) PBYTE pbResult,
578 SIZE_T cuData )
579{
580 while( cuData != 0 )
581 {
583 pbResult += 8;
584 puData ++;
585 cuData --;
586 }
587}
588
590VOID
593 _Out_writes_(cuResult) PUINT64 puResult,
594 SIZE_T cuResult )
595{
596 while( cuResult != 0 )
597 {
598 *puResult = SYMCRYPT_LOAD_MSBFIRST64( pbData );
599 puResult++;
600 pbData += 8;
601 cuResult--;
602 }
603}
604
606// Internal function prototypes
607//
608
609//
610// SymCryptSha1AppendBlocks
611//
612// Updates the chaining state of the hash function with one or more blocks of data.
613// Each block is 64 bytes long, the natural size of a SHA256 input block.
614//
615// cbData must be a multiple of 64.
616//
617VOID
623 _Out_ SIZE_T * pcbRemaining );
624
625//
626// SymCryptSha256AppendBlocks
627//
628// Updates the chaining state of the hash function with one or more blocks of data.
629// Each block is 64 bytes long, the natural size of a SHA256 input block.
630//
631// cbData must be a multiple of 64.
632//
633VOID
639 _Out_ SIZE_T * pcbRemaining );
640
641// Intrinsics implementation processing 4 message blocks in parallel using XMM registers
642VOID
648 _Out_ SIZE_T * pcbRemaining );
649
650// Assembly implementation processing 4 message blocks in parallel using XMM registers
651VOID
657 _Out_ SIZE_T * pcbRemaining );
658
659// Intrinsics implementation processing 8 message blocks in parallel using YMM registers
660VOID
666 _Out_ SIZE_T * pcbRemaining );
667
668// Assembly implementation processing 8 message blocks in parallel using YMM registers
669VOID
675 _Out_ SIZE_T * pcbRemaining );
676
677
678//
679// SymCryptSha512AppendBlocks
680//
681// Updates the chaining state of the hash function with one or more blocks of data.
682// Each block is 128 bytes long, the natural size of a SHA512 input block.
683//
684// cbData must be a multiple of 128.
685//
686VOID
692 _Out_ SIZE_T * pcbRemaining );
693
694
695VOID
701 _Out_ SIZE_T * pcbRemaining );
702
703// Intrinsics implementation using YMM registers
704VOID
710 _Out_ SIZE_T * pcbRemaining );
711
712// Intrinsics implementation processing 2 message blocks in parallel using YMM registers
713VOID
719 _Out_ SIZE_T * pcbRemaining );
720
721// Intrinsics implementation processing 4 message blocks in parallel using YMM registers
722VOID
728 _Out_ SIZE_T * pcbRemaining );
729
730// Assembly implementation processing 4 message blocks in parallel using YMM registers
731VOID
737 _Out_ SIZE_T * pcbRemaining );
738
739// Assembly implementation processing 4 message blocks in parallel using YMM registers with AVX512 instruction set
740VOID
746 _Out_ SIZE_T * pcbRemaining );
747
748
749
750
751//
752// SymCryptMd5AppendBlocks
753//
754// Updates the chaining state of the hash function with one or more blocks of data.
755// Each block is 64 bytes long, the natural size of a MD5 input block.
756//
757// cbData must be a multiple of 64.
758//
759VOID
765 _Out_ SIZE_T * pcbRemaining );
766
767
768//
769// SymCryptMd4AppendBlocks
770//
771// Updates the chaining state of the hash function with one or more blocks of data.
772// Each block is 64 bytes long, the natural size of a MD5 input block.
773//
774// cbData must be a multiple of 64.
775//
776VOID
782 _Out_ SIZE_T * pcbRemaining );
783
784
785//
786// SymCryptMd2AppendBlock
787//
788// Update the C and X state based on the message block in the buffer.
789//
790VOID
796 _Out_ SIZE_T * pcbRemaining );
797
798
799//
800// SymCryptUint32ToMsbFirst
801//
802// Convert an array of UINT32s to 4-byte values stored MSB first (big-endian) conversion.
803// Note that the count is the number of UINT32s to convert, not the number
804// of bytes. This is somewhat unusual, but it avoids any confusion about
805// converting an odd number of bytes.
806//
807VOID
810 _Out_writes_(4*cuData) PBYTE pbResult,
811 SIZE_T cuData );
812
813//
814// SymCryptUint32ToLsbFirst
815//
816// Convert an array of UINT32s to 4-byte values stored LSB first (little-endian) conversion.
817// Note that the count is the number of UINT32s to convert, not the number
818// of bytes. This is somewhat unusual, but it avoids any confusion about
819// converting an odd number of bytes.
820//
821VOID
824 _Out_writes_(4*cuData) PBYTE pbResult,
825 SIZE_T cuData );
826
827//
828// SymCryptMsbFirstToUint32
829//
830// Convert an array of 4-byte values stored MSB first to an array of UINT32s
831// (big-endian) conversion.
832// Note that the count is the number of UINT32s to convert, not the number
833// of bytes. This is somewhat unusual, but it avoids any confusion about
834// converting an odd number of bytes.
835//
836VOID
839 _Out_writes_(cuResult) PUINT32 puResult,
840 SIZE_T cuResult );
841
842//
843// SymCryptLsbFirstToUint32
844//
845// Convert an array of 4-byte values stored LSB first to an array of UINT32s
846// (little-endian) conversion.
847// Note that the count is the number of UINT32s to convert, not the number
848// of bytes. This is somewhat unusual, but it avoids any confusion about
849// converting an odd number of bytes.
850//
851VOID
854 _Out_writes_(cuResult) PUINT32 puResult,
855 SIZE_T cuResult );
856
857//
858// SymCryptUint64ToMsbFirst
859//
860// Convert an array of UINT64s to an array of bytes using the MSB first
861// (big-endian) conversion.
862//
863VOID
866 _Out_writes_(8*cuData) PBYTE pbResult,
867 SIZE_T cuData );
868
869//
870// SymCryptMsbFirstToUint64
871//
872// Convert an array of 4-byte values stored MSB first to an array of UINT64s
873// (big-endian) conversion.
874// Note that the count is the number of UINT64s to convert, not the number
875// of bytes. This is somewhat unusual, but it avoids any confusion about
876// converting an odd number of bytes.
877//
878VOID
881 _Out_writes_(cuResult) PUINT64 puResult,
882 SIZE_T cuResult );
883
884
885
886//============================================================================
887// HMAC macros and inline functions.
888//
889#define REPEAT_BYTE_TO_UINT32( x ) (((UINT32)x << 24) | ((UINT32)x << 16) | ((UINT32)x << 8) | x)
890#define REPEAT_BYTE_TO_UINT64( x ) ( ((UINT64)REPEAT_BYTE_TO_UINT32(x) << 32) | REPEAT_BYTE_TO_UINT32(x) )
891
892//
893// The XorByteIntoBuffer function is a platform-optimized function to xor a byte
894// repeatedly into a buffer.
895// Note that the buffer length must be a multiple of 8.
896//
897#if SYMCRYPT_CPU_X86 | SYMCRYPT_CPU_AMD64 | SYMCRYPT_CPU_ARM | SYMCRYPT_CPU_ARM64
899VOID
901XorByteIntoBuffer( _Inout_updates_( 8*cqBuf ) PBYTE pbBuf, SIZE_T cqBuf, BYTE v )
902{
903 SIZE_T i;
904 const UINT64 v64 = REPEAT_BYTE_TO_UINT64( v );
905
906 for( i=0; i<cqBuf; i++ )
907 {
908 ((UINT64 *)pbBuf)[i] ^= v64;
909 }
910}
911#else
913VOID
916{
917 SIZE_T i;
918
919 for( i=0; i<8*cqBuf; i++ )
920 {
921 pbBuf[i] ^= v;
922 }
923}
924#endif
925
926//
927// GHASH
928//
929
930VOID
935
936VOID
941
942VOID
947
948VOID
953
954//
955// For all GHashAppendData functions, data will be appended in multiples of SYMCRYPT_GF128_BLOCK_SIZE.
956// If the data is not a multiple of SYMCRYPT_GF128_BLOCK_SIZE, any remaining data will be ignored.
957//
958
959VOID
965 SIZE_T cbData );
966
967VOID
973 SIZE_T cbData );
974
975VOID
981 SIZE_T cbData );
982
983VOID
989 SIZE_T cbData );
990
991VOID
997 SIZE_T cbData );
998
999VOID
1004
1005
1006VOID
1011 SIZE_T cbData );
1012
1013
1014
1015
1016extern const BYTE SymCryptTestMsg3[3];
1017extern const BYTE SymCryptTestMsg16[16];
1018extern const BYTE SymCryptTestKey32[32];
1019
1020VOID
1023
1024
1025#define SYMCRYPT_CPUID_DETECT_FLAG_CHECK_OS_SUPPORT_FOR_YMM 1 // enable checking of OSXSAVE bit & XGETBV logic
1026
1027VOID
1030
1031VOID
1034
1035VOID
1038
1039VOID
1042
1043VOID
1045SymCryptCpuidExFunc( int cpuInfo[4], int function_id, int subfunction_id );
1046
1048// Export blob formats
1050
1051//==========================================================
1052// BLOBS
1053//
1054// SYMCRYPT_BLOB_HEADER
1055// Generic header for all exported blobs from SymCrypt
1056//
1057
1061 SymCryptBlobTypeMd2State = SymCryptBlobTypeHashState + 1, // explicit constants as these have to remain the same forever.
1076
1077#define SYMCRYPT_BLOB_MAGIC ('cmys')
1078
1079//
1080// We define all export structures with pack=1 so that there are no padding bytes.
1081//
1082#pragma pack(push, 1)
1083
1085 UINT32 magic; // 'cmys'
1086 UINT32 size; // total size of blob
1087 UINT32 type; // SYMCRYPT_BLOB_TYPE: type of blob
1089
1091 BYTE checksum[8]; // contains the Marvin32 checksum of the rest of the blob
1093
1096 BYTE C[16];
1097 BYTE X[16];
1100 BYTE rfu[8]; // rfu = Reserved for Future Use.
1103
1105
1106
1109 BYTE chain[16]; // In the same format used for the final hash value of MD4
1112 BYTE rfu[8]; // rfu = Reserved for Future Use.
1115
1117
1118
1121 BYTE chain[16]; // In the same format used for the final hash value of MD5
1124 BYTE rfu[8]; // rfu = Reserved for Future Use.
1127
1129
1130
1133 BYTE chain[20]; // in the same format used for the final hash value of SHA-1
1136 BYTE rfu[8]; // rfu = Reserved for Future Use.
1139
1141
1142
1145 BYTE chain[32]; // in the same format used for the final hash value of SHA-256
1148 BYTE rfu[8]; // rfu = Reserved for Future Use.
1151
1153
1154
1157 BYTE chain[64]; // in the same format used for the final hash value of SHA-512
1158 UINT64 dataLengthL; // low 64 bits of data length
1159 UINT64 dataLengthH; // high 64 bits of data length
1161 BYTE rfu[8]; // rfu = Reserved for Future Use.
1164
1166
1167// Refer to SYMCRYPT_KECCAK_STATE documentation for the explanation of each struct member
1174 BYTE rfu[8]; // rfu = Reserved for Future Use.
1177
1182
1187
1188#pragma pack(pop)
1189
1191// AES internal functions
1192
1194
1195VOID
1198 _In_reads_(4) PCBYTE pIn,
1199 _Out_writes_(4) PBYTE pOut,
1200 BOOL UseSimd );
1201
1202VOID
1205 _In_reads_(4) PCBYTE pIn,
1206 _Out_writes_(4) PBYTE pOut );
1207
1208VOID
1211 _In_reads_(4) PCBYTE pIn,
1212 _Out_writes_(4) PBYTE pOut );
1213
1214VOID
1217 _In_reads_(4) PCBYTE pIn,
1218 _Out_writes_(4) PBYTE pOut );
1219
1220VOID
1223 _In_reads_(16) PCBYTE pEncryptionRoundKey,
1224 _Out_writes_(16) PBYTE pDecryptionRoundKey,
1225 BOOL UseSimd );
1226
1227VOID
1230 _In_reads_(16) PCBYTE pEncryptionRoundKey,
1231 _Out_writes_(16) PBYTE pDecryptionRoundKey );
1232
1233VOID
1236 _In_reads_(16) PCBYTE pEncryptionRoundKey,
1237 _Out_writes_(16) PBYTE pDecryptionRoundKey );
1238
1239VOID
1242 _In_reads_(16) PCBYTE pEncryptionRoundKey,
1243 _Out_writes_(16) PBYTE pDecryptionRoundKey );
1244
1245VOID
1251
1252VOID
1258
1259VOID
1265
1266VOID
1272
1273VOID
1279
1280VOID
1286
1287VOID
1293
1294VOID
1300
1301VOID
1307 SIZE_T cbData );
1308VOID
1314 SIZE_T cbData );
1315VOID
1321 SIZE_T cbData );
1322
1323VOID
1329 SIZE_T cbData );
1330
1331VOID
1337 SIZE_T cbData );
1338
1339VOID
1346 SIZE_T cbData );
1347VOID
1354 SIZE_T cbData );
1355
1356VOID
1363 SIZE_T cbData );
1364
1365VOID
1372 SIZE_T cbData );
1373
1374VOID
1381 SIZE_T cbData );
1382
1383VOID
1390 SIZE_T cbData );
1391
1392VOID
1398 SIZE_T cbData );
1399
1400VOID
1406 SIZE_T cbData );
1407
1408VOID
1415 SIZE_T cbData );
1416
1417VOID
1424 SIZE_T cbData );
1425
1426VOID
1433 SIZE_T cbData );
1434
1435VOID
1442 SIZE_T cbData );
1443
1444VOID
1451 SIZE_T cbData );
1452
1453VOID
1460 SIZE_T cbData );
1461
1462VOID
1469 SIZE_T cbData );
1470
1471VOID
1478 SIZE_T cbData );
1479
1480VOID
1487 SIZE_T cbData );
1488
1489// pbScratch must currently be 16B aligned
1490VOID
1498 SIZE_T cbData );
1499
1500// pbScratch must currently be 16B aligned
1501VOID
1509 SIZE_T cbData );
1510
1511VOID
1519 SIZE_T cbData );
1520
1521VOID
1529 SIZE_T cbData );
1530
1531VOID
1539 SIZE_T cbData );
1540
1541VOID
1549 SIZE_T cbData );
1550
1551VOID
1558 SIZE_T cbData );
1559
1560VOID
1567 SIZE_T cbData );
1568
1569VOID
1574 _Inout_updates_( pBlockCipher->blockSize ) PBYTE pbTweakBlock,
1577 SIZE_T cbData );
1578
1579VOID
1584 _Inout_updates_( pBlockCipher->blockSize ) PBYTE pbTweakBlock,
1587 SIZE_T cbData );
1588
1589VOID
1598 SIZE_T cbData );
1599
1600VOID
1609 SIZE_T cbData );
1610
1611#define GCM_YMM_MINBLOCKS 16
1612
1613// Caller must check cbData >= GCM_YMM_MINBLOCKS * SYMCRYPT_GCM_BLOCK_SIZE
1614VOID
1623 SIZE_T cbData );
1624
1625// Caller must check cbData >= GCM_YMM_MINBLOCKS * SYMCRYPT_GCM_BLOCK_SIZE
1626VOID
1635 SIZE_T cbData );
1636
1637VOID
1646 SIZE_T cbData );
1647
1648VOID
1657 SIZE_T cbData );
1658
1659VOID
1665 SIZE_T cbData );
1666
1667VOID
1673 SIZE_T cbData );
1674
1675VOID
1681 SIZE_T cbData );
1682
1683VOID
1689 SIZE_T cbData );
1690
1691VOID
1696 _Inout_updates_( pBlockCipher->blockSize )
1700 SIZE_T cbData );
1701//
1702// SymCryptCtrMsb32 implements the CTR cipher mode with a 32-bit increment function.
1703// It is not intended to be used as-is, rather it is a building block for modes like GCM.
1704// See the description of SymCryptCtrMsb64 in symcrypt.h for more details.
1705//
1706// For now, this function is only intended for use with GCM, which specifies the use a
1707// 32-bit increment function. It's only used in cases where we can't use one of the optimized
1708// implementations (i.e. on ARM32 or x86[-64] without AESNI). Therefore, unlike the 64-bit version,
1709// there are no optimized implementations of the CTR function to call. If we ever need this
1710// functionality for other block cipher modes, this function will need to be updated and we'll
1711// need to add an additional pointer to SYMCRYPT_BLOCKCIPHER for the optimized CTR function.
1712
1713VOID
1720 SIZE_T cbData );
1721
1722// SymCryptAesCtrMsb32 is a dispatch function for the optimized AES CTR implementations that use
1723//a 32-bit counter function (currently only relevant to GCM).
1724
1729 _Inout_updates_bytes_( nStates * pParHash->pHash->stateSize ) PVOID pStates,
1730 SIZE_T nStates,
1731 _Inout_updates_( nOperations ) PSYMCRYPT_PARALLEL_HASH_OPERATION pOperations,
1732 SIZE_T nOperations,
1733 _Out_writes_( cbScratch ) PBYTE pbScratch,
1734 SIZE_T cbScratch );
1735
1740 _Inout_updates_bytes_( nStates * pParHash->pHash->stateSize ) PVOID pStates,
1741 SIZE_T nStates,
1742 _Inout_updates_( nOperations ) PSYMCRYPT_PARALLEL_HASH_OPERATION pOperations,
1743 SIZE_T nOperations,
1744 _Out_writes_( cbScratch ) PBYTE pbScratch,
1746 UINT32 maxParallel );
1747
1748VOID
1751 _In_ PCSYMCRYPT_HASH pHash,
1754 SIZE_T cbData );
1755
1756VOID
1759 _In_ PCSYMCRYPT_HASH pHash,
1761
1762
1766
1767#define PAR_SCRATCH_ELEMENTS_256 (4+8+64) // # scratch elements our parallel SHA256 implementations need
1768#define PAR_SCRATCH_ELEMENTS_512 (4+8+80) // # scratch elements our parallel SHA512 implementations need
1769
1770// pScratch must be 32B aligned, as it is used as an array of __m256i
1771VOID
1775 _Inout_updates_( 8 ) PCBYTE * ppByte,
1776 SIZE_T nBytes,
1777 _Out_writes_( PAR_SCRATCH_ELEMENTS_256 * 32 ) PBYTE pScratch );
1778
1779// pScratch must be 32B aligned, as it is used as an array of __m256i
1780VOID
1784 _Inout_updates_( 4 ) PCBYTE * ppByte,
1785 SIZE_T nBytes,
1786 _Out_writes_( PAR_SCRATCH_ELEMENTS_512 * 32 ) PBYTE pScratch );
1787
1804
1805
1806
1807// Paddings used by various SHA-3 derived algorithms
1808#define SYMCRYPT_SHA3_PADDING_VALUE 0x06 // 01 10* padding
1809#define SYMCRYPT_SHAKE_PADDING_VALUE 0x1f // 11 11 10* padding
1810#define SYMCRYPT_CSHAKE_PADDING_VALUE 0x04 // 00 10* padding (used when N or S are non-empty strings)
1811
1812//
1813// Functions operating on the Keccak state
1814//
1815
1816VOID
1819// Keccak-f[1600] permutation
1820
1821VOID
1824
1825VOID
1828
1829VOID
1832// Zero pads the current block by invoking the permutation and setting
1833// pState->stateIndex to 0.
1834
1835VOID
1840 SIZE_T cbData);
1841// Generic append function.
1842
1843VOID
1847 _Out_writes_(cbResult) PBYTE pbResult,
1848 SIZE_T cbResult,
1849 BOOLEAN bWipe);
1850// Generic extract function, no restriction on cbResult.
1851// bWipe denotes whether to wipe the Keccak state and initialize it
1852// for a new computation.
1853
1854VOID
1860
1867
1868VOID
1872 UINT64 uValue,
1873 BOOLEAN bLeftEncode);
1874// Appends the left-encoding of uValue * 8 to the state
1875
1876VOID
1880 _In_reads_(cbString) PCBYTE pbString,
1881 SIZE_T cbString);
1882// Appends 'left_encode(cbString * 8) || pbString' to the state
1883
1884VOID
1888 _In_reads_( cbFunctionNameString ) PCBYTE pbFunctionNameString,
1889 SIZE_T cbFunctionNameString,
1890 _In_reads_( cbCustomizationString ) PCBYTE pbCustomizationString,
1891 SIZE_T cbCustomizationString);
1892// Process CShake input strings
1893// Appends byte_pad( encode_string( pbFunctionNameString ) || encode_string( pbCustomizationString ), pState->inputBlockSize )
1894
1895
1896
1897VOID
1899SymCryptFatalIntercept( UINT32 fatalCode );
1900
1901extern const BYTE SymCryptSha256KATAnswer[32];
1902extern const BYTE SymCryptSha384KATAnswer[48];
1903extern const BYTE SymCryptSha512KATAnswer[64];
1904
1905//
1906// Arithmetic
1907//
1908
1909#ifdef __REACTOS__
1910#define SYMCRYPT_ASSERT_ASYM_ALIGNED(_p )
1911#else
1912#define SYMCRYPT_ASSERT_ASYM_ALIGNED( _p ) SYMCRYPT_ASSERT( ((SIZE_T)(_p) & (SYMCRYPT_ASYM_ALIGN_VALUE - 1)) == 0 );
1913#endif
1914
1915
1916#define SYMCRYPT_FDEF_DIGIT_NUINT32 ((UINT32)(SYMCRYPT_FDEF_DIGIT_SIZE / sizeof( UINT32 ) ))
1917
1918#define SYMCRYPT_OBJ_NDIGITS( _p ) ((_p)->nDigits)
1919#define SYMCRYPT_OBJ_NBYTES( _p ) ((_p)->nDigits * SYMCRYPT_FDEF_DIGIT_SIZE)
1920#define SYMCRYPT_OBJ_NUINT32( _p ) ((_p)->nDigits * SYMCRYPT_FDEF_DIGIT_SIZE / sizeof( UINT32 ))
1921
1922#if SYMCRYPT_MS_VC
1923#define SYMCRYPT_MUL32x32TO64( _a, _b ) UInt32x32To64( (_a), (_b) )
1924#elif SYMCRYPT_GNUC
1925#define SYMCRYPT_MUL32x32TO64( _a, _b ) ( (UINT64)(_a)*(UINT64)(_b) )
1926#else
1927 #error Unknown compiler
1928#endif
1934 _Out_writes_bytes_( cbScratch ) PBYTE pbScratch,
1935 SIZE_T cbScratch );
1936
1941 _Out_writes_bytes_( cbScratch ) PBYTE pbScratch,
1942 SIZE_T cbScratch );
1943
1948 UINT32 flags,
1949 _Out_writes_bytes_( cbScratch ) PBYTE pbScratch,
1950 SIZE_T cbScratch );
1951
1955 _Out_writes_bytes_( cbScratch ) PBYTE pbScratch,
1956 SIZE_T cbScratch );
1957
1961 _Out_writes_bytes_( cbScratch ) PBYTE pbScratch,
1962 SIZE_T cbScratch );
1963
1968
1971 _Out_ PSYMCRYPT_MODULUS pmDst );
1972
1975 _Out_writes_bytes_( cbScratch ) PBYTE pbScratch,
1976 SIZE_T cbScratch );
1977
1978//
1979// In the future we might want to implement a 'prepare divisor' for people who want to do one or more modular divisions.
1980// In EC projective coordinates you have a value stored as (X,Z) with X/Z being the actual value that needs to be exported.
1981// In Montgomery format, this is stored as (RX, RZ), and just doing RX * (1/RZ) gets you the value to be exported.
1982// There seem to be many tricks here to get some more speed; maybe we just need to define export functions for each
1983// point format and allow the Modulus to contain special optimizations.
1984//
1985// The SetPost function is the post-processing function of any SetValue operation. The SetValue operation will store the
1986// modElement in the normal integer format into the ModElement. The SetPost function post-processes it into the proper
1987// representation for that modulus.
1988//
1989// The PreGet function is the pre-processing function to any GetValue operation. It returns a pointer to the proper value
1990// stored in standard integer format. This pointer can either be into the ModElement itself, or into the scratch space.
1991//
1992
2002 SYMCRYPT_MODULUS_COPYFIXUP_FN modulusCopyFixup; // non-generic fixup after memcpy
2006
2007#define SYMCRYPT_MODULAR_FUNCTIONS_SIZE (sizeof( SYMCRYPT_MODULAR_FUNCTIONS ) )
2008
2010extern const UINT32 g_SymCryptModFnsMask;
2011
2012//
2013// Table entry that contains the information about an implementation.
2014// Allows generic code to make the decision.
2015// First entry in the table that is allowed is chosen, last entry always matches everything
2016//
2017
2018#define SYMCRYPT_MODULUS_FEATURE_MONTGOMERY 1 // Modulus is suitable for Montgomery processing
2019// #define SYMCRYPT_MODULUS_FEATURE_PSEUDO_MERSENNE 2 // Modulus is suitable for Pseudo-Mersenne processing
2020// #define SYMCRYPT_MODULUS_FEATURE_NISTP256 4 // Modulus is the NIST P256 curve prime
2021#define SYMCRYPT_MODULUS_FEATURE_NISTP384 8 // Modulus is the NIST P384 curve prime
2022
2024{
2025 UINT32 type; // Type value of this solution
2026 SYMCRYPT_CPU_FEATURES cpuFeatures; // Required CPU features
2027 UINT32 maxBits; // Max # bits that the actual value of the modulus is, 0 = no limit
2028 UINT32 modulusFeatures; // Required features of the modulus
2031
2032extern const SYMCRYPT_MODULUS_TYPE_SELECTION_ENTRY SymCryptModulusTypeSelections[]; // Array can be any size...
2033
2034
2035// Check that the size is a power of 2
2037
2038// The macro that we use to call modular functions
2039#define SYMCRYPT_MOD_CALL(v) ((SYMCRYPT_MODULAR_FUNCTIONS *)(( SYMCRYPT_FORCE_READ32( &(v)->type) & g_SymCryptModFnsMask) + (PBYTE)(&g_SymCryptModFns) ))->
2040
2041#define SYMCRYPT_MOD_FUNCTIONS_FDEF_GENERIC {\
2042 &SymCryptFdefModAddGeneric,\
2043 &SymCryptFdefModSubGeneric,\
2044 &SymCryptFdefModNegGeneric,\
2045 &SymCryptFdefModMulGeneric,\
2046 &SymCryptFdefModSquareGeneric,\
2047 &SymCryptFdefModInvGeneric,\
2048 &SymCryptFdefModSetPostGeneric,\
2049 &SymCryptFdefModPreGetGeneric,\
2050 &SymCryptFdefModulusCopyFixupGeneric,\
2051 &SymCryptFdefModulusInitGeneric,\
2052}
2053
2054#define SYMCRYPT_MOD_FUNCTIONS_FDEF_MONTGOMERY {\
2055 &SymCryptFdefModAddGeneric,\
2056 &SymCryptFdefModSubGeneric,\
2057 &SymCryptFdefModNegGeneric,\
2058 &SymCryptFdefModMulMontgomery,\
2059 &SymCryptFdefModSquareMontgomery,\
2060 &SymCryptFdefModInvMontgomery,\
2061 &SymCryptFdefModSetPostMontgomery,\
2062 &SymCryptFdefModPreGetMontgomery,\
2063 &SymCryptFdefModulusCopyFixupMontgomery,\
2064 &SymCryptFdefModulusInitMontgomery,\
2065}
2066
2067#define SYMCRYPT_MOD_FUNCTIONS_FDEF_MONTGOMERY_ARM64256 {\
2068 (SYMCRYPT_MOD_BINARY_OP_FN) &SymCryptFdefModAdd256Asm,\
2069 (SYMCRYPT_MOD_BINARY_OP_FN) &SymCryptFdefModSub256Asm,\
2070 &SymCryptFdefModNegGeneric,\
2071 (SYMCRYPT_MOD_BINARY_OP_FN) &SymCryptFdefModMulMontgomery256Asm, \
2072 (SYMCRYPT_MOD_UNARY_OP_FN) &SymCryptFdefModSquareMontgomery256Asm, \
2073 &SymCryptFdefModInvMontgomery,\
2074 &SymCryptFdefModSetPostMontgomery,\
2075 &SymCryptFdefModPreGetMontgomery,\
2076 &SymCryptFdefModulusCopyFixupMontgomery,\
2077 &SymCryptFdefModulusInitMontgomery,\
2078}
2079
2080#define SYMCRYPT_MOD_FUNCTIONS_FDEF_MONTGOMERY_ARM64P384 {\
2081 (SYMCRYPT_MOD_BINARY_OP_FN) &SymCryptFdefModAdd384Asm,\
2082 (SYMCRYPT_MOD_BINARY_OP_FN) &SymCryptFdefModSub384Asm,\
2083 &SymCryptFdefModNegGeneric,\
2084 (SYMCRYPT_MOD_BINARY_OP_FN) &SymCryptFdefModMulMontgomeryP384Asm, \
2085 (SYMCRYPT_MOD_UNARY_OP_FN) &SymCryptFdefModSquareMontgomeryP384Asm, \
2086 &SymCryptFdef369ModInvMontgomery,\
2087 &SymCryptFdef369ModSetPostMontgomery,\
2088 &SymCryptFdef369ModPreGetMontgomery,\
2089 &SymCryptFdefModulusCopyFixupMontgomery,\
2090 &SymCryptFdef369ModulusInitMontgomery,\
2091}
2092
2093#define SYMCRYPT_MOD_FUNCTIONS_FDEF_MONTGOMERY_MULX256 {\
2094 (SYMCRYPT_MOD_BINARY_OP_FN) &SymCryptFdefModAddMulx256Asm,\
2095 (SYMCRYPT_MOD_BINARY_OP_FN) &SymCryptFdefModSub256Asm,\
2096 &SymCryptFdefModNegGeneric,\
2097 (SYMCRYPT_MOD_BINARY_OP_FN) &SymCryptFdefModMulMontgomeryMulx256Asm,\
2098 (SYMCRYPT_MOD_UNARY_OP_FN) &SymCryptFdefModSquareMontgomeryMulx256Asm,\
2099 &SymCryptFdefModInvMontgomery256,\
2100 &SymCryptFdefModSetPostMontgomeryMulx256,\
2101 &SymCryptFdefModPreGetMontgomery256,\
2102 &SymCryptFdefModulusCopyFixupMontgomery,\
2103 &SymCryptFdefModulusInitMontgomery256,\
2104}
2105
2106#define SYMCRYPT_MOD_FUNCTIONS_FDEF_MONTGOMERY_MULXP256 {\
2107 (SYMCRYPT_MOD_BINARY_OP_FN) &SymCryptFdefModAddMulx256Asm,\
2108 (SYMCRYPT_MOD_BINARY_OP_FN) &SymCryptFdefModSub256Asm,\
2109 &SymCryptFdefModNegGeneric,\
2110 (SYMCRYPT_MOD_BINARY_OP_FN) &SymCryptFdefModMulMontgomeryMulxP256Asm,\
2111 (SYMCRYPT_MOD_UNARY_OP_FN) &SymCryptFdefModSquareMontgomeryMulxP256Asm,\
2112 &SymCryptFdefModInvMontgomery256,\
2113 &SymCryptFdefModSetPostMontgomeryMulx256,\
2114 &SymCryptFdefModPreGetMontgomery256,\
2115 &SymCryptFdefModulusCopyFixupMontgomery,\
2116 &SymCryptFdefModulusInitMontgomery256,\
2117}
2118
2119#define SYMCRYPT_MOD_FUNCTIONS_FDEF_MONTGOMERY_MULX384 {\
2120 (SYMCRYPT_MOD_BINARY_OP_FN) &SymCryptFdefModAddMulx384Asm,\
2121 (SYMCRYPT_MOD_BINARY_OP_FN) &SymCryptFdefModSub384Asm,\
2122 &SymCryptFdefModNegGeneric,\
2123 (SYMCRYPT_MOD_BINARY_OP_FN) &SymCryptFdefModMulMontgomeryMulx384Asm,\
2124 (SYMCRYPT_MOD_UNARY_OP_FN) &SymCryptFdefModSquareMontgomeryMulx384Asm,\
2125 &SymCryptFdef369ModInvMontgomery,\
2126 &SymCryptFdefModSetPostMontgomeryMulx384,\
2127 &SymCryptFdef369ModPreGetMontgomery,\
2128 &SymCryptFdefModulusCopyFixupMontgomery,\
2129 &SymCryptFdef369ModulusInitMontgomery,\
2130}
2131
2132#define SYMCRYPT_MOD_FUNCTIONS_FDEF_MONTGOMERY_MULXP384 {\
2133 (SYMCRYPT_MOD_BINARY_OP_FN) &SymCryptFdefModAddMulx384Asm,\
2134 (SYMCRYPT_MOD_BINARY_OP_FN) &SymCryptFdefModSub384Asm,\
2135 &SymCryptFdefModNegGeneric,\
2136 (SYMCRYPT_MOD_BINARY_OP_FN) &SymCryptFdefModMulMontgomeryMulxP384Asm,\
2137 (SYMCRYPT_MOD_UNARY_OP_FN) &SymCryptFdefModSquareMontgomeryMulxP384Asm,\
2138 &SymCryptFdef369ModInvMontgomery,\
2139 &SymCryptFdefModSetPostMontgomeryMulxP384,\
2140 &SymCryptFdef369ModPreGetMontgomery,\
2141 &SymCryptFdefModulusCopyFixupMontgomery,\
2142 &SymCryptFdef369ModulusInitMontgomery,\
2143}
2144
2145#define SYMCRYPT_MOD_FUNCTIONS_FDEF369_MONTGOMERY {\
2146 &SymCryptFdef369ModAddGeneric,\
2147 &SymCryptFdef369ModSubGeneric,\
2148 &SymCryptFdefModNegGeneric,\
2149 &SymCryptFdef369ModMulMontgomery,\
2150 &SymCryptFdef369ModSquareMontgomery,\
2151 &SymCryptFdef369ModInvMontgomery,\
2152 &SymCryptFdef369ModSetPostMontgomery,\
2153 &SymCryptFdef369ModPreGetMontgomery,\
2154 &SymCryptFdefModulusCopyFixupMontgomery,\
2155 &SymCryptFdef369ModulusInitMontgomery,\
2156}
2157
2158#define SYMCRYPT_MOD_FUNCTIONS_FDEF_MONTGOMERY_MULX {\
2159 &SymCryptFdefModAddGeneric,\
2160 &SymCryptFdefModSubGeneric,\
2161 &SymCryptFdefModNegGeneric,\
2162 &SymCryptFdefModMulMontgomeryMulx,\
2163 &SymCryptFdefModSquareMontgomeryMulx,\
2164 &SymCryptFdefModInvMontgomery,\
2165 &SymCryptFdefModSetPostMontgomery,\
2166 &SymCryptFdefModPreGetMontgomery,\
2167 &SymCryptFdefModulusCopyFixupMontgomery,\
2168 &SymCryptFdefModulusInitMontgomery,\
2169}
2170
2171#define SYMCRYPT_MOD_FUNCTIONS_FDEF_MONTGOMERY512 {\
2172 &SymCryptFdefModAddGeneric,\
2173 &SymCryptFdefModSubGeneric,\
2174 &SymCryptFdefModNegGeneric,\
2175 &SymCryptFdefModMulMontgomery512,\
2176 &SymCryptFdefModSquareMontgomery512,\
2177 &SymCryptFdefModInvMontgomery,\
2178 &SymCryptFdefModSetPostMontgomery,\
2179 &SymCryptFdefModPreGetMontgomery,\
2180 &SymCryptFdefModulusCopyFixupMontgomery,\
2181 &SymCryptFdefModulusInitMontgomery,\
2182}
2183
2184#define SYMCRYPT_MOD_FUNCTIONS_FDEF_MONTGOMERY1024 {\
2185 &SymCryptFdefModAddGeneric,\
2186 &SymCryptFdefModSubGeneric,\
2187 &SymCryptFdefModNegGeneric,\
2188 &SymCryptFdefModMulMontgomery1024,\
2189 &SymCryptFdefModSquareMontgomery1024,\
2190 &SymCryptFdefModInvMontgomery,\
2191 &SymCryptFdefModSetPostMontgomery,\
2192 &SymCryptFdefModPreGetMontgomery,\
2193 &SymCryptFdefModulusCopyFixupMontgomery,\
2194 &SymCryptFdefModulusInitMontgomery,\
2195}
2196
2197#define SYMCRYPT_MOD_FUNCTIONS_FDEF_MONTGOMERY_MULX1024 {\
2198 &SymCryptFdefModAddGeneric,\
2199 &SymCryptFdefModSubGeneric,\
2200 &SymCryptFdefModNegGeneric,\
2201 &SymCryptFdefModMulMontgomeryMulx1024,\
2202 &SymCryptFdefModSquareMontgomeryMulx1024,\
2203 &SymCryptFdefModInvMontgomery,\
2204 &SymCryptFdefModSetPostMontgomery,\
2205 &SymCryptFdefModPreGetMontgomery,\
2206 &SymCryptFdefModulusCopyFixupMontgomery,\
2207 &SymCryptFdefModulusInitMontgomery,\
2208}
2209
2210VOID
2215 UINT32 nDigits,
2216 UINT32 mask );
2217//
2218// Copies Src to Dst under mask.
2219// Requirements:
2220// - mask == 0 or mask == 0xffffffff
2221// - cbData must be a multiple of the size of a digit, or a multiple of the size of a ModElement.
2222// - pbSrc and pbDst must be SYMCRYPT_ALIGNed
2223// if mask == 0 this function does nothing.
2224// if mask == 0xffffffff this function is a memcpy from Src to Dst.
2225// This function is side-channel safe; the value of mask is not revealed
2226// through the memory access patterns.
2227//
2228
2229VOID
2234 UINT32 nDigits,
2235 UINT32 cond );
2236
2237//
2238// Swaps the bytes of Src1 with the bytes of Src2 under a condition.
2239// Requirements:
2240// - cond = 0 or cond = 1 .
2241// - cbData must be a multiple of the size of a digit, or a multiple of the size of a ModElement.
2242// - pbSrc1 and pbSrc2 must be SYMCRYPT_ALIGNed
2243// if cond == 0 this function does nothing.
2244// if cond == 1 this function swaps the bytes of Src1 with the bytes of Src2.
2245// This function is side-channel safe; the value of cond is not revealed
2246// through the memory access patterns.
2247//
2248
2249VOID
2252
2253UINT32
2255
2259
2260UINT32
2263
2267 _Out_writes_bytes_( cbBuffer ) PBYTE pbBuffer,
2269 UINT32 nDigits );
2270
2271VOID
2273 _In_ PCSYMCRYPT_INT piSrc,
2274 _Out_ PSYMCRYPT_INT piDst );
2275
2276VOID
2278 _In_ PCSYMCRYPT_INT piSrc,
2279 _Inout_ PSYMCRYPT_INT piDst,
2280 UINT32 mask );
2281
2282VOID
2285 _In_ PCSYMCRYPT_INT piSrc,
2286 _Inout_ PSYMCRYPT_INT piDst,
2287 UINT32 cond );
2288
2289VOID
2292 _Inout_ PSYMCRYPT_INT piSrc1,
2293 _Inout_ PSYMCRYPT_INT piSrc2,
2294 UINT32 cond );
2295
2296UINT32
2299
2300UINT32
2303
2306 _In_ PCSYMCRYPT_INT piSrc,
2307 _Out_ PSYMCRYPT_INT piDst );
2308
2309UINT32
2312
2313VOID
2316 UINT32 u32Src,
2317 _Out_ PSYMCRYPT_INT piDst );
2318
2319VOID
2322 UINT64 u64Src,
2323 _Out_ PSYMCRYPT_INT piDst );
2324
2329 SIZE_T cbSrc,
2331 _Out_ PSYMCRYPT_INT piDst );
2332
2336 _In_ PCSYMCRYPT_INT piSrc,
2338 SIZE_T cbDst,
2340
2341UINT32
2344
2345UINT64
2348
2349UINT32
2352 _In_ PCSYMCRYPT_INT piSrc1,
2353 UINT32 u32Src2,
2354 _Out_ PSYMCRYPT_INT piDst );
2355
2356UINT32
2359 _In_ PCSYMCRYPT_INT piSrc1,
2360 _In_ PCSYMCRYPT_INT piSrc2,
2361 _Out_ PSYMCRYPT_INT piDst );
2362
2363UINT32
2366 _In_ PCSYMCRYPT_INT piSrc1,
2367 _In_ PCSYMCRYPT_INT piSrc2,
2368 _Out_ PSYMCRYPT_INT piDst );
2369
2370UINT32
2373 _In_ PCSYMCRYPT_INT piSrc1,
2374 UINT32 u32Src2,
2375 _Out_ PSYMCRYPT_INT piDst );
2376
2377UINT32
2380 _In_ PCSYMCRYPT_INT piSrc1,
2381 _In_ PCSYMCRYPT_INT piSrc2,
2382 _Out_ PSYMCRYPT_INT piDst );
2383
2384UINT32
2387 _In_ PCSYMCRYPT_INT piSrc1,
2388 _In_ PCSYMCRYPT_INT piSrc2,
2389 _Out_ PSYMCRYPT_INT piDst );
2390
2391VOID
2394 _In_ PCSYMCRYPT_INT piSrc,
2395 _Out_ PSYMCRYPT_INT piDst );
2396
2397
2398VOID
2401 _In_ PCSYMCRYPT_INT piSrc,
2402 SIZE_T Exp,
2403 _Out_ PSYMCRYPT_INT piDst );
2404
2405VOID
2408 _In_ PCSYMCRYPT_INT piSrc,
2409 SIZE_T exp,
2410 _Out_ PSYMCRYPT_INT piDst );
2411
2412VOID
2415 UINT32 highestBit,
2416 _In_ PCSYMCRYPT_INT piSrc,
2417 _Out_ PSYMCRYPT_INT piDst );
2418
2419VOID
2422 _In_ PCSYMCRYPT_INT piSrc,
2423 SIZE_T exp,
2424 _Out_ PSYMCRYPT_INT piDst );
2425
2426UINT32
2429 _In_ PCSYMCRYPT_INT piSrc,
2430 UINT32 iBit );
2431
2432UINT32
2435 _In_ PCSYMCRYPT_INT piSrc,
2436 UINT32 iBit,
2437 UINT32 nBits );
2438
2439VOID
2442 _In_ PSYMCRYPT_INT piDst,
2443 UINT32 value,
2444 UINT32 iBit,
2445 UINT32 nBits );
2446
2447UINT32
2450 _In_ PCSYMCRYPT_INT piSrc1,
2451 _In_ UINT32 u32Src2 );
2452
2453UINT32
2456 _In_ PCSYMCRYPT_INT piSrc1,
2457 _In_ PCSYMCRYPT_INT piSrc2 );
2458
2459UINT32
2462 _In_ PCSYMCRYPT_INT piSrc1,
2463 _In_ PCSYMCRYPT_INT piSrc2 );
2464
2465UINT32
2468 _In_ PCSYMCRYPT_INT piSrc1,
2469 UINT32 Src2,
2470 _Out_ PSYMCRYPT_INT piDst );
2471
2472VOID
2475 _In_ PCSYMCRYPT_INT piSrc1,
2476 _In_ PCSYMCRYPT_INT piSrc2,
2477 _Out_ PSYMCRYPT_INT piDst,
2478 _Out_writes_bytes_( cbScratch ) PBYTE pbScratch,
2479 SIZE_T cbScratch );
2480VOID
2483 _In_ PCSYMCRYPT_INT piSrc,
2484 _Out_ PSYMCRYPT_INT piDst,
2485 _Out_writes_bytes_( cbScratch ) PBYTE pbScratch,
2486 SIZE_T cbScratch );
2487VOID
2490 _In_ PCSYMCRYPT_INT piSrc1,
2491 _In_ PCSYMCRYPT_INT piSrc2,
2492 _Out_ PSYMCRYPT_INT piDst,
2493 _Out_writes_bytes_( cbScratch ) PBYTE pbScratch,
2494 SIZE_T cbScratch );
2495
2499
2500UINT32
2503
2507 _Out_writes_bytes_( cbBuffer ) PBYTE pbBuffer,
2509 UINT32 nDigits );
2510
2514
2515VOID
2518 _Out_ PSYMCRYPT_DIVISOR pdDst );
2519
2520VOID
2523 _Out_ PSYMCRYPT_DIVISOR pDst );
2524
2528
2529VOID
2532 _In_ PCSYMCRYPT_INT piSrc,
2534 UINT32 totalOperations,
2535 UINT32 flags,
2536 _Out_writes_bytes_( cbScratch ) PBYTE pbScratch,
2537 SIZE_T cbScratch );
2538
2539VOID
2542 _In_ PCSYMCRYPT_INT piSrc,
2543 _In_ PCSYMCRYPT_DIVISOR pdDivisor,
2544 _Out_opt_ PSYMCRYPT_INT piQuotient,
2545 _Out_opt_ PSYMCRYPT_INT piRemainder,
2546 _Out_writes_bytes_( cbScratch ) PBYTE pbScratch,
2547 SIZE_T cbScratch );
2548
2549VOID
2553 UINT32 nDigits,
2554 _In_ PCSYMCRYPT_DIVISOR pdDivisor,
2556 _Out_writes_opt_(SYMCRYPT_OBJ_NUINT32(pdDivisor)) PUINT32 pRemainder,
2557 _Out_writes_bytes_( cbScratch ) PBYTE pbScratch,
2558 SIZE_T cbScratch );
2559
2560
2564
2565VOID
2568
2569UINT32
2572
2576 _Out_writes_bytes_( cbBuffer ) PBYTE pbBuffer,
2578 UINT32 nDigits );
2579
2583
2584
2585VOID
2588 _Out_ PSYMCRYPT_MODULUS pmDst );
2589
2593
2594VOID
2599
2600UINT32
2603
2607 _Out_writes_bytes_( cbBuffer ) PBYTE pbBuffer,
2609 PCSYMCRYPT_MODULUS pmMod );
2610
2614
2615VOID
2620
2621VOID
2626
2627VOID
2632 UINT32 mask );
2633
2637
2638VOID
2643 _In_ UINT32 cond );
2644
2648
2649VOID
2652 _In_ PCSYMCRYPT_INT piSrc,
2654 UINT32 averageOperations,
2655 UINT32 flags,
2656 _Out_writes_bytes_( cbScratch ) PBYTE pbScratch,
2657 SIZE_T cbScratch );
2658
2659VOID
2662 _In_ PCSYMCRYPT_INT piSrc,
2665 _Out_writes_bytes_( cbScratch ) PBYTE pbScratch,
2666 SIZE_T cbScratch );
2667
2668VOID
2672 _In_reads_bytes_( pmMod->nDigits * SYMCRYPT_FDEF_DIGIT_SIZE )
2673 PCUINT32 pSrc,
2674 _Out_ PSYMCRYPT_INT piDst,
2675 _Out_writes_bytes_( cbScratch ) PBYTE pbScratch,
2676 SIZE_T cbScratch );
2677
2682 SIZE_T cbSrc,
2685 UINT32 nDigits );
2686
2690 _In_reads_bytes_( cbSrc ) PCBYTE pbSrc,
2691 SIZE_T cbSrc,
2695 _Out_writes_bytes_( cbScratch ) PBYTE pbScratch,
2696 SIZE_T cbScratch );
2697
2698VOID
2701 UINT32 value,
2704 _Out_writes_bytes_( cbScratch ) PBYTE pbScratch,
2705 SIZE_T cbScratch );
2706
2707VOID
2710 UINT32 value,
2713 _Out_writes_bytes_( cbScratch ) PBYTE pbScratch,
2714 SIZE_T cbScratch );
2715
2720 UINT32 nDigits,
2722 SIZE_T cbDst,
2724
2731 SIZE_T cbDst,
2733 _Out_writes_bytes_( cbScratch ) PBYTE pbScratch,
2734 SIZE_T cbScratch );
2735
2736UINT32
2741 _In_ PCSYMCRYPT_MODELEMENT peSrc2 );
2742
2743UINT32
2748
2749VOID
2756 _Out_writes_bytes_( cbScratch ) PBYTE pbScratch,
2757 SIZE_T cbScratch );
2758
2759VOID
2766
2767VOID
2774
2775VOID
2782
2783VOID
2790
2791VOID
2798 _Out_writes_bytes_( cbScratch ) PBYTE pbScratch,
2799 SIZE_T cbScratch );
2800
2801VOID
2808 _Out_writes_bytes_( cbScratch ) PBYTE pbScratch,
2809 SIZE_T cbScratch );
2810
2811VOID
2818 _Out_writes_bytes_( cbScratch ) PBYTE pbScratch,
2819 SIZE_T cbScratch );
2820
2821VOID
2828
2829VOID
2836
2837VOID
2843 _Out_writes_bytes_( cbScratch ) PBYTE pbScratch,
2844 SIZE_T cbScratch );
2845
2846VOID
2851 _Out_writes_bytes_( cbScratch ) PBYTE pbScratch,
2852 SIZE_T cbScratch );
2853
2854VOID
2859 _Out_writes_bytes_( cbScratch ) PBYTE pbScratch,
2860 SIZE_T cbScratch );
2861
2862VOID
2867 _Out_writes_bytes_( cbScratch ) PBYTE pbScratch,
2868 SIZE_T cbScratch );
2869
2870VOID
2875 _Out_writes_bytes_( cbScratch ) PBYTE pbScratch,
2876 SIZE_T cbScratch );
2877
2878VOID
2883 _Out_writes_bytes_( cbScratch ) PBYTE pbScratch,
2884 SIZE_T cbScratch );
2885
2891 _Out_writes_bytes_( cbScratch ) PBYTE pbScratch,
2892 SIZE_T cbScratch );
2893
2899 _Out_writes_bytes_( cbScratch ) PBYTE pbScratch,
2900 SIZE_T cbScratch );
2901
2907 _Out_writes_bytes_( cbScratch ) PBYTE pbScratch,
2908 SIZE_T cbScratch );
2909
2915 _Out_writes_bytes_( cbScratch ) PBYTE pbScratch,
2916 SIZE_T cbScratch );
2917
2918VOID
2922 _Out_ PSYMCRYPT_MODULUS pmDst );
2923
2924VOID
2928 _Out_ PSYMCRYPT_MODULUS pmDst );
2929
2930VOID
2934 _Out_writes_bytes_( cbScratch ) PBYTE pbScratch,
2935 SIZE_T cbScratch );
2936
2937VOID
2941 UINT32 nUint32Used, // R = 2^{32 * this parameter}
2942 _Out_writes_bytes_( cbScratch ) PBYTE pbScratch,
2943 SIZE_T cbScratch );
2944
2945VOID
2949 _Out_writes_bytes_( cbScratch ) PBYTE pbScratch,
2950 SIZE_T cbScratch );
2951
2952VOID
2956 _Out_writes_bytes_( cbScratch ) PBYTE pbScratch,
2957 SIZE_T cbScratch );
2958
2959VOID
2963 _Out_writes_bytes_( cbScratch ) PBYTE pbScratch,
2964 SIZE_T cbScratch );
2965UINT32
2971 UINT32 nDigits );
2972
2973UINT32
2979 UINT32 nDigits );
2980UINT32
2984 UINT32 Src2,
2986 UINT32 nDigits );
2987
2988VOID
2995 _Out_writes_bytes_( cbScratch ) PBYTE pbScratch,
2996 SIZE_T cbScratch );
2997
2998VOID
3005 _Out_writes_bytes_( cbScratch ) PBYTE pbScratch,
3006 SIZE_T cbScratch );
3007
3008VOID
3015
3016VOID
3023
3024VOID
3031
3032VOID
3039
3040VOID
3047 _Out_writes_bytes_( cbScratch ) PBYTE pbScratch,
3048 SIZE_T cbScratch );
3049
3050VOID
3057 _Out_writes_bytes_( cbScratch ) PBYTE pbScratch,
3058 SIZE_T cbScratch );
3059
3060VOID
3067 _Out_writes_bytes_( cbScratch ) PBYTE pbScratch,
3068 SIZE_T cbScratch );
3069
3070
3071VOID
3077 _Out_writes_bytes_( cbScratch ) PBYTE pbScratch,
3078 SIZE_T cbScratch );
3079
3080VOID
3086 _Out_writes_bytes_( cbScratch ) PBYTE pbScratch,
3087 SIZE_T cbScratch );
3088
3089VOID
3095
3096VOID
3102
3103VOID
3110
3111VOID
3118
3119VOID
3125 _Out_writes_bytes_( cbScratch ) PBYTE pbScratch,
3126 SIZE_T cbScratch );
3127
3128VOID
3134 _Out_writes_bytes_( cbScratch ) PBYTE pbScratch,
3135 SIZE_T cbScratch );
3136
3137VOID
3143 _Out_writes_bytes_( cbScratch ) PBYTE pbScratch,
3144 SIZE_T cbScratch );
3145
3146
3147VOID
3151 UINT32 nDigits1,
3153 UINT32 nDigits2,
3154 _Out_writes_((nDigits1+nDigits2)*SYMCRYPT_FDEF_DIGIT_NUINT32) PUINT32 pDst );
3155
3156VOID
3160 UINT32 nDigits1,
3162 UINT32 nDigits2,
3163 _Out_writes_((nDigits1+nDigits2)*SYMCRYPT_FDEF_DIGIT_NUINT32) PUINT32 pDst );
3164
3165VOID
3170 UINT32 nDigits,
3172
3173VOID
3177 UINT32 nDigits,
3179
3180VOID
3184 UINT32 nDigits,
3186
3187VOID
3191 UINT32 nDigits,
3193
3194VOID
3198 UINT32 nDigits1,
3200 UINT32 nDigits2,
3201 _Out_writes_((nDigits1+nDigits2)*SYMCRYPT_FDEF_DIGIT_NUINT32) PUINT32 pDst );
3202
3203UINT32
3207 UINT32 nDigits,
3208 _In_ UINT32 u32Src2 );
3209
3210UINT32
3214 UINT32 carryIn,
3216 UINT32 nDigits );
3217
3218UINT32
3223 UINT32 mask,
3224 UINT32 nDigits );
3225
3226UINT32
3231 UINT32 mask,
3232 UINT32 nDigits );
3233
3234VOID
3239 UINT32 exp,
3241 _Out_writes_bytes_( cbScratch ) PBYTE pbScratch,
3242 SIZE_T cbScratch );
3243
3244VOID
3251
3252VOID
3259
3260VOID
3267
3274 UINT32 flags,
3275 _Out_writes_bytes_( cbScratch ) PBYTE pbScratch,
3276 SIZE_T cbScratch );
3277
3284 UINT32 flags,
3285 _Out_writes_bytes_( cbScratch ) PBYTE pbScratch,
3286 SIZE_T cbScratch );
3287
3294 UINT32 flags,
3295 _Out_writes_bytes_( cbScratch ) PBYTE pbScratch,
3296 SIZE_T cbScratch );
3297
3304 UINT32 flags,
3305 _Out_writes_bytes_( cbScratch ) PBYTE pbScratch,
3306 SIZE_T cbScratch );
3307
3308VOID
3313 _In_ PCSYMCRYPT_INT piExp,
3314 UINT32 nBitsExp,
3315 UINT32 flags,
3317 _Out_writes_bytes_( cbScratch ) PBYTE pbScratch,
3318 SIZE_T cbScratch );
3319
3324 _In_reads_( nBases ) PCSYMCRYPT_MODELEMENT * peBaseArray,
3325 _In_reads_( nBases ) PCSYMCRYPT_INT * piExpArray,
3326 UINT32 nBases,
3327 UINT32 nBitsExp,
3328 UINT32 flags,
3330 _Out_writes_bytes_( cbScratch ) PBYTE pbScratch,
3331 SIZE_T cbScratch );
3332
3333VOID
3338 UINT32 flags,
3339 _Out_writes_bytes_( cbScratch ) PBYTE pbScratch,
3340 SIZE_T cbScratch );
3341
3342UINT32
3346 UINT32 Src2,
3348 UINT32 nDigits );
3349
3350UINT32
3356 UINT32 nDigits );
3357
3358UINT32
3364 UINT32 nDigits );
3365
3366UINT32
3372 UINT32 nDigits );
3373
3374UINT32
3380 UINT32 nDigits );
3381
3382UINT32
3387 UINT32 nDigits );
3388
3389VOID
3394 UINT32 nDigits,
3395 UINT32 mask );
3396
3397VOID
3402 UINT32 nDigits,
3403 UINT32 mask );
3404
3405VOID
3409 UINT32 nDigits1,
3411 UINT32 nDigits2,
3412 _Out_writes_((nDigits1+nDigits2)*SYMCRYPT_FDEF_DIGIT_NUINT32) PUINT32 pDst );
3413
3414VOID
3418 UINT32 nDigits,
3420
3421VOID
3425 UINT32 nDigits1,
3427 UINT32 nDigits2,
3428 _Out_writes_((nDigits1+nDigits2)*SYMCRYPT_FDEF_DIGIT_NUINT32) PUINT32 pDst );
3429
3430VOID
3435 UINT32 nDigits,
3437
3438VOID
3442 UINT32 nDigits,
3444
3445VOID
3450 UINT32 nDigits,
3452
3453VOID
3457 UINT32 nDigits,
3459
3460VOID
3464 _Inout_ PUINT32 pSrc,
3465 _Out_ PUINT32 pDst );
3466
3467VOID
3471 _Inout_ PUINT32 pSrc,
3472 _Out_ PUINT32 pDst );
3473
3474VOID
3478 _Inout_ PUINT32 pSrc,
3479 _Out_ PUINT32 pDst );
3480
3481VOID
3485 _Inout_ PUINT32 pSrc,
3486 _Out_ PUINT32 pDst );
3487
3488VOID
3492 _Inout_ PUINT32 pSrc,
3493 _Out_ PUINT32 pDst );
3494
3495VOID
3499 _Inout_ PUINT32 pSrc,
3500 _Out_ PUINT32 pDst );
3501
3502VOID
3506 _Inout_ PUINT32 pSrc,
3507 _Out_ PUINT32 pDst );
3508
3509VOID
3513 _Inout_ PUINT32 pSrc,
3514 _Out_ PUINT32 pDst );
3515
3516
3517//=====================================================
3518// Current state of FIPS tests for asymmetric keys
3519//=====================================================
3520
3521// --------------------------------------------------------------------
3522// Key type | |
3523// & | Alg | Description
3524// Operation| |
3525// --------------------------------------------------------------------
3526// Dlkey | DH | Requires use of named safe-prime group (otherwise we cannot perform private
3527// Generate | | key range check, or public key order validation).
3528// | |
3529// | | From SP800-56Ar3:
3530// | | Check private key is in the range [1, min(2^nBitsPriv, q)-1]
3531// | | nBitsPriv is specified either using a default value or using
3532// | | SymCryptDlkeySetPrivateKeyLength, such that 2s <= nBitsPriv <= nBitsOfQ.
3533// | | (s is the maximum security strength for a named safe-prime group as
3534// | | specified in SP800 - 56arev3)
3535// | | Check public key is in the range [2, p-2]
3536// | | Check that (Public key)^q == 1 mod p
3537// | |
3538// | | FIPS 140-3 does not require a further PCT before first use of the key.
3539// |-----------------------------------------------------------
3540// | DSA | Requires use of a Dlgroup which has q, but is not a named safe-prime group.
3541// | |
3542// | | FIPS 186-4 and SP800-89 do not require DSA keypair owners to perform
3543// | | validation of keypairs they generate.
3544// | |
3545// | | FIPS 140-3 requires that a module generating a Dlkey keypair for use in DSA
3546// | | must perform a PCT on the keypair before first operational use in DSA.
3547// | | As the Dlgroups supported by FIPS are distinct for DH and DSA, we can perform
3548// | | this PCT on key generation without fear of adverse performance.
3549// --------------------------------------------------------------------
3550// Dlkey | DH | Requires use of named safe-prime group (otherwise we cannot perform private
3551// SetValue | | key range check, or public key order validation).
3552// | |
3553// | | From SP800-56Ar3:
3554// | | If importing a private key:
3555// | | Check private key is in the range [1, min(2^nBitsPriv, q)-1]
3556// | | nBitsPriv is specified either using a default value or using
3557// | | SymCryptDlkeySetPrivateKeyLength, such that 2s <= nBitsPriv <= nBitsOfQ.
3558// | | (s is the maximum security strength for a named safe-prime group as
3559// | | specified in SP800-56Arev3)
3560// | |
3561// | | If importing a public key:
3562// | | Check public key is in the range [2, p-2]
3563// | | Check that (Public key)^q == 1 mod p
3564// | |
3565// | | If importing both a private and public key, as above and also:
3566// | | Use the imported Private key to generate a Public key, and check the
3567// | | generated Public key is equal to the imported Public key.
3568// |-----------------------------------------------------------
3569// | DSA | Requires use of a Dlgroup which is not a named safe-prime group.
3570// | |
3571// | | FIPS 184-4 refers to SP800-89:
3572// | | If importing a public key:
3573// | | Check public key is in the range [2, p-2]
3574// | | Check that (Public key)^q == 1 mod p
3575// | | If importing a private and public key:
3576// | | Use the imported Private key to generate a Public key, and check the
3577// | | generated Public key is equal to the imported Public key.
3578// --------------------------------------------------------------------
3579// Eckey | ECDH | Requires use of a NIST prime Elliptic Curve (P224, P256, P384, or P521)
3580// SetRandom| |
3581// | | From SP800-56Ar3:
3582// | | Check private key is in range [1, GOrd-1]
3583// | | Check public key is nonzero, has coordinates in the underlying field, and is a
3584// | | point on the curve
3585// | | Check that GOrd*(Public key) == O
3586// | |
3587// | | FIPS 140-3 does not require a further PCT before first use of the key
3588// |----------------------------------------------------------
3589// | ECDSA | Requires use of a NIST prime Elliptic Curve (P224, P256, P384, or P521)
3590// | |
3591// | | FIPS 186-4 and SP800-89 do not require ECDSA keypair owners to perform
3592// | | validation of keypairs they generate.
3593// | |
3594// | | FIPS 140-3 requires that a module generating an Eckey keypair for use in ECDSA
3595// | | must perform a PCT on the keypair before first operational use in ECDSA.
3596// | | As the Elliptic curves used in ECDH and ECDSA are the same, an Eckey may be
3597// | | used for both ECDH and ECDSA. We defer the ECDSA PCT from the EckeySetRandom
3598// | | call to the first use of EcDsaSign, or the first export of the keypair.
3599// --------------------------------------------------------------------
3600// Eckey | ECDH | Requires use of a NIST prime Elliptic Curve (P224, P256, P384, or P521)
3601// SetValue | |
3602// | | From SP800-56Ar3:
3603// | | If importing a private key:
3604// | | Check private key is in range [1, GOrd-1]
3605// | |
3606// | | If importing a public key:
3607// | | Check public key is nonzero, has coordinates in the underlying field, and is
3608// | | a point on the curve
3609// | | Check that GOrd*(Public key) == O
3610// | |
3611// | | If importing a private and public key:
3612// | | Use the imported Private key to generate a Public key, and check the
3613// | | generated Public key is equal to the imported Public key.
3614// |----------------------------------------------------------
3615// | ECDSA | Requires use of a NIST prime Elliptic Curve (P224, P256, P384, or P521)
3616// | |
3617// | | FIPS 184-4 refers to SP800-89:
3618// | | If importing a public key:
3619// | | SP800-89 refers to ANS X9.62. Assume same tests required as SP800-56Ar3:
3620// | | Check public key is nonzero, has coordinates in the underlying field, and is
3621// | | a point on the curve
3622// | | Check that GOrd*(Public key) == O
3623// | |
3624// | | If importing a private and public key:
3625// | | Use the imported Private key to generate a Public key, and check the
3626// | | generated Public key is equal to the imported Public key.
3627// --------------------------------------------------------------------
3628// Rsakey | RSA | From FIPS 186-4 (SIGN) and SP800-56Br2 (ENCRYPT for key transport):
3629// Generate |ENCRYPT| Ensure p and q are in open range (2 ^ ((nBits - 1) / 2), 2 ^ (nBits / 2))
3630// | and | Ensure |p-q| > 2^((nBits/2)-100)
3631// | RSA | Ensure e is coprime with (p-1) and (q-1)
3632// | SIGN | Ensure d is in range [2 ^ (nBits/2) + 1, LCM(p-1,q-1) - 1]
3633// | | Ensure that d*e == 1 mod LCM(p-1,q-1)
3634// | |
3635// | | FIPS 140-3 requires that a module generating an Rsakey keypair for use in an
3636// | | RSA algorithm must perform a PCT on the keypair before first operational use.
3637// | |
3638// | | For ENCRYPT, SP800-56Br2 specifies the PCT to perform as part of key
3639// | | generation is:
3640// | | Check (m^e)^d == m mod n for some m in range [2, n-2]
3641// | |
3642// | | For SIGN, FIPS 186-4 refers to SP800-89, which does not clearly specify a
3643// | | PCT, but does specify that for an owner to have assurance of Private Key
3644// | | Possession they can sign a message with the private key and validate it with
3645// | | the public key to check they correspond to each other. Notably, this
3646// | | internally will verify (m^d)^e == m mod n for some m (along with testing
3647// | | additional padding logic)
3648// | |
3649// | | FIPS 140-2 explicitly says that only one PCT is required if a keypair may be
3650// | | used in either algorithm, with the module able to choose the PCT.
3651// | | FIPS 140-3 does not say anything specific about only requiring one PCT, but
3652// | | given that mathematically (m^e)^d == (m^ed) == (m^d)^e mod n, our
3653// | | current understanding is that the SIGN PCT works in lieu of the ENCRYPT PCT
3654// | |
3655// | | NOTE: FIPS 140-3 explicitly says that an RSA PCT cannot be used in lieu of an
3656// | | RSA algorithm selftest (CAST)
3657// --------------------------------------------------------------------
3658// Rsakey | RSA | If importing a keypair (primes and modulus):
3659// SetValue |ENCRYPT| SP800-56Br2 specifies:
3660// | | Check (m^e)^d mod n == m for some m in range [2, n-2]
3661// | | Check n == p*q
3662// | | Check p and q are in open range (2 ^ ((nBits - 1) / 2), 2 ^ (nBits / 2))
3663// | | Check |p-q| > 2^((nBits/2)-100)
3664// | | Check e is coprime with (p-1) and (q-1)
3665// | | Check p and q are probably prime
3666// | | Check d is in range [2 ^ (nBits/2) + 1, LCM(p-1,q-1) - 1]
3667// | | Check that d*e == 1 mod LCM(p-1,q-1)
3668// | |
3669// | | If importing a public key (only modulus):
3670// | | SP800-56Br2, refers to SP800-89 which details the following Partial Public Key
3671// | | Validation:
3672// | | Check n is odd
3673// | | Check n is not a prime or a power of a prime
3674// | | Check n has no factors smaller than 752
3675// |----------------------------------------------------------
3676// | RSA | FIPS 186-4 refers only to SP800-89 which has weaker tests for a keypair than
3677// | SIGN | SP800-56Br2 (i.e. success at SP800-56Br2 tests implies success in SP800-89)
3678// | | The current strategy will be to always perform the stronger tests.
3679// --------------------------------------------------------------------
3680
3681// Macro for executing a Cryptographic Algorithm Self-Test (CAST) and setting the corresponding
3682// flag. These selftests must be run once per algorithm before the algorithm is used. For algorithms
3683// like hashing and symmetric encryption which have a low performance cost, we run the CASTs when
3684// the module is loaded. For asymmetric algorithms, we defer the CASTs until the first use of the
3685// algorithm; hence we need flags to keep track of which CASTs have been run.
3686#define SYMCRYPT_RUN_SELFTEST_ONCE(AlgorithmSelftestFunction, AlgorithmSelftestFlag) \
3687if( ( g_SymCryptFipsSelftestsPerformed & AlgorithmSelftestFlag ) == 0 ) \
3688{ \
3689 AlgorithmSelftestFunction( ); \
3690 SYMCRYPT_ATOMIC_OR32_PRE_RELAXED( &g_SymCryptFipsSelftestsPerformed, AlgorithmSelftestFlag ); \
3691}
3692
3693// Macros for executing a pairwise consistency test on a key and setting the per-key selftest flag.
3694// Typically PCTs must be run for each key before the key is first used or exported, but the
3695// specific requirements vary between algorithms.
3696//
3697// Note that a PCT is not considered a CAST and thus does not satisfy the aforementioned requirement
3698// for algorithm selftests.
3699#define SYMCRYPT_RUN_KEY_GEN_PCT(KeySelftestFunction, Key, KeySelftestFlag) \
3700if( ( Key->fAlgorithmInfo & (KeySelftestFlag | SYMCRYPT_FLAG_KEY_NO_FIPS) ) == 0 ) \
3701{ \
3702 /* PCT should never fail on key generation - FIPS assert that it does not */ \
3703 SYMCRYPT_FIPS_ASSERT( KeySelftestFunction( Key ) == SYMCRYPT_NO_ERROR ); \
3704 SYMCRYPT_ATOMIC_OR32_PRE_RELAXED(&Key->fAlgorithmInfo, KeySelftestFlag); \
3705}
3706
3707// Macro to check flag used in fAlgorithmInfo is non-zero and a power of 2
3708#define CHECK_ALGORITHM_INFO_FLAG_POW2( flag ) \
3709 C_ASSERT( (flag != 0) && ((flag & (flag-1)) == 0) );
3710
3711// Macro to check flags used together in fAlgorithmInfo are distinct
3712#define CHECK_ALGORITHM_INFO_FLAGS_DISTINCT( flag0, flag1, flag2, flag3, flag4 ) \
3713 C_ASSERT( (flag0 < flag1) && (flag1 < flag2) && (flag2 < flag3) && (flag3 < flag4) );
3714
3718
3721
3724
3727
3730
3734
3738//
3739// FIPS pairwise consistency test for RSA sign/verify.
3740//
3741
3745//
3746// FIPS pairwise consistency test for DSA sign/verify.
3747//
3748
3752//
3753// FIPS pairwise consistency test for ECDSA sign/verify.
3754//
3755
3758
3760
3761 UINT32 nBitsOfP; // nBitsOfQ == nBitsOfP-1
3762 UINT32 nMinBitsPriv; // nMinBitsPriv == 2s
3763 // s is the maximum security strength supported by the group based on SP800-56Arev3
3764 UINT32 nDefaultBitsPriv; // nBitsOfQ >= nDefaultBitsPriv >= nMinBitsPriv
3765 // nDefaultBitsPriv will be the default value of nBitsPriv for a Dlkey in this Dlgroup
3766 // nBitsPriv is the maximum length of the private key
3769//
3770// SYMCRYPT_DLGROUP_DH_SAFEPRIME_PARAMS is used to specify all the parameters needed for creation
3771// of a Dlgroup based on a safe-prime group (i.e. p = 2q+1, and g = 2).
3772// Currently this is used exclusively internally, and the interface for explicitly specifying use of
3773// safe-prime group in SymCrypt is to use
3774
3775// Internally supported Safe Prime groups
3781
3787
3788#define SYMCRYPT_DH_SAFEPRIME_GROUP_COUNT (10)
3789
3790// Note, we rely on the ordering of the parameters from smallest to largest within each named set of
3791// safe-prime groups as we iterate through them assuming this order in SymCryptDlgroupSetValueSafePrime
3793
3794//
3795// Definitions for ECurve dispatch functions
3796//
3801 PBYTE pbScratch,
3802 SIZE_T cbScratch );
3803
3808 PBYTE pbScratch,
3809 SIZE_T cbScratch );
3810
3813 _Out_ PSYMCRYPT_INT piScalar,
3816 PBYTE pbScratch,
3817 SIZE_T cbScratch );
3818
3821 _In_ PCSYMCRYPT_ECPOINT poSrc1,
3822 _In_ PCSYMCRYPT_ECPOINT poSrc2,
3823 UINT32 flags,
3825 PBYTE pbScratch,
3827
3832 PBYTE pbScratch,
3833 SIZE_T cbScratch );
3834
3839 PBYTE pbScratch,
3840 SIZE_T cbScratch );
3841
3844 _In_ PCSYMCRYPT_ECPOINT poSrc1,
3845 _In_ PCSYMCRYPT_ECPOINT poSrc2,
3847 UINT32 flags,
3849 PBYTE pbScratch,
3850 SIZE_T cbScratch );
3851
3854 _In_ PCSYMCRYPT_ECPOINT poSrc1,
3855 _In_ PCSYMCRYPT_ECPOINT poSrc2,
3858 PBYTE pbScratch,
3859 SIZE_T cbScratch );
3860
3865 UINT32 flags,
3867 PBYTE pbScratch,
3868 SIZE_T cbScratch );
3869
3873 UINT32 mask,
3875 PBYTE pbScratch,
3876 SIZE_T cbScratch );
3877
3880 _In_ PCSYMCRYPT_INT piScalar,
3881 _In_opt_
3882 PCSYMCRYPT_ECPOINT poSrc,
3883 UINT32 flags,
3886 PBYTE pbScratch,
3887 SIZE_T cbScratch );
3888
3891 _In_reads_( nPoints ) PCSYMCRYPT_INT * piSrcScalarArray,
3892 _In_reads_( nPoints ) PCSYMCRYPT_ECPOINT * poSrcEcpointArray,
3893 UINT32 nPoints,
3894 UINT32 flags,
3896 _Out_writes_bytes_( cbScratch ) PBYTE pbScratch,
3897 SIZE_T cbScratch );
3898
3901
3902
3904{
3921
3922#define SYMCRYPT_ECURVE_FUNCTIONS_SIZE (sizeof( SYMCRYPT_ECURVE_FUNCTIONS ) )
3923
3924// Check that the size is a power of 2
3926
3927//
3928// Functions for the each type of curve
3929//
3930
3931//--------------------------------------------------------
3932//--------- Short Weierstrass ----------------------------
3933//--------------------------------------------------------
3934
3936
3937VOID
3940
3941VOID
3947 PBYTE pbScratch,
3948 SIZE_T cbScratch );
3949
3950VOID
3956 PBYTE pbScratch,
3957 SIZE_T cbScratch );
3958
3959UINT32
3963 _In_ PCSYMCRYPT_ECPOINT poSrc1,
3964 _In_ PCSYMCRYPT_ECPOINT poSrc2,
3965 UINT32 flags,
3967 PBYTE pbScratch,
3968 SIZE_T cbScratch );
3969
3970UINT32
3976 PBYTE pbScratch,
3977 SIZE_T cbScratch );
3978
3979UINT32
3985 PBYTE pbScratch,
3986 SIZE_T cbScratch );
3987
3988VOID
3992 _In_ PCSYMCRYPT_ECPOINT poSrc1,
3993 _In_ PCSYMCRYPT_ECPOINT poSrc2,
3995 UINT32 flags,
3997 PBYTE pbScratch,
3998 SIZE_T cbScratch );
3999
4000VOID
4004 _In_ PCSYMCRYPT_ECPOINT poSrc1,
4005 _In_ PCSYMCRYPT_ECPOINT poSrc2,
4008 PBYTE pbScratch,
4009 SIZE_T cbScratch );
4010
4011VOID
4017 UINT32 flags,
4019 PBYTE pbScratch,
4020 SIZE_T cbScratch );
4021
4022VOID
4027 UINT32 mask,
4029 PBYTE pbScratch,
4030 SIZE_T cbScratch );
4031
4032VOID
4038 UINT32 flags,
4040 PBYTE pbScratch,
4041 SIZE_T cbScratch );
4042
4043//--------------------------------------------------------
4044//--------- Twisted Edwards ------------------------------
4045//--------------------------------------------------------
4046
4048
4049VOID
4052
4053VOID
4059 PBYTE pbScratch,
4061
4062VOID
4066 _In_ PCSYMCRYPT_ECPOINT poSrc1,
4067 _In_ PCSYMCRYPT_ECPOINT poSrc2,
4069 UINT32 flags,
4071 PBYTE pbScratch,
4072 SIZE_T cbScratch );
4073
4074VOID
4078 _In_ PCSYMCRYPT_ECPOINT poSrc1,
4079 _In_ PCSYMCRYPT_ECPOINT poSrc2,
4082 PBYTE pbScratch,
4083 SIZE_T cbScratch );
4084
4085VOID
4091 UINT32 flags,
4093 PBYTE pbScratch,
4095
4096UINT32
4100 _In_ PCSYMCRYPT_ECPOINT poSrc1,
4101 _In_ PCSYMCRYPT_ECPOINT poSrc2,
4102 UINT32 flags,
4104 PBYTE pbScratch,
4106
4107UINT32
4113 PBYTE pbScratch,
4115
4116UINT32
4122 PBYTE pbScratch,
4124
4125VOID
4131 PBYTE pbScratch,
4133
4134VOID
4139 UINT32 mask,
4141 PBYTE pbScratch,
4142 SIZE_T cbScratch );
4143
4144//--------------------------------------------------------
4145//--------- Montgomery -----------------------------------
4146//--------------------------------------------------------
4147
4149
4150VOID
4153
4154VOID
4160 PBYTE pbScratch,
4161 SIZE_T cbScratch );
4162
4163UINT32
4167 _In_ PCSYMCRYPT_ECPOINT poSrc1,
4168 _In_ PCSYMCRYPT_ECPOINT poSrc2,
4169 UINT32 flags,
4171 PBYTE pbScratch,
4173
4174UINT32
4180 PBYTE pbScratch,
4181 SIZE_T cbScratch );
4182
4187 _In_ PCSYMCRYPT_INT piScalar,
4188 _In_opt_
4189 PCSYMCRYPT_ECPOINT poSrc,
4190 UINT32 flags,
4193 PBYTE pbScratch,
4194 SIZE_T cbScratch );
4195
4196//--------------------------------------------------------
4197//--------- Generic multiplication-related functions -----
4198//--------------------------------------------------------
4199
4200VOID
4205 PBYTE pbScratch,
4206 SIZE_T cbScratch );
4207
4212 _In_ PCSYMCRYPT_INT piScalar,
4213 _In_opt_
4214 PCSYMCRYPT_ECPOINT poSrc,
4215 UINT32 flags,
4218 PBYTE pbScratch,
4219 SIZE_T cbScratch );
4220
4225 _In_reads_( nPoints ) PCSYMCRYPT_INT * piSrcScalarArray,
4226 _In_reads_( nPoints ) PCSYMCRYPT_ECPOINT * poSrcEcpointArray,
4227 UINT32 nPoints,
4228 UINT32 flags,
4230 _Out_writes_bytes_( cbScratch ) PBYTE pbScratch,
4231 SIZE_T cbScratch );
4232
4233VOID
4237 _Out_ PSYMCRYPT_INT piScalar,
4239 _Out_writes_bytes_( cbScratch ) PBYTE pbScratch,
4240 SIZE_T cbScratch );
4241
4242VOID
4246//--------------------------------------------------------
4247//--------------------------------------------------------
4248
4249// Table with the number of field elements for each point format (in ecpoint.c)
4251
4252UINT32
4256 UINT32 numOfCoordinates );
4257
4258
4262
4263UINT32
4267 _In_ PCSYMCRYPT_INT piSrc,
4268 _Out_writes_bytes_( cbScratch ) PBYTE pbScratch,
4269 SIZE_T cbScratch );
4270
4271VOID
4274
4275UINT64
4277
4278
4279//--------------------------------------------------------
4280//--------------------------------------------------------
4281
4282// Helper function for wiping the Ec key's private state (e.g. for use in layers such as composites)
4283VOID
4286 _Inout_ PSYMCRYPT_ECKEY pkEckey );
4287
4288// Recoding algorithms
4289VOID
4292 UINT32 W,
4294 _Inout_ PSYMCRYPT_INT piTmp,
4295 _Out_writes_( nRecodedDigits )
4296 PUINT32 absofKIs,
4297 _Out_writes_( nRecodedDigits )
4298 PUINT32 sigofKIs,
4299 UINT32 nRecodedDigits );
4300
4301VOID
4304 UINT32 W,
4306 _Out_writes_( nRecodedDigits )
4307 PUINT32 absofKIs,
4308 _Out_writes_( nRecodedDigits )
4309 PUINT32 sigofKIs,
4310 UINT32 nRecodedDigits );
4311
4312VOID
4315 UINT32 W,
4316 _In_ PCSYMCRYPT_INT piK,
4317 UINT32 nBitsExp,
4318 _Out_writes_( nRecodedDigits )
4319 PUINT32 absofKIs,
4320 UINT32 nRecodedDigits );
4321
4322// M-LWE: Module Learning-With-Errors (ML-KEM, ML-DSA)
4323//
4324// ML-KEM (also known as Kyber) and ML-DSA (also known as Dilithium) are Post-Quantum algorithms
4325// based on the Learning-With-Errors problem over Module Lattices (or the hardness of the M-LWE
4326// problem).
4327//
4328// A Module is a Vector Space over a Ring. That is, elements of the vector spaces are elements in
4329// the underlying ring.
4330// We refer to Module as MLWE in the below types to avoid naming confusion with Module as in
4331// "FIPS module". Though technically components acting on MLWE types could be used outside of the
4332// MLWE problem, these types are SymCrypt-internal, and are only currently intended for use in
4333// these MLWE-based algorithms.
4334//
4335// In ML-KEM and ML-DSA, Polynomial Rings are used. That is, a ring defined over polynomials.
4336// For both schemes, the polynomial ring is defined modulo the polynomial (X^256 + 1). This means
4337// there is a representative of each polynomial ring element with 256 coefficients
4338// (c_255*X^255 + c_254*X^254 + ... + c_0). The coefficients themselves are modulo a small prime
4339// in both schemes. For ML-KEM the small prime is 3329 (12-bits), and for ML-DSA the small prime
4340// is 8380417 (23-bits).
4341// Additionally, for both schemes there is a Number Theoretic Transform (NTT) which maps polynomial
4342// ring elements to a corresponding ring for efficient multiplication.
4343// The in-memory representation of a polynomial ring element uses the same struct regardless of
4344// whether it is in standard form, or the NTT form. For brevity we tend to refer to polynomial
4345// ring elements as PolyElements.
4346//
4347#define SYMCRYPT_MLWE_POLYNOMIAL_COEFFICIENTS (256)
4348
4349// MLWE internal function definitions are in their own headers
4350#include "sc_lib_mlkem.h"
4351#include "sc_lib_mldsa.h"
4352
4353//
4354// Common Composite Definitions
4355//
4356
4357typedef enum {
4363
4367 SYMCRYPT_CACHED_ECURVE_ID curveId );
4368
4369#define SYMCRYPT_COMPOSITE_SIZEOF_ENCODED_EC_PUBLIC_KEY_P256 (65)
4370#define SYMCRYPT_COMPOSITE_SIZEOF_ENCODED_EC_PUBLIC_KEY_P384 (97)
4371#define SYMCRYPT_COMPOSITE_SIZEOF_ENCODED_EC_PUBLIC_KEY_CURVE_25519 (32)
4372
4373#define SYMCRYPT_COMPOSITE_SIZEOF_MAX_ENCODED_EC_PUBLIC_KEY SYMCRYPT_COMPOSITE_SIZEOF_ENCODED_EC_PUBLIC_KEY_P384
4374
4375#define SYMCRYPT_COMPOSITE_SIZEOF_ENCODED_EC_PRIVATE_KEY_P256 (51)
4376#define SYMCRYPT_COMPOSITE_SIZEOF_ENCODED_EC_PRIVATE_KEY_P384 (64)
4377#define SYMCRYPT_COMPOSITE_SIZEOF_ENCODED_EC_PRIVATE_KEY_CURVE_25519 (32)
4378
4379UINT32
4382 SYMCRYPT_CACHED_ECURVE_ID curveId );
4383
4384UINT32
4387 SYMCRYPT_CACHED_ECURVE_ID curveId );
4388
4392 _In_ PCSYMCRYPT_ECKEY pEckey,
4395 SIZE_T cbDst );
4396
4400 _In_ PCSYMCRYPT_ECKEY pEckey,
4403 SIZE_T cbDst );
4404
4409 _In_reads_bytes_( cbSrc ) PCBYTE pbSrc,
4410 SIZE_T cbSrc,
4411 UINT32 flags,
4412 _Inout_ PSYMCRYPT_ECKEY pEckey );
4413
4418 _In_reads_bytes_( cbSrc ) PCBYTE pbSrc,
4419 SIZE_T cbSrc,
4420 UINT32 flags,
4421 _Inout_ PSYMCRYPT_ECKEY pEckey );
4422
4423//
4424// Composite ML-KEM definitions
4425//
4426
4441
4442typedef SYMCRYPT_ASYM_ALIGN_STRUCT _SYMCRYPT_COMPOSITE_MLKEMKEY {
4443 PCSYMCRYPT_COMPOSITE_MLKEM_INTERNAL_PARAMS pParams; // pointer to internal params for Composite ML-KEM being used
4445 PSYMCRYPT_ECKEY pkEcKey; // all composite keys with the same elliptic curve type
4446 // share the same lazily allocated curve object. This
4447 // avoids the overhead of setting up a new curve object per key.
4448
4451
4455
4456// Rejection sampling for generating an EC scalar from an IRTF Composite ML-KEM seed
4461 SYMCRYPT_NUMBER_FORMAT numFormat,
4463 SIZE_T cbSeed,
4464 _Out_writes_bytes_( cbScalar ) PBYTE pbScalar,
4465 SIZE_T cbScalar );
4466
4467//
4468// XMSS
4469//
4470
4471//
4472// ADRS structure definitions as specified in RFC 8391
4473//
4475{
4480
4481typedef struct _XMSS_OTS_ADDRESS
4482{
4487
4489{
4494
4496{
4501
4502typedef struct _XMSS_ADRS
4503{
4507
4508 union {
4512 } u;
4513
4515
4517
4518
4519typedef SYMCRYPT_ASYM_ALIGN_STRUCT _SYMCRYPT_XMSS_KEY
4520{
4522
4524
4526
4527 // Public key
4530
4532
4533 // Private key
4534 SYMCRYPT_ALIGN_AT(16) UINT64 Idx; // Aligning on 16-bytes to suppress clang warning
4535 // when atomic increment is performed on it.
4538
4540
4542
4543
4549 SIZE_T cbSeed,
4550 _In_reads_bytes_( cbSkXmss ) PCBYTE pbSkXmss,
4551 SIZE_T cbSkXmss,
4552 _Out_writes_bytes_( cbRoot ) PBYTE pbRoot,
4553 SIZE_T cbRoot );
4554//
4555// Compute public root value from SEED and SK_XMSS
4556//
4557
4562//
4563// Verifies that the public root matches the private key by recomputing it
4564//
4565
4570 _In_reads_bytes_( cbMessage ) PCBYTE pbMessage,
4571 SIZE_T cbMessage,
4572 UINT32 flags,
4573 _In_reads_bytes_( cbSignature ) PCBYTE pbSignature,
4574 SIZE_T cbSignature );
4575//
4576// The function that actually does the signature verification. This one doesn't
4577// run the self-tests so that it can be called from the self-test function.
4578//
4579
4580
4581VOID
4584 UINT32 n, // data size in bytes
4585 UINT32 w, // digit length in bits (Winternitz coefficient)
4586 _Out_ PUINT32 puLen1, // number of w-bit digits in n
4587 _Out_ PUINT32 puLen2 // number of w-bit digits to store the checksum len1 * (2^w - 1)
4588 );
4589
4591{
4594 BYTE value[SYMCRYPT_ANYSIZE_ARRAY];
4596
4597#define SYMCRYPT_SIZEOF_TREEHASH_NODE(cbValue) (sizeof(SYMCRYPT_TREEHASH_NODE) - 1 + (cbValue))
4598
4599#define SYMCRYPT_TREEHASH_NODE_GET(aNodes, cbValue, i) ((PSYMCRYPT_TREEHASH_NODE)((PBYTE)(aNodes) + (i) * SYMCRYPT_SIZEOF_TREEHASH_NODE(cbValue)))
4600
4601
4603{
4607
4609
4610
4611typedef
4614 _In_ PSYMCRYPT_TREEHASH_NODE pNodeLeft,
4615 _In_ PSYMCRYPT_TREEHASH_NODE pNodeRight,
4618
4619
4621{
4622 UINT32 cbNode; // node size; height + hash result
4623 UINT32 nSize; // current size of the stack
4624 UINT32 nCapacity; // maximum items
4628
4629 SYMCRYPT_TREEHASH_NODE arrNodes[SYMCRYPT_ANYSIZE_ARRAY];
4630
4632
4633
4637 UINT32 nLeaves,
4638 PBYTE pbBuffer,
4640 UINT32 cbHashResult,
4641 PSYMCRYPT_INCREMENTAL_TREEHASH_FUNC funcCompressNodes,
4643
4648 SIZE_T index );
4649
4654 UINT32 nLeafIndex );
4655
4656VOID
4660 _Out_ PSYMCRYPT_TREEHASH_NODE *ppNodeLeft,
4661 _Out_ PSYMCRYPT_TREEHASH_NODE *ppNodeRight );
4662
4667 BOOLEAN fFinal );
4668
4673
4678
4679UINT32
4682 UINT32 nLeaves);
4683
4684SIZE_T
4687 UINT32 cbNode,
4688 UINT32 nLeaves);
4689
4690UINT32
4693 UINT32 width,
4694 _In_ PCBYTE pbBuffer,
4696 UINT32 index);
4697
4698//
4699// LMS
4700//
4701#define SYMCRYPT_IS_VALID_WINTERNITZ_WIDTH(w) ( ((w) == 1) || ((w) == 2) || ((w) == 4) || ((w) == 8) )
4702#define SYMCRYPT_LMS_KEY_PAIR_IDENTIFIER_SIZE 16
4703#define SYMCRYPT_LMS_MAX_N 32
4704#define SYMCRYPT_LMS_MAX_P 265
4705#define SYMCRYPT_LMS_MAX_H 25
4706#define SYMCRYPT_LMS_MAX_CUSTOM_TREE_HEIGHT 31
4707#define SYMCRYPT_LMS_CHECKSUM_SIZE 16
4708
4709// LmsAlgId || LmsOtsAlgId || I || RootNode
4710#define SYMCRYPT_LMS_PUB_KEY_SIZE(cbHashOutput) (8 + SYMCRYPT_LMS_KEY_PAIR_IDENTIFIER_SIZE + cbHashOutput)
4711
4712// LmsAlgId || LmsOtsAlgId || I || RootNode || NextUnusedLeaf || Seed
4713#define SYMCRYPT_LMS_PRIV_KEY_SIZE(cbHashOutput) (SYMCRYPT_LMS_PUB_KEY_SIZE(cbHashOutput) + sizeof(UINT32) + cbHashOutput)
4714
4715//==========================================================================
4716// LMS internal structures
4717//==========================================================================
4718typedef SYMCRYPT_ASYM_ALIGN_STRUCT _SYMCRYPT_LMS_KEY{
4719 SIZE_T cbSize;
4721
4722 // Leaf number of the next LM-OTS private key that has not yet been used
4724
4725 // The key type, can be: SYMCRYPT_LMSKEY_TYPE_PUBLIC, or SYMCRYPT_LMSKEY_TYPE_PRIVATE
4727
4728 // Key identifier
4730
4731 // Public key root
4733
4734 // Private key seed
4736
4741
4746 _In_reads_bytes_(cbMessage) PCBYTE pbMessage,
4747 SIZE_T cbMessage,
4748 UINT32 flags,
4749 _In_reads_bytes_(cbSignature) PCBYTE pbSignature,
4750 SIZE_T cbSignature);
4751//
4752// This function carries out the actual LMS verification process. It's essential to prevent an infinite
4753// recursive call in SymCryptLmsVerifySelftest.
4754//
4755
4756
4757// Atomics.
4758//
4759// We define all our SymCrypt atomics below. Different compilers/environments have different
4760// intrinsics to handle atomics in different environments.
4761//
4762// The SymCrypt atomics take the form SYMCRYPT_ATOMIC_<Operation><Bitsize>_<Return>_<Ordering>
4763//
4764// <Operation> is the atomic operation (i.e. LOAD, OR, XOR, AND, ADD, INC, etc.)
4765// <Bitsize> indicates the bitsize of the values that the atomic operation operates on. Pointers to
4766// values which atomics operate on must be aligned to the size of the value.
4767// <Return> takes the value PRE or POST, indicating whether the return value of the atomic is the
4768// value of the destination before (PRE) or after (POST) the operation was performed. Not used when
4769// operation is LOAD!
4770// <Ordering> specifies the memory ordering of the atomic operation in relation to other loads/stores
4771// and can take one of the following values:
4772// RELAXED corresponds to relaxed memory ordering in C++11
4773// SEQ_CST corresponds to sequentially consistent memory ordering in C++11
4774// ACQUIRE corresponds to acquire memory ordering in C++11
4775// RELEASE corresponds to release memory ordering in C++11
4776//
4777
4778#if SYMCRYPT_PLATFORM_WINDOWS
4779#include <intrin.h>
4780
4781#if SYMCRYPT_CPU_ARM64
4782// 64b loads are naturally atomic on Arm64
4783#define SYMCRYPT_ATOMIC_LOAD64_RELAXED(_dest) SYMCRYPT_FORCE_READ64(_dest)
4784#define SYMCRYPT_ATOMIC_OR32_PRE_RELAXED(_dest, _val) _InterlockedOr_nf( (volatile LONG *)(_dest), (LONG)(_val) )
4785#define SYMCRYPT_ATOMIC_ADD32_PRE_RELAXED(_dest, _val) _InterlockedExchangeAdd_nf( (volatile LONG *)(_dest), (LONG)(_val) )
4786#define SYMCRYPT_ATOMIC_ADD64_POST_RELAXED(_dest, _val) _InterlockedAdd64_nf( (volatile LONG64 *)(_dest), (LONG64)(_val) )
4787
4788#define SYMCRYPT_ATOMIC_ADD32_POST_SEQ_CST(_dest, _val) _InterlockedAdd( (volatile LONG *)(_dest), (LONG)(_val) )
4789
4790#define SYMCRYPT_ATOMIC_LOADPTR_ACQUIRE(_dest) ((PVOID)__ldar64( (volatile UINT64 *)(_dest) ))
4791#define SYMCRYPT_ATOMIC_STOREPTR_RELEASE(_dest, _val) __stlr64( (volatile UINT64 *)(_dest), (UINT64)(_val) )
4792
4793// For ARM/ARM64, MSVC does not have a dedicated acquire-release CAS intrinsic.
4794#define SYMCRYPT_ATOMIC_CAS_PTR_ACQUIRE_RELEASE( _dest, _exchange, _comp ) \
4795 _InterlockedCompareExchangePointer( (volatile PVOID *)(_dest), (PVOID)(_exchange), (PVOID)(_comp) )
4796
4797#elif SYMCRYPT_CPU_ARM
4798#define SYMCRYPT_ATOMIC_LOAD64_RELAXED(_dest) _InterlockedOr64_nf( (volatile LONG64 *)(_dest), 0 )
4799#define SYMCRYPT_ATOMIC_OR32_PRE_RELAXED(_dest, _val) _InterlockedOr_nf( (volatile LONG *)(_dest), (LONG)(_val) )
4800#define SYMCRYPT_ATOMIC_ADD32_PRE_RELAXED(_dest, _val) _InterlockedExchangeAdd_nf( (volatile LONG *)(_dest), (LONG)(_val) )
4801#define SYMCRYPT_ATOMIC_ADD64_POST_RELAXED(_dest, _val) _InterlockedAdd64_nf( (volatile LONG64 *)(_dest), (LONG64)(_val) )
4802
4803#define SYMCRYPT_ATOMIC_ADD32_POST_SEQ_CST(_dest, _val) _InterlockedAdd( (volatile LONG *)(_dest), (LONG)(_val) )
4804
4805#define SYMCRYPT_ATOMIC_LOADPTR_ACQUIRE(_dest) ((PVOID)_InterlockedOr_acq( (volatile LONG *)(_dest), 0 ))
4806#define SYMCRYPT_ATOMIC_STOREPTR_RELEASE(_dest, _val) _InterlockedExchangePointer_rel( (volatile PVOID *)(_dest), (PVOID)(_val) )
4807
4808#define SYMCRYPT_ATOMIC_CAS_PTR_ACQUIRE_RELEASE( _dest, _exchange, _comp ) \
4809 _InterlockedCompareExchangePointer( (volatile PVOID *)(_dest), (PVOID)(_exchange), (PVOID)(_comp) )
4810
4811#elif SYMCRYPT_CPU_AMD64
4812// For MSVC on AMD64, there are no _nf atomic intrinsics
4813// 64b loads are naturally atomic on AMD64
4814#define SYMCRYPT_ATOMIC_LOAD64_RELAXED(_dest) SYMCRYPT_FORCE_READ64(_dest)
4815#define SYMCRYPT_ATOMIC_OR32_PRE_RELAXED(_dest, _val) _InterlockedOr( (volatile LONG *)(_dest), (LONG)(_val) )
4816#define SYMCRYPT_ATOMIC_ADD32_PRE_RELAXED(_dest, _val) _InterlockedExchangeAdd( (volatile LONG *)(_dest), (LONG)(_val) )
4817#define SYMCRYPT_ATOMIC_ADD64_POST_RELAXED(_dest, _val) (_InterlockedExchangeAdd64( (volatile LONG64 *)(_dest), (LONG64)(_val) ) + (LONG64)(_val))
4818
4819#define SYMCRYPT_ATOMIC_ADD32_POST_SEQ_CST(_dest, _val) (_InterlockedExchangeAdd( (volatile LONG *)(_dest), (LONG)(_val) ) + (LONG)(_val))
4820
4821// Volatile load / store are sufficient for acquire-release semantics on AMD64
4822#define SYMCRYPT_ATOMIC_LOADPTR_ACQUIRE(_dest) ((PVOID)SYMCRYPT_FORCE_READ64(_dest))
4823#define SYMCRYPT_ATOMIC_STOREPTR_RELEASE(_dest, _val) SYMCRYPT_FORCE_WRITE64(_dest, ((UINT64)(_val)))
4824
4825#define SYMCRYPT_ATOMIC_CAS_PTR_ACQUIRE_RELEASE( _dest, _exchange, _comp ) \
4826 _InterlockedCompareExchangePointer( (volatile PVOID *)(_dest), (PVOID)(_exchange), (PVOID)(_comp) )
4827
4828#elif SYMCRYPT_CPU_X86
4829// For MSVC on x86, there is no 64b atomic load intrinsic - use expected to fail CAS, attempting to set from 0 to 0
4830#define SYMCRYPT_ATOMIC_LOAD64_RELAXED(_dest) _InterlockedCompareExchange64( (volatile LONG64 *)(_dest), 0, 0 )
4831// For MSVC on x86, there are no _nf atomic intrinsics
4832#define SYMCRYPT_ATOMIC_OR32_PRE_RELAXED(_dest, _val) _InterlockedOr( (volatile LONG *)(_dest), (LONG)(_val) )
4833#define SYMCRYPT_ATOMIC_ADD32_PRE_RELAXED(_dest, _val) _InterlockedExchangeAdd( (volatile LONG *)(_dest), (LONG)(_val) )
4834// For MSVC on x86, there is no 64b atomic add intrinsic
4835// We could use InterlockedAdd64 function from windows.h if we are using MSVC for Windows, but
4836// to remove dependency we just define our own inline function using _InterlockedCompareExchange64
4838LONG64
4839SymCryptInlineInterlockedAdd64( volatile LONG64* destination, LONG64 value )
4840{
4841 LONG64 preValue;
4842 do {
4843 preValue = *destination;
4844 } while (_InterlockedCompareExchange64(destination, preValue + value, preValue) != preValue);
4845
4846 return preValue + value;
4847}
4848#define SYMCRYPT_ATOMIC_ADD64_POST_RELAXED(_dest, _val) SymCryptInlineInterlockedAdd64( (volatile LONG64 *)(_dest), (LONG64)(_val) )
4849
4850#define SYMCRYPT_ATOMIC_ADD32_POST_SEQ_CST(_dest, _val) (_InterlockedExchangeAdd( (volatile LONG *)(_dest), (LONG)(_val) ) + (LONG)(_val))
4851
4852// Volatile load / store are sufficient for acquire-release semantics on x86
4853#define SYMCRYPT_ATOMIC_LOADPTR_ACQUIRE(_dest) ((PVOID)SYMCRYPT_FORCE_READ32(_dest))
4854#define SYMCRYPT_ATOMIC_STOREPTR_RELEASE(_dest, _val) SYMCRYPT_FORCE_WRITE32(_dest, ((UINT32)(_val)))
4855
4856#define SYMCRYPT_ATOMIC_CAS_PTR_ACQUIRE_RELEASE( _dest, _exchange, _comp ) \
4857 _InterlockedCompareExchangePointer( (volatile PVOID *)(_dest), (PVOID)(_exchange), (PVOID)(_comp) )
4858
4859#else
4860
4861// Fallback intended to generically work across all supported platforms for cases where
4862// we do not make decisions based on CPU architecture, such as no ASM builds. For the most
4863// part the same as x86 except in cases where the underlying definition relies on pointer size.
4864
4865#define SYMCRYPT_ATOMIC_LOAD64_RELAXED(_dest) _InterlockedCompareExchange64( (volatile LONG64 *)(_dest), 0, 0 )
4866#define SYMCRYPT_ATOMIC_OR32_PRE_RELAXED(_dest, _val) _InterlockedOr( (volatile LONG *)(_dest), (LONG)(_val) )
4867#define SYMCRYPT_ATOMIC_ADD32_PRE_RELAXED(_dest, _val) _InterlockedExchangeAdd( (volatile LONG *)(_dest), (LONG)(_val) )
4868
4870LONG64
4871SymCryptInlineInterlockedAdd64( volatile LONG64* destination, LONG64 value )
4872{
4873 LONG64 preValue;
4874 do {
4875 preValue = *destination;
4876 } while (_InterlockedCompareExchange64(destination, preValue + value, preValue) != preValue);
4877
4878 return preValue + value;
4879}
4880#define SYMCRYPT_ATOMIC_ADD64_POST_RELAXED(_dest, _val) SymCryptInlineInterlockedAdd64( (volatile LONG64 *)(_dest), (LONG64)(_val) )
4881
4882#define SYMCRYPT_ATOMIC_ADD32_POST_SEQ_CST(_dest, _val) (_InterlockedExchangeAdd( (volatile LONG *)(_dest), (LONG)(_val) ) + (LONG)(_val))
4883
4884#if defined(_WIN64)
4885#define SYMCRYPT_ATOMIC_LOADPTR_ACQUIRE(_dest) ((PVOID)_InterlockedOr64( (volatile LONG64 *)(_dest), 0 ))
4886#else
4887#define SYMCRYPT_ATOMIC_LOADPTR_ACQUIRE(_dest) ((PVOID)_InterlockedOr( (volatile LONG *)(_dest), 0 ))
4888#endif
4889
4890#define SYMCRYPT_ATOMIC_STOREPTR_RELEASE(_dest, _val) _InterlockedExchangePointer( (volatile PVOID *)(_dest), (PVOID)(_val) )
4891
4892#define SYMCRYPT_ATOMIC_CAS_PTR_ACQUIRE_RELEASE( _dest, _exchange, _comp ) \
4893 _InterlockedCompareExchangePointer( (volatile PVOID *)(_dest), (PVOID)(_exchange), (PVOID)(_comp) )
4894
4895#endif
4896
4897#elif SYMCRYPT_GNUC
4898#define SYMCRYPT_ATOMIC_LOAD64_RELAXED(_dest) __atomic_load_n( (volatile uint64_t *)(_dest), __ATOMIC_RELAXED )
4899#define SYMCRYPT_ATOMIC_OR32_PRE_RELAXED(_dest, _val) __atomic_fetch_or( (volatile uint32_t *)(_dest), (uint32_t)(_val), __ATOMIC_RELAXED )
4900#define SYMCRYPT_ATOMIC_ADD32_PRE_RELAXED(_dest, _val) __atomic_fetch_add( (volatile uint32_t *)(_dest), (uint32_t)(_val), __ATOMIC_RELAXED )
4901#define SYMCRYPT_ATOMIC_ADD64_POST_RELAXED(_dest, _val) __atomic_add_fetch( (volatile uint64_t *)(_dest), (uint64_t)(_val), __ATOMIC_RELAXED )
4902
4903#define SYMCRYPT_ATOMIC_ADD32_POST_SEQ_CST(_dest, _val) __atomic_add_fetch( (volatile uint32_t *)(_dest), (uint32_t)(_val), __ATOMIC_ACQ_REL )
4904
4905#define SYMCRYPT_ATOMIC_LOADPTR_ACQUIRE(_dest) __atomic_load_n( (volatile void* *)(_dest), __ATOMIC_ACQUIRE )
4906#define SYMCRYPT_ATOMIC_STOREPTR_RELEASE(_dest, _val) __atomic_store_n( (volatile void* *)(_dest), (void*)(_val), __ATOMIC_RELEASE )
4907
4909void*
4910SymCryptAtomicCasPtrAcqRel(
4911 void** dest,
4912 void* desired,
4913 void* expected)
4914{
4915 __atomic_compare_exchange_n(
4916 dest, // ptr
4917 &expected,
4918 desired,
4919 FALSE, // weak (set to FALSE => strong)
4920 __ATOMIC_RELEASE, // success_memorder
4921 __ATOMIC_ACQUIRE ); // failure_memorder
4922 return expected;
4923}
4924
4925#define SYMCRYPT_ATOMIC_CAS_PTR_ACQUIRE_RELEASE( _dest, _exchange, _comp ) \
4926 SymCryptAtomicCasPtrAcqRel( (volatile void **)(_dest), (void *)(_exchange), (void *)(_comp) )
4927
4928#endif
4929
4930// Inline CAS-128 functions
4931
4932// BOOLEAN
4933// SymCryptAtomicCas128Relaxed(
4934// _Inout_updates_(2) PUINT64 destination,
4935// _Inout_updates_(2) PUINT64 expectedValue,
4936// _In_reads_(2) PCUINT64 desiredValue);
4937// Performs Compare-and-Swap on a 128b memory location.
4938// Atomically reads destination, compares with expectedValue, and:
4939// if they are equal, writes desiredValue to destination, and return TRUE
4940// if they are not equal, writes the value read from destination to expectedValue, and returns FALSE
4941//
4942// Remarks:
4943// On success, the value of expectedValue is not guaranteed.
4944// Only destination is guaranteed to be read and written atomically, expectedValue should be a buffer
4945// which is only owned by the calling thread.
4946// destination must be aligned to 16 bytes
4947//
4948
4949#if SYMCRYPT_CPU_AMD64 | SYMCRYPT_CPU_ARM64
4950
4951#if SYMCRYPT_PLATFORM_WINDOWS
4952
4953#if SYMCRYPT_CPU_ARM64
4954#define SYMCRYPT_MSVC_CAS128_NF _InterlockedCompareExchange128_nf
4955#elif SYMCRYPT_CPU_AMD64
4956#define SYMCRYPT_MSVC_CAS128_NF _InterlockedCompareExchange128
4957#endif
4958
4960BOOLEAN
4961SymCryptAtomicCas128Relaxed(
4962 _Inout_updates_(2) PUINT64 destination,
4963 _Inout_updates_(2) PUINT64 expectedValue,
4964 _In_reads_(2) PCUINT64 desiredValue)
4965{
4966 return SYMCRYPT_MSVC_CAS128_NF(
4967 (volatile LONG64 *)destination,
4968 (LONG64)desiredValue[1],
4969 (LONG64)desiredValue[0],
4970 (LONG64 *) expectedValue );
4971}
4972
4973#elif SYMCRYPT_GNUC
4974
4976BOOLEAN
4977SymCryptAtomicCas128Relaxed(
4978 _Inout_updates_(2) PUINT64 destination,
4979 _Inout_updates_(2) PUINT64 expectedValue,
4980 _In_reads_(2) PCUINT64 desiredValue)
4981{
4982#if SYMCRYPT_CPU_AMD64
4983 // To avoid dynamically linking libatomic in OpenEnclave, use inline assembly for cmpxchg16b
4984 // on AMD64. We always need to perform CPU feature detection before we hit this function.
4986 __asm__ __volatile__
4987 (
4988 "lock cmpxchg16b %1\n\t"
4989 "sete %0"
4990 : "=r" (result)
4991 , "+m" (*destination)
4992 , "+d" (expectedValue[1])
4993 , "+a" (expectedValue[0])
4994 : "c" (desiredValue[1])
4995 , "b" (desiredValue[0])
4996 : "cc"
4997 );
4998 return result;
4999#elif SYMCRYPT_CPU_ARM64
5000 // clang inlines this but GCC dynamically links to libatomic
5001 // For now, just let the compiler decide, and for ARM64 modules, always allow linking to libatomic
5002 // We may want to break out into inline asm for LDXP/STXP implementation (v8.0) vs. CASP
5003 // implementation (v8.1) in future
5004 return __atomic_compare_exchange(
5005 (__int128 *)destination, // ptr
5006 (__int128 *)expectedValue, // expected
5007 (__int128 *)desiredValue, // desired
5008 FALSE, // weak (set to FALSE => strong)
5009 __ATOMIC_RELAXED, // success_memorder
5010 __ATOMIC_RELAXED); // failure_memorder
5011#endif
5012}
5013
5014#endif
5015
5016#endif
5017
5019UINT32
5021{
5022 unsigned long index = 0;
5023 if( value == 0 )
5024 {
5025 return 32;
5026 }
5027
5028#if SYMCRYPT_PLATFORM_WINDOWS && (SYMCRYPT_CPU_AMD64 | SYMCRYPT_CPU_ARM64 | SYMCRYPT_CPU_X86 | SYMCRYPT_CPU_ARM)
5030#elif SYMCRYPT_GNUC
5031 index = __builtin_ctz(value);
5032#else
5033 while( (value & 1) == 0 )
5034 {
5035 index++;
5036 value >>= 1;
5037 }
5038#endif
5039
5040 return (UINT32)index;
5041}
5042
5044UINT32
5046{
5047 unsigned long index = 0;
5048 if( value == 0 )
5049 {
5050 return 64;
5051 }
5052
5053#if SYMCRYPT_PLATFORM_WINDOWS && (SYMCRYPT_CPU_AMD64 | SYMCRYPT_CPU_ARM64)
5055#elif SYMCRYPT_PLATFORM_WINDOWS && (SYMCRYPT_CPU_X86 | SYMCRYPT_CPU_ARM)
5056 if( ((UINT32)value) == 0 )
5057 {
5059 index += 32;
5060 } else {
5062 }
5063
5064#elif SYMCRYPT_GNUC
5065 index = __builtin_ctzll(value);
5066#else
5067 while( (value & 1) == 0 )
5068 {
5069 index++;
5070 value >>= 1;
5071 }
5072#endif
5073
5074 return (UINT32)index;
5075}
5076
5078UINT32
5080{
5081 unsigned long zeros = 0;
5082
5083 if(value == 0)
5084 {
5085 return 32;
5086 }
5087
5088#if SYMCRYPT_PLATFORM_WINDOWS && (SYMCRYPT_CPU_AMD64 | SYMCRYPT_CPU_ARM64 | SYMCRYPT_CPU_X86 | SYMCRYPT_CPU_ARM)
5089 _BitScanReverse(&zeros, value);
5090 zeros = 31 - zeros;
5091#elif SYMCRYPT_GNUC
5092 zeros = __builtin_clz(value);
5093#else
5094 while( (value & 0x80000000) == 0 )
5095 {
5096 zeros++;
5097 value <<= 1;
5098 }
5099#endif
5100
5101 return (UINT32)zeros;
5102}
5103
5105UINT32
5107{
5108 unsigned long zeros = 0;
5109
5110 if(value == 0)
5111 {
5112 return 64;
5113 }
5114
5115#if SYMCRYPT_PLATFORM_WINDOWS && (SYMCRYPT_CPU_AMD64 | SYMCRYPT_CPU_ARM64)
5116 _BitScanReverse64(&zeros, value);
5117 zeros = 63 - zeros;
5118#elif SYMCRYPT_PLATFORM_WINDOWS && (SYMCRYPT_CPU_X86 | SYMCRYPT_CPU_ARM)
5119 if( (value >> 32) == 0 )
5120 {
5121 _BitScanReverse(&zeros, (UINT32)value);
5122 zeros = 63 - zeros;
5123 } else {
5124 _BitScanReverse(&zeros, (UINT32)(value >> 32));
5125 zeros = 31 - zeros;
5126 }
5127#elif SYMCRYPT_GNUC
5128 zeros = __builtin_clzll(value);
5129#else
5130 while( (value & 0x8000000000000000) == 0 )
5131 {
5132 zeros++;
5133 value <<= 1;
5134 }
5135#endif
5136
5137 return (UINT32)zeros;
5138}
#define VOID
Definition: acefi.h:82
unsigned char BOOLEAN
Definition: actypes.h:127
COMPILER_DEPENDENT_INT64 INT64
Definition: actypes.h:132
unsigned char UINT8
Definition: actypes.h:128
COMPILER_DEPENDENT_UINT64 UINT64
Definition: actypes.h:131
#define index(s, c)
Definition: various.h:29
unsigned int * PUINT32
Definition: basetsd.h:119
unsigned __int64 * PUINT64
Definition: basetsd.h:181
CONST VOID * PCVOID
Definition: cfgmgr32.h:44
Definition: terminate.cpp:24
static const WCHAR version[]
Definition: asmname.c:66
unsigned int BOOL
Definition: ntddk_ex.h:94
const GLdouble * v
Definition: gl.h:2040
GLuint GLuint GLsizei GLenum type
Definition: gl.h:1545
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950
GLint GLint GLsizei width
Definition: gl.h:1546
GLdouble n
Definition: glext.h:7729
GLuint buffer
Definition: glext.h:5915
GLuint index
Definition: glext.h:6031
GLenum GLint GLuint mask
Definition: glext.h:6028
GLbitfield flags
Definition: glext.h:7161
GLuint64EXT * result
Definition: glext.h:11304
GLubyte GLubyte GLubyte GLubyte w
Definition: glext.h:6102
const GLfloat * m
Definition: glext.h:10848
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
__INTRIN_INLINE unsigned char _BitScanReverse64(unsigned long *Index, unsigned long long Mask)
Definition: intrin_arm64.h:124
__INTRIN_INLINE unsigned char _BitScanForward64(unsigned long *Index, unsigned long long Mask)
Definition: intrin_arm64.h:113
#define C_ASSERT(e)
Definition: intsafe.h:73
int desired
Definition: jpeglib.h:1121
#define Dst
Definition: mesh.h:153
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
BOOL expected
Definition: store.c:2000
static const DWORD padding[]
Definition: mciwnd.c:88
static char * dest
Definition: rtl.c:149
DWORD exp
Definition: msg.c:18625
#define _In_reads_bytes_(s)
Definition: no_sal2.h:170
#define _In_reads_(s)
Definition: no_sal2.h:168
#define _Out_opt_
Definition: no_sal2.h:214
#define _Inout_updates_(s)
Definition: no_sal2.h:182
#define _Inout_
Definition: no_sal2.h:162
#define _Out_writes_opt_(s)
Definition: no_sal2.h:226
#define _Out_writes_(s)
Definition: no_sal2.h:176
#define _Out_
Definition: no_sal2.h:160
#define _In_
Definition: no_sal2.h:158
#define _In_opt_
Definition: no_sal2.h:212
#define _Analysis_noreturn_
Definition: no_sal2.h:392
#define _In_range_(l, h)
Definition: no_sal2.h:368
#define _Inout_updates_bytes_(s)
Definition: no_sal2.h:184
#define _Out_writes_bytes_(s)
Definition: no_sal2.h:178
int nBits
Definition: pcmconverter.c:96
BYTE * PBYTE
Definition: pedump.c:66
__asm__(".p2align 4, 0x90\n" ".seh_proc __seh2_global_filter_func\n" "__seh2_global_filter_func:\n" "\tsub %rbp, %rax\n" "\tpush %rbp\n" "\t.seh_pushreg %rbp\n" "\tpush %rbx\n" "\t.seh_pushreg %rbx\n" "\tpush %rdi\n" "\t.seh_pushreg %rdi\n" "\tpush %rsi\n" "\t.seh_pushreg %rsi\n" "\tpush %r12\n" "\t.seh_pushreg %r12\n" "\tpush %r13\n" "\t.seh_pushreg %r13\n" "\tpush %r14\n" "\t.seh_pushreg %r14\n" "\tpush %r15\n" "\t.seh_pushreg %r15\n" "\tsub $40, %rsp\n" "\t.seh_stackalloc 40\n" "\t.seh_endprologue\n" "\tsub %rax, %rdx\n" "\tmov %rdx, %rbp\n" "\tjmp *%r8\n" "__seh2_global_filter_func_exit:\n" "\t.p2align 4\n" "\tadd $40, %rsp\n" "\tpop %r15\n" "\tpop %r14\n" "\tpop %r13\n" "\tpop %r12\n" "\tpop %rsi\n" "\tpop %rdi\n" "\tpop %rbx\n" "\tpop %rbp\n" "\tret\n" "\t.seh_endproc")
VOID SYMCRYPT_CALL SymCryptSha512AppendBlocks(_Inout_ SYMCRYPT_SHA512_CHAINING_STATE *pChain, _In_reads_(cbData) PCBYTE pbData, SIZE_T cbData, _Out_ SIZE_T *pcbRemaining)
Definition: sha512.c:1643
PSYMCRYPT_INT SYMCRYPT_CALL SymCryptFdefIntFromDivisor(_In_ PSYMCRYPT_DIVISOR pdSrc)
Definition: fdef_int.c:915
UINT32 SYMCRYPT_CALL SymCryptFdefIntAddSameSize(_In_ PCSYMCRYPT_INT piSrc1, _In_ PCSYMCRYPT_INT piSrc2, _Out_ PSYMCRYPT_INT piDst)
Definition: fdef_int.c:98
SYMCRYPT_ERROR SYMCRYPT_CALL SymCryptFdef369ModInvMontgomery(_In_ PCSYMCRYPT_MODULUS pMod, _In_ PCSYMCRYPT_MODELEMENT pSrc, _Out_ PSYMCRYPT_MODELEMENT pDst, UINT32 flags, _Out_writes_bytes_(cbScratch) PBYTE pbScratch, SIZE_T cbScratch)
VOID SYMCRYPT_CALL SymCryptFdefModulusInitMontgomeryInternal(_Inout_ PSYMCRYPT_MODULUS pmObj, UINT32 nUint32Used, _Out_writes_bytes_(cbScratch) PBYTE pbScratch, SIZE_T cbScratch)
Definition: fdef_mod.c:1152
VOID SYMCRYPT_CALL SymCryptAesCbcDecryptXmm(_In_ PCSYMCRYPT_AES_EXPANDED_KEY pExpandedKey, _Inout_updates_(SYMCRYPT_AES_BLOCK_SIZE) PBYTE pbChainingValue, _In_reads_(cbData) PCBYTE pbSrc, _Out_writes_(cbData) PBYTE pbDst, SIZE_T cbData)
UINT32(SYMCRYPT_CALL * PSYMCRYPT_ECPOINT_ISZERO_FUNC)(_In_ PCSYMCRYPT_ECURVE pCurve, _In_ PCSYMCRYPT_ECPOINT poSrc, _Out_writes_bytes_(cbScratch) PBYTE pbScratch, SIZE_T cbScratch)
Definition: sc_lib.h:3835
VOID SYMCRYPT_CALL SymCryptFdefModElementWipe(_In_ PCSYMCRYPT_MODULUS pmMod, _Out_ PSYMCRYPT_MODELEMENT peDst)
Definition: fdef_mod.c:233
const SYMCRYPT_HASH SymCryptSha3_224Algorithm_default
Definition: sha3_224.c:14
UINT32(SYMCRYPT_CALL * PSYMCRYPT_ECPOINT_ISEQUAL_FUNC)(_In_ PCSYMCRYPT_ECURVE pCurve, _In_ PCSYMCRYPT_ECPOINT poSrc1, _In_ PCSYMCRYPT_ECPOINT poSrc2, UINT32 flags, _Out_writes_bytes_(cbScratch) PBYTE pbScratch, SIZE_T cbScratch)
Definition: sc_lib.h:3819
VOID SYMCRYPT_CALL SymCryptSha256AppendBlocks_ymm_8blocks(_Inout_ SYMCRYPT_SHA256_CHAINING_STATE *pChain, _In_reads_(cbData) PCBYTE pbData, SIZE_T cbData, _Out_ SIZE_T *pcbRemaining)
SYMCRYPT_MAGIC_FIELD SYMCRYPT_LMS_KEY
Definition: sc_lib.h:4738
int BOOL
Definition: sc_lib.h:43
VOID SYMCRYPT_CALL SymCryptGHashAppendDataC(_In_reads_(SYMCRYPT_GF128_FIELD_SIZE) PCSYMCRYPT_GF128_ELEMENT expandedKeyTable, _Inout_ PSYMCRYPT_GF128_ELEMENT pState, _In_reads_(cbData) PCBYTE pbData, SIZE_T cbData)
Definition: ghash.c:61
UINT32 SYMCRYPT_CALL SymCryptMontgomeryIsEqual(_In_ PCSYMCRYPT_ECURVE pCurve, _In_ PCSYMCRYPT_ECPOINT poSrc1, _In_ PCSYMCRYPT_ECPOINT poSrc2, UINT32 flags, _Out_writes_bytes_(cbScratch) PBYTE pbScratch, SIZE_T cbScratch)
Definition: ec_montgomery.c:78
SYMCRYPT_ERROR SYMCRYPT_CALL SymCryptEckeyGetValueCompositeEncodingPk(_In_ PCSYMCRYPT_ECKEY pEckey, SYMCRYPT_CACHED_ECURVE_ID curveId, _Out_writes_bytes_(cbDst) PBYTE pbDst, SIZE_T cbDst)
UINT32 SYMCRYPT_CALL SymCryptFdefIntGetValueLsbits32(_In_ PCSYMCRYPT_INT piSrc)
Definition: fdef_general.c:713
const PCSYMCRYPT_DLGROUP_DH_SAFEPRIME_PARAMS SymCryptDlgroupDhSafePrimeParamsffdhe3072
#define SYMCRYPT_DH_SAFEPRIME_GROUP_COUNT
Definition: sc_lib.h:3788
VOID SYMCRYPT_CALL SymCryptFdefIntToModulus(_In_ PCSYMCRYPT_INT piSrc, _Out_ PSYMCRYPT_MODULUS pmDst, UINT32 averageOperations, UINT32 flags, _Out_writes_bytes_(cbScratch) PBYTE pbScratch, SIZE_T cbScratch)
Definition: fdef_mod.c:385
VOID SymCryptFdefIntMaskedCopy(_In_ PCSYMCRYPT_INT piSrc, _Inout_ PSYMCRYPT_INT piDst, UINT32 mask)
Definition: fdef_general.c:280
VOID SYMCRYPT_CALL SymCryptFdefIntShr1(UINT32 highestBit, _In_ PCSYMCRYPT_INT piSrc, _Out_ PSYMCRYPT_INT piDst)
Definition: fdef_int.c:511
VOID SYMCRYPT_CALL SymCryptTwistedEdwardsNegate(_In_ PCSYMCRYPT_ECURVE pCurve, _Inout_ PSYMCRYPT_ECPOINT poSrc, UINT32 mask, _Out_writes_bytes_(cbScratch) PBYTE pbScratch, SIZE_T cbScratch)
const PCSYMCRYPT_DLGROUP_DH_SAFEPRIME_PARAMS SymCryptDlgroupDhSafePrimeParamsModp6144
VOID SYMCRYPT_CALL SymCryptFdef369MaskedCopyAsm(_In_reads_bytes_(nDigits *SYMCRYPT_FDEF_DIGIT_SIZE) PCBYTE pbSrc, _Inout_updates_bytes_(nDigits *SYMCRYPT_FDEF_DIGIT_SIZE) PBYTE pbDst, UINT32 nDigits, UINT32 mask)
SYMCRYPT_ERROR SYMCRYPT_CALL SymCryptFdefModInvMontgomery(_In_ PCSYMCRYPT_MODULUS pMod, _In_ PCSYMCRYPT_MODELEMENT pSrc, _Out_ PSYMCRYPT_MODELEMENT pDst, UINT32 flags, _Out_writes_bytes_(cbScratch) PBYTE pbScratch, SIZE_T cbScratch)
Definition: fdef_mod.c:1440
VOID SYMCRYPT_CALL SymCryptSha512AppendBlocks_ymm_avx2_asm(_Inout_ SYMCRYPT_SHA512_CHAINING_STATE *pChain, _In_reads_(cbData) PCBYTE pbData, SIZE_T cbData, _Out_ SIZE_T *pcbRemaining)
VOID SYMCRYPT_CALL SymCryptAesCreateDecryptionRoundKey(_In_reads_(16) PCBYTE pEncryptionRoundKey, _Out_writes_(16) PBYTE pDecryptionRoundKey, BOOL UseSimd)
Definition: aes-default.c:68
PSYMCRYPT_MODULUS SYMCRYPT_CALL SymCryptFdefModulusRetrieveHandle(_In_ PBYTE pbBuffer)
VOID SYMCRYPT_CALL SymCryptSha256AppendBlocks(_Inout_ SYMCRYPT_SHA256_CHAINING_STATE *pChain, _In_reads_(cbData) PCBYTE pbData, SIZE_T cbData, _Out_ SIZE_T *pcbRemaining)
Definition: sha256.c:1812
const SYMCRYPT_DLGROUP_DH_SAFEPRIME_PARAMS * PCSYMCRYPT_DLGROUP_DH_SAFEPRIME_PARAMS
Definition: sc_lib.h:3768
VOID SYMCRYPT_CALL SymCryptMontgomerySetDistinguished(_In_ PCSYMCRYPT_ECURVE pCurve, _Out_ PSYMCRYPT_ECPOINT poDst, _Out_writes_bytes_(cbScratch) PBYTE pbScratch, SIZE_T cbScratch)
Definition: ec_montgomery.c:51
VOID SYMCRYPT_CALL SymCryptFatalIntercept(UINT32 fatalCode)
const SYMCRYPT_HASH SymCryptSha3_384Algorithm_default
Definition: sha3_384.c:14
#define SYMCRYPT_MODULAR_FUNCTIONS_SIZE
Definition: sc_lib.h:2007
const SYMCRYPT_HASH SymCryptSha1Algorithm_default
Definition: sha1.c:16
const BYTE SymCryptSha384KATAnswer[48]
Definition: sha512.c:728
BYTE abId[SYMCRYPT_LMS_KEY_PAIR_IDENTIFIER_SIZE]
Definition: sc_lib.h:4729
VOID SYMCRYPT_CALL SymCryptAesCtrMsb64Xmm(_In_ PCSYMCRYPT_AES_EXPANDED_KEY pExpandedKey, _Inout_updates_(SYMCRYPT_AES_BLOCK_SIZE) PBYTE pbChainingValue, _In_reads_(cbData) PCBYTE pbSrc, _Out_writes_(cbData) PBYTE pbDst, SIZE_T cbData)
VOID SYMCRYPT_CALL SymCryptFdefModElementSetValueNegUint32(UINT32 value, _In_ PCSYMCRYPT_MODULUS pmMod, _Out_ PSYMCRYPT_MODELEMENT peDst, _Out_writes_bytes_(cbScratch) PBYTE pbScratch, SIZE_T cbScratch)
Definition: fdef_mod.c:663
FORCEINLINE VOID SYMCRYPT_CALL SymCryptUint64ToLsbFirst(_In_reads_(cuData) PCUINT64 puData, _Out_writes_(8 *cuData) PBYTE pbResult, SIZE_T cuData)
Definition: sc_lib.h:538
UINT32 SYMCRYPT_CALL SymCryptMontgomeryIsZero(_In_ PCSYMCRYPT_ECURVE pCurve, _In_ PCSYMCRYPT_ECPOINT poSrc, _Out_writes_bytes_(cbScratch) PBYTE pbScratch, SIZE_T cbScratch)
VOID SYMCRYPT_CALL SymCryptFdefModSquareGeneric(_In_ PCSYMCRYPT_MODULUS pMod, _In_ PCSYMCRYPT_MODELEMENT pSrc, _Out_ PSYMCRYPT_MODELEMENT pDst, _Out_writes_bytes_(cbScratch) PBYTE pbScratch, SIZE_T cbScratch)
Definition: fdef_mod.c:935
const PCSYMCRYPT_ECURVE_PARAMS_V2_EXTENSION SymCryptEcurveParamsV2ExtensionShortWeierstrass
UINT32 SYMCRYPT_CALL SymCryptFdefRawIsEqualUint32(_In_reads_(nDigits *SYMCRYPT_FDEF_DIGIT_NUINT32) PCUINT32 pSrc1, UINT32 nDigits, _In_ UINT32 u32Src2)
Definition: fdef_general.c:730
VOID SymCryptFdefModElementCopy(_In_ PCSYMCRYPT_MODULUS pmMod, _In_ PCSYMCRYPT_MODELEMENT peSrc, _Out_ PSYMCRYPT_MODELEMENT peDst)
Definition: fdef_mod.c:241
struct _SYMCRYPT_BLOB_TRAILER * PSYMCRYPT_BLOB_TRAILER
UINT32 SYMCRYPT_CALL SymCryptFdefIntAddUint32(_In_ PCSYMCRYPT_INT piSrc1, UINT32 u32Src2, _Out_ PSYMCRYPT_INT piDst)
Definition: fdef_int.c:83
struct _SYMCRYPT_SHA512_STATE_EXPORT_BLOB SYMCRYPT_SHA512_STATE_EXPORT_BLOB
INT32 NATIVE_INT
Definition: sc_lib.h:76
VOID SYMCRYPT_CALL SymCryptFdefModSquareMontgomeryP384Asm(_In_ PCSYMCRYPT_MODULUS pMod, _In_ PCSYMCRYPT_MODELEMENT pSrc1, _In_ PCSYMCRYPT_MODELEMENT pSrc2, _Out_ PSYMCRYPT_MODELEMENT pDst)
VOID SYMCRYPT_CALL SymCryptSha512AppendBlocks_ymm_2blocks(_Inout_ SYMCRYPT_SHA512_CHAINING_STATE *pChain, _In_reads_(cbData) PCBYTE pbData, SIZE_T cbData, _Out_ SIZE_T *pcbRemaining)
VOID SYMCRYPT_CALL SymCryptFdefModSub256Asm(_In_ PCSYMCRYPT_MODULUS pmMod, _In_ PCSYMCRYPT_MODELEMENT peSrc1, _In_ PCSYMCRYPT_MODELEMENT peSrc2, _Out_ PSYMCRYPT_MODELEMENT peDst)
VOID SYMCRYPT_CALL SymCryptHashAppendInternal(_In_ PCSYMCRYPT_HASH pHash, _Inout_ PSYMCRYPT_COMMON_HASH_STATE pState, _In_reads_bytes_(cbData) PCBYTE pbData, SIZE_T cbData)
Definition: hash.c:10
VOID SYMCRYPT_CALL SymCryptTwistedEdwardsFillScratchSpaces(_In_ PSYMCRYPT_ECURVE pCurve)
const BYTE SymCryptTestMsg16[16]
Definition: selftest.c:15
VOID SYMCRYPT_CALL SymCryptKeccakAppendEncodeTimes8(_Inout_ SYMCRYPT_KECCAK_STATE *pState, UINT64 uValue, BOOLEAN bLeftEncode)
Definition: shake.c:310
UINT32 SYMCRYPT_CALL SymCryptTwistedEdwardsIsZero(_In_ PCSYMCRYPT_ECURVE pCurve, _In_ PCSYMCRYPT_ECPOINT poSrc, _Out_writes_bytes_(cbScratch) PBYTE pbScratch, SIZE_T cbScratch)
struct _SYMCRYPT_TREEHASH_NODE * PSYMCRYPT_TREEHASH_NODE
VOID SYMCRYPT_CALL SymCryptFdefRawSquare1024Asm(_In_reads_(nDigits *SYMCRYPT_FDEF_DIGIT_NUINT32) PCUINT32 pSrc, UINT32 nDigits, _Out_writes_(2 *nDigits *SYMCRYPT_FDEF_DIGIT_NUINT32) PUINT32 pDst)
BYTE SkPrf[SYMCRYPT_HASH_MAX_RESULT_SIZE]
Definition: sc_lib.h:4537
VOID SYMCRYPT_CALL SymCryptFdefModElementToIntGeneric(_In_ PCSYMCRYPT_MODULUS pmMod, _In_reads_bytes_(pmMod->nDigits *SYMCRYPT_FDEF_DIGIT_SIZE) PCUINT32 pSrc, _Out_ PSYMCRYPT_INT piDst, _Out_writes_bytes_(cbScratch) PBYTE pbScratch, SIZE_T cbScratch)
Definition: fdef_mod.c:428
SYMCRYPT_ERROR SYMCRYPT_CALL SymCryptEckeySetValueCompositeEncodingPk(_In_ SYMCRYPT_CACHED_ECURVE_ID curveId, _In_reads_bytes_(cbSrc) PCBYTE pbSrc, SIZE_T cbSrc, UINT32 flags, _Inout_ PSYMCRYPT_ECKEY pEckey)
VOID(SYMCRYPT_CALL * PSYMCRYPT_INCREMENTAL_TREEHASH_FUNC)(_In_ PSYMCRYPT_TREEHASH_NODE pNodeLeft, _In_ PSYMCRYPT_TREEHASH_NODE pNodeRight, _Out_ PSYMCRYPT_TREEHASH_NODE pNodeOut, _Inout_ PSYMCRYPT_XMSS_INCREMENTAL_TREEHASH_CONTEXT pContext)
Definition: sc_lib.h:4613
SYMCRYPT_ERROR SYMCRYPT_CALL SymCryptRsaSignVerifyPct(PCSYMCRYPT_RSAKEY pkRsakey)
Definition: implglue.c:51
UINT32 SYMCRYPT_CALL SymCryptFdefIntGetBit(_In_ PCSYMCRYPT_INT piSrc, UINT32 iBit)
Definition: fdef_int.c:580
SYMCRYPT_ERROR(SYMCRYPT_CALL * PSYMCRYPT_ECPOINT_SCALAR_MUL_FUNC)(_In_ PCSYMCRYPT_ECURVE pCurve, _In_ PCSYMCRYPT_INT piScalar, _In_opt_ PCSYMCRYPT_ECPOINT poSrc, UINT32 flags, _Out_ PSYMCRYPT_ECPOINT poDst, _Out_writes_bytes_(cbScratch) PBYTE pbScratch, SIZE_T cbScratch)
Definition: sc_lib.h:3878
SYMCRYPT_ASYM_ALIGN_STRUCT _SYMCRYPT_COMPOSITE_MLKEMKEY
Definition: sc_lib.h:4442
VOID SYMCRYPT_CALL SymCryptAesCtrMsb32(_In_ PCSYMCRYPT_AES_EXPANDED_KEY pExpandedKey, _Inout_updates_(SYMCRYPT_AES_BLOCK_SIZE) PBYTE pbChainingValue, _In_reads_(cbData) PCBYTE pbSrc, _Out_writes_(cbData) PBYTE pbDst, SIZE_T cbData)
Definition: aes-default.c:359
VOID SYMCRYPT_CALL SymCryptEcpointGenericSetRandom(_In_ PCSYMCRYPT_ECURVE pCurve, _Out_ PSYMCRYPT_INT piScalar, _Out_ PSYMCRYPT_ECPOINT poDst, _Out_writes_bytes_(cbScratch) PBYTE pbScratch, SIZE_T cbScratch)
Definition: ec_mul.c:546
VOID SYMCRYPT_CALL SymCryptFdefModAddGeneric(_In_ PCSYMCRYPT_MODULUS pmMod, _In_ PCSYMCRYPT_MODELEMENT peSrc1, _In_ PCSYMCRYPT_MODELEMENT peSrc2, _Out_ PSYMCRYPT_MODELEMENT peDst, _Out_writes_bytes_(cbScratch) PBYTE pbScratch, SIZE_T cbScratch)
Definition: fdef_mod.c:548
VOID SYMCRYPT_CALL SymCryptKeccakZeroAppendBlock(_Inout_ PSYMCRYPT_KECCAK_STATE pState)
Definition: sha3.c:273
UINT32 SYMCRYPT_CALL SymCryptShortWeierstrassIsEqual(_In_ PCSYMCRYPT_ECURVE pCurve, _In_ PCSYMCRYPT_ECPOINT poSrc1, _In_ PCSYMCRYPT_ECPOINT poSrc2, UINT32 flags, _Out_writes_bytes_(cbScratch) PBYTE pbScratch, SIZE_T cbScratch)
UINT32 SYMCRYPT_CALL SymCryptFdefRawMaskedAdd(_Inout_updates_(nDigits *SYMCRYPT_FDEF_DIGIT_NUINT32) PUINT32 pAcc, _In_reads_(nDigits *SYMCRYPT_FDEF_DIGIT_NUINT32) PCUINT32 pSrc, UINT32 mask, UINT32 nDigits)
Definition: fdef_int.c:1070
VOID SYMCRYPT_CALL SymCryptKeccakInit(_Out_ PSYMCRYPT_KECCAK_STATE pState, UINT32 inputBlockSize, UINT8 padding)
Definition: sha3.c:174
VOID SYMCRYPT_CALL SymCryptFdefRawDivMod(_In_reads_(nDigits *SYMCRYPT_FDEF_DIGIT_NUINT32) PCUINT32 pNum, UINT32 nDigits, _In_ PCSYMCRYPT_DIVISOR pdDivisor, _Out_writes_opt_(nDigits *SYMCRYPT_FDEF_DIGIT_NUINT32) PUINT32 pQuotient, _Out_writes_opt_(SYMCRYPT_OBJ_NUINT32(pdDivisor)) PUINT32 pRemainder, _Out_writes_bytes_(cbScratch) PBYTE pbScratch, SIZE_T cbScratch)
Definition: fdef_int.c:1106
SYMCRYPT_ERROR SYMCRYPT_CALL SymCryptXmssComputePublicRoot(_In_ PCSYMCRYPT_XMSS_PARAMS pParams, _In_reads_bytes_(cbSeed) PCBYTE pbSeed, SIZE_T cbSeed, _In_reads_bytes_(cbSkXmss) PCBYTE pbSkXmss, SIZE_T cbSkXmss, _Out_writes_bytes_(cbRoot) PBYTE pbRoot, SIZE_T cbRoot)
Definition: xmss.c:1069
const SYMCRYPT_HASH SymCryptSha224Algorithm_default
Definition: sha256.c:19
VOID SYMCRYPT_CALL SymCryptAesCbcMacXmm(_In_ PCSYMCRYPT_AES_EXPANDED_KEY pExpandedKey, _Inout_updates_(SYMCRYPT_AES_BLOCK_SIZE) PBYTE pbChainingValue, _In_reads_(cbData) PCBYTE pbData, SIZE_T cbData)
VOID SYMCRYPT_CALL SymCryptFdefModSubGeneric(_In_ PCSYMCRYPT_MODULUS pmMod, _In_ PCSYMCRYPT_MODELEMENT peSrc1, _In_ PCSYMCRYPT_MODELEMENT peSrc2, _Out_ PSYMCRYPT_MODELEMENT peDst, _Out_writes_bytes_(cbScratch) PBYTE pbScratch, SIZE_T cbScratch)
Definition: fdef_mod.c:584
VOID SYMCRYPT_CALL SymCryptHbsGetWinternitzLengths(UINT32 n, UINT32 w, _Out_ PUINT32 puLen1, _Out_ PUINT32 puLen2)
Definition: xmss.c:188
VOID SYMCRYPT_CALL SymCryptSha256AppendBlocks_ymm_avx2_asm(_Inout_ SYMCRYPT_SHA256_CHAINING_STATE *pChain, _In_reads_(cbData) PCBYTE pbData, SIZE_T cbData, _Out_ SIZE_T *pcbRemaining)
BYTE Root[SYMCRYPT_HASH_MAX_RESULT_SIZE]
Definition: sc_lib.h:4528
PSYMCRYPT_DIVISOR SYMCRYPT_CALL SymCryptFdefDivisorCreate(_Out_writes_bytes_(cbBuffer) PBYTE pbBuffer, SIZE_T cbBuffer, UINT32 nDigits)
Definition: fdef_general.c:842
VOID SYMCRYPT_CALL SymCryptFdefModulusInitGeneric(_Inout_ PSYMCRYPT_MODULUS pmObj, _Out_writes_bytes_(cbScratch) PBYTE pbScratch, SIZE_T cbScratch)
Definition: fdef_mod.c:112
VOID SYMCRYPT_CALL SymCryptAesCbcEncryptNeon(_In_ PCSYMCRYPT_AES_EXPANDED_KEY pExpandedKey, _Inout_updates_(SYMCRYPT_AES_BLOCK_SIZE) PBYTE pbChainingValue, _In_reads_(cbData) PCBYTE pbSrc, _Out_writes_(cbData) PBYTE pbDst, SIZE_T cbData)
UINT32 SYMCRYPT_CALL SymCryptFdefIntSubUint32(_In_ PCSYMCRYPT_INT piSrc1, UINT32 u32Src2, _Out_ PSYMCRYPT_INT piDst)
Definition: fdef_int.c:236
VOID SYMCRYPT_CALL SymCryptFdefRawSquareMulx1024(_In_reads_(nDigits *SYMCRYPT_FDEF_DIGIT_NUINT32) PCUINT32 pSrc, UINT32 nDigits, _Out_writes_(2 *nDigits *SYMCRYPT_FDEF_DIGIT_NUINT32) PUINT32 pDst)
VOID SYMCRYPT_CALL SymCryptSha256AppendBlocks_xmm_4blocks(_Inout_ SYMCRYPT_SHA256_CHAINING_STATE *pChain, _In_reads_(cbData) PCBYTE pbData, SIZE_T cbData, _Out_ SIZE_T *pcbRemaining)
VOID SYMCRYPT_CALL SymCryptGHashExpandKeyC(_Out_writes_(SYMCRYPT_GF128_FIELD_SIZE) PSYMCRYPT_GF128_ELEMENT expandedKey, _In_reads_(SYMCRYPT_GF128_BLOCK_SIZE) PCBYTE pH)
Definition: ghash.c:27
PSYMCRYPT_TREEHASH_NODE SYMCRYPT_CALL SymCryptHbsIncrementalTreehashFinalize(_Inout_ PSYMCRYPT_INCREMENTAL_TREEHASH pIncHash)
Definition: xmss.c:695
VOID SYMCRYPT_CALL SymCryptFdefIntToDivisor(_In_ PCSYMCRYPT_INT piSrc, _Out_ PSYMCRYPT_DIVISOR pdDst, UINT32 totalOperations, UINT32 flags, _Out_writes_bytes_(cbScratch) PBYTE pbScratch, SIZE_T cbScratch)
Definition: fdef_int.c:922
struct _SYMCRYPT_TREEHASH_NODE SYMCRYPT_TREEHASH_NODE
const PCSYMCRYPT_ECURVE_PARAMS_V2_EXTENSION SymCryptEcurveParamsV2ExtensionMontgomery
VOID(SYMCRYPT_CALL * SYMCRYPT_MOD_SET_POST_FN)(_In_ PCSYMCRYPT_MODULUS pmMod, _Inout_ PSYMCRYPT_MODELEMENT peObj, _Out_writes_bytes_(cbScratch) PBYTE pbScratch, SIZE_T cbScratch)
Definition: sc_lib.h:1952
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)
Definition: xtsaes.c:648
SYMCRYPT_MAGIC_FIELD * PSYMCRYPT_COMPOSITE_MLKEMKEY
Definition: sc_lib.h:4453
const SYMCRYPT_HASH SymCryptSha512_256Algorithm_default
Definition: sha512.c:156
struct _SYMCRYPT_INCREMENTAL_TREEHASH * PSYMCRYPT_INCREMENTAL_TREEHASH
struct _XMSS_LTREE_ADDRESS * PXMSS_LTREE_ADDRESS
VOID SYMCRYPT_CALL SymCryptFdefModDivSmallPow2Mulx(_In_ PCSYMCRYPT_MODULUS pmMod, _In_ PCSYMCRYPT_MODELEMENT peSrc, _In_range_(1, NATIVE_BITS) UINT32 exp, _Out_ PSYMCRYPT_MODELEMENT peDst)
UINT32 SYMCRYPT_CALL SymCryptFdefModElementIsEqual(_In_ PCSYMCRYPT_MODULUS pmMod, _In_ PCSYMCRYPT_MODELEMENT peSrc1, _In_ PCSYMCRYPT_MODELEMENT peSrc2)
Definition: fdef_mod.c:511
struct _XMSS_HASHTREE_ADDRESS XMSS_HASHTREE_ADDRESS
#define SYMCRYPT_OBJ_NUINT32(_p)
Definition: sc_lib.h:1920
const SYMCRYPT_HASH SymCryptMd4Algorithm_default
Definition: md4.c:33
VOID SYMCRYPT_CALL SymCryptKeccakAppendEncodedString(_Inout_ PSYMCRYPT_KECCAK_STATE pState, _In_reads_(cbString) PCBYTE pbString, SIZE_T cbString)
Definition: shake.c:330
VOID SYMCRYPT_CALL SymCryptCpuidExFunc(int cpuInfo[4], int function_id, int subfunction_id)
PSYMCRYPT_MODELEMENT SYMCRYPT_CALL SymCryptFdefModElementCreate(_Out_writes_bytes_(cbBuffer) PBYTE pbBuffer, SIZE_T cbBuffer, PCSYMCRYPT_MODULUS pmMod)
Definition: fdef_mod.c:202
UINT32 SYMCRYPT_CALL SymCryptFdefRawIsLessThan(_In_reads_bytes_(nDigits *SYMCRYPT_FDEF_DIGIT_SIZE) PCUINT32 pSrc1, _In_reads_bytes_(nDigits *SYMCRYPT_FDEF_DIGIT_SIZE) PCUINT32 pSrc2, UINT32 nDigits)
Definition: fdef_int.c:322
struct _SYMCRYPT_ECURVE_FUNCTIONS * PSYMCRYPT_ECURVE_FUNCTIONS
VOID SYMCRYPT_CALL SymCryptFdefIntConditionalSwap(_Inout_ PSYMCRYPT_INT piSrc1, _Inout_ PSYMCRYPT_INT piSrc2, UINT32 cond)
Definition: fdef_general.c:313
VOID SYMCRYPT_CALL SymCryptFdefFreeTrialDivisionContext(PCSYMCRYPT_TRIALDIVISION_CONTEXT pContext)
VOID SYMCRYPT_CALL SymCryptAes4SboxNeon(_In_reads_(4) PCBYTE pIn, _Out_writes_(4) PBYTE pOut)
const SYMCRYPT_HASH SymCryptSha256Algorithm_default
Definition: sha256.c:32
VOID SYMCRYPT_CALL SymCryptXtsAesDecryptDataUnitNeon(_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)
FORCEINLINE VOID SYMCRYPT_CALL SymCryptLsbFirstToUint64(_In_reads_(8 *cuResult) PCBYTE pbData, _Out_writes_(cuResult) PUINT64 puResult, SIZE_T cuResult)
Definition: sc_lib.h:554
VOID SYMCRYPT_CALL SymCryptFdef369ModMulMontgomery(_In_ PCSYMCRYPT_MODULUS pMod, _In_ PCSYMCRYPT_MODELEMENT pSrc1, _In_ PCSYMCRYPT_MODELEMENT pSrc2, _Out_ PSYMCRYPT_MODELEMENT pDst, _Out_writes_bytes_(cbScratch) PBYTE pbScratch, SIZE_T cbScratch)
#define SYMCRYPT_FLAG_LIB_INITIALIZED
Definition: sc_lib.h:22
VOID SYMCRYPT_CALL SymCryptShortWeierstrassAdd(_In_ PCSYMCRYPT_ECURVE pCurve, _In_ PCSYMCRYPT_ECPOINT poSrc1, _In_ PCSYMCRYPT_ECPOINT poSrc2, _Out_ PSYMCRYPT_ECPOINT poDst, UINT32 flags, _Out_writes_bytes_(cbScratch) PBYTE pbScratch, SIZE_T cbScratch)
FORCEINLINE VOID SYMCRYPT_CALL SymCryptUint32ToLsbFirst(_In_reads_(cuData) PCUINT32 puData, _Out_writes_(4 *cuData) PBYTE pbResult, SIZE_T cuData)
Definition: sc_lib.h:471
VOID SYMCRYPT_CALL SymCryptXtsAesDecryptDataUnitZmm_2048(_In_ PCSYMCRYPT_AES_EXPANDED_KEY pExpandedKey, _Inout_updates_(SYMCRYPT_AES_BLOCK_SIZE) PBYTE pbTweakBlock, _Out_writes_(SYMCRYPT_AES_BLOCK_SIZE *16) PBYTE pbScratch, _In_reads_(cbData) PCBYTE pbSrc, _Out_writes_(cbData) PBYTE pbDst, SIZE_T cbData)
PSYMCRYPT_MODELEMENT SYMCRYPT_CALL SymCryptFdefModElementRetrieveHandle(_In_ PBYTE pbBuffer)
FORCEINLINE VOID SYMCRYPT_CALL SymCryptMsbFirstToUint64(_In_reads_(8 *cuResult) PCBYTE pbData, _Out_writes_(cuResult) PUINT64 puResult, SIZE_T cuResult)
Definition: sc_lib.h:592
UINT32 SYMCRYPT_CALL SymCryptFdefIntSubSameSize(_In_ PCSYMCRYPT_INT piSrc1, _In_ PCSYMCRYPT_INT piSrc2, _Out_ PSYMCRYPT_INT piDst)
Definition: fdef_int.c:248
VOID SYMCRYPT_CALL SymCryptGcmDecryptPartTwoPass(_Inout_ PSYMCRYPT_GCM_STATE pState, _In_reads_(cbData) PCBYTE pbSrc, _Out_writes_(cbData) PBYTE pbDst, SIZE_T cbData)
Definition: gcm.c:543
VOID SYMCRYPT_CALL SymCryptFdefMontgomeryReduceMulx(_In_ PCSYMCRYPT_MODULUS pmMod, _Inout_ PUINT32 pSrc, _Out_ PUINT32 pDst)
struct _SYMCRYPT_BLOB_HEADER * PSYMCRYPT_BLOB_HEADER
UINT32 SYMCRYPT_CALL SymCryptShortWeierstrassIsZero(_In_ PCSYMCRYPT_ECURVE pCurve, _In_ PCSYMCRYPT_ECPOINT poSrc, _Out_writes_bytes_(cbScratch) PBYTE pbScratch, SIZE_T cbScratch)
struct _SYMCRYPT_KECCAK_STATE_EXPORT_BLOB SYMCRYPT_KECCAK_STATE_EXPORT_BLOB
VOID SYMCRYPT_CALL SymCryptFdefIntMulPow2(_In_ PCSYMCRYPT_INT piSrc, SIZE_T Exp, _Out_ PSYMCRYPT_INT piDst)
Definition: fdef_int.c:407
VOID SYMCRYPT_CALL SymCryptFdefModSetPostMontgomery(_In_ PCSYMCRYPT_MODULUS pmMod, _Inout_ PSYMCRYPT_MODELEMENT peObj, _Out_writes_bytes_(cbScratch) PBYTE pbScratch, SIZE_T cbScratch)
Definition: fdef_mod.c:1261
PCUINT32 SYMCRYPT_CALL SymCryptFdefModPreGetMontgomery(_In_ PCSYMCRYPT_MODULUS pmMod, _In_ PCSYMCRYPT_MODELEMENT peObj, _Out_writes_bytes_(cbScratch) PBYTE pbScratch, SIZE_T cbScratch)
Definition: fdef_mod.c:1282
VOID SYMCRYPT_CALL SymCryptAes4SboxC(_In_reads_(4) PCBYTE pIn, _Out_writes_(4) PBYTE pOut)
SYMCRYPT_MAGIC_FIELD SYMCRYPT_COMPOSITE_MLKEMKEY
Definition: sc_lib.h:4453
VOID SYMCRYPT_CALL SymCryptFdefModMulMontgomeryMulx256Asm(_In_ PCSYMCRYPT_MODULUS pMod, _In_ PCSYMCRYPT_MODELEMENT pSrc1, _In_ PCSYMCRYPT_MODELEMENT pSrc2, _Out_ PSYMCRYPT_MODELEMENT pDst)
UINT32(SYMCRYPT_CALL * PSYMCRYPT_ECPOINT_ONCURVE_FUNC)(_In_ PCSYMCRYPT_ECURVE pCurve, _In_ PCSYMCRYPT_ECPOINT poSrc, _Out_writes_bytes_(cbScratch) PBYTE pbScratch, SIZE_T cbScratch)
Definition: sc_lib.h:3828
FORCEINLINE UINT32 SymCryptCountLeadingZeros64(UINT64 value)
Definition: sc_lib.h:5106
VOID SYMCRYPT_CALL SymCryptFdefMontgomeryReduceMulx1024(_In_ PCSYMCRYPT_MODULUS pmMod, _Inout_ PUINT32 pSrc, _Out_ PUINT32 pDst)
VOID SYMCRYPT_CALL SymCryptMd4AppendBlocks(_Inout_ SYMCRYPT_MD4_CHAINING_STATE *pChain, _In_reads_(cbData) PCBYTE pbData, SIZE_T cbData, _Out_ SIZE_T *pcbRemaining)
SYMCRYPT_KECCAK_STATE_EXPORT_BLOB SYMCRYPT_SHA3_256_STATE_EXPORT_BLOB
Definition: sc_lib.h:1179
_SYMCRYPT_BLOB_TYPE
Definition: sc_lib.h:1058
@ SymCryptBlobTypeSha512_224State
Definition: sc_lib.h:1072
@ SymCryptBlobTypeSha224State
Definition: sc_lib.h:1071
@ SymCryptBlobTypeSha512_256State
Definition: sc_lib.h:1073
@ SymCryptBlobTypeMd4State
Definition: sc_lib.h:1062
@ SymCryptBlobTypeSha3_256State
Definition: sc_lib.h:1068
@ SymCryptBlobTypeSha3_224State
Definition: sc_lib.h:1074
@ SymCryptBlobTypeMd2State
Definition: sc_lib.h:1061
@ SymCryptBlobTypeSha384State
Definition: sc_lib.h:1066
@ SymCryptBlobTypeUnknown
Definition: sc_lib.h:1059
@ SymCryptBlobTypeSha512State
Definition: sc_lib.h:1067
@ SymCryptBlobTypeHashState
Definition: sc_lib.h:1060
@ SymCryptBlobTypeSha3_384State
Definition: sc_lib.h:1069
@ SymCryptBlobTypeSha3_512State
Definition: sc_lib.h:1070
@ SymCryptBlobTypeSha256State
Definition: sc_lib.h:1065
@ SymCryptBlobTypeMd5State
Definition: sc_lib.h:1063
@ SymCryptBlobTypeSha1State
Definition: sc_lib.h:1064
struct _XMSS_OTS_ADDRESS XMSS_OTS_ADDRESS
VOID SYMCRYPT_CALL SymCryptFdefModElementSetValueUint32Generic(UINT32 value, _In_ PCSYMCRYPT_MODULUS pmMod, _Out_ PSYMCRYPT_MODELEMENT peDst, _Out_writes_bytes_(cbScratch) PBYTE pbScratch, SIZE_T cbScratch)
Definition: fdef_mod.c:637
VOID SYMCRYPT_CALL SymCryptAesEncryptNeon(_In_ PCSYMCRYPT_AES_EXPANDED_KEY pExpandedKey, _In_reads_(SYMCRYPT_AES_BLOCK_SIZE) PCBYTE pbSrc, _Out_writes_(SYMCRYPT_AES_BLOCK_SIZE) PBYTE pbDst)
VOID SYMCRYPT_CALL SymCryptInjectError(PBYTE pbData, SIZE_T cbData)
VOID SYMCRYPT_CALL SymCryptKeccakReset(_Out_ PSYMCRYPT_KECCAK_STATE pState)
Definition: sha3.c:186
VOID SYMCRYPT_CALL SymCryptFdefModulusFree(_Out_ PSYMCRYPT_MODULUS pmObj)
Definition: fdef_mod.c:41
SYMCRYPT_ERROR SYMCRYPT_CALL SymCryptLmsVerifyInternal(_In_ PCSYMCRYPT_LMS_KEY pKey, _In_reads_bytes_(cbMessage) PCBYTE pbMessage, SIZE_T cbMessage, UINT32 flags, _In_reads_bytes_(cbSignature) PCBYTE pbSignature, SIZE_T cbSignature)
Definition: lms.c:1048
VOID SYMCRYPT_CALL SymCryptFdefMaskedCopy(_In_reads_bytes_(nDigits *SYMCRYPT_FDEF_DIGIT_SIZE) PCBYTE pbSrc, _Inout_updates_bytes_(nDigits *SYMCRYPT_FDEF_DIGIT_SIZE) PBYTE pbDst, UINT32 nDigits, UINT32 mask)
Definition: fdef_general.c:74
VOID SYMCRYPT_CALL SymCryptFixedWindowRecoding(UINT32 W, _Inout_ PSYMCRYPT_INT piK, _Inout_ PSYMCRYPT_INT piTmp, _Out_writes_(nRecodedDigits) PUINT32 absofKIs, _Out_writes_(nRecodedDigits) PUINT32 sigofKIs, UINT32 nRecodedDigits)
Definition: recoding.c:44
UINT32 SYMCRYPT_CALL SymCryptFdefIntMulUint32(_In_ PCSYMCRYPT_INT piSrc1, UINT32 Src2, _Out_ PSYMCRYPT_INT piDst)
Definition: fdef_int.c:681
UINT32 SYMCRYPT_CALL SymCryptFdefRawMaskedSub(_Inout_updates_(nDigits *SYMCRYPT_FDEF_DIGIT_NUINT32) PUINT32 pAcc, _In_reads_(nDigits *SYMCRYPT_FDEF_DIGIT_NUINT32) PCUINT32 pSrc, UINT32 mask, UINT32 nDigits)
Definition: fdef_int.c:1081
VOID SYMCRYPT_CALL SymCryptAesGcmDecryptPart(_Inout_ PSYMCRYPT_GCM_STATE pState, _In_reads_(cbData) PCBYTE pbSrc, _Out_writes_(cbData) PBYTE pbDst, SIZE_T cbData)
Definition: aes-default.c:835
PSYMCRYPT_MLKEMKEY pkMlKemkey
Definition: sc_lib.h:4444
SYMCRYPT_ERROR SYMCRYPT_CALL SymCryptFdefModInvMontgomery256(_In_ PCSYMCRYPT_MODULUS pMod, _In_ PCSYMCRYPT_MODELEMENT pSrc, _Out_ PSYMCRYPT_MODELEMENT pDst, UINT32 flags, _Out_writes_bytes_(cbScratch) PBYTE pbScratch, SIZE_T cbScratch)
VOID SYMCRYPT_CALL SymCryptFdefModMulMontgomeryMulx(_In_ PCSYMCRYPT_MODULUS pMod, _In_ PCSYMCRYPT_MODELEMENT pSrc1, _In_ PCSYMCRYPT_MODELEMENT pSrc2, _Out_ PSYMCRYPT_MODELEMENT pDst, _Out_writes_bytes_(cbScratch) PBYTE pbScratch, SIZE_T cbScratch)
VOID SYMCRYPT_CALL SymCryptCShakeEncodeInputStrings(_Inout_ PSYMCRYPT_KECCAK_STATE pState, _In_reads_(cbFunctionNameString) PCBYTE pbFunctionNameString, SIZE_T cbFunctionNameString, _In_reads_(cbCustomizationString) PCBYTE pbCustomizationString, SIZE_T cbCustomizationString)
Definition: shake.c:221
FORCEINLINE VOID SYMCRYPT_CALL SymCryptLsbFirstToUint32(_In_reads_(4 *cuResult) PCBYTE pbData, _Out_writes_(cuResult) PUINT32 puResult, SIZE_T cuResult)
Definition: sc_lib.h:487
VOID SYMCRYPT_CALL SymCryptFdefRawMulMulx1024(_In_reads_(nDigits *SYMCRYPT_FDEF_DIGIT_NUINT32) PCUINT32 pSrc1, _In_reads_(nDigits *SYMCRYPT_FDEF_DIGIT_NUINT32) PCUINT32 pSrc2, UINT32 nDigits, _Out_writes_(2 *nDigits *SYMCRYPT_FDEF_DIGIT_NUINT32) PUINT32 pDst)
VOID SYMCRYPT_CALL SymCryptSha512AppendBlocks_ymm_1block(_Inout_ SYMCRYPT_SHA512_CHAINING_STATE *pChain, _In_reads_(cbData) PCBYTE pbData, SIZE_T cbData, _Out_ SIZE_T *pcbRemaining)
PCUINT32 SYMCRYPT_CALL SymCryptFdef369ModPreGetMontgomery(_In_ PCSYMCRYPT_MODULUS pmMod, _In_ PCSYMCRYPT_MODELEMENT peObj, _Out_writes_bytes_(cbScratch) PBYTE pbScratch, SIZE_T cbScratch)
VOID(SYMCRYPT_CALL * PSYMCRYPT_ECPOINT_NEGATE_FUNC)(_In_ PCSYMCRYPT_ECURVE pCurve, _Inout_ PSYMCRYPT_ECPOINT poSrc, UINT32 mask, _Out_writes_bytes_(cbScratch) PBYTE pbScratch, SIZE_T cbScratch)
Definition: sc_lib.h:3870
UINT32 SYMCRYPT_CALL SymCryptFdef369RawSubAsm(_In_reads_bytes_(nDigits *SYMCRYPT_FDEF_DIGIT_SIZE) PCUINT32 pSrc1, _In_reads_bytes_(nDigits *SYMCRYPT_FDEF_DIGIT_SIZE) PCUINT32 pSrc2, _Out_writes_bytes_(nDigits *SYMCRYPT_FDEF_DIGIT_SIZE) PUINT32 pDst, UINT32 nDigits)
VOID SYMCRYPT_CALL SymCryptAesEncryptAsm(_In_ PCSYMCRYPT_AES_EXPANDED_KEY pExpandedKey, _In_reads_(SYMCRYPT_AES_BLOCK_SIZE) PCBYTE pbSrc, _Out_writes_(SYMCRYPT_AES_BLOCK_SIZE) PBYTE pbDst)
VOID SYMCRYPT_CALL SymCryptAesGcmDecryptStitchedNeon(_In_ PCSYMCRYPT_AES_EXPANDED_KEY pExpandedKey, _In_reads_(SYMCRYPT_AES_BLOCK_SIZE) PBYTE pbChainingValue, _In_reads_(SYMCRYPT_GF128_FIELD_SIZE) PCSYMCRYPT_GF128_ELEMENT expandedKeyTable, _Inout_ PSYMCRYPT_GF128_ELEMENT pState, _In_reads_(cbData) PCBYTE pbSrc, _Out_writes_(cbData) PBYTE pbDst, SIZE_T cbData)
UINT32 SYMCRYPT_CALL SymCryptFdefRawSubAsm(_In_reads_bytes_(nDigits *SYMCRYPT_FDEF_DIGIT_SIZE) PCUINT32 pSrc1, _In_reads_bytes_(nDigits *SYMCRYPT_FDEF_DIGIT_SIZE) PCUINT32 pSrc2, _Out_writes_bytes_(nDigits *SYMCRYPT_FDEF_DIGIT_SIZE) PUINT32 pDst, UINT32 nDigits)
struct _XMSS_ADRS XMSS_ADRS
UINT32 SYMCRYPT_CALL SymCryptHbsIncrementalTreehashStackDepth(UINT32 nLeaves)
Definition: xmss.c:704
struct _SYMCRYPT_MD4_STATE_EXPORT_BLOB SYMCRYPT_MD4_STATE_EXPORT_BLOB
struct _XMSS_OTS_ADDRESS * PXMSS_OTS_ADDRESS
VOID SYMCRYPT_CALL SymCryptFdefModDivPow2(_In_ PCSYMCRYPT_MODULUS pmMod, _In_ PCSYMCRYPT_MODELEMENT peSrc, UINT32 exp, _Out_ PSYMCRYPT_MODELEMENT peDst, _Out_writes_bytes_(cbScratch) PBYTE pbScratch, SIZE_T cbScratch)
Definition: fdef_mod.c:872
VOID SYMCRYPT_CALL SymCryptMd5AppendBlocks(_Inout_ SYMCRYPT_MD5_CHAINING_STATE *pChain, _In_reads_(cbData) PCBYTE pbData, SIZE_T cbData, _Out_ SIZE_T *pcbRemaining)
Definition: md5.c:295
VOID SYMCRYPT_CALL SymCryptKeccakAppend(_Inout_ PSYMCRYPT_KECCAK_STATE pState, _In_reads_(cbData) PCBYTE pbData, SIZE_T cbData)
Definition: sha3.c:285
UINT32 SYMCRYPT_CALL SymCryptFdefIntFindSmallDivisor(_In_ PCSYMCRYPT_TRIALDIVISION_CONTEXT pContext, _In_ PCSYMCRYPT_INT piSrc, _Out_writes_bytes_(cbScratch) PBYTE pbScratch, SIZE_T cbScratch)
VOID SYMCRYPT_CALL SymCryptFdefModSetRandomGeneric(_In_ PCSYMCRYPT_MODULUS pmMod, _Out_ PSYMCRYPT_MODELEMENT peDst, UINT32 flags, _Out_writes_bytes_(cbScratch) PBYTE pbScratch, SIZE_T cbScratch)
Definition: fdef_mod.c:703
#define SYMCRYPT_LMS_KEY_PAIR_IDENTIFIER_SIZE
Definition: sc_lib.h:4702
VOID SYMCRYPT_CALL SymCryptFdefRawMulMulx(_In_reads_(nDigits1 *SYMCRYPT_FDEF_DIGIT_NUINT32) PCUINT32 pSrc1, UINT32 nDigits1, _In_reads_(nDigits2 *SYMCRYPT_FDEF_DIGIT_NUINT32) PCUINT32 pSrc2, UINT32 nDigits2, _Out_writes_((nDigits1+nDigits2) *SYMCRYPT_FDEF_DIGIT_NUINT32) PUINT32 pDst)
VOID SYMCRYPT_CALL SymCryptFdefModMulMontgomeryP384Asm(_In_ PCSYMCRYPT_MODULUS pMod, _In_ PCSYMCRYPT_MODELEMENT pSrc1, _In_ PCSYMCRYPT_MODELEMENT pSrc2, _Out_ PSYMCRYPT_MODELEMENT pDst)
VOID SYMCRYPT_CALL SymCryptXtsAesEncryptDataUnitXmm(_In_ PCSYMCRYPT_AES_EXPANDED_KEY pExpandedKey, _In_reads_(SYMCRYPT_AES_BLOCK_SIZE) PBYTE pbTweakBlock, _Out_writes_(SYMCRYPT_AES_BLOCK_SIZE *16) PBYTE pbScratch, _In_reads_(cbData) PCBYTE pbSrc, _Out_writes_(cbData) PBYTE pbDst, SIZE_T cbData)
VOID(SYMCRYPT_CALL * SYMCRYPT_MOD_COPY_FN)(_In_ PCSYMCRYPT_MODULUS pmMod, _In_ PCSYMCRYPT_MODELEMENT peSrc, _Out_ PSYMCRYPT_MODELEMENT peDst)
Definition: sc_lib.h:1964
struct _SYMCRYPT_MODULAR_FUNCTIONS SYMCRYPT_MODULAR_FUNCTIONS
UINT32 NATIVE_UINT
Definition: sc_lib.h:77
UINT32 SYMCRYPT_CALL SymCryptSizeofEcpointEx(UINT32 cbModElement, UINT32 numOfCoordinates)
Definition: ecpoint.c:19
VOID SYMCRYPT_CALL SymCryptFdefModSquareMontgomeryMulx256Asm(_In_ PCSYMCRYPT_MODULUS pMod, _In_ PCSYMCRYPT_MODELEMENT pSrc, _Out_ PSYMCRYPT_MODELEMENT pDst)
VOID SYMCRYPT_CALL SymCryptFdefIntMulMixedSize(_In_ PCSYMCRYPT_INT piSrc1, _In_ PCSYMCRYPT_INT piSrc2, _Out_ PSYMCRYPT_INT piDst, _Out_writes_bytes_(cbScratch) PBYTE pbScratch, SIZE_T cbScratch)
Definition: fdef_int.c:889
VOID SYMCRYPT_CALL SymCryptMd2AppendBlocks(_Inout_ SYMCRYPT_MD2_CHAINING_STATE *pChain, _In_reads_(cbData) PCBYTE pbData, SIZE_T cbData, _Out_ SIZE_T *pcbRemaining)
SYMCRYPT_ERROR(SYMCRYPT_CALL * PSYMCRYPT_ECPOINT_MULTI_SCALAR_MUL_FUNC)(_In_ PCSYMCRYPT_ECURVE pCurve, _In_reads_(nPoints) PCSYMCRYPT_INT *piSrcScalarArray, _In_reads_(nPoints) PCSYMCRYPT_ECPOINT *poSrcEcpointArray, UINT32 nPoints, UINT32 flags, _Out_ PSYMCRYPT_ECPOINT poDst, _Out_writes_bytes_(cbScratch) PBYTE pbScratch, SIZE_T cbScratch)
Definition: sc_lib.h:3889
struct _XMSS_LTREE_ADDRESS XMSS_LTREE_ADDRESS
BYTE abPublicRoot[SYMCRYPT_LMS_MAX_N]
Definition: sc_lib.h:4732
UINT32 SYMCRYPT_CALL SymCryptFdefIntGetBits(_In_ PCSYMCRYPT_INT piSrc, UINT32 iBit, UINT32 nBits)
Definition: fdef_int.c:591
#define PAR_SCRATCH_ELEMENTS_512
Definition: sc_lib.h:1768
const SYMCRYPT_HASH SymCryptSha512Algorithm_default
Definition: sha512.c:130
const SYMCRYPT_MODULUS_TYPE_SELECTION_ENTRY SymCryptModulusTypeSelections[]
Definition: a_dispatch.c:77
PSYMCRYPT_MODULUS SYMCRYPT_CALL SymCryptFdefModulusCreate(_Out_writes_bytes_(cbBuffer) PBYTE pbBuffer, SIZE_T cbBuffer, UINT32 nDigits)
Definition: fdef_mod.c:67
VOID SYMCRYPT_CALL SymCryptFdefRawMul512Asm(_In_reads_(nDigits *SYMCRYPT_FDEF_DIGIT_NUINT32) PCUINT32 pSrc1, _In_reads_(nDigits *SYMCRYPT_FDEF_DIGIT_NUINT32) PCUINT32 pSrc2, UINT32 nDigits, _Out_writes_(2 *nDigits *SYMCRYPT_FDEF_DIGIT_NUINT32) PUINT32 pDst)
VOID SYMCRYPT_CALL SymCryptXtsAesDecryptDataUnitXmm(_In_ PCSYMCRYPT_AES_EXPANDED_KEY pExpandedKey, _In_reads_(SYMCRYPT_AES_BLOCK_SIZE) PBYTE pbTweakBlock, _Out_writes_(SYMCRYPT_AES_BLOCK_SIZE *16) PBYTE pbScratch, _In_reads_(cbData) PCBYTE pbSrc, _Out_writes_(cbData) PBYTE pbDst, SIZE_T cbData)
VOID SYMCRYPT_CALL SymCryptAesCbcEncryptXmm(_In_ PCSYMCRYPT_AES_EXPANDED_KEY pExpandedKey, _Inout_updates_(SYMCRYPT_AES_BLOCK_SIZE) PBYTE pbChainingValue, _In_reads_(cbData) PCBYTE pbSrc, _Out_writes_(cbData) PBYTE pbDst, SIZE_T cbData)
VOID SYMCRYPT_CALL SymCryptAesCtrMsb32Neon(_In_ PCSYMCRYPT_AES_EXPANDED_KEY pExpandedKey, _Inout_updates_(SYMCRYPT_AES_BLOCK_SIZE) PBYTE pbChainingValue, _In_reads_(cbData) PCBYTE pbSrc, _Out_writes_(cbData) PBYTE pbDst, SIZE_T cbData)
VOID(SYMCRYPT_CALL * SYMCRYPT_MODULUS_COPYFIXUP_FN)(_In_ PCSYMCRYPT_MODULUS pmSrc, _Out_ PSYMCRYPT_MODULUS pmDst)
Definition: sc_lib.h:1969
VOID SYMCRYPT_CALL SymCryptWidthNafRecoding(UINT32 W, _Inout_ PSYMCRYPT_INT piK, _Out_writes_(nRecodedDigits) PUINT32 absofKIs, _Out_writes_(nRecodedDigits) PUINT32 sigofKIs, UINT32 nRecodedDigits)
Definition: recoding.c:125
VOID SYMCRYPT_CALL SymCryptOfflinePrecomputation(_In_ PSYMCRYPT_ECURVE pCurve, _Out_writes_bytes_(cbScratch) PBYTE pbScratch, SIZE_T cbScratch)
Definition: ec_mul.c:55
VOID SYMCRYPT_CALL SymCryptShortWeierstrassSetZero(_In_ PCSYMCRYPT_ECURVE pCurve, _Out_ PSYMCRYPT_ECPOINT poDst, _Out_writes_bytes_(cbScratch) PBYTE pbScratch, SIZE_T cbScratch)
SYMCRYPT_ERROR SYMCRYPT_CALL SymCryptXmsskeyVerifyRoot(_In_ PCSYMCRYPT_XMSS_KEY pKey)
Definition: xmss.c:1133
VOID SYMCRYPT_CALL SymCryptFdefModMulMontgomery256Asm(_In_ PCSYMCRYPT_MODULUS pMod, _In_ PCSYMCRYPT_MODELEMENT pSrc1, _In_ PCSYMCRYPT_MODELEMENT pSrc2, _Out_ PSYMCRYPT_MODELEMENT pDst)
VOID SYMCRYPT_CALL SymCryptFdefIntNeg(_In_ PCSYMCRYPT_INT piSrc, _Out_ PSYMCRYPT_INT piDst)
Definition: fdef_int.c:394
struct _SYMCRYPT_SHA256_STATE_EXPORT_BLOB SYMCRYPT_SHA256_STATE_EXPORT_BLOB
const SYMCRYPT_HASH SymCryptMd2Algorithm_default
Definition: md2.c:27
VOID SYMCRYPT_CALL SymCryptFdefModulusInitMontgomery(_Inout_ PSYMCRYPT_MODULUS pmObj, _Out_writes_bytes_(cbScratch) PBYTE pbScratch, SIZE_T cbScratch)
Definition: fdef_mod.c:1191
PSYMCRYPT_MODULUS SYMCRYPT_CALL SymCryptFdefModulusAllocate(UINT32 nDigits)
Definition: fdef_mod.c:11
VOID SYMCRYPT_CALL SymCryptGHashExpandKeyAmd64(_Out_writes_(SYMCRYPT_GF128_FIELD_SIZE) PSYMCRYPT_GF128_ELEMENT expandedKey, _In_reads_(SYMCRYPT_GF128_BLOCK_SIZE) PCBYTE pH)
VOID SYMCRYPT_CALL SymCryptGHashAppendDataXmm(_In_reads_(SYMCRYPT_GF128_FIELD_SIZE) PCSYMCRYPT_GF128_ELEMENT expandedKeyTable, _Inout_ PSYMCRYPT_GF128_ELEMENT pState, _In_reads_(cbData) PCBYTE pbData, SIZE_T cbData)
const PCSYMCRYPT_DLGROUP_DH_SAFEPRIME_PARAMS SymCryptDlgroupDhSafePrimeParamsModp8192
SYMCRYPT_ERROR SYMCRYPT_CALL SymCryptFdefRawSetValue(_In_reads_bytes_(cbSrc) PCBYTE pbSrc, SIZE_T cbSrc, SYMCRYPT_NUMBER_FORMAT format, _Out_writes_(nDigits *SYMCRYPT_FDEF_DIGIT_NUINT32) PUINT32 pDst, UINT32 nDigits)
Definition: fdef_general.c:524
SYMCRYPT_ERROR SYMCRYPT_CALL SymCryptEcpointMultiScalarMulWnafWithInterleaving(_In_ PCSYMCRYPT_ECURVE pCurve, _In_reads_(nPoints) PCSYMCRYPT_INT *piSrcScalarArray, _In_reads_(nPoints) PCSYMCRYPT_ECPOINT *poSrcEcpointArray, UINT32 nPoints, UINT32 flags, _Out_ PSYMCRYPT_ECPOINT poDst, _Out_writes_bytes_(cbScratch) PBYTE pbScratch, SIZE_T cbScratch)
const SYMCRYPT_COMPOSITE_MLKEMKEY * PCSYMCRYPT_COMPOSITE_MLKEMKEY
Definition: sc_lib.h:4454
VOID SYMCRYPT_CALL SymCryptFdefRawSquare512Asm(_In_reads_(nDigits *SYMCRYPT_FDEF_DIGIT_NUINT32) PCUINT32 pSrc, UINT32 nDigits, _Out_writes_(2 *nDigits *SYMCRYPT_FDEF_DIGIT_NUINT32) PUINT32 pDst)
VOID SYMCRYPT_CALL SymCryptAesCbcEncryptAsm(_In_ PCSYMCRYPT_AES_EXPANDED_KEY pExpandedKey, _Inout_updates_(SYMCRYPT_AES_BLOCK_SIZE) PBYTE pbChainingValue, _In_reads_(cbData) PCBYTE pbSrc, _Out_writes_(cbData) PBYTE pbDst, SIZE_T cbData)
UINT32 SYMCRYPT_CALL SymCryptFdefIntBitsizeOfValue(_In_ PCSYMCRYPT_INT piSrc)
Definition: fdef_general.c:451
VOID SymCryptFdefDivisorCopy(_In_ PCSYMCRYPT_DIVISOR pdSrc, _Out_ PSYMCRYPT_DIVISOR pdDst)
Definition: fdef_general.c:891
PSYMCRYPT_INT SYMCRYPT_CALL SymCryptFdefIntAllocate(UINT32 nDigits)
Definition: fdef_general.c:165
VOID SYMCRYPT_CALL SymCryptFdefModMulMontgomery(_In_ PCSYMCRYPT_MODULUS pMod, _In_ PCSYMCRYPT_MODELEMENT pSrc1, _In_ PCSYMCRYPT_MODELEMENT pSrc2, _Out_ PSYMCRYPT_MODELEMENT pDst, _Out_writes_bytes_(cbScratch) PBYTE pbScratch, SIZE_T cbScratch)
Definition: fdef_mod.c:1316
FORCEINLINE VOID SYMCRYPT_CALL SymCryptUint32ToMsbFirst(_In_reads_(cuData) PCUINT32 puData, _Out_writes_(4 *cuData) PBYTE pbResult, SIZE_T cuData)
Definition: sc_lib.h:405
VOID SYMCRYPT_CALL SymCryptShortWeierstrassFillScratchSpaces(_In_ PSYMCRYPT_ECURVE pCurve)
VOID SYMCRYPT_CALL SymCryptSha512AppendBlocks_xmm(_Inout_ SYMCRYPT_SHA512_CHAINING_STATE *pChain, _In_reads_(cbData) PCBYTE pbData, SIZE_T cbData, _Out_ SIZE_T *pcbRemaining)
VOID SYMCRYPT_CALL SymCryptGHashExpandKeyX86(_Out_ PSYMCRYPT_GHASH_EXPANDED_KEY expandedKey, _In_reads_(SYMCRYPT_GF128_BLOCK_SIZE) PCBYTE pH)
VOID SYMCRYPT_CALL SymCryptAesGcmEncryptPart(_Inout_ PSYMCRYPT_GCM_STATE pState, _In_reads_(cbData) PCBYTE pbSrc, _Out_writes_(cbData) PBYTE pbDst, SIZE_T cbData)
Definition: aes-default.c:794
VOID SYMCRYPT_CALL SymCryptAesGcmDecryptStitchedYmm_2048(_In_ PCSYMCRYPT_AES_EXPANDED_KEY pExpandedKey, _In_reads_(SYMCRYPT_AES_BLOCK_SIZE) PBYTE pbChainingValue, _In_reads_(SYMCRYPT_GF128_FIELD_SIZE) PCSYMCRYPT_GF128_ELEMENT expandedKeyTable, _Inout_ PSYMCRYPT_GF128_ELEMENT pState, _In_reads_(cbData) PCBYTE pbSrc, _Out_writes_(cbData) PBYTE pbDst, SIZE_T cbData)
VOID SYMCRYPT_CALL SymCryptDetectCpuFeaturesFromRegistersNoTry(void)
VOID SYMCRYPT_CALL SymCryptFdefIntDivMod(_In_ PCSYMCRYPT_INT piSrc, _In_ PCSYMCRYPT_DIVISOR pdDivisor, _Out_opt_ PSYMCRYPT_INT piQuotient, _Out_opt_ PSYMCRYPT_INT piRemainder, _Out_writes_bytes_(cbScratch) PBYTE pbScratch, SIZE_T cbScratch)
Definition: fdef_int.c:1219
VOID(SYMCRYPT_CALL * SYMCRYPT_MODULUS_INIT_FN)(_Inout_ PSYMCRYPT_MODULUS pmObj, _Out_writes_bytes_(cbScratch) PBYTE pbScratch, SIZE_T cbScratch)
Definition: sc_lib.h:1973
VOID SYMCRYPT_CALL SymCryptAesCtrMsb32Xmm(_In_ PCSYMCRYPT_AES_EXPANDED_KEY pExpandedKey, _Inout_updates_(SYMCRYPT_AES_BLOCK_SIZE) PBYTE pbChainingValue, _In_reads_(cbData) PCBYTE pbSrc, _Out_writes_(cbData) PBYTE pbDst, SIZE_T cbData)
VOID(SYMCRYPT_CALL * PSYMCRYPT_ECPOINT_SET_RANDOM_FUNC)(_In_ PCSYMCRYPT_ECURVE pCurve, _Out_ PSYMCRYPT_INT piScalar, _Out_ PSYMCRYPT_ECPOINT poDst, _Out_writes_bytes_(cbScratch) PBYTE pbScratch, SIZE_T cbScratch)
Definition: sc_lib.h:3811
SYMCRYPT_ERROR SYMCRYPT_CALL SymCryptEckeySetValueCompositeEncodingSk(SYMCRYPT_CACHED_ECURVE_ID curveId, _In_reads_bytes_(cbSrc) PCBYTE pbSrc, SIZE_T cbSrc, UINT32 flags, _Inout_ PSYMCRYPT_ECKEY pEckey)
UINT32 SymCryptFdefDigitsFromBits(UINT32 nBits)
Definition: fdef_general.c:133
struct _SYMCRYPT_MODULUS_TYPE_SELECTION_ENTRY * PSYMCRYPT_MODULUS_TYPE_SELECTION_ENTRY
FORCEINLINE UINT32 SymCryptCountTrailingZeros64(UINT64 value)
Definition: sc_lib.h:5045
VOID SYMCRYPT_CALL SymCryptAesCreateDecryptionRoundKeyC(_In_reads_(16) PCBYTE pEncryptionRoundKey, _Out_writes_(16) PBYTE pDecryptionRoundKey)
Definition: aes-c.c:81
VOID SYMCRYPT_CALL SymCryptFdefModSetPostMontgomeryMulx256(_In_ PCSYMCRYPT_MODULUS pmMod, _Inout_ PSYMCRYPT_MODELEMENT peObj, _Out_writes_bytes_(cbScratch) PBYTE pbScratch, SIZE_T cbScratch)
SYMCRYPT_ERROR SYMCRYPT_CALL SymCryptXmssVerifyInternal(_Inout_ PSYMCRYPT_XMSS_KEY pKey, _In_reads_bytes_(cbMessage) PCBYTE pbMessage, SIZE_T cbMessage, UINT32 flags, _In_reads_bytes_(cbSignature) PCBYTE pbSignature, SIZE_T cbSignature)
Definition: xmss.c:1736
VOID SYMCRYPT_CALL SymCryptFdefModulusCopyFixupGeneric(_In_ PCSYMCRYPT_MODULUS pmSrc, _Out_ PSYMCRYPT_MODULUS pmDst)
Definition: fdef_mod.c:145
SYMCRYPT_KECCAK_STATE_EXPORT_BLOB SYMCRYPT_SHA3_512_STATE_EXPORT_BLOB
Definition: sc_lib.h:1181
VOID SYMCRYPT_CALL SymCryptGcmEncryptPartTwoPass(_Inout_ PSYMCRYPT_GCM_STATE pState, _In_reads_(cbData) PCBYTE pbSrc, _Out_writes_(cbData) PBYTE pbDst, SIZE_T cbData)
Definition: gcm.c:481
VOID(SYMCRYPT_CALL * PSYMCRYPT_ECPOINT_ADD_DIFF_NONZERO_FUNC)(_In_ PCSYMCRYPT_ECURVE pCurve, _In_ PCSYMCRYPT_ECPOINT poSrc1, _In_ PCSYMCRYPT_ECPOINT poSrc2, _Out_ PSYMCRYPT_ECPOINT poDst, _Out_writes_bytes_(cbScratch) PBYTE pbScratch, SIZE_T cbScratch)
Definition: sc_lib.h:3852
SYMCRYPT_XMSSKEY_TYPE keyType
Definition: sc_lib.h:4525
SYMCRYPT_ERROR SYMCRYPT_CALL SymCryptKeccakStateImport(SYMCRYPT_BLOB_TYPE type, _Out_ PSYMCRYPT_KECCAK_STATE pState, _In_reads_bytes_(SYMCRYPT_KECCAK_STATE_EXPORT_SIZE) PCBYTE pbBlob)
Definition: sha3.c:518
VOID SYMCRYPT_CALL SymCryptFdefIntSquare(_In_ PCSYMCRYPT_INT piSrc, _Out_ PSYMCRYPT_INT piDst, _Out_writes_bytes_(cbScratch) PBYTE pbScratch, SIZE_T cbScratch)
Definition: fdef_int.c:716
VOID SYMCRYPT_CALL SymCryptFdefModSetPostGeneric(_In_ PCSYMCRYPT_MODULUS pmMod, _Inout_ PSYMCRYPT_MODELEMENT peObj, _Out_writes_bytes_(cbScratch) PBYTE pbScratch, SIZE_T cbScratch)
Definition: fdef_mod.c:354
VOID SYMCRYPT_CALL SymCryptAesDecryptAsm(_In_ PCSYMCRYPT_AES_EXPANDED_KEY pExpandedKey, _In_reads_(SYMCRYPT_AES_BLOCK_SIZE) PCBYTE pbSrc, _Out_writes_(SYMCRYPT_AES_BLOCK_SIZE) PBYTE pbDst)
UINT32 SYMCRYPT_CALL SymCryptTwistedEdwardsIsEqual(_In_ PCSYMCRYPT_ECURVE pCurve, _In_ PCSYMCRYPT_ECPOINT poSrc1, _In_ PCSYMCRYPT_ECPOINT poSrc2, UINT32 flags, _Out_writes_bytes_(cbScratch) PBYTE pbScratch, SIZE_T cbScratch)
SYMCRYPT_ERROR SYMCRYPT_CALL SymCryptModMultiExpGeneric(_In_ PCSYMCRYPT_MODULUS pmMod, _In_reads_(nBases) PCSYMCRYPT_MODELEMENT *peBaseArray, _In_reads_(nBases) PCSYMCRYPT_INT *piExpArray, UINT32 nBases, UINT32 nBitsExp, UINT32 flags, _Out_ PSYMCRYPT_MODELEMENT peDst, _Out_writes_bytes_(cbScratch) PBYTE pbScratch, SIZE_T cbScratch)
Definition: modexp.c:449
SYMCRYPT_ERROR SYMCRYPT_CALL SymCryptFdefModElementSetValueGeneric(_In_reads_bytes_(cbSrc) PCBYTE pbSrc, SIZE_T cbSrc, SYMCRYPT_NUMBER_FORMAT format, _In_ PCSYMCRYPT_MODULUS pmMod, _Out_ PSYMCRYPT_MODELEMENT peDst, _Out_writes_bytes_(cbScratch) PBYTE pbScratch, SIZE_T cbScratch)
Definition: fdef_mod.c:445
const SYMCRYPT_LMS_KEY * PCSYMCRYPT_LMS_KEY
Definition: sc_lib.h:4740
const BYTE SymCryptTestKey32[32]
Definition: selftest.c:10
const PCSYMCRYPT_PARALLEL_HASH SymCryptParallelSha384Algorithm
VOID SYMCRYPT_CALL SymCryptFdefIntModPow2(_In_ PCSYMCRYPT_INT piSrc, SIZE_T exp, _Out_ PSYMCRYPT_INT piDst)
Definition: fdef_int.c:539
PSYMCRYPT_ECKEY pkEcKey
Definition: sc_lib.h:4445
UINT32 SYMCRYPT_CALL SymCryptFdefIntIsEqualUint32(_In_ PCSYMCRYPT_INT piSrc1, _In_ UINT32 u32Src2)
Definition: fdef_general.c:749
VOID SYMCRYPT_CALL SymCryptDetectCpuFeaturesFromIsProcessorFeaturePresent(void)
UINT32 SYMCRYPT_CALL SymCryptFdefIntIsLessThan(_In_ PCSYMCRYPT_INT piSrc1, _In_ PCSYMCRYPT_INT piSrc2)
Definition: fdef_int.c:368
const BYTE SymCryptSha512KATAnswer[64]
Definition: sha512.c:695
VOID SYMCRYPT_CALL SymCryptAesCbcDecryptNeon(_In_ PCSYMCRYPT_AES_EXPANDED_KEY pExpandedKey, _Inout_updates_(SYMCRYPT_AES_BLOCK_SIZE) PBYTE pbChainingValue, _In_reads_(cbData) PCBYTE pbSrc, _Out_writes_(cbData) PBYTE pbDst, SIZE_T cbData)
PCSYMCRYPT_TRIALDIVISION_CONTEXT SYMCRYPT_CALL SymCryptFdefCreateTrialDivisionContext(UINT32 nDigits)
VOID SymCryptFdefDivisorCopyFixup(_In_ PCSYMCRYPT_DIVISOR pSrc, _Out_ PSYMCRYPT_DIVISOR pDst)
Definition: fdef_general.c:878
VOID SYMCRYPT_CALL SymCryptTwistedEdwardsSetZero(_In_ PCSYMCRYPT_ECURVE pCurve, _Out_ PSYMCRYPT_ECPOINT poDst, _Out_writes_bytes_(cbScratch) PBYTE pbScratch, SIZE_T cbScratch)
VOID SYMCRYPT_CALL SymCryptFdefModAdd384Asm(_In_ PCSYMCRYPT_MODULUS pmMod, _In_ PCSYMCRYPT_MODELEMENT peSrc1, _In_ PCSYMCRYPT_MODELEMENT peSrc2, _Out_ PSYMCRYPT_MODELEMENT peDst)
VOID SYMCRYPT_CALL SymCryptFdefConditionalSwap(_Inout_updates_bytes_(nDigits *SYMCRYPT_FDEF_DIGIT_SIZE) PBYTE pbSrc1, _Inout_updates_bytes_(nDigits *SYMCRYPT_FDEF_DIGIT_SIZE) PBYTE pbSrc2, UINT32 nDigits, UINT32 cond)
Definition: fdef_general.c:122
VOID SYMCRYPT_CALL SymCryptMontgomeryFillScratchSpaces(_In_ PSYMCRYPT_ECURVE pCurve)
Definition: ec_montgomery.c:11
#define SYMCRYPT_LMS_MAX_N
Definition: sc_lib.h:4703
VOID SYMCRYPT_CALL SymCryptAesCbcMacNeon(_In_ PCSYMCRYPT_AES_EXPANDED_KEY pExpandedKey, _Inout_updates_(SYMCRYPT_AES_BLOCK_SIZE) PBYTE pbChainingValue, _In_reads_(cbData) PCBYTE pbData, SIZE_T cbData)
VOID SYMCRYPT_CALL SymCryptFdefModSquareMontgomeryMulxP384Asm(_In_ PCSYMCRYPT_MODULUS pMod, _In_ PCSYMCRYPT_MODELEMENT pSrc, _Out_ PSYMCRYPT_MODELEMENT pDst)
VOID SYMCRYPT_CALL SymCryptAesGcmEncryptStitchedXmm(_In_ PCSYMCRYPT_AES_EXPANDED_KEY pExpandedKey, _In_reads_(SYMCRYPT_AES_BLOCK_SIZE) PBYTE pbChainingValue, _In_reads_(SYMCRYPT_GF128_FIELD_SIZE) PCSYMCRYPT_GF128_ELEMENT expandedKeyTable, _Inout_ PSYMCRYPT_GF128_ELEMENT pState, _In_reads_(cbData) PCBYTE pbSrc, _Out_writes_(cbData) PBYTE pbDst, SIZE_T cbData)
const SYMCRYPT_MODULUS_TYPE_SELECTION_ENTRY * PCSYMCRYPT_MODULUS_TYPE_SELECTION_ENTRY
Definition: sc_lib.h:2030
VOID SYMCRYPT_CALL SymCryptHashCommonPaddingMd4Style(_In_ PCSYMCRYPT_HASH pHash, _Inout_ PSYMCRYPT_COMMON_HASH_STATE pState)
Definition: hash.c:85
UINT32 SYMCRYPT_CALL SymCryptCompositeGetSizeOfEncodedEcPk(SYMCRYPT_CACHED_ECURVE_ID curveId)
VOID SymCryptFdefModElementMaskedCopy(_In_ PCSYMCRYPT_MODULUS pmMod, _In_ PCSYMCRYPT_MODELEMENT peSrc, _Out_ PSYMCRYPT_MODELEMENT peDst, UINT32 mask)
Definition: fdef_mod.c:253
struct _SYMCRYPT_XMSS_INCREMENTAL_TREEHASH_CONTEXT * PSYMCRYPT_XMSS_INCREMENTAL_TREEHASH_CONTEXT
BYTE Seed[SYMCRYPT_HASH_MAX_RESULT_SIZE]
Definition: sc_lib.h:4529
VOID SYMCRYPT_CALL SymCryptAesEcbEncryptXmm(_In_ PCSYMCRYPT_AES_EXPANDED_KEY pExpandedKey, _In_reads_(cbData) PCBYTE pbSrc, _Out_writes_(cbData) PBYTE pbDst, SIZE_T cbData)
VOID SYMCRYPT_CALL SymCryptFdef369ModAddGeneric(_In_ PCSYMCRYPT_MODULUS pmMod, _In_ PCSYMCRYPT_MODELEMENT peSrc1, _In_ PCSYMCRYPT_MODELEMENT peSrc2, _Out_ PSYMCRYPT_MODELEMENT peDst, _Out_writes_bytes_(cbScratch) PBYTE pbScratch, SIZE_T cbScratch)
SYMCRYPT_LMS_KEY * PSYMCRYPT_LMS_KEY
Definition: sc_lib.h:4739
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)
Definition: xtsaes.c:668
const PCSYMCRYPT_DLGROUP_DH_SAFEPRIME_PARAMS SymCryptDlgroupDhSafePrimeParamsffdhe8192
const SYMCRYPT_HASH SymCryptSha3_512Algorithm_default
Definition: sha3_512.c:14
#define REPEAT_BYTE_TO_UINT64(x)
Definition: sc_lib.h:890
SYMCRYPT_ERROR SYMCRYPT_CALL SymCryptFdefIntSetValue(_In_reads_bytes_(cbSrc) PCBYTE pbSrc, SIZE_T cbSrc, SYMCRYPT_NUMBER_FORMAT format, _Out_ PSYMCRYPT_INT piDst)
Definition: fdef_general.c:601
VOID SYMCRYPT_CALL SymCryptDetectCpuFeaturesFromRegisters(void)
const SYMCRYPT_HASH SymCryptShake128HashAlgorithm_default
Definition: shake.c:28
VOID SYMCRYPT_CALL SymCryptFdefModulusCopyFixupMontgomery(_In_ PCSYMCRYPT_MODULUS pmSrc, _Out_ PSYMCRYPT_MODULUS pmDst)
Definition: fdef_mod.c:1304
UINT32 SYMCRYPT_CALL SymCryptCompositeGetSizeOfEncodedEcSk(SYMCRYPT_CACHED_ECURVE_ID curveId)
VOID(SYMCRYPT_CALL * PSYMCRYPT_ECURVE_FILL_SCRATCH_SPACES_FUNC)(_Inout_ PSYMCRYPT_ECURVE pCurve)
Definition: sc_lib.h:3899
PSYMCRYPT_DIVISOR SYMCRYPT_CALL SymCryptFdefDivisorRetrieveHandle(_In_ PBYTE pbBuffer)
const SYMCRYPT_COMPOSITE_MLKEM_INTERNAL_PARAMS * PCSYMCRYPT_COMPOSITE_MLKEM_INTERNAL_PARAMS
Definition: sc_lib.h:4440
enum _XMSS_ADRS_TYPE XMSS_ADRS_TYPE
UINT32 SYMCRYPT_CALL SymCryptFdefRawSub(_In_reads_bytes_(nDigits *SYMCRYPT_FDEF_DIGIT_SIZE) PCUINT32 pSrc1, _In_reads_bytes_(nDigits *SYMCRYPT_FDEF_DIGIT_SIZE) PCUINT32 pSrc2, _Out_writes_bytes_(nDigits *SYMCRYPT_FDEF_DIGIT_SIZE) PUINT32 pDst, UINT32 nDigits)
Definition: fdef_int.c:174
PCSYMCRYPT_ECURVE SYMCRYPT_CALL SymCryptGetCachedEcurve(SYMCRYPT_CACHED_ECURVE_ID curveId)
VOID SYMCRYPT_CALL SymCryptFdefModulusInitMontgomery256(_Inout_ PSYMCRYPT_MODULUS pmObj, _Out_writes_bytes_(cbScratch) PBYTE pbScratch, SIZE_T cbScratch)
VOID SYMCRYPT_CALL SymCryptAesEcbEncryptC(_In_ PCSYMCRYPT_AES_EXPANDED_KEY pExpandedKey, _In_reads_(cbData) PCBYTE pbSrc, _Out_writes_(cbData) PBYTE pbDst, SIZE_T cbData)
Definition: aes-c.c:361
VOID SYMCRYPT_CALL SymCryptGHashResult(_In_ PCSYMCRYPT_GF128_ELEMENT pState, _Out_writes_(SYMCRYPT_GF128_BLOCK_SIZE) PBYTE pbResult)
Definition: ghash.c:108
const PCSYMCRYPT_PARALLEL_HASH SymCryptParallelSha512Algorithm
struct _SYMCRYPT_ECURVE_FUNCTIONS SYMCRYPT_ECURVE_FUNCTIONS
VOID SYMCRYPT_CALL SymCryptEckeyWipePrivateState(_Inout_ PSYMCRYPT_ECKEY pkEckey)
Definition: eckey.c:106
VOID SYMCRYPT_CALL SymCryptParallelSha512AppendBlocks_ymm(_Inout_updates_(4) PSYMCRYPT_SHA512_CHAINING_STATE *pChain, _Inout_updates_(4) PCBYTE *ppByte, SIZE_T nBytes, _Out_writes_(PAR_SCRATCH_ELEMENTS_512 *32) PBYTE pScratch)
UINT32 g_SymCryptFlags
Definition: libmain.c:18
VOID SYMCRYPT_CALL SymCryptAesGcmEncryptStitchedNeon(_In_ PCSYMCRYPT_AES_EXPANDED_KEY pExpandedKey, _In_reads_(SYMCRYPT_AES_BLOCK_SIZE) PBYTE pbChainingValue, _In_reads_(SYMCRYPT_GF128_FIELD_SIZE) PCSYMCRYPT_GF128_ELEMENT expandedKeyTable, _Inout_ PSYMCRYPT_GF128_ELEMENT pState, _In_reads_(cbData) PCBYTE pbSrc, _Out_writes_(cbData) PBYTE pbDst, SIZE_T cbData)
VOID SYMCRYPT_CALL SymCryptSha1AppendBlocks(_Inout_ SYMCRYPT_SHA1_CHAINING_STATE *pChain, _In_reads_(cbData) PCBYTE pbData, SIZE_T cbData, _Out_ SIZE_T *pcbRemaining)
Definition: sha1.c:230
SYMCRYPT_ERROR SYMCRYPT_CALL SymCryptEcpointScalarMulFixedWindow(_In_ PCSYMCRYPT_ECURVE pCurve, _In_ PCSYMCRYPT_INT piScalar, _In_opt_ PCSYMCRYPT_ECPOINT poSrc, UINT32 flags, _Out_ PSYMCRYPT_ECPOINT poDst, _Out_writes_bytes_(cbScratch) PBYTE pbScratch, SIZE_T cbScratch)
Definition: ec_mul.c:90
UINT32 SYMCRYPT_CALL SymCryptFdefIntBitsizeOfObject(_In_ PCSYMCRYPT_INT piSrc)
Definition: fdef_general.c:328
VOID SYMCRYPT_CALL SymCryptDetectCpuFeaturesByCpuid(UINT32 flags)
VOID SYMCRYPT_CALL SymCryptAesCtrMsb64Neon(_In_ PCSYMCRYPT_AES_EXPANDED_KEY pExpandedKey, _Inout_updates_(SYMCRYPT_AES_BLOCK_SIZE) PBYTE pbChainingValue, _In_reads_(cbData) PCBYTE pbSrc, _Out_writes_(cbData) PBYTE pbDst, SIZE_T cbData)
VOID SYMCRYPT_CALL SymCryptAesEcbDecryptC(_In_ PCSYMCRYPT_AES_EXPANDED_KEY pExpandedKey, _In_reads_(cbData) PCBYTE pbSrc, _Out_writes_(cbData) PBYTE pbDst, SIZE_T cbData)
Definition: aes-c.c:378
SYMCRYPT_ERROR SYMCRYPT_CALL SymCryptFdefModInvGeneric(_In_ PCSYMCRYPT_MODULUS pMod, _In_ PCSYMCRYPT_MODELEMENT pSrc, _Out_ PSYMCRYPT_MODELEMENT pDst, UINT32 flags, _Out_writes_bytes_(cbScratch) PBYTE pbScratch, SIZE_T cbScratch)
Definition: fdef_mod.c:960
UINT32 SYMCRYPT_CALL SymCryptFdefIntIsEqual(_In_ PCSYMCRYPT_INT piSrc1, _In_ PCSYMCRYPT_INT piSrc2)
Definition: fdef_general.c:758
VOID SYMCRYPT_CALL SymCryptFdef369RawMulAsm(_In_reads_(nDigits1 *SYMCRYPT_FDEF_DIGIT_NUINT32) PCUINT32 pSrc1, UINT32 nDigits1, _In_reads_(nDigits2 *SYMCRYPT_FDEF_DIGIT_NUINT32) PCUINT32 pSrc2, UINT32 nDigits2, _Out_writes_((nDigits1+nDigits2) *SYMCRYPT_FDEF_DIGIT_NUINT32) PUINT32 pDst)
PSYMCRYPT_TREEHASH_NODE SYMCRYPT_CALL SymCryptHbsIncrementalTreehashGetNode(_In_ PSYMCRYPT_INCREMENTAL_TREEHASH pIncHash, SIZE_T index)
Definition: xmss.c:609
VOID SYMCRYPT_CALL SymCryptFdefModElementFree(_In_ PCSYMCRYPT_MODULUS pmMod, _Out_ PSYMCRYPT_MODELEMENT peObj)
Definition: fdef_mod.c:184
VOID SYMCRYPT_CALL SymCryptGHashExpandKey(_Out_ PSYMCRYPT_GHASH_EXPANDED_KEY expandedKey, _In_reads_(SYMCRYPT_GF128_BLOCK_SIZE) PCBYTE pH)
Definition: ghash.c:816
SYMCRYPT_ERROR SYMCRYPT_CALL SymCryptParallelHashProcess(_In_ PCSYMCRYPT_PARALLEL_HASH pParHash, _Inout_updates_bytes_(nStates *pParHash->pHash->stateSize) PVOID pStates, SIZE_T nStates, _Inout_updates_(nOperations) PSYMCRYPT_PARALLEL_HASH_OPERATION pOperations, SIZE_T nOperations, _Out_writes_(cbScratch) PBYTE pbScratch, SIZE_T cbScratch, UINT32 maxParallel)
const BYTE SymCryptTestMsg3[3]
Definition: selftest.c:8
#define CHECK_ALGORITHM_INFO_FLAGS_DISTINCT(flag0, flag1, flag2, flag3, flag4)
Definition: sc_lib.h:3712
#define SYMCRYPT_ECURVE_FUNCTIONS_SIZE
Definition: sc_lib.h:3922
UINT32 SYMCRYPT_CALL SymCryptFdefRawAdd(_In_reads_bytes_(nDigits *SYMCRYPT_FDEF_DIGIT_SIZE) PCUINT32 Src1, _In_reads_bytes_(nDigits *SYMCRYPT_FDEF_DIGIT_SIZE) PCUINT32 Src2, _Out_writes_bytes_(nDigits *SYMCRYPT_FDEF_DIGIT_SIZE) PUINT32 Dst, UINT32 nDigits)
Definition: fdef_int.c:45
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)
Definition: xtsaes.c:629
struct _XMSS_HASHTREE_ADDRESS * PXMSS_HASHTREE_ADDRESS
VOID SYMCRYPT_CALL SymCryptGHashAppendDataPclmulqdq(_In_reads_(SYMCRYPT_GF128_FIELD_SIZE) PCSYMCRYPT_GF128_ELEMENT expandedKeyTable, _Inout_ PSYMCRYPT_GF128_ELEMENT pState, _In_reads_(cbData) PCBYTE pbData, SIZE_T cbData)
VOID SYMCRYPT_CALL SymCryptFdefIntMulSameSize(_In_ PCSYMCRYPT_INT piSrc1, _In_ PCSYMCRYPT_INT piSrc2, _Out_ PSYMCRYPT_INT piDst, _Out_writes_bytes_(cbScratch) PBYTE pbScratch, SIZE_T cbScratch)
Definition: fdef_int.c:704
VOID SYMCRYPT_CALL SymCryptSha512AppendBlocks_ymm_4blocks(_Inout_ SYMCRYPT_SHA512_CHAINING_STATE *pChain, _In_reads_(cbData) PCBYTE pbData, SIZE_T cbData, _Out_ SIZE_T *pcbRemaining)
struct _SYMCRYPT_MODULUS_TYPE_SELECTION_ENTRY SYMCRYPT_MODULUS_TYPE_SELECTION_ENTRY
VOID SYMCRYPT_CALL SymCryptAes4SboxXmm(_In_reads_(4) PCBYTE pIn, _Out_writes_(4) PBYTE pOut)
BYTE privateSeed[SYMCRYPT_COMPOSITE_MLKEM_IRTF_PRIVATE_SEED_SIZE]
Definition: sc_lib.h:4450
VOID SYMCRYPT_CALL SymCryptFdefModMulMontgomeryMulx1024(_In_ PCSYMCRYPT_MODULUS pMod, _In_ PCSYMCRYPT_MODELEMENT pSrc1, _In_ PCSYMCRYPT_MODELEMENT pSrc2, _Out_ PSYMCRYPT_MODELEMENT pDst, _Out_writes_bytes_(cbScratch) PBYTE pbScratch, SIZE_T cbScratch)
VOID SYMCRYPT_CALL SymCryptTwistedEdwardsDouble(_In_ PCSYMCRYPT_ECURVE pCurve, _In_ PCSYMCRYPT_ECPOINT poSrc, _Out_ PSYMCRYPT_ECPOINT poDst, UINT32 flags, _Out_writes_bytes_(cbScratch) PBYTE pbScratch, SIZE_T cbScratch)
const SYMCRYPT_HASH SymCryptMd5Algorithm_default
Definition: md5.c:30
VOID SYMCRYPT_CALL SymCryptFdefRawSquare(_In_reads_(nDigits *SYMCRYPT_FDEF_DIGIT_NUINT32) PCUINT32 pSrc, UINT32 nDigits, _Out_writes_(2 *nDigits *SYMCRYPT_FDEF_DIGIT_NUINT32) PUINT32 pDst)
Definition: fdef_int.c:866
VOID(SYMCRYPT_CALL * PSYMCRYPT_ECPOINT_DOUBLE_FUNC)(_In_ PCSYMCRYPT_ECURVE pCurve, _In_ PCSYMCRYPT_ECPOINT poSrc, _Out_ PSYMCRYPT_ECPOINT poDst, UINT32 flags, _Out_writes_bytes_(cbScratch) PBYTE pbScratch, SIZE_T cbScratch)
Definition: sc_lib.h:3861
SYMCRYPT_ASYM_ALIGN_STRUCT _SYMCRYPT_LMS_KEY
Definition: sc_lib.h:4718
UINT32 SYMCRYPT_CALL SymCryptFdefModElementIsZero(_In_ PCSYMCRYPT_MODULUS pmMod, _In_ PCSYMCRYPT_MODELEMENT peSrc)
Definition: fdef_mod.c:530
VOID SYMCRYPT_CALL SymCryptAesEcbEncryptNeon(_In_ PCSYMCRYPT_AES_EXPANDED_KEY pExpandedKey, _In_reads_(cbData) PCBYTE pbSrc, _Out_writes_(cbData) PBYTE pbDst, SIZE_T cbData)
VOID SYMCRYPT_CALL SymCryptFdefRawSquareMulx(_In_reads_(nDigits *SYMCRYPT_FDEF_DIGIT_NUINT32) PCUINT32 pSrc, UINT32 nDigits, _Out_writes_(2 *nDigits *SYMCRYPT_FDEF_DIGIT_NUINT32) PUINT32 pDst)
_XMSS_ADRS_TYPE
Definition: sc_lib.h:4475
@ XMSS_ADRS_TYPE_HASH_TREE
Definition: sc_lib.h:4478
@ XMSS_ADRS_TYPE_LTREE
Definition: sc_lib.h:4477
@ XMSS_ADRS_TYPE_OTS
Definition: sc_lib.h:4476
VOID SYMCRYPT_CALL SymCryptAesCbcDecryptAsm(_In_ PCSYMCRYPT_AES_EXPANDED_KEY pExpandedKey, _Inout_updates_(SYMCRYPT_AES_BLOCK_SIZE) PBYTE pbChainingValue, _In_reads_(cbData) PCBYTE pbSrc, _Out_writes_(cbData) PBYTE pbDst, SIZE_T cbData)
BYTE SkXmss[SYMCRYPT_HASH_MAX_RESULT_SIZE]
Definition: sc_lib.h:4536
VOID(SYMCRYPT_CALL * PSYMCRYPT_ECPOINT_SET_DISTINGUISHED_FUNC)(_In_ PCSYMCRYPT_ECURVE pCurve, _Out_ PSYMCRYPT_ECPOINT poDst, _Out_writes_bytes_(cbScratch) PBYTE pbScratch, SIZE_T cbScratch)
Definition: sc_lib.h:3804
#define FALSE
Definition: sc_lib.h:50
PSYMCRYPT_TREEHASH_NODE SYMCRYPT_CALL SymCryptHbsIncrementalTreehashProcessCommon(_Inout_ PSYMCRYPT_INCREMENTAL_TREEHASH pIncHash, BOOLEAN fFinal)
Definition: xmss.c:655
VOID SYMCRYPT_CALL SymCryptFdefRawMulAsm(_In_reads_(nDigits1 *SYMCRYPT_FDEF_DIGIT_NUINT32) PCUINT32 pSrc1, UINT32 nDigits1, _In_reads_(nDigits2 *SYMCRYPT_FDEF_DIGIT_NUINT32) PCUINT32 pSrc2, UINT32 nDigits2, _Out_writes_((nDigits1+nDigits2) *SYMCRYPT_FDEF_DIGIT_NUINT32) PUINT32 pDst)
UINT32 SYMCRYPT_CALL SymCryptFdefSizeofModElementFromModulus(PCSYMCRYPT_MODULUS pmMod)
Definition: fdef_mod.c:194
UINT32 SYMCRYPT_CALL SymCryptFdefSizeofDivisorFromDigits(UINT32 nDigits)
Definition: fdef_general.c:826
SYMCRYPT_ERROR SYMCRYPT_CALL SymCryptMontgomeryPointScalarMul(_In_ PCSYMCRYPT_ECURVE pCurve, _In_ PCSYMCRYPT_INT piScalar, _In_opt_ PCSYMCRYPT_ECPOINT poSrc, UINT32 flags, _Out_ PSYMCRYPT_ECPOINT poDst, _Out_writes_bytes_(cbScratch) PBYTE pbScratch, SIZE_T cbScratch)
BOOLEAN hasPrivateSeed
Definition: sc_lib.h:4449
PSYMCRYPT_DIVISOR SYMCRYPT_CALL SymCryptFdefDivisorFromModulus(_In_ PSYMCRYPT_MODULUS pmSrc)
Definition: fdef_mod.c:265
VOID SYMCRYPT_CALL SymCryptFdefModSquareMontgomeryMulx1024(_In_ PCSYMCRYPT_MODULUS pMod, _In_ PCSYMCRYPT_MODELEMENT pSrc, _Out_ PSYMCRYPT_MODELEMENT pDst, _Out_writes_bytes_(cbScratch) PBYTE pbScratch, SIZE_T cbScratch)
SYMCRYPT_ERROR SYMCRYPT_CALL SymCryptFdefIntGetValue(_In_ PCSYMCRYPT_INT piSrc, _Out_writes_bytes_(cbDst) PBYTE pbDst, SIZE_T cbDst, SYMCRYPT_NUMBER_FORMAT format)
Definition: fdef_general.c:695
VOID(SYMCRYPT_CALL * PSYMCRYPT_ECPOINT_ADD_FUNC)(_In_ PCSYMCRYPT_ECURVE pCurve, _In_ PCSYMCRYPT_ECPOINT poSrc1, _In_ PCSYMCRYPT_ECPOINT poSrc2, _Out_ PSYMCRYPT_ECPOINT poDst, UINT32 flags, _Out_writes_bytes_(cbScratch) PBYTE pbScratch, SIZE_T cbScratch)
Definition: sc_lib.h:3842
FORCEINLINE UINT32 SymCryptCountLeadingZeros32(UINT32 value)
Definition: sc_lib.h:5079
VOID SYMCRYPT_CALL SymCryptEcurveFillScratchSpaces(_Inout_ PSYMCRYPT_ECURVE pCurve)
Definition: ec_dispatch.c:296
VOID SYMCRYPT_CALL SymCryptFdefModMulGeneric(_In_ PCSYMCRYPT_MODULUS pMod, _In_ PCSYMCRYPT_MODELEMENT pSrc1, _In_ PCSYMCRYPT_MODELEMENT pSrc2, _Out_ PSYMCRYPT_MODELEMENT pDst, _Out_writes_bytes_(cbScratch) PBYTE pbScratch, SIZE_T cbScratch)
Definition: fdef_mod.c:909
struct _SYMCRYPT_XMSS_INCREMENTAL_TREEHASH_CONTEXT SYMCRYPT_XMSS_INCREMENTAL_TREEHASH_CONTEXT
VOID SYMCRYPT_CALL SymCryptShortWeierstrassSetDistinguished(_In_ PCSYMCRYPT_ECURVE pCurve, _Out_ PSYMCRYPT_ECPOINT poDst, _Out_writes_bytes_(cbScratch) PBYTE pbScratch, SIZE_T cbScratch)
VOID SYMCRYPT_CALL SymCryptFdefModSetPostMontgomeryMulxP384(_In_ PCSYMCRYPT_MODULUS pmMod, _Inout_ PSYMCRYPT_MODELEMENT peObj, _Out_writes_bytes_(cbScratch) PBYTE pbScratch, SIZE_T cbScratch)
VOID SYMCRYPT_CALL SymCryptFdef369RawMul(_In_reads_(nDigits1 *SYMCRYPT_FDEF_DIGIT_NUINT32) PCUINT32 pSrc1, UINT32 nDigits1, _In_reads_(nDigits2 *SYMCRYPT_FDEF_DIGIT_NUINT32) PCUINT32 pSrc2, UINT32 nDigits2, _Out_writes_((nDigits1+nDigits2) *SYMCRYPT_FDEF_DIGIT_NUINT32) PUINT32 pDst)
VOID SYMCRYPT_CALL SymCryptAesDecryptNeon(_In_ PCSYMCRYPT_AES_EXPANDED_KEY pExpandedKey, _In_reads_(SYMCRYPT_AES_BLOCK_SIZE) PCBYTE pbSrc, _Out_writes_(SYMCRYPT_AES_BLOCK_SIZE) PBYTE pbDst)
VOID SYMCRYPT_CALL SymCryptAesCtrMsb64Asm(_In_ PCSYMCRYPT_AES_EXPANDED_KEY pExpandedKey, _Inout_updates_(SYMCRYPT_AES_BLOCK_SIZE) PBYTE pbChainingValue, _In_reads_(cbData) PCBYTE pbSrc, _Out_writes_(cbData) PBYTE pbDst, SIZE_T cbData)
PSYMCRYPT_INCREMENTAL_TREEHASH SYMCRYPT_CALL SymCryptHbsIncrementalTreehashInit(UINT32 nLeaves, PBYTE pbBuffer, SIZE_T cbBuffer, UINT32 cbHashResult, PSYMCRYPT_INCREMENTAL_TREEHASH_FUNC funcCompressNodes, PSYMCRYPT_XMSS_INCREMENTAL_TREEHASH_CONTEXT pContext)
Definition: xmss.c:582
VOID(SYMCRYPT_CALL * PSYMCRYPT_ECPOINT_SET_ZERO_FUNC)(_In_ PCSYMCRYPT_ECURVE pCurve, _Out_ PSYMCRYPT_ECPOINT poDst, _Out_writes_bytes_(cbScratch) PBYTE pbScratch, SIZE_T cbScratch)
Definition: sc_lib.h:3797
const PCSYMCRYPT_DLGROUP_DH_SAFEPRIME_PARAMS SymCryptNamedSafePrimeGroups[SYMCRYPT_DH_SAFEPRIME_GROUP_COUNT]
const PCSYMCRYPT_DLGROUP_DH_SAFEPRIME_PARAMS SymCryptDlgroupDhSafePrimeParamsffdhe2048
FORCEINLINE VOID SYMCRYPT_CALL SymCryptMsbFirstToUint32(_In_reads_(4 *cuResult) PCBYTE pbData, _Out_writes_(cuResult) PUINT32 puResult, SIZE_T cuResult)
Definition: sc_lib.h:422
UINT32 SYMCRYPT_CALL SymCryptFdefRawNeg(_In_reads_bytes_(nDigits *SYMCRYPT_FDEF_DIGIT_SIZE) PCUINT32 pSrc1, UINT32 carryIn, _Out_writes_bytes_(nDigits *SYMCRYPT_FDEF_DIGIT_SIZE) PUINT32 pDst, UINT32 nDigits)
Definition: fdef_int.c:213
UINT32 SYMCRYPT_CALL SymCryptFdefNumberofDigitsFromInt(_In_ PCSYMCRYPT_INT piSrc)
Definition: fdef_general.c:337
const SYMCRYPT_HASH SymCryptSha3_256Algorithm_default
Definition: sha3_256.c:14
FORCEINLINE UINT32 SymCryptCountTrailingZeros32(UINT32 value)
Definition: sc_lib.h:5020
struct _SYMCRYPT_BLOB_TRAILER SYMCRYPT_BLOB_TRAILER
SYMCRYPT_CACHED_ECURVE_ID
Definition: sc_lib.h:4357
@ SYMCRYPT_CACHED_ECURVE_ID_CURVE_25519
Definition: sc_lib.h:4360
@ SYMCRYPT_CACHED_ECURVE_ID_NIST_P256
Definition: sc_lib.h:4358
@ SYMCRYPT_CACHED_ECURVE_ID_COUNT
Definition: sc_lib.h:4361
@ SYMCRYPT_CACHED_ECURVE_ID_NIST_P384
Definition: sc_lib.h:4359
enum SYMCRYPT_CACHED_ECURVE_ID * PSYMCRYPT_CACHED_ECURVE_ID
const UINT32 g_SymCryptModFnsMask
Definition: a_dispatch.c:72
PSYMCRYPT_INT SYMCRYPT_CALL SymCryptFdefIntCreate(_Out_writes_bytes_(cbBuffer) PBYTE pbBuffer, SIZE_T cbBuffer, UINT32 nDigits)
Definition: fdef_general.c:213
#define PAR_SCRATCH_ELEMENTS_256
Definition: sc_lib.h:1767
VOID SYMCRYPT_CALL SymCryptKeccakStateExport(SYMCRYPT_BLOB_TYPE type, _In_ PCSYMCRYPT_KECCAK_STATE pState, _Out_writes_bytes_(SYMCRYPT_KECCAK_STATE_EXPORT_SIZE) PBYTE pbBlob)
Definition: sha3.c:479
UINT64 SymCryptInverseMod2e64(UINT64 m)
Definition: fdef_general.c:932
struct _SYMCRYPT_DLGROUP_DH_SAFEPRIME_PARAMS SYMCRYPT_DLGROUP_DH_SAFEPRIME_PARAMS
FORCEINLINE VOID SYMCRYPT_CALL SymCryptCheckLibraryInitialized(void)
Definition: sc_lib.h:296
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)
Definition: xtsaes.c:444
VOID SYMCRYPT_CALL SymCryptFdef369MontgomeryReduce(_In_ PCSYMCRYPT_MODULUS pmMod, _Inout_ PUINT32 pSrc, _Out_ PUINT32 pDst)
VOID(SYMCRYPT_CALL * SYMCRYPT_MOD_UNARY_OP_FN)(_In_ PCSYMCRYPT_MODULUS pmMod, _In_ PCSYMCRYPT_MODELEMENT peSrc, _Out_ PSYMCRYPT_MODELEMENT peDst, _Out_writes_bytes_(cbScratch) PBYTE pbScratch, SIZE_T cbScratch)
Definition: sc_lib.h:1937
VOID SYMCRYPT_CALL SymCryptAesGcmDecryptStitchedXmm(_In_ PCSYMCRYPT_AES_EXPANDED_KEY pExpandedKey, _In_reads_(SYMCRYPT_AES_BLOCK_SIZE) PBYTE pbChainingValue, _In_reads_(SYMCRYPT_GF128_FIELD_SIZE) PCSYMCRYPT_GF128_ELEMENT expandedKeyTable, _Inout_ PSYMCRYPT_GF128_ELEMENT pState, _In_reads_(cbData) PCBYTE pbSrc, _Out_writes_(cbData) PBYTE pbDst, SIZE_T cbData)
VOID SYMCRYPT_CALL SymCryptFdefIntConditionalCopy(_In_ PCSYMCRYPT_INT piSrc, _Inout_ PSYMCRYPT_INT piDst, UINT32 cond)
Definition: fdef_general.c:298
VOID SYMCRYPT_CALL SymCryptFdefModSub384Asm(_In_ PCSYMCRYPT_MODULUS pmMod, _In_ PCSYMCRYPT_MODELEMENT peSrc1, _In_ PCSYMCRYPT_MODELEMENT peSrc2, _Out_ PSYMCRYPT_MODELEMENT peDst)
VOID SYMCRYPT_CALL SymCryptMarvin32AppendBlocks(_Inout_ PSYMCRYPT_MARVIN32_CHAINING_STATE pChain, _In_reads_(cbData) PCBYTE pbData, SIZE_T cbData)
Definition: marvin32.c:194
VOID SYMCRYPT_CALL SymCryptTwistedEdwardsAdd(_In_ PCSYMCRYPT_ECURVE pCurve, _In_ PCSYMCRYPT_ECPOINT poSrc1, _In_ PCSYMCRYPT_ECPOINT poSrc2, _Out_ PSYMCRYPT_ECPOINT poDst, UINT32 flags, _Out_writes_bytes_(cbScratch) PBYTE pbScratch, SIZE_T cbScratch)
VOID SYMCRYPT_CALL SymCryptAesGcmEncryptStitchedYmm_2048(_In_ PCSYMCRYPT_AES_EXPANDED_KEY pExpandedKey, _In_reads_(SYMCRYPT_AES_BLOCK_SIZE) PBYTE pbChainingValue, _In_reads_(SYMCRYPT_GF128_FIELD_SIZE) PCSYMCRYPT_GF128_ELEMENT expandedKeyTable, _Inout_ PSYMCRYPT_GF128_ELEMENT pState, _In_reads_(cbData) PCBYTE pbSrc, _Out_writes_(cbData) PBYTE pbDst, SIZE_T cbData)
UINT32 SYMCRYPT_CALL SymCryptFdefIntSubMixedSize(_In_ PCSYMCRYPT_INT piSrc1, _In_ PCSYMCRYPT_INT piSrc2, _Out_ PSYMCRYPT_INT piDst)
Definition: fdef_int.c:260
SYMCRYPT_ERROR(SYMCRYPT_CALL * SYMCRYPT_MOD_UNARY_OP_FLAG_STATUS_FN)(_In_ PCSYMCRYPT_MODULUS pmMod, _In_ PCSYMCRYPT_MODELEMENT peSrc, _Out_ PSYMCRYPT_MODELEMENT peDst, UINT32 flags, _Out_writes_bytes_(cbScratch) PBYTE pbScratch, SIZE_T cbScratch)
Definition: sc_lib.h:1944
PSYMCRYPT_DIVISOR SYMCRYPT_CALL SymCryptFdefDivisorAllocate(UINT32 nDigits)
Definition: fdef_general.c:796
PCUINT32(SYMCRYPT_CALL * SYMCRYPT_MOD_PRE_GET_FN)(_In_ PCSYMCRYPT_MODULUS pmMod, _In_ PCSYMCRYPT_MODELEMENT peObj, _Out_writes_bytes_(cbScratch) PBYTE pbScratch, SIZE_T cbScratch)
Definition: sc_lib.h:1958
SYMCRYPT_KECCAK_STATE_EXPORT_BLOB SYMCRYPT_SHA3_384_STATE_EXPORT_BLOB
Definition: sc_lib.h:1180
VOID SYMCRYPT_CALL SymCryptFdefModSquareMontgomery(_In_ PCSYMCRYPT_MODULUS pMod, _In_ PCSYMCRYPT_MODELEMENT pSrc, _Out_ PSYMCRYPT_MODELEMENT pDst, _Out_writes_bytes_(cbScratch) PBYTE pbScratch, SIZE_T cbScratch)
Definition: fdef_mod.c:1380
SYMCRYPT_ASYM_ALIGN_STRUCT _SYMCRYPT_XMSS_KEY
Definition: sc_lib.h:4520
SYMCRYPT_KECCAK_STATE_EXPORT_BLOB SYMCRYPT_SHA3_224_STATE_EXPORT_BLOB
Definition: sc_lib.h:1178
VOID SYMCRYPT_CALL SymCryptFdefMaskedCopyAsm(_In_reads_bytes_(nDigits *SYMCRYPT_FDEF_DIGIT_SIZE) PCBYTE pbSrc, _Inout_updates_bytes_(nDigits *SYMCRYPT_FDEF_DIGIT_SIZE) PBYTE pbDst, UINT32 nDigits, UINT32 mask)
SYMCRYPT_ERROR SymCryptFdefIntCopyMixedSize(_In_ PCSYMCRYPT_INT piSrc, _Out_ PSYMCRYPT_INT piDst)
Definition: fdef_general.c:343
VOID SYMCRYPT_CALL SymCryptTwistedEdwardsAddDiffNonZero(_In_ PCSYMCRYPT_ECURVE pCurve, _In_ PCSYMCRYPT_ECPOINT poSrc1, _In_ PCSYMCRYPT_ECPOINT poSrc2, _Out_ PSYMCRYPT_ECPOINT poDst, _Out_writes_bytes_(cbScratch) PBYTE pbScratch, SIZE_T cbScratch)
VOID SymCryptFdefModElementConditionalSwap(_In_ PCSYMCRYPT_MODULUS pmMod, _Inout_ PSYMCRYPT_MODELEMENT peData1, _Inout_ PSYMCRYPT_MODELEMENT peData2, _In_ UINT32 cond)
Definition: fdef_mod.c:271
VOID SYMCRYPT_CALL SymCryptFdefClaimScratch(PBYTE pbScratch, SIZE_T cbScratch, SIZE_T cbMin)
Definition: fdef_general.c:912
struct _SYMCRYPT_COMPOSITE_MLKEM_INTERNAL_PARAMS SYMCRYPT_COMPOSITE_MLKEM_INTERNAL_PARAMS
VOID SYMCRYPT_CALL SymCryptGHashAppendData(_In_ PCSYMCRYPT_GHASH_EXPANDED_KEY expandedKey, _Inout_ PSYMCRYPT_GF128_ELEMENT pState, _In_reads_(cbData) PCBYTE pbData, SIZE_T cbData)
Definition: ghash.c:884
PSYMCRYPT_MODELEMENT SYMCRYPT_CALL SymCryptFdefModElementAllocate(_In_ PCSYMCRYPT_MODULUS pmMod)
Definition: fdef_mod.c:157
struct _XMSS_ADRS * PXMSS_ADRS
VOID SYMCRYPT_CALL SymCryptFdef369ModulusInitMontgomery(_Inout_ PSYMCRYPT_MODULUS pmObj, _Out_writes_bytes_(cbScratch) PBYTE pbScratch, SIZE_T cbScratch)
const PCSYMCRYPT_ECURVE_PARAMS_V2_EXTENSION SymCryptEcurveParamsV2ExtensionTwistedEdwards
UINT64 nNextUnusedLeaf
Definition: sc_lib.h:4723
VOID SYMCRYPT_CALL SymCryptAesEncryptXmm(_In_ PCSYMCRYPT_AES_EXPANDED_KEY pExpandedKey, _In_reads_(SYMCRYPT_AES_BLOCK_SIZE) PCBYTE pbSrc, _Out_writes_(SYMCRYPT_AES_BLOCK_SIZE) PBYTE pbDst)
const SYMCRYPT_HASH SymCryptSha384Algorithm_default
Definition: sha512.c:117
VOID SYMCRYPT_CALL SymCryptFdef369ModSetPostMontgomery(_In_ PCSYMCRYPT_MODULUS pmMod, _Inout_ PSYMCRYPT_MODELEMENT peObj, _Out_writes_bytes_(cbScratch) PBYTE pbScratch, SIZE_T cbScratch)
const BYTE SymCryptSha256KATAnswer[32]
Definition: sha256.c:476
VOID SYMCRYPT_CALL SymCryptPositiveWidthNafRecoding(UINT32 W, _In_ PCSYMCRYPT_INT piK, UINT32 nBitsExp, _Out_writes_(nRecodedDigits) PUINT32 absofKIs, UINT32 nRecodedDigits)
Definition: recoding.c:180
VOID SYMCRYPT_CALL SymCryptFdef369ModSubGeneric(_In_ PCSYMCRYPT_MODULUS pmMod, _In_ PCSYMCRYPT_MODELEMENT peSrc1, _In_ PCSYMCRYPT_MODELEMENT peSrc2, _Out_ PSYMCRYPT_MODELEMENT peDst, _Out_writes_bytes_(cbScratch) PBYTE pbScratch, SIZE_T cbScratch)
VOID SYMCRYPT_CALL SymCryptXtsAesEncryptDataUnitNeon(_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 SymCryptFdef369MontgomeryReduceAsm(_In_ PCSYMCRYPT_MODULUS pmMod, _Inout_ PUINT32 pSrc, _Out_ PUINT32 pDst)
VOID SYMCRYPT_CALL SymCryptFdefModAdd256Asm(_In_ PCSYMCRYPT_MODULUS pmMod, _In_ PCSYMCRYPT_MODELEMENT peSrc1, _In_ PCSYMCRYPT_MODELEMENT peSrc2, _Out_ PSYMCRYPT_MODELEMENT peDst)
UINT32 SYMCRYPT_CALL SymCryptFdefSizeofIntFromDigits(UINT32 nDigits)
Definition: fdef_general.c:196
SYMCRYPT_XMSS_PARAMS params
Definition: sc_lib.h:4523
VOID SYMCRYPT_CALL SymCryptShortWeierstrassDoubleSpecializedAm3(_In_ PCSYMCRYPT_ECURVE pCurve, _In_ PCSYMCRYPT_ECPOINT poSrc, _Out_ PSYMCRYPT_ECPOINT poDst, UINT32 flags, _Out_writes_bytes_(cbScratch) PBYTE pbScratch, SIZE_T cbScratch)
struct _SYMCRYPT_INCREMENTAL_TREEHASH SYMCRYPT_INCREMENTAL_TREEHASH
PSYMCRYPT_TREEHASH_NODE SYMCRYPT_CALL SymCryptHbsIncrementalTreehashProcess(_Inout_ PSYMCRYPT_INCREMENTAL_TREEHASH pIncHash)
Definition: xmss.c:686
SYMCRYPT_ERROR SYMCRYPT_CALL SymCryptFdefRawGetValue(_In_reads_(nDigits *SYMCRYPT_FDEF_DIGIT_NUINT32) PCUINT32 pSrc, UINT32 nDigits, _Out_writes_bytes_(cbDst) PBYTE pbDst, SIZE_T cbDst, SYMCRYPT_NUMBER_FORMAT format)
Definition: fdef_general.c:619
const SYMCRYPT_BLOCKCIPHER SymCryptAesBlockCipherNoOpt
Definition: aes-default.c:20
enum _SYMCRYPT_BLOB_TYPE SYMCRYPT_BLOB_TYPE
VOID SYMCRYPT_CALL SymCryptFdefIntSetValueUint32(UINT32 u32Src, _Out_ PSYMCRYPT_INT piDst)
Definition: fdef_general.c:497
VOID SYMCRYPT_CALL SymCryptShortWeierstrassNegate(_In_ PCSYMCRYPT_ECURVE pCurve, _Inout_ PSYMCRYPT_ECPOINT poSrc, UINT32 mask, _Out_writes_bytes_(cbScratch) PBYTE pbScratch, SIZE_T cbScratch)
VOID SYMCRYPT_CALL SymCryptFdefMontgomeryReduce1024Asm(_In_ PCSYMCRYPT_MODULUS pmMod, _Inout_ PUINT32 pSrc, _Out_ PUINT32 pDst)
VOID SYMCRYPT_CALL SymCryptModExpGeneric(_In_ PCSYMCRYPT_MODULUS pmMod, _In_ PCSYMCRYPT_MODELEMENT peBase, _In_ PCSYMCRYPT_INT piExp, UINT32 nBitsExp, UINT32 flags, _Out_ PSYMCRYPT_MODELEMENT peDst, _Out_writes_bytes_(cbScratch) PBYTE pbScratch, SIZE_T cbScratch)
Definition: modexp.c:217
BYTE abSeed[SYMCRYPT_LMS_MAX_N]
Definition: sc_lib.h:4735
UINT32 SYMCRYPT_CALL SymCryptFdefSizeofModulusFromDigits(UINT32 nDigits)
Definition: fdef_mod.c:49
struct _SYMCRYPT_MD5_STATE_EXPORT_BLOB SYMCRYPT_MD5_STATE_EXPORT_BLOB
VOID SYMCRYPT_CALL SymCryptFdefRawMul(_In_reads_(nDigits1 *SYMCRYPT_FDEF_DIGIT_NUINT32) PCUINT32 pSrc1, UINT32 nDigits1, _In_reads_(nDigits2 *SYMCRYPT_FDEF_DIGIT_NUINT32) PCUINT32 pSrc2, UINT32 nDigits2, _Out_writes_((nDigits1+nDigits2) *SYMCRYPT_FDEF_DIGIT_NUINT32) PUINT32 pDst)
Definition: fdef_int.c:773
UINT32 SYMCRYPT_CALL SymCryptFdefRawAddAsm(_In_reads_bytes_(nDigits *SYMCRYPT_FDEF_DIGIT_SIZE) PCUINT32 Src1, _In_reads_bytes_(nDigits *SYMCRYPT_FDEF_DIGIT_SIZE) PCUINT32 Src2, _Out_writes_bytes_(nDigits *SYMCRYPT_FDEF_DIGIT_SIZE) PUINT32 Dst, UINT32 nDigits)
VOID SYMCRYPT_CALL SymCryptFdefModAddMulx384Asm(_In_ PCSYMCRYPT_MODULUS pmMod, _In_ PCSYMCRYPT_MODELEMENT peSrc1, _In_ PCSYMCRYPT_MODELEMENT peSrc2, _Out_ PSYMCRYPT_MODELEMENT peDst)
VOID SymCryptFdefIntCopy(_In_ PCSYMCRYPT_INT piSrc, _Out_ PSYMCRYPT_INT piDst)
Definition: fdef_general.c:259
VOID SYMCRYPT_CALL SymCryptKeccakExtract(_Inout_ PSYMCRYPT_KECCAK_STATE pState, _Out_writes_(cbResult) PBYTE pbResult, SIZE_T cbResult, BOOLEAN bWipe)
Definition: sha3.c:411
VOID SYMCRYPT_CALL SymCryptAesCreateDecryptionRoundKeyNeon(_In_reads_(16) PCBYTE pEncryptionRoundKey, _Out_writes_(16) PBYTE pDecryptionRoundKey)
VOID SYMCRYPT_CALL SymCryptAesCreateDecryptionRoundKeyXmm(_In_reads_(16) PCBYTE pEncryptionRoundKey, _Out_writes_(16) PBYTE pDecryptionRoundKey)
VOID SYMCRYPT_CALL SymCryptFdefModMulMontgomeryMulxP384Asm(_In_ PCSYMCRYPT_MODULUS pMod, _In_ PCSYMCRYPT_MODELEMENT pSrc1, _In_ PCSYMCRYPT_MODELEMENT pSrc2, _Out_ PSYMCRYPT_MODELEMENT pDst)
VOID SYMCRYPT_CALL SymCryptShortWeierstrassDouble(_In_ PCSYMCRYPT_ECURVE pCurve, _In_ PCSYMCRYPT_ECPOINT poSrc, _Out_ PSYMCRYPT_ECPOINT poDst, UINT32 flags, _Out_writes_bytes_(cbScratch) PBYTE pbScratch, SIZE_T cbScratch)
SYMCRYPT_ERROR SYMCRYPT_CALL SymCryptCompositeMlKemGetRandomScalarForEcKeyEx(SYMCRYPT_CACHED_ECURVE_ID ecurveId, SYMCRYPT_NUMBER_FORMAT numFormat, _In_reads_bytes_(cbSeed) PCBYTE pbSeed, SIZE_T cbSeed, _Out_writes_bytes_(cbScalar) PBYTE pbScalar, SIZE_T cbScalar)
VOID SYMCRYPT_CALL SymCryptFdefModSquareMontgomery256Asm(_In_ PCSYMCRYPT_MODULUS pMod, _In_ PCSYMCRYPT_MODELEMENT pSrc1, _In_ PCSYMCRYPT_MODELEMENT pSrc2, _Out_ PSYMCRYPT_MODELEMENT pDst)
const UINT32 SymCryptEcpointFormatNumberofElements[4]
Definition: ecpoint.c:11
VOID SYMCRYPT_CALL SymCryptFdefModSquareMontgomeryMulx(_In_ PCSYMCRYPT_MODULUS pMod, _In_ PCSYMCRYPT_MODELEMENT pSrc, _Out_ PSYMCRYPT_MODELEMENT pDst, _Out_writes_bytes_(cbScratch) PBYTE pbScratch, SIZE_T cbScratch)
VOID SYMCRYPT_CALL SymCryptFdefRawMul1024Asm(_In_reads_(nDigits *SYMCRYPT_FDEF_DIGIT_NUINT32) PCUINT32 pSrc1, _In_reads_(nDigits *SYMCRYPT_FDEF_DIGIT_NUINT32) PCUINT32 pSrc2, UINT32 nDigits, _Out_writes_(2 *nDigits *SYMCRYPT_FDEF_DIGIT_NUINT32) PUINT32 pDst)
const SYMCRYPT_MODULAR_FUNCTIONS g_SymCryptModFns[]
Definition: a_dispatch.c:21
SYMCRYPT_ERROR SYMCRYPT_CALL SymCryptDsaPct(PCSYMCRYPT_DLKEY pkDlkey)
UINT32 SYMCRYPT_CALL SymCryptFdefRawAddUint32(_In_reads_bytes_(nDigits *SYMCRYPT_FDEF_DIGIT_SIZE) PCUINT32 Src1, UINT32 Src2, _Out_writes_bytes_(nDigits *SYMCRYPT_FDEF_DIGIT_SIZE) PUINT32 Dst, UINT32 nDigits)
Definition: fdef_int.c:61
const PCSYMCRYPT_DLGROUP_DH_SAFEPRIME_PARAMS SymCryptDlgroupDhSafePrimeParamsffdhe4096
VOID(SYMCRYPT_CALL * SYMCRYPT_MOD_BINARY_OP_FN)(_In_ PCSYMCRYPT_MODULUS pmMod, _In_ PCSYMCRYPT_MODELEMENT peSrc1, _In_ PCSYMCRYPT_MODELEMENT peSrc2, _Out_ PSYMCRYPT_MODELEMENT peDst, _Out_writes_bytes_(cbScratch) PBYTE pbScratch, SIZE_T cbScratch)
Definition: sc_lib.h:1929
struct _SYMCRYPT_BLOB_HEADER SYMCRYPT_BLOB_HEADER
VOID SYMCRYPT_CALL SymCryptXtsAesEncryptDataUnitZmm_2048(_In_ PCSYMCRYPT_AES_EXPANDED_KEY pExpandedKey, _Inout_updates_(SYMCRYPT_AES_BLOCK_SIZE) PBYTE pbTweakBlock, _Out_writes_(SYMCRYPT_AES_BLOCK_SIZE *16) PBYTE pbScratch, _In_reads_(cbData) PCBYTE pbSrc, _Out_writes_(cbData) PBYTE pbDst, SIZE_T cbData)
VOID SYMCRYPT_CALL SymCryptSha512AppendBlocks_ymm_avx512vl_asm(_Inout_ SYMCRYPT_SHA512_CHAINING_STATE *pChain, _In_reads_(cbData) PCBYTE pbData, SIZE_T cbData, _Out_ SIZE_T *pcbRemaining)
const PCSYMCRYPT_PARALLEL_HASH SymCryptParallelSha256Algorithm
VOID SYMCRYPT_CALL SymCryptFdefIntSetValueUint64(UINT64 u64Src, _Out_ PSYMCRYPT_INT piDst)
Definition: fdef_general.c:511
PCUINT32 SYMCRYPT_CALL SymCryptFdefModPreGetGeneric(_In_ PCSYMCRYPT_MODULUS pmMod, _In_ PCSYMCRYPT_MODELEMENT peObj, _Out_writes_bytes_(cbScratch) PBYTE pbScratch, SIZE_T cbScratch)
Definition: fdef_mod.c:368
const PCSYMCRYPT_DLGROUP_DH_SAFEPRIME_PARAMS SymCryptDlgroupDhSafePrimeParamsffdhe6144
VOID SYMCRYPT_CALL SymCryptCtrMsb32(_In_ PCSYMCRYPT_BLOCKCIPHER pBlockCipher, _In_ PCVOID pExpandedKey, _Inout_updates_(pBlockCipher->blockSize) PBYTE pbChainingValue, _In_reads_(cbData) PCBYTE pbSrc, _Out_writes_(cbData) PBYTE pbDst, SIZE_T cbData)
SYMCRYPT_ERROR SYMCRYPT_CALL SymCryptEcDsaPct(PCSYMCRYPT_ECKEY pkEckey)
VOID SYMCRYPT_CALL SymCryptHbsIncrementalTreehashGetTopNodes(_Inout_ PSYMCRYPT_INCREMENTAL_TREEHASH pIncHash, _Out_ PSYMCRYPT_TREEHASH_NODE *ppNodeLeft, _Out_ PSYMCRYPT_TREEHASH_NODE *ppNodeRight)
Definition: xmss.c:642
#define CHECK_ALGORITHM_INFO_FLAG_POW2(flag)
Definition: sc_lib.h:3708
PSYMCRYPT_TREEHASH_NODE SYMCRYPT_CALL SymCryptHbsIncrementalTreehashAllocNode(_Inout_ PSYMCRYPT_INCREMENTAL_TREEHASH pIncHash, UINT32 nLeafIndex)
Definition: xmss.c:623
VOID SYMCRYPT_CALL SymCryptGHashAppendDataNeon(_In_reads_(SYMCRYPT_GF128_FIELD_SIZE) PCSYMCRYPT_GF128_ELEMENT expandedKeyTable, _Inout_ PSYMCRYPT_GF128_ELEMENT pState, _In_reads_(cbData) PCBYTE pbData, SIZE_T cbData)
UINT32 SYMCRYPT_CALL SymCryptFdefIntAddMixedSize(_In_ PCSYMCRYPT_INT piSrc1, _In_ PCSYMCRYPT_INT piSrc2, _Out_ PSYMCRYPT_INT piDst)
Definition: fdef_int.c:113
@ STATE_NEXT
Definition: sc_lib.h:345
@ STATE_RESULT_DONE
Definition: sc_lib.h:349
@ STATE_DATA_START
Definition: sc_lib.h:346
@ STATE_RESULT2
Definition: sc_lib.h:348
@ STATE_DATA_END
Definition: sc_lib.h:347
VOID SYMCRYPT_CALL SymCryptTwistedEdwardsSetDistinguished(_In_ PCSYMCRYPT_ECURVE pCurve, _Out_ PSYMCRYPT_ECPOINT poDst, _Out_writes_bytes_(cbScratch) PBYTE pbScratch, SIZE_T cbScratch)
VOID SYMCRYPT_CALL SymCryptInitEnvCommon(UINT32 version)
Definition: libmain.c:43
VOID SYMCRYPT_CALL SymCryptFdefModDivSmallPow2Asm(_In_ PCSYMCRYPT_MODULUS pmMod, _In_ PCSYMCRYPT_MODELEMENT peSrc, _In_range_(1, NATIVE_BITS) UINT32 exp, _Out_ PSYMCRYPT_MODELEMENT peDst)
const SYMCRYPT_HASH SymCryptShake256HashAlgorithm_default
Definition: shake.c:80
#define SYMCRYPT_FDEF_DIGIT_NUINT32
Definition: sc_lib.h:1916
VOID SYMCRYPT_CALL SymCryptFdefIntSetBits(_In_ PSYMCRYPT_INT piDst, UINT32 value, UINT32 iBit, UINT32 nBits)
Definition: fdef_int.c:627
_Analysis_noreturn_ VOID SYMCRYPT_CALL SymCryptFatalHang(UINT32 fatalcode)
Definition: libmain.c:101
VOID SYMCRYPT_CALL SymCryptSha256AppendBlocks_xmm_ssse3_asm(_Inout_ SYMCRYPT_SHA256_CHAINING_STATE *pChain, _In_reads_(cbData) PCBYTE pbData, SIZE_T cbData, _Out_ SIZE_T *pcbRemaining)
UINT32 SYMCRYPT_CALL SymCryptShortWeierstrassOnCurve(_In_ PCSYMCRYPT_ECURVE pCurve, _In_ PCSYMCRYPT_ECPOINT poSrc, _Out_writes_bytes_(cbScratch) PBYTE pbScratch, SIZE_T cbScratch)
const PCSYMCRYPT_DLGROUP_DH_SAFEPRIME_PARAMS SymCryptDlgroupDhSafePrimeParamsModp2048
VOID SYMCRYPT_CALL SymCryptAesEncryptC(_In_ PCSYMCRYPT_AES_EXPANDED_KEY pExpandedKey, _In_reads_(SYMCRYPT_AES_BLOCK_SIZE) PCBYTE pbSrc, _Out_writes_(SYMCRYPT_AES_BLOCK_SIZE) PBYTE pbDst)
Definition: aes-c.c:115
UINT32 SYMCRYPT_CALL SymCryptFdef369RawAddAsm(_In_reads_bytes_(nDigits *SYMCRYPT_FDEF_DIGIT_SIZE) PCUINT32 Src1, _In_reads_bytes_(nDigits *SYMCRYPT_FDEF_DIGIT_SIZE) PCUINT32 Src2, _Out_writes_bytes_(nDigits *SYMCRYPT_FDEF_DIGIT_SIZE) PUINT32 Dst, UINT32 nDigits)
FORCEINLINE VOID SYMCRYPT_CALL XorByteIntoBuffer(_Inout_updates_(8 *cqBuf) PBYTE pbBuf, SIZE_T cqBuf, BYTE v)
Definition: sc_lib.h:915
VOID SYMCRYPT_CALL SymCryptFdefModDivSmallPow2(_In_ PCSYMCRYPT_MODULUS pmMod, _In_ PCSYMCRYPT_MODELEMENT peSrc, _In_range_(1, NATIVE_BITS) UINT32 exp, _Out_ PSYMCRYPT_MODELEMENT peDst)
Definition: fdef_mod.c:844
VOID SYMCRYPT_CALL SymCryptFdefModAddMulx256Asm(_In_ PCSYMCRYPT_MODULUS pmMod, _In_ PCSYMCRYPT_MODELEMENT peSrc1, _In_ PCSYMCRYPT_MODELEMENT peSrc2, _Out_ PSYMCRYPT_MODELEMENT peDst)
VOID SYMCRYPT_CALL SymCryptShortWeierstrassAddDiffNonZero(_In_ PCSYMCRYPT_ECURVE pCurve, _In_ PCSYMCRYPT_ECPOINT poSrc1, _In_ PCSYMCRYPT_ECPOINT poSrc2, _Out_ PSYMCRYPT_ECPOINT poDst, _Out_writes_bytes_(cbScratch) PBYTE pbScratch, SIZE_T cbScratch)
SIZE_T SYMCRYPT_CALL SymCryptHbsSizeofScratchBytesForIncrementalTreehash(UINT32 cbNode, UINT32 nLeaves)
Definition: xmss.c:719
PCUINT32 SYMCRYPT_CALL SymCryptFdefModPreGetMontgomery256(_In_ PCSYMCRYPT_MODULUS pmMod, _In_ PCSYMCRYPT_MODELEMENT peObj, _Out_writes_bytes_(cbScratch) PBYTE pbScratch, SIZE_T cbScratch)
#define NATIVE_BITS
Definition: sc_lib.h:78
PSYMCRYPT_INT SYMCRYPT_CALL SymCryptFdefIntFromModulus(_In_ PSYMCRYPT_MODULUS pmSrc)
Definition: fdef_mod.c:282
const SYMCRYPT_HASH SymCryptSha512_224Algorithm_default
Definition: sha512.c:143
VOID SYMCRYPT_CALL SymCryptFdefMontgomeryReduceAsm(_In_ PCSYMCRYPT_MODULUS pmMod, _Inout_ PUINT32 pSrc, _Out_ PUINT32 pDst)
SYMCRYPT_ERROR SYMCRYPT_CALL SymCryptEckeyGetValueCompositeEncodingSk(_In_ PCSYMCRYPT_ECKEY pEckey, SYMCRYPT_CACHED_ECURVE_ID curveId, _Out_writes_bytes_(cbDst) PBYTE pbDst, SIZE_T cbDst)
const PCSYMCRYPT_DLGROUP_DH_SAFEPRIME_PARAMS SymCryptDlgroupDhSafePrimeParamsModp4096
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)
Definition: xtsaes.c:610
VOID SYMCRYPT_CALL SymCryptFdefMontgomeryReduce256Asm(_In_ PCSYMCRYPT_MODULUS pmMod, _Inout_ PUINT32 pSrc, _Out_ PUINT32 pDst)
const PCSYMCRYPT_DLGROUP_DH_SAFEPRIME_PARAMS SymCryptDlgroupDhSafePrimeParamsModp3072
VOID SYMCRYPT_CALL SymCryptFdef369ModSquareMontgomery(_In_ PCSYMCRYPT_MODULUS pMod, _In_ PCSYMCRYPT_MODELEMENT pSrc, _Out_ PSYMCRYPT_MODELEMENT pDst, _Out_writes_bytes_(cbScratch) PBYTE pbScratch, SIZE_T cbScratch)
VOID SYMCRYPT_CALL SymCryptFdefIntToModElement(_In_ PCSYMCRYPT_INT piSrc, _In_ PCSYMCRYPT_MODULUS pmMod, _Out_ PSYMCRYPT_MODELEMENT peDst, _Out_writes_bytes_(cbScratch) PBYTE pbScratch, SIZE_T cbScratch)
Definition: fdef_mod.c:407
VOID SymCryptFdefModulusCopy(_In_ PCSYMCRYPT_MODULUS pmSrc, _Out_ PSYMCRYPT_MODULUS pmDst)
Definition: fdef_mod.c:124
struct _SYMCRYPT_COMPOSITE_MLKEM_INTERNAL_PARAMS * PSYMCRYPT_COMPOSITE_MLKEM_INTERNAL_PARAMS
SYMCRYPT_ERROR SYMCRYPT_CALL SymCryptFdefModElementGetValue(_In_ PCSYMCRYPT_MODULUS pmMod, _In_ PCSYMCRYPT_MODELEMENT peSrc, _Out_writes_bytes_(cbDst) PBYTE pbDst, SIZE_T cbDst, SYMCRYPT_NUMBER_FORMAT format, _Out_writes_bytes_(cbScratch) PBYTE pbScratch, SIZE_T cbScratch)
Definition: fdef_mod.c:484
VOID SYMCRYPT_CALL SymCryptFdefMontgomeryReduce512Asm(_In_ PCSYMCRYPT_MODULUS pmMod, _Inout_ PUINT32 pSrc, _Out_ PUINT32 pDst)
VOID SYMCRYPT_CALL SymCryptParallelSha256AppendBlocks_ymm(_Inout_updates_(8) PSYMCRYPT_SHA256_CHAINING_STATE *pChain, _Inout_updates_(8) PCBYTE *ppByte, SIZE_T nBytes, _Out_writes_(PAR_SCRATCH_ELEMENTS_256 *32) PBYTE pScratch)
FORCEINLINE VOID SYMCRYPT_CALL SymCryptUint64ToMsbFirst(_In_reads_(cuData) PCUINT64 puData, _Out_writes_(8 *cuData) PBYTE pbResult, SIZE_T cuData)
Definition: sc_lib.h:576
VOID SYMCRYPT_CALL SymCryptAesDecryptC(_In_ PCSYMCRYPT_AES_EXPANDED_KEY pExpandedKey, _In_reads_(SYMCRYPT_AES_BLOCK_SIZE) PCBYTE pbSrc, _Out_writes_(SYMCRYPT_AES_BLOCK_SIZE) PBYTE pbDst)
Definition: aes-c.c:242
VOID SYMCRYPT_CALL SymCryptAesDecryptXmm(_In_ PCSYMCRYPT_AES_EXPANDED_KEY pExpandedKey, _In_reads_(SYMCRYPT_AES_BLOCK_SIZE) PCBYTE pbSrc, _Out_writes_(SYMCRYPT_AES_BLOCK_SIZE) PBYTE pbDst)
VOID SYMCRYPT_CALL SymCryptXtsAesDecryptDataUnitYmm_2048(_In_ PCSYMCRYPT_AES_EXPANDED_KEY pExpandedKey, _Inout_updates_(SYMCRYPT_AES_BLOCK_SIZE) PBYTE pbTweakBlock, _Out_writes_(SYMCRYPT_AES_BLOCK_SIZE *16) PBYTE pbScratch, _In_reads_(cbData) PCBYTE pbSrc, _Out_writes_(cbData) PBYTE pbDst, SIZE_T cbData)
UINT32 SYMCRYPT_CALL SymCryptFdefRawSubUint32(_In_reads_bytes_(nDigits *SYMCRYPT_FDEF_DIGIT_SIZE) PCUINT32 pSrc1, UINT32 Src2, _Out_writes_bytes_(nDigits *SYMCRYPT_FDEF_DIGIT_SIZE) PUINT32 pDst, UINT32 nDigits)
Definition: fdef_int.c:190
VOID SYMCRYPT_CALL SymCryptXtsAesEncryptDataUnitYmm_2048(_In_ PCSYMCRYPT_AES_EXPANDED_KEY pExpandedKey, _Inout_updates_(SYMCRYPT_AES_BLOCK_SIZE) PBYTE pbTweakBlock, _Out_writes_(SYMCRYPT_AES_BLOCK_SIZE *16) PBYTE pbScratch, _In_reads_(cbData) PCBYTE pbSrc, _Out_writes_(cbData) PBYTE pbDst, SIZE_T cbData)
UINT32 SYMCRYPT_CALL SymCryptTwistedEdwardsOnCurve(_In_ PCSYMCRYPT_ECURVE pCurve, _In_ PCSYMCRYPT_ECPOINT poSrc, _Out_writes_bytes_(cbScratch) PBYTE pbScratch, SIZE_T cbScratch)
VOID SYMCRYPT_CALL SymCryptAesEcbEncryptAsm(_In_ PCSYMCRYPT_AES_EXPANDED_KEY pExpandedKey, _In_reads_(cbData) PCBYTE pbSrc, _Out_writes_(cbData) PBYTE pbDst, SIZE_T cbData)
SYMCRYPT_ERROR SYMCRYPT_CALL SymCryptParallelHashProcess_serial(_In_ PCSYMCRYPT_PARALLEL_HASH pParHash, _Inout_updates_bytes_(nStates *pParHash->pHash->stateSize) PVOID pStates, SIZE_T nStates, _Inout_updates_(nOperations) PSYMCRYPT_PARALLEL_HASH_OPERATION pOperations, SIZE_T nOperations, _Out_writes_(cbScratch) PBYTE pbScratch, SIZE_T cbScratch)
struct _SYMCRYPT_MD2_STATE_EXPORT_BLOB SYMCRYPT_MD2_STATE_EXPORT_BLOB
UINT32 SYMCRYPT_CALL SymCryptHbsGetDigit(UINT32 width, _In_ PCBYTE pbBuffer, SIZE_T cbBuffer, UINT32 index)
Definition: xmss.c:1429
const SYMCRYPT_ECURVE_FUNCTIONS * PCSYMCRYPT_ECURVE_FUNCTIONS
Definition: sc_lib.h:3920
VOID SYMCRYPT_CALL SymCryptFdefIntDivPow2(_In_ PCSYMCRYPT_INT piSrc, SIZE_T exp, _Out_ PSYMCRYPT_INT piDst)
Definition: fdef_int.c:469
struct _SYMCRYPT_SHA1_STATE_EXPORT_BLOB SYMCRYPT_SHA1_STATE_EXPORT_BLOB
VOID SYMCRYPT_CALL SymCryptKeccakPermute(_Inout_updates_(25) UINT64 *pState)
Definition: sha3.c:160
UINT64 SYMCRYPT_CALL SymCryptFdefIntGetValueLsbits64(_In_ PCSYMCRYPT_INT piSrc)
Definition: fdef_general.c:721
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)
Definition: xtsaes.c:524
VOID SYMCRYPT_CALL SymCryptFdefRawSquareAsm(_In_reads_(nDigits *SYMCRYPT_FDEF_DIGIT_NUINT32) PCUINT32 pSrc, UINT32 nDigits, _Out_writes_(2 *nDigits *SYMCRYPT_FDEF_DIGIT_NUINT32) PUINT32 pDst)
VOID SYMCRYPT_CALL SymCryptFdefModNegGeneric(_In_ PCSYMCRYPT_MODULUS pmMod, _In_ PCSYMCRYPT_MODELEMENT peSrc, _Out_ PSYMCRYPT_MODELEMENT peDst, _Out_writes_bytes_(cbScratch) PBYTE pbScratch, SIZE_T cbScratch)
Definition: fdef_mod.c:609
VOID SYMCRYPT_CALL SymCryptAes4Sbox(_In_reads_(4) PCBYTE pIn, _Out_writes_(4) PBYTE pOut, BOOL UseSimd)
Definition: aes-default.c:44
UINT32 UINT32 UINT32 UINT32 cbScratch
SIZE_T cbBuffer
Definition: sc_lib_mldsa.h:405
unsigned char _BitScanReverse(unsigned long *_Index, unsigned long _Mask)
Definition: intrin_arm.h:180
__int64 _InterlockedCompareExchange64(_Interlocked_operand_ __int64 volatile *_Destination, __int64 _Exchange, __int64 _Comparand)
unsigned char _BitScanForward(unsigned long *_Index, unsigned long _Mask)
Definition: intrin_arm.h:57
static const BYTE pbResult[]
Definition: polytest.cpp:36
SYMCRYPT_MLKEM_PARAMS mlKemParams
Definition: sc_lib.h:4430
SYMCRYPT_NUMBER_FORMAT numFormat
Definition: sc_lib.h:4434
SYMCRYPT_ECPOINT_FORMAT ecPointFormat
Definition: sc_lib.h:4435
SYMCRYPT_COMPOSITE_MLKEM_PARAMS params
Definition: sc_lib.h:4428
SYMCRYPT_CACHED_ECURVE_ID ecurveId
Definition: sc_lib.h:4429
SYMCRYPT_DLGROUP_DH_SAFEPRIMETYPE eDhSafePrimeType
Definition: sc_lib.h:3757
PSYMCRYPT_ECPOINT_ADD_FUNC addFunc
Definition: sc_lib.h:3911
PSYMCRYPT_ECPOINT_SCALAR_MUL_FUNC scalarMulFunc
Definition: sc_lib.h:3915
PSYMCRYPT_ECPOINT_SET_DISTINGUISHED_FUNC setDistinguishedFunc
Definition: sc_lib.h:3906
PSYMCRYPT_ECPOINT_ONCURVE_FUNC onCurveFunc
Definition: sc_lib.h:3910
PSYMCRYPT_ECPOINT_MULTI_SCALAR_MUL_FUNC multiScalarMulFunc
Definition: sc_lib.h:3916
PSYMCRYPT_ECURVE_FILL_SCRATCH_SPACES_FUNC fillScratchSpacesFunc
Definition: sc_lib.h:3917
PSYMCRYPT_ECPOINT_DOUBLE_FUNC doubleFunc
Definition: sc_lib.h:3913
PSYMCRYPT_ECPOINT_ISZERO_FUNC isZeroFunc
Definition: sc_lib.h:3909
PSYMCRYPT_ECPOINT_SET_RANDOM_FUNC setRandomFunc
Definition: sc_lib.h:3907
PSYMCRYPT_ECPOINT_ISEQUAL_FUNC isEqualFunc
Definition: sc_lib.h:3908
PSYMCRYPT_ECPOINT_ADD_DIFF_NONZERO_FUNC addDiffFunc
Definition: sc_lib.h:3912
PSYMCRYPT_ECPOINT_SET_ZERO_FUNC setZeroFunc
Definition: sc_lib.h:3905
PSYMCRYPT_ECPOINT_NEGATE_FUNC negateFunc
Definition: sc_lib.h:3914
PSYMCRYPT_INCREMENTAL_TREEHASH_FUNC funcCompressNodes
Definition: sc_lib.h:4626
PSYMCRYPT_XMSS_INCREMENTAL_TREEHASH_CONTEXT pContext
Definition: sc_lib.h:4627
SYMCRYPT_TREEHASH_NODE arrNodes[SYMCRYPT_ANYSIZE_ARRAY]
Definition: sc_lib.h:4629
SYMCRYPT_BLOB_HEADER header
Definition: sc_lib.h:1169
SYMCRYPT_BLOB_TRAILER trailer
Definition: sc_lib.h:1175
SYMCRYPT_BLOB_TRAILER trailer
Definition: sc_lib.h:1101
SYMCRYPT_BLOB_HEADER header
Definition: sc_lib.h:1095
SYMCRYPT_BLOB_HEADER header
Definition: sc_lib.h:1108
SYMCRYPT_BLOB_TRAILER trailer
Definition: sc_lib.h:1113
SYMCRYPT_BLOB_TRAILER trailer
Definition: sc_lib.h:1125
SYMCRYPT_BLOB_HEADER header
Definition: sc_lib.h:1120
SYMCRYPT_MODULUS_COPYFIXUP_FN modulusCopyFixup
Definition: sc_lib.h:2002
SYMCRYPT_MOD_SET_POST_FN modSetPost
Definition: sc_lib.h:2000
SYMCRYPT_MOD_BINARY_OP_FN modSub
Definition: sc_lib.h:1995
SYMCRYPT_MOD_PRE_GET_FN modPreGet
Definition: sc_lib.h:2001
SYMCRYPT_MOD_UNARY_OP_FN modNeg
Definition: sc_lib.h:1996
SYMCRYPT_MOD_UNARY_OP_FLAG_STATUS_FN modInv
Definition: sc_lib.h:1999
SYMCRYPT_MOD_BINARY_OP_FN modMul
Definition: sc_lib.h:1997
SYMCRYPT_MOD_UNARY_OP_FN modSquare
Definition: sc_lib.h:1998
SYMCRYPT_MOD_BINARY_OP_FN modAdd
Definition: sc_lib.h:1994
SYMCRYPT_MODULUS_INIT_FN modulusInit
Definition: sc_lib.h:2003
Definition: sc_lib.h:2024
SYMCRYPT_CPU_FEATURES cpuFeatures
Definition: sc_lib.h:2026
UINT32 modulusFeatures
Definition: sc_lib.h:2028
UINT32 maxBits
Definition: sc_lib.h:2027
UINT32 type
Definition: sc_lib.h:2025
SYMCRYPT_BLOB_TRAILER trailer
Definition: sc_lib.h:1137
SYMCRYPT_BLOB_HEADER header
Definition: sc_lib.h:1132
SYMCRYPT_BLOB_HEADER header
Definition: sc_lib.h:1144
SYMCRYPT_BLOB_TRAILER trailer
Definition: sc_lib.h:1149
SYMCRYPT_BLOB_HEADER header
Definition: sc_lib.h:1156
SYMCRYPT_BLOB_TRAILER trailer
Definition: sc_lib.h:1162
XMSS_OTS_ADDRESS ots
Definition: sc_lib.h:4509
union _XMSS_ADRS::@5246 u
BYTE en32Type[4]
Definition: sc_lib.h:4506
BYTE en32Layer[4]
Definition: sc_lib.h:4504
XMSS_LTREE_ADDRESS ltree
Definition: sc_lib.h:4510
BYTE en32KeyAndMask[4]
Definition: sc_lib.h:4514
XMSS_HASHTREE_ADDRESS hashtree
Definition: sc_lib.h:4511
BYTE en64Tree[8]
Definition: sc_lib.h:4505
BYTE en32Height[4]
Definition: sc_lib.h:4491
BYTE en32Leaf[4]
Definition: sc_lib.h:4490
BYTE en32Index[4]
Definition: sc_lib.h:4492
BYTE en32Hash[4]
Definition: sc_lib.h:4485
BYTE en32Chain[4]
Definition: sc_lib.h:4484
BYTE en32Leaf[4]
Definition: sc_lib.h:4483
#define SYMCRYPT_FLAG_DLKEY_DSA
Definition: symcrypt.h:7592
#define SYMCRYPT_LOAD_MSBFIRST32(p)
Definition: symcrypt.h:303
enum _SYMCRYPT_COMPOSITE_MLKEM_PARAMS SYMCRYPT_COMPOSITE_MLKEM_PARAMS
enum _SYMCRYPT_DLGROUP_DH_SAFEPRIMETYPE SYMCRYPT_DLGROUP_DH_SAFEPRIMETYPE
#define SYMCRYPT_LOAD_LSBFIRST64(p)
Definition: symcrypt.h:300
#define SYMCRYPT_FLAG_ECKEY_ECDSA
Definition: symcrypt.h:7595
#define SYMCRYPT_LOAD_MSBFIRST64(p)
Definition: symcrypt.h:304
enum _SYMCRYPT_NUMBER_FORMAT SYMCRYPT_NUMBER_FORMAT
#define SYMCRYPT_COMPOSITE_MLKEM_IRTF_PRIVATE_SEED_SIZE
Definition: symcrypt.h:10228
#define SYMCRYPT_FLAG_RSAKEY_SIGN
Definition: symcrypt.h:7598
#define SYMCRYPT_FLAG_RSAKEY_ENCRYPT
Definition: symcrypt.h:7599
#define SYMCRYPT_LOAD_LSBFIRST32(p)
Definition: symcrypt.h:299
#define SYMCRYPT_FLAG_DLKEY_DH
Definition: symcrypt.h:7593
enum _SYMCRYPT_ECPOINT_FORMAT SYMCRYPT_ECPOINT_FORMAT
#define SYMCRYPT_AES_BLOCK_SIZE
Definition: symcrypt.h:4255
#define SYMCRYPT_FLAG_KEY_NO_FIPS
Definition: symcrypt.h:7579
enum _SYMCRYPT_MLKEM_PARAMS SYMCRYPT_MLKEM_PARAMS
#define SYMCRYPT_STORE_LSBFIRST32(p, v)
Definition: symcrypt.h:307
#define SYMCRYPT_STORE_LSBFIRST64(p, v)
Definition: symcrypt.h:308
#define SYMCRYPT_STORE_MSBFIRST32(p, v)
Definition: symcrypt.h:311
#define SYMCRYPT_STORE_MSBFIRST64(p, v)
Definition: symcrypt.h:312
enum _SYMCRYPT_XMSSKEY_TYPE SYMCRYPT_XMSSKEY_TYPE
#define SYMCRYPT_FLAG_KEY_MINIMAL_VALIDATION
Definition: symcrypt.h:7586
SYMCRYPT_ERROR
Definition: symcrypt.h:227
#define SYMCRYPT_FLAG_ECKEY_ECDH
Definition: symcrypt.h:7596
* PSYMCRYPT_SHA512_CHAINING_STATE
#define SYMCRYPT_SHA3_512_STATE_EXPORT_SIZE
struct _SYMCRYPT_XMSS_KEY SYMCRYPT_XMSS_KEY
const SYMCRYPT_KECCAK_STATE * PCSYMCRYPT_KECCAK_STATE
const SYMCRYPT_XMSS_PARAMS * PCSYMCRYPT_XMSS_PARAMS
#define SYMCRYPT_ALIGN
PBYTE pbChainingValue
PCBYTE pbSrc
#define SYMCRYPT_CALL
struct _SYMCRYPT_COMPOSITE_MLKEMKEY SYMCRYPT_COMPOSITE_MLKEMKEY
const SYMCRYPT_MODELEMENT * PCSYMCRYPT_MODELEMENT
SYMCRYPT_MAGIC_FIELD * PSYMCRYPT_GCM_STATE
#define SYMCRYPT_SHA1_STATE_EXPORT_SIZE
const SYMCRYPT_ECPOINT * PCSYMCRYPT_ECPOINT
struct _SYMCRYPT_HASH SYMCRYPT_HASH
* PSYMCRYPT_KECCAK_STATE
const SYMCRYPT_ECKEY * PCSYMCRYPT_ECKEY
SYMCRYPT_KECCAK_STATE
const SYMCRYPT_GF128_ELEMENT * PCSYMCRYPT_GF128_ELEMENT
SYMCRYPT_SHA256_CHAINING_STATE
SYMCRYPT_MODELEMENT * PSYMCRYPT_MODELEMENT
#define SYMCRYPT_FDEF_DIGIT_SIZE
const UINT64 * PCUINT64
#define SYMCRYPT_HASH_MAX_RESULT_SIZE
SYMCRYPT_MLKEMKEY * PSYMCRYPT_MLKEMKEY
#define SYMCRYPT_PCT_DSA
#define SYMCRYPT_ALIGN_AT(alignment)
PCSYMCRYPT_ECURVE pCurve
SYMCRYPT_SHA512_CHAINING_STATE
#define SYMCRYPT_SHA3_384_STATE_EXPORT_SIZE
#define SYMCRYPT_SHA3_224_STATE_EXPORT_SIZE
#define SYMCRYPT_KECCAK_STATE_EXPORT_SIZE
#define SYMCRYPT_MD2_STATE_EXPORT_SIZE
const SYMCRYPT_DIVISOR * PCSYMCRYPT_DIVISOR
SYMCRYPT_XMSS_KEY * PSYMCRYPT_XMSS_KEY
const SYMCRYPT_AES_EXPANDED_KEY * PCSYMCRYPT_AES_EXPANDED_KEY
const SYMCRYPT_PARALLEL_HASH * PCSYMCRYPT_PARALLEL_HASH
PCSYMCRYPT_BLOCKCIPHER pBlockCipher
UINT32 SYMCRYPT_CPU_FEATURES
#define SYMCRYPT_GF128_FIELD_SIZE
const SYMCRYPT_HASH * PCSYMCRYPT_HASH
#define SYMCRYPT_GF128_BLOCK_SIZE
* PSYMCRYPT_GF128_ELEMENT
PCBYTE PBYTE SIZE_T cbData
#define SYMCRYPT_MD5_STATE_EXPORT_SIZE
SYMCRYPT_MD4_CHAINING_STATE
const SYMCRYPT_RSAKEY * PCSYMCRYPT_RSAKEY
SYMCRYPT_MD2_CHAINING_STATE
PCBYTE PBYTE pbDst
#define SYMCRYPT_SHA256_STATE_EXPORT_SIZE
const SYMCRYPT_LMS_KEY * PCSYMCRYPT_LMS_KEY
SYMCRYPT_LMS_PARAMS
const SYMCRYPT_XMSS_KEY * PCSYMCRYPT_XMSS_KEY
PCSYMCRYPT_HMAC_MD5_EXPANDED_KEY pKey
UINT32 cbModElement
UINT32 cbSize
const SYMCRYPT_GHASH_EXPANDED_KEY * PCSYMCRYPT_GHASH_EXPANDED_KEY
* PSYMCRYPT_COMMON_HASH_STATE
#define SYMCRYPT_SHA3_256_STATE_EXPORT_SIZE
UINT32 cbSeed
#define SYMCRYPT_PCT_ECDSA
#define SYMCRYPT_MAGIC_FIELD
const SYMCRYPT_INT * PCSYMCRYPT_INT
UINT32 inputBlockSize
const SYMCRYPT_DLKEY * PCSYMCRYPT_DLKEY
SYMCRYPT_ECPOINT * PSYMCRYPT_ECPOINT
PSYMCRYPT_COMMON_HASH_STATE pState
#define SYMCRYPT_MD4_STATE_EXPORT_SIZE
const BYTE * PCBYTE
const SYMCRYPT_MODULUS * PCSYMCRYPT_MODULUS
SYMCRYPT_DIVISOR * PSYMCRYPT_DIVISOR
#define SYMCRYPT_SHA512_STATE_EXPORT_SIZE
SYMCRYPT_XMSS_PARAMS
const UINT32 * PCUINT32
PCBYTE pbData
SYMCRYPT_ECKEY * PSYMCRYPT_ECKEY
struct _SYMCRYPT_LMS_KEY SYMCRYPT_LMS_KEY
SYMCRYPT_MODULUS * PSYMCRYPT_MODULUS
SYMCRYPT_SHA1_CHAINING_STATE
SYMCRYPT_INT * PSYMCRYPT_INT
* PSYMCRYPT_SHA256_CHAINING_STATE
const SYMCRYPT_ECURVE * PCSYMCRYPT_ECURVE
SYMCRYPT_ECURVE * PSYMCRYPT_ECURVE
SYMCRYPT_MD5_CHAINING_STATE
SYMCRYPT_MARVIN32_EXPANDED_SEED * PSYMCRYPT_MARVIN32_CHAINING_STATE
#define SYMCRYPT_PCT_RSA_SIGN
PBYTE pbSeed
* PSYMCRYPT_GHASH_EXPANDED_KEY
PCVOID pExpandedKey
int32_t INT32
Definition: typedefs.h:58
int64_t LONG64
Definition: typedefs.h:68
ULONG_PTR SIZE_T
Definition: typedefs.h:80
uint32_t UINT32
Definition: typedefs.h:59
Definition: pdh_main.c:64
#define FORCEINLINE
Definition: wdftypes.h:67
unsigned char BYTE
Definition: xxhash.c:193