Example #1
0
        private PessoaJuridica ObterDadosPessoaJuridica(X509Certificate2 certificado)
        {
            try
            {
                byte[]     extensao;
                ASN1Helper helper;
                string     cnpj             = null;
                string     inss             = null;
                string     razaoSocial      = null;
                string     nomeReponsavel   = null;
                string     dadosResponsavel = null;
                string     oid;

                int    ini  = certificado.Subject.IndexOf("CN=") + 3;
                int    meio = certificado.Subject.IndexOf(":", ini);
                string razaoSocialCN;
                if (meio != -1)
                {
                    razaoSocialCN = certificado.Subject.Substring(ini, meio - ini);
                }
                else
                {
                    int fim = certificado.Subject.IndexOf(", ", ini) - 1;
                    razaoSocialCN = certificado.Subject.Substring(ini, fim - ini + 1);
                }

                foreach (var ext in certificado.Extensions)
                {
                    if (ext.Oid.Value == OID_NOME_ALTERNATIVO_SUJEITO)
                    {
                        if (ext.Format(false).Contains(OID_PJ_DADOS_RESPONSAVEL))
                        {
                            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);
                                    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 (oid.Equals(OID_PJ_CNPJ))
                                    {
                                        cnpj = helper.TagList[i].Format(extensao);
                                    }
                                    else if (oid.Equals(OID_PJ_INSS))
                                    {
                                        inss = helper.TagList[i].Format(extensao);
                                    }
                                    else if (oid.Equals(OID_PJ_NOME_EMPRESARIAL))
                                    {
                                        razaoSocial = helper.TagList[i].Format(extensao);
                                    }
                                    else if (oid.Equals(OID_PJ_NOME_RESPONSAVEL))
                                    {
                                        nomeReponsavel = helper.TagList[i].Format(extensao);
                                    }
                                    else if (oid.Equals(OID_PJ_DADOS_RESPONSAVEL))
                                    {
                                        dadosResponsavel = helper.TagList[i].Format(extensao);
                                    }
                                }
                            }
                            if (razaoSocialCN != null && razaoSocial != null)
                            {
                                razaoSocial = $"{razaoSocial} ({razaoSocialCN})";
                            }
                            else
                            {
                                razaoSocial = razaoSocial ?? razaoSocialCN;
                            }
                            var pessoaJuridica = new PessoaJuridica(cnpj, inss, razaoSocial, nomeReponsavel, dadosResponsavel);
                            return(pessoaJuridica);
                        }
                        else
                        {
                            throw new CertificadoNetException(2);
                        }
                    }
                }

                return(null);
            }
            catch (Exception ex)
            {
                throw new CertificadoNetException(6, ex);
            }
        }
Example #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);
            }
        }