Ead Assinatura Digital PAF-ECF

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

infosys2
Usuário Nível 1
Usuário Nível 1
Mensagens: 23
Registrado em: 10 Out 2008 06:36
Localização: Sao Pulo
Contato:

Ead Assinatura Digital PAF-ECF

Mensagem por infosys2 »

Gostaria de saber como gerar a cheve EAD para o PAF-ECF

Eu imagino que seja assim:

Código: Selecionar todos

PROCEDURE Main( cFile )

     cPrivada:=HB_MD5File( "sistema.exe" )
      
     IF PCount() > 0 .AND. File( cFile )
         cPublica:=HB_MD5File( cFile )
      ENDIF

     cEAD:=cPrivada+cPublica

   RETURN

Gostaria que voces comentasse por gentileza...
Editado pela última vez por Toledo em 23 Jun 2010 09:25, em um total de 1 vez.
Razão: Mensagem editada para colocar a tag [ code ]<br>Veja como utilizar esta tag: http://www.pctoledo.com.br/forum/faq.php?mode=bbcode#f2r1
Avatar do usuário
binho_fasa
Usuário Nível 2
Usuário Nível 2
Mensagens: 93
Registrado em: 06 Jul 2004 12:53
Localização: Brazil
Contato:

Re: Ead Assinatura Digital PAF-ECF

Mensagem por binho_fasa »

De uma olhada no Blog do Claudenir, contém informações que podem te ajudar. O pessoal da Daruma está dando uma grande ajuda aos desenvolvedores quanto ao PAF-ECF para soluções de dúvidas.
Link: http://claudenircandrade.spaces.live.com/blog/


[]´s
Fabio Souza.
Avatar do usuário
wanderley.monteiro
Usuário Nível 1
Usuário Nível 1
Mensagens: 30
Registrado em: 14 Ago 2008 10:42
Localização: São Bernardo do Campo - São Paulo

Re: Ead Assinatura Digital PAF-ECF

Mensagem por wanderley.monteiro »

Olá Pessoal, depois de muito suor, erros, correrias finalmente conseguimos.
Rotina para gerar o EAD do PAF-ECF, válida pelo eECFc.

Divirtam-se e obrigados a todos pelas dicas de como usar o OpenSSL.

[]s

WMonteiro

Código: Selecionar todos

FUNCTION GERA_EAD( cFile )

*****************************************
* Assina Digitalmenete um Arquivo Texto *
* Rotina usada para Assinar o PAF-ECF   *
* CA-Clipper 5.2 / Xharbour + GTWVW     *
* Programadores: Waderley Monteiro      *
*                Jair Barreto           *
* Data 29/05/2009                       *
*****************************************

LOCAL cScreen
LOCAL cFileTemp1:= "ARQ1.TMP"
LOCAL cFileTemp2:= "ARQ2.TMP"
LOCAL nHandle
LOCAL aBuffer    := {}
LOCAL cReply     := ""
LOCAL cSignature := ""

nHandle := FCREATE(cFileTemp1, 1)

IF nHandle ==  -1
   ALERT( "Erro de cria‡Æo, erro DOS"+ strzero(FERROR(),2) )
   RETURN(.F.)
