8019添加返回所有信息的接口

This commit is contained in:
zhoubin 2022-04-02 10:53:28 +08:00
parent 4e42f354b5
commit 3aa8237a4d
5 changed files with 64 additions and 41 deletions

Binary file not shown.

View File

@ -207,6 +207,17 @@ interface SydAttachedSVApi {
* 若发送报文返回证书信息标志位为1则返回CERT_INFO结构的证书数据 * 若发送报文返回证书信息标志位为1则返回CERT_INFO结构的证书数据
*/ */
X509 attachedVerifyAndGetX509(String sign); X509 attachedVerifyAndGetX509(String sign);
/**
* 带公钥证书与原始数据的数字签名验签遵循 PKCS#7
* 对指定的原始数据核验其带公钥证书签名如签名有效含证书无效且需返回签名者公钥证书信息时同时返回签名者公钥证书信息
*
* @param sign 已签名数据
* @return
* 若发送报文返回证书信息标志位为0则返回已签名数据,
* 若发送报文返回证书信息标志位为1则返回CERT_INFO结构的证书数据
*/
RetWrap attachedVerifyAndGetAll(String sign);
} }

View File

@ -9980,45 +9980,11 @@ public class SydApi4j implements SydApi {
@Override @Override
public String attachedVerifyRD(String sign) { public String attachedVerifyRD(String sign) {
Proto8019 proto = new Proto8019(); RetWrap retWrap = attachedVerifyAndGetAll(sign);
if (retWrap == null)
return null;
// 填充数据 return (String) retWrap.get("oData");
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);
} }
/** /**
@ -10030,6 +9996,14 @@ public class SydApi4j implements SydApi {
* 返回CERT_INFO结构的证书数据 * 返回CERT_INFO结构的证书数据
*/ */
public X509 attachedVerifyAndGetX509(String sign) { public X509 attachedVerifyAndGetX509(String sign) {
RetWrap retWrap = attachedVerifyAndGetAll(sign);
if (retWrap == null)
return null;
return (X509) retWrap.get("x509");
}
public RetWrap attachedVerifyAndGetAll(String sign) {
Proto8019 proto = new Proto8019(); Proto8019 proto = new Proto8019();
// 填充数据 // 填充数据
@ -10073,7 +10047,15 @@ public class SydApi4j implements SydApi {
certInfo = certInfo.substring(index); certInfo = certInfo.substring(index);
// System.out.println("证书信息: " + certInfo); // System.out.println("证书信息: " + certInfo);
X509 x509 = GetX509CertInfo(certInfo); X509 x509 = GetX509CertInfo(certInfo);
return x509;
PacketSection oData = (PacketSection) ret.get("oData");
byte[] oDataB = oData.getBytes();
RetWrap retWrap = new RetWrap();
retWrap.put("x509", x509);
retWrap.put("oData", new String(oDataB));
return retWrap;
} }

View File

@ -2386,7 +2386,7 @@ public class TestAllMethods {
// 测试通过 // 测试通过
// 8018 // 8018
@Test @Test
public void testAttachedSignAndVerifyC() { public void testAttachedSignAndVerifyRD() {
String dn = "C=CN,O=Sunyard,OU=8001,CN=8001"; String dn = "C=CN,O=Sunyard,OU=8001,CN=8001";
String orgData = "111111213323143243243"; String orgData = "111111213323143243243";
String sign = api.attachedSign(orgData.getBytes(), dn); String sign = api.attachedSign(orgData.getBytes(), dn);
@ -2400,7 +2400,7 @@ public class TestAllMethods {
// 测试通过 // 测试通过
// 8018 // 8018
@Test @Test
public void testAttachedSignAndVerify3() { public void testAttachedSignAndVerifyGetX509() {
String dn = "C=CN,O=Sunyard,OU=8001,CN=8001"; String dn = "C=CN,O=Sunyard,OU=8001,CN=8001";
String orgData = "111111213323143243243"; String orgData = "111111213323143243243";
String sign = api.attachedSign(orgData.getBytes(), dn); String sign = api.attachedSign(orgData.getBytes(), dn);
@ -2411,6 +2411,22 @@ public class TestAllMethods {
System.out.println("验签结果: " + verify); System.out.println("验签结果: " + verify);
} }
// 测试通过
// 8018
@Test
public void testAttachedSignAndVerifyGetAll() {
String dn = "C=CN,O=Sunyard,OU=8001,CN=8001";
String orgData = "111111213323143243243";
String sign = api.attachedSign(orgData.getBytes(), dn);
System.out.println("签名结果: " + sign);
RetWrap verify = api.attachedVerifyAndGetAll(sign);
if (verify != null) {
System.out.println("x509公钥: " + Util.bytes2HexString(((X509)verify.get("x509")).getPubKey()));
System.out.println("签名原数据: " + verify.get("oData"));
}
}
// 00883030303030303030 // 00883030303030303030
// 3938 // 3938
// 30313232 // 30313232

View File

@ -102,6 +102,20 @@ public class TestHT {
System.out.println("验签结果: " + verify); System.out.println("验签结果: " + verify);
} }
@Test
public void testAttachedSignAndVerifyGetAll() {
String dn = "C=CN,O=Sunyard,OU=8001,CN=8001";
String orgData = "111111213323143243243";
String sign = api.attachedSign(orgData.getBytes(), dn);
System.out.println("签名结果: " + sign);
RetWrap verify = api.attachedVerifyAndGetAll(sign);
if (verify != null) {
System.out.println("x509公钥: " + Util.bytes2HexString(((X509)verify.get("x509")).getPubKey()));
System.out.println("签名原数据: " + verify.get("oData"));
}
}
// 测试通过 // 测试通过
// 76 // 76
@Test @Test