BMF-RKSV-Technik / at-registrierkassen-mustercode

111 stars 39 forks source link

Bitte um Hilfe bei Interpretation der Prüftool Ergebnisse #255

Closed Alex1130 closed 7 years ago

Alex1130 commented 7 years ago

DEP.json beginnt mit: ...

 "verificationResultDetailedMessage" : "Die Belege im exportierten RKSV-DEP weisen keinen Fehler auf (Verkettung zu vorigem Beleg, Entwicklung des Umsatzzählers, Belegabfolge)."

beim zweiten Beleg ist allerdings:

{
    "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" : {
      "SUM_TAX_SET_ERMAESSIGT2" : "0,00",
      "SUM_TAX_SET_ERMAESSIGT1" : "0,00",
      "TYPE_RECEIPT" : "STANDARD_BELEG",
      "SUM_TAX_SET_NORMAL" : "0,00",
      "DECRYPTED_TURNOVER_VALUE" : "0",
      "SUM_TAX_SET_NULL" : "10,00",
      "TURNOVER_SUM" : "0",
      "SUM_TAX_SET_BESONDERS" : "0,00"
    },
    "output" : {
      "TURNOVER_SUM" : "1000"
    },

Payload des zweiten Belegs X1IxLUFUMV9UUkFYUy0yXzIwMDAwMjMxOF8yMDE3LTAxLTE3VDE1OjE3OjU1XzAsMDBfMCwwMF8wLDAwXzEwLDAwXzAsMDBfeUd5a2lURT1fNzI2MzA3NEZfRk9zcDRCbndBaW89 _R1-AT1_TRAXS-2_200002318_2017-01-17T15:17:55_0,00_0,00_0,00_10,00_0,00_yGykiTE=_7263074F_FOsp4BnwAio=

AESKey in B64: K7L9NyWiC1xKuyBO/7DuoRFqsqgq+m3t8hjOCMNXBio=
verschlüsselt in voller Länge: yGykiTFhYmd/SzwAWNr3RA== entschlüsselt 1000 verschlüsselt 5Bytes extrahiert: yGykiTE=

Ich vermute, dass mein Fehler bei 2.5.5 der Extraktion „Verkürzter verschlüsselter Umsatzzähler für die Ablage im Feld „Stand-Umsatz-Zaehler-AES256-ICM“. mein C# - Code dazu:

Array.Copy(encryptedBytes, encryptedByteskurz, 5); //die ersten 5 Bytes von hash1 werden in hash3 abgelegt
string result = Convert.ToBase64String(encryptedByteskurz);

DEP.json.txt Bitte um Hilfe.

cmaxmedia commented 7 years ago

Schon mal mit dem Source von A-Trust verglichen? Dort finden Sie ein komplettes Beispiel in C#: http://labs.a-trust.at/developer/source.aspx lg

Alex1130 commented 7 years ago

Danke, das Beispiel kenne ich bereits, aber in dem Beispiel wird der Umsatzzähler in voller Länge zurückgeliefert. (zB AESKey in B64: K7L9NyWiC1xKuyBO/7DuoRFqsqgq+m3t8hjOCMNXBio= Kassa-ID: TRAXS-2 BelegNummer: 200002318 Stand Umsatzzähler (10,00€): 1000 liefert verschlüsselt in voller Länge: yGykiTFhYmd/SzwAWNr3RA== stimmt das?

cmaxmedia commented 7 years ago

Scheint zu stimmen - kann den Umsatz in beide Richtungen bearbeiten: umsatz: 1000 enc: yGykiTFhYmd/SzwAWNr3RA== dec: 1000

cmaxmedia commented 7 years ago

Darf man fragen, wo sie die 5 Bytes verwenden? Denn für die JWS Erstellung verwende ich den vollen B64...

Alex1130 commented 7 years ago

Da in den Detailfragen V1.2 unter 2.5.5 steht

Verkürzter verschlüsselter Umsatzzähler für die Ablage im Feld „Stand-Umsatz-Zaehler-AES256-ICM

Da dieser Wert in 2.3 zu verwenden ist, dieses wiederum als Eingabewert in 3.1 und in Folge in 4.5 verwendet wird eigentlich durchgehend. Die Verkürzung ist meiner Meinung nach optional, liefert aber DEP Zeilen <=255 Zeichen, und kompaktere QR-Codes .

@cmaxmedia : Danke fürs nachrechnen!

asitplus-pteufl commented 7 years ago

schneiden Sie auch die richtigen Bytes weg wenn Sie den Umsatzzähler so verkürzen wie sie es tun (sprich den verschlüsselten Wert nehmen und dann verkürzen)? Bitte überprüfen ob sie da nicht 3 bytes mit Daten wegschneiden. ohne jetzt genau darüber nachzudenken (und den eigenen Demo-Code anzuschauen) würde ich meinen dass die LSBs am Ende des verschlüsselten Umsatzzählers sind nicht am Anfang...

Alex1130 commented 7 years ago

@asitplus-pteufl Danke! Das wars!

//extract 5 bytes
byte[] encryptedByteskurz = new byte[5];
Array.Copy(encryptedBytes, 11,encryptedByteskurz,0, 5); //die letzten 5 Bytes von hash1 werden in hash3 abgelegt
string result = Convert.ToBase64String(encryptedByteskurz);
asitplus-pteufl commented 7 years ago

freut mich! noch ein Hinweis, nennen's das nicht HASH :-) das ist keiner

am besten noch den Umsatzzähler mit negativen Zahlen auch über das Prüftool testen, dann sollten Sie sicher sein dass auch die 2er Kom. Darstellung stimmt.

Alex1130 commented 7 years ago

War ich schon dabei und leider nein 2er Komp ist noch falsch - ich wäre über einen Hinweis dankbar wo mir das Vorzeichen verloren geht. (hash im comment ist copy paste da der Algorithmus vom Extrahieren des Verkettungswertes entlehnt wurde, danke für den Hinweis)

Alex1130 commented 7 years ago

Habe es geschafft, interessanter weise nur für 8 Bytes - Danke für die Hinweise! BitConverter.ToInt64 setzt 8 oder ein vielfaches davon voraus aber mit padding bekomme ich falsche Ergebnisse.