Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-winehq
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wine
wine-winehq
Commits
05849645
Commit
05849645
authored
Jul 23, 2007
by
Juan Lang
Committed by
Alexandre Julliard
Jul 24, 2007
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
crypt32: Test and implement encoding signed data messages with CRLs.
parent
01ab14e1
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
123 additions
and
3 deletions
+123
-3
encode.c
dlls/crypt32/encode.c
+16
-3
msg.c
dlls/crypt32/tests/msg.c
+107
-0
No files found.
dlls/crypt32/encode.c
View file @
05849645
...
...
@@ -3240,13 +3240,11 @@ BOOL CRYPT_AsnEncodePKCSSignedInfo(CRYPT_SIGNED_INFO *signedInfo, void *pvData,
{
&
signedInfo
->
version
,
CRYPT_AsnEncodeInt
,
0
},
};
struct
DERSetDescriptor
digestAlgorithmsSet
=
{
0
},
certSet
=
{
0
};
struct
DERSetDescriptor
signerSet
=
{
0
};
struct
DERSetDescriptor
crlSet
=
{
0
},
signerSet
=
{
0
};
struct
AsnEncodeTagSwappedItem
swapped
[
2
]
=
{
{
0
}
};
DWORD
cItem
=
1
,
cSwapped
=
0
;
BOOL
ret
=
TRUE
;
if
(
signedInfo
->
cCrlEncoded
)
FIXME
(
"unimplemented for CRLs
\n
"
);
if
(
signedInfo
->
cAttrCertEncoded
)
FIXME
(
"unimplemented for attr certs
\n
"
);
if
(
signedInfo
->
cSignerInfo
)
...
...
@@ -3279,6 +3277,21 @@ BOOL CRYPT_AsnEncodePKCSSignedInfo(CRYPT_SIGNED_INFO *signedInfo, void *pvData,
cSwapped
++
;
cItem
++
;
}
if
(
signedInfo
->
cCrlEncoded
)
{
crlSet
.
cItems
=
signedInfo
->
cCrlEncoded
;
crlSet
.
items
=
signedInfo
->
rgCrlEncoded
;
crlSet
.
itemSize
=
sizeof
(
CRL_BLOB
);
crlSet
.
itemOffset
=
0
;
crlSet
.
encode
=
CRYPT_CopyEncodedBlob
;
swapped
[
cSwapped
].
tag
=
ASN_CONSTRUCTOR
|
ASN_CONTEXT
|
1
;
swapped
[
cSwapped
].
pvStructInfo
=
&
crlSet
;
swapped
[
cSwapped
].
encodeFunc
=
CRYPT_DEREncodeItemsAsSet
;
items
[
cItem
].
pvStructInfo
=
&
swapped
[
cSwapped
];
items
[
cItem
].
encodeFunc
=
CRYPT_AsnEncodeSwapTag
;
cSwapped
++
;
cItem
++
;
}
if
(
ret
&&
signedInfo
->
cSignerInfo
)
{
signerSet
.
cItems
=
signedInfo
->
cSignerInfo
;
...
...
dlls/crypt32/tests/msg.c
View file @
05849645
...
...
@@ -1302,6 +1302,79 @@ static const BYTE signedWithCertBareContent[] = {
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
BYTE
crl
[]
=
{
0x30
,
0x2c
,
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
,
0x18
,
0x0f
,
0x31
,
0x36
,
0x30
,
0x31
,
0x30
,
0x31
,
0x30
,
0x31
,
0x30
,
0x30
,
0x30
,
0x30
,
0x30
,
0x30
,
0x5a
};
static
const
BYTE
signedWithCrlEmptyBareContent
[]
=
{
0x30
,
0x81
,
0x80
,
0x02
,
0x01
,
0x01
,
0x31
,
0x0e
,
0x30
,
0x0c
,
0x06
,
0x08
,
0x2a
,
0x86
,
0x48
,
0x86
,
0xf7
,
0x0d
,
0x02
,
0x05
,
0x05
,
0x00
,
0x30
,
0x02
,
0x06
,
0x00
,
0xa1
,
0x2e
,
0x30
,
0x2c
,
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
,
0x18
,
0x0f
,
0x31
,
0x36
,
0x30
,
0x31
,
0x30
,
0x31
,
0x30
,
0x31
,
0x30
,
0x30
,
0x30
,
0x30
,
0x30
,
0x30
,
0x5a
,
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
signedWithCrlBareContent
[]
=
{
0x30
,
0x81
,
0xd1
,
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
,
0xa1
,
0x2e
,
0x30
,
0x2c
,
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
,
0x18
,
0x0f
,
0x31
,
0x36
,
0x30
,
0x31
,
0x30
,
0x31
,
0x30
,
0x31
,
0x30
,
0x30
,
0x30
,
0x30
,
0x30
,
0x30
,
0x5a
,
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
signedWithCertAndCrlEmptyBareContent
[]
=
{
0x30
,
0x81
,
0xfe
,
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
,
0xa1
,
0x2e
,
0x30
,
0x2c
,
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
,
0x18
,
0x0f
,
0x31
,
0x36
,
0x30
,
0x31
,
0x30
,
0x31
,
0x30
,
0x31
,
0x30
,
0x30
,
0x30
,
0x30
,
0x30
,
0x30
,
0x5a
,
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
signedWithCertAndCrlBareContent
[]
=
{
0x30
,
0x82
,
0x01
,
0x4f
,
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
,
0xa1
,
0x2e
,
0x30
,
0x2c
,
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
,
0x18
,
0x0f
,
0x31
,
0x36
,
0x30
,
0x31
,
0x30
,
0x31
,
0x30
,
0x31
,
0x30
,
0x30
,
0x30
,
0x30
,
0x30
,
0x30
,
0x5a
,
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
void
test_signed_msg_encoding
(
void
)
{
...
...
@@ -1310,6 +1383,7 @@ static void test_signed_msg_encoding(void)
CMSG_SIGNER_ENCODE_INFO
signer
=
{
sizeof
(
signer
),
0
};
CERT_INFO
certInfo
=
{
0
};
CERT_BLOB
encodedCert
=
{
sizeof
(
cert
),
cert
};
CRL_BLOB
encodedCrl
=
{
sizeof
(
crl
),
crl
};
BOOL
ret
;
HCRYPTKEY
key
;
DWORD
size
;
...
...
@@ -1389,6 +1463,39 @@ static void test_signed_msg_encoding(void)
CryptMsgClose
(
msg
);
signInfo
.
cCertEncoded
=
0
;
signInfo
.
rgCrlEncoded
=
&
encodedCrl
;
signInfo
.
cCrlEncoded
=
1
;
msg
=
CryptMsgOpenToEncode
(
PKCS_7_ASN_ENCODING
,
0
,
CMSG_SIGNED
,
&
signInfo
,
NULL
,
NULL
);
ok
(
msg
!=
NULL
,
"CryptMsgOpenToEncode failed: %x
\n
"
,
GetLastError
());
check_param
(
"signed with crl empty bare content"
,
msg
,
CMSG_BARE_CONTENT_PARAM
,
signedWithCrlEmptyBareContent
,
sizeof
(
signedWithCrlEmptyBareContent
));
ret
=
CryptMsgUpdate
(
msg
,
msgData
,
sizeof
(
msgData
),
TRUE
);
ok
(
ret
,
"CryptMsgUpdate failed: %x
\n
"
,
GetLastError
());
check_param
(
"signed with crl bare content"
,
msg
,
CMSG_BARE_CONTENT_PARAM
,
signedWithCrlBareContent
,
sizeof
(
signedWithCrlBareContent
));
CryptMsgClose
(
msg
);
signInfo
.
cCertEncoded
=
1
;
msg
=
CryptMsgOpenToEncode
(
PKCS_7_ASN_ENCODING
,
0
,
CMSG_SIGNED
,
&
signInfo
,
NULL
,
NULL
);
ok
(
msg
!=
NULL
,
"CryptMsgOpenToEncode failed: %x
\n
"
,
GetLastError
());
check_param
(
"signed with cert and crl empty bare content"
,
msg
,
CMSG_BARE_CONTENT_PARAM
,
signedWithCertAndCrlEmptyBareContent
,
sizeof
(
signedWithCertAndCrlEmptyBareContent
));
ret
=
CryptMsgUpdate
(
msg
,
msgData
,
sizeof
(
msgData
),
TRUE
);
ok
(
ret
,
"CryptMsgUpdate failed: %x
\n
"
,
GetLastError
());
check_param
(
"signed with cert and crl bare content"
,
msg
,
CMSG_BARE_CONTENT_PARAM
,
signedWithCertAndCrlBareContent
,
sizeof
(
signedWithCertAndCrlBareContent
));
CryptMsgClose
(
msg
);
CryptDestroyKey
(
key
);
CryptReleaseContext
(
signer
.
hCryptProv
,
0
);
CryptAcquireContextW
(
&
signer
.
hCryptProv
,
cspNameW
,
NULL
,
PROV_RSA_FULL
,
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment