public static byte[] GetRootCertificateHash(byte[] imageBytes) { List <byte[]> certificates = SecondaryExecutableHelper.ExtractCertificates(imageBytes); int rootCertificateIndex = CertificateValidationHelper.GetRootCertificateIndex(certificates); if (rootCertificateIndex == -1) { return(null); } byte[] rootCertificate = certificates[rootCertificateIndex]; return(SHA256.Create().ComputeHash(rootCertificate)); }
private static byte[] DecryptFileSignature(byte[] imageBytes) { List <byte[]> certificates = SecondaryExecutableHelper.ExtractCertificates(imageBytes); if (certificates.Count > 0) { byte[] certificateBytes = certificates[0]; byte[] signatureBytes = SecondaryExecutableHelper.ExtractSignature(imageBytes); RSAParameters rsaParameters = CertificateHelper.GetRSAParameters(certificateBytes); byte[] decodedHash = RSAHelper.DecryptSignature(signatureBytes, rsaParameters); return(decodedHash); } else { throw new Exception("According to the header, the file does not contain a certificate"); } }
public static bool VerifyCertificateStore(byte[] imageBytes) { List <byte[]> certificates = SecondaryExecutableHelper.ExtractCertificates(imageBytes); return(CertificateValidationHelper.VerifyCertificateChain(certificates)); }