diff --git a/chsm-common/pom.xml b/chsm-common/pom.xml index 4609f70..b148e70 100644 --- a/chsm-common/pom.xml +++ b/chsm-common/pom.xml @@ -49,12 +49,6 @@ net.java.dev.jna jna - - com.google.guava - guava - 33.2.1-jre - - diff --git a/chsm-common/src/main/java/com/sunyard/chsm/mapper/SpKeyRecordMapper.java b/chsm-common/src/main/java/com/sunyard/chsm/mapper/SpKeyRecordMapper.java index 335669e..4a0a7ea 100644 --- a/chsm-common/src/main/java/com/sunyard/chsm/mapper/SpKeyRecordMapper.java +++ b/chsm-common/src/main/java/com/sunyard/chsm/mapper/SpKeyRecordMapper.java @@ -31,7 +31,7 @@ public interface SpKeyRecordMapper extends BaseMapper { return selectOne( new LambdaQueryWrapper() .eq(KeyRecord::getPubIdx, pubKey.substring(0, 8)) - .lt(KeyRecord::getPubKey, pubKey) + .eq(KeyRecord::getPubKey, pubKey) ); } diff --git a/chsm-common/src/main/java/com/sunyard/chsm/sdf/adapter/BcSdfApiAdaptor.java b/chsm-common/src/main/java/com/sunyard/chsm/sdf/adapter/BcSdfApiAdaptor.java index 4ce558a..024134d 100644 --- a/chsm-common/src/main/java/com/sunyard/chsm/sdf/adapter/BcSdfApiAdaptor.java +++ b/chsm-common/src/main/java/com/sunyard/chsm/sdf/adapter/BcSdfApiAdaptor.java @@ -4,13 +4,13 @@ import com.sunyard.chsm.sdf.model.DeviceInfo; import com.sunyard.chsm.sdf.model.EccKey; import com.sunyard.chsm.sdf.model.EccPriKey; import com.sunyard.chsm.sdf.model.EccPubKey; +import com.sunyard.chsm.sdf.util.LangUtils; import com.sunyard.chsm.utils.gm.BCSM2Utils; import lombok.SneakyThrows; import org.bouncycastle.jcajce.provider.asymmetric.ec.BCECPrivateKey; import org.bouncycastle.jcajce.provider.asymmetric.ec.BCECPublicKey; import org.bouncycastle.math.ec.ECPoint; import org.bouncycastle.util.BigIntegers; -import org.bouncycastle.util.encoders.Hex; import java.math.BigInteger; import java.security.KeyPair; @@ -27,17 +27,19 @@ public class BcSdfApiAdaptor implements SdfApiAdapter { static { deviceInfo = new DeviceInfo(); - deviceInfo.setIssuerName("bouncycastle"); - deviceInfo.setDeviceName("2356621c1a5976bcd6fe2303e5bbf9a9dddc1c1160a521ac61257b04e12b75df"); + deviceInfo.setIssuerName("BC"); + deviceInfo.setDeviceName("BC-3000"); deviceInfo.setDeviceSerial("BC00202411051037"); deviceInfo.setDeviceVersion(1); deviceInfo.setStandardVersion(1); + deviceInfo.setAsymAlgAbility(new long[]{7493065891348563935L, 3000543215027029126L}); + deviceInfo.setSymAlgAbility(2782707529341253316L); + deviceInfo.setHashAlgAbility(7010608454676760881L); } - @Override public String openDevice() { - return "c95a78d9c04a557b7b46dbcb5f36cc665f7446ad73fa75f954220232292f768e"; + return "c95a78d9c04a557b7b46dbcb5f36cc66"; } @Override @@ -47,7 +49,7 @@ public class BcSdfApiAdaptor implements SdfApiAdapter { @Override public String openSession(String deviceHandle) { - return "6975feaffaa35b31b6d4e4555ac403a1ad82f46c3d3ce0ee5005e397d3d07fed"; + return "6975feaffaa35b31b6d4e4555ac403a1"; } @Override @@ -69,11 +71,18 @@ public class BcSdfApiAdaptor implements SdfApiAdapter { @Override public EccPubKey exportEncPublicKeyECC(String sessionHandle, int uiKeyIndex) { - BigInteger d = new BigInteger(1, Hex.decode(deviceInfo.getDeviceName())); + BigInteger d = new BigInteger(1, getD()); ECPoint q = BCSM2Utils.G_POINT.multiply(d).normalize(); return new EccPubKey(256, q.getXCoord().getEncoded(), q.getYCoord().getEncoded()); } + private byte[] getD() { + return LangUtils.merge(LangUtils.toByteArray(deviceInfo.getAsymAlgAbility()[0]), + LangUtils.toByteArray(deviceInfo.getAsymAlgAbility()[1]), + LangUtils.toByteArray(deviceInfo.getSymAlgAbility()), + LangUtils.toByteArray(deviceInfo.getHashAlgAbility())); + } + @SneakyThrows @Override public EccKey generateKeyPairECC(String sessionHandle, String alg, int uiKeyBits) { diff --git a/chsm-common/src/main/java/com/sunyard/chsm/sdf/adapter/JnaSdfAdaptor.java b/chsm-common/src/main/java/com/sunyard/chsm/sdf/adapter/JnaSdfAdaptor.java index 65cfcca..2e68105 100644 --- a/chsm-common/src/main/java/com/sunyard/chsm/sdf/adapter/JnaSdfAdaptor.java +++ b/chsm-common/src/main/java/com/sunyard/chsm/sdf/adapter/JnaSdfAdaptor.java @@ -101,7 +101,7 @@ public abstract class JnaSdfAdaptor implements SdfApiAdapter { deviceInfo.setDeviceSerial(new String(sdfInfo.DeviceSerial)); deviceInfo.setDeviceVersion(sdfInfo.DeviceVersion); deviceInfo.setStandardVersion(sdfInfo.StandardVersion); - deviceInfo.setAsymAlgAbility(sdfInfo.AsymAlgAbility); + deviceInfo.setAsymAlgAbility(new long[]{sdfInfo.AsymAlgAbility[0], sdfInfo.AsymAlgAbility[1]}); deviceInfo.setSymAlgAbility(sdfInfo.SymAlgAbility); deviceInfo.setHashAlgAbility(sdfInfo.HashAlgAbility); deviceInfo.setBufferSize(sdfInfo.BufferSize); diff --git a/chsm-common/src/main/java/com/sunyard/chsm/sdf/model/DeviceInfo.java b/chsm-common/src/main/java/com/sunyard/chsm/sdf/model/DeviceInfo.java index 1233084..72b1891 100755 --- a/chsm-common/src/main/java/com/sunyard/chsm/sdf/model/DeviceInfo.java +++ b/chsm-common/src/main/java/com/sunyard/chsm/sdf/model/DeviceInfo.java @@ -15,9 +15,9 @@ public class DeviceInfo { private String deviceSerial; private int deviceVersion; private int standardVersion; - private int[] asymAlgAbility; - private int symAlgAbility; - private int hashAlgAbility; - private int bufferSize; + private long[] asymAlgAbility; + private long symAlgAbility; + private long hashAlgAbility; + private long bufferSize; } diff --git a/chsm-web-manage/src/main/java/com/sunyard/chsm/service/impl/AppCertServiceImpl.java b/chsm-web-manage/src/main/java/com/sunyard/chsm/service/impl/AppCertServiceImpl.java index 1a9b436..a546ece 100644 --- a/chsm-web-manage/src/main/java/com/sunyard/chsm/service/impl/AppCertServiceImpl.java +++ b/chsm-web-manage/src/main/java/com/sunyard/chsm/service/impl/AppCertServiceImpl.java @@ -2,6 +2,7 @@ package com.sunyard.chsm.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.toolkit.IdWorker; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.sunyard.chsm.dto.CertDTO; import com.sunyard.chsm.enums.KeyCategory; @@ -215,6 +216,7 @@ public class AppCertServiceImpl implements AppCertService { private AppCert genCert(X509Certificate x509Cert, Long appId, KeyRecord record, CertDTO.ImportCert importCert) { AppCert cert = new AppCert(); + cert.setId(IdWorker.getId()); cert.setApplicationId(appId); cert.setKeyId(record.getKeyId()); cert.setKeyRecordId(record.getId()); @@ -238,7 +240,7 @@ public class AppCertServiceImpl implements AppCertService { private static Pair decryptEnvelopedKey(byte[] d, byte[] envelopedKey) throws Exception { - ECPrivateKeyParameters pri = BCECUtils.createECPrivateKeyParameters(Hex.decode(d)); + ECPrivateKeyParameters pri = BCECUtils.createECPrivateKeyParameters(d); ASN1Sequence seq = DLSequence.getInstance(envelopedKey); AlgorithmIdentifier oid = AlgorithmIdentifier.getInstance(seq.getObjectAt(0)); diff --git a/chsm-web-manage/src/main/java/com/sunyard/chsm/task/DeviceTask.java b/chsm-web-manage/src/main/java/com/sunyard/chsm/task/DeviceTask.java index 84b77f0..5e2a787 100644 --- a/chsm-web-manage/src/main/java/com/sunyard/chsm/task/DeviceTask.java +++ b/chsm-web-manage/src/main/java/com/sunyard/chsm/task/DeviceTask.java @@ -2,6 +2,7 @@ package com.sunyard.chsm.task; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.sun.jna.Platform; import com.sunyard.chsm.mapper.SpDeviceMapper; import com.sunyard.chsm.model.entity.Device; import com.sunyard.chsm.sdf.adapter.SdfApiAdapter; @@ -88,6 +89,11 @@ public class DeviceTask implements InitializingBean { @Override public void afterPropertiesSet() throws Exception { - threadPoolTaskScheduler.scheduleWithFixedDelay(this::checkDeviceStatus, Duration.ofMinutes(5L)); + if (Platform.isLinux() || Platform.isWindows()) { + threadPoolTaskScheduler.scheduleWithFixedDelay(this::checkDeviceStatus, Duration.ofMinutes(5L)); + } else { + log.warn("操作系统: {} 不支持启动检查设备状态定时任务", System.getProperty("os.name")); + } + } }