From 01880dca0d0b6fce0b77ec9b32ebafc27fc84f02 Mon Sep 17 00:00:00 2001 From: cheney Date: Tue, 12 Jul 2022 20:04:45 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E5=B7=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- kit.json | 66 ++++++++++++++++ pom.xml | 7 ++ .../java/com/sunyard/SydApiException.java | 30 ------- .../java/com/sunyard/sge/database/Consts.java | 6 ++ .../sunyard/sge/database/SydApi4Database.java | 73 ++++++++++++++++-- src/test/java/sample/Sample.java | 52 ++++++++++++- .../com/sunyard/sge/database/Consts.class | Bin 0 -> 375 bytes .../com/sunyard/sge/database/SydApi.class | Bin 0 -> 413 bytes .../sge/database/SydApi4Database.class | Bin 0 -> 2870 bytes target/test-classes/sample/Sample.class | Bin 0 -> 2377 bytes 10 files changed, 192 insertions(+), 42 deletions(-) create mode 100644 kit.json delete mode 100644 src/main/java/com/sunyard/SydApiException.java create mode 100644 src/main/java/com/sunyard/sge/database/Consts.java create mode 100644 target/classes/com/sunyard/sge/database/Consts.class create mode 100644 target/classes/com/sunyard/sge/database/SydApi.class create mode 100644 target/classes/com/sunyard/sge/database/SydApi4Database.class create mode 100644 target/test-classes/sample/Sample.class 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 0000000000000000000000000000000000000000..2897998400ed7611beea4e41c9d65ed4dd4fabe2 GIT binary patch literal 375 zcmaiwzfQw25XQf2k_OV2mhwkpLfwD?4;?`agdibBWdLPGPGS{TsUsy05|71%#J~ga zP>4(Dz{cQD{(X1nyYtug$0vX}4g>Vy_;82t&?ih*@dGI;HHUge$(9w{2^oMsiLhbjkjyXeg40vbnptr7M!rF!b2fM7p?(SiV LJto3FYYzuMd7etX literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..fb539347b3078f1e4a07f394777e4ee1997a98b1 GIT binary patch literal 413 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