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
febb06ce
Commit
febb06ce
authored
Jul 05, 2023
by
Alexandre Julliard
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
crypt32: Use nameless union/structs.
parent
420a7d06
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
221 additions
and
229 deletions
+221
-229
cert.c
dlls/crypt32/cert.c
+20
-21
chain.c
dlls/crypt32/chain.c
+37
-37
crl.c
dlls/crypt32/crl.c
+13
-13
decode.c
dlls/crypt32/decode.c
+40
-43
encode.c
dlls/crypt32/encode.c
+15
-17
msg.c
dlls/crypt32/msg.c
+51
-51
object.c
dlls/crypt32/object.c
+27
-27
oid.c
dlls/crypt32/oid.c
+11
-11
str.c
dlls/crypt32/str.c
+7
-9
No files found.
dlls/crypt32/cert.c
View file @
febb06ce
...
...
@@ -20,7 +20,6 @@
#include <assert.h>
#include <stdarg.h>
#define NONAMELESSUNION
#include "ntstatus.h"
#define WIN32_NO_STATUS
#include "windef.h"
...
...
@@ -1403,9 +1402,9 @@ DWORD WINAPI CertGetPublicKeyLength(DWORD dwCertEncodingType,
{
HCRYPTKEY
key
;
TRACE
(
"public key algid %#x (%s)
\n
"
,
info
->
u
.
Algid
,
debugstr_a
(
pPublicKey
->
Algorithm
.
pszObjId
));
TRACE
(
"public key algid %#x (%s)
\n
"
,
info
->
Algid
,
debugstr_a
(
pPublicKey
->
Algorithm
.
pszObjId
));
ret
=
CryptImportPublicKeyInfo
(
I_CryptGetDefaultCryptProv
(
info
->
u
.
Algid
),
dwCertEncodingType
,
pPublicKey
,
&
key
);
ret
=
CryptImportPublicKeyInfo
(
I_CryptGetDefaultCryptProv
(
info
->
Algid
),
dwCertEncodingType
,
pPublicKey
,
&
key
);
if
(
ret
)
{
size
=
sizeof
(
len
);
...
...
@@ -1538,14 +1537,14 @@ static BOOL compare_cert_by_cert_id(PCCERT_CONTEXT pCertContext, DWORD dwType,
{
case
CERT_ID_ISSUER_SERIAL_NUMBER
:
ret
=
CertCompareCertificateName
(
pCertContext
->
dwCertEncodingType
,
&
pCertContext
->
pCertInfo
->
Issuer
,
&
id
->
u
.
IssuerSerialNumber
.
Issuer
);
&
pCertContext
->
pCertInfo
->
Issuer
,
&
id
->
IssuerSerialNumber
.
Issuer
);
if
(
ret
)
ret
=
CertCompareIntegerBlob
(
&
pCertContext
->
pCertInfo
->
SerialNumber
,
&
id
->
u
.
IssuerSerialNumber
.
SerialNumber
);
&
id
->
IssuerSerialNumber
.
SerialNumber
);
break
;
case
CERT_ID_SHA1_HASH
:
ret
=
compare_cert_by_sha1_hash
(
pCertContext
,
dwType
,
dwFlags
,
&
id
->
u
.
HashId
);
&
id
->
HashId
);
break
;
case
CERT_ID_KEY_IDENTIFIER
:
{
...
...
@@ -1553,7 +1552,7 @@ static BOOL compare_cert_by_cert_id(PCCERT_CONTEXT pCertContext, DWORD dwType,
ret
=
CertGetCertificateContextProperty
(
pCertContext
,
CERT_KEY_IDENTIFIER_PROP_ID
,
NULL
,
&
size
);
if
(
ret
&&
size
==
id
->
u
.
KeyId
.
cbData
)
if
(
ret
&&
size
==
id
->
KeyId
.
cbData
)
{
LPBYTE
buf
=
CryptMemAlloc
(
size
);
...
...
@@ -1561,7 +1560,7 @@ static BOOL compare_cert_by_cert_id(PCCERT_CONTEXT pCertContext, DWORD dwType,
{
CertGetCertificateContextProperty
(
pCertContext
,
CERT_KEY_IDENTIFIER_PROP_ID
,
buf
,
&
size
);
ret
=
!
memcmp
(
buf
,
id
->
u
.
KeyId
.
pbData
,
size
);
ret
=
!
memcmp
(
buf
,
id
->
KeyId
.
pbData
,
size
);
CryptMemFree
(
buf
);
}
else
...
...
@@ -1663,15 +1662,15 @@ static PCCERT_CONTEXT find_cert_by_issuer(HCERTSTORE store, DWORD dwType,
if
(
info
->
CertIssuer
.
cbData
&&
info
->
CertSerialNumber
.
cbData
)
{
id
.
dwIdChoice
=
CERT_ID_ISSUER_SERIAL_NUMBER
;
memcpy
(
&
id
.
u
.
IssuerSerialNumber
.
Issuer
,
&
info
->
CertIssuer
,
memcpy
(
&
id
.
IssuerSerialNumber
.
Issuer
,
&
info
->
CertIssuer
,
sizeof
(
CERT_NAME_BLOB
));
memcpy
(
&
id
.
u
.
IssuerSerialNumber
.
SerialNumber
,
memcpy
(
&
id
.
IssuerSerialNumber
.
SerialNumber
,
&
info
->
CertSerialNumber
,
sizeof
(
CRYPT_INTEGER_BLOB
));
}
else
if
(
info
->
KeyId
.
cbData
)
{
id
.
dwIdChoice
=
CERT_ID_KEY_IDENTIFIER
;
memcpy
(
&
id
.
u
.
KeyId
,
&
info
->
KeyId
,
sizeof
(
CRYPT_HASH_BLOB
));
memcpy
(
&
id
.
KeyId
,
&
info
->
KeyId
,
sizeof
(
CRYPT_HASH_BLOB
));
}
else
ret
=
FALSE
;
...
...
@@ -1709,9 +1708,9 @@ static PCCERT_CONTEXT find_cert_by_issuer(HCERTSTORE store, DWORD dwType,
if
(
directoryName
)
{
id
.
dwIdChoice
=
CERT_ID_ISSUER_SERIAL_NUMBER
;
memcpy
(
&
id
.
u
.
IssuerSerialNumber
.
Issuer
,
&
directoryName
->
u
.
DirectoryName
,
sizeof
(
CERT_NAME_BLOB
));
memcpy
(
&
id
.
u
.
IssuerSerialNumber
.
SerialNumber
,
memcpy
(
&
id
.
IssuerSerialNumber
.
Issuer
,
&
directoryName
->
DirectoryName
,
sizeof
(
CERT_NAME_BLOB
));
memcpy
(
&
id
.
IssuerSerialNumber
.
SerialNumber
,
&
info
->
AuthorityCertSerialNumber
,
sizeof
(
CRYPT_INTEGER_BLOB
));
}
...
...
@@ -1724,7 +1723,7 @@ static PCCERT_CONTEXT find_cert_by_issuer(HCERTSTORE store, DWORD dwType,
else
if
(
info
->
KeyId
.
cbData
)
{
id
.
dwIdChoice
=
CERT_ID_KEY_IDENTIFIER
;
memcpy
(
&
id
.
u
.
KeyId
,
&
info
->
KeyId
,
sizeof
(
CRYPT_HASH_BLOB
));
memcpy
(
&
id
.
KeyId
,
&
info
->
KeyId
,
sizeof
(
CRYPT_HASH_BLOB
));
}
else
ret
=
FALSE
;
...
...
@@ -1863,7 +1862,7 @@ PCCERT_CONTEXT WINAPI CertFindCertificateInStore(HCERTSTORE hCertStore,
break
;
case
CERT_COMPARE_KEY_IDENTIFIER
:
cert_id
.
dwIdChoice
=
CERT_ID_KEY_IDENTIFIER
;
cert_id
.
u
.
KeyId
=
*
(
const
CRYPT_HASH_BLOB
*
)
pvPara
;
cert_id
.
KeyId
=
*
(
const
CRYPT_HASH_BLOB
*
)
pvPara
;
pvPara
=
&
cert_id
;
/* fall through */
case
CERT_COMPARE_CERT_ID
:
...
...
@@ -2406,7 +2405,7 @@ BOOL WINAPI CryptHashToBeSigned(HCRYPTPROV_LEGACY hCryptProv,
}
else
{
ret
=
CryptCreateHash
(
hCryptProv
,
oidInfo
->
u
.
Algid
,
0
,
0
,
&
hHash
);
ret
=
CryptCreateHash
(
hCryptProv
,
oidInfo
->
Algid
,
0
,
0
,
&
hHash
);
if
(
ret
)
{
ret
=
CryptHashData
(
hHash
,
info
->
ToBeSigned
.
pbData
,
...
...
@@ -2446,7 +2445,7 @@ BOOL WINAPI CryptSignCertificate(HCRYPTPROV_OR_NCRYPT_KEY_HANDLE hCryptProv,
{
if
(
!
hCryptProv
)
hCryptProv
=
I_CryptGetDefaultCryptProv
(
0
);
ret
=
CryptCreateHash
(
hCryptProv
,
info
->
u
.
Algid
,
0
,
0
,
&
hHash
);
ret
=
CryptCreateHash
(
hCryptProv
,
info
->
Algid
,
0
,
0
,
&
hHash
);
if
(
ret
)
{
ret
=
CryptHashData
(
hHash
,
pbEncodedToBeSigned
,
...
...
@@ -2466,7 +2465,7 @@ BOOL WINAPI CryptSignCertificate(HCRYPTPROV_OR_NCRYPT_KEY_HANDLE hCryptProv,
}
else
{
ret
=
CryptCreateHash
(
hCryptProv
,
info
->
u
.
Algid
,
0
,
0
,
&
hHash
);
ret
=
CryptCreateHash
(
hCryptProv
,
info
->
Algid
,
0
,
0
,
&
hHash
);
if
(
ret
)
{
ret
=
CryptHashData
(
hHash
,
pbEncodedToBeSigned
,
...
...
@@ -2562,7 +2561,7 @@ static BOOL CRYPT_VerifySignature(HCRYPTPROV_LEGACY hCryptProv, DWORD dwCertEnco
HCRYPTKEY
key
;
ALG_ID
pubKeyID
,
hashID
;
hashID
=
info
->
u
.
Algid
;
hashID
=
info
->
Algid
;
if
(
info
->
ExtraInfo
.
cbData
>=
sizeof
(
ALG_ID
))
pubKeyID
=
*
(
ALG_ID
*
)
info
->
ExtraInfo
.
pbData
;
else
...
...
@@ -2896,7 +2895,7 @@ static BOOL CRYPT_VerifyCertSignatureFromPublicKeyInfo(HCRYPTPROV_LEGACY hCryptP
return
FALSE
;
}
if
(
info
->
u
.
Algid
==
CALG_OID_INFO_CNG_ONLY
)
if
(
info
->
Algid
==
CALG_OID_INFO_CNG_ONLY
)
return
CNG_VerifySignature
(
hCryptProv
,
dwCertEncodingType
,
pubKeyInfo
,
signedCert
,
info
);
else
return
CRYPT_VerifySignature
(
hCryptProv
,
dwCertEncodingType
,
pubKeyInfo
,
signedCert
,
info
);
...
...
dlls/crypt32/chain.c
View file @
febb06ce
...
...
@@ -19,7 +19,7 @@
#include <stdarg.h>
#include <wchar.h>
#define NONAMELESSUNION
#include "windef.h"
#include "winbase.h"
#include "winnls.h"
...
...
@@ -292,7 +292,7 @@ DWORD CRYPT_IsCertificateSelfSigned(const CERT_CONTEXT *cert)
&
info
->
AuthorityCertIssuer
.
rgAltEntry
[
i
];
if
(
directoryName
)
{
if
(
CertCompareCertificateName
(
cert
->
dwCertEncodingType
,
&
directoryName
->
u
.
DirectoryName
,
&
cert
->
pCertInfo
->
Issuer
)
if
(
CertCompareCertificateName
(
cert
->
dwCertEncodingType
,
&
directoryName
->
DirectoryName
,
&
cert
->
pCertInfo
->
Issuer
)
&&
CertCompareIntegerBlob
(
&
info
->
AuthorityCertSerialNumber
,
&
cert
->
pCertInfo
->
SerialNumber
))
status
=
CERT_TRUST_HAS_NAME_MATCH_ISSUER
;
}
...
...
@@ -891,24 +891,24 @@ static BOOL alt_name_matches(const CERT_ALT_NAME_ENTRY *name,
switch
(
constraint
->
dwAltNameChoice
)
{
case
CERT_ALT_NAME_RFC822_NAME
:
match
=
rfc822_name_matches
(
constraint
->
u
.
pwszURL
,
name
->
u
.
pwszURL
,
trustErrorStatus
);
match
=
rfc822_name_matches
(
constraint
->
pwszURL
,
name
->
pwszURL
,
trustErrorStatus
);
break
;
case
CERT_ALT_NAME_DNS_NAME
:
match
=
dns_name_matches
(
constraint
->
u
.
pwszURL
,
name
->
u
.
pwszURL
,
trustErrorStatus
);
match
=
dns_name_matches
(
constraint
->
pwszURL
,
name
->
pwszURL
,
trustErrorStatus
);
break
;
case
CERT_ALT_NAME_URL
:
match
=
url_matches
(
constraint
->
u
.
pwszURL
,
name
->
u
.
pwszURL
,
trustErrorStatus
);
match
=
url_matches
(
constraint
->
pwszURL
,
name
->
pwszURL
,
trustErrorStatus
);
break
;
case
CERT_ALT_NAME_IP_ADDRESS
:
match
=
ip_address_matches
(
&
constraint
->
u
.
IPAddress
,
&
name
->
u
.
IPAddress
,
trustErrorStatus
);
match
=
ip_address_matches
(
&
constraint
->
IPAddress
,
&
name
->
IPAddress
,
trustErrorStatus
);
break
;
case
CERT_ALT_NAME_DIRECTORY_NAME
:
match
=
directory_name_matches
(
&
constraint
->
u
.
DirectoryName
,
&
name
->
u
.
DirectoryName
);
match
=
directory_name_matches
(
&
constraint
->
DirectoryName
,
&
name
->
DirectoryName
);
break
;
default:
ERR
(
"name choice %ld unsupported in this context
\n
"
,
...
...
@@ -1022,7 +1022,7 @@ static BOOL rfc822_attr_matches_excluded_name(const CERT_RDN_ATTR *attr,
&
nameConstraints
->
rgExcludedSubtree
[
i
].
Base
;
if
(
constraint
->
dwAltNameChoice
==
CERT_ALT_NAME_RFC822_NAME
)
match
=
rfc822_name_matches
(
constraint
->
u
.
pwszRfc822Name
,
match
=
rfc822_name_matches
(
constraint
->
pwszRfc822Name
,
(
LPCWSTR
)
attr
->
Value
.
pbData
,
trustErrorStatus
);
}
return
match
;
...
...
@@ -1043,7 +1043,7 @@ static BOOL rfc822_attr_matches_permitted_name(const CERT_RDN_ATTR *attr,
if
(
constraint
->
dwAltNameChoice
==
CERT_ALT_NAME_RFC822_NAME
)
{
*
present
=
TRUE
;
match
=
rfc822_name_matches
(
constraint
->
u
.
pwszRfc822Name
,
match
=
rfc822_name_matches
(
constraint
->
pwszRfc822Name
,
(
LPCWSTR
)
attr
->
Value
.
pbData
,
trustErrorStatus
);
}
}
...
...
@@ -1152,7 +1152,7 @@ static void compare_subject_with_constraints(const CERT_NAME_BLOB *subjectName,
&
nameConstraints
->
rgExcludedSubtree
[
i
].
Base
;
if
(
constraint
->
dwAltNameChoice
==
CERT_ALT_NAME_DIRECTORY_NAME
&&
directory_name_matches
(
&
constraint
->
u
.
DirectoryName
,
subjectName
))
directory_name_matches
(
&
constraint
->
DirectoryName
,
subjectName
))
{
TRACE_
(
chain
)(
"subject name is excluded
\n
"
);
*
trustErrorStatus
|=
...
...
@@ -1177,7 +1177,7 @@ static void compare_subject_with_constraints(const CERT_NAME_BLOB *subjectName,
if
(
constraint
->
dwAltNameChoice
==
CERT_ALT_NAME_DIRECTORY_NAME
)
{
hasDirectoryConstraint
=
TRUE
;
match
=
directory_name_matches
(
&
constraint
->
u
.
DirectoryName
,
match
=
directory_name_matches
(
&
constraint
->
DirectoryName
,
subjectName
);
}
}
...
...
@@ -1427,31 +1427,31 @@ static void dump_alt_name_entry(const CERT_ALT_NAME_ENTRY *entry)
{
case
CERT_ALT_NAME_OTHER_NAME
:
TRACE_
(
chain
)(
"CERT_ALT_NAME_OTHER_NAME, oid = %s
\n
"
,
debugstr_a
(
entry
->
u
.
pOtherName
->
pszObjId
));
debugstr_a
(
entry
->
pOtherName
->
pszObjId
));
break
;
case
CERT_ALT_NAME_RFC822_NAME
:
TRACE_
(
chain
)(
"CERT_ALT_NAME_RFC822_NAME: %s
\n
"
,
debugstr_w
(
entry
->
u
.
pwszRfc822Name
));
debugstr_w
(
entry
->
pwszRfc822Name
));
break
;
case
CERT_ALT_NAME_DNS_NAME
:
TRACE_
(
chain
)(
"CERT_ALT_NAME_DNS_NAME: %s
\n
"
,
debugstr_w
(
entry
->
u
.
pwszDNSName
));
debugstr_w
(
entry
->
pwszDNSName
));
break
;
case
CERT_ALT_NAME_DIRECTORY_NAME
:
str
=
name_value_to_str
(
&
entry
->
u
.
DirectoryName
);
str
=
name_value_to_str
(
&
entry
->
DirectoryName
);
TRACE_
(
chain
)(
"CERT_ALT_NAME_DIRECTORY_NAME: %s
\n
"
,
debugstr_w
(
str
));
CryptMemFree
(
str
);
break
;
case
CERT_ALT_NAME_URL
:
TRACE_
(
chain
)(
"CERT_ALT_NAME_URL: %s
\n
"
,
debugstr_w
(
entry
->
u
.
pwszURL
));
TRACE_
(
chain
)(
"CERT_ALT_NAME_URL: %s
\n
"
,
debugstr_w
(
entry
->
pwszURL
));
break
;
case
CERT_ALT_NAME_IP_ADDRESS
:
TRACE_
(
chain
)(
"CERT_ALT_NAME_IP_ADDRESS: %ld bytes
\n
"
,
entry
->
u
.
IPAddress
.
cbData
);
entry
->
IPAddress
.
cbData
);
break
;
case
CERT_ALT_NAME_REGISTERED_ID
:
TRACE_
(
chain
)(
"CERT_ALT_NAME_REGISTERED_ID: %s
\n
"
,
debugstr_a
(
entry
->
u
.
pszRegisteredID
));
debugstr_a
(
entry
->
pszRegisteredID
));
break
;
default:
TRACE_
(
chain
)(
"dwAltNameChoice = %ld
\n
"
,
entry
->
dwAltNameChoice
);
...
...
@@ -2075,9 +2075,9 @@ static PCCERT_CONTEXT CRYPT_GetIssuer(const CertificateChainEngine *engine,
if
(
info
->
CertIssuer
.
cbData
&&
info
->
CertSerialNumber
.
cbData
)
{
id
.
dwIdChoice
=
CERT_ID_ISSUER_SERIAL_NUMBER
;
memcpy
(
&
id
.
u
.
IssuerSerialNumber
.
Issuer
,
&
info
->
CertIssuer
,
memcpy
(
&
id
.
IssuerSerialNumber
.
Issuer
,
&
info
->
CertIssuer
,
sizeof
(
CERT_NAME_BLOB
));
memcpy
(
&
id
.
u
.
IssuerSerialNumber
.
SerialNumber
,
memcpy
(
&
id
.
IssuerSerialNumber
.
SerialNumber
,
&
info
->
CertSerialNumber
,
sizeof
(
CRYPT_INTEGER_BLOB
));
issuer
=
CRYPT_FindIssuer
(
engine
,
subject
,
store
,
CERT_FIND_CERT_ID
,
&
id
,
flags
,
prevIssuer
);
...
...
@@ -2091,7 +2091,7 @@ static PCCERT_CONTEXT CRYPT_GetIssuer(const CertificateChainEngine *engine,
{
id
.
dwIdChoice
=
CERT_ID_KEY_IDENTIFIER
;
memcpy
(
&
id
.
u
.
KeyId
,
&
info
->
KeyId
,
sizeof
(
CRYPT_HASH_BLOB
));
memcpy
(
&
id
.
KeyId
,
&
info
->
KeyId
,
sizeof
(
CRYPT_HASH_BLOB
));
issuer
=
CRYPT_FindIssuer
(
engine
,
subject
,
store
,
CERT_FIND_CERT_ID
,
&
id
,
flags
,
prevIssuer
);
if
(
issuer
)
{
...
...
@@ -2131,9 +2131,9 @@ static PCCERT_CONTEXT CRYPT_GetIssuer(const CertificateChainEngine *engine,
if
(
directoryName
)
{
id
.
dwIdChoice
=
CERT_ID_ISSUER_SERIAL_NUMBER
;
memcpy
(
&
id
.
u
.
IssuerSerialNumber
.
Issuer
,
&
directoryName
->
u
.
DirectoryName
,
sizeof
(
CERT_NAME_BLOB
));
memcpy
(
&
id
.
u
.
IssuerSerialNumber
.
SerialNumber
,
memcpy
(
&
id
.
IssuerSerialNumber
.
Issuer
,
&
directoryName
->
DirectoryName
,
sizeof
(
CERT_NAME_BLOB
));
memcpy
(
&
id
.
IssuerSerialNumber
.
SerialNumber
,
&
info
->
AuthorityCertSerialNumber
,
sizeof
(
CRYPT_INTEGER_BLOB
));
...
...
@@ -2150,7 +2150,7 @@ static PCCERT_CONTEXT CRYPT_GetIssuer(const CertificateChainEngine *engine,
else
if
(
info
->
KeyId
.
cbData
)
{
id
.
dwIdChoice
=
CERT_ID_KEY_IDENTIFIER
;
memcpy
(
&
id
.
u
.
KeyId
,
&
info
->
KeyId
,
sizeof
(
CRYPT_HASH_BLOB
));
memcpy
(
&
id
.
KeyId
,
&
info
->
KeyId
,
sizeof
(
CRYPT_HASH_BLOB
));
issuer
=
CRYPT_FindIssuer
(
engine
,
subject
,
store
,
CERT_FIND_CERT_ID
,
&
id
,
flags
,
prevIssuer
);
if
(
issuer
)
{
...
...
@@ -3175,8 +3175,8 @@ static BOOL match_dns_to_subject_alt_name(const CERT_EXTENSION *ext,
CERT_ALT_NAME_DNS_NAME
)
{
TRACE_
(
chain
)(
"dNSName: %s
\n
"
,
debugstr_w
(
subjectName
->
rgAltEntry
[
i
].
u
.
pwszDNSName
));
if
(
subjectName
->
rgAltEntry
[
i
].
u
.
pwszDNSName
[
0
]
==
'*'
)
subjectName
->
rgAltEntry
[
i
].
pwszDNSName
));
if
(
subjectName
->
rgAltEntry
[
i
].
pwszDNSName
[
0
]
==
'*'
)
{
LPCWSTR
server_name_dot
;
...
...
@@ -3196,12 +3196,12 @@ static BOOL match_dns_to_subject_alt_name(const CERT_EXTENSION *ext,
if
(
server_name_dot
)
{
if
(
!
wcsicmp
(
server_name_dot
,
subjectName
->
rgAltEntry
[
i
].
u
.
pwszDNSName
+
1
))
subjectName
->
rgAltEntry
[
i
].
pwszDNSName
+
1
))
matches
=
TRUE
;
}
}
else
if
(
!
wcsicmp
(
server_name
,
subjectName
->
rgAltEntry
[
i
].
u
.
pwszDNSName
))
subjectName
->
rgAltEntry
[
i
].
pwszDNSName
))
matches
=
TRUE
;
}
}
...
...
@@ -3439,7 +3439,7 @@ static void dump_ssl_extra_chain_policy_para(HTTPSPolicyCallbackData *sslPara)
{
if
(
sslPara
)
{
TRACE_
(
chain
)(
"cbSize = %ld
\n
"
,
sslPara
->
u
.
cbSize
);
TRACE_
(
chain
)(
"cbSize = %ld
\n
"
,
sslPara
->
cbSize
);
TRACE_
(
chain
)(
"dwAuthType = %ld
\n
"
,
sslPara
->
dwAuthType
);
TRACE_
(
chain
)(
"fdwChecks = %08lx
\n
"
,
sslPara
->
fdwChecks
);
TRACE_
(
chain
)(
"pwszServerName = %s
\n
"
,
...
...
@@ -3461,7 +3461,7 @@ static BOOL WINAPI verify_ssl_policy(LPCSTR szPolicyOID,
}
if
(
TRACE_ON
(
chain
))
dump_ssl_extra_chain_policy_para
(
sslPara
);
if
(
sslPara
&&
sslPara
->
u
.
cbSize
>=
sizeof
(
HTTPSPolicyCallbackData
))
if
(
sslPara
&&
sslPara
->
cbSize
>=
sizeof
(
HTTPSPolicyCallbackData
))
checks
=
sslPara
->
fdwChecks
;
pPolicyStatus
->
lChainIndex
=
pPolicyStatus
->
lElementIndex
=
-
1
;
if
(
pChainContext
->
TrustStatus
.
dwErrorStatus
&
...
...
@@ -3543,7 +3543,7 @@ static BOOL WINAPI verify_ssl_policy(LPCSTR szPolicyOID,
if
(
!
pPolicyStatus
->
dwError
&&
pPolicyPara
&&
pPolicyPara
->
cbSize
>=
sizeof
(
CERT_CHAIN_POLICY_PARA
))
{
if
(
sslPara
&&
sslPara
->
u
.
cbSize
>=
sizeof
(
HTTPSPolicyCallbackData
))
if
(
sslPara
&&
sslPara
->
cbSize
>=
sizeof
(
HTTPSPolicyCallbackData
))
{
if
(
sslPara
->
dwAuthType
==
AUTHTYPE_SERVER
&&
sslPara
->
pwszServerName
&&
...
...
dlls/crypt32/crl.c
View file @
febb06ce
...
...
@@ -19,7 +19,7 @@
#include <assert.h>
#include <stdarg.h>
#define NONAMELESSUNION
#include "windef.h"
#include "winbase.h"
#include "wincrypt.h"
...
...
@@ -299,7 +299,7 @@ static BOOL compare_crl_issued_by(PCCRL_CONTEXT pCrlContext, DWORD dwType,
ret
=
CertCompareCertificateName
(
issuer
->
dwCertEncodingType
,
&
issuer
->
pCertInfo
->
Subject
,
&
directoryName
->
u
.
DirectoryName
);
&
directoryName
->
DirectoryName
);
if
(
ret
)
ret
=
CertCompareIntegerBlob
(
&
issuer
->
pCertInfo
->
SerialNumber
,
...
...
@@ -692,31 +692,31 @@ static BOOL compare_dist_point_name(const CRL_DIST_POINT_NAME *name1,
match
=
TRUE
;
if
(
name1
->
dwDistPointNameChoice
==
CRL_DIST_POINT_FULL_NAME
)
{
if
(
name1
->
u
.
FullName
.
cAltEntry
==
name2
->
u
.
FullName
.
cAltEntry
)
if
(
name1
->
FullName
.
cAltEntry
==
name2
->
FullName
.
cAltEntry
)
{
DWORD
i
;
for
(
i
=
0
;
match
&&
i
<
name1
->
u
.
FullName
.
cAltEntry
;
i
++
)
for
(
i
=
0
;
match
&&
i
<
name1
->
FullName
.
cAltEntry
;
i
++
)
{
const
CERT_ALT_NAME_ENTRY
*
entry1
=
&
name1
->
u
.
FullName
.
rgAltEntry
[
i
];
&
name1
->
FullName
.
rgAltEntry
[
i
];
const
CERT_ALT_NAME_ENTRY
*
entry2
=
&
name2
->
u
.
FullName
.
rgAltEntry
[
i
];
&
name2
->
FullName
.
rgAltEntry
[
i
];
if
(
entry1
->
dwAltNameChoice
==
entry2
->
dwAltNameChoice
)
{
switch
(
entry1
->
dwAltNameChoice
)
{
case
CERT_ALT_NAME_URL
:
match
=
!
wcsicmp
(
entry1
->
u
.
pwszURL
,
entry2
->
u
.
pwszURL
);
match
=
!
wcsicmp
(
entry1
->
pwszURL
,
entry2
->
pwszURL
);
break
;
case
CERT_ALT_NAME_DIRECTORY_NAME
:
match
=
(
entry1
->
u
.
DirectoryName
.
cbData
==
entry2
->
u
.
DirectoryName
.
cbData
)
&&
!
memcmp
(
entry1
->
u
.
DirectoryName
.
pbData
,
entry2
->
u
.
DirectoryName
.
pbData
,
entry1
->
u
.
DirectoryName
.
cbData
);
match
=
(
entry1
->
DirectoryName
.
cbData
==
entry2
->
DirectoryName
.
cbData
)
&&
!
memcmp
(
entry1
->
DirectoryName
.
pbData
,
entry2
->
DirectoryName
.
pbData
,
entry1
->
DirectoryName
.
cbData
);
break
;
default:
FIXME
(
"unimplemented for type %ld
\n
"
,
...
...
dlls/crypt32/decode.c
View file @
febb06ce
...
...
@@ -35,8 +35,6 @@
#include <stdio.h>
#include <stdlib.h>
#define NONAMELESSUNION
#include "windef.h"
#include "winbase.h"
#include "wincrypt.h"
...
...
@@ -3084,11 +3082,10 @@ static BOOL CRYPT_AsnDecodeAltNameEntry(const BYTE *pbEncoded, DWORD cbEncoded,
DWORD
i
;
for
(
i
=
0
;
i
<
dataLen
;
i
++
)
entry
->
u
.
pwszURL
[
i
]
=
(
WCHAR
)
pbEncoded
[
1
+
lenBytes
+
i
];
entry
->
u
.
pwszURL
[
i
]
=
0
;
TRACE
(
"URL is %p (%s)
\n
"
,
entry
->
u
.
pwszURL
,
debugstr_w
(
entry
->
u
.
pwszURL
));
entry
->
pwszURL
[
i
]
=
(
WCHAR
)
pbEncoded
[
1
+
lenBytes
+
i
];
entry
->
pwszURL
[
i
]
=
0
;
TRACE
(
"URL is %p (%s)
\n
"
,
entry
->
pwszURL
,
debugstr_w
(
entry
->
pwszURL
));
break
;
}
case
4
:
/* directoryName */
...
...
@@ -3099,14 +3096,14 @@ static BOOL CRYPT_AsnDecodeAltNameEntry(const BYTE *pbEncoded, DWORD cbEncoded,
/* The next data pointer is in the pwszURL spot, that is,
* the first 4 bytes. Need to move it to the next spot.
*/
entry
->
u
.
IPAddress
.
pbData
=
(
LPBYTE
)
entry
->
u
.
pwszURL
;
entry
->
u
.
IPAddress
.
cbData
=
dataLen
;
memcpy
(
entry
->
u
.
IPAddress
.
pbData
,
pbEncoded
+
1
+
lenBytes
,
entry
->
IPAddress
.
pbData
=
(
LPBYTE
)
entry
->
pwszURL
;
entry
->
IPAddress
.
cbData
=
dataLen
;
memcpy
(
entry
->
IPAddress
.
pbData
,
pbEncoded
+
1
+
lenBytes
,
dataLen
);
break
;
case
8
:
/* registeredID */
ret
=
CRYPT_AsnDecodeOidIgnoreTag
(
pbEncoded
,
cbEncoded
,
0
,
&
entry
->
u
.
pszRegisteredID
,
&
dataLen
,
NULL
);
&
entry
->
pszRegisteredID
,
&
dataLen
,
NULL
);
break
;
}
}
...
...
@@ -3125,7 +3122,7 @@ static BOOL CRYPT_AsnDecodeAltNameInternal(const BYTE *pbEncoded,
offsetof
(
CERT_ALT_NAME_INFO
,
rgAltEntry
),
sizeof
(
CERT_ALT_NAME_INFO
),
CRYPT_AsnDecodeAltNameEntry
,
sizeof
(
CERT_ALT_NAME_ENTRY
),
TRUE
,
offsetof
(
CERT_ALT_NAME_ENTRY
,
u
.
pwszURL
)
};
offsetof
(
CERT_ALT_NAME_ENTRY
,
pwszURL
)
};
TRACE
(
"%p, %ld, %08lx, %p, %ld, %p
\n
"
,
pbEncoded
,
cbEncoded
,
dwFlags
,
pvStructInfo
,
*
pcbStructInfo
,
pcbDecoded
);
...
...
@@ -3217,7 +3214,7 @@ static BOOL CRYPT_AsnDecodeAccessDescription(const BYTE *pbEncoded,
offsetof
(
CERT_ACCESS_DESCRIPTION
,
pszAccessMethod
),
0
},
{
0
,
offsetof
(
CERT_ACCESS_DESCRIPTION
,
AccessLocation
),
CRYPT_AsnDecodeAltNameEntry
,
sizeof
(
CERT_ALT_NAME_ENTRY
),
FALSE
,
TRUE
,
offsetof
(
CERT_ACCESS_DESCRIPTION
,
AccessLocation
.
u
.
pwszURL
),
0
},
TRUE
,
offsetof
(
CERT_ACCESS_DESCRIPTION
,
AccessLocation
.
pwszURL
),
0
},
};
CERT_ACCESS_DESCRIPTION
*
descr
=
pvStructInfo
;
...
...
@@ -5268,11 +5265,11 @@ static BOOL CRYPT_AsnDecodeDistPointName(const BYTE *pbEncoded,
{
struct
AsnArrayDescriptor
arrayDesc
=
{
ASN_CONTEXT
|
ASN_CONSTRUCTOR
|
0
,
offsetof
(
CRL_DIST_POINT_NAME
,
u
.
FullName
.
cAltEntry
),
offsetof
(
CRL_DIST_POINT_NAME
,
u
.
FullName
.
rgAltEntry
),
FINALMEMBERSIZE
(
CRL_DIST_POINT_NAME
,
u
),
offsetof
(
CRL_DIST_POINT_NAME
,
FullName
.
cAltEntry
),
offsetof
(
CRL_DIST_POINT_NAME
,
FullName
.
rgAltEntry
),
FINALMEMBERSIZE
(
CRL_DIST_POINT_NAME
,
FullName
),
CRYPT_AsnDecodeAltNameEntry
,
sizeof
(
CERT_ALT_NAME_ENTRY
),
TRUE
,
offsetof
(
CERT_ALT_NAME_ENTRY
,
u
.
pwszURL
)
};
offsetof
(
CERT_ALT_NAME_ENTRY
,
pwszURL
)
};
BYTE
lenBytes
=
GET_LEN_BYTES
(
pbEncoded
[
1
]);
DWORD
nameLen
;
...
...
@@ -5282,7 +5279,7 @@ static BOOL CRYPT_AsnDecodeDistPointName(const BYTE *pbEncoded,
pbEncoded
+
1
+
lenBytes
,
cbEncoded
-
1
-
lenBytes
,
dwFlags
,
NULL
,
NULL
,
&
nameLen
,
NULL
);
bytesNeeded
=
sizeof
(
CRL_DIST_POINT_NAME
)
+
nameLen
-
FINALMEMBERSIZE
(
CRL_DIST_POINT_NAME
,
u
);
FINALMEMBERSIZE
(
CRL_DIST_POINT_NAME
,
FullName
);
}
else
bytesNeeded
=
sizeof
(
CRL_DIST_POINT_NAME
);
...
...
@@ -5306,7 +5303,7 @@ static BOOL CRYPT_AsnDecodeDistPointName(const BYTE *pbEncoded,
name
->
dwDistPointNameChoice
=
CRL_DIST_POINT_FULL_NAME
;
ret
=
CRYPT_AsnDecodeArray
(
&
arrayDesc
,
pbEncoded
+
1
+
lenBytes
,
cbEncoded
-
1
-
lenBytes
,
dwFlags
,
NULL
,
&
name
->
u
.
FullName
.
cAltEntry
,
&
nameLen
,
dwFlags
,
NULL
,
&
name
->
FullName
.
cAltEntry
,
&
nameLen
,
NULL
);
}
else
...
...
@@ -5329,7 +5326,7 @@ static BOOL CRYPT_AsnDecodeDistPoint(const BYTE *pbEncoded, DWORD cbEncoded,
{
ASN_CONTEXT
|
ASN_CONSTRUCTOR
|
0
,
offsetof
(
CRL_DIST_POINT
,
DistPointName
),
CRYPT_AsnDecodeDistPointName
,
sizeof
(
CRL_DIST_POINT_NAME
),
TRUE
,
TRUE
,
offsetof
(
CRL_DIST_POINT
,
DistPointName
.
u
.
FullName
.
rgAltEntry
),
0
},
DistPointName
.
FullName
.
rgAltEntry
),
0
},
{
ASN_CONTEXT
|
1
,
offsetof
(
CRL_DIST_POINT
,
ReasonFlags
),
CRYPT_AsnDecodeBitsInternal
,
sizeof
(
CRYPT_BIT_BLOB
),
TRUE
,
TRUE
,
offsetof
(
CRL_DIST_POINT
,
ReasonFlags
.
pbData
),
0
},
...
...
@@ -5342,7 +5339,7 @@ static BOOL CRYPT_AsnDecodeDistPoint(const BYTE *pbEncoded, DWORD cbEncoded,
ret
=
CRYPT_AsnDecodeSequence
(
items
,
ARRAY_SIZE
(
items
),
pbEncoded
,
cbEncoded
,
dwFlags
,
NULL
,
pvStructInfo
,
pcbStructInfo
,
pcbDecoded
,
point
?
point
->
DistPointName
.
u
.
FullName
.
rgAltEntry
:
NULL
);
pcbDecoded
,
point
?
point
->
DistPointName
.
FullName
.
rgAltEntry
:
NULL
);
return
ret
;
}
...
...
@@ -5362,7 +5359,7 @@ static BOOL WINAPI CRYPT_AsnDecodeCRLDistPoints(DWORD dwCertEncodingType,
offsetof
(
CRL_DIST_POINTS_INFO
,
rgDistPoint
),
sizeof
(
CRL_DIST_POINTS_INFO
),
CRYPT_AsnDecodeDistPoint
,
sizeof
(
CRL_DIST_POINT
),
TRUE
,
offsetof
(
CRL_DIST_POINT
,
DistPointName
.
u
.
FullName
.
rgAltEntry
)
};
offsetof
(
CRL_DIST_POINT
,
DistPointName
.
FullName
.
rgAltEntry
)
};
CRL_DIST_POINTS_INFO
*
info
=
pvStructInfo
;
if
(
pvStructInfo
&&
!
(
dwFlags
&
CRYPT_DECODE_ALLOC_FLAG
))
...
...
@@ -5427,7 +5424,7 @@ static BOOL WINAPI CRYPT_AsnDecodeIssuingDistPoint(DWORD dwCertEncodingType,
DistPointName
),
CRYPT_AsnDecodeDistPointName
,
sizeof
(
CRL_DIST_POINT_NAME
),
TRUE
,
TRUE
,
offsetof
(
CRL_ISSUING_DIST_POINT
,
DistPointName
.
u
.
FullName
.
rgAltEntry
),
0
},
DistPointName
.
FullName
.
rgAltEntry
),
0
},
{
ASN_CONTEXT
|
1
,
offsetof
(
CRL_ISSUING_DIST_POINT
,
fOnlyContainsUserCerts
),
CRYPT_AsnDecodeBool
,
sizeof
(
BOOL
),
TRUE
,
FALSE
,
0
},
...
...
@@ -5513,7 +5510,7 @@ static BOOL CRYPT_AsnDecodeSubtree(const BYTE *pbEncoded,
struct
AsnDecodeSequenceItem
items
[]
=
{
{
0
,
offsetof
(
CERT_GENERAL_SUBTREE
,
Base
),
CRYPT_AsnDecodeAltNameEntry
,
sizeof
(
CERT_ALT_NAME_ENTRY
),
TRUE
,
TRUE
,
offsetof
(
CERT_ALT_NAME_ENTRY
,
u
.
pwszURL
),
0
},
offsetof
(
CERT_ALT_NAME_ENTRY
,
pwszURL
),
0
},
{
ASN_CONTEXT
|
0
,
offsetof
(
CERT_GENERAL_SUBTREE
,
dwMinimum
),
CRYPT_AsnDecodeIntInternal
,
sizeof
(
DWORD
),
TRUE
,
FALSE
,
0
,
0
},
{
ASN_CONTEXT
|
1
,
offsetof
(
CERT_GENERAL_SUBTREE
,
fMaximum
),
...
...
@@ -5527,7 +5524,7 @@ static BOOL CRYPT_AsnDecodeSubtree(const BYTE *pbEncoded,
ret
=
CRYPT_AsnDecodeSequence
(
items
,
ARRAY_SIZE
(
items
),
pbEncoded
,
cbEncoded
,
dwFlags
,
NULL
,
pvStructInfo
,
pcbStructInfo
,
pcbDecoded
,
subtree
?
subtree
->
Base
.
u
.
pwszURL
:
NULL
);
pcbDecoded
,
subtree
?
subtree
->
Base
.
pwszURL
:
NULL
);
if
(
pcbDecoded
)
{
TRACE
(
"%ld
\n
"
,
*
pcbDecoded
);
...
...
@@ -5550,7 +5547,7 @@ static BOOL CRYPT_AsnDecodePermittedSubtree(const BYTE *pbEncoded,
MEMBERSIZE
(
CERT_NAME_CONSTRAINTS_INFO
,
cPermittedSubtree
,
cExcludedSubtree
),
CRYPT_AsnDecodeSubtree
,
sizeof
(
CERT_GENERAL_SUBTREE
),
TRUE
,
offsetof
(
CERT_GENERAL_SUBTREE
,
Base
.
u
.
pwszURL
)
};
offsetof
(
CERT_GENERAL_SUBTREE
,
Base
.
pwszURL
)
};
TRACE
(
"%p, %ld, %08lx, %p, %ld, %p
\n
"
,
pbEncoded
,
cbEncoded
,
dwFlags
,
pvStructInfo
,
*
pcbStructInfo
,
pcbDecoded
);
...
...
@@ -5570,7 +5567,7 @@ static BOOL CRYPT_AsnDecodeExcludedSubtree(const BYTE *pbEncoded,
offsetof
(
CERT_NAME_CONSTRAINTS_INFO
,
rgExcludedSubtree
),
FINALMEMBERSIZE
(
CERT_NAME_CONSTRAINTS_INFO
,
cExcludedSubtree
),
CRYPT_AsnDecodeSubtree
,
sizeof
(
CERT_GENERAL_SUBTREE
),
TRUE
,
offsetof
(
CERT_GENERAL_SUBTREE
,
Base
.
u
.
pwszURL
)
};
offsetof
(
CERT_GENERAL_SUBTREE
,
Base
.
pwszURL
)
};
TRACE
(
"%p, %ld, %08lx, %p, %ld, %p
\n
"
,
pbEncoded
,
cbEncoded
,
dwFlags
,
pvStructInfo
,
*
pcbStructInfo
,
pcbDecoded
);
...
...
@@ -5801,7 +5798,7 @@ static BOOL CRYPT_AsnDecodeCMSSignerId(const BYTE *pbEncoded,
if
(
*
pbEncoded
==
ASN_SEQUENCEOF
)
{
ret
=
CRYPT_AsnDecodeIssuerSerialNumber
(
pbEncoded
,
cbEncoded
,
dwFlags
,
id
?
&
id
->
u
.
IssuerSerialNumber
:
NULL
,
pcbStructInfo
,
pcbDecoded
);
id
?
&
id
->
IssuerSerialNumber
:
NULL
,
pcbStructInfo
,
pcbDecoded
);
if
(
ret
)
{
if
(
id
)
...
...
@@ -5816,7 +5813,7 @@ static BOOL CRYPT_AsnDecodeCMSSignerId(const BYTE *pbEncoded,
else
if
(
*
pbEncoded
==
(
ASN_CONTEXT
|
0
))
{
ret
=
CRYPT_AsnDecodeOctets
(
pbEncoded
,
cbEncoded
,
dwFlags
,
id
?
&
id
->
u
.
KeyId
:
NULL
,
pcbStructInfo
,
pcbDecoded
);
id
?
&
id
->
KeyId
:
NULL
,
pcbStructInfo
,
pcbDecoded
);
if
(
ret
)
{
if
(
id
)
...
...
@@ -5843,7 +5840,7 @@ static BOOL CRYPT_AsnDecodeCMSSignerInfoInternal(const BYTE *pbEncoded,
CRYPT_AsnDecodeIntInternal
,
sizeof
(
DWORD
),
FALSE
,
FALSE
,
0
,
0
},
{
0
,
offsetof
(
CMSG_CMS_SIGNER_INFO
,
SignerId
),
CRYPT_AsnDecodeCMSSignerId
,
sizeof
(
CERT_ID
),
FALSE
,
TRUE
,
offsetof
(
CMSG_CMS_SIGNER_INFO
,
SignerId
.
u
.
KeyId
.
pbData
),
0
},
offsetof
(
CMSG_CMS_SIGNER_INFO
,
SignerId
.
KeyId
.
pbData
),
0
},
{
ASN_SEQUENCEOF
,
offsetof
(
CMSG_CMS_SIGNER_INFO
,
HashAlgorithm
),
CRYPT_AsnDecodeAlgorithmId
,
sizeof
(
CRYPT_ALGORITHM_IDENTIFIER
),
FALSE
,
TRUE
,
offsetof
(
CMSG_CMS_SIGNER_INFO
,
HashAlgorithm
.
pszObjId
),
0
},
...
...
@@ -5870,7 +5867,7 @@ static BOOL CRYPT_AsnDecodeCMSSignerInfoInternal(const BYTE *pbEncoded,
ret
=
CRYPT_AsnDecodeSequence
(
items
,
ARRAY_SIZE
(
items
),
pbEncoded
,
cbEncoded
,
dwFlags
,
NULL
,
pvStructInfo
,
pcbStructInfo
,
pcbDecoded
,
info
?
info
->
SignerId
.
u
.
KeyId
.
pbData
:
NULL
);
pcbDecoded
,
info
?
info
->
SignerId
.
KeyId
.
pbData
:
NULL
);
return
ret
;
}
...
...
@@ -5898,7 +5895,7 @@ static BOOL WINAPI CRYPT_AsnDecodeCMSSignerInfo(DWORD dwCertEncodingType,
if
(
dwFlags
&
CRYPT_DECODE_ALLOC_FLAG
)
pvStructInfo
=
*
(
BYTE
**
)
pvStructInfo
;
info
=
pvStructInfo
;
info
->
SignerId
.
u
.
KeyId
.
pbData
=
((
BYTE
*
)
info
+
info
->
SignerId
.
KeyId
.
pbData
=
((
BYTE
*
)
info
+
sizeof
(
CMSG_CMS_SIGNER_INFO
));
ret
=
CRYPT_AsnDecodeCMSSignerInfoInternal
(
pbEncoded
,
cbEncoded
,
dwFlags
&
~
CRYPT_DECODE_ALLOC_FLAG
,
pvStructInfo
,
...
...
@@ -5926,7 +5923,7 @@ static BOOL CRYPT_DecodeSignerArray(const BYTE *pbEncoded, DWORD cbEncoded,
offsetof
(
CRYPT_SIGNED_INFO
,
rgSignerInfo
),
FINALMEMBERSIZE
(
CRYPT_SIGNED_INFO
,
cSignerInfo
),
CRYPT_AsnDecodeCMSSignerInfoInternal
,
sizeof
(
CMSG_CMS_SIGNER_INFO
),
TRUE
,
offsetof
(
CMSG_CMS_SIGNER_INFO
,
SignerId
.
u
.
KeyId
.
pbData
)
};
offsetof
(
CMSG_CMS_SIGNER_INFO
,
SignerId
.
KeyId
.
pbData
)
};
TRACE
(
"%p, %ld, %08lx, %p, %ld, %p
\n
"
,
pbEncoded
,
cbEncoded
,
dwFlags
,
pvStructInfo
,
*
pcbStructInfo
,
pcbDecoded
);
...
...
@@ -5984,10 +5981,10 @@ static BOOL CRYPT_AsnDecodeRecipientInfo(const BYTE *pbEncoded, DWORD cbEncoded,
{
ASN_INTEGER
,
offsetof
(
CMSG_KEY_TRANS_RECIPIENT_INFO
,
dwVersion
),
CRYPT_AsnDecodeIntInternal
,
sizeof
(
DWORD
),
FALSE
,
FALSE
,
0
,
0
},
{
ASN_SEQUENCEOF
,
offsetof
(
CMSG_KEY_TRANS_RECIPIENT_INFO
,
RecipientId
.
u
.
IssuerSerialNumber
),
CRYPT_AsnDecodeIssuerSerialNumber
,
RecipientId
.
IssuerSerialNumber
),
CRYPT_AsnDecodeIssuerSerialNumber
,
sizeof
(
CERT_ISSUER_SERIAL_NUMBER
),
FALSE
,
TRUE
,
offsetof
(
CMSG_KEY_TRANS_RECIPIENT_INFO
,
RecipientId
.
u
.
IssuerSerialNumber
.
Issuer
.
pbData
),
0
},
RecipientId
.
IssuerSerialNumber
.
Issuer
.
pbData
),
0
},
{
ASN_SEQUENCEOF
,
offsetof
(
CMSG_KEY_TRANS_RECIPIENT_INFO
,
KeyEncryptionAlgorithm
),
CRYPT_AsnDecodeAlgorithmId
,
sizeof
(
CRYPT_ALGORITHM_IDENTIFIER
),
FALSE
,
TRUE
,
...
...
@@ -6003,7 +6000,7 @@ static BOOL CRYPT_AsnDecodeRecipientInfo(const BYTE *pbEncoded, DWORD cbEncoded,
ret
=
CRYPT_AsnDecodeSequence
(
items
,
ARRAY_SIZE
(
items
),
pbEncoded
,
cbEncoded
,
dwFlags
,
NULL
,
pvStructInfo
,
pcbStructInfo
,
pcbDecoded
,
info
?
info
->
RecipientId
.
u
.
IssuerSerialNumber
.
Issuer
.
pbData
:
pcbDecoded
,
info
?
info
->
RecipientId
.
IssuerSerialNumber
.
Issuer
.
pbData
:
NULL
);
if
(
info
)
info
->
RecipientId
.
dwIdChoice
=
CERT_ID_ISSUER_SERIAL_NUMBER
;
...
...
@@ -6022,7 +6019,7 @@ static BOOL CRYPT_DecodeRecipientInfoArray(const BYTE *pbEncoded,
MEMBERSIZE
(
CRYPT_ENVELOPED_DATA
,
cRecipientInfo
,
encryptedContentInfo
),
CRYPT_AsnDecodeRecipientInfo
,
sizeof
(
CMSG_KEY_TRANS_RECIPIENT_INFO
),
TRUE
,
offsetof
(
CMSG_KEY_TRANS_RECIPIENT_INFO
,
RecipientId
.
u
.
IssuerSerialNumber
.
Issuer
.
pbData
)
};
RecipientId
.
IssuerSerialNumber
.
Issuer
.
pbData
)
};
TRACE
(
"%p, %ld, %08lx, %p, %ld, %p
\n
"
,
pbEncoded
,
cbEncoded
,
dwFlags
,
pvStructInfo
,
*
pcbStructInfo
,
pcbDecoded
);
...
...
@@ -6407,7 +6404,7 @@ static BOOL CRYPT_AsnDecodeCertStatus(const BYTE *pbEncoded,
{
*
(
DWORD
*
)
pvStructInfo
=
0
;
*
(
OCSP_BASIC_REVOKED_INFO
**
)((
char
*
)
pvStructInfo
+
FIELD_OFFSET
(
OCSP_BASIC_RESPONSE_ENTRY
,
u
.
pRevokedInfo
)
+
FIELD_OFFSET
(
OCSP_BASIC_RESPONSE_ENTRY
,
pRevokedInfo
)
-
FIELD_OFFSET
(
OCSP_BASIC_RESPONSE_ENTRY
,
dwCertStatus
))
=
NULL
;
}
*
pcbStructInfo
=
bytesNeeded
;
...
...
@@ -6452,7 +6449,7 @@ static BOOL CRYPT_AsnDecodeCertStatus(const BYTE *pbEncoded,
{
*
(
DWORD
*
)
pvStructInfo
=
1
;
info
=
*
(
OCSP_BASIC_REVOKED_INFO
**
)((
char
*
)
pvStructInfo
+
FIELD_OFFSET
(
OCSP_BASIC_RESPONSE_ENTRY
,
u
.
pRevokedInfo
)
+
FIELD_OFFSET
(
OCSP_BASIC_RESPONSE_ENTRY
,
pRevokedInfo
)
-
FIELD_OFFSET
(
OCSP_BASIC_RESPONSE_ENTRY
,
dwCertStatus
));
info
->
RevocationDate
=
date
;
}
...
...
@@ -6490,7 +6487,7 @@ static BOOL CRYPT_AsnDecodeOCSPBasicResponseEntry(const BYTE *pbEncoded, DWORD c
offsetof
(
OCSP_BASIC_RESPONSE_ENTRY
,
CertId
.
SerialNumber
.
pbData
),
0
},
{
0
,
offsetof
(
OCSP_BASIC_RESPONSE_ENTRY
,
dwCertStatus
),
CRYPT_AsnDecodeCertStatus
,
sizeof
(
DWORD
),
FALSE
,
TRUE
,
offsetof
(
OCSP_BASIC_RESPONSE_ENTRY
,
u
.
pRevokedInfo
),
0
},
offsetof
(
OCSP_BASIC_RESPONSE_ENTRY
,
pRevokedInfo
),
0
},
{
ASN_GENERALTIME
,
offsetof
(
OCSP_BASIC_RESPONSE_ENTRY
,
ThisUpdate
),
CRYPT_AsnDecodeGeneralizedTime
,
sizeof
(
FILETIME
),
FALSE
,
FALSE
,
0
,
0
},
...
...
@@ -6562,7 +6559,7 @@ static BOOL CRYPT_AsnDecodeResponderIDByName(const BYTE *pbEncoded,
{
info
->
dwResponderIdChoice
=
1
;
blob
=
&
info
->
u
.
ByNameResponderId
;
blob
=
&
info
->
ByNameResponderId
;
blob
->
cbData
=
dataLen
;
if
(
dwFlags
&
CRYPT_DECODE_NOCOPY_FLAG
)
blob
->
pbData
=
(
BYTE
*
)
pbEncoded
;
...
...
@@ -6645,7 +6642,7 @@ static BOOL CRYPT_AsnDecodeResponderIDByKey(const BYTE *pbEncoded,
if
(
pvStructInfo
&&
*
pcbStructInfo
>=
bytesNeeded
)
{
info
->
dwResponderIdChoice
=
2
;
blob
=
&
info
->
u
.
ByKeyResponderId
;
blob
=
&
info
->
ByKeyResponderId
;
blob
->
cbData
=
len
;
if
(
dwFlags
&
CRYPT_DECODE_NOCOPY_FLAG
)
blob
->
pbData
=
(
BYTE
*
)
pbEncoded
;
...
...
@@ -6705,7 +6702,7 @@ static BOOL WINAPI CRYPT_AsnDecodeOCSPBasicResponse(DWORD dwCertEncodingType,
struct
AsnDecodeSequenceItem
items
[]
=
{
{
0
,
0
,
CRYPT_AsnDecodeResponderID
,
offsetof
(
OCSP_BASIC_RESPONSE_INFO
,
ProducedAt
),
FALSE
,
TRUE
,
offsetof
(
OCSP_BASIC_RESPONSE_INFO
,
u
.
ByNameResponderId
.
pbData
),
0
},
offsetof
(
OCSP_BASIC_RESPONSE_INFO
,
ByNameResponderId
.
pbData
),
0
},
{
ASN_GENERALTIME
,
offsetof
(
OCSP_BASIC_RESPONSE_INFO
,
ProducedAt
),
CRYPT_AsnDecodeGeneralizedTime
,
sizeof
(
FILETIME
),
FALSE
,
FALSE
,
0
,
0
},
...
...
dlls/crypt32/encode.c
View file @
febb06ce
...
...
@@ -35,8 +35,6 @@
#include <stdio.h>
#include <stdlib.h>
#define NONAMELESSUNION
#include "windef.h"
#include "winbase.h"
#include "wincrypt.h"
...
...
@@ -2407,15 +2405,15 @@ static BOOL WINAPI CRYPT_AsnEncodeAltNameEntry(DWORD dwCertEncodingType,
case
CERT_ALT_NAME_DNS_NAME
:
case
CERT_ALT_NAME_URL
:
tag
=
ASN_CONTEXT
|
(
entry
->
dwAltNameChoice
-
1
);
if
(
entry
->
u
.
pwszURL
)
if
(
entry
->
pwszURL
)
{
DWORD
i
;
/* Not + 1: don't encode the NULL-terminator */
dataLen
=
lstrlenW
(
entry
->
u
.
pwszURL
);
dataLen
=
lstrlenW
(
entry
->
pwszURL
);
for
(
i
=
0
;
ret
&&
i
<
dataLen
;
i
++
)
{
if
(
entry
->
u
.
pwszURL
[
i
]
>
0x7f
)
if
(
entry
->
pwszURL
[
i
]
>
0x7f
)
{
SetLastError
(
CRYPT_E_INVALID_IA5_STRING
);
ret
=
FALSE
;
...
...
@@ -2428,16 +2426,16 @@ static BOOL WINAPI CRYPT_AsnEncodeAltNameEntry(DWORD dwCertEncodingType,
break
;
case
CERT_ALT_NAME_DIRECTORY_NAME
:
tag
=
ASN_CONTEXT
|
ASN_CONSTRUCTOR
|
(
entry
->
dwAltNameChoice
-
1
);
dataLen
=
entry
->
u
.
DirectoryName
.
cbData
;
dataLen
=
entry
->
DirectoryName
.
cbData
;
break
;
case
CERT_ALT_NAME_IP_ADDRESS
:
tag
=
ASN_CONTEXT
|
(
entry
->
dwAltNameChoice
-
1
);
dataLen
=
entry
->
u
.
IPAddress
.
cbData
;
dataLen
=
entry
->
IPAddress
.
cbData
;
break
;
case
CERT_ALT_NAME_REGISTERED_ID
:
{
struct
AsnEncodeTagSwappedItem
swapped
=
{
ASN_CONTEXT
|
(
entry
->
dwAltNameChoice
-
1
),
entry
->
u
.
pszRegisteredID
,
{
ASN_CONTEXT
|
(
entry
->
dwAltNameChoice
-
1
),
entry
->
pszRegisteredID
,
CRYPT_AsnEncodeOid
};
return
CRYPT_AsnEncodeSwapTag
(
0
,
NULL
,
&
swapped
,
0
,
NULL
,
pbEncoded
,
...
...
@@ -2478,14 +2476,14 @@ static BOOL WINAPI CRYPT_AsnEncodeAltNameEntry(DWORD dwCertEncodingType,
DWORD
i
;
for
(
i
=
0
;
i
<
dataLen
;
i
++
)
*
pbEncoded
++
=
(
BYTE
)
entry
->
u
.
pwszURL
[
i
];
*
pbEncoded
++
=
(
BYTE
)
entry
->
pwszURL
[
i
];
break
;
}
case
CERT_ALT_NAME_DIRECTORY_NAME
:
memcpy
(
pbEncoded
,
entry
->
u
.
DirectoryName
.
pbData
,
dataLen
);
memcpy
(
pbEncoded
,
entry
->
DirectoryName
.
pbData
,
dataLen
);
break
;
case
CERT_ALT_NAME_IP_ADDRESS
:
memcpy
(
pbEncoded
,
entry
->
u
.
IPAddress
.
pbData
,
dataLen
);
memcpy
(
pbEncoded
,
entry
->
IPAddress
.
pbData
,
dataLen
);
break
;
}
if
(
ret
)
...
...
@@ -3757,7 +3755,7 @@ static BOOL CRYPT_AsnEncodeDistPoint(const CRL_DIST_POINT *distPoint,
break
;
case
CRL_DIST_POINT_FULL_NAME
:
swapped
[
cSwapped
].
tag
=
ASN_CONTEXT
|
ASN_CONSTRUCTOR
|
0
;
swapped
[
cSwapped
].
pvStructInfo
=
&
distPoint
->
DistPointName
.
u
.
FullName
;
swapped
[
cSwapped
].
pvStructInfo
=
&
distPoint
->
DistPointName
.
FullName
;
swapped
[
cSwapped
].
encodeFunc
=
CRYPT_AsnEncodeAltName
;
constructed
.
tag
=
0
;
constructed
.
pvStructInfo
=
&
swapped
[
cSwapped
];
...
...
@@ -3972,7 +3970,7 @@ static BOOL WINAPI CRYPT_AsnEncodeIssuingDistPoint(DWORD dwCertEncodingType,
break
;
case
CRL_DIST_POINT_FULL_NAME
:
swapped
[
cSwapped
].
tag
=
ASN_CONTEXT
|
ASN_CONSTRUCTOR
|
0
;
swapped
[
cSwapped
].
pvStructInfo
=
&
point
->
DistPointName
.
u
.
FullName
;
swapped
[
cSwapped
].
pvStructInfo
=
&
point
->
DistPointName
.
FullName
;
swapped
[
cSwapped
].
encodeFunc
=
CRYPT_AsnEncodeAltName
;
constructed
.
tag
=
0
;
constructed
.
pvStructInfo
=
&
swapped
[
cSwapped
];
...
...
@@ -4275,7 +4273,7 @@ static BOOL WINAPI CRYPT_AsnEncodeCMSSignerInfo(DWORD dwCertEncodingType,
info
->
SignerId
.
dwIdChoice
!=
CERT_ID_KEY_IDENTIFIER
)
SetLastError
(
E_INVALIDARG
);
else
if
(
info
->
SignerId
.
dwIdChoice
==
CERT_ID_ISSUER_SERIAL_NUMBER
&&
!
info
->
SignerId
.
u
.
IssuerSerialNumber
.
Issuer
.
cbData
)
!
info
->
SignerId
.
IssuerSerialNumber
.
Issuer
.
cbData
)
SetLastError
(
E_INVALIDARG
);
else
{
...
...
@@ -4288,7 +4286,7 @@ static BOOL WINAPI CRYPT_AsnEncodeCMSSignerInfo(DWORD dwCertEncodingType,
if
(
info
->
SignerId
.
dwIdChoice
==
CERT_ID_ISSUER_SERIAL_NUMBER
)
{
items
[
cItem
].
pvStructInfo
=
&
info
->
SignerId
.
u
.
IssuerSerialNumber
.
Issuer
;
&
info
->
SignerId
.
IssuerSerialNumber
.
Issuer
;
items
[
cItem
].
encodeFunc
=
CRYPT_AsnEncodeIssuerSerialNumber
;
cItem
++
;
...
...
@@ -4296,7 +4294,7 @@ static BOOL WINAPI CRYPT_AsnEncodeCMSSignerInfo(DWORD dwCertEncodingType,
else
{
swapped
[
cSwapped
].
tag
=
ASN_CONTEXT
|
0
;
swapped
[
cSwapped
].
pvStructInfo
=
&
info
->
SignerId
.
u
.
KeyId
;
swapped
[
cSwapped
].
pvStructInfo
=
&
info
->
SignerId
.
KeyId
;
swapped
[
cSwapped
].
encodeFunc
=
CRYPT_AsnEncodeOctets
;
items
[
cItem
].
pvStructInfo
=
&
swapped
[
cSwapped
];
items
[
cItem
].
encodeFunc
=
CRYPT_AsnEncodeSwapTag
;
...
...
@@ -4426,7 +4424,7 @@ static BOOL WINAPI CRYPT_AsnEncodeRecipientInfo(DWORD dwCertEncodingType,
const
CMSG_KEY_TRANS_RECIPIENT_INFO
*
info
=
pvStructInfo
;
struct
AsnEncodeSequenceItem
items
[]
=
{
{
&
info
->
dwVersion
,
CRYPT_AsnEncodeInt
,
0
},
{
&
info
->
RecipientId
.
u
.
IssuerSerialNumber
,
{
&
info
->
RecipientId
.
IssuerSerialNumber
,
CRYPT_AsnEncodeIssuerSerialNumber
,
0
},
{
&
info
->
KeyEncryptionAlgorithm
,
CRYPT_AsnEncodeAlgorithmIdWithNullParams
,
0
},
...
...
dlls/crypt32/msg.c
View file @
febb06ce
...
...
@@ -17,7 +17,7 @@
*/
#include <stdarg.h>
#define NONAMELESSUNION
#include "windef.h"
#include "winbase.h"
#include "wincrypt.h"
...
...
@@ -665,19 +665,19 @@ static BOOL CRYPT_IsValidSigner(const CMSG_SIGNER_ENCODE_INFO_WITH_CMS *signer)
}
break
;
case
CERT_ID_ISSUER_SERIAL_NUMBER
:
if
(
!
signer
->
SignerId
.
u
.
IssuerSerialNumber
.
SerialNumber
.
cbData
)
if
(
!
signer
->
SignerId
.
IssuerSerialNumber
.
SerialNumber
.
cbData
)
{
SetLastError
(
E_INVALIDARG
);
return
FALSE
;
}
if
(
!
signer
->
SignerId
.
u
.
IssuerSerialNumber
.
Issuer
.
cbData
)
if
(
!
signer
->
SignerId
.
IssuerSerialNumber
.
Issuer
.
cbData
)
{
SetLastError
(
E_INVALIDARG
);
return
FALSE
;
}
break
;
case
CERT_ID_KEY_IDENTIFIER
:
if
(
!
signer
->
SignerId
.
u
.
KeyId
.
cbData
)
if
(
!
signer
->
SignerId
.
KeyId
.
cbData
)
{
SetLastError
(
E_INVALIDARG
);
return
FALSE
;
...
...
@@ -806,11 +806,11 @@ static BOOL CSignerInfo_Construct(CMSG_CMS_SIGNER_INFO *info,
if
(
in
->
cbSize
==
sizeof
(
CMSG_SIGNER_ENCODE_INFO
))
{
info
->
dwVersion
=
CMSG_SIGNER_INFO_V1
;
ret
=
CRYPT_ConstructBlob
(
&
info
->
SignerId
.
u
.
IssuerSerialNumber
.
Issuer
,
ret
=
CRYPT_ConstructBlob
(
&
info
->
SignerId
.
IssuerSerialNumber
.
Issuer
,
&
in
->
pCertInfo
->
Issuer
);
if
(
ret
)
ret
=
CRYPT_ConstructBlob
(
&
info
->
SignerId
.
u
.
IssuerSerialNumber
.
SerialNumber
,
&
info
->
SignerId
.
IssuerSerialNumber
.
SerialNumber
,
&
in
->
pCertInfo
->
SerialNumber
);
info
->
SignerId
.
dwIdChoice
=
CERT_ID_ISSUER_SERIAL_NUMBER
;
info
->
HashEncryptionAlgorithm
.
pszObjId
=
...
...
@@ -829,11 +829,11 @@ static BOOL CSignerInfo_Construct(CMSG_CMS_SIGNER_INFO *info,
if
(
!
in
->
SignerId
.
dwIdChoice
)
{
info
->
dwVersion
=
CMSG_SIGNER_INFO_V1
;
ret
=
CRYPT_ConstructBlob
(
&
info
->
SignerId
.
u
.
IssuerSerialNumber
.
Issuer
,
ret
=
CRYPT_ConstructBlob
(
&
info
->
SignerId
.
IssuerSerialNumber
.
Issuer
,
&
in
->
pCertInfo
->
Issuer
);
if
(
ret
)
ret
=
CRYPT_ConstructBlob
(
&
info
->
SignerId
.
u
.
IssuerSerialNumber
.
SerialNumber
,
&
info
->
SignerId
.
IssuerSerialNumber
.
SerialNumber
,
&
in
->
pCertInfo
->
SerialNumber
);
info
->
SignerId
.
dwIdChoice
=
CERT_ID_ISSUER_SERIAL_NUMBER
;
}
...
...
@@ -841,20 +841,20 @@ static BOOL CSignerInfo_Construct(CMSG_CMS_SIGNER_INFO *info,
{
info
->
dwVersion
=
CMSG_SIGNER_INFO_V1
;
info
->
SignerId
.
dwIdChoice
=
CERT_ID_ISSUER_SERIAL_NUMBER
;
ret
=
CRYPT_ConstructBlob
(
&
info
->
SignerId
.
u
.
IssuerSerialNumber
.
Issuer
,
&
in
->
SignerId
.
u
.
IssuerSerialNumber
.
Issuer
);
ret
=
CRYPT_ConstructBlob
(
&
info
->
SignerId
.
IssuerSerialNumber
.
Issuer
,
&
in
->
SignerId
.
IssuerSerialNumber
.
Issuer
);
if
(
ret
)
ret
=
CRYPT_ConstructBlob
(
&
info
->
SignerId
.
u
.
IssuerSerialNumber
.
SerialNumber
,
&
in
->
SignerId
.
u
.
IssuerSerialNumber
.
SerialNumber
);
&
info
->
SignerId
.
IssuerSerialNumber
.
SerialNumber
,
&
in
->
SignerId
.
IssuerSerialNumber
.
SerialNumber
);
}
else
{
/* Implicitly dwIdChoice == CERT_ID_KEY_IDENTIFIER */
info
->
dwVersion
=
CMSG_SIGNER_INFO_V3
;
info
->
SignerId
.
dwIdChoice
=
CERT_ID_KEY_IDENTIFIER
;
ret
=
CRYPT_ConstructBlob
(
&
info
->
SignerId
.
u
.
KeyId
,
&
in
->
SignerId
.
u
.
KeyId
);
ret
=
CRYPT_ConstructBlob
(
&
info
->
SignerId
.
KeyId
,
&
in
->
SignerId
.
KeyId
);
}
pEncrAlg
=
in
->
HashEncryptionAlgorithm
.
pszObjId
?
&
in
->
HashEncryptionAlgorithm
:
...
...
@@ -886,11 +886,11 @@ static void CSignerInfo_Free(CMSG_CMS_SIGNER_INFO *info)
if
(
info
->
SignerId
.
dwIdChoice
==
CERT_ID_ISSUER_SERIAL_NUMBER
)
{
CryptMemFree
(
info
->
SignerId
.
u
.
IssuerSerialNumber
.
Issuer
.
pbData
);
CryptMemFree
(
info
->
SignerId
.
u
.
IssuerSerialNumber
.
SerialNumber
.
pbData
);
CryptMemFree
(
info
->
SignerId
.
IssuerSerialNumber
.
Issuer
.
pbData
);
CryptMemFree
(
info
->
SignerId
.
IssuerSerialNumber
.
SerialNumber
.
pbData
);
}
else
CryptMemFree
(
info
->
SignerId
.
u
.
KeyId
.
pbData
);
CryptMemFree
(
info
->
SignerId
.
KeyId
.
pbData
);
CryptMemFree
(
info
->
HashAlgorithm
.
Parameters
.
pbData
);
CryptMemFree
(
info
->
HashEncryptionAlgorithm
.
Parameters
.
pbData
);
CryptMemFree
(
info
->
EncryptedHash
.
pbData
);
...
...
@@ -1625,7 +1625,7 @@ static BOOL CRYPT_ExportEncryptedKey(CMSG_CONTENT_ENCRYPT_INFO *info, DWORD i,
PFN_CMSG_EXPORT_KEY_TRANS
exportKeyFunc
=
NULL
;
HCRYPTOIDFUNCADDR
hFunc
=
NULL
;
CMSG_KEY_TRANS_RECIPIENT_ENCODE_INFO
*
encodeInfo
=
info
->
rgCmsRecipients
[
i
].
u
.
pKeyTrans
;
info
->
rgCmsRecipients
[
i
].
pKeyTrans
;
CMSG_KEY_TRANS_ENCRYPT_INFO
encryptInfo
;
BOOL
ret
;
...
...
@@ -1697,7 +1697,7 @@ static BOOL CContentEncryptInfo_Construct(CMSG_CONTENT_ENCRYPT_INFO *info,
info
->
rgCmsRecipients
[
i
].
dwRecipientChoice
=
CMSG_KEY_TRANS_RECIPIENT
;
encodeInfo
=
CryptMemAlloc
(
sizeof
(
*
encodeInfo
));
info
->
rgCmsRecipients
[
i
].
u
.
pKeyTrans
=
encodeInfo
;
info
->
rgCmsRecipients
[
i
].
pKeyTrans
=
encodeInfo
;
if
(
encodeInfo
)
{
encodeInfo
->
cbSize
=
sizeof
(
*
encodeInfo
);
...
...
@@ -1712,11 +1712,11 @@ static BOOL CContentEncryptInfo_Construct(CMSG_CONTENT_ENCRYPT_INFO *info,
&
cert
->
SubjectPublicKeyInfo
.
PublicKey
);
if
(
ret
)
ret
=
CRYPT_ConstructBlob
(
&
encodeInfo
->
RecipientId
.
u
.
IssuerSerialNumber
.
Issuer
,
&
encodeInfo
->
RecipientId
.
IssuerSerialNumber
.
Issuer
,
&
cert
->
Issuer
);
if
(
ret
)
ret
=
CRYPT_ConstructBlob
(
&
encodeInfo
->
RecipientId
.
u
.
IssuerSerialNumber
.
SerialNumber
,
&
encodeInfo
->
RecipientId
.
IssuerSerialNumber
.
SerialNumber
,
&
cert
->
SerialNumber
);
}
else
...
...
@@ -1742,15 +1742,15 @@ static void CContentEncryptInfo_Free(CMSG_CONTENT_ENCRYPT_INFO *info)
for
(
i
=
0
;
i
<
info
->
cRecipients
;
++
i
)
{
CMSG_KEY_TRANS_RECIPIENT_ENCODE_INFO
*
encodeInfo
=
info
->
rgCmsRecipients
[
i
].
u
.
pKeyTrans
;
info
->
rgCmsRecipients
[
i
].
pKeyTrans
;
CryptMemFree
(
encodeInfo
->
KeyEncryptionAlgorithm
.
pszObjId
);
CryptMemFree
(
encodeInfo
->
KeyEncryptionAlgorithm
.
Parameters
.
pbData
);
CryptMemFree
(
encodeInfo
->
RecipientPublicKey
.
pbData
);
CryptMemFree
(
encodeInfo
->
RecipientId
.
u
.
IssuerSerialNumber
.
Issuer
.
pbData
);
encodeInfo
->
RecipientId
.
IssuerSerialNumber
.
Issuer
.
pbData
);
CryptMemFree
(
encodeInfo
->
RecipientId
.
u
.
IssuerSerialNumber
.
SerialNumber
.
pbData
);
encodeInfo
->
RecipientId
.
IssuerSerialNumber
.
SerialNumber
.
pbData
);
CryptMemFree
(
encodeInfo
);
}
CryptMemFree
(
info
->
rgCmsRecipients
);
...
...
@@ -1764,11 +1764,11 @@ static BOOL CRecipientInfo_Construct(CMSG_KEY_TRANS_RECIPIENT_INFO *info,
info
->
dwVersion
=
CMSG_KEY_TRANS_PKCS_1_5_VERSION
;
info
->
RecipientId
.
dwIdChoice
=
CERT_ID_ISSUER_SERIAL_NUMBER
;
ret
=
CRYPT_ConstructBlob
(
&
info
->
RecipientId
.
u
.
IssuerSerialNumber
.
Issuer
,
ret
=
CRYPT_ConstructBlob
(
&
info
->
RecipientId
.
IssuerSerialNumber
.
Issuer
,
&
cert
->
Issuer
);
if
(
ret
)
ret
=
CRYPT_ConstructBlob
(
&
info
->
RecipientId
.
u
.
IssuerSerialNumber
.
SerialNumber
,
&
info
->
RecipientId
.
IssuerSerialNumber
.
SerialNumber
,
&
cert
->
SerialNumber
);
if
(
ret
)
ret
=
CRYPT_ConstructAlgorithmId
(
&
info
->
KeyEncryptionAlgorithm
,
...
...
@@ -1780,8 +1780,8 @@ static BOOL CRecipientInfo_Construct(CMSG_KEY_TRANS_RECIPIENT_INFO *info,
static
void
CRecipientInfo_Free
(
CMSG_KEY_TRANS_RECIPIENT_INFO
*
info
)
{
CryptMemFree
(
info
->
RecipientId
.
u
.
IssuerSerialNumber
.
Issuer
.
pbData
);
CryptMemFree
(
info
->
RecipientId
.
u
.
IssuerSerialNumber
.
SerialNumber
.
pbData
);
CryptMemFree
(
info
->
RecipientId
.
IssuerSerialNumber
.
Issuer
.
pbData
);
CryptMemFree
(
info
->
RecipientId
.
IssuerSerialNumber
.
SerialNumber
.
pbData
);
CryptMemFree
(
info
->
KeyEncryptionAlgorithm
.
pszObjId
);
CryptMemFree
(
info
->
KeyEncryptionAlgorithm
.
Parameters
.
pbData
);
CryptMemFree
(
info
->
EncryptedKey
.
pbData
);
...
...
@@ -2727,12 +2727,12 @@ static BOOL CRYPT_CopySignerInfo(void *pvData, DWORD *pcbData,
if
(
in
->
SignerId
.
dwIdChoice
==
CERT_ID_ISSUER_SERIAL_NUMBER
)
{
size
+=
in
->
SignerId
.
u
.
IssuerSerialNumber
.
Issuer
.
cbData
;
size
+=
in
->
SignerId
.
u
.
IssuerSerialNumber
.
SerialNumber
.
cbData
;
size
+=
in
->
SignerId
.
IssuerSerialNumber
.
Issuer
.
cbData
;
size
+=
in
->
SignerId
.
IssuerSerialNumber
.
SerialNumber
.
cbData
;
}
else
{
rdnSize
=
CRYPT_SizeOfKeyIdAsIssuerAndSerial
(
&
in
->
SignerId
.
u
.
KeyId
);
rdnSize
=
CRYPT_SizeOfKeyIdAsIssuerAndSerial
(
&
in
->
SignerId
.
KeyId
);
size
+=
rdnSize
;
}
if
(
in
->
HashAlgorithm
.
pszObjId
)
...
...
@@ -2765,13 +2765,13 @@ static BOOL CRYPT_CopySignerInfo(void *pvData, DWORD *pcbData,
if
(
in
->
SignerId
.
dwIdChoice
==
CERT_ID_ISSUER_SERIAL_NUMBER
)
{
CRYPT_CopyBlob
(
&
out
->
Issuer
,
&
in
->
SignerId
.
u
.
IssuerSerialNumber
.
Issuer
,
&
nextData
);
&
in
->
SignerId
.
IssuerSerialNumber
.
Issuer
,
&
nextData
);
CRYPT_CopyBlob
(
&
out
->
SerialNumber
,
&
in
->
SignerId
.
u
.
IssuerSerialNumber
.
SerialNumber
,
&
nextData
);
&
in
->
SignerId
.
IssuerSerialNumber
.
SerialNumber
,
&
nextData
);
}
else
ret
=
CRYPT_CopyKeyIdAsIssuerAndSerial
(
&
out
->
Issuer
,
&
out
->
SerialNumber
,
&
in
->
SignerId
.
u
.
KeyId
,
rdnSize
,
&
nextData
);
&
in
->
SignerId
.
KeyId
,
rdnSize
,
&
nextData
);
if
(
ret
)
{
CRYPT_CopyAlgorithmId
(
&
out
->
HashAlgorithm
,
&
in
->
HashAlgorithm
,
...
...
@@ -2799,11 +2799,11 @@ static BOOL CRYPT_CopyCMSSignerInfo(void *pvData, DWORD *pcbData,
if
(
in
->
SignerId
.
dwIdChoice
==
CERT_ID_ISSUER_SERIAL_NUMBER
)
{
size
+=
in
->
SignerId
.
u
.
IssuerSerialNumber
.
Issuer
.
cbData
;
size
+=
in
->
SignerId
.
u
.
IssuerSerialNumber
.
SerialNumber
.
cbData
;
size
+=
in
->
SignerId
.
IssuerSerialNumber
.
Issuer
.
cbData
;
size
+=
in
->
SignerId
.
IssuerSerialNumber
.
SerialNumber
.
cbData
;
}
else
size
+=
in
->
SignerId
.
u
.
KeyId
.
cbData
;
size
+=
in
->
SignerId
.
KeyId
.
cbData
;
if
(
in
->
HashAlgorithm
.
pszObjId
)
size
+=
strlen
(
in
->
HashAlgorithm
.
pszObjId
)
+
1
;
size
+=
in
->
HashAlgorithm
.
Parameters
.
cbData
;
...
...
@@ -2835,13 +2835,13 @@ static BOOL CRYPT_CopyCMSSignerInfo(void *pvData, DWORD *pcbData,
out
->
SignerId
.
dwIdChoice
=
in
->
SignerId
.
dwIdChoice
;
if
(
in
->
SignerId
.
dwIdChoice
==
CERT_ID_ISSUER_SERIAL_NUMBER
)
{
CRYPT_CopyBlob
(
&
out
->
SignerId
.
u
.
IssuerSerialNumber
.
Issuer
,
&
in
->
SignerId
.
u
.
IssuerSerialNumber
.
Issuer
,
&
nextData
);
CRYPT_CopyBlob
(
&
out
->
SignerId
.
u
.
IssuerSerialNumber
.
SerialNumber
,
&
in
->
SignerId
.
u
.
IssuerSerialNumber
.
SerialNumber
,
&
nextData
);
CRYPT_CopyBlob
(
&
out
->
SignerId
.
IssuerSerialNumber
.
Issuer
,
&
in
->
SignerId
.
IssuerSerialNumber
.
Issuer
,
&
nextData
);
CRYPT_CopyBlob
(
&
out
->
SignerId
.
IssuerSerialNumber
.
SerialNumber
,
&
in
->
SignerId
.
IssuerSerialNumber
.
SerialNumber
,
&
nextData
);
}
else
CRYPT_CopyBlob
(
&
out
->
SignerId
.
u
.
KeyId
,
&
in
->
SignerId
.
u
.
KeyId
,
&
nextData
);
CRYPT_CopyBlob
(
&
out
->
SignerId
.
KeyId
,
&
in
->
SignerId
.
KeyId
,
&
nextData
);
CRYPT_CopyAlgorithmId
(
&
out
->
HashAlgorithm
,
&
in
->
HashAlgorithm
,
&
nextData
);
CRYPT_CopyAlgorithmId
(
&
out
->
HashEncryptionAlgorithm
,
...
...
@@ -2866,12 +2866,12 @@ static BOOL CRYPT_CopySignerCertInfo(void *pvData, DWORD *pcbData,
if
(
in
->
SignerId
.
dwIdChoice
==
CERT_ID_ISSUER_SERIAL_NUMBER
)
{
size
+=
in
->
SignerId
.
u
.
IssuerSerialNumber
.
Issuer
.
cbData
;
size
+=
in
->
SignerId
.
u
.
IssuerSerialNumber
.
SerialNumber
.
cbData
;
size
+=
in
->
SignerId
.
IssuerSerialNumber
.
Issuer
.
cbData
;
size
+=
in
->
SignerId
.
IssuerSerialNumber
.
SerialNumber
.
cbData
;
}
else
{
rdnSize
=
CRYPT_SizeOfKeyIdAsIssuerAndSerial
(
&
in
->
SignerId
.
u
.
KeyId
);
rdnSize
=
CRYPT_SizeOfKeyIdAsIssuerAndSerial
(
&
in
->
SignerId
.
KeyId
);
size
+=
rdnSize
;
}
if
(
!
pvData
)
...
...
@@ -2894,14 +2894,14 @@ static BOOL CRYPT_CopySignerCertInfo(void *pvData, DWORD *pcbData,
if
(
in
->
SignerId
.
dwIdChoice
==
CERT_ID_ISSUER_SERIAL_NUMBER
)
{
CRYPT_CopyBlob
(
&
out
->
Issuer
,
&
in
->
SignerId
.
u
.
IssuerSerialNumber
.
Issuer
,
&
nextData
);
&
in
->
SignerId
.
IssuerSerialNumber
.
Issuer
,
&
nextData
);
CRYPT_CopyBlob
(
&
out
->
SerialNumber
,
&
in
->
SignerId
.
u
.
IssuerSerialNumber
.
SerialNumber
,
&
nextData
);
&
in
->
SignerId
.
IssuerSerialNumber
.
SerialNumber
,
&
nextData
);
ret
=
TRUE
;
}
else
ret
=
CRYPT_CopyKeyIdAsIssuerAndSerial
(
&
out
->
Issuer
,
&
out
->
SerialNumber
,
&
in
->
SignerId
.
u
.
KeyId
,
rdnSize
,
&
nextData
);
&
in
->
SignerId
.
KeyId
,
rdnSize
,
&
nextData
);
}
TRACE
(
"returning %d
\n
"
,
ret
);
return
ret
;
...
...
@@ -2975,7 +2975,7 @@ static BOOL CDecodeEnvelopedMsg_GetParam(CDecodeMsg *msg, DWORD dwParamType,
&
msg
->
u
.
enveloped_data
.
data
->
rgRecipientInfo
[
dwIndex
];
ret
=
CRYPT_CopyRecipientInfo
(
pvData
,
pcbData
,
&
recipientInfo
->
RecipientId
.
u
.
IssuerSerialNumber
);
&
recipientInfo
->
RecipientId
.
IssuerSerialNumber
);
}
else
SetLastError
(
CRYPT_E_INVALID_INDEX
);
...
...
@@ -3398,12 +3398,12 @@ static BOOL CDecodeSignedMsg_VerifySignature(CDecodeMsg *msg, PCERT_INFO info)
if
(
signerInfo
->
SignerId
.
dwIdChoice
==
CERT_ID_ISSUER_SERIAL_NUMBER
)
{
ret
=
CertCompareCertificateName
(
X509_ASN_ENCODING
,
&
signerInfo
->
SignerId
.
u
.
IssuerSerialNumber
.
Issuer
,
&
signerInfo
->
SignerId
.
IssuerSerialNumber
.
Issuer
,
&
info
->
Issuer
);
if
(
ret
)
{
ret
=
CertCompareIntegerBlob
(
&
signerInfo
->
SignerId
.
u
.
IssuerSerialNumber
.
SerialNumber
,
&
signerInfo
->
SignerId
.
IssuerSerialNumber
.
SerialNumber
,
&
info
->
SerialNumber
);
if
(
ret
)
break
;
...
...
dlls/crypt32/object.c
View file @
febb06ce
...
...
@@ -18,7 +18,7 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
#include <stdarg.h>
#define NONAMELESSUNION
#include "windef.h"
#include "winbase.h"
#include "wincrypt.h"
...
...
@@ -1248,12 +1248,12 @@ static BOOL CRYPT_FormatAltNameEntry(DWORD dwFormatStrType, DWORD indentLevel,
{
case
CERT_ALT_NAME_RFC822_NAME
:
LoadStringW
(
hInstance
,
IDS_ALT_NAME_RFC822_NAME
,
buf
,
ARRAY_SIZE
(
buf
));
bytesNeeded
+=
lstrlenW
(
entry
->
u
.
pwszRfc822Name
)
*
sizeof
(
WCHAR
);
bytesNeeded
+=
lstrlenW
(
entry
->
pwszRfc822Name
)
*
sizeof
(
WCHAR
);
ret
=
TRUE
;
break
;
case
CERT_ALT_NAME_DNS_NAME
:
LoadStringW
(
hInstance
,
IDS_ALT_NAME_DNS_NAME
,
buf
,
ARRAY_SIZE
(
buf
));
bytesNeeded
+=
lstrlenW
(
entry
->
u
.
pwszDNSName
)
*
sizeof
(
WCHAR
);
bytesNeeded
+=
lstrlenW
(
entry
->
pwszDNSName
)
*
sizeof
(
WCHAR
);
ret
=
TRUE
;
break
;
case
CERT_ALT_NAME_DIRECTORY_NAME
:
...
...
@@ -1263,7 +1263,7 @@ static BOOL CRYPT_FormatAltNameEntry(DWORD dwFormatStrType, DWORD indentLevel,
if
(
dwFormatStrType
&
CRYPT_FORMAT_STR_MULTI_LINE
)
strType
|=
CERT_NAME_STR_CRLF_FLAG
;
directoryNameLen
=
cert_name_to_str_with_indent
(
X509_ASN_ENCODING
,
indentLevel
+
1
,
&
entry
->
u
.
DirectoryName
,
strType
,
NULL
,
0
);
indentLevel
+
1
,
&
entry
->
DirectoryName
,
strType
,
NULL
,
0
);
LoadStringW
(
hInstance
,
IDS_ALT_NAME_DIRECTORY_NAME
,
buf
,
ARRAY_SIZE
(
buf
));
bytesNeeded
+=
(
directoryNameLen
-
1
)
*
sizeof
(
WCHAR
);
if
(
dwFormatStrType
&
CRYPT_FORMAT_STR_MULTI_LINE
)
...
...
@@ -1275,45 +1275,45 @@ static BOOL CRYPT_FormatAltNameEntry(DWORD dwFormatStrType, DWORD indentLevel,
}
case
CERT_ALT_NAME_URL
:
LoadStringW
(
hInstance
,
IDS_ALT_NAME_URL
,
buf
,
ARRAY_SIZE
(
buf
));
bytesNeeded
+=
lstrlenW
(
entry
->
u
.
pwszURL
)
*
sizeof
(
WCHAR
);
bytesNeeded
+=
lstrlenW
(
entry
->
pwszURL
)
*
sizeof
(
WCHAR
);
ret
=
TRUE
;
break
;
case
CERT_ALT_NAME_IP_ADDRESS
:
{
LoadStringW
(
hInstance
,
IDS_ALT_NAME_IP_ADDRESS
,
buf
,
ARRAY_SIZE
(
buf
));
if
(
entry
->
u
.
IPAddress
.
cbData
==
8
)
if
(
entry
->
IPAddress
.
cbData
==
8
)
{
if
(
dwFormatStrType
&
CRYPT_FORMAT_STR_MULTI_LINE
)
{
LoadStringW
(
hInstance
,
IDS_ALT_NAME_MASK
,
mask
,
ARRAY_SIZE
(
mask
));
bytesNeeded
+=
lstrlenW
(
mask
)
*
sizeof
(
WCHAR
);
swprintf
(
ipAddrBuf
,
ARRAY_SIZE
(
ipAddrBuf
),
L"%d.%d.%d.%d"
,
entry
->
u
.
IPAddress
.
pbData
[
0
],
entry
->
u
.
IPAddress
.
pbData
[
1
],
entry
->
u
.
IPAddress
.
pbData
[
2
],
entry
->
u
.
IPAddress
.
pbData
[
3
]);
entry
->
IPAddress
.
pbData
[
0
],
entry
->
IPAddress
.
pbData
[
1
],
entry
->
IPAddress
.
pbData
[
2
],
entry
->
IPAddress
.
pbData
[
3
]);
bytesNeeded
+=
lstrlenW
(
ipAddrBuf
)
*
sizeof
(
WCHAR
);
/* indent again, for the mask line */
bytesNeeded
+=
indentLevel
*
lstrlenW
(
indent
)
*
sizeof
(
WCHAR
);
swprintf
(
maskBuf
,
ARRAY_SIZE
(
maskBuf
),
L"%d.%d.%d.%d"
,
entry
->
u
.
IPAddress
.
pbData
[
4
],
entry
->
u
.
IPAddress
.
pbData
[
5
],
entry
->
u
.
IPAddress
.
pbData
[
6
],
entry
->
u
.
IPAddress
.
pbData
[
7
]);
entry
->
IPAddress
.
pbData
[
4
],
entry
->
IPAddress
.
pbData
[
5
],
entry
->
IPAddress
.
pbData
[
6
],
entry
->
IPAddress
.
pbData
[
7
]);
bytesNeeded
+=
lstrlenW
(
maskBuf
)
*
sizeof
(
WCHAR
);
bytesNeeded
+=
lstrlenW
(
crlf
)
*
sizeof
(
WCHAR
);
}
else
{
swprintf
(
ipAddrBuf
,
ARRAY_SIZE
(
ipAddrBuf
),
L"%d.%d.%d.%d/%d.%d.%d.%d"
,
entry
->
u
.
IPAddress
.
pbData
[
0
],
entry
->
u
.
IPAddress
.
pbData
[
1
],
entry
->
u
.
IPAddress
.
pbData
[
2
],
entry
->
u
.
IPAddress
.
pbData
[
3
],
entry
->
u
.
IPAddress
.
pbData
[
4
],
entry
->
u
.
IPAddress
.
pbData
[
5
],
entry
->
u
.
IPAddress
.
pbData
[
6
],
entry
->
u
.
IPAddress
.
pbData
[
7
]);
entry
->
IPAddress
.
pbData
[
0
],
entry
->
IPAddress
.
pbData
[
1
],
entry
->
IPAddress
.
pbData
[
2
],
entry
->
IPAddress
.
pbData
[
3
],
entry
->
IPAddress
.
pbData
[
4
],
entry
->
IPAddress
.
pbData
[
5
],
entry
->
IPAddress
.
pbData
[
6
],
entry
->
IPAddress
.
pbData
[
7
]);
bytesNeeded
+=
(
lstrlenW
(
ipAddrBuf
)
+
1
)
*
sizeof
(
WCHAR
);
}
ret
=
TRUE
;
...
...
@@ -1321,7 +1321,7 @@ static BOOL CRYPT_FormatAltNameEntry(DWORD dwFormatStrType, DWORD indentLevel,
else
{
FIXME
(
"unknown IP address format (%ld bytes)
\n
"
,
entry
->
u
.
IPAddress
.
cbData
);
entry
->
IPAddress
.
cbData
);
ret
=
FALSE
;
}
break
;
...
...
@@ -1361,7 +1361,7 @@ static BOOL CRYPT_FormatAltNameEntry(DWORD dwFormatStrType, DWORD indentLevel,
case
CERT_ALT_NAME_RFC822_NAME
:
case
CERT_ALT_NAME_DNS_NAME
:
case
CERT_ALT_NAME_URL
:
lstrcpyW
(
str
,
entry
->
u
.
pwszURL
);
lstrcpyW
(
str
,
entry
->
pwszURL
);
break
;
case
CERT_ALT_NAME_DIRECTORY_NAME
:
if
(
dwFormatStrType
&
CRYPT_FORMAT_STR_MULTI_LINE
)
...
...
@@ -1372,7 +1372,7 @@ static BOOL CRYPT_FormatAltNameEntry(DWORD dwFormatStrType, DWORD indentLevel,
else
*
str
++
=
'='
;
cert_name_to_str_with_indent
(
X509_ASN_ENCODING
,
indentLevel
+
1
,
&
entry
->
u
.
DirectoryName
,
strType
,
str
,
indentLevel
+
1
,
&
entry
->
DirectoryName
,
strType
,
str
,
bytesNeeded
/
sizeof
(
WCHAR
));
break
;
case
CERT_ALT_NAME_IP_ADDRESS
:
...
...
@@ -2039,7 +2039,7 @@ static BOOL WINAPI CRYPT_FormatCRLDistPoints(DWORD dwCertEncodingType,
* RDN.)
*/
ret
=
CRYPT_FormatAltNameInfo
(
dwFormatStrType
,
3
,
&
distPoint
->
DistPointName
.
u
.
FullName
,
NULL
,
&
size
);
&
distPoint
->
DistPointName
.
FullName
,
NULL
,
&
size
);
if
(
ret
)
bytesNeeded
+=
size
-
sizeof
(
WCHAR
);
haveAnEntry
=
TRUE
;
...
...
@@ -2158,7 +2158,7 @@ static BOOL WINAPI CRYPT_FormatCRLDistPoints(DWORD dwCertEncodingType,
lstrcpyW
(
str
,
nameSep
);
str
+=
lstrlenW
(
nameSep
);
ret
=
CRYPT_FormatAltNameInfo
(
dwFormatStrType
,
3
,
&
distPoint
->
DistPointName
.
u
.
FullName
,
str
,
&
distPoint
->
DistPointName
.
FullName
,
str
,
&
altNameSize
);
if
(
ret
)
str
+=
altNameSize
/
sizeof
(
WCHAR
)
-
1
;
...
...
dlls/crypt32/oid.c
View file @
febb06ce
...
...
@@ -21,7 +21,7 @@
#include <stdio.h>
#include <stdarg.h>
#include <stdlib.h>
#define NONAMELESSUNION
#include "windef.h"
#include "winbase.h"
#define CRYPT_OID_INFO_HAS_EXTRA_FIELDS
...
...
@@ -778,9 +778,9 @@ BOOL WINAPI CryptRegisterOIDInfo(PCCRYPT_OID_INFO info, DWORD flags)
if
(
err
!=
ERROR_SUCCESS
)
goto
done
;
}
if
(
info
->
u
.
Algid
)
if
(
info
->
Algid
)
{
err
=
RegSetValueExW
(
key
,
L"Algid"
,
0
,
REG_DWORD
,
(
const
BYTE
*
)
&
info
->
u
.
Algid
,
sizeof
(
info
->
u
.
Algid
));
err
=
RegSetValueExW
(
key
,
L"Algid"
,
0
,
REG_DWORD
,
(
const
BYTE
*
)
&
info
->
Algid
,
sizeof
(
info
->
Algid
));
if
(
err
!=
ERROR_SUCCESS
)
goto
done
;
}
...
...
@@ -1532,8 +1532,8 @@ static struct OIDInfo *read_oid_info(HKEY root, char *key_name, DWORD *flags)
info
->
info
.
dwGroupId
=
group_id
;
len
=
sizeof
(
info
->
info
.
u
.
Algid
);
RegQueryValueExW
(
key
,
L"Algid"
,
NULL
,
NULL
,
(
BYTE
*
)
&
info
->
info
.
u
.
Algid
,
&
len
);
len
=
sizeof
(
info
->
info
.
Algid
);
RegQueryValueExW
(
key
,
L"Algid"
,
NULL
,
NULL
,
(
BYTE
*
)
&
info
->
info
.
Algid
,
&
len
);
if
(
extra_len
)
{
...
...
@@ -1588,7 +1588,7 @@ static void init_registered_oid_info(void)
{
TRACE
(
"adding oid %s, name %s, groupid %lu, algid %u, extra %lu, CNG algid %s, CNG extra %s
\n
"
,
debugstr_a
(
info
->
info
.
pszOID
),
debugstr_w
(
info
->
info
.
pwszName
),
info
->
info
.
dwGroupId
,
info
->
info
.
u
.
Algid
,
info
->
info
.
ExtraInfo
.
cbData
,
info
->
info
.
dwGroupId
,
info
->
info
.
Algid
,
info
->
info
.
ExtraInfo
.
cbData
,
debugstr_w
(
info
->
info
.
pwszCNGAlgid
),
debugstr_w
(
info
->
info
.
pwszCNGExtraAlgid
));
if
(
flags
&
CRYPT_INSTALL_OID_INFO_BEFORE_FLAG
)
...
...
@@ -1622,7 +1622,7 @@ static void init_oid_info(void)
info
->
info
.
pszOID
=
oidInfoConstructors
[
i
].
pszOID
;
info
->
info
.
pwszName
=
oidInfoConstructors
[
i
].
pwszName
;
info
->
info
.
dwGroupId
=
oidInfoConstructors
[
i
].
dwGroupId
;
info
->
info
.
u
.
Algid
=
oidInfoConstructors
[
i
].
Algid
;
info
->
info
.
Algid
=
oidInfoConstructors
[
i
].
Algid
;
if
(
oidInfoConstructors
[
i
].
blob
)
{
info
->
info
.
ExtraInfo
.
cbData
=
...
...
@@ -1654,7 +1654,7 @@ static void init_oid_info(void)
info
->
info
.
pszOID
=
oidInfoConstructors
[
i
].
pszOID
;
info
->
info
.
pwszName
=
(
LPWSTR
)(
info
+
1
);
info
->
info
.
dwGroupId
=
oidInfoConstructors
[
i
].
dwGroupId
;
info
->
info
.
u
.
Algid
=
oidInfoConstructors
[
i
].
Algid
;
info
->
info
.
Algid
=
oidInfoConstructors
[
i
].
Algid
;
memcpy
(
info
+
1
,
stringresource
,
len
*
sizeof
(
WCHAR
));
((
LPWSTR
)(
info
+
1
))[
len
]
=
0
;
if
(
oidInfoConstructors
[
i
].
blob
)
...
...
@@ -1728,7 +1728,7 @@ PCCRYPT_OID_INFO WINAPI CryptFindOIDInfo(DWORD dwKeyType, void *pvKey,
EnterCriticalSection
(
&
oidInfoCS
);
LIST_FOR_EACH_ENTRY
(
info
,
&
oidInfo
,
struct
OIDInfo
,
entry
)
{
if
(
info
->
info
.
u
.
Algid
==
*
(
DWORD
*
)
pvKey
&&
if
(
info
->
info
.
Algid
==
*
(
DWORD
*
)
pvKey
&&
(
!
dwGroupId
||
info
->
info
.
dwGroupId
==
dwGroupId
))
{
ret
=
&
info
->
info
;
...
...
@@ -1783,7 +1783,7 @@ PCCRYPT_OID_INFO WINAPI CryptFindOIDInfo(DWORD dwKeyType, void *pvKey,
EnterCriticalSection
(
&
oidInfoCS
);
LIST_FOR_EACH_ENTRY
(
info
,
&
oidInfo
,
struct
OIDInfo
,
entry
)
{
if
(
info
->
info
.
u
.
Algid
==
*
(
DWORD
*
)
pvKey
&&
if
(
info
->
info
.
Algid
==
*
(
DWORD
*
)
pvKey
&&
info
->
info
.
ExtraInfo
.
cbData
>=
sizeof
(
DWORD
)
&&
*
(
DWORD
*
)
info
->
info
.
ExtraInfo
.
pbData
==
*
(
DWORD
*
)((
LPBYTE
)
pvKey
+
sizeof
(
DWORD
))
&&
...
...
@@ -1820,7 +1820,7 @@ DWORD WINAPI CertOIDToAlgId(LPCSTR pszObjId)
(
void
*
)
pszObjId
,
0
);
if
(
info
)
ret
=
info
->
u
.
Algid
;
ret
=
info
->
Algid
;
else
ret
=
0
;
return
ret
;
...
...
dlls/crypt32/str.c
View file @
febb06ce
...
...
@@ -17,8 +17,6 @@
*/
#include <stdarg.h>
#define NONAMELESSUNION
#include "windef.h"
#include "winbase.h"
#include "winnls.h"
...
...
@@ -1036,7 +1034,7 @@ DWORD WINAPI CertGetNameStringW(PCCERT_CONTEXT cert, DWORD type, DWORD flags, vo
if
(
entry
)
{
ret
=
copy_output_str
(
name_string
,
entry
->
u
.
pwszRfc822Name
,
name_len
);
ret
=
copy_output_str
(
name_string
,
entry
->
pwszRfc822Name
,
name_len
);
break
;
}
ret
=
cert_get_name_from_rdn_attr
(
cert
->
dwCertEncodingType
,
name
,
szOID_RSA_emailAddr
,
...
...
@@ -1056,7 +1054,7 @@ DWORD WINAPI CertGetNameStringW(PCCERT_CONTEXT cert, DWORD type, DWORD flags, vo
entry
=
cert_find_alt_name_entry
(
cert
,
alt_name_issuer
,
CERT_ALT_NAME_DIRECTORY_NAME
,
&
info
);
if
(
entry
)
ret
=
CertNameToStrW
(
cert
->
dwCertEncodingType
,
&
entry
->
u
.
DirectoryName
,
ret
=
CertNameToStrW
(
cert
->
dwCertEncodingType
,
&
entry
->
DirectoryName
,
param
,
name_string
,
name_len
);
}
break
;
...
...
@@ -1069,7 +1067,7 @@ DWORD WINAPI CertGetNameStringW(PCCERT_CONTEXT cert, DWORD type, DWORD flags, vo
entry
=
cert_find_alt_name_entry
(
cert
,
alt_name_issuer
,
CERT_ALT_NAME_DIRECTORY_NAME
,
&
info
);
if
(
entry
)
ret
=
cert_name_to_str_with_indent
(
X509_ASN_ENCODING
,
0
,
&
entry
->
u
.
DirectoryName
,
ret
=
cert_name_to_str_with_indent
(
X509_ASN_ENCODING
,
0
,
&
entry
->
DirectoryName
,
0
,
name_string
,
name_len
);
break
;
case
CERT_NAME_SIMPLE_DISPLAY_TYPE
:
...
...
@@ -1097,7 +1095,7 @@ DWORD WINAPI CertGetNameStringW(PCCERT_CONTEXT cert, DWORD type, DWORD flags, vo
if
(
!
info
)
break
;
if
(
!
entry
&&
info
->
cAltEntry
)
entry
=
&
info
->
rgAltEntry
[
0
];
if
(
entry
)
ret
=
copy_output_str
(
name_string
,
entry
->
u
.
pwszRfc822Name
,
name_len
);
if
(
entry
)
ret
=
copy_output_str
(
name_string
,
entry
->
pwszRfc822Name
,
name_len
);
break
;
}
case
CERT_NAME_FRIENDLY_DISPLAY_TYPE
:
...
...
@@ -1123,7 +1121,7 @@ DWORD WINAPI CertGetNameStringW(PCCERT_CONTEXT cert, DWORD type, DWORD flags, vo
do
{
if
(
name_string
&&
name_len
==
1
)
break
;
ret
+=
len
=
copy_output_str
(
name_string
,
entry
->
u
.
pwszDNSName
,
name_len
?
name_len
-
1
:
0
);
ret
+=
len
=
copy_output_str
(
name_string
,
entry
->
pwszDNSName
,
name_len
?
name_len
-
1
:
0
);
if
(
name_string
&&
name_len
)
{
name_string
+=
len
;
...
...
@@ -1132,7 +1130,7 @@ DWORD WINAPI CertGetNameStringW(PCCERT_CONTEXT cert, DWORD type, DWORD flags, vo
}
while
((
entry
=
cert_find_next_alt_name_entry
(
info
,
CERT_ALT_NAME_DNS_NAME
,
&
index
)));
}
else
ret
=
copy_output_str
(
name_string
,
entry
->
u
.
pwszDNSName
,
name_len
);
else
ret
=
copy_output_str
(
name_string
,
entry
->
pwszDNSName
,
name_len
);
}
else
{
...
...
@@ -1155,7 +1153,7 @@ DWORD WINAPI CertGetNameStringW(PCCERT_CONTEXT cert, DWORD type, DWORD flags, vo
case
CERT_NAME_URL_TYPE
:
{
if
((
entry
=
cert_find_alt_name_entry
(
cert
,
alt_name_issuer
,
CERT_ALT_NAME_URL
,
&
info
)))
ret
=
copy_output_str
(
name_string
,
entry
->
u
.
pwszURL
,
name_len
);
ret
=
copy_output_str
(
name_string
,
entry
->
pwszURL
,
name_len
);
break
;
}
default:
...
...
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