diff --git a/DProto/8011.xml b/DProto/8011.xml
new file mode 100644
index 0000000..4317421
--- /dev/null
+++ b/DProto/8011.xml
@@ -0,0 +1,64 @@
+
+
+
+
+
+ 8011
+
+
+
+
+
+
+
+
+
+
+
+ 8012
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/main/java/com/sunyard/inf/SydNakedSVApi.java b/src/main/java/com/sunyard/inf/SydNakedSVApi.java
index 94bf623..5773ef1 100644
--- a/src/main/java/com/sunyard/inf/SydNakedSVApi.java
+++ b/src/main/java/com/sunyard/inf/SydNakedSVApi.java
@@ -1,5 +1,7 @@
package com.sunyard.inf;
+import com.sunyard.SydApiException;
+
/**
* 不经过 CA 授信
* 直接使用公私钥对签名验签
@@ -92,6 +94,27 @@ interface SydNakedSVApi {
byte[] sign,
String sCertDN
);
+
+ /**
+ * 使用指定的证书 DN,对指定的原始数据编制裸验签(遵循PKCS#1) 安徽农信定制接口
+ * @param cert 上传证书
+ * @param rFlag 摘要算法 1—DIGEST_ALGO_MD5 M
+ * * 2—DIGEST_ALGO_SHA1 S
+ * * 3—DIGEST_ALGO_SHA256 R
+ * 4-SM2 国密证书,SM3算法
+ * * S代表RSA-SHA1进行签名,如果为R代表RSA-SHA256进行签名,如果为M代表RSA-MD5进行签名
+ * @param orgData 待签名的原始数据
+ * @param sign 签名数据
+ * @param sCertDN 签名者证书 DN
+ * @return 验签是否通过
+ */
+ public boolean SYD_NakedVerifyAll4NX (
+ String cert,
+ int rFlag,
+ byte[] orgData,
+ byte[] sign,
+ String sCertDN
+ ) ;
}
diff --git a/src/main/java/racal/sunyard/main/SydApi4j.java b/src/main/java/racal/sunyard/main/SydApi4j.java
index 5203f61..ee8ad80 100644
--- a/src/main/java/racal/sunyard/main/SydApi4j.java
+++ b/src/main/java/racal/sunyard/main/SydApi4j.java
@@ -522,6 +522,25 @@ public class SydApi4j implements SydApi {
}
+ public boolean SYD_NakedVerifyAll4NX(String cert,int rFlag,byte[] orgData,byte[] sign, String sCertDN){
+ boolean verify = false;
+ try {
+ //先导入证书
+ importCert(cert.getBytes(),null);
+ if( rFlag == 4 ){//SM2 国密算法
+ verify = SYD_NakedVerify(orgData,sign,sCertDN);
+ }else {
+ verify = SYD_NakedVerify(rFlag,orgData,sign,sCertDN);
+ }
+ //删除导入的证书
+ deleteCert(sCertDN);
+ return verify;
+ } catch ( SydApiException e) {
+ throw e;
+ }
+
+ }
+
public byte[] SYD_NakedSign(byte[] orgData, String sCertDN) {
if (orgData == null) {
throw new IllegalArgumentException("输入数据为 null");
@@ -812,14 +831,14 @@ public class SydApi4j implements SydApi {
) {
throw new SydApiException("包序号不匹配", -4);
}
+
ret = (Map) ret.get("data");
PacketSection error = (PacketSection) ret.get("error");
byte[] be = error.getBytes();
if ((0 != (be[0] ^ be[1]))) {
- SydApiException e = new SydApiException(error.getInfo(), error.autoInt());
- println("验签失败=" + e.toString());
- return false;
+ throw new SydApiException(error.getInfo(), error.autoInt());
}
+
return true;
}
@@ -1749,7 +1768,47 @@ public class SydApi4j implements SydApi {
@Override
public boolean deleteCert(String dn) {
- return false;
+ Proto8011 proto = new Proto8011();
+
+ // 填充数据
+ HashMap packet = new HashMap();
+
+ HashMap data = new HashMap();
+ packet.put("data", data);
+
+ PacketSN sn = PacketSN.gen();
+ packet.put("header", sn.getSn().array());
+ data.put("certDn", dn);
+
+
+
+ // 渲染发送
+ ByteBuffer bb = proto.rend(packet);
+
+
+ synchronized (this) {
+ // 响应解析
+ bb = syncRead(syncSend(bb));
+ }
+
+ Packet p = proto.parse(bb, packet);
+ Map ret = p.toMap();
+
+ if (
+ !Arrays.equals(sn.getSn().array(), ((PacketSection) ret.get("header")).getBytes())
+ ) {
+ throw new SydApiException("包序号不匹配", -4);
+ }
+ ret = (Map) ret.get("data");
+ PacketSection error = (PacketSection) ret.get("error");
+ byte[] be = error.getBytes();
+ if ((be[0] ^ be[1]) != 0) {
+ SydApiException e = new SydApiException(error.getInfo(), error.autoInt());
+ println("删除失败=" + e.toString());
+ return false;
+ } else {
+ return true;
+ }
}
// 测试通过
diff --git a/src/test/java/sample/Sample4ZS.java b/src/test/java/sample/Sample4ZS.java
index 57f64c1..3524934 100644
--- a/src/test/java/sample/Sample4ZS.java
+++ b/src/test/java/sample/Sample4ZS.java
@@ -118,6 +118,10 @@ public class Sample4ZS {
// List allCert = api.getAllCert();
// System.out.println(allCert);
+ api.GetX509CertInfo("MIICxjCCAmqgAwIBAgIFIGZACVcwDAYIKoEcz1UBg3UFADBdMQswCQYDVQQGEwJDTjEwMC4GA1UECgwnQ2hpbmEgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MRwwGgYDVQQDDBNDRkNBIFRFU1QgU00yIE9DQTExMB4XDTIzMDYwNjA5MDIzNFoXDTI1MDYwNjE1NTk1OVowfDELMAkGA1UEBhMCY24xFTATBgNVBAoMDENGQ0EgVEVTVCBDQTEOMAwGA1UECwwFQ05BUFMxFDASBgNVBAsMC0VudGVycHJpc2VzMTAwLgYDVQQDDCcwNDFAWjMxMzIwNTA1NzgzMEAzMTMyMDUwNTc4MzBAMDAwMDAwMDgwWTATBgcqhkjOPQIBBggqgRzPVQGCLQNCAAQzwB2NYu5u0YaSEpnH4rsDh1OOhiHD");
+
+
+
}
diff --git a/src/test/java/sample/SamplePKCS7.java b/src/test/java/sample/SamplePKCS7.java
index e5b72e2..7cb4602 100644
--- a/src/test/java/sample/SamplePKCS7.java
+++ b/src/test/java/sample/SamplePKCS7.java
@@ -2,6 +2,7 @@ package sample;
import com.sunyard.SydApi;
+import com.sunyard.proto.Util;
import racal.sunyard.main.SydApi4j;
diff --git a/src/test/java/sample/Test4Nongxin.java b/src/test/java/sample/Test4Nongxin.java
index f30ccb5..81845f9 100644
--- a/src/test/java/sample/Test4Nongxin.java
+++ b/src/test/java/sample/Test4Nongxin.java
@@ -1,6 +1,7 @@
package sample;
import cn.hutool.core.codec.Base64;
+import com.sunyard.RetWrap;
import com.sunyard.SydApi;
import com.sunyard.SydApiException;
import com.sunyard.cert.X509;
@@ -201,5 +202,49 @@ public class Test4Nongxin {
+ }
+
+ @Test
+ public void test(){
+ System.setProperty("com.sunyard.sydapi4j.debug", "true");
+
+ //设置连接
+ SydApiBuilder builder = new SydApiBuilder().setIp("192.168.0.156");
+ SydApi4j api = (SydApi4j) builder.build();
+
+ String cert = "-----BEGIN CERTIFICATE-----\n" +
+ "MIIDcTCCAlmgAwIBAgIFEEcHQmgwDQYJKoZIhvcNAQEFBQAwWDELMAkGA1UEBhMC\n" +
+ "Q04xMDAuBgNVBAoTJ0NoaW5hIEZpbmFuY2lhbCBDZXJ0aWZpY2F0aW9uIEF1dGhv\n" +
+ "cml0eTEXMBUGA1UEAxMOQ0ZDQSBURVNUIE9DQTEwHhcNMjExMjEwMDgyOTA0WhcN\n" +
+ "MjYxMjEwMDgyOTA0WjBoMQswCQYDVQQGEwJDTjESMBAGA1UEChMJQ0ZDQSBPQ0Ex\n" +
+ "MQ8wDQYDVQQLEwZUUEMtUzMxGTAXBgNVBAsTEE9yZ2FuaXphdGlvbmFsLTExGTAX\n" +
+ "BgNVBAMTEEFSQ1U1MjkxMDAwMDA3MDEwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJ\n" +
+ "AoGBAL+kPIjcWzRwQE6Q3ydtQsDaJGMxv0At2WrIQqb9ONEvqMbQZCd69qfBvsRj\n" +
+ "QI/UlG3btk6P/ZBGkNc99fX43VMqPtIlVjgRozLQcQJPFbiU5cT5PPqnrxo652RU\n" +
+ "KNFQhwmanPjAjmZd9woc2l0BnfF92QFDPDRprS1fWLFbKPTvAgMBAAGjgbUwgbIw\n" +
+ "HwYDVR0jBBgwFoAUz3CdYeudfC6498sCQPcJnf4zdIAwOQYDVR0fBDIwMDAuoCyg\n" +
+ "KoYoaHR0cDovL3VjcmwuY2ZjYS5jb20uY24vUlNBL2NybDgzMjA1LmNybDALBgNV\n" +
+ "HQ8EBAMCA+gwHQYDVR0OBBYEFGey5r5CdOUDaW3KRdZ0xg19n+dhMCgGA1UdJQQh\n" +
+ "MB8GCCsGAQUFBwMCBggrBgEFBQcDBAYJKoZIhvcvAQEFMA0GCSqGSIb3DQEBBQUA\n" +
+ "A4IBAQChyjTNJUkdspDa/6sPYuZdE0/yPFcbd0ag4wLWrSCiRyV0J5BhJPIApdRT\n" +
+ "3kCIem2jRbq3H/W1vUYi1JeGHcrvTOOMQb9yfgCzfQLvAdv0at4zupy1uXL6uE1S\n" +
+ "WL1v6Vub630tJ0A45KsVESB5Fb+UZ/cvdJIMHjcYYzPw+HHH6q9e3R0QUMz3Mxpl\n" +
+ "DCg66HQBL/jKSl/w13QTdRPL9dSDBtpzDqZH5JQK4rbZSdFnbC2TQs+ljsKd5TCg\n" +
+ "52HcC92peeCXCEsb3Zw0js5nTbX+1da8FgqDQTeKIItgXBvQIRJUeelKga6opRNM\n" +
+ "QM0Egoc/dBdM45jVnxzpreRKzsDQ\n" +
+ "-----END CERTIFICATE-----";
+ String odata = "BankAcctTransfer1710469760912INNERDEBIT966229539600100010640王二类1566217788308301020599王二类1402/402361018886安徽农金00.001001";
+ String signRsa = "0564FC7C0E3FDAF225295BBD0E32BF16081D561B4C262B5E095E04E828DC8AAC71723F849B615A41AA012FB9B532017D382919A498A93EAD35CB3AA80BA29510C174BF61B6E5DCEA78DF9AF7C3B80513BA82F82030347F463C03826C90CC9C207012BD456C21D9DF4E2C79EE042B8BE229EA3C40F232AF661BE63E61A07DC2A3";
+
+ try {
+ String rsaDn = "C=CN,O=CFCA OCA1,OU=TPC-S3,OU=Organizational-1,CN=ARCU529100000701";
+ boolean nakedVerify2 = api.SYD_NakedVerifyAll4NX(cert,2,odata.getBytes(),Util.hexString2Bytes(signRsa),rsaDn);
+ System.out.println("RSA数据验签:"+nakedVerify2 );
+ } catch (SydApiException e) {
+ e.printStackTrace();
+ }
+
+
+
}
}
diff --git a/src/test/java/sample/sample4nx.java b/src/test/java/sample/sample4nx.java
new file mode 100644
index 0000000..0e3af3e
--- /dev/null
+++ b/src/test/java/sample/sample4nx.java
@@ -0,0 +1,52 @@
+package sample;
+
+import com.sunyard.SydApiException;
+import com.sunyard.proto.Util;
+import racal.sunyard.main.SydApi4j;
+import racal.sunyard.main.SydApiBuilder;
+
+public class sample4nx {
+ public static void main(String[] args) {
+ //打印调试日志
+ System.setProperty("com.sunyard.sydapi4j.debug", "true");
+
+ //设置连接
+ SydApiBuilder builder = new SydApiBuilder().setIp("192.168.0.156");
+ SydApi4j api = (SydApi4j) builder.build();
+
+ String cert = "-----BEGIN CERTIFICATE-----\n" +
+ "MIIDcTCCAlmgAwIBAgIFEEcHQmgwDQYJKoZIhvcNAQEFBQAwWDELMAkGA1UEBhMC\n" +
+ "Q04xMDAuBgNVBAoTJ0NoaW5hIEZpbmFuY2lhbCBDZXJ0aWZpY2F0aW9uIEF1dGhv\n" +
+ "cml0eTEXMBUGA1UEAxMOQ0ZDQSBURVNUIE9DQTEwHhcNMjExMjEwMDgyOTA0WhcN\n" +
+ "MjYxMjEwMDgyOTA0WjBoMQswCQYDVQQGEwJDTjESMBAGA1UEChMJQ0ZDQSBPQ0Ex\n" +
+ "MQ8wDQYDVQQLEwZUUEMtUzMxGTAXBgNVBAsTEE9yZ2FuaXphdGlvbmFsLTExGTAX\n" +
+ "BgNVBAMTEEFSQ1U1MjkxMDAwMDA3MDEwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJ\n" +
+ "AoGBAL+kPIjcWzRwQE6Q3ydtQsDaJGMxv0At2WrIQqb9ONEvqMbQZCd69qfBvsRj\n" +
+ "QI/UlG3btk6P/ZBGkNc99fX43VMqPtIlVjgRozLQcQJPFbiU5cT5PPqnrxo652RU\n" +
+ "KNFQhwmanPjAjmZd9woc2l0BnfF92QFDPDRprS1fWLFbKPTvAgMBAAGjgbUwgbIw\n" +
+ "HwYDVR0jBBgwFoAUz3CdYeudfC6498sCQPcJnf4zdIAwOQYDVR0fBDIwMDAuoCyg\n" +
+ "KoYoaHR0cDovL3VjcmwuY2ZjYS5jb20uY24vUlNBL2NybDgzMjA1LmNybDALBgNV\n" +
+ "HQ8EBAMCA+gwHQYDVR0OBBYEFGey5r5CdOUDaW3KRdZ0xg19n+dhMCgGA1UdJQQh\n" +
+ "MB8GCCsGAQUFBwMCBggrBgEFBQcDBAYJKoZIhvcvAQEFMA0GCSqGSIb3DQEBBQUA\n" +
+ "A4IBAQChyjTNJUkdspDa/6sPYuZdE0/yPFcbd0ag4wLWrSCiRyV0J5BhJPIApdRT\n" +
+ "3kCIem2jRbq3H/W1vUYi1JeGHcrvTOOMQb9yfgCzfQLvAdv0at4zupy1uXL6uE1S\n" +
+ "WL1v6Vub630tJ0A45KsVESB5Fb+UZ/cvdJIMHjcYYzPw+HHH6q9e3R0QUMz3Mxpl\n" +
+ "DCg66HQBL/jKSl/w13QTdRPL9dSDBtpzDqZH5JQK4rbZSdFnbC2TQs+ljsKd5TCg\n" +
+ "52HcC92peeCXCEsb3Zw0js5nTbX+1da8FgqDQTeKIItgXBvQIRJUeelKga6opRNM\n" +
+ "QM0Egoc/dBdM45jVnxzpreRKzsDQ\n" +
+ "-----END CERTIFICATE-----";
+ String odata = "BankAcctTransfer1710469760912INNERDEBIT966229539600100010640王二类1566217788308301020599王二类1402/402361018886安徽农金00.001001";
+ String signRsa = "0564FC7C0E3FDAF225295BBD0E32BF16081D561B4C262B5E095E04E828DC8AAC71723F849B615A41AA012FB9B532017D382919A498A93EAD35CB3AA80BA29510C174BF61B6E5DCEA78DF9AF7C3B80513BA82F82030347F463C03826C90CC9C207012BD456C21D9DF4E2C79EE042B8BE229EA3C40F232AF661BE63E61A07DC2A3";
+
+ try {
+ String rsaDn = "C=CN,O=CFCA OCA1,OU=TPC-S3,OU=Organizational-1,CN=ARCU529100000701";
+ boolean nakedVerify2 = api.SYD_NakedVerifyAll4NX(cert,2,odata.getBytes(), Util.hexString2Bytes(signRsa),rsaDn);
+ System.out.println("RSA数据验签:"+nakedVerify2 );
+
+
+ } catch (SydApiException e) {
+ e.printStackTrace();
+ }
+
+ }
+}