ReactOS 0.4.17-dev-1005-g171e1de
primes.c File Reference
#include "precomp.h"
Include dependency graph for primes.c:

Go to the source code of this file.

Macros

#define SYMCRYPT_PRIME_GENERATION_MR_ITERATIONS   (64)
 

Functions

UINT32 SYMCRYPT_CALL SymCryptIntMillerRabinPrimalityTest (_In_ PCSYMCRYPT_INT piSrc, UINT32 nBitsSrc, UINT32 nIterations, UINT32 flags, _Out_writes_bytes_(cbScratch) PBYTE pbScratch, SIZE_T cbScratch)
 
SYMCRYPT_ERROR SYMCRYPT_CALL SymCryptIntGenerateRandomPrime (_In_ PCSYMCRYPT_INT piLow, _In_ PCSYMCRYPT_INT piHigh, _In_reads_opt_(nPubExp) PCUINT64 pu64PubExp, UINT32 nPubExp, UINT32 nTries, UINT32 flags, _Inout_ PSYMCRYPT_INT piDst, _Out_writes_bytes_(cbScratch) PBYTE pbScratch, SIZE_T cbScratch)
 

Macro Definition Documentation

◆ SYMCRYPT_PRIME_GENERATION_MR_ITERATIONS

#define SYMCRYPT_PRIME_GENERATION_MR_ITERATIONS   (64)

Definition at line 166 of file primes.c.

Function Documentation

◆ SymCryptIntGenerateRandomPrime()

SYMCRYPT_ERROR SYMCRYPT_CALL SymCryptIntGenerateRandomPrime ( _In_ PCSYMCRYPT_INT  piLow,
_In_ PCSYMCRYPT_INT  piHigh,
_In_reads_opt_(nPubExp) PCUINT64  pu64PubExp,
UINT32  nPubExp,
UINT32  nTries,
UINT32  flags,
_Inout_ PSYMCRYPT_INT  piDst,
_Out_writes_bytes_(cbScratch) PBYTE  pbScratch,
SIZE_T  cbScratch 
)

Definition at line 170 of file primes.c.