ELSE
   //=>Como obter uma chave privada:
   //RUN ("openssl genrsa -out chave.pem 1024")
   //Onde:
   //Chave.pem = arquivo onde a chave privada será gravada. Somente executar uma vez.

   FWRITE( nHandle,;
           '-----BEGIN RSA PRIVATE KEY-----'                                 + CHR(10) +;
           'MIICXQIBAAKBgQDlCS6WZHK7I80k7X1hdK9YVRzX+EAVTUKpgYpM/QHEoqrcITNd'+ CHR(10) +;
           'iu6ao1LaaaJHx1mLitBIiSQQOEVwZXm+7eDB8Q5KOxr0AfUkcS0AKrHZ3MyjVZbe'+ CHR(10) +;
           'T3YA5+DPBu6GDzOr4WUSNi6TuG9Y98yB3dTUcUolG06+SIqoBXYjXGOTSQIDAQAB'+ CHR(10) +;
           'AoGBANxZEBwaeZL3p6buYSEAjK2z/PL+4FBeK1M+0JqvEyNlyHHN80f8oP/fP5fn'+ CHR(10) +;
           '5vudm9W3cBlI74w3Rv8ScaWx3/eEa8PUabQn+CfuQznvG6sZkqkmu7Fatu6c9PL8'+ CHR(10) +;
           'TqUGVFcVCSULwbAtA4dDG8mfeY6muEacYqwH0pfH3srqVQvxAkEA+FLI2b/kbUXX'+ CHR(10) +;
           's0PRypavH9fMPF6LN6nRbNPS7bDH3FIBMqqaPUMe1yyn+ILjx998jdLhy7WchyJ+'+ CHR(10) +;
           '1Nym98v6hQJBAOwdwd0e6zX3j0VKJnXxinbvYWAVWoqyOSLjosf6SQ3HIruwCaL8'+ CHR(10) +;
           'kQjbWZUc7Y0RXL5QtsjXxmtOxR23nyK3KvUCQCu8sQGhScNxVL+PR2kuRyQNpzxO'+ CHR(10) +;
           'zqh8MZXAbVtOErWcf/eDku0NYGY3yFH+A86Vb2Ova/OsRiiLC9nED2h/td0CQQCx'+ CHR(10) +;
           'Ts9L+3Hp/tNp1vr2ysGN+skG3EI3sQpS9tpAjeTaIdYlV1aFPGC1Y/LrlOOWcZlR'+ CHR(10) +;
           'mU8Jl297GZXQcRlhemcZAkBVo1BEpmwwb+5mlQiwejDL/h60A51Z9ExQEjYR4qUP'+ CHR(10) +;
           'iFTY4A9iuVpyD/zIaZAinPSXmelrxLe4MKaVBTLAWp++'                    + CHR(10) +;
           '-----END RSA PRIVATE KEY-----'                                   )
   FCLOSE( nHandle )
ENDIF

// Gera assinatura rash 256 bytes
RUN ("OPENSSL.EXE dgst -md5 -sign " + cFileTemp1 + " -out " + cFileTemp2 + " -hex " + cFile )


//=>Como obter o m¢dulo da chave privada (necess rio para montar o XML do eECFc)
//Comando: openssl rsa -in chave.pem -modulus -out modulo.txt
//RUN ("OPENSSL.EXE rsa -in " + cFileTemp1 + " -modulus -out modulo.txt")
//Onde:
//Chave.pem = arquivo com a chave privada gerada anteriormente.
//modulo.txt = Arquivo onde ser  gravado o m¢dulo. No arquivo conter  o m¢dulo e a;
//chave privada. Vocˆ pega o m¢dulo e cola dentro do arquivo XML no campo espec¡fico.
//O expoente eu nÆo precisei alterar.

cReply := MEMOREAD(cFileTemp2)

cSignature:= "EAD"+(SUBSTR(cReply,AT("=",cReply)+2))+chr(10)

nHandle := FOPEN(cFile,2)      //  Abrir arquivo pra leitura e gravacao

FSEEK (nHandle, 0, 2)          //  Final do arquivo
FWRITE(nHandle,+cSignature )   //  Gravar no final do arquivo
FCLOSE(nHandle)                //  Fechar arquivo

RETURN( .T. )
// End of GERA_EAD()
Wanderley Monteiro
------------------------
MAMVTH - Customizações ADVPL/Protheus
São Bernardo do Campo SP
wanderley.monteiro@gmail.com
ADVPL, ERP TOTVS (Protheus), SQL, Oracle, Clipper 5.3b, Visual Fox Pro 9, xHarbour
cezarvm
Usuário Nível 1
Usuário Nível 1
Mensagens: 21
Registrado em: 07 Mai 2008 09:39

Re: Ead Assinatura Digital PAF-ECF

