+ All Categories
Home > Documents > a.sign RK COM/DLL Developer Manual -...

a.sign RK COM/DLL Developer Manual -...

Date post: 13-Aug-2018
Category:
Upload: vobao
View: 251 times
Download: 0 times
Share this document with a friend
61
Transcript

A-Trust Gesellschaft für Sicherheitssystemeim elektronischen Datenverkehr GmbH

Landstraÿer Hauptstraÿe 5A-1030 Wien

https://www.a-trust.atE-Mail: o�[email protected]

a.sign RK COM/DLL

Developer Manual

Version: 2.2

Datum: 23. Dezember 2016

Ges. für Sicherheitssystemeim elektr. Datenverkehr GmbH

Copyright

c⃝ 2016 - Alle Rechte vorbehaltenA-TrustGesellschaft für Sicherheitssysteme im elektronischen Datenverkehr GmbHA-1030 Wien

Die in dieser Dokumentation enthaltenen Informationen, Kenntnisse und Darstellungensind geistiges Eigentum der A-Trust und dürfen ohne die vorherige schriftliche Zustim-mung von A-Trust weder vollständig noch auszugsweise, direkt oder indirekt Drittenzugänglich gemacht, verö�entlicht oder anderweitig verbreitet werden.Die Geltendmachung aller diesbezüglicher Rechte, bleiben der Firma A-Trust vorbehal-ten. Die Übergabe der Dokumentation begründet keinerlei Anspruch auf eine Lizenz oderBenutzung.

a.sign RK COM/DLL Version: 2.2 Seite 2 von 61

Ges. für Sicherheitssystemeim elektr. Datenverkehr GmbH

Leistungsbeschreibung

A-Trust stellt das Produkt a.sign RK COM/DLL zur Verfügung welche die Funktionenzum Zugri� auf die a.sign RK CHIP vereinfacht. Dieses Produkt hat sowohl eine DLL-Schnittstelle als auch eine COM-Schnittstelle (Component Object Model [Mic16]) Es wer-den Funktionen für den AES-Schlüssel Generierung und Verschlüsselung, Base64 Kodie-rung , Base32 Kodierung, Sha256 Hash, QR-Code und OCR-Code Generierung bereitge-stellt, welche für die Implementierung der Registrierkassensicherheitsverordnung [Bun15]benötigt werden.

Bereitgestellte Funktionen und Programme:

• COM-Schnittstelle für die einfache Einbindung in VB6 und VBA

• DLL-Schnittstelle für die Verwendung in C/C++

• Schnittstelle zum Zugri� auf die Chipkarte

• Funktion für JWS-Signatur der aufbereiten Datenstruktur des Belegs

• Funktion für Signaturprüfung einer DEP Zeile

• Funktion zum Base64 und Base64-URL kodieren von String-Werten

• Funktion zum Base32 kodieren

• Funktionen zum Generieren und Verwenden des AES-Schlüssel zur Verschlüsselungdes Umsatzzählers.

• Sha256 Hash Funktion

• Funktionen zum Generieren eines QR-Codes

• Funktionen zum Generieren eines OCR-Codes

• Developer Handbuch mit Funktionsbeschreibung inkl. Visual Basic 6 und C++Quellcode

• Visual Basic 6 Testprogramm welches den Einsatz der Funktionen des COM Ob-jektes demonstriert

• C++ Testprogramm welches den Einsatz der DLL-Schnittstelle demonstriert

• durchgängiges Beispiel in Visual Basic 6 für die Erstellung beliebiger Belegzeilenmit erfolgreicher Veri�kation über A-SIT Plus Testtool

• Sowohl als 32-bit als auch als 64-bit Verfügbar

• Für den Einsatz unter Windows XP wird ein spezieller a.sign Client XP benötigt

a.sign RK COM/DLL Version: 2.2 Seite 3 von 61

Ges. für Sicherheitssystemeim elektr. Datenverkehr GmbH Inhaltsverzeichnis

Inhaltsverzeichnis

1 Überblick 91.1 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91.2 Voraussetzungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

I COM Schnittstelle 10

2 Verwendung des a.sign RK COM Objektes 112.1 Registrierung im Betriebssystem . . . . . . . . . . . . . . . . . . . . . . . . 112.2 Deregistrierung im Betriebssystem . . . . . . . . . . . . . . . . . . . . . . . 122.3 Kartenwechsel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132.4 Schnittstelle Registrierkassen Karte - Methoden und Eigenschaften . . . . 132.4.1 Software prüfen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132.4.2 Initialize . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132.4.3 Karte prüfen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132.4.4 LoadInfo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142.4.5 ZdaId . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142.4.6 Certi�cateSerial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142.4.7 Certi�cateSerialHex . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142.4.8 Certi�cate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142.4.9 IssuerCerti�cate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152.4.10 Sign . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152.4.11 SignJWS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152.4.12 Verify . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152.4.13 VerifyJWS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162.4.14 Finalize . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162.5 Schnittstelle AES ICM - Methoden und Eigenschaften . . . . . . . . . . . 172.5.1 GenerateKey . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172.5.2 Encrypt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172.5.3 Decrypt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172.5.4 AesKeyCheckSum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182.6 Schnittstelle Base64 - Methoden und Eigenschaften . . . . . . . . . . . . . 182.6.1 Encode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182.6.2 EncodeUrl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182.6.3 ReencodeUrlToNormal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192.6.4 ReencodeNormalToUrl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192.6.5 Decode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192.6.6 DecodeUrl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202.6.7 ReencodeBase64ToBase32 . . . . . . . . . . . . . . . . . . . . . . . . . . . 202.6.8 ReencodeBase64UrlToBase32 . . . . . . . . . . . . . . . . . . . . . . . . . 20

a.sign RK COM/DLL Version: 2.2 Seite 4 von 61

Ges. für Sicherheitssystemeim elektr. Datenverkehr GmbH Inhaltsverzeichnis

2.7 Schnittstelle Sha256 - Methoden und Eigenschaften . . . . . . . . . . . . . 212.7.1 HashString . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212.7.2 HashBytes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212.7.3 HashSigVorigerBeleg . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212.8 Schnittstelle QR-Code - Methoden und Eigenschaften . . . . . . . . . . . . 222.8.1 Encode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222.8.2 EncodeFromJWS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222.8.3 SetScaleFactor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222.8.4 SetMargin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222.8.5 SetBitDepth . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232.8.6 SetErrorCorrectionLevel . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232.9 Schnittstelle OCR-Code - Methoden und Eigenschaften . . . . . . . . . . . 232.9.1 Encode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232.9.2 EncodeFromJWS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

3 Beispiel Verwendung in Visual Basic 6 243.1 Schnittstelle Registrierkassen Funktionen (Kartenzugri�) . . . . . . . . . . 243.2 Schnittstelle AES-ICM (Umsatzzähler verschlüsseln) . . . . . . . . . . . . 263.3 Schnittstelle Base64 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273.4 Schnittstelle Sha256 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283.5 Schnittstelle QR-Code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293.6 Schnittstelle QCR-Code . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30

II DLL Schnittstelle 31

4 Verwendung des a.sign RK COM/DLL Objektes 324.1 Kartenwechsel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 324.2 Schnittstelle Registrierkassen Karte - Methoden und Eigenschaften . . . . 324.2.1 Software prüfen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 324.2.2 Initialize . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 324.2.3 Karte prüfen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 324.2.4 LoadInfo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 334.2.5 ZdaId . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 334.2.6 Certi�cateSerial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 344.2.7 Certi�cateSerialHex . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 344.2.8 Certi�cate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 354.2.9 IssuerCerti�cate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 354.2.10 Sign . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 364.2.11 SignJWS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 364.2.12 Verify . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 374.2.13 VerifyJWS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 384.2.14 Finalize . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38

a.sign RK COM/DLL Version: 2.2 Seite 5 von 61

Ges. für Sicherheitssystemeim elektr. Datenverkehr GmbH Inhaltsverzeichnis

4.3 Schnittstelle AES ICM - Methoden und Eigenschaften . . . . . . . . . . . 394.3.1 GenerateKey . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 394.3.2 Encrypt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 394.3.3 Decrypt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 404.3.4 AesKeyCheckSum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 414.4 Schnittstelle Base64 - Methoden und Eigenschaften . . . . . . . . . . . . . 414.4.1 Encode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 414.4.2 EncodeUrl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 424.4.3 ReencodeUrlToNormal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 424.4.4 ReencodeNormalToUrl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 434.4.5 Decode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 434.4.6 DecodeUrl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 444.4.7 ReencodeBase64ToBase32 . . . . . . . . . . . . . . . . . . . . . . . . . . . 444.4.8 ReencodeBase64UrlToBase32 . . . . . . . . . . . . . . . . . . . . . . . . . 454.5 Schnittstelle Sha256 - Methoden und Eigenschaften . . . . . . . . . . . . . 464.5.1 HashString . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 464.5.2 HashBytes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 464.5.3 HashSigVorigerBeleg . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 474.6 Schnittstelle QR-Code - Methoden und Eigenschaften . . . . . . . . . . . . 474.6.1 Encode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 474.6.2 EncodeFromJWS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 484.7 Schnittstelle OCR-Code - Methoden und Eigenschaften . . . . . . . . . . . 494.7.1 Encode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 494.7.2 EncodeFromJWS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49

5 Beispiel Verwendung in C/C++ 515.1 Schnittstelle Registrierkassen Funktionen (Kartenzugri�) . . . . . . . . . . 515.2 Schnittstelle AES-ICM (Umsatzzähler verschlüsseln) . . . . . . . . . . . . 535.3 Schnittstelle Base64 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 545.4 Schnittstelle Sha256 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 555.5 Schnittstelle QR-Code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 565.6 Schnittstelle QCR-Code . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57

III Allgemein 58

6 Allgemeine Punkte zur Verwendung 596.1 Fehlerkorrekturlevel bei QR-Code . . . . . . . . . . . . . . . . . . . . . . . 596.2 Logging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59

7 Frequently asked questions (FAQ) 607.1 Wann sollen Initialize und Finalize aufgerufen werden? . . . . . . . . . . . 607.2 Unterschied zwischen Sign und SignJWS . . . . . . . . . . . . . . . . . . . 60

a.sign RK COM/DLL Version: 2.2 Seite 6 von 61

Ges. für Sicherheitssystemeim elektr. Datenverkehr GmbH Inhaltsverzeichnis

Literatur 61

a.sign RK COM/DLL Version: 2.2 Seite 7 von 61

Ges. für Sicherheitssystemeim elektr. Datenverkehr GmbH Inhaltsverzeichnis

Datum Rev Autor Änderungen23.12.2016 2.2 Patrick Hagelkruys Überarbeitung Kapitel 2.1

�Registrierung im Betriebssystem�06.12.2016 2.1 Patrick Hagelkruys Fehlerkorrekturlevel für QR-Code

