QRCode 3.0 Assinatura de parâmetros

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

jairxpereira
Usuário Nível 1
Usuário Nível 1
Mensagens: 36
Registrado em: 16 Out 2020 10:40
Localização: São Paulo/SP

QRCode 3.0 Assinatura de parâmetros

Mensagem 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
jairxpereira
Usuário Nível 1
Usuário Nível 1
Mensagens: 36
Registrado em: 16 Out 2020 10:40
Localização: São Paulo/SP

QRCode 3.0 Assinatura de parâmetros

Mensagem 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
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

QRCode 3.0 Assinatura de parâmetros

Mensagem 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
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

QRCode 3.0 Assinatura de parâmetros

Mensagem 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.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
jairxpereira
Usuário Nível 1
Usuário Nível 1
Mensagens: 36
Registrado em: 16 Out 2020 10:40
Localização: São Paulo/SP

QRCode 3.0 Assinatura de parâmetros

Mensagem 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.

jairxpereira
Usuário Nível 1
Usuário Nível 1
Mensagens: 36
Registrado em: 16 Out 2020 10:40
Localização: São Paulo/SP

QRCode 3.0 Assinatura de parâmetros

Mensagem 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
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

QRCode 3.0 Assinatura de parâmetros

Mensagem 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.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
jairxpereira
Usuário Nível 1
Usuário Nível 1
Mensagens: 36
Registrado em: 16 Out 2020 10:40
Localização: São Paulo/SP

QRCode 3.0 Assinatura de parâmetros

Mensagem por jairxpereira »

Olá Quintas,

Obrigado pelas sugestões.

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

Jair
Responder