sydapi/DProto/SF.xml
2021-08-12 10:47:32 +08:00

178 lines
5.8 KiB
XML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?xml version="1.0" encoding="UTF-8" ?>
<packet extend="base">
<req>
<command>
<hex>SF</hex>
</command>
<data extend="data">
<enKeyIndex len="27" cn="加密密钥索引">
仅当存储类型为0时有效
内部密钥索引, 接口层对外限制8位通讯层限制27位16位机构号+3位密钥类型+8位密钥索引号。前19位补0。
注意后八位密钥索引不允许输入全0
</enKeyIndex>
<algorithmKey len="2" cn="加密算法类型">
加密算法类型
支持算法3DES、AES、SM1、SM4
</algorithmKey>
<iv :len="ivLen()" :if="useCbc()" cn="加密算法IV">
仅当算法为非ECB模式下有此域
当算法标识为3DES-CBC 时该域为8B。
当算法标识为AES-CBC、SM1-CBC、SM4-CBC 时该域为16B。
取值参考数据字典
</iv>
<enKeyScatterLevel len="1" cn="加密密钥分散级数">
密钥分散级数03
</enKeyScatterLevel>
<enScatterFactor1 len="16" :if="hasEnScatterFactor1()" cn="加密分散因子1">
仅当保护密钥分散级数不为0时存在
</enScatterFactor1>
<enScatterFactor2 len="16" :if="hasEnScatterFactor2()" cn="加密分散因子2">
仅当保护密钥分散级数不为0时存在
</enScatterFactor2>
<enScatterFactor3 len="16" :if="hasEnScatterFactor3()" cn="加密分散因子3">
仅当保护密钥分散级数不为0时存在
</enScatterFactor3>
<enScatterAlgorithmKey1 len="2" :if="hasEnScatterFactor1()" cn="加密分散算法标识1">
仅当保护密钥分散级数不为0时存在
分散算法标识,定义每一次分散的分散算法,数量与密钥分散级数一致
如果保护密钥算法类型为3DES、AES则支持算法3DES、AES
如果保护密钥算法类型为SM1、SM4则支持算法SM1、SM4
取值参考数据字典
</enScatterAlgorithmKey1>
<enScatterAlgorithmKey2 len="2" :if="hasEnScatterFactor2()" cn="加密分散算法标识2">
仅当分散级数不为0时存在同上
</enScatterAlgorithmKey2>
<enScatterAlgorithmKey3 len="2" :if="hasEnScatterFactor3()" cn="加密分散算法标识3">
仅当分散级数不为0时存在同上
</enScatterAlgorithmKey3>
<enScatterAlgorithmVector1 :len="vectorLen()" :if="hasEnScatterFactor1()" cn="加密分散算法的初始向量1">
仅当分散级数不为0时存在
分散算法的初始向量,定义每一次分散的分散算法的初始向量,数量与分散级数一致
即使对应分散算法模式为ECB也需要填充0x00
填充数量和CBC模式保持一致
3DES-ECB、3DES-CBC、DES-ECB、DES-CBC 为16H
SM1-ECB、SM1-CBC、SM4-ECB、SM4-CBC、
AES-ECB、AES-CBC 为32H
</enScatterAlgorithmVector1>
<enScatterAlgorithmVector2 :len="vectorLen()" :if="hasEnScatterFactor2()" cn="加密分散算法的初始向量2">
仅当分散级数不为0时存在同上
</enScatterAlgorithmVector2>
<enScatterAlgorithmVector3 :len="vectorLen()" :if="hasEnScatterFactor3()" cn="加密分散算法的初始向量3">
仅当分散级数不为0时存在同上
</enScatterAlgorithmVector3>
<inputDataLen len="4" :value="inputDataLen()" cn="输入数据长度">
待加密机主密钥解密的数据长度
</inputDataLen>
<inputData cn="输入数据">
待加密机主密钥解密的数据
</inputData>
</data>
</req>
<res>
<command>
<hex>SH</hex>
</command>
<data>
<error len="2" cn="错误代码" format="X" :catch="catchError('%s')">
<options>
<option cn="成功">
<hex>00</hex>
</option>
</options>
</error>
<infoLen len="4" cn="密钥密文长度">
离散密钥加密的数据密文长度
</infoLen>
<info :len="getInfoLen()" cn="密钥密文">
离散密钥加密的数据密文
</info>
</data>
</res>
<script>
function useCbc(){
var algorithmKey = $packet.data.algorithmKey
if( 6==algorithmKey || 8==algorithmKey || 2==algorithmKey || 4==algorithmKey || 10==algorithmKey ){
return true;
}else{
return false;
}
}
function ivLen() {
var algorithmKey = $packet.data.algorithmKey
if(8==algorithmKey ){
return 8;
}
if( 2==algorithmKey || 4==algorithmKey || 10==algorithmKey){
return 16;
}
}
function hasEnScatterFactor1(){
var enKeyScatterLevel = $packet.data.enKeyScatterLevel
if( 1 &lt;= enKeyScatterLevel ){
return true;
}else{
return false;
}
}
function hasEnScatterFactor2(){
var enKeyScatterLevel = $packet.data.enKeyScatterLevel
if( 2 &lt;= enKeyScatterLevel ){
return true;
}else{
return false;
}
}
function hasEnScatterFactor3(){
var enKeyScatterLevel = $packet.data.enKeyScatterLevel
if( 3 == enKeyScatterLevel){
return true;
}else{
return false;
}
}
function vectorLen(){
var algorithmKey = $packet.data.algorithmKey
if(5==algorithmKey || 6==algorithmKey || 7==algorithmKey || 8==algorithmKey ){
return 8;
}
if( 1==algorithmKey || 2==algorithmKey || 3==algorithmKey || 4==algorithmKey || 9==algorithmKey || 10==algorithmKey){
return 16;
}
}
function inputDataLen(){
var data = $packet.data;
return data.inputData.length;
}
function getInfoLen(){
return Util.a2i( $final.getSection('data').getSection('infoLen') )
}
</script>
</packet>