Beschreibung der DLL Schnittstelle11.11.2016 2.0 Patrick Hagelkruys Farbtiefe für QR-Code24.10.2016 1.9 Patrick Hagelkruys AES Prüfsumme hinzugefügt

Funktion zum Umkodieren von Base64und Base64-URL auf Base32Fehlerbehebung bei Base32 Kodierung

13.06.2016 1.8 Patrick Hagelkruys OCR Funktionen hinzugefügt30.05.2016 1.7 Patrick Hagelkruys FAQ hinzugefügt17.05.2016 1.6 Patrick Hagelkruys Umbenennung der Produkte09.05.2016 1.5 Patrick Hagelkruys Fehler in Beispielcode ausgebessert13.04.2016 1.4 Patrick Hagelkruys Padding in Base64Url30.03.2016 1.3 Patrick Hagelkruys QR-Code Funktionen29.03.2016 1.2 Patrick Hagelkruys Funktionen für Base64 Dekodierung23.03.2016 1.1 Patrick Hagelkruys Umsatzzähler als String für AES Funktionen15.02.2016 1.0 Patrick Hagelkruys Rückgabewerte der Funktion erweitert

Funktion zum Umkodieren von Base64Urlzu Base64

05.02.2016 0.9 Patrick Hagelkruys Tippfehler in Code-Beispiela.sign Client Version angepasst

01.02.2016 0.8 Patrick Hagelkruys Hash Signatur voriger Beleg28.01.2016 0.7 Patrick Hagelkruys Review26.01.2016 0.6 Patrick Hagelkruys Typo in Quellcodebsp.

Returncodes für alle FunktionenFunktion: Software prüfenFunktion: Karte prüfenSchnittstelle Sha256Leistungsbeschreibung

21.01.2016 0.5 Patrick Hagelkruys textuelle Änderungen20.01.2016 0.4 Patrick Hagelkruys JWS Signatur hinzugefügt20.01.2016 0.3 Patrick Hagelkruys neue Schnittstellen

Logging20.01.2016 0.2 Ramin Sabet Review

Robin Balean ToBeSigned Data korrigiertPatrick Hagelkruys Kartenwechsel, neue Schnittstellen

18.01.2016 0.1 Patrick Hagelkruys Erste Version

Tabelle 1: Dokumentenhistorie

a.sign RK COM/DLL Version: 2.2 Seite 8 von 61

Ges. für Sicherheitssystemeim elektr. Datenverkehr GmbH 1 Überblick

1 Überblick

1.1 Zusammenfassung

Ziel dieses Dokumentes ist die Beschreibung der Schnittstelle des Produktes a.sign RKCOM/DLL. Dieses Produkt stellt zwei Schnittstellen zur Verfügung, COM und DLL-Aufrufe.

COM (Component Object Model [Mic16]) ist eine Technologie von Microsoft und ermög-licht die Kommunikation zwischen Softwarekomponenten.

DLL-Aufrufe entsprechen Standard C/C++ Aufrufen.

Das a.sign RK COM/DLL kapselt die Aufrufe zu Erstellung von digitalen Signaturen wiediese in der österreichischen Registrierkassen Sicherheitsverordnung [Bun15] benötigtenwerden.

Diese Dokumentation entspricht der Version 2.6.0.0 des a.sign RK COM/DLL.

1.2 Voraussetzungen

Für die Verwendung des a.sign RK COM/DLL sind folgende Voraussetzungen zu erfül-len:

• Windows basiertes Betriebssystem (Windows Vista oder neuer)

• a.sign Client in der Version 1.3.2.29c oder neuer

• Kartenleser

• aktivierte a.sign RK CHIP

a.sign RK COM/DLL Version: 2.2 Seite 9 von 61

TEIL I

COM SCHNITTSTELLE

Ges. für Sicherheitssystemeim elektr. Datenverkehr GmbH 2 Verwendung des a.sign RK COM Objektes

2 Verwendung des a.sign RK COM Objektes

2.1 Registrierung im Betriebssystem

Vor der Verwendung muss des COM Objekt im Betriebssystem registriert werden, dazuist ein einfacher Kommandozeilenbefehl notwendig. Das a.sign RK COM wird in dreiVarianten ausgeliefert:

• 32bit COM Objekt (x86). Für die Verwendung in 32bit Betriebssystemen und für32bit Applikationen in 64bit Betriebssystemen (z.B.: VB6 Applikationen)

• 64bit COM Objekt (x64). Für die Verwendung in 64bit Applikationen

• Windows XP kompatibles 32bit COMObjekt (xp). Zusätzlich wird der a.sign ClientXP benötigt.

32bit Betriebssystem

Für 32bit Windows Betriebssysteme ist folgender Befehl in einer Administrator Konsoleauszuführen:

r eg svr32 . exe x86/asignRKCom . d l l

Registrierung in 32bit Systemen

64bit Betriebssystem jedoch 32bit Applikation

Für das 32bit COM Objekt unter 64bit Windows Betriebssysteme ist folgender Befehlin einer Administrator Konsole auszuführen:

c : \Windows\SysWOW64\ regsvr32 . exe x86/asignRKCom . d l l

Registrierung in 32bit COM unter 64bit Systemen

64bit Betriebssystem und 64bit Applikation

Für 64bit Windows Betriebssysteme und der Verwendung einer 64bit Applikation istfolgender Befehl in einer Administrator Konsole auszuführen:

r eg svr32 . exe x64/asignRKCom . d l l

Registrierung in 64bit COM unter 64bit Systemen

a.sign RK COM/DLL Version: 2.2 Seite 11 von 61

Ges. für Sicherheitssystemeim elektr. Datenverkehr GmbH 2.2 Deregistrierung im Betriebssystem

Windows XP

Für Windows XP Betriebssysteme ist folgender Befehl in einer Administrator Konsoleauszuführen:

r eg svr32 . exe xp/asignRKCom . d l l

Registrierung in Windows XP

Nach erfolgreicher Registrierung wird der Dialog aus Abbildung 1 angezeigt.

Abbildung 1: COM Objekt Registrierung erfolgreich

2.2 Deregistrierung im Betriebssystem

Zum Entfernen des COM Objektes muss zusätzlich der Parameter /u übergeben wer-den.

r eg svr32 . exe /u asigRKCom . d l l

Deregistrierung in 32bit Systemen

Die Deregistrierung der 32bit und 64bit COM Objekte erfolgt analog zu der Registrierungin Kapitel 2.1.

Die erfolgreiche Deregistrierung wird durch den Dialog aus Abbildung 2 bestätigt.

Abbildung 2: COM Objekt Deregistrierung erfolgreich

a.sign RK COM/DLL Version: 2.2 Seite 12 von 61

Ges. für Sicherheitssystemeim elektr. Datenverkehr GmbH 2.3 Kartenwechsel

2.3 Kartenwechsel

Bei einem Kartenwechsel muss das COM Objekt neu geladen werden. Es reicht nicht dieLoadInfo Methode (Kapitel 2.4.4) aufzurufen.Es wird empfohlen das Registrierkassen Programm zu beenden, die Karte zu wechselnund erst dann das Registrierkassen Programm zu starten.

2.4 Schnittstelle Registrierkassen Karte - Methoden undEigenschaften

2.4.1 Software prüfen

Dieser Befehl prüft ob die notwendige a.sign Client Software in der richtigen Versioninstalliert ist.Rückgabewert: Long

0: OK

2: Registry Einträge des a.sign Client fehlen. Fehlerhafte Installation?

3: a.sign Client Version nicht ausreichend, bitte aktualisieren

4: a.sign Client kann nicht geladen werden. Fehlerhafte Installation?

5: Allgemeiner Fehler

2.4.2 Initialize

Laden der PKCS#11 Datei und Initialisierung der internen Datenstrukturen im COMObjekt. Dieser Befehl muss nur einmal beim Start des Programmes ausgeführt werden.Rückgabewert: Long

0: OK

1: a.sign Client konnte nicht geladen werden.

2: a.sign Client DLL ist falsch bzw. Funktionen fehlen?

3: a.sign Client kann nicht initialisiert werden bzw. wurde schon initialisiert.

2.4.3 Karte prüfen

Dieser Befehl prüft ob eine Karte im Kartenleser ist.Rückgabewert: Long

0: OK

1: Keine aktivierte Karte gefunden

a.sign RK COM/DLL Version: 2.2 Seite 13 von 61

Ges. für Sicherheitssystemeim elektr. Datenverkehr GmbH 2.4 Schnittstelle Registrierkassen Karte - Methoden und Eigenschaften

2: Keine Karte gefunden.

2.4.4 LoadInfo

Laden der Zerti�katsdaten von der Karte. Die geladenen Daten werden über die Eigen-schaften ZdaId, CertificateSerial, Certificate und IssuerCertificate ausgelesen.Dieser Befehl muss nur einmal (z.B.: Programmstart) ausgeführt werden, die Daten derKarte werden im Speicher gehalten.Rückgabewert: Long

0: OK

1: a.sign Client nicht initialisiert

2: Fehler in a.sign Client

2.4.5 ZdaId

String Wert welcher die ZDA-ID enthält.Kann erst nach einem Aufruf 2.4.4 verwendet werden.Rückgabewert: String

2.4.6 Certi�cateSerial

String Wert welcher die Zerti�katsseriennummer enthält.Kann erst nach einem Aufruf 2.4.4 verwendet werden.Rückgabewert: String

2.4.7 Certi�cateSerialHex

String Wert welcher die Zerti�katsseriennummer im HEX-Format enthält.Kann erst nach einem Aufruf 2.4.4 verwendet werden.Rückgabewert: String

2.4.8 Certi�cate

String Wert welcher das Base64 kodierte Zerti�kat enthält.Kann erst nach einem Aufruf 2.4.4 verwendet werden.Rückgabewert: String

a.sign RK COM/DLL Version: 2.2 Seite 14 von 61

Ges. für Sicherheitssystemeim elektr. Datenverkehr GmbH 2.4 Schnittstelle Registrierkassen Karte - Methoden und Eigenschaften

2.4.9 IssuerCerti�cate

String Wert welcher das Base64 kodierte Ausstellerzerti�kat enthält.Kann erst nach einem Aufruf 2.4.4 verwendet werden.Rückgabewert: String

2.4.10 Sign

Durchführen einer Signatur auf der Karte. Der zurückgegebenen Wert Signature istbereits Base64-URL kodiert.Parameter:

[in]: String; zu signierendes JSON (header + Payload)

[out]: String; Signatur

Rückgabewert: Long

0: OK

1: a.sign Client nicht initialisiert

2: Fehler beim Signieren

2.4.11 SignJWS

