DCL SPCPTR .PARM1 PARM; DCL DD PARM-IN-FILE CHAR(10) BAS(.PARM1); DCL SPCPTR .PARM2 PARM; DCL DD PARM-IN-LIB CHAR(10) BAS(.PARM2); DCL SPCPTR .PARM3 PARM; DCL DD PARM-OUT-FILE CHAR(10) BAS(.PARM3); DCL SPCPTR .PARM4 PARM; DCL DD PARM-OUT-LIB CHAR(10) BAS(.PARM4); DCL SPCPTR .PARM5 PARM; DCL DD PARM-GENERAL CHAR(50) BAS(.PARM5); DCL OL PARMS(.PARM1, .PARM2, .PARM3, .PARM4, .PARM5) EXT PARM MIN(5); DCL SPCPTR .ODP; DCL SPC ODP BAS(.ODP); DCL DD ODP.DCB BIN(4) DEF(ODP) POS(17); DCL SPCPTR .DCB; DCL SPC DCB BAS(.DCB); DCL DD DCB-GET BIN(2) DEF (DCB) POS(25); DCL DD DCB-PUT BIN(2) DEF (DCB) POS(33); DCL SPCPTR .NULL; DCL SPCPTR @SEPT BASPCO; DCL SYSPTR .SEPT(6440) BAS(@SEPT); DCL CON CLOSE-ENTRY BIN(2) INIT(11); DCL CON OPEN-ENTRY BIN(2) INIT(12); DCL SPCPTR .IFCB INIT(IFCB); DCL DD IFCB CHAR(219) BDRY(16); DCL SPCPTR .IFCB-ODP DEF(IFCB) POS( 1); DCL SPCPTR .IFCB-INBUF DEF(IFCB) POS( 17); DCL DD IFCB-FILE CHAR(10) DEF(IFCB) POS(129); DCL DD IFCB-LIB-ID BIN(2) DEF(IFCB) POS(139) INIT(72); DCL DD IFCB-LIBRARY CHAR(10) DEF(IFCB) POS(141); DCL DD IFCB-MBR-ID BIN(2) DEF(IFCB) POS(151) INIT(73); DCL DD IFCB-MEMBER CHAR(10) DEF(IFCB) POS(153); DCL DD IFCB-FLAGS-1 CHAR(1) DEF(IFCB) POS(175) INIT(X'80'); DCL DD IFCB-FLAGS-2 CHAR(1) DEF(IFCB) POS(176) INIT(X'20'); DCL DD IFCB-RECORD-ID BIN (2) DEF(IFCB) POS(209) INIT(1); DCL DD IFCB-RECORD-LENGTH BIN (2) DEF(IFCB) POS(211) INIT(144); DCL DD IFCB-FAST-SEQ-ID BIN (2) DEF(IFCB) POS(213) INIT(58); DCL DD IFCB-FAST-SEQ-Y-N CHAR(1) DEF(IFCB) POS(215) INIT(X'C0'); DCL DD IFCB-BLOCKS-REC BIN (2) DEF(IFCB) POS(216) INIT(20); DCL DD IFCB-NO-MORE-PARMS BIN (2) DEF(IFCB) POS(218) INIT(32767); DCL OL OPEN-I(.IFCB); DCL OL CLOSE-I(.IFCB); DCL DD GET-ENTRY BIN(2); DCL DD INBUF CHAR(144) BAS(.IFCB-INBUF); DCL DD PADDED-INBUF CHAR(144); DCL DD I BIN(4); DCL DD GET-OPTION BIN(4) INIT(H'03000001'); DCL SPCPTR .GET-OPTION INIT(GET-OPTION); DCL OL GET-OPERATION(.IFCB, .GET-OPTION, .NULL); DCL SPCPTR .OFCB INIT(OFCB); DCL DD OFCB CHAR(222) BDRY(16); DCL SPCPTR .OFCB-ODP DEF(OFCB) POS( 1); DCL SPCPTR .OFCB-OUTBUF DEF(OFCB) POS( 33); DCL DD OFCB-FILE CHAR(10) DEF(OFCB) POS(129); DCL DD OFCB-LIB-ID BIN(2) DEF(OFCB) POS(139) INIT(72); DCL DD OFCB-LIBRARY CHAR(10) DEF(OFCB) POS(141); DCL DD OFCB-MBR-ID BIN(2) DEF(OFCB) POS(151) INIT(73); DCL DD OFCB-MEMBER CHAR(10) DEF(OFCB) POS(153); DCL DD OFCB-FLAGS-1 CHAR(1) DEF(OFCB) POS(175) INIT(X'80'); DCL DD OFCB-FLAGS-2 CHAR(1) DEF(OFCB) POS(176) INIT(X'10'); DCL DD OFCB-RECORD-ID BIN (2) DEF(OFCB) POS(209) INIT(1); DCL DD OFCB-RECORD-LENGTH BIN (2) DEF(OFCB) POS(211) INIT(144); DCL DD OFCB-CLEAR-ID BIN (2) DEF(OFCB) POS(213) INIT(8); DCL DD OFCB-CLEAR-YES CHAR(1) DEF(OFCB) POS(215) INIT(X'80'); DCL DD OFCB-FAST-SEQ-ID BIN (2) DEF(OFCB) POS(216) INIT(58); DCL DD OFCB-FAST-SEQ-Y-N CHAR(1) DEF(OFCB) POS(218) INIT(X'C0'); DCL DD OFCB-BLOCKS-REC BIN (2) DEF(OFCB) POS(219) INIT(20); DCL DD OFCB-NO-MORE-PARMS BIN (2) DEF(OFCB) POS(221) INIT(32767); DCL OL OPEN-O (.OFCB) ARG; DCL OL CLOSE-O(.OFCB) ARG; DCL DD PUT-ENTRY BIN(2); DCL DD OUTBUF CHAR(144) BAS(.OFCB-OUTBUF); DCL DD PADDED-OUTBUF CHAR(144); DCL DD PUT-OPTION BIN(4) INIT(H'10000005'); DCL SPCPTR .PUT-OPTION INIT(PUT-OPTION); DCL OL PUT-OPERATION(.OFCB, .PUT-OPTION, .NULL); DCL EXCM * EXCID(H'5001') BP(EOF-DETECTED) CV("CPF") IMD; DCL DD RESOLVE CHAR(34); DCL DD RESOLVE-TYPE CHAR( 2) DEF(RESOLVE) POS( 1) INIT(X'0201'); DCL DD RESOLVE-NAME CHAR(30) DEF(RESOLVE) POS( 3); DCL DD RESOLVE-AUTH CHAR( 2) DEF(RESOLVE) POS(33) INIT(X'0000'); DCL SPCPTR .ARG1 INIT(CONTROL); DCL DD CONTROL CHAR(256) BDRY(8); DCL DD OPERATION CHAR(8) DEF(CONTROL) POS( 1); DCL DD KEY CHAR(16) DEF(CONTROL) POS( 9); DCL DD SCHEDULE CHAR(176) DEF(CONTROL) POS(25); DCL SPCPTR .ARG2 INIT(PT); DCL DD PT CHAR(16) BDRY(8); DCL SPCPTR .ARG3 INIT(CT); DCL DD CT CHAR(16) BDRY(8); DCL OL MIAES (.ARG1, .ARG2, .ARG3) ARG; DCL SYSPTR .MIAES; DCL DD MACHINE-DATA CHAR(8); DCL DD CHAIN CHAR(16); DCL DD SALT CHAR(16); DCL DD SALT-FILE CHAR(10) DEF(SALT) POS(1); DCL DD SALT-TIME CHAR(12) DEF(SALT) POS(5); /**************************************************************/ ENTRY * (PARMS) EXT; CPYBLAP RESOLVE-NAME, "MIAES", " "; RSLVSP .MIAES, RESOLVE, *, *; CPYBWP .NULL, *; /* MAKE NULL PTR */ OPEN-INPUT-FILE: CPYBLA IFCB-FILE, PARM-IN-FILE; CPYBLA IFCB-LIBRARY, PARM-IN-LIB; CPYBLA IFCB-MEMBER, PARM-IN-FILE; CALLX .SEPT(OPEN-ENTRY), OPEN-I, *; CPYBWP .ODP, .IFCB-ODP; ADDSPP .DCB, .ODP, ODP.DCB; CPYNV GET-ENTRY, DCB-GET; OPEN-OUTPUT-FILE: CPYBLA OFCB-FILE, PARM-OUT-FILE; CPYBLA OFCB-LIBRARY, PARM-OUT-LIB; CPYBLA OFCB-MEMBER, PARM-OUT-FILE; CALLX .SEPT(OPEN-ENTRY), OPEN-O, *; CPYBWP .ODP, .OFCB-ODP; ADDSPP .DCB, .ODP, ODP.DCB; CPYNV PUT-ENTRY, DCB-PUT; SET-KEY: CPYBLA KEY, X'34F2A96B3C110E01770BEC45DC4828CD'; CMPBLA(B) PARM-GENERAL, "E"/EQ(ENCRYPT-THE-FILE); CMPBLA(B) PARM-GENERAL, "D"/EQ(DECRYPT-THE-FILE); EOF-DETECTED: CALLX .SEPT(CLOSE-ENTRY), CLOSE-I, *; CALLX .SEPT(CLOSE-ENTRY), CLOSE-O, *; RTX *; ENCRYPT-THE-FILE: MATMDATA MACHINE-DATA, X'0000'; CPYBLA SALT-FILE, IFCB-MEMBER; CVTHC SALT-TIME, MACHINE-DATA(1:6); CPYBLA CHAIN, SALT; CPYBLAP OPERATION, "EK", " "; /* SETUP KEY SCHEDULE */ CALLX .MIAES, MIAES, *; CPYBLAP OPERATION, "E ", " "; /* ENCRYPT */ GET-PLAIN-RECORD: CALLX .SEPT(GET-ENTRY), GET-OPERATION, *; CPYBLAP PADDED-INBUF, INBUF, " "; CPYNV I, 1; ENCRYPT-BLOCK: CPYBLA PT, PADDED-INBUF(I:16); XOR(S) PT, CHAIN; CALLX .MIAES, MIAES, *; CPYBLA OUTBUF(I:16), CT; CPYBLA CHAIN, CT; ADDN(S) I, 16; CMPNV(B) I, 145/LO(ENCRYPT-BLOCK); CALLX .SEPT(PUT-ENTRY), PUT-OPERATION, *; B GET-PLAIN-RECORD; DECRYPT-THE-FILE: CPYBLA CHAIN, SALT; CPYBLAP OPERATION, "DK", " "; /* SETUP KEY SCHEDULE */ CALLX .MIAES, MIAES, *; CPYBLAP OPERATION, "D ", " "; /* DECRYPT */ GET-CIPHER-RECORD: CALLX .SEPT(GET-ENTRY), GET-OPERATION, *; CPYNV I, 1; DECRYPT-BLOCK: CPYBLA CT, INBUF(I:16); CALLX .MIAES, MIAES, *; XOR(S) PT, CHAIN; CPYBLA PADDED-OUTBUF(I:16), PT; CPYBLA CHAIN, CT; ADDN(S) I, 16; CMPNV(B) I, 145/LO(DECRYPT-BLOCK); CPYBLA OUTBUF, PADDED-OUTBUF; CALLX .SEPT(PUT-ENTRY), PUT-OPERATION, *; B GET-CIPHER-RECORD;