Assinatura EAD arquivos PAF-ECF
Enviado: 23 Jul 2011 12:16
Pessoal, bom dia!
Estou desenvolvendo meu sistema para atender as obrigações do PAF-ECF.
O problema meu está na assinaturas EAD dos aquivos.
Estou usando a seguinte rotina para assinar:
Porém quando vou validar o arquivo no programa eECF 3.12, diz que a assinatura é inválida
alguém já passsou por isso?
Grato
Estou desenvolvendo meu sistema para atender as obrigações do PAF-ECF.
O problema meu está na assinaturas EAD dos aquivos.
Estou usando a seguinte rotina para assinar:
Código: Selecionar todos
Function fGeraEAD(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
MsgBox1("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) +;
'MIICXAIBAAKBgQC0AX+vkFN/Rif8yNpN7Hk5zLaY5QKpCQlr2prx9q3XkuH3T+Xy'+ CHR(10) +;
'esOFbU0TvbxHa3aH+Zm0yxHdIGc93gupfuoKsStnl9P3WlT2fW9ihOzuLW5y2Hmg'+ CHR(10) +;
'E10KJNtBu4md+NbdnplJ1Za6KQ+iwTV8+cyxZKyVKAJkjYqtq9I2Me+G3QIDAQAB'+ CHR(10) +;
'AoGACknzpHNZcnLuIjLQ15dmrnkXDtI4PrU3hqSuKppxAVtx8xLsD9oYhu3ic/hq'+ CHR(10) +;
'ZKKt2cPYl07sLHmHrS+d9wg8FFux/jbnJX9XpaPLr3vzO1A5y5DQLymauxIsCg0D'+ CHR(10) +;
'1+boY3Kvwdlk+HfJ8GdrcnOht6AetSX7Bh0NuPu8UcJUyoECQQDu1wF9jp1lh7VP'+ CHR(10) +;
'9BTHzQ/7q5fL8BnjY9kcUauXqFNoVJU7mxVJUokmAxlS8eYo38ptcw0VoXa5nF52'+ CHR(10) +;
'5tgD75ytAkEAwPBbG2hzWFzWVSoqXSB3Celp1krtQgW4SLNlIxEz9gqqCe65UkIm'+ CHR(10) +;
'kojD1iZ8OgUlKnTmeFRZHZy1nczJSqoo8QJBAJrXWWgFJZXFPY7wNuix0ULgJDFb'+ CHR(10) +;
'H+2DtiXd7NkNj8V70KQsDsjScYfrSmez2/tz2tDKXhk/7LC456U+U515oqECQHxS'+ CHR(10) +;
'5QI2Pg00VVAviXjU0J/sbiyNv3CJqwP9xS/hh/AFUyhvUa91vNEzm63EwsvIQPio'+ CHR(10) +;
't1HWWE5Ciq0SJqscFqECQGYh+J44ZbLnYCXFuXZrG/EBueg4W8Cdx9i+UdKJBpU9'+ CHR(10) +;
'/ynKIjRvmbB2fNkNCNOdc0F9rmRn88pFpijGQbv1+9Q=' + 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"+(Subs(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
If File(cFileTemp1)
Run ("Attrib -r " + cFileTemp1)
FErase(cFileTemp1)
EndIf
If File(cFileTemp2)
Run ("Attrib -r " + cFileTemp2)
FErase(cFileTemp2)
EndIf
Return(.T.)
// End of GERA_EAD()alguém já passsou por isso?
Grato