Durchführen einer Signatur auf der Karte. Die Funktion bereitet die eingegebenen Da-ten nach dem JWS Standard auf, d.h. es wird der entsprechende JWS-Header mit demAlgorithmus erzeugt und sowohl Daten als auch Header Base64-URL kodiert. Der zurück-gegebene Wert entspricht der JWS Signatur bestehend aus Protected Header, Payloadund Signatur jeweils Base64-URL kodiert und durch Punkt getrennt.Parameter:

[in]: String; zu signierende Belegzeile

[out]: String; Signatur

Rückgabewert: Long; 0=OK

2.4.12 Verify

Durchführen einer Veri�kation einer DEP Zeile.Parameter:

[in]: String; Belegzeile welche signiert wurde

[in]: String; Signatur

Rückgabewert: Long

a.sign RK COM/DLL Version: 2.2 Seite 15 von 61

Ges. für Sicherheitssystemeim elektr. Datenverkehr GmbH 2.4 Schnittstelle Registrierkassen Karte - Methoden und Eigenschaften

0: OK

1: a.sign Client nicht initialisiert

-34: Belegzeile startet nicht mit �_R1-AT1�

-35: Zerti�kat konnte nicht geladen werden

-36: Fehler bei Hash Berechnung

-37: Signatur ungültig

-38: Fehler beim Parsen des ö�entlichen Schlüssel

-39: Fehler beim Parsen des Zerti�kates

-40: Fehler beim Parsen des Signaturewerte

-41: Fehler Signaturüberprüfung

2.4.13 VerifyJWS

Durchführen einer Veri�kation einer DEP Zeile.Parameter:

[in]: String; DEP Zeile (JWS)

Rückgabewert: Long

0: OK

1: a.sign Client nicht initialisiert

-33: JWS Header ungültig

-34: Belegzeile startet nicht mit �_R1-AT1�

-35: Zerti�kat konnte nicht geladen werden

-36: Fehler bei Hash Berechnung

-37: Signatur ungültig

-38: Fehler beim Parsen des ö�entlichen Schlüssel

-39: Fehler beim Parsen des Zerti�kates

-40: Fehler beim Parsen des Signaturewerte

-41: Fehler Signaturüberprüfung

2.4.14 Finalize

Freigeben der internen Datenstrukturen im COM Objekt und entladen der PKCS#11Datei. Dieser Befehl muss nur einmal beim Beenden des Programmes ausgeführt werden.

a.sign RK COM/DLL Version: 2.2 Seite 16 von 61

Ges. für Sicherheitssystemeim elektr. Datenverkehr GmbH 2.5 Schnittstelle AES ICM - Methoden und Eigenschaften

Rückgabewert: Long

0: OK

1: Fehler

2.5 Schnittstelle AES ICM - Methoden und Eigenschaften

2.5.1 GenerateKey

Generieren eines AES Schlüssel. Dieser Befehl muss nur einmal pro Kasse durchgeführtwerden und das Ergebnis durch den Aufrufenden gespeichert werden.Parameter:

[out]: String; AES Schlüssel

Rückgabewert: Long

0: OK

1: Fehler

2.5.2 Encrypt

Verschlüsselung des UmsatzzählersParameter:

[in]: String; AES Schlüssel

[in]: String; Umsatz

[in]: String; KassenId

[in]: String; Belegnummer

[out]: String; Verschlüsselter Umsatzzähler

Rückgabewert: Long

0: OK

1: Fehler

2.5.3 Decrypt

Entschlüsselung des Umsatzzählers. Diese Funktion wird im Regelfall nicht benötigt.Parameter:

[in]: String; AES Schlüssel

[in]: String; Verschlüsselter Umsatzzähler

a.sign RK COM/DLL Version: 2.2 Seite 17 von 61

Ges. für Sicherheitssystemeim elektr. Datenverkehr GmbH 2.6 Schnittstelle Base64 - Methoden und Eigenschaften

[in]: String; KassenId

[in]: String; Belegnummer

[out]: String; Umsatz

Rückgabewert: Long

0: OK

1: Fehler

2.5.4 AesKeyCheckSum

Generieren der Prüfsumme über den AES-Schlüssel. Diese Funktion generiert die optio-nale Prüfsumme für die Anmeldung des AES-Schlüssels in Finanzonline.Parameter:

[in]: String; AES Schlüssel

[out]: String; Prüfsumme

Rückgabewert: Long

0: OK

1: Fehler

2.6 Schnittstelle Base64 - Methoden und Eigenschaften

2.6.1 Encode

Base64 Encoding eines StringParameter:

[in]: String; zu encodierende Daten

[out]: String; encodierte Daten

Rückgabewert: Long

0: OK

1: Fehler

2.6.2 EncodeUrl

Base64-URL Encoding eines StringParameter:

[in]: String; zu encodierende Daten

a.sign RK COM/DLL Version: 2.2 Seite 18 von 61

Ges. für Sicherheitssystemeim elektr. Datenverkehr GmbH 2.6 Schnittstelle Base64 - Methoden und Eigenschaften

[in]: Long; Padding, 0=Nein, 1=Ja

[out]: String; encodierte Daten

Rückgabewert: Long

0: OK

1: Fehler

2.6.3 ReencodeUrlToNormal

Decodiert einen Base64-URL kodierten String und kodiert diesen neu als Base64 (Nor-mal)Parameter:

[in]: String; zu reencodierende Daten

[out]: String; reencodierte Daten

Rückgabewert: Long

0: OK

1: Fehler

2.6.4 ReencodeNormalToUrl

Decodiert einen Base64 (Normal) kodierten String und kodiert diesen neu als Base64-URLParameter:

[in]: String; zu reencodierende Daten

[in]: Long; Padding, 0=Nein, 1=Ja

[out]: String; reencodierte Daten

Rückgabewert: Long

0: OK

1: Fehler

2.6.5 Decode

Base64 decoding eines StringParameter:

[in]: String; zu decodierende Daten

[out]: String; decodierte Daten

a.sign RK COM/DLL Version: 2.2 Seite 19 von 61

Ges. für Sicherheitssystemeim elektr. Datenverkehr GmbH 2.6 Schnittstelle Base64 - Methoden und Eigenschaften

Rückgabewert: Long

0: OK

1: Fehler

2.6.6 DecodeUrl

Base64-URL Decoding eines StringParameter:

[in]: String; zu decodierende Daten

[out]: String; decodierte Daten

Rückgabewert: Long

0: OK

1: Fehler

2.6.7 ReencodeBase64ToBase32

Decodiert einen Base64 kodierten String und kodiert diesen neu als Base32Parameter:

[in]: String; zu reencodierende Daten

[out]: String; reencodierte Daten

Rückgabewert: Long

0: OK

1: Fehler

2.6.8 ReencodeBase64UrlToBase32

Decodiert einen Base64-URL kodierten String und kodiert diesen neu als Base32Parameter:

[in]: String; zu reencodierende Daten

[out]: String; reencodierte Daten

Rückgabewert: Long

0: OK

1: Fehler

a.sign RK COM/DLL Version: 2.2 Seite 20 von 61

Ges. für Sicherheitssystemeim elektr. Datenverkehr GmbH 2.7 Schnittstelle Sha256 - Methoden und Eigenschaften

2.7 Schnittstelle Sha256 - Methoden und Eigenschaften

2.7.1 HashString

Sha256 eines StringParameter:

[in]: String; zu hashende Daten

[out]: String; Daten nach Hashfunktion

Rückgabewert: Long

0: OK

1: Fehler

2.7.2 HashBytes

Sha256 eines Byte ArrayParameter:

[in]: Byte ; zu hashende Daten

[in]: Long ; Länge der zu hashenden Daten

[out]: String; Daten nach Hashfunktion

Rückgabewert: Long

0: OK

1: Fehler

2.7.3 HashSigVorigerBeleg

Sha256 des vorigen Belegs wie in [Bun15, Z4, Sig-Voriger-Beleg] verlangtParameter:

[in]: String; zu hashende Daten

[in]: Long ; Länge der zu extrahierenden Bytes (derzeit 8)

[out]: String; Base64 codierte Daten nach Hashfunktion

Rückgabewert: Long

0: OK

1: Fehler

a.sign RK COM/DLL Version: 2.2 Seite 21 von 61

Ges. für Sicherheitssystemeim elektr. Datenverkehr GmbH 2.8 Schnittstelle QR-Code - Methoden und Eigenschaften

2.8 Schnittstelle QR-Code - Methoden und Eigenschaften

2.8.1 Encode

Erzeugt aus der übergebenen Belegzeile einen QR-Code uns speichert diesen in der Aus-gabedatei im BMP Format.Parameter:

[in]: String; Daten für QR-Code

[in]: String; Ausgabedatei (bmp)

Rückgabewert: Long

0: OK

1: Fehler

2.8.2 EncodeFromJWS

Erzeugt aus der übergebenen JWS-Zeile einen QR-Code uns speichert diesen in derAusgabedatei im BMP Format.Parameter:

[in]: String; JWS-Zeile für QR-Code

[in]: String; Ausgabedatei (bmp)

Rückgabewert: Long

0: OK

1: Fehler

2.8.3 SetScaleFactor

Skalierungsfaktor für QR-Code. Der QR-Code wird bei einem Skalierungsfaktor von 1als 77x77 Pixel ausgegeben und Entsprechend des Faktors vergröÿert.Parameter:

[in]: Long; Skalierungsfaktor

2.8.4 SetMargin

Rand für QR-Code, entsprechend dem übergebenen Wert werden weiÿe Pixel an allenSeiten eingefügt.Parameter:

[in]: Long; Margin

a.sign RK COM/DLL Version: 2.2 Seite 22 von 61

Ges. für Sicherheitssystemeim elektr. Datenverkehr GmbH 2.9 Schnittstelle OCR-Code - Methoden und Eigenschaften

2.8.5 SetBitDepth

Farbtiefe für den QR-Code in bit, mögliche Werte sind 1,4,8,16,24,32.Parameter:

[in]: Long; bit (1,4,8,16,24,32)

2.8.6 SetErrorCorrectionLevel

Fehlerkorrekturlevel für den QR-Code, mögliche Werte sind L,M,Q,H. (siehe auch 6.1)Parameter:

[in]: String; (L,M,Q,H)

2.9 Schnittstelle OCR-Code - Methoden und Eigenschaften

Für den OCR-Code ist in der RKSV [Bun15, Detailspezi�kation Kapitel 14] beschreiben,dass die Base64 Werte im Base32 Format kodiert werden müssen.

2.9.1 Encode

Erzeugt aus der übergebenen Belegzeile eine OCR-Code Zeile.Parameter:

[in]: String; Daten für OCR-Code

[out]: String; Kodierter Daten OCR-Code

Rückgabewert: Long

0: OK

1: Fehler

2.9.2 EncodeFromJWS

Erzeugt aus der übergebenen JWS-Zeile eine OCR-Code Zeile.Parameter:

