×
The internal search function is temporarily non-functional. The current search engine is no longer viable and we are researching alternatives.
As a stop gap measure, we are using Google's custom search engine service.
If you know of an easy to use, open source, search engine ... please contact support@midrange.com.
I have been facing an issue where I am getting 16 position as garbage value
When we are trying the see decrypted value of a field then Decryption API
returning the garbage value at 16th position character and rest of
decrypted character value's are correct .
Decrypted value>>>122222222222222u222
below code returns the Decrypted value as below when data of field is
greater than 15 character. It has garbage value at 16th position which is
wrong.
Decrypted value>>>122222222222222u222
value should be return as: 1222222222222222222 but API return garbage vaule
at 16th position VALUE returns as --122222222222222u222
01 WS-RETURN-CODE PIC X(07) VALUE SPACES.
01 WS-FIELD-COUNT PIC 9(02) COMP-3 VALUE 1.
01 WS-MASKTYPE PIC X(30).
01 WS-MASK-CHAR PIC X(01) .
01 WS-MASK-CHAR-TYPE PIC X(01) .
01 WS-COUNT PIC 9(02) COMP-3 VALUE 1.
01 WS-MASK-CHAR-COUNT PIC 9(02) VALUE ZEROES.
*
01 WS-KEYSTRING PIC X(300) VALUE SPACES.
01 WS-KEYSTRING-FINAL PIC X(320) VALUE SPACES.
01 WS-ENCDATA PIC X(1024) VALUE SPACES.
01 FIELD-INDEX PIC 9(1) VALUE ZEROS.
01 WS-LENGTH PIC 9(02) COMP-3 VALUE ZEROES.
01 IN-FILE-NAME PIC X(10) VALUE SPACES.
01 IN-FIELD-NAME PIC X(10) VALUE SPACES.
01 WS-KEYVALUE PIC X(16) VALUE SPACES.
01 WS-KEY-LENGTHS.
05 WS-KF1LEN PIC S9(05) VALUE ZEROES.
05 WS-KF2LEN PIC S9(05) VALUE ZEROES.
05 WS-KF3LEN PIC S9(05) VALUE ZEROES.
05 WS-KF4LEN PIC S9(05) VALUE ZEROES.
05 WS-KF5LEN PIC S9(05) VALUE ZEROES.
05 WS-KF6LEN PIC S9(05) VALUE ZEROES.
05 WS-KF7LEN PIC S9(05) VALUE ZEROES.
05 WS-KF8LEN PIC S9(05) VALUE ZEROES.
05 WS-KF9LEN PIC S9(05) VALUE ZEROES.
05 WS-KF10LEN PIC S9(05) VALUE ZEROES.
05 WS-KF11LEN PIC S9(05) VALUE ZEROES.
05 WS-KF12LEN PIC S9(05) VALUE ZEROES.
05 WS-KF13LEN PIC S9(05) VALUE ZEROES.
05 WS-KF14LEN PIC S9(05) VALUE ZEROES.
05 WS-KF15LEN PIC S9(05) VALUE ZEROES.
* Parameter for the API - QC3DECDT
01 IN-CIPHER-DATA PIC X(1024).
01 OUT-DECRYPTED-VALUE PIC X(36) VALUE SPACES.
01 LENGTH-CIPHER-DATA PIC 9(8) USAGE BINARY VALUE 32.
01 ALGO.
05 BLOCK-ALGO PIC 9(8) USAGE BINARY VALUE 22.
05 BLOCK-LENGTH PIC 9(8) USAGE BINARY VALUE 16.
05 MOD PIC X(1) VALUE '1'.
05 PAD-OPTION PIC X(1) VALUE '0'.
05 PAD-CHARACTER PIC X(1) VALUE '0'.
05 MAC-LENGTH PIC 9(8) USAGE BINARY VALUE ZEROS.
05 EFF-KEY-SIZE PIC 9(8) USAGE BINARY VALUE 0.
01 ALGO-FMT-NAME PIC X(8) VALUE 'ALGD0200'.
01 KEYD.
05 KEY-TYPE PIC 9(8) USAGE BINARY VALUE 22.
05 KEY-LENGTH PIC 9(8) USAGE BINARY VALUE 16.
05 KEY-FORMAT PIC X(1) VALUE '0'.
05 KEY-STRING PIC X(16).
01 KEYD-FMT-NAME PIC X(8) VALUE 'KEYD0200'.
01 CRYPTO-SP PIC X(1) VALUE '0'.
01 CRPTO-DEVICE PIC X(10) VALUE SPACES.
01 WS-CLEAR-DATA PIC X(36).
01 LOA-DECRYPTED-VALUE PIC 9(8) USAGE BINARY VALUE 1024.
01 LENGTH-DECRYPTED-VALUE PIC 9(8) USAGE BINARY.
01 ERR.
05 BYTES-PRVD PIC 9(8) USAGE BINARY VALUE 64.
05 BYTES-AVAIL PIC 9(8) USAGE BINARY.
05 EXC-ID PIC X(7).
05 EXC-DATA PIC X(20).
* Cursor for fetching records from BASSYSP01
EXEC SQL
DECLARE BASSYSP01_C1 CURSOR FOR
SELECT ENCDATA
FROM BASSYSP01
WHERE KEYSTRING = :WS-KEYSTRING-FINAL
END-EXEC.
EXEC SQL END DECLARE SECTION END-EXEC.
01 ARE-THERE-MORE-RECORDS PIC X(1) VALUE 'Y'.
88 NO-MORE-RECORDS VALUE 'N'.
88 ERROR-ON-RECORDS VALUE 'X'.
01 MASK-SEARCH-SW PIC X(1) VALUE 'N'.
88 MASK-SEARCH-END VALUE 'Y'.
88 MASK-SEARCH-NOT-END VALUE 'N'.
01 DECRYPTION-SWITCH-SW PIC X(1) VALUE 'N'.
88 DECRYPTION-REQUIRED VALUE 'Y'.
88 DECRYPTION-NOT-REQUIRED VALUE 'N'.
01 DECRYPTION-SWITCH-NUM PIC X(1) VALUE 'N'.
88 DECRYPTION-NUM-REQUIRED VALUE 'Y'.
88 DECRYPTION-NUM-NOT-REQUIRED VALUE 'N'.
LINKAGE SECTION.
COPY CPYSECDEC.
COPY CPYERRLIST.
PROCEDURE DIVISION USING
SEC-DEC-RECORD
ERROR-LIST-RECORD.
*****************************************************************
* M A I N *
*****************************************************************
0000-MAIN-SECTION.
PERFORM 1000-INIT-PARA
THRU 1000-EXIT.
PERFORM 2000-PROCESS-PARA
THRU 2000-EXIT
VARYING WS-FIELD-COUNT
FROM 1 BY 1
UNTIL WS-FIELD-COUNT > 10
OR WS-FIELD-NAME (WS-FIELD-COUNT) = SPACES.
* Set up error handling work area.
INITIALIZE WS04-ERROR-DETAIL-AREA.
SET NO-ERRORS TO TRUE.
MOVE 'BASSYS0013' TO WS04-HOLD-PROG-NAME.
MOVE 'POL' TO WS04-HOLD-KEY-TYPE.
STRING ' ' DELIMITED BY SIZE
';' DELIMITED BY SIZE
INTO WS04-HOLD-KEY-STRING
END-STRING.
IF UNAUTHORIZED(WS-FIELD-COUNT)
MOVE WS-CIPHER-DATA(WS-FIELD-COUNT) TO
WS-DECRYPTED-VALUE(WS-FIELD-COUNT)
GO TO 2000-EXIT
END-IF.
MOVE WS-FILE-NAME TO IN-FILE-NAME.
MOVE WS-CIPHER-DATA(WS-FIELD-COUNT)
TO IN-CIPHER-DATA.
MOVE WS-FIELD-NAME(WS-FIELD-COUNT)
TO IN-FIELD-NAME.
INITIALIZE WS-MASK-CHAR-COUNT.
2000-EXIT.
EXIT.
/
*****************************************************************
* Get Masking Character from Mask Format Table TBSYS006
*****************************************************************
2005-GET-MASK-CHAR.
EXEC SQL
SELECT MASKTYPE
INTO : WS-MASKTYPE
FROM TBSYS002
WHERE MASKNAME IN (
SELECT MASK
FROM TBSYS005
WHERE FILENAME = :IN-FILE-NAME
AND
FIELDNAME = :IN-FIELD-NAME
)
END-EXEC.
IF SQLCODE = SQL-IO-OK
CONTINUE
90798A ELSE
90798A IF SQLCODE = SQL-NO-RECORD
90798A SET DECRYPTION-NOT-REQUIRED TO TRUE
ELSE
PERFORM 2005E-GATHER-ERROR-EVENT-DATA
THRU 2005E-EXIT
90798A END-IF
90798A MOVE IN-CIPHER-DATA TO
90798A WS-DECRYPTED-VALUE(WS-FIELD-COUNT)
GO TO 2005-EXIT
END-IF.
* Calculate the length of the Mask Type
PERFORM 2006-GET-LENGTH-MASK
THRU 2006-EXIT.
SET MASK-SEARCH-NOT-END TO TRUE.
PERFORM 2007-MASK-SEARCH
THRU 2007-EXIT
VARYING WS-COUNT FROM 1 BY 1
UNTIL WS-COUNT > WS-LENGTH
OR MASK-SEARCH-END.
* Seting up the Decryption switch
IF WS-MASK-CHAR IS NOT NUMERIC
MOVE 'A' TO WS-MASK-CHAR-TYPE
ELSE
MOVE 'N' TO WS-MASK-CHAR-TYPE
END-IF.
IF WS-MASK-CHAR-TYPE = 'A'
INSPECT IN-CIPHER-DATA
TALLYING WS-MASK-CHAR-COUNT FOR ALL WS-MASK-CHAR
ELSE
SET DECRYPTION-NUM-REQUIRED TO TRUE
PERFORM 2008-SETUP-SWITCH-PARA
THRU 2008-EXIT
VARYING WS-COUNT FROM 1 BY 1
UNTIL WS-COUNT > WS-LENGTH
OR DECRYPTION-NUM-NOT-REQUIRED
IF DECRYPTION-NUM-REQUIRED
MOVE 1 TO WS-MASK-CHAR-COUNT
END-IF
END-IF.
IF WS-MASK-CHAR-COUNT NOT = 0
SET DECRYPTION-REQUIRED TO TRUE
ELSE
SET DECRYPTION-NOT-REQUIRED TO TRUE
MOVE IN-CIPHER-DATA TO
WS-DECRYPTED-VALUE(WS-FIELD-COUNT)
END-IF.
2005-EXIT.
EXIT.
/
2005E-GATHER-ERROR-EVENT-DATA.
INITIALIZE WS04-ERROR-DETAIL-DATA-AREA.
SET SQL-ERROR TO TRUE.
MOVE SPACES TO
WS04-ERR-SQL-DTASTG-DTA.
STRING IN-FILE-NAME DELIMITED BY SPACE
';' DELIMITED BY SIZE
IN-FIELD-NAME DELIMITED BY SPACE
';' DELIMITED BY SIZE
INTO WS04-ERR-SQL-DTASTG-DTA
END-STRING.
MOVE SQLCODE TO WS04-ERR-ERROR-CODE.
MOVE '2005-GET-MASK-CHAR' TO WS04-ERR-PARA-NAME.
MOVE 'TBSYS002' TO WS04-ERR-FILE-NAME.
MOVE 'H' TO WS04-ERR-ERROR-TYP.
PERFORM 2006-EXIT VARYING WS-LENGTH
FROM LENGTH OF WS-MASKTYPE
BY -1
UNTIL WS-MASKTYPE(WS-LENGTH:1) NOT EQUAL TO SPACE.
2006-EXIT.
EXIT.
2007-MASK-SEARCH.
IF WS-MASKTYPE(WS-COUNT:1) NOT EQUAL '-'
MOVE WS-MASKTYPE(WS-COUNT:1) TO WS-MASK-CHAR
SET MASK-SEARCH-END TO TRUE
END-IF.
2007-EXIT.
EXIT.
2008-SETUP-SWITCH-PARA.
IF WS-MASKTYPE(WS-COUNT:1) = WS-MASK-CHAR
IF IN-CIPHER-DATA(WS-COUNT:1) NOT = WS-MASK-CHAR
SET DECRYPTION-NUM-NOT-REQUIRED
TO TRUE
ELSE
SET DECRYPTION-NUM-REQUIRED
TO TRUE
END-IF
END-IF.
2008-EXIT.
EXIT.
/
*****************************************************************
* KEY BUILDING PARA
*****************************************************************
IF SQLCODE = SQL-IO-OK
CONTINUE
ELSE
PERFORM 2010E-GATHER-ERROR-EVENT-DATA
THRU 2010E-EXIT
GO TO 2010-EXIT
END-IF.
IF WS-KF1LEN NOT = 0
MOVE WS-KEY-FIELD-1(1:WS-KF1LEN)
TO WS-KEYSTRING(1:WS-KF1LEN)
END-IF.
IF WS-KF2LEN NOT = 0
ADD 1 TO WS-KF1LEN
MOVE WS-KEY-FIELD-2(1:WS-KF2LEN)
TO WS-KEYSTRING(WS-KF1LEN:WS-KF2LEN)
END-IF.
IF WS-KF3LEN NOT = 0
ADD WS-KF1LEN TO WS-KF2LEN
MOVE WS-KEY-FIELD-3(1:WS-KF3LEN)
TO WS-KEYSTRING(WS-KF2LEN:WS-KF3LEN)
END-IF.
IF WS-KF4LEN NOT = 0
ADD WS-KF2LEN TO WS-KF3LEN
MOVE WS-KEY-FIELD-4(1:WS-KF4LEN)
TO WS-KEYSTRING(WS-KF3LEN:WS-KF4LEN)
END-IF.
IF WS-KF5LEN NOT = 0
ADD WS-KF3LEN TO WS-KF4LEN
MOVE WS-KEY-FIELD-5(1:WS-KF5LEN)
TO WS-KEYSTRING(WS-KF4LEN:WS-KF5LEN)
END-IF.
IF WS-KF6LEN NOT = 0
ADD WS-KF4LEN TO WS-KF5LEN
MOVE WS-KEY-FIELD-6(1:WS-KF6LEN)
TO WS-KEYSTRING(WS-KF5LEN:WS-KF6LEN)
END-IF.
IF WS-KF7LEN NOT = 0
ADD WS-KF5LEN TO WS-KF6LEN
MOVE WS-KEY-FIELD-7(1:WS-KF7LEN)
TO WS-KEYSTRING(WS-KF6LEN:WS-KF7LEN)
END-IF.
IF WS-KF8LEN NOT = 0
ADD WS-KF6LEN TO WS-KF7LEN
MOVE WS-KEY-FIELD-8(1:WS-KF8LEN)
TO WS-KEYSTRING(WS-KF7LEN:WS-KF8LEN)
END-IF.
IF WS-KF9LEN NOT = 0
ADD WS-KF7LEN TO WS-KF8LEN
MOVE WS-KEY-FIELD-9(1:WS-KF9LEN)
TO WS-KEYSTRING(WS-KF8LEN:WS-KF9LEN)
END-IF.
IF WS-KF10LEN NOT = 0
ADD WS-KF8LEN TO WS-KF9LEN
MOVE WS-KEY-FIELD-10(1:WS-KF10LEN)
TO WS-KEYSTRING(WS-KF9LEN:WS-KF10LEN)
END-IF.
IF WS-KF11LEN NOT = 0
ADD WS-KF9LEN TO WS-KF10LEN
MOVE WS-KEY-FIELD-11(1:WS-KF11LEN)
TO WS-KEYSTRING(WS-KF10LEN:WS-KF11LEN)
END-IF.
IF WS-KF12LEN NOT = 0
ADD WS-KF10LEN TO WS-KF11LEN
MOVE WS-KEY-FIELD-12(1:WS-KF12LEN)
TO WS-KEYSTRING(WS-KF11LEN:WS-KF12LEN)
END-IF.
IF WS-KF13LEN NOT = 0
ADD WS-KF11LEN TO WS-KF12LEN
MOVE WS-KEY-FIELD-13(1:WS-KF13LEN)
TO WS-KEYSTRING(WS-KF12LEN:WS-KF13LEN)
END-IF.
IF WS-KF14LEN NOT = 0
ADD WS-KF12LEN TO WS-KF13LEN
MOVE WS-KEY-FIELD-14(1:WS-KF14LEN)
TO WS-KEYSTRING(WS-KF13LEN:WS-KF14LEN)
END-IF.
IF WS-KF15LEN NOT = 0
ADD WS-KF13LEN TO WS-KF14LEN
MOVE WS-KEY-FIELD-15(1:WS-KF15LEN)
TO WS-KEYSTRING(WS-KF14LEN:WS-KF15LEN)
END-IF.
STRING IN-FILE-NAME DELIMITED BY SIZE
IN-FIELD-NAME DELIMITED BY SIZE
WS-KEYSTRING DELIMITED BY SIZE
INTO WS-KEYSTRING-FINAL.
2010-EXIT.
EXIT.
/
2010E-GATHER-ERROR-EVENT-DATA.
INITIALIZE WS04-ERROR-DETAIL-DATA-AREA.
SET SQL-ERROR TO TRUE.
MOVE SPACES TO
WS04-ERR-SQL-DTASTG-DTA.
STRING IN-FILE-NAME DELIMITED BY SPACE
';' DELIMITED BY SIZE
IN-FIELD-NAME DELIMITED BY SPACE
';' DELIMITED BY SIZE
INTO WS04-ERR-SQL-DTASTG-DTA
END-STRING.
MOVE SQLCODE TO WS04-ERR-ERROR-CODE.
MOVE '2010-KEY-BUILD' TO WS04-ERR-PARA-NAME.
MOVE 'TBSYS005' TO WS04-ERR-FILE-NAME.
MOVE 'H' TO WS04-ERR-ERROR-TYP.
INITIALIZE WS04-ERROR-DETAIL-DATA-AREA.
SET SQL-ERROR TO TRUE.
MOVE SQLCODE TO WS04-ERR-ERROR-CODE.
MOVE 'BASSYSP01' TO WS04-ERR-FILE-NAME.
MOVE '2110-OPEN-CURSOR-PARA' TO WS04-ERR-PARA-NAME.
MOVE 'H' TO WS04-ERR-ERROR-TYP
PERFORM R200-ERROR-HANDLING-ROUTINE
THRU R200-EXIT.
2110E-EXIT.
EXIT.
/
*****************************************************************
* If record exist then Identifying field name to be encrypted *
*****************************************************************
2120-FETCH-BASSYSP01-RCDS.
* Fetch records from BASSYSP01
EXEC SQL
FETCH BASSYSP01_C1 INTO :WS-ENCDATA
END-EXEC.
IF (SQLCODE = SQL-IO-OK)
PERFORM 2200-DECRYPT-DATA THRU 2200-EXIT
ELSE
IF SQLCODE = SQL-NO-RECORD
CONTINUE
ELSE
MOVE 'H' TO WS04-ERR-ERROR-TYP
PERFORM 2120E-GATHER-ERROR-EVENT-DATA
THRU 2120E-EXIT
END-IF
MOVE 'N' TO ARE-THERE-MORE-RECORDS
GO TO 2120-EXIT
END-IF.
SET SQL-ERROR TO TRUE.
MOVE 'BASYSYP01' TO WS04-ERR-FILE-NAME.
MOVE '2130-CLOSE-CURSOR-PARA' TO WS04-ERR-PARA-NAME.
PERFORM R200-ERROR-HANDLING-ROUTINE
THRU R200-EXIT.
2130E-EXIT.
EXIT.
/
*****************************************************************
* Preparing data to be encrypted and key values. *
*****************************************************************
2200-DECRYPT-DATA.
MOVE WS-ENCDATA TO IN-CIPHER-DATA
EXEC SQL
SELECT KEYVALUE
INTO :WS-KEYVALUE
FROM TBSYS006
WHERE
KEYLABEL = :IN-FILE-NAME
END-EXEC.
IF SQLCODE = SQL-IO-OK
CONTINUE
ELSE
PERFORM 2200E-GATHER-ERROR-EVENT-DATA
THRU 2200E-EXIT
GO TO 2200-EXIT
END-IF.
MOVE WS-KEYVALUE TO KEY-STRING OF KEYD.
MOVE OUT-DECRYPTED-VALUE TO
WS-DECRYPTED-VALUE(WS-FIELD-COUNT).
2200-EXIT.
EXIT.
/
2200E-GATHER-ERROR-EVENT-DATA.
INITIALIZE WS04-ERROR-DETAIL-DATA-AREA.
SET SQL-ERROR TO TRUE.
MOVE SPACES TO
WS04-ERR-SQL-DTASTG-DTA.
STRING IN-FILE-NAME DELIMITED BY SPACE
';' DELIMITED BY SIZE
IN-FIELD-NAME DELIMITED BY SPACE
';' DELIMITED BY SIZE
INTO WS04-ERR-SQL-DTASTG-DTA
END-STRING.
MOVE SQLCODE TO WS04-ERR-ERROR-CODE.
MOVE '2200-DECRYPT-DATA' TO WS04-ERR-PARA-NAME.
MOVE 'TBSYS006' TO WS04-ERR-FILE-NAME.
MOVE 'H' TO WS04-ERR-ERROR-TYP.
This mailing list archive is Copyright 1997-2025 by midrange.com and David Gibbs as a compilation work. Use of the archive is restricted to research of a business or technical nature. Any other uses are prohibited. Full details are available on our policy page. If you have questions about this, please contact
[javascript protected email address].
Operating expenses for this site are earned using the Amazon Associate program and Google Adsense.