Mensagem por cezarvm »

Bom dia.

fiz alguns testes com o codigo que tu nos forneceu, mas quando ele executa a segunda vez o programa openssl,
ele trava e nao passa adiante, segue o codigo alterado, talvez tenha feito algo errado, se puder ajudar, eu desde ja agradeço.


seguinte ele mostra as seguintes mensagens:

loading 'screen' into random stae - done
Generating RSA provate key, 1024 bit long modulus
..................................+++++++
.++++++
e is 65537 (0x10001)

Código: Selecionar todos

FUNCTION GERA_EAD( cFile )

*****************************************
* Assina Digitalmenete um Arquivo Texto *
* Rotina usada para Assinar o PAF-ECF   *
* CA-Clipper 5.2 / Xharbour + GTWVW     *
* Programadores: Waderley Monteiro      *
*                Jair Barreto           *
* Data 29/05/2009                       *
*****************************************

LOCAL cScreen
LOCAL cFileTemp1:= "ARQ1.TMP"
LOCAL cFileTemp2:= "ARQ2.TMP"
LOCAL nHandle
LOCAL aBuffer    := {}
LOCAL cReply     := ""
LOCAL cSignature := ""

nHandle := FCREATE(cFileTemp1,1)

IF nHandle ==  -1
   ALERT( "Erro de cria‡Æo, erro DOS"+ strzero(FERROR(),2) )
   RETURN(.F.)
ELSE
   //=>Como obter uma chave privada:
   RUN openssl genrsa -out chave.pem 1024
   //Onde:
   //Chave.pem = arquivo onde a chave privada será gravada. Somente executar uma vez.

   FWRITE( nHandle,;
           '-----BEGIN RSA PRIVATE KEY-----'                                 + CHR(10) +;
           'MIICXQIBAAKBgQDlCS6WZHK7I80k7X1hdK9YVRzX+EAVTUKpgYpM/QHEoqrcITNd'+ CHR(10) +;
           'iu6ao1LaaaJHx1mLitBIiSQQOEVwZXm+7eDB8Q5KOxr0AfUkcS0AKrHZ3MyjVZbe'+ CHR(10) +;
           'T3YA5+DPBu6GDzOr4WUSNi6TuG9Y98yB3dTUcUolG06+SIqoBXYjXGOTSQIDAQAB'+ CHR(10) +;
           'AoGBANxZEBwaeZL3p6buYSEAjK2z/PL+4FBeK1M+0JqvEyNlyHHN80f8oP/fP5fn'+ CHR(10) +;
           '5vudm9W3cBlI74w3Rv8ScaWx3/eEa8PUabQn+CfuQznvG6sZkqkmu7Fatu6c9PL8'+ CHR(10) +;
           'TqUGVFcVCSULwbAtA4dDG8mfeY6muEacYqwH0pfH3srqVQvxAkEA+FLI2b/kbUXX'+ CHR(10) +;
           's0PRypavH9fMPF6LN6nRbNPS7bDH3FIBMqqaPUMe1yyn+ILjx998jdLhy7WchyJ+'+ CHR(10) +;
           '1Nym98v6hQJBAOwdwd0e6zX3j0VKJnXxinbvYWAVWoqyOSLjosf6SQ3HIruwCaL8'+ CHR(10) +;
           'kQjbWZUc7Y0RXL5QtsjXxmtOxR23nyK3KvUCQCu8sQGhScNxVL+PR2kuRyQNpzxO'+ CHR(10) +;
           'zqh8MZXAbVtOErWcf/eDku0NYGY3yFH+A86Vb2Ova/OsRiiLC9nED2h/td0CQQCx'+ CHR(10) +;
           'Ts9L+3Hp/tNp1vr2ysGN+skG3EI3sQpS9tpAjeTaIdYlV1aFPGC1Y/LrlOOWcZlR'+ CHR(10) +;
           'mU8Jl297GZXQcRlhemcZAkBVo1BEpmwwb+5mlQiwejDL/h60A51Z9ExQEjYR4qUP'+ CHR(10) +;
           'iFTY4A9iuVpyD/zIaZAinPSXmelrxLe4MKaVBTLAWp++'                    + CHR(10) +;
           '-----END RSA PRIVATE KEY-----'                                   )
   FCLOSE( nHandle )
   