180{
181 SYMCRYPT_ERROR scError = SYMCRYPT_EXTERNAL_FAILURE;
183 PSYMCRYPT_INT piTmp;
184
185 UINT32 cnt = 0;
186 UINT32 e;
187 BOOLEAN reject;
188 SIZE_T cbObj;
189
191 UINT32 nBytes = (nBits + 7)/8;
192
193 UINT32 nBitsHigh = SymCryptIntBitsizeOfValue( piHigh );
194
196
200
202
203 // Allocate divisor objects for each public exponent & initialize them
205 for( e = 0; e < nPubExp; e++ )
206 {
207 SYMCRYPT_ASSERT( cbScratch >= cbObj );
208 if( pu64PubExp[e] == 0 )
209 {
210 scError = SYMCRYPT_INVALID_ARGUMENT;
211 goto exit;
212 }
213
214 pdPubExp[e] = SymCryptDivisorCreate( pbScratch, cbObj, 1 );
215 pbScratch += cbObj;
216 cbScratch -= cbObj;
217
218 SymCryptIntSetValueUint64( pu64PubExp[e], SymCryptIntFromDivisor( pdPubExp[e] ) );
219 SymCryptIntToDivisor( SymCryptIntFromDivisor( pdPubExp[e] ), pdPubExp[e], 1000, SYMCRYPT_FLAG_DATA_PUBLIC, pbScratch, cbScratch );
220 }
221
222 cbObj = SymCryptSizeofIntFromDigits( 1 );
223 SYMCRYPT_ASSERT( cbScratch >= cbObj + nBytes );
224 piTmp = SymCryptIntCreate( pbScratch, cbObj, 1 );
225 pbScratch += cbObj;
226 cbScratch -= cbObj;
227
228 do
229 {
230 cnt++;
231
232 scError = SymCryptCallbackRandom( pbScratch, nBytes );
233 if (scError != SYMCRYPT_NO_ERROR)
234 {
235 goto exit;
236 }
237
238 scError = SymCryptIntSetValue( pbScratch, nBytes, SYMCRYPT_NUMBER_FORMAT_MSB_FIRST, piDst );
239 if (scError != SYMCRYPT_NO_ERROR)
240 {
241 goto exit;
242 }
243
244 // Set the integer to 3 mod 4
245 SymCryptIntSetBits( piDst, 3, 0, 2 );
246
247 // Zero out the top bits above the upper limit
248 SymCryptIntModPow2( piDst, nBitsHigh, piDst );
249
250 // Check if it is in the correct range
251 if ( (SymCryptIntIsLessThan( piDst, piLow )) ||
252 (!SymCryptIntIsLessThan( piDst, piHigh )) )
253 {
254 continue;
255 }
256
257 // Fast compositeness check
258 if( SymCryptIntFindSmallDivisor( pTrialDivisionContext, piDst, NULL, 0 ) != 0 )
259 {
260 // We found a small divisor; it is not a prime
261 continue;
262 }
263
264 // Check for compatibility with public exponents (if provided)
265 reject = FALSE;
266 for( e = 0; e < nPubExp; e++ )
267 {
268 SymCryptIntDivMod( piDst, pdPubExp[e], NULL, piTmp, pbScratch, cbScratch );
269
270 // Check that e has a modular inverse mod P-1
271 // If e and P-1 are coprime, or GCD( P-1, e ) == 1, then e^-1 exists
272 // We have (P mod e) in piTmp.
273 // If piTmp == 0 then P is divisible by e, and will fail primality test - we don't care about the result of the GCD
274 // Otherwise, GCD( (P mod e)-1, e ) == GCD( P-1 mod e, e ) == GCD( P-1, e )
275 //
276 // Note that if P-1 is a multiple of e then (P mod e)-1 == 0, and GCD( 0, e ) == e
278 {
279 // We can't continue the big loop from here :-(
280 reject = TRUE;
281 break;
282 }
283 }
284 if( reject )
285 {
286 continue;
287 }
288
289 // Primality check
291 {
292 scError = SYMCRYPT_NO_ERROR;
293 break;
294 }
295 }
296 while (cnt<nTries);
297
298 if (cnt>=nTries)
299 {
300 scError = SYMCRYPT_INVALID_ARGUMENT;
301 }
302
303exit:
304 SymCryptFreeTrialDivisionContext( pTrialDivisionContext );
305 return scError;
306}
unsigned char BOOLEAN
Definition: actypes.h:127
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
GLbitfield flags
Definition: glext.h:7161
SYMCRYPT_ERROR SYMCRYPT_CALL SymCryptCallbackRandom(BYTE *buf, SIZE_T size)
Definition: implglue.c:56
#define e
Definition: ke_i.h:82
#define UNREFERENCED_PARAMETER(P)
Definition: ntbasedef.h:329
int nBits
Definition: pcmconverter.c:96
UINT32 SYMCRYPT_CALL SymCryptIntMillerRabinPrimalityTest(_In_ PCSYMCRYPT_INT piSrc, UINT32 nBitsSrc, UINT32 nIterations, UINT32 flags, _Out_writes_bytes_(cbScratch) PBYTE pbScratch, SIZE_T cbScratch)
Definition: primes.c:12
#define SYMCRYPT_PRIME_GENERATION_MR_ITERATIONS
Definition: primes.c:166
UINT32 UINT32 UINT32 UINT32 cbScratch
#define exit(n)
Definition: config.h:202
#define SYMCRYPT_ASSERT(_x)
Definition: symcrypt.h:10807
@ SYMCRYPT_NUMBER_FORMAT_MSB_FIRST
Definition: symcrypt.h:7017
SYMCRYPT_ERROR
Definition: symcrypt.h:227
UINT32 nPubExp
#define SYMCRYPT_RSAKEY_MAX_NUMOF_PUBEXPS
SYMCRYPT_DIVISOR * PSYMCRYPT_DIVISOR
SYMCRYPT_INT * PSYMCRYPT_INT
PCSYMCRYPT_TRIALDIVISION_CONTEXT SYMCRYPT_CALL SymCryptCreateTrialDivisionContext(UINT32 nDigits)
Definition: a_dispatch.c:1007
UINT64 SYMCRYPT_CALL SymCryptUint64Gcd(UINT64 a, UINT64 b, UINT32 flags)
Definition: gen_int.c:12
#define SYMCRYPT_FLAG_GCD_INPUTS_NOT_BOTH_EVEN
UINT32 SYMCRYPT_CALL SymCryptSizeofDivisorFromDigits(UINT32 nDigits)
Definition: a_dispatch.c:512
UINT32 SYMCRYPT_CALL SymCryptIntIsLessThan(_In_ PCSYMCRYPT_INT piSrc1, _In_ PCSYMCRYPT_INT piSrc2)
Definition: a_dispatch.c:442
VOID SYMCRYPT_CALL SymCryptIntSetBits(_In_ PSYMCRYPT_INT piDst, UINT32 value, UINT32 iBit, UINT32 nBits)
Definition: a_dispatch.c:413
VOID SYMCRYPT_CALL SymCryptIntSetValueUint64(UINT64 u64Src, _Out_ PSYMCRYPT_INT piDst)
Definition: a_dispatch.c:239
UINT32 SYMCRYPT_CALL SymCryptIntBitsizeOfObject(_In_ PCSYMCRYPT_INT piSrc)
Definition: a_dispatch.c:200
UINT32 SymCryptDigitsFromBits(UINT32 nBits)
Definition: a_dispatch.c:111
#define SYMCRYPT_SCRATCH_BYTES_FOR_INT_PRIME_GEN(_nDigits)
UINT32 SYMCRYPT_CALL SymCryptIntDigitsizeOfObject(_In_ PCSYMCRYPT_INT piSrc)
Definition: a_dispatch.c:207
UINT64 SYMCRYPT_CALL SymCryptIntGetValueLsbits64(_In_ PCSYMCRYPT_INT piSrc)
Definition: a_dispatch.c:277
SYMCRYPT_ERROR SYMCRYPT_CALL SymCryptIntSetValue(_In_reads_bytes_(cbSrc) PCBYTE pbSrc, SIZE_T cbSrc, SYMCRYPT_NUMBER_FORMAT format, _Out_ PSYMCRYPT_INT piDst)
Definition: a_dispatch.c:248
VOID SYMCRYPT_CALL SymCryptIntToDivisor(_In_ PCSYMCRYPT_INT piSrc, _Out_ PSYMCRYPT_DIVISOR pdDst, UINT32 totalOperations, UINT32 flags, _Out_writes_bytes_(cbScratch) PBYTE pbScratch, SIZE_T cbScratch)
Definition: a_dispatch.c:560
VOID SYMCRYPT_CALL SymCryptIntModPow2(_In_ PCSYMCRYPT_INT piSrc, SIZE_T exp, _Out_ PSYMCRYPT_INT piDst)
Definition: a_dispatch.c:384
PSYMCRYPT_INT SYMCRYPT_CALL SymCryptIntFromDivisor(_In_ PSYMCRYPT_DIVISOR pdSrc)
Definition: a_dispatch.c:553
PSYMCRYPT_DIVISOR SYMCRYPT_CALL SymCryptDivisorCreate(_Out_writes_bytes_(cbBuffer) PBYTE pbBuffer, SIZE_T cbBuffer, UINT32 nDigits)
Definition: a_dispatch.c:519
VOID SYMCRYPT_CALL SymCryptFreeTrialDivisionContext(PCSYMCRYPT_TRIALDIVISION_CONTEXT pContext)
Definition: a_dispatch.c:1025
UINT32 SYMCRYPT_CALL SymCryptIntBitsizeOfValue(_In_ PCSYMCRYPT_INT piSrc)
Definition: a_dispatch.c:223
UINT32 SYMCRYPT_CALL SymCryptSizeofIntFromDigits(UINT32 nDigits)
Definition: a_dispatch.c:134
VOID SYMCRYPT_CALL SymCryptIntDivMod(_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: a_dispatch.c:573
UINT32 SYMCRYPT_CALL SymCryptIntFindSmallDivisor(_In_ PCSYMCRYPT_TRIALDIVISION_CONTEXT pContext, _In_ PCSYMCRYPT_INT piSrc, _Out_writes_bytes_(cbScratch) PBYTE pbScratch, SIZE_T cbScratch)
Definition: a_dispatch.c:1014
#define SYMCRYPT_FLAG_DATA_PUBLIC
PSYMCRYPT_INT SYMCRYPT_CALL SymCryptIntCreate(_Out_writes_bytes_(cbBuffer) PBYTE pbBuffer, SIZE_T cbBuffer, UINT32 nDigits)
Definition: a_dispatch.c:141
ULONG_PTR SIZE_T
Definition: typedefs.h:80
uint32_t UINT32
Definition: typedefs.h:59
_In_ size_t cnt
Definition: wcstombs.cpp:43

Referenced by SymCryptRsakeyGenerate().

◆ SymCryptIntMillerRabinPrimalityTest()

UINT32 SYMCRYPT_CALL SymCryptIntMillerRabinPrimalityTest ( _In_ PCSYMCRYPT_INT  piSrc,
UINT32  nBitsSrc,
UINT32  nIterations,
UINT32  flags,
_Out_writes_bytes_(cbScratch) PBYTE  pbScratch,
SIZE_T  cbScratch 
)

Definition at line 12 of file primes.c.

19{
20 BOOLEAN innerLoop = TRUE;
21 UINT32 borrow = 0;
22
23 UINT32 nDigitsSrc = 0;
24
25 UINT32 R = 1;
26 PSYMCRYPT_INT piD = NULL;
27 UINT32 cbD = 0;
29 UINT32 cbModulus = 0;
31 UINT32 cbX = 0;
32
34 PSYMCRYPT_MODELEMENT peMinOne = NULL;
35
36 nDigitsSrc = SymCryptIntDigitsizeOfObject( piSrc );
37 cbD = SymCryptSizeofIntFromDigits( nDigitsSrc );
38 cbModulus = SymCryptSizeofModulusFromDigits( nDigitsSrc );
39
40 SYMCRYPT_ASSERT( nBitsSrc >= SymCryptIntBitsizeOfValue( piSrc ) );
41
43
44 // Allocate the modulus
45 pmModulus = SymCryptModulusCreate( pbScratch, cbModulus, nDigitsSrc );
47 pbScratch += cbModulus;
48 cbScratch -= cbModulus;
49
50 // Set the modulus
52 piSrc,
54 nBitsSrc, // Average number of expected operations
56 pbScratch,
57 cbScratch );
58
59 // Modelement size
61
62 SYMCRYPT_ASSERT( cbScratch >= 3*cbX + cbD +
64
65 peX = SymCryptModElementCreate( pbScratch, cbX, pmModulus );
66 SYMCRYPT_ASSERT( peX != NULL );
67 pbScratch += cbX;
68 cbScratch -= cbX;
69
70 peOne = SymCryptModElementCreate( pbScratch, cbX, pmModulus );
71 SYMCRYPT_ASSERT( peOne != NULL );
72 pbScratch += cbX;
73 cbScratch -= cbX;
74
75 peMinOne = SymCryptModElementCreate( pbScratch, cbX, pmModulus );
76 SYMCRYPT_ASSERT( peMinOne != NULL );
77 pbScratch += cbX;
78 cbScratch -= cbX;
79
80 // Allocate D
81 piD = SymCryptIntCreate( pbScratch, cbD, nDigitsSrc );
82 SYMCRYPT_ASSERT( piD != NULL );
83 pbScratch += cbD;
84 cbScratch -= cbD;
85
86 // Calculate (piSrc - 1)
87 // Note: We should never get a borrow here because the requirement
88 // is that Src > 3.
89 SymCryptIntCopy( piSrc, piD );
90 borrow = SymCryptIntSubUint32( piD, 1, piD );
91 SYMCRYPT_ASSERT( borrow==0 );
92
93 SYMCRYPT_ASSERT( SymCryptIntGetBit( piD, 0 ) == 0 );
94
95 // Check the 3 mod 4 requirement when side-channel safe
98 (SymCryptIntGetBit( piD, 1 )!=0) );
100
101 // Calculate R and D such that Src - 1 = D*2^R
102 // Notice that the loop executes only if
103 // the SYMCRYPT_FLAG_DATA_PUBLIC is
104 // specified (and Src != 3 mod 4)
105 R = 1;
106 while( SymCryptIntGetBit( piD, R )==0 )
107 {
108 R++;
109 }
110 SymCryptIntDivPow2( piD, R, piD );
111
112 // Set peOne and peMinOne
114 SymCryptModElementSetValueNegUint32( 1, pmModulus, peMinOne, pbScratch, cbScratch );
115
116 for (UINT32 i=0; i<nIterations; i++)
117 {
118 // Pick a random X in [2, piSrc-2]
119 // Therefore the flags parameter is 0 (default: not allowed 0, 1, -1 when modulus > 3)
120 SymCryptModSetRandom( pmModulus, peX, 0, pbScratch, cbScratch );
121
122 // X^D mod piSrc
123 // Notice that nBitsSrc is public in the call of SymCryptModExp
124 SymCryptModExp( pmModulus, peX, piD, nBitsSrc, 0, peX, pbScratch, cbScratch );
125
126 // Check for 1 or -1
127 if ( SymCryptModElementIsEqual( pmModulus, peX, peOne ) |
128 SymCryptModElementIsEqual( pmModulus, peX, peMinOne ) )
129 {
130 continue;
131 }
132
133 // repeat R-1 times
134 // Notice that the inner loop executes only if
135 // the SYMCRYPT_FLAG_DATA_PUBLIC is
136 // specified (and Src != 3 mod 4)
137 innerLoop = TRUE;
138 for (UINT32 j=0; (j<R-1)&&(innerLoop); j++)
139 {
140 // Square X
141 SymCryptModSquare( pmModulus, peX, peX, pbScratch, cbScratch );
142
143 // Check if it is 1
144 if (SymCryptModElementIsEqual( pmModulus, peX, peOne ))
145 {
146 return 0x0;
147 }
148
149 // Check if it is -1
150 if (SymCryptModElementIsEqual( pmModulus, peX, peMinOne ))
151 {
152 innerLoop = FALSE;
153 break;
154 }
155 }
156
157 if (innerLoop)
158 {
159 return 0x0;
160 }
161 }
162
163 return 0xffffffff; // Prime
164}
@ R
Definition: bidi.c:79
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
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
Definition: glfuncs.h:250
PSYMCRYPT_MODULUS pmModulus
SYMCRYPT_MODELEMENT * PSYMCRYPT_MODELEMENT
SYMCRYPT_MODULUS * PSYMCRYPT_MODULUS
UINT32 SYMCRYPT_CALL SymCryptSizeofModElementFromModulus(PCSYMCRYPT_MODULUS pmMod)
Definition: a_dispatch.c:658
VOID SYMCRYPT_CALL SymCryptIntDivPow2(_In_ PCSYMCRYPT_INT piSrc, SIZE_T exp, _Out_ PSYMCRYPT_INT piDst)
Definition: a_dispatch.c:364
VOID SYMCRYPT_CALL SymCryptIntCopy(_In_ PCSYMCRYPT_INT piSrc, _Out_ PSYMCRYPT_INT piDst)
Definition: a_dispatch.c:161
UINT32 SYMCRYPT_CALL SymCryptModElementIsEqual(_In_ PCSYMCRYPT_MODULUS pmMod, _In_ PCSYMCRYPT_MODELEMENT peSrc1, _In_ PCSYMCRYPT_MODELEMENT peSrc2)
Definition: a_dispatch.c:818
#define SYMCRYPT_SCRATCH_BYTES_FOR_INT_TO_MODULUS(_nDigits)
VOID SYMCRYPT_CALL SymCryptModSetRandom(_In_ PCSYMCRYPT_MODULUS pmMod, _Out_ PSYMCRYPT_MODELEMENT peDst, UINT32 flags, _Out_writes_bytes_(cbScratch) PBYTE pbScratch, SIZE_T cbScratch)
Definition: a_dispatch.c:993
#define SYMCRYPT_FLAG_MODULUS_PARITY_PUBLIC
PSYMCRYPT_MODELEMENT SYMCRYPT_CALL SymCryptModElementCreate(_Out_writes_bytes_(cbBuffer) PBYTE pbBuffer, SIZE_T cbBuffer, _In_ PCSYMCRYPT_MODULUS pmMod)
Definition: a_dispatch.c:665
VOID SYMCRYPT_CALL SymCryptModElementSetValueUint32(UINT32 value, _In_ PCSYMCRYPT_MODULUS pmMod, _Out_ PSYMCRYPT_MODELEMENT peDst, _Out_writes_bytes_(cbScratch) PBYTE pbScratch, SIZE_T cbScratch)
Definition: a_dispatch.c:908
UINT32 SYMCRYPT_CALL SymCryptIntGetBit(_In_ PCSYMCRYPT_INT piSrc, UINT32 iBit)
Definition: a_dispatch.c:394
#define SYMCRYPT_SCRATCH_BYTES_FOR_COMMON_MOD_OPERATIONS(_nDigits)
PSYMCRYPT_MODULUS SYMCRYPT_CALL SymCryptModulusCreate(_Out_writes_bytes_(cbBuffer) PBYTE pbBuffer, SIZE_T cbBuffer, UINT32 nDigits)
Definition: a_dispatch.c:608
UINT32 SYMCRYPT_CALL SymCryptIntSubUint32(_In_ PCSYMCRYPT_INT piSrc1, UINT32 Src2, _Out_ PSYMCRYPT_INT piDst)
Definition: a_dispatch.c:314
VOID SYMCRYPT_CALL SymCryptModSquare(_In_ PCSYMCRYPT_MODULUS pmMod, _In_ PCSYMCRYPT_MODELEMENT peSrc, _Out_ PSYMCRYPT_MODELEMENT peDst, _Out_writes_bytes_(cbScratch) PBYTE pbScratch, SIZE_T cbScratch)
Definition: a_dispatch.c:881
UINT32 SYMCRYPT_CALL SymCryptSizeofModulusFromDigits(UINT32 nDigits)
Definition: a_dispatch.c:601
VOID SYMCRYPT_CALL SymCryptIntToModulus(_In_ PCSYMCRYPT_INT piSrc, _Out_ PSYMCRYPT_MODULUS pmDst, UINT32 averageOperations, UINT32 flags, _Out_writes_bytes_(cbScratch) PBYTE pbScratch, SIZE_T cbScratch)
Definition: a_dispatch.c:727
VOID SYMCRYPT_CALL SymCryptModExp(_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: a_dispatch.c:961
VOID SYMCRYPT_CALL SymCryptModElementSetValueNegUint32(UINT32 value, _In_ PCSYMCRYPT_MODULUS pmMod, _Out_ PSYMCRYPT_MODELEMENT peDst, _Out_writes_bytes_(cbScratch) PBYTE pbScratch, SIZE_T cbScratch)
Definition: a_dispatch.c:922

Referenced by SymCryptDlgroupGeneratePrimeP_FIPS(), SymCryptDlgroupGeneratePrimeQ_FIPS(), and SymCryptIntGenerateRandomPrime().