对称密钥测试
This commit is contained in:
@@ -0,0 +1,13 @@
|
||||
package com.sunyard.chsm.constant;
|
||||
|
||||
import com.sunyard.chsm.utils.CodecUtils;
|
||||
|
||||
/**
|
||||
* @author liulu
|
||||
* @since 2024/12/19
|
||||
*/
|
||||
public interface CryptoConst {
|
||||
|
||||
byte[] iv = CodecUtils.decodeHex("30303030303030303030303030303030");
|
||||
|
||||
}
|
||||
@@ -1,5 +1,6 @@
|
||||
package com.sunyard.chsm.sdf.adapter;
|
||||
|
||||
import com.sun.jna.Native;
|
||||
import com.sun.jna.ptr.PointerByReference;
|
||||
import com.sunyard.chsm.sdf.context.AlgId;
|
||||
import com.sunyard.chsm.sdf.context.SdrCode;
|
||||
@@ -9,9 +10,13 @@ import com.sunyard.chsm.sdf.lib.SunyardSdfLibrary;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.util.ClassUtils;
|
||||
|
||||
import java.lang.reflect.InvocationHandler;
|
||||
import java.lang.reflect.Method;
|
||||
import java.lang.reflect.Proxy;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.UUID;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
|
||||
/**
|
||||
* @author liulu
|
||||
@@ -20,6 +25,8 @@ import java.util.UUID;
|
||||
@Slf4j
|
||||
public class SunyardJnaSdfAdaptor extends JnaSdfAdaptor {
|
||||
|
||||
private static final Map<String, SunyardSdfLibrary> SDF_LIB_MAP = new ConcurrentHashMap<>();
|
||||
|
||||
private final String ip;
|
||||
private final Integer port;
|
||||
private final Integer connTimeout;
|
||||
@@ -32,24 +39,33 @@ public class SunyardJnaSdfAdaptor extends JnaSdfAdaptor {
|
||||
public SunyardJnaSdfAdaptor(String ip, int port, int connTimeout, int dealTimeout) {
|
||||
super((SdfLibrary) Proxy.newProxyInstance(ClassUtils.getDefaultClassLoader(),
|
||||
new Class[]{SdfLibrary.class},
|
||||
(proxy, method, args) -> {
|
||||
Object res = method.invoke(SunyardSdfLibrary.INSTANCE, args);
|
||||
if (!(res instanceof Integer)) {
|
||||
new InvocationHandler() {
|
||||
private final SunyardSdfLibrary sunyardSdfLibrary;
|
||||
|
||||
{
|
||||
sunyardSdfLibrary = SDF_LIB_MAP.computeIfAbsent("sdf", k -> Native.load(k, SunyardSdfLibrary.class));
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
|
||||
Object res = method.invoke(sunyardSdfLibrary, args);
|
||||
if (!(res instanceof Integer)) {
|
||||
return res;
|
||||
}
|
||||
int resInt = (Integer) res;
|
||||
if (Objects.equals("SDF_ExternalVerify_ECC", method.getName())) {
|
||||
log.info("SDF_ExternalVerify_ECC: {}, 返回值: {}", method.getName(), Integer.toHexString(resInt));
|
||||
return resInt;
|
||||
}
|
||||
if (method.getName().startsWith("SDF_")) {
|
||||
if (resInt != SdrCode.SDR_OK.getCode()) {
|
||||
log.warn("调用异常: {}, 返回值: {} -{}", method.getName(), Integer.toHexString(resInt), resInt);
|
||||
SdrCode sdrCode = SdrCode.of((Integer) res);
|
||||
throw new IllegalArgumentException(sdrCode != null ? sdrCode.getMsg() : "调用sdf接口异常: " + Integer.toHexString(resInt));
|
||||
}
|
||||
}
|
||||
return res;
|
||||
}
|
||||
int resInt = (Integer) res;
|
||||
if (Objects.equals("SDF_ExternalVerify_ECC", method.getName())) {
|
||||
log.info("SDF_ExternalVerify_ECC: {}, 返回值: {}", method.getName(), Integer.toHexString(resInt));
|
||||
return resInt;
|
||||
}
|
||||
if (method.getName().startsWith("SDF_")) {
|
||||
if (resInt != SdrCode.SDR_OK.getCode()) {
|
||||
log.warn("调用异常: {}, 返回值: {} -{}", method.getName(), Integer.toHexString(resInt), resInt);
|
||||
SdrCode sdrCode = SdrCode.of((Integer) res);
|
||||
throw new IllegalArgumentException(sdrCode != null ? sdrCode.getMsg() : "调用sdf接口异常: " + Integer.toHexString(resInt));
|
||||
}
|
||||
}
|
||||
return res;
|
||||
}
|
||||
));
|
||||
this.ip = ip;
|
||||
@@ -60,8 +76,9 @@ public class SunyardJnaSdfAdaptor extends JnaSdfAdaptor {
|
||||
|
||||
@Override
|
||||
public String openDevice() {
|
||||
SunyardSdfLibrary sunyardSdfLibrary = SDF_LIB_MAP.computeIfAbsent("sdf", k -> Native.load(k, SunyardSdfLibrary.class));
|
||||
PointerByReference phDeviceHandle = new PointerByReference();
|
||||
SunyardSdfLibrary.INSTANCE.SDF_OpenDevice(phDeviceHandle, safeStringBytes(ip), port, connTimeout, dealTimeout, 0);
|
||||
sunyardSdfLibrary.SDF_OpenDevice(phDeviceHandle, safeStringBytes(ip), port, connTimeout, dealTimeout, 0);
|
||||
String key = UUID.randomUUID().toString();
|
||||
DEVICE_HANDLE_CONTEXT.put(key, phDeviceHandle.getValue());
|
||||
return key;
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
package com.sunyard.chsm.sdf.lib;
|
||||
|
||||
import com.sun.jna.Native;
|
||||
import com.sun.jna.ptr.PointerByReference;
|
||||
|
||||
/**
|
||||
@@ -9,8 +8,6 @@ import com.sun.jna.ptr.PointerByReference;
|
||||
*/
|
||||
public interface SunyardSdfLibrary extends SdfLibrary {
|
||||
|
||||
SunyardSdfLibrary INSTANCE = Native.load("sdf", SunyardSdfLibrary.class);
|
||||
|
||||
/**
|
||||
* 打开设备
|
||||
* @param phDeviceHandle 设备句柄
|
||||
|
||||
@@ -28,6 +28,9 @@ public abstract class CodecUtils {
|
||||
}
|
||||
|
||||
public static String encodeHex(byte[] data) {
|
||||
if (data == null) {
|
||||
return "";
|
||||
}
|
||||
return Hex.toHexString(data);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user