From 74b91cb25fed1b10d6655edc1f53a9b7fa4fa0b4 Mon Sep 17 00:00:00 2001 From: Juan Lang Date: Fri, 17 Oct 2008 15:31:12 -0700 Subject: [PATCH] wintrust: Implement WVTAsn1CatNameValueEncode. --- dlls/wintrust/asn.c | 24 ++++++++++++++++++++++-- dlls/wintrust/tests/asn.c | 4 ---- 2 files changed, 22 insertions(+), 6 deletions(-) diff --git a/dlls/wintrust/asn.c b/dlls/wintrust/asn.c index 9a1c1b822d5..b18539a823a 100644 --- a/dlls/wintrust/asn.c +++ b/dlls/wintrust/asn.c @@ -911,9 +911,29 @@ BOOL WINAPI WVTAsn1CatNameValueEncode(DWORD dwCertEncodingType, LPCSTR lpszStructType, const void *pvStructInfo, BYTE *pbEncoded, DWORD *pcbEncoded) { - FIXME("(0x%08x, %s, %p, %p, %p): stub\n", dwCertEncodingType, + BOOL ret = FALSE; + + TRACE("(0x%08x, %s, %p, %p, %p)\n", dwCertEncodingType, debugstr_a(lpszStructType), pvStructInfo, pbEncoded, pcbEncoded); - return FALSE; + + __TRY + { + const CAT_NAMEVALUE *value = (const CAT_NAMEVALUE *)pvStructInfo; + struct AsnEncodeSequenceItem items[] = { + { value->pwszTag, CRYPT_AsnEncodeBMPString, 0 }, + { &value->fdwFlags, CRYPT_AsnEncodeInt, 0 }, + { &value->Value, CRYPT_AsnEncodeOctets, 0 }, + }; + + ret = CRYPT_AsnEncodeSequence(X509_ASN_ENCODING, + items, sizeof(items) / sizeof(items[0]), pbEncoded, pcbEncoded); + } + __EXCEPT_PAGE_FAULT + { + SetLastError(STATUS_ACCESS_VIOLATION); + } + __ENDTRY + return ret; } /* Gets the number of length bytes from the given (leading) length byte */ diff --git a/dlls/wintrust/tests/asn.c b/dlls/wintrust/tests/asn.c index 4ef35ee8da4..cb0e2b0acb4 100644 --- a/dlls/wintrust/tests/asn.c +++ b/dlls/wintrust/tests/asn.c @@ -607,7 +607,6 @@ static void test_encodeCatNameValue(void) memset(&value, 0, sizeof(value)); ret = pCryptEncodeObjectEx(X509_ASN_ENCODING, CAT_NAMEVALUE_STRUCT, (LPBYTE)&value, CRYPT_ENCODE_ALLOC_FLAG, NULL, &buf, &size); - todo_wine ok(ret, "CryptEncodeObjectEx failed: %08x\n", GetLastError()); if (ret) { @@ -619,7 +618,6 @@ static void test_encodeCatNameValue(void) value.pwszTag = foo; ret = pCryptEncodeObjectEx(X509_ASN_ENCODING, CAT_NAMEVALUE_STRUCT, (LPBYTE)&value, CRYPT_ENCODE_ALLOC_FLAG, NULL, &buf, &size); - todo_wine ok(ret, "CryptEncodeObjectEx failed: %08x\n", GetLastError()); if (ret) { @@ -632,7 +630,6 @@ static void test_encodeCatNameValue(void) value.fdwFlags = 0xf00dd00d; ret = pCryptEncodeObjectEx(X509_ASN_ENCODING, CAT_NAMEVALUE_STRUCT, (LPBYTE)&value, CRYPT_ENCODE_ALLOC_FLAG, NULL, &buf, &size); - todo_wine ok(ret, "CryptEncodeObjectEx failed: %08x\n", GetLastError()); if (ret) { @@ -646,7 +643,6 @@ static void test_encodeCatNameValue(void) value.Value.pbData = aVal; ret = pCryptEncodeObjectEx(X509_ASN_ENCODING, CAT_NAMEVALUE_STRUCT, (LPBYTE)&value, CRYPT_ENCODE_ALLOC_FLAG, NULL, &buf, &size); - todo_wine ok(ret, "CryptEncodeObjectEx failed: %08x\n", GetLastError()); if (ret) {