69 pbScratch += cbEcpoint;
74 pCurve->info.sw.nPrecompPoints,
75 pCurve->info.sw.poPrecompPoints,
82#define DELTA_MASK( _index, _target) SYMCRYPT_MASK32_ZERO( (_index) ^ (_target) )
112 UINT32 nRecodedDigits = ((
pCurve->GOrdBitsize +
w - 2) / (
w-1)) + 1;
143 scError = SYMCRYPT_INVALID_ARGUMENT;
151 bPrecompOffline =
TRUE;
161 (nPrecompPoints+2)*cbEcpoint +
169 pbScratch +=
pCurve->cbModElement;
173 for (
i=0;
i<nPrecompPoints;
i++)
177 poPIs[
i] =
pCurve->info.sw.poPrecompPoints[
i];
183 pbScratch += cbEcpoint;
190 pbScratch += cbEcpoint;
194 pbScratch += cbEcpoint;
199 pbScratch += cbScalar;
203 pbScratch += cbScalar;
206 absofKIs = (
PUINT32) pbScratch;
207 pbScratch += nRecodedDigits *
sizeof(
UINT32);
208 sigofKIs = (
PUINT32) pbScratch;
209 pbScratch += nRecodedDigits *
sizeof(
UINT32);
213 cbScratch -= (
pCurve->cbModElement + (nPrecompPoints+2)*cbEcpoint + 2*cbScalar );
241 if (!bPrecompOffline)
257 for (
j=0;
j<nPrecompPoints;
j++)
259 indexMask =
DELTA_MASK(
j, absofKIs[nRecodedDigits-1] );
263 for (
i=nRecodedDigits - 2;
i>0;
i--)
266 for (
j=0;
j<
w-1;
j++)
272 for (
j=0;
j<nPrecompPoints;
j++)
286 for (
j=0;
j<
w-1;
j++)
292 for (
j=0;
j<nPrecompPoints;
j++)
326 scError = SYMCRYPT_NO_ERROR;
359 UINT32 fZeroTot = 0xffffffff;
384 scError = SYMCRYPT_INVALID_ARGUMENT;
391 scError = SYMCRYPT_NOT_IMPLEMENTED;
396 if (poSrcEcpointArray[0] ==
NULL)
398 poSrcEcpointArray[0] =
pCurve->G;
399 bPrecompOffline =
TRUE;
405 scError = SYMCRYPT_NOT_IMPLEMENTED;
415 for (
i=0;
i<nPoints*nPrecompPoints;
i++)
417 if ((
i<nPrecompPoints) && bPrecompOffline)
419 poPIs[
i] =
pCurve->info.sw.poPrecompPoints[
i];
426 pbScratch += cbEcpoint;
430 SYMCRYPT_ASSERT( pbScratch + 2*cbEcpoint + 2*cbScalar + 2*nPoints*nRecodedDigits*
sizeof(
UINT32) <= pbScratchEnd );
434 pbScratch += cbEcpoint;
438 pbScratch += cbEcpoint;
443 pbScratch += cbScalar;
447 pbScratch += cbScalar;
450 absofKIs = (
PUINT32) pbScratch;
451 pbScratch += nPoints * nRecodedDigits *
sizeof(
UINT32);
452 sigofKIs = (
PUINT32) pbScratch;
453 pbScratch += nPoints * nRecodedDigits *
sizeof(
UINT32);
459 cbScratch -= ( (nPoints*nPrecompPoints+2)*cbEcpoint + 2*cbScalar );
465 for (
j = 0;
j<nPoints;
j++)
471 fZeroTot &= fZero[
j];
482 if ((
j>0) || !bPrecompOffline)
498 for (
INT32 i = nRecodedDigits-1;
i>-1;
i--)
502 for (
j = 0;
j<nPoints;
j++)
504 if (!fZero[
j] && sigofKIs[
j*nRecodedDigits +
i] != 0)
508 if (sigofKIs[
j*nRecodedDigits +
i] == 0xffffffff)
538 scError = SYMCRYPT_NO_ERROR;
VOID SYMCRYPT_CALL SymCryptPrecomputation(_In_ PCSYMCRYPT_ECURVE pCurve, UINT32 nPoints, _In_reads_(SYMCRYPT_ECURVE_SW_MAX_NPRECOMP_POINTS) PSYMCRYPT_ECPOINT *poPIs, _Out_ PSYMCRYPT_ECPOINT poQ, _Out_writes_bytes_(cbScratch) PBYTE pbScratch, SIZE_T cbScratch)
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)
SYMCRYPT_ERROR SYMCRYPT_CALL SymCryptEcpointMultiScalarMulWnafWithInterleaving(_In_ PCSYMCRYPT_ECURVE pCurve, _In_reads_(nPoints) PCSYMCRYPT_INT *piSrcScalarArray, _In_reads_(nPoints) PCSYMCRYPT_ECPOINT *poSrcEcpointArray, _In_ UINT32 nPoints, _In_ UINT32 flags, _Out_ PSYMCRYPT_ECPOINT poDst, _Out_writes_bytes_(cbScratch) PBYTE pbScratch, SIZE_T cbScratch)
VOID SYMCRYPT_CALL SymCryptOfflinePrecomputation(_In_ PSYMCRYPT_ECURVE pCurve, _Out_writes_bytes_(cbScratch) PBYTE pbScratch, SIZE_T cbScratch)
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)
#define DELTA_MASK(_index, _target)
GLubyte GLubyte GLubyte GLubyte w
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
#define _Out_writes_bytes_(s)
#define UNREFERENCED_PARAMETER(P)
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)
VOID SYMCRYPT_CALL SymCryptWidthNafRecoding(UINT32 W, _Inout_ PSYMCRYPT_INT piK, _Out_writes_(nRecodedDigits) PUINT32 absofKIs, _Out_writes_(nRecodedDigits) PUINT32 sigofKIs, UINT32 nRecodedDigits)
UINT32 UINT32 UINT32 UINT32 cbScratch
#define SYMCRYPT_ASSERT(_x)
BOOLEAN SYMCRYPT_CALL SymCryptEcurveIsSame(_In_ PCSYMCRYPT_ECURVE pCurve1, _In_ PCSYMCRYPT_ECURVE pCurve2)
const SYMCRYPT_ECPOINT * PCSYMCRYPT_ECPOINT
SYMCRYPT_MODELEMENT * PSYMCRYPT_MODELEMENT
#define SYMCRYPT_INTERNAL_ECPOINT_COORDINATE(_ord, _pCurve, _pEcpoint)
#define SYMCRYPT_CURVE_IS_SHORT_WEIERSTRASS_TYPE(_pCurve)
#define SYMCRYPT_CURVE_IS_TWISTED_EDWARDS_TYPE(_pCurve)
#define SYMCRYPT_ASYM_ALIGN_VALUE
const SYMCRYPT_INT * PCSYMCRYPT_INT
SYMCRYPT_ECPOINT * PSYMCRYPT_ECPOINT
const SYMCRYPT_MODULUS * PCSYMCRYPT_MODULUS
#define SYMCRYPT_MASK32_ZERO(_v)
SYMCRYPT_INT * PSYMCRYPT_INT
#define SYMCRYPT_ECURVE_SW_MAX_NPRECOMP_POINTS
const SYMCRYPT_ECURVE * PCSYMCRYPT_ECURVE
SYMCRYPT_ECURVE * PSYMCRYPT_ECURVE
#define SYMCRYPT_INTERNAL_SCRATCH_BYTES_FOR_SCALAR_ECURVE_OPERATIONS(_pCurve, _nPoints)
VOID SYMCRYPT_CALL SymCryptEcpointAdd(_In_ PCSYMCRYPT_ECURVE pCurve, _In_ PCSYMCRYPT_ECPOINT poSrc1, _In_ PCSYMCRYPT_ECPOINT poSrc2, _Out_ PSYMCRYPT_ECPOINT poDst, UINT32 flags, _Out_writes_bytes_opt_(cbScratch) PBYTE pbScratch, SIZE_T cbScratch)
VOID SYMCRYPT_CALL SymCryptEcpointAddDiffNonZero(_In_ PCSYMCRYPT_ECURVE pCurve, _In_ PCSYMCRYPT_ECPOINT poSrc1, _In_ PCSYMCRYPT_ECPOINT poSrc2, _Out_ PSYMCRYPT_ECPOINT poDst, _Out_writes_bytes_opt_(cbScratch) PBYTE pbScratch, SIZE_T cbScratch)
UINT32 SYMCRYPT_CALL SymCryptIntIsLessThan(_In_ PCSYMCRYPT_INT piSrc1, _In_ PCSYMCRYPT_INT piSrc2)
SYMCRYPT_ERROR SYMCRYPT_CALL SymCryptEcpointScalarMul(_In_ PCSYMCRYPT_ECURVE pCurve, _In_ PCSYMCRYPT_INT piScalar, _In_opt_ PCSYMCRYPT_ECPOINT poSrc, UINT32 flags, _Out_ PSYMCRYPT_ECPOINT poDst, _Out_writes_bytes_opt_(cbScratch) PBYTE pbScratch, SIZE_T cbScratch)
VOID SYMCRYPT_CALL SymCryptIntCopy(_In_ PCSYMCRYPT_INT piSrc, _Out_ PSYMCRYPT_INT piDst)
VOID SymCryptEcpointMaskedCopy(_In_ PCSYMCRYPT_ECURVE pCurve, _In_ PCSYMCRYPT_ECPOINT poSrc, _Out_ PSYMCRYPT_ECPOINT poDst, UINT32 mask)
UINT32 SYMCRYPT_CALL SymCryptEcpointIsZero(_In_ PCSYMCRYPT_ECURVE pCurve, _In_ PCSYMCRYPT_ECPOINT poSrc, _Out_writes_bytes_opt_(cbScratch) PBYTE pbScratch, SIZE_T cbScratch)
VOID SYMCRYPT_CALL SymCryptModSetRandom(_In_ PCSYMCRYPT_MODULUS pmMod, _Out_ PSYMCRYPT_MODELEMENT peDst, UINT32 flags, _Out_writes_bytes_(cbScratch) PBYTE pbScratch, SIZE_T cbScratch)
#define SYMCRYPT_FLAG_MODRANDOM_ALLOW_ONE
VOID SYMCRYPT_CALL SymCryptIntMaskedCopy(_In_ PCSYMCRYPT_INT piSrc, _Inout_ PSYMCRYPT_INT piDst, UINT32 mask)
PSYMCRYPT_MODELEMENT SYMCRYPT_CALL SymCryptModElementCreate(_Out_writes_bytes_(cbBuffer) PBYTE pbBuffer, SIZE_T cbBuffer, _In_ PCSYMCRYPT_MODULUS pmMod)
UINT32 SYMCRYPT_CALL SymCryptIntGetBit(_In_ PCSYMCRYPT_INT piSrc, UINT32 iBit)
PSYMCRYPT_ECPOINT SYMCRYPT_CALL SymCryptEcpointCreate(_Out_writes_bytes_(cbBuffer) PBYTE pbBuffer, SIZE_T cbBuffer, _In_ PCSYMCRYPT_ECURVE pCurve)
#define SYMCRYPT_SCRATCH_BYTES_FOR_COMMON_MOD_OPERATIONS(_nDigits)
VOID SYMCRYPT_CALL SymCryptModElementToInt(_In_ PCSYMCRYPT_MODULUS pmMod, _In_ PCSYMCRYPT_MODELEMENT peSrc, _Out_ PSYMCRYPT_INT piDst, _Out_writes_bytes_(cbScratch) PBYTE pbScratch, SIZE_T cbScratch)
VOID SymCryptEcpointCopy(_In_ PCSYMCRYPT_ECURVE pCurve, _In_ PCSYMCRYPT_ECPOINT poSrc, _Out_ PSYMCRYPT_ECPOINT poDst)
UINT32 SYMCRYPT_CALL SymCryptSizeofEcpointFromCurve(PCSYMCRYPT_ECURVE pCurve)
PSYMCRYPT_INT SYMCRYPT_CALL SymCryptIntFromModulus(_In_ PSYMCRYPT_MODULUS pmSrc)
#define SYMCRYPT_SCRATCH_BYTES_FOR_COMMON_ECURVE_OPERATIONS(_pCurve)
VOID SYMCRYPT_CALL SymCryptEcpointSetZero(_In_ PCSYMCRYPT_ECURVE pCurve, _Out_ PSYMCRYPT_ECPOINT poDst, _Out_writes_bytes_opt_(cbScratch) PBYTE pbScratch, SIZE_T cbScratch)
#define SYMCRYPT_FLAG_MODRANDOM_ALLOW_MINUSONE
#define SYMCRYPT_FLAG_ECC_LL_COFACTOR_MUL
VOID SYMCRYPT_CALL SymCryptEcpointNegate(_In_ PCSYMCRYPT_ECURVE pCurve, _Inout_ PSYMCRYPT_ECPOINT poSrc, UINT32 mask, _Out_writes_bytes_opt_(cbScratch) PBYTE pbScratch, SIZE_T cbScratch)
UINT32 SYMCRYPT_CALL SymCryptIntIsEqualUint32(_In_ PCSYMCRYPT_INT piSrc1, _In_ UINT32 u32Src2)
UINT32 SYMCRYPT_CALL SymCryptSizeofIntFromDigits(UINT32 nDigits)
#define SYMCRYPT_ECURVE_MULTI_SCALAR_MUL_MAX_NPOINTS
UINT32 SYMCRYPT_CALL SymCryptIntSubSameSize(_In_ PCSYMCRYPT_INT piSrc1, _In_ PCSYMCRYPT_INT piSrc2, _Out_ PSYMCRYPT_INT piDst)
VOID SYMCRYPT_CALL SymCryptEcpointDouble(_In_ PCSYMCRYPT_ECURVE pCurve, _In_ PCSYMCRYPT_ECPOINT poSrc, _Out_ PSYMCRYPT_ECPOINT poDst, UINT32 flags, _Out_writes_bytes_opt_(cbScratch) PBYTE pbScratch, SIZE_T cbScratch)
#define SYMCRYPT_FLAG_DATA_PUBLIC
PSYMCRYPT_INT SYMCRYPT_CALL SymCryptIntCreate(_Out_writes_bytes_(cbBuffer) PBYTE pbBuffer, SIZE_T cbBuffer, UINT32 nDigits)