1、删除kotlin依赖。2、8019指令增加验签成功返回原数据的接口
This commit is contained in:
parent
3636ce7b5d
commit
4e42f354b5
@ -84,6 +84,14 @@
|
||||
若发送报文返回证书信息标志位为1,则返回CERT_INFO结构的证书数据
|
||||
</info>
|
||||
|
||||
<oDataLen len="2" format="X" :if="0 != $packet.data.flag$option" cn="原始数据长度">
|
||||
签名的原始数据长度
|
||||
</oDataLen>
|
||||
|
||||
<oData :len="reODataLen()" :if="0 != $packet.data.flag$option" cn="原始数据">
|
||||
签名的原始数据
|
||||
</oData>
|
||||
|
||||
</data>
|
||||
|
||||
|
||||
@ -107,5 +115,13 @@
|
||||
|
||||
return Util.b2i( $final.getSection('data').getSection('infoLen') )
|
||||
}
|
||||
|
||||
function reODataLen() {
|
||||
if (null == $final.data.oDataLen){
|
||||
return 0;
|
||||
}
|
||||
|
||||
return Util.b2i( $final.getSection('data').getSection('oDataLen') )
|
||||
}
|
||||
</script>
|
||||
</packet>
|
||||
Binary file not shown.
80
pom.xml
80
pom.xml
@ -33,12 +33,12 @@
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.jetbrains.kotlin</groupId>
|
||||
<artifactId>kotlin-test</artifactId>
|
||||
<version>${kotlin.version}</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<!-- <dependency>-->
|
||||
<!-- <groupId>org.jetbrains.kotlin</groupId>-->
|
||||
<!-- <artifactId>kotlin-test</artifactId>-->
|
||||
<!-- <version>${kotlin.version}</version>-->
|
||||
<!-- <scope>test</scope>-->
|
||||
<!-- </dependency>-->
|
||||
|
||||
|
||||
<!-- https://mvnrepository.com/artifact/dom4j/dom4j -->
|
||||
@ -61,11 +61,11 @@
|
||||
<artifactId>fastjson</artifactId>
|
||||
<version>1.2.39</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.jetbrains.kotlin</groupId>
|
||||
<artifactId>kotlin-stdlib-jdk8</artifactId>
|
||||
<version>${kotlin.version}</version>
|
||||
</dependency>
|
||||
<!-- <dependency>-->
|
||||
<!-- <groupId>org.jetbrains.kotlin</groupId>-->
|
||||
<!-- <artifactId>kotlin-stdlib-jdk8</artifactId>-->
|
||||
<!-- <version>${kotlin.version}</version>-->
|
||||
<!-- </dependency>-->
|
||||
|
||||
|
||||
<!--<dependency>-->
|
||||
@ -194,35 +194,35 @@
|
||||
</executions>
|
||||
</plugin>
|
||||
|
||||
<plugin>
|
||||
<groupId>org.jetbrains.kotlin</groupId>
|
||||
<artifactId>kotlin-maven-plugin</artifactId>
|
||||
<version>${kotlin.version}</version>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>compile</id>
|
||||
<phase>compile</phase>
|
||||
<goals>
|
||||
<goal>compile</goal>
|
||||
</goals>
|
||||
<configuration>
|
||||
<sourceDirs>
|
||||
<source>src/main/java</source>
|
||||
</sourceDirs>
|
||||
</configuration>
|
||||
</execution>
|
||||
<execution>
|
||||
<id>test-compile</id>
|
||||
<phase>test-compile</phase>
|
||||
<goals>
|
||||
<goal>test-compile</goal>
|
||||
</goals>
|
||||
</execution>
|
||||
</executions>
|
||||
<configuration>
|
||||
<jvmTarget>1.6</jvmTarget>
|
||||
</configuration>
|
||||
</plugin>
|
||||
<!-- <plugin>-->
|
||||
<!-- <groupId>org.jetbrains.kotlin</groupId>-->
|
||||
<!-- <artifactId>kotlin-maven-plugin</artifactId>-->
|
||||
<!-- <version>${kotlin.version}</version>-->
|
||||
<!-- <executions>-->
|
||||
<!-- <execution>-->
|
||||
<!-- <id>compile</id>-->
|
||||
<!-- <phase>compile</phase>-->
|
||||
<!-- <goals>-->
|
||||
<!-- <goal>compile</goal>-->
|
||||
<!-- </goals>-->
|
||||
<!-- <configuration>-->
|
||||
<!-- <sourceDirs>-->
|
||||
<!-- <source>src/main/java</source>-->
|
||||
<!-- </sourceDirs>-->
|
||||
<!-- </configuration>-->
|
||||
<!-- </execution>-->
|
||||
<!-- <execution>-->
|
||||
<!-- <id>test-compile</id>-->
|
||||
<!-- <phase>test-compile</phase>-->
|
||||
<!-- <goals>-->
|
||||
<!-- <goal>test-compile</goal>-->
|
||||
<!-- </goals>-->
|
||||
<!-- </execution>-->
|
||||
<!-- </executions>-->
|
||||
<!-- <configuration>-->
|
||||
<!-- <jvmTarget>1.6</jvmTarget>-->
|
||||
<!-- </configuration>-->
|
||||
<!-- </plugin>-->
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-compiler-plugin</artifactId>
|
||||
|
||||
@ -188,6 +188,15 @@ interface SydAttachedSVApi {
|
||||
*/
|
||||
boolean attachedVerify(String sign);
|
||||
|
||||
/**
|
||||
* 带公钥证书与原始数据的数字签名验签(遵循 PKCS#7)
|
||||
* 对指定的原始数据核验其带公钥证书签名。如签名有效(含证书无效)且需返回签名者公钥证书信息时,同时返回签名者公钥证书信息。
|
||||
*
|
||||
* @param sign 已签名数据
|
||||
* @return 成功返回签名的原数据,失败则报错
|
||||
*/
|
||||
String attachedVerifyRD(String sign);
|
||||
|
||||
/**
|
||||
* 带公钥证书与原始数据的数字签名验签(遵循 PKCS#7)
|
||||
* 对指定的原始数据核验其带公钥证书签名。如签名有效(含证书无效)且需返回签名者公钥证书信息时,同时返回签名者公钥证书信息。
|
||||
|
||||
@ -9978,6 +9978,49 @@ public class SydApi4j implements SydApi {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String attachedVerifyRD(String sign) {
|
||||
Proto8019 proto = new Proto8019();
|
||||
|
||||
// 填充数据
|
||||
HashMap<String, Object> packet = new HashMap<String, Object>();
|
||||
HashMap<String, Object> data = new HashMap<String, Object>();
|
||||
packet.put("data", data);
|
||||
PacketSN sn = PacketSN.gen();
|
||||
packet.put("header", sn.getSn().array());
|
||||
|
||||
data.put("signData", sign.getBytes());
|
||||
data.put("flag$option", 1);
|
||||
|
||||
// 渲染发送
|
||||
ByteBuffer bb = proto.rend(packet);
|
||||
|
||||
synchronized (this) {
|
||||
// 响应解析
|
||||
bb = syncRead(syncSend(bb));
|
||||
}
|
||||
|
||||
Packet p = proto.parse(bb, packet);
|
||||
Map<String, Object> ret = p.toMap();
|
||||
|
||||
if (
|
||||
!Arrays.equals(sn.getSn().array(), ((PacketSection) ret.get("header")).getBytes())
|
||||
) {
|
||||
throw new SydApiException("包序号不匹配", -4);
|
||||
}
|
||||
ret = (Map<String, Object>) ret.get("data");
|
||||
PacketSection error = (PacketSection) ret.get("error");
|
||||
byte[] be = error.getBytes();
|
||||
if ((0 != (be[0] ^ be[1]))) {
|
||||
throw new SydApiException(error.getInfo(), error.autoInt());
|
||||
}
|
||||
|
||||
PacketSection info = (PacketSection) ret.get("oData");
|
||||
byte[] oData = info.getBytes();
|
||||
|
||||
return new String(oData);
|
||||
}
|
||||
|
||||
/**
|
||||
* 带公钥证书与原始数据的数字签名验签(遵循 PKCS#7)
|
||||
* 对指定的原始数据核验其带公钥证书签名。如签名有效(含证书无效)且需返回签名者公钥证书信息时,同时返回签名者公钥证书信息。
|
||||
|
||||
@ -1,11 +0,0 @@
|
||||
package com.sunyard.sydapi.test
|
||||
|
||||
fun main(args: Array<String>) {
|
||||
|
||||
var code = 32774
|
||||
|
||||
println( String.format("%X", code) )
|
||||
|
||||
System.setProperty("com.sunyard.sydapi4j.debug", "true")
|
||||
|
||||
}
|
||||
@ -37,8 +37,8 @@ public class TestAllMethods {
|
||||
public void before() {
|
||||
// 通过设置debug的属性开启debug,如果不设置则默认不打开
|
||||
System.setProperty("com.sunyard.sydapi4j.debug", "true");
|
||||
// api = (SydApi4j) new SydApi4j().connect("172.16.18.59", 8889, null, 1000);
|
||||
api = (SydApi4j) new SydApi4j().connect("192.168.0.119", 8889, null, 1000);
|
||||
api = (SydApi4j) new SydApi4j().connect("172.16.18.59", 8889, null, 1000);
|
||||
// api = (SydApi4j) new SydApi4j().connect("192.168.0.119", 8889, null, 1000);
|
||||
// api = (SydApi4j) new SydApi4j().connect("61.164.40.82", 8889, null, 1000);
|
||||
// api = (SydApi4j) new SydApi4j().connect("192.168.0.66", 8889, null, 1000);
|
||||
// api = (SydApi4j) new SydApi4j().connect("192.168.0.100", 8889, null, 1000);
|
||||
@ -1885,8 +1885,8 @@ public class TestAllMethods {
|
||||
@Test
|
||||
public void testSYD_SM2_Encrypt() {
|
||||
|
||||
String sk="00010000C5AA43F372B01220C25406046EECBDAFEBD2206A6E4C8401DB6C54FE35DD4D520000000000000000000000000000000000000000000000000000000000000000";
|
||||
String publicKey = "03420004C0D1A2FB87B51F22D490EA88301EB210BD6C9A6C21DA4D4BFF1ED2E70622909F58A6A3A55308D1CE46CF9A58090E6BA3BC34A6625D1765D87F9A0557CCFBC244";
|
||||
String sk="000100001C9588B521C2ECDDF0515D2829F3EFB26E5FE3E49CF96E3438FFEB7363845A110000000000000000000000000000000000000000000000000000000000000000";
|
||||
String publicKey = "03420004A8A03F380DDD8C414980FCA5C0A981E190A4528BF87C9FDAA30881CEE9EC83CC3DB93AE1B4FF529A0D0D9D42EDFDCEB46470D1046EAC5E4F32C31083C72C050F";
|
||||
String orgData = "FFFFFFFFFFF1111111111FFFFF";
|
||||
|
||||
byte[] encData = api.SYD_SM2_Encrypt(Util.hexString2Bytes(publicKey), orgData.getBytes());
|
||||
@ -1896,6 +1896,22 @@ public class TestAllMethods {
|
||||
System.out.println("decData:" + new String(bytes));
|
||||
}
|
||||
|
||||
// 测试通过
|
||||
// 78
|
||||
@Test
|
||||
public void testSYD_SM2_Encrypt2() {
|
||||
|
||||
String publicKey = "03420004A8A03F380DDD8C414980FCA5C0A981E190A4528BF87C9FDAA30881CEE9EC83CC3DB93AE1B4FF529A0D0D9D42EDFDCEB46470D1046EAC5E4F32C31083C72C050F";
|
||||
String orgData = "FFFFFFFFFFF1111111111FFFFF";
|
||||
String userId = "1111111111111148";
|
||||
|
||||
byte[] encData = api.SYD_SM2_Encrypt(Util.hexString2Bytes(publicKey), orgData.getBytes());
|
||||
System.out.println("加密后的数据: " + Util.bytes2HexString(encData));
|
||||
|
||||
byte[] bytes = api.decryptBySkC(1, userId, encData);
|
||||
System.out.println("decData:" + new String(bytes));
|
||||
}
|
||||
|
||||
// 测试通过
|
||||
// 78
|
||||
@Test
|
||||
@ -2367,6 +2383,34 @@ public class TestAllMethods {
|
||||
System.out.println("验签结果: " + verify);
|
||||
}
|
||||
|
||||
// 测试通过
|
||||
// 8018
|
||||
@Test
|
||||
public void testAttachedSignAndVerifyC() {
|
||||
String dn = "C=CN,O=Sunyard,OU=8001,CN=8001";
|
||||
String orgData = "111111213323143243243";
|
||||
String sign = api.attachedSign(orgData.getBytes(), dn);
|
||||
System.out.println("签名结果: " + sign);
|
||||
|
||||
// String sign = "MIICsgYKKoEcz1UGAQQCAqCCAqIwggKeAgEBMQwwCgYIKoEcz1UBgxEwIAYKKoEcz1UGAQQCAaASBBAzMjE0MzEyMzQxMjQzMjE0oIIByTCCAcUwggFooAMCAQICCDyTAAAAAAAlMAwGCCqBHM9VAYN1BQAwJjELMAkGA1UEBhMCQ04xFzAVBgNVBAMMDlN1bnlhcmRTTTJSb290MB4XDTE3MDUxNzAyNTI0NFoXDTIyMDcyNTAyNTI0NFowPTELMAkGA1UEBhMCQ04xEDAOBgNVBAoMB1N1bnlhcmQxDTALBgNVBAsMBDgwMDExDTALBgNVBAMMBDgwMDEwWTATBgcqhkjOPQIBBggqgRzPVQGCLQNCAAQ+2joQe3zDXMAFx/vwu05rQ6B+4U42BgPSLsoqYAstD6AwVdQA0SQDAPVGSLhJ0T9QszD/FDUbVkWxNoaCCmW7o2cwZTAOBgNVHQ8BAf8EBAMCAMAwEwYDVR0lBAwwCgYIKwYBBQUHAwEwHwYDVR0jBBgwFoAU93/arv8hxtk6eq2g+6z+AqVO1cEwHQYDVR0OBBYEFAMWZaY2AwaQTNiFLpsa0dyCzBZ6MAwGCCqBHM9VAYN1BQADSQAwRgIhAIl2ZHGfln5hedcousARzZ2yeUjUbxSFMmhMmr5t6Q6nAiEAvqYX/KpIcvnPyB/Yiil+oq6DFdVM6P3vDxBhU/8taXExgZswgZgCAQEwMjAmMQswCQYDVQQGEwJDTjEXMBUGA1UEAwwOU3VueWFyZFNNMlJvb3QCCDyTAAAAAAAlMAoGCCqBHM9VAYMRMAsGCSqBHM9VAYItAQRGMEQCIEons2hit2967ciJo3QipM4lJgd1K3QmwOp9O/n8Tl86AiB9V6Z7jQogZFtoIz6kwAI6OQVnjbtJlmO31bZxgYRwKg==";
|
||||
String verify = api.attachedVerifyRD(sign);
|
||||
System.out.println("验签结果: " + verify);
|
||||
}
|
||||
|
||||
// 测试通过
|
||||
// 8018
|
||||
@Test
|
||||
public void testAttachedSignAndVerify3() {
|
||||
String dn = "C=CN,O=Sunyard,OU=8001,CN=8001";
|
||||
String orgData = "111111213323143243243";
|
||||
String sign = api.attachedSign(orgData.getBytes(), dn);
|
||||
System.out.println("签名结果: " + sign);
|
||||
|
||||
// String sign = "MIICsgYKKoEcz1UGAQQCAqCCAqIwggKeAgEBMQwwCgYIKoEcz1UBgxEwIAYKKoEcz1UGAQQCAaASBBAzMjE0MzEyMzQxMjQzMjE0oIIByTCCAcUwggFooAMCAQICCDyTAAAAAAAlMAwGCCqBHM9VAYN1BQAwJjELMAkGA1UEBhMCQ04xFzAVBgNVBAMMDlN1bnlhcmRTTTJSb290MB4XDTE3MDUxNzAyNTI0NFoXDTIyMDcyNTAyNTI0NFowPTELMAkGA1UEBhMCQ04xEDAOBgNVBAoMB1N1bnlhcmQxDTALBgNVBAsMBDgwMDExDTALBgNVBAMMBDgwMDEwWTATBgcqhkjOPQIBBggqgRzPVQGCLQNCAAQ+2joQe3zDXMAFx/vwu05rQ6B+4U42BgPSLsoqYAstD6AwVdQA0SQDAPVGSLhJ0T9QszD/FDUbVkWxNoaCCmW7o2cwZTAOBgNVHQ8BAf8EBAMCAMAwEwYDVR0lBAwwCgYIKwYBBQUHAwEwHwYDVR0jBBgwFoAU93/arv8hxtk6eq2g+6z+AqVO1cEwHQYDVR0OBBYEFAMWZaY2AwaQTNiFLpsa0dyCzBZ6MAwGCCqBHM9VAYN1BQADSQAwRgIhAIl2ZHGfln5hedcousARzZ2yeUjUbxSFMmhMmr5t6Q6nAiEAvqYX/KpIcvnPyB/Yiil+oq6DFdVM6P3vDxBhU/8taXExgZswgZgCAQEwMjAmMQswCQYDVQQGEwJDTjEXMBUGA1UEAwwOU3VueWFyZFNNMlJvb3QCCDyTAAAAAAAlMAoGCCqBHM9VAYMRMAsGCSqBHM9VAYItAQRGMEQCIEons2hit2967ciJo3QipM4lJgd1K3QmwOp9O/n8Tl86AiB9V6Z7jQogZFtoIz6kwAI6OQVnjbtJlmO31bZxgYRwKg==";
|
||||
X509 verify = api.attachedVerifyAndGetX509(sign);
|
||||
System.out.println("验签结果: " + verify);
|
||||
}
|
||||
|
||||
// 00883030303030303030
|
||||
// 3938
|
||||
// 30313232
|
||||
|
||||
@ -20,7 +20,7 @@ public class TestHT {
|
||||
public void before() {
|
||||
// 通过设置debug的属性开启debug,如果不设置则默认不打开
|
||||
System.setProperty("com.sunyard.sydapi4j.debug", "true");
|
||||
api = (SydApi4j) new SydApi4j().connect("61.164.40.82", 8889, null, 1000);
|
||||
api = (SydApi4j) new SydApi4j().connect("172.16.18.59", 8889, null, 1000);
|
||||
// api = (SydApi4j) new SydApi4j().connect("192.168.0.66", 8889, null, 1000);
|
||||
}
|
||||
|
||||
@ -56,8 +56,6 @@ public class TestHT {
|
||||
// 使用生成的对称密钥加密数据
|
||||
byte[] dataEnc = api.SYMEncryptData(SydApi.NALG_SM4, sessionKey, data.getBytes());
|
||||
|
||||
|
||||
|
||||
// 解密数字信封
|
||||
RetWrap retWrap1 = api.SM2ConfirmSessionKeyC(userId, cipherKey);
|
||||
printRetWrap(retWrap1);
|
||||
@ -93,6 +91,28 @@ public class TestHT {
|
||||
System.out.println("验签结果: " + Util.bytes2HexString(verify.getPubKey()));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testAttachedSignAndVerifyRD() {
|
||||
String dn = "C=CN,O=Sunyard,OU=8001,CN=8001";
|
||||
String orgData = "111111213323143243243";
|
||||
String sign = api.attachedSign(orgData.getBytes(), dn);
|
||||
System.out.println("签名结果: " + sign);
|
||||
|
||||
String verify = api.attachedVerifyRD(sign);
|
||||
System.out.println("验签结果: " + verify);
|
||||
}
|
||||
|
||||
// 测试通过
|
||||
// 76
|
||||
@Test
|
||||
public void testSM3Hash() {
|
||||
String orgData = "FFFFFFFFFFFFFFFF";
|
||||
|
||||
byte[] hash = api.SM3Hash(orgData.getBytes());
|
||||
|
||||
System.out.println("hash:" + Util.bytes2HexString(hash));
|
||||
}
|
||||
|
||||
|
||||
// =============================工具方法==============================================
|
||||
|
||||
|
||||
@ -1,41 +0,0 @@
|
||||
package com.sunyard.sydapi.test
|
||||
|
||||
import com.sunyard.proto.Util
|
||||
import kotlin.experimental.xor
|
||||
|
||||
|
||||
fun main(args: Array<String>) {
|
||||
|
||||
// val k1 = Util.hexString2Bytes(String(Util.hexString2Bytes("61613030313131313131313131313131")))
|
||||
// val k2 = Util.hexString2Bytes( String( Util.hexString2Bytes("33303435333533353331343133353338")))
|
||||
//
|
||||
//
|
||||
// println( String(k1) )
|
||||
// println( String(k2) )
|
||||
//
|
||||
//
|
||||
// val d = ByteArray(8)
|
||||
// for ( i in 0..7 ){
|
||||
// d[i] = k1[i] xor k2[i]
|
||||
// }
|
||||
//
|
||||
// println(Util.bytes2HexString(d) )
|
||||
// println( String(d) )
|
||||
|
||||
|
||||
val k1 = Util.hexString2Bytes("61613030313131313131313131313131")
|
||||
val k2 = Util.hexString2Bytes("33303435333533353331343133353338")
|
||||
|
||||
|
||||
println( String(k1) )
|
||||
println( String(k2) )
|
||||
|
||||
|
||||
val d = ByteArray(16)
|
||||
for ( i in 0..15 ){
|
||||
d[i] = k1[i] xor k2[i]
|
||||
}
|
||||
|
||||
println( Util.bytes2HexString(d) )
|
||||
println( String(d) )
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user