Im Beispielprogramm werden folgende Makros von CRYPT verwendet:
Der Makro CPKC11T enthält Datenbeschreibungen und Equates, die von den folgenden Makros genutzt werden.
Der Makro CSESION eröffnet mit der Aktion *OPENSESSION eine Sitzung zwischen einer Anwendung und einem Token in einem bestimmten Slot.
Der Makro CGENKEY generiert einen geheimen Schlüssel.
Anschließend initialisiert die Aktion *ENCRYPTINIT des Makros CCRYINI eine Verschlüsselungsoperation.
Mit der Aktion *ENCRYPT des Makros CCRY wird die Verschlüsselungsoperation fortgesetzt und beendet.
Die Aktion *DECRYPTINIT des Makros CCRYINI initialisiert eine Entschlüsselungsoperation.
Anschließend setzt der Makro CCRY mit der Aktion *DECRYPT die Entschlüsselung fort und beendet sie.
Mit der Aktion *CLOSESESSION des Makros CSESION wird die Sitzung geschlossen.
TITLE 'CPKC11T LAYOUT' CPKC11T MF=D TITLE 'CSESION PARAM LIST' CSESION MF=D TITLE 'CCRYINI PARAM LIST' CCRYINI MF=D TITLE 'CCRY PARAM LIST' CCRY MF=D TITLE 'CGENKEY PARAM LIST' CGENKEY MF=D TITLE 'CRY2EX - EXAMPLE' CRY2EX RMODE ANY CRY2EX AMODE ANY SPACE 3 ***** ***** ENTRIES ***** SPACE CRY2EX @ENTR TYP=M,ENV=SPLSPEC,FUNCT='EXAMPLE OF CRYPT ASS PROGRAM', - LOCAL=ZEXALOC SPACE 4 * PRESET ILLEGAL SESSION HANDLE MVC ZSESSION,=F'0' * OPEN SESSION LA R3,CSESIONC MVC CSESIONC,CSESIONL @DATA BASE=R3,CLASS=B,DSECT=CRYO_MDL MVI CRYOACTION,CRYOOPENSESSION * MVC CRYOSLOTID,=F'0' CSESION MF=E,PARAM=(R3),CALLER=USER @IF EQ CLC CRYORET,=F'0' @THEN MVC ZSESSION,CRYOSESSION * GENERATE SECRET KEY LA R3,CGENKEYC MVC CGENKEYC,CGENKEYL @DATA BASE=R3,CLASS=B,DSECT=CRYD_MDL MVC CRYDSESSION,ZSESSION MVC CRYDMECHANISM,=A(MDESKGEN) * MVC CRYDTEMPLAT,=F'0' * MVC CRYDCOUNT,=F'0' CGENKEY MF=E,PARAM=(R3),CALLER=USER @IF EQ CLC CRYDRET,=F'0' @THEN MVC ZDESKEY,CRYDKEY SPACE 4 * INITIALIZE ENCRYPTION OPERATION LA R3,CCRYINIC MVC CCRYINIC,CCRYINIL @DATA BASE=R3,CLASS=B,DSECT=CRYA_MDL MVI CRYAACTION,CRYAENCRYPTINIT MVC CRYASESSION,ZSESSION MVC CRYAKEY,ZDESKEY MVC CRYAMECHANISM,=A(MDESECB) CCRYINI MF=E,PARAM=(R3),CALLER=USER SPACE @IF EQ CLC CRYARET,=F'0' @THEN * ENCRYPT OPERATION LA R3,CCRYC MVC CCRYC,CCRYL @DATA BASE=R3,CLASS=B,DSECT=CRYB_MDL MVI CRYBACTION,CRYBENCRYPT MVC CRYBSESSION,ZSESSION MVC CRYBDATAIN,=A(ZINPUT) MVC CRYBDATAINLEN,=A(L'ZINPUT) LA R15,ZENCOUT ST R15,CRYBDATAOUT MVC CRYBDATAOUTLEN,=A(L'ZENCOUT) CCRY MF=E,PARAM=(R3),CALLER=USER @IF EQ * CCRY SUCCESSFUL ? CLC CRYBRET,=F'0' @THEN * SAVE LENGTH OF ENCRYPTED STRING MVC ZENCOUTL,CRYBDATAOUTLEN * ENCRYPT OPERATION WAS TERMINATED BY SINGLE STEP ENCRYPTION. * INITIALIZE DECRYPT OPERATION LA R3,CCRYINIC MVC CCRYINIC,CCRYINIL @DATA BASE=R3,CLASS=B,DSECT=CRYA_MDL MVI CRYAACTION,CRYADECRYPTINIT MVC CRYASESSION,ZSESSION MVC CRYAKEY,ZDESKEY MVC CRYAMECHANISM,=A(MDESECB) CCRYINI MF=E,PARAM=(R3),CALLER=USER SPACE @IF EQ CLC CRYARET,=F'0' @THEN * DECRYPT OPERATION LA R3,CCRYC MVC CCRYC,CCRYL @DATA BASE=R3,CLASS=B,DSECT=CRYB_MDL MVI CRYBACTION,CRYBDECRYPT MVC CRYBSESSION,ZSESSION LA R15,ZENCOUT ST R15,CRYBDATAIN MVC CRYBDATAINLEN,ZENCOUTL LA R15,ZDECOUT ST R15,CRYBDATAOUT MVC CRYBDATAOUTLEN,=A(L'ZDECOUT) CCRY MF=E,PARAM=(R3),CALLER=USER @IF EQ * CCRY SUCCESSFUL ? CLC CRYBRET,=F'0' @THEN * SAVE LENGTH OF DECRYPTED STRING MVC ZDECOUTL,CRYBDATAOUTLEN * DECRYPT OPERATION WAS TERMINATED BY SINGLE STEP DECRYPTION. * NO ERROR FROM CRYPT CALLS LA R3,0 * CHECK RESULT @IF EQ * LENGTH IDENTICAL CLC ZDECOUTL,=A(L'ZINPUT) @AND EQ * DECRYPTED STRING IDENTICAL CLC ZINPUT,ZDECOUT @THEN * REPORT SUCCESS WROUT SUCCESS,SUCCESSE,PARMOD=31 SUCCESSE DS 0H @ELSE * REPORT FAILURE WROUT FAILURE,FAILUREE,PARMOD=31 FAILUREE DS 0H @BEND @BEND @BEND @BEND @BEND @BEND @BEND @IF NE * SESSION WAS INITIALIZED ? CLC ZSESSION,=F'0' @THEN * CLOSE SESSION LA R3,CSESIONC MVC CSESIONC,CSESIONL @DATA BASE=R3,CLASS=B,DSECT=CRYO_MDL MVI CRYOACTION,CRYOCLOSESESSION MVC CRYOSESSION,ZSESSION CSESION MF=E,PARAM=(R3),CALLER=USER @BEND SPACE @EXIT * DATA CSESIONL CSESION MF=L CGENKEYL CGENKEY MF=L CCRYINIL CCRYINI MF=L CCRYL CCRY MF=L * * MECHANISM DES_KEY_GEN (NO PARAMETER) MDESKGEN DC A(CRY0MDES_KEY_GEN),A(0),A(0) * MECHANISM DES_ECB (NO PARAMETER) MDESECB DC A(CRY0MDES_ECB),A(0),A(0) * * STRING TO BE ENCRYPTED (FOR DES-ECB, LENGTH MUST BE A MULTIPLE OF 8) ZINPUT DC CL16'DAS IST GEHEIM !' * * SUCCESS DC Y(SUCCESSL) DC X'000001' DC C'SUCCESSFUL ENCRYPTION AND DECRYPTION' SUCCESSL EQU *-SUCCESS * FAILURE DC Y(FAILUREL) DC X'000001' DC C'DECRYPTION OUTPUT DIFFERS FROM ENCRYPTION INPUT' FAILUREL EQU *-FAILURE * ZEXALOC @PAR D=YES DS 0F CSESIONC DS XL(CRYO#) CGENKEYC DS XL(CRYD#) CCRYINIC DS XL(CRYA#) CCRYC DS XL(CRYB#) * ENCRYPTED STRING AREA ZENCOUT DS XL24 * ENCRYPTED STRING AREA ZDECOUT DS XL24 * SESSION # ZSESSION DS F * SECRET KEY HANDLE ZDESKEY DS F * LENGTH OF ENCRYPTED STRING ZENCOUTL DS F * LENGTH OF DECRYPTED STRING ZDECOUTL DS F SPACE ZEXALOC @PAR LEND=YES @END END /START-ASSEMBH //COMPILE SOURCE=... //MACRO-LIBRARY=(.....) //SOURCE-PROPERTIES=*PAR(LOW-CASE-CONVERSION=YES,...) //.... //END /START-BINDER ... //START-LLM-CREATION INTERNAL-NAME=... //INCLUDE-MODULES ELEMENT=CRY2EX,LIB=... //INCLUDE-MODULES ELEMENT=ITSP1PMS,LIB=PM.MODULE //RESOLVE-BY-AUTOLINK LIBRARY=PM.MODULE //SAVE-LLM LIB=... //END