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));
        }