crypt32(4/7): Add tests for CMSG_CMS_SIGNER_INFO_PARAM

Eric Pouech eric.pouech at orange.fr
Wed Aug 20 12:33:22 CDT 2008


Juan Lang a écrit :

> --Juan
> ------------------------------------------------------------------------
>
> From 7eaf8a741cc4ff2035491f36ba9b8f7c5d650458 Mon Sep 17 00:00:00 2001
> From: Juan Lang <juan.lang at gmail.com>
> Date: Mon, 18 Aug 2008 13:09:24 -0700
> Subject: [PATCH] Add tests for CMSG_CMS_SIGNER_INFO_PARAM
>
> ---
>  dlls/crypt32/tests/msg.c |  135 ++++++++++++++++++++++++++++++++++++++++++++++
>  1 files changed, 135 insertions(+), 0 deletions(-)
>
> diff --git a/dlls/crypt32/tests/msg.c b/dlls/crypt32/tests/msg.c
> index 86ce6b1..ce4affd 100644
> --- a/dlls/crypt32/tests/msg.c
> +++ b/dlls/crypt32/tests/msg.c
> @@ -2265,9 +2265,56 @@ static void compare_signer_info(const CMSG_SIGNER_INFO *got,
>      /* FIXME: check more things */
>  }
>  
> +static void compare_cms_signer_info(const CMSG_CMS_SIGNER_INFO *got,
> + const CMSG_CMS_SIGNER_INFO *expected)
> +{
> +    ok(got->dwVersion == expected->dwVersion, "Expected version %d, got %d\n",
> +     expected->dwVersion, got->dwVersion);
> +    ok(got->SignerId.dwIdChoice == expected->SignerId.dwIdChoice,
> +     "Expected id choice %d, got %d\n", expected->SignerId.dwIdChoice,
> +     got->SignerId.dwIdChoice);
> +    if (got->SignerId.dwIdChoice == expected->SignerId.dwIdChoice)
> +    {
> +        if (got->SignerId.dwIdChoice == CERT_ID_ISSUER_SERIAL_NUMBER)
> +        {
> +            ok(got->SignerId.IssuerSerialNumber.Issuer.cbData ==
> +             expected->SignerId.IssuerSerialNumber.Issuer.cbData,
> +             "Expected issuer size %d, got %d\n",
> +             expected->SignerId.IssuerSerialNumber.Issuer.cbData,
> +             got->SignerId.IssuerSerialNumber.Issuer.cbData);
> +            ok(!memcmp(got->SignerId.IssuerSerialNumber.Issuer.pbData,
> +             got->SignerId.IssuerSerialNumber.Issuer.pbData,
shouldn't it be expected->SignerId.IssuerSerialNumber.Issuer.pbData,
> +             got->SignerId.IssuerSerialNumber.Issuer.cbData),
> +             "Unexpected issuer\n");
> +            ok(got->SignerId.IssuerSerialNumber.SerialNumber.cbData ==
> +             expected->SignerId.IssuerSerialNumber.SerialNumber.cbData,
> +             "Expected serial number size %d, got %d\n",
> +             expected->SignerId.IssuerSerialNumber.SerialNumber.cbData,
> +             got->SignerId.IssuerSerialNumber.SerialNumber.cbData);
> +            ok(!memcmp(got->SignerId.IssuerSerialNumber.SerialNumber.pbData,
> +             got->SignerId.IssuerSerialNumber.SerialNumber.pbData,
ditto ?
> +             got->SignerId.IssuerSerialNumber.SerialNumber.cbData),
> +             "Unexpected serial number\n");
> +        }
> +        else
> +        {
> +            ok(got->SignerId.KeyId.cbData == expected->SignerId.KeyId.cbData,
> +             "expected key id size %d, got %d\n",
> +             expected->SignerId.KeyId.cbData, got->SignerId.KeyId.cbData);
> +            ok(!memcmp(expected->SignerId.KeyId.pbData,
> +             got->SignerId.KeyId.pbData, got->SignerId.KeyId.cbData),
> +             "unexpected key id\n");
> +        }
> +    }
> +    /* FIXME: check more things */
> +}
> +
>  static const BYTE signedWithCertAndCrlComputedHash[] = {
>  0x08,0xd6,0xc0,0x5a,0x21,0x51,0x2a,0x79,0xa1,0xdf,0xeb,0x9d,0x2a,0x8f,0x26,
>  0x2f };
> +static BYTE keyIdIssuer[] = {
> +0x30,0x13,0x31,0x11,0x30,0x0f,0x06,0x0a,0x2b,0x06,0x01,0x04,0x01,0x82,0x37,
> +0x0a,0x07,0x01,0x04,0x01,0x01 };
>  
>  static void test_decode_msg_get_param(void)
>  {
> @@ -2354,6 +2401,32 @@ static void test_decode_msg_get_param(void)
>          compare_signer_info((CMSG_SIGNER_INFO *)buf, &signer);
>          CryptMemFree(buf);
>      }
> +    /* Getting the CMS signer info of a PKCS7 message is possible. */
> +    size = 0;
> +    ret = CryptMsgGetParam(msg, CMSG_CMS_SIGNER_INFO_PARAM, 0, NULL, &size);
> +    todo_wine
> +    ok(ret, "CryptMsgGetParam failed: %08x\n", GetLastError());
> +    if (ret)
> +        buf = CryptMemAlloc(size);
> +    else
> +        buf = NULL;
> +    if (buf)
> +    {
> +        CMSG_CMS_SIGNER_INFO signer = { 0 };
> +
> +        signer.dwVersion = 1;
> +        signer.SignerId.dwIdChoice = CERT_ID_ISSUER_SERIAL_NUMBER;
> +        signer.SignerId.IssuerSerialNumber.Issuer.cbData =
> +         sizeof(encodedCommonName);
> +        signer.SignerId.IssuerSerialNumber.Issuer.pbData = encodedCommonName;
> +        signer.SignerId.IssuerSerialNumber.SerialNumber.cbData =
> +         sizeof(serialNum);
> +        signer.SignerId.IssuerSerialNumber.SerialNumber.pbData = serialNum;
> +        signer.HashAlgorithm.pszObjId = oid_rsa_md5;
> +        CryptMsgGetParam(msg, CMSG_CMS_SIGNER_INFO_PARAM, 0, buf, &size);
> +        compare_cms_signer_info((CMSG_CMS_SIGNER_INFO *)buf, &signer);
> +        CryptMemFree(buf);
> +    }
>      /* index is ignored when getting signer count */
>      size = sizeof(value);
>      ret = CryptMsgGetParam(msg, CMSG_SIGNER_COUNT_PARAM, 1, &value, &size);
> @@ -2383,6 +2456,68 @@ static void test_decode_msg_get_param(void)
>       CMSG_COMPUTED_HASH_PARAM, signedWithCertAndCrlComputedHash,
>       sizeof(signedWithCertAndCrlComputedHash));
>      CryptMsgClose(msg);
> +
> +    msg = CryptMsgOpenToDecode(PKCS_7_ASN_ENCODING, 0, 0, 0, NULL, NULL);
> +    ret = CryptMsgUpdate(msg, signedKeyIdEmptyContent,
> +     sizeof(signedKeyIdEmptyContent), TRUE);
> +    ok(ret, "CryptMsgUpdate failed: %08x\n", GetLastError());
> +    size = sizeof(value);
> +    ret = CryptMsgGetParam(msg, CMSG_SIGNER_COUNT_PARAM, 0, &value, &size);
> +    ok(ret, "CryptMsgGetParam failed: %08x\n", GetLastError());
> +    ok(value == 1, "Expected 1 signer, got %d\n", value);
> +    /* Getting the regular (non-CMS) signer info from a CMS message is also
> +     * possible..
> +     */
> +    size = 0;
> +    ret = CryptMsgGetParam(msg, CMSG_SIGNER_INFO_PARAM, 0, NULL, &size);
> +    todo_wine
> +    ok(ret, "CryptMsgGetParam failed: %08x\n", GetLastError());
> +    if (ret)
> +        buf = CryptMemAlloc(size);
> +    else
> +        buf = NULL;
> +    if (buf)
> +    {
> +        CMSG_SIGNER_INFO signer;
> +        BYTE zero = 0;
> +
> +        /* and here's the little oddity:  for a CMS message using the key id
> +         * variant of a SignerId, retrieving the CMSG_SIGNER_INFO param yields
> +         * a signer with a zero (not empty) serial number, and whose issuer is
> +         * an RDN with OID szOID_KEYID_RDN, value type CERT_RDN_OCTET_STRING,
> +         * and value of the key id.
> +         */
> +        signer.dwVersion = CMSG_SIGNED_DATA_V3;
> +        signer.Issuer.cbData = sizeof(keyIdIssuer);
> +        signer.Issuer.pbData = keyIdIssuer;
> +        signer.SerialNumber.cbData = 1;
> +        signer.SerialNumber.pbData = &zero;
> +        CryptMsgGetParam(msg, CMSG_SIGNER_INFO_PARAM, 0, buf, &size);
> +        compare_signer_info((CMSG_SIGNER_INFO *)buf, &signer);
> +        CryptMemFree(buf);
> +    }
> +    size = 0;
> +    ret = CryptMsgGetParam(msg, CMSG_CMS_SIGNER_INFO_PARAM, 0, NULL, &size);
> +    todo_wine
> +    ok(ret, "CryptMsgGetParam failed: %08x\n", GetLastError());
> +    if (ret)
> +        buf = CryptMemAlloc(size);
> +    else
> +        buf = NULL;
> +    if (buf)
> +    {
> +        CMSG_CMS_SIGNER_INFO signer = { 0 };
> +
> +        signer.dwVersion = CMSG_SIGNED_DATA_V3;
> +        signer.SignerId.dwIdChoice = CERT_ID_KEY_IDENTIFIER;
> +        signer.SignerId.KeyId.cbData = sizeof(serialNum);
> +        signer.SignerId.KeyId.pbData = (BYTE *)serialNum;
> +        signer.HashAlgorithm.pszObjId = oid_rsa_md5;
> +        CryptMsgGetParam(msg, CMSG_CMS_SIGNER_INFO_PARAM, 0, buf, &size);
> +        compare_cms_signer_info((CMSG_CMS_SIGNER_INFO *)buf, &signer);
> +        CryptMemFree(buf);
> +    }
> +    CryptMsgClose(msg);
>  }
>  
>  static void test_decode_msg(void)
> -- 1.5.2.2
> ------------------------------------------------------------------------
>
>

-- 1.5.2.2

------------------------------------------------------------------------




-- 
Eric Pouech
"The problem with designing something completely foolproof is to underestimate the ingenuity of a complete idiot." (Douglas Adams)





More information about the wine-patches mailing list