测试接口,修改错误的配置文件

This commit is contained in:
zhoubin 2021-09-16 16:20:40 +08:00
parent 86118eaf4e
commit fa9e46c318
6 changed files with 232 additions and 26 deletions

View File

@ -14,7 +14,7 @@
设备型号 设备型号
</equipNo> </equipNo>
<equipSkLen :value="equipSkLen()" cn="设备密钥私钥长度"> <equipSkLen len="4" :value="equipSkLen()" cn="设备密钥私钥长度">
设备密钥私钥长度 设备密钥私钥长度
</equipSkLen> </equipSkLen>
@ -22,15 +22,15 @@
设备密钥私钥 设备密钥私钥
</equipSk> </equipSk>
<equipPkLen :value="equipPkLen()" cn="设备密钥公钥长度"> <equipPkLen len="4" :value="equipPkLen()" cn="设备密钥公钥长度">
设备密钥公钥长度 设备密钥公钥长度
</equipPkLen> </equipPkLen>
<equipPK cn="设备密钥公钥"> <equipPk cn="设备密钥公钥">
设备密钥公钥 设备密钥公钥
</equipPK> </equipPk>
<manuPkLen :value="manuPkLen()" cn="厂商公钥长度"> <manuPkLen len="4" :value="manuPkLen()" cn="厂商公钥长度">
厂商公钥长度 厂商公钥长度
</manuPkLen> </manuPkLen>

View File

@ -6,7 +6,7 @@
<hex>91</hex> <hex>91</hex>
</command> </command>
<data extend="data"> <data extend="data">
<equipSkLen :value="equipSkLen()" cn="设备密钥私钥长度"> <equipSkLen len="4" :value="equipSkLen()" cn="设备密钥私钥长度">
设备密钥私钥长度 设备密钥私钥长度
</equipSkLen> </equipSkLen>
@ -14,13 +14,13 @@
设备密钥私钥 设备密钥私钥
</equipSk> </equipSk>
<equipPkLen :value="equipPkLen()" cn="设备密钥公钥长度"> <equipPkLen len="4" :value="equipPkLen()" cn="设备密钥公钥长度">
设备密钥公钥长度 设备密钥公钥长度
</equipPkLen> </equipPkLen>
<equipPK cn="设备密钥公钥"> <equipPk cn="设备密钥公钥">
设备密钥公钥 设备密钥公钥
</equipPK> </equipPk>
<authSign len="64" cn="授权签名"> <authSign len="64" cn="授权签名">
授权签名 授权签名

Binary file not shown.

View File

@ -208,12 +208,13 @@ public interface SydGenApi {
* @param dn * X509 证书DN * @param dn * X509 证书DN
* @param alg 算法标识,0:AES1SM4 * @param alg 算法标识,0:AES1SM4
* @param model 证书模式,0:证书序号1证书 DN
* @return RetWrap 包含 CipherKey SessionKey KCV * @return RetWrap 包含 CipherKey SessionKey KCV
* CipherKey 公钥加密的会话密钥 ,BASE64 编码 * CipherKey 公钥加密的会话密钥 ,BASE64 编码
* SessionKey 本地LMK 加密的会话密钥HEX 格式, 本地 LMK 加密的会话密钥长度HEX 格式(不包括第 1 个字符)一般为 33 Bytes默认输入值为缓冲区的大小 * SessionKey 本地LMK 加密的会话密钥HEX 格式, 本地 LMK 加密的会话密钥长度HEX 格式(不包括第 1 个字符)一般为 33 Bytes默认输入值为缓冲区的大小
* KCV 会话密钥的检验值HEX 格式长度为 32H * KCV 会话密钥的检验值HEX 格式长度为 32H
*/ */
RetWrap generateDEByDn(byte[] dn, int alg) throws Exception; RetWrap generateDEByDn(byte[] dn, int alg, int model) throws Exception;
/** /**
* 产生对称密钥通过公钥加密生成网联格式的数字信封 * 产生对称密钥通过公钥加密生成网联格式的数字信封

View File

@ -2047,8 +2047,10 @@ public class SydApi4j implements SydApi {
return repackEncrypt(packet); return repackEncrypt(packet);
} }
// 当证书模式为证书序号时测试成功
// 测试通过
@Override @Override
public RetWrap generateDEByDn(byte[] dn, int alg) { public RetWrap generateDEByDn(byte[] dn, int alg, int model) {
Proto6A proto = new Proto6A(); Proto6A proto = new Proto6A();
// 填充数据 // 填充数据
PacketSN sn = PacketSN.gen(); PacketSN sn = PacketSN.gen();
@ -2056,9 +2058,15 @@ public class SydApi4j implements SydApi {
packet.put("header", sn.getSn().array()); packet.put("header", sn.getSn().array());
HashMap<String, Object> data = new HashMap<String, Object>(); HashMap<String, Object> data = new HashMap<String, Object>();
data.put("alg$option", alg); data.put("alg$option", alg);
data.put("certificateModel$option", 1); data.put("certificateModel$option", model);
data.put("certificateDn", dn);
if (model == 0) {
data.put("certificateSn", dn);
} else {
data.put("certificateDn", dn);
}
data.put("keyType", "X"); data.put("keyType", "X");
packet.put("data", data); packet.put("data", data);
// 渲染发送 耗时长 // 渲染发送 耗时长
ByteBuffer bb = proto.rend(packet); ByteBuffer bb = proto.rend(packet);
@ -2137,6 +2145,7 @@ public class SydApi4j implements SydApi {
return rw; return rw;
} }
// 测试通过
@Override @Override
public RetWrap decryptDE(String certSerial, String pCipherKey) { public RetWrap decryptDE(String certSerial, String pCipherKey) {
// 获取协议 // 获取协议
@ -2221,6 +2230,7 @@ public class SydApi4j implements SydApi {
return ((PacketSection) ret.get("random")).getString(); return ((PacketSection) ret.get("random")).getString();
} }
// 测试通过
@Override @Override
public String netSign(String pCertSerial, byte[] pOrgData) { public String netSign(String pCertSerial, byte[] pOrgData) {
@ -2263,6 +2273,7 @@ public class SydApi4j implements SydApi {
return ((PacketSection) ret.get("sign")).getString(); return ((PacketSection) ret.get("sign")).getString();
} }
// 测试通过
@Override @Override
public boolean netVerify(String pCertSerial, byte[] pOrgData, String pSignData) { public boolean netVerify(String pCertSerial, byte[] pOrgData, String pSignData) {
// 获取协议 // 获取协议
@ -2990,6 +3001,7 @@ public class SydApi4j implements SydApi {
} }
// 测试通过
@Override @Override
public String SM2SignCustomized(String certNo, byte[] orgData) { public String SM2SignCustomized(String certNo, byte[] orgData) {
@ -3125,7 +3137,7 @@ public class SydApi4j implements SydApi {
return Util.encodeBase64(s); return Util.encodeBase64(s);
} }
// 测试通过
@Override @Override
public boolean SM2VerifyCustomized(String certNo, byte[] orgData, String base64Sign) { public boolean SM2VerifyCustomized(String certNo, byte[] orgData, String base64Sign) {
@ -4320,6 +4332,7 @@ public class SydApi4j implements SydApi {
* @param vector 初始向量数据可选项当加密模式为CBCCFB或OFB时才显示此项 * @param vector 初始向量数据可选项当加密模式为CBCCFB或OFB时才显示此项
* @return infoData: 密文数据 * @return infoData: 密文数据
*/ */
// 测试通过
public byte[] Encrypt_Data(int alg, int roundModel, int fullMode, String DEK, byte[] infoData, byte[] vector) { public byte[] Encrypt_Data(int alg, int roundModel, int fullMode, String DEK, byte[] infoData, byte[] vector) {
ProtoQ1 proto = new ProtoQ1(); ProtoQ1 proto = new ProtoQ1();
@ -4387,10 +4400,11 @@ public class SydApi4j implements SydApi {
* @param roundModel 密钥解密模式1:ECB,2:CBC,3:CFB,4:OFB * @param roundModel 密钥解密模式1:ECB,2:CBC,3:CFB,4:OFB
* @param fullMode 填充模式0:数据刚好是8的整数倍不填充;1:在数据后面填充0x00,0x00;2:在数据后填充0x80,0x00 * @param fullMode 填充模式0:数据刚好是8的整数倍不填充;1:在数据后面填充0x00,0x00;2:在数据后填充0x80,0x00
* @param DEK DEK秘钥如果源密钥为外部送入则为LMK加密否则为HSM用户密钥存储区 * @param DEK DEK秘钥如果源密钥为外部送入则为LMK加密否则为HSM用户密钥存储区
* @param infoData 数据 * @param infoData 数据密文
* @param vector 初始向量数据可选项当加密模式为CBCCFB或OFB时才显示此项 * @param vector 初始向量数据可选项当加密模式为CBCCFB或OFB时才显示此项
* @return 解密后的明文数据 * @return 解密后的明文数据
*/ */
// 测试通过
public byte[] Decrypt_Data(int alg, int roundModel, int fullMode, String DEK, byte[] infoData, byte[] vector) { public byte[] Decrypt_Data(int alg, int roundModel, int fullMode, String DEK, byte[] infoData, byte[] vector) {
ProtoQ2 proto = new ProtoQ2(); ProtoQ2 proto = new ProtoQ2();
@ -5103,7 +5117,7 @@ public class SydApi4j implements SydApi {
return true; return true;
} }
// 测试通过
@Override @Override
public RetWrap getStatus() { public RetWrap getStatus() {
ProtoHI proto = new ProtoHI(); ProtoHI proto = new ProtoHI();
@ -8390,7 +8404,7 @@ public class SydApi4j implements SydApi {
return msg_all_de; return msg_all_de;
} }
// 测试通过
@Override @Override
public boolean setDevCert(String equipType, String equipNo, byte[] equipSk, byte[] equipPk, byte[] manuPk, byte[] authSign) { public boolean setDevCert(String equipType, String equipNo, byte[] equipSk, byte[] equipPk, byte[] manuPk, byte[] authSign) {
Proto90 proto = new Proto90(); Proto90 proto = new Proto90();
@ -8427,7 +8441,7 @@ public class SydApi4j implements SydApi {
} }
} }
// 测试通过
@Override @Override
public boolean changeDevCert(byte[] equipSk, byte[] equipPk, byte[] authSign) { public boolean changeDevCert(byte[] equipSk, byte[] equipPk, byte[] authSign) {
Proto91 proto = new Proto91(); Proto91 proto = new Proto91();
@ -8470,6 +8484,7 @@ public class SydApi4j implements SydApi {
* equipPk: 设备密钥公钥 * equipPk: 设备密钥公钥
* authSign: 授权签名 * authSign: 授权签名
*/ */
// 测试通过
@Override @Override
public RetWrap getDeviceCertiInfo() { public RetWrap getDeviceCertiInfo() {
Proto92 proto = new Proto92(); Proto92 proto = new Proto92();
@ -8514,7 +8529,7 @@ public class SydApi4j implements SydApi {
} }
} }
// 测试通过
@Override @Override
public String deviceSignC(byte[] orgData) { public String deviceSignC(byte[] orgData) {
Proto97 proto = new Proto97(); Proto97 proto = new Proto97();

View File

@ -21,7 +21,7 @@ public class TestAllMethods {
public void before() { public void before() {
System.setProperty("com.sunyard.sydapi4j.debug", "true"); System.setProperty("com.sunyard.sydapi4j.debug", "true");
// api = (SydApi4j) new SydApi4j().connect("172.16.17.163", 8889, null, 1000); // api = (SydApi4j) new SydApi4j().connect("172.16.17.163", 8889, null, 1000);
api = (SydApi4j) new SydApi4j().connect("192.168.1.7", 8889, null, 1000); api = (SydApi4j) new SydApi4j().connect("192.168.1.7", 8889, null, 5000);
// api = (SydApi4j) new SydApi4j().connect("192.168.0.66", 8889, null, 1000); // api = (SydApi4j) new SydApi4j().connect("192.168.0.66", 8889, null, 1000);
} }
@ -751,14 +751,27 @@ public class TestAllMethods {
System.out.println(s); System.out.println(s);
} }
// 测试通过
// 80 // 80
@Test @Test
public void testSM2SignCustomized() { public void testSM2SignCustomized() {
String sn = "3C93000000000025"; String sn = "1004282452";
String s = api.SM2SignCustomized(sn, "111".getBytes()); String s = api.SM2SignCustomized(sn, "111".getBytes());
System.out.println(s); System.out.println(s);
} }
// 测试通过
// 81
@Test
public void testSM2VerifyCustomized() {
String sn = "1004282452";
String data = "111";
String s = api.SM2SignCustomized(sn, data.getBytes());
boolean b = api.SM2VerifyCustomized(sn, data.getBytes(), s);
System.out.println(b);
}
// 测试通过 // 测试通过
// E2 // E2
@Test @Test
@ -855,7 +868,6 @@ public class TestAllMethods {
printRetWrap(retWrap, true); printRetWrap(retWrap, true);
} }
// 测试通过
// 60 // 60
@Test @Test
public void testGetTransmissionKey() { public void testGetTransmissionKey() {
@ -983,15 +995,75 @@ public class TestAllMethods {
System.out.println(Util.bytes2HexString(bytes)); System.out.println(Util.bytes2HexString(bytes));
} }
// 001B3030303030303030
// 3641
// 30
// 30
// 30303130
// 31303034323832343532
// 58
// 测试通过
// 6A // 6A
@Test @Test
public void testGenerateDEByDn() { public void testGenerateDEByDn() {
String dn = "C=CN,ST=ZJ,L=HZ,O=SUNYARD,OU=123456,CN=111"; String dn = "1004282452";
RetWrap retWrap = api.generateDEByDn(dn.getBytes(), 1); RetWrap retWrap = api.generateDEByDn(dn.getBytes(), 0, 0);
printRetWrap(retWrap); printRetWrap(retWrap);
} }
// 01210000000000000000
// 3642
// 3030
// 30313932
// 4D49474D416945417058426D4C43545A4D54543247454A677A576658634555645770376D64466E5A5A344F4972556E326E5145434948766C2F674534707448476D4748737739464844566D3357334F6E636B764D71325044766C38374657667742434250347175466B346243715A48735177585258614E712B576E6C664234634C6859762F59766D6777496F7541516A56685551545578666C50464C783357734D56703362426A6658567539426278796F6A2B6D4937686D774A665178416B3D
// 4C4246373430343745463846384343353532463039313838363233373639343241424637343034374546384638434335353246303931383836323337363934324132303034443039344339433336334445
// 00DE0000000000000001
// 3642
// 3030
// 30
// 31
// 3031303034323832343532
// 30313932
// 4D49474D4169454167746A6D2F3364654C44754D5A6A5446454C44564D7A6A77336F4A527354772F4E37594A54536151517A63434944524A30317053787A346D7864364464504848337639726E617075564B4B6668664E6557576E4530324F354243414748696241702F2F64373538574D77574E78356A6E4B3458564E536F4D4C724A3271757056734747707677516A6F357969655A5A76624368354B6B4662494942642F426A3133436631504C556C5952614D4F416442633973744A35413D58
// 测试通过
// 6B
@Test
public void testDecryptDE() {
String sn = "1004282452";
RetWrap retWrap = api.generateDEByDn(sn.getBytes(), 0, 0);
String sessionKey = (String) retWrap.get("SessionKey");
String CipherKey = (String) retWrap.get("CipherKey");
String KCV = (String) retWrap.get("KCV");
RetWrap retWrap1 = api.decryptDE(sn, CipherKey);
printRetWrap(retWrap1);
}
// 测试通过
// 6C
@Test
public void testNetSign() {
String sn = "1004282451";
String s = api.netSign(sn, "111".getBytes());
System.out.println(s);
}
// 测试通过
// 6D
@Test
public void testNetVerify() {
String sn = "1004282451";
String data = "111";
String s = api.netSign(sn, data.getBytes());
boolean b = api.netVerify(sn, data.getBytes(), s);
System.out.println(b);
}
// 测试通过 // 测试通过
// 6E // 6E
@Test @Test
@ -1011,10 +1083,12 @@ public class TestAllMethods {
System.out.println(s); System.out.println(s);
} }
// 测试通过
// HI // HI
@Test @Test
public void testGetStatus() { public void testGetStatus() {
RetWrap status = api.getStatus(); RetWrap status = api.getStatus();
printRetWrap(status); printRetWrap(status);
} }
@ -1289,13 +1363,30 @@ public class TestAllMethods {
printRetWrap(retWrap); printRetWrap(retWrap);
} }
// 测试通过
// Q1 // Q1
@Test @Test
public void testEncrypt_Data() { public void testEncrypt_Data() {
byte[] bytes = api.Encrypt_Data(2, 1, 0, "XK333333333333333300A33333333", "11111111".getBytes(), "122345678".getBytes()); byte[] bytes = api.Encrypt_Data(2, 1, 0, "XK123456212145212200A00000001", "1111111111111111".getBytes(), "122345678".getBytes());
System.out.println(Util.bytes2HexString(bytes)); System.out.println(Util.bytes2HexString(bytes));
} }
// 测试通过
// Q2
@Test
public void testDecrypt_Data() {
String dek = "XK123456212145212200A00000001";
String infoData = "1111111111111111";
String vector = "122345678";
byte[] bytes = api.Encrypt_Data(2, 1, 0, dek, infoData.getBytes(), vector.getBytes());
System.out.println(Util.bytes2HexString(bytes));
byte[] bytes1 = api.Decrypt_Data(2, 1, 0, dek, bytes, vector.getBytes());
System.out.println(Util.bytes2HexString(bytes1));
}
// YA // YA
@Test @Test
@ -1327,11 +1418,110 @@ public class TestAllMethods {
System.out.println(s); System.out.println(s);
} }
// 011E3030303030303030
// 3930
// 31313131313131313131313131313131
// 32323232323232323232323232323232
// 30303332
// F9CC9E2B67C61043B87552E61F9F50120902EA5462FC65A29695FC8F5E0FF7AF
// 30303638
// 03420004CAFC8EC6782D9DE8F834B7D47B9D9057A0F21DAB402694EC580723879CC221A1730977F0DE947A0D5390858EE1FD827A3BE2F07E5671131BF3BE1868D3333029
// 30303638
// 0342000424A686E34777690C732D2C04F707DAE37AAA346461AACFABDF00982D84BB27B9DEB717FCEF55BA7C288FC935C637FD0681028E69584BFDA7A38BDB4557E1551C
// 0FBE0F3D6BAB184A20A235BA8DF2494C8FFC0826F60C22D3E4D89776CBD203E03707D2D530232EFE8600282A6EF171816E83AFA20A7991BBF2AD30DC59C71E76
// 设备型号
private String equipType = "1111111111111111";
// 设备序号
private String equipNo = "2222222222222222";
// 设备密钥私钥
private String equipSk = "F9CC9E2B67C61043B87552E61F9F50120902EA5462FC65A29695FC8F5E0FF7AF";
// 设备密钥公钥
private String equipPk = "03420004CAFC8EC6782D9DE8F834B7D47B9D9057A0F21DAB402694EC580723879CC221A1730977F0DE947A0D5390858EE1FD827A3BE2F07E5671131BF3BE1868D3333029";
// 厂商公钥
private String manuPk = "0342000424A686E34777690C732D2C04F707DAE37AAA346461AACFABDF00982D84BB27B9DEB717FCEF55BA7C288FC935C637FD0681028E69584BFDA7A38BDB4557E1551C";
// 授权签名
private String authSign = "0FBE0F3D6BAB184A20A235BA8DF2494C8FFC0826F60C22D3E4D89776CBD203E03707D2D530232EFE8600282A6EF171816E83AFA20A7991BBF2AD30DC59C71E76";
// 测试通过
// 90
@Test
public void testSetDevCert() {
boolean b = api.setDevCert(equipType, equipNo, Util.hexString2Bytes(equipSk), Util.hexString2Bytes(equipPk),
Util.hexString2Bytes(manuPk), Util.hexString2Bytes(authSign));
System.out.println(b);
}
// 00B63030303030303030
// 3931
// 30303332
// F9CC9E2B67C61043B87552E61F9F50120902EA5462FC65A29695FC8F5E0FF7AF
// 30303638
// 03420004CAFC8EC6782D9DE8F834B7D47B9D9057A0F21DAB402694EC580723879CC221A1730977F0DE947A0D5390858EE1FD827A3BE2F07E5671131BF3BE1868D3333029
// 0FBE0F3D6BAB184A20A235BA8DF2494C8FFC0826F60C22D3E4D89776CBD203E03707D2D530232EFE8600282A6EF171816E83AFA20A7991BBF2AD30DC59C71E76
// 测试通过
// 91
@Test
public void testChangeDevCert() {
boolean b = api.changeDevCert(Util.hexString2Bytes(equipSk), Util.hexString2Bytes(equipPk), Util.hexString2Bytes(authSign));
System.out.println(b);
}
// 测试通过
// 92 // 92
@Test @Test
public void testGetDeviceCertiInfo() { public void testGetDeviceCertiInfo() {
RetWrap deviceCertiInfo = api.getDeviceCertiInfo(); RetWrap deviceCertiInfo = api.getDeviceCertiInfo();
printRetWrap(deviceCertiInfo); printRetWrap(deviceCertiInfo, true);
}
// 测试通过
// 97
@Test
public void testDeviceSignC() {
String hash = "11111111111111111111111111111111";
String s = api.deviceSignC(hash.getBytes());
System.out.println(s);
}
// 00883030303030303030
// 3938
// 30313232
// 3078022017665B26FD20D2BE19CBCF275C43D7ECF95BBEEC2C2D1A79DF5068629D6FDDB302204A76974ADD337B5F3EAA0191AF6C7ADEE6BA86B30B828B7B32948B8DB0FF3E1A04204E4A371B154D42CC2536033F8EE8854FE0EF4BC79CB78A7CEA0C335147C7DF5B0410CF8690DC1D9ECD1951E86B6AE26A94DB
// 00880000000000000000
// 3938
// 30313232
// 3078022017665B26FD20D2BE19CBCF275C43D7ECF95BBEEC2C2D1A79DF5068629D6FDDB302204A76974ADD337B5F3EAA0191AF6C7ADEE6BA86B30B828B7B32948B8DB0FF3E1A04204E4A371B154D42CC2536033F8EE8854FE0EF4BC79CB78A7CEA0C335147C7DF5B0410CF8690DC1D9ECD1951E86B6AE26A94DB
// 98
@Test
public void testSetToken() {
String tocken = "3078022017665B26FD20D2BE19CBCF275C43D7ECF95BBEEC2C2D1A79DF5068629D6FDDB302204A76974ADD337B5F3EAA0191AF6C7ADEE6BA86B30B828B7B32948B8DB0FF3E1A04204E4A371B154D42CC2536033F8EE8854FE0EF4BC79CB78A7CEA0C335147C7DF5B0410CF8690DC1D9ECD1951E86B6AE26A94DB";
boolean b = api.setToken(Util.hexString2Bytes(tocken));
System.out.println(b);
}
// 00223030303030303030
// 3939
// 30303230
// 3333333333333333333333333333333333333333
// 00220000000000000000
// 3939
// 30303230
// 3333333333333333333333333333333333333333
// 99
@Test
public void testCalcAuthHead() {
String info = "33333333333333333333";
byte[] bytes = api.calcAuthHead(info.getBytes());
System.out.println(Util.bytes2HexString(bytes));
} }
/** /**