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
e8992af0
Commit
e8992af0
authored
Jun 20, 2006
by
Juan Lang
Committed by
Alexandre Julliard
Jun 21, 2006
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
crypt32: Implement some CRL verification functions.
parent
aeb80364
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
278 additions
and
1 deletion
+278
-1
crl.c
dlls/crypt32/crl.c
+46
-0
crypt32.spec
dlls/crypt32/crypt32.spec
+3
-1
crl.c
dlls/crypt32/tests/crl.c
+229
-0
No files found.
dlls/crypt32/crl.c
View file @
e8992af0
...
...
@@ -425,6 +425,52 @@ BOOL WINAPI CertSetCRLContextProperty(PCCRL_CONTEXT pCRLContext,
return
ret
;
}
BOOL
WINAPI
CertIsValidCRLForCertificate
(
PCCERT_CONTEXT
pCert
,
PCCRL_CONTEXT
pCrl
,
DWORD
dwFlags
,
void
*
pvReserved
)
{
TRACE
(
"(%p, %p, %08lx, %p)
\n
"
,
pCert
,
pCrl
,
dwFlags
,
pvReserved
);
return
TRUE
;
}
static
PCRL_ENTRY
CRYPT_FindCertificateInCRL
(
PCERT_INFO
cert
,
PCRL_INFO
crl
)
{
DWORD
i
;
PCRL_ENTRY
entry
=
NULL
;
/* FIXME: do I need to compare the issuers of the cert and CRL? */
for
(
i
=
0
;
!
entry
&&
i
<
crl
->
cCRLEntry
;
i
++
)
if
(
CertCompareIntegerBlob
(
&
crl
->
rgCRLEntry
[
i
].
SerialNumber
,
&
cert
->
SerialNumber
))
entry
=
&
crl
->
rgCRLEntry
[
i
];
return
entry
;
}
BOOL
WINAPI
CertFindCertificateInCRL
(
PCCERT_CONTEXT
pCert
,
PCCRL_CONTEXT
pCrlContext
,
DWORD
dwFlags
,
void
*
pvReserved
,
PCRL_ENTRY
*
ppCrlEntry
)
{
TRACE
(
"(%p, %p, %08lx, %p, %p)
\n
"
,
pCert
,
pCrlContext
,
dwFlags
,
pvReserved
,
ppCrlEntry
);
*
ppCrlEntry
=
CRYPT_FindCertificateInCRL
(
pCert
->
pCertInfo
,
pCrlContext
->
pCrlInfo
);
return
TRUE
;
}
BOOL
WINAPI
CertVerifyCRLRevocation
(
DWORD
dwCertEncodingType
,
PCERT_INFO
pCertId
,
DWORD
cCrlInfo
,
PCRL_INFO
rgpCrlInfo
[])
{
DWORD
i
;
PCRL_ENTRY
entry
=
NULL
;
TRACE
(
"(%08lx, %p, %ld, %p)
\n
"
,
dwCertEncodingType
,
pCertId
,
cCrlInfo
,
rgpCrlInfo
);
for
(
i
=
0
;
!
entry
&&
i
<
cCrlInfo
;
i
++
)
entry
=
CRYPT_FindCertificateInCRL
(
pCertId
,
rgpCrlInfo
[
i
]);
return
entry
==
NULL
;
}
LONG
WINAPI
CertVerifyCRLTimeValidity
(
LPFILETIME
pTimeToVerify
,
PCRL_INFO
pCrlInfo
)
{
...
...
dlls/crypt32/crypt32.spec
View file @
e8992af0
...
...
@@ -38,6 +38,7 @@
@ stdcall CertFindCRLInStore(long long long long ptr ptr)
@ stub CertFindCTLInStore
@ stdcall CertFindCertificateInStore(long long long long ptr ptr)
@ stdcall CertFindCertificateInCRL(ptr ptr long ptr ptr)
@ stdcall CertFindExtension(str long ptr)
@ stdcall CertFindRDNAttr(str ptr)
@ stub CertFindSubjectInCTL
...
...
@@ -60,6 +61,7 @@
@ stdcall CertGetSubjectCertificateFromStore(ptr long ptr)
@ stdcall CertGetValidUsages(long ptr ptr ptr ptr)
@ stub CertIsRDNAttrsInCertificateName
@ stdcall CertIsValidCRLForCertificate(ptr ptr long ptr)
@ stdcall CertNameToStrA(long ptr long ptr long)
@ stdcall CertNameToStrW(long ptr long ptr long)
@ stdcall CertOIDToAlgId(str)
...
...
@@ -80,7 +82,7 @@
@ stdcall CertSetEnhancedKeyUsage(ptr ptr)
@ stub CertStrToNameA
@ stub CertStrToNameW
@ st
ub CertVerifyCRLRevocation
@ st
dcall CertVerifyCRLRevocation(long ptr long ptr)
@ stdcall CertVerifyCRLTimeValidity(ptr ptr)
@ stub CertVerifyCTLUsage
@ stub CertVerifyRevocation
...
...
dlls/crypt32/tests/crl.c
View file @
e8992af0
...
...
@@ -372,6 +372,231 @@ static void testCRLProperties(void)
}
}
static
const
BYTE
v1CRLWithIssuerAndEntry
[]
=
{
0x30
,
0x44
,
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
,
0x30
,
0x16
,
0x30
,
0x14
,
0x02
,
0x01
,
0x01
,
0x18
,
0x0f
,
0x31
,
0x36
,
0x30
,
0x31
,
0x30
,
0x31
,
0x30
,
0x31
,
0x30
,
0x30
,
0x30
,
0x30
,
0x30
,
0x30
,
0x5a
};
static
const
BYTE
v2CRLWithIssuingDistPoint
[]
=
{
0x30
,
0x5c
,
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
,
0x18
,
0x0f
,
0x31
,
0x36
,
0x30
,
0x31
,
0x30
,
0x31
,
0x30
,
0x31
,
0x30
,
0x30
,
0x30
,
0x30
,
0x30
,
0x30
,
0x5a
,
0x30
,
0x16
,
0x30
,
0x14
,
0x02
,
0x01
,
0x01
,
0x18
,
0x0f
,
0x31
,
0x36
,
0x30
,
0x31
,
0x30
,
0x31
,
0x30
,
0x31
,
0x30
,
0x30
,
0x30
,
0x30
,
0x30
,
0x30
,
0x5a
,
0xa0
,
0x13
,
0x30
,
0x11
,
0x30
,
0x0f
,
0x06
,
0x03
,
0x55
,
0x1d
,
0x13
,
0x04
,
0x08
,
0x30
,
0x06
,
0x01
,
0x01
,
0xff
,
0x02
,
0x01
,
0x01
};
static
const
BYTE
verisignCRL
[]
=
{
0x30
,
0x82
,
0x01
,
0xb1
,
0x30
,
0x82
,
0x01
,
0x1a
,
0x02
,
0x01
,
0x01
,
0x30
,
0x0d
,
0x06
,
0x09
,
0x2a
,
0x86
,
0x48
,
0x86
,
0xf7
,
0x0d
,
0x01
,
0x01
,
0x02
,
0x05
,
0x00
,
0x30
,
0x61
,
0x31
,
0x11
,
0x30
,
0x0f
,
0x06
,
0x03
,
0x55
,
0x04
,
0x07
,
0x13
,
0x08
,
0x49
,
0x6e
,
0x74
,
0x65
,
0x72
,
0x6e
,
0x65
,
0x74
,
0x31
,
0x17
,
0x30
,
0x15
,
0x06
,
0x03
,
0x55
,
0x04
,
0x0a
,
0x13
,
0x0e
,
0x56
,
0x65
,
0x72
,
0x69
,
0x53
,
0x69
,
0x67
,
0x6e
,
0x2c
,
0x20
,
0x49
,
0x6e
,
0x63
,
0x2e
,
0x31
,
0x33
,
0x30
,
0x31
,
0x06
,
0x03
,
0x55
,
0x04
,
0x0b
,
0x13
,
0x2a
,
0x56
,
0x65
,
0x72
,
0x69
,
0x53
,
0x69
,
0x67
,
0x6e
,
0x20
,
0x43
,
0x6f
,
0x6d
,
0x6d
,
0x65
,
0x72
,
0x63
,
0x69
,
0x61
,
0x6c
,
0x20
,
0x53
,
0x6f
,
0x66
,
0x74
,
0x77
,
0x61
,
0x72
,
0x65
,
0x20
,
0x50
,
0x75
,
0x62
,
0x6c
,
0x69
,
0x73
,
0x68
,
0x65
,
0x72
,
0x73
,
0x20
,
0x43
,
0x41
,
0x17
,
0x0d
,
0x30
,
0x31
,
0x30
,
0x33
,
0x32
,
0x34
,
0x30
,
0x30
,
0x30
,
0x30
,
0x30
,
0x30
,
0x5a
,
0x17
,
0x0d
,
0x30
,
0x34
,
0x30
,
0x31
,
0x30
,
0x37
,
0x32
,
0x33
,
0x35
,
0x39
,
0x35
,
0x39
,
0x5a
,
0x30
,
0x69
,
0x30
,
0x21
,
0x02
,
0x10
,
0x1b
,
0x51
,
0x90
,
0xf7
,
0x37
,
0x24
,
0x39
,
0x9c
,
0x92
,
0x54
,
0xcd
,
0x42
,
0x46
,
0x37
,
0x99
,
0x6a
,
0x17
,
0x0d
,
0x30
,
0x31
,
0x30
,
0x31
,
0x33
,
0x30
,
0x30
,
0x30
,
0x30
,
0x31
,
0x32
,
0x34
,
0x5a
,
0x30
,
0x21
,
0x02
,
0x10
,
0x75
,
0x0e
,
0x40
,
0xff
,
0x97
,
0xf0
,
0x47
,
0xed
,
0xf5
,
0x56
,
0xc7
,
0x08
,
0x4e
,
0xb1
,
0xab
,
0xfd
,
0x17
,
0x0d
,
0x30
,
0x31
,
0x30
,
0x31
,
0x33
,
0x31
,
0x30
,
0x30
,
0x30
,
0x30
,
0x34
,
0x39
,
0x5a
,
0x30
,
0x21
,
0x02
,
0x10
,
0x77
,
0xe6
,
0x5a
,
0x43
,
0x59
,
0x93
,
0x5d
,
0x5f
,
0x7a
,
0x75
,
0x80
,
0x1a
,
0xcd
,
0xad
,
0xc2
,
0x22
,
0x17
,
0x0d
,
0x30
,
0x30
,
0x30
,
0x38
,
0x33
,
0x31
,
0x30
,
0x30
,
0x30
,
0x30
,
0x35
,
0x36
,
0x5a
,
0xa0
,
0x1a
,
0x30
,
0x18
,
0x30
,
0x09
,
0x06
,
0x03
,
0x55
,
0x1d
,
0x13
,
0x04
,
0x02
,
0x30
,
0x00
,
0x30
,
0x0b
,
0x06
,
0x03
,
0x55
,
0x1d
,
0x0f
,
0x04
,
0x04
,
0x03
,
0x02
,
0x05
,
0xa0
,
0x30
,
0x0d
,
0x06
,
0x09
,
0x2a
,
0x86
,
0x48
,
0x86
,
0xf7
,
0x0d
,
0x01
,
0x01
,
0x02
,
0x05
,
0x00
,
0x03
,
0x81
,
0x81
,
0x00
,
0x18
,
0x2c
,
0xe8
,
0xfc
,
0x16
,
0x6d
,
0x91
,
0x4a
,
0x3d
,
0x88
,
0x54
,
0x48
,
0x5d
,
0xb8
,
0x11
,
0xbf
,
0x64
,
0xbb
,
0xf9
,
0xda
,
0x59
,
0x19
,
0xdd
,
0x0e
,
0x65
,
0xab
,
0xc0
,
0x0c
,
0xfa
,
0x67
,
0x7e
,
0x21
,
0x1e
,
0x83
,
0x0e
,
0xcf
,
0x9b
,
0x89
,
0x8a
,
0xcf
,
0x0c
,
0x4b
,
0xc1
,
0x39
,
0x9d
,
0xe7
,
0x6a
,
0xac
,
0x46
,
0x74
,
0x6a
,
0x91
,
0x62
,
0x22
,
0x0d
,
0xc4
,
0x08
,
0xbd
,
0xf5
,
0x0a
,
0x90
,
0x7f
,
0x06
,
0x21
,
0x3d
,
0x7e
,
0xa7
,
0xaa
,
0x5e
,
0xcd
,
0x22
,
0x15
,
0xe6
,
0x0c
,
0x75
,
0x8e
,
0x6e
,
0xad
,
0xf1
,
0x84
,
0xe4
,
0x22
,
0xb4
,
0x30
,
0x6f
,
0xfb
,
0x64
,
0x8f
,
0xd7
,
0x80
,
0x43
,
0xf5
,
0x19
,
0x18
,
0x66
,
0x1d
,
0x72
,
0xa3
,
0xe3
,
0x94
,
0x82
,
0x28
,
0x52
,
0xa0
,
0x06
,
0x4e
,
0xb1
,
0xc8
,
0x92
,
0x0c
,
0x97
,
0xbe
,
0x15
,
0x07
,
0xab
,
0x7a
,
0xc9
,
0xea
,
0x08
,
0x67
,
0x43
,
0x4d
,
0x51
,
0x63
,
0x3b
,
0x9c
,
0x9c
,
0xcd
};
static
void
testIsValidCRLForCert
(
void
)
{
BOOL
ret
;
PCCERT_CONTEXT
cert1
,
cert2
;
PCCRL_CONTEXT
crl
;
HCERTSTORE
store
;
crl
=
CertCreateCRLContext
(
X509_ASN_ENCODING
,
v1CRLWithIssuerAndEntry
,
sizeof
(
v1CRLWithIssuerAndEntry
));
ok
(
crl
!=
NULL
,
"CertCreateCRLContext failed: %08lx
\n
"
,
GetLastError
());
cert1
=
CertCreateCertificateContext
(
X509_ASN_ENCODING
,
bigCert
,
sizeof
(
bigCert
));
ok
(
cert1
!=
NULL
,
"CertCreateCertificateContext failed: %08lx
\n
"
,
GetLastError
());
/* Crash
ret = CertIsValidCRLForCertificate(NULL, NULL, 0, NULL);
ret = CertIsValidCRLForCertificate(cert1, NULL, 0, NULL);
*/
/* Curiously, any CRL is valid for the NULL certificate */
ret
=
CertIsValidCRLForCertificate
(
NULL
,
crl
,
0
,
NULL
);
ok
(
ret
,
"CertIsValidCRLForCertificate failed: %08lx
\n
"
,
GetLastError
());
/* Same issuer for both cert and CRL, this CRL is valid for that cert */
ret
=
CertIsValidCRLForCertificate
(
cert1
,
crl
,
0
,
NULL
);
ok
(
ret
,
"CertIsValidCRLForCertificate failed: %08lx
\n
"
,
GetLastError
());
cert2
=
CertCreateCertificateContext
(
X509_ASN_ENCODING
,
bigCertWithDifferentIssuer
,
sizeof
(
bigCertWithDifferentIssuer
));
ok
(
cert2
!=
NULL
,
"CertCreateCertificateContext failed: %08lx
\n
"
,
GetLastError
());
/* Yet more curious: different issuers for these, yet the CRL is valid for
* that cert. According to MSDN, the relevant bit to check is whether the
* CRL has a CRL_ISSUING_DIST_POINT extension.
*/
ret
=
CertIsValidCRLForCertificate
(
cert2
,
crl
,
0
,
NULL
);
ok
(
ret
,
"CertIsValidCRLForCertificate failed: %08lx
\n
"
,
GetLastError
());
CertFreeCRLContext
(
crl
);
/* Yet with a CRL_ISSUING_DIST_POINT in the CRL, I still can't get this
* to say the CRL is not valid for either cert.
*/
crl
=
CertCreateCRLContext
(
X509_ASN_ENCODING
,
v2CRLWithIssuingDistPoint
,
sizeof
(
v2CRLWithIssuingDistPoint
));
ok
(
crl
!=
NULL
,
"CertCreateCRLContext failed: %08lx
\n
"
,
GetLastError
());
ret
=
CertIsValidCRLForCertificate
(
cert1
,
crl
,
0
,
NULL
);
ok
(
ret
,
"CertIsValidCRLForCertificate failed: %08lx
\n
"
,
GetLastError
());
ret
=
CertIsValidCRLForCertificate
(
cert2
,
crl
,
0
,
NULL
);
ok
(
ret
,
"CertIsValidCRLForCertificate failed: %08lx
\n
"
,
GetLastError
());
CertFreeCRLContext
(
crl
);
/* And again, with a real CRL, the CRL is valid for both certs. */
crl
=
CertCreateCRLContext
(
X509_ASN_ENCODING
,
verisignCRL
,
sizeof
(
verisignCRL
));
ok
(
crl
!=
NULL
,
"CertCreateCRLContext failed: %08lx
\n
"
,
GetLastError
());
ret
=
CertIsValidCRLForCertificate
(
cert1
,
crl
,
0
,
NULL
);
ok
(
ret
,
"CertIsValidCRLForCertificate failed: %08lx
\n
"
,
GetLastError
());
ret
=
CertIsValidCRLForCertificate
(
cert2
,
crl
,
0
,
NULL
);
ok
(
ret
,
"CertIsValidCRLForCertificate failed: %08lx
\n
"
,
GetLastError
());
CertFreeCRLContext
(
crl
);
/* One last test: a CRL in a different store than the cert is also valid
* for the cert, so CertIsValidCRLForCertificate must always return TRUE?
*/
store
=
CertOpenStore
(
CERT_STORE_PROV_MEMORY
,
X509_ASN_ENCODING
,
0
,
CERT_STORE_CREATE_NEW_FLAG
,
NULL
);
ok
(
store
!=
NULL
,
"CertOpenStore failed: %08lx
\n
"
,
GetLastError
());
ret
=
CertAddEncodedCRLToStore
(
store
,
X509_ASN_ENCODING
,
verisignCRL
,
sizeof
(
verisignCRL
),
CERT_STORE_ADD_ALWAYS
,
&
crl
);
ok
(
ret
,
"CertAddEncodedCRLToStore failed: %08lx
\n
"
,
GetLastError
());
ret
=
CertIsValidCRLForCertificate
(
cert1
,
crl
,
0
,
NULL
);
ok
(
ret
,
"CertIsValidCRLForCertificate failed: %08lx
\n
"
,
GetLastError
());
ret
=
CertIsValidCRLForCertificate
(
cert2
,
crl
,
0
,
NULL
);
ok
(
ret
,
"CertIsValidCRLForCertificate failed: %08lx
\n
"
,
GetLastError
());
CertFreeCRLContext
(
crl
);
CertCloseStore
(
store
,
0
);
CertFreeCertificateContext
(
cert2
);
CertFreeCertificateContext
(
cert1
);
}
static
void
testFindCertInCRL
(
void
)
{
BOOL
ret
;
PCCERT_CONTEXT
cert
;
PCCRL_CONTEXT
crl
;
PCRL_ENTRY
entry
;
cert
=
CertCreateCertificateContext
(
X509_ASN_ENCODING
,
bigCert
,
sizeof
(
bigCert
));
ok
(
cert
!=
NULL
,
"CertCreateCertificateContext failed: %08lx
\n
"
,
GetLastError
());
/* Crash
ret = CertFindCertificateInCRL(NULL, NULL, 0, NULL, NULL);
ret = CertFindCertificateInCRL(NULL, crl, 0, NULL, NULL);
ret = CertFindCertificateInCRL(cert, NULL, 0, NULL, NULL);
ret = CertFindCertificateInCRL(cert, crl, 0, NULL, NULL);
ret = CertFindCertificateInCRL(NULL, NULL, 0, NULL, &entry);
ret = CertFindCertificateInCRL(NULL, crl, 0, NULL, &entry);
ret = CertFindCertificateInCRL(cert, NULL, 0, NULL, &entry);
*/
crl
=
CertCreateCRLContext
(
X509_ASN_ENCODING
,
verisignCRL
,
sizeof
(
verisignCRL
));
ret
=
CertFindCertificateInCRL
(
cert
,
crl
,
0
,
NULL
,
&
entry
);
ok
(
ret
,
"CertFindCertificateInCRL failed: %08lx
\n
"
,
GetLastError
());
ok
(
entry
==
NULL
,
"Expected not to find an entry in CRL
\n
"
);
CertFreeCRLContext
(
crl
);
crl
=
CertCreateCRLContext
(
X509_ASN_ENCODING
,
v1CRLWithIssuerAndEntry
,
sizeof
(
v1CRLWithIssuerAndEntry
));
ret
=
CertFindCertificateInCRL
(
cert
,
crl
,
0
,
NULL
,
&
entry
);
ok
(
ret
,
"CertFindCertificateInCRL failed: %08lx
\n
"
,
GetLastError
());
ok
(
entry
!=
NULL
,
"Expected to find an entry in CRL
\n
"
);
CertFreeCRLContext
(
crl
);
CertFreeCertificateContext
(
cert
);
}
static
void
testVerifyCRLRevocation
(
void
)
{
BOOL
ret
;
PCCERT_CONTEXT
cert
;
PCCRL_CONTEXT
crl
;
ret
=
CertVerifyCRLRevocation
(
0
,
NULL
,
0
,
NULL
);
ok
(
ret
,
"CertVerifyCRLRevocation failed: %08lx
\n
"
,
GetLastError
());
ret
=
CertVerifyCRLRevocation
(
X509_ASN_ENCODING
,
NULL
,
0
,
NULL
);
ok
(
ret
,
"CertVerifyCRLRevocation failed: %08lx
\n
"
,
GetLastError
());
cert
=
CertCreateCertificateContext
(
X509_ASN_ENCODING
,
bigCert
,
sizeof
(
bigCert
));
/* Check against no CRL */
ret
=
CertVerifyCRLRevocation
(
0
,
cert
->
pCertInfo
,
0
,
NULL
);
ok
(
ret
,
"CertVerifyCRLRevocation failed: %08lx
\n
"
,
GetLastError
());
ret
=
CertVerifyCRLRevocation
(
X509_ASN_ENCODING
,
cert
->
pCertInfo
,
0
,
NULL
);
ok
(
ret
,
"CertVerifyCRLRevocation failed: %08lx
\n
"
,
GetLastError
());
/* Check against CRL with entry for the cert */
crl
=
CertCreateCRLContext
(
X509_ASN_ENCODING
,
v1CRLWithIssuerAndEntry
,
sizeof
(
v1CRLWithIssuerAndEntry
));
ret
=
CertVerifyCRLRevocation
(
0
,
cert
->
pCertInfo
,
1
,
(
PCRL_INFO
*
)
&
crl
->
pCrlInfo
);
ok
(
!
ret
,
"CertVerifyCRLRevocation should have been revoked
\n
"
);
ret
=
CertVerifyCRLRevocation
(
X509_ASN_ENCODING
,
cert
->
pCertInfo
,
1
,
(
PCRL_INFO
*
)
&
crl
->
pCrlInfo
);
ok
(
!
ret
,
"CertVerifyCRLRevocation should have been revoked
\n
"
);
CertFreeCRLContext
(
crl
);
/* Check against CRL without entry for the cert */
crl
=
CertCreateCRLContext
(
X509_ASN_ENCODING
,
verisignCRL
,
sizeof
(
verisignCRL
));
ret
=
CertVerifyCRLRevocation
(
0
,
cert
->
pCertInfo
,
1
,
(
PCRL_INFO
*
)
&
crl
->
pCrlInfo
);
ok
(
ret
,
"CertVerifyCRLRevocation failed: %08lx
\n
"
,
GetLastError
());
ret
=
CertVerifyCRLRevocation
(
X509_ASN_ENCODING
,
cert
->
pCertInfo
,
1
,
(
PCRL_INFO
*
)
&
crl
->
pCrlInfo
);
ok
(
ret
,
"CertVerifyCRLRevocation failed: %08lx
\n
"
,
GetLastError
());
CertFreeCRLContext
(
crl
);
CertFreeCertificateContext
(
cert
);
}
START_TEST
(
crl
)
{
testCreateCRL
();
...
...
@@ -379,4 +604,8 @@ START_TEST(crl)
testFindCRL
();
testCRLProperties
();
testIsValidCRLForCert
();
testFindCertInCRL
();
testVerifyCRLRevocation
();
}
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