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

290 lines
10 KiB
XML
Raw Permalink 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>SC</hex>
</command>
<data extend="data">
<deKeyIndex len="27" cn="解密密钥索引">
仅当存储类型为0时有效
内部密钥索引, 接口层对外限制8位通讯层限制27位16位机构号+3位密钥类型+8位密钥索引号。前19位补0。
注意后八位密钥索引不允许输入全0
</deKeyIndex>
<algorithmKey len="2" cn="解密算法类型">
解密的算法
支持算法3DES、AES、SM1、SM4
</algorithmKey>
<scatterAlgorithmVector :len="vectorLength()" :if="hasVector()" cn="解密初始向量">
仅当算法为非ECB模式下有此域
当算法标识为3DES-CBC、DES-CBC 时该域为8B。
当算法标识为AES-CBC、SM1-CBC、SM4-CBC 时该域为16B。
取值参考数据字典
</scatterAlgorithmVector>
<deKeyScatterLevel len="1" cn="解密密钥分散级数">
密钥分散级数03
</deKeyScatterLevel>
<deScatterFactor1 len="16" :if="hasDeScatterFactor1()" cn="解密分散因子1">
仅当保护密钥分散级数不为0时存在
</deScatterFactor1>
<deScatterFactor2 len="16" :if="hasDeScatterFactor2()" cn="解密分散因子2">
仅当保护密钥分散级数不为0时存在
</deScatterFactor2>
<deScatterFactor3 len="16" :if="hasDeScatterFactor3()" cn="解密分散因子3">
仅当保护密钥分散级数不为0时存在
</deScatterFactor3>
<deScatterAlgorithmKey1 len="2" :if="hasDeScatterFactor1()" cn="解密分散算法标识1">
仅当保护密钥分散级数不为0时存在
分散算法标识,定义每一次分散的分散算法,数量与密钥分散级数一致
如果保护密钥算法类型为3DES、AES则支持算法3DES、AES
如果保护密钥算法类型为SM1、SM4则支持算法SM1、SM4
取值参考数据字典
</deScatterAlgorithmKey1>
<deScatterAlgorithmKey2 len="2" :if="hasDeScatterFactor2()" cn="解密分散算法标识2">
仅当分散级数不为0时存在同上
</deScatterAlgorithmKey2>
<deScatterAlgorithmKey3 len="2" :if="hasDeScatterFactor3()" cn="解密分散算法标识3">
仅当分散级数不为0时存在同上
</deScatterAlgorithmKey3>
<deScatterAlgorithmVector1 :len="vectorLen()" :if="hasDeScatterFactor1()" 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
</deScatterAlgorithmVector1>
<deScatterAlgorithmVector2 :len="vectorLen()" :if="hasDeScatterFactor2()" cn="解密分散算法的初始向量2">
仅当分散级数不为0时存在同上
</deScatterAlgorithmVector2>
<deScatterAlgorithmVector3 :len="vectorLen()" :if="hasDeScatterFactor3()" cn="解密分散算法的初始向量3">
仅当分散级数不为0时存在同上
</deScatterAlgorithmVector3>
<enKeyIndex len="27" cn="加密密钥索引">
仅当存储类型为0时有效
内部密钥索引, 接口层对外限制8位通讯层限制27位16位机构号+3位密钥类型+8位密钥索引号。前19位补0。
注意后八位密钥索引不允许输入全0
</enKeyIndex>
<encryptAlgFlag len="2" cn="加密密钥算法">
加密密钥算法支持3DES、AES、SM1、SM4
取值参考数据字典
</encryptAlgFlag>
<encryptIv :len="enVectorLength()" :if="hasEnVector()" cn="加密密钥IV">
仅当加密密钥算法为CBC模式时存在
加密密钥的初始向量
</encryptIv>
<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>SD</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 vectorLength(){
var algorithmKey = $packet.data.algorithmKey
if(6==algorithmKey || 8==algorithmKey ){
return 8;
}
if( 2==algorithmKey || 4==algorithmKey || 10==algorithmKey ){
return 16;
}
}
function hasVector(){
var algorithmKey = $packet.data.algorithmKey
if(2==algorithmKey || 4==algorithmKey || 10==algorithmKey || 6==algorithmKey || 8==algorithmKey){
return true;
}else{
return false;
}
}
function enVectorLength(){
var encryptAlgFlag = $packet.data.encryptAlgFlag
if(6==encryptAlgFlag || 8==encryptAlgFlag ){
return 8;
}
if( 2==encryptAlgFlag || 4==encryptAlgFlag || 10==encryptAlgFlag ){
return 16;
}
}
function hasEnVector(){
var encryptAlgFlag =$packet.data.encryptAlgFlag
if( 2==encryptAlgFlag || 4==encryptAlgFlag || 10==encryptAlgFlag || 6==encryptAlgFlag || 8==encryptAlgFlag){
return true;
}else{
return false;
}
}
function hasDeScatterFactor1(){
var deKeyScatterLevel = $packet.data.deKeyScatterLevel
if( 1 &lt;= deKeyScatterLevel ){
return true;
}else{
return false;
}
}
function hasDeScatterFactor2(){
var deKeyScatterLevel = $packet.data.deKeyScatterLevel
if( 2 &lt;= deKeyScatterLevel ){
return true;
}else{
return false;
}
}
function hasDeScatterFactor3(){
var deKeyScatterLevel = $packet.data.deKeyScatterLevel
if( 3 == deKeyScatterLevel){
return true;
}else{
return false;
}
}
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>