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