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 »

Prezados, bom dia

Estou implementando no meu Sistema o QR Code 3.0 da NFCE que fala na Nota Técnica 2025.001.

Mas minha dificuldade está sendo assinar a string de parâmetros desse novo layout de QRCode.

Alguém sabe como assina uma string com o harbour no algoritmo RSA SHA1.

Eu tentei essa receitinha pra assinar mas meu código não funcionou:
'<?xml version="1.0" encoding="UTF-8"?>' +;
'<ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">' +;
'<ds:SignedInfo>' +;
'<ds:CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/>'+;
'<ds:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>' +;
'<ds:Reference URI="#obj">'+;
'<ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>'+;
'<ds:DigestValue/>' +;
'</ds:Reference>'+;
'</ds:SignedInfo>'+;
'<ds:SignatureValue/>'+;
'<ds:Object Id="obj">String de teste</ds:Object>'+;
'</ds:Signature>' )



Será que alguém consegue me dar uma luz no assunto?

Obrigado,
Jair
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 »

Pessoal,

Já deu certo aqui. Obrigado.
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 »

E qual foi a solução ?
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/
Ana Mitoooo
Usuário Nível 3
Usuário Nível 3
Mensagens: 118
Registrado em: 17 Out 2018 10:00
Localização: Sobradinho/DF

QRCode 3.0 Assinatura de parâmetros

Mensagem por Ana Mitoooo »

Basta ajusta a URL

Exemplo de QR Code gerado na versão 2.0 em emissão normal:

Código: Selecionar todos

<qrCode>
http://www.fazenda.pr.gov.br/nfce/qrcode?p=412507XXXXXXXXXXXXXX65001000000001116XXXXX53|2|2|1|3E8725A9C4CBBCDFF6B014DFXXXXXXF73ED4CAEE
</qrCode>
Exemplo de QR Code gerado na versão 3.0 em emissão normal:

Código: Selecionar todos

<qrCode>
http://www.fazenda.pr.gov.br/nfce/qrcode?p=412507XXXXXXXXXXXXXX65001000000001164XXXXX18|3|2
</qrCode>
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 »

Comemorei cedo demais os resultados.

Ainda estou sofrendo aqui na elaboração do QR Code 3.0 em contingência off-line.

Quando envio o XML da NFCE pra SEFAZ DE SP me dá essa rejeição:

583 Valor da assinatura do qrCode difere do valor calculado.

Estou aceitando dicas.

Isso não está funcionando:
<qrCode>https://www.homologacao.nfce.fazenda.sp ... xxxxxxxxxx 0000111549010006775|3|2|15|100.00|2|zzz0923zzzz|U05qaEVIeWJCbjF1eXU1WGhqWTVtdU9SYk9IZ1A4QjNGRlR3KzF5NkVoQjcwNTEyajlaUkNNMDdSQXQxQmVINE5OZkZ2dkRreXhNMzNENklvSTNXMTRNeFVDcWMxOVBBSm00cjFZWDEwdUJsYWMwOStvU25QWVFybzRvL1hXcURCUVd5dGx6MDlsRjN6cXdFY0tycjg0T2FnVEVLZ1JQOWx0VHNIYkFNcHRmWG11d09EcDhsajZDVE51K0toTHgvbDFQaVZEWnRwMTRSL3crdElPcE51TTNLaHJpTjkrZjFvYkw5WGc0Q0pDN0VXb2RzamxuOUo0dUh4VmQ4Y3hiWXdOYnZKSE0vNk1UWkhMUi94WHVIRFV3d2dNSklrUERWQjZWc0c4NWJFdlBZUW5uUlZ5SFk4L2ZYNkVYdDR2Z0FSVzVEOTdKN1Z0YzdJRTFzRFdpdVRBPT0=</qrCode>
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 »

Isso de assinatura é chato, porque qualquer letra diferente acusa erro.
Tente apenas com a string, sem adicionar bloco de assinatura.
Veja o manual, se deixou passar algum detalhe sobre a assinatura, alguma letra a mais ou a menos.
Essa barra separadora, por exemplo, é diferente conforme codepage, e dá diferença na assinatura.
É pra pensar se a barra faz parte da assinatura.
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 »

Resposta interessante da IA do Windows:
teste.png
também isto:
Como gerar a assinatura do QR Code 3.0?
- Leia a Nota Técnica 2025/001: Ela define os campos que devem ser assinados e o novo leiaute do QR Code.
- Use o manual do DANFE NFC-e e QR Code: Disponível no portal da SEFAZ, ele detalha como gerar a assinatura.
..
- Utilize bibliotecas como ACBr (se aplicável): Se você usa o componente ACBr, a funcionalidade já está implementada
...
Sim, José — a codificação da string para assinatura deve ser em UTF-8, sem BOM (Byte Order Mark). Isso é essencial para garantir que o hash gerado seja exatamente o esperado pela SEFAZ.
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/
Ana Mitoooo
Usuário Nível 3
Usuário Nível 3
Mensagens: 118
Registrado em: 17 Out 2018 10:00
Localização: Sobradinho/DF

QRCode 3.0 Assinatura de parâmetros

Mensagem por Ana Mitoooo »

URL que esta usando esta errada, v3.0 não se informa o CSC
Gera o XML como sempre fez (até a v2.0) e assina com a ze_NFe ou acbr e vai ter o arquivo valido
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 »

Ana Mitoooo escreveu:Gera o XML como sempre fez (até a v2.0) e assina com a ze_NFe ou acbr e vai ter o arquivo valido
Com a sefazclass ainda não.
Ainda não atualizei pra QRCode 3.0.
Por isso meu interesse.
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 »

Segue a função que escrevi em Harbour e usando openssl.exe para assinar os parâmetros do QR Code da NFC-e versão 3.0.

O cComand_Dois que assina a string com o openssl.exe não funciona!

Alguém pode me ajudar a identificar o que tem de errado nessa função?

Código: Selecionar todos

///////////////////////////////
FUNCTION Main( cStr_a_assinar )
///////////////////////////////

LOCAL cSignature          := ""
LOCAL cCertificadoPFXFile := "certificado.pfx"  // CERTIFICADO DIGITAL DO CLIENTE.
LOCAL cPrivateKeyPEMFile  := "TempFile.pem"     // Arquivo "pem" extraído do certificado acima.
LOCAL cCommand_Um         := ""
LOCAL cCommand_Dois       := ""

LOCAL cFile_Str_a_Assinar := "a_assinar.txt"    // Arquivo que contem a string a ser assinada.
LOCAL cFile_Str_Assinada  := "assinado.txt"     // Arquivo que contera o string assinado.
LOCAL nHandle             := 0


// Gera o arquivo .pem
cCommand_Um := "openssl.exe pkcs12 -in " + cCertificadoPFXFile + ;
                      " -clcerts -passin pass:abc123 -nokeys" + ; // abc123 é a senha do certificado digital
                      " -out " + cPrivateKeyPEMFile
__RUN( cCommand_Um )  // Aqui gera corretamente.


// Cria o arquivo "cFile_Str_a_Assinar" contendo o string a ser assinado.
nHandle := FOPEN( cFile_Str_a_Assinar )
FWRITE( nHandle, cStr_a_assinar )
FCLOSE( nHandle )


// Aqui não funciona
cCommand_Dois := "openssl dgst -sha1 -sign " + cPrivateKeyPEMFile + " -out " + cFile_Str_Assinada + " " + cFile_Str_a_Assinar
__RUN( cCommand_Dois )
// Aqui não funciona

// Lê os dados assinados do arquivo temporário
IF FILE( cFile_Str_Assinada )
   cSignature := MEMOREAD( cFile_Str_Assinada )
   FILEDELETE( cFile_Str_Assinada )
   RETURN( cSignature )
ENDIF

RETURN( "" )
////////////
// EOF Main()

Obrigado, Pessoal
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 »

Vamos lá às partes que encontrei
02. Visão Geral
02.1 NFC-e: Leiaute QR-Code versão 3
Nesta NT está definido o novo leiaute do QR-Code da NFC-e (versão 3). Nesta nova versão, o
controle sobre a autenticidade do conteúdo do QR-Code impresso no DANFE NFC-e será feito
pela assinatura de campos específicos do QR-Code. Esse controle será feito unicamente para
as NFC-e emitidas em Contingência, com a inclusão do resultado da assinatura no próprio QR
Code.
Neste novo modelo, não será mais necessário o controle do CSC-Código de Segurança do
Contribuinte pelas empresas.
Futuramente (sem data definida) está prevista a eliminação do CSC (Código de Segurança do
Contribuinte), com a adoção unicamente do leiaute do QR-Code versão 3.
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 »

item4.png
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 »

hash.png
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 »

Então... um desvia pro outro, o último pede pra olhar o manual do danfe.
Esse manual, ao que parece, ainda não existe.
Também diz que depende da UF.
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 »

Pra assinatura, mais prático capicom
Vai ser diferente da usada pra NFE, porque essa não é XML e não tem URI - id do bloco xml a ser assinado
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/
Responder