diff --git a/kit.json b/kit.json new file mode 100644 index 0000000..5949328 --- /dev/null +++ b/kit.json @@ -0,0 +1,66 @@ +{ + "vars": { + "version": "git()", + "out_path": "./pack", + "target_f1": "./target/sydapi4j-jar-with-dependencies.jar", + "target_t1": "%out_path%/sydapi4j-jar-with-dependencies.jar", + "target_f2": "./target/sydapi4j.jar", + "target_t2": "%out_path%/sydapi4j.jar" + }, + "clear": [ + { + "func": "rmdir", + "path": "%out_path%" + } + ], + "init": [ + { + "func": "mkdir", + "path": "%out_path%" + }, + { + "func": "mkdir", + "path": "%out_path%/jar" + }, + { + "func": "mkdir", + "path": "%out_path%/jar/dependences" + }, + { + "func": "mkdir", + "path": "%out_path%/doc" + } + ], + "dependencies": [{ + "func" : "pom", + "xml" : "%out_path%/jar" + }, { + "cmd" : "mvn dependency:copy-dependencies -DincludeScope=runtime -DoutputDirectory=%out_path%/jar/dependences", + "check": "BUILD SUCCESS" + }], + "gen" : [{ + "cmd" : "dproto" + }], + "build": [ + { + "cmd": "mvn package -DskipTests", + "check": "BUILD SUCCESS" + }, + { + "func": "rename", + "from": "%target_f1%", + "to": "%target_t1%" + }, + { + "func": "rename", + "from": "%target_f2%", + "to": "%target_t2%" + }, + { + "func": "zip", + "from": "%out_path%", + "to": "%out_path%/sydapi-%version%.zip" + } + ] + +} diff --git a/pom.xml b/pom.xml index 57bfafb..ca56169 100644 --- a/pom.xml +++ b/pom.xml @@ -23,6 +23,13 @@ 4.11 test + + + com.sunyard + sydapi4j + 1.0.20220712 + + diff --git a/src/main/java/com/sunyard/SydApiException.java b/src/main/java/com/sunyard/SydApiException.java deleted file mode 100644 index d4e0f9a..0000000 --- a/src/main/java/com/sunyard/SydApiException.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.sunyard; - -public class SydApiException extends RuntimeException { - // 错误编码 - private int retCode; - - // 错误消息 - private String msg; - - public SydApiException(int retCode, String msg) { - this.retCode = retCode; - this.msg = msg; - } - - public int getRetCode() { - return retCode; - } - - public String getMsg() { - return msg; - } - - @Override - public String toString() { - return "SydApiException{" + - "retCode=" + retCode + - ", msg='" + msg + '\'' + - '}'; - } -} diff --git a/src/main/java/com/sunyard/sge/database/Consts.java b/src/main/java/com/sunyard/sge/database/Consts.java new file mode 100644 index 0000000..4a45873 --- /dev/null +++ b/src/main/java/com/sunyard/sge/database/Consts.java @@ -0,0 +1,6 @@ +package com.sunyard.sge.database; + +public class Consts { + public static final int ECB_DEC = 0; + public static final int ECB_ENC = 1; +} diff --git a/src/main/java/com/sunyard/sge/database/SydApi4Database.java b/src/main/java/com/sunyard/sge/database/SydApi4Database.java index 37feaff..0d4ccc8 100644 --- a/src/main/java/com/sunyard/sge/database/SydApi4Database.java +++ b/src/main/java/com/sunyard/sge/database/SydApi4Database.java @@ -1,5 +1,9 @@ package com.sunyard.sge.database; +import com.sunyard.SydApiException; +import com.sunyard.util.SYMUtil; +import racal.sunyard.main.SydApi4j; + import java.util.List; /** @@ -9,28 +13,81 @@ import java.util.List; public class SydApi4Database implements SydApi { - public static void SYD_SetLogConfig ( - String pcLogPath, - int iLogLevel) { - } +// public static void SYD_SetLogConfig ( +// String pcLogPath, +// int iLogLevel) { +// } + + private SydApi4j api4j = null; @Override public SydApi SYD_Connect_Ex(String[] pcIpList, int[] iPortList, int iConnectTimeOut, int iDealTimeOut) { - return null; + + + if ( null == pcIpList && + null == iPortList && + pcIpList.length != iPortList.length ) { + throw new IllegalArgumentException("入参错误"); + } + if ( null != api4j ) { + this.SYD_Disconnect_Ex(); + } + + api4j = (SydApi4j) new SydApi4j().connect( pcIpList[0], iPortList[0], null, iConnectTimeOut, iDealTimeOut); + + return this; } @Override public void SYD_Disconnect_Ex() { - + if ( null != this.api4j ) { + try { + this.api4j.disconnect(); + }catch ( Exception e ){ + } + } + this.api4j = null; } @Override public byte[] SYD_SM4_ShortData(int iKeyIndex, byte[] pcData, int iFlag) { - return new byte[0]; + + if ( null == this.api4j ) { + throw new SydApiException(-1); + } + + String keyIndex = String.format("%08d", iKeyIndex); + + if ( Consts.ECB_ENC == iFlag ) { + return this.api4j.SYMEncryptData( + com.sunyard.SydApi.NALG_SM4, + "SK" + SYMUtil.genPrivateKeyMark("000000", "00A", keyIndex), + 1, + pcData ); + } else { + return this.api4j.SYMDecryptData( + com.sunyard.SydApi.NALG_SM4, + "SK" + SYMUtil.genPrivateKeyMark("000000", "00A", keyIndex), + 1, + pcData ); + } } @Override public List SYD_SM4_BatchData(int[] iKeyIndex, List pcData, int iFlag) { - return null; + if ( null == this.api4j ) { + throw new SydApiException(-1); + } + + String[] keys = new String[ iKeyIndex.length ]; + for ( int i = 0 ; i < iKeyIndex.length ; i++ ) { + keys[i] = "SK" + SYMUtil.genPrivateKeyMark("000000", "00A", String.format("%08d", iKeyIndex[i] )); + } + + if ( Consts.ECB_ENC == iFlag ) { + return this.api4j.SYMEncryptDecryptBatchData(8, keys, 1, pcData); + } else { + return this.api4j.SYMEncryptDecryptBatchData(9, keys, 1, pcData); + } } } diff --git a/src/test/java/sample/Sample.java b/src/test/java/sample/Sample.java index db9d76d..e9885b6 100644 --- a/src/test/java/sample/Sample.java +++ b/src/test/java/sample/Sample.java @@ -1,28 +1,72 @@ package sample; +import com.sunyard.proto.Util; +import com.sunyard.sge.database.Consts; import com.sunyard.sge.database.SydApi; import com.sunyard.sge.database.SydApi4Database; +import org.junit.Assert; + +import java.util.ArrayList; +import java.util.List; public class Sample { public static void main(String[] args) { - SydApi4Database.SYD_SetLogConfig("./sydapi/log", 1); + // System.setProperty("com.sunyard.sydapi4j.debug", "true"); + SydApi api = new SydApi4Database(); try { api = api.SYD_Connect_Ex( - new String[]{ "192.168.0.100" }, + new String[]{ "192.168.0.200" }, new int[]{ 8889 }, - 3, + 10, 15 ); + // 短数据 + shortData( api ); + // 批量 + batchData( api ); + } finally { - api.SYD_Disconnect_Ex(); + if ( null != api ) { + api.SYD_Disconnect_Ex(); + } } } + + public static void shortData(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 ); + System.out.println( "HEX=" + Util.bytes2HexString( encData ) ); + Assert.assertArrayEquals( orgData, data ); + } + + public static void batchData(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++ ) { + System.out.println( "HEX=" + Util.bytes2HexString( encData.get( i ) ) ); + Assert.assertArrayEquals( orgData.get( i ), data.get( i ) ); + } + + } } diff --git a/target/classes/com/sunyard/sge/database/Consts.class b/target/classes/com/sunyard/sge/database/Consts.class new file mode 100644 index 0000000..2897998 Binary files /dev/null and b/target/classes/com/sunyard/sge/database/Consts.class differ diff --git a/target/classes/com/sunyard/sge/database/SydApi.class b/target/classes/com/sunyard/sge/database/SydApi.class new file mode 100644 index 0000000..fb53934 Binary files /dev/null and b/target/classes/com/sunyard/sge/database/SydApi.class differ diff --git a/target/classes/com/sunyard/sge/database/SydApi4Database.class b/target/classes/com/sunyard/sge/database/SydApi4Database.class new file mode 100644 index 0000000..8016d41 Binary files /dev/null and b/target/classes/com/sunyard/sge/database/SydApi4Database.class differ diff --git a/target/test-classes/sample/Sample.class b/target/test-classes/sample/Sample.class new file mode 100644 index 0000000..6c5daad Binary files /dev/null and b/target/test-classes/sample/Sample.class differ