Página 1 de 1
Ead Assinatura Digital PAF-ECF
Enviado: 27 Mar 2009 21:32
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...
Re: Ead Assinatura Digital PAF-ECF
Enviado: 14 Abr 2009 09:23
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.
Re: Ead Assinatura Digital PAF-ECF
Enviado: 29 Mai 2009 16:40
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()
Re: Ead Assinatura Digital PAF-ECF
Enviado: 04 Jun 2009 10:21
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.
Re: Ead Assinatura Digital PAF-ECF
Enviado: 05 Jun 2009 14:27
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()
Re: Ead Assinatura Digital PAF-ECF
Enviado: 10 Jun 2009 11:41
por cezarvm
Wanderley
Obrigado aeee, ficou muito bom mesmo.
[]s
Cezar Machado
Re: Ead Assinatura Digital PAF-ECF
Enviado: 23 Jun 2010 03:30
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?
Re: Ead Assinatura Digital PAF-ECF
Enviado: 23 Jun 2010 15:08
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.
Re: Ead Assinatura Digital PAF-ECF
Enviado: 19 Jul 2010 16:23
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..
Ead Assinatura Digital PAF-ECF
Enviado: 12 Set 2011 12:36
por helio
Pessoal estou com uma duvida para gerar CHAVE PUBLICA e do mesmo jeito da CHAVE PRIVADA ?
Ead Assinatura Digital PAF-ECF
Enviado: 12 Set 2011 16:23
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?