Your Browser is not longer supported

Please use Google Chrome, Mozilla Firefox or Microsoft Edge to view the page correctly
Loading...

{{viewport.spaceProperty.prod}}

Synchrone Ausführung - Beispiel

&pagelevel(4)&pagelevel

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