30 if ( scError != SYMCRYPT_NO_ERROR )
42 if ( scError != SYMCRYPT_NO_ERROR )
55#define SYMCRYPT_MAX_DSA_SIGNATURE_COUNT (100)
74 SIZE_T cbScratchInternal = 0;
76 SIZE_T cbScratchInputK = 0;
105 UINT32 signatureCount = 0;
112 scError = SYMCRYPT_INVALID_ARGUMENT;
121 (!
pKey->fHasPrivateKey) ||
122 (!
pKey->fPrivateModQ) ||
125 scError = SYMCRYPT_INVALID_ARGUMENT;
149 cbScratch = cbIntLarge + cbIntQ + cbIntP + cbModelementP + 4*cbModelementQ +
158 scError = SYMCRYPT_MEMORY_ALLOCATION_FAILURE;
163 pbScratchInternal = pbScratch;
166 piIntLarge =
SymCryptIntCreate(pbScratchInternal, cbIntLarge, ndIntLarge); pbScratchInternal += cbIntLarge; cbScratchInternal -= cbIntLarge;
170 peRmodP =
SymCryptModElementCreate(pbScratchInternal, cbModelementP,
pDlgroup->pmP); pbScratchInternal += cbModelementP; cbScratchInternal -= cbModelementP;
172 peMsghash =
SymCryptModElementCreate(pbScratchInternal, cbModelementQ,
pDlgroup->pmQ); pbScratchInternal += cbModelementQ; cbScratchInternal -= cbModelementQ;
173 peRmodQ =
SymCryptModElementCreate(pbScratchInternal, cbModelementQ,
pDlgroup->pmQ); pbScratchInternal += cbModelementQ; cbScratchInternal -= cbModelementQ;
188 if (scError!=SYMCRYPT_NO_ERROR)
234 scError = SYMCRYPT_INVALID_ARGUMENT;
285 if( scError != SYMCRYPT_NO_ERROR )
336 scError = SYMCRYPT_INVALID_ARGUMENT;
345 scError = SYMCRYPT_INVALID_ARGUMENT;
359 if ( scError != SYMCRYPT_NO_ERROR )
368 pbSignature + cbSignature / 2,
373 if ( scError != SYMCRYPT_NO_ERROR )
379 if ( pbScratch !=
NULL )
385 if (scError != SYMCRYPT_NO_ERROR)
425 SIZE_T cbScratchInternal = 0;
460 scError = SYMCRYPT_INVALID_ARGUMENT;
467 scError = SYMCRYPT_INVALID_ARGUMENT;
489 cbScratch = cbIntLarge + cbIntP + 2*cbIntQ + cbModelementP + 3*cbModelementQ +
498 scError = SYMCRYPT_MEMORY_ALLOCATION_FAILURE;
503 pbScratchInternal = pbScratch;
506 piIntLarge =
SymCryptIntCreate(pbScratchInternal, cbIntLarge, ndIntLarge); pbScratchInternal += cbIntLarge; cbScratchInternal -= cbIntLarge;
519 if ( scError != SYMCRYPT_NO_ERROR )
532 if ( scError != SYMCRYPT_NO_ERROR )
547 if ( scError != SYMCRYPT_NO_ERROR )
560 if ( scError != SYMCRYPT_NO_ERROR )
578 if( scError != SYMCRYPT_NO_ERROR )
594 if (scError!=SYMCRYPT_NO_ERROR)
635 peBases[1] =
pKey->pePublicKey;
648 if (scError!=SYMCRYPT_NO_ERROR)
677 fValidSignature =
TRUE;
683 if (!fValidSignature)
685 scError = SYMCRYPT_SIGNATURE_VERIFICATION_FAILURE;
688 if ( pbScratch !=
NULL )
static void cleanup(void)
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)
UINT32 UINT32 UINT32 UINT32 cbScratch
SYMCRYPT_ERROR SYMCRYPT_CALL SymCryptDsaSignEx(_In_ PCSYMCRYPT_DLKEY pKey, _In_reads_bytes_(cbHashValue) PCBYTE pbHashValue, SIZE_T cbHashValue, _In_opt_ PCSYMCRYPT_INT piK, SYMCRYPT_NUMBER_FORMAT format, UINT32 flags, _Out_writes_bytes_(cbSignature) PBYTE pbSignature, SIZE_T cbSignature)
SYMCRYPT_ERROR SYMCRYPT_CALL SymCryptDsaSign(_In_ PCSYMCRYPT_DLKEY pKey, _In_reads_bytes_(cbHashValue) PCBYTE pbHashValue, SIZE_T cbHashValue, SYMCRYPT_NUMBER_FORMAT format, UINT32 flags, _Out_writes_bytes_(cbSignature) PBYTE pbSignature, SIZE_T cbSignature)
SYMCRYPT_ERROR SYMCRYPT_CALL SymCryptDsaTruncateHash(_In_ PCSYMCRYPT_DLGROUP pDlgroup, _In_reads_bytes_(cbHashValue) PCBYTE pbHashValue, SIZE_T cbHashValue, UINT32 flags, _Out_ PSYMCRYPT_MODELEMENT peMsghash, _Out_ PSYMCRYPT_INT piIntLarge, _Out_ PSYMCRYPT_INT piIntQ, _Out_writes_bytes_(cbScratch) PBYTE pbScratch, SIZE_T cbScratch)
#define SYMCRYPT_MAX_DSA_SIGNATURE_COUNT
SYMCRYPT_ERROR SYMCRYPT_CALL SymCryptDsaVerify(_In_ PCSYMCRYPT_DLKEY pKey, _In_reads_bytes_(cbHashValue) PCBYTE pbHashValue, SIZE_T cbHashValue, _In_reads_bytes_(cbSignature) PCBYTE pbSignature, SIZE_T cbSignature, SYMCRYPT_NUMBER_FORMAT format, UINT32 flags)
#define SYMCRYPT_FLAG_DLKEY_DSA
VOID SYMCRYPT_CALL SymCryptWipe(_Out_writes_bytes_(cbData) PVOID pbData, SIZE_T cbData)
enum _SYMCRYPT_NUMBER_FORMAT SYMCRYPT_NUMBER_FORMAT
@ SYMCRYPT_NUMBER_FORMAT_MSB_FIRST
PCSYMCRYPT_DLGROUP pDlgroup
SYMCRYPT_MODELEMENT * PSYMCRYPT_MODELEMENT
#define SYMCRYPT_MAX(_a, _b)
PCSYMCRYPT_HMAC_MD5_EXPANDED_KEY pKey
const SYMCRYPT_INT * PCSYMCRYPT_INT
const SYMCRYPT_DLKEY * PCSYMCRYPT_DLKEY
SYMCRYPT_INT * PSYMCRYPT_INT
const SYMCRYPT_DLGROUP * PCSYMCRYPT_DLGROUP
UINT32 SYMCRYPT_CALL SymCryptIntIsLessThan(_In_ PCSYMCRYPT_INT piSrc1, _In_ PCSYMCRYPT_INT piSrc2)
UINT32 SYMCRYPT_CALL SymCryptSizeofModElementFromModulus(PCSYMCRYPT_MODULUS pmMod)
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)
#define SYMCRYPT_SCRATCH_BYTES_FOR_MODMULTIEXP(_nDigits, _nBases, _nBitsExp)
VOID SYMCRYPT_CALL SymCryptIntDivPow2(_In_ PCSYMCRYPT_INT piSrc, SIZE_T exp, _Out_ PSYMCRYPT_INT piDst)
PSYMCRYPT_DIVISOR SYMCRYPT_CALL SymCryptDivisorFromModulus(_In_ PSYMCRYPT_MODULUS pmSrc)
UINT32 SYMCRYPT_CALL SymCryptModElementIsZero(_In_ PCSYMCRYPT_MODULUS pmMod, _In_ PCSYMCRYPT_MODELEMENT peSrc)
UINT32 SymCryptDigitsFromBits(UINT32 nBits)
#define SYMCRYPT_SCRATCH_BYTES_FOR_INT_DIVMOD(_nSrcDigits, _nDivisorDigits)
UINT32 SYMCRYPT_CALL SymCryptModElementIsEqual(_In_ PCSYMCRYPT_MODULUS pmMod, _In_ PCSYMCRYPT_MODELEMENT peSrc1, _In_ PCSYMCRYPT_MODELEMENT peSrc2)
SYMCRYPT_ERROR SYMCRYPT_CALL SymCryptIntCopyMixedSize(_In_ PCSYMCRYPT_INT piSrc, _Out_ PSYMCRYPT_INT piDst)
VOID SYMCRYPT_CALL SymCryptModSetRandom(_In_ PCSYMCRYPT_MODULUS pmMod, _Out_ PSYMCRYPT_MODELEMENT peDst, UINT32 flags, _Out_writes_bytes_(cbScratch) PBYTE pbScratch, SIZE_T cbScratch)
UINT32 SYMCRYPT_CALL SymCryptIntDigitsizeOfObject(_In_ PCSYMCRYPT_INT piSrc)
#define SYMCRYPT_FLAG_MODRANDOM_ALLOW_ONE
SYMCRYPT_ERROR SYMCRYPT_CALL SymCryptModElementGetValue(PCSYMCRYPT_MODULUS pmMod, _In_ PCSYMCRYPT_MODELEMENT peSrc, _Out_writes_bytes_(cbDst) PBYTE pbDst, SIZE_T cbDst, SYMCRYPT_NUMBER_FORMAT format, _Out_writes_bytes_(cbScratch) PBYTE pbScratch, SIZE_T cbScratch)
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 SymCryptModMul(_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)
SYMCRYPT_ERROR SYMCRYPT_CALL SymCryptModInv(_In_ PCSYMCRYPT_MODULUS pmMod, _In_ PCSYMCRYPT_MODELEMENT peSrc, _Out_ PSYMCRYPT_MODELEMENT peDst, UINT32 flags, _Out_writes_bytes_(cbScratch) PBYTE pbScratch, SIZE_T cbScratch)
SYMCRYPT_ERROR SYMCRYPT_CALL SymCryptModMultiExp(_In_ PCSYMCRYPT_MODULUS pmMod, _In_reads_(nBases) PCSYMCRYPT_MODELEMENT *peBaseArray, _In_reads_(nBases) PCSYMCRYPT_INT *piExpArray, UINT32 nBases, UINT32 nBitsExp, UINT32 flags, _Out_ PSYMCRYPT_MODELEMENT peDst, _Out_writes_bytes_(cbScratch) PBYTE pbScratch, SIZE_T cbScratch)
#define SYMCRYPT_SCRATCH_BYTES_FOR_COMMON_MOD_OPERATIONS(_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)
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)
PSYMCRYPT_INT SYMCRYPT_CALL SymCryptIntFromModulus(_In_ PSYMCRYPT_MODULUS pmSrc)
#define SYMCRYPT_FLAG_MODRANDOM_ALLOW_MINUSONE
UINT32 SYMCRYPT_CALL SymCryptIntBitsizeOfValue(_In_ PCSYMCRYPT_INT piSrc)
UINT32 SYMCRYPT_CALL SymCryptSizeofIntFromDigits(UINT32 nDigits)
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)
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)
UINT32 SYMCRYPT_CALL SymCryptModulusDigitsizeOfObject(_In_ PCSYMCRYPT_MODULUS pmSrc)
#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)
#define SYMCRYPT_SCRATCH_BYTES_FOR_MODEXP(_nDigits)