/// <summary>
 /// Retorna el sello digital para el certificado y firmando con la llave.
 /// </summary>
 /// <param name="rutaLlave"></param>
 /// <param name="clavePrivada"></param>
 /// <param name="cadenaOriginal"></param>
 /// <returns></returns>
 public string GetSelloDigital(ref string error, string rutaLlave, string clavePrivada, string cadenaOriginal)
 {
     try
     {
         byte[] ArrayKey = File.ReadAllBytes(rutaLlave); // Convertimos el archivo anterior a byte
         //1) Desencriptar la llave privada, el primer parámetro es la contraseña de llave privada y el segundo es la llave privada en formato binario.
         Org.BouncyCastle.Crypto.AsymmetricKeyParameter asp = Org.BouncyCastle.Security.PrivateKeyFactory.DecryptKey(clavePrivada.ToCharArray(), ArrayKey);
         //2) Convertir a parámetros de RSA
         Org.BouncyCastle.Crypto.Parameters.RsaKeyParameters key = (Org.BouncyCastle.Crypto.Parameters.RsaKeyParameters)asp;
         //3) Crear el firmador con SHA1
         Org.BouncyCastle.Crypto.ISigner sig = Org.BouncyCastle.Security.SignerUtilities.GetSigner("SHA-256withRSA");
         //La siguiente linea es para generar el sello para la nueva versión de CFDI 3.3
         // Org.BouncyCastle.Crypto.ISigner sig = Org.BouncyCastle.Security.SignerUtilities.GetSigner("SHA-256withRSA");
         //4) Inicializar el firmador con la llave privada
         sig.Init(true, key);
         // 5) Pasar la cadena original a formato binario
         byte[] bytes = Encoding.UTF8.GetBytes(cadenaOriginal);
         // 6) Encriptar
         sig.BlockUpdate(bytes, 0, bytes.Length);
         byte[] bytesFirmados = sig.GenerateSignature();
         // 7) Finalmente obtenemos el sello
         String sello = Convert.ToBase64String(bytesFirmados);
         return(sello);
     }
     catch (Exception e)
     {
         _logger.EscribirError(e.ToString());
         error = "Problemas al generar xml para el timbrado, favor revisar clave o certificados.";
         return("");
     }
 }
Exemplo n.º 2
0
 public bool VerifySignature(AsymmetricKeyParameter publicKey, byte[] data, byte[] signature)
 {
     Org.BouncyCastle.Crypto.ISigner signer = SignerUtilities.GetSigner(Algorithm);
     signer.Init(false, publicKey);
     signer.BlockUpdate(data, 0, data.Length);
     return(signer.VerifySignature(signature));
 }
Exemplo n.º 3
0
 public byte[] Sign(AsymmetricKeyParameter privatekey, byte[] data)
 {
     Org.BouncyCastle.Crypto.ISigner signer = SignerUtilities.GetSigner(Algorithm);
     signer.Init(true, privatekey);
     signer.BlockUpdate(data, 0, data.Length);
     return(signer.GenerateSignature());
 }
Exemplo n.º 4
0
        public string SignString(string contents, string privateKey)
        {
            var curve         = SecNamedCurves.GetByName("secp256k1");
            var domain        = new ECDomainParameters(curve.Curve, curve.G, curve.N, curve.H);
            var keyParameters = new ECPrivateKeyParameters(new BigInteger(privateKey, 16), domain);

            Org.BouncyCastle.Crypto.ISigner signer = SignerUtilities.GetSigner("SHA-256withECDSA");
            signer.Init(true, keyParameters);
            signer.BlockUpdate(Encoding.ASCII.GetBytes(contents), 0, contents.Length);
            var signature = signer.GenerateSignature();

            return(Base58Encoding.Encode(signature));
        }
Exemplo n.º 5
0
        public bool SignatureIsValid(string signature, string contents, string publicKey)
        {
            var curve          = SecNamedCurves.GetByName("secp256k1");
            var domain         = new ECDomainParameters(curve.Curve, curve.G, curve.N, curve.H);
            var publicKeyBytes = Base58Encoding.Decode(publicKey);
            var q             = curve.Curve.DecodePoint(publicKeyBytes);
            var keyParameters = new ECPublicKeyParameters(q, domain);

            Org.BouncyCastle.Crypto.ISigner signer = SignerUtilities.GetSigner("SHA-256withECDSA");
            signer.Init(false, keyParameters);
            signer.BlockUpdate(Encoding.ASCII.GetBytes(contents), 0, contents.Length);
            var signatureBytes = Base58Encoding.Decode(signature);

            return(signer.VerifySignature(signatureBytes));
        }