增加证书删除指令

This commit is contained in:
yihzhou
2024-04-11 15:29:30 +08:00
parent 9c2cdb5214
commit f05c04f957
7 changed files with 252 additions and 4 deletions
@@ -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
) ;
}
+63 -4
View File
@@ -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<String, Object>) 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<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("certDn", dn);
// 渲染发送
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 ((be[0] ^ be[1]) != 0) {
SydApiException e = new SydApiException(error.getInfo(), error.autoInt());
println("删除失败=" + e.toString());
return false;
} else {
return true;
}
}
// 测试通过