Página 1 de 1

Assinatura EAD arquivos PAF-ECF

Enviado: 23 Jul 2011 12:16
por siscad
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:

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()
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

Assinatura EAD arquivos PAF-ECF

Enviado: 24 Jul 2011 11:37
por fladimir
vc precisa gerar a chave (arq xml) e colocar junto na pasta do EEFC

vc esta fazendo isto?

Sds