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