Página 2 de 2

QRCode 3.0 Assinatura de parâmetros

Enviado: 19 Ago 2025 14:01
por jairxpereira
Valeu Quintas pelas dicas. Mas meu problema está em usar o openssl.exe corretamente.

Eu encontrei o manual com a especificação do QRCode 3.0 em algum post do forum ACBR.

Esse aqui com esse nome 20250324 - Manual_de_Especificações_Técnicas_do_DANFE_NFC-e_QR_Code.pdf.

Estou testando o QRCode 3.0 na SEFAZ SP, quando uso HB_SHA1() a nota fiscal em contingência é emitida... mas quando assino os parâmetros do QRCode conforme mesmo manual
não valida a assinatura. É ruim isso, o documento oficial diz uma coisa e a SEFAZ-SP faz outra coisa. Aí eu fico com receio de cada UF implementar diferente a validação da assinatura do QR Code 3.0 em contingência.

Jair Pereira

QRCode 3.0 Assinatura de parâmetros

Enviado: 19 Ago 2025 14:05
por jairxpereira
Valeu Quintas pelas dicas. Mas meu problema está em usar o openssl.exe corretamente. Eu precisava ter essa função funcionando pra
confirmar a outra função usando CAPICOM está assinando corretamente uma string.

Eu encontrei o manual com a especificação do QRCode 3.0 em algum post do forum ACBR.

Esse aqui com esse nome 20250324 - Manual_de_Especificações_Técnicas_do_DANFE_NFC-e_QR_Code.pdf.

Estou testando o QRCode 3.0 na SEFAZ SP, quando uso HB_SHA1() a nota fiscal em contingência é emitida... mas quando assino os parâmetros do QRCode conforme mesmo manual
não valida a assinatura. É ruim isso, o documento oficial diz uma coisa e a SEFAZ-SP faz outra coisa. Aí eu fico com receio de cada UF implementar diferente a validação da assinatura do QR Code 3.0 em contingência.

Jair Pereira

QRCode 3.0 Assinatura de parâmetros

Enviado: 19 Ago 2025 14:08
por JoséQuintas
Direto da IA do Windows

Código: Selecionar todos

FUNCTION Main()
   LOCAL oSigner, oSignedData
   LOCAL cTexto := "Texto para assinar"
   LOCAL cAssinatura

   // Cria os objetos COM
   oSigner     := win_OleCreateObject( "CAPICOM.Signer" )
   oSignedData := win_OleCreateObject( "CAPICOM.SignedData" )

   // Seleciona o certificado (pode abrir a janela de seleção)
   oSigner:Certificate := oSigner:Select()

   // Define o conteúdo a ser assinado
   oSignedData:Content := cTexto

   // Assina o conteúdo
   cAssinatura := oSignedData:Sign( oSigner, .F., 0 ) // .F. = retorna assinatura, 0 = formato base64

   ? "Assinatura gerada:"
   ? cAssinatura
RETURN NIL

QRCode 3.0 Assinatura de parâmetros

Enviado: 19 Ago 2025 14:16
por JoséQuintas
qrcode.png
Note que a previsão inicial não era pra todas as UFs.
E mesmo assim, a data está duvidosa.

QRCode 3.0 Assinatura de parâmetros

Enviado: 20 Ago 2025 17:38
por jairxpereira
Olá Quintas,

Eu consegui assinar o QRCode 3.0 off-line com o openssl.exe no ambiente de homologação da SEFAZ SP.

Eu gero uma chave privada PEM a partir do arquivo PFX do certificado, e depois assino a string com o certificado PEM.

Mas essa solução não resolve todos os problemas, porque meus clientes que usam certificado A3 vão ficar
descobertos porque o openssl não gera chave privada PEM a partir de certificado A3.

A solução ideal seria conseguir assinar pelo CAPICOM, vou ver o código que vc postou e aceito mais dicas se vc tiver
de como assinar com o CAPICOM com o algoritmo RSA SHA1.

A solução com o openssl.exe e certificado A1 foi essa aqui:

Código: Selecionar todos


// Cria o arquivo chave PEM a partir do arquivo do certificado PFX:
cCommand := "openssl.exe"  + ;
            " pkcs12"      + ;
            " -in " + cArquivoCertificadoPFX + ;
            " -nocerts"    + ;
            " -nodes"      + ;
            " -passin pass:" + cPassWord + ;
            " -out " + cArquivoPrivateKeyPEM

__RUN( cCommand )  // Mantem o foco.

// Cria o comando OpenSSL para assinar o string:
cCommand := "openssl.exe dgst -sha1" + ;
            " -sign " + cPrivateKeyPEMFile + ;
            " -out "  + cSigned_File + ;
            " " + cString_File

__RUN ( cCommand )  

// Depois eu só leio o arquivo binário da assinatura cSigned_File e converto para base64.


QRCode 3.0 Assinatura de parâmetros

Enviado: 21 Ago 2025 14:07
por jairxpereira
Aviso a todos!

Em resumo, eu consegui assinar os parâmetros do qr code 3.0 off-line da nfc-e usando o openssl.exe.

Porém, isso resolve se o certificado digital for tipo a1 - arquivo.

Para certificado a3, alguém se habilita em fazer uma solução usando capicom com o harbour 3.2? qual o custo?

obrigado.

Jair Pereira

QRCode 3.0 Assinatura de parâmetros

Enviado: 21 Ago 2025 15:06
por JoséQuintas
Acredito que seja igual essa que postei, que a IA mostrou.
Nessa rotina vai pedir pra escolher o certificado.

Faça o teste, se tudo ok, vai ser só trocar a parte de pedir certificado, pra usar um instalado, e isso já tem na sefazclass.

QRCode 3.0 Assinatura de parâmetros

Enviado: 21 Ago 2025 17:34
por jairxpereira
Olá Quintas,

Obrigado pelas sugestões.

Vou testar o código que vc sugeriu que é da IA da Microsoft.

Jair