###   Projekte und Informationen rund um den KC85   ### 

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 KCAES
noAES   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:


; ARBEITSZELLEN
ARGN    EQU 0B781H      ;ANZAHL ARG.
ARG1    EQU 0B782H
ARG2    EQU 0B784H
ARG3    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 AES
noAES   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.