[in]: String; JWS-Zeile für OCR-Code

[out]: String; Kodierter Daten OCR-Code

Rückgabewert: Long

0: OK

1: Fehler

a.sign RK COM/DLL Version: 2.2 Seite 23 von 61

Ges. für Sicherheitssystemeim elektr. Datenverkehr GmbH 3 Beispiel Verwendung in Visual Basic 6

3 Beispiel Verwendung in Visual Basic 6

3.1 Schnittstelle Registrierkassen Funktionen (Kartenzugri�)

1 Dim reg As Object2 Set reg = CreateObject ("ATrustRegistrierkasseCom.Registrierkasse" )3 Dim r e t As Long45 r e t = reg . CheckSoftware67 r e t = reg . In i t i a l i z e89 r e t = reg . CheckCard1011 r e t = reg . LoadInfo12 Dim sZdaId As String : sZdaId = reg . ZdaId13 Dim sC e r t S e r i a l As String : sC e r t S e r i a l = reg . C e r t i f i c a t e S e r i a l14 Dim s C e r t i f i c a t e As String : s C e r t i f i c a t e = reg . C e r t i f i c a t e15 Dim s I s s u e r As String : s I s s u e r = reg . I s s u e rC e r t i f i c a t e1617 Dim ToBeSigned As String

18 Dim Signature As String

19 ToBeSigned = "eyJhbGciOiJFUzI1NiJ9.UjEtQVQxX0RFTU8tQ0FTSC1CT1...A6MjNfMA=="

20 r e t = reg . Sign (ToBeSigned , S ignature )2122 Dim ToBeSigned2 As String

23 Dim Signature2 As String

24 ToBeSigned2 = "_R1-AT1_DEMO-CASH-B...P6PGD2KOQ2==="

25 r e t = reg . SignJWS(ToBeSigned2 , S ignature2 )2627 I f (0 = r e t ) Then

28 Dim jws_parts ( ) As String

29 jws_parts = Sp l i t ( Signature2 , "." )30 ' protected_header = jws_parts (0 )31 ' payload = jws_parts (1 )32 ' jws_signature_value = jws_parts (2 )33 End I f

3435 r e t = reg . F i n a l i z e

Zeile 1-2 In den ersten beiden Zeilen wird das COM Objekt erstellt.

Zeile 5 Überprüfen ob die richtige Version des a.sign Client installiert ist.

Zeile 7 Initialisierung der Datenstrukturen im COMObjekt und in der PKCS#11 Schnitt-stelle zur Karte ist.

Zeile 9 Überprüfen ob eine Karte vorhanden ist.

Zeile 11 Laden der Informationen von der Karte

a.sign RK COM/DLL Version: 2.2 Seite 24 von 61

Ges. für Sicherheitssystemeim elektr. Datenverkehr GmbH 3.1 Schnittstelle Registrierkassen Funktionen (Kartenzugri�)

Zeile 12 - 15 Auslesen der in Zeile 7 geladenen Daten

Zeile 20 Durchführen einer Signatur

Zeile 25 Durchführen einer Signatur nach JWS Standard

Zeile 28-32 Parsen der JWS-Signatur in die einzelnen Teile

Zeile 35 Freigeben der internen Datenstrukturen im COM Objekt und in der PKCS#11Schnittstelle

a.sign RK COM/DLL Version: 2.2 Seite 25 von 61

Ges. für Sicherheitssystemeim elektr. Datenverkehr GmbH 3.2 Schnittstelle AES-ICM (Umsatzzähler verschlüsseln)

3.2 Schnittstelle AES-ICM (Umsatzzähler verschlüsseln)

1 Dim comAes As Object2 Set comAes = CreateObject ("ATrustRegistrierkasseCom.AesIcm" )34 Dim r e t As Long5 Dim aeskey As String

6 comAes . GenerateKey aeskey78 Dim Umsatz As Long : Umsatz = 23499 Dim KassenId As String : KassenId = "Register3874"

10 Dim Belegnummer As String : Belegnummer = "39920034"

11 Dim Encrypted As String

1213 r e t = comAes . Encrypt ( aeskey , Umsatz , KassenId , Belegnummer , Encrypted )1415 Dim Umsatz2 As String

16 r e t = comAes . Decrypt ( aeskey , Encrypted , KassenId , Belegnummer , Umsatz2 )1718 Dim checksum As String

19 r e s = comAes . AesKeyCheckSum( aeskey , checksum )

Zeile 1-2 In den ersten beiden Zeilen wird das COM Objekt erstellt.

Zeile 5-6 Erstmaliges Erstellen eines AES Schlüssels

Zeile 8-11 Initialisieren der Variablen für die Verschlüsselung des Umsatzzählers

Zeile 13 Verschlüsselung des Umsatzzählers

Zeile 15-16 Test durch Entschlüsselung, Umsatz und Umsatz2 sollten jetzt gleich sein

Zeile 18-19 Generieren der Prüfsumme für den AES Schlüssel

a.sign RK COM/DLL Version: 2.2 Seite 26 von 61

Ges. für Sicherheitssystemeim elektr. Datenverkehr GmbH 3.3 Schnittstelle Base64

3.3 Schnittstelle Base64

1 Dim comBase64 As Object2 Set comBase64 = CreateObject ("ATrustRegistrierkasseCom.Base64" )34 Dim r e t As Long5 Dim inData As String : inData = "_R1-AT1_DEMO-CASH-B...P6PGD2KOQ2==="

6 Dim outData as String

7 Dim outDataUrl as String

89 r e t = comBase64 . Encode ( inData , outData )1011 r e t = comBase64 . EncodeUrl ( inData , 0 , outDataUrl )

Zeile 1-2 In den ersten beiden Zeilen wird das COM Objekt erstellt.

Zeile 4-7 Initialisieren der Variablen für die Base64 Kodierung

Zeile 9 Base64 kodieren eines Strings

Zeile 11 Base64-URL kodieren eines Strings

a.sign RK COM/DLL Version: 2.2 Seite 27 von 61

Ges. für Sicherheitssystemeim elektr. Datenverkehr GmbH 3.4 Schnittstelle Sha256

3.4 Schnittstelle Sha256

1 Dim comSha256 As Object2 Set comSha256 = CreateObject ("ATrustRegistrierkasseCom.Sha256" )34 Dim r e t As Long5 Dim indata As String : indata = "TEST STRING"

6 Dim i nbyte s ( ) As Byte7 Dim outdata As String

8 Dim outdata2 As String

9 Dim outdata3 As String

10 Dim byte sExt rah i e r t As Long : by t e sExt rah i e r t = 811 ' inbyte s muss b e f u e l l t werden1213 r e t = comSha256 . HashString ( indata , outdata )1415 r e t = comSha256 . HashBytes ( inbyte s (1 ) , UBound( inbyte s ) , outdata2 )1617 ' indata i s t d i e gesamte jws S ignatur des vor igen Belegs

( [ jws_header ] . [ payload ] . [ s i g ] )18 r e t = comSha256 . HashSigVorigerBeleg ( indata , byte sExtrah i e r t , outdata3 )

Zeile 1-2 In den ersten beiden Zeilen wird das COM Objekt erstellt.

Zeile 4-11 Initialisieren der Variablen für die Sha256 Funktion

Zeile 13 Sha256 eines Strings

Zeile 15 Sha256 eines Byte Array

Zeile 18 Sha256 der Signatur des vorigen Belegs

a.sign RK COM/DLL Version: 2.2 Seite 28 von 61

Ges. für Sicherheitssystemeim elektr. Datenverkehr GmbH 3.5 Schnittstelle QR-Code

3.5 Schnittstelle QR-Code

1 Dim comQr As Object2 Set comQr = CreateObject ("ATrustRegistrierkasseCom.QrCode" )34 Dim r e t As Long5 Dim s f As Long : s f = 26 Dim margin As Long : margin = 378 Dim indata As String : indata = "R1-AT1_DEMO-CASH-BOX426_776730..."

9 Dim indata2 As String : indata2 = "eyJhbGciOiJFUzI1NiJ9.UjEtQVQxX0RFTU..."

10 Dim o u t f i l e As String : o u t f i l e = "c:\\temp\\qr1.bmp"

11 Dim o u t f i l e 2 As String : o u t f i l e = "c:\\temp\\qr2.bmp"

1213 comQr . SetSca l eFactor ( s f )14 comQr . SetMargin (margin )1516 r e t = comQr . Encode ( indata , o u t f i l e )1718 r e t = comQr . EncodeFromJWS( indata2 , o u t f i l e 2 )

Zeile 1-2 In den ersten beiden Zeilen wird das COM Objekt erstellt.

Zeile 4-11 Initialisieren der Variablen für die QR-Code Funktion

Zeile 13 Setzen des Skalierungsfaktor

Zeile 14 Setzen der Margin

Zeile 16 QR-Code erstellen aus Belegzeile

Zeile 18 QR-Code erstellen aus JWS-Zeile

Abbildung 3: QR-Code Ausgabe

a.sign RK COM/DLL Version: 2.2 Seite 29 von 61

Ges. für Sicherheitssystemeim elektr. Datenverkehr GmbH 3.6 Schnittstelle QCR-Code

3.6 Schnittstelle QCR-Code

1 Dim comOcr As Object2 Set comOcr = CreateObject ("ATrustRegistrierkasseCom.OcrCode" )34 Dim r e t As Long56 Dim indata As String : indata = "R1-AT1_DEMO-CASH-BOX426_776730..."

7 Dim indata2 As String : indata2 = "eyJhbGciOiJFUzI1NiJ9.UjEtQVQxX0RFTU..."

8 Dim outdata As String : outdata = ""

9 Dim outdata2 As String : outdata2 = ""

1011 r e t = comOcr . Encode ( indata , outdata )1213 r e t = comOcr . EncodeFromJWS( indata2 , outdata2 )

Zeile 1-2 In den ersten beiden Zeilen wird das COM Objekt erstellt.

Zeile 4-9 Initialisieren der Variablen für die OCR-Code Funktion

Zeile 11 OCR-Code erstellen aus Belegzeile

Zeile 13 OCR-Code erstellen aus JWS-Zeile

a.sign RK COM/DLL Version: 2.2 Seite 30 von 61

TEIL II

DLL SCHNITTSTELLE

Ges. für Sicherheitssystemeim elektr. Datenverkehr GmbH 4 Verwendung des a.sign RK COM/DLL Objektes

4 Verwendung des a.sign RK COM/DLL Objektes

4.1 Kartenwechsel

Bei einem Kartenwechsel muss die DLL neu geladen werden. Es reicht nicht die LoadInfoMethode (Kapitel 4.2.4) aufzurufen.Es wird empfohlen das Registrierkassen Programm zu beenden, die Karte zu wechselnund erst dann das Registrierkassen Programm zu starten.

