This commit is contained in:
liulu
2024-11-08 09:00:04 +08:00
parent 1cf14e0884
commit 0acb061756
13 changed files with 479 additions and 13 deletions
@@ -6,9 +6,12 @@ import com.sunyard.chsm.sdf.lib.SdfLibrary;
import com.sunyard.chsm.sdf.model.DeviceInfo;
import com.sunyard.chsm.sdf.model.EccKey;
import com.sunyard.chsm.sdf.model.EccPubKey;
import com.sunyard.chsm.sdf.model.SDF_DeviceInfo;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.util.Assert;
import java.util.Arrays;
import java.util.Map;
import java.util.UUID;
import java.util.concurrent.ConcurrentHashMap;
@@ -17,6 +20,7 @@ import java.util.concurrent.ConcurrentHashMap;
* @author liulu
* @since 2024/11/4
*/
@Slf4j
@RequiredArgsConstructor
public abstract class JnaSdfAdaptor implements SdfApiAdapter {
@@ -87,7 +91,21 @@ public abstract class JnaSdfAdaptor implements SdfApiAdapter {
@Override
public DeviceInfo getDeviceInfo(String sessionHandle) {
return null;
SDF_DeviceInfo sdfInfo = new SDF_DeviceInfo();
sdfLibrary.SDF_GetDeviceInfo(getSessionHandle(sessionHandle), sdfInfo);
DeviceInfo deviceInfo = new DeviceInfo();
deviceInfo.setIssuerName(new String(sdfInfo.IssuerName));
deviceInfo.setDeviceName(new String(sdfInfo.DeviceName));
deviceInfo.setDeviceSerial(new String(sdfInfo.DeviceSerial));
deviceInfo.setDeviceVersion(sdfInfo.DeviceVersion);
deviceInfo.setStandardVersion(sdfInfo.StandardVersion);
deviceInfo.setAsymAlgAbility(sdfInfo.AsymAlgAbility);
deviceInfo.setSymAlgAbility(sdfInfo.SymAlgAbility);
deviceInfo.setHashAlgAbility(sdfInfo.HashAlgAbility);
deviceInfo.setBufferSize(sdfInfo.BufferSize);
return deviceInfo;
}
@Override
@@ -100,7 +118,10 @@ public abstract class JnaSdfAdaptor implements SdfApiAdapter {
@Override
public EccPubKey exportEncPublicKeyECC(String sessionHandle, int uiKeyIndex) {
return null;
byte[] pubKey = new byte[132];
Pointer hSessionHandle = getSessionHandle(sessionHandle);
sdfLibrary.SDF_ExportEncPublicKey_ECC(hSessionHandle, uiKeyIndex, pubKey);
return new EccPubKey(256, Arrays.copyOfRange(pubKey, 36, 68), Arrays.copyOfRange(pubKey, 100, 132));
}
@Override
@@ -27,7 +27,7 @@ public class SdfApiAdapterFactory {
case enc001:
return new SunyardJnaSdfAdaptor(device.getServiceIp(), device.getServicePort());
default:
return null;
throw new UnsupportedOperationException("不支持的设备型号: " + device.getManufacturerModel());
}
}
@@ -24,7 +24,7 @@ public class SunyardJnaSdfAdaptor extends JnaSdfAdaptor {
private final Integer dealTimeout;
public SunyardJnaSdfAdaptor(String ip, int port) {
this(ip, port, "libsdf");
this(ip, port, "sdf");
}
public SunyardJnaSdfAdaptor(String ip, int port, String libName) {