diff --git a/src/main/java/com/Sample/TestDemo.java b/src/main/java/com/Sample/TestDemo.java index 5e517d0..4f3351c 100644 --- a/src/main/java/com/Sample/TestDemo.java +++ b/src/main/java/com/Sample/TestDemo.java @@ -43,9 +43,22 @@ public class TestDemo { public static Boolean detachSignVer(SydApi4j api, String orgData, String sign) { boolean signVerify = api.detachedVerifyAll(2, orgData.getBytes(), sign); System.out.println("detach验签:"+ signVerify); - return Boolean.valueOf(signVerify); + return signVerify; } + public static String snSign(SydApi4j api, String sn, String orgData) { + String sign = api.SM2SignCustomized(sn,orgData.getBytes()); + System.out.println("sn签名结果:"+ sign); + return sign; + } + + public static Boolean snSignVer(SydApi4j api, String sn,String orgData, String sign) { + boolean signVerify = api.SM2VerifyCustomized(sn, orgData.getBytes(), sign); + System.out.println("sn验签:"+ signVerify); + return signVerify; + } + + public static void testAll(SydApi4j api, String certDn, String orgData) { byte[] nakedSign = api.SYD_NakedSignAll(2, orgData.getBytes(), certDn); System.out.println("签名数据:"+ Util.bytes2HexString(nakedSign)); @@ -61,6 +74,7 @@ public class TestDemo { System.out.println("detach签名结果:"+ sign); boolean signVerify = api.detachedVerifyAll(2, orgData.getBytes(), sign); System.out.println("detach验签:"+ signVerify); + } public static void main(String[] args) throws InterruptedException { @@ -100,6 +114,12 @@ public class TestDemo { case 6: detachSignVer(api, orgData, signorenData); break; + case 7: + snSign(api, certDn, orgData); + break; + case 8: + snSignVer(api, certDn,orgData, signorenData); + break; case 0: testAll(api, certDn, orgData); break; diff --git a/src/test/java/sample/Shangqing.java b/src/test/java/sample/Shangqing.java index 15a93d6..0bd6120 100644 --- a/src/test/java/sample/Shangqing.java +++ b/src/test/java/sample/Shangqing.java @@ -26,7 +26,10 @@ public class Shangqing { public void before() { // 通过设置debug的属性开启debug,如果不设置则默认不打开 System.setProperty("com.sunyard.sydapi4j.debug", "true"); - api = (SydApi4j) new SydApi4j().connect("172.16.17.196", 8889, null, 1000); + // api = (SydApi4j) new SydApi4j().connect("172.16.17.161", 8889, null, 1000); + api = (SydApi4j) new SydApi4j().connect("192.168.0.100", 8889, null, 1000); + + } @After @@ -92,5 +95,32 @@ public class Shangqing { // System.out.println(s); } + @Test + public void test80(){ + System.out.print("\n\n----- SM2 算法签名 Customized"); + String sm2sign = null; + sm2sign = api.SM2SignCustomized( + "019023EB0005", orgData + ); + + System.out.print("\n\n----- SM2 算法签名 结果: "); + System.out.println(sm2sign); + + // String sm2sign = "m/7+qbOR2GKiCsZd6/nu9uwX4nOXP23DTd7hvO0mZAT2trr1mTjry5quQ76Me4utalD/HxfBmjV4bY+rGQt5Xg=="; + + System.out.println("\n\n----- SM2 算法验签 Customized -----"); + + boolean ver = false; + + ver = api.SM2VerifyCustomized("019023EB0005", orgData, sm2sign); + + System.out.println(ver); + + + + +// + } + } diff --git a/src/test/java/sample/sample4nx.java b/src/test/java/sample/sample4nx.java index 0e3af3e..f3e370e 100644 --- a/src/test/java/sample/sample4nx.java +++ b/src/test/java/sample/sample4nx.java @@ -1,52 +1,57 @@ package sample; +import com.sunyard.RetWrap; import com.sunyard.SydApiException; +import com.sunyard.cert.X509; import com.sunyard.proto.Util; +import com.sunyard.util.ASN1Util; +import org.junit.Test; 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"); +import java.io.IOException; +public class sample4nx { + @Test + public void nx() throws IOException { //设置连接 - SydApiBuilder builder = new SydApiBuilder().setIp("192.168.0.156"); + System.setProperty("com.sunyard.sydapi4j.debug", "true"); + SydApiBuilder builder = new SydApiBuilder().setIp("172.16.18.34"); 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"; + String data = "eyJzZW5kb3JnYW5pemF0aW9uIjoiMDAwMCIsInNlbmRpZGVudGlmaWNhdGlvbiI6IkRFTVAiLCJyZWN2b3JnYW5pemF0aW9uIjoiMDAwMCIsInJlY3ZpZGVudGlmaWNhdGlvbiI6IkRFTVAiLCJjZXJ0Y2hndHlwZSI6IkNDMDAifQ=="; + String sign = "MIIDyAYKKoEcz1UGAQQCAqCCA7gwggO0AgEBMQ4wDAYIKoEcz1UBgxEFADAMBgoqgRzPVQYBBAIBoIICuTCCArUwggJZoAMCAQICBSBUdABBMAwGCCqBHM9VAYN1BQAwXTELMAkGA1UEBhMCQ04xMDAuBgNVBAoMJ0NoaW5hIEZpbmFuY2lhbCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEcMBoGA1UEAwwTQ0ZDQSBURVNUIFNNMiBPQ0ExMTAeFw0yMjA0MTQwMTUwNDhaFw0yNDA3MzExNTU5NTlaMGsxCzAJBgNVBAYTAmNuMRUwEwYDVQQKDAxDRkNBIFRFU1QgQ0ExDTALBgNVBAsMBERFTVAxFDASBgNVBAsMC0VudGVycHJpc2VzMSAwHgYDVQQDDBcwNDFAWjAwMDBAREVNUEAwMDAwMDA0OTBZMBMGByqGSM49AgEGCCqBHM9VAYItA0IABLKA4YpNpmq+f156Bxq8573+GWfvyFPyfpbWbOr/MROM0bM+Zzu35ygRBGY170Lb50F4EOhkbi/C91I1T7POecCjgfUwgfIwHwYDVR0jBBgwFoAUvqZ+TT18j6BV5sEvCS4sIEOzQn8wSAYDVR0gBEEwPzA9BghggRyG7yoBAjAxMC8GCCsGAQUFBwIBFiNodHRwOi8vd3d3LmNmY2EuY29tLmNuL3VzL3VzLTE1Lmh0bTA6BgNVHR8EMzAxMC+gLaArhilodHRwOi8vMjEwLjc0LjQyLjMvT0NBMTEvU00yL2NybDE4MDcwLmNybDALBgNVHQ8EBAMCA+gwHQYDVR0OBBYEFL6S9JFZX4aCWpd10bDHk43aXmXYMB0GA1UdJQQWMBQGCCsGAQUFBwMCBggrBgEFBQcDBDAMBggqgRzPVQGDdQUAA0gAMEUCIQDlc0JB0kTQb+seK7XkBovtdode7qChIkTFy49HGl5NpwIgVbklyQWaJ2EX6ZX+cl2w9B6AczrDPwOK9ZScVXj/y1AxgdMwgdACAQEwZjBdMQswCQYDVQQGEwJDTjEwMC4GA1UECgwnQ2hpbmEgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MRwwGgYDVQQDDBNDRkNBIFRFU1QgU00yIE9DQTExAgUgVHQAQTAMBggqgRzPVQGDEQUAMA0GCSqBHM9VAYItAQUABEYwRAIgdSjzv1eik3TCLw2KU+QmpzG5AIgy5iwS6VGsQjRtEi0CIAIUD4WTeYoypK7eYsw4b0pSscv07Z/qlYuEWMtB9n04"; +// X509 x509 = api.detachedVerifyAndGetX509(1, data.getBytes(), sign); +// System.out.println(x509.getCert()); - 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 ); + //解析p7签名内容,从detach签名中获取证书段 + RetWrap retWrap = ASN1Util.takeOutOriginDataFromPKCS7Sign(sign); + String cert = (String) retWrap.get("cert"); + System.out.println(cert); - } catch (SydApiException e) { - e.printStackTrace(); + //完善证书为标准格式,具有头尾 + String pemCert; + if(cert.contains("-----BEGIN CERTIFICATE-----")){ + pemCert =cert; + }else { + String cert_begin = "-----BEGIN CERTIFICATE-----\n"; + String end_cert = "\n-----END CERTIFICATE-----"; + pemCert = cert_begin + cert + end_cert; } + //证书导入设备,待验签使用 + // api.importCert(pemCert.getBytes(),null); + + //detach验签 + boolean ver = api.detachedVerifyAll(4,data.getBytes(),sign); + System.out.println("验签结果:"+ver); + + + } + + + + + } -} diff --git a/sunyard.properties b/sunyard.properties index b032020..9ee8ecf 100644 --- a/sunyard.properties +++ b/sunyard.properties @@ -1,11 +1,11 @@ -ip=172.16.18.34 +ip=172.16.17.161 port=8889 timeout=5000 #证书主题 -certDn=C=CN,ST=zj,L=hz,O=sunyard,CN=welkin +certDn=019023EB0005 #验签数据或待解密数据 -signorenData=XXXX +signorenData=oN039sEhy7bQVqRSLFet+qe7xxTKWENtPGG/bqthWbKDtkN6BSAi0/I1PhLlSVXFh3MnhQZNH4zyn/l0Nb1D5w== #原始数据 orgData=123456 -#交易类型 1-签名 2-验签 3-加密 4-解密 0 默认(签名验签+加密解密) -type=0 +#交易类型 1-签名 2-验签 3-加密 4-解密 5-detach签名 6-detach验签 7-sn签名 8-sn验签 0 默认(签名验签+加密解密) +type=8