ENDIF

// Gera assinatura rash 256 bytes
RUN OPENSSL.EXE dgst -md5 -sign   &cFileTemp1  -out  &cFileTemp2  -hex  &cFile 

//=>Como obter o m¢dulo da chave privada (necess rio para montar o XML do eECFc)
//Comando: openssl rsa -in chave.pem -modulus -out modulo.txt
RUN OPENSSL.EXE rsa -in &cFileTemp1  -modulus -out &modulo.txt
//Onde:
//Chave.pem = arquivo com a chave privada gerada anteriormente.
//modulo.txt = Arquivo onde ser  gravado o m¢dulo. No arquivo conter  o m¢dulo e a;
//chave privada. Vocˆ pega o m¢dulo e cola dentro do arquivo XML no campo espec¡fico.
//O expoente eu nÆo precisei alterar.

cReply := MEMOREAD(cFileTemp2)

cSignature:= "EAD"+(SUBSTR(cReply,AT("=",cReply)+2))+chr(10)

nHandle := FOPEN(cFile,2)      //  Abrir arquivo pra leitura e gravacao

FSEEK (nHandle, 0, 2)          //  Final do arquivo
FWRITE(nHandle,+cSignature )   //  Gravar no final do arquivo
FCLOSE(nHandle)                //  Fechar arquivo

RETURN( .T. )
// End of GERA_EAD()

Cezar Machado.
Abraço.
Editado pela última vez por Toledo em 23 Jun 2010 09:26, em um total de 1 vez.
Razão: Mensagem editada para colocar a tag [ code ]<br>Veja como utilizar esta tag: http://www.pctoledo.com.br/forum/faq.php?mode=bbcode#f2r1
Avatar do usuário
wanderley.monteiro
Usuário Nível 1
Usuário Nível 1
Mensagens: 30
Registrado em: 14 Ago 2008 10:42
Localização: São Bernardo do Campo - São Paulo

Re: Ead Assinatura Digital PAF-ECF

Mensagem por wanderley.monteiro »

Olá Cesar, fique a vontade ara afzer as alterações qu julgar necessárias. A função postada esta aqui 100% funcional e não precisei mexer mais nada.

ATenção a chave privada e sua criação que estava comentada coloquei somente a título de informação. Ela NÃO precisa ser gerada durante a assinatura, uma vez que ela já está no próprio código. O Modulo e chave publica tb idem. por isso deixei eles comentados para saber como gerar em caso de necessidade.
Eu tirei os tratamentos de erro nas gerações dos arquivos deixando a rotina mais limpa. Voce vai executar o OpenSSL apena UMA vez em cada assinatura.

Acho que assim fica mais fácil de entender.

[]s

Wanderley

Código: Selecionar todos


//=>Como obter uma chave privada:
//RUN ("openssl genrsa -out chave.pem 1024")
//Onde:
//Chave.pem = arquivo onde a chave privada será gravada. Somente executar uma vez.

//=>Como obter o m¢dulo da chave privada (necess rio para montar o XML do eECFc)
//Comando: openssl rsa -in chave.pem -modulus -out modulo.txt
//Onde:
//Chave.pem = arquivo com a chave privada gerada anteriormente.
//modulo.txt = Arquivo onde ser  gravado o m¢dulo. No arquivo conter  o m¢dulo e a;
//chave privada. Vocˆ pega o m¢dulo e cola dentro do arquivo XML no campo espec¡fico.
//O expoente eu nÆo precisei alterar.


FUNCTION GERA_EAD( cFile )

*****************************************
* Assina Digitalmenete um Arquivo Texto *
* Rotina usada para Assinar o PAF-ECF   *
* CA-Clipper 5.2 / Xharbour + GTWVW     *
* Programadores: Waderley Monteiro      *
*                Jair Barreto           *
* Data 29/05/2009                       *
*****************************************

