public PessoaJuridica(string cnpj, string inss, string razaoSocial, string nomeResponsavel, string dadosResponsavel) { try { if (string.IsNullOrEmpty(cnpj) || string.IsNullOrEmpty(razaoSocial) || string.IsNullOrEmpty(nomeResponsavel) || string.IsNullOrEmpty(dadosResponsavel)) { throw new CertificadoNetException(4); } CNPJ = cnpj; INSS = inss; RazaoSocial = razaoSocial; Responsavel = new PessoaFisica(nomeResponsavel, dadosResponsavel); } catch (Exception ex) { throw new CertificadoNetException(4, ex); } }
private PessoaFisica ObterDadosPessoaFisica(X509Certificate2 certificado) { try { string oid; byte[] extensao; ASN1Helper helper; foreach (var ext in certificado.Extensions) { if (ext.Oid.Value == OID_NOME_ALTERNATIVO_SUJEITO) { if (ext.Format(false).Contains(OID_PF_DADOS_TITULAR)) { extensao = ext.RawData; helper = new ASN1Helper(ref extensao); for (int i = 0; i < helper.TagList.Count; i++) { if (helper.TagList[i].TagId == TagID.OBJECT_IDENTIFIER) { oid = helper.TagList[i].Format(extensao); if (oid == OID_PF_DADOS_TITULAR) { for (i++; (i < helper.TagList.Count) && ((helper.TagList[i].TagId != TagID.OCTET_STRING) && (helper.TagList[i].TagId != TagID.UTF8_STRING) && (helper.TagList[i].TagId != TagID.PrintableString)); i++) { ; } if (i < helper.TagList.Count) { var dadosTitular = helper.TagList[i].Format(extensao); int ini = certificado.Subject.IndexOf("CN=") + 3; int meio = certificado.Subject.IndexOf(":", ini); string nomeTitular; if (meio != -1) { nomeTitular = certificado.Subject.Substring(ini, meio - ini); } else { int fim = certificado.Subject.IndexOf(", ", ini) - 1; nomeTitular = certificado.Subject.Substring(ini, fim - ini + 1); } var pessoaFisica = new PessoaFisica(nomeTitular, dadosTitular); return(pessoaFisica); } } } } } else { throw new CertificadoNetException(1); } } } return(null); } catch (Exception ex) { throw new CertificadoNetException(5, ex); } }
public async Task <bool> ValidateDigitalSignatures(byte[] file) { try { PdfReader reader = new PdfReader(file); // ordenar a lista de assinaturas var orderedSignatureNames = GetOrderedSignatureNames(reader); // ordernar as posições das tabelas de referência cruzada List <int> XrefByteOffsetOrdered = reader.XrefByteOffset.Cast <int>().ToList(); XrefByteOffsetOrdered.Sort(); var assinaramTodoDocumentoSN = reader.SignaturesCoverWholeDocument().Cast <string>().ToList(); List <KeyValuePair <string, string> > naoAssinaramTodoDocumento = new List <KeyValuePair <string, string> >(); List <KeyValuePair <string, string> > assinaramTodoDocumento = new List <KeyValuePair <string, string> >(); foreach (string signatureName in orderedSignatureNames) { PdfPkcs7 pkcs7 = reader.AcroFields.VerifySignature(signatureName); var messages = await OnlineChainValidation( pkcs7.SigningCertificate.GetEncoded(), Configuration["OutboundValidacaoCertificado"] + "/certificado/api/validar-certificado" ); if (!string.IsNullOrWhiteSpace(messages)) { throw new Exception(messages); } CertificadoDigital cert = new CertificadoDigital(pkcs7.SigningCertificate.GetEncoded()); // validations ValidCertificateChain(cert); ValidDigitalCertificate(cert, pkcs7); ValidSignatureType(cert); ValidSignatureDate(pkcs7); IsDocumentUnadulterated(pkcs7); // cpf-cnpj, name, signature's date PessoaFisica pessoaFisica = cert.PessoaJuridica?.Responsavel ?? cert.PessoaFisica; string pessoa = $"{pessoaFisica.Nome.ToUpper()}"; if (cert.PessoaJuridica != null) { pessoa += $" ({cert.PessoaJuridica.RazaoSocial.ToUpper()})"; } if (!assinaramTodoDocumentoSN.Contains(signatureName)) { naoAssinaramTodoDocumento.Add(new KeyValuePair <string, string>(pessoa, signatureName)); } else { assinaramTodoDocumento.Add(new KeyValuePair <string, string>(pessoa, signatureName)); } } // Deixar apenas a última assinatura de cada pessoa/cnpj var distinctSignersList = RemoverAssinaturasDuplicadas(assinaramTodoDocumento); var distinctNaoAssinaramTodoDocumento = RemoverAssinaturasDuplicadas(naoAssinaramTodoDocumento); TodosAssinaramDocumentoPorInteiro(distinctNaoAssinaramTodoDocumento); return(true); } catch (Exception e) { throw new Exception($"Ocorreu um erro: {e.Message}"); } }