13#define SYMCRYPT_INTERNAL_ECURVE_MODULUS_NUMOF_OPERATIONS( _bitsize ) ( 100 * (_bitsize) )
14#define SYMCRYPT_INTERNAL_ECURVE_GROUP_ORDER_NUMOF_OPERATIONS ( 1 )
22#define SYMCRYPT_INTERNAL_MAX_ECURVE_SIZE (1024)
63 pParams->cbCofactor > 2 ||
64 pParams->cbSeed > 256 )
85 switch (pParams->type)
111 2 * pSizes->cbModElement +
112 pSizes->cbSubgroupOrder +
128 pSizes->cbAlloc += pSizes->cbEcpoint;
142 8 * pSizes->cbModElement +
223 pCurve->eCoordinates = pSizes->eCoordinates;
226 pCurve->FModDigits = pSizes->nDigitsFieldLength;
229 pCurve->GOrdDigits = pSizes->nDigitsSubgroupOrder;
236 pCurve->GOrdBytesize = (
UINT32)pParams->cbSubgroupOrder;
239 pCurve->cbModElement = pSizes->cbModElement;
242 pCurve->cbAlloc = pSizes->cbAlloc;
256 if ( pTempInt ==
NULL)
262 if ( scError != SYMCRYPT_NO_ERROR )
271 scError = SYMCRYPT_WRONG_KEY_SIZE;
278 scError = SYMCRYPT_INVALID_ARGUMENT;
292 pDst += pSizes->cbModulus;
293 pSrc += pParams->cbFieldLength;
303 pParams->cbFieldLength,
309 if ( scError != SYMCRYPT_NO_ERROR )
313 pDst += pSizes->cbModElement;
314 pSrc += pParams->cbFieldLength;
333 if ( scError != SYMCRYPT_NO_ERROR )
346 pParams->cbFieldLength,
352 if ( scError != SYMCRYPT_NO_ERROR )
356 pDst += pSizes->cbModElement;
357 pSrc += pParams->cbFieldLength;
360 pSrcGenerator = pSrc;
361 pSrc += pParams->cbFieldLength * 2;
371 if ( pTempInt ==
NULL)
377 if ( scError != SYMCRYPT_NO_ERROR )
386 scError = SYMCRYPT_WRONG_KEY_SIZE;
393 scError = SYMCRYPT_INVALID_ARGUMENT;
407 pDst += pSizes->cbSubgroupOrder;
408 pSrc += pParams->cbSubgroupOrder;
421 if ( scError != SYMCRYPT_NO_ERROR )
440 pDst += pSizes->cbCoFactor;
441 pSrc += pParams->cbCofactor;
448 pCurve->info.sw.nRecodedDigits =
pCurve->GOrdBitsize + 1;
454 pCurve->info.sw.nRecodedDigits =
pCurve->GOrdBitsize + 1;
468 pParams->cbFieldLength * 2,
475 if ( scError != SYMCRYPT_NO_ERROR )
479 pDst += pSizes->cbEcpoint;
495 pDst += pSizes->cbEcpoint;
514 if (pParams->version == 2)
517 pSrc += pParams->cbSeed;
546 if ( (
pCurve->HighBitRestrictionNumOfBits>32) ||
547 ((
pCurve->HighBitRestrictionNumOfBits>0) &&
548 (
pCurve->HighBitRestrictionPosition +
pCurve->HighBitRestrictionNumOfBits >
pCurve->GOrdBitsize +
pCurve->coFactorPower)) )
550 scError = SYMCRYPT_INVALID_ARGUMENT;
623 if ( pbCurve ==
NULL )
629 if ( pbScratch ==
NULL )
641 if ( pbScratch !=
NULL )
647 if ( pbCurve !=
NULL )
670 return pCurve->FModBitsize;
677 return pCurve->GOrdBitsize;
684 return pCurve->FModDigits;
691 return pCurve->FModBytesize;
698 return pCurve->GOrdBytesize;
719 return pCurve->PrivateKeyDefaultFormat;
726 return pCurve->HighBitRestrictionNumOfBits;
733 return pCurve->HighBitRestrictionPosition;
740 return pCurve->HighBitRestrictionValue;
751 if ( pCurve1 == pCurve2 )
757 if ( (pCurve1->type != pCurve2->type) ||
static void cleanup(void)
unsigned int(__cdecl typeof(jpeg_read_scanlines))(struct jpeg_decompress_struct *
SYMCRYPT_DISABLE_CFG VOID SYMCRYPT_CALL SymCryptEcurveFillScratchSpaces(_Inout_ PSYMCRYPT_ECURVE pCurve)
const PCSYMCRYPT_ECURVE_PARAMS_V2_EXTENSION SymCryptEcurveParamsV2ExtensionShortWeierstrass
const PCSYMCRYPT_ECURVE_PARAMS_V2_EXTENSION SymCryptEcurveParamsV2ExtensionMontgomery
const PCSYMCRYPT_ECURVE_PARAMS_V2_EXTENSION SymCryptEcurveParamsV2ExtensionTwistedEdwards
VOID SYMCRYPT_CALL SymCryptOfflinePrecomputation(_In_ PSYMCRYPT_ECURVE pCurve, _Out_writes_bytes_(cbScratch) PBYTE pbScratch, SIZE_T cbScratch)
UINT32 SYMCRYPT_CALL SymCryptSizeofEcpointEx(UINT32 cbModElement, UINT32 numOfCoordinates)
VOID SYMCRYPT_CALL SymCryptEcurveFree(_Out_ PSYMCRYPT_ECURVE pCurve)
PSYMCRYPT_ECURVE SYMCRYPT_CALL SymCryptEcurveCreate(_In_ PSYMCRYPT_ECURVE_PARAMS pParams, _In_ UINT32 flags, _Out_writes_bytes_(cbCurve) PBYTE pbCurve, SIZE_T cbCurve, _Out_writes_bytes_(cbScratch) PBYTE pbScratch, SIZE_T cbScratch)
UINT32 SYMCRYPT_CALL SymCryptEcurveSizeofScalarMultiplier(_In_ PCSYMCRYPT_ECURVE pCurve)
UINT32 SYMCRYPT_CALL SymCryptEcurveBitsizeofGroupOrder(_In_ PCSYMCRYPT_ECURVE pCurve)
UINT32 SYMCRYPT_CALL SymCryptEcurveHighBitRestrictionValue(_In_ PCSYMCRYPT_ECURVE pCurve)
UINT32 SYMCRYPT_CALL SymCryptEcurveHighBitRestrictionPosition(_In_ PCSYMCRYPT_ECURVE pCurve)
static BOOLEAN SymCryptEcurveValidateAndComputeSizes(_In_ PCSYMCRYPT_ECURVE_PARAMS pParams, _Out_ PSYMCRYPT_ECURVE_SIZES pSizes)
const SYMCRYPT_ECURVE_SIZES * PCSYMCRYPT_ECURVE_SIZES
struct _SYMCRYPT_ECURVE_SIZES * PSYMCRYPT_ECURVE_SIZES
BOOLEAN SYMCRYPT_CALL SymCryptEcurveBufferSizesFromParams(_In_ PCSYMCRYPT_ECURVE_PARAMS pParams, _Out_ SIZE_T *pcbCurve, _Out_ SIZE_T *pcbScratch)
static PSYMCRYPT_ECURVE SymCryptEcurveInitialize(_In_ PCSYMCRYPT_ECURVE_PARAMS pParams, _In_ UINT32 flags, _In_ PCSYMCRYPT_ECURVE_SIZES pSizes, _Out_writes_bytes_(pSizes->cbAlloc) PBYTE pbCurve, _Out_writes_bytes_(pSizes->cbScratch) PBYTE pbScratch)
UINT32 SYMCRYPT_CALL SymCryptEcurveDigitsofFieldElement(_In_ PCSYMCRYPT_ECURVE pCurve)
UINT32 SYMCRYPT_CALL SymCryptEcurvePrivateKeyDefaultFormat(_In_ PCSYMCRYPT_ECURVE pCurve)
UINT32 SYMCRYPT_CALL SymCryptEcurveBitsizeofFieldModulus(_In_ PCSYMCRYPT_ECURVE pCurve)
PSYMCRYPT_ECURVE SYMCRYPT_CALL SymCryptEcurveAllocate(_In_ PCSYMCRYPT_ECURVE_PARAMS pParams, _In_ UINT32 flags)
PCSYMCRYPT_MODULUS SYMCRYPT_CALL SymCryptEcurveGroupOrder(_In_ PCSYMCRYPT_ECURVE pCurve)
UINT32 SYMCRYPT_CALL SymCryptEcurveHighBitRestrictionNumOfBits(_In_ PCSYMCRYPT_ECURVE pCurve)
#define SYMCRYPT_INTERNAL_MAX_ECURVE_SIZE
#define SYMCRYPT_INTERNAL_ECURVE_GROUP_ORDER_NUMOF_OPERATIONS
BOOLEAN SYMCRYPT_CALL SymCryptEcurveIsSame(_In_ PCSYMCRYPT_ECURVE pCurve1, _In_ PCSYMCRYPT_ECURVE pCurve2)
UINT32 SYMCRYPT_CALL SymCryptEcurveDigitsofScalarMultiplier(_In_ PCSYMCRYPT_ECURVE pCurve)
#define SYMCRYPT_INTERNAL_ECURVE_MODULUS_NUMOF_OPERATIONS(_bitsize)
UINT32 SYMCRYPT_CALL SymCryptEcurveSizeofFieldElement(_In_ PCSYMCRYPT_ECURVE pCurve)
struct _SYMCRYPT_ECURVE_SIZES SYMCRYPT_ECURVE_SIZES
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
void SYMCRYPT_CALL SymCryptCallbackFree(void *ptr)
void *SYMCRYPT_CALL SymCryptCallbackAlloc(SIZE_T size)
#define _Out_writes_bytes_(s)
#define UNREFERENCED_PARAMETER(P)
UINT32 UINT32 UINT32 UINT32 cbScratch
UINT32 HighBitRestrictionNumOfBits
UINT32 HighBitRestrictionPosition
UINT32 PrivateKeyDefaultFormat
UINT32 HighBitRestrictionValue
SYMCRYPT_ECPOINT_COORDINATES eCoordinates
UINT32 nDigitsFieldLength
UINT32 nDigitsSubgroupOrder
#define SYMCRYPT_ASSERT(_x)
struct _SYMCRYPT_ECURVE_PARAMS SYMCRYPT_ECURVE_PARAMS
VOID SYMCRYPT_CALL SymCryptWipe(_Out_writes_bytes_(cbData) PVOID pbData, SIZE_T cbData)
const SYMCRYPT_ECURVE_PARAMS_V2_EXTENSION * PCSYMCRYPT_ECURVE_PARAMS_V2_EXTENSION
@ SYMCRYPT_ECPOINT_FORMAT_XY
@ SYMCRYPT_NUMBER_FORMAT_MSB_FIRST
@ SYMCRYPT_ECURVE_TYPE_TWISTED_EDWARDS
@ SYMCRYPT_ECURVE_TYPE_MONTGOMERY
@ SYMCRYPT_ECURVE_TYPE_SHORT_WEIERSTRASS
#define SYMCRYPT_ECURVE_MAX_COFACTOR_POWER
#define SYMCRYPT_INTERNAL_NUMOF_COORDINATES(_eCoordinates)
SYMCRYPT_MODELEMENT * PSYMCRYPT_MODELEMENT
#define SYMCRYPT_MAX(_a, _b)
#define SYMCRYPT_SET_MAGIC(p)
enum _SYMCRYPT_ECPOINT_COORDINATES SYMCRYPT_ECPOINT_COORDINATES
#define SYMCRYPT_INTERNAL_ECURVE_VERSION_LATEST
const SYMCRYPT_MODULUS * PCSYMCRYPT_MODULUS
#define SYMCRYPT_ECPOINT_FORMAT_MAX_LENGTH
@ SYMCRYPT_INTERNAL_ECURVE_TYPE_SHORT_WEIERSTRASS_AM3
SYMCRYPT_MAGIC_FIELD SYMCRYPT_ECURVE
#define SYMCRYPT_ECURVE_MIN_BITSIZE_FMOD
SYMCRYPT_INT * PSYMCRYPT_INT
#define SYMCRYPT_ECURVE_MIN_BITSIZE_GORD
const SYMCRYPT_ECURVE * PCSYMCRYPT_ECURVE
SYMCRYPT_ECURVE * PSYMCRYPT_ECURVE
#define SYMCRYPT_CHECK_MAGIC(p)
@ SYMCRYPT_ECPOINT_COORDINATES_SINGLE_PROJECTIVE
@ SYMCRYPT_ECPOINT_COORDINATES_JACOBIAN
@ SYMCRYPT_ECPOINT_COORDINATES_EXTENDED_PROJECTIVE
#define SYMCRYPT_ECURVE_SW_DEF_WINDOW
UINT32 SYMCRYPT_CALL SymCryptIntGetValueLsbits32(_In_ PCSYMCRYPT_INT piSrc)
SYMCRYPT_ERROR SYMCRYPT_CALL SymCryptEcpointSetValue(_In_ PCSYMCRYPT_ECURVE pCurve, _In_reads_bytes_(cbSrc) PCBYTE pbSrc, SIZE_T cbSrc, SYMCRYPT_NUMBER_FORMAT nformat, SYMCRYPT_ECPOINT_FORMAT eformat, _Out_ PSYMCRYPT_ECPOINT poDst, UINT32 flags, _Out_writes_bytes_(cbScratch) PBYTE pbScratch, SIZE_T cbScratch)
UINT32 SymCryptDigitsFromBits(UINT32 nBits)
UINT32 SYMCRYPT_CALL SymCryptModElementIsEqual(_In_ PCSYMCRYPT_MODULUS pmMod, _In_ PCSYMCRYPT_MODELEMENT peSrc1, _In_ PCSYMCRYPT_MODELEMENT peSrc2)
#define SYMCRYPT_SCRATCH_BYTES_FOR_INT_TO_MODULUS(_nDigits)
SYMCRYPT_ERROR SYMCRYPT_CALL SymCryptModElementSetValue(_In_reads_bytes_(cbSrc) PCBYTE pbSrc, SIZE_T cbSrc, SYMCRYPT_NUMBER_FORMAT format, PCSYMCRYPT_MODULUS pmMod, _Out_ PSYMCRYPT_MODELEMENT peDst, _Out_writes_bytes_(cbScratch) PBYTE pbScratch, SIZE_T cbScratch)
#define SYMCRYPT_SIZEOF_MODELEMENT_FROM_BITS(_bitsize)
#define SYMCRYPT_FLAG_MODULUS_PRIME
SYMCRYPT_ERROR SYMCRYPT_CALL SymCryptIntSetValue(_In_reads_bytes_(cbSrc) PCBYTE pbSrc, SIZE_T cbSrc, SYMCRYPT_NUMBER_FORMAT format, _Out_ PSYMCRYPT_INT piDst)
PSYMCRYPT_MODELEMENT SYMCRYPT_CALL SymCryptModElementCreate(_Out_writes_bytes_(cbBuffer) PBYTE pbBuffer, SIZE_T cbBuffer, _In_ PCSYMCRYPT_MODULUS pmMod)
VOID SYMCRYPT_CALL SymCryptModElementSetValueUint32(UINT32 value, _In_ PCSYMCRYPT_MODULUS pmMod, _Out_ PSYMCRYPT_MODELEMENT peDst, _Out_writes_bytes_(cbScratch) PBYTE pbScratch, SIZE_T cbScratch)
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)
PSYMCRYPT_MODULUS SYMCRYPT_CALL SymCryptModulusCreate(_Out_writes_bytes_(cbBuffer) PBYTE pbBuffer, SIZE_T cbBuffer, UINT32 nDigits)
VOID SYMCRYPT_CALL SymCryptModAdd(_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)
PSYMCRYPT_INT SYMCRYPT_CALL SymCryptIntFromModulus(_In_ PSYMCRYPT_MODULUS pmSrc)
UINT32 SYMCRYPT_CALL SymCryptSizeofModulusFromDigits(UINT32 nDigits)
UINT32 SYMCRYPT_CALL SymCryptIntIsEqualUint32(_In_ PCSYMCRYPT_INT piSrc1, _In_ UINT32 u32Src2)
UINT32 SYMCRYPT_CALL SymCryptIntBitsizeOfValue(_In_ PCSYMCRYPT_INT piSrc)
UINT32 SYMCRYPT_CALL SymCryptSizeofIntFromDigits(UINT32 nDigits)
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)
VOID SYMCRYPT_CALL SymCryptModElementSetValueNegUint32(UINT32 value, _In_ PCSYMCRYPT_MODULUS pmMod, _Out_ PSYMCRYPT_MODELEMENT peDst, _Out_writes_bytes_(cbScratch) PBYTE pbScratch, SIZE_T cbScratch)
VOID SYMCRYPT_CALL SymCryptModDivPow2(_In_ PCSYMCRYPT_MODULUS pmMod, _In_ PCSYMCRYPT_MODELEMENT peSrc, UINT32 exp, _Out_ PSYMCRYPT_MODELEMENT peDst, _Out_writes_bytes_(cbScratch) PBYTE pbScratch, SIZE_T cbScratch)
UINT32 SYMCRYPT_CALL SymCryptIntIsEqual(_In_ PCSYMCRYPT_INT piSrc1, _In_ PCSYMCRYPT_INT piSrc2)
#define SYMCRYPT_FLAG_DATA_PUBLIC
#define SYMCRYPT_SCRATCH_BYTES_FOR_MODINV(_nDigits)
PSYMCRYPT_INT SYMCRYPT_CALL SymCryptIntCreate(_Out_writes_bytes_(cbBuffer) PBYTE pbBuffer, SIZE_T cbBuffer, UINT32 nDigits)