4.2 Schnittstelle Registrierkassen Karte - Methoden undEigenschaften

4.2.1 Software prüfen

Dieser Befehl prüft ob die notwendige a.sign Client Software in der richtigen Versioninstalliert ist.

long CheckSoftware ( ) ;

Rückgabewert:

0: OK

2: Registry Einträge des a.sign Client fehlen. Fehlerhafte Installation?

3: a.sign Client Version nicht ausreichend, bitte aktualisieren

4: a.sign Client kann nicht geladen werden. Fehlerhafte Installation?

5: Allgemeiner Fehler

4.2.2 Initialize

Laden der PKCS#11 Datei und Initialisierung der internen Datenstrukturen im COMObjekt. Dieser Befehl muss nur einmal beim Start des Programmes ausgeführt werden.

void∗ I n i t i a l i z e ( ) ;

Rückgabewert: Handle der Registrierkassen Klasse, dieses Handle wird für die nach-folgenden Befehle benötigt.

4.2.3 Karte prüfen

Dieser Befehl prüft ob eine Karte im Kartenleser ist.

a.sign RK COM/DLL Version: 2.2 Seite 32 von 61

Ges. für Sicherheitssystemeim elektr. Datenverkehr GmbH 4.2 Schnittstelle Registrierkassen Karte - Methoden und Eigenschaften

long CheckCard (void∗ handle ) ;

Paramter:

handle: Handle welches von Initialize zurückgeliefert wurde (siehe 4.2.2)

Rückgabewert:

0: OK

1: Keine aktivierte Karte gefunden

2: Keine Karte gefunden.

4.2.4 LoadInfo

Laden der Zerti�katsdaten von der Karte. Die geladenen Daten werden über die Eigen-schaften ZdaId, CertificateSerial, Certificate und IssuerCertificate ausgelesen.Dieser Befehl muss nur einmal (z.B.: Programmstart) ausgeführt werden, die Daten derKarte werden im Speicher gehalten.

long LoadInfo (void∗ handle ) ;

Paramter:

handle: Handle welches von Initialize zurückgeliefert wurde (siehe 4.2.2)

Rückgabewert:

0: OK

1: a.sign Client nicht initialisiert

2: Fehler in a.sign Client

4.2.5 ZdaId

String Wert welcher die ZDA-ID enthält.Kann erst nach einem Aufruf 4.2.4 verwendet werden.

long ZdaId (void∗ handle , char∗ bu f f e r , long ∗ b u f f e r s i z e ) ;

Paramter:

handle: Handle welches von Initialize zurückgeliefert wurde (siehe 4.2.2)

bu�er: Bereits reservierter Speicher für die ZdaId, wenn dieser Parameter NULL istwird nur die Gröÿe des benötigten Speichers zurückgegeben

bu�ersize: Speichergröÿe von bu�er bzw. benötigte Speichergröÿe

a.sign RK COM/DLL Version: 2.2 Seite 33 von 61

Ges. für Sicherheitssystemeim elektr. Datenverkehr GmbH 4.2 Schnittstelle Registrierkassen Karte - Methoden und Eigenschaften

Rückgabewert:

0: OK

100: Bu�er ist NULL

101: Bu�er zu klein

4.2.6 Certi�cateSerial

String Wert welcher die Zerti�katsseriennummer enthält.Kann erst nach einem Aufruf 4.2.4 verwendet werden.

long C e r t i f i c a t e S e r i a l (void∗ handle , char∗ bu f f e r , long ∗ b u f f e r s i z e ) ;

Paramter:

handle: Handle welches von Initialize zurückgeliefert wurde (siehe 4.2.2)

bu�er: Bereits reservierter Speicher für die Zerti�katsseriennummer, wenn dieserParameter NULL ist wird nur die Gröÿe des benötigten Speichers zurückgegeben

bu�ersize: Speichergröÿe von bu�er bzw. benötigte Speichergröÿe

Rückgabewert:

0: OK

100: Bu�er ist NULL

101: Bu�er zu klein

4.2.7 Certi�cateSerialHex

String Wert welcher die Zerti�katsseriennummer im HEX-Format enthält.Kann erst nach einem Aufruf 4.2.4 verwendet werden.

long Ce r t i f i c a t e S e r i a lH e x (void∗ handle , char∗ bu f f e r , long ∗ b u f f e r s i z e ) ;

Paramter:

handle: Handle welches von Initialize zurückgeliefert wurde (siehe 4.2.2)

bu�er: Bereits reservierter Speicher für die Zerti�katsseriennummer, wenn dieserParameter NULL ist wird nur die Gröÿe des benötigten Speichers zurückgegeben

bu�ersize: Speichergröÿe von bu�er bzw. benötigte Speichergröÿe

Rückgabewert:

0: OK

a.sign RK COM/DLL Version: 2.2 Seite 34 von 61

Ges. für Sicherheitssystemeim elektr. Datenverkehr GmbH 4.2 Schnittstelle Registrierkassen Karte - Methoden und Eigenschaften

100: Bu�er ist NULL

101: Bu�er zu klein

4.2.8 Certi�cate

String Wert welcher das Base64 kodierte Zerti�kat enthält.Kann erst nach einem Aufruf 2.4.4 verwendet werden.

long Ce r t i f i c a t e (void∗ handle , char∗ bu f f e r , long ∗ b u f f e r s i z e ) ;

Paramter:

handle: Handle welches von Initialize zurückgeliefert wurde (siehe 4.2.2)

bu�er: Bereits reservierter Speicher für die Zerti�kat, wenn dieser Parameter NULList wird nur die Gröÿe des benötigten Speichers zurückgegeben

bu�ersize: Speichergröÿe von bu�er bzw. benötigte Speichergröÿe

Rückgabewert:

0: OK

100: Bu�er ist NULL

101: Bu�er zu klein

4.2.9 IssuerCerti�cate

String Wert welcher das Base64 kodierte Ausstellerzerti�kat enthält.Kann erst nach einem Aufruf 2.4.4 verwendet werden.

long I s s u e rC e r t i f i c a t e (void∗ handle , char∗ bu f f e r , long ∗ b u f f e r s i z e ) ;

Paramter:

handle: Handle welches von Initialize zurückgeliefert wurde (siehe 4.2.2)

bu�er: Bereits reservierter Speicher für die Ausstellerzerti�kat, wenn dieser Para-meter NULL ist wird nur die Gröÿe des benötigten Speichers zurückgegeben

bu�ersize: Speichergröÿe von bu�er bzw. benötigte Speichergröÿe

Rückgabewert:

0: OK

100: Bu�er ist NULL

101: Bu�er zu klein

a.sign RK COM/DLL Version: 2.2 Seite 35 von 61

Ges. für Sicherheitssystemeim elektr. Datenverkehr GmbH 4.2 Schnittstelle Registrierkassen Karte - Methoden und Eigenschaften

4.2.10 Sign

Durchführen einer Signatur auf der Karte. Der zurückgegebenen Wert Signature ist be-reits Base64-URL kodiert.

long Sign (void∗ ptr , char∗ toBeSigned , long toBeSignedLen , char∗Signature , long ∗SignatureLen ) ;

Paramter:

handle: Handle welches von Initialize zurückgeliefert wurde (siehe 4.2.2)

toBeSigned: Zu signierendes JSON (header + Payload)

toBeSignedLen: Länge der Eingabedaten

Signature: Bereits reservierter Speicher für die Signatur, wenn dieser ParameterNULL ist wird nur die Gröÿe des benötigten Speichers zurückgegeben

SignatureLen: Speichergröÿe von Signature bzw. benötigte Speichergröÿe

Rückgabewert:

0: OK

1: a.sign Client nicht initialisiert

2: Fehler beim Signieren

100: Handle ist NULL

101: SignatureLen zu klein

4.2.11 SignJWS

Durchführen einer Signatur auf der Karte. Die Funktion bereitet die eingegebenen Da-ten nach dem JWS Standard auf, d.h. es wird der entsprechende JWS-Header mit demAlgorithmus erzeugt und sowohl Daten als auch Header Base64-URL kodiert. Der zurück-gegebene Wert entspricht der JWS Signatur bestehend aus Protected Header, Payloadund Signatur jeweils Base64-URL kodiert und durch Punkt getrennt.

long SignJWS(void∗ ptr , char∗ toBeSigned , long toBeSignedLen , char∗Signature , long ∗SignatureLen ) ;

Paramter:

handle: Handle welches von Initialize zurückgeliefert wurde (siehe 4.2.2)

toBeSigned: Zu signierende Belegzeile

toBeSignedLen: Länge der Eingabedaten

a.sign RK COM/DLL Version: 2.2 Seite 36 von 61

Ges. für Sicherheitssystemeim elektr. Datenverkehr GmbH 4.2 Schnittstelle Registrierkassen Karte - Methoden und Eigenschaften

Signature: Bereits reservierter Speicher für die Signatur, wenn dieser ParameterNULL ist wird nur die Gröÿe des benötigten Speichers zurückgegeben

SignatureLen: Speichergröÿe von Signature bzw. benötigte Speichergröÿe

Rückgabewert:

0: OK

1: a.sign Client nicht initialisiert

2: Fehler beim Signieren

100: Handle ist NULL

101: SignatureLen zu klein

4.2.12 Verify

Durchführen einer Veri�kation einer DEP Zeile.

long Ver i fy (void∗ ptr , char∗ toBeSigned , long toBeSignedLen , char∗Signature , long SignatureLen ) ;

Paramter:

handle: Handle welches von Initialize zurückgeliefert wurde (siehe 4.2.2)

toBeSigned: Belegzeile welche signiert wurde

toBeSignedLen: Länge der Eingabedaten

Signature: Signatur der Belegzeile

SignatureLen: Länge der Signatur

Rückgabewert:

0: OK

1: a.sign Client nicht initialisiert

-34: Belegzeile startet nicht mit �_R1-AT1�

-35: Zerti�kat konnte nicht geladen werden

-36: Fehler bei Hash Berechnung

-37: Signatur ungültig

-38: Fehler beim Parsen des ö�entlichen Schlüssel

-39: Fehler beim Parsen des Zerti�kates

-40: Fehler beim Parsen des Signaturewerte

a.sign RK COM/DLL Version: 2.2 Seite 37 von 61

Ges. für Sicherheitssystemeim elektr. Datenverkehr GmbH 4.2 Schnittstelle Registrierkassen Karte - Methoden und Eigenschaften

-41: Fehler Signaturüberprüfung

100: Handle ist NULL

101: SignatureLen zu klein

4.2.13 VerifyJWS

Durchführen einer Veri�kation einer DEP Zeile.

long VerifyJWS (void∗ ptr , char∗ JWSSignature , long JWSSignatureLen ) ;

Paramter:

handle: Handle welches von Initialize zurückgeliefert wurde (siehe 4.2.2)

toBeSigned: DEP Zeile (JWS)

toBeSignedLen: Länge der DEP Zeile

Rückgabewert:

0: OK

1: a.sign Client nicht initialisiert

-33: JWS Header ungültig

-34: Belegzeile startet nicht mit �_R1-AT1�

-35: Zerti�kat konnte nicht geladen werden

-36: Fehler bei Hash Berechnung

-37: Signatur ungültig

-38: Fehler beim Parsen des ö�entlichen Schlüssel

-39: Fehler beim Parsen des Zerti�kates

-40: Fehler beim Parsen des Signaturewerte

-41: Fehler Signaturüberprüfung

100: Handle ist NULL

101: SignatureLen zu klein

4.2.14 Finalize

Freigeben der internen Datenstrukturen im COM Objekt und entladen der PKCS#11Datei. Dieser Befehl muss nur einmal beim Beenden des Programmes ausgeführt werden.

a.sign RK COM/DLL Version: 2.2 Seite 38 von 61

Ges. für Sicherheitssystemeim elektr. Datenverkehr GmbH 4.3 Schnittstelle AES ICM - Methoden und Eigenschaften

long F in a l i z e (void∗ ptr ) ;

Paramter:

handle: Handle welches von Initialize zurückgeliefert wurde (siehe 4.2.2)

Rückgabewert: Long

0 OK

1 Fehler

4.3 Schnittstelle AES ICM - Methoden und Eigenschaften

4.3.1 GenerateKey

Generieren eines AES Schlüssel. Dieser Befehl muss nur einmal pro Kasse durchgeführtwerden und das Ergebnis durch den Aufrufenden gespeichert werden.

long GenerateKey (char∗ newkey , long ∗newkeyLen ) ;

Paramter:

newkey: Bereits reservierter Speicher für den AES Schlüssel, wenn dieser ParameterNULL ist wird nur die Gröÿe des benötigten Speichers zurückgegeben

newkeyLen: Länge des AES Schlüssel bzw. benötigte Speichergröÿe

Rückgabewert:

0: OK

1: Fehler

102: newkeyLen zu klein

4.3.2 Encrypt

Verschlüsselung des Umsatzzählers

long Encrypt (char∗ aeskey , char∗ Umsatz , char∗ KassenId , char∗Belegnummer , char∗ Encrypted , long∗ EncryptedLen ) ;

Paramter:

aeskey: AES Schlüssel

Umsatz: Umsatz

a.sign RK COM/DLL Version: 2.2 Seite 39 von 61

Ges. für Sicherheitssystemeim elektr. Datenverkehr GmbH 4.3 Schnittstelle AES ICM - Methoden und Eigenschaften

KassenId: KassenId des Belegs

Belegnummer: Belegnummer des Belegs

Encrypted: Bereits reservierter Speicher für den verschlüsselten Wert, wenn dieserParameter NULL ist wird nur die Gröÿe des benötigten Speichers zurückgegeben

EncryptedLen: Länge des verschlüsselten Wertes bzw. benötigte Speichergröÿe

Rückgabewert:

0: OK

1: Fehler

101: Fehlende Eingabewerte

102: EncryptedLen zu klein

4.3.3 Decrypt

Entschlüsselung des Umsatzzählers. Diese Funktion wird im Regelfall nicht benötigt.

long Decrypt (char∗ aeskey , char∗ encryptedData , char∗ KassenId , char∗Belegnummer , char∗ Umsatz , long∗ UmsatzLen ) ;

Paramter:

aeskey: AES Schlüssel

encryptedData: Verschlüsselte Daten

KassenId: KassenId des Belegs

Belegnummer: Belegnummer des Belegs

Umsatz: Bereits reservierter Speicher für den entschlüsselten Umsatz, wenn dieserParameter NULL ist wird nur die Gröÿe des benötigten Speichers zurückgegeben

UmsatzLen: Länge des verschlüsselten Wertes bzw. benötigte Speichergröÿe

Rückgabewert:

0: OK

1: Fehler

101: Fehlende Eingabewerte

102: UmsatzLen zu klein

a.sign RK COM/DLL Version: 2.2 Seite 40 von 61

Ges. für Sicherheitssystemeim elektr. Datenverkehr GmbH 4.4 Schnittstelle Base64 - Methoden und Eigenschaften

4.3.4 AesKeyCheckSum

Generieren der Prüfsumme über den AES-Schlüssel. Diese Funktion generiert die optio-nale Prüfsumme für die Anmeldung des AES-Schlüssels in Finanzonline.

long AesKeyCheckSum(char∗ aeskey , char∗ checksum , long∗ checksumLen ) ;

Paramter:

aeskey: AES Schlüssel

checksum: Bereits reservierter Speicher für die AES Checksumme, wenn dieser Pa-rameter NULL ist wird nur die Gröÿe des benötigten Speichers zurückgegeben

checksumLen: Länge der AES Checksumme bzw. benötigte Speichergröÿe

Rückgabewert:

0: OK

1: Fehler

101: Fehlende Eingabewerte

102: checksumLen zu klein

4.4 Schnittstelle Base64 - Methoden und Eigenschaften

4.4.1 Encode

Base64 Encoding eines String

long Base64Encode (char∗ input , long inputLen , char∗ ouput , long∗ ouputLen ) ;

Paramter:

input: Zu encodierende Daten

inputLen: Länge der zu encodierenden Daten

ouput: Bereits reservierter Speicher für die Ausgabedaten, wenn dieser ParameterNULL ist wird nur die Gröÿe des benötigten Speichers zurückgegeben

ouputLen: Länge der Ausgabedaten bzw. benötigte Speichergröÿe

Rückgabewert:

0: OK

1: Fehler

a.sign RK COM/DLL Version: 2.2 Seite 41 von 61

Ges. für Sicherheitssystemeim elektr. Datenverkehr GmbH 4.4 Schnittstelle Base64 - Methoden und Eigenschaften

101: Fehlende Eingabewerte

102: ouputLen zu klein

4.4.2 EncodeUrl

Base64-URL Encoding eines String

long Base64UrlEncode (char∗ input , long inputLen , long padding , char∗ouput , long∗ ouputLen ) ;

Paramter:

input: Zu encodierende Daten

inputLen: Länge der zu encodierenden Daten

padding: Padding, 0=Nein, 1=Ja

ouput: Bereits reservierter Speicher für die Ausgabedaten, wenn dieser ParameterNULL ist wird nur die Gröÿe des benötigten Speichers zurückgegeben

ouputLen: Länge der Ausgabedaten bzw. benötigte Speichergröÿe

Rückgabewert:

0: OK

1: Fehler

101: Fehlende Eingabewerte

102: ouputLen zu klein

4.4.3 ReencodeUrlToNormal

Decodiert einen Base64-URL kodierten String und kodiert diesen neu als Base64 (Nor-mal)

long Base64ReencodeUrlToNormal (char∗ input , long inputLen , char∗ ouput ,long∗ ouputLen ) ;

Paramter:

input: Zu encodierende Daten

inputLen: Länge der zu encodierenden Daten

ouput: Bereits reservierter Speicher für die Ausgabedaten, wenn dieser ParameterNULL ist wird nur die Gröÿe des benötigten Speichers zurückgegeben

a.sign RK COM/DLL Version: 2.2 Seite 42 von 61

Ges. für Sicherheitssystemeim elektr. Datenverkehr GmbH 4.4 Schnittstelle Base64 - Methoden und Eigenschaften

ouputLen: Länge der Ausgabedaten bzw. benötigte Speichergröÿe

Rückgabewert:

0: OK

1: Fehler

101: Fehlende Eingabewerte

102: ouputLen zu klein

4.4.4 ReencodeNormalToUrl

Decodiert einen Base64 (Normal) kodierten String und kodiert diesen neu als Base64-URL

Base64ReencodeNormalToUrl (char∗ input , long inputLen , long padding , char∗ouput , long∗ ouputLen ) ;

Paramter:

input: Zu encodierende Daten

inputLen: Länge der zu encodierenden Daten

padding: Padding, 0=Nein, 1=Ja

ouput: Bereits reservierter Speicher für die Ausgabedaten, wenn dieser ParameterNULL ist wird nur die Gröÿe des benötigten Speichers zurückgegeben

ouputLen: Länge der Ausgabedaten bzw. benötigte Speichergröÿe

Rückgabewert:

0: OK

1: Fehler

101: Fehlende Eingabewerte

102: ouputLen zu klein

4.4.5 Decode

Base64 decoding eines String

long Base64Decode (char∗ input , long inputLen , char∗ ouput , long∗ ouputLen ) ;

Paramter:

a.sign RK COM/DLL Version: 2.2 Seite 43 von 61

Ges. für Sicherheitssystemeim elektr. Datenverkehr GmbH 4.4 Schnittstelle Base64 - Methoden und Eigenschaften

input: Zu encodierende Daten

inputLen: Länge der zu encodierenden Daten

ouput: Bereits reservierter Speicher für die Ausgabedaten, wenn dieser ParameterNULL ist wird nur die Gröÿe des benötigten Speichers zurückgegeben

ouputLen: Länge der Ausgabedaten bzw. benötigte Speichergröÿe

Rückgabewert:

0: OK

1: Fehler

101: Fehlende Eingabewerte

102: ouputLen zu klein

4.4.6 DecodeUrl

Base64-URL Decoding eines String

long Base64UrlDecode (char∗ input , long inputLen , char∗ ouput , long∗ouputLen ) ;

Paramter:

input: Zu encodierende Daten

inputLen: Länge der zu encodierenden Daten

ouput: Bereits reservierter Speicher für die Ausgabedaten, wenn dieser ParameterNULL ist wird nur die Gröÿe des benötigten Speichers zurückgegeben

ouputLen: Länge der Ausgabedaten bzw. benötigte Speichergröÿe

Rückgabewert:

0: OK

1: Fehler

101: Fehlende Eingabewerte

102: ouputLen zu klein

4.4.7 ReencodeBase64ToBase32

Decodiert einen Base64 kodierten String und kodiert diesen neu als Base32

a.sign RK COM/DLL Version: 2.2 Seite 44 von 61

Ges. für Sicherheitssystemeim elektr. Datenverkehr GmbH 4.4 Schnittstelle Base64 - Methoden und Eigenschaften

long ReencodeBase64ToBase32 (char∗ input , long inputLen , char∗ ouput , long∗ouputLen ) ;

Paramter:

input: Zu encodierende Daten

inputLen: Länge der zu encodierenden Daten

ouput: Bereits reservierter Speicher für die Ausgabedaten, wenn dieser ParameterNULL ist wird nur die Gröÿe des benötigten Speichers zurückgegeben

ouputLen: Länge der Ausgabedaten bzw. benötigte Speichergröÿe

Rückgabewert:

0: OK

1: Fehler

101: Fehlende Eingabewerte

102: ouputLen zu klein

4.4.8 ReencodeBase64UrlToBase32

Decodiert einen Base64-URL kodierten String und kodiert diesen neu als Base32

long ReencodeBase64UrlToBase32 (char∗ input , long inputLen , char∗ ouput ,long∗ ouputLen ) ;

Paramter:

input: Zu encodierende Daten

inputLen: Länge der zu encodierenden Daten

ouput: Bereits reservierter Speicher für die Ausgabedaten, wenn dieser ParameterNULL ist wird nur die Gröÿe des benötigten Speichers zurückgegeben

ouputLen: Länge der Ausgabedaten bzw. benötigte Speichergröÿe

Rückgabewert:

0: OK

1: Fehler

101: Fehlende Eingabewerte

102: ouputLen zu klein

a.sign RK COM/DLL Version: 2.2 Seite 45 von 61

Ges. für Sicherheitssystemeim elektr. Datenverkehr GmbH 4.5 Schnittstelle Sha256 - Methoden und Eigenschaften

4.5 Schnittstelle Sha256 - Methoden und Eigenschaften

4.5.1 HashString

Sha256 eines String

long HashString (char∗ indata , long indataLen , char∗ outdata , long∗outdataLen ) ;

Paramter:

input: Zu hashende Daten

inputLen: Länge der zu hashenden Daten

ouput: Bereits reservierter Speicher für die Ausgabedaten, wenn dieser ParameterNULL ist wird nur die Gröÿe des benötigten Speichers zurückgegeben

ouputLen: Länge der Ausgabedaten bzw. benötigte Speichergröÿe

Rückgabewert:

0: OK

1: Fehler

101: Fehlende Eingabewerte

102: ouputLen zu klein

4.5.2 HashBytes

Sha256 eines Byte Array

long HashBytes (char∗ indata , long indataLen , char∗ outdata , long∗outdataLen ) ;

Paramter:

input: Zu hashende Daten

inputLen: Länge der zu hashenden Daten

ouput: Bereits reservierter Speicher für die Ausgabedaten, wenn dieser ParameterNULL ist wird nur die Gröÿe des benötigten Speichers zurückgegeben

ouputLen: Länge der Ausgabedaten bzw. benötigte Speichergröÿe

Rückgabewert:

0: OK

a.sign RK COM/DLL Version: 2.2 Seite 46 von 61

Ges. für Sicherheitssystemeim elektr. Datenverkehr GmbH 4.6 Schnittstelle QR-Code - Methoden und Eigenschaften

1: Fehler

101: Fehlende Eingabewerte

102: ouputLen zu klein

4.5.3 HashSigVorigerBeleg

Sha256 des vorigen Belegs wie in [Bun15, Z4, Sig-Voriger-Beleg] verlangt

long HashSigVorigerBeleg (char∗ SigVor igerBe leg , long SigVorigerBelegLen ,long BytesExtrahiert , char∗ outdata , long∗ outdataLen ) ;

Paramter:

SigVorigerBeleg: Zu hashende Daten

SigVorigerBelegLen: Länge der zu hashenden Daten

BytesExtrahiert: Länge der zu extrahierenden Bytes (derzeit 8)

ouput: Bereits reservierter Speicher für die Ausgabedaten, wenn dieser ParameterNULL ist wird nur die Gröÿe des benötigten Speichers zurückgegeben

ouputLen: Länge der Ausgabedaten bzw. benötigte Speichergröÿe

Rückgabewert:

0: OK

1: Fehler

101: Fehlende Eingabewerte

102: ouputLen zu klein

4.6 Schnittstelle QR-Code - Methoden und Eigenschaften

4.6.1 Encode

Erzeugt aus der übergebenen Belegzeile einen QR-Code uns speichert diesen in der Aus-gabedatei im BMP Format.

long QrCode_Encode (char∗ data , long datalen , char∗ f i l ename , long

s c a l e f a c t o r , long margin , long bitDepth , char e r r o rCo r r e c t i on ) ;

Paramter:

data: Daten für QR-Code

a.sign RK COM/DLL Version: 2.2 Seite 47 von 61

Ges. für Sicherheitssystemeim elektr. Datenverkehr GmbH 4.6 Schnittstelle QR-Code - Methoden und Eigenschaften

datalen: Länge der Daten für QR-Code

�lename: Ausgabedatei (bmp)

scalefactor: Skalierungsfaktor für QR-Code. (scalefactor = 1 entspricht 77x77 Pi-xel)

margin: Rand für QR-Code, entsprechend dem übergebenen Wert werden weiÿePixel an allen Seiten eingefügt.

bitDepth: Farbtiefe für den QR-Code in bit, mögliche Werte sind 1,4,8,16,24,32.

errorCorrection: Fehlerkorrekturlevel für den QR-Code, möglicheWerte sind L,M,Q,H.

Rückgabewert:

0: OK

1: Fehler

101: Fehlende Eingabewerte

4.6.2 EncodeFromJWS

Erzeugt aus der übergebenen JWS-Zeile einen QR-Code uns speichert diesen in der Aus-gabedatei im BMP Format.

long QrCode_EncodeJWS(char∗ jwsdata , long jwsdata len , char∗ f i l ename , long

s c a l e f a c t o r , long margin , long bitDepth , char e r r o rCo r r e c t i on ) ;

Paramter:

jwsdata: JWS-Zeile für QR-Code

jwsdatalen: Länge der JWS-Zeile für QR-Code

�lename: Ausgabedatei (bmp)

scalefactor: Skalierungsfaktor für QR-Code. (scalefactor = 1 entspricht 77x77 Pi-xel)

margin: Rand für QR-Code, entsprechend dem übergebenen Wert werden weiÿePixel an allen Seiten eingefügt.

bitDepth: Farbtiefe für den QR-Code in bit, mögliche Werte sind 1,4,8,16,24,32.

errorCorrection: Fehlerkorrekturlevel für den QR-Code, möglicheWerte sind L,M,Q,H.(siehe 6.1)

Rückgabewert:

0: OK

1: Fehler

a.sign RK COM/DLL Version: 2.2 Seite 48 von 61

Ges. für Sicherheitssystemeim elektr. Datenverkehr GmbH 4.7 Schnittstelle OCR-Code - Methoden und Eigenschaften

101: Fehlende Eingabewerte

4.7 Schnittstelle OCR-Code - Methoden und Eigenschaften

Für den OCR-Code ist in der RKSV [Bun15, Detailspezi�kation Kapitel 14] beschreiben,dass die Base64 Werte im Base32 Format kodiert werden müssen.

4.7.1 Encode

Erzeugt aus der übergebenen Belegzeile eine OCR-Code Zeile.

long OcrCode_Encode (char∗ data , long dataLen , char∗ outdata , long∗oudataLen ) ;

Paramter:

data: Daten für OCR-Code

datalen: Länge der Daten für OCR-Code

ouput: Bereits reservierter Speicher für die Ausgabedaten, wenn dieser ParameterNULL ist wird nur die Gröÿe des benötigten Speichers zurückgegeben

ouputLen: Länge der Ausgabedaten bzw. benötigte Speichergröÿe

Rückgabewert:

0: OK

1: Fehler

101: Fehlende Eingabewerte

4.7.2 EncodeFromJWS

Erzeugt aus der übergebenen JWS-Zeile eine OCR-Code Zeile.

long OcrCode_EncodeJWS(char∗ jwsdata , long jwsdataLen , char∗ outdata ,long∗ oudataLen ) ;

Paramter:

jwsdata: JWS-Zeile für OCR-Code

jwsdataLen: Länge der JWS-Zeile für OCR-Code

ouput: Bereits reservierter Speicher für die Ausgabedaten, wenn dieser ParameterNULL ist wird nur die Gröÿe des benötigten Speichers zurückgegeben

a.sign RK COM/DLL Version: 2.2 Seite 49 von 61

Ges. für Sicherheitssystemeim elektr. Datenverkehr GmbH 4.7 Schnittstelle OCR-Code - Methoden und Eigenschaften

ouputLen: Länge der Ausgabedaten bzw. benötigte Speichergröÿe

Rückgabewert:

0: OK

1: Fehler

101: Fehlende Eingabewerte

a.sign RK COM/DLL Version: 2.2 Seite 50 von 61

Ges. für Sicherheitssystemeim elektr. Datenverkehr GmbH 5 Beispiel Verwendung in C/C++

5 Beispiel Verwendung in C/C++

5.1 Schnittstelle Registrierkassen Funktionen (Kartenzugri�)

1 long r e s = 0 ;23 r e s = CheckSoftware ( ) ;4 p r i n t f ("CheckSoftware: %d\n" , r e s ) ;56 void∗ handle = I n i t i a l i z e ( ) ;78 r e s = CheckCard ( handle ) ;9 p r i n t f ("CheckCard %d\n" , r e s ) ;1011 r e s = LoadInfo ( handle ) ;12 p r i n t f ("LoadInfo %d\n" , r e s ) ;1314 char∗ bu f f e r = NULL;15 long b u f f e r s i z e = 0 ;16 r e s = C e r t i f i c a t e ( handle , NULL, &bu f f e r s i z e ) ;17 bu f f e r = new char [ b u f f e r s i z e + 1 ] ;18 r e s = C e r t i f i c a t e ( handle , bu f f e r , &b u f f e r s i z e ) ;19 bu f f e r [ b u f f e r s i z e ] = 0x00 ;20 p r i n t f ("Certificate %d: %s\n" , res , bu f f e r ) ;21 d e l e t e [ ] b u f f e r ;22 bu f f e r = NULL;232425 char input [ ] = "_R1-AT1_1_1_2016 -02-24T10:42:13_0,00_0,0...=" ;26 char∗ s i gna tu r e = NULL;27 long s i g n a t u r e s i z e = 0 ;28 r e s = SignJWS( ptr , input , s t r l e n ( input ) , NULL, &s i g n a t u r e s i z e ) ;29 s i gna tu r e = new char [ s i g n a t u r e s i z e + 1 ] ;30 r e s = SignJWS( ptr , input , s t r l e n ( input ) , s i gnature , &s i g n a t u r e s i z e ) ;31 s i gna tu r e [ s i g n a t u r e s i z e ] = 0x00 ;32 p r i n t f ("SignJWS %d: %s\n" , res , s i gna tu r e ) ;33 d e l e t e [ ] s i gna tu r e ;34 s i gna tu r e = NULL;

Zeile 3-4 Überprüfen ob die richtige Version des a.sign Client installiert ist.

Zeile 6 Initialisierung der Datenstrukturen und in der PKCS#11 Schnittstelle, Rückga-be des Handle für die Karten-Klasse.

Zeile 8-9 Überprüfen ob eine Karte vorhanden ist.

Zeile 11-12 Laden der Informationen von der Karte

Zeile 14 - 22 Auslesen des Zerti�kates, in Zeile 16 wird zuerst die Gröÿe des benötigtenSpeichers gelesen und in Zeile 18 der reservierte Speicher übergeben.

a.sign RK COM/DLL Version: 2.2 Seite 51 von 61

Ges. für Sicherheitssystemeim elektr. Datenverkehr GmbH 5.1 Schnittstelle Registrierkassen Funktionen (Kartenzugri�)

Zeile 25-34 Durchführen einer Signatur nach JWS Standard, in Zeile 28 wird zuerstdie Gröÿe des benötigten Speichers gelesen und in Zeile 30 der reservierte Speicherübergeben.

a.sign RK COM/DLL Version: 2.2 Seite 52 von 61

Ges. für Sicherheitssystemeim elektr. Datenverkehr GmbH 5.2 Schnittstelle AES-ICM (Umsatzzähler verschlüsseln)

5.2 Schnittstelle AES-ICM (Umsatzzähler verschlüsseln)

1 long r e s = 0 ;2 std : : s t r i n g key ;3 {4 char∗ bu f f e r = NULL;5 long b u f f e r s i z e = 0 ;6 r e s = GenerateKey (NULL, &bu f f e r s i z e ) ;7 bu f f e r = new char [ b u f f e r s i z e + 1 ] ;8 r e s = GenerateKey ( bu f f e r , &b u f f e r s i z e ) ;9 bu f f e r [ b u f f e r s i z e ] = 0x00 ;10 p r i n t f ("GenerateKey %d: %s\n" , res , bu f f e r ) ;11 key = bu f f e r ;12 d e l e t e [ ] bu f f e r ;13 bu f f e r = NULL;14 }151617 char Umsatz [ ] = "1267517823" ;18 char KassenId [ ] = "Kasse-1" ;19 char Belegnummer [ ] = "Bel-1928" ;20 {21 char∗ bu f f e r = NULL;22 long b u f f e r s i z e = 0 ;23 r e s = Encrypt ( ( char∗) key . c_str ( ) , Umsatz , KassenId , Belegnummer , NULL,

&bu f f e r s i z e ) ;24 bu f f e r = new char [ b u f f e r s i z e + 1 ] ;25 r e s = Encrypt ( ( char∗) key . c_str ( ) , Umsatz , KassenId , Belegnummer , bu f f e r ,

&b u f f e r s i z e ) ;26 bu f f e r [ b u f f e r s i z e ] = 0x00 ;27 p r i n t f ("Encrypt %d: %s\n" , res , bu f f e r ) ;28 d e l e t e [ ] bu f f e r ;29 bu f f e r = NULL;30 }

Zeile 4-13 Erstmaliges Erstellen eines AES Schlüssels

Zeile 17-19 Initialisieren der Variablen für die Verschlüsselung des Umsatzzählers

Zeile 21-29 Verschlüsselung des Umsatzzählers

a.sign RK COM/DLL Version: 2.2 Seite 53 von 61

Ges. für Sicherheitssystemeim elektr. Datenverkehr GmbH 5.3 Schnittstelle Base64

5.3 Schnittstelle Base64

1 long r e s = 0 ;2 std : : s t r i n g input = "test hallo test 1" ;3 char∗ bu f f e r = NULL;4 long b u f f e r s i z e = 0 ;5 r e s = Base64Encode ( ( char∗) input . c_str ( ) , input . l ength ( ) , NULL,

&bu f f e r s i z e ) ;6 bu f f e r = new char [ b u f f e r s i z e + 1 ] ;7 r e s = Base64Encode ( ( char∗) input . c_str ( ) , input . l ength ( ) , bu f f e r ,

&b u f f e r s i z e ) ;8 bu f f e r [ b u f f e r s i z e ] = 0x00 ;9 p r i n t f ("Base64Encode %d: %s\n" , res , bu f f e r ) ;10 d e l e t e [ ] b u f f e r ;11 bu f f e r = NULL;

Zeile 1-4 Initialisieren der Variablen für die Base64 Kodierung

Zeile 5-11 Base64 kodieren eines Strings

a.sign RK COM/DLL Version: 2.2 Seite 54 von 61

Ges. für Sicherheitssystemeim elektr. Datenverkehr GmbH 5.4 Schnittstelle Sha256

5.4 Schnittstelle Sha256

1 long r e s = 0 ;2 std : : s t r i n g input = "test hallo test 1" ;3 char∗ bu f f e r = NULL;4 long b u f f e r s i z e = 0 ;5 r e s = HashSigVorigerBeleg ( ( char∗) input . c_str ( ) , input . l ength ( ) , 8 , NULL,

&bu f f e r s i z e ) ;6 bu f f e r = new char [ b u f f e r s i z e + 1 ] ;7 r e s = HashSigVorigerBeleg ( ( char∗) input . c_str ( ) , input . l ength ( ) , 8 , bu f f e r ,

&b u f f e r s i z e ) ;8 bu f f e r [ b u f f e r s i z e ] = 0x00 ;9 p r i n t f ("HashSigVorigerBeleg %d: %s\n" , res , bu f f e r ) ;10 d e l e t e [ ] b u f f e r ;11 bu f f e r = NULL;

Zeile 1-4 Initialisieren der Variablen für die Sha256 Funktion

Zeile 5-11 Sha256 der Signatur des vorigen Belegs

a.sign RK COM/DLL Version: 2.2 Seite 55 von 61

Ges. für Sicherheitssystemeim elektr. Datenverkehr GmbH 5.5 Schnittstelle QR-Code

5.5 Schnittstelle QR-Code

1 long r e s = 0 ;2 std : : s t r i n g input = "_R1-AT1_demokasse42_0_2016 -06-13T14:22:2...mDKw==" ;3 r e s = QrCode_Encode ( ( char∗) input . c_str ( ) , input . l ength ( ) , "qr1.bmp" ,

1 , 3 ,24 , 'H' ) ;4 p r i n t f ("QrCode_Encode %d\n" , r e s ) ;

Zeile 1-2 Initialisieren der Variablen für die QR-Code Funktion

Zeile 3 QR-Code erstellen aus Belegzeile

Abbildung 4: QR-Code Ausgabe

a.sign RK COM/DLL Version: 2.2 Seite 56 von 61

Ges. für Sicherheitssystemeim elektr. Datenverkehr GmbH 5.6 Schnittstelle QCR-Code

5.6 Schnittstelle QCR-Code

1 long r e s = 0 ;2 std : : s t r i n g input = "_R1-AT1_demokasse42_0_2016 -06-13T14:22:2...mDKw==" ;3 char∗ bu f f e r = NULL;4 long b u f f e r s i z e = 0 ;5 r e s = OcrCode_Encode ( ( char∗) input . c_str ( ) , input . l ength ( ) , NULL,

&bu f f e r s i z e ) ;6 bu f f e r = new char [ b u f f e r s i z e + 1 ] ;7 r e s = OcrCode_Encode ( ( char∗) input . c_str ( ) , input . l ength ( ) , bu f f e r ,

&b u f f e r s i z e ) ;8 bu f f e r [ b u f f e r s i z e ] = 0x00 ;9 p r i n t f ("OcrCode_Encode %d: %s\n" , res , bu f f e r ) ;10 d e l e t e [ ] b u f f e r ;11 bu f f e r = NULL;

Zeile 1-4 Initialisieren der Variablen für die OCR-Code Funktion

Zeile 5-11 OCR-Code erstellen aus Belegzeile

a.sign RK COM/DLL Version: 2.2 Seite 57 von 61

TEIL III

ALLGEMEIN

Ges. für Sicherheitssystemeim elektr. Datenverkehr GmbH 6 Allgemeine Punkte zur Verwendung

6 Allgemeine Punkte zur Verwendung

6.1 Fehlerkorrekturlevel bei QR-Code

Level L (Low): ca. 7% der Daten können wiederhergestellt werden

Level M (Medium): ca. 15% der Daten können wiederhergestellt werden

Level Q (Quartile): ca. 25% der Daten können wiederhergestellt werden

Level H (High): ca. 30% der Daten können wiederhergestellt werden

6.2 Logging

Zur Fehleranalyse kann das Logging des COM-Objektes bzw. der DLL aktiviert werden,dazu müssen in der Registry die entsprechenden Werte eingetragen werden.

HKEY_LOCAL_MACHINE\SOFTWARE\A−Trust GmbH\ATrustRegistr ierkasseCom

Registry Pfad für 32-bit Systeme

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\A−Trust GmbH\ATrustRegistr ierkasseCom

Registry Pfad für 64-bit Systeme

Nachfolgend die Werte für das Aktivieren des Logging.

Windows Reg i s t ry Editor Vers ion 5 .00

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\A−Trust GmbH\ATrustRegistr ierkasseCom ]"LogPath"="c:\\temp\\ registrierkassecom.log""Log"=dword:00000001

Registry Werte

Zum Aktivieren des Logging Eintrages muss das COM-Objekt bzw. die DLL neu gela-den werden, es wird empfohlen das Registrierkassen Programm zu beenden und neu zustarten.

a.sign RK COM/DLL Version: 2.2 Seite 59 von 61

Ges. für Sicherheitssystemeim elektr. Datenverkehr GmbH 7 Frequently asked questions (FAQ)

7 Frequently asked questions (FAQ)

7.1 Wann sollen Initialize und Finalize aufgerufen werden?

Initialize (Kapitel 2.4.2) muss nur einmal beim Start Ihres Programmes aufgerufen wer-den. Dementsprechend soll Finalize (Kapitel 4.2.14) nur beim Beenden des Programmesaufgerufen werden.

Auf keinen Fall sollten die Befehle vor bzw. nach jedem Verkaufsvorgang ausgeführtwerden!

7.2 Unterschied zwischen Sign und SignJWS

Der Unterschied sind die Eingabeparameter bzw. der Aufwand zur Vorbereitung derParameter der vom aufrufenden Programm durchgeführt werden muss.

Im Zweifelsfall verwenden Sie die Funktion SignJWS (Kapitel 4.2.11).

a.sign RK COM/DLL Version: 2.2 Seite 60 von 61

Ges. für Sicherheitssystemeim elektr. Datenverkehr GmbH 7 Literatur

Literatur

[Bun15] Bundesministers für Finanzen: Verordnung des Bundesministers für Finanzenüber die technischen Einzelheiten für Sicherheitseinrichtungen in den Registrier-kassen und andere, der Datensicherheit dienende Maÿnahmen (Registrierkas-sensicherheitsverordnung, RKSV), 2015. https://www.bmf.gv.at/steuern/

RKSV.pdf, besucht: 2015-11-16.

[Mic16] Microsoft GmbH: COM: Component Object Model Technologies, 2016. https:

//www.microsoft.com/com/default.mspx, besucht: 2016-01-26.

a.sign RK COM/DLL Version: 2.2 Seite 61 von 61


Recommended