diff --git a/src/main/java/com/sunyard/inf/SydSVApi.java b/src/main/java/com/sunyard/inf/SydSVApi.java index 4592b31..2ae49de 100644 --- a/src/main/java/com/sunyard/inf/SydSVApi.java +++ b/src/main/java/com/sunyard/inf/SydSVApi.java @@ -177,7 +177,7 @@ interface SydAttachedSVApi { * @return * 符合PKCS7标准的签名结果 */ - byte[] attachedSign(byte[] orgData, String sCertDN); + String attachedSign(byte[] orgData, String sCertDN); /** * 带公钥证书与原始数据的数字签名验签(遵循 PKCS#7) @@ -186,6 +186,7 @@ interface SydAttachedSVApi { * @param sign 已签名数据 * @return true 验签通过 false 验签失败 */ + boolean attachedVerify(String sign); boolean attachedVerify(byte[] sign); /** @@ -196,6 +197,7 @@ interface SydAttachedSVApi { * @return 成功返回签名的原数据,失败则报错 */ byte[] attachedVerifyRD(byte[] sign); + byte[] attachedVerifyRD(String sign); /** * 带公钥证书与原始数据的数字签名验签(遵循 PKCS#7) @@ -207,6 +209,7 @@ interface SydAttachedSVApi { * 若发送报文返回证书信息标志位为1,则返回CERT_INFO结构的证书数据 */ X509 attachedVerifyAndGetX509(byte[] sign); + X509 attachedVerifyAndGetX509(String sign); /** * 带公钥证书与原始数据的数字签名验签(遵循 PKCS#7) diff --git a/src/main/java/racal/sunyard/main/SydApi4j.java b/src/main/java/racal/sunyard/main/SydApi4j.java index 16e0f9d..bbfadba 100644 --- a/src/main/java/racal/sunyard/main/SydApi4j.java +++ b/src/main/java/racal/sunyard/main/SydApi4j.java @@ -10415,7 +10415,7 @@ public class SydApi4j implements SydApi { * @return 符合PKCS7标准的签名结果 */ @Override - public byte[] attachedSign(byte[] orgData, String sCertDN) { + public String attachedSign(byte[] orgData, String sCertDN) { sCertDN = DnUtil.verifyDn( sCertDN ); Proto8018 proto = new Proto8018(); @@ -10462,7 +10462,12 @@ public class SydApi4j implements SydApi { throw new SydApiException(error.getInfo(), error.autoInt()); } - return ((PacketSection) ret.get("signature")).getString().getBytes(); + return ((PacketSection) ret.get("signature")).getString(); + } + + @Override + public boolean attachedVerify(String sign) { + return attachedVerify( sign.getBytes() ); } @Override @@ -10476,7 +10481,7 @@ public class SydApi4j implements SydApi { PacketSN sn = PacketSN.gen(); packet.put("header", sn.getSn().array()); - data.put("signData", sign); + data.put("signData", sign ); data.put("flag$option", 0); // 渲染发送 @@ -10508,6 +10513,11 @@ public class SydApi4j implements SydApi { return true; } + @Override + public byte[] attachedVerifyRD(String sign) { + return attachedVerifyRD( sign.getBytes() ); + } + @Override public byte[] attachedVerifyRD(byte[] sign) { RetWrap retWrap = attachedVerifyAndGetAll(sign); @@ -10524,6 +10534,10 @@ public class SydApi4j implements SydApi { * @param sign 已签名数据 * @return 返回CERT_INFO结构的证书数据 */ + public X509 attachedVerifyAndGetX509(String sign) { + return attachedVerifyAndGetX509( sign.getBytes() ); + } + public X509 attachedVerifyAndGetX509(byte[] sign) { RetWrap retWrap = attachedVerifyAndGetAll( sign); if (retWrap == null) @@ -10532,6 +10546,10 @@ public class SydApi4j implements SydApi { return (X509) retWrap.get("x509"); } + public RetWrap attachedVerifyAndGetAll(String sign) { + return attachedVerifyAndGetAll( sign.getBytes() ); + } + public RetWrap attachedVerifyAndGetAll(byte[] sign) { Proto8019 proto = new Proto8019(); diff --git a/src/test/java/com/sunyard/sydapi/loadrunner/ShangTest.java b/src/test/java/com/sunyard/sydapi/loadrunner/ShangTest.java index 6528e6f..bb5c4bc 100644 --- a/src/test/java/com/sunyard/sydapi/loadrunner/ShangTest.java +++ b/src/test/java/com/sunyard/sydapi/loadrunner/ShangTest.java @@ -22,7 +22,7 @@ public class ShangTest { } public void action(){ - byte[] sign = api.attachedSign(testData, dn); + String sign = api.attachedSign(testData, dn); boolean ret = api.attachedVerify( sign ); assert ret; diff --git a/src/test/java/com/sunyard/sydapi/test/TestHT.java b/src/test/java/com/sunyard/sydapi/test/TestHT.java index dd2665b..1726019 100644 --- a/src/test/java/com/sunyard/sydapi/test/TestHT.java +++ b/src/test/java/com/sunyard/sydapi/test/TestHT.java @@ -45,11 +45,11 @@ public class TestHT { byte[] orgData = "111111213323143243243".getBytes("UTF-8"); // 签名 - byte[] sign = api.attachedSign(orgData, dn); - System.out.println("签名结果: " + Util.bytes2HexString(sign) ); + String sign = api.attachedSign(orgData, dn); + System.out.println("签名结果: " + sign ); // 生成数字信封 - RetWrap retWrap = api.generateDEByDn(dn, sign); + RetWrap retWrap = api.generateDEByDn(dn, sign.getBytes() ); byte[] cipherKey = (byte[]) retWrap.get(SydApi.RET_CIPHER_KEY); System.out.println("数字信封: " + new String(cipherKey)); @@ -106,8 +106,8 @@ public class TestHT { public void testAttachedSignAndVerify() { String dn = "C=CN,O=CFCA OCA1,OU=YCCA,OU=Individual-2,CN=YCCA@黄金交易所@Zhuangj@1"; String orgData = "111111213323143243243"; - byte[] sign = api.attachedSign(orgData.getBytes(), dn); - System.out.println("签名结果: " + Util.bytes2HexString(sign) ); + String sign = api.attachedSign(orgData.getBytes(), dn); + System.out.println("签名结果: " + sign); boolean verify = api.attachedVerify(sign); System.out.println("验签结果: " + verify); @@ -117,8 +117,8 @@ public class TestHT { public void testAttachedSignAndVerifyGetX509() { String dn = "C=CN,O=CFCA OCA1,OU=YCCA,OU=Individual-2,CN=YCCA@黄金交易所@Zhuangj@1"; byte[] orgData = "111111213323143243243".getBytes(); - byte[] sign = api.attachedSign(orgData, dn); - System.out.println("签名结果: " + Util.bytes2HexString(sign) ); + String sign = api.attachedSign(orgData, dn); + System.out.println("签名结果: " + sign ); X509 verify = api.attachedVerifyAndGetX509(sign); System.out.println("验签结果: " + Util.bytes2HexString(verify.getPubKey())); @@ -128,8 +128,8 @@ public class TestHT { public void testAttachedSignAndVerifyRD() { String dn = "C=CN,O=CFCA OCA1,OU=YCCA,OU=Individual-2,CN=YCCA@黄金交易所@Zhuangj@1"; String orgData = "111111213323143243243"; - byte[] sign = api.attachedSign(orgData.getBytes(), dn); - System.out.println("签名结果: " + Util.bytes2HexString(sign)); + String sign = api.attachedSign(orgData.getBytes(), dn); + System.out.println("签名结果: " + sign); byte[] verify = api.attachedVerifyRD(sign); System.out.println("验签结果: " + Util.bytes2HexString(verify)); @@ -139,8 +139,8 @@ public class TestHT { public void testAttachedSignAndVerifyGetAll() { String dn = "C=CN,O=CFCA OCA1,OU=YCCA,OU=Individual-2,CN=YCCA@黄金交易所@Zhuangj@1"; byte[] orgData = "111111213323143243243".getBytes(); - byte[] sign = api.attachedSign(orgData, dn); - System.out.println("签名结果: " + Util.bytes2HexString(sign)); + String sign = api.attachedSign(orgData, dn); + System.out.println("签名结果: " + sign); RetWrap verify = api.attachedVerifyAndGetAll(sign); if (verify != null) {