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;
import com.sunyard.proto.Util;
import com.sunyard.util.ASN1Util;
import com.sunyard.util.SYMUtil;
import org.junit.Test;
import racal.sunyard.main.SydApi4j;
import racal.sunyard.main.SydApiBuilder;
import java.io.UnsupportedEncodingException;
import java.util.List;
public class Test4Nongxin {
private static final String SM2dn = "C=CN,ST=zz,L=zz,O=zzz,CN=zzzzz";
private static final String RSAdn = "C=cn,O=CFCA TEST CA,OU=NCS2,OU=Enterprises,CN=041@Z402451000010@ShanDong@00000001";
private static final byte[] orgData = new byte[ 2*1024 ];
private static final byte[] orgDataBig = new byte[ 10*1024 ];
public static void main(String[] args) {
System.setProperty("com.sunyard.sydapi4j.debug", "true");
System.setProperty("com.sunyard.dnsort", "true");
//设置连接
SydApiBuilder builder = new SydApiBuilder().setIp("172.1.41.139");
SydApi4j api = (SydApi4j) builder.build();
try {
//SM2裸签
byte[] nakedSign = api.SYD_NakedSign(SM2dn, orgData, null);
boolean b1 = api.SYD_NakedVerify(SM2dn, nakedSign, orgData, null);
System.out.println(b1);
byte[] nakedSign1 = api.SYD_NakedSignAll(4,orgData, SM2dn);
System.out.println("SM2大数据裸签:"+ Util.bytes2HexString(nakedSign1));
boolean nakedVerify1 = api.SYD_NakedVerifyAll(4,orgData, nakedSign1, SM2dn);
System.out.println("SM2大数据验签:"+nakedVerify1 );
//RSA裸签
byte[] nakedSign2 = api.SYD_NakedSignAll(1,orgData, RSAdn);
System.out.println("RSA大数据裸签:"+ Util.bytes2HexString(nakedSign2));
boolean nakedVerify2 = api.SYD_NakedVerifyAll(1,orgData, nakedSign2, RSAdn);
System.out.println("RSA大数据验签:"+nakedVerify2 );
byte[] nakedSign3 = api.SYD_NakedSignAll(4,orgData, SM2dn);
System.out.println("SM2裸签:"+ Util.bytes2HexString(nakedSign3));
boolean nakedVerify3 = api.SYD_NakedVerifyAll(4,orgData, nakedSign3, SM2dn);
System.out.println("SM2验签:"+nakedVerify3 );
byte[] nakedSign4 = api.SYD_NakedSignAll(2,orgData, RSAdn);
System.out.println("RSA裸签:"+ Util.bytes2HexString(nakedSign4));
boolean nakedVerify4 = api.SYD_NakedVerifyAll(2,orgData, nakedSign4, RSAdn);
System.out.println("RSA验签:"+nakedVerify4 );
String s = api.detachedSignAll(4, orgData, SM2dn);
System.out.println("SM2detach签名:"+s);
boolean b = api.detachedVerifyAll(4, orgData, s);
System.out.println("SM2detach验签:"+b);
String sde = api.detachedSignAll(4, orgDataBig, SM2dn);
System.out.println("SM2detach签名:"+sde);
boolean bde = api.detachedVerifyAll(4, orgDataBig, sde);
System.out.println("SM2detach验签:"+bde);
String rsa = api.detachedSignAll(2, orgData, RSAdn);
System.out.println("RSA detach签名:"+rsa);
boolean br = api.detachedVerifyAll(2, orgData, rsa);
System.out.println("RSA detach验签:"+br);
String det = api.detachedSignAll(3, orgDataBig, RSAdn);
System.out.println("RSA大数据detach签名:"+det);
boolean boo = api.detachedVerifyAll(3, orgDataBig, det);
System.out.println("RSA大数据detach验签:"+boo);
} catch (SydApiException e) {
throw new RuntimeException(e);
} finally {
api.disconnect();
}
}
@Test
public void testDetach() throws UnsupportedEncodingException {
System.setProperty("com.sunyard.sydapi4j.debug", "true");
//设置连接
SydApiBuilder builder = new SydApiBuilder().setIp("172.16.17.161").setPort(8889).setTimeout(3000);
SydApi4j api = (SydApi4j) builder.build();
String dnn="C=CN,O=CFCA OCA1,OU=TPC-S3,OU=Organizational-2,CN=ARCU54H100000024";
String plain="tran/acctTran62177883001300140426200548800010650170测试60001";
String signed = "MIIHYwYJKoZIhvcNAQcCoIIHVDCCB1ACAQExDzANBglghkgBZQMEAgEFADCCAa8GCSqGSIb3DQEHAaCCAaAEggGcPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48U2lnbkRhdGE+PFRyYWRlVHlwZSBhdXRoTGV2ZWw9IjAiIG5hbWU9IumTtuihjOi0puWPt+i9rOi0piI+dHJhbi9hY2N0VHJhbjwvVHJhZGVUeXBlPjxGaWVsZHM+PFBBWUVSX0FDQ1RfTk8gbmFtZT0i5LuY5qy+6LSm5Y+377yaIj42MjE3Nzg4MzAwMTMwMDE0MDQyPC9QQVlFUl9BQ0NUX05PPjxSQ1ZfQUNDVF9OTyBuYW1lPSLmlLbmrL7otKblj7fvvJoiPjYyMDA1NDg4MDAwMTA2NTAxNzA8L1JDVl9BQ0NUX05PPjxSQ1ZfQUNDVF9OQU1FIG5hbWU9IuaUtuasvuaWuei0puaIt+WQjeensO+8miI+5rWL6K+VPC9SQ1ZfQUNDVF9OQU1FPjxUUkFOX0FNVCBuYW1lPSLovazotKbph5Hpop3vvJoiPjYwMDAxPC9UUkFOX0FNVD48L0ZpZWxkcz48L1NpZ25EYXRhPqCCA/UwggPxMIIC2aADAgECAgUQVgMZAjANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQGEwJDTjEwMC4GA1UEChMnQ2hpbmEgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MRcwFQYDVQQDEw5DRkNBIFRFU1QgT0NBMTAeFw0yMzA0MDYwODE1MDZaFw0yMzA3MDYwODE1MDZaMGQxCzAJBgNVBAYTAkNOMRIwEAYDVQQKEwlDRkNBIE9DQTExDzANBgNVBAsTBlRQQy1TMzEVMBMGA1UECxMMSW5kaXZpZHVhbC0xMRkwFwYDVQQDExBBUkNVNUIyMTAwMDAwMDQ5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAk2V1C+HV+aXhkNVF6S0cxQDWpnxScupP0IJJRNOJ8jeJcld9LD0aOe22ox0G1zYmoeyqOo1gUNwOOV9qesGzGY4Zrs4VdxmlT4LmhiDKPMf635RdAW0bP/Qcg3FRW8aNjJRz66+oE25rpAfAcr+uSVWWG+OYcUWq6z61cfUjUTalN5crmADWmRTOkhAlwjkdmUon+jMGyzQmetMNhGw2T66aGwfg2dZDwLF/bc4YtY4SEGbzA7v83BhELK8stCGifqyoZoPYSZuW37SiJ315nk1B4IYmuxGNmdBPAP2/ZA4Drw/oSyG65Fpu4uV6wS1SWbFDZKt9GafmHpx5oxLrjwIDAQABo4G1MIGyMB8GA1UdIwQYMBaAFM9wnWHrnXwuuPfLAkD3CZ3+M3SAMDkGA1UdHwQyMDAwLqAsoCqGKGh0dHA6Ly91Y3JsLmNmY2EuY29tLmNuL1JTQS9jcmw5NjA0Ny5jcmwwCwYDVR0PBAQDAgPoMB0GA1UdDgQWBBQRonmnaYyW0GynOardL7nKHlsiKDAoBgNVHSUEITAfBggrBgEFBQcDAgYIKwYBBQUHAwQGCSqGSIb3LwEBBTANBgkqhkiG9w0BAQUFAAOCAQEALRUezfLW2jLSzZ84BODOu09UPy149lFhcZEJc9yCyI8LIjGXkTWF8r5XWANbsqrhyAk1ewO5sXztClJMHipCtGv0tv20RiVGC5LdyqPW9VHp3WWFRxby7t3Gt9eWqhGUqjbD2oInadYZwyrefadAyDCT1uQFcik8MTlM/myHYknOphc5SDt20UZLxXgX89XYbwRQee6SG0CyIl+wBfyZh3X1kLjOwd7cdA39LhgZLJx5UDvViztqWWzafwz/M8TG+dCNiDdFQVpONXJJQDWtE61dFCOXhIS9IdlKzdKm+hdai6do5CSFsE1SC0FuiEGCVaySGf1RiW//Gd5KgS0Q6TGCAYwwggGIAgEBMGEwWDELMAkGA1UEBhMCQ04xMDAuBgNVBAoTJ0NoaW5hIEZpbmFuY2lhbCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEXMBUGA1UEAxMOQ0ZDQSBURVNUIE9DQTECBRBWAxkCMA0GCWCGSAFlAwQCAQUAMA0GCSqGSIb3DQEBAQUABIIBAHMLT4DLUIAixha4I6/QXt9dkuQgC5LtltUK1ZZXxzoIMsyPeiK0YSxWt4MK65ZN7nnG7DY66gcfRFP17eYHYl41KTjJWNIq3kGXnWXLioBvAzN+dj/GV3JnAECH0z8+AbqYZFF53/JKT6f1szBNVsIm/G14nzmsDrLGNXYTi8/qeIGWo7JEhfDDJJUG9iSgnLtVav38Dtl7zMvHq7YK5az5t0BLGGIIli8Bo5FQOfKHNgVPw0Ths2CNkz117xQx/EKyTp8xlND/Re/mTwqBMpAVVKG+fJx54qMyHhI5kkm3H4KdRPYTHDtu2cjImBEBMt9CE9PKHTbYMXoInVJAa8w=";
boolean boo = api.detachedVerifyAll(3, plain.getBytes(), signed);
System.out.println("RSA大数据detach验签:"+boo);
plain.getBytes("UTF-8");
}
@Test
public void p1Test() throws UnsupportedEncodingException {
// 调试模式
// System.setProperty("com.sunyard.sydapi4j.debug", "true");
// 建立连接
String certDn ="C=CN,O=Sunyard,OU=8001,CN=8001";
String DN = "C=CN,OU=eves,CN=jindiancloud";
String Sm2DN="C=CN,O=CFCA OCA1,OU=YCCA,OU=Individual-2,CN=YCCA@黄金交易所@Zhuangj@1";
//设置连接
SydApiBuilder builder = new SydApiBuilder().setIp("172.16.17.161").setPort(8889).setTimeout(3000);
SydApi4j api = (SydApi4j) builder.build();
byte[] oData = new byte[10];
//p1签名
byte[] sign = api.SYD_NakedSignAll(4,oData, Sm2DN);
// System.out.println("p1签名:"+ Util.bytes2HexString(sign));
String base64Sign = Util.encodeBase64(sign);
System.out.println("p1签名:"+ base64Sign);
// boolean pass = api.SYD_NakedVerifyAll(4,oData,sign, Sm2DN);
// System.out.println("验签结果 " + pass);
//
// String certByDn = api.getCertByDn(Sm2DN,0);
// X509 x509 = api.GetX509CertInfo(certByDn);
// byte[] pubKey = x509.getPubKey();
// System.out.println("公钥:"+Util.bytes2HexString(pubKey));
//
// String s = api.SYD_SM2_Sign_HA("8012", 1, pubKey, oData);
// System.out.println("公钥签名:"+s);
//
// hihi
String sign2 ="svVyVaA6Og8QCWagGBdohDuIh/Lhb34Lv6Kc+3OE0GVVPdYxi9+zM6IBq6ZxEjuyIRPnxy1GCdye5I9hEOqZuQ==";
byte[] bytes = SYMUtil.base64Sign2DerSign(sign2);
System.out.println(Util.bytes2HexString(bytes));
//byte[] bytes2 = SYMUtil.base64SignAsDerSign(sign2);
byte[] bytes2 = SYMUtil.base64SignAsDerSign(Util.encodeBase64(bytes));
System.out.println(Util.bytes2HexString(bytes2));
List allCert = api.getAllCert();
System.out.println(allCert);
// String Data= "\n" +
// " \n" +
// " 400027000000000202305300000000931\n" +
// " 2023-05-30T18:04:12\n" +
// " \n" +
// " 4000270000000002023053000000009312023-05-30T18:06:46400027日照德润建筑工程有限公司91371100773158280DDT02日照德润建筑工程有限公司803011301421013273000041816PS013300000009831853731346340004320230530000114152000000000001,00000200000020000.000.012023-05-30BC02CC00\n" +
// " 0\n" +
// " \n" +
// " 731346340004320230530000114152\n" +
// " 000000000001,000002000000\n" +
// " 20000.00\n" +
// " 0.01\n" +
// " \n" +
// " \n" +
// " ME02\n" +
// " AC02\n" +
// " CS03\n" +
// " 2023-05-30\n" +
// " 2023-05-31\n" +
// " \n" +
// "";
//
// String Data2 ="";
// String pk= "A0IABNTSZikiGRMscOVhIvGntbsvhz+fe8y/WqFSc10IwiAs6vuAYaN/RJ5/cFHDsC08I+vJOiiRFZPRe3vgAHad8Hs=";
// String sign2 ="MEYCIQDiIjaN/OXnEwHEIoTVR8ADB47FzEI4kb9VVIe0au1gVgIhAKNqfCeu6NAs9bFF1IrJvUDYvZTKRIM1OkKDQU8trSfY";
// boolean verify_ha = api.SYD_SM2_Verify_HA(1, Util.decodeBase64(pk), Data.getBytes(), sign2);
// System.out.println("公钥验签2:"+verify_ha);
}
@Test
public void test4SLS() throws UnsupportedEncodingException {
System.setProperty("com.sunyard.sydapi4j.debug", "true");
String DN = "C=CN,OU=eves,CN=jindiancloud";
//设置连接
SydApiBuilder builder = new SydApiBuilder().setIp("172.16.17.161").setPort(8889).setTimeout(3000);
SydApi4j api = (SydApi4j) builder.build();
String Data ="{\"head\":{\"SrcCode\":\"C00000000002\",\"SigCerNo\":\"0000000000000001\",\"ReqTime\":\"20221115175955\",\"TranCode\":\"T1001\",\"ReqSeqNo\":\"C1002003000120221103101855000001\",\"DesCode\":\"B00000000005\"},\"body\":{\"AccNo\":\"76690188000100128\",\"RequestCode\":\"B00000000005\",\"ReceiveCode\":\"C00000000002\",\"CurrCod\":\"CNY\",\"PushEves\":\"1\",\"VouDate\":\"20221012\",\"CallUrl\":\"192.44.2.97:31003\",\"IsStore\":\"1\",\"VouNo\":\"20221103031\",\"AntiTamperSign\":\"7e0ef4b1d7cac4c15b070af3fdbb574eed51e960b998a8c67db8287691d14e74\"}}";
String base64Data="eyJoZWFkIjp7IlNyY0NvZGUiOiJDMDAwMDAwMDAwMDIiLCJTaWdDZXJObyI6IjAwMDAwMDAwMDAwMDAwMDEiLCJSZXFUaW1lIjoiMjAyMjExMTUxNzU5NTUiLCJUcmFuQ29kZSI6IlQxMDAxIiwiUmVxU2VxTm8iOiJDMTAwMjAwMzAwMDEyMDIyMTEwMzEwMTg1NTAwMDAwMSIsIkRlc0NvZGUiOiJCMDAwMDAwMDAwMDUifSwiYm9keSI6eyJBY2NObyI6Ijc2NjkwMTg4MDAwMTAwMTI4IiwiUmVxdWVzdENvZGUiOiJCMDAwMDAwMDAwMDUiLCJSZWNlaXZlQ29kZSI6IkMwMDAwMDAwMDAwMiIsIkN1cnJDb2QiOiJDTlkiLCJQdXNoRXZlcyI6IjEiLCJWb3VEYXRlIjoiMjAyMjEwMTIiLCJDYWxsVXJsIjoiMTkyLjQ0LjIuOTc6MzEwMDMiLCJJc1N0b3JlIjoiMSIsIlZvdU5vIjoiMjAyMjExMDMwMzEiLCJBbnRpVGFtcGVyU2lnbiI6IjdlMGVmNGIxZDdjYWM0YzE1YjA3MGFmM2ZkYmI1NzRlZWQ1MWU5NjBiOTk4YThjNjdkYjgyODc2OTFkMTRlNzQifX0=";
System.out.println("原数据base64:"+Util.encodeBase64(Data.getBytes()));
String sign ="rNHjcF+QQezzrbtYRtBKSe7zyr304vtTBb+3rZHVYrzHHlW1DI6cDOdjyCdFkYQHiFsz/XfgrUIZqHA1kMgjUg==";
byte[] decode64sign = SYMUtil.base64Sign2DerSign(sign);
boolean pass = api.SYD_NakedVerifyAll(4,Data.getBytes() ,decode64sign, DN);
System.out.println("验签结果:"+pass);
}
@Test
public void test(){
System.setProperty("com.sunyard.sydapi4j.debug", "true");
//设置连接
SydApiBuilder builder = new SydApiBuilder().setIp("172.16.17.64");
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();
}
}
}