Ejemplo n.º 1
0
        public bool VerificarSelloComprobante(string cadenaOriginal, string sello, HashAlgorithm algoritmo)
        {
            byte[]        digest       = Hash.BytesFromBytes(Encoding.UTF8.GetBytes(cadenaOriginal), algoritmo);
            StringBuilder llavePublica = Rsa.GetPublicKeyFromCert(Convert.ToBase64String(Convert.FromBase64String(_Base64)));

            if (llavePublica.Length == 0)
            {
                return(false);
            }
            byte[] sellado = System.Convert.FromBase64String(sello);
            if (sellado.Length != Rsa.KeyBytes(llavePublica.ToString()))
            {
                return(false);
            }
            sellado = Rsa.RawPublic(sellado, llavePublica.ToString());
            if (sellado.Length == 0)
            {
                return(false);
            }
            sellado = Rsa.DecodeDigestForSignature(sellado);
            if (sellado.Length == 0)
            {
                return(false);
            }
            return(String.Compare(Cnv.ToHex(sellado), Cnv.ToHex(digest), true) == 0);
        }