Files
ctg-app-ui/lps/etc/pkg/LPS_CHECKMESSAGEMAC_PKG.XML
2021-01-12 22:04:24 +08:00

68 lines
2.5 KiB
XML

<?xml version='1.0' encoding='UTF-8'?>
<Package>
<!--校验报文MAC-->
<Function name="CheckMessageMAC">
<Input>SUB_AC|PIN_DAT|</Input>
<Output>MSG_CD|</Output>
<Process>
<!--交易设置-->
<Set>MAC=RIGHTSTR($PIN_DAT,8)</Set>
<Set>RDM_NO=SUBSTR(RIGHTSTR($PIN_DAT,16),1,8)</Set>
<Set>PIN_DAT_LEN=STRLEN($PIN_DAT)</Set>
<Set>TXN_DAT_LEN=SUB($PIN_DAT_LEN,16)</Set>
<Set>TXN_DAT=SUBSTR($PIN_DAT,1,$TXN_DAT_LEN)</Set>
<Set>ADD_CHAR_LEN=SUB(16,MOD($TXN_DAT_LEN,16))</Set>
<!--根据取模结果判断需要补充的字符位数-->
<If condition="$ADD_CHAR_LEN=1">
<Set>ADD_CHAR_LEN=17</Set>
</If>
<Set>ADD_CHAR=SUBSTR(#ADD_CHAR,1,$ADD_CHAR_LEN)</Set>
<!--加密机参数设置-->
<Set>MK_VER=01</Set>
<Set>MK_IDX=23</Set>
<Set>MK_DVS_NUM=2</Set>
<Set>MK_DVS_DAT=STRCAT($MK_VER,SUBSTR($SUB_AC,7,14))</Set>
<Set>GC_KEY_FLG=1</Set>
<Set>GC_DAT=STRCAT($RDM_NO,80000000)</Set>
<Set>MAC_PAD_FLG=0</Set>
<Set>MAC_IV_DAT=0000000000000000</Set>
<Set>MAC_DAT=STRCAT($TXN_DAT,$ADD_CHAR)</Set>
<Set>MAC_DAT_LEN=DIV(STRLEN($MAC_DAT),2)</Set>
<Set>MAC_LEN_FLG=1</Set>
<!--调用加密机校验报文MAC-->
<Exec func="HSM:HsmMACVerify4C">
<Arg name="MkVer" value="$MK_VER"/>
<Arg name="MkIndex" value="$MK_IDX"/>
<Arg name="MkDvsNum" value="$MK_DVS_NUM"/>
<Arg name="MkDvsData" value="$MK_DVS_DAT"/>
<Arg name="GCKEY_Flag" value="$GC_KEY_FLG"/>
<Arg name="GCDATA" value="$GC_DAT"/>
<Arg name="MACPadflag" value="$MAC_PAD_FLG"/>
<Arg name="MacIvData" value="$MAC_IV_DAT"/>
<Arg name="MACdata" value="$MAC_DAT"/>
<Arg name="MACdataLen" value="$MAC_DAT_LEN"/>
<Arg name="MAClenFlag" value="$MAC_LEN_FLG"/>
<Arg name="MAC" value="$MAC"/>
</Exec>
<If condition="~RetCod!=0">
<Exec func="PUB:CmpSetMsg">
<Arg name="MsgCd" value="LPS81018"/>
<Arg name="MsgDat" value="验证报文MAC失败"/>
</Exec>
<Return/>
</If>
<!--交易成功-->
<Exec func="PUB:CmpSetMsg">
<Arg name="MsgCd" value="LPS00000"/>
<Arg name="MsgDat" value="验证报文MAC成功"/>
</Exec>
</Process>
</Function>
</Package>