调整接口和测试

This commit is contained in:
Cheney Wong 2025-06-30 16:01:47 +08:00
parent f215651ad7
commit 9efe703bca
16 changed files with 1416 additions and 45 deletions

Binary file not shown.

View File

@ -37,7 +37,7 @@
<dependency> <dependency>
<groupId>com.sunyard</groupId> <groupId>com.sunyard</groupId>
<artifactId>sydapi4j</artifactId> <artifactId>sydapi4j</artifactId>
<version>1.12.20220915</version> <version>1.15.20250627</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.apache.logging.log4j</groupId> <groupId>org.apache.logging.log4j</groupId>

View File

@ -2,5 +2,6 @@ package com.sunyard.sge.database;
public interface ISM4Mac { public interface ISM4Mac {
public void update(byte[] pcData); public void update(byte[] pcData);
public String disget(); public String digest();
public boolean checkDigest(String mac);
} }

View File

@ -296,12 +296,14 @@ public interface SydApi {
* @param mac 输入密文的 MAC * @param mac 输入密文的 MAC
* @return 明文 * @return 明文
*/ */
byte[] SYD_SM4_CheckMacAndDecrypt_ShortData( DataAndMacCheck SYD_SM4_CheckMacAndDecrypt_ShortData(
int iEncKeyIndex, int iEncKeyIndex,
int iMacKeyIndex, int iMacKeyIndex,
byte[] pcData, byte[] pcData,
String mac String mac
); );
List<DataAndMac> SYD_SM4_EncryptAndMac_BatchData( List<DataAndMac> SYD_SM4_EncryptAndMac_BatchData(
int[] iEncKeyIndex, int[] iEncKeyIndex,
int[] iMacKeyIndex, int[] iMacKeyIndex,

View File

@ -798,14 +798,18 @@ public class SydApiBaseFunction implements SydApi {
return new DataAndMac(enData, mac); return new DataAndMac(enData, mac);
} }
@Override
public byte[] SYD_SM4_CheckMacAndDecrypt_ShortData(int iEncKeyIndex, int iMacKeyIndex, byte[] pcData, String mac) {
boolean ret = SYD_SM4Mac_ShortData(iMacKeyIndex, pcData, mac);
if (!ret) {
throw new SydApiException("MAC 验证不通过", 90);
}
return SYD_SM4_ShortData(iEncKeyIndex, pcData, Consts.ECB_DEC);
@Override
public DataAndMacCheck SYD_SM4_CheckMacAndDecrypt_ShortData(int iEncKeyIndex, int iMacKeyIndex, byte[] pcData, String mac) {
boolean ret = SYD_SM4Mac_ShortData(iMacKeyIndex, pcData, mac);
byte[] data = null;
try {
data = SYD_SM4_ShortData(iEncKeyIndex, pcData, Consts.ECB_DEC);
}catch (Exception e){
return new DataAndMacCheck(null, ret);
}
return new DataAndMacCheck(data, ret);
} }
@Override @Override

View File

@ -170,10 +170,10 @@ public class SydApiLongLinkWrap implements SydApi {
} }
@Override @Override
public byte[] SYD_SM4_CheckMacAndDecrypt_ShortData(int iEncKeyIndex, int iMacKeyIndex, byte[] pcData, String mac) { public DataAndMacCheck SYD_SM4_CheckMacAndDecrypt_ShortData(int iEncKeyIndex, int iMacKeyIndex, byte[] pcData, String mac) {
FutureTask<byte[]> task = builder.getLongLinkWorks().fTask(new Callable<byte[]>() { FutureTask<DataAndMacCheck> task = builder.getLongLinkWorks().fTask(new Callable<DataAndMacCheck>() {
@Override @Override
public byte[] call() throws Exception { public DataAndMacCheck call() throws Exception {
return builder.get().SYD_SM4_CheckMacAndDecrypt_ShortData(iEncKeyIndex, iMacKeyIndex, pcData, mac); return builder.get().SYD_SM4_CheckMacAndDecrypt_ShortData(iEncKeyIndex, iMacKeyIndex, pcData, mac);
} }
}); });

View File

@ -20,6 +20,7 @@ public class SydSM4Mac implements ISM4Mac {
this.pcProcData = null; this.pcProcData = null;
} }
@Override
public void update(byte[] pcData) { public void update(byte[] pcData) {
if (null == pcData || 0 == pcData.length) { if (null == pcData || 0 == pcData.length) {
return; return;
@ -70,7 +71,14 @@ public class SydSM4Mac implements ISM4Mac {
} }
} }
public String disget() {
@Override
public boolean checkDigest(String mac) {
return mac != null && this.pcMac.equals(mac);
}
@Override
public String digest() {
if (is_finished) { if (is_finished) {
throw new SydApiException(0x8007); throw new SydApiException(0x8007);

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,25 @@
package test;
import java.util.Scanner;
public class Choise {
private String[] args;
private int argIndex = 0;
private Scanner scanner = new Scanner(System.in);
public Choise(String[] args) {
this.args = args;
}
public String get(){
if(argIndex < args.length){
return args[argIndex++];
}else{
return scanner.nextLine();
}
}
public int getAsInt(){
return Integer.parseInt(get());
}
}

View File

@ -29,9 +29,9 @@ public class EncryptAndMac {
// 短数据 // 短数据
DataAndMac ret = api.SYD_SM4_EncryptAndMac_ShortData(keyEncIdx, keyMacIdx, data); DataAndMac ret = api.SYD_SM4_EncryptAndMac_ShortData(keyEncIdx, keyMacIdx, data);
byte[] deData = api.SYD_SM4_CheckMacAndDecrypt_ShortData(keyEncIdx, keyMacIdx, ret.getData(), ret.getMac()); DataAndMacCheck deData = api.SYD_SM4_CheckMacAndDecrypt_ShortData(keyEncIdx, keyMacIdx, ret.getData(), ret.getMac());
if (Arrays.equals( data, deData ) ) { if (Arrays.equals( data, deData.getData() ) ) {
System.out.println("短数据加密并计算 MAC - 测试通过"); System.out.println("短数据加密并计算 MAC - 测试通过");
} else { } else {
System.out.println("短数据加密并计算 MAC - 测试失败"); System.out.println("短数据加密并计算 MAC - 测试失败");

View File

@ -78,14 +78,14 @@ public class LongDataTest {
public void sm4mac_case1() { public void sm4mac_case1() {
ISM4Mac sydApiMac = api.initSM4Mac(1); ISM4Mac sydApiMac = api.initSM4Mac(1);
sydApiMac.update(null); sydApiMac.update(null);
String mac = sydApiMac.disget(); String mac = sydApiMac.digest();
Assert.assertEquals("FF49F76AD3A71651FE1A8A9F0D2A689E", mac); Assert.assertEquals("FF49F76AD3A71651FE1A8A9F0D2A689E", mac);
} }
@Test @Test
public void sm4mac_case2() { public void sm4mac_case2() {
ISM4Mac sydApiMac = api.initSM4Mac(1); ISM4Mac sydApiMac = api.initSM4Mac(1);
String mac = sydApiMac.disget(); String mac = sydApiMac.digest();
Assert.assertEquals("FF49F76AD3A71651FE1A8A9F0D2A689E", mac); Assert.assertEquals("FF49F76AD3A71651FE1A8A9F0D2A689E", mac);
} }
@ -99,7 +99,7 @@ public class LongDataTest {
sydApiMac.update(data); sydApiMac.update(data);
} }
String mac = (String) sydApiMac.disget(); String mac = (String) sydApiMac.digest();
} }

View File

@ -32,7 +32,7 @@ package test;
// * int i = random.nextInt(4065); // * int i = random.nextInt(4065);
// * SydSM4Mac sydApiMac = api.initSydSM4Mac(api, 1, 1,1); // * SydSM4Mac sydApiMac = api.initSydSM4Mac(api, 1, 1,1);
// * sydApiMac.update(new byte[i]); // * sydApiMac.update(new byte[i]);
// * System.out.println(sydApiMac.disget().getData()); // * System.out.println(sydApiMac.digest().getData());
// * // *
// * SM4 updata传0-4064随机长度 // * SM4 updata传0-4064随机长度
// * Random random = new Random(); // * Random random = new Random();
@ -67,10 +67,10 @@ package test;
// String s = Util.bytes2HexString(finish); // String s = Util.bytes2HexString(finish);
// System.out.print( s); // System.out.print( s);
// //
// SM4Mac直接调用disget // SM4Mac直接调用digest
// SydSM4Mac sydSM4Mac = api.initSydSM4Mac(api, 1, 1,1); // SydSM4Mac sydSM4Mac = api.initSydSM4Mac(api, 1, 1,1);
// LongDataReturn disget = sydSM4Mac.disget(); // LongDataReturn digest = sydSM4Mac.digest();
// System.out.println(disget.getData()); // System.out.println(digest.getData());
// **/ // **/
// //
//// SydApiSM4 sydApiSM4 = api.initSydApiSM4(api, 1,1, 1); //// SydApiSM4 sydApiSM4 = api.initSydApiSM4(api, 1,1, 1);

File diff suppressed because it is too large Load Diff

View File

@ -1,22 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
<component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_8">
<output url="file://$MODULE_DIR$/target/classes" />
<output-test url="file://$MODULE_DIR$/target/test-classes" />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
<excludeFolder url="file://$MODULE_DIR$/target" />
</content>
<orderEntry type="jdk" jdkName="1.8" jdkType="JavaSDK" />
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="library" name="Maven: com.sunyard:sydapi4j:1.12.20220909-1" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: junit:junit:4.11" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.hamcrest:hamcrest-core:1.3" level="project" />
<orderEntry type="library" name="Maven: com.sunyard:sydapi4j:1.12.20220915" level="project" />
<orderEntry type="library" name="Maven: com.sunyard:proto:1.0-20220905" level="project" />
<orderEntry type="library" name="Maven: org.codehaus.groovy:groovy-all:2.4.15" level="project" />
<orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-api:2.17.0" level="project" />
<orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-core:2.17.0" level="project" />
</component>
</module>

1
test/start.sh Normal file
View File

@ -0,0 +1 @@
java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 -Dcom.sunyard.sydapi4j.debug=false -cp sydapi-database-1.15.jar:./lib/*:./ test.TestAll

Binary file not shown.