//package sample; // //import com.sunyard.proto.Util; //import com.sunyard.sge.database.*; //import com.sunyard.sge.database.Consts; //import com.sunyard.sge.log.LogFactory; //import org.apache.logging.log4j.Logger; //import org.junit.Assert; // //import java.nio.ByteBuffer; //import java.util.ArrayList; //import java.util.List; // //public class Sample //{ // public static void main(String[] args) { // // // 路径要以 / 或 \\ 结尾表示目录 // SydApi.SYD_SetLogConfig("./logs/",3); // // 通常单例就够了 // SydApiBuilder builder = new SydApiBuilder( // new String[]{ "192.168.0.200"}, // new int[]{ 8889}, // 10, // 15 // ); // // // 每个工作线程中调用 // SydApi api = builder.build(); // try { // // 不建议使用了 //// api = api.SYD_Connect_Ex( //// new String[]{ "192.168.0.200" }, //// new int[]{ 8889 }, //// 10, //// 15 //// ); // // // // 短数据加密解密 // shortEndeData( api ); // // // 批量加密解密 // batchEndeData( api ); // // // 长数据加密解密 // longDataEnde( api ); // // // 短数据 MAC // shortMAC( api ); // // // 批量 MAC // batchMACData( api ); // // // 长数据 MAC // longMAC( api ); // // // 短数据 SM3 // shortSM3( api ); // // // 长数据 SM3 // longSM3( api ); // // } finally { // if ( null != api ) { // LogFactory.getLogger().debug("END"); // api.SYD_Disconnect_Ex(); // // } // } // } // // public static void longDataEnde(SydApi api){ // // // 密钥索引 // int keyIdx = 0; // // 测试数据 // byte[] data = new byte[16 * 3 + 8]; // // 每包大小 // int pack = 16; // // // 测试数据 > 每包大小需要分包 // // // 密文数据 // ByteBuffer enDataBuff = ByteBuffer.allocate( data.length + 16 ); // // // 分包加密 // { // int n = data.length / pack; // int remainder = data.length % pack; // if ( remainder > 0 ) { // n += 1; // } else { // remainder = pack; // } // // for ( int i = 0 ; i < n ; i ++ ) { // byte[] buff = new byte[ pack ]; // // // 首包 // if ( 0 == i ) { // System.arraycopy( data, i * pack, buff, 0, pack ); // byte[] recv = api.SYD_SM4_LongData( keyIdx , buff, Consts.PkgNumHead, Consts.ECB_ENC); // enDataBuff.put( recv ); // continue; // } // // // 尾包 // if ( i == (n-1) ){ // buff = new byte[ remainder ]; // System.arraycopy( data, i * pack, buff, 0, remainder ); // byte[] recv = api.SYD_SM4_LongData( keyIdx , buff, Consts.PkgNumTail, Consts.ECB_ENC); // enDataBuff.put( recv ); // continue; // } // // // 中间包 // System.arraycopy( data, i * pack, buff, 0, pack ); // byte[] recv = api.SYD_SM4_LongData( keyIdx , buff, Consts.PkgNumMiddle, Consts.ECB_ENC); // enDataBuff.put( recv ); // // } // // } // // byte[] enData = new byte[ enDataBuff.position() ]; // System.arraycopy( enDataBuff.array(), 0, enData, 0, enData.length ); // // // // 分包解密 // // 密文数据 // ByteBuffer deDataBuff = ByteBuffer.allocate( data.length + 16 ); // { // int n = enData.length / pack; // int remainder = enData.length % pack; // if ( remainder > 0 ) { // n += 1; // } else { // remainder = pack; // } // // for ( int i = 0 ; i < n ; i ++ ) { // byte[] buff = new byte[ pack ]; // // // 首包 // if ( 0 == i ) { // System.arraycopy( enData, i * pack, buff, 0, pack ); // byte[] recv = api.SYD_SM4_LongData( keyIdx , buff, Consts.PkgNumHead, Consts.ECB_DEC); // deDataBuff.put( recv ); // continue; // } // // // 尾包 // if ( i == (n-1) ){ // buff = new byte[ remainder ]; // System.arraycopy( enData, i * pack, buff, 0, remainder ); // byte[] recv = api.SYD_SM4_LongData( keyIdx , buff, Consts.PkgNumTail, Consts.ECB_DEC); // deDataBuff.put( recv ); // continue; // } // // // 中间包 // System.arraycopy( enData, i * pack, buff, 0, pack ); // byte[] recv = api.SYD_SM4_LongData( keyIdx , buff, Consts.PkgNumMiddle, Consts.ECB_DEC); // deDataBuff.put( recv ); // // } // } // // byte[] deData = new byte[ deDataBuff.position() ]; // System.arraycopy( deDataBuff.array(), 0, deData, 0, deData.length ); // // 断言解密后和原文相同 // Assert.assertArrayEquals( deData, data ); // } // // // public static void longMAC(SydApi api){ // // // 密钥索引 // int keyIdx = 0; // // 测试数据 // byte[] data = new byte[16 * 3 + 8]; // // 每包大小 // int pack = 16; // // // 测试数据 > 每包大小需要分包 // // LongDataReturn recv = null; // // 分包 MAC // { // int n = data.length / pack; // int remainder = data.length % pack; // if ( remainder > 0 ) { // n += 1; // } else { // remainder = pack; // } // // for ( int i = 0 ; i < n ; i ++ ) { // byte[] buff = new byte[ pack ]; // // // 首包 // if ( 0 == i ) { // System.arraycopy( data, i * pack, buff, 0, pack ); // recv = api.SYD_SM4Mac_LongData( keyIdx , buff, Consts.PkgNumHead, null); // continue; // } // // // 尾包 // if ( i == (n-1) ){ // // 尾包大小可能不同 // buff = new byte[ remainder ]; // System.arraycopy( data, i * pack, buff, 0, remainder ); // recv = api.SYD_SM4Mac_LongData( keyIdx , buff, Consts.PkgNumTail, recv.getProcData() ); // continue; // } // // // 中间包 // System.arraycopy( data, i * pack, buff, 0, pack ); // recv = api.SYD_SM4Mac_LongData( keyIdx , buff, Consts.PkgNumMiddle, recv.getProcData() ); // } // } // // String mac = recv.getData(); // // // 分包校验 MAC // LongDataReturn check = null; // ByteBuffer deDataBuff = ByteBuffer.allocate( data.length + 16 ); // { // int n = data.length / pack; // int remainder = data.length % pack; // if ( remainder > 0 ) { // n += 1; // } else { // remainder = pack; // } // // for ( int i = 0 ; i < n ; i ++ ) { // byte[] buff = new byte[ pack ]; // // // 首包 // if ( 0 == i ) { // System.arraycopy( data, i * pack, buff, 0, pack ); // check = api.SYD_SM4Mac_LongData( keyIdx , buff, Consts.PkgNumHead, null, mac); // continue; // } // // // 尾包 // if ( i == (n-1) ){ // // 尾包大小可能不同 // buff = new byte[ remainder ]; // System.arraycopy( data, i * pack, buff, 0, remainder ); // check = api.SYD_SM4Mac_LongData( keyIdx , buff, Consts.PkgNumTail, check.getProcData() , mac); // continue; // } // // // 中间包 // System.arraycopy( data, i * pack, buff, 0, pack ); // check = api.SYD_SM4Mac_LongData( keyIdx , buff, Consts.PkgNumMiddle, check.getProcData() , mac); // // } // } // // // 断言 MAC 校验通过 // Assert.assertTrue( check.getData() ); // } // // public static void shortSM3(SydApi api){ // // 测试数据 // byte[] data = new byte[16]; // byte[] macData = api.SYD_SM3_Hash_ShortData( data ); // Assert.assertEquals( macData , Util.hexString2Bytes("106E34A2B8C7BB13156CFDD0D91379DCC47543DCF9787C68AE5EB582620AE6E8")); // } // // // public static void longSM3(SydApi api){ // // // 密钥索引 // int keyIdx = 0; // // 测试数据 // byte[] data = new byte[16 * 3 + 8]; // // 每包大小 // int pack = 16; // // // 测试数据 > 每包大小需要分包 // // LongDataReturn recv = null; // // 分包 MAC // { // int n = data.length / pack; // int remainder = data.length % pack; // if ( remainder > 0 ) { // n += 1; // } else { // remainder = pack; // } // // for ( int i = 0 ; i < n ; i ++ ) { // byte[] buff = new byte[ pack ]; // // // 首包 // if ( 0 == i ) { // System.arraycopy( data, i * pack, buff, 0, pack ); // recv = api.SYD_SM3_Hash_LongData( buff, Consts.PkgNumHead, null); // continue; // } // // // 尾包 // if ( i == (n-1) ){ // // 尾包大小可能不同 // buff = new byte[ remainder ]; // System.arraycopy( data, i * pack, buff, 0, remainder ); // recv = api.SYD_SM3_Hash_LongData( buff, Consts.PkgNumTail, recv.getProcData() ); // continue; // } // // // 中间包 // System.arraycopy( data, i * pack, buff, 0, pack ); // recv = api.SYD_SM3_Hash_LongData( buff, Consts.PkgNumMiddle, recv.getProcData() ); // } // } // // String mac = recv.getData(); // // // 断言 // Assert.assertEquals( mac, "87B81AF2B2B22CBDF268E211D012D604892D3C948FF298D61D6C942EEE847F86"); // } // // public static void shortMAC(SydApi api){ // // 密钥索引 // int keyIdx = 0; // // 测试数据 // byte[] data = new byte[16]; // byte[] macData = api.SYD_SM4Mac_ShortData( keyIdx , data ); // boolean ret = api.SYD_SM4Mac_ShortData( keyIdx , data, macData ); // Assert.assertTrue( ret ); // } // // public static void batchMACData(SydApi api){ // // 密钥索引 // int[] keyIdx = new int[]{ 0, 1, 2 }; // // 测试数据 // List data = new ArrayList<>(); // data.add( new byte[8] ); // data.add( new byte[16] ); // data.add( new byte[1024] ); // // List macs = api.SYD_SM4Mac_BatchData( keyIdx , data); // boolean[] checks = api.SYD_SM4Mac_BatchData( keyIdx , data, macs ); // // for ( int i = 0 ; i < data.size() ; i++ ) { // Assert.assertTrue( checks[i] ); // } // } // // // public static void shortEndeData(SydApi api){ // // 密钥索引 // int keyIdx = 0; // // 测试数据 // byte[] data = new byte[16]; // byte[] encData = api.SYD_SM4_ShortData( keyIdx , data, Consts.ECB_ENC ); // byte[] orgData = api.SYD_SM4_ShortData( keyIdx , encData, Consts.ECB_DEC ); // Assert.assertArrayEquals( orgData, data ); // } // // public static void batchEndeData(SydApi api){ // // 密钥索引 // int[] keyIdx = new int[]{ 0, 1, 2 }; // // 测试数据 // List data = new ArrayList<>(); // data.add( new byte[8] ); // data.add( new byte[16] ); // data.add( new byte[1024] ); // // List encData = api.SYD_SM4_BatchData( keyIdx , data, Consts.ECB_ENC ); // List orgData = api.SYD_SM4_BatchData( keyIdx , encData, Consts.ECB_DEC ); // // for ( int i = 0 ; i < data.size() ; i++ ) { // Assert.assertArrayEquals( orgData.get( i ), data.get( i ) ); // } // // } //}