6#ifndef WIN32_LEAN_AND_MEAN
7#define WIN32_LEAN_AND_MEAN
16#pragma warning(disable: 4204)
30NSS_LoadPublicKey(
const unsigned char *certData,
unsigned int certDataSize,
31 SECKEYPublicKey **publicKey)
33 CERTCertificate * cert;
34 SECItem certDataItem = { siBuffer, (
unsigned char*) certData, certDataSize };
36 if (!certData || !publicKey) {
46 *publicKey = CERT_ExtractPublicKey(cert);
47 CERT_DestroyCertificate(cert);
56NSS_VerifyBegin(VFYContext **ctx,
57 SECKEYPublicKey *
const *publicKey)
60 if (!ctx || !publicKey || !*publicKey) {
65 if ((SECKEY_PublicKeyStrength(*publicKey) * 8) <
67 fprintf(stderr,
"ERROR: Key length must be >= %d bytes\n",
72 *
ctx = VFY_CreateContext(*publicKey, NULL,
73 SEC_OID_ISO_SHA1_WITH_RSA_SIGNATURE, NULL);
78 status = VFY_Begin(*ctx);
91NSS_VerifySignature(VFYContext *
const *ctx,
92 const unsigned char *signature,
93 unsigned int signatureLen)
97 if (!ctx || !signature || !*ctx) {
101 signedItem.len = signatureLen;
102 signedItem.data = (
unsigned char*)signature;
103 status = VFY_EndWithSignature(*ctx, &signedItem);
118CryptoAPI_VerifySignature(HCRYPTHASH *hash,
120 const BYTE *signature,
129 BYTE *signatureReversed;
130 if (!hash || !pubKey || !signature || signatureLen < 1) {
134 signatureReversed = malloc(signatureLen);
135 if (!signatureReversed) {
139 for (i = 0;
i < signatureLen;
i++) {
140 signatureReversed[
i] = signature[signatureLen - 1 -
i];
142 result = CryptVerifySignature(*hash, signatureReversed,
143 signatureLen, *pubKey, NULL, 0);
144 free(signatureReversed);
158CryptoAPI_LoadPublicKey(HCRYPTPROV provider,
160 DWORD sizeOfCertData,
161 HCRYPTKEY *publicKey)
163 CRYPT_DATA_BLOB blob;
164 CERT_CONTEXT *context;
165 if (!provider || !certData || !publicKey) {
169 blob.cbData = sizeOfCertData;
170 blob.pbData = certData;
171 if (!CryptQueryObject(CERT_QUERY_OBJECT_BLOB, &blob,
172 CERT_QUERY_CONTENT_FLAG_CERT,
173 CERT_QUERY_FORMAT_FLAG_BINARY,
175 NULL, NULL, (
const void **)&context)) {
179 if (!CryptImportPublicKeyInfo(provider,
180 PKCS_7_ASN_ENCODING | X509_ASN_ENCODING,
181 &context->pCertInfo->SubjectPublicKeyInfo,
183 CertFreeCertificateContext(context);
187 CertFreeCertificateContext(context);
203CryptoAPI_InitCryptoContext(HCRYPTPROV *provider)
205 if (!CryptAcquireContext(provider,
209 CRYPT_VERIFYCONTEXT)) {
210 if (!CryptAcquireContext(provider,
214 CRYPT_NEWKEYSET | CRYPT_VERIFYCONTEXT)) {
215 if (!CryptAcquireContext(provider,
219 CRYPT_VERIFYCONTEXT)) {
220 if (!CryptAcquireContext(provider,
224 CRYPT_NEWKEYSET | CRYPT_VERIFYCONTEXT)) {
242CryptoAPI_VerifyBegin(HCRYPTPROV provider, HCRYPTHASH* hash)
245 if (!provider || !hash) {
249 *hash = (HCRYPTHASH)NULL;
250 result = CryptCreateHash(provider, CALG_SHA1,
264CryptoAPI_VerifyUpdate(HCRYPTHASH* hash,
BYTE *buf, DWORD len)
271 result = CryptHashData(*hash, buf, len, 0);
#define CryptoX_InvalidHandleValue
#define XP_MIN_SIGNATURE_LEN_IN_BYTES
#define CERT_NewTempCertificate
const wchar_t *typedef BOOL