Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-cw
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-cw
Commits
35abf3ad
Commit
35abf3ad
authored
Jul 17, 2007
by
Juan Lang
Committed by
Alexandre Julliard
Jul 18, 2007
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
crypt32: Implement decoding hash messages.
parent
8cf82d8a
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
86 additions
and
14 deletions
+86
-14
crypt32_private.h
dlls/crypt32/crypt32_private.h
+4
-0
decode.c
dlls/crypt32/decode.c
+69
-12
msg.c
dlls/crypt32/msg.c
+13
-0
msg.c
dlls/crypt32/tests/msg.c
+0
-2
No files found.
dlls/crypt32/crypt32_private.h
View file @
35abf3ad
...
@@ -90,6 +90,10 @@ BOOL CRYPT_AsnEncodePKCSDigestedData(CRYPT_DIGESTED_DATA *digestedData,
...
@@ -90,6 +90,10 @@ BOOL CRYPT_AsnEncodePKCSDigestedData(CRYPT_DIGESTED_DATA *digestedData,
BOOL
CRYPT_EncodeEnsureSpace
(
DWORD
dwFlags
,
PCRYPT_ENCODE_PARA
pEncodePara
,
BOOL
CRYPT_EncodeEnsureSpace
(
DWORD
dwFlags
,
PCRYPT_ENCODE_PARA
pEncodePara
,
BYTE
*
pbEncoded
,
DWORD
*
pcbEncoded
,
DWORD
bytesNeeded
);
BYTE
*
pbEncoded
,
DWORD
*
pcbEncoded
,
DWORD
bytesNeeded
);
BOOL
CRYPT_AsnDecodePKCSDigestedData
(
const
BYTE
*
pbEncoded
,
DWORD
cbEncoded
,
DWORD
dwFlags
,
PCRYPT_DECODE_PARA
pDecodePara
,
CRYPT_DIGESTED_DATA
*
digestedData
,
DWORD
*
pcbDigestedData
);
/* The following aren't defined in wincrypt.h, as they're "reserved" */
/* The following aren't defined in wincrypt.h, as they're "reserved" */
#define CERT_CERT_PROP_ID 32
#define CERT_CERT_PROP_ID 32
#define CERT_CRL_PROP_ID 33
#define CERT_CRL_PROP_ID 33
...
...
dlls/crypt32/decode.c
View file @
35abf3ad
...
@@ -2308,6 +2308,27 @@ static BOOL WINAPI CRYPT_AsnDecodePKCSContent(DWORD dwCertEncodingType,
...
@@ -2308,6 +2308,27 @@ static BOOL WINAPI CRYPT_AsnDecodePKCSContent(DWORD dwCertEncodingType,
return
ret
;
return
ret
;
}
}
static
BOOL
WINAPI
CRYPT_AsnDecodePKCSContentInfoInternal
(
DWORD
dwCertEncodingType
,
LPCSTR
lpszStructType
,
const
BYTE
*
pbEncoded
,
DWORD
cbEncoded
,
DWORD
dwFlags
,
PCRYPT_DECODE_PARA
pDecodePara
,
void
*
pvStructInfo
,
DWORD
*
pcbStructInfo
)
{
CRYPT_CONTENT_INFO
*
info
=
(
CRYPT_CONTENT_INFO
*
)
pvStructInfo
;
struct
AsnDecodeSequenceItem
items
[]
=
{
{
ASN_OBJECTIDENTIFIER
,
offsetof
(
CRYPT_CONTENT_INFO
,
pszObjId
),
CRYPT_AsnDecodeOidInternal
,
sizeof
(
LPSTR
),
FALSE
,
TRUE
,
offsetof
(
CRYPT_CONTENT_INFO
,
pszObjId
),
0
},
{
ASN_CONTEXT
|
ASN_CONSTRUCTOR
|
0
,
offsetof
(
CRYPT_CONTENT_INFO
,
Content
),
CRYPT_AsnDecodePKCSContent
,
sizeof
(
CRYPT_DER_BLOB
),
TRUE
,
TRUE
,
offsetof
(
CRYPT_CONTENT_INFO
,
Content
.
pbData
),
0
},
};
return
CRYPT_AsnDecodeSequence
(
dwCertEncodingType
,
items
,
sizeof
(
items
)
/
sizeof
(
items
[
0
]),
pbEncoded
,
cbEncoded
,
dwFlags
,
pDecodePara
,
pvStructInfo
,
pcbStructInfo
,
info
?
info
->
pszObjId
:
NULL
);
}
static
BOOL
WINAPI
CRYPT_AsnDecodePKCSContentInfo
(
DWORD
dwCertEncodingType
,
static
BOOL
WINAPI
CRYPT_AsnDecodePKCSContentInfo
(
DWORD
dwCertEncodingType
,
LPCSTR
lpszStructType
,
const
BYTE
*
pbEncoded
,
DWORD
cbEncoded
,
DWORD
dwFlags
,
LPCSTR
lpszStructType
,
const
BYTE
*
pbEncoded
,
DWORD
cbEncoded
,
DWORD
dwFlags
,
PCRYPT_DECODE_PARA
pDecodePara
,
void
*
pvStructInfo
,
DWORD
*
pcbStructInfo
)
PCRYPT_DECODE_PARA
pDecodePara
,
void
*
pvStructInfo
,
DWORD
*
pcbStructInfo
)
...
@@ -2319,19 +2340,28 @@ static BOOL WINAPI CRYPT_AsnDecodePKCSContentInfo(DWORD dwCertEncodingType,
...
@@ -2319,19 +2340,28 @@ static BOOL WINAPI CRYPT_AsnDecodePKCSContentInfo(DWORD dwCertEncodingType,
__TRY
__TRY
{
{
struct
AsnDecodeSequenceItem
items
[]
=
{
ret
=
CRYPT_AsnDecodePKCSContentInfoInternal
(
dwCertEncodingType
,
{
ASN_OBJECTIDENTIFIER
,
offsetof
(
CRYPT_CONTENT_INFO
,
pszObjId
),
lpszStructType
,
pbEncoded
,
cbEncoded
,
CRYPT_AsnDecodeOidInternal
,
sizeof
(
LPSTR
),
FALSE
,
TRUE
,
dwFlags
&
~
CRYPT_DECODE_ALLOC_FLAG
,
NULL
,
NULL
,
pcbStructInfo
);
offsetof
(
CRYPT_CONTENT_INFO
,
pszObjId
),
0
},
if
(
ret
&&
pvStructInfo
)
{
ASN_CONTEXT
|
ASN_CONSTRUCTOR
|
0
,
{
offsetof
(
CRYPT_CONTENT_INFO
,
Content
),
CRYPT_AsnDecodePKCSContent
,
ret
=
CRYPT_DecodeEnsureSpace
(
dwFlags
,
pDecodePara
,
pvStructInfo
,
sizeof
(
CRYPT_DER_BLOB
),
TRUE
,
TRUE
,
pcbStructInfo
,
*
pcbStructInfo
);
offsetof
(
CRYPT_CONTENT_INFO
,
Content
.
pbData
),
0
},
if
(
ret
)
};
{
CRYPT_CONTENT_INFO
*
info
;
ret
=
CRYPT_AsnDecodeSequence
(
dwCertEncodingType
,
items
,
if
(
dwFlags
&
CRYPT_DECODE_ALLOC_FLAG
)
sizeof
(
items
)
/
sizeof
(
items
[
0
]),
pbEncoded
,
cbEncoded
,
dwFlags
,
pvStructInfo
=
*
(
BYTE
**
)
pvStructInfo
;
pDecodePara
,
pvStructInfo
,
pcbStructInfo
,
NULL
);
info
=
(
CRYPT_CONTENT_INFO
*
)
pvStructInfo
;
info
->
pszObjId
=
(
LPSTR
)((
BYTE
*
)
info
+
sizeof
(
CRYPT_CONTENT_INFO
));
ret
=
CRYPT_AsnDecodePKCSContentInfoInternal
(
dwCertEncodingType
,
lpszStructType
,
pbEncoded
,
cbEncoded
,
dwFlags
&
~
CRYPT_DECODE_ALLOC_FLAG
,
NULL
,
pvStructInfo
,
pcbStructInfo
);
}
}
}
}
__EXCEPT_PAGE_FAULT
__EXCEPT_PAGE_FAULT
{
{
...
@@ -2341,6 +2371,33 @@ static BOOL WINAPI CRYPT_AsnDecodePKCSContentInfo(DWORD dwCertEncodingType,
...
@@ -2341,6 +2371,33 @@ static BOOL WINAPI CRYPT_AsnDecodePKCSContentInfo(DWORD dwCertEncodingType,
return
ret
;
return
ret
;
}
}
BOOL
CRYPT_AsnDecodePKCSDigestedData
(
const
BYTE
*
pbEncoded
,
DWORD
cbEncoded
,
DWORD
dwFlags
,
PCRYPT_DECODE_PARA
pDecodePara
,
CRYPT_DIGESTED_DATA
*
digestedData
,
DWORD
*
pcbDigestedData
)
{
BOOL
ret
;
struct
AsnDecodeSequenceItem
items
[]
=
{
{
ASN_INTEGER
,
offsetof
(
CRYPT_DIGESTED_DATA
,
version
),
CRYPT_AsnDecodeInt
,
sizeof
(
DWORD
),
FALSE
,
FALSE
,
0
,
0
},
{
ASN_SEQUENCEOF
,
offsetof
(
CRYPT_DIGESTED_DATA
,
DigestAlgorithm
),
CRYPT_AsnDecodeAlgorithmId
,
sizeof
(
CRYPT_ALGORITHM_IDENTIFIER
),
FALSE
,
TRUE
,
offsetof
(
CRYPT_DIGESTED_DATA
,
DigestAlgorithm
.
pszObjId
),
0
},
{
ASN_SEQUENCEOF
,
offsetof
(
CRYPT_DIGESTED_DATA
,
ContentInfo
),
CRYPT_AsnDecodePKCSContentInfoInternal
,
sizeof
(
CRYPT_CONTENT_INFO
),
FALSE
,
TRUE
,
offsetof
(
CRYPT_DIGESTED_DATA
,
ContentInfo
.
pszObjId
),
0
},
{
ASN_OCTETSTRING
,
offsetof
(
CRYPT_DIGESTED_DATA
,
hash
),
CRYPT_AsnDecodeOctetsInternal
,
sizeof
(
CRYPT_HASH_BLOB
),
FALSE
,
TRUE
,
offsetof
(
CRYPT_DIGESTED_DATA
,
hash
.
pbData
),
0
},
};
ret
=
CRYPT_AsnDecodeSequence
(
X509_ASN_ENCODING
,
items
,
sizeof
(
items
)
/
sizeof
(
items
[
0
]),
pbEncoded
,
cbEncoded
,
dwFlags
,
pDecodePara
,
digestedData
,
pcbDigestedData
,
NULL
);
return
ret
;
}
static
BOOL
WINAPI
CRYPT_AsnDecodeAltName
(
DWORD
dwCertEncodingType
,
static
BOOL
WINAPI
CRYPT_AsnDecodeAltName
(
DWORD
dwCertEncodingType
,
LPCSTR
lpszStructType
,
const
BYTE
*
pbEncoded
,
DWORD
cbEncoded
,
DWORD
dwFlags
,
LPCSTR
lpszStructType
,
const
BYTE
*
pbEncoded
,
DWORD
cbEncoded
,
DWORD
dwFlags
,
PCRYPT_DECODE_PARA
pDecodePara
,
void
*
pvStructInfo
,
DWORD
*
pcbStructInfo
)
PCRYPT_DECODE_PARA
pDecodePara
,
void
*
pvStructInfo
,
DWORD
*
pcbStructInfo
)
...
...
dlls/crypt32/msg.c
View file @
35abf3ad
...
@@ -652,6 +652,19 @@ static BOOL CDecodeMsg_DecodeContent(CDecodeMsg *msg, CRYPT_DER_BLOB *blob,
...
@@ -652,6 +652,19 @@ static BOOL CDecodeMsg_DecodeContent(CDecodeMsg *msg, CRYPT_DER_BLOB *blob,
msg
->
type
=
CMSG_DATA
;
msg
->
type
=
CMSG_DATA
;
break
;
break
;
case
CMSG_HASHED
:
case
CMSG_HASHED
:
{
CRYPT_DIGESTED_DATA
*
digestedData
;
ret
=
CRYPT_AsnDecodePKCSDigestedData
(
blob
->
pbData
,
blob
->
cbData
,
CRYPT_DECODE_ALLOC_FLAG
,
NULL
,
(
CRYPT_DIGESTED_DATA
*
)
&
digestedData
,
&
size
);
if
(
ret
)
{
FIXME
(
"need to store data for CMSG_HASHED
\n
"
);
LocalFree
(
digestedData
);
}
break
;
}
case
CMSG_ENVELOPED
:
case
CMSG_ENVELOPED
:
case
CMSG_SIGNED
:
case
CMSG_SIGNED
:
FIXME
(
"unimplemented for type %s
\n
"
,
MSG_TYPE_STR
(
type
));
FIXME
(
"unimplemented for type %s
\n
"
,
MSG_TYPE_STR
(
type
));
...
...
dlls/crypt32/tests/msg.c
View file @
35abf3ad
...
@@ -1138,7 +1138,6 @@ static void test_decode_msg_update(void)
...
@@ -1138,7 +1138,6 @@ static void test_decode_msg_update(void)
NULL
);
NULL
);
SetLastError
(
0xdeadbeef
);
SetLastError
(
0xdeadbeef
);
ret
=
CryptMsgUpdate
(
msg
,
hashEmptyContent
,
sizeof
(
hashEmptyContent
),
TRUE
);
ret
=
CryptMsgUpdate
(
msg
,
hashEmptyContent
,
sizeof
(
hashEmptyContent
),
TRUE
);
todo_wine
ok
(
!
ret
&&
GetLastError
()
==
CRYPT_E_ASN1_BADTAG
,
ok
(
!
ret
&&
GetLastError
()
==
CRYPT_E_ASN1_BADTAG
,
"Expected CRYPT_E_ASN1_BADTAG, got %x
\n
"
,
GetLastError
());
"Expected CRYPT_E_ASN1_BADTAG, got %x
\n
"
,
GetLastError
());
CryptMsgClose
(
msg
);
CryptMsgClose
(
msg
);
...
@@ -1173,7 +1172,6 @@ static void test_decode_msg_update(void)
...
@@ -1173,7 +1172,6 @@ static void test_decode_msg_update(void)
NULL
);
NULL
);
SetLastError
(
0xdeadbeef
);
SetLastError
(
0xdeadbeef
);
ret
=
CryptMsgUpdate
(
msg
,
hashContent
,
sizeof
(
hashContent
),
TRUE
);
ret
=
CryptMsgUpdate
(
msg
,
hashContent
,
sizeof
(
hashContent
),
TRUE
);
todo_wine
ok
(
!
ret
&&
GetLastError
()
==
CRYPT_E_ASN1_BADTAG
,
ok
(
!
ret
&&
GetLastError
()
==
CRYPT_E_ASN1_BADTAG
,
"Expected CRYPT_E_ASN1_BADTAG, got %x
\n
"
,
GetLastError
());
"Expected CRYPT_E_ASN1_BADTAG, got %x
\n
"
,
GetLastError
());
CryptMsgClose
(
msg
);
CryptMsgClose
(
msg
);
...
...
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