24 SIZE_T cbScratchInternal = 0;
39 scError = SYMCRYPT_INVALID_ARGUMENT;
46 (!pkPrivate->hasPrivateKey) )
48 scError = SYMCRYPT_INVALID_ARGUMENT;
55 pCurve = pkPrivate->pCurve;
59 scError = SYMCRYPT_INVALID_ARGUMENT;
68 if (cbAgreedSecret != cbX)
70 scError = SYMCRYPT_WRONG_BLOCK_SIZE;
84 cbScratch = cbScratchInternal + cbQ + cbX;
88 if ( pbScratch ==
NULL )
90 scError = SYMCRYPT_MEMORY_ALLOCATION_FAILURE;
95 pCurr = pbScratch + cbScratchInternal;
107 scError = SYMCRYPT_INVALID_ARGUMENT;
117 pkPrivate->piPrivateKey,
118 pkPublic->poPublicKey,
123 if ( scError != SYMCRYPT_NO_ERROR )
133 cbScratchInternal ) )
135 scError = SYMCRYPT_INVALID_BLOB;
141 if ( scError != SYMCRYPT_NO_ERROR )
147 memcpy( pbAgreedSecret, pbX, cbX);
150 if ( pbScratch !=
NULL )
static void cleanup(void)
SYMCRYPT_ERROR SYMCRYPT_CALL SymCryptEcDhSecretAgreement(_In_ PCSYMCRYPT_ECKEY pkPrivate, _In_ PCSYMCRYPT_ECKEY pkPublic, SYMCRYPT_NUMBER_FORMAT format, UINT32 flags, _Out_writes_(cbAgreedSecret) PBYTE pbAgreedSecret, SIZE_T cbAgreedSecret)
void SYMCRYPT_CALL SymCryptCallbackFree(void *ptr)
void *SYMCRYPT_CALL SymCryptCallbackAlloc(SIZE_T size)
#define memcpy(s1, s2, n)
UINT32 UINT32 UINT32 UINT32 cbScratch
#define SYMCRYPT_ASSERT(_x)
VOID SYMCRYPT_CALL SymCryptWipe(_Out_writes_bytes_(cbData) PVOID pbData, SIZE_T cbData)
enum _SYMCRYPT_NUMBER_FORMAT SYMCRYPT_NUMBER_FORMAT
@ SYMCRYPT_ECPOINT_FORMAT_X
BOOLEAN SYMCRYPT_CALL SymCryptEcurveIsSame(_In_ PCSYMCRYPT_ECURVE pCurve1, _In_ PCSYMCRYPT_ECURVE pCurve2)
UINT32 SYMCRYPT_CALL SymCryptEcurveSizeofFieldElement(_In_ PCSYMCRYPT_ECURVE pCurve)
#define SYMCRYPT_FLAG_ECKEY_ECDH
const SYMCRYPT_ECKEY * PCSYMCRYPT_ECKEY
#define SYMCRYPT_MAX(_a, _b)
SYMCRYPT_ECPOINT * PSYMCRYPT_ECPOINT
const SYMCRYPT_ECURVE * PCSYMCRYPT_ECURVE
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)
UINT32 SYMCRYPT_CALL SymCryptEcpointIsZero(_In_ PCSYMCRYPT_ECURVE pCurve, _In_ PCSYMCRYPT_ECPOINT poSrc, _Out_writes_bytes_opt_(cbScratch) PBYTE pbScratch, SIZE_T cbScratch)
#define SYMCRYPT_SCRATCH_BYTES_FOR_SCALAR_ECURVE_OPERATIONS(_pCurve)
PSYMCRYPT_ECPOINT SYMCRYPT_CALL SymCryptEcpointCreate(_Out_writes_bytes_(cbBuffer) PBYTE pbBuffer, SIZE_T cbBuffer, _In_ PCSYMCRYPT_ECURVE pCurve)
UINT32 SYMCRYPT_CALL SymCryptSizeofEcpointFromCurve(PCSYMCRYPT_ECURVE pCurve)
#define SYMCRYPT_SCRATCH_BYTES_FOR_COMMON_ECURVE_OPERATIONS(_pCurve)
#define SYMCRYPT_FLAG_ECC_LL_COFACTOR_MUL
#define SYMCRYPT_SCRATCH_BYTES_FOR_GETSET_VALUE_ECURVE_OPERATIONS(_pCurve)
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)