Signed-off-by: Nikolay Sivov nsivov@codeweavers.com --- dlls/crypt32/cert.c | 3 +- dlls/crypt32/chain.c | 20 ++--- dlls/crypt32/crypt32_private.h | 2 + dlls/crypt32/decode.c | 89 +++++++++---------- dlls/crypt32/encode.c | 52 +++++------ dlls/crypt32/filestore.c | 3 +- dlls/crypt32/msg.c | 2 +- dlls/crypt32/object.c | 155 ++++++++++++--------------------- dlls/crypt32/oid.c | 9 +- dlls/crypt32/regstore.c | 9 +- dlls/crypt32/rootstore.c | 6 +- dlls/crypt32/sip.c | 5 +- dlls/crypt32/store.c | 7 +- dlls/crypt32/str.c | 6 +- 14 files changed, 150 insertions(+), 218 deletions(-)
diff --git a/dlls/crypt32/cert.c b/dlls/crypt32/cert.c index a4b43ff155..83aac5d8f4 100644 --- a/dlls/crypt32/cert.c +++ b/dlls/crypt32/cert.c @@ -987,8 +987,7 @@ static BOOL container_matches_cert(PCCERT_CONTEXT pCert, LPCSTR container, WCHAR containerW[MAX_PATH]; BOOL matches;
- MultiByteToWideChar(CP_ACP, 0, container, -1, - containerW, sizeof(containerW) / sizeof(containerW[0])); + MultiByteToWideChar(CP_ACP, 0, container, -1, containerW, ARRAY_SIZE(containerW)); /* We make a copy of the CRYPT_KEY_PROV_INFO because the caller expects * keyProvInfo->pwszContainerName to be NULL or a heap-allocated container * name. diff --git a/dlls/crypt32/chain.c b/dlls/crypt32/chain.c index aab2e91583..dd3fc33db6 100644 --- a/dlls/crypt32/chain.c +++ b/dlls/crypt32/chain.c @@ -146,9 +146,9 @@ HCERTCHAINENGINE CRYPT_CreateChainEngine(HCERTSTORE root, DWORD system_store, co worldStores[2] = CertOpenStore(CERT_STORE_PROV_SYSTEM_W, 0, 0, system_store, myW); worldStores[3] = CertOpenStore(CERT_STORE_PROV_SYSTEM_W, 0, 0, system_store, trustW);
- CRYPT_AddStoresToCollection(engine->hWorld, sizeof(worldStores) / sizeof(worldStores[0]), worldStores); - CRYPT_AddStoresToCollection(engine->hWorld, config->cAdditionalStore, config->rghAdditionalStore); - CRYPT_CloseStores(sizeof(worldStores) / sizeof(worldStores[0]), worldStores); + CRYPT_AddStoresToCollection(engine->hWorld, ARRAY_SIZE(worldStores), worldStores); + CRYPT_AddStoresToCollection(engine->hWorld, config->cAdditionalStore, config->rghAdditionalStore); + CRYPT_CloseStores(ARRAY_SIZE(worldStores), worldStores);
engine->dwFlags = config->dwFlags; engine->dwUrlRetrievalTimeout = config->dwUrlRetrievalTimeout; @@ -1688,11 +1688,9 @@ static LPCSTR filetime_to_str(const FILETIME *time)
if (!time) return "(null)";
- GetLocaleInfoA(LOCALE_SYSTEM_DEFAULT, LOCALE_SSHORTDATE, dateFmt, - sizeof(dateFmt) / sizeof(dateFmt[0])); + GetLocaleInfoA(LOCALE_SYSTEM_DEFAULT, LOCALE_SSHORTDATE, dateFmt, ARRAY_SIZE(dateFmt)); FileTimeToSystemTime(time, &sysTime); - GetDateFormatA(LOCALE_SYSTEM_DEFAULT, 0, &sysTime, dateFmt, date, - sizeof(date) / sizeof(date[0])); + GetDateFormatA(LOCALE_SYSTEM_DEFAULT, 0, &sysTime, dateFmt, date, ARRAY_SIZE(date)); return wine_dbg_sprintf("%s", date); }
@@ -3117,8 +3115,7 @@ static BOOL WINAPI verify_authenticode_policy(LPCSTR szPolicyOID, };
/* Check whether the root is an MS test root */ - for (i = 0; !isMSTestRoot && i < sizeof(keyBlobs) / sizeof(keyBlobs[0]); - i++) + for (i = 0; !isMSTestRoot && i < ARRAY_SIZE(keyBlobs); i++) { msPubKey.PublicKey.cbData = keyBlobs[i].cbData; msPubKey.PublicKey.pbData = keyBlobs[i].pbData; @@ -3408,7 +3405,7 @@ static BOOL match_dns_to_subject_dn(PCCERT_CONTEXT cert, LPCWSTR server_name)
end = dot ? dot : ptr + strlenW(ptr); len = end - ptr; - if (len >= sizeof(component) / sizeof(component[0])) + if (len >= ARRAY_SIZE(component)) { WARN_(chain)("domain component %s too long\n", debugstr_wn(ptr, len)); @@ -3690,8 +3687,7 @@ static BOOL WINAPI verify_ms_root_policy(LPCSTR szPolicyOID, PCCERT_CONTEXT root = rootChain->rgpElement[rootChain->cElement - 1]->pCertContext;
- for (i = 0; !isMSRoot && i < sizeof(keyBlobs) / sizeof(keyBlobs[0]); - i++) + for (i = 0; !isMSRoot && i < ARRAY_SIZE(keyBlobs); i++) { msPubKey.PublicKey.cbData = keyBlobs[i].cbData; msPubKey.PublicKey.pbData = keyBlobs[i].pbData; diff --git a/dlls/crypt32/crypt32_private.h b/dlls/crypt32/crypt32_private.h index 8b1b003a12..dbf6dca411 100644 --- a/dlls/crypt32/crypt32_private.h +++ b/dlls/crypt32/crypt32_private.h @@ -21,6 +21,8 @@
#include "wine/list.h"
+#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0])) + /* a few asn.1 tags we need */ #define ASN_BOOL (ASN_UNIVERSAL | ASN_PRIMITIVE | 0x01) #define ASN_BITSTRING (ASN_UNIVERSAL | ASN_PRIMITIVE | 0x03) diff --git a/dlls/crypt32/decode.c b/dlls/crypt32/decode.c index 8b84388b12..a61316016f 100644 --- a/dlls/crypt32/decode.c +++ b/dlls/crypt32/decode.c @@ -890,7 +890,7 @@ static BOOL WINAPI CRYPT_AsnDecodeCertSignedContent(DWORD dwCertEncodingType,
if (dwFlags & CRYPT_DECODE_NO_SIGNATURE_BYTE_REVERSAL_FLAG) items[2].decodeFunc = CRYPT_AsnDecodeBitsInternal; - ret = CRYPT_AsnDecodeSequence(items, sizeof(items) / sizeof(items[0]), + ret = CRYPT_AsnDecodeSequence(items, ARRAY_SIZE(items), pbEncoded, cbEncoded, dwFlags, pDecodePara, pvStructInfo, pcbStructInfo, NULL, NULL); } @@ -935,7 +935,7 @@ static BOOL CRYPT_AsnDecodeValidity(const BYTE *pbEncoded, DWORD cbEncoded, CRYPT_AsnDecodeChoiceOfTimeInternal, sizeof(FILETIME), FALSE, FALSE, 0 }, };
- ret = CRYPT_AsnDecodeSequence(items, sizeof(items) / sizeof(items[0]), + ret = CRYPT_AsnDecodeSequence(items, ARRAY_SIZE(items), pbEncoded, cbEncoded, dwFlags, NULL, pvStructInfo, pcbStructInfo, pcbDecoded, NULL); return ret; @@ -1020,7 +1020,7 @@ static BOOL CRYPT_AsnDecodeCertInfo(DWORD dwCertEncodingType, TRACE("%p, %d, %08x, %p, %p, %d\n", pbEncoded, cbEncoded, dwFlags, pDecodePara, pvStructInfo, *pcbStructInfo);
- ret = CRYPT_AsnDecodeSequence(items, sizeof(items) / sizeof(items[0]), + ret = CRYPT_AsnDecodeSequence(items, ARRAY_SIZE(items), pbEncoded, cbEncoded, dwFlags, pDecodePara, pvStructInfo, pcbStructInfo, NULL, NULL); if (ret && pvStructInfo) @@ -1135,7 +1135,7 @@ static BOOL CRYPT_AsnDecodeCRLEntry(const BYTE *pbEncoded, DWORD cbEncoded, TRACE("%p, %d, %08x, %p, %d\n", pbEncoded, cbEncoded, dwFlags, entry, *pcbStructInfo);
- ret = CRYPT_AsnDecodeSequence(items, sizeof(items) / sizeof(items[0]), + ret = CRYPT_AsnDecodeSequence(items, ARRAY_SIZE(items), pbEncoded, cbEncoded, dwFlags, NULL, entry, pcbStructInfo, pcbDecoded, entry ? entry->SerialNumber.pbData : NULL); if (ret && entry && !entry->SerialNumber.cbData) @@ -1236,9 +1236,8 @@ static BOOL CRYPT_AsnDecodeCRLInfo(DWORD dwCertEncodingType, TRACE("%p, %d, %08x, %p, %p, %d\n", pbEncoded, cbEncoded, dwFlags, pDecodePara, pvStructInfo, *pcbStructInfo);
- ret = CRYPT_AsnDecodeSequence(items, sizeof(items) / sizeof(items[0]), - pbEncoded, cbEncoded, dwFlags, pDecodePara, pvStructInfo, pcbStructInfo, - NULL, NULL); + ret = CRYPT_AsnDecodeSequence(items, ARRAY_SIZE(items), pbEncoded, cbEncoded, dwFlags, + pDecodePara, pvStructInfo, pcbStructInfo, NULL, NULL);
TRACE("Returning %d (%08x)\n", ret, GetLastError()); return ret; @@ -1433,7 +1432,7 @@ static BOOL CRYPT_AsnDecodeExtension(const BYTE *pbEncoded, DWORD cbEncoded,
if (ext) TRACE("ext->pszObjId is %p\n", ext->pszObjId); - ret = CRYPT_AsnDecodeSequence(items, sizeof(items) / sizeof(items[0]), + ret = CRYPT_AsnDecodeSequence(items, ARRAY_SIZE(items), pbEncoded, cbEncoded, dwFlags, NULL, ext, pcbStructInfo, pcbDecoded, ext ? ext->pszObjId : NULL); if (ext) @@ -1871,7 +1870,7 @@ static BOOL CRYPT_AsnDecodeRdnAttr(const BYTE *pbEncoded, DWORD cbEncoded,
if (attr) TRACE("attr->pszObjId is %p\n", attr->pszObjId); - ret = CRYPT_AsnDecodeSequence(items, sizeof(items) / sizeof(items[0]), + ret = CRYPT_AsnDecodeSequence(items, ARRAY_SIZE(items), pbEncoded, cbEncoded, dwFlags, NULL, attr, pcbStructInfo, pcbDecoded, attr ? attr->pszObjId : NULL); if (attr) @@ -1968,7 +1967,7 @@ static BOOL CRYPT_AsnDecodeUnicodeRdnAttr(const BYTE *pbEncoded,
if (attr) TRACE("attr->pszObjId is %p\n", attr->pszObjId); - ret = CRYPT_AsnDecodeSequence(items, sizeof(items) / sizeof(items[0]), + ret = CRYPT_AsnDecodeSequence(items, ARRAY_SIZE(items), pbEncoded, cbEncoded, dwFlags, NULL, attr, pcbStructInfo, pcbDecoded, attr ? attr->pszObjId : NULL); if (attr) @@ -2197,7 +2196,7 @@ static BOOL CRYPT_AsnDecodeCTLEntry(const BYTE *pbEncoded, DWORD cbEncoded, TRACE("%p, %d, %08x, %p, %d\n", pbEncoded, cbEncoded, dwFlags, entry, *pcbStructInfo);
- ret = CRYPT_AsnDecodeSequence(items, sizeof(items) / sizeof(items[0]), + ret = CRYPT_AsnDecodeSequence(items, ARRAY_SIZE(items), pbEncoded, cbEncoded, dwFlags, NULL, entry, pcbStructInfo, pcbDecoded, entry ? entry->SubjectIdentifier.pbData : NULL); return ret; @@ -2300,7 +2299,7 @@ static BOOL WINAPI CRYPT_AsnDecodeCTL(DWORD dwCertEncodingType, TRUE, TRUE, offsetof(CTL_INFO, rgExtension), 0 }, };
- ret = CRYPT_AsnDecodeSequence(items, sizeof(items) / sizeof(items[0]), + ret = CRYPT_AsnDecodeSequence(items, ARRAY_SIZE(items), pbEncoded, cbEncoded, dwFlags, pDecodePara, pvStructInfo, pcbStructInfo, NULL, NULL); } @@ -2330,7 +2329,7 @@ static BOOL CRYPT_AsnDecodeSMIMECapability(const BYTE *pbEncoded, TRACE("%p, %d, %08x, %p, %d\n", pbEncoded, cbEncoded, dwFlags, pvStructInfo, *pcbStructInfo);
- ret = CRYPT_AsnDecodeSequence(items, sizeof(items) / sizeof(items[0]), + ret = CRYPT_AsnDecodeSequence(items, ARRAY_SIZE(items), pbEncoded, cbEncoded, dwFlags, NULL, pvStructInfo, pcbStructInfo, pcbDecoded, capability ? capability->pszObjId : NULL); TRACE("returning %d\n", ret); @@ -2460,7 +2459,7 @@ static BOOL CRYPT_AsnDecodeNoticeReference(const BYTE *pbEncoded, TRACE("%p, %d, %08x, %p, %d\n", pbEncoded, cbEncoded, dwFlags, pvStructInfo, pvStructInfo ? *pcbStructInfo : 0);
- ret = CRYPT_AsnDecodeSequence(items, sizeof(items) / sizeof(items[0]), + ret = CRYPT_AsnDecodeSequence(items, ARRAY_SIZE(items), pbEncoded, cbEncoded, dwFlags, NULL, NULL, &bytesNeeded, pcbDecoded, NULL); if (ret) @@ -2496,10 +2495,8 @@ static BOOL CRYPT_AsnDecodeNoticeReference(const BYTE *pbEncoded, *(PCERT_POLICY_QUALIFIER_NOTICE_REFERENCE *)pvStructInfo; noticeRef->pszOrganization = (LPSTR)((LPBYTE)noticeRef + sizeof(CERT_POLICY_QUALIFIER_NOTICE_REFERENCE)); - ret = CRYPT_AsnDecodeSequence(items, - sizeof(items) / sizeof(items[0]), pbEncoded, cbEncoded, dwFlags, - NULL, noticeRef, &bytesNeeded, pcbDecoded, - noticeRef->pszOrganization); + ret = CRYPT_AsnDecodeSequence(items, ARRAY_SIZE(items), pbEncoded, cbEncoded, dwFlags, + NULL, noticeRef, &bytesNeeded, pcbDecoded, noticeRef->pszOrganization); } } TRACE("returning %d\n", ret); @@ -2653,7 +2650,7 @@ static BOOL CRYPT_AsnDecodePolicyQualifierUserNoticeInternal( TRACE("%p, %d, %08x, %p, %d\n", pbEncoded, cbEncoded, dwFlags, pvStructInfo, *pcbStructInfo);
- ret = CRYPT_AsnDecodeSequence(items, sizeof(items) / sizeof(items[0]), + ret = CRYPT_AsnDecodeSequence(items, ARRAY_SIZE(items), pbEncoded, cbEncoded, dwFlags, NULL, pvStructInfo, pcbStructInfo, pcbDecoded, notice ? notice->pNoticeReference : NULL); TRACE("returning %d\n", ret); @@ -2748,7 +2745,7 @@ static BOOL CRYPT_AsnDecodePKCSAttributeInternal(const BYTE *pbEncoded, TRACE("%p, %d, %08x, %p, %d\n", pbEncoded, cbEncoded, dwFlags, pvStructInfo, *pcbStructInfo);
- ret = CRYPT_AsnDecodeSequence(items, sizeof(items) / sizeof(items[0]), + ret = CRYPT_AsnDecodeSequence(items, ARRAY_SIZE(items), pbEncoded, cbEncoded, dwFlags, NULL, pvStructInfo, pcbStructInfo, pcbDecoded, attr ? attr->pszObjId : NULL); TRACE("returning %d\n", ret); @@ -2866,7 +2863,7 @@ static BOOL CRYPT_AsnDecodeAlgorithmId(const BYTE *pbEncoded, DWORD cbEncoded, TRACE("%p, %d, %08x, %p, %d, %p\n", pbEncoded, cbEncoded, dwFlags, pvStructInfo, *pcbStructInfo, pcbDecoded);
- ret = CRYPT_AsnDecodeSequence(items, sizeof(items) / sizeof(items[0]), + ret = CRYPT_AsnDecodeSequence(items, ARRAY_SIZE(items), pbEncoded, cbEncoded, dwFlags, NULL, pvStructInfo, pcbStructInfo, pcbDecoded, algo ? algo->pszObjId : NULL); if (ret && pvStructInfo) @@ -2893,7 +2890,7 @@ static BOOL CRYPT_AsnDecodePubKeyInfoInternal(const BYTE *pbEncoded, }; PCERT_PUBLIC_KEY_INFO info = pvStructInfo;
- ret = CRYPT_AsnDecodeSequence(items, sizeof(items) / sizeof(items[0]), + ret = CRYPT_AsnDecodeSequence(items, ARRAY_SIZE(items), pbEncoded, cbEncoded, dwFlags, NULL, pvStructInfo, pcbStructInfo, pcbDecoded, info ? info->Algorithm.Parameters.pbData : NULL); return ret; @@ -3150,7 +3147,7 @@ static BOOL WINAPI CRYPT_AsnDecodeAuthorityKeyId(DWORD dwCertEncodingType, offsetof(CERT_AUTHORITY_KEY_ID_INFO, CertSerialNumber.pbData), 0 }, };
- ret = CRYPT_AsnDecodeSequence(items, sizeof(items) / sizeof(items[0]), + ret = CRYPT_AsnDecodeSequence(items, ARRAY_SIZE(items), pbEncoded, cbEncoded, dwFlags, pDecodePara, pvStructInfo, pcbStructInfo, NULL, NULL); } @@ -3187,7 +3184,7 @@ static BOOL WINAPI CRYPT_AsnDecodeAuthorityKeyId2(DWORD dwCertEncodingType, AuthorityCertSerialNumber.pbData), 0 }, };
- ret = CRYPT_AsnDecodeSequence(items, sizeof(items) / sizeof(items[0]), + ret = CRYPT_AsnDecodeSequence(items, ARRAY_SIZE(items), pbEncoded, cbEncoded, dwFlags, pDecodePara, pvStructInfo, pcbStructInfo, NULL, NULL); } @@ -3214,7 +3211,7 @@ static BOOL CRYPT_AsnDecodeAccessDescription(const BYTE *pbEncoded, }; CERT_ACCESS_DESCRIPTION *descr = pvStructInfo;
- return CRYPT_AsnDecodeSequence(items, sizeof(items) / sizeof(items[0]), + return CRYPT_AsnDecodeSequence(items, ARRAY_SIZE(items), pbEncoded, cbEncoded, dwFlags, NULL, pvStructInfo, pcbStructInfo, pcbDecoded, descr ? descr->pszAccessMethod : NULL); } @@ -3323,7 +3320,7 @@ static BOOL CRYPT_AsnDecodePKCSContentInfoInternal(const BYTE *pbEncoded, TRACE("%p, %d, %08x, %p, %d, %p\n", pbEncoded, cbEncoded, dwFlags, pvStructInfo, *pcbStructInfo, pcbDecoded);
- ret = CRYPT_AsnDecodeSequence(items, sizeof(items) / sizeof(items[0]), + ret = CRYPT_AsnDecodeSequence(items, ARRAY_SIZE(items), pbEncoded, cbEncoded, dwFlags, NULL, pvStructInfo, pcbStructInfo, pcbDecoded, info ? info->pszObjId : NULL); return ret; @@ -3392,7 +3389,7 @@ BOOL CRYPT_AsnDecodePKCSDigestedData(const BYTE *pbEncoded, DWORD cbEncoded, offsetof(CRYPT_DIGESTED_DATA, hash.pbData), 0 }, };
- ret = CRYPT_AsnDecodeSequence(items, sizeof(items) / sizeof(items[0]), + ret = CRYPT_AsnDecodeSequence(items, ARRAY_SIZE(items), pbEncoded, cbEncoded, dwFlags, pDecodePara, digestedData, pcbDigestedData, NULL, NULL); return ret; @@ -3531,7 +3528,7 @@ static BOOL WINAPI CRYPT_AsnDecodeBasicConstraints(DWORD dwCertEncodingType, offsetof(CERT_BASIC_CONSTRAINTS_INFO, rgSubtreesConstraint), 0 }, };
- ret = CRYPT_AsnDecodeSequence(items, sizeof(items) / sizeof(items[0]), + ret = CRYPT_AsnDecodeSequence(items, ARRAY_SIZE(items), pbEncoded, cbEncoded, dwFlags, pDecodePara, pvStructInfo, pcbStructInfo, NULL, NULL); } @@ -3560,7 +3557,7 @@ static BOOL WINAPI CRYPT_AsnDecodeBasicConstraints2(DWORD dwCertEncodingType, sizeof(struct PATH_LEN_CONSTRAINT), TRUE, FALSE, 0, 0 }, };
- ret = CRYPT_AsnDecodeSequence(items, sizeof(items) / sizeof(items[0]), + ret = CRYPT_AsnDecodeSequence(items, ARRAY_SIZE(items), pbEncoded, cbEncoded, dwFlags, pDecodePara, pvStructInfo, pcbStructInfo, NULL, NULL); } @@ -3592,7 +3589,7 @@ static BOOL CRYPT_AsnDecodePolicyQualifier(const BYTE *pbEncoded, TRACE("%p, %d, %08x, %p, %d\n", pbEncoded, cbEncoded, dwFlags, pvStructInfo, pvStructInfo ? *pcbStructInfo : 0);
- ret = CRYPT_AsnDecodeSequence(items, sizeof(items) / sizeof(items[0]), + ret = CRYPT_AsnDecodeSequence(items, ARRAY_SIZE(items), pbEncoded, cbEncoded, dwFlags, NULL, pvStructInfo, pcbStructInfo, pcbDecoded, qualifier ? qualifier->pszPolicyQualifierId : NULL); return ret; @@ -3637,7 +3634,7 @@ static BOOL CRYPT_AsnDecodeCertPolicy(const BYTE *pbEncoded, DWORD cbEncoded, TRACE("%p, %d, %08x, %p, %d\n", pbEncoded, cbEncoded, dwFlags, pvStructInfo, pvStructInfo ? *pcbStructInfo : 0);
- ret = CRYPT_AsnDecodeSequence(items, sizeof(items) / sizeof(items[0]), + ret = CRYPT_AsnDecodeSequence(items, ARRAY_SIZE(items), pbEncoded, cbEncoded, dwFlags, NULL, pvStructInfo, pcbStructInfo, pcbDecoded, info ? info->pszPolicyIdentifier : NULL); return ret; @@ -3694,7 +3691,7 @@ static BOOL CRYPT_AsnDecodeCertPolicyMapping(const BYTE *pbEncoded, TRACE("%p, %d, %08x, %p, %d\n", pbEncoded, cbEncoded, dwFlags, pvStructInfo, pvStructInfo ? *pcbStructInfo : 0);
- ret = CRYPT_AsnDecodeSequence(items, sizeof(items) / sizeof(items[0]), + ret = CRYPT_AsnDecodeSequence(items, ARRAY_SIZE(items), pbEncoded, cbEncoded, dwFlags, NULL, pvStructInfo, pcbStructInfo, pcbDecoded, mapping ? mapping->pszIssuerDomainPolicy : NULL); return ret; @@ -3851,7 +3848,7 @@ static BOOL WINAPI CRYPT_AsnDecodeCertPolicyConstraints( TRUE, FALSE, 0, 0 }, };
- ret = CRYPT_AsnDecodeSequence(items, sizeof(items) / sizeof(items[0]), + ret = CRYPT_AsnDecodeSequence(items, ARRAY_SIZE(items), pbEncoded, cbEncoded, dwFlags, pDecodePara, pvStructInfo, pcbStructInfo, NULL, NULL); } @@ -3890,7 +3887,7 @@ static BOOL WINAPI CRYPT_AsnDecodeRsaPubKey(DWORD dwCertEncodingType, struct DECODED_RSA_PUB_KEY *decodedKey = NULL; DWORD size = 0;
- ret = CRYPT_AsnDecodeSequence(items, sizeof(items) / sizeof(items[0]), + ret = CRYPT_AsnDecodeSequence(items, ARRAY_SIZE(items), pbEncoded, cbEncoded, CRYPT_DECODE_ALLOC_FLAG, NULL, &decodedKey, &size, NULL, NULL); if (ret) @@ -3998,7 +3995,7 @@ static BOOL WINAPI CRYPT_AsnDecodeRsaPrivKey(DWORD dwCertEncodingType, struct DECODED_RSA_PRIV_KEY *decodedKey = NULL; DWORD size = 0;
- ret = CRYPT_AsnDecodeSequence(items, sizeof(items) / sizeof(items[0]), + ret = CRYPT_AsnDecodeSequence(items, ARRAY_SIZE(items), pbEncoded, cbEncoded, CRYPT_DECODE_ALLOC_FLAG, NULL, &decodedKey, &size, NULL, NULL); if (ret) @@ -5242,7 +5239,7 @@ static BOOL CRYPT_AsnDecodeDistPoint(const BYTE *pbEncoded, DWORD cbEncoded, CRL_DIST_POINT *point = pvStructInfo; BOOL ret;
- ret = CRYPT_AsnDecodeSequence(items, sizeof(items) / sizeof(items[0]), + ret = CRYPT_AsnDecodeSequence(items, ARRAY_SIZE(items), pbEncoded, cbEncoded, dwFlags, NULL, pvStructInfo, pcbStructInfo, pcbDecoded, point ? point->DistPointName.u.FullName.rgAltEntry : NULL); return ret; @@ -5344,7 +5341,7 @@ static BOOL WINAPI CRYPT_AsnDecodeIssuingDistPoint(DWORD dwCertEncodingType, fIndirectCRL), CRYPT_AsnDecodeBool, sizeof(BOOL), TRUE, FALSE, 0 }, };
- ret = CRYPT_AsnDecodeSequence(items, sizeof(items) / sizeof(items[0]), + ret = CRYPT_AsnDecodeSequence(items, ARRAY_SIZE(items), pbEncoded, cbEncoded, dwFlags, pDecodePara, pvStructInfo, pcbStructInfo, NULL, NULL); } @@ -5427,7 +5424,7 @@ static BOOL CRYPT_AsnDecodeSubtree(const BYTE *pbEncoded, TRACE("%p, %d, %08x, %p, %d, %p\n", pbEncoded, cbEncoded, dwFlags, pvStructInfo, *pcbStructInfo, pcbDecoded);
- ret = CRYPT_AsnDecodeSequence(items, sizeof(items) / sizeof(items[0]), + ret = CRYPT_AsnDecodeSequence(items, ARRAY_SIZE(items), pbEncoded, cbEncoded, dwFlags, NULL, pvStructInfo, pcbStructInfo, pcbDecoded, subtree ? subtree->Base.u.pwszURL : NULL); if (pcbDecoded) @@ -5508,7 +5505,7 @@ static BOOL WINAPI CRYPT_AsnDecodeNameConstraints(DWORD dwCertEncodingType, offsetof(CERT_NAME_CONSTRAINTS_INFO, rgExcludedSubtree), 0 }, };
- ret = CRYPT_AsnDecodeSequence(items, sizeof(items) / sizeof(items[0]), + ret = CRYPT_AsnDecodeSequence(items, ARRAY_SIZE(items), pbEncoded, cbEncoded, dwFlags, pDecodePara, pvStructInfo, pcbStructInfo, NULL, NULL); } @@ -5538,7 +5535,7 @@ static BOOL CRYPT_AsnDecodeIssuerSerialNumber(const BYTE *pbEncoded, TRACE("%p, %d, %08x, %p, %d, %p\n", pbEncoded, cbEncoded, dwFlags, pvStructInfo, *pcbStructInfo, pcbDecoded);
- ret = CRYPT_AsnDecodeSequence(items, sizeof(items) / sizeof(items[0]), + ret = CRYPT_AsnDecodeSequence(items, ARRAY_SIZE(items), pbEncoded, cbEncoded, dwFlags, NULL, pvStructInfo, pcbStructInfo, pcbDecoded, issuerSerial ? issuerSerial->Issuer.pbData : NULL); if (ret && issuerSerial && !issuerSerial->SerialNumber.cbData) @@ -5585,7 +5582,7 @@ static BOOL CRYPT_AsnDecodePKCSSignerInfoInternal(const BYTE *pbEncoded, TRACE("%p, %d, %08x, %p, %d\n", pbEncoded, cbEncoded, dwFlags, pvStructInfo, *pcbStructInfo);
- ret = CRYPT_AsnDecodeSequence(items, sizeof(items) / sizeof(items[0]), + ret = CRYPT_AsnDecodeSequence(items, ARRAY_SIZE(items), pbEncoded, cbEncoded, dwFlags, NULL, pvStructInfo, pcbStructInfo, pcbDecoded, info ? info->Issuer.pbData : NULL); return ret; @@ -5751,7 +5748,7 @@ static BOOL CRYPT_AsnDecodeCMSSignerInfoInternal(const BYTE *pbEncoded, TRACE("%p, %d, %08x, %p, %d\n", pbEncoded, cbEncoded, dwFlags, pvStructInfo, *pcbStructInfo);
- ret = CRYPT_AsnDecodeSequence(items, sizeof(items) / sizeof(items[0]), + ret = CRYPT_AsnDecodeSequence(items, ARRAY_SIZE(items), pbEncoded, cbEncoded, dwFlags, NULL, pvStructInfo, pcbStructInfo, pcbDecoded, info ? info->SignerId.u.KeyId.pbData : NULL); return ret; @@ -5851,7 +5848,7 @@ BOOL CRYPT_AsnDecodeCMSSignedInfo(const BYTE *pbEncoded, DWORD cbEncoded, TRACE("%p, %d, %08x, %p, %p, %p\n", pbEncoded, cbEncoded, dwFlags, pDecodePara, signedInfo, pcbSignedInfo);
- ret = CRYPT_AsnDecodeSequence(items, sizeof(items) / sizeof(items[0]), + ret = CRYPT_AsnDecodeSequence(items, ARRAY_SIZE(items), pbEncoded, cbEncoded, dwFlags, pDecodePara, signedInfo, pcbSignedInfo, NULL, NULL); TRACE("returning %d\n", ret); @@ -5884,7 +5881,7 @@ static BOOL CRYPT_AsnDecodeRecipientInfo(const BYTE *pbEncoded, DWORD cbEncoded, TRACE("%p, %d, %08x, %p, %d, %p\n", pbEncoded, cbEncoded, dwFlags, pvStructInfo, *pcbStructInfo, pcbDecoded);
- ret = CRYPT_AsnDecodeSequence(items, sizeof(items) / sizeof(items[0]), + ret = CRYPT_AsnDecodeSequence(items, ARRAY_SIZE(items), pbEncoded, cbEncoded, dwFlags, NULL, pvStructInfo, pcbStructInfo, pcbDecoded, info ? info->RecipientId.u.IssuerSerialNumber.Issuer.pbData : NULL); @@ -5941,7 +5938,7 @@ static BOOL CRYPT_AsnDecodeEncryptedContentInfo(const BYTE *pbEncoded, TRACE("%p, %d, %08x, %p, %d, %p\n", pbEncoded, cbEncoded, dwFlags, pvStructInfo, *pcbStructInfo, pcbDecoded);
- ret = CRYPT_AsnDecodeSequence(items, sizeof(items) / sizeof(items[0]), + ret = CRYPT_AsnDecodeSequence(items, ARRAY_SIZE(items), pbEncoded, cbEncoded, dwFlags, NULL, pvStructInfo, pcbStructInfo, pcbDecoded, info ? info->contentType : NULL); TRACE("returning %d\n", ret); @@ -5969,7 +5966,7 @@ BOOL CRYPT_AsnDecodePKCSEnvelopedData(const BYTE *pbEncoded, DWORD cbEncoded, TRACE("%p, %d, %08x, %p, %p, %p\n", pbEncoded, cbEncoded, dwFlags, pDecodePara, envelopedData, pcbEnvelopedData);
- ret = CRYPT_AsnDecodeSequence(items, sizeof(items) / sizeof(items[0]), + ret = CRYPT_AsnDecodeSequence(items, ARRAY_SIZE(items), pbEncoded, cbEncoded, dwFlags, pDecodePara, envelopedData, pcbEnvelopedData, NULL, NULL); TRACE("returning %d\n", ret); diff --git a/dlls/crypt32/encode.c b/dlls/crypt32/encode.c index 6f9f595f4f..62d2bc91f7 100644 --- a/dlls/crypt32/encode.c +++ b/dlls/crypt32/encode.c @@ -372,7 +372,7 @@ static BOOL WINAPI CRYPT_AsnEncodeValidity(DWORD dwCertEncodingType, };
ret = CRYPT_AsnEncodeSequence(dwCertEncodingType, items, - sizeof(items) / sizeof(items[0]), dwFlags, pEncodePara, pbEncoded, + ARRAY_SIZE(items), dwFlags, pEncodePara, pbEncoded, pcbEncoded); return ret; } @@ -400,7 +400,7 @@ static BOOL WINAPI CRYPT_AsnEncodeAlgorithmIdWithNullParams( else items[1].pvStructInfo = &nullBlob; ret = CRYPT_AsnEncodeSequence(dwCertEncodingType, items, - sizeof(items) / sizeof(items[0]), dwFlags, pEncodePara, pbEncoded, + ARRAY_SIZE(items), dwFlags, pEncodePara, pbEncoded, pcbEncoded); return ret; } @@ -417,7 +417,7 @@ static BOOL WINAPI CRYPT_AsnEncodeAlgorithmId(DWORD dwCertEncodingType, };
ret = CRYPT_AsnEncodeSequence(dwCertEncodingType, items, - sizeof(items) / sizeof(items[0]), dwFlags, pEncodePara, pbEncoded, + ARRAY_SIZE(items), dwFlags, pEncodePara, pbEncoded, pcbEncoded); return ret; } @@ -439,7 +439,7 @@ static BOOL WINAPI CRYPT_AsnEncodePubKeyInfo(DWORD dwCertEncodingType, TRACE("Encoding public key with OID %s\n", debugstr_a(info->Algorithm.pszObjId)); ret = CRYPT_AsnEncodeSequence(dwCertEncodingType, items, - sizeof(items) / sizeof(items[0]), dwFlags, pEncodePara, pbEncoded, + ARRAY_SIZE(items), dwFlags, pEncodePara, pbEncoded, pcbEncoded); } __EXCEPT_PAGE_FAULT @@ -469,7 +469,7 @@ static BOOL WINAPI CRYPT_AsnEncodeCert(DWORD dwCertEncodingType, if (dwFlags & CRYPT_ENCODE_NO_SIGNATURE_BYTE_REVERSAL_FLAG) items[2].encodeFunc = CRYPT_AsnEncodeBits; ret = CRYPT_AsnEncodeSequence(dwCertEncodingType, items, - sizeof(items) / sizeof(items[0]), dwFlags, pEncodePara, pbEncoded, + ARRAY_SIZE(items), dwFlags, pEncodePara, pbEncoded, pcbEncoded); } __EXCEPT_PAGE_FAULT @@ -495,7 +495,7 @@ BOOL WINAPI CRYPT_AsnEncodePubKeyInfoNoNull(DWORD dwCertEncodingType, TRACE("Encoding public key with OID %s\n", debugstr_a(info->Algorithm.pszObjId)); ret = CRYPT_AsnEncodeSequence(dwCertEncodingType, items, - sizeof(items) / sizeof(items[0]), dwFlags, pEncodePara, pbEncoded, + ARRAY_SIZE(items), dwFlags, pEncodePara, pbEncoded, pcbEncoded); return ret; } @@ -1530,7 +1530,7 @@ static BOOL CRYPT_AsnEncodeCTLEntry(const CTL_ENTRY *entry, BOOL ret;
ret = CRYPT_AsnEncodeSequence(X509_ASN_ENCODING, items, - sizeof(items) / sizeof(items[0]), 0, NULL, pbEncoded, pcbEncoded); + ARRAY_SIZE(items), 0, NULL, pbEncoded, pcbEncoded); return ret; }
@@ -1679,7 +1679,7 @@ static BOOL CRYPT_AsnEncodeSMIMECapability(DWORD dwCertEncodingType, };
ret = CRYPT_AsnEncodeSequence(dwCertEncodingType, items, - sizeof(items) / sizeof(items[0]), dwFlags, pEncodePara, pbEncoded, + ARRAY_SIZE(items), dwFlags, pEncodePara, pbEncoded, pcbEncoded); } } @@ -1822,7 +1822,7 @@ static BOOL WINAPI CRYPT_AsnEncodeNoticeReference(DWORD dwCertEncodingType, };
ret = CRYPT_AsnEncodeSequence(dwCertEncodingType, items, - sizeof(items) / sizeof(items[0]), dwFlags, pEncodePara, pbEncoded, + ARRAY_SIZE(items), dwFlags, pEncodePara, pbEncoded, pcbEncoded); return ret; } @@ -1887,7 +1887,7 @@ static BOOL WINAPI CRYPT_AsnEncodePKCSAttribute(DWORD dwCertEncodingType, };
ret = CRYPT_AsnEncodeSequence(dwCertEncodingType, items, - sizeof(items) / sizeof(items[0]), dwFlags, pEncodePara, pbEncoded, + ARRAY_SIZE(items), dwFlags, pEncodePara, pbEncoded, pcbEncoded); } } @@ -1960,8 +1960,7 @@ BOOL CRYPT_AsnEncodePKCSDigestedData(const CRYPT_DIGESTED_DATA *digestedData, { &digestedData->hash, CRYPT_AsnEncodeOctets, 0 }, };
- return CRYPT_AsnEncodeSequence(X509_ASN_ENCODING, items, - sizeof(items) / sizeof(items[0]), 0, NULL, pvData, pcbData); + return CRYPT_AsnEncodeSequence(X509_ASN_ENCODING, items, ARRAY_SIZE(items), 0, NULL, pvData, pcbData); }
static BOOL WINAPI CRYPT_AsnEncodePKCSContentInfo(DWORD dwCertEncodingType, @@ -2708,8 +2707,7 @@ static BOOL CRYPT_AsnEncodeAccessDescription( SetLastError(E_INVALIDARG); return FALSE; } - return CRYPT_AsnEncodeSequence(X509_ASN_ENCODING, items, - sizeof(items) / sizeof(items[0]), 0, NULL, pbEncoded, pcbEncoded); + return CRYPT_AsnEncodeSequence(X509_ASN_ENCODING, items, ARRAY_SIZE(items), 0, NULL, pbEncoded, pcbEncoded); }
static BOOL WINAPI CRYPT_AsnEncodeAuthorityInfoAccess(DWORD dwCertEncodingType, @@ -2877,8 +2875,7 @@ static BOOL WINAPI CRYPT_AsnEncodeCertPolicyQualifiers(DWORD dwCertEncodingType, items[0].pvStructInfo = info->rgPolicyQualifier[i].pszPolicyQualifierId; items[1].pvStructInfo = &info->rgPolicyQualifier[i].Qualifier; - ret = CRYPT_AsnEncodeSequence(dwCertEncodingType, items, - sizeof(items) / sizeof(items[0]), + ret = CRYPT_AsnEncodeSequence(dwCertEncodingType, items, ARRAY_SIZE(items), dwFlags & ~CRYPT_ENCODE_ALLOC_FLAG, NULL, NULL, &size); if (ret) bytesNeeded += size; @@ -2909,8 +2906,7 @@ static BOOL WINAPI CRYPT_AsnEncodeCertPolicyQualifiers(DWORD dwCertEncodingType, items[1].pvStructInfo = &info->rgPolicyQualifier[i].Qualifier; size = bytesNeeded; - ret = CRYPT_AsnEncodeSequence(dwCertEncodingType, items, - sizeof(items) / sizeof(items[0]), + ret = CRYPT_AsnEncodeSequence(dwCertEncodingType, items, ARRAY_SIZE(items), dwFlags & ~CRYPT_ENCODE_ALLOC_FLAG, NULL, out, &size); if (ret) { @@ -2942,8 +2938,7 @@ static BOOL CRYPT_AsnEncodeCertPolicy(DWORD dwCertEncodingType, SetLastError(E_INVALIDARG); return FALSE; } - ret = CRYPT_AsnEncodeSequence(dwCertEncodingType, items, - sizeof(items) / sizeof(items[0]), dwFlags, NULL, pbEncoded, pcbEncoded); + ret = CRYPT_AsnEncodeSequence(dwCertEncodingType, items, ARRAY_SIZE(items), dwFlags, NULL, pbEncoded, pcbEncoded); return ret; }
@@ -3026,8 +3021,7 @@ static BOOL CRYPT_AsnEncodeCertPolicyMapping(DWORD dwCertEncodingType, SetLastError(E_INVALIDARG); return FALSE; } - return CRYPT_AsnEncodeSequence(dwCertEncodingType, items, - sizeof(items) / sizeof(items[0]), dwFlags, NULL, pbEncoded, pcbEncoded); + return CRYPT_AsnEncodeSequence(dwCertEncodingType, items, ARRAY_SIZE(items), dwFlags, NULL, pbEncoded, pcbEncoded); }
static BOOL WINAPI CRYPT_AsnEncodeCertPolicyMappings(DWORD dwCertEncodingType, @@ -3169,8 +3163,7 @@ static BOOL WINAPI CRYPT_AsnEncodeRsaPubKey(DWORD dwCertEncodingType, };
ret = CRYPT_AsnEncodeSequence(dwCertEncodingType, items, - sizeof(items) / sizeof(items[0]), dwFlags, pEncodePara, pbEncoded, - pcbEncoded); + ARRAY_SIZE(items), dwFlags, pEncodePara, pbEncoded, pcbEncoded); } } __EXCEPT_PAGE_FAULT @@ -4151,8 +4144,7 @@ static BOOL WINAPI CRYPT_AsnEncodeIssuerSerialNumber( };
ret = CRYPT_AsnEncodeSequence(dwCertEncodingType, items, - sizeof(items) / sizeof(items[0]), dwFlags, pEncodePara, pbEncoded, - pcbEncoded); + ARRAY_SIZE(items), dwFlags, pEncodePara, pbEncoded, pcbEncoded); return ret; }
@@ -4402,8 +4394,7 @@ static BOOL WINAPI CRYPT_AsnEncodeRecipientInfo(DWORD dwCertEncodingType, };
return CRYPT_AsnEncodeSequence(dwCertEncodingType, items, - sizeof(items) / sizeof(items[0]), dwFlags, pEncodePara, pbEncoded, - pcbEncoded); + ARRAY_SIZE(items), dwFlags, pEncodePara, pbEncoded, pcbEncoded); }
static BOOL WINAPI CRYPT_AsnEncodeEncryptedContentInfo(DWORD dwCertEncodingType, @@ -4421,8 +4412,7 @@ static BOOL WINAPI CRYPT_AsnEncodeEncryptedContentInfo(DWORD dwCertEncodingType, };
return CRYPT_AsnEncodeSequence(dwCertEncodingType, items, - sizeof(items) / sizeof(items[0]), dwFlags, pEncodePara, pbEncoded, - pcbEncoded); + ARRAY_SIZE(items), dwFlags, pEncodePara, pbEncoded, pcbEncoded); }
BOOL CRYPT_AsnEncodePKCSEnvelopedData(const CRYPT_ENVELOPED_DATA *envelopedData, @@ -4439,7 +4429,7 @@ BOOL CRYPT_AsnEncodePKCSEnvelopedData(const CRYPT_ENVELOPED_DATA *envelopedData, };
return CRYPT_AsnEncodeSequence(X509_ASN_ENCODING, items, - sizeof(items) / sizeof(items[0]), 0, NULL, pvData, pcbData); + ARRAY_SIZE(items), 0, NULL, pvData, pcbData); }
static CryptEncodeObjectExFunc CRYPT_GetBuiltinEncoder(DWORD dwCertEncodingType, diff --git a/dlls/crypt32/filestore.c b/dlls/crypt32/filestore.c index 0f7d8d5150..9c211e14b1 100644 --- a/dlls/crypt32/filestore.c +++ b/dlls/crypt32/filestore.c @@ -231,8 +231,7 @@ static WINECRYPT_CERTSTORE *CRYPT_CreateFileStore(DWORD dwFlags, info->type = type; info->dirty = FALSE; provInfo.cbSize = sizeof(provInfo); - provInfo.cStoreProvFunc = sizeof(fileProvFuncs) / - sizeof(fileProvFuncs[0]); + provInfo.cStoreProvFunc = ARRAY_SIZE(fileProvFuncs); provInfo.rgpvStoreProvFunc = fileProvFuncs; provInfo.hStoreProv = info; store = CRYPT_ProvCreateStore(dwFlags, memStore, &provInfo); diff --git a/dlls/crypt32/msg.c b/dlls/crypt32/msg.c index fd43a7baeb..005fbf2c1f 100644 --- a/dlls/crypt32/msg.c +++ b/dlls/crypt32/msg.c @@ -175,7 +175,7 @@ static BOOL CRYPT_EncodeDataContentInfoHeader(const CDataEncodeMsg *msg, };
ret = CRYPT_AsnEncodeSequence(X509_ASN_ENCODING, items, - sizeof(items) / sizeof(items[0]), CRYPT_ENCODE_ALLOC_FLAG, NULL, + ARRAY_SIZE(items), CRYPT_ENCODE_ALLOC_FLAG, NULL, (LPBYTE)&header->pbData, &header->cbData); if (ret) { diff --git a/dlls/crypt32/object.c b/dlls/crypt32/object.c index 0320cfda1b..3dc28af0e9 100644 --- a/dlls/crypt32/object.c +++ b/dlls/crypt32/object.c @@ -929,8 +929,7 @@ static BOOL WINAPI CRYPT_FormatKeyUsage(DWORD dwCertEncodingType, WCHAR infoNotAvailable[MAX_STRING_RESOURCE_LEN]; DWORD bytesNeeded = sizeof(WCHAR);
- LoadStringW(hInstance, IDS_INFO_NOT_AVAILABLE, infoNotAvailable, - sizeof(infoNotAvailable) / sizeof(infoNotAvailable[0])); + LoadStringW(hInstance, IDS_INFO_NOT_AVAILABLE, infoNotAvailable, ARRAY_SIZE(infoNotAvailable)); if (!bits->cbData || bits->cbData > 2) { bytesNeeded += strlenW(infoNotAvailable) * sizeof(WCHAR); @@ -959,26 +958,18 @@ static BOOL WINAPI CRYPT_FormatKeyUsage(DWORD dwCertEncodingType,
if (!stringsLoaded) { - for (i = 0; - i < sizeof(keyUsageByte0Map) / sizeof(keyUsageByte0Map[0]); - i++) - LoadStringW(hInstance, keyUsageByte0Map[i].id, - keyUsageByte0Map[i].str, MAX_STRING_RESOURCE_LEN); - for (i = 0; - i < sizeof(keyUsageByte1Map) / sizeof(keyUsageByte1Map[0]); - i++) - LoadStringW(hInstance, keyUsageByte1Map[i].id, - keyUsageByte1Map[i].str, MAX_STRING_RESOURCE_LEN); + for (i = 0; i < ARRAY_SIZE(keyUsageByte0Map); i++) + LoadStringW(hInstance, keyUsageByte0Map[i].id, keyUsageByte0Map[i].str, MAX_STRING_RESOURCE_LEN); + for (i = 0; i < ARRAY_SIZE(keyUsageByte1Map); i++) + LoadStringW(hInstance, keyUsageByte1Map[i].id, keyUsageByte1Map[i].str, MAX_STRING_RESOURCE_LEN); stringsLoaded = TRUE; } - CRYPT_FormatBits(bits->pbData[0], keyUsageByte0Map, - sizeof(keyUsageByte0Map) / sizeof(keyUsageByte0Map[0]), - NULL, &bitStringLen, &first); + CRYPT_FormatBits(bits->pbData[0], keyUsageByte0Map, ARRAY_SIZE(keyUsageByte0Map), + NULL, &bitStringLen, &first); bytesNeeded += bitStringLen; if (bits->cbData == 2) { - CRYPT_FormatBits(bits->pbData[1], keyUsageByte1Map, - sizeof(keyUsageByte1Map) / sizeof(keyUsageByte1Map[0]), + CRYPT_FormatBits(bits->pbData[1], keyUsageByte1Map, ARRAY_SIZE(keyUsageByte1Map), NULL, &bitStringLen, &first); bytesNeeded += bitStringLen; } @@ -1000,15 +991,13 @@ static BOOL WINAPI CRYPT_FormatKeyUsage(DWORD dwCertEncodingType,
bitStringLen = bytesNeeded; first = TRUE; - CRYPT_FormatBits(bits->pbData[0], keyUsageByte0Map, - sizeof(keyUsageByte0Map) / sizeof(keyUsageByte0Map[0]), + CRYPT_FormatBits(bits->pbData[0], keyUsageByte0Map, ARRAY_SIZE(keyUsageByte0Map), str, &bitStringLen, &first); str += bitStringLen / sizeof(WCHAR) - 1; if (bits->cbData == 2) { bitStringLen = bytesNeeded; - CRYPT_FormatBits(bits->pbData[1], keyUsageByte1Map, - sizeof(keyUsageByte1Map) / sizeof(keyUsageByte1Map[0]), + CRYPT_FormatBits(bits->pbData[1], keyUsageByte1Map, ARRAY_SIZE(keyUsageByte1Map), str, &bitStringLen, &first); str += bitStringLen / sizeof(WCHAR) - 1; } @@ -1070,15 +1059,10 @@ static BOOL WINAPI CRYPT_FormatBasicConstraints2(DWORD dwCertEncodingType,
if (!stringsLoaded) { - LoadStringW(hInstance, IDS_SUBJECT_TYPE, subjectTypeHeader, - sizeof(subjectTypeHeader) / sizeof(subjectTypeHeader[0])); - LoadStringW(hInstance, IDS_SUBJECT_TYPE_CA, subjectTypeCA, - sizeof(subjectTypeCA) / sizeof(subjectTypeCA[0])); - LoadStringW(hInstance, IDS_SUBJECT_TYPE_END_CERT, - subjectTypeEndCert, - sizeof(subjectTypeEndCert) / sizeof(subjectTypeEndCert[0])); - LoadStringW(hInstance, IDS_PATH_LENGTH, pathLengthHeader, - sizeof(pathLengthHeader) / sizeof(pathLengthHeader[0])); + LoadStringW(hInstance, IDS_SUBJECT_TYPE, subjectTypeHeader, ARRAY_SIZE(subjectTypeHeader)); + LoadStringW(hInstance, IDS_SUBJECT_TYPE_CA, subjectTypeCA, ARRAY_SIZE(subjectTypeCA)); + LoadStringW(hInstance, IDS_SUBJECT_TYPE_END_CERT, subjectTypeEndCert, ARRAY_SIZE(subjectTypeEndCert)); + LoadStringW(hInstance, IDS_PATH_LENGTH, pathLengthHeader, ARRAY_SIZE(pathLengthHeader)); stringsLoaded = TRUE; } bytesNeeded += strlenW(subjectTypeHeader) * sizeof(WCHAR); @@ -1092,8 +1076,7 @@ static BOOL WINAPI CRYPT_FormatBasicConstraints2(DWORD dwCertEncodingType, if (info->fPathLenConstraint) sprintfW(pathLength, pathFmt, info->dwPathLenConstraint); else - LoadStringW(hInstance, IDS_PATH_LENGTH_NONE, pathLength, - sizeof(pathLength) / sizeof(pathLength[0])); + LoadStringW(hInstance, IDS_PATH_LENGTH_NONE, pathLength, ARRAY_SIZE(pathLength)); bytesNeeded += strlenW(pathLength) * sizeof(WCHAR); if (!pbFormat) *pcbFormat = bytesNeeded; @@ -1130,7 +1113,7 @@ static BOOL CRYPT_FormatHexStringWithPrefix(const CRYPT_DATA_BLOB *blob, int id, DWORD bytesNeeded; BOOL ret;
- LoadStringW(hInstance, id, buf, sizeof(buf) / sizeof(buf[0])); + LoadStringW(hInstance, id, buf, ARRAY_SIZE(buf)); CRYPT_FormatHexString(X509_ASN_ENCODING, 0, 0, NULL, NULL, blob->pbData, blob->cbData, NULL, &bytesNeeded); bytesNeeded += strlenW(buf) * sizeof(WCHAR); @@ -1189,14 +1172,12 @@ static BOOL CRYPT_FormatAltNameEntry(DWORD dwFormatStrType, DWORD indentLevel, switch (entry->dwAltNameChoice) { case CERT_ALT_NAME_RFC822_NAME: - LoadStringW(hInstance, IDS_ALT_NAME_RFC822_NAME, buf, - sizeof(buf) / sizeof(buf[0])); + LoadStringW(hInstance, IDS_ALT_NAME_RFC822_NAME, buf, ARRAY_SIZE(buf)); bytesNeeded += strlenW(entry->u.pwszRfc822Name) * sizeof(WCHAR); ret = TRUE; break; case CERT_ALT_NAME_DNS_NAME: - LoadStringW(hInstance, IDS_ALT_NAME_DNS_NAME, buf, - sizeof(buf) / sizeof(buf[0])); + LoadStringW(hInstance, IDS_ALT_NAME_DNS_NAME, buf, ARRAY_SIZE(buf)); bytesNeeded += strlenW(entry->u.pwszDNSName) * sizeof(WCHAR); ret = TRUE; break; @@ -1208,8 +1189,7 @@ static BOOL CRYPT_FormatAltNameEntry(DWORD dwFormatStrType, DWORD indentLevel, strType |= CERT_NAME_STR_CRLF_FLAG; directoryNameLen = cert_name_to_str_with_indent(X509_ASN_ENCODING, indentLevel + 1, &entry->u.DirectoryName, strType, NULL, 0); - LoadStringW(hInstance, IDS_ALT_NAME_DIRECTORY_NAME, buf, - sizeof(buf) / sizeof(buf[0])); + LoadStringW(hInstance, IDS_ALT_NAME_DIRECTORY_NAME, buf, ARRAY_SIZE(buf)); bytesNeeded += (directoryNameLen - 1) * sizeof(WCHAR); if (dwFormatStrType & CRYPT_FORMAT_STR_MULTI_LINE) bytesNeeded += strlenW(colonCrlf) * sizeof(WCHAR); @@ -1219,8 +1199,7 @@ static BOOL CRYPT_FormatAltNameEntry(DWORD dwFormatStrType, DWORD indentLevel, break; } case CERT_ALT_NAME_URL: - LoadStringW(hInstance, IDS_ALT_NAME_URL, buf, - sizeof(buf) / sizeof(buf[0])); + LoadStringW(hInstance, IDS_ALT_NAME_URL, buf, ARRAY_SIZE(buf)); bytesNeeded += strlenW(entry->u.pwszURL) * sizeof(WCHAR); ret = TRUE; break; @@ -1232,14 +1211,12 @@ static BOOL CRYPT_FormatAltNameEntry(DWORD dwFormatStrType, DWORD indentLevel, static const WCHAR ipAddrFmt[] = { '%','d','.','%','d','.','%','d', '.','%','d',0 };
- LoadStringW(hInstance, IDS_ALT_NAME_IP_ADDRESS, buf, - sizeof(buf) / sizeof(buf[0])); + LoadStringW(hInstance, IDS_ALT_NAME_IP_ADDRESS, buf, ARRAY_SIZE(buf)); if (entry->u.IPAddress.cbData == 8) { if (dwFormatStrType & CRYPT_FORMAT_STR_MULTI_LINE) { - LoadStringW(hInstance, IDS_ALT_NAME_MASK, mask, - sizeof(mask) / sizeof(mask[0])); + LoadStringW(hInstance, IDS_ALT_NAME_MASK, mask, ARRAY_SIZE(mask)); bytesNeeded += strlenW(mask) * sizeof(WCHAR); sprintfW(ipAddrBuf, ipAddrFmt, entry->u.IPAddress.pbData[0], @@ -1448,7 +1425,7 @@ static BOOL CRYPT_FormatCertIssuer(DWORD dwFormatStrType, LPCWSTR sep; BOOL ret;
- LoadStringW(hInstance, IDS_CERT_ISSUER, buf, sizeof(buf) / sizeof(buf[0])); + LoadStringW(hInstance, IDS_CERT_ISSUER, buf, ARRAY_SIZE(buf)); ret = CRYPT_FormatAltNameInfo(dwFormatStrType, 1, issuer, NULL, &bytesNeeded); bytesNeeded += strlenW(buf) * sizeof(WCHAR); @@ -1652,8 +1629,7 @@ static BOOL WINAPI CRYPT_FormatAuthorityInfoAccess(DWORD dwCertEncodingType, { WCHAR infoNotAvailable[MAX_STRING_RESOURCE_LEN];
- LoadStringW(hInstance, IDS_INFO_NOT_AVAILABLE, infoNotAvailable, - sizeof(infoNotAvailable) / sizeof(infoNotAvailable[0])); + LoadStringW(hInstance, IDS_INFO_NOT_AVAILABLE, infoNotAvailable, ARRAY_SIZE(infoNotAvailable)); bytesNeeded += strlenW(infoNotAvailable) * sizeof(WCHAR); if (!pbFormat) *pcbFormat = bytesNeeded; @@ -1680,18 +1656,12 @@ static BOOL WINAPI CRYPT_FormatAuthorityInfoAccess(DWORD dwCertEncodingType,
if (!stringsLoaded) { - LoadStringW(hInstance, IDS_AIA, aia, - sizeof(aia) / sizeof(aia[0])); - LoadStringW(hInstance, IDS_ACCESS_METHOD, accessMethod, - sizeof(accessMethod) / sizeof(accessMethod[0])); - LoadStringW(hInstance, IDS_ACCESS_METHOD_OCSP, ocsp, - sizeof(ocsp) / sizeof(ocsp[0])); - LoadStringW(hInstance, IDS_ACCESS_METHOD_CA_ISSUERS, caIssuers, - sizeof(caIssuers) / sizeof(caIssuers[0])); - LoadStringW(hInstance, IDS_ACCESS_METHOD_UNKNOWN, unknown, - sizeof(unknown) / sizeof(unknown[0])); - LoadStringW(hInstance, IDS_ACCESS_LOCATION, accessLocation, - sizeof(accessLocation) / sizeof(accessLocation[0])); + LoadStringW(hInstance, IDS_AIA, aia, ARRAY_SIZE(aia)); + LoadStringW(hInstance, IDS_ACCESS_METHOD, accessMethod, ARRAY_SIZE(accessMethod)); + LoadStringW(hInstance, IDS_ACCESS_METHOD_OCSP, ocsp, ARRAY_SIZE(ocsp)); + LoadStringW(hInstance, IDS_ACCESS_METHOD_CA_ISSUERS, caIssuers, ARRAY_SIZE(caIssuers)); + LoadStringW(hInstance, IDS_ACCESS_METHOD_UNKNOWN, unknown, ARRAY_SIZE(unknown)); + LoadStringW(hInstance, IDS_ACCESS_LOCATION, accessLocation, ARRAY_SIZE(accessLocation)); stringsLoaded = TRUE; } if (dwFormatStrType & CRYPT_FORMAT_STR_MULTI_LINE) @@ -1879,7 +1849,7 @@ static BOOL CRYPT_FormatReason(DWORD dwFormatStrType,
if (!stringsLoaded) { - for (i = 0; i < sizeof(reason_map) / sizeof(reason_map[0]); i++) + for (i = 0; i < ARRAY_SIZE(reason_map); i++) LoadStringW(hInstance, reason_map[i].id, reason_map[i].reason, MAX_STRING_RESOURCE_LEN); stringsLoaded = TRUE; @@ -1887,7 +1857,7 @@ static BOOL CRYPT_FormatReason(DWORD dwFormatStrType, /* No need to check reasonFlags->cbData, we already know it's positive. * Ignore any other bytes, as they're for undefined bits. */ - for (i = 0; i < sizeof(reason_map) / sizeof(reason_map[0]); i++) + for (i = 0; i < ARRAY_SIZE(reason_map); i++) { if (reasonFlags->pbData[0] & reason_map[i].reasonBit) { @@ -1909,14 +1879,13 @@ static BOOL CRYPT_FormatReason(DWORD dwFormatStrType, else { *pcbStr = bytesNeeded; - for (i = 0; i < sizeof(reason_map) / sizeof(reason_map[0]); i++) + for (i = 0; i < ARRAY_SIZE(reason_map); i++) { if (reasonFlags->pbData[0] & reason_map[i].reasonBit) { strcpyW(str, reason_map[i].reason); str += strlenW(reason_map[i].reason); - if (i < sizeof(reason_map) / sizeof(reason_map[0]) - 1 && - numReasons) + if (i < ARRAY_SIZE(reason_map) - 1 && numReasons) { strcpyW(str, sep); str += strlenW(sep); @@ -1963,18 +1932,12 @@ static BOOL WINAPI CRYPT_FormatCRLDistPoints(DWORD dwCertEncodingType,
if (!stringsLoaded) { - LoadStringW(hInstance, IDS_CRL_DIST_POINT, crlDistPoint, - sizeof(crlDistPoint) / sizeof(crlDistPoint[0])); - LoadStringW(hInstance, IDS_CRL_DIST_POINT_NAME, distPointName, - sizeof(distPointName) / sizeof(distPointName[0])); - LoadStringW(hInstance, IDS_CRL_DIST_POINT_FULL_NAME, fullName, - sizeof(fullName) / sizeof(fullName[0])); - LoadStringW(hInstance, IDS_CRL_DIST_POINT_RDN_NAME, rdnName, - sizeof(rdnName) / sizeof(rdnName[0])); - LoadStringW(hInstance, IDS_CRL_DIST_POINT_REASON, reason, - sizeof(reason) / sizeof(reason[0])); - LoadStringW(hInstance, IDS_CRL_DIST_POINT_ISSUER, issuer, - sizeof(issuer) / sizeof(issuer[0])); + LoadStringW(hInstance, IDS_CRL_DIST_POINT, crlDistPoint, ARRAY_SIZE(crlDistPoint)); + LoadStringW(hInstance, IDS_CRL_DIST_POINT_NAME, distPointName, ARRAY_SIZE(distPointName)); + LoadStringW(hInstance, IDS_CRL_DIST_POINT_FULL_NAME, fullName, ARRAY_SIZE(fullName)); + LoadStringW(hInstance, IDS_CRL_DIST_POINT_RDN_NAME, rdnName, ARRAY_SIZE(rdnName)); + LoadStringW(hInstance, IDS_CRL_DIST_POINT_REASON, reason, ARRAY_SIZE(reason)); + LoadStringW(hInstance, IDS_CRL_DIST_POINT_ISSUER, issuer, ARRAY_SIZE(issuer)); stringsLoaded = TRUE; } if (dwFormatStrType & CRYPT_FORMAT_STR_MULTI_LINE) @@ -2050,8 +2013,7 @@ static BOOL WINAPI CRYPT_FormatCRLDistPoints(DWORD dwCertEncodingType, { WCHAR infoNotAvailable[MAX_STRING_RESOURCE_LEN];
- LoadStringW(hInstance, IDS_INFO_NOT_AVAILABLE, infoNotAvailable, - sizeof(infoNotAvailable) / sizeof(infoNotAvailable[0])); + LoadStringW(hInstance, IDS_INFO_NOT_AVAILABLE, infoNotAvailable, ARRAY_SIZE(infoNotAvailable)); bytesNeeded += strlenW(infoNotAvailable) * sizeof(WCHAR); if (!pbFormat) *pcbFormat = bytesNeeded; @@ -2202,8 +2164,7 @@ static BOOL WINAPI CRYPT_FormatEnhancedKeyUsage(DWORD dwCertEncodingType, sepLen = strlenW(commaSpace) * sizeof(WCHAR); }
- LoadStringW(hInstance, IDS_USAGE_UNKNOWN, unknown, - sizeof(unknown) / sizeof(unknown[0])); + LoadStringW(hInstance, IDS_USAGE_UNKNOWN, unknown, ARRAY_SIZE(unknown)); for (i = 0; i < usage->cUsageIdentifier; i++) { PCCRYPT_OID_INFO info = CryptFindOIDInfo(CRYPT_OID_INFO_OID_KEY, @@ -2299,8 +2260,7 @@ static BOOL WINAPI CRYPT_FormatNetscapeCertType(DWORD dwCertEncodingType, WCHAR infoNotAvailable[MAX_STRING_RESOURCE_LEN]; DWORD bytesNeeded = sizeof(WCHAR);
- LoadStringW(hInstance, IDS_INFO_NOT_AVAILABLE, infoNotAvailable, - sizeof(infoNotAvailable) / sizeof(infoNotAvailable[0])); + LoadStringW(hInstance, IDS_INFO_NOT_AVAILABLE, infoNotAvailable, ARRAY_SIZE(infoNotAvailable)); if (!bits->cbData || bits->cbData > 1) { bytesNeeded += strlenW(infoNotAvailable) * sizeof(WCHAR); @@ -2329,15 +2289,13 @@ static BOOL WINAPI CRYPT_FormatNetscapeCertType(DWORD dwCertEncodingType,
if (!stringsLoaded) { - for (i = 0; i < sizeof(netscapeCertTypeMap) / - sizeof(netscapeCertTypeMap[0]); i++) + for (i = 0; i < ARRAY_SIZE(netscapeCertTypeMap); i++) LoadStringW(hInstance, netscapeCertTypeMap[i].id, netscapeCertTypeMap[i].str, MAX_STRING_RESOURCE_LEN); stringsLoaded = TRUE; } - CRYPT_FormatBits(bits->pbData[0], netscapeCertTypeMap, - sizeof(netscapeCertTypeMap) / sizeof(netscapeCertTypeMap[0]), - NULL, &bitStringLen, &first); + CRYPT_FormatBits(bits->pbData[0], netscapeCertTypeMap, ARRAY_SIZE(netscapeCertTypeMap), + NULL, &bitStringLen, &first); bytesNeeded += bitStringLen; bytesNeeded += 3 * sizeof(WCHAR); /* " (" + ")" */ CRYPT_FormatHexString(0, 0, 0, NULL, NULL, bits->pbData, @@ -2357,9 +2315,8 @@ static BOOL WINAPI CRYPT_FormatNetscapeCertType(DWORD dwCertEncodingType,
bitStringLen = bytesNeeded; first = TRUE; - CRYPT_FormatBits(bits->pbData[0], netscapeCertTypeMap, - sizeof(netscapeCertTypeMap) / sizeof(netscapeCertTypeMap[0]), - str, &bitStringLen, &first); + CRYPT_FormatBits(bits->pbData[0], netscapeCertTypeMap, ARRAY_SIZE(netscapeCertTypeMap), + str, &bitStringLen, &first); str += bitStringLen / sizeof(WCHAR) - 1; *str++ = ' '; *str++ = '('; @@ -2407,16 +2364,12 @@ static BOOL WINAPI CRYPT_FormatSpcFinancialCriteria(DWORD dwCertEncodingType,
if (!stringsLoaded) { - LoadStringW(hInstance, IDS_FINANCIAL_CRITERIA, financialCriteria, - sizeof(financialCriteria) / sizeof(financialCriteria[0])); - LoadStringW(hInstance, IDS_FINANCIAL_CRITERIA_AVAILABLE, available, - sizeof(available) / sizeof(available[0])); - LoadStringW(hInstance, IDS_FINANCIAL_CRITERIA_NOT_AVAILABLE, - notAvailable, sizeof(notAvailable) / sizeof(notAvailable[0])); - LoadStringW(hInstance, IDS_FINANCIAL_CRITERIA_MEETS_CRITERIA, - meetsCriteria, sizeof(meetsCriteria) / sizeof(meetsCriteria[0])); - LoadStringW(hInstance, IDS_YES, yes, sizeof(yes) / sizeof(yes[0])); - LoadStringW(hInstance, IDS_NO, no, sizeof(no) / sizeof(no[0])); + LoadStringW(hInstance, IDS_FINANCIAL_CRITERIA, financialCriteria, ARRAY_SIZE(financialCriteria)); + LoadStringW(hInstance, IDS_FINANCIAL_CRITERIA_AVAILABLE, available, ARRAY_SIZE(available)); + LoadStringW(hInstance, IDS_FINANCIAL_CRITERIA_NOT_AVAILABLE, notAvailable, ARRAY_SIZE(notAvailable)); + LoadStringW(hInstance, IDS_FINANCIAL_CRITERIA_MEETS_CRITERIA, meetsCriteria, ARRAY_SIZE(meetsCriteria)); + LoadStringW(hInstance, IDS_YES, yes, ARRAY_SIZE(yes)); + LoadStringW(hInstance, IDS_NO, no, ARRAY_SIZE(no)); stringsLoaded = TRUE; } if (dwFormatStrType & CRYPT_FORMAT_STR_MULTI_LINE) diff --git a/dlls/crypt32/oid.c b/dlls/crypt32/oid.c index 5a447d09ca..61b2cbc88e 100644 --- a/dlls/crypt32/oid.c +++ b/dlls/crypt32/oid.c @@ -69,7 +69,7 @@ static const WCHAR ADDRESSBOOK[] = {'A','D','D','R','E','S','S','B','O','O','K', static const WCHAR TRUSTEDPUBLISHER[] = {'T','r','u','s','t','e','d','P','u','b','l','i','s','h','e','r',0}; static const WCHAR DISALLOWED[] = {'D','i','s','a','l','l','o','w','e','d',0}; static const LPCWSTR LocalizedKeys[] = {ROOT,MY,CA,ADDRESSBOOK,TRUSTEDPUBLISHER,DISALLOWED}; -static WCHAR LocalizedNames[sizeof(LocalizedKeys)/sizeof(LocalizedKeys[0])][256]; +static WCHAR LocalizedNames[ARRAY_SIZE(LocalizedKeys)][256];
static void free_function_sets(void) { @@ -1006,7 +1006,7 @@ static void oid_init_localizednames(void) { unsigned int i;
- for(i = 0; i < sizeof(LocalizedKeys)/sizeof(LPCWSTR); i++) + for(i = 0; i < ARRAY_SIZE(LocalizedKeys); i++) { LoadStringW(hInstance, IDS_LOCALIZEDNAME_ROOT+i, LocalizedNames[i], 256); } @@ -1019,7 +1019,7 @@ LPCWSTR WINAPI CryptFindLocalizedName(LPCWSTR pwszCryptName) { unsigned int i;
- for(i = 0; i < sizeof(LocalizedKeys)/sizeof(LPCWSTR); i++) + for(i = 0; i < ARRAY_SIZE(LocalizedKeys); i++) { if(!lstrcmpiW(LocalizedKeys[i], pwszCryptName)) { @@ -1399,8 +1399,7 @@ static void init_oid_info(void) DWORD i;
oid_init_localizednames(); - for (i = 0; i < sizeof(oidInfoConstructors) / - sizeof(oidInfoConstructors[0]); i++) + for (i = 0; i < ARRAY_SIZE(oidInfoConstructors); i++) { if (!IS_INTRESOURCE(oidInfoConstructors[i].pwszName)) { diff --git a/dlls/crypt32/regstore.c b/dlls/crypt32/regstore.c index 7678bab6aa..ce32a30f3b 100644 --- a/dlls/crypt32/regstore.c +++ b/dlls/crypt32/regstore.c @@ -71,7 +71,7 @@ static void CRYPT_RegReadSerializedFromReg(HKEY key, DWORD contextType, WCHAR subKeyName[MAX_PATH];
do { - DWORD size = sizeof(subKeyName) / sizeof(WCHAR); + DWORD size = ARRAY_SIZE(subKeyName);
rc = RegEnumKeyExW(key, index++, subKeyName, &size, NULL, NULL, NULL, NULL); @@ -163,7 +163,7 @@ static void CRYPT_RegReadFromReg(HKEY key, HCERTSTORE store) CERT_STORE_CRL_CONTEXT_FLAG, CERT_STORE_CTL_CONTEXT_FLAG }; DWORD i;
- for (i = 0; i < sizeof(subKeys) / sizeof(subKeys[0]); i++) + for (i = 0; i < ARRAY_SIZE(subKeys); i++) { HKEY hKey; LONG rc; @@ -255,7 +255,7 @@ static BOOL CRYPT_RegWriteToReg(WINE_REGSTOREINFO *store) BOOL ret = TRUE; DWORD i;
- for (i = 0; ret && i < sizeof(subKeys) / sizeof(subKeys[0]); i++) + for (i = 0; ret && i < ARRAY_SIZE(subKeys); i++) { HKEY key; LONG rc = RegCreateKeyExW(store->key, subKeys[i], 0, NULL, 0, @@ -561,8 +561,7 @@ WINECRYPT_CERTSTORE *CRYPT_RegOpenStore(HCRYPTPROV hCryptProv, DWORD dwFlags, CRYPT_RegReadFromReg(regInfo->key, regInfo->memStore); regInfo->dirty = FALSE; provInfo.cbSize = sizeof(provInfo); - provInfo.cStoreProvFunc = sizeof(regProvFuncs) / - sizeof(regProvFuncs[0]); + provInfo.cStoreProvFunc = ARRAY_SIZE(regProvFuncs); provInfo.rgpvStoreProvFunc = regProvFuncs; provInfo.hStoreProv = regInfo; store = CRYPT_ProvCreateStore(dwFlags, memStore, &provInfo); diff --git a/dlls/crypt32/rootstore.c b/dlls/crypt32/rootstore.c index 73d954f740..e7ed4e9bea 100644 --- a/dlls/crypt32/rootstore.c +++ b/dlls/crypt32/rootstore.c @@ -780,7 +780,7 @@ static void add_ms_root_certs(HCERTSTORE to)
TRACE("\n");
- for (i = 0; i < sizeof(msRootCerts) / sizeof(msRootCerts[0]); i++) + for (i = 0; i < ARRAY_SIZE(msRootCerts); i++) if (!CertAddEncodedCertificateToStore(to, X509_ASN_ENCODING, msRootCerts[i].pb, msRootCerts[i].cb, CERT_STORE_ADD_NEW, NULL)) WARN("adding root cert %d failed: %08x\n", i, GetLastError()); @@ -830,9 +830,7 @@ static void read_trusted_roots_from_known_locations(HCERTSTORE store) } #endif
- for (i = 0; !ret && - i < sizeof(CRYPT_knownLocations) / sizeof(CRYPT_knownLocations[0]); - i++) + for (i = 0; !ret && i < ARRAY_SIZE(CRYPT_knownLocations); i++) ret = import_certs_from_path(CRYPT_knownLocations[i], from, TRUE); check_and_store_certs(from, store); } diff --git a/dlls/crypt32/sip.c b/dlls/crypt32/sip.c index b0c4692c1f..f51bceb460 100644 --- a/dlls/crypt32/sip.c +++ b/dlls/crypt32/sip.c @@ -28,6 +28,7 @@ #include "winnls.h" #include "mssip.h" #include "winuser.h" +#include "crypt32_private.h"
#include "wine/debug.h" #include "wine/list.h" @@ -440,7 +441,7 @@ BOOL WINAPI CryptSIPRetrieveSubjectGuid WCHAR subKeyName[MAX_PATH];
do { - size = sizeof(subKeyName) / sizeof(subKeyName[0]); + size = ARRAY_SIZE(subKeyName); r = RegEnumKeyExW(key, index++, subKeyName, &size, NULL, NULL, NULL, NULL); if (r == ERROR_SUCCESS) @@ -478,7 +479,7 @@ BOOL WINAPI CryptSIPRetrieveSubjectGuid WCHAR subKeyName[MAX_PATH];
do { - size = sizeof(subKeyName) / sizeof(subKeyName[0]); + size = ARRAY_SIZE(subKeyName); r = RegEnumKeyExW(key, index++, subKeyName, &size, NULL, NULL, NULL, NULL); if (r == ERROR_SUCCESS) diff --git a/dlls/crypt32/store.c b/dlls/crypt32/store.c index bc4ebde5f6..2b8ea1d5d8 100644 --- a/dlls/crypt32/store.c +++ b/dlls/crypt32/store.c @@ -124,7 +124,7 @@ BOOL WINAPI I_CertUpdateStore(HCERTSTORE store1, HCERTSTORE store2, DWORD unk0, /* Poor-man's resync: empty first store, then add everything from second * store to it. */ - for (i = 0; i < sizeof(interfaces) / sizeof(interfaces[0]); i++) + for (i = 0; i < ARRAY_SIZE(interfaces); i++) { const void *context;
@@ -717,8 +717,7 @@ static WINECRYPT_CERTSTORE *CRYPT_MsgOpenStore(HCRYPTPROV hCryptProv, CERT_STORE_PROV_INFO provInfo = { 0 };
provInfo.cbSize = sizeof(provInfo); - provInfo.cStoreProvFunc = sizeof(msgProvFuncs) / - sizeof(msgProvFuncs[0]); + provInfo.cStoreProvFunc = ARRAY_SIZE(msgProvFuncs); provInfo.rgpvStoreProvFunc = msgProvFuncs; provInfo.hStoreProv = CryptMsgDuplicate(msg); store = CRYPT_ProvCreateStore(dwFlags, memStore, &provInfo); @@ -1338,7 +1337,7 @@ BOOL WINAPI CertEnumSystemStore(DWORD dwFlags, void *pvSystemStoreLocationPara, ret = TRUE; do { WCHAR name[MAX_PATH]; - DWORD size = sizeof(name) / sizeof(name[0]); + DWORD size = ARRAY_SIZE(name);
rc = RegEnumKeyExW(key, index++, name, &size, NULL, NULL, NULL, NULL); diff --git a/dlls/crypt32/str.c b/dlls/crypt32/str.c index 1daf29f8a0..4843c4f5f1 100644 --- a/dlls/crypt32/str.c +++ b/dlls/crypt32/str.c @@ -26,6 +26,7 @@ #include "wincrypt.h" #include "wine/debug.h" #include "wine/unicode.h" +#include "crypt32_private.h"
WINE_DEFAULT_DEBUG_CHANNEL(crypt);
@@ -775,7 +776,7 @@ struct KeynameKeeper static void CRYPT_InitializeKeynameKeeper(struct KeynameKeeper *keeper) { keeper->keyName = keeper->buf; - keeper->keyLen = sizeof(keeper->buf) / sizeof(keeper->buf[0]); + keeper->keyLen = ARRAY_SIZE(keeper->buf); }
static void CRYPT_FreeKeynameKeeper(struct KeynameKeeper *keeper) @@ -1326,8 +1327,7 @@ DWORD WINAPI CertGetNameStringW(PCCERT_CONTEXT pCertContext, DWORD dwType, { PCERT_RDN_ATTR nameAttr = NULL;
- for (i = 0; !nameAttr && i < sizeof(simpleAttributeOIDs) / - sizeof(simpleAttributeOIDs[0]); i++) + for (i = 0; !nameAttr && i < ARRAY_SIZE(simpleAttributeOIDs); i++) nameAttr = CertFindRDNAttr(simpleAttributeOIDs[i], nameInfo); if (nameAttr) ret = CertRDNValueToStrW(nameAttr->dwValueType,
From: Michael Müller michael@fds-team.de
Signed-off-by: Nikolay Sivov nsivov@codeweavers.com --- dlls/crypt32/decode.c | 45 +++++++++++++++++++++++++++++++++++++++++++ include/wincrypt.h | 15 +++++++++++++++ 2 files changed, 60 insertions(+)
diff --git a/dlls/crypt32/decode.c b/dlls/crypt32/decode.c index a61316016f..4f11d0d60f 100644 --- a/dlls/crypt32/decode.c +++ b/dlls/crypt32/decode.c @@ -5973,6 +5973,46 @@ BOOL CRYPT_AsnDecodePKCSEnvelopedData(const BYTE *pbEncoded, DWORD cbEncoded, return ret; }
+static BOOL WINAPI CRYPT_AsnDecodeObjectIdentifier(DWORD dwCertEncodingType, + LPCSTR lpszStructType, const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, + CRYPT_DECODE_PARA *pDecodePara, void *pvStructInfo, DWORD *pcbStructInfo) +{ + DWORD bytesNeeded = 0; + BOOL ret; + + __TRY + { + ret = CRYPT_AsnDecodeOidInternal(pbEncoded, cbEncoded, dwFlags & ~CRYPT_DECODE_ALLOC_FLAG, + NULL, &bytesNeeded, NULL); + if (ret) + { + if (!pvStructInfo) + *pcbStructInfo = bytesNeeded; + else if ((ret = CRYPT_DecodeEnsureSpace(dwFlags, pDecodePara, pvStructInfo, pcbStructInfo, bytesNeeded))) + { + LPSTR *info; + + if (dwFlags & CRYPT_DECODE_ALLOC_FLAG) + pvStructInfo = *(BYTE **)pvStructInfo; + + info = pvStructInfo; + *info = (void *)((BYTE *)info + sizeof(*info)); + ret = CRYPT_AsnDecodeOidInternal(pbEncoded, cbEncoded, dwFlags & ~CRYPT_DECODE_ALLOC_FLAG, + pvStructInfo, &bytesNeeded, NULL); + if (!ret && (dwFlags & CRYPT_DECODE_ALLOC_FLAG)) + CRYPT_FreeSpace(pDecodePara, info); + } + } + } + __EXCEPT_PAGE_FAULT + { + SetLastError(STATUS_ACCESS_VIOLATION); + ret = FALSE; + } + __ENDTRY + return ret; +} + static CryptDecodeObjectExFunc CRYPT_GetBuiltinDecoder(DWORD dwCertEncodingType, LPCSTR lpszStructType) { @@ -6112,6 +6152,9 @@ static CryptDecodeObjectExFunc CRYPT_GetBuiltinDecoder(DWORD dwCertEncodingType, case LOWORD(CMS_SIGNER_INFO): decodeFunc = CRYPT_AsnDecodeCMSSignerInfo; break; + case LOWORD(X509_OBJECT_IDENTIFIER): + decodeFunc = CRYPT_AsnDecodeObjectIdentifier; + break; } } else if (!strcmp(lpszStructType, szOID_CERT_EXTENSIONS)) @@ -6166,6 +6209,8 @@ static CryptDecodeObjectExFunc CRYPT_GetBuiltinDecoder(DWORD dwCertEncodingType, decodeFunc = CRYPT_AsnDecodePolicyQualifierUserNotice; else if (!strcmp(lpszStructType, szOID_CTL)) decodeFunc = CRYPT_AsnDecodeCTL; + else if (!strcmp(lpszStructType, szOID_ECC_PUBLIC_KEY)) + decodeFunc = CRYPT_AsnDecodeObjectIdentifier; return decodeFunc; }
diff --git a/include/wincrypt.h b/include/wincrypt.h index 6e71fb902e..a7c24e7831 100644 --- a/include/wincrypt.h +++ b/include/wincrypt.h @@ -288,6 +288,11 @@ typedef struct _CERT_KEY_ATTRIBUTES_INFO { PCERT_PRIVATE_KEY_VALIDITY pPrivateKeyUsagePeriod; } CERT_KEY_ATTRIBUTES_INFO, *PCERT_KEY_ATTRIBUTES_INFO;
+typedef struct _CERT_ECC_SIGNATURE { + CRYPT_UINT_BLOB r; + CRYPT_UINT_BLOB s; +} CERT_ECC_SIGNATURE, *PCERT_ECC_SIGNATURE; + /* byte 0 */ #define CERT_DIGITAL_SIGNATURE_KEY_USAGE 0x80 #define CERT_NON_REPUDIATION_KEY_USAGE 0x40 @@ -2878,6 +2883,12 @@ typedef struct _CTL_FIND_SUBJECT_PARA #define szOID_X957 "1.2.840.10040" #define szOID_X957_DSA "1.2.840.10040.4.1" #define szOID_X957_SHA1DSA "1.2.840.10040.4.3" +#define szOID_ECC_PUBLIC_KEY "1.2.840.10045.2.1" +#define szOID_ECC_CURVE_P256 "1.2.840.10045.3.1.7" +#define szOID_ECDSA_SPECIFIED "1.2.840.10045.4.3" +#define szOID_ECDSA_SHA256 "1.2.840.10045.4.3.2" +#define szOID_ECDSA_SHA384 "1.2.840.10045.4.3.3" +#define szOID_ECDSA_SHA512 "1.2.840.10045.4.3.4" #define szOID_DS "2.5" #define szOID_DSALG "2.5.8" #define szOID_DSALG_CRPT "2.5.8.1" @@ -2919,6 +2930,8 @@ typedef struct _CTL_FIND_SUBJECT_PARA #define szOID_OIWDIR_SIGN "1.3.14.7.2.3" #define szOID_OIWDIR_md2 "1.3.14.7.2.2.1" #define szOID_OIWDIR_md2RSA "1.3.14.7.2.3.1" +#define szOID_ECC_CURVE_P384 "1.3.132.0.34" +#define szOID_ECC_CURVE_P521 "1.3.132.0.35" #define szOID_INFOSEC "2.16.840.1.101.2.1" #define szOID_INFOSEC_sdnsSignature "2.16.840.1.101.2.1.1.1" #define szOID_INFOSEC_mosaicSignature "2.16.840.1.101.2.1.1.2" @@ -3223,6 +3236,7 @@ typedef struct _CTL_FIND_SUBJECT_PARA #define X509_PKIX_POLICY_QUALIFIER_USERNOTICE ((LPCSTR)46) #define X509_DH_PUBLICKEY X509_MULTI_BYTE_UINT #define X509_DH_PARAMETERS ((LPCSTR)47) +#define X509_ECC_SIGNATURE ((LPCSTR)47) #define PKCS_ATTRIBUTES ((LPCSTR)48) #define PKCS_SORTED_CTL ((LPCSTR)49) #define X942_DH_PARAMETERS ((LPCSTR)50) @@ -3240,6 +3254,7 @@ typedef struct _CTL_FIND_SUBJECT_PARA #define CMC_ADD_EXTENSIONS ((LPCSTR)62) #define CMC_ADD_ATTRIBUTES ((LPCSTR)63) #define X509_CERTIFICATE_TEMPLATE ((LPCSTR)64) +#define X509_OBJECT_IDENTIFIER ((LPCSTR)73) #define PKCS7_SIGNER_INFO ((LPCSTR)500) #define CMS_SIGNER_INFO ((LPCSTR)501)
Hi Nikolay,
Is there a reason why you didn't include tests in this series?
Alistair.
On 20/06/18 17:37, Nikolay Sivov wrote:
From: Michael Müller michael@fds-team.demailto:michael@fds-team.de
Signed-off-by: Nikolay Sivov nsivov@codeweavers.commailto:nsivov@codeweavers.com --- dlls/crypt32/decode.c | 45 +++++++++++++++++++++++++++++++++++++++++++ include/wincrypt.h | 15 +++++++++++++++ 2 files changed, 60 insertions(+)
diff --git a/dlls/crypt32/decode.c b/dlls/crypt32/decode.c index a61316016f..4f11d0d60f 100644 --- a/dlls/crypt32/decode.c +++ b/dlls/crypt32/decode.c @@ -5973,6 +5973,46 @@ BOOL CRYPT_AsnDecodePKCSEnvelopedData(const BYTE *pbEncoded, DWORD cbEncoded, return ret; }
+static BOOL WINAPI CRYPT_AsnDecodeObjectIdentifier(DWORD dwCertEncodingType, + LPCSTR lpszStructType, const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, + CRYPT_DECODE_PARA *pDecodePara, void *pvStructInfo, DWORD *pcbStructInfo) +{ + DWORD bytesNeeded = 0; + BOOL ret; + + __TRY + { + ret = CRYPT_AsnDecodeOidInternal(pbEncoded, cbEncoded, dwFlags & ~CRYPT_DECODE_ALLOC_FLAG, + NULL, &bytesNeeded, NULL); + if (ret) + { + if (!pvStructInfo) + *pcbStructInfo = bytesNeeded; + else if ((ret = CRYPT_DecodeEnsureSpace(dwFlags, pDecodePara, pvStructInfo, pcbStructInfo, bytesNeeded))) + { + LPSTR *info; + + if (dwFlags & CRYPT_DECODE_ALLOC_FLAG) + pvStructInfo = *(BYTE **)pvStructInfo; + + info = pvStructInfo; + *info = (void *)((BYTE *)info + sizeof(*info)); + ret = CRYPT_AsnDecodeOidInternal(pbEncoded, cbEncoded, dwFlags & ~CRYPT_DECODE_ALLOC_FLAG, + pvStructInfo, &bytesNeeded, NULL); + if (!ret && (dwFlags & CRYPT_DECODE_ALLOC_FLAG)) + CRYPT_FreeSpace(pDecodePara, info); + } + } + } + __EXCEPT_PAGE_FAULT + { + SetLastError(STATUS_ACCESS_VIOLATION); + ret = FALSE; + } + __ENDTRY + return ret; +} + static CryptDecodeObjectExFunc CRYPT_GetBuiltinDecoder(DWORD dwCertEncodingType, LPCSTR lpszStructType) { @@ -6112,6 +6152,9 @@ static CryptDecodeObjectExFunc CRYPT_GetBuiltinDecoder(DWORD dwCertEncodingType, case LOWORD(CMS_SIGNER_INFO): decodeFunc = CRYPT_AsnDecodeCMSSignerInfo; break; + case LOWORD(X509_OBJECT_IDENTIFIER): + decodeFunc = CRYPT_AsnDecodeObjectIdentifier; + break; } } else if (!strcmp(lpszStructType, szOID_CERT_EXTENSIONS)) @@ -6166,6 +6209,8 @@ static CryptDecodeObjectExFunc CRYPT_GetBuiltinDecoder(DWORD dwCertEncodingType, decodeFunc = CRYPT_AsnDecodePolicyQualifierUserNotice; else if (!strcmp(lpszStructType, szOID_CTL)) decodeFunc = CRYPT_AsnDecodeCTL; + else if (!strcmp(lpszStructType, szOID_ECC_PUBLIC_KEY)) + decodeFunc = CRYPT_AsnDecodeObjectIdentifier; return decodeFunc; }
diff --git a/include/wincrypt.h b/include/wincrypt.h index 6e71fb902e..a7c24e7831 100644 --- a/include/wincrypt.h +++ b/include/wincrypt.h @@ -288,6 +288,11 @@ typedef struct _CERT_KEY_ATTRIBUTES_INFO { PCERT_PRIVATE_KEY_VALIDITY pPrivateKeyUsagePeriod; } CERT_KEY_ATTRIBUTES_INFO, *PCERT_KEY_ATTRIBUTES_INFO;
+typedef struct _CERT_ECC_SIGNATURE { + CRYPT_UINT_BLOB r; + CRYPT_UINT_BLOB s; +} CERT_ECC_SIGNATURE, *PCERT_ECC_SIGNATURE; + /* byte 0 */ #define CERT_DIGITAL_SIGNATURE_KEY_USAGE 0x80 #define CERT_NON_REPUDIATION_KEY_USAGE 0x40 @@ -2878,6 +2883,12 @@ typedef struct _CTL_FIND_SUBJECT_PARA #define szOID_X957 "1.2.840.10040" #define szOID_X957_DSA "1.2.840.10040.4.1" #define szOID_X957_SHA1DSA "1.2.840.10040.4.3" +#define szOID_ECC_PUBLIC_KEY "1.2.840.10045.2.1" +#define szOID_ECC_CURVE_P256 "1.2.840.10045.3.1.7" +#define szOID_ECDSA_SPECIFIED "1.2.840.10045.4.3" +#define szOID_ECDSA_SHA256 "1.2.840.10045.4.3.2" +#define szOID_ECDSA_SHA384 "1.2.840.10045.4.3.3" +#define szOID_ECDSA_SHA512 "1.2.840.10045.4.3.4" #define szOID_DS "2.5" #define szOID_DSALG "2.5.8" #define szOID_DSALG_CRPT "2.5.8.1" @@ -2919,6 +2930,8 @@ typedef struct _CTL_FIND_SUBJECT_PARA #define szOID_OIWDIR_SIGN "1.3.14.7.2.3" #define szOID_OIWDIR_md2 "1.3.14.7.2.2.1" #define szOID_OIWDIR_md2RSA "1.3.14.7.2.3.1" +#define szOID_ECC_CURVE_P384 "1.3.132.0.34" +#define szOID_ECC_CURVE_P521 "1.3.132.0.35" #define szOID_INFOSEC "2.16.840.1.101.2.1" #define szOID_INFOSEC_sdnsSignature "2.16.840.1.101.2.1.1.1" #define szOID_INFOSEC_mosaicSignature "2.16.840.1.101.2.1.1.2" @@ -3223,6 +3236,7 @@ typedef struct _CTL_FIND_SUBJECT_PARA #define X509_PKIX_POLICY_QUALIFIER_USERNOTICE ((LPCSTR)46) #define X509_DH_PUBLICKEY X509_MULTI_BYTE_UINT #define X509_DH_PARAMETERS ((LPCSTR)47) +#define X509_ECC_SIGNATURE ((LPCSTR)47) #define PKCS_ATTRIBUTES ((LPCSTR)48) #define PKCS_SORTED_CTL ((LPCSTR)49) #define X942_DH_PARAMETERS ((LPCSTR)50) @@ -3240,6 +3254,7 @@ typedef struct _CTL_FIND_SUBJECT_PARA #define CMC_ADD_EXTENSIONS ((LPCSTR)62) #define CMC_ADD_ATTRIBUTES ((LPCSTR)63) #define X509_CERTIFICATE_TEMPLATE ((LPCSTR)64) +#define X509_OBJECT_IDENTIFIER ((LPCSTR)73) #define PKCS7_SIGNER_INFO ((LPCSTR)500) #define CMS_SIGNER_INFO ((LPCSTR)501)
On 06/20/2018 11:10 AM, Alistair Leslie-Hughes wrote:
Hi Nikolay,
Is there a reason why you didn't include tests in this series?
Patch doesn't mention how test blobs were generated, I'd like to find a reproducible way to recreated them.
Alistair.
On 20/06/18 17:37, Nikolay Sivov wrote:
From: Michael Müllermichael@fds-team.de
Signed-off-by: Nikolay Sivovnsivov@codeweavers.com
dlls/crypt32/decode.c | 45 +++++++++++++++++++++++++++++++++++++++++++ include/wincrypt.h | 15 +++++++++++++++ 2 files changed, 60 insertions(+)
diff --git a/dlls/crypt32/decode.c b/dlls/crypt32/decode.c index a61316016f..4f11d0d60f 100644 --- a/dlls/crypt32/decode.c +++ b/dlls/crypt32/decode.c @@ -5973,6 +5973,46 @@ BOOL CRYPT_AsnDecodePKCSEnvelopedData(const BYTE *pbEncoded, DWORD cbEncoded, return ret; }
+static BOOL WINAPI CRYPT_AsnDecodeObjectIdentifier(DWORD dwCertEncodingType,
- LPCSTR lpszStructType, const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags,
- CRYPT_DECODE_PARA *pDecodePara, void *pvStructInfo, DWORD *pcbStructInfo)
+{
- DWORD bytesNeeded = 0;
- BOOL ret;
- __TRY
- {
ret = CRYPT_AsnDecodeOidInternal(pbEncoded, cbEncoded, dwFlags & ~CRYPT_DECODE_ALLOC_FLAG,
NULL, &bytesNeeded, NULL);
if (ret)
{
if (!pvStructInfo)
*pcbStructInfo = bytesNeeded;
else if ((ret = CRYPT_DecodeEnsureSpace(dwFlags, pDecodePara, pvStructInfo, pcbStructInfo, bytesNeeded)))
{
LPSTR *info;
if (dwFlags & CRYPT_DECODE_ALLOC_FLAG)
pvStructInfo = *(BYTE **)pvStructInfo;
info = pvStructInfo;
*info = (void *)((BYTE *)info + sizeof(*info));
ret = CRYPT_AsnDecodeOidInternal(pbEncoded, cbEncoded, dwFlags & ~CRYPT_DECODE_ALLOC_FLAG,
pvStructInfo, &bytesNeeded, NULL);
if (!ret && (dwFlags & CRYPT_DECODE_ALLOC_FLAG))
CRYPT_FreeSpace(pDecodePara, info);
}
}
- }
- __EXCEPT_PAGE_FAULT
- {
SetLastError(STATUS_ACCESS_VIOLATION);
ret = FALSE;
- }
- __ENDTRY
- return ret;
+}
- static CryptDecodeObjectExFunc CRYPT_GetBuiltinDecoder(DWORD dwCertEncodingType, LPCSTR lpszStructType) {
@@ -6112,6 +6152,9 @@ static CryptDecodeObjectExFunc CRYPT_GetBuiltinDecoder(DWORD dwCertEncodingType, case LOWORD(CMS_SIGNER_INFO): decodeFunc = CRYPT_AsnDecodeCMSSignerInfo; break;
case LOWORD(X509_OBJECT_IDENTIFIER):
decodeFunc = CRYPT_AsnDecodeObjectIdentifier;
break; } } else if (!strcmp(lpszStructType, szOID_CERT_EXTENSIONS))
@@ -6166,6 +6209,8 @@ static CryptDecodeObjectExFunc CRYPT_GetBuiltinDecoder(DWORD dwCertEncodingType, decodeFunc = CRYPT_AsnDecodePolicyQualifierUserNotice; else if (!strcmp(lpszStructType, szOID_CTL)) decodeFunc = CRYPT_AsnDecodeCTL;
- else if (!strcmp(lpszStructType, szOID_ECC_PUBLIC_KEY))
}decodeFunc = CRYPT_AsnDecodeObjectIdentifier; return decodeFunc;
diff --git a/include/wincrypt.h b/include/wincrypt.h index 6e71fb902e..a7c24e7831 100644 --- a/include/wincrypt.h +++ b/include/wincrypt.h @@ -288,6 +288,11 @@ typedef struct _CERT_KEY_ATTRIBUTES_INFO { PCERT_PRIVATE_KEY_VALIDITY pPrivateKeyUsagePeriod; } CERT_KEY_ATTRIBUTES_INFO, *PCERT_KEY_ATTRIBUTES_INFO;
+typedef struct _CERT_ECC_SIGNATURE {
- CRYPT_UINT_BLOB r;
- CRYPT_UINT_BLOB s;
+} CERT_ECC_SIGNATURE, *PCERT_ECC_SIGNATURE;
- /* byte 0 */ #define CERT_DIGITAL_SIGNATURE_KEY_USAGE 0x80 #define CERT_NON_REPUDIATION_KEY_USAGE 0x40
@@ -2878,6 +2883,12 @@ typedef struct _CTL_FIND_SUBJECT_PARA #define szOID_X957 "1.2.840.10040" #define szOID_X957_DSA "1.2.840.10040.4.1" #define szOID_X957_SHA1DSA "1.2.840.10040.4.3" +#define szOID_ECC_PUBLIC_KEY "1.2.840.10045.2.1" +#define szOID_ECC_CURVE_P256 "1.2.840.10045.3.1.7" +#define szOID_ECDSA_SPECIFIED "1.2.840.10045.4.3" +#define szOID_ECDSA_SHA256 "1.2.840.10045.4.3.2" +#define szOID_ECDSA_SHA384 "1.2.840.10045.4.3.3" +#define szOID_ECDSA_SHA512 "1.2.840.10045.4.3.4" #define szOID_DS "2.5" #define szOID_DSALG "2.5.8" #define szOID_DSALG_CRPT "2.5.8.1" @@ -2919,6 +2930,8 @@ typedef struct _CTL_FIND_SUBJECT_PARA #define szOID_OIWDIR_SIGN "1.3.14.7.2.3" #define szOID_OIWDIR_md2 "1.3.14.7.2.2.1" #define szOID_OIWDIR_md2RSA "1.3.14.7.2.3.1" +#define szOID_ECC_CURVE_P384 "1.3.132.0.34" +#define szOID_ECC_CURVE_P521 "1.3.132.0.35" #define szOID_INFOSEC "2.16.840.1.101.2.1" #define szOID_INFOSEC_sdnsSignature "2.16.840.1.101.2.1.1.1" #define szOID_INFOSEC_mosaicSignature "2.16.840.1.101.2.1.1.2" @@ -3223,6 +3236,7 @@ typedef struct _CTL_FIND_SUBJECT_PARA #define X509_PKIX_POLICY_QUALIFIER_USERNOTICE ((LPCSTR)46) #define X509_DH_PUBLICKEY X509_MULTI_BYTE_UINT #define X509_DH_PARAMETERS ((LPCSTR)47) +#define X509_ECC_SIGNATURE ((LPCSTR)47) #define PKCS_ATTRIBUTES ((LPCSTR)48) #define PKCS_SORTED_CTL ((LPCSTR)49) #define X942_DH_PARAMETERS ((LPCSTR)50) @@ -3240,6 +3254,7 @@ typedef struct _CTL_FIND_SUBJECT_PARA #define CMC_ADD_EXTENSIONS ((LPCSTR)62) #define CMC_ADD_ATTRIBUTES ((LPCSTR)63) #define X509_CERTIFICATE_TEMPLATE ((LPCSTR)64) +#define X509_OBJECT_IDENTIFIER ((LPCSTR)73) #define PKCS7_SIGNER_INFO ((LPCSTR)500) #define CMS_SIGNER_INFO ((LPCSTR)501)
From: Michael Müller michael@fds-team.de
Signed-off-by: Nikolay Sivov nsivov@codeweavers.com --- dlls/crypt32/decode.c | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+)
diff --git a/dlls/crypt32/decode.c b/dlls/crypt32/decode.c index 4f11d0d60f..080feeca0a 100644 --- a/dlls/crypt32/decode.c +++ b/dlls/crypt32/decode.c @@ -6013,6 +6013,35 @@ static BOOL WINAPI CRYPT_AsnDecodeObjectIdentifier(DWORD dwCertEncodingType, return ret; }
+static BOOL WINAPI CRYPT_AsnDecodeEccSignature(DWORD dwCertEncodingType, + LPCSTR lpszStructType, const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, + CRYPT_DECODE_PARA *pDecodePara, void *pvStructInfo, DWORD *pcbStructInfo) +{ + BOOL ret; + struct AsnDecodeSequenceItem items[] = { + { ASN_INTEGER, offsetof(CERT_ECC_SIGNATURE, r), + CRYPT_AsnDecodeUnsignedIntegerInternal, sizeof(CRYPT_UINT_BLOB), FALSE, + TRUE, offsetof(CERT_ECC_SIGNATURE, r.pbData), 0 }, + { ASN_INTEGER, offsetof(CERT_ECC_SIGNATURE, s), + CRYPT_AsnDecodeUnsignedIntegerInternal, sizeof(CRYPT_UINT_BLOB), FALSE, + TRUE, offsetof(CERT_ECC_SIGNATURE, s.pbData), 0 }, + }; + + __TRY + { + ret = CRYPT_AsnDecodeSequence(items, ARRAY_SIZE(items), + pbEncoded, cbEncoded, dwFlags, pDecodePara, pvStructInfo, + pcbStructInfo, NULL, NULL); + } + __EXCEPT_PAGE_FAULT + { + SetLastError(STATUS_ACCESS_VIOLATION); + ret = FALSE; + } + __ENDTRY + return ret; +} + static CryptDecodeObjectExFunc CRYPT_GetBuiltinDecoder(DWORD dwCertEncodingType, LPCSTR lpszStructType) { @@ -6155,6 +6184,9 @@ static CryptDecodeObjectExFunc CRYPT_GetBuiltinDecoder(DWORD dwCertEncodingType, case LOWORD(X509_OBJECT_IDENTIFIER): decodeFunc = CRYPT_AsnDecodeObjectIdentifier; break; + case LOWORD(X509_ECC_SIGNATURE): + decodeFunc = CRYPT_AsnDecodeEccSignature; + break; } } else if (!strcmp(lpszStructType, szOID_CERT_EXTENSIONS))