📄 mvsent.s
字号:
************************************************************************ DESCRIPTION* -----------* THIS MODULE GATHERS DATA TO PROVIDE ENTROPY FOR THE CRYPTLIB* RNDMVS.C MODULE.** ENTROPY IS GATHERED BY OBTAINING THE TOD VALUE INTERMIXED WITH* TASKS THAT PASS CONTROL BACK TO MVS TO PROCESS. ENTROPY IS* INTRODUCED FROM THE FACT THAT THE AMOUNT OF TIME MVS TAKES TO* PROCESS THE REQUESTS IS UNKNOWN AND DEPENDENT ON FACTORS NOT IN* OUR CONTROL.** INPUT* -----* R1 = PARM ADDRESS* +0 = LENGTH OF INPUT BUFFER. MUST BE IN THE RANGE OF 1 TO* 2,000,000* +4 = ADDRESS OF BUFFER TO PLACE THE RANDOM DATA.** OUTPUT* ------* R15 = RETURN CODE* 0 = SUCCESSFUL* 1 = PARAMETER LIST ERROR* 2 = O/S MACRO ERROR** ENVIRONMENT* -----------* ENVIRONMENT: LANGUAGE ENVIRONMENT* AUTHORIZATION: PROBLEM STATE* CROSS MEMORY MODE: PASN=HASN=SASN* AMODE: 31* RMODE: 31* INTERUPT STATUS: EXTERNAL INTERUPTS* LOCKS: NONE***********************************************************************MVSENT CEEENTRY MAIN=NO,AUTO=LDSSZ USING LDS,CEEDSA************************************************************************ LOAD INPUT PARAMETERS.*********************************************************************** L R3,0(,R1) LOAD LENGTH LTR R3,R3 ZERO? BNH EXIT01 YES C R3,=F'2000000' MORE THAN MAX BYTES ? BH EXIT01 YES, IS ERROR ST R3,BUFLEN SAVE BUFFER LENGTH* ICM R3,B'1111',4(R1) LOAD ADR OF BUFFER BZ EXIT01 IMPROPER PARAMETER LIST ST R3,BUFADR SAVE BUFFER ADDRESS************************************************************************ MAIN FUNCTION.** OBTAIN THE TOD VALUE INTERMIXED WITH TASKS THAT PASS CONTROL* BACK TO MVS TO PROCESS. ENTROPY IS INTRODUCED FROM THE FACT THAT* THE AMOUNT OF TIME MVS TAKES TO PROCESS THE REQUESTS IS UNKNOWN* AND DEPENDENT ON FACTORS NOT IN OUR CONTROL.************************************************************************ EACH LOOP GATHERS 8 BYTES OF DATA.*ENLOOP DS 0H LA R2,WBUF LOAD ADR OF WORKING BUFFER* MVC PLIST(#ATTACH),$ATTACH INIT PARM LIST LA R4,0 LOAD NULL ST R4,STECB ZERO ECB LA R4,STECB LOAD A(ECB) ATTACH ECB=(R4), + SF=(E,PLIST) LTR R15,R15 SUCCESSFUL? BNZ EXIT02 FAILED ST R1,STTCB SAVE ADR OF TCB* STCK TOD OBTAIN TOD VALUE MVC 0(1,R2),TODB7 SAVE BYTE 7 LA R2,1(,R2) INCR ADR* WAIT ECB=(R4) WAIT FOR TASK TO COMPLETE LA R4,STTCB LOAD A TCB DETACH (R4) DETACK TASK* STCK TOD OBTAIN TOD VALUE MVC 0(1,R2),TODB7 SAVE BYTE 7 LA R2,1(,R2) INCR ADR* GETMAIN RC,LV=50000,LOC=(31,31) LTR R15,R15 SUCCESSFUL? BNZ EXIT02 NO, EXIT LR R4,R1* STCK TOD OBTAIN TOD VALUE MVC 0(1,R2),TODB7 SAVE BYTE 7 LA R2,1(,R2) INCR ADR* MVC PLIST(#GQSCAN),$GQSCAN INIT PARM LIST GQSCAN AREA=((R4),50000), + MF=(E,PLIST)* STCK TOD OBTAIN TOD VALUE MVC 0(1,R2),TODB7 SAVE BYTE 7 LA R2,1(,R2) INCR ADR* FREEMAIN RU,LV=50000,A=(R4)* STCK TOD OBTAIN TOD VALUE MVC 0(1,R2),TODB7 SAVE BYTE 7 LA R2,1(,R2) INCR ADR* LOAD EP=A@#$#@Z,ERRET=NOTFNDNOTFND DS 0H* STCK TOD OBTAIN TOD VALUE MVC 0(1,R2),TODB7 SAVE BYTE 7 LA R2,1(,R2) INCR ADR* MVC PLIST(#ENQ),$ENQ INIT PARM LIST ENQ MF=(E,PLIST) MVC PLIST(#DEQ),$DEQ INIT PARM LIST DEQ MF=(E,PLIST)* STCK TOD OBTAIN TOD VALUE MVC 0(1,R2),TODB7 SAVE BYTE 7 LA R2,1(,R2) INCR ADR* MVC PLIST(#STIMERM),$STIMERM INIT PARM LIST LA R4,TIMERID LOAD ADR OF TIME ID FIELD XC TIMEECB,TIMEECB CLEAR ECB LA R1,TIMEECB ST R1,TIMEECB@ SAVE ADR ECB PARM STIMERM SET, + WAIT=NO, + EXIT=TIMEEXIT, + PARM=TIMEECB@, + TUINTVL=WAITTIME, + ID=(R4), + MF=(E,PLIST) LTR R15,R15 SUCCESSFUL? BNZ EXIT02 NO, EXIT LA R4,TIMEECB LOAD ADR OF ECB WAIT ECB=(R4) WAIT FOR TIMER TO COMPLETE* STCK TOD OBTAIN TOD VALUE MVC 0(1,R2),TODB7 SAVE BYTE 7 LA R2,1(,R2) INCR ADR** COPY THE DATA TO THE USER BUFFER.* LA R1,WBUF LOAD ADR OF BUFFER SR R2,R1 CALC LEN OF DATA L R3,BUFLEN LOAD REMAINING BUF LEN CR R2,R3 HOW MUCH ROOM LEFT? BL COPYDATA ITS ENOUGH ROOM LR R2,R3 SET LEN TO REMAINING ROOM*COPYDATA DS 0H L R4,BUFADR LOAD ADR OF CALLER'S BUF LR R5,R2 LOAD LEN OF DATA LA R6,WBUF LOAD ADR OF DATA LR R7,R5 LOAD LEN OF DATA MVCL R4,R6* ST R4,BUFADR SAVE OFFSET INTO BUF L R3,BUFLEN LOAD REMAINING LEN OF BUF SR R3,R2 CALC NEW REMAINING LEN ST R3,BUFLEN SAVE NEW REMAINING LEN* LTR R3,R3 END OF BUF BH ENLOOP NO, CONTINUE* B EXIT00 EXIT************************************************************************* RETURN TO CALLER.***********************************************************************EXIT01 DS 0H LA R15,1 B EXITEXIT02 DS 0H LA R15,2 B EXITEXIT00 DS 0H LA R15,0EXIT DS 0H CEETERM RC=(R15)************************************************************************ CONSTANTS***********************************************************************PPA CEEPPA ,*WAITTIME DC F'2' ~(2*26) MICROSECONDSQNAME DC C'CRYPTLIB' ENQ QNAMERNAME DC C'RANDOM' ENQ RNAME*$ATTACH ATTACH EP=IEFBR14, + DPMOD=-255, + SF=L#ATTACH EQU *-$ATTACH*$GQSCAN GQSCAN SCOPE=ALL, + XSYS=YES, + MF=L#GQSCAN EQU *-$GQSCAN*$ENQ ENQ (QNAME,RNAME,S,,SYSTEMS),MF=L#ENQ EQU *-$ENQ*$DEQ DEQ (QNAME,RNAME,,SYSTEMS),MF=L#DEQ EQU *-$ENQ*$STIMERM STIMERM SET,MF=L#STIMERM EQU *-$STIMERM* LTORG , YREGS ,************************************************************************* STIMERM ASYNC EXIT*********************************************************************** DROPTIMEEXIT DS 0H USING TIMEEXIT,R15 L R2,4(,R1) LOAD ADR OF ECB POST (R2) POST ECB BR R14 RETURN TO CALLER DROP R15************************************************************************* DYNAMIC STORAGE AREA***********************************************************************LDS DSECT , DS XL(CEEDSASZ) DSA STORAGE*BUFADR DS A CALLER'S BUFFER ADRBUFLEN DS H CALLER'S BUFFER LEN*TOD DS 0D TIME-OF-DAY VALUETODB1 DS BTODB2 DS BTODB3 DS BTODB4 DS BTODB5 DS BTODB6 DS BTODB7 DS BTODB8 DS B*STECB DS F SUBTASK ECBSTTCB DS A SUBTASK ADRTIMERID DS F STIMERM TIMER IDTIMEECB DS F STIMERM ECBTIMEECB@ DS A ADR OF STIMERM ECBPLIST DS XL256 GENERAL PARM LISTWBUF DS CL100 WORKING BUFFER* DS 0D END LDS ON DOUBLE WORDLDSSZ EQU *-LDS************************************************************************* MAPPING DSECTS*********************************************************************** CEECAA , LE COMMON ANCHOR AREA CEEDSA , LE DYNAMIC STORAGE AREA* END MVSENT
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -