Loading repository data…
Loading repository data…
FiscalAPI / repository
Esta librería es una de varias que existen dentro de Fiscalapi, fue creada para trabajar con los archivos CSD y FIEL del SAT de manera sencilla en .NET
A transparent discovery signal based on current public GitHub metadata.
This score does not audit code, security, maintainers, documentation quality, or suitability. Verify the repository and its current documentation before adoption.
Libreria de https://fiscalapi.com para trabajar con archivos CSD y FIEL del SAT de manera sencilla en .NET. Credentials simplifica la firma (sellado), la verificación de firmas, el cálculo de hashes (por ejemplo, para servicios de descarga masiva de XML y metadatos), así como la obtención de información relevante de los certificados y llaves públicas del SAT.
La firma digital es un proceso criptográfico que garantiza la autenticidad, integridad y no repudio de un documento o mensaje. En México, el SAT requiere que los contribuyentes utilicen un Certificado de Sello Digital (CSD) para firmar (sellar) las facturas, mientras que una Firma Electrónica Avanzada (FIEL) se utiliza para firmar documentos de cualquier otro tipo (contratos, acuerdos, cotizaciones, correos, etc) de manera legalmente válida.
openssl.Certificate
.cer (X.509 DER).PrivateKey
.key (PKCS#8 DER).Credential
Certificate y PrivateKey.NuGet Package Manager:
NuGet\Install-Package Fiscalapi.Credentials
.NET CLI:
dotnet add package Fiscalapi.Credentials
// Cargar el archivo .cer
var cerPath = @"C:\Users\Usuario\Desktop\cer.cer";
var cerBytes = File.ReadAllBytes(cerPath);
var cerBase64 = Convert.ToBase64String(cerBytes);
// Crear instancia de Certificate
var certificate = new Certificate(cerBase64);
// (Por ejemplo, cerBase64 puede guardarse en BD y luego recuperarse)
// Mostrar información básica del certificado
Console.WriteLine($"PlainBase64: {certificate.PlainBase64}");
Console.WriteLine($"RFC: {certificate.Rfc}");
Console.WriteLine($"Razón Social: {certificate.Organization}");
Console.WriteLine($"Serial Number: {certificate.SerialNumber}");
Console.WriteLine($"Certificate Number: {certificate.CertificateNumber}");
Console.WriteLine($"Válido desde: {certificate.ValidFrom}");
Console.WriteLine($"Válido hasta: {certificate.ValidTo}");
Console.WriteLine($"¿Es FIEL?: {certificate.IsFiel()}");
Console.WriteLine($"¿Está vigente?: {certificate.IsValid()}"); // ValidTo > DateTime.Now
// Convertir X.509 DER base64 a X.509 PEM
var pemCertificate = certificate.GetPemRepresentation();
File.WriteAllText("MyPemCertificate.pem", pemCertificate);
// Cargar el archivo .key
var keyPath = @"C:\Users\Usuario\Desktop\key.key";
var keyBytes = File.ReadAllBytes(keyPath);
var keyBase64 = Convert.ToBase64String(keyBytes);
// Crear instancia de PrivateKey con la contraseña
var privateKey = new PrivateKey(keyBase64, "TuPasswordDeLaLlave");
// Convertir PKCS#8 DER a PKCS#8 PEM
var PemPrivateKey = privateKey.GetPemRepresentation();
File.WriteAllText("MyPemPrivateKey.pem", PemPrivateKey);
// Crear instancia de Credential a partir de certificate y privateKey
var cred = new Credential(certificate, privateKey);
var dataToSign = "Hola Mundo"; // Reemplazar con cadena original u otro contenido
// Firmar datos
var signedBytes = cred.SignData(dataToSign);
// Verificar firma
var originalDataBytes = Encoding.UTF8.GetBytes(dataToSign);
var isValidSignature = cred.VerifyData(originalDataBytes, signedBytes);
Console.WriteLine($"¿Firma Válida?: {isValidSignature}");
// Crear archivo PFX (PKCS#12)
var pfxBytes = cred.CreatePFX();
File.WriteAllBytes("MyPFX.pfx", pfxBytes);
// Calcular y verificar hash (por ejemplo, para descarga masiva XML)
var dataToHash = "XML canonical representation";
var hashBase64 = cred.CreateHash(dataToHash);
var isHashValid = cred.VerifyHash(dataToHash, hashBase64);
Console.WriteLine($"¿Hash Válido?: {isHashValid}");
// Información adicional
Console.WriteLine($"Tipo de Credencial: {cred.CredentialType}"); // Enum: Fiel || Csd
Console.WriteLine($"¿Es FIEL válida?: {cred.IsValidFiel()}");
Los certificados provistos por el SAT suelen estar en formato X.509 DER (.cer), mientras que las llaves privadas están en PKCS#8 DER (.key). Estos formatos no se pueden usar directamente en la mayoría de las bibliotecas de C#, pero Credentials resuelve este problema convirtiéndolos internamente a PEM (.pem) sin requerir openssl.
Esta conversión consiste básicamente en:
Por lo tanto, no necesitas realizar la conversión manual ni depender de utilerías externas para utilizar tus archivos CSD o FIEL.
SHA256withRSA.git checkout -b feature/AmazingFeature.git commit -m 'Add some AmazingFeature'.git push origin feature/AmazingFeature.Este proyecto está licenciado bajo la Licencia MPL. Consulta el archivo LICENSE para más detalles.
Desarrollado con ❤️ por Fiscalapi