crypt32: Move simplified message tests to their own file.
This commit is contained in:
parent
c1a69ee36d
commit
bca6cbcea7
|
@ -12,6 +12,7 @@ CTESTS = \
|
||||||
crl.c \
|
crl.c \
|
||||||
encode.c \
|
encode.c \
|
||||||
main.c \
|
main.c \
|
||||||
|
message.c \
|
||||||
msg.c \
|
msg.c \
|
||||||
oid.c \
|
oid.c \
|
||||||
protectdata.c \
|
protectdata.c \
|
||||||
|
|
|
@ -0,0 +1,244 @@
|
||||||
|
/*
|
||||||
|
* Unit test suite for crypt32.dll's Crypt*Message functions
|
||||||
|
*
|
||||||
|
* Copyright 2007 Juan Lang
|
||||||
|
*
|
||||||
|
* This library is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
* License as published by the Free Software Foundation; either
|
||||||
|
* version 2.1 of the License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This library is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* Lesser General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public
|
||||||
|
* License along with this library; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdarg.h>
|
||||||
|
#include <windef.h>
|
||||||
|
#include <winbase.h>
|
||||||
|
#include <winerror.h>
|
||||||
|
#include <wincrypt.h>
|
||||||
|
|
||||||
|
#include "wine/test.h"
|
||||||
|
|
||||||
|
static const BYTE dataEmptyBareContent[] = { 0x04,0x00 };
|
||||||
|
static const BYTE dataEmptyContent[] = {
|
||||||
|
0x30,0x0f,0x06,0x09,0x2a,0x86,0x48,0x86,0xf7,0x0d,0x01,0x07,0x01,0xa0,0x02,
|
||||||
|
0x04,0x00 };
|
||||||
|
static const BYTE signedEmptyBareContent[] = {
|
||||||
|
0x30,0x50,0x02,0x01,0x01,0x31,0x0e,0x30,0x0c,0x06,0x08,0x2a,0x86,0x48,0x86,
|
||||||
|
0xf7,0x0d,0x02,0x05,0x05,0x00,0x30,0x02,0x06,0x00,0x31,0x37,0x30,0x35,0x02,
|
||||||
|
0x01,0x01,0x30,0x1a,0x30,0x15,0x31,0x13,0x30,0x11,0x06,0x03,0x55,0x04,0x03,
|
||||||
|
0x13,0x0a,0x4a,0x75,0x61,0x6e,0x20,0x4c,0x61,0x6e,0x67,0x00,0x02,0x01,0x01,
|
||||||
|
0x30,0x0c,0x06,0x08,0x2a,0x86,0x48,0x86,0xf7,0x0d,0x02,0x05,0x05,0x00,0x30,
|
||||||
|
0x04,0x06,0x00,0x05,0x00,0x04,0x00 };
|
||||||
|
static const BYTE signedEmptyContent[] = {
|
||||||
|
0x30,0x5f,0x06,0x09,0x2a,0x86,0x48,0x86,0xf7,0x0d,0x01,0x07,0x02,0xa0,0x52,
|
||||||
|
0x30,0x50,0x02,0x01,0x01,0x31,0x0e,0x30,0x0c,0x06,0x08,0x2a,0x86,0x48,0x86,
|
||||||
|
0xf7,0x0d,0x02,0x05,0x05,0x00,0x30,0x02,0x06,0x00,0x31,0x37,0x30,0x35,0x02,
|
||||||
|
0x01,0x01,0x30,0x1a,0x30,0x15,0x31,0x13,0x30,0x11,0x06,0x03,0x55,0x04,0x03,
|
||||||
|
0x13,0x0a,0x4a,0x75,0x61,0x6e,0x20,0x4c,0x61,0x6e,0x67,0x00,0x02,0x01,0x01,
|
||||||
|
0x30,0x0c,0x06,0x08,0x2a,0x86,0x48,0x86,0xf7,0x0d,0x02,0x05,0x05,0x00,0x30,
|
||||||
|
0x04,0x06,0x00,0x05,0x00,0x04,0x00 };
|
||||||
|
|
||||||
|
static void test_msg_get_signer_count(void)
|
||||||
|
{
|
||||||
|
LONG count;
|
||||||
|
|
||||||
|
SetLastError(0xdeadbeef);
|
||||||
|
count = CryptGetMessageSignerCount(0, NULL, 0);
|
||||||
|
ok(count == -1, "Expected -1, got %d\n", count);
|
||||||
|
ok(GetLastError() == E_INVALIDARG, "Expected E_INVALIDARG, got %08x\n",
|
||||||
|
GetLastError());
|
||||||
|
SetLastError(0xdeadbeef);
|
||||||
|
count = CryptGetMessageSignerCount(PKCS_7_ASN_ENCODING, NULL, 0);
|
||||||
|
ok(count == -1, "Expected -1, got %d\n", count);
|
||||||
|
ok(GetLastError() == CRYPT_E_ASN1_EOD,
|
||||||
|
"Expected CRYPT_E_ASN1_EOD, got %08x\n", GetLastError());
|
||||||
|
SetLastError(0xdeadbeef);
|
||||||
|
count = CryptGetMessageSignerCount(PKCS_7_ASN_ENCODING,
|
||||||
|
dataEmptyBareContent, sizeof(dataEmptyBareContent));
|
||||||
|
ok(count == -1, "Expected -1, got %d\n", count);
|
||||||
|
ok(GetLastError() == CRYPT_E_ASN1_BADTAG,
|
||||||
|
"Expected CRYPT_E_ASN1_BADTAG, got %08x\n", GetLastError());
|
||||||
|
SetLastError(0xdeadbeef);
|
||||||
|
count = CryptGetMessageSignerCount(PKCS_7_ASN_ENCODING,
|
||||||
|
dataEmptyContent, sizeof(dataEmptyContent));
|
||||||
|
ok(count == -1, "Expected -1, got %d\n", count);
|
||||||
|
ok(GetLastError() == CRYPT_E_INVALID_MSG_TYPE,
|
||||||
|
"Expected CRYPT_E_INVALID_MSG_TYPE, got %08x\n", GetLastError());
|
||||||
|
SetLastError(0xdeadbeef);
|
||||||
|
count = CryptGetMessageSignerCount(PKCS_7_ASN_ENCODING,
|
||||||
|
signedEmptyBareContent, sizeof(signedEmptyBareContent));
|
||||||
|
ok(count == -1, "Expected -1, got %d\n", count);
|
||||||
|
ok(GetLastError() == CRYPT_E_ASN1_BADTAG,
|
||||||
|
"Expected CRYPT_E_ASN1_BADTAG, got %08x\n", GetLastError());
|
||||||
|
count = CryptGetMessageSignerCount(PKCS_7_ASN_ENCODING,
|
||||||
|
signedEmptyContent, sizeof(signedEmptyContent));
|
||||||
|
ok(count == 1, "Expected 1, got %d\n", count);
|
||||||
|
}
|
||||||
|
|
||||||
|
static const BYTE signedContent[] = {
|
||||||
|
0x30,0x81,0xb2,0x06,0x09,0x2a,0x86,0x48,0x86,0xf7,0x0d,0x01,0x07,0x02,0xa0,
|
||||||
|
0x81,0xa4,0x30,0x81,0xa1,0x02,0x01,0x01,0x31,0x0e,0x30,0x0c,0x06,0x08,0x2a,
|
||||||
|
0x86,0x48,0x86,0xf7,0x0d,0x02,0x05,0x05,0x00,0x30,0x13,0x06,0x09,0x2a,0x86,
|
||||||
|
0x48,0x86,0xf7,0x0d,0x01,0x07,0x01,0xa0,0x06,0x04,0x04,0x01,0x02,0x03,0x04,
|
||||||
|
0x31,0x77,0x30,0x75,0x02,0x01,0x01,0x30,0x1a,0x30,0x15,0x31,0x13,0x30,0x11,
|
||||||
|
0x06,0x03,0x55,0x04,0x03,0x13,0x0a,0x4a,0x75,0x61,0x6e,0x20,0x4c,0x61,0x6e,
|
||||||
|
0x67,0x00,0x02,0x01,0x01,0x30,0x0c,0x06,0x08,0x2a,0x86,0x48,0x86,0xf7,0x0d,
|
||||||
|
0x02,0x05,0x05,0x00,0x30,0x04,0x06,0x00,0x05,0x00,0x04,0x40,0x81,0xa6,0x70,
|
||||||
|
0xb3,0xef,0x59,0xd1,0x66,0xd1,0x9b,0xc0,0x9a,0xb6,0x9a,0x5e,0x6d,0x6f,0x6d,
|
||||||
|
0x0d,0x59,0xa9,0xaa,0x6e,0xe9,0x2c,0xa0,0x1e,0xee,0xc2,0x60,0xbc,0x59,0xbe,
|
||||||
|
0x3f,0x63,0x06,0x8d,0xc9,0x11,0x1d,0x23,0x64,0x92,0xef,0x2e,0xfc,0x57,0x29,
|
||||||
|
0xa4,0xaf,0xe0,0xee,0x93,0x19,0x39,0x51,0xe4,0x44,0xb8,0x0b,0x28,0xf4,0xa8,
|
||||||
|
0x0d };
|
||||||
|
static const BYTE signedWithCertEmptyContent[] = {
|
||||||
|
0x30,0x81,0xdf,0x06,0x09,0x2a,0x86,0x48,0x86,0xf7,0x0d,0x01,0x07,0x02,0xa0,
|
||||||
|
0x81,0xd1,0x30,0x81,0xce,0x02,0x01,0x01,0x31,0x0e,0x30,0x0c,0x06,0x08,0x2a,
|
||||||
|
0x86,0x48,0x86,0xf7,0x0d,0x02,0x05,0x05,0x00,0x30,0x02,0x06,0x00,0xa0,0x7c,
|
||||||
|
0x30,0x7a,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,0x16,0x30,0x14,0x30,
|
||||||
|
0x12,0x06,0x03,0x55,0x1d,0x13,0x01,0x01,0xff,0x04,0x08,0x30,0x06,0x01,0x01,
|
||||||
|
0xff,0x02,0x01,0x01,0x31,0x37,0x30,0x35,0x02,0x01,0x01,0x30,0x1a,0x30,0x15,
|
||||||
|
0x31,0x13,0x30,0x11,0x06,0x03,0x55,0x04,0x03,0x13,0x0a,0x4a,0x75,0x61,0x6e,
|
||||||
|
0x20,0x4c,0x61,0x6e,0x67,0x00,0x02,0x01,0x01,0x30,0x0c,0x06,0x08,0x2a,0x86,
|
||||||
|
0x48,0x86,0xf7,0x0d,0x02,0x05,0x05,0x00,0x30,0x04,0x06,0x00,0x05,0x00,0x04,
|
||||||
|
0x00 };
|
||||||
|
static const BYTE signedWithCertContent[] = {
|
||||||
|
0x30,0x82,0x01,0x32,0x06,0x09,0x2a,0x86,0x48,0x86,0xf7,0x0d,0x01,0x07,0x02,
|
||||||
|
0xa0,0x82,0x01,0x23,0x30,0x82,0x01,0x1f,0x02,0x01,0x01,0x31,0x0e,0x30,0x0c,
|
||||||
|
0x06,0x08,0x2a,0x86,0x48,0x86,0xf7,0x0d,0x02,0x05,0x05,0x00,0x30,0x13,0x06,
|
||||||
|
0x09,0x2a,0x86,0x48,0x86,0xf7,0x0d,0x01,0x07,0x01,0xa0,0x06,0x04,0x04,0x01,
|
||||||
|
0x02,0x03,0x04,0xa0,0x7c,0x30,0x7a,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,0x16,0x30,0x14,0x30,0x12,0x06,0x03,0x55,0x1d,0x13,0x01,0x01,0xff,0x04,
|
||||||
|
0x08,0x30,0x06,0x01,0x01,0xff,0x02,0x01,0x01,0x31,0x77,0x30,0x75,0x02,0x01,
|
||||||
|
0x01,0x30,0x1a,0x30,0x15,0x31,0x13,0x30,0x11,0x06,0x03,0x55,0x04,0x03,0x13,
|
||||||
|
0x0a,0x4a,0x75,0x61,0x6e,0x20,0x4c,0x61,0x6e,0x67,0x00,0x02,0x01,0x01,0x30,
|
||||||
|
0x0c,0x06,0x08,0x2a,0x86,0x48,0x86,0xf7,0x0d,0x02,0x05,0x05,0x00,0x30,0x04,
|
||||||
|
0x06,0x00,0x05,0x00,0x04,0x40,0x81,0xa6,0x70,0xb3,0xef,0x59,0xd1,0x66,0xd1,
|
||||||
|
0x9b,0xc0,0x9a,0xb6,0x9a,0x5e,0x6d,0x6f,0x6d,0x0d,0x59,0xa9,0xaa,0x6e,0xe9,
|
||||||
|
0x2c,0xa0,0x1e,0xee,0xc2,0x60,0xbc,0x59,0xbe,0x3f,0x63,0x06,0x8d,0xc9,0x11,
|
||||||
|
0x1d,0x23,0x64,0x92,0xef,0x2e,0xfc,0x57,0x29,0xa4,0xaf,0xe0,0xee,0x93,0x19,
|
||||||
|
0x39,0x51,0xe4,0x44,0xb8,0x0b,0x28,0xf4,0xa8,0x0d };
|
||||||
|
static const BYTE signedWithCertWithPubKeyContent[] = {
|
||||||
|
0x30,0x81,0xfc,0x06,0x09,0x2a,0x86,0x48,0x86,0xf7,0x0d,0x01,0x07,0x02,0xa0,
|
||||||
|
0x81,0xee,0x30,0x81,0xeb,0x02,0x01,0x01,0x31,0x0e,0x30,0x0c,0x06,0x08,0x2a,
|
||||||
|
0x86,0x48,0x86,0xf7,0x0d,0x02,0x05,0x05,0x00,0x30,0x02,0x06,0x00,0xa0,0x81,
|
||||||
|
0x98,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,0x31,0x37,0x30,0x35,0x02,0x01,0x01,0x30,0x1a,0x30,0x15,0x31,
|
||||||
|
0x13,0x30,0x11,0x06,0x03,0x55,0x04,0x03,0x13,0x0a,0x4a,0x75,0x61,0x6e,0x20,
|
||||||
|
0x4c,0x61,0x6e,0x67,0x00,0x02,0x01,0x01,0x30,0x0c,0x06,0x08,0x2a,0x86,0x48,
|
||||||
|
0x86,0xf7,0x0d,0x02,0x05,0x05,0x00,0x30,0x04,0x06,0x00,0x05,0x00,0x04,0x00 };
|
||||||
|
|
||||||
|
static void test_verify_message_signature(void)
|
||||||
|
{
|
||||||
|
BOOL ret;
|
||||||
|
CRYPT_VERIFY_MESSAGE_PARA para = { 0 };
|
||||||
|
PCCERT_CONTEXT cert;
|
||||||
|
DWORD cbDecoded;
|
||||||
|
|
||||||
|
SetLastError(0xdeadbeef);
|
||||||
|
ret = CryptVerifyMessageSignature(NULL, 0, NULL, 0, NULL, 0, NULL);
|
||||||
|
ok(!ret && GetLastError() == E_INVALIDARG,
|
||||||
|
"Expected E_INVALIDARG, got %08x\n", GetLastError());
|
||||||
|
SetLastError(0xdeadbeef);
|
||||||
|
ret = CryptVerifyMessageSignature(¶, 0, NULL, 0, NULL, 0, NULL);
|
||||||
|
ok(!ret && GetLastError() == E_INVALIDARG,
|
||||||
|
"Expected E_INVALIDARG, got %08x\n", GetLastError());
|
||||||
|
para.cbSize = sizeof(para);
|
||||||
|
SetLastError(0xdeadbeef);
|
||||||
|
ret = CryptVerifyMessageSignature(¶, 0, NULL, 0, NULL, 0, NULL);
|
||||||
|
ok(!ret && GetLastError() == E_INVALIDARG,
|
||||||
|
"Expected E_INVALIDARG, got %08x\n", GetLastError());
|
||||||
|
para.cbSize = 0;
|
||||||
|
para.dwMsgAndCertEncodingType = PKCS_7_ASN_ENCODING;
|
||||||
|
SetLastError(0xdeadbeef);
|
||||||
|
ret = CryptVerifyMessageSignature(¶, 0, NULL, 0, NULL, 0, NULL);
|
||||||
|
ok(!ret && GetLastError() == E_INVALIDARG,
|
||||||
|
"Expected E_INVALIDARG, got %08x\n", GetLastError());
|
||||||
|
para.cbSize = sizeof(para);
|
||||||
|
SetLastError(0xdeadbeef);
|
||||||
|
ret = CryptVerifyMessageSignature(¶, 0, NULL, 0, NULL, 0, NULL);
|
||||||
|
ok(!ret && GetLastError() == CRYPT_E_ASN1_EOD,
|
||||||
|
"Expected CRYPT_E_ASN1_EOD, got %08x\n", GetLastError());
|
||||||
|
/* Check whether cert is set on error */
|
||||||
|
cert = (PCCERT_CONTEXT)0xdeadbeef;
|
||||||
|
ret = CryptVerifyMessageSignature(¶, 0, NULL, 0, NULL, 0, &cert);
|
||||||
|
ok(cert == NULL, "Expected NULL cert\n");
|
||||||
|
/* Check whether cbDecoded is set on error */
|
||||||
|
cbDecoded = 0xdeadbeef;
|
||||||
|
ret = CryptVerifyMessageSignature(¶, 0, NULL, 0, NULL, &cbDecoded,
|
||||||
|
NULL);
|
||||||
|
ok(!cbDecoded, "Expected 0\n");
|
||||||
|
SetLastError(0xdeadbeef);
|
||||||
|
ret = CryptVerifyMessageSignature(¶, 0, dataEmptyBareContent,
|
||||||
|
sizeof(dataEmptyBareContent), NULL, 0, NULL);
|
||||||
|
ok(!ret && GetLastError() == CRYPT_E_ASN1_BADTAG,
|
||||||
|
"Expected CRYPT_E_ASN1_BADTAG, got %08x\n", GetLastError());
|
||||||
|
SetLastError(0xdeadbeef);
|
||||||
|
ret = CryptVerifyMessageSignature(¶, 0, dataEmptyContent,
|
||||||
|
sizeof(dataEmptyContent), NULL, 0, NULL);
|
||||||
|
ok(!ret && GetLastError() == CRYPT_E_UNEXPECTED_MSG_TYPE,
|
||||||
|
"Expected CRYPT_E_UNEXPECTED_MSG_TYPE, got %08x\n", GetLastError());
|
||||||
|
SetLastError(0xdeadbeef);
|
||||||
|
ret = CryptVerifyMessageSignature(¶, 0, signedEmptyBareContent,
|
||||||
|
sizeof(signedEmptyBareContent), NULL, 0, NULL);
|
||||||
|
ok(!ret && GetLastError() == CRYPT_E_ASN1_BADTAG,
|
||||||
|
"Expected CRYPT_E_ASN1_BADTAG, got %08x\n", GetLastError());
|
||||||
|
SetLastError(0xdeadbeef);
|
||||||
|
ret = CryptVerifyMessageSignature(¶, 0, signedEmptyContent,
|
||||||
|
sizeof(signedEmptyContent), NULL, 0, NULL);
|
||||||
|
ok(!ret && GetLastError() == CRYPT_E_NOT_FOUND,
|
||||||
|
"Expected CRYPT_E_NOT_FOUND, got %08x\n", GetLastError());
|
||||||
|
SetLastError(0xdeadbeef);
|
||||||
|
ret = CryptVerifyMessageSignature(¶, 0, signedContent,
|
||||||
|
sizeof(signedContent), NULL, 0, NULL);
|
||||||
|
ok(!ret && GetLastError() == CRYPT_E_NOT_FOUND,
|
||||||
|
"Expected CRYPT_E_NOT_FOUND, got %08x\n", GetLastError());
|
||||||
|
/* FIXME: Windows fails with CRYPT_E_NOT_FOUND for these messages, but
|
||||||
|
* their signer certs have invalid public keys that fail to decode. In
|
||||||
|
* Wine therefore the failure is an ASN error. Need some messages with
|
||||||
|
* valid public keys and invalid signatures to check against.
|
||||||
|
*/
|
||||||
|
ret = CryptVerifyMessageSignature(¶, 0, signedWithCertEmptyContent,
|
||||||
|
sizeof(signedWithCertEmptyContent), NULL, 0, NULL);
|
||||||
|
ok(!ret, "Expected failure\n");
|
||||||
|
ret = CryptVerifyMessageSignature(¶, 0, signedWithCertContent,
|
||||||
|
sizeof(signedWithCertContent), NULL, 0, NULL);
|
||||||
|
ok(!ret, "Expected failure\n");
|
||||||
|
ret = CryptVerifyMessageSignature(¶, 0, signedWithCertWithPubKeyContent,
|
||||||
|
sizeof(signedWithCertWithPubKeyContent), NULL, 0, NULL);
|
||||||
|
ok(!ret, "Expected failure\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
START_TEST(message)
|
||||||
|
{
|
||||||
|
test_msg_get_signer_count();
|
||||||
|
test_verify_message_signature();
|
||||||
|
}
|
|
@ -2514,182 +2514,6 @@ static void test_msg_control(void)
|
||||||
CryptMsgClose(msg);
|
CryptMsgClose(msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void test_msg_get_signer_count(void)
|
|
||||||
{
|
|
||||||
LONG count;
|
|
||||||
|
|
||||||
SetLastError(0xdeadbeef);
|
|
||||||
count = CryptGetMessageSignerCount(0, NULL, 0);
|
|
||||||
ok(count == -1, "Expected -1, got %d\n", count);
|
|
||||||
ok(GetLastError() == E_INVALIDARG, "Expected E_INVALIDARG, got %08x\n",
|
|
||||||
GetLastError());
|
|
||||||
SetLastError(0xdeadbeef);
|
|
||||||
count = CryptGetMessageSignerCount(PKCS_7_ASN_ENCODING, NULL, 0);
|
|
||||||
ok(count == -1, "Expected -1, got %d\n", count);
|
|
||||||
ok(GetLastError() == CRYPT_E_ASN1_EOD,
|
|
||||||
"Expected CRYPT_E_ASN1_EOD, got %08x\n", GetLastError());
|
|
||||||
SetLastError(0xdeadbeef);
|
|
||||||
count = CryptGetMessageSignerCount(PKCS_7_ASN_ENCODING,
|
|
||||||
dataEmptyBareContent, sizeof(dataEmptyBareContent));
|
|
||||||
ok(count == -1, "Expected -1, got %d\n", count);
|
|
||||||
ok(GetLastError() == CRYPT_E_ASN1_BADTAG,
|
|
||||||
"Expected CRYPT_E_ASN1_BADTAG, got %08x\n", GetLastError());
|
|
||||||
SetLastError(0xdeadbeef);
|
|
||||||
count = CryptGetMessageSignerCount(PKCS_7_ASN_ENCODING,
|
|
||||||
dataEmptyContent, sizeof(dataEmptyContent));
|
|
||||||
ok(count == -1, "Expected -1, got %d\n", count);
|
|
||||||
ok(GetLastError() == CRYPT_E_INVALID_MSG_TYPE,
|
|
||||||
"Expected CRYPT_E_INVALID_MSG_TYPE, got %08x\n", GetLastError());
|
|
||||||
SetLastError(0xdeadbeef);
|
|
||||||
count = CryptGetMessageSignerCount(PKCS_7_ASN_ENCODING,
|
|
||||||
signedEmptyBareContent, sizeof(signedEmptyBareContent));
|
|
||||||
ok(count == -1, "Expected -1, got %d\n", count);
|
|
||||||
ok(GetLastError() == CRYPT_E_ASN1_BADTAG,
|
|
||||||
"Expected CRYPT_E_ASN1_BADTAG, got %08x\n", GetLastError());
|
|
||||||
count = CryptGetMessageSignerCount(PKCS_7_ASN_ENCODING,
|
|
||||||
signedEmptyContent, sizeof(signedEmptyContent));
|
|
||||||
ok(count == 1, "Expected 1, got %d\n", count);
|
|
||||||
}
|
|
||||||
|
|
||||||
static const BYTE signedWithCertEmptyContent[] = {
|
|
||||||
0x30,0x81,0xdf,0x06,0x09,0x2a,0x86,0x48,0x86,0xf7,0x0d,0x01,0x07,0x02,0xa0,
|
|
||||||
0x81,0xd1,0x30,0x81,0xce,0x02,0x01,0x01,0x31,0x0e,0x30,0x0c,0x06,0x08,0x2a,
|
|
||||||
0x86,0x48,0x86,0xf7,0x0d,0x02,0x05,0x05,0x00,0x30,0x02,0x06,0x00,0xa0,0x7c,
|
|
||||||
0x30,0x7a,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,0x16,0x30,0x14,0x30,
|
|
||||||
0x12,0x06,0x03,0x55,0x1d,0x13,0x01,0x01,0xff,0x04,0x08,0x30,0x06,0x01,0x01,
|
|
||||||
0xff,0x02,0x01,0x01,0x31,0x37,0x30,0x35,0x02,0x01,0x01,0x30,0x1a,0x30,0x15,
|
|
||||||
0x31,0x13,0x30,0x11,0x06,0x03,0x55,0x04,0x03,0x13,0x0a,0x4a,0x75,0x61,0x6e,
|
|
||||||
0x20,0x4c,0x61,0x6e,0x67,0x00,0x02,0x01,0x01,0x30,0x0c,0x06,0x08,0x2a,0x86,
|
|
||||||
0x48,0x86,0xf7,0x0d,0x02,0x05,0x05,0x00,0x30,0x04,0x06,0x00,0x05,0x00,0x04,
|
|
||||||
0x00 };
|
|
||||||
static const BYTE signedWithCertContent[] = {
|
|
||||||
0x30,0x82,0x01,0x32,0x06,0x09,0x2a,0x86,0x48,0x86,0xf7,0x0d,0x01,0x07,0x02,
|
|
||||||
0xa0,0x82,0x01,0x23,0x30,0x82,0x01,0x1f,0x02,0x01,0x01,0x31,0x0e,0x30,0x0c,
|
|
||||||
0x06,0x08,0x2a,0x86,0x48,0x86,0xf7,0x0d,0x02,0x05,0x05,0x00,0x30,0x13,0x06,
|
|
||||||
0x09,0x2a,0x86,0x48,0x86,0xf7,0x0d,0x01,0x07,0x01,0xa0,0x06,0x04,0x04,0x01,
|
|
||||||
0x02,0x03,0x04,0xa0,0x7c,0x30,0x7a,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,0x16,0x30,0x14,0x30,0x12,0x06,0x03,0x55,0x1d,0x13,0x01,0x01,0xff,0x04,
|
|
||||||
0x08,0x30,0x06,0x01,0x01,0xff,0x02,0x01,0x01,0x31,0x77,0x30,0x75,0x02,0x01,
|
|
||||||
0x01,0x30,0x1a,0x30,0x15,0x31,0x13,0x30,0x11,0x06,0x03,0x55,0x04,0x03,0x13,
|
|
||||||
0x0a,0x4a,0x75,0x61,0x6e,0x20,0x4c,0x61,0x6e,0x67,0x00,0x02,0x01,0x01,0x30,
|
|
||||||
0x0c,0x06,0x08,0x2a,0x86,0x48,0x86,0xf7,0x0d,0x02,0x05,0x05,0x00,0x30,0x04,
|
|
||||||
0x06,0x00,0x05,0x00,0x04,0x40,0x81,0xa6,0x70,0xb3,0xef,0x59,0xd1,0x66,0xd1,
|
|
||||||
0x9b,0xc0,0x9a,0xb6,0x9a,0x5e,0x6d,0x6f,0x6d,0x0d,0x59,0xa9,0xaa,0x6e,0xe9,
|
|
||||||
0x2c,0xa0,0x1e,0xee,0xc2,0x60,0xbc,0x59,0xbe,0x3f,0x63,0x06,0x8d,0xc9,0x11,
|
|
||||||
0x1d,0x23,0x64,0x92,0xef,0x2e,0xfc,0x57,0x29,0xa4,0xaf,0xe0,0xee,0x93,0x19,
|
|
||||||
0x39,0x51,0xe4,0x44,0xb8,0x0b,0x28,0xf4,0xa8,0x0d };
|
|
||||||
static const BYTE signedWithCertWithPubKeyContent[] = {
|
|
||||||
0x30,0x81,0xfc,0x06,0x09,0x2a,0x86,0x48,0x86,0xf7,0x0d,0x01,0x07,0x02,0xa0,
|
|
||||||
0x81,0xee,0x30,0x81,0xeb,0x02,0x01,0x01,0x31,0x0e,0x30,0x0c,0x06,0x08,0x2a,
|
|
||||||
0x86,0x48,0x86,0xf7,0x0d,0x02,0x05,0x05,0x00,0x30,0x02,0x06,0x00,0xa0,0x81,
|
|
||||||
0x98,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,0x31,0x37,0x30,0x35,0x02,0x01,0x01,0x30,0x1a,0x30,0x15,0x31,
|
|
||||||
0x13,0x30,0x11,0x06,0x03,0x55,0x04,0x03,0x13,0x0a,0x4a,0x75,0x61,0x6e,0x20,
|
|
||||||
0x4c,0x61,0x6e,0x67,0x00,0x02,0x01,0x01,0x30,0x0c,0x06,0x08,0x2a,0x86,0x48,
|
|
||||||
0x86,0xf7,0x0d,0x02,0x05,0x05,0x00,0x30,0x04,0x06,0x00,0x05,0x00,0x04,0x00 };
|
|
||||||
|
|
||||||
static void test_verify_message_signature(void)
|
|
||||||
{
|
|
||||||
BOOL ret;
|
|
||||||
CRYPT_VERIFY_MESSAGE_PARA para = { 0 };
|
|
||||||
PCCERT_CONTEXT cert;
|
|
||||||
DWORD cbDecoded;
|
|
||||||
|
|
||||||
SetLastError(0xdeadbeef);
|
|
||||||
ret = CryptVerifyMessageSignature(NULL, 0, NULL, 0, NULL, 0, NULL);
|
|
||||||
ok(!ret && GetLastError() == E_INVALIDARG,
|
|
||||||
"Expected E_INVALIDARG, got %08x\n", GetLastError());
|
|
||||||
SetLastError(0xdeadbeef);
|
|
||||||
ret = CryptVerifyMessageSignature(¶, 0, NULL, 0, NULL, 0, NULL);
|
|
||||||
ok(!ret && GetLastError() == E_INVALIDARG,
|
|
||||||
"Expected E_INVALIDARG, got %08x\n", GetLastError());
|
|
||||||
para.cbSize = sizeof(para);
|
|
||||||
SetLastError(0xdeadbeef);
|
|
||||||
ret = CryptVerifyMessageSignature(¶, 0, NULL, 0, NULL, 0, NULL);
|
|
||||||
ok(!ret && GetLastError() == E_INVALIDARG,
|
|
||||||
"Expected E_INVALIDARG, got %08x\n", GetLastError());
|
|
||||||
para.cbSize = 0;
|
|
||||||
para.dwMsgAndCertEncodingType = PKCS_7_ASN_ENCODING;
|
|
||||||
SetLastError(0xdeadbeef);
|
|
||||||
ret = CryptVerifyMessageSignature(¶, 0, NULL, 0, NULL, 0, NULL);
|
|
||||||
ok(!ret && GetLastError() == E_INVALIDARG,
|
|
||||||
"Expected E_INVALIDARG, got %08x\n", GetLastError());
|
|
||||||
para.cbSize = sizeof(para);
|
|
||||||
SetLastError(0xdeadbeef);
|
|
||||||
ret = CryptVerifyMessageSignature(¶, 0, NULL, 0, NULL, 0, NULL);
|
|
||||||
ok(!ret && GetLastError() == CRYPT_E_ASN1_EOD,
|
|
||||||
"Expected CRYPT_E_ASN1_EOD, got %08x\n", GetLastError());
|
|
||||||
/* Check whether cert is set on error */
|
|
||||||
cert = (PCCERT_CONTEXT)0xdeadbeef;
|
|
||||||
ret = CryptVerifyMessageSignature(¶, 0, NULL, 0, NULL, 0, &cert);
|
|
||||||
ok(cert == NULL, "Expected NULL cert\n");
|
|
||||||
/* Check whether cbDecoded is set on error */
|
|
||||||
cbDecoded = 0xdeadbeef;
|
|
||||||
ret = CryptVerifyMessageSignature(¶, 0, NULL, 0, NULL, &cbDecoded,
|
|
||||||
NULL);
|
|
||||||
ok(!cbDecoded, "Expected 0\n");
|
|
||||||
SetLastError(0xdeadbeef);
|
|
||||||
ret = CryptVerifyMessageSignature(¶, 0, dataEmptyBareContent,
|
|
||||||
sizeof(dataEmptyBareContent), NULL, 0, NULL);
|
|
||||||
ok(!ret && GetLastError() == CRYPT_E_ASN1_BADTAG,
|
|
||||||
"Expected CRYPT_E_ASN1_BADTAG, got %08x\n", GetLastError());
|
|
||||||
SetLastError(0xdeadbeef);
|
|
||||||
ret = CryptVerifyMessageSignature(¶, 0, dataEmptyContent,
|
|
||||||
sizeof(dataEmptyContent), NULL, 0, NULL);
|
|
||||||
ok(!ret && GetLastError() == CRYPT_E_UNEXPECTED_MSG_TYPE,
|
|
||||||
"Expected CRYPT_E_UNEXPECTED_MSG_TYPE, got %08x\n", GetLastError());
|
|
||||||
SetLastError(0xdeadbeef);
|
|
||||||
ret = CryptVerifyMessageSignature(¶, 0, signedEmptyBareContent,
|
|
||||||
sizeof(signedEmptyBareContent), NULL, 0, NULL);
|
|
||||||
ok(!ret && GetLastError() == CRYPT_E_ASN1_BADTAG,
|
|
||||||
"Expected CRYPT_E_ASN1_BADTAG, got %08x\n", GetLastError());
|
|
||||||
SetLastError(0xdeadbeef);
|
|
||||||
ret = CryptVerifyMessageSignature(¶, 0, signedEmptyContent,
|
|
||||||
sizeof(signedEmptyContent), NULL, 0, NULL);
|
|
||||||
ok(!ret && GetLastError() == CRYPT_E_NOT_FOUND,
|
|
||||||
"Expected CRYPT_E_NOT_FOUND, got %08x\n", GetLastError());
|
|
||||||
SetLastError(0xdeadbeef);
|
|
||||||
ret = CryptVerifyMessageSignature(¶, 0, signedContent,
|
|
||||||
sizeof(signedContent), NULL, 0, NULL);
|
|
||||||
ok(!ret && GetLastError() == CRYPT_E_NOT_FOUND,
|
|
||||||
"Expected CRYPT_E_NOT_FOUND, got %08x\n", GetLastError());
|
|
||||||
/* FIXME: Windows fails with CRYPT_E_NOT_FOUND for these messages, but
|
|
||||||
* their signer certs have invalid public keys that fail to decode. In
|
|
||||||
* Wine therefore the failure is an ASN error. Need some messages with
|
|
||||||
* valid public keys and invalid signatures to check against.
|
|
||||||
*/
|
|
||||||
ret = CryptVerifyMessageSignature(¶, 0, signedWithCertEmptyContent,
|
|
||||||
sizeof(signedWithCertEmptyContent), NULL, 0, NULL);
|
|
||||||
ok(!ret, "Expected failure\n");
|
|
||||||
ret = CryptVerifyMessageSignature(¶, 0, signedWithCertContent,
|
|
||||||
sizeof(signedWithCertContent), NULL, 0, NULL);
|
|
||||||
ok(!ret, "Expected failure\n");
|
|
||||||
ret = CryptVerifyMessageSignature(¶, 0, signedWithCertWithPubKeyContent,
|
|
||||||
sizeof(signedWithCertWithPubKeyContent), NULL, 0, NULL);
|
|
||||||
ok(!ret, "Expected failure\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
/* win9x has much less parameter checks and will crash on many tests
|
/* win9x has much less parameter checks and will crash on many tests
|
||||||
* this code is from test_signed_msg_update()
|
* this code is from test_signed_msg_update()
|
||||||
*/
|
*/
|
||||||
|
@ -2741,8 +2565,4 @@ START_TEST(msg)
|
||||||
test_hash_msg();
|
test_hash_msg();
|
||||||
test_signed_msg();
|
test_signed_msg();
|
||||||
test_decode_msg();
|
test_decode_msg();
|
||||||
|
|
||||||
/* simplified message functions */
|
|
||||||
test_msg_get_signer_count();
|
|
||||||
test_verify_message_signature();
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue