Juan Lang : crypt32: Test encoding a cert with a public key.
Alexandre Julliard
julliard at wine.codeweavers.com
Fri Aug 3 08:04:37 CDT 2007
Module: wine
Branch: master
Commit: 0c5772dc0a72c8b3e20a60a8d3348c300e83552d
URL: http://source.winehq.org/git/wine.git/?a=commit;h=0c5772dc0a72c8b3e20a60a8d3348c300e83552d
Author: Juan Lang <juan.lang at gmail.com>
Date: Thu Aug 2 12:22:17 2007 -0700
crypt32: Test encoding a cert with a public key.
---
dlls/crypt32/tests/encode.c | 73 +++++++++++++++++++++++++++++++++++++++++++
1 files changed, 73 insertions(+), 0 deletions(-)
diff --git a/dlls/crypt32/tests/encode.c b/dlls/crypt32/tests/encode.c
index 75dd321..a9efd22 100644
--- a/dlls/crypt32/tests/encode.c
+++ b/dlls/crypt32/tests/encode.c
@@ -2713,6 +2713,29 @@ static const BYTE bigCert[] = { 0x30, 0x7a, 0x02, 0x01, 0x01, 0x30, 0x02, 0x06,
0x4c, 0x61, 0x6e, 0x67, 0x00, 0x30, 0x07, 0x30, 0x02, 0x06, 0x00, 0x03, 0x01,
0x00, 0xa3, 0x16, 0x30, 0x14, 0x30, 0x12, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01,
0x01, 0xff, 0x04, 0x08, 0x30, 0x06, 0x01, 0x01, 0xff, 0x02, 0x01, 0x01 };
+static const BYTE v1CertWithPubKey[] = {
+0x30,0x81,0x95,0x02,0x01,0x01,0x30,0x02,0x06,0x00,0x30,0x15,0x31,0x13,0x30,
+0x11,0x06,0x03,0x55,0x04,0x03,0x13,0x0a,0x4a,0x75,0x61,0x6e,0x20,0x4c,0x61,
+0x6e,0x67,0x00,0x30,0x22,0x18,0x0f,0x31,0x36,0x30,0x31,0x30,0x31,0x30,0x31,
+0x30,0x30,0x30,0x30,0x30,0x30,0x5a,0x18,0x0f,0x31,0x36,0x30,0x31,0x30,0x31,
+0x30,0x31,0x30,0x30,0x30,0x30,0x30,0x30,0x5a,0x30,0x15,0x31,0x13,0x30,0x11,
+0x06,0x03,0x55,0x04,0x03,0x13,0x0a,0x4a,0x75,0x61,0x6e,0x20,0x4c,0x61,0x6e,
+0x67,0x00,0x30,0x22,0x30,0x0d,0x06,0x09,0x2a,0x86,0x48,0x86,0xf7,0x0d,0x01,
+0x01,0x01,0x05,0x00,0x03,0x11,0x00,0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,
+0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0xa3,0x16,0x30,0x14,0x30,0x12,0x06,
+0x03,0x55,0x1d,0x13,0x01,0x01,0xff,0x04,0x08,0x30,0x06,0x01,0x01,0xff,0x02,
+0x01,0x01 };
+static const BYTE v1CertWithPubKeyNoNull[] = {
+0x30,0x81,0x93,0x02,0x01,0x01,0x30,0x02,0x06,0x00,0x30,0x15,0x31,0x13,0x30,
+0x11,0x06,0x03,0x55,0x04,0x03,0x13,0x0a,0x4a,0x75,0x61,0x6e,0x20,0x4c,0x61,
+0x6e,0x67,0x00,0x30,0x22,0x18,0x0f,0x31,0x36,0x30,0x31,0x30,0x31,0x30,0x31,
+0x30,0x30,0x30,0x30,0x30,0x30,0x5a,0x18,0x0f,0x31,0x36,0x30,0x31,0x30,0x31,
+0x30,0x31,0x30,0x30,0x30,0x30,0x30,0x30,0x5a,0x30,0x15,0x31,0x13,0x30,0x11,
+0x06,0x03,0x55,0x04,0x03,0x13,0x0a,0x4a,0x75,0x61,0x6e,0x20,0x4c,0x61,0x6e,
+0x67,0x00,0x30,0x20,0x30,0x0b,0x06,0x09,0x2a,0x86,0x48,0x86,0xf7,0x0d,0x01,
+0x01,0x01,0x03,0x11,0x00,0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,
+0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0xa3,0x16,0x30,0x14,0x30,0x12,0x06,0x03,0x55,
+0x1d,0x13,0x01,0x01,0xff,0x04,0x08,0x30,0x06,0x01,0x01,0xff,0x02,0x01,0x01 };
static const BYTE serialNum[] = { 0x01 };
@@ -2722,6 +2745,7 @@ static void test_encodeCertToBeSigned(DWORD dwEncoding)
BYTE *buf = NULL;
DWORD size = 0;
CERT_INFO info = { 0 };
+ static char oid_rsa_rsa[] = szOID_RSA_RSA;
/* Test with NULL pvStructInfo */
ret = CryptEncodeObjectEx(dwEncoding, X509_CERT_TO_BE_SIGNED, NULL,
@@ -2800,6 +2824,23 @@ static void test_encodeCertToBeSigned(DWORD dwEncoding)
ok(!memcmp(buf, bigCert, size), "Got unexpected value\n");
LocalFree(buf);
}
+ /* Add a public key */
+ info.SubjectPublicKeyInfo.Algorithm.pszObjId = oid_rsa_rsa;
+ info.SubjectPublicKeyInfo.PublicKey.cbData = sizeof(aKey);
+ info.SubjectPublicKeyInfo.PublicKey.pbData = (LPBYTE)aKey;
+ ret = CryptEncodeObjectEx(dwEncoding, X509_CERT_TO_BE_SIGNED, &info,
+ CRYPT_ENCODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &size);
+ if (buf)
+ {
+ ok(size == sizeof(v1CertWithPubKey) ||
+ size == sizeof(v1CertWithPubKeyNoNull), "Wrong size %d\n", size);
+ if (size == sizeof(v1CertWithPubKey))
+ ok(!memcmp(buf, v1CertWithPubKey, size), "Got unexpected value\n");
+ else if (size == sizeof(v1CertWithPubKeyNoNull))
+ ok(!memcmp(buf, v1CertWithPubKeyNoNull, size),
+ "Got unexpected value\n");
+ LocalFree(buf);
+ }
/* for now, I let more interesting tests be done for each subcomponent,
* rather than retesting them all here.
*/
@@ -2857,6 +2898,38 @@ static void test_decodeCertToBeSigned(DWORD dwEncoding)
info->Subject.cbData), "Unexpected subject\n");
LocalFree(buf);
}
+ /* Check again with pub key specified */
+ ret = CryptDecodeObjectEx(dwEncoding, X509_CERT_TO_BE_SIGNED,
+ v1CertWithPubKey, sizeof(v1CertWithPubKey), CRYPT_DECODE_ALLOC_FLAG, NULL,
+ (BYTE *)&buf, &size);
+ ok(ret, "CryptDecodeObjectEx failed: %08x\n", GetLastError());
+ if (buf)
+ {
+ CERT_INFO *info = (CERT_INFO *)buf;
+
+ ok(size >= sizeof(CERT_INFO), "Wrong size %d\n", size);
+ ok(info->SerialNumber.cbData == 1,
+ "Expected serial number size 1, got %d\n", info->SerialNumber.cbData);
+ ok(*info->SerialNumber.pbData == *serialNum,
+ "Expected serial number %d, got %d\n", *serialNum,
+ *info->SerialNumber.pbData);
+ ok(info->Issuer.cbData == sizeof(encodedCommonName),
+ "Wrong size %d\n", info->Issuer.cbData);
+ ok(!memcmp(info->Issuer.pbData, encodedCommonName, info->Issuer.cbData),
+ "Unexpected issuer\n");
+ ok(info->Subject.cbData == sizeof(encodedCommonName),
+ "Wrong size %d\n", info->Subject.cbData);
+ ok(!memcmp(info->Subject.pbData, encodedCommonName,
+ info->Subject.cbData), "Unexpected subject\n");
+ ok(!strcmp(info->SubjectPublicKeyInfo.Algorithm.pszObjId,
+ szOID_RSA_RSA), "Expected szOID_RSA_RSA, got %s\n",
+ info->SubjectPublicKeyInfo.Algorithm.pszObjId);
+ ok(info->SubjectPublicKeyInfo.PublicKey.cbData == sizeof(aKey),
+ "Wrong size %d\n", info->SubjectPublicKeyInfo.PublicKey.cbData);
+ ok(!memcmp(info->SubjectPublicKeyInfo.PublicKey.pbData, aKey,
+ sizeof(aKey)), "Unexpected public key\n");
+ LocalFree(buf);
+ }
}
static const BYTE hash[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0xa, 0xb, 0xc, 0xd,
More information about the wine-cvs
mailing list