172 lines
5.0 KiB
XML
172 lines
5.0 KiB
XML
<?xml version="1.0" encoding="UTF-8" ?>
|
||
<packet extend="base">
|
||
<req>
|
||
|
||
<command>
|
||
<hex>A0</hex>
|
||
</command>
|
||
<data extend="data">
|
||
<mode len="1" cn="模式">
|
||
<options>
|
||
<option cn="产生密钥">
|
||
<hex>0</hex>
|
||
</option>
|
||
<option cn="产生密钥并在 ZMK 下加密">
|
||
<hex>1</hex>
|
||
</option>
|
||
</options>
|
||
</mode>
|
||
|
||
<keyType len="3" cn="密钥类型">
|
||
密钥类型
|
||
</keyType>
|
||
|
||
<solution len="1" cn="密钥长度/LMK 下加密密钥的方案。">
|
||
密钥长度/LMK 下加密密钥的方案。
|
||
</solution>
|
||
|
||
<zmk cn="ZMK" :if="hasZmk()">
|
||
仅当模式为 1 时才显示该 ZMK 域
|
||
27位的索引号:16位机构号+3位密钥类型+8位密钥索引号
|
||
</zmk>
|
||
|
||
<keySolution len="1" cn="加密输出密钥的密钥方案" :if="1 == $packet.data.mode$option">
|
||
加密输出密钥的密钥方案。仅当模式为 1 时才显示该域
|
||
</keySolution>
|
||
|
||
<businessKey len="1" cn="业务标识" required="false">
|
||
<text>N</text>
|
||
取值 N(可选)当选定此标识时,表示密钥加密方案采用默认方式
|
||
</businessKey>
|
||
|
||
<tailSep len="1" :if=" null != $packet.data.tail " cn="尾分隔">
|
||
可选项。如果显示消息尾域,则该域必须显示。值为
|
||
“X’19”。
|
||
<hex>19</hex>
|
||
</tailSep>
|
||
|
||
<tail maxLen="32" required="false" cn="尾部">
|
||
可选项。最大长度为 32个字符。
|
||
</tail>
|
||
</data>
|
||
|
||
|
||
|
||
</req>
|
||
<res>
|
||
|
||
<command>
|
||
<hex>A1</hex>
|
||
</command>
|
||
<data>
|
||
<error len="2" cn="错误码" format="X" :catch="catchError('%s')">
|
||
<options>
|
||
<option cn="无错误">
|
||
<hex>00</hex>
|
||
</option>
|
||
<option cn="ZMK 奇偶校验错">
|
||
<hex>10</hex>
|
||
</option>
|
||
<option cn="用户存储区中没有装载密钥">
|
||
<hex>12</hex>
|
||
</option>
|
||
<option cn="LMK 错误">
|
||
LMK 错误;报告给管理员。
|
||
<hex>13</hex>
|
||
</option>
|
||
<option cn="输入数据错">
|
||
<hex>15</hex>
|
||
</option>
|
||
<option cn="无效用户存储区索引">
|
||
<hex>21</hex>
|
||
</option>
|
||
<option cn="无效的密钥方案">
|
||
<hex>26</hex>
|
||
</option>
|
||
</options>
|
||
</error>
|
||
|
||
<lmkHead len="1" cn="lmk 头">
|
||
如果是 'Z' ,lmk 16 个字节长
|
||
如果是 'X,U,S' ,lmk 32 个字节长
|
||
如果是 'Y,T' ,lmk 48 个字节长
|
||
</lmkHead>
|
||
|
||
<lmk :len="lmkLen()" cn="密钥(LMK)">
|
||
LMK 加密下的密钥。
|
||
</lmk>
|
||
|
||
<zmkHead len="1" cn="zmk 头" :if="1 == $packet.data.mode$option">
|
||
如果是 'Z' ,zmk 16 个字节长
|
||
如果是 'X,U,S' ,zmk 32 个字节长
|
||
如果是 'Y,T' ,zmk 48 个字节长
|
||
</zmkHead>
|
||
|
||
<zmk :len="zmkLen()" cn="密钥(ZMK)" :if="1 == $packet.data.mode$option">
|
||
ZMK 加密下的密钥。
|
||
</zmk>
|
||
|
||
<keyCheck :len="keyCheckLen()" cn="密钥校验值" required="false">
|
||
密钥校验值。当存在 ZMK 密钥时,以 ZMK 保护新密钥
|
||
的方案为基准,否则以 LMK 保护新密钥的方案为基准。
|
||
当保护新密钥的密钥方案为 S 时,输出 32H, KCV 计
|
||
算算法为 SM4,否则,输出 16H,KCV 计算算法为
|
||
DES/3DES
|
||
</keyCheck>
|
||
|
||
<tailSep len="1" required="false" cn="尾分隔">
|
||
可选项。如果显示消息尾域,则该域必须显示。值为 “X’19”。
|
||
<hex>19</hex>
|
||
</tailSep>
|
||
|
||
<tail maxLen="32" required="false" cn="尾部">
|
||
可选项。最大长度为 32个字符。
|
||
</tail>
|
||
</data>
|
||
|
||
|
||
|
||
</res>
|
||
<script>function lmkLen() {
|
||
if( $final.data.lmkHead.eqStr("Y") || $final.data.lmkHead.eqStr("T") ){
|
||
return 48
|
||
}else if( $final.data.lmkHead.eqStr("X") || $final.data.lmkHead.eqStr("U") ){
|
||
return 32
|
||
}
|
||
return 15
|
||
}
|
||
|
||
function zmkLen() {
|
||
if( $final.data.lmkHead.eqStr("Y") || $final.data.lmkHead.eqStr("T") ){
|
||
return 48
|
||
}else if( $final.data.lmkHead.eqStr("X") || $final.data.lmkHead.eqStr("U") ){
|
||
return 32
|
||
}
|
||
return 15
|
||
}
|
||
|
||
|
||
function keyCheckLen() {
|
||
if( null != $final.data.zmk ){
|
||
if( $final.data.zmkHead.eqStr("S") ){
|
||
return 32
|
||
}else{
|
||
return 16
|
||
}
|
||
}else{
|
||
if( $final.data.lmkHead.eqStr("S") ){
|
||
return 32
|
||
}else{
|
||
return 16
|
||
}
|
||
}
|
||
|
||
}
|
||
|
||
function hasZmk(){
|
||
return 1 == $packet.data.mode$option
|
||
}
|
||
|
||
</script>
|
||
</packet>
|