Skip to content

Commit e1599c1

Browse files
committed
Fixup CRL tests
1 parent 0feb662 commit e1599c1

File tree

3 files changed

+38
-28
lines changed

3 files changed

+38
-28
lines changed

MimeKit/Cryptography/BouncyCastleSecureMimeContext.cs

+1-11
Original file line numberDiff line numberDiff line change
@@ -723,24 +723,14 @@ protected IList<X509Certificate> BuildCertificateChain (X509Certificate certific
723723
Date = DateTime.UtcNow
724724
};
725725
parameters.AddStoreCert (userCertificateStore);
726-
727-
// if (CheckCertificateRevocation) {
728-
// DownloadCrls (certificate);
729-
// }
730726

731727
var intermediateStore = GetIntermediateCertificates ();
732728

733-
foreach (var intermediate in intermediateStore.EnumerateMatches (new X509CertStoreSelector ())) {
729+
foreach (var intermediate in intermediateStore.EnumerateMatches (new X509CertStoreSelector ()))
734730
anchorStore.Add (intermediate);
735-
// if (CheckCertificateRevocation)
736-
// DownloadCrls (intermediate);
737-
}
738731

739732
parameters.AddStoreCert (anchorStore);
740733

741-
// if (CheckCertificateRevocation)
742-
// parameters.AddStoreCrl (GetCertificateRevocationLists ());
743-
744734
var builder = new PkixCertPathBuilder ();
745735
var result = builder.Build (parameters);
746736

UnitTests/Cryptography/SecureMimeTests.cs

+37-17
Original file line numberDiff line numberDiff line change
@@ -159,8 +159,7 @@ static SecureMimeTestsBase ()
159159