LOCAL cScreen
LOCAL cFileTemp1:= "ARQ1.TMP"
LOCAL cFileTemp2:= "ARQ2.TMP"
LOCAL nHandle
LOCAL aBuffer    := {}
LOCAL cReply     := ""
LOCAL cSignature := ""

nHandle := FCREATE(cFileTemp1, 1)

FWRITE( nHandle,;
        '-----BEGIN RSA PRIVATE KEY-----'                                 + CHR(10) +;
        'MIICXQIBAAKBgQDlCS6WZHK7I80k7X1hdK9YVRzX+EAVTUKpgYpM/QHEoqrcITNd'+ CHR(10) +;
        'iu6ao1LaaaJHx1mLitBIiSQQOEVwZXm+7eDB8Q5KOxr0AfUkcS0AKrHZ3MyjVZbe'+ CHR(10) +;
        'T3YA5+DPBu6GDzOr4WUSNi6TuG9Y98yB3dTUcUolG06+SIqoBXYjXGOTSQIDAQAB'+ CHR(10) +;
        'AoGBANxZEBwaeZL3p6buYSEAjK2z/PL+4FBeK1M+0JqvEyNlyHHN80f8oP/fP5fn'+ CHR(10) +;
        '5vudm9W3cBlI74w3Rv8ScaWx3/eEa8PUabQn+CfuQznvG6sZkqkmu7Fatu6c9PL8'+ CHR(10) +;
        'TqUGVFcVCSULwbAtA4dDG8mfeY6muEacYqwH0pfH3srqVQvxAkEA+FLI2b/kbUXX'+ CHR(10) +;
        's0PRypavH9fMPF6LN6nRbNPS7bDH3FIBMqqaPUMe1yyn+ILjx998jdLhy7WchyJ+'+ CHR(10) +;
        '1Nym98v6hQJBAOwdwd0e6zX3j0VKJnXxinbvYWAVWoqyOSLjosf6SQ3HIruwCaL8'+ CHR(10) +;
        'kQjbWZUc7Y0RXL5QtsjXxmtOxR23nyK3KvUCQCu8sQGhScNxVL+PR2kuRyQNpzxO'+ CHR(10) +;
        'zqh8MZXAbVtOErWcf/eDku0NYGY3yFH+A86Vb2Ova/OsRiiLC9nED2h/td0CQQCx'+ CHR(10) +;
        'Ts9L+3Hp/tNp1vr2ysGN+skG3EI3sQpS9tpAjeTaIdYlV1aFPGC1Y/LrlOOWcZlR'+ CHR(10) +;
        'mU8Jl297GZXQcRlhemcZAkBVo1BEpmwwb+5mlQiwejDL/h60A51Z9ExQEjYR4qUP'+ CHR(10) +;
        'iFTY4A9iuVpyD/zIaZAinPSXmelrxLe4MKaVBTLAWp++'                    + CHR(10) +;
        '-----END RSA PRIVATE KEY-----'                                   )
FCLOSE( nHandle )

// Gera assinatura rash 256 bytes
RUN ("OPENSSL.EXE dgst -md5 -sign " + cFileTemp1 + " -out " + cFileTemp2 + " -hex " + cFile )

cReply := MEMOREAD(cFileTemp2)

cSignature:= "EAD"+(SUBSTR(cReply,AT("=",cReply)+2))+chr(10)

nHandle := FOPEN(cFile,2)      //  Abrir arquivo pra leitura e gravacao

FSEEK (nHandle, 0, 2)          //  Final do arquivo
FWRITE(nHandle,+cSignature )   //  Gravar no final do arquivo
FCLOSE(nHandle)                //  Fechar arquivo

