测试接口并修改一些错误
This commit is contained in:
@@ -179,6 +179,7 @@ interface SydSYMApi {
|
||||
* @param fullMode 填充模式:0为饥饿模式,1为贪婪模式
|
||||
* @param pInData 消息数据
|
||||
* @param iv IV
|
||||
* @param block 消息块号
|
||||
* @return
|
||||
* iv: IV 数据域
|
||||
* msg_all: 消息数据
|
||||
|
||||
@@ -44,6 +44,8 @@ public interface SydGenApi {
|
||||
|
||||
/**
|
||||
* 生成一个对称密钥(*) -> pass (对比之前添加了可产生ZMK加密下的密钥)
|
||||
*
|
||||
* 默认加密输出密钥的密钥方案为X,业务标识为N。
|
||||
* @param mode 是否产生ZMK加密下的密钥,0-产生密钥。1-产生密钥并在ZMK下加密
|
||||
* @param keyType 密钥类型
|
||||
* @param solution 密钥方案(LMK) 密钥长度/LMK下加密密钥的方案。
|
||||
|
||||
@@ -472,6 +472,7 @@ public class SydApi4j implements SydApi {
|
||||
|
||||
}
|
||||
|
||||
// 测试通过
|
||||
@Override
|
||||
public RetWrap genComposeKey(String[] keys) {
|
||||
|
||||
@@ -502,8 +503,8 @@ public class SydApi4j implements SydApi {
|
||||
data.put("flag", 'N');
|
||||
|
||||
data.put("split", ";");
|
||||
data.put("zmk", "Z");
|
||||
data.put("lmk", "Z");
|
||||
data.put("zmk", "X");
|
||||
data.put("lmk", "X");
|
||||
data.put("kcvType", "0");
|
||||
|
||||
ByteBuffer bb = proto.rend(packet);
|
||||
@@ -530,7 +531,7 @@ public class SydApi4j implements SydApi {
|
||||
System.arraycopy(lmkHeads, 0, bs, 0, lmkHeads.length);
|
||||
System.arraycopy(lmks, 0, bs, lmkHeads.length, lmks.length);
|
||||
retWrap.put("lmkKey", bs);
|
||||
retWrap.put("keyCheck", ((PacketSection) ret.get("keyCheck")).getBytes());
|
||||
retWrap.put("keyCheck", ((PacketSection) ret.get("kcv")).getBytes());
|
||||
return retWrap;
|
||||
}
|
||||
}
|
||||
@@ -538,6 +539,7 @@ public class SydApi4j implements SydApi {
|
||||
}
|
||||
|
||||
|
||||
// 测试通过
|
||||
@Override
|
||||
public RetWrap genComposeKey(String keyType, char keySolution, String keyClearPattern) {
|
||||
|
||||
@@ -2179,6 +2181,7 @@ public class SydApi4j implements SydApi {
|
||||
return rw;
|
||||
}
|
||||
|
||||
// 测试通过
|
||||
@Override
|
||||
public String GenerateRandom(int nRandomSize) {
|
||||
//获取协议
|
||||
@@ -2385,6 +2388,7 @@ public class SydApi4j implements SydApi {
|
||||
}
|
||||
|
||||
|
||||
// 测试通过
|
||||
@Override
|
||||
public RetWrap SM3Hash(int packSn, String userId, byte[] publicKey, byte[] msg, byte[] filterData) {
|
||||
Proto76 proto = new Proto76();
|
||||
@@ -2427,6 +2431,7 @@ public class SydApi4j implements SydApi {
|
||||
}
|
||||
}
|
||||
|
||||
// 测试通过
|
||||
@Override
|
||||
public RetWrap SM2OrRSAGenKeyPair(int keyType, String index, int length) {
|
||||
|
||||
@@ -2449,7 +2454,7 @@ public class SydApi4j implements SydApi {
|
||||
packet.put("header", sn.getSn().array());
|
||||
data.put("algorithmId$option", keyType);
|
||||
data.put("keyLength", keyLength);
|
||||
//data.put("flag", "P");
|
||||
data.put("flag", "P");
|
||||
data.put("index", SYMUtil.genPrivateKeyMark(index, "000", "00000001"));
|
||||
data.put("startTime", date);
|
||||
data.put("endTime", date);
|
||||
@@ -2608,6 +2613,7 @@ public class SydApi4j implements SydApi {
|
||||
}
|
||||
|
||||
//1.1生成一个对称密钥(*) -> pass (对比之前添加了可产生ZMK加密下的密钥)
|
||||
// 测试通过
|
||||
public RetWrap genSymKey(int mode, String keyType, char solution, String zmk) {
|
||||
ProtoA0 proto = new ProtoA0();
|
||||
HashMap<String, Object> packet = new HashMap();
|
||||
@@ -3285,6 +3291,7 @@ public class SydApi4j implements SydApi {
|
||||
}
|
||||
}
|
||||
|
||||
// 测试通过
|
||||
@Override
|
||||
public byte[] encryptByPk(int alg, String pk, byte[] data) {
|
||||
|
||||
@@ -3751,6 +3758,7 @@ public class SydApi4j implements SydApi {
|
||||
return ctx;
|
||||
}
|
||||
|
||||
// 测试通过
|
||||
@Override
|
||||
public RetWrap SM2GenSessionKey(String publicKey) {
|
||||
// 获取协议
|
||||
@@ -4441,7 +4449,7 @@ public class SydApi4j implements SydApi {
|
||||
* @return 所计算出的MAC hex 格式
|
||||
*/
|
||||
public byte[] MAC_Data(String TAK, String infoData, String IV) {
|
||||
ProtoMA proto = new ProtoMA();
|
||||
ProtoMAXF proto = new ProtoMAXF();
|
||||
|
||||
// 填充数据
|
||||
HashMap<String, Object> packet = new HashMap<String, Object>();
|
||||
@@ -4458,8 +4466,6 @@ public class SydApi4j implements SydApi {
|
||||
|
||||
data.put("TAK", TAK);
|
||||
|
||||
|
||||
infoData += "80";
|
||||
while (infoData.length() % 16 != 0) {
|
||||
infoData += "00";
|
||||
}
|
||||
@@ -4504,6 +4510,7 @@ public class SydApi4j implements SydApi {
|
||||
* @param iv IV
|
||||
* @return 所计算出的MAC
|
||||
*/
|
||||
// 测试通过
|
||||
public byte[] _calcPBOCMAC(int mode, int keyType, String key, byte[] odata, int block, byte[] iv) {
|
||||
ProtoMU proto = new ProtoMU();
|
||||
|
||||
@@ -5297,6 +5304,7 @@ public class SydApi4j implements SydApi {
|
||||
}
|
||||
|
||||
|
||||
// 测试通过
|
||||
@Override
|
||||
public RetWrap outputKey(String keyType, char solution, String zmk, String key) {
|
||||
|
||||
@@ -5354,6 +5362,7 @@ public class SydApi4j implements SydApi {
|
||||
return retWrap;
|
||||
}
|
||||
|
||||
// 测试通过
|
||||
@Override
|
||||
public RetWrap inputKey(String keyType, char solution, String zmk, String key) {
|
||||
|
||||
@@ -5488,6 +5497,7 @@ public class SydApi4j implements SydApi {
|
||||
* @return RetWrap
|
||||
* lmkkey lmk 头 + LMK 加密下的密钥。
|
||||
*/
|
||||
// 测试通过
|
||||
public RetWrap conversionKey(String keyType, String key, char solution) {
|
||||
|
||||
ProtoB0 proto = new ProtoB0();
|
||||
@@ -5547,6 +5557,7 @@ public class SydApi4j implements SydApi {
|
||||
* @return zmkKey: ZMK 加密下的ZPK
|
||||
* keyCheck: 密钥校验值。
|
||||
*/
|
||||
// 测试通过
|
||||
public RetWrap changZMK2LMK(String zmki, String zmk) {
|
||||
|
||||
ProtoBY proto = new ProtoBY();
|
||||
@@ -5561,7 +5572,7 @@ public class SydApi4j implements SydApi {
|
||||
data.put("zmk", zmk);
|
||||
data.put("separator", ";");
|
||||
data.put("zmkSolution", "X");
|
||||
data.put("lmkSolution", "Z");
|
||||
data.put("lmkSolution", "X");
|
||||
data.put("keyCheckType", "0");
|
||||
|
||||
ByteBuffer bb = proto.rend(packet);
|
||||
@@ -5615,6 +5626,7 @@ public class SydApi4j implements SydApi {
|
||||
* EQUIPNO: 设备机具号
|
||||
* SOFTVERSION: 设备内部软件版本号
|
||||
*/
|
||||
// 测试通过
|
||||
@Override
|
||||
public RetWrap getVersion(String num) {
|
||||
ProtoHV proto = new ProtoHV();
|
||||
@@ -5835,6 +5847,7 @@ public class SydApi4j implements SydApi {
|
||||
* @param infoData 加押数据
|
||||
* @return MAC: 密押,默认为8H
|
||||
*/
|
||||
// 测试通过
|
||||
public RetWrap impose(String keyType, String key, byte[] infoData) {
|
||||
// 获取协议
|
||||
Proto62 proto = new Proto62();
|
||||
@@ -5887,6 +5900,7 @@ public class SydApi4j implements SydApi {
|
||||
* @param infoData 加押数据
|
||||
* @return 是否正确
|
||||
*/
|
||||
// 测试通过
|
||||
public Boolean verifyImpose(String keyType, String key, byte[] secret, byte[] infoData) {
|
||||
// 获取协议
|
||||
Proto63 proto = new Proto63();
|
||||
@@ -5938,6 +5952,7 @@ public class SydApi4j implements SydApi {
|
||||
* @return infoLen: 返回原数据长度
|
||||
* info: 信息数据
|
||||
*/
|
||||
// 测试通过
|
||||
public RetWrap encryAndDecry(String keyType, String key, byte[] infoData) {
|
||||
// 获取协议
|
||||
Proto64 proto = new Proto64();
|
||||
@@ -5979,7 +5994,7 @@ public class SydApi4j implements SydApi {
|
||||
}
|
||||
RetWrap rw = new RetWrap();
|
||||
rw.put("infoLen", ((PacketSection) ret.get("infoLen")).getString());
|
||||
rw.put("info", ((PacketSection) ret.get("info")).getString());
|
||||
rw.put("info", ((PacketSection) ret.get("info")).getBytes());
|
||||
return rw;
|
||||
}
|
||||
|
||||
@@ -5993,6 +6008,7 @@ public class SydApi4j implements SydApi {
|
||||
* @return infoLen: 密文数据长度
|
||||
* info: 密文数据
|
||||
*/
|
||||
// 测试通过
|
||||
public RetWrap switchEncry(String keyType, String srcKey, String aimKey, byte[] infoData) {
|
||||
// 获取协议
|
||||
Proto65 proto = new Proto65();
|
||||
@@ -6044,6 +6060,7 @@ public class SydApi4j implements SydApi {
|
||||
* @param pin PIN数据
|
||||
* @return PIN数据
|
||||
*/
|
||||
// 测试通过
|
||||
public byte[] encryAndDecry4PIN(String key, byte[] pin) {
|
||||
// 获取协议
|
||||
Proto66 proto = new Proto66();
|
||||
@@ -6184,6 +6201,7 @@ public class SydApi4j implements SydApi {
|
||||
* @return keyLength: 公钥加密的密文长度
|
||||
* key: 公钥加密的密文的DER编码
|
||||
*/
|
||||
// 测试通过
|
||||
public RetWrap LMK2SM2(byte[] pk, String key) {
|
||||
// 获取协议
|
||||
Proto71 proto = new Proto71();
|
||||
@@ -6220,7 +6238,7 @@ public class SydApi4j implements SydApi {
|
||||
}
|
||||
RetWrap rw = new RetWrap();
|
||||
rw.put("keyLength", ((PacketSection) ret.get("keyLength")).getString());
|
||||
rw.put("key", ((PacketSection) ret.get("key")).getString());
|
||||
rw.put("key", ((PacketSection) ret.get("key")).getBytes());
|
||||
return rw;
|
||||
}
|
||||
|
||||
@@ -6291,6 +6309,7 @@ public class SydApi4j implements SydApi {
|
||||
* @return filterData: 过渡消息数据.只对“消息块号”为 2、1 时有效
|
||||
* hash: hash
|
||||
*/
|
||||
// 测试通过
|
||||
public RetWrap conutHash(int hashType, int packSn, byte[] msg, byte[] filterData) {
|
||||
Proto7D proto = new Proto7D();
|
||||
HashMap<String, Object> packet = new HashMap();
|
||||
@@ -6339,6 +6358,7 @@ public class SydApi4j implements SydApi {
|
||||
* @param checkValue 校验值
|
||||
* @return 是否成功
|
||||
*/
|
||||
// 测试通过
|
||||
public Boolean loadKey(String index, String key, String checkValue) {
|
||||
ProtoLB proto = new ProtoLB();
|
||||
HashMap<String, Object> packet = new HashMap();
|
||||
@@ -6350,8 +6370,8 @@ public class SydApi4j implements SydApi {
|
||||
data.put("indexFlag", "K");
|
||||
data.put("index", index);
|
||||
data.put("key", key);
|
||||
data.put("checkFlag", "P");
|
||||
data.put("checkValue", checkValue);
|
||||
// data.put("checkFlag", "P");
|
||||
// data.put("checkValue", checkValue);
|
||||
|
||||
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
|
||||
Date dt = new Date();
|
||||
@@ -6394,6 +6414,7 @@ public class SydApi4j implements SydApi {
|
||||
* @param index 索引地址,指示用户密钥存储区的27位地址
|
||||
* @return key: 被加密的密钥
|
||||
*/
|
||||
// 测试通过
|
||||
@Override
|
||||
public RetWrap readKey(String index) {
|
||||
ProtoLF proto = new ProtoLF();
|
||||
@@ -6444,6 +6465,7 @@ public class SydApi4j implements SydApi {
|
||||
* @param checkValue 校验值
|
||||
* @return
|
||||
*/
|
||||
// 测试通过
|
||||
public Boolean updateKey(String index, String key, String checkValue) {
|
||||
ProtoLG proto = new ProtoLG();
|
||||
HashMap<String, Object> packet = new HashMap();
|
||||
@@ -6504,16 +6526,17 @@ public class SydApi4j implements SydApi {
|
||||
* 数据转加密指令(Y0)(=) -> pass (注:密文数据那项不一定需要传加密出来的数据)
|
||||
*
|
||||
* @param srcType 源密钥类型
|
||||
* @param sca 源算法SCA
|
||||
* @param sca 源算法SCA 1:DES, 2:3DES, 3:IDEA, 4:SM1, 5:AES, 6:SM4
|
||||
* @param desKeyType 目的秘钥类型
|
||||
* @param dca 目的算法SCA
|
||||
* @param roundModel 加密模式
|
||||
* @param dca 目的算法SCA 1:DES, 2:3DES, 3:IDEA, 4:SM1, 5:AES, 6:SM4
|
||||
* @param roundModel 加密模式 1:ECB, 2:CBC, 3:CFB, 4:OFB
|
||||
* @param sDEK 源秘钥DEK
|
||||
* @param dDEK 目的秘钥DEK
|
||||
* @param infoData 密文数据
|
||||
* @param vector 向量
|
||||
* @return byte[] 目的密钥加密的密文数据
|
||||
*/
|
||||
// 测试通过
|
||||
public byte[] switchEncryY(String srcType, int sca, String desKeyType, int dca, int roundModel, String sDEK, String dDEK, byte[] infoData, String vector) {
|
||||
ProtoY0 proto = new ProtoY0();
|
||||
HashMap<String, Object> packet = new HashMap();
|
||||
@@ -6524,10 +6547,10 @@ public class SydApi4j implements SydApi {
|
||||
packet.put("header", sn.getSn().array());
|
||||
|
||||
data.put("srcKeyType", srcType);
|
||||
data.put("sca$option", sca);
|
||||
data.put("sca$option", sca - 1);
|
||||
data.put("desKeyType", desKeyType);
|
||||
data.put("dca$option", dca);
|
||||
data.put("roundModel$option", roundModel);
|
||||
data.put("dca$option", dca - 1);
|
||||
data.put("roundModel$option", roundModel - 1);
|
||||
data.put("sDEK", sDEK);
|
||||
data.put("dDEK", dDEK);
|
||||
data.put("infoData", infoData);
|
||||
@@ -6567,6 +6590,7 @@ public class SydApi4j implements SydApi {
|
||||
* @param msg 消息块
|
||||
* @return MAB: 当消息块号为“1”或“2”时,作为下一块的IV。当消息块号为“0”或“3”时,用于消息认证。
|
||||
*/
|
||||
// 测试通过
|
||||
public RetWrap genMAB(int packSn, int keyType, int mode, String key, byte[] iv, byte[] msg) {
|
||||
ProtoMS proto = new ProtoMS();
|
||||
HashMap<String, Object> packet = new HashMap();
|
||||
@@ -6578,9 +6602,9 @@ public class SydApi4j implements SydApi {
|
||||
data.put("block$option", packSn);
|
||||
data.put("keyType$option", keyType);
|
||||
data.put("mode$option", mode);
|
||||
data.put("dataType$option", 0);
|
||||
data.put("dataType$option", 1);
|
||||
data.put("key", key);
|
||||
if (null != iv) {
|
||||
if (null != iv && !"".equals(iv)) {
|
||||
data.put("iv", iv);
|
||||
}
|
||||
data.put("msg", msg);
|
||||
@@ -6615,6 +6639,7 @@ public class SydApi4j implements SydApi {
|
||||
* @param account 账号中去除校验位的最右 12 位
|
||||
* @return LMK 对(02-03)下加密的导出 PINBLOCK。(PINBLOCK格式默认为 01 格式)
|
||||
*/
|
||||
// 测试通过
|
||||
public String genPIN(String account) {
|
||||
ProtoJA proto = new ProtoJA();
|
||||
HashMap<String, Object> packet = new HashMap();
|
||||
@@ -6720,6 +6745,7 @@ public class SydApi4j implements SydApi {
|
||||
* @param account 账号中去除校验位的最右 12 位
|
||||
* @return 目的 ZPK 下加密的目的 PIN 块
|
||||
*/
|
||||
// 测试通过
|
||||
@Override
|
||||
public String transPINFromZPKToZPK(String zpk1, String zpk2, int sca, int dca, int spt, int dpt, String pin, String account) {
|
||||
|
||||
@@ -6735,12 +6761,12 @@ public class SydApi4j implements SydApi {
|
||||
data.put("sourceZpk", zpk1);
|
||||
data.put("purposeZpk", zpk2);
|
||||
data.put("algorithmKey", 'P');
|
||||
data.put("sca$option", sca);
|
||||
data.put("dca$option", dca);
|
||||
data.put("sca$option", sca - 1);
|
||||
data.put("dca$option", dca - 1);
|
||||
data.put("businessKey", 'N');
|
||||
data.put("sourcePinBlock", pin);
|
||||
data.put("sourcePinBlockFormat", 06);
|
||||
data.put("purposePinBlockFormat", 06);
|
||||
data.put("sourcePinBlockFormat", 01);
|
||||
data.put("purposePinBlockFormat", 01);
|
||||
data.put("account", account);
|
||||
data.put("maxLength", 12);
|
||||
|
||||
@@ -6783,6 +6809,7 @@ public class SydApi4j implements SydApi {
|
||||
* @param account 账号中去除校验位的最右 12 位
|
||||
* @return PIN 块,LMK 对(02-03)下加密的 PIN
|
||||
*/
|
||||
// 测试通过
|
||||
public String transPINFromZPKToLMK(String zpk, int sca, int dca, int pt, String pin, String account) {
|
||||
|
||||
ProtoJE proto = new ProtoJE();
|
||||
@@ -6796,8 +6823,8 @@ public class SydApi4j implements SydApi {
|
||||
|
||||
data.put("zpk", zpk);
|
||||
data.put("algorithmKey", 'P');
|
||||
data.put("sca$option", sca);
|
||||
data.put("dca$option", dca);
|
||||
data.put("sca$option", sca - 1);
|
||||
data.put("dca$option", dca - 1);
|
||||
data.put("businessKey", 'N');
|
||||
data.put("PinBlock", pin);
|
||||
data.put("pinBlockFormat", pt);
|
||||
@@ -6854,8 +6881,8 @@ public class SydApi4j implements SydApi {
|
||||
|
||||
data.put("zpk", zpk);
|
||||
data.put("algorithmKey", 'P');
|
||||
data.put("sca$option", sca);
|
||||
data.put("dca$option", dca);
|
||||
data.put("sca$option", sca - 1);
|
||||
data.put("dca$option", dca - 1);
|
||||
data.put("businessKey", 'N');
|
||||
data.put("PinBlock", pin);
|
||||
data.put("pinBlockFormat", pt);
|
||||
@@ -6901,6 +6928,7 @@ public class SydApi4j implements SydApi {
|
||||
* @param account 账号中去除校验位的最右 12 位
|
||||
* @return 目的 ZPK 下加密的目的 PIN 块
|
||||
*/
|
||||
// 测试通过
|
||||
public String transPINFromTPKToZPK(String tpk, String zpk, int sca, int dca, int spt, int dpt, String pin, String account) {
|
||||
ProtoCA proto = new ProtoCA();
|
||||
|
||||
@@ -6914,8 +6942,8 @@ public class SydApi4j implements SydApi {
|
||||
data.put("sourceZpk", tpk);
|
||||
data.put("purposeZpk", zpk);
|
||||
data.put("algorithmKey", 'P');
|
||||
data.put("sca$option", sca);
|
||||
data.put("dca$option", dca);
|
||||
data.put("sca$option", sca - 1);
|
||||
data.put("dca$option", dca - 1);
|
||||
data.put("businessKey", 'N');
|
||||
data.put("sourcePinBlock", pin);
|
||||
data.put("sourcePinBlockFormat", spt);
|
||||
@@ -6961,6 +6989,7 @@ public class SydApi4j implements SydApi {
|
||||
* @param account 账号中去除校验位的最右 12 位
|
||||
* @return LMK 对(02-03)下加密的 PIN
|
||||
*/
|
||||
// 测试通过
|
||||
public String transPINFromTPKToLMK(String zpk, int sca, int dca, int pt, String pin, String account) {
|
||||
|
||||
ProtoJC proto = new ProtoJC();
|
||||
@@ -6974,8 +7003,8 @@ public class SydApi4j implements SydApi {
|
||||
|
||||
data.put("zpk", zpk);
|
||||
data.put("algorithmKey", 'P');
|
||||
data.put("sca$option", sca);
|
||||
data.put("dca$option", dca);
|
||||
data.put("sca$option", sca - 1);
|
||||
data.put("dca$option", dca - 1);
|
||||
data.put("businessKey", 'N');
|
||||
data.put("PinBlock", pin);
|
||||
data.put("pinBlockFormat", pt);
|
||||
@@ -7016,6 +7045,7 @@ public class SydApi4j implements SydApi {
|
||||
* @param account 账号中去除校验位的最右12位
|
||||
* @return LMK 对(02-03)下加密的 PIN
|
||||
*/
|
||||
// 测试通过
|
||||
public String encryPIN(int alg, String pin, String account) {
|
||||
|
||||
ProtoBA proto = new ProtoBA();
|
||||
@@ -7067,6 +7097,7 @@ public class SydApi4j implements SydApi {
|
||||
* @param account 账号中去除校验位的最右12位。
|
||||
* @return PIN
|
||||
*/
|
||||
// 测试通过
|
||||
public String decryPIN(int alg, String PINBLOCK, String account) {
|
||||
|
||||
ProtoNG proto = new ProtoNG();
|
||||
@@ -7136,8 +7167,8 @@ public class SydApi4j implements SydApi {
|
||||
data.put("srcKey", srcKey);
|
||||
data.put("desKey", desKey);
|
||||
data.put("algorithmKey", 'P');
|
||||
data.put("dca$option", dca);
|
||||
data.put("sca$option", sca);
|
||||
data.put("dca$option", dca - 1);
|
||||
data.put("sca$option", sca - 1);
|
||||
data.put("sPin", sPin);
|
||||
data.put("sPinType$option", 0);
|
||||
data.put("dPinType$option", 0);
|
||||
@@ -7175,6 +7206,7 @@ public class SydApi4j implements SydApi {
|
||||
* tmkKey: TMK 下加密的随机的 TAK
|
||||
* keyCheck: 密钥校验值
|
||||
*/
|
||||
// 测试通过
|
||||
public RetWrap genTAK(String tmk) {
|
||||
ProtoHA proto = new ProtoHA();
|
||||
HashMap<String, Object> packet = new HashMap();
|
||||
@@ -7186,8 +7218,8 @@ public class SydApi4j implements SydApi {
|
||||
data.put("tmk", tmk);
|
||||
data.put("businessKey", 'N');
|
||||
data.put("separator", ";");
|
||||
data.put("tmkSolution", "Z");
|
||||
data.put("lmkSolution", "Z");
|
||||
data.put("tmkSolution", "X");
|
||||
data.put("lmkSolution", "X");
|
||||
data.put("keyCheckType", "0");
|
||||
|
||||
ByteBuffer bb = proto.rend(packet);
|
||||
@@ -7236,6 +7268,7 @@ public class SydApi4j implements SydApi {
|
||||
* @return lmkKey: LMK 对 16-17 下加密的 TAK
|
||||
* keyCheck: 密钥校验值
|
||||
*/
|
||||
// 测试通过
|
||||
public RetWrap transTAKFromZMKToLMK(String zmk, String tak) {
|
||||
ProtoMF proto = new ProtoMF();
|
||||
HashMap<String, Object> packet = new HashMap();
|
||||
@@ -7248,8 +7281,8 @@ public class SydApi4j implements SydApi {
|
||||
data.put("tak", tak);
|
||||
data.put("businessKey", 'N');
|
||||
data.put("separator", ";");
|
||||
data.put("zmkSolution", "Z");
|
||||
data.put("lmkSolution", "Z");
|
||||
data.put("zmkSolution", "X");
|
||||
data.put("lmkSolution", "X");
|
||||
data.put("keyCheckType", "0");
|
||||
|
||||
ByteBuffer bb = proto.rend(packet);
|
||||
@@ -7290,6 +7323,7 @@ public class SydApi4j implements SydApi {
|
||||
* @return zmkKey: ZMK 下加密的 TAK
|
||||
* keyCheck: 密钥校验值
|
||||
*/
|
||||
// 测试通过
|
||||
public RetWrap transTAKFromLMKToZMK(String zmk, String tak) {
|
||||
ProtoMG proto = new ProtoMG();
|
||||
HashMap<String, Object> packet = new HashMap();
|
||||
@@ -7302,8 +7336,8 @@ public class SydApi4j implements SydApi {
|
||||
data.put("tak", tak);
|
||||
data.put("businessKey", 'N');
|
||||
data.put("separator", ";");
|
||||
data.put("zmkSolution", "Z");
|
||||
data.put("lmkSolution", "Z");
|
||||
data.put("zmkSolution", "X");
|
||||
data.put("lmkSolution", "X");
|
||||
data.put("keyCheckType", "0");
|
||||
|
||||
ByteBuffer bb = proto.rend(packet);
|
||||
@@ -7344,6 +7378,7 @@ public class SydApi4j implements SydApi {
|
||||
* @return tmkKey: 转换后的 TAK;TMK 下加密
|
||||
* keyCheck: 密钥校验值
|
||||
*/
|
||||
// 测试通过
|
||||
public RetWrap transTAKFromLMKToTMK(String tmk, String tak) {
|
||||
ProtoAG proto = new ProtoAG();
|
||||
HashMap<String, Object> packet = new HashMap();
|
||||
@@ -7356,8 +7391,8 @@ public class SydApi4j implements SydApi {
|
||||
data.put("tak", tak);
|
||||
data.put("businessKey", 'N');
|
||||
data.put("separator", ";");
|
||||
data.put("tmkSolution", "Z");
|
||||
data.put("lmkSolution", "Z");
|
||||
data.put("tmkSolution", "X");
|
||||
data.put("lmkSolution", "U");
|
||||
data.put("keyCheckType", "0");
|
||||
|
||||
ByteBuffer bb = proto.rend(packet);
|
||||
@@ -7399,6 +7434,7 @@ public class SydApi4j implements SydApi {
|
||||
* tmkKey: 当前的TMK (TPK或PVK)下加密的新密钥
|
||||
* keyCheck: 密钥校验值
|
||||
*/
|
||||
// 测试通过
|
||||
public RetWrap genKeyByTMKOrTPKOrPVK(String tmk) {
|
||||
ProtoHC proto = new ProtoHC();
|
||||
HashMap<String, Object> packet = new HashMap();
|
||||
@@ -7411,8 +7447,8 @@ public class SydApi4j implements SydApi {
|
||||
data.put("tmk", tmk);
|
||||
data.put("businessKey", 'N');
|
||||
data.put("separator", ";");
|
||||
data.put("tmkSolution", "Z");
|
||||
data.put("lmkSolution", "Z");
|
||||
data.put("tmkSolution", "X");
|
||||
data.put("lmkSolution", "X");
|
||||
data.put("keyCheckType", "0");
|
||||
|
||||
ByteBuffer bb = proto.rend(packet);
|
||||
@@ -7462,6 +7498,7 @@ public class SydApi4j implements SydApi {
|
||||
* @return tmkKey: 当前密钥下加密的存储密钥
|
||||
* keyCheck: 密钥校验值
|
||||
*/
|
||||
// 测试通过
|
||||
public RetWrap tranKeyByTMKToAno(String tmkNow, String tmkStorage) {
|
||||
ProtoAE proto = new ProtoAE();
|
||||
HashMap<String, Object> packet = new HashMap();
|
||||
@@ -7516,6 +7553,7 @@ public class SydApi4j implements SydApi {
|
||||
* @return tmkKey: 当前密钥下加密的存储密钥
|
||||
* keyCheck: 密钥校验值。
|
||||
*/
|
||||
// 测试通过
|
||||
public RetWrap tranKeyByTMKFromZMKToLMK(String zmk, String tmk) {
|
||||
ProtoFC proto = new ProtoFC();
|
||||
HashMap<String, Object> packet = new HashMap();
|
||||
@@ -7571,6 +7609,7 @@ public class SydApi4j implements SydApi {
|
||||
* @return tmkKey: 当前密钥下加密的存储密钥
|
||||
* keyCheck: 密钥校验值
|
||||
*/
|
||||
// 测试通过
|
||||
public RetWrap tranKeyByTMKFromLMKToZMK(String zmk, String tmk) {
|
||||
ProtoFE proto = new ProtoFE();
|
||||
HashMap<String, Object> packet = new HashMap();
|
||||
@@ -7584,8 +7623,8 @@ public class SydApi4j implements SydApi {
|
||||
data.put("tmk", tmk);
|
||||
data.put("businessKey", 'N');
|
||||
data.put("separator", ";");
|
||||
data.put("zmkSolution", "Z");
|
||||
data.put("lmkSolution", "Z");
|
||||
data.put("zmkSolution", "X");
|
||||
data.put("lmkSolution", "X");
|
||||
data.put("keyCheckType", "0");
|
||||
|
||||
ByteBuffer bb = proto.rend(packet);
|
||||
@@ -7627,6 +7666,7 @@ public class SydApi4j implements SydApi {
|
||||
* zmkKey: 转换后的 ZPK
|
||||
* keyCheck: 密钥校验值。
|
||||
*/
|
||||
// 测试通过
|
||||
public RetWrap genZEKOrZAK(int key, String zmk) {
|
||||
ProtoFI proto = new ProtoFI();
|
||||
HashMap<String, Object> packet = new HashMap();
|
||||
@@ -7707,6 +7747,7 @@ public class SydApi4j implements SydApi {
|
||||
* @return lmkKey: 当标志位为1时为LMK26-27对下加密的ZAK,当标志位为0时为LMK30-31对下加密的ZEK。
|
||||
* keyCheck: 密钥校验值。
|
||||
*/
|
||||
// 测试通过
|
||||
public RetWrap tranZEAKFromZMKToLMK(int key, String zmk, String zekOrzak) {
|
||||
ProtoFK proto = new ProtoFK();
|
||||
HashMap<String, Object> packet = new HashMap();
|
||||
@@ -7773,6 +7814,7 @@ public class SydApi4j implements SydApi {
|
||||
* @return zmkKey: 转换后的 ZPK。
|
||||
* keyCheck: 密钥校验值。
|
||||
*/
|
||||
// 测试通过
|
||||
public RetWrap tranZEAKFromLMKToZMK(int key, String zmk, String zekOrzak) {
|
||||
ProtoFM proto = new ProtoFM();
|
||||
HashMap<String, Object> packet = new HashMap();
|
||||
@@ -7838,6 +7880,7 @@ public class SydApi4j implements SydApi {
|
||||
* @return zmkKey: zmk 头 + ZMK 加密下的ZPK。
|
||||
* keyCheck: 密钥校验值
|
||||
*/
|
||||
// 测试通过
|
||||
public RetWrap genZPK(String zmk) {
|
||||
ProtoIA proto = new ProtoIA();
|
||||
HashMap<String, Object> packet = new HashMap();
|
||||
@@ -7901,6 +7944,7 @@ public class SydApi4j implements SydApi {
|
||||
* @return zpkKey: 转换后的 ZPK;由 LMK06-07 对加密
|
||||
* keyCheck: 密钥校验值
|
||||
*/
|
||||
// 测试通过
|
||||
public RetWrap tranZPKFromZMKToLMK(String zmk, String zpk) {
|
||||
ProtoFA proto = new ProtoFA();
|
||||
HashMap<String, Object> packet = new HashMap();
|
||||
@@ -7957,6 +8001,7 @@ public class SydApi4j implements SydApi {
|
||||
* @return zpkKey: 转换后的 ZPK;
|
||||
* keyCheck: 密钥校验值
|
||||
*/
|
||||
// 测试通过
|
||||
public RetWrap tranZPKFromLMKToZMK(String zmk, String zpk) {
|
||||
ProtoGC proto = new ProtoGC();
|
||||
HashMap<String, Object> packet = new HashMap();
|
||||
@@ -8073,6 +8118,7 @@ public class SydApi4j implements SydApi {
|
||||
* @return lmkKey: lmk 头 + LMK 加密下的密钥。
|
||||
* keyCheck:
|
||||
*/
|
||||
// 测试通过
|
||||
public RetWrap composeKey(String keyType, String[] keys) {
|
||||
|
||||
ProtoA4 proto = new ProtoA4();
|
||||
@@ -8128,7 +8174,7 @@ public class SydApi4j implements SydApi {
|
||||
System.arraycopy(lmkHeads, 0, bs, 0, lmkHeads.length);
|
||||
System.arraycopy(lmks, 0, bs, lmkHeads.length, lmks.length);
|
||||
retWrap.put("lmkKey", bs);
|
||||
retWrap.put("keyCheck", ((PacketSection) ret.get("keyCheck")).getBytes());
|
||||
retWrap.put("keyCheck", ((PacketSection) ret.get("kcv")).getBytes());
|
||||
return retWrap;
|
||||
}
|
||||
}
|
||||
@@ -8182,6 +8228,7 @@ public class SydApi4j implements SydApi {
|
||||
}
|
||||
|
||||
//16.3由私钥解密随机密钥并以LMK加密输出(+) -> pass
|
||||
// 测试通过
|
||||
@Override
|
||||
public RetWrap SM2ConfirmSessionKey(String sk, String cipherKey) {
|
||||
// 获取协议
|
||||
@@ -8241,6 +8288,7 @@ public class SydApi4j implements SydApi {
|
||||
* key1: 密钥明文分量1
|
||||
* key2: 密钥明文分量2
|
||||
*/
|
||||
// 测试通过
|
||||
public RetWrap getPlainText(String key, int checkAlg) {
|
||||
|
||||
ProtoAB proto = new ProtoAB();
|
||||
|
||||
@@ -1,410 +0,0 @@
|
||||
package racal.sunyard.cloud
|
||||
|
||||
import com.sunyard.proto.PacketSection
|
||||
import java.nio.charset.Charset
|
||||
|
||||
|
||||
class Vars(val vars : Map<String, Any> = HashMap<String, Any>()) {
|
||||
|
||||
private inline fun remove(n : List<String>){
|
||||
try {
|
||||
var f : Any? = vars
|
||||
for( i in 0..n.size-2 ){
|
||||
val p = n.get(i)
|
||||
if ( p.startsWith("[") && p.endsWith("]") ){
|
||||
// 数组
|
||||
f as MutableList<Any?>
|
||||
val istr = p.substring(1, p.length -1)
|
||||
var index = 0
|
||||
if ( "" == istr ){
|
||||
index = f.lastIndex
|
||||
}else{
|
||||
index = istr.toInt()
|
||||
if ( index < 0 ){
|
||||
index += f.size
|
||||
}
|
||||
}
|
||||
if (index < 0){
|
||||
index = 0
|
||||
}
|
||||
val fp = f.get( index )
|
||||
if ( null == fp ){
|
||||
return
|
||||
}else {
|
||||
f = fp
|
||||
}
|
||||
|
||||
}else {
|
||||
f as MutableMap<String, Any?>
|
||||
val fp = f.get( p )
|
||||
if ( null == fp){
|
||||
return
|
||||
}else{
|
||||
f = fp
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
val nl = n.last()
|
||||
if ( nl.startsWith("[") && nl.endsWith("]") ){
|
||||
f as MutableList<Any?>
|
||||
val istr = nl.substring(1, nl.length -1)
|
||||
var index = 0
|
||||
if ( "" == istr ){
|
||||
index = f.lastIndex
|
||||
}else{
|
||||
index = istr.toInt()
|
||||
if ( index < 0 ){
|
||||
index += f.size
|
||||
}
|
||||
}
|
||||
|
||||
if (index < 0){
|
||||
index = 0
|
||||
}
|
||||
f.removeAt( index )
|
||||
|
||||
}else{
|
||||
f as MutableMap<String, Any>
|
||||
f.remove(nl)
|
||||
}
|
||||
}catch ( e : ClassCastException){
|
||||
throw e
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
private inline fun _set(n : List<String>, data : Any) {
|
||||
try {
|
||||
var f : Any? = vars
|
||||
for( i in 0..n.size-2 ){
|
||||
val p = n.get(i)
|
||||
if ( p.startsWith("[") && p.endsWith("]") ){
|
||||
// 数组
|
||||
f as MutableList<Any?>
|
||||
val istr = p.substring(1, p.length -1)
|
||||
var index = 0
|
||||
if ( "" == istr ){
|
||||
index = f.size
|
||||
}else{
|
||||
index = istr.toInt()
|
||||
if ( index < 0 ){
|
||||
index += f.size
|
||||
}
|
||||
}
|
||||
if (index < 0){
|
||||
index = 0
|
||||
}
|
||||
var fp = f.get( index )
|
||||
if ( null == fp ){
|
||||
// 参考下一级推断类型
|
||||
val pp = n.get(i + 1)
|
||||
if( pp.startsWith("[") && pp.endsWith("]") ){
|
||||
fp = mutableListOf<Any>()
|
||||
}else{
|
||||
fp = mutableMapOf<String, Any>()
|
||||
}
|
||||
f.set( index, fp)
|
||||
}
|
||||
|
||||
f = fp
|
||||
|
||||
|
||||
}else {
|
||||
f as MutableMap<String, Any>
|
||||
var fp = f.get( p )
|
||||
if ( null == fp){
|
||||
// 参考下一级推断类型
|
||||
val pp = n.get(i + 1)
|
||||
if( pp.startsWith("[") && pp.endsWith("]") ){
|
||||
fp = mutableListOf<Any>()
|
||||
}else{
|
||||
fp = mutableMapOf<String, Any>()
|
||||
}
|
||||
|
||||
f.set( p, fp)
|
||||
}
|
||||
f = fp
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
val nl = n.last()
|
||||
if ( nl.startsWith("[") && nl.endsWith("]") ){
|
||||
f as MutableList<Any?>
|
||||
val istr = nl.substring(1, nl.length -1)
|
||||
var index = 0
|
||||
if ( "" == istr ){
|
||||
index = f.size
|
||||
}else{
|
||||
index = istr.toInt()
|
||||
if ( index < 0 ){
|
||||
index += f.size
|
||||
}
|
||||
}
|
||||
if (index < 0){
|
||||
index = 0
|
||||
}
|
||||
f.add( index , data)
|
||||
|
||||
}else{
|
||||
f as MutableMap<String, Any>
|
||||
f.put(nl, data)
|
||||
}
|
||||
}catch ( e : ClassCastException){
|
||||
throw e
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private inline fun _get(n : List<String> ) : Any? {
|
||||
try {
|
||||
var f : Any? = vars
|
||||
for( i in 0..n.size-1 ){
|
||||
val p = n.get(i)
|
||||
if ( p.startsWith("[") && p.endsWith("]") ){
|
||||
// 数组
|
||||
f as MutableList<Any?>
|
||||
val istr = p.substring(1, p.length -1)
|
||||
var index = 0
|
||||
if ( "" == istr ){
|
||||
index = f.lastIndex
|
||||
}else{
|
||||
index = istr.toInt()
|
||||
if ( index < 0 ){
|
||||
index += f.size
|
||||
}
|
||||
}
|
||||
if (index < 0){
|
||||
index = 0
|
||||
}
|
||||
val fp = f.get( index )
|
||||
if ( null == fp ){
|
||||
return null
|
||||
}else {
|
||||
f = fp
|
||||
}
|
||||
|
||||
}else {
|
||||
f as MutableMap<String, Any?>
|
||||
val fp = f.get( p )
|
||||
if ( null == fp){
|
||||
return null
|
||||
}else{
|
||||
f = fp
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
return f
|
||||
}catch ( e : ClassCastException){
|
||||
throw e
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
fun cp(from: String, to: String) {
|
||||
val v = _get( from.split(".") )
|
||||
if ( null != v ){
|
||||
set(to, v)
|
||||
}
|
||||
}
|
||||
|
||||
fun mv(from: String, to: String) {
|
||||
val v = _get( from.split(".") )
|
||||
if ( null != v ){
|
||||
set(to, v)
|
||||
}
|
||||
rm( from )
|
||||
}
|
||||
|
||||
fun map(name: String) {
|
||||
_set( name.split(".") , mutableMapOf<String, Any>() )
|
||||
}
|
||||
|
||||
fun arr(name: String) {
|
||||
_set( name.split(".") , mutableListOf<Any>() )
|
||||
}
|
||||
|
||||
|
||||
fun get(name : String) : Any{
|
||||
val v = _get( name.split(".") )
|
||||
if ( null == v ){
|
||||
throw RuntimeException("$name 的值为 null")
|
||||
}
|
||||
return v
|
||||
}
|
||||
|
||||
fun getInt(name: String): Int {
|
||||
val v = _get( name.split(".") )
|
||||
if( null == v ){
|
||||
return 0
|
||||
}else{
|
||||
if( v is Int ){
|
||||
return v as Int
|
||||
} else {
|
||||
return v.toString().toInt()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun getStr(name: String): String {
|
||||
val v = _get( name.split(".") )
|
||||
if( null == v ){
|
||||
return ""
|
||||
}else{
|
||||
when( v ){
|
||||
|
||||
v is PacketSection -> return (v as PacketSection).getString()
|
||||
|
||||
v is ByteArray -> return String(v as ByteArray, Charset.forName("UTF-8") )
|
||||
|
||||
else -> return v.toString()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun getMap(name: String): MutableMap<String, Any?> {
|
||||
try {
|
||||
val v = _get( name.split(".") )
|
||||
if( null == v ){
|
||||
return mutableMapOf()
|
||||
}else{
|
||||
return v as MutableMap<String, Any?>
|
||||
}
|
||||
}catch (e : Exception){
|
||||
throw java.lang.RuntimeException("$name 的值不是一个 map")
|
||||
}
|
||||
}
|
||||
|
||||
fun getArr(name: String): MutableList<Any?> {
|
||||
try {
|
||||
val v = _get( name.split(".") )
|
||||
if( null == v ){
|
||||
return mutableListOf()
|
||||
}else{
|
||||
return v as MutableList<Any?>
|
||||
}
|
||||
}catch (e : Exception){
|
||||
throw java.lang.RuntimeException("$name 的值不是一个 arr")
|
||||
}
|
||||
}
|
||||
|
||||
fun put(name: String, value : Any ){
|
||||
_set( name.split("."), value )
|
||||
}
|
||||
|
||||
|
||||
fun set(name: String, value : Any ){
|
||||
val names = name.split(".")
|
||||
|
||||
try {
|
||||
_set( names, value )
|
||||
}catch ( e : Exception){
|
||||
remove( names )
|
||||
_set( names, value )
|
||||
}
|
||||
}
|
||||
|
||||
fun rm(name : String ){
|
||||
try {
|
||||
remove( name.split(".") )
|
||||
}catch (e : Exception){
|
||||
// pass 忽略异常
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
fun contains(name: String) : Boolean {
|
||||
try {
|
||||
return null != _get( name.split(".") )
|
||||
}catch (e : Exception){
|
||||
// TODO 此处遇到过未知错误 故添加
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
fun eq(k1: String, k2 : String): Boolean {
|
||||
try {
|
||||
val v1 = _get( k1.split(".") )
|
||||
val v2 = _get( k2.split(".") )
|
||||
if ( null == v1 && null == v2 ){
|
||||
return true
|
||||
}
|
||||
if ( (null != v1 && null == v2) ||
|
||||
(null == v1 && null != v2) ){
|
||||
return false
|
||||
}
|
||||
|
||||
return v1!!.equals( v2 )
|
||||
}catch (e : Exception){
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
fun eqs(key : String, other : String): Boolean {
|
||||
try {
|
||||
val v = getStr( key )
|
||||
return other.equals( v )
|
||||
}catch (e : Exception){
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
fun bool(name: String): Boolean {
|
||||
val v = _get( name.split("."))
|
||||
if ( null == v ) {
|
||||
return false
|
||||
}else{
|
||||
when( v ){
|
||||
|
||||
null -> {
|
||||
return false
|
||||
}
|
||||
|
||||
is Boolean ->{
|
||||
return v
|
||||
}
|
||||
|
||||
is Array<*> -> {
|
||||
return v.size > 0
|
||||
}
|
||||
|
||||
is List<*> ->{
|
||||
return v.size > 0
|
||||
}
|
||||
|
||||
is Map<*, *> ->{
|
||||
return v.size > 0
|
||||
}
|
||||
|
||||
is String -> {
|
||||
return v.length > 0
|
||||
}
|
||||
}
|
||||
return true
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
fun vars(): Set<String> {
|
||||
return vars.keys
|
||||
}
|
||||
|
||||
|
||||
fun subVars(name : String) : Vars {
|
||||
if( contains( name ) ){
|
||||
val c = get( name )
|
||||
if( c is Map<*, *> ){
|
||||
return Vars( c as HashMap<String, Any> )
|
||||
}
|
||||
}
|
||||
|
||||
map( name )
|
||||
val c = get( name )
|
||||
return Vars(c as HashMap<String, Any>)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user