56 2285, 2571, 2970, 1812, 1493, 1422, 287, 202,
57 3158, 622, 1577, 182, 962, 2127, 1855, 1468,
58 573, 2004, 264, 383, 2500, 1458, 1727, 3199,
59 2648, 1017, 732, 608, 1787, 411, 3124, 1758,
60 1223, 652, 2777, 1015, 2036, 1491, 3047, 1785,
61 516, 3321, 3009, 2663, 1711, 2167, 126, 1469,
62 2476, 3239, 3058, 830, 107, 1908, 3082, 2378,
63 2931, 961, 1821, 2604, 448, 2264, 677, 2054,
64 2226, 430, 555, 843, 2078, 871, 1550, 105,
65 422, 587, 177, 3094, 3038, 2869, 1574, 1653,
66 3083, 778, 1159, 3182, 2552, 1483, 2727, 1119,
67 1739, 644, 2457, 349, 418, 329, 3173, 3254,
68 817, 1097, 603, 610, 1322, 2044, 1864, 384,
69 2114, 3193, 1218, 1994, 2455, 220, 2142, 1670,
70 2144, 1799, 2051, 794, 1819, 2475, 2459, 478,
71 3221, 3021, 996, 991, 958, 1869, 1522, 1628,
80 19, 34037, 50790, 64748, 52011, 12402, 37345, 16694,
81 20906, 37778, 3799, 15690, 54846, 64177, 11201, 34372,
82 5827, 48172, 26360, 29057, 59964, 1102, 44097, 26241,
83 28072, 41223, 10532, 56736, 47109, 56677, 38860, 16162,
84 5689, 6516, 64039, 34569, 23564, 45357, 44825, 40455,
85 12796, 38919, 49471, 12441, 56401, 649, 25986, 37699,
86 45652, 28249, 15886, 8898, 28309, 56460, 30198, 47286,
87 52109, 51519, 29155, 12756, 48704, 61224, 24155, 17914,
88 334, 54354, 11477, 52149, 32226, 14233, 45042, 21655,
89 27738, 52405, 64591, 4586, 14882, 42443, 59354, 60043,
90 33525, 32502, 54905, 35218, 36360, 18741, 28761, 52897,
91 18485, 45436, 47975, 47011, 14430, 46007, 5275, 12618,
92 31183, 45239, 40101, 63390, 7382, 50180, 41144, 32384,
93 20926, 6279, 54590, 14902, 41321, 11044, 48546, 51066,
94 55200, 21497, 7933, 20198, 22501, 42325, 54629, 17442,
95 33899, 23859, 36892, 20257, 41538, 57779, 17422, 42404,
104 2226, 1103, 430, 2899, 555, 2774, 843, 2486,
105 2078, 1251, 871, 2458, 1550, 1779, 105, 3224,
106 422, 2907, 587, 2742, 177, 3152, 3094, 235,
107 3038, 291, 2869, 460, 1574, 1755, 1653, 1676,
108 3083, 246, 778, 2551, 1159, 2170, 3182, 147,
109 2552, 777, 1483, 1846, 2727, 602, 1119, 2210,
110 1739, 1590, 644, 2685, 2457, 872, 349, 2980,
111 418, 2911, 329, 3000, 3173, 156, 3254, 75,
112 817, 2512, 1097, 2232, 603, 2726, 610, 2719,
113 1322, 2007, 2044, 1285, 1864, 1465, 384, 2945,
114 2114, 1215, 3193, 136, 1218, 2111, 1994, 1335,
115 2455, 874, 220, 3109, 2142, 1187, 1670, 1659,
116 2144, 1185, 1799, 1530, 2051, 1278, 794, 2535,
117 1819, 1510, 2475, 854, 2459, 870, 478, 2851,
118 3221, 108, 3021, 308, 996, 2333, 991, 2338,
119 958, 2371, 1869, 1460, 1522, 1807, 1628, 1701,
172 pVector->nRows =
nRows;
211 pMatrix->nRows =
nRows;
217 if( pMatrix->apPolyElements[
i] ==
NULL )
233#if SYMCRYPT_CPU_AMD64 | SYMCRYPT_CPU_X86 | SYMCRYPT_CPU_ARM64
235#if SYMCRYPT_CPU_AMD64 | SYMCRYPT_CPU_X86
238#pragma clang attribute push (__attribute__((target("sse2"))), apply_to=function)
240#pragma GCC push_options
241#pragma GCC target("sse2")
244#define VEC128_TYPE_UINT16 __m128i
246#define VEC128_LOAD_UINT16( addr ) _mm_loadu_si128( (__m128i*) (addr) )
247#define VEC64_LOAD_UINT16( addr ) _mm_loadl_epi64( (__m128i const*) (addr) )
248#define VEC32_LOAD_UINT16( addr ) _mm_cvtsi32_si128( SYMCRYPT_LOAD_LSBFIRST32( addr ) )
250#define VEC128_STORE_UINT16( addr, vec ) _mm_storeu_si128( (__m128i*) (addr), (vec) )
251#define VEC64_STORE_UINT16( addr, vec ) _mm_storel_epi64( (__m128i*) (addr), (vec) )
252#define VEC32_STORE_UINT16( addr, vec ) SYMCRYPT_STORE_LSBFIRST32( (addr), _mm_cvtsi128_si32( vec ) )
254#define VEC128_SET_UINT16( value ) _mm_set1_epi16( (value) )
256#define VEC128_MOD_SUB_UINT16( res, a, b, Q, zero, tmp1 ) \
258 res = _mm_sub_epi16( a, b ); \
260 tmp1 = _mm_cmpgt_epi16( zero, res ); \
262 tmp1 = _mm_and_si128( tmp1, Q ); \
264 res = _mm_add_epi16( res, tmp1 );
266#define VEC128_MOD_ADD_UINT16( res, a, b, Q, tmp1 ) \
268 res = _mm_add_epi16( a, b ); \
270 tmp1 = _mm_cmpgt_epi16( Q, res ); \
272 tmp1 = _mm_andnot_si128( tmp1, Q ); \
274 res = _mm_sub_epi16( res, tmp1 );
276#define VEC128_MONTGOMERY_MUL_UINT16( res, a, b, bTimesNegQInvModR, Q, zero, one, tmp1, tmp2 ) \
278 tmp1 = _mm_mullo_epi16( a, bTimesNegQInvModR ); \
280 res = _mm_mulhi_epu16( a, b ); \
282 tmp2 = _mm_cmpeq_epi16( tmp1, zero ); \
284 tmp1 = _mm_mulhi_epu16( tmp1, Q ); \
286 res = _mm_add_epi16( res, one ); \
288 res = _mm_add_epi16( res, tmp2 ); \
290 res = _mm_add_epi16( res, tmp1 ); \
292 VEC128_MOD_SUB_UINT16( res, res, Q, Q, zero, tmp1 );
294#elif SYMCRYPT_CPU_ARM64
296#define VEC128_TYPE_UINT16 uint16x8_t
298#define VEC128_LOAD_UINT16( addr ) vld1q_u16( addr )
299#define VEC64_LOAD_UINT16( addr ) vld1q_dup_u64( addr )
300#define VEC32_LOAD_UINT16( addr ) vld1q_dup_u32( addr )
302#define VEC128_STORE_UINT16( addr, vec ) vst1q_u16( (addr), (vec) )
303#define VEC64_STORE_UINT16( addr, vec ) vst1_u16( (uint16_t*) (addr), vget_low_u16(vec) )
304#define VEC32_STORE_UINT16( addr, vec ) vst1_lane_u32( (PBYTE) (addr), vget_low_u32(vec), 0 )
306#define VEC128_SET_UINT16( value ) vdupq_n_u16( (value) )
308#define VEC128_MOD_SUB_UINT16( res, a, b, Q, zero, tmp1 ) \
310 res = vsubq_u16( a, b ); \
312 tmp1 = vcltzq_s16( res ); \
314 tmp1 = vandq_u16( tmp1, Q ); \
316 res = vaddq_u16( res, tmp1 );
318#define VEC128_MOD_ADD_UINT16( res, a, b, Q, tmp1 ) \
320 res = vaddq_u16( a, b ); \
322 tmp1 = vcgeq_u16( res, Q ); \
324 tmp1 = vandq_u16( tmp1, Q ); \
326 res = vsubq_u16( res, tmp1 );
328#define VEC128_MONTGOMERY_MUL_UINT16( res, a, b, bTimesNegQInvModR, Q, zero, one, tmp1, tmp2 ) \
330 tmp1 = vmulq_u16( a, bTimesNegQInvModR ); \
332 tmp2 = vmull_u16( vget_low_u16(a), vget_low_u16(b) ); \
334 res = vmull_high_u16( a, b ); \
336 tmp2 = vmlal_u16( tmp2, vget_low_u16(tmp1), vget_low_u16(Q) ); \
338 res = vmlal_high_u16( res, tmp1, Q ); \
340 res = vuzp2q_u16( tmp2, res ); \
342 VEC128_MOD_SUB_UINT16( res, res, Q, Q, zero, tmp1 );
349SymCryptMlKemPolyElementNTTLayerVec128(
355 VEC128_TYPE_UINT16 vc0, vc1, vTmp0, vTmp1, vc1Twiddle, vTwiddleFactor, vTwiddleFactorMont, vQ, vZero, vOne;
360 vZero = VEC128_SET_UINT16( 0 );
361 vOne = VEC128_SET_UINT16( 1 );
372 vc0 = VEC128_LOAD_UINT16( &(peSrc->coeffs[
start+
j] ) );
373 vc1 = VEC128_LOAD_UINT16( &(peSrc->coeffs[
start+
j+
len]) );
377 vc0 = VEC64_LOAD_UINT16( &(peSrc->coeffs[
start+
j] ) );
378 vc1 = VEC64_LOAD_UINT16( &(peSrc->coeffs[
start+
j+
len]) );
382 vc0 = VEC32_LOAD_UINT16( &(peSrc->coeffs[
start+
j] ) );
383 vc1 = VEC32_LOAD_UINT16( &(peSrc->coeffs[
start+
j+
len]) );
387 VEC128_MONTGOMERY_MUL_UINT16( vc1Twiddle, vc1, vTwiddleFactor, vTwiddleFactorMont, vQ, vZero, vOne, vTmp0, vTmp1 );
389 VEC128_MOD_SUB_UINT16( vc1, vc0, vc1Twiddle, vQ, vZero, vTmp0 );
391 VEC128_MOD_ADD_UINT16( vc0, vc0, vc1Twiddle, vQ, vTmp1 );
395 VEC128_STORE_UINT16( &(peSrc->coeffs[
start+
j] ), vc0 );
396 VEC128_STORE_UINT16( &(peSrc->coeffs[
start+
j+
len]), vc1 );
400 VEC64_STORE_UINT16( &(peSrc->coeffs[
start+
j] ), vc0 );
401 VEC64_STORE_UINT16( &(peSrc->coeffs[
start+
j+
len]), vc1 );
405 VEC32_STORE_UINT16( &(peSrc->coeffs[
start+
j] ), vc0 );
406 VEC32_STORE_UINT16( &(peSrc->coeffs[
start+
j+
len]), vc1 );
415SymCryptMlKemPolyElementINTTLayerVec128(
421 VEC128_TYPE_UINT16 vc0, vc1, vTmp0, vTmp1, vTmp2, vTwiddleFactor, vTwiddleFactorMont, vQ, vZero, vOne;
426 vZero = VEC128_SET_UINT16( 0 );
427 vOne = VEC128_SET_UINT16( 1 );
438 vc0 = VEC128_LOAD_UINT16( &(peSrc->coeffs[
start+
j] ) );
439 vc1 = VEC128_LOAD_UINT16( &(peSrc->coeffs[
start+
j+
len]) );
443 vc0 = VEC64_LOAD_UINT16( &(peSrc->coeffs[
start+
j] ) );
444 vc1 = VEC64_LOAD_UINT16( &(peSrc->coeffs[
start+
j+
len]) );
448 vc0 = VEC32_LOAD_UINT16( &(peSrc->coeffs[
start+
j] ) );
449 vc1 = VEC32_LOAD_UINT16( &(peSrc->coeffs[
start+
j+
len]) );
453 VEC128_MOD_ADD_UINT16( vTmp2, vc0, vc1, vQ, vTmp0 );
455 VEC128_MOD_SUB_UINT16( vc1, vc1, vc0, vQ, vZero, vTmp1 );
457 VEC128_MONTGOMERY_MUL_UINT16( vc1, vc1, vTwiddleFactor, vTwiddleFactorMont, vQ, vZero, vOne, vTmp0, vTmp1 );
461 VEC128_STORE_UINT16( &(peSrc->coeffs[
start+
j] ), vTmp2 );
462 VEC128_STORE_UINT16( &(peSrc->coeffs[
start+
j+
len]), vc1 );
466 VEC64_STORE_UINT16( &(peSrc->coeffs[
start+
j] ), vTmp2 );
467 VEC64_STORE_UINT16( &(peSrc->coeffs[
start+
j+
len]), vc1 );
471 VEC32_STORE_UINT16( &(peSrc->coeffs[
start+
j] ), vTmp2 );
472 VEC32_STORE_UINT16( &(peSrc->coeffs[
start+
j+
len]), vc1 );
552 UINT32 twiddleFactor, twiddleFactorMont, c0, c1, c1TimesTwiddle;
561 c0 = peSrc->coeffs[
start+
j];
584 UINT32 twiddleFactor, twiddleFactorMont, c0, c1, tmp;
593 c0 = peSrc->coeffs[
start+
j];
617 SYMCRYPT_EXTENDED_SAVE_DATA
SaveData;
620 SymCryptMlKemPolyElementNTTLayerVec128( peSrc,
k,
len );
625#elif SYMCRYPT_CPU_AMD64
628 SymCryptMlKemPolyElementNTTLayerVec128( peSrc,
k,
len );
632#elif SYMCRYPT_CPU_ARM64
635 SymCryptMlKemPolyElementNTTLayerVec128( peSrc,
k,
len );
653 SYMCRYPT_EXTENDED_SAVE_DATA
SaveData;
656 SymCryptMlKemPolyElementINTTLayerVec128( peSrc,
k,
len );
661#elif SYMCRYPT_CPU_AMD64
664 SymCryptMlKemPolyElementINTTLayerVec128( peSrc,
k,
len );
668#elif SYMCRYPT_CPU_ARM64
671 SymCryptMlKemPolyElementINTTLayerVec128( peSrc,
k,
len );
680#define SYMCRYPT_MLKEM_MaxCoeff (SYMCRYPT_MLKEM_Q - 1)
681#define SYMCRYPT_MLKEM_MaxCoeffProduct (SYMCRYPT_MLKEM_MaxCoeff*SYMCRYPT_MLKEM_MaxCoeff)
684#define SYMCRYPT_MLKEM_MaxFirstStepReduction (3494)
686#define SYMCRYPT_MLKEM_MaxZetaTwoTimesPlus1TimesR (3254)
687#define SYMCRYPT_MLKEM_MaxA1B1ZetaPow (SYMCRYPT_MLKEM_MaxFirstStepReduction*SYMCRYPT_MLKEM_MaxZetaTwoTimesPlus1TimesR)
698 UINT32 a0b0, a1b1, a0b1, a1b0, a1b1zetapow, inv;
702 a0 = peSrc1->coeffs[(2*
i) ];
704 a1 = peSrc1->coeffs[(2*
i)+1];
707 b0 = peSrc2->coeffs[(2*
i) ];
709 b1 = peSrc2->coeffs[(2*
i)+1];
712 c0 = paDst->coeffs[(2*
i) ];
714 c1 = paDst->coeffs[(2*
i)+1];
751 paDst->coeffs[(2*
i) ] = c0;
752 paDst->coeffs[(2*
i)+1] = c1;
767 a = paSrc->coeffs[
i];
769 paSrc->coeffs[
i] = 0;
771 c = peDst->coeffs[
i];
892 UINT32 nBitsPerCoefficient,
899 UINT32 nBitsInCoefficient;
904 UINT32 nBitsInAccumulator = 0;
911 nBitsInCoefficient = nBitsPerCoefficient;
917 if(nBitsPerCoefficient < 12)
939 nBitsToEncode =
SYMCRYPT_MIN(nBitsInCoefficient, 32-nBitsInAccumulator);
941 bitsToEncode =
coefficient & ((1UL<<nBitsToEncode)-1);
943 nBitsInCoefficient -= nBitsToEncode;
945 accumulator |= (bitsToEncode << nBitsInAccumulator);
946 nBitsInAccumulator += nBitsToEncode;
947 if(nBitsInAccumulator == 32)
952 nBitsInAccumulator = 0;
954 }
while( nBitsInCoefficient > 0 );
966 UINT32 nBitsPerCoefficient,
971 UINT32 nBitsInCoefficient;
976 UINT32 nBitsInAccumulator = 0;
984 nBitsInCoefficient = 0;
989 if(nBitsInAccumulator == 0)
993 nBitsInAccumulator = 32;
996 nBitsToDecode =
SYMCRYPT_MIN(nBitsPerCoefficient-nBitsInCoefficient, nBitsInAccumulator);
999 bitsToDecode = accumulator & ((1UL<<nBitsToDecode)-1);
1000 accumulator >>= nBitsToDecode;
1001 nBitsInAccumulator -= nBitsToDecode;
1003 coefficient |= (bitsToDecode << nBitsInCoefficient);
1004 nBitsInCoefficient += nBitsToDecode;
1005 }
while( nBitsPerCoefficient > nBitsInCoefficient );
1011 if(nBitsPerCoefficient < 12)
1032 return SYMCRYPT_INVALID_BLOB;
1041 return SYMCRYPT_NO_ERROR;
1051 BYTE shakeOutputBuf[3*8];
1052 UINT32 currBufIndex =
sizeof(shakeOutputBuf);
1058 if( currBufIndex ==
sizeof(shakeOutputBuf) )
1068 peDst->coeffs[
i] = sample0;
1073 peDst->coeffs[
i] = sample1;
1103 sampleBits = (sampleBits&0x249249) + ((sampleBits>>1)&0x249249) + ((sampleBits>>2)&0x249249);
1105 for(
j=0;
j<4;
j++ )
1130 sampleBits = (sampleBits&0x55555555) + ((sampleBits>>1)&0x55555555);
1132 for(
j=0;
j<8;
j++ )
1167 pmSrc->apPolyElements[(
i*
nRows) +
j] = pmSrc->apPolyElements[(
j*
nRows) +
i];
1198 peSrc1 = pmSrc1->apPolyElements[(
i*
nRows) +
j];
1364 UINT32 nBitsPerCoefficient,
1393 UINT32 nBitsPerCoefficient,
1413 if( scError != SYMCRYPT_NO_ERROR )
1436#if SYMCRYPT_CPU_AMD64 | SYMCRYPT_CPU_X86
1438#pragma clang attribute pop
1440#pragma GCC pop_options
COMPILER_DEPENDENT_UINT64 UINT64
VOID SaveData(HWND hwndDlg)
static void cleanup(void)
static const uint32_t k[]
GLboolean GLboolean GLboolean b
GLboolean GLboolean GLboolean GLboolean a
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
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 GLint GLint j
VOID SYMCRYPT_CALL SymCryptMlKemPolyElementSub(_In_ PCSYMCRYPT_MLKEM_POLYELEMENT peSrc1, _In_ PCSYMCRYPT_MLKEM_POLYELEMENT peSrc2, _Out_ PSYMCRYPT_MLKEM_POLYELEMENT peDst)
VOID SYMCRYPT_CALL SymCryptMlKemVectorMulR(_In_ PCSYMCRYPT_MLKEM_VECTOR pvSrc, _Out_ PSYMCRYPT_MLKEM_VECTOR pvDst)
VOID SYMCRYPT_CALL SymCryptMlKemVectorCompressAndEncode(_In_ PCSYMCRYPT_MLKEM_VECTOR pvSrc, UINT32 nBitsPerCoefficient, _Out_writes_bytes_(cbDst) PBYTE pbDst, SIZE_T cbDst)
FORCEINLINE VOID SYMCRYPT_CALL SymCryptMlKemPolyElementNTTLayer(_Inout_ PSYMCRYPT_MLKEM_POLYELEMENT peSrc, UINT32 k, UINT32 len)
VOID SYMCRYPT_CALL SymCryptMlKemMatrixVectorMontMulAndAdd(_In_ PCSYMCRYPT_MLKEM_MATRIX pmSrc1, _In_ PCSYMCRYPT_MLKEM_VECTOR pvSrc2, _Inout_ PSYMCRYPT_MLKEM_VECTOR pvDst, _Inout_ PSYMCRYPT_MLKEM_POLYELEMENT_ACCUMULATOR paTmp)
const UINT16 MlKemZetaBitRevTimesR[128]
FORCEINLINE VOID SYMCRYPT_CALL SymCryptMlKemPolyElementINTTLayer(_Inout_ PSYMCRYPT_MLKEM_POLYELEMENT peSrc, UINT32 k, UINT32 len)
VOID SYMCRYPT_CALL SymCryptMlKemVectorSetZero(_Inout_ PSYMCRYPT_MLKEM_VECTOR pvSrc)
VOID SYMCRYPT_CALL SymCryptMlKemPolyElementNTTLayerC(_Inout_ PSYMCRYPT_MLKEM_POLYELEMENT peSrc, UINT32 k, UINT32 len)
#define SYMCRYPT_MLKEM_MaxFirstStepReduction
const UINT32 SYMCRYPT_MLKEM_Rsqr
VOID SYMCRYPT_CALL SymCryptMlKemVectorAdd(_In_ PCSYMCRYPT_MLKEM_VECTOR pvSrc1, _In_ PCSYMCRYPT_MLKEM_VECTOR pvSrc2, _Out_ PSYMCRYPT_MLKEM_VECTOR pvDst)
PSYMCRYPT_MLKEM_VECTOR SYMCRYPT_CALL SymCryptMlKemVectorCreate(_Out_writes_bytes_(cbBuffer) PBYTE pbBuffer, UINT32 cbBuffer, UINT32 nRows)
VOID SYMCRYPT_CALL SymCryptMlKemPolyElementAdd(_In_ PCSYMCRYPT_MLKEM_POLYELEMENT peSrc1, _In_ PCSYMCRYPT_MLKEM_POLYELEMENT peSrc2, _Out_ PSYMCRYPT_MLKEM_POLYELEMENT peDst)
VOID SYMCRYPT_CALL SymCryptMlKemPolyElementSampleCBDFromBytes(_In_reads_bytes_(eta *2 *(SYMCRYPT_MLWE_POLYNOMIAL_COEFFICIENTS/8)+1) PCBYTE pbSrc, _In_range_(2, 3) UINT32 eta, _Out_ PSYMCRYPT_MLKEM_POLYELEMENT peDst)
VOID SYMCRYPT_CALL SymCryptMlKemMatrixTranspose(_Inout_ PSYMCRYPT_MLKEM_MATRIX pmSrc)
VOID SYMCRYPT_CALL SymCryptMlKemPolyElementNTT(_Inout_ PSYMCRYPT_MLKEM_POLYELEMENT peSrc)
PSYMCRYPT_MLKEM_POLYELEMENT SYMCRYPT_CALL SymCryptMlKemPolyElementCreate(_Out_writes_bytes_(cbBuffer) PBYTE pbBuffer, UINT32 cbBuffer)
FORCEINLINE UINT32 SYMCRYPT_CALL SymCryptMlKemModSub(UINT32 a, UINT32 b)
const UINT16 zetaTwoTimesBitRevPlus1TimesR[128]
VOID SYMCRYPT_CALL SymCryptMlKemPolyElementSampleNTTFromShake128(_Inout_ PSYMCRYPT_SHAKE128_STATE pState, _Out_ PSYMCRYPT_MLKEM_POLYELEMENT peDst)
const UINT32 SYMCRYPT_MLKEM_COMPRESS_MULCONSTANT
#define SYMCRYPT_MLKEM_MaxA1B1ZetaPow
FORCEINLINE UINT32 SYMCRYPT_CALL SymCryptMlKemModAdd(UINT32 a, UINT32 b)
VOID SYMCRYPT_CALL SymCryptMlKemVectorSub(_In_ PCSYMCRYPT_MLKEM_VECTOR pvSrc1, _In_ PCSYMCRYPT_MLKEM_VECTOR pvSrc2, _Out_ PSYMCRYPT_MLKEM_VECTOR pvDst)
VOID SYMCRYPT_CALL SymCryptMlKemMontgomeryReduceAndAddPolyElementAccumulatorToPolyElement(_Inout_ PSYMCRYPT_MLKEM_POLYELEMENT_ACCUMULATOR paSrc, _Inout_ PSYMCRYPT_MLKEM_POLYELEMENT peDst)
VOID SYMCRYPT_CALL SymCryptMlKemPolyElementINTTAndMulR(_Inout_ PSYMCRYPT_MLKEM_POLYELEMENT peSrc)
const UINT32 SYMCRYPT_MLKEM_INTTFixupTimesRsqrTimesNegQInvModR
VOID SYMCRYPT_CALL SymCryptMlKemVectorNTT(_Inout_ PSYMCRYPT_MLKEM_VECTOR pvSrc)
const UINT32 SYMCRYPT_MLKEM_Rlog2
const UINT32 SYMCRYPT_MLKEM_Rmask
VOID SYMCRYPT_CALL SymCryptMlKemkeyWipePrivateState(_Inout_ PSYMCRYPT_MLKEMKEY pkMlKemkey)
FORCEINLINE UINT32 SYMCRYPT_CALL SymCryptMlKemMontMul(UINT32 a, UINT32 b, UINT32 bMont)
const UINT32 SYMCRYPT_MLKEM_COMPRESS_SHIFTCONSTANT
PSYMCRYPT_MLKEM_POLYELEMENT_ACCUMULATOR SYMCRYPT_CALL SymCryptMlKemPolyElementAccumulatorCreate(_Out_writes_bytes_(cbBuffer) PBYTE pbBuffer, UINT32 cbBuffer)
const UINT32 SYMCRYPT_MLKEM_RsqrTimesNegQInvModR
VOID SYMCRYPT_CALL SymCryptMlKemPolyElementMulR(_In_ PCSYMCRYPT_MLKEM_POLYELEMENT peSrc, _Out_ PSYMCRYPT_MLKEM_POLYELEMENT peDst)
SYMCRYPT_ERROR SYMCRYPT_CALL SymCryptMlKemPolyElementDecodeAndDecompress(_In_reads_bytes_(nBitsPerCoefficient *(SYMCRYPT_MLWE_POLYNOMIAL_COEFFICIENTS/8)) PCBYTE pbSrc, UINT32 nBitsPerCoefficient, _Out_ PSYMCRYPT_MLKEM_POLYELEMENT peDst)
const UINT32 SYMCRYPT_MLKEM_INTTFixupTimesRsqr
VOID SYMCRYPT_CALL SymCryptMlKemPolyElementINTTLayerC(_Inout_ PSYMCRYPT_MLKEM_POLYELEMENT peSrc, UINT32 k, UINT32 len)
#define SYMCRYPT_MLKEM_MaxCoeffProduct
const UINT16 MlKemZetaBitRevTimesRTimesNegQInvModR[128]
VOID SYMCRYPT_CALL SymCryptMlKemVectorMontDotProduct(_In_ PCSYMCRYPT_MLKEM_VECTOR pvSrc1, _In_ PCSYMCRYPT_MLKEM_VECTOR pvSrc2, _Inout_ PSYMCRYPT_MLKEM_POLYELEMENT peDst, _Inout_ PSYMCRYPT_MLKEM_POLYELEMENT_ACCUMULATOR paTmp)
VOID SYMCRYPT_CALL SymCryptMlKemVectorINTTAndMulR(_Inout_ PSYMCRYPT_MLKEM_VECTOR pvSrc)
VOID SYMCRYPT_CALL SymCryptMlKemPolyElementCompressAndEncode(_In_ PCSYMCRYPT_MLKEM_POLYELEMENT peSrc, UINT32 nBitsPerCoefficient, _Out_writes_bytes_(nBitsPerCoefficient *(SYMCRYPT_MLWE_POLYNOMIAL_COEFFICIENTS/8)) PBYTE pbDst)
SYMCRYPT_ERROR SYMCRYPT_CALL SymCryptMlKemVectorDecodeAndDecompress(_In_reads_bytes_(cbSrc) PCBYTE pbSrc, SIZE_T cbSrc, UINT32 nBitsPerCoefficient, _Out_ PSYMCRYPT_MLKEM_VECTOR pvDst)
VOID SYMCRYPT_CALL SymCryptMlKemPolyElementMulAndAccumulate(_In_ PCSYMCRYPT_MLKEM_POLYELEMENT peSrc1, _In_ PCSYMCRYPT_MLKEM_POLYELEMENT peSrc2, _Inout_ PSYMCRYPT_MLKEM_POLYELEMENT_ACCUMULATOR paDst)
const UINT32 SYMCRYPT_MLKEM_NegQInvModR
PSYMCRYPT_MLKEM_MATRIX SYMCRYPT_CALL SymCryptMlKemMatrixCreate(_Out_writes_bytes_(cbBuffer) PBYTE pbBuffer, UINT32 cbBuffer, UINT32 nRows)
static const struct update_accum a1
static CRYPT_DATA_BLOB b1[]
#define _In_reads_bytes_(s)
#define _Out_writes_bytes_(s)
#define UNREFERENCED_PARAMETER(P)
#define SYMCRYPT_ASSERT_ASYM_ALIGNED(_p)
#define SYMCRYPT_MLWE_POLYNOMIAL_COEFFICIENTS
PSYMCRYPT_MLKEMKEY pkMlKemkey
SYMCRYPT_MLKEM_POLYELEMENT * PSYMCRYPT_MLKEM_POLYELEMENT
SYMCRYPT_MLKEM_POLYELEMENT_ACCUMULATOR * PSYMCRYPT_MLKEM_POLYELEMENT_ACCUMULATOR
#define SYMCRYPT_INTERNAL_MLKEM_SIZEOF_POLYRINGELEMENT
#define SYMCRYPT_INTERNAL_MLKEM_SIZEOF_POLYRINGELEMENT_ACCUMULATOR
#define SYMCRYPT_INTERNAL_MLKEM_VECTOR_ELEMENT(_row, _pVector)
const SYMCRYPT_MLKEM_MATRIX * PCSYMCRYPT_MLKEM_MATRIX
#define SYMCRYPT_MLKEM_MATRIX_MAX_NROWS
const SYMCRYPT_MLKEM_VECTOR * PCSYMCRYPT_MLKEM_VECTOR
const SYMCRYPT_MLKEM_POLYELEMENT * PCSYMCRYPT_MLKEM_POLYELEMENT
#define SYMCRYPT_ASSERT(_x)
FORCEINLINE VOID SYMCRYPT_CALL SymCryptWipeKnownSize(_Out_writes_bytes_(cbData) PVOID pbData, SIZE_T cbData)
VOID SYMCRYPT_CALL SymCryptWipe(_Out_writes_bytes_(cbData) PVOID pbData, SIZE_T cbData)
#define SYMCRYPT_LOAD_LSBFIRST16(p)
#define SYMCRYPT_LOAD_LSBFIRST32(p)
VOID SYMCRYPT_CALL SymCryptShake128Extract(_Inout_ PSYMCRYPT_SHAKE128_STATE pState, _Out_writes_(cbResult) PBYTE pbResult, SIZE_T cbResult, BOOLEAN bWipe)
#define SYMCRYPT_STORE_LSBFIRST32(p, v)
#define SYMCRYPT_CPU_FEATURES_PRESENT(x)
SYMCRYPT_MLKEMKEY * PSYMCRYPT_MLKEMKEY
#define SYMCRYPT_MIN(_a, _b)
SYMCRYPT_MAGIC_FIELD * PSYMCRYPT_SHAKE128_STATE
PSYMCRYPT_COMMON_HASH_STATE pState