/// <summary> /// Localizar o certificado digital previamente selecionado nas configurações. /// </summary> /// <returns>X509Certificate2 - Certificado selecionado para NF-e</returns> internal static X509Certificate2 Certificado_Digital(int iEmpresa) { Certificado cert = new Certificado(); string sQuery = "select Serial_Number_Certifica_Digital from empresas where empresa = " + iEmpresa; string sSerial_Number_Certificado = CompSoft.Data.SQL.ExecuteScalar(sQuery).ToString(); X509Certificate2 X509Cert = cert.Buscar_Certificado_Digital(sSerial_Number_Certificado, X509FindType.FindBySerialNumber); return(X509Cert); }
/// <summary> /// Assina arquivo XML /// </summary> /// <param name="_arquivo">Path completo do arquivo que será assinado.</param> /// <param name="_uri">URI a ser assinada (Ex.: infCanc, infNFe, infInut, etc.)</param> /// <param name="sSerialNumber">string com o Serial number para localizar o Certificado Digital</param> /// <returns></returns> public bool AssinarArquivoXML(string _arquivo, string _uri, string sSerialNumber) { bool bRetorno = false; if (string.IsNullOrEmpty(_arquivo) || !File.Exists(_arquivo)) { bRetorno = false; } else { if (_uri == null) { bRetorno = false; } else { string _stringXml; //-- Le o arquivo xml StreamReader SR; SR = File.OpenText(_arquivo); _stringXml = SR.ReadToEnd(); SR.Close(); //-- Realiza assinatura AssinaturaDigital AD = new AssinaturaDigital(); X509Certificate2 cert = new X509Certificate2(); //-- Seleciona certificado do repositório MY do windows ou um certificado previamento selecionado. Certificado certificado = new Certificado(); if (string.IsNullOrEmpty(sSerialNumber)) { cert = certificado.Buscar_Certificado_Digital(); } else { cert = certificado.Buscar_Certificado_Digital(sSerialNumber, X509FindType.FindBySerialNumber); } //-- Caso o certificado digital seja selecionado. if (certificado.Certificado_Selecionado) { //-- Avisa usuário sobre vencimento do certificado digital. this.Verifica_Vencimento_Certificado(cert); //-- Assina o XML. AssinaturaDigital.Retorno_Assinatura resultado = AD.Assinar(_stringXml, _uri, cert); if (resultado == AssinaturaDigital.Retorno_Assinatura.Sucesso) { //-- grava arquivo assinado StreamWriter SW; SW = File.CreateText(_arquivo.Trim()); SW.Write(AD.XMLStringAssinado); SW.Close(); bRetorno = true; } else { MsgBox.Show(AD.mensagemResultado); bRetorno = false; } } else { bRetorno = false; } } } return(bRetorno); }