调整接口和测试

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>
<groupId>com.sunyard</groupId>
<artifactId>sydapi4j</artifactId>
<version>1.12.20220915</version>
<version>1.15.20250627</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>

View File

@ -2,5 +2,6 @@ package com.sunyard.sge.database;
public interface ISM4Mac {
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
* @return 明文
*/
byte[] SYD_SM4_CheckMacAndDecrypt_ShortData(
DataAndMacCheck SYD_SM4_CheckMacAndDecrypt_ShortData(
int iEncKeyIndex,
int iMacKeyIndex,
byte[] pcData,
String mac
);
List<DataAndMac> SYD_SM4_EncryptAndMac_BatchData(
int[] iEncKeyIndex,
int[] iMacKeyIndex,

View File

@ -798,14 +798,18 @@ public class SydApiBaseFunction implements SydApi {
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

View File

@ -170,10 +170,10 @@ public class SydApiLongLinkWrap implements SydApi {
}
@Override
public byte[] SYD_SM4_CheckMacAndDecrypt_ShortData(int iEncKeyIndex, int iMacKeyIndex, byte[] pcData, String mac) {
FutureTask<byte[]> task = builder.getLongLinkWorks().fTask(new Callable<byte[]>() {
public DataAndMacCheck SYD_SM4_CheckMacAndDecrypt_ShortData(int iEncKeyIndex, int iMacKeyIndex, byte[] pcData, String mac) {
FutureTask<DataAndMacCheck> task = builder.getLongLinkWorks().fTask(new Callable<DataAndMacCheck>() {
@Override
public byte[] call() throws Exception {
public DataAndMacCheck call() throws Exception {
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;
}
@Override
public void update(byte[] pcData) {
if (null == pcData || 0 == pcData.length) {
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) {
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);
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 - 测试通过");
} else {
System.out.println("短数据加密并计算 MAC - 测试失败");

View File

@ -78,14 +78,14 @@ public class LongDataTest {
public void sm4mac_case1() {
ISM4Mac sydApiMac = api.initSM4Mac(1);
sydApiMac.update(null);
String mac = sydApiMac.disget();
String mac = sydApiMac.digest();
Assert.assertEquals("FF49F76AD3A71651FE1A8A9F0D2A689E", mac);
}
@Test
public void sm4mac_case2() {
ISM4Mac sydApiMac = api.initSM4Mac(1);
String mac = sydApiMac.disget();
String mac = sydApiMac.digest();
Assert.assertEquals("FF49F76AD3A71651FE1A8A9F0D2A689E", mac);
}
@ -99,7 +99,7 @@ public class LongDataTest {
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);
// * SydSM4Mac sydApiMac = api.initSydSM4Mac(api, 1, 1,1);
// * sydApiMac.update(new byte[i]);
// * System.out.println(sydApiMac.disget().getData());
// * System.out.println(sydApiMac.digest().getData());
// *
// * SM4 updata传0-4064随机长度
// * Random random = new Random();
@ -67,10 +67,10 @@ package test;
// String s = Util.bytes2HexString(finish);
// System.out.print( s);
//
// SM4Mac直接调用disget
// SM4Mac直接调用digest
// SydSM4Mac sydSM4Mac = api.initSydSM4Mac(api, 1, 1,1);
// LongDataReturn disget = sydSM4Mac.disget();
// System.out.println(disget.getData());
// LongDataReturn digest = sydSM4Mac.digest();
// System.out.println(digest.getData());
// **/
//
//// 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.