RETURN( .T. )
// End of GERA_EAD()
Wanderley Monteiro
------------------------
MAMVTH - Customizações ADVPL/Protheus
São Bernardo do Campo SP
wanderley.monteiro@gmail.com
ADVPL, ERP TOTVS (Protheus), SQL, Oracle, Clipper 5.3b, Visual Fox Pro 9, xHarbour
cezarvm
Usuário Nível 1
Usuário Nível 1
Mensagens: 21
Registrado em: 07 Mai 2008 09:39

Re: Ead Assinatura Digital PAF-ECF

Mensagem por cezarvm »

Wanderley

Obrigado aeee, ficou muito bom mesmo.

[]s
Cezar Machado
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

Re: Ead Assinatura Digital PAF-ECF

Mensagem por rochinha »

Amiguinhos,

Porque só devo gerar a chave EAD uma unica vez? ou seja, eu não preciso ficar gerando ela a todo momento, mas se eu perde-la?
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Avatar do usuário
ANDRIL
Usuário Nível 5
Usuário Nível 5
Mensagens: 1297
Registrado em: 06 Jul 2004 00:44
Contato:

Re: Ead Assinatura Digital PAF-ECF

Mensagem por ANDRIL »

Porque só devo gerar a chave EAD uma unica vez?
Voce quiz dizer CHAVE PRIVADA? Porque o EAD é assinatura que vai em cada arquivo que deve ser assinado, é um registro de assinatura, feito atraves da combinação das chaves.

Tambem gostaria de saber o que fazer se por algum motivo, a chave privada, que foi distribuida for perdida, como trocar e como fica os softwares ja liberados com essa chave. Se bem que acho, que pedindo para algum cliente seu enviar o arquivo auxiliar criptografado, seja possivel recupera-la.
Clipper 5.2e / Blinker 5.1 / Harbour 3.2 / GTwvg
lucimauro
Usuário Nível 3
Usuário Nível 3
Mensagens: 465
Registrado em: 21 Set 2004 21:02
Localização: Sobral-CE

Re: Ead Assinatura Digital PAF-ECF

Mensagem por lucimauro »

Boa tarde a todos..

Aqui no ceara, temos que usar esse PAF-EC apartir de janeiro 2011,,entao
tenho muitas duvidas :
essa assinatura é feita a cada cupom fiscal emititdo..?
ou so no final do dia ?
precisa ter TEF para usar usar o PAF?

aonde baixo o manual para intregraçao?

alguem ja esta usando o PAF-ECF com sistema feito totalmente em clippper?



Desde ja agradeço..
Avatar do usuário
helio
Usuário Nível 3
Usuário Nível 3
Mensagens: 175
Registrado em: 04 Ago 2004 10:36
Localização: São Bento do Una-PE
Contato:

Ead Assinatura Digital PAF-ECF

Mensagem por helio »

Pessoal estou com uma duvida para gerar CHAVE PUBLICA e do mesmo jeito da CHAVE PRIVADA ?
Helio Beltrao Jr.
msn: helio@htisistemas.com
Avatar do usuário
janio
Colaborador
Colaborador
Mensagens: 1846
Registrado em: 06 Jul 2004 07:43
Localização: UBAJARA - CE

Ead Assinatura Digital PAF-ECF

Mensagem por janio »

Eita assunto bom! Compartilho das mesmas duvidas dos colegas e acrescento:

Pelo que andei lendo, no ato da geração da CHAVE PRIVADA, é levado em consideração algumas coisas do computador em que está sendo gerada a chave, até mesmo o movimento do mouse, de sorte que é impossível ter duas CHAVES PRIVADAS iguais. Vc deve gerar essa chave uma única vez e guardá-la bem guardada, sendo necessário usá-la todas as vezes que for assinar qualquer arquivo.

Quanto a chave PÚBLICA, aí vem as duvidas:

===>>> É preciso gerar a CHAVE PÚBLICA mais de uma vez?

===>>> Pra assinar algum arquivo precisa juntar chave PÚBLICA mais chave PRIVADA?

===>>> O que no código acima é CHAVE PÚBLICA e o que é CHAVE PRIVADA?
fui...
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
Responder