/************************** REXX *************************************/ /* Modified token generation */ /************************** REXX *************************************/ SAY " T31X sample"; SAY " -----------"; exp_key_id = copies('00'x,64) ; src_key_id = copies('00'x,64) ; rc = GEN_SRC(); rc = EXP_SRC(); rc = tr31_crt() exit 0; /* gen mac token */ GEN_SRC: rcode = 'FFFFFFFF'x ; reason = 'FFFFFFFF'x ; rule_array_count = '00000003'x rule_array = 'INTERNALDOUBLE WRAP-ENH' exit_data_length = 0 ; exit_data = '' ; pucDummy = 0 ; pucZero = '00000000'x key_type = 'DATAM ' ; /************************ RJEDEBUG ********************************/ SAY " KTB RULE CNT: >" || C2X(rule_array_count) || "<"; SAY " KTB RULE STR: >" || rule_array || "<"; SAY " KTB KEY TYPE: >" || key_type || "<"; SAY " KTB KEY TOKEN: >" || LENGTH(src_key_id) || "<"; SAY " >" || C2X(LEFT( src_key_id, 32)) || "<"; SAY " >" || C2X(RIGHT(src_key_id, 32)) || "<"; SAY " KTB KEY VALUE: >" || C2X(pucDummy) || "<"; /************************ RJEDEBUG ********************************/ address linkpgm 'CSNBKTB' , 'rcode' , 'reason' , 'exit_data_length' , 'exit_data' , 'src_key_id' , 'key_type' , 'rule_array_count' , 'rule_array' , 'pucDummy' 'pucDummy' 'pucDummy' 'pucDummy' 'pucDummy' , 'pucDummy' 'pucZero' 'pucDummy' 'pucDummy' ; /************************ RJEDEBUG ********************************/ SAY " KTB RET CODE: >" || C2X(rcode) || "<"; SAY " KTB REAS CODE: >" || C2X(reason) || "<"; SAY " KTB GEN TOKEN OUT1>" || LENGTH(src_key_id) || "<"; SAY " >" || C2X(LEFT( src_key_id, 32)) || "<"; SAY " >" || C2X(RIGHT(src_key_id, 32)) || "<"; /************************ RJEDEBUG ********************************/ if c2d(rcode) > 0 then do say 'CSNBKTB 1 RC= ' c2x(rcode) ; say 'CSNBKTB 1 RSN=' c2x(reason) ; end rcode = 'FFFFFFFF'x ; reason = 'FFFFFFFF'x ; exit_data_length = 0 ; exit_data = '' ; key_form = 'OP ' ; key_length = 'DOUBLE ' ; key_type_1 = 'TOKEN ' ; key_type_2 = '' ; KEK_key_1 = copies('00'x,64) ; KEK_key_2 = copies('00'x,64) ; gen_key_2 = copies('00'x,64) ; /************************ RJEDEBUG ********************************/ SAY " KGN KEY FORM: >" || key_form || "<"; SAY " KGN KEY LEN: >" || key_length || "<"; SAY " KGN KEY TYPE1: >" || key_type_1 || "<"; SAY " KGN KEY TYPE2: >" || key_type_2 || "<"; SAY " KGN KEK 1: >" || LENGTH(KEK_key_1) || "<"; SAY " >" || C2X(LEFT( KEK_key_1, 32)) || "<"; SAY " >" || C2X(RIGHT(KEK_key_1, 32)) || "<"; SAY " KGN KEK 2: >" || LENGTH(KEK_key_2) || "<"; SAY " >" || C2X(LEFT( KEK_key_2, 32)) || "<"; SAY " >" || C2X(RIGHT(KEK_key_2, 32)) || "<"; SAY " KGN GEN TOKEN 1: >" || LENGTH(src_key_id) || "<"; SAY " >" || C2X(LEFT( src_key_id, 32)) || "<"; SAY " >" || C2X(RIGHT(src_key_id, 32)) || "<"; SAY " KGN GEN TOKEN 2: >" || LENGTH(gen_key_2) || "<"; SAY " >" || C2X(LEFT( gen_key_2, 32)) || "<"; SAY " >" || C2X(RIGHT(gen_key_2, 32)) || "<"; /************************ RJEDEBUG ********************************/ address linkpgm 'CSNBKGN' , 'rcode' , 'reason' , 'exit_data_length' , 'exit_data' , 'key_form' , 'key_length' , 'key_type_1' , 'key_type_2' , 'KEK_key_1' , 'KEK_key_2' , 'src_key_id' , 'gen_key_2' ; /************************ RJEDEBUG ********************************/ SAY " KGN RET CODE: >" || C2X(rcode) || "<"; SAY " KGN REAS CODE: >" || C2X(reason) || "<"; SAY " KGN GEN TOKEN OUT1>" || LENGTH(src_key_id) || "<"; SAY " >" || C2X(LEFT( src_key_id, 32)) || "<"; SAY " >" || C2X(RIGHT(src_key_id, 32)) || "<"; SAY " KGN GEN TOKEN OUT2>" || LENGTH(gen_key_2) || "<"; SAY " >" || C2X(LEFT( gen_key_2, 32)) || "<"; SAY " >" || C2X(RIGHT(gen_key_2, 32)) || "<"; /************************ RJEDEBUG ********************************/ if c2d(rcode) > 0 then do say 'CSNBKGN 1 RC= ' c2x(rcode) ; say 'CSNBKGN 1 RSN=' c2x(reason) ; end return 0 /*------------------------------------------------------------------*/ /* Generate EXPORTER / IMPORTER */ /*------------------------------------------------------------------*/ EXP_SRC: exp_key_tok = COPIES("00"x, 64); rcode = 'FFFFFFFF'x ; reason = 'FFFFFFFF'x ; exit_data_length = 0 ; exit_data = '' ; rule_array = 'DES INTERNALDOUBLE KEY WRAP-ENH' rlen = LENGTH(rule_array); rcnt = (rlen + 7)%8; rule_array_count = D2C(rcnt, 4); key_type = "EXPORTER" ; key_valu = "0123456789ABCDEFFEDCBA9876543210"x; dummy_val= "0000000000000000"x; /************************ RJEDEBUG ********************************/ SAY " KTB RULE CNT: >" || C2X(rule_array_count) || "<"; SAY " KTB RULE STR: >" || rule_array || "<"; SAY " KTB KEY TYPE: >" || key_type || "<"; SAY " KTB KEY VALU: >" || C2X(key_valu) || "<"; SAY " KTB KEY TOKEN: >" || LENGTH(exp_key_tok) || "<"; /************************ RJEDEBUG ********************************/ address linkpgm 'CSNBKTB' , 'rcode' , 'reason' , 'exit_data_length' , 'exit_data' , 'exp_key_tok', 'key_type' , 'rule_array_count' 'rule_array', 'key_valu' , 'dummy_val' 'dummy_val', 'dummy_val' 'dummy_val', 'dummy_val' 'dummy_val', 'dummy_val' 'dummy_val' ; /************************ RJEDEBUG ********************************/ SAY " KTB RET CODE: >" || C2X(rcode) || "<"; SAY " KTB REAS CODE: >" || C2X(reason) || "<"; SAY " KTB GEN TOKEN OUT1>" || LENGTH(exp_key_tok) || "<"; SAY " >" || C2X(LEFT( exp_key_tok, 32)) || "<"; SAY " >" || C2X(RIGHT(exp_key_tok, 32)) || "<"; SAY " --------------------"; /************************ RJEDEBUG ********************************/ rcode = 'FFFFFFFF'x ; reason = 'FFFFFFFF'x ; exit_data_length = 0 ; exit_data = '' ; key_type = "DATAM "; kex_out_key = COPIES("00"x, 64); /************************ RJEDEBUG ********************************/ SAY " KEX KEY TYPE: >" || key_type || "<"; SAY " KEX KEY TYPE2: >" || key_type_2 || "<"; SAY " KEX SRC: >" || LENGTH(src_key_id) || "<"; SAY " >" || C2X(LEFT( src_key_id, 32)) || "<"; SAY " >" || C2X(RIGHT(src_key_id, 32)) || "<"; SAY " KEX KEK: >" || LENGTH(exp_key_tok) || "<"; SAY " >" || C2X(LEFT( exp_key_tok, 32)) || "<"; SAY " >" || C2X(RIGHT(exp_key_tok, 32)) || "<"; /************************ RJEDEBUG ********************************/ address linkpgm 'CSNBKEX' , 'rcode' , 'reason' , 'exit_data_length' , 'exit_data' , 'key_type' , 'src_key_id' , 'exp_key_tok', 'kex_out_key' ; /************************ RJEDEBUG ********************************/ SAY " KEX RET CODE: >" || C2X(rcode) || "<"; SAY " KEX REAS CODE: >" || C2X(reason) || "<"; SAY " KEX OUT TOKEN: >" || LENGTH(kex_out_key) || "<"; SAY " >" || C2X(LEFT( kex_out_key, 32)) || "<"; SAY " >" || C2X(RIGHT(kex_out_key, 32)) || "<"; SAY " --------------------"; /************************ RJEDEBUG ********************************/ src_key_ext = kex_out_key ; return 0 /* TR31 create */ tr31_crt: rcode = 'FFFFFFFF'x ; reason = 'FFFFFFFF'x ; exit_data_length = 0 ; exit_data = '' ; rule_array_count = '00000003'x rule_array = 'VARDRV-BISOMAC3 GEN-ONLY' key_ver_num = '00' ; key_field_len = '00000018'x source_key_ID_len = '00000040'x source_key_ID = src_key_ext; unwrap_KEK_ID_len = '00000040'x ; unwrap_KEK_ID = exp_key_tok ; wrap_KEK_ID_len = '00000040'x ; wrap_KEK_ID = exp_key_tok ; opt_blks_len = '00000000'x ; opt_blks = ''; tr31_blk_len = '00000080'x tr31_blk = copies('00'x,128) ; /************************ RJEDEBUG ********************************/ /* let's play with the rules */ /*----------------------------------------------------------------*/ rule_array_count = "00000004"x rule_array = "VARXOR-AISOMAC3 GEN-ONLYINCL-CV "; rule_array_count = "00000004"x rule_array = "VARDRV-BISOMAC3 GEN-ONLYINCL-CV "; rule_array_count = "00000004"x rule_array = "VARXOR-AISOMAC3 GENVER INCL-CV "; rule_array_count = "00000004"x rule_array = "VARXOR-AISOMAC3 GEN-ONLYINCL-CV "; rule_array_count = "00000004"x rule_array = "VARDRV-BISOMAC3 GENVER INCL-CV "; rule_array_count = "00000004"x rule_array = "VARDRV-BISOMAC3 GEN-ONLYINCL-CV "; rule_array_count = '00000003'x rule_array = 'VARDRV-BISOMAC3 GENVER ' rule_array_count = "00000004"x rule_array = "VARDRV-BISOMAC3 GENVER INCL-CV "; rule_array_count = '00000003'x rule_array = 'VARXOR-AISOMAC3 GENVER ' rule_array_count = '00000003'x rule_array = 'VARDRV-BISOMAC3 GENVER ' /************************ RJEDEBUG ********************************/ /************************ RJEDEBUG ********************************/ SAY " T31X RULE CNT: >" || C2X(rule_array_count) || "<"; SAY " T31X RULE STR: >" || rule_array || "<"; SAY " T31X KEY VER NUM: >" || key_ver_num || "<"; SAY " T31X SRC FLD LEN: >" || C2X(key_field_len) || "<"; SAY " T31X SRC KEY LEN: >" || C2X(source_key_ID_len) || "<"; SAY " >" || C2X(LEFT( source_key_ID, 32)) || "<"; SAY " >" || C2X(RIGHT(source_key_ID, 32)) || "<"; SAY " T31X SRC UWRAP LEN:>" || C2X(unwrap_KEK_ID_len) || "<"; SAY " T31X SRC WRAP LEN: >" || C2X(wrap_KEK_ID_len) || "<"; SAY " >" || C2X(LEFT( wrap_KEK_ID, 32)) || "<"; SAY " >" || C2X(RIGHT(wrap_KEK_ID, 32)) || "<"; SAY " T31X OPT BLK LEN: >" || C2X(opt_blks_len) || "<"; SAY " T31X OUT BLK LEN: >" || C2X(tr31_blk_len) || "<"; /************************ RJEDEBUG ********************************/ address linkpgm 'CSNBT31X' , 'rcode' 'reason' 'exit_data_length' 'exit_data' , 'rule_array_count' 'rule_array' , 'key_ver_num' , 'key_field_len' , 'source_key_ID_len' , 'source_key_ID' , 'unwrap_KEK_ID_len' , 'unwrap_KEK_ID' , 'wrap_KEK_ID_len' , 'wrap_KEK_ID' , 'opt_blks_len' , 'opt_blks' , 'tr31_blk_len' , 'tr31_blk' ; /************************ RJEDEBUG ********************************/ SAY " T31X RETCODE: >" || C2X(rcode) || "<"; SAY " T31X REASCODE: >" || C2X(reason) || "<"; SAY " T31X BLK LEN: >" || C2X(tr31_blk_len) || "<"; blk_len = C2D(tr31_blk_len) n = 1; DO WHILE(n < blk_len) blkx = SUBSTR(tr31_blk, n, 32); SAY " >" || C2X(blkx) || "<"; n = n + 32; END; /************************ RJEDEBUG ********************************/ say ' -------------- '; say ' T31X Ret is = ' c2x(rcode) say ' T31X Reas is = ' c2x(reason) say ' -------------- '; return 0