private IICType GetIICandIICSignature(RegisterInvoiceRequest invoiceRequest, X509Certificate2 certificate, string issuerTIN) { IICType iicType = null; if (invoiceRequest.Signature != null) { throw new Exception("Invoice already signed"); } if (invoiceRequest != null && invoiceRequest.Invoice.IIC == null && invoiceRequest.Invoice.IICSignature == null) { InvoiceType invoice = invoiceRequest.Invoice; IICGenerator iicTypeGenerator = new IICGenerator(certificate); IICConfig iicConfig = new IICConfig() { IssuerTIN = issuerTIN, DateTimeCreated = invoice.IssueDateTime.ToString(Fiscalization.DATE_FORMAT_LONG), InvoiceNumber = invoice.InvNum, BusinUnitCode = invoice.BusinUnitCode, TCRCode = invoice.TCRCode, SoftCode = invoice.SoftCode, TotalPrice = invoice.TotPrice.ToString() }; iicType = iicTypeGenerator.Generate(iicConfig); } return(iicType); }
public IICType Generate(IICConfig iicConfig) { IICValidator.ThrowExceptionIfNotValid(iicConfig); var inputParameter = GetInputParameterForIIC(iicConfig); // Load a private from a key store RSA privateKey = _certificate.GetRSAPrivateKey(); IICType iicType = new IICType(); // Create IIC signature according to RSASSA-PKCS-v1_5 byte[] iicSignature = privateKey.SignData(Encoding.ASCII.GetBytes(inputParameter), HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1); iicType.IICSignature = BitConverter.ToString(iicSignature).Replace("-", string.Empty); // Hash IIC signature with MD5 to create IIC byte[] iic = ((HashAlgorithm)CryptoConfig.CreateFromName("MD5")).ComputeHash(iicSignature); iicType.IIC = BitConverter.ToString(iic).Replace("-", string.Empty); return(iicType); }