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: 20415
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP
Curtiram: 1 vez

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, multithread, gtwvg, fivewin 25.12, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui), (hmg3), (hmg extended), (oohg), PNotepad, ASP, (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: 20415
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP
Curtiram: 1 vez

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, multithread, gtwvg, fivewin 25.12, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui), (hmg3), (hmg extended), (oohg), PNotepad, ASP, (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: 20415
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP
Curtiram: 1 vez

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, multithread, gtwvg, fivewin 25.12, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui), (hmg3), (hmg extended), (oohg), PNotepad, ASP, (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