160160
if (smime.EmailAddress.Equals ("[email protected]", StringComparison.OrdinalIgnoreCase)) {
161161
RevokedCertificate = smime;
162-
}
163-
else if (smime.EmailAddress.Equals ("[email protected]", StringComparison.OrdinalIgnoreCase)) {
162+
} else if (smime.EmailAddress.Equals ("[email protected]", StringComparison.OrdinalIgnoreCase)) {
164163
RevokedNoChainCertificate = smime;
165164
} else if (smime.PublicKeyAlgorithm == PublicKeyAlgorithm.RsaGeneral) {
166165
if (!string.IsNullOrEmpty (smime.EmailAddress))
@@ -202,6 +201,8 @@ static SecureMimeTestsBase ()
202201

203202
if (smime.EmailAddress.Equals ("[email protected]", StringComparison.OrdinalIgnoreCase)) {
204203
RevokedCertificate = smime;
204+
} else if (smime.EmailAddress.Equals ("[email protected]", StringComparison.OrdinalIgnoreCase)) {
205+
RevokedNoChainCertificate = smime;
205206
} else if (smime.PublicKeyAlgorithm == PublicKeyAlgorithm.RsaGeneral) {
206207
if (!string.IsNullOrEmpty (smime.EmailAddress))
207208
RsaCertificate = smime;
@@ -240,7 +241,8 @@ static SecureMimeTestsBase ()
240241
CurrentCrls = new X509Crl [] {
241242
X509CrlGenerator.Generate (RootCertificate, RootKey, yesterday, threeMonthsFromNow),
242243
X509CrlGenerator.Generate (IntermediateCertificate1, IntermediateKey1, yesterday, threeMonthsFromNow),
243-
X509CrlGenerator.Generate (IntermediateCertificate2, IntermediateKey2, yesterday, threeMonthsFromNow, RevokedCertificate.Certificate)
244+
X509CrlGenerator.Generate (IntermediateCertificate2, IntermediateKey2, yesterday, threeMonthsFromNow, RevokedCertificate.Certificate),
245+
X509CrlGenerator.Generate (IntermediateCertificate2, IntermediateKey2, yesterday, threeMonthsFromNow, RevokedNoChainCertificate.Certificate)
244246
};
245247

246248
CrlRequestUris = new Uri [] {
@@ -250,9 +252,9 @@ static SecureMimeTestsBase ()
250252
};
251253
}
252254

253-
protected static Mock<HttpMessageHandler> CreateMockHttpMessageHandler ()
255+
protected static HttpResponseMessage[] RevokedCertificateResponses ()
254256
{
255-
var responses = new HttpResponseMessage[] {
257+
return new HttpResponseMessage[] {
256258
new HttpResponseMessage (HttpStatusCode.OK) {
257259
Content = new ByteArrayContent (CurrentCrls[0].GetEncoded ())
258260
},
@@ -263,7 +265,25 @@ protected static Mock<HttpMessageHandler> CreateMockHttpMessageHandler ()
263265
Content = new ByteArrayContent (CurrentCrls[2].GetEncoded ())
264266
}
265267
};
268+
}
266269

270+
protected static HttpResponseMessage[] RevokedNoChainCertificateResponses ()
271+
{
272+
return new HttpResponseMessage[] {
273+
new HttpResponseMessage (HttpStatusCode.OK) {
274+
Content = new ByteArrayContent (CurrentCrls[0].GetEncoded ())
275+
},
276+
new HttpResponseMessage (HttpStatusCode.OK) {
277+
Content = new ByteArrayContent (CurrentCrls[1].GetEncoded ())
278+
},
279+
new HttpResponseMessage (HttpStatusCode.OK) {
280+
Content = new ByteArrayContent (CurrentCrls[3].GetEncoded ())
281+
}
282+
};
283+
}
284+
285+
protected static Mock<HttpMessageHandler> CreateMockHttpMessageHandler (HttpResponseMessage[] responses)
286+
{
267287
var mockHttpMessageHandler = new Mock<HttpMessageHandler> (MockBehavior.Strict);
268288

269289
for (int i = 0; i < CrlRequestUris.Length; i++) {
@@ -3164,7 +3184,7 @@ public MyTemporarySecureMimeContext (Mock<HttpMessageHandler>? mockHttpMessageHa
31643184
{
31653185
CheckCertificateRevocation = false;
31663186

3167-
MockHttpMessageHandler = mockHttpMessageHandler ?? CreateMockHttpMessageHandler ();
3187+
MockHttpMessageHandler = mockHttpMessageHandler ?? CreateMockHttpMessageHandler (RevokedCertificateResponses ());
31683188
client = new HttpClient (MockHttpMessageHandler.Object);
31693189
}
31703190

@@ -3201,13 +3221,13 @@ public void TestVerifyRevokedCertificate ()
32013221
VerifyRevokedCertificate (ctx, ctx.MockHttpMessageHandler, RevokedCertificate, true);
32023222
}
32033223

3204-
using (var ctx = new MyTemporarySecureMimeContext ()) {
3224+
using (var ctx = new MyTemporarySecureMimeContext (CreateMockHttpMessageHandler (RevokedNoChainCertificateResponses ()))) {
32053225
ImportTestCertificates (ctx);
32063226

32073227
VerifyRevokedCertificate (ctx, ctx.MockHttpMessageHandler, RevokedNoChainCertificate, false);
32083228
}
32093229

3210-
using (var ctx = new MyTemporarySecureMimeContext ()) {
3230+
using (var ctx = new MyTemporarySecureMimeContext (CreateMockHttpMessageHandler (RevokedNoChainCertificateResponses ()))) {
32113231
ImportTestCertificates (ctx);
32123232

32133233
VerifyRevokedCertificate (ctx, ctx.MockHttpMessageHandler, RevokedNoChainCertificate, true);
@@ -3229,13 +3249,13 @@ public async Task TestVerifyRevokedCertificateAsync ()
32293249
await VerifyRevokedCertificateAsync (ctx, ctx.MockHttpMessageHandler, RevokedCertificate, true);
32303250
}
32313251

3232-
using (var ctx = new MyTemporarySecureMimeContext ()) {
3252+
using (var ctx = new MyTemporarySecureMimeContext (CreateMockHttpMessageHandler (RevokedNoChainCertificateResponses ()))) {
32333253
ImportTestCertificates (ctx);
3234-
3254+
32353255
await VerifyRevokedCertificateAsync (ctx, ctx.MockHttpMessageHandler, RevokedNoChainCertificate, false);
32363256
}
32373257

3238-
using (var ctx = new MyTemporarySecureMimeContext ()) {
3258+
using (var ctx = new MyTemporarySecureMimeContext (CreateMockHttpMessageHandler (RevokedNoChainCertificateResponses ()))) {
32393259
ImportTestCertificates (ctx);
32403260

32413261
await VerifyRevokedCertificateAsync (ctx, ctx.MockHttpMessageHandler, RevokedNoChainCertificate, true);
@@ -3341,11 +3361,11 @@ public MySecureMimeContext () : this ("smime.db", "no.secret")
33413361
{
33423362
}
33433363

3344-
public MySecureMimeContext (string database, string password) : base (database, password)
3364+
public MySecureMimeContext (string database, string password, Mock<HttpMessageHandler>? mockHttpMessageHandler = null) : base (database, password)
33453365
{
33463366
CheckCertificateRevocation = false;
33473367

3348-
MockHttpMessageHandler = CreateMockHttpMessageHandler ();
3368+
MockHttpMessageHandler = mockHttpMessageHandler?? CreateMockHttpMessageHandler (RevokedCertificateResponses ());
33493369
client = new HttpClient (MockHttpMessageHandler.Object);
33503370
}
33513371

@@ -3390,15 +3410,15 @@ public void TestVerifyRevokedCertificate ()
33903410

33913411
File.Delete ("revoked.db");
33923412

3393-
using (var ctx = new MySecureMimeContext ("revoked.db", "no.secret")) {
3413+
using (var ctx = new MySecureMimeContext ("revoked.db", "no.secret", CreateMockHttpMessageHandler (RevokedNoChainCertificateResponses ()))) {
33943414
ImportTestCertificates (ctx);
33953415

33963416
VerifyRevokedCertificate (ctx, ctx.MockHttpMessageHandler, RevokedNoChainCertificate, false);
33973417
}
33983418

33993419
File.Delete ("revoked.db");
34003420

3401-
using (var ctx = new MySecureMimeContext ("revoked.db", "no.secret")) {
3421+
using (var ctx = new MySecureMimeContext ("revoked.db", "no.secret", CreateMockHttpMessageHandler (RevokedNoChainCertificateResponses ()))) {
34023422
ImportTestCertificates (ctx);
34033423

34043424
VerifyRevokedCertificate (ctx, ctx.MockHttpMessageHandler, RevokedNoChainCertificate, true);
@@ -3426,15 +3446,15 @@ public async Task TestVerifyRevokedCertificateAsync ()
34263446

34273447
File.Delete ("revoked-async.db");
34283448

3429-
using (var ctx = new MySecureMimeContext ("revoked-async.db", "no.secret")) {
3449+
using (var ctx = new MySecureMimeContext ("revoked-async.db", "no.secret", CreateMockHttpMessageHandler (RevokedNoChainCertificateResponses ()))) {
34303450
ImportTestCertificates (ctx);
34313451

34323452
await VerifyRevokedCertificateAsync (ctx, ctx.MockHttpMessageHandler, RevokedNoChainCertificate, false);
34333453
}
34343454

34353455
File.Delete ("revoked-async.db");
34363456

3437-
using (var ctx = new MySecureMimeContext ("revoked-async.db", "no.secret")) {
3457+
using (var ctx = new MySecureMimeContext ("revoked-async.db", "no.secret", CreateMockHttpMessageHandler (RevokedNoChainCertificateResponses ()))) {
34383458
ImportTestCertificates (ctx);
34393459

34403460
await VerifyRevokedCertificateAsync (ctx, ctx.MockHttpMessageHandler, RevokedNoChainCertificate, true);
Binary file not shown.

0 commit comments

Comments
 (0)