crypt32(4/6): Test encoding a cert with a subject key identifier extension

Juan Lang juan.lang at gmail.com
Thu Aug 2 14:34:19 CDT 2007


--Juan
-------------- next part --------------
From 7a2b19b695d87bb9e72f5d3cce1314ca2643b45f Mon Sep 17 00:00:00 2001
From: Juan Lang <juanlang at juan.corp.google.com>
Date: Thu, 2 Aug 2007 12:23:14 -0700
Subject: [PATCH] Test encoding a cert with a subject key identifier extension
---
 dlls/crypt32/tests/encode.c |   33 ++++++++++++++++++++++++++++++---
 1 files changed, 30 insertions(+), 3 deletions(-)

diff --git a/dlls/crypt32/tests/encode.c b/dlls/crypt32/tests/encode.c
index 282cdb2..9a6e6a2 100644
--- a/dlls/crypt32/tests/encode.c
+++ b/dlls/crypt32/tests/encode.c
@@ -2736,6 +2736,16 @@ static const BYTE v1CertWithPubKeyNoNull
 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 v1CertWithSubjectKeyId[] = {
+0x30,0x7b,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,0x07,0x30,0x02,0x06,0x00,0x03,0x01,0x00,0xa3,0x17,0x30,0x15,0x30,
+0x13,0x06,0x03,0x55,0x1d,0x0e,0x04,0x0c,0x04,0x0a,0x4a,0x75,0x61,0x6e,0x20,
+0x4c,0x61,0x6e,0x67,0x00 };
 
 static const BYTE serialNum[] = { 0x01 };
 
@@ -2746,6 +2756,8 @@ static void test_encodeCertToBeSigned(DW
     DWORD size = 0;
     CERT_INFO info = { 0 };
     static char oid_rsa_rsa[] = szOID_RSA_RSA;
+    static char oid_subject_key_identifier[] = szOID_SUBJECT_KEY_IDENTIFIER;
+    CERT_EXTENSION ext;
 
     /* Test with NULL pvStructInfo */
     ret = CryptEncodeObjectEx(dwEncoding, X509_CERT_TO_BE_SIGNED, NULL,
@@ -2841,9 +2853,24 @@ static void test_encodeCertToBeSigned(DW
              "Got unexpected value\n");
         LocalFree(buf);
     }
-    /* for now, I let more interesting tests be done for each subcomponent,
-     * rather than retesting them all here.
-     */
+    /* Remove the public key, and add a subject key identifier extension */
+    info.SubjectPublicKeyInfo.Algorithm.pszObjId = NULL;
+    info.SubjectPublicKeyInfo.PublicKey.cbData = 0;
+    info.SubjectPublicKeyInfo.PublicKey.pbData = NULL;
+    ext.pszObjId = oid_subject_key_identifier;
+    ext.fCritical = FALSE;
+    ext.Value.cbData = sizeof(octetCommonNameValue);
+    ext.Value.pbData = (BYTE *)octetCommonNameValue;
+    info.cExtension = 1;
+    info.rgExtension = &ext;
+    ret = CryptEncodeObjectEx(dwEncoding, X509_CERT_TO_BE_SIGNED, &info,
+     CRYPT_ENCODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &size);
+    if (buf)
+    {
+        ok(size == sizeof(v1CertWithSubjectKeyId), "Wrong size %d\n", size);
+        ok(!memcmp(buf, v1CertWithSubjectKeyId, size), "Unexpected value\n");
+        LocalFree(buf);
+    }
 }
 
 static void test_decodeCertToBeSigned(DWORD dwEncoding)
-- 
1.4.1


More information about the wine-patches mailing list