调整接口和测试

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
@@ -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);
}
@@ -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,
@@ -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
@@ -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);
}
});
@@ -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
+25
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());
}
}
+2 -2
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 - 测试失败");
+3 -3
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();
}
+4 -4
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