public void ChainTest() { CertificateStorage storage = new CertificateStorage(); CACertificate root = new CACertificate(null, "Root"); root.CreateSelfSignature(); Assert.AreEqual(CertificateValidationResult.NoSignature, root.Validate(storage)); storage.AddRoot(root.OnlyPublicPart); Assert.AreEqual(CertificateValidationResult.Valid, root.Validate(storage)); var rootCrl = new RevocationList(root.Id, DateTime.Now, DateTime.Now.AddDays(1), new Guid[]{}); var signedRootCrl = new Signed<RevocationList>(rootCrl, root); storage.AddRevocationList(signedRootCrl); CACertificate intermediate = new CACertificate(null, "Intermediate"); intermediate.CreateSelfSignature(); Assert.AreEqual(CertificateValidationResult.NoSignature, intermediate.Validate(storage)); intermediate.AddSignature(root, DateTime.Now.AddDays(1)); storage.Add(intermediate.OnlyPublicPart); Assert.AreEqual(CertificateValidationResult.Valid, intermediate.Validate(storage)); var intermediateCrl = new RevocationList(intermediate.Id, DateTime.Now, DateTime.Now.AddDays(1), new Guid[] { }); var signedIntermediateCrl = new Signed<RevocationList>(intermediateCrl, intermediate); storage.AddRevocationList(signedIntermediateCrl); AdminCertificate test = new AdminCertificate(Language.English, null, "Test"); test.CreateSelfSignature(); Assert.AreEqual(CertificateValidationResult.NoSignature, test.Validate(storage)); test.AddSignature(intermediate, DateTime.Now.AddDays(1)); Assert.AreEqual(CertificateValidationResult.Valid, test.Validate(storage)); }
public void RevocationTest() { CertificateStorage storage = new CertificateStorage(); CACertificate root = new CACertificate(null, "Root"); root.CreateSelfSignature(); storage.AddRoot(root.OnlyPublicPart); var rootCrl = new RevocationList(root.Id, DateTime.Now, DateTime.Now.AddYears(10), new Guid[] { }); var signedRootCrl = new Signed<RevocationList>(rootCrl, root); storage.AddRevocationList(signedRootCrl); CACertificate intermediate = new CACertificate(null, "Intermediate"); intermediate.CreateSelfSignature(); intermediate.AddSignature(root, DateTime.Now.AddYears(10)); storage.Add(intermediate.OnlyPublicPart); AdminCertificate test = new AdminCertificate(Language.English, null, "Test"); test.CreateSelfSignature(); test.AddSignature(intermediate, DateTime.Now.AddYears(10)); for (int startDay = 0; startDay < 10; startDay += 2) { DateTime validFrom = DateTime.Now.AddDays(startDay); DateTime validUntil = validFrom.AddDays(1); IEnumerable<Guid> revoked = startDay > 5 ? new Guid[] { test.Id } : new Guid[] { }; var intermediateCrl = new RevocationList(intermediate.Id, validFrom, validUntil, revoked); var signedIntermediateCrl = new Signed<RevocationList>(intermediateCrl, intermediate); storage.AddRevocationList(signedIntermediateCrl); } Assert.AreEqual(CertificateValidationResult.Valid, test.Validate(storage, DateTime.Now)); Assert.AreEqual(CertificateValidationResult.Valid, test.Validate(storage, DateTime.Now.AddDays(1))); Assert.AreEqual(CertificateValidationResult.Valid, test.Validate(storage, DateTime.Now.AddDays(2))); Assert.AreEqual(CertificateValidationResult.Valid, test.Validate(storage, DateTime.Now.AddDays(3))); Assert.AreEqual(CertificateValidationResult.Valid, test.Validate(storage, DateTime.Now.AddDays(4))); Assert.AreEqual(CertificateValidationResult.Valid, test.Validate(storage, DateTime.Now.AddDays(5))); Assert.AreEqual(CertificateValidationResult.Revoked, test.Validate(storage, DateTime.Now.AddDays(6))); Assert.AreEqual(CertificateValidationResult.Revoked, test.Validate(storage, DateTime.Now.AddDays(7))); Assert.AreEqual(CertificateValidationResult.Revoked, test.Validate(storage, DateTime.Now.AddDays(8))); Assert.AreEqual(CertificateValidationResult.Revoked, test.Validate(storage, DateTime.Now.AddDays(9))); Assert.AreEqual(CertificateValidationResult.CrlMissing, test.Validate(storage, DateTime.Now.AddDays(10))); Assert.AreEqual(CertificateValidationResult.CrlMissing, test.Validate(storage, DateTime.Now.AddDays(11))); Assert.AreEqual(CertificateValidationResult.CrlMissing, test.Validate(storage, DateTime.Now.AddDays(12))); Assert.AreEqual(CertificateValidationResult.CrlMissing, test.Validate(storage, DateTime.Now.AddDays(30))); Assert.AreEqual(CertificateValidationResult.CrlMissing, test.Validate(storage, DateTime.Now.AddYears(1))); Assert.AreEqual(CertificateValidationResult.CrlMissing, test.Validate(storage, DateTime.Now.AddYears(5))); }