ReactOS 0.4.17-dev-1005-g171e1de
sc_lib_mlkem.h
Go to the documentation of this file.
1//
2// sc_lib_mlkem.h
3//
4// Copyright (c) Microsoft Corporation. Licensed under the MIT license.
5//
6// Internal ML-KEM definitions for the symcrypt library.
7// Always intended to be included as part of sc_lib.h
8//
9
10//=====================================================
11// ML-KEM internal high level types
12//
13
14typedef SYMCRYPT_ASYM_ALIGN_STRUCT _SYMCRYPT_MLKEM_POLYELEMENT {
15 // PolyElements just store the coefficients without any header.
20
21typedef SYMCRYPT_ASYM_ALIGN_STRUCT _SYMCRYPT_MLKEM_POLYELEMENT_ACCUMULATOR {
22 // PolyElement Accumulators just store the coefficients without any header.
26
27// Currently maximum size of MLKEM matrices is baked in, they are always square and up to 4x4.
28#define SYMCRYPT_MLKEM_MATRIX_MAX_NROWS (4)
29
30typedef SYMCRYPT_ASYM_ALIGN_STRUCT _SYMCRYPT_MLKEM_VECTOR {
33 UINT32 cbTotalSize; // Total size of the Vector
34
35 // Followed by:
36 // nRows PolyElements
39
40typedef SYMCRYPT_ASYM_ALIGN_STRUCT _SYMCRYPT_MLKEM_MATRIX {
43 UINT32 cbTotalSize; // Total size of the Matrix
44
45 // Array of pointers to PolyElements in row-major order
47 // Note: the extra indirection is intentional to make transposing the matrix cheap,
48 // given that in the MLKEM context the underlying PolyElements are relatively large
49 // so we don't want to move them around
50
51 // Followed by:
52 // nRows*nRows PolyElements
55
56//
57// MLKEMKEY type
58//
59
60#define SYMCRYPT_MLKEMKEY_MAX_SIZEOF_ENCODED_T (1536)
61
63 UINT32 params; // parameter set of ML-KEM being used, takes a value from SYMCRYPT_MLKEM_PARAMS
64
65 UINT32 cbPolyElement; // size of one polynomial ring element
66 UINT32 cbVector; // size of one vector
67 UINT32 cbMatrix; // size of one matrix
68
69 UINT8 nRows; // corresponds to k from FIPS 203; the number of rows and columns in the matrix A,
70 // and the number of rows in column vectors s and t
71 UINT8 nEta1; // corresponds to eta_1 from FIPS 203; number of coinflips used in generating s and e
72 // in keypair generation, and r in encapsulation
73 UINT8 nEta2; // corresponds to eta_2 from FIPS 203; number of coinflips used in generating e_1 and
74 // e_2 in encapsulation
75 UINT8 nBitsOfU; // corresponds to d_u from FIPS 203; number of bits that the coefficients of the polynomial
76 // ring elements of u are compressed to in encapsulation for encoding into ciphertext
77 UINT8 nBitsOfV; // corresponds to d_v from FIPS 203; number of bits that the coefficients of the polynomial
78 // ring element v is compressed to in encapsulation for encoding into ciphertext
81
82typedef SYMCRYPT_ASYM_ALIGN_STRUCT _SYMCRYPT_MLKEMKEY {
83 UINT32 fAlgorithmInfo; // Tracks which algorithms the key can be used in
84 // Also tracks which per-key selftests have been performed on this key
85 // A bitwise OR of SYMCRYPT_FLAG_KEY_*, SYMCRYPT_FLAG_MLKEMKEY_*, and
86 // SYMCRYPT_SELFTEST_KEY_* values
87
89
90 UINT32 cbTotalSize; // Total in-memory size of the ML-KEM key (this header and the following structs)
91
92 BOOLEAN hasPrivateSeed; // Set to true if key has the private seed (d)
93 BOOLEAN hasPrivateKey; // Set to true if key has the private key (s and z)
94
95 // seeds
96 BYTE privateSeed[32]; // private seed (d) from which entire private PKE key can be derived
97 BYTE privateRandom[32]; // private random (z) used in implicit rejection
98
99 BYTE publicSeed[32]; // public seed (rho) from which A can be derived
100
101 // A o s + e = t
102 PSYMCRYPT_MLKEM_MATRIX pmAtranspose; // public matrix in NTT form (derived from publicSeed)
103 PSYMCRYPT_MLKEM_VECTOR pvt; // public vector in NTT form
104
105 PSYMCRYPT_MLKEM_VECTOR pvs; // private vector in NTT form
106
107 // misc fields
108 BYTE encodedT[SYMCRYPT_MLKEMKEY_MAX_SIZEOF_ENCODED_T]; // byte-encoding of public vector
109 // may only use a prefix of this buffer
110 BYTE encapsKeyHash[32]; // Precomputed value of hash of ML-KEM's byte-encoding of encapsulation key
111
113 // Followed by:
114 // Atranspose
115 // t
116 // s
118
119//=====================================================
120// ML-KEM primitives
121//
122
123#define SYMCRYPT_MLKEM_Q (3329)
124
125#define SYMCRYPT_INTERNAL_MLKEM_SIZEOF_POLYRINGELEMENT ( sizeof(SYMCRYPT_MLKEM_POLYELEMENT) )
126#define SYMCRYPT_INTERNAL_MLKEM_SIZEOF_POLYRINGELEMENT_ACCUMULATOR ( sizeof(SYMCRYPT_MLKEM_POLYELEMENT_ACCUMULATOR) )
127#define SYMCRYPT_INTERNAL_MLKEM_MAXIMUM_VECTOR_SIZE ( sizeof(SYMCRYPT_MLKEM_VECTOR) + (SYMCRYPT_MLKEM_MATRIX_MAX_NROWS * SYMCRYPT_INTERNAL_MLKEM_SIZEOF_POLYRINGELEMENT) )
128#define SYMCRYPT_INTERNAL_MLKEM_VECTOR_ELEMENT_OFFSET( _row ) ( sizeof(SYMCRYPT_MLKEM_VECTOR) + ((_row) * SYMCRYPT_INTERNAL_MLKEM_SIZEOF_POLYRINGELEMENT) )
129#define SYMCRYPT_INTERNAL_MLKEM_VECTOR_ELEMENT( _row, _pVector ) (PSYMCRYPT_MLKEM_POLYELEMENT)( (PBYTE)(_pVector) + SYMCRYPT_INTERNAL_MLKEM_VECTOR_ELEMENT_OFFSET(_row) )
130
131#define SYMCRYPT_MLKEM_SIZEOF_MAX_CIPHERTEXT (1568UL)
132#define SYMCRYPT_MLKEM_SIZEOF_AGREED_SECRET (32UL)
133#define SYMCRYPT_MLKEM_SIZEOF_ENCAPS_RANDOM (32UL)
134
135typedef SYMCRYPT_ASYM_ALIGN_STRUCT _SYMCRYPT_MLKEM_INTERNAL_COMPUTATION_TEMPORARIES {
141 union {
147 union {
155
156// exposed here for KAT testing
161 _Out_writes_bytes_( cbAgreedSecret )
162 PBYTE pbAgreedSecret,
163 SIZE_T cbAgreedSecret,
164 _Out_writes_bytes_( cbCiphertext )
165 PBYTE pbCiphertext,
166 SIZE_T cbCiphertext,
168 PCBYTE pbRandom,
170
176
182
188 UINT32 nRows );
189
195 UINT32 nRows );
196
197//
198// ML-KEM operations acting on individual polynomial ring elements (PolyElements)
199//
200
201VOID
207//
208// ML-KEM Polynomial Ring Element multiply and add:
209// paDst = paDst + (peSrc1 o peSrc2)
210// where:
211// o is polynomial multiplication given sources in NTT form
212//
213// Requirements:
214// - peSrc1 and peSrc2 must be PolyElements in ML-KEM's NTT form
215// - paDst must be in NTT form
216//
217
218VOID
223//
224// Montgomery reduce and add a Polynomial Ring Element Accumulator to a Polynomial Ring
225// Element, and wipe the accumulator:
226// peDst = peDst + (paSrc ./ R)
227// paSrc = 0
228// where:
229// ./ is coefficient-wise division and R is Montgomery multiplier
230//
231// - One of the following conditions must be true:
232// - paSrc to be pre-multiplied coefficient-wise by R for addition with a canonical
233// representation of peDst
234// - peDst must be coefficient-wise multiplied by the same constant factor as the
235// resulting of (paSrc ./ R) for the addition to make sense
236//
237
238VOID
243//
244// ML-KEM Polynomial Ring Element multiply each coefficient by Montgomery multiplier R
245// peDst = peSrc .* R
246//
247
248VOID
254//
255// ML-KEM Polynomial Ring Element addition
256// peDst = peSrc1 + peSrc2
257//
258
259VOID
265//
266// ML-KEM Polynomial Ring Element subtract:
267// peDst = peSrc1 - peSrc2
268//
269
270VOID
274//
275// ML-KEM Polynomial Ring Element NTT:
276// peSrc = NTT(peSrc) per FIPS 203
277//
278
279VOID
283//
284// ML-KEM Polynomial Ring Element INTT:
285// peSrc = NTTinverse(peSrc) .* R
286// where .* is coefficient-wise multiplication and R is Montgomery multiplier
287//
288
289VOID
293 UINT32 nBitsPerCoefficient,
295 PBYTE pbDst );
296//
297// ML-KEM Polynomial Ring Element Compress and Encode.
298//
299// Each coefficient in the ring element is Compressed to nBitsPerCoefficient using
300// rounding logic specified in FIPS 203, and the coefficients are encoded
301// (packed together densely as 256 contiguous bitfields) into the pbDst buffer.
302//
303
309 UINT32 nBitsPerCoefficient,
311//
312// ML-KEM Polynomial Ring Element Decode and Decompress.
313//
314// The pbSrc buffer is interpreted as an encoded ring element, with each coefficient
315// being represented by nBitsPerCoefficient. The resulting ring element is written to
316// peDst.
317//
318
319VOID
324//
325// Generates an ML-KEM Polynomial Ring Element in NTT form by extracting bytes from
326// pre-instantiated SHAKE128 state.
327//
328// NOTE: we pass the SHAKE state to this function because we do not know up front
329// how many bytes need to be extracted.
330//
331
332VOID
337 _In_range_(2,3) UINT32 eta,
339//
340// Generates an ML-KEM Polynomial Ring Element in centered binomial distribution
341// from input byte array.
342// Each coefficient is generated using 2*eta bits.
343//
344
345
346//
347// ML-KEM operations acting on Linear Algebra objects
348//
349
350VOID
354//
355// pmSrc = transpose(pmSrc)
356//
357
358VOID
365//
366// pvDst = ((pmSrc1 o pvSrc2) ./ R) + pvDst
367//
368// Remarks:
369// - paTmp is used internally for temporary storage, it is wiped before and after use
370//
371
372VOID
379//
380// peDst = (pvSrc1 o pvSrc2) ./ R
381//
382// Remarks:
383// - paTmp is used internally for temporary storage, it is wiped before and after use
384//
385
386VOID
390//
391// pvSrc = 0
392//
393
394VOID
399//
400// pvDst = pvSrc .* R
401//
402
403
404VOID
410//
411// pvDst = pvSrc1 + pvSrc2
412//
413
414VOID
420//
421// pvDst = pvSrc1 - pvSrc2
422//
423
424VOID
428//
429// pvSrc = NTT(peSrc) per FIPS 203
430//
431
432VOID
436//
437// pvSrc = NTTinverse(pvSrc) .* R
438//
439
440VOID
444 UINT32 nBitsPerCoefficient,
446 SIZE_T cbDst );
447//
448// See ML-KEM Polynomial Ring Element Compress and Encode
449//
450
455 SIZE_T cbSrc,
456 UINT32 nBitsPerCoefficient,
458//
459// See ML-KEM Polynomial Ring Element Decode and Decompress
460//
461
462VOID
466//
467// Wipes the ML-KEM key's private state.
468//
unsigned short UINT16
Definition: actypes.h:129
unsigned char BOOLEAN
Definition: actypes.h:127
unsigned char UINT8
Definition: actypes.h:128
GLenum GLenum const GLfloat * coeffs
Definition: glext.h:11733
#define _In_reads_bytes_(s)
Definition: no_sal2.h:170
#define _Inout_
Definition: no_sal2.h:162
#define _Out_
Definition: no_sal2.h:160
#define _In_
Definition: no_sal2.h:158
#define _Field_range_(l, h)
Definition: no_sal2.h:380
#define _In_range_(l, h)
Definition: no_sal2.h:368
#define _Out_writes_bytes_(s)
Definition: no_sal2.h:178
BYTE * PBYTE
Definition: pedump.c:66
#define SYMCRYPT_MLWE_POLYNOMIAL_COEFFICIENTS
Definition: sc_lib.h:4347
PSYMCRYPT_MLKEMKEY pkMlKemkey
Definition: sc_lib.h:4444
SIZE_T cbBuffer
Definition: sc_lib_mldsa.h:405
VOID SYMCRYPT_CALL SymCryptMlKemPolyElementSub(_In_ PCSYMCRYPT_MLKEM_POLYELEMENT peSrc1, _In_ PCSYMCRYPT_MLKEM_POLYELEMENT peSrc2, _Out_ PSYMCRYPT_MLKEM_POLYELEMENT peDst)
SYMCRYPT_ASYM_ALIGN_STRUCT _SYMCRYPT_MLKEM_VECTOR
Definition: sc_lib_mlkem.h:30
PSYMCRYPT_MLKEM_VECTOR pvt
Definition: sc_lib_mlkem.h:103
UINT32 cbTotalSize
Definition: sc_lib_mlkem.h:33
VOID SYMCRYPT_CALL SymCryptMlKemVectorMulR(_In_ PCSYMCRYPT_MLKEM_VECTOR pvSrc, _Out_ PSYMCRYPT_MLKEM_VECTOR pvDst)
BYTE encapsKeyHash[32]
Definition: sc_lib_mlkem.h:110
VOID SYMCRYPT_CALL SymCryptMlKemVectorCompressAndEncode(_In_ PCSYMCRYPT_MLKEM_VECTOR pvSrc, UINT32 nBitsPerCoefficient, _Out_writes_bytes_(cbDst) PBYTE pbDst, SIZE_T cbDst)
SYMCRYPT_MLKEM_MATRIX
Definition: sc_lib_mlkem.h:53
#define SYMCRYPT_INTERNAL_MLKEM_MAXIMUM_VECTOR_SIZE
Definition: sc_lib_mlkem.h:127
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)
SYMCRYPT_MLKEM_POLYELEMENT * PSYMCRYPT_MLKEM_POLYELEMENT
Definition: sc_lib_mlkem.h:18
SYMCRYPT_ALIGN_STRUCT _SYMCRYPT_MLKEM_INTERNAL_PARAMS
Definition: sc_lib_mlkem.h:62
SYMCRYPT_SHAKE128_STATE shake128State
Definition: sc_lib_mlkem.h:142
VOID SYMCRYPT_CALL SymCryptMlKemVectorSetZero(_Inout_ PSYMCRYPT_MLKEM_VECTOR pvSrc)
SYMCRYPT_SHA3_512_STATE sha3_512State
Definition: sc_lib_mlkem.h:145
UINT32 cbPolyElement
Definition: sc_lib_mlkem.h:65
PSYMCRYPT_MLKEM_POLYELEMENT apPolyElements[SYMCRYPT_MLKEM_MATRIX_MAX_NROWS *SYMCRYPT_MLKEM_MATRIX_MAX_NROWS]
Definition: sc_lib_mlkem.h:46
SYMCRYPT_ASYM_ALIGN_STRUCT _SYMCRYPT_MLKEM_POLYELEMENT
Definition: sc_lib_mlkem.h:14
SYMCRYPT_MLKEM_POLYELEMENT_ACCUMULATOR * PSYMCRYPT_MLKEM_POLYELEMENT_ACCUMULATOR
Definition: sc_lib_mlkem.h:25
* PSYMCRYPT_MLKEM_INTERNAL_PARAMS
Definition: sc_lib_mlkem.h:79
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)
#define SYMCRYPT_INTERNAL_MLKEM_SIZEOF_POLYRINGELEMENT
Definition: sc_lib_mlkem.h:125
UINT8 nBitsOfU
Definition: sc_lib_mlkem.h:75
#define SYMCRYPT_MLKEM_SIZEOF_ENCAPS_RANDOM
Definition: sc_lib_mlkem.h:133
BYTE abPolyElementBuffer1[SYMCRYPT_INTERNAL_MLKEM_SIZEOF_POLYRINGELEMENT]
Definition: sc_lib_mlkem.h:139
union @5248 hashState1
VOID SYMCRYPT_CALL SymCryptMlKemMatrixTranspose(_Inout_ PSYMCRYPT_MLKEM_MATRIX pmSrc)
#define SYMCRYPT_INTERNAL_MLKEM_SIZEOF_POLYRINGELEMENT_ACCUMULATOR
Definition: sc_lib_mlkem.h:126
UINT8 nRows
Definition: sc_lib_mlkem.h:69
VOID SYMCRYPT_CALL SymCryptMlKemPolyElementNTT(_Inout_ PSYMCRYPT_MLKEM_POLYELEMENT peSrc)
SYMCRYPT_SHA3_256_STATE sha3_256State
Definition: sc_lib_mlkem.h:144
BYTE privateRandom[32]
Definition: sc_lib_mlkem.h:97
SYMCRYPT_ASYM_ALIGN_STRUCT _SYMCRYPT_MLKEM_INTERNAL_COMPUTATION_TEMPORARIES
Definition: sc_lib_mlkem.h:135
SYMCRYPT_ASYM_ALIGN_STRUCT _SYMCRYPT_MLKEM_POLYELEMENT_ACCUMULATOR
Definition: sc_lib_mlkem.h:21
SYMCRYPT_ASYM_ALIGN_STRUCT _SYMCRYPT_MLKEMKEY
Definition: sc_lib_mlkem.h:82
PSYMCRYPT_MLKEM_POLYELEMENT SYMCRYPT_CALL SymCryptMlKemPolyElementCreate(_Out_writes_bytes_(cbBuffer) PBYTE pbBuffer, UINT32 cbBuffer)
BYTE abVectorBuffer1[SYMCRYPT_INTERNAL_MLKEM_MAXIMUM_VECTOR_SIZE]
Definition: sc_lib_mlkem.h:137
PSYMCRYPT_MLKEM_VECTOR pvs
Definition: sc_lib_mlkem.h:105
SYMCRYPT_MLKEM_INTERNAL_COMPUTATION_TEMPORARIES
Definition: sc_lib_mlkem.h:153
UINT32 cbMatrix
Definition: sc_lib_mlkem.h:67
SYMCRYPT_MAGIC_FIELD SYMCRYPT_MLKEMKEY
Definition: sc_lib_mlkem.h:117
UINT32 cbVector
Definition: sc_lib_mlkem.h:66
VOID SYMCRYPT_CALL SymCryptMlKemPolyElementSampleNTTFromShake128(_Inout_ PSYMCRYPT_SHAKE128_STATE pState, _Out_ PSYMCRYPT_MLKEM_POLYELEMENT peDst)
* PSYMCRYPT_MLKEM_VECTOR
Definition: sc_lib_mlkem.h:37
const SYMCRYPT_MLKEM_INTERNAL_PARAMS * PCSYMCRYPT_MLKEM_INTERNAL_PARAMS
Definition: sc_lib_mlkem.h:80
UINT8 nEta2
Definition: sc_lib_mlkem.h:73
BYTE abPolyElementAccumulatorBuffer[SYMCRYPT_INTERNAL_MLKEM_SIZEOF_POLYRINGELEMENT_ACCUMULATOR]
Definition: sc_lib_mlkem.h:140
* PSYMCRYPT_MLKEM_MATRIX
Definition: sc_lib_mlkem.h:53
VOID SYMCRYPT_CALL SymCryptMlKemVectorSub(_In_ PCSYMCRYPT_MLKEM_VECTOR pvSrc1, _In_ PCSYMCRYPT_MLKEM_VECTOR pvSrc2, _Out_ PSYMCRYPT_MLKEM_VECTOR pvDst)
SYMCRYPT_MLKEM_POLYELEMENT_ACCUMULATOR
Definition: sc_lib_mlkem.h:24
VOID SYMCRYPT_CALL SymCryptMlKemMontgomeryReduceAndAddPolyElementAccumulatorToPolyElement(_Inout_ PSYMCRYPT_MLKEM_POLYELEMENT_ACCUMULATOR paSrc, _Inout_ PSYMCRYPT_MLKEM_POLYELEMENT peDst)
SYMCRYPT_ERROR SYMCRYPT_CALL SymCryptMlKemEncapsulateInternal(_In_ PCSYMCRYPT_MLKEMKEY pkMlKemkey, _Out_writes_bytes_(cbAgreedSecret) PBYTE pbAgreedSecret, SIZE_T cbAgreedSecret, _Out_writes_bytes_(cbCiphertext) PBYTE pbCiphertext, SIZE_T cbCiphertext, _In_reads_bytes_(SYMCRYPT_MLKEM_SIZEOF_ENCAPS_RANDOM) PCBYTE pbRandom, _Inout_ PSYMCRYPT_MLKEM_INTERNAL_COMPUTATION_TEMPORARIES pCompTemps)
Definition: mlkem.c:807
const SYMCRYPT_MLKEM_MATRIX * PCSYMCRYPT_MLKEM_MATRIX
Definition: sc_lib_mlkem.h:54
VOID SYMCRYPT_CALL SymCryptMlKemPolyElementINTTAndMulR(_Inout_ PSYMCRYPT_MLKEM_POLYELEMENT peSrc)
SYMCRYPT_SHAKE256_STATE shake256State
Definition: sc_lib_mlkem.h:143
#define SYMCRYPT_MLKEM_MATRIX_MAX_NROWS
Definition: sc_lib_mlkem.h:28
UINT8 nEta1
Definition: sc_lib_mlkem.h:71
SYMCRYPT_MLKEM_POLYELEMENT
Definition: sc_lib_mlkem.h:17
VOID SYMCRYPT_CALL SymCryptMlKemVectorNTT(_Inout_ PSYMCRYPT_MLKEM_VECTOR pvSrc)
SYMCRYPT_MLKEM_VECTOR
Definition: sc_lib_mlkem.h:37
VOID SYMCRYPT_CALL SymCryptMlKemkeyWipePrivateState(_Inout_ PSYMCRYPT_MLKEMKEY pkMlKemkey)
#define SYMCRYPT_MLKEMKEY_MAX_SIZEOF_ENCODED_T
Definition: sc_lib_mlkem.h:60
BOOLEAN hasPrivateSeed
Definition: sc_lib_mlkem.h:92
PSYMCRYPT_MLKEM_MATRIX pmAtranspose
Definition: sc_lib_mlkem.h:102
PSYMCRYPT_MLKEM_POLYELEMENT_ACCUMULATOR SYMCRYPT_CALL SymCryptMlKemPolyElementAccumulatorCreate(_Out_writes_bytes_(cbBuffer) PBYTE pbBuffer, UINT32 cbBuffer)
SYMCRYPT_ASYM_ALIGN_STRUCT _SYMCRYPT_MLKEM_MATRIX
Definition: sc_lib_mlkem.h:40
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)
BYTE privateSeed[32]
Definition: sc_lib_mlkem.h:96
const SYMCRYPT_MLKEM_VECTOR * PCSYMCRYPT_MLKEM_VECTOR
Definition: sc_lib_mlkem.h:38
BYTE publicSeed[32]
Definition: sc_lib_mlkem.h:99
const SYMCRYPT_MLKEM_POLYELEMENT * PCSYMCRYPT_MLKEM_POLYELEMENT
Definition: sc_lib_mlkem.h:19
BYTE encodedT[SYMCRYPT_MLKEMKEY_MAX_SIZEOF_ENCODED_T]
Definition: sc_lib_mlkem.h:108
BOOLEAN hasPrivateKey
Definition: sc_lib_mlkem.h:93
UINT8 nBitsOfV
Definition: sc_lib_mlkem.h:77
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)
SYMCRYPT_MLKEM_INTERNAL_PARAMS
Definition: sc_lib_mlkem.h:79
BYTE abPolyElementBuffer0[SYMCRYPT_INTERNAL_MLKEM_SIZEOF_POLYRINGELEMENT]
Definition: sc_lib_mlkem.h:138
union @5247 hashState0
SYMCRYPT_MLKEM_INTERNAL_COMPUTATION_TEMPORARIES * PSYMCRYPT_MLKEM_INTERNAL_COMPUTATION_TEMPORARIES
Definition: sc_lib_mlkem.h:154
SYMCRYPT_MLKEM_INTERNAL_PARAMS params
Definition: sc_lib_mlkem.h:88
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)
PSYMCRYPT_MLKEM_MATRIX SYMCRYPT_CALL SymCryptMlKemMatrixCreate(_Out_writes_bytes_(cbBuffer) PBYTE pbBuffer, UINT32 cbBuffer, UINT32 nRows)
SYMCRYPT_ERROR
Definition: symcrypt.h:227
PCBYTE pbSrc
#define SYMCRYPT_CALL
SYMCRYPT_MAGIC_FIELD SYMCRYPT_SHAKE256_STATE
SYMCRYPT_MLKEMKEY * PSYMCRYPT_MLKEMKEY
SYMCRYPT_MAGIC_FIELD SYMCRYPT_SHA3_256_STATE
SYMCRYPT_MAGIC_FIELD * PSYMCRYPT_SHAKE128_STATE
PCBYTE PBYTE pbDst
SYMCRYPT_MAGIC_FIELD SYMCRYPT_SHA3_512_STATE
SYMCRYPT_MAGIC_FIELD SYMCRYPT_SHAKE128_STATE
#define SYMCRYPT_MAGIC_FIELD
PSYMCRYPT_COMMON_HASH_STATE pState
const BYTE * PCBYTE
#define SYMCRYPT_ALIGN_STRUCT
const SYMCRYPT_MLKEMKEY * PCSYMCRYPT_MLKEMKEY
ULONG_PTR SIZE_T
Definition: typedefs.h:80
uint32_t UINT32
Definition: typedefs.h:59
unsigned char BYTE
Definition: xxhash.c:193