Mit der Version 1.4 von KCAES.KCC lassen sich die Kryptografie-Tools auch in eigene Programme einbinden. Hier gibt es Informationen und Hilfestellungen, wie dabei vorgegangen werden kann.
Mit Hilfe von KCAES können Speicherbereiche mit dem anerkannten AES-Algorithmus ver- und wieder entschlüsselt werden. Das erfolgt durch Aufruf vom CAOS-Menü aus mit den erforderlichen Parametern. Nach Beendigung werden die Start- und Endwerte und bei SHA256 der Hash für die weitere Verwendung angezeigt.
Bei wiederkehrenden Abläufen oder wenn mehrere Bereiche verschlüsselt werden sollen, entsteht oft der Wunsch dies zu automatisieren.
Seit der Version V1.4 ist es jetzt möglich, die KCAES Programme durch andere Software aufrufen zu lassen. KCAES gibt nach der Rückkehr vom Aufruf entsprechende Werte zurück, welche sich für den weiteren Programmablauf in der eigenen bzw. anderer Software auswerten lassen.
Die Übergabe erfolgt ausschließlich in den Speicherzellen ARGN (0B781H) für die Anzahl der Argumente und ab ARG1 (0B782H) bis maximal ARG3 (0B786H+1) für die Argumente selbst. Die Register A, HL, DE oder BC werden nicht ausgewertet. Bei der Rückgabe von KCAES steht ein gesetztes CY-Flag für den Abbruch während des Programmablaufes, entweder durch einen Fehler oder durch einen Break. In Register A steht der Fehlercode zur Auswertung.
Übersicht Fehlercodes (ab Version 1.4)
- 1 = zu wenig Parameter
- 2 = Endadresse kleiner oder gleich Startadresse
- 3 = Daten- oder Passwortfehler
- 4 = keine verschlüsselten Daten gefunden
- 5 = Endadresse im oder hinter Programmbereich
Ist der Wert Null im Register A vorhanden, wurde einen Break ausgelöst. Dies passiert wenn ein leeres Passwort übergeben wird oder der User die Taste >BRK< während der Passworteingabe gedrückt hat.
Ist das CY-Flag nicht gesetzt, wurde KCAES erfolgreich beendet. Im Register A ist die Anzahl der zurückgegebenen Werte gespeichert. Die Werte selbst befinden sich in dieser Reihenfolge in den Doppelregistern HL, DE und BC. Im HL ist der Startwert und in DE und BC der Endwert bzw. Endwert+1 gespeichert. Ist die Anzahl der Werte im Register A kleiner als drei, enthalten die restlichen Doppelregister Zufallswerte und sind nicht zu beachten.
LD (ARGN),... ;z.B. ARGN=3, ARG1=1000, ARG2=1500, ARG3=256 LD DE,CTR CALL AES JR C,Abbruch ;Carry-Flag? (Rücksprung von KCAES erfolgt hierher) ... ;ab hier Code bei erfolgreicher Ausführung z.B. Save AES-Chiffre RET CTR DEFM 'AESXCTR',0
AES LD A,07FH ;Prolog LD HL,2C00H ;RAM nach Menükommandos von KCAES2C o. KCAES6C durchsuchen LD BC,6CFFH-2C00H CALL 0F003H ;UP-Nr.: 1DH DEFB 1DH ;ZSUCH JR NC,noAES ;Carry-Flag? INC HL ;Epilog-Byte überspringen JP (HL) ;JP KCAES, RET erfolgt von KCAESnoAES POP HL ;Rücksprung CALL AES vom Stapel!; ... ;Kommando von KCAES nicht gefunden RET
Abbruch;... ;Error o. Break RET
Mit Hilfe des Unterprogramms ZSUCH wird im Speicher gesucht, ob KCAES vorhanden ist und ab welcher Adresse es gestartet werden soll. Da sich Adressen von KCAES in späteren Versionen ändern können oder das Programm nicht im Speicher vorhanden sein könnte, ist es der empfohlene Weg für den Aufruf.
So können z.B. in einem Programmdurchlauf verschiedene Speicherbereiche eines Textprogramms gesucht, zusammen kopiert und anschließend verschlüsselt und gespeichert werden. Umgekehrt ist die Entschlüsselung mit anschließendem Zurückkopieren der Daten möglich. Es können auch verschiedene Speicherbereiche automatisch verschlüsselt und gespeichert werden.
Beispielprogramm
In einem Beispielprogramm werden die Menüworte 'AESST' und 'SHAST' ins Menü eingefügt. Wahlweise wird ein Bereich verschlüsselt oder ein SHA256 Hash ermittelt und anschließend nach Bestätigung gespeichert. Der Hashwert wird vorher an einen neuen Adressbereich im RAM kopiert:
; ARBEITSZELLENARGN EQU 0B781H ;ANZAHL ARG.ARG1 EQU 0B782HARG2 EQU 0B784HARG3 EQU 0B786H
PROG EQU 2A00H
;------------- AES ------------------
ORG PROG DEFW 7F7FH DEFM 'AESST' ;entweder Parameter im Menü übergeben oder im Programm ermitteln DEFB 01; ... ;evtl. Code um z.B. Speicherbereiche vom Textprogramm ;zu durchsuchen, um Parameter zu ermitteln LD A,2 ;Argumente für KCAES in ARGx speichern LD HL,200H ;z.B. ab 200H LD DE,450H Call Arg LD DE,CTR ;Menüwort CALL AES JP C,Abbruch ;Carry-Flag testen; ... ;Anzahl Parameter aus A auslesen und; ... ;entsprechend HL, DE und BC auswerten; ... ;und z.B. AES-Chiffre automatisch speichern CP 3 RET C ;keine 3 Parameter? LD A,2 LD D,B ;dritten Parameter Endadresse+1 übergeben, LD E,C ;da Save-Kommando vom KC85 ein Byte zuwenig speichert CALL Arg CALL Save RET
CTR DEFM 'AESXCTR',0
;-------------- SHA ---------------
DEFW 7F7FH DEFM 'SHAST' ;entweder Parameter im Menü übergeben oder im Programm ermitteln DEFB 01; ... ;evtl. Code z.B. ROM-Modul einschalten um Hashwert zu bestimmen LD A,2 ;Argumente für KCAES in ARGx speichern LD HL,0F000H ;z.B. Hash vom ROM LD DE,0FFFFH Call Arg LD DE,SHA ;Menüeintrag CALL AES JP C,Abbruch ;Carry-Flag testen; ... ;Anzahl Parameter aus A auslesen und; ... ;entsprechend HL, DE und BC auswerten; ... ;und z.B. AES-Chiffre automatisch speichern CP 1 RET C ;kein Parameter? LD DE,200H ;HL = Hash-Adresse im RAM PUSH DE LD BC,32 ;Länge Hash 32 = 20H LDIR ;Hash nach 200H kopieren LD A,2 POP HL ;DE von LDIR übernehmen CALL Arg CALL Save RET
SHA DEFM 'SHA256',0
;----------- Save ---------------
Save CALL 0F003H ;Print DEFB 23H DEFM 'Save J/N ',0 CALL 0F003H ;Tastaturabfrage DEFB 04H CP 'J' RET NZ
LD HL,Chiffre CALL 0F003H ;Save DEFB 036H RET ;ins Caos
Chiffre DEFM 'Chiffre AES',0
;------------ Arg -----------------
;Der Einfachheit halber, werden alle Registerpaare gespeichert,;über die Gültigkeit entscheidet der Wert im Register A
ARG LD (ARGN),A LD (ARG1),HL LD (ARG2),DE LD (ARG3),BC RET
;---------- KCAES -----------------
AES LD A,07FH LD HL,2C00H ;RAM nach Menükommando von KCAES2C o. KCAES6C durchsuchen LD BC,6CFFH-2C00H ;Länge CALL 0F003H ;UP-Nr.: 1DH DEFB 1DH ;ZSUCH JR NC,noAES ;KCAES nicht gefunden INC HL ;IRM Byte überspringen JP (HL) ;CALL KCAES, RET ist schon auf Stapel von CALL AESnoAES POP HL ;Rücksprung CALL AES vom Stack nehmen!; ... ;Code, wenn KCAES nicht gefunden wurde CALL 0F003H ;Print DEFB 23H DEFM 'KCAES nicht gefunden',0DH,0AH,0 RET ;ins Caos
Abbruch AND A JR Z,BRK; ... ;Code für Errror in KCAES RET ;ins Caos
BRK; ... ;Code für Break in KCAES RET ;ins Caos
Das eigene Steuerprogramm kann bei häufiger Nutzung auch vor KCAES im Speicher abgelegt und zusammen gespeichert werden. Der Bereich hinter KCAES2C bis 03FFFH bzw. KCAES6C bis 07FFFH kann nicht genommen werden. Er wird für Variablen benutzt und bei Programmausführung immer überschrieben.
Die Datei KCAESUNT.ASM mit dem Beispielkode ist im Downloadbereich zu finden.
