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.