crypt32: The KeyId member of an authority key identifier is an octet string, not an integer.
diff --git a/dlls/crypt32/decode.c b/dlls/crypt32/decode.c
index a16d89f..1fd2383 100644
--- a/dlls/crypt32/decode.c
+++ b/dlls/crypt32/decode.c
@@ -3106,43 +3106,6 @@
return ret;
}
-/* Like CRYPT_AsnDecodeIntegerInternal, but swaps the bytes */
-static BOOL CRYPT_AsnDecodeIntegerSwapBytes(const BYTE *pbEncoded,
- DWORD cbEncoded, DWORD dwFlags, void *pvStructInfo, DWORD *pcbStructInfo,
- DWORD *pcbDecoded)
-{
- BOOL ret;
-
- TRACE("(%p, %d, 0x%08x, %p, %d, %p)\n", pbEncoded, cbEncoded, dwFlags,
- pvStructInfo, *pcbStructInfo, pcbDecoded);
-
- /* Can't use the CRYPT_DECODE_NOCOPY_FLAG, because we modify the bytes in-
- * place.
- */
- ret = CRYPT_AsnDecodeIntegerInternal(pbEncoded, cbEncoded,
- dwFlags & ~CRYPT_DECODE_NOCOPY_FLAG, pvStructInfo, pcbStructInfo,
- pcbDecoded);
- if (ret && pvStructInfo)
- {
- CRYPT_DATA_BLOB *blob = pvStructInfo;
-
- if (blob->cbData)
- {
- DWORD i;
- BYTE temp;
-
- for (i = 0; i < blob->cbData / 2; i++)
- {
- temp = blob->pbData[i];
- blob->pbData[i] = blob->pbData[blob->cbData - i - 1];
- blob->pbData[blob->cbData - i - 1] = temp;
- }
- }
- }
- TRACE("returning %d (%08x)\n", ret, GetLastError());
- return ret;
-}
-
static BOOL WINAPI CRYPT_AsnDecodeAuthorityKeyId(DWORD dwCertEncodingType,
LPCSTR lpszStructType, const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags,
PCRYPT_DECODE_PARA pDecodePara, void *pvStructInfo, DWORD *pcbStructInfo)
@@ -3153,7 +3116,7 @@
{
struct AsnDecodeSequenceItem items[] = {
{ ASN_CONTEXT | 0, offsetof(CERT_AUTHORITY_KEY_ID_INFO, KeyId),
- CRYPT_AsnDecodeIntegerSwapBytes, sizeof(CRYPT_DATA_BLOB),
+ CRYPT_AsnDecodeOctetsInternal, sizeof(CRYPT_DATA_BLOB),
TRUE, TRUE, offsetof(CERT_AUTHORITY_KEY_ID_INFO, KeyId.pbData), 0 },
{ ASN_CONTEXT | ASN_CONSTRUCTOR| 1,
offsetof(CERT_AUTHORITY_KEY_ID_INFO, CertIssuer),
@@ -3188,7 +3151,7 @@
{
struct AsnDecodeSequenceItem items[] = {
{ ASN_CONTEXT | 0, offsetof(CERT_AUTHORITY_KEY_ID2_INFO, KeyId),
- CRYPT_AsnDecodeIntegerSwapBytes, sizeof(CRYPT_DATA_BLOB),
+ CRYPT_AsnDecodeOctetsInternal, sizeof(CRYPT_DATA_BLOB),
TRUE, TRUE, offsetof(CERT_AUTHORITY_KEY_ID2_INFO, KeyId.pbData), 0 },
{ ASN_CONTEXT | ASN_CONSTRUCTOR| 1,
offsetof(CERT_AUTHORITY_KEY_ID2_INFO, AuthorityCertIssuer),
diff --git a/dlls/crypt32/encode.c b/dlls/crypt32/encode.c
index 4d137ce..b7bbc83 100644
--- a/dlls/crypt32/encode.c
+++ b/dlls/crypt32/encode.c
@@ -2438,45 +2438,6 @@
return ret;
}
-static BOOL WINAPI CRYPT_AsnEncodeIntegerSwapBytes(DWORD dwCertEncodingType,
- LPCSTR lpszStructType, const void *pvStructInfo, DWORD dwFlags,
- PCRYPT_ENCODE_PARA pEncodePara, BYTE *pbEncoded, DWORD *pcbEncoded)
-{
- BOOL ret;
-
- __TRY
- {
- const CRYPT_DATA_BLOB *blob = pvStructInfo;
- CRYPT_DATA_BLOB newBlob = { blob->cbData, NULL };
-
- ret = TRUE;
- if (newBlob.cbData)
- {
- newBlob.pbData = CryptMemAlloc(newBlob.cbData);
- if (newBlob.pbData)
- {
- DWORD i;
-
- for (i = 0; i < newBlob.cbData; i++)
- newBlob.pbData[newBlob.cbData - i - 1] = blob->pbData[i];
- }
- else
- ret = FALSE;
- }
- if (ret)
- ret = CRYPT_AsnEncodeInteger(dwCertEncodingType, lpszStructType,
- &newBlob, dwFlags, pEncodePara, pbEncoded, pcbEncoded);
- CryptMemFree(newBlob.pbData);
- }
- __EXCEPT_PAGE_FAULT
- {
- SetLastError(STATUS_ACCESS_VIOLATION);
- ret = FALSE;
- }
- __ENDTRY
- return ret;
-}
-
static BOOL WINAPI CRYPT_AsnEncodeAuthorityKeyId(DWORD dwCertEncodingType,
LPCSTR lpszStructType, const void *pvStructInfo, DWORD dwFlags,
PCRYPT_ENCODE_PARA pEncodePara, BYTE *pbEncoded, DWORD *pcbEncoded)
@@ -2495,7 +2456,7 @@
{
swapped[cSwapped].tag = ASN_CONTEXT | 0;
swapped[cSwapped].pvStructInfo = &info->KeyId;
- swapped[cSwapped].encodeFunc = CRYPT_AsnEncodeIntegerSwapBytes;
+ swapped[cSwapped].encodeFunc = CRYPT_AsnEncodeOctets;
items[cItem].pvStructInfo = &swapped[cSwapped];
items[cItem].encodeFunc = CRYPT_AsnEncodeSwapTag;
cSwapped++;
@@ -2626,7 +2587,7 @@
{
swapped[cSwapped].tag = ASN_CONTEXT | 0;
swapped[cSwapped].pvStructInfo = &info->KeyId;
- swapped[cSwapped].encodeFunc = CRYPT_AsnEncodeIntegerSwapBytes;
+ swapped[cSwapped].encodeFunc = CRYPT_AsnEncodeOctets;
items[cItem].pvStructInfo = &swapped[cSwapped];
items[cItem].encodeFunc = CRYPT_AsnEncodeSwapTag;
cSwapped++;