Loading...
Select Version
&pagelevel(4)&pagelevel
The following CRYPT macros are used in the sample program:
The CPKC11T macro contains data descriptions and equates that are used by the subsequent macros.
The CSESION macro uses the *OPENSESSION action to open a session between an application and a token in a specified slot.
The CGENKEY macro generates a secret key.
Then the action *ENCRYPTINIT of the CCRYINI macro initiates an encryption operation.
The *ENCRYPT action of the CCRY macro is used to continue and terminate the encryption operation.
The action *DECRYPTINIT of the CCRYINI macro initiates a decryption operation.
Then the CCRY macro continues and terminates the decryption using the *DECRYPT action.
The session is terminated using the *CLOSESESSION action of the CSESION macro.
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