private static void AddCaCertificateToStorage(Certificate certificate, byte[] certificateHash, byte[] encodedCert, bool isRootCA) { CaCertificateEntry caCertificateEntry = new CaCertificateEntry(); caCertificateEntry.CertificateValue = encodedCert; if (isRootCA) { caCertificateEntry.IsTrusted = true; caCertificateEntry.IsRevoked = false; } else { caCertificateEntry.IsTrusted = false; caCertificateEntry.IsRevoked = false; } byte[] caCertificateEntrySerialized = SerializationUtil.Serialize(caCertificateEntry); StorageUtil.saveToStorage(certificateHash, caCertificateEntrySerialized); CaCertificateSubjectKeyIdEntry cACertificateSubjectKeyIdEntry = new CaCertificateSubjectKeyIdEntry(); cACertificateSubjectKeyIdEntry.CertificateHash = certificateHash; cACertificateSubjectKeyIdEntry.IsRootCa = isRootCA; byte[] cACertificateSubjectKeyIdEntrySerialized = SerializationUtil.Serialize(cACertificateSubjectKeyIdEntry); StorageUtil.saveToStorage(certificate.SubjectKeyIdentifier.keyIdentifier, cACertificateSubjectKeyIdEntrySerialized); }
private static Certificate FindIssuerCaCertificate(Certificate certificate) { Certificate nullCertificate = new Certificate(); CaCertificateSubjectKeyIdEntry cACertificateSubjectKeyIdEntry = FindCaCertificateHashEntry(certificate.AuthorityKeyIdentifier.keyIdentifier); if (cACertificateSubjectKeyIdEntry.CertificateHash == null) { return(nullCertificate); } CaCertificateEntry cACertificateEntry = FindCaCertificatewithCertificateHash(cACertificateSubjectKeyIdEntry.CertificateHash); if (cACertificateEntry.CertificateValue == null) { return(nullCertificate); } if (cACertificateSubjectKeyIdEntry.IsRootCa) { if (!cACertificateEntry.IsTrusted) { return(nullCertificate); } } else { if (cACertificateEntry.IsRevoked) { return(nullCertificate); } } Certificate caCertificate = CertificateParser.Parse(cACertificateEntry.CertificateValue); if (!caCertificate.IsLoaded) { return(nullCertificate); } if (!CertificateValidator.CheckValidityPeriod(caCertificate)) { return(nullCertificate); } return(caCertificate); }