BMF-RKSV-Technik / at-registrierkassen-mustercode

111 stars 39 forks source link

Umsatzzähler Verschlüsselung C# #680

Closed grafuzzi closed 5 years ago

grafuzzi commented 5 years ago

Guten Abend,

nach dem der Startbeleg und alle Einzelbelege erfolgreich geprüft werden. Hänge ich jetzt leider doch mit der Fehlermeldung: "verificationResultDetailedMessage" : "Der berechnete Umsatzzähler entspricht nicht dem verschlüsselten Umsatzzähler (siehe Parameter DECRYPTED_TURNOVER_VALUE). Bitte überprüfen Sie die Kodierung des Umsatzzählers (BIG-Endian, Zweierkomplement), oder den verwendeten AES-Schlüssel."

Nach dem ich das Dokument "20160905-Detailfragen-RKSV-V1.2.pdf" nochmal durchgearbeitet habe und auch den Test für die "Anwenden des Hashalgorithmus/Extraktion des Verkettungswerts" Kap. 2.4.1 für den Startbeleg erfolgreich getestet habe muss der Code für die Hashberechnung stimmen. Beispiel: Kassen-ID "A12347" -> Hash (Base64) OeSKQjO4zKI=

Des weiteren ist in der 001_cashbox (Standardbeleg) der Fehler { "verificationId" : "TYPE_OF_RECEIPT_STANDARD", "version" : 1, "verificationName" : "Belegtyp: Standardbeleg", "verificationTextualDescription" : "Es werden folgende Eigenschaften überprüft: Mindestens ein Steuersatz-Wert muss ungleich 0 sein, es muss ein Umsatzzähler im maschinenlesbaren Code vorhanden sein (es dürfen nicht die BASE64-kodierten Zeichenketten von \"TRA\" oder \"STO\" statt dem Umsatzzähler vorhanden ein), der Verkettungswert darf nicht auf die Kassen-ID zeigen.", "verificationState" : "FAIL", "verificationResultDetailedMessage" : "Der Verkettungswert ist von der Kassen-ID abgeleitet.", "verificationTimestamp" : "2019-02-18T21:37:45.471+01:00"

Es muss ja so sein das der Verkettungswert des Startbelegs (die Kassenid) gehasht und 8 byte davon in BASE64 erzeugt werden. Das ist dann Verschlüsselte Umsatzzähler für den Startbeleg.

Für alle anderen Belegarten wird die Repräsentation der JWS-Signatur, des vorangegangen Belegs oder der DEP Eintrag anstelle der KassenID genommen und wieder gehasht davon 8 bytes und ge-BASE64. oder bin ich hier auf den holzweg???

danke im voraus, grafuzzi

exportDEP.txt exportQR.txt 0001_app_json.txt 0001_cashbox_full_json.txt 0001_cashbox_json.txt cryptographicMaterialContainer_json.txt 0000_app_json.txt 0000_cashbox_full_json.txt 0000_cashbox_json.txt

Anbei meine Dateien

Flanelli commented 5 years ago

Hab das nur mal kurz gecheckt, der Umsatzähler steht bei allen Datensätzen auf 0

grafuzzi commented 5 years ago

Danke an Flanelli für die Antwort.

Ich konnte den Fehler weiter eingrenzen:

es hat anscheinend mit der Verschlüsselung des Umsatzzählers zu tun - wie schon in der Einleitung beschrieben. Der Fehler das die BIG-Endian Verschlüsselung nicht korrekt umgesetzt ist.

Vom Code habe ich mich an das Beispiel des SEE Herstellers gehalten: https://labs.a-trust.at/developer/ShowSource.aspx?id=126 Diese wird auch hier im Forum mehrmals angewendet.

Schön langsam habe ich die Vermutung das es hier eine Diskrepanz gibt.

Hat jemande die gleiche Erfahrung gemacht? Vielleicht mit C#?

Danke

grafuzzi commented 5 years ago

Nach weiteren Stunden habe ich jetzt folgendes Ergebnis des Umsatzzaehlers

{ "verificationId" : "DEP_TURNOVER_COMPARE", "version" : 1, "verificationName" : "Entwicklung des Umsatzzählers", "verificationTextualDescription" : "In diesem Modul wird überprüft, ob die Entwicklung des verschlüsselten Umsatzzählers mit den Belegbeträgen übereinstimmt.", "verificationState" : "FAIL", "verificationResultDetailedMessage" : "Der berechnete Umsatzzähler entspricht nicht dem verschlüsselten Umsatzzähler (siehe Parameter DECRYPTED_TURNOVER_VALUE). Bitte überprüfen Sie die Kodierung des Umsatzzählers (BIG-Endian, Zweierkomplement), oder den verwendeten AES-Schlüssel.", "input" : { "DECRYPTED_TURNOVER_VALUE" : "3600", "TURNOVER_SUM" : "1750", "SUM_TAX_SET_ERMAESSIGT2" : "1,00", "SUM_TAX_SET_ERMAESSIGT1" : "1,14", "SUM_TAX_SET_NORMAL" : "18,50", "TYPE_RECEIPT" : "STANDARD_BELEG", "SUM_TAX_SET_NULL" : "0,00", "SUM_TAX_SET_BESONDERS" : "0,00" }, "output" : { "TURNOVER_SUM" : "3600" }, "verificationTimestamp" : "2019-02-22T21:13:31.555+01:00" } ] }

DECRYPTED_TURNOVER_VALUE enthält nun den Umsatz der auch richtig ist. Jedoch wird vom Prüftool noch immer ein Fail angezeigt

Durch die Verwendung des Codes aus https://github.com/BMF-RKSV-Technik/at-registrierkassen-mustercode/issues/91 und des Links daraus https://dotnetfiddle.net/8FT29H

Was ist noch falsch? Warum nimmt das Prüftool den Umsatzzähler nicht an? Bitte um Hilfe

Danke, grafuzzi

ErichFreitag commented 5 years ago

Der summierte Umsatzzähler bis zum letzten Beleg wurde mit "TURNOVER_SUM" : "1750" errechnet. Im aktuellen Beleg kommen Beträge mit "SUM_TAX_SET_ERMAESSIGT2" : "1,00", "SUM_TAX_SET_ERMAESSIGT1" : "1,14", "SUM_TAX_SET_NORMAL" : "18,50", dazu. 1750 + 100 + 114 + 1850 ergibt 3814 und nicht 3600.

Flanelli commented 5 years ago

Herr Ing. Freitag, wie immer höchst kompetent, rasch und präzise....

Chapeau !

ErichFreitag commented 5 years ago

Küss die Hand, @Flanelli würde ich unter anderen Umständen sagen/schreiben.

grafuzzi commented 5 years ago

Danke an Herrn Ing. Freitag - das hat mein Problem gelöst.