CICS BIF DIGEST provides data digest and hashing capabilities for programs and transactions. It enables programs to generate data digests, compute hash values, and handle data digest operations in CICS environments.
CICS BIF DIGEST is a Built-In Function (BIF) that allows programs to generate data digests and compute hash values. It provides cryptographic capabilities, data integrity checking, and hash computation for CICS applications.
12345678EXEC CICS BIF DIGEST FROM(data-area) LENGTH(data-length) INTO(digest-area) DIGESTLENGTH(digest-length) [ALGORITHM(algorithm-name)] [RESP(response-code)] END-EXEC
MD5 hash algorithm
SHA hash algorithms
CRC checksum algorithms
Custom hash algorithms
1234567891011121314151617181920212223242526272829303132333435IDENTIFICATION DIVISION. PROGRAM-ID. DIGEST01. DATA DIVISION. WORKING-STORAGE SECTION. 01 INPUT-DATA PIC X(100) VALUE 'Hello World'. 01 DATA-LENGTH PIC S9(8) COMP VALUE 100. 01 DIGEST-AREA PIC X(32). 01 DIGEST-LENGTH PIC S9(8) COMP VALUE 32. 01 RESPONSE-CODE PIC S9(8) COMP. 01 DIGEST-NEEDED PIC X(1) VALUE 'Y'. PROCEDURE DIVISION. IF DIGEST-NEEDED = 'Y' DISPLAY 'Generating data digest...' EXEC CICS BIF DIGEST FROM(INPUT-DATA) LENGTH(DATA-LENGTH) INTO(DIGEST-AREA) DIGESTLENGTH(DIGEST-LENGTH) RESP(RESPONSE-CODE) END-EXEC IF RESPONSE-CODE = DFHRESP(NORMAL) DISPLAY 'Digest generated successfully' DISPLAY 'Input data: ' INPUT-DATA(1:DATA-LENGTH) DISPLAY 'Digest: ' DIGEST-AREA(1:DIGEST-LENGTH) ELSE DISPLAY 'Failed to generate digest' END-IF ELSE DISPLAY 'No digest needed' END-IF EXEC CICS RETURN END-EXEC.
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677IDENTIFICATION DIVISION. PROGRAM-ID. DIGEST02. DATA DIVISION. WORKING-STORAGE SECTION. 01 INPUT-DATA PIC X(200) VALUE 'Sample data for digest'. 01 DATA-LENGTH PIC S9(8) COMP VALUE 200. 01 MD5-DIGEST PIC X(16). 01 SHA256-DIGEST PIC X(32). 01 CRC32-DIGEST PIC X(4). 01 DIGEST-LENGTH PIC S9(8) COMP VALUE 32. 01 RESPONSE-CODE PIC S9(8) COMP. 01 ALGORITHM-TYPE PIC X(10). 01 DIGEST-COUNT PIC S9(2) COMP VALUE 0. PROCEDURE DIVISION. PERFORM GENERATE-MD5-DIGEST PERFORM GENERATE-SHA256-DIGEST PERFORM GENERATE-CRC32-DIGEST EXEC CICS RETURN END-EXEC. GENERATE-MD5-DIGEST. MOVE 'MD5' TO ALGORITHM-TYPE MOVE 16 TO DIGEST-LENGTH EXEC CICS BIF DIGEST FROM(INPUT-DATA) LENGTH(DATA-LENGTH) INTO(MD5-DIGEST) DIGESTLENGTH(DIGEST-LENGTH) ALGORITHM(ALGORITHM-TYPE) RESP(RESPONSE-CODE) END-EXEC IF RESPONSE-CODE = DFHRESP(NORMAL) ADD 1 TO DIGEST-COUNT DISPLAY 'MD5 Digest: ' MD5-DIGEST(1:DIGEST-LENGTH) END-IF. GENERATE-SHA256-DIGEST. MOVE 'SHA256' TO ALGORITHM-TYPE MOVE 32 TO DIGEST-LENGTH EXEC CICS BIF DIGEST FROM(INPUT-DATA) LENGTH(DATA-LENGTH) INTO(SHA256-DIGEST) DIGESTLENGTH(DIGEST-LENGTH) ALGORITHM(ALGORITHM-TYPE) RESP(RESPONSE-CODE) END-EXEC IF RESPONSE-CODE = DFHRESP(NORMAL) ADD 1 TO DIGEST-COUNT DISPLAY 'SHA256 Digest: ' SHA256-DIGEST(1:DIGEST-LENGTH) END-IF. GENERATE-CRC32-DIGEST. MOVE 'CRC32' TO ALGORITHM-TYPE MOVE 4 TO DIGEST-LENGTH EXEC CICS BIF DIGEST FROM(INPUT-DATA) LENGTH(DATA-LENGTH) INTO(CRC32-DIGEST) DIGESTLENGTH(DIGEST-LENGTH) ALGORITHM(ALGORITHM-TYPE) RESP(RESPONSE-CODE) END-EXEC IF RESPONSE-CODE = DFHRESP(NORMAL) ADD 1 TO DIGEST-COUNT DISPLAY 'CRC32 Digest: ' CRC32-DIGEST(1:DIGEST-LENGTH) END-IF. DISPLAY-RESULTS. DISPLAY 'Total digests generated: ' DIGEST-COUNT.
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950IDENTIFICATION DIVISION. PROGRAM-ID. DIGEST03. DATA DIVISION. WORKING-STORAGE SECTION. 01 INPUT-DATA PIC X(50) VALUE 'Test data for digest'. 01 DATA-LENGTH PIC S9(8) COMP VALUE 50. 01 DIGEST-AREA PIC X(32). 01 DIGEST-LENGTH PIC S9(8) COMP VALUE 32. 01 RESPONSE-CODE PIC S9(8) COMP. 01 RETRY-COUNT PIC S9(2) COMP VALUE 0. 01 MAX-RETRIES PIC S9(2) COMP VALUE 3. PROCEDURE DIVISION. PERFORM DIGEST-WITH-ERROR-HANDLING EXEC CICS RETURN END-EXEC. DIGEST-WITH-ERROR-HANDLING. PERFORM GENERATE-DIGEST IF RESPONSE-CODE NOT = DFHRESP(NORMAL) AND RETRY-COUNT < MAX-RETRIES ADD 1 TO RETRY-COUNT DISPLAY 'Retry ' RETRY-COUNT ' generating digest' PERFORM DIGEST-WITH-ERROR-HANDLING END-IF. GENERATE-DIGEST. EXEC CICS BIF DIGEST FROM(INPUT-DATA) LENGTH(DATA-LENGTH) INTO(DIGEST-AREA) DIGESTLENGTH(DIGEST-LENGTH) RESP(RESPONSE-CODE) END-EXEC EVALUATE RESPONSE-CODE WHEN DFHRESP(NORMAL) DISPLAY 'Digest generated successfully' WHEN DFHRESP(INVREQ) DISPLAY 'Invalid digest request' WHEN DFHRESP(LENGERR) DISPLAY 'Data length error' WHEN DFHRESP(ALGORITHMERR) DISPLAY 'Algorithm error' WHEN DFHRESP(DIGESTERR) DISPLAY 'Digest generation error' WHEN OTHER DISPLAY 'Unexpected error occurred' END-EVALUATE.
Think of CICS BIF DIGEST like making a fingerprint:
Create a program that generates MD5 and SHA-256 digests for sample data.
Write a program that generates different types of digests and compares them.
Implement comprehensive error handling for digest generation failures.