Ir para conteúdo
  • Cadastre-se

dev botao
  • Este tópico foi criado há 4863 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

  • Fundadores
Postado

Olá pessoal,

Estou concluindo uma ampla reforma na Unit ACBrEAD, que foi promovida a Componente...

Com ela agora teremos os seguintes métodos:


Procedure GerarChaves( var AChavePublica : AnsiString;
var AChavePrivada : AnsiString ) ;

function AssinarArquivoComEAD( const NomeArquivo: String) : AnsiString ;

function VerificarEADArquivo( const NomeArquivo: String): Boolean ; overload ;
function VerificarEAD( const AString : AnsiString): Boolean ; overload ;
function VerificarEAD( const AStringList : TStringList): Boolean ; overload ;
function VerificarEAD( const MS : TMemoryStream; EAD: AnsiString):
Boolean ; overload ;

Function GerarXMLeECFc( const NomeSwHouse, Diretorio : String ) : Boolean ;
Procedure CalcularModuloeExpoente( var Modulo, Expoente : AnsiString );
Function CalcularChavePublica : AnsiString ;

function CalcularMD5Arquivo( const NomeArquivo: String): AnsiString ; overload ;
function CalcularMD5( const AString : AnsiString): AnsiString ; overload ;
function CalcularMD5( const AStringList : TStringList): AnsiString ; overload ;
function CalcularMD5( const MS : TMemoryStream): AnsiString ; overload ;

function CalcularEADArquivo( const NomeArquivo: String): AnsiString ; overload ;
function CalcularEAD( const AString : AnsiString): AnsiString ; overload ;
function CalcularEAD( const AStringList : TStringList): AnsiString ; overload ;
function CalcularEAD( const MS : TMemoryStream): AnsiString ; overload ;
[/code]

Para fazer essas funções usei uma Unit de "Marco Ferrante", chamada: [b]libeay32.pas[/b]... Com ela fica "possível" trabalhar com o OpenSSL de forma direta, ou seja, abrindo a [b]libeay32.dll[/b]...

Link: http://www.disi.unige.it/person/Ferrant ... hiopenssl/

Portanto o ACBrEAD apenas dependerá dessa DLL para conseguir fazer todas as funções acima, e não mais executará chamadas "run" ao programa OpenSSL.exe... Outra vantagem é que agora o ACBrEAD não precisa mais gravar as chaves em disco, elas são manipuladas epenas na memória, e por um breve período de tempo (muito mais seguro)

Em anexo está um exemplo do EADTeste.exe, em que estou trabalhando, e que permite comprovar o funcionamento...

EADTeste.zip

Note porém, que o EADTeste.exe depende da [b]libeay32.dll[/b] instalada no Path do Sistema Operacional ou na mesma pasta da aplicação... para iniciar a sua execução

(você pode encontrar essa DLL em [b]ACBr\DLLs\OpenSSL[/b])

Isso ocorre, porque a Unit do Marco Ferrante faz ligações com a Libeay32.dll de forma estática... Ou seja, todo programa que fizer "Uses" dessa Unit ficará com a dependência dessa DLL para ser executado

Isso não chega a ser um problema para programas como o EADTeste... mas vários componentes do ACBr usam a Unit ACBrEAD, e por consequência, tb ficarão com essa dependência... São eles: ACBrRFD e ACBrPAF... O ACBrRFD é usado pelo ACBrECF...

Ou seja, qualquer aplicação que ficar uso de ACBrECF, ACBrRFD, ACBrPAF ou ACBrEAD ficará dependendo dessa [b]libeay32.dll[/b] para ser executada...

[b]Agora a pergunta... [/b][b][color=#FF0000]Você acha que isso é um problema para a sua aplicação ? [/color][/b]

Gostaria da opiniões dos usuários dos componentes do ACBr, antes de continuar com o próximo passo...

Como alternativa, poderíamos:

[b]- Deixar como está, causando a dependência de libeay32.dll[/b]

(essa DLL já é distribuida com os fontes do ACBr, bastaria copia-la no mesmo diretório da sua aplicação... acredito que muitos já a possuem por causa do NFe... e no Linux ela já é nativa. Mas provavelmente receberíamos um grande "enxurrada" de perguntas sobre esse "erro")

[b]- Modificar o ACBrEAD para sempre usar o OpenSSL.EXE[/b]

(isso elimina a dependência, mas fica menos eficiente e elegante... além de menos seguro, pois as chaves sempre precisariam ser gravadas no disco)

[b]- Modificar a Unit libeay32.pas para fazer a carga dinâmica.[/b]

(isso seria o ideal, mas é extremamente difícil e trabalhoso...)

EADTeste.zip

Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Postado

Nao vejo problema algum em distribuir a dll com o sistema. Inclusive ja distribuo essa dll com o meu PDV pois utilizo a dll da bematech para assinar. Ha algum tempo ja pensava em fazer essa alteracao. Otima iniciativa. Assim so é necessária a dll libeay.

Na dll da bematech há um problema de termos que instalar o .net framework. ja verificou se isso acontece com a libeay ?

Ricardo Oliveira

BrPDV Comércio e Serviços Eireli.

www.brpdv.com.br

  • Fundadores
Postado

Apenas a DLL é necessária (não precisa de .NET)

No Linux o OpenSSL já é instalado por padrão, pois vários serviços dependem dele... Ou seja, no Linux provavelmente não será necessário distribuir a DLL

Só agora notei que a Unit do Marco Ferrante "libeay32.pas" não está compilando no Linux (com o Lazarus)... estou tentando resolver isso...

Também consegui outro avanço... O FPC (compilador do Lazarus) possui uma Unit nativa para acesso a algumas funções do OpenSSL... ela foi escrita com base no trabalho do Lucas (Synapse) e do Marco... Faltavam alguns métodos que estou usando... mas que já implementei nela.... No Windows tudo OK, vou testar no Linux... e depois preciso verificar a compatibilidade dessa Unit com o Delphi 7 e Delphi 2010 (Unicode)

A grande vantagem dessa Unit do FPC é que a carga da DLL é feita de forma dinâmica... Ou seja, não dependerá da DLL para simplesmente executar o programa, mas acusará um erro caso alguma método do ACBrEAD seja chamado e a DLL não seja encontrada.

  • Curtir 1
Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

  • Consultores
Postado

Daniel,

Com certeza é uma boa idéia. Se houver como fazer a carga da DLL de forma dinâmica seria bem melhor, mas a dependência da DLL não é problema nenhum pra mim.

[]'s

Consultor SAC ACBr

Elton
Profissionalize o ACBr na sua empresa, conheça o ACBr Pro.

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.
Postado

Oi, sou novo no forum, mais já estou usando o compoente ACBrPAF para validar os arquivos do MENU FISCAL. Eu gostaria de saber se com esta nova alteração eu terei que realizar modificações no meu código ou só terei que recompilar o componente ACBrPAF e minha aplicação para fazer uso da DLL e não utilizar mais o aplicativo OpenSSL.EXE

  • 2 semanas depois ...
Postado

Boa tarde.

Daniel, utilizo o componente ACBrECF e até então eu não utilizava a libeay32.dll em minha aplicação. Não tenho problemas em necessitar da DLL no diretório do programa, até porque eu ja tinha criado um procedimento para realizar o download da DLL de um servidor web diretamente para o PC do cliente, pois implementei o envio do XML por e-mail pra NF-e que também usa esta DLL.

Aí que está meu problema, pois agora sem a DLL o programa nem chega a rodar, apenas mostra a msg que a DLL não existe:

---------------------------

ControleComercial.exe - Erro do sistema

---------------------------

O programa não pode ser iniciado porque está faltando libeay32.dll no seu computador. Tente reinstalá-lo para resolver esse problema.

---------------------------

OK

---------------------------

Se tivesse como mudar pra solicitar a DLL somente no momento em que o componente for utilizado ja seria de grande valía, pois assim eu poderia efetuar o download da DLL antes do erro.

Faço desta forma pq são muitos clientes para ficar enviando a DLL manualmente.

Criei um caso no Mantis com este assunto, é o 897.

Obrigado

Allan Wolski

  • Fundadores
Postado

Por favor leia o inicio do Tópico... a Unit utilizada na versão Delphi não tem carga dinâmica... e ajusta-la para isso seria um trabalho "hercúleo"...

Atualmente não tenho motivação ou tempo para mudar isso... Mas uma ideia seria criar uma DLL intermediária... Exemplo: ACBrEAD.dll e o componente ACBrEAD faria carga dinâmica dela... isso é bem mais simples pois são poucos métodos que o ACBrEAD realmente usa da libeay32.dll

Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

  • 3 semanas depois ...
  • Membros Pro
Postado

Daniel,

Existe uma versão do ACBr anterior a esta mudança no EAD? Porque fiz o update por SVN, compilei e enviei para o clientes sem saber desse esquema da libeay32... ou seja, me ferrei. Sinceramente para mim esse recurso não tem nenhuma utilidade, e este é o problema.

Obrigado.

  • Fundadores
Postado

NAO.. mas vc pode recorrer ao LOG do SVN, e baixar uma revisão da sua escolha...

Ou ainda recorrer aos seus Backups internos...

O assunto foi amplamente discutido aqui... todos tiveram chance de opinar...

Porque vc não distribui a DLL junto com o novo EXE em um ZIP ??? fácil, fácil, e o problema não ocorre mais

Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

  • 2 semanas depois ...
  • 3 meses depois ...
Postado

Prezado Daniel,

Desculpe minha ignorância mas você poderia me explicar por que existe a propriedade EAD tanto no TACBrPAF quanto no TACBrECF?

[]s,

Maurício

  • Consultores
Postado

Olá jmz,

Tanto o TACBrPAF quanto o TACBrECF geram arquivos para o PAF que precisam ser assinados com o registro EAD no final. Eles usam o componente TACBrEAD para gerar essa assinatura. Essa propriedade é onde você relaciona os componentes. Deu pra entender?

[]'s

Consultor SAC ACBr

Elton
Profissionalize o ACBr na sua empresa, conheça o ACBr Pro.

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.
Postado

Olá jmz,

Tanto o TACBrPAF quanto o TACBrECF geram arquivos para o PAF que precisam ser assinados com o registro EAD no final. Eles usam o componente TACBrEAD para gerar essa assinatura. Essa propriedade é onde você relaciona os componentes. Deu pra entender?

Prezado EMBarbosa,

Isso significa que se eu tiver os componentes TACBrPAF e TACBrECF em forms diferentes eu devo repetir o componente TACBrEAD nos dois forms? E a propriedade OnPAFGetKeyRSA do TACBrPAF deve ficar vazia ao usar o TACBrEAD?

[]s,

Maurício

  • Consultores
Postado

Se o componente ACBrEAD estiver numa unit que é acessível por ambos, você pode usar só um.

Você poderia deixá-lo num datamodule, por exemplo.

[]'s

Consultor SAC ACBr

Elton
Profissionalize o ACBr na sua empresa, conheça o ACBr Pro.

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.
Postado

Se o componente ACBrEAD estiver numa unit que é acessível por ambos, você pode usar só um.

Você poderia deixá-lo num datamodule, por exemplo.

Ok, obrigado pela ajuda. Farei as adaptações aqui e volto a postar.

[]s,

Maurício

  • Este tópico foi criado há 4863 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.
Visitante
Este tópico está agora fechado para novas respostas
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.