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);
            }
        }
Exemple #2
0
        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}");
            }
        }