82 pkObj->fAlgorithmInfo = 0;
83 pkObj->hasPrivateKey =
FALSE;
110 pkEckey->hasPrivateKey =
FALSE;
132 pkDst->fAlgorithmInfo = pkSrc->fAlgorithmInfo;
135 pkDst->hasPrivateKey = pkSrc->hasPrivateKey;
173 return pkEckey->hasPrivateKey;
176#define SYMCRYPT_FLAG_ECKEY_PUBLIC_KEY_ORDER_VALIDATION (0x1)
201 return SYMCRYPT_INVALID_ARGUMENT;
214 return SYMCRYPT_INVALID_ARGUMENT;
244 if ( scError != SYMCRYPT_NO_ERROR )
251 return SYMCRYPT_INVALID_ARGUMENT;
256 return SYMCRYPT_NO_ERROR;
277 UINT32 cbScratchInternal = 0;
298 if ( ( (
flags & ~allowedFlags ) != 0 ) ||
299 ( (
flags & algorithmFlags ) == 0 ) )
301 scError = SYMCRYPT_INVALID_ARGUMENT;
309 scError = SYMCRYPT_INVALID_ARGUMENT;
315 fValidatePublicKeyOrder = 0;
318 if ( ( ( cbPrivateKey == 0 ) && ( cbPublicKey == 0 ) ) ||
322 scError = SYMCRYPT_INVALID_ARGUMENT;
329 if ( pbScratch ==
NULL )
331 scError = SYMCRYPT_MEMORY_ALLOCATION_FAILURE;
335 if ( pbPrivateKey !=
NULL )
341 pbScratchInternal = pbScratch;
346 piTmpInteger =
SymCryptIntCreate( pbScratchInternal, cbTmpInteger, privateKeyDigits );
349 pbScratchInternal += cbTmpInteger;
350 cbScratchInternal -= cbTmpInteger;
356 pbScratchInternal += cbTmpModElement;
357 cbScratchInternal -= cbTmpModElement;
361 if (scError != SYMCRYPT_NO_ERROR)
375 scError = SYMCRYPT_INVALID_ARGUMENT;
384 if ( (
pCurve->coFactorPower>0) &&
388 scError = SYMCRYPT_INVALID_ARGUMENT;
398 if ( (
pCurve->HighBitRestrictionNumOfBits>0) &&
401 pCurve->HighBitRestrictionPosition,
402 pCurve->HighBitRestrictionNumOfBits) !=
pCurve->HighBitRestrictionValue) )
404 scError = SYMCRYPT_INVALID_ARGUMENT;
410 if (
pCurve->coFactorPower>0)
442 scError = SYMCRYPT_INVALID_ARGUMENT;
449 pEckey->hasPrivateKey =
TRUE;
452 if ( pbPublicKey !=
NULL )
464 if ( scError != SYMCRYPT_NO_ERROR )
474 fValidatePublicKeyOrder,
477 if ( scError != SYMCRYPT_NO_ERROR )
486 if ( (pbPublicKey==
NULL) ||
488 (pbPrivateKey!=
NULL) && (pbPublicKey!=
NULL) ) )
491 pbScratchInternal = pbScratch;
495 poTmp = pEckey->poPublicKey;
497 if ( pbPublicKey !=
NULL )
502 pbScratchInternal += cbTmp;
503 cbScratchInternal -= cbTmp;
511 pEckey->piPrivateKey,
517 if ( scError != SYMCRYPT_NO_ERROR )
522 if ( pbPublicKey !=
NULL )
526 scError = SYMCRYPT_INVALID_ARGUMENT;
535 fValidatePublicKeyOrder,
538 if ( scError != SYMCRYPT_NO_ERROR )
545 pEckey->fAlgorithmInfo =
flags;
570 if ( pbScratch !=
NULL )
597 UINT32 cbScratchInternal = 0;
614 scError = SYMCRYPT_INVALID_ARGUMENT;
621 if ( pbScratch ==
NULL )
623 scError = SYMCRYPT_MEMORY_ALLOCATION_FAILURE;
627 pbScratchInternal = pbScratch;
632 piTmpInteger =
SymCryptIntCreate( pbScratchInternal, cbTmpInteger, privateKeyDigits );
635 pbScratchInternal += cbTmpInteger;
636 cbScratchInternal -= cbTmpInteger;
642 pbScratchInternal += cbTmpModElement;
643 cbScratchInternal -= cbTmpModElement;
645 if ((cbPrivateKey == 0) && (cbPublicKey == 0))
647 scError = SYMCRYPT_INVALID_ARGUMENT;
651 if (cbPrivateKey != 0)
653 if (!pEckey->hasPrivateKey)
655 scError = SYMCRYPT_INVALID_BLOB;
674 if (
pCurve->coFactorPower>0)
698 if (scError != SYMCRYPT_NO_ERROR)
704 if (cbPublicKey != 0)
720 if ( pbScratch !=
NULL )
729#define SYMCRYPT_ECPOINT_SET_RANDOM_MAX_TRIES (1000)
741 UINT32 cbScratchInternal = 0;
754 UINT32 highBitRestrictionPosition =
pCurve->HighBitRestrictionPosition;
761 if ( ( (
flags & ~allowedFlags ) != 0 ) ||
762 ( (
flags & algorithmFlags ) == 0 ) )
764 scError = SYMCRYPT_INVALID_ARGUMENT;
776 if ( pbScratch ==
NULL )
778 scError = SYMCRYPT_MEMORY_ALLOCATION_FAILURE;
783 pbScratchInternal = pbScratch;
789 pbScratchInternal +=
pCurve->cbModElement;
790 cbScratchInternal -=
pCurve->cbModElement;
795 pbScratchInternal += cbScalar;
796 cbScratchInternal -= cbScalar;
803 highBitRestrictionPosition -=
pCurve->coFactorPower;
825 SymCryptModAdd(
pCurve->GOrd, peScalar, peScalar, peScalar, pbScratchInternal, cbScratchInternal );
832 if (
pCurve->HighBitRestrictionNumOfBits > 0)
837 pCurve->HighBitRestrictionValue,
838 highBitRestrictionPosition,
839 pCurve->HighBitRestrictionNumOfBits );
861 scError = SYMCRYPT_INVALID_ARGUMENT;
881 pEckey->piPrivateKey,
887 if ( scError != SYMCRYPT_NO_ERROR )
902 if ( scError != SYMCRYPT_NO_ERROR )
908 pEckey->hasPrivateKey =
TRUE;
910 pEckey->fAlgorithmInfo =
flags;
935 pbScratchInternal = pbScratch;
940 pbScratchInternal += cbTmp;
941 cbScratchInternal -= cbTmp;
948 pEckey->piPrivateKey,
954 if ( scError != SYMCRYPT_NO_ERROR )
965 if ( pbScratch !=
NULL )
985 if ( ( (
flags & ~algorithmFlags ) != 0 ) ||
986 ( (
flags & algorithmFlags ) == 0) )
988 scError = SYMCRYPT_INVALID_ARGUMENT;
992 pEckey->fAlgorithmInfo |=
flags;
static void cleanup(void)
VOID SYMCRYPT_CALL SymCryptEckeyFree(_Out_ PSYMCRYPT_ECKEY pkObj)
#define SYMCRYPT_FLAG_ECKEY_PUBLIC_KEY_ORDER_VALIDATION
VOID SYMCRYPT_CALL SymCryptEckeyWipe(_Out_ PSYMCRYPT_ECKEY pkDst)
UINT32 SYMCRYPT_CALL SymCryptEckeySizeofPrivateKey(_In_ PCSYMCRYPT_ECKEY pkEckey)
PSYMCRYPT_ECKEY SYMCRYPT_CALL SymCryptEckeyCreate(_Out_writes_bytes_(cbBuffer) PBYTE pbBuffer, SIZE_T cbBuffer, PCSYMCRYPT_ECURVE pCurve)
UINT32 SYMCRYPT_CALL SymCryptEckeySizeofPublicKey(_In_ PCSYMCRYPT_ECKEY pkEckey, _In_ SYMCRYPT_ECPOINT_FORMAT ecPointFormat)
SYMCRYPT_ERROR SYMCRYPT_CALL SymCryptEckeyPerformPublicKeyValidation(_In_ PCSYMCRYPT_ECKEY pEckey, _In_ UINT32 flags, _Out_writes_bytes_(cbScratch) PBYTE pbScratch, SIZE_T cbScratch)
#define SYMCRYPT_ECPOINT_SET_RANDOM_MAX_TRIES
SYMCRYPT_ERROR SYMCRYPT_CALL SymCryptEckeySetRandom(_In_ UINT32 flags, _Inout_ PSYMCRYPT_ECKEY pEckey)
SYMCRYPT_ERROR SYMCRYPT_CALL SymCryptEckeyExtendKeyUsage(_Inout_ PSYMCRYPT_ECKEY pEckey, UINT32 flags)
VOID SymCryptEckeyCopy(_In_ PCSYMCRYPT_ECKEY pkSrc, _Out_ PSYMCRYPT_ECKEY pkDst)
VOID SYMCRYPT_CALL SymCryptEckeyWipePrivateState(_Inout_ PSYMCRYPT_ECKEY pkEckey)
BOOLEAN SYMCRYPT_CALL SymCryptEckeyHasPrivateKey(_In_ PCSYMCRYPT_ECKEY pkEckey)
SYMCRYPT_ERROR SYMCRYPT_CALL SymCryptEckeySetValue(_In_reads_bytes_(cbPrivateKey) PCBYTE pbPrivateKey, SIZE_T cbPrivateKey, _In_reads_bytes_(cbPublicKey) PCBYTE pbPublicKey, SIZE_T cbPublicKey, SYMCRYPT_NUMBER_FORMAT numFormat, SYMCRYPT_ECPOINT_FORMAT ecPointFormat, UINT32 flags, _Inout_ PSYMCRYPT_ECKEY pEckey)
PSYMCRYPT_ECKEY SYMCRYPT_CALL SymCryptEckeyAllocate(_In_ PCSYMCRYPT_ECURVE pCurve)
UINT32 SYMCRYPT_CALL SymCryptSizeofEckeyFromCurve(_In_ PCSYMCRYPT_ECURVE pCurve)
SYMCRYPT_ERROR SYMCRYPT_CALL SymCryptEckeyGetValue(_In_ PCSYMCRYPT_ECKEY pEckey, _Out_writes_bytes_(cbPrivateKey) PBYTE pbPrivateKey, SIZE_T cbPrivateKey, _Out_writes_bytes_(cbPublicKey) PBYTE pbPublicKey, SIZE_T cbPublicKey, SYMCRYPT_NUMBER_FORMAT numFormat, SYMCRYPT_ECPOINT_FORMAT ecPointFormat, UINT32 flags)
const UINT32 SymCryptEcpointFormatNumberofElements[]
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 _In_reads_bytes_(s)
#define _Out_writes_bytes_(s)
#define UNREFERENCED_PARAMETER(P)
#define SYMCRYPT_ASSERT_ASYM_ALIGNED(_p)
#define SYMCRYPT_RUN_KEY_GEN_PCT(KeySelftestFunction, Key, KeySelftestFlag)
#define SYMCRYPT_RUN_SELFTEST_ONCE(AlgorithmSelftestFunction, AlgorithmSelftestFlag)
SYMCRYPT_ERROR SYMCRYPT_CALL SymCryptEcDsaPct(PCSYMCRYPT_ECKEY pkEckey)
UINT32 UINT32 UINT32 UINT32 cbScratch
#define SYMCRYPT_ASSERT(_x)
VOID SYMCRYPT_CALL SymCryptWipe(_Out_writes_bytes_(cbData) PVOID pbData, SIZE_T cbData)
UINT32 SYMCRYPT_CALL SymCryptEcurveSizeofScalarMultiplier(_In_ PCSYMCRYPT_ECURVE pCurve)
#define SYMCRYPT_FLAG_ECKEY_ECDSA
enum _SYMCRYPT_NUMBER_FORMAT SYMCRYPT_NUMBER_FORMAT
@ SYMCRYPT_ECKEY_PRIVATE_FORMAT_DIVH_TIMESH
@ SYMCRYPT_ECKEY_PRIVATE_FORMAT_CANONICAL
enum _SYMCRYPT_ECPOINT_FORMAT SYMCRYPT_ECPOINT_FORMAT
VOID SYMCRYPT_CALL SymCryptEcDsaSelftest(void)
#define SYMCRYPT_FLAG_KEY_NO_FIPS
UINT32 SYMCRYPT_CALL SymCryptEcurveSizeofFieldElement(_In_ PCSYMCRYPT_ECURVE pCurve)
#define SYMCRYPT_FLAG_KEY_MINIMAL_VALIDATION
VOID SYMCRYPT_CALL SymCryptEcDhSecretAgreementSelftest(void)
#define SYMCRYPT_FLAG_ECKEY_ECDH
@ SYMCRYPT_SELFTEST_ALGORITHM_ECDH
@ SYMCRYPT_SELFTEST_ALGORITHM_ECDSA
const SYMCRYPT_ECKEY * PCSYMCRYPT_ECKEY
SYMCRYPT_MODELEMENT * PSYMCRYPT_MODELEMENT
#define SYMCRYPT_FIPS_ASSERT(x)
SYMCRYPT_MAGIC_FIELD SYMCRYPT_ECKEY
#define SYMCRYPT_SET_MAGIC(p)
#define SYMCRYPT_INTERNAL_SCRATCH_BYTES_FOR_ECKEY_ECURVE_OPERATIONS(_pCurve)
#define SYMCRYPT_PCT_ECDSA
#define SYMCRYPT_CURVE_IS_MONTGOMERY_TYPE(_pCurve)
SYMCRYPT_ECPOINT * PSYMCRYPT_ECPOINT
SYMCRYPT_ECKEY * PSYMCRYPT_ECKEY
SYMCRYPT_INT * PSYMCRYPT_INT
const SYMCRYPT_ECURVE * PCSYMCRYPT_ECURVE
#define SYMCRYPT_CHECK_MAGIC(p)
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 SYMCRYPT_CALL SymCryptIntIsLessThan(_In_ PCSYMCRYPT_INT piSrc1, _In_ PCSYMCRYPT_INT piSrc2)
VOID SYMCRYPT_CALL SymCryptIntToModElement(_In_ PCSYMCRYPT_INT piSrc, _In_ PCSYMCRYPT_MODULUS pmMod, _Out_ PSYMCRYPT_MODELEMENT peDst, _Out_writes_bytes_(cbScratch) PBYTE pbScratch, SIZE_T cbScratch)
VOID SYMCRYPT_CALL SymCryptIntSetBits(_In_ PSYMCRYPT_INT piDst, UINT32 value, UINT32 iBit, UINT32 nBits)
VOID SYMCRYPT_CALL SymCryptIntDivPow2(_In_ PCSYMCRYPT_INT piSrc, SIZE_T exp, _Out_ PSYMCRYPT_INT piDst)
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)
PSYMCRYPT_DIVISOR SYMCRYPT_CALL SymCryptDivisorFromModulus(_In_ PSYMCRYPT_MODULUS pmSrc)
VOID SYMCRYPT_CALL SymCryptIntCopy(_In_ PCSYMCRYPT_INT piSrc, _Out_ PSYMCRYPT_INT piDst)
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
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 SymCryptIntMulPow2(_In_ PCSYMCRYPT_INT piSrc, SIZE_T exp, _Out_ PSYMCRYPT_INT piDst)
PSYMCRYPT_ECPOINT SYMCRYPT_CALL SymCryptEcpointCreate(_Out_writes_bytes_(cbBuffer) PBYTE pbBuffer, SIZE_T cbBuffer, _In_ PCSYMCRYPT_ECURVE pCurve)
UINT32 SYMCRYPT_CALL SymCryptEcpointOnCurve(_In_ PCSYMCRYPT_ECURVE pCurve, _In_ PCSYMCRYPT_ECPOINT poSrc, _Out_writes_bytes_opt_(cbScratch) PBYTE pbScratch, SIZE_T cbScratch)
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)
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)
UINT32 SYMCRYPT_CALL SymCryptEcpointIsEqual(_In_ PCSYMCRYPT_ECURVE pCurve, _In_ PCSYMCRYPT_ECPOINT poSrc1, _In_ PCSYMCRYPT_ECPOINT poSrc2, UINT32 flags, _Out_writes_bytes_opt_(cbScratch) PBYTE pbScratch, SIZE_T cbScratch)
#define SYMCRYPT_FLAG_MODRANDOM_ALLOW_MINUSONE
#define SYMCRYPT_FLAG_ECC_LL_COFACTOR_MUL
UINT32 SYMCRYPT_CALL SymCryptIntIsEqualUint32(_In_ PCSYMCRYPT_INT piSrc1, _In_ UINT32 u32Src2)
UINT32 SYMCRYPT_CALL SymCryptSizeofIntFromDigits(UINT32 nDigits)
UINT32 SYMCRYPT_CALL SymCryptIntGetBits(_In_ PCSYMCRYPT_INT piSrc, UINT32 iBit, UINT32 nBits)
VOID SYMCRYPT_CALL SymCryptIntSetValueUint32(UINT32 u32Src, _Out_ PSYMCRYPT_INT piDst)
UINT32 SYMCRYPT_CALL SymCryptEcurveDigitsofScalarMultiplier(_In_ PCSYMCRYPT_ECURVE pCurve)
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)
SYMCRYPT_ERROR SYMCRYPT_CALL SymCryptIntGetValue(_In_ PCSYMCRYPT_INT piSrc, _Out_writes_bytes_(cbDst) PBYTE pbDst, SIZE_T cbDst, SYMCRYPT_NUMBER_FORMAT format)
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)
#define SYMCRYPT_FLAG_DATA_PUBLIC
PSYMCRYPT_INT SYMCRYPT_CALL SymCryptIntCreate(_Out_writes_bytes_(cbBuffer) PBYTE pbBuffer, SIZE_T cbBuffer, UINT32 nDigits)
SYMCRYPT_ERROR SYMCRYPT_CALL SymCryptEcpointGetValue(_In_ PCSYMCRYPT_ECURVE pCurve, _In_ PCSYMCRYPT_ECPOINT poSrc, SYMCRYPT_NUMBER_FORMAT nformat, SYMCRYPT_ECPOINT_FORMAT eformat, _Out_writes_bytes_(cbDst) PBYTE pbDst, SIZE_T cbDst, UINT32 flags, _Out_writes_bytes_(cbScratch) PBYTE pbScratch, SIZE_T cbScratch)