DCL SPCPTR .ODP; DCL SPC ODP BAS(.ODP); DCL DD ODP.DCB BIN(4) DEF(ODP) POS(17); DCL SPCPTR .OPEN-FEEDBACK; DCL SPC OPEN-FEEDBACK BAS(.OPEN-FEEDBACK); DCL DD OPEN-RECORD-LENGTH BIN(2) DEF(OPEN-FEEDBACK) POS(45); DCL SPCPTR .DCB; DCL SPC DCB BAS(.DCB); DCL DD DCB-GET BIN(2) DEF (DCB) POS(25); 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(211) BDRY(16); DCL SPCPTR .IFCB-ODP DEF(IFCB) POS( 1); DCL SPCPTR .IFCB-INBUF DEF(IFCB) POS( 17); DCL SPCPTR .IFCB-OPEN-FEEDBACK DEF(IFCB) POS( 49); 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-NO-MORE-PARMS BIN (2) DEF(IFCB) POS(209) INIT(32767); DCL OL OPEN-I(.IFCB); DCL OL CLOSE-I(.IFCB); DCL DD GET-ENTRY BIN(2); DCL DD INBUF CHAR(268) BAS(.IFCB-INBUF); 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 EXCM * EXCID(H'5001') BP(EOF-DETECTED) CV("CPF") IMD; DCL DD CONTROL CHAR(32) BDRY(16); DCL DD CTRL-FUNCTION CHAR(2) DEF(CONTROL) POS( 1); DCL DD CTRL-ALGORITHM CHAR(1) DEF(CONTROL) POS( 3); DCL DD CTRL-SEQUENCE CHAR(1) DEF(CONTROL) POS( 4); DCL DD CTRL-LENGTH BIN(4) DEF(CONTROL) POS( 5); DCL DD CTRL-OUTPUT CHAR(1) DEF(CONTROL) POS( 9); DCL DD * CHAR(7) DEF(CONTROL) POS(10); DCL SPCPTR .WORK DEF(CONTROL) POS(17); DCL DD WORK CHAR(96); /* PRIVATE WORK AREA FOR CIPHER */ DCL SPCPTR .CIPHER-RESULT INIT(CIPHER-RESULT); DCL DD CIPHER-RESULT CHAR(20); DCL SPCPTR .CIPHER-SOURCE INIT(CIPHER-SOURCE); DCL DD CIPHER-SOURCE CHAR(257); DCL DD TEXT-LENGTH BIN(2); DCL SPCPTR .PARM1 PARM; DCL DD PARM-LIBRARY CHAR(10) BAS(.PARM1); DCL SPCPTR .PARM2 PARM; DCL DD PARM-FILE CHAR(10) BAS(.PARM2); DCL SPCPTR .PARM3 PARM; DCL DD PARM-MEMBER CHAR(10) BAS(.PARM3); DCL SPCPTR .PARM4 PARM; DCL DD PARM-HASH CHAR(40) BAS(.PARM4); DCL OL PARMS(.PARM1, .PARM2, .PARM3, .PARM4) PARM EXT MIN(4); /**************************************************************/ ENTRY * (PARMS) EXT; OPEN-INPUT-FILE: CPYBLA IFCB-LIBRARY, PARM-LIBRARY; CPYBLA IFCB-FILE, PARM-FILE ; CPYBLA IFCB-MEMBER, PARM-MEMBER ; CALLX .SEPT(OPEN-ENTRY), OPEN-I, *; CPYBWP .OPEN-FEEDBACK, .IFCB-OPEN-FEEDBACK; SUBN TEXT-LENGTH, OPEN-RECORD-LENGTH, 12; CPYBWP .NULL, *; /* MAKE NULL PTR */ CPYBWP .ODP, .IFCB-ODP; ADDSPP .DCB, .ODP, ODP.DCB; CPYNV GET-ENTRY, DCB-GET; INITIALIZE-CIPHER-CONTROL: CPYBLA CTRL-FUNCTION, X'0005'; /* HASH */ CPYBLA CTRL-ALGORITHM, X'01'; /* SHA-1 */ CPYBLA CTRL-OUTPUT, X'00'; /* HASH */ SETSPP .WORK, WORK; CPYBREP WORK, X'00'; HASH-DUMMY-FIRST-RECORD: CPYBLA CIPHER-SOURCE, " "; CPYNV CTRL-LENGTH, 1; CPYBLA CTRL-SEQUENCE, X'01'; /* FIRST */ CIPHER .CIPHER-RESULT, CONTROL, .CIPHER-SOURCE; GET-NEXT-RECORD: CALLX .SEPT(GET-ENTRY), GET-OPERATION, *; CPYBLAP CIPHER-SOURCE, INBUF(13:TEXT-LENGTH), " "; TRIM-AWAY-EXTRA-TRAILING-BLANKS: TRIML CTRL-LENGTH, CIPHER-SOURCE, " "; ADDN(S) CTRL-LENGTH, 1; /* LEAVE EXACTLY ONE BLANK */ HASH-REAL-MIDDLE-RECORD: CPYBLA CTRL-SEQUENCE, X'02'; /* MIDDLE */ CIPHER .CIPHER-RESULT, CONTROL, .CIPHER-SOURCE; B GET-NEXT-RECORD; EOF-DETECTED: CALLX .SEPT(CLOSE-ENTRY), CLOSE-I, *; HASH-DUMMY-FINAL-RECORD: CPYBLA CIPHER-SOURCE, " "; CPYNV CTRL-LENGTH, 1; CPYBLA CTRL-SEQUENCE, X'03'; /* FINAL */ CIPHER .CIPHER-RESULT, CONTROL, .CIPHER-SOURCE; RETURN-WITH-RESULT: CVTHC PARM-HASH, CIPHER-RESULT; RTX *; PEND;