diff --git a/src/main/java/com/sunyard/sge/database/SydApi4Database.java b/src/main/java/com/sunyard/sge/database/SydApi4Database.java index b6a0ded..21b39fe 100644 --- a/src/main/java/com/sunyard/sge/database/SydApi4Database.java +++ b/src/main/java/com/sunyard/sge/database/SydApi4Database.java @@ -105,6 +105,7 @@ public class SydApi4Database implements SydApi { if (isShortLinkMode) { SYD_Disconnect(); } + // 配合链接池,不再需要释放。 } @@ -177,37 +178,48 @@ public class SydApi4Database implements SydApi { } SydApiException le = null; - LockableObject lockableObject = new LockableObject(); - lockableObject.lock(); - try { for (SydApi4j api : this.hsms) { if (null == api) { continue; } - try { - byte[] hash = api.SYD_SM3_LongData(pcData, procData, iPkgNum); - log.debug("api.SYD_SM3_LongData方法返回值:{}", Arrays.toString(hash)); - if (0 == iPkgNum || 3 == iPkgNum) { - return new LongDataReturn(null, Util.bytes2HexString(hash)); - } else { - return new LongDataReturn(Util.bytes2HexString(hash), null); + if (isShortLinkMode) { + try { + byte[] hash = api.SYD_SM3_LongData(pcData, procData, iPkgNum); + log.debug("api.SYD_SM3_LongData方法返回值:{}", Arrays.toString(hash)); + if (0 == iPkgNum || 3 == iPkgNum) { + return new LongDataReturn(null, Util.bytes2HexString(hash)); + } else { + return new LongDataReturn(Util.bytes2HexString(hash), null); + } + } catch (SydApiException e) { + le = e; + if (e.getRetCode() < 0) { + log.error("HA 重试"); + continue; + } + throw e; } - } catch (SydApiException e) { - le = e; - if (e.getRetCode() < 0) { - log.error("HA 重试"); - continue; + } else { + synchronized (api) { + try { + byte[] hash = api.SYD_SM3_LongData(pcData, procData, iPkgNum); + log.debug("api.SYD_SM3_LongData方法返回值:{}", Arrays.toString(hash)); + if (0 == iPkgNum || 3 == iPkgNum) { + return new LongDataReturn(null, Util.bytes2HexString(hash)); + } else { + return new LongDataReturn(Util.bytes2HexString(hash), null); + } + } catch (SydApiException e) { + le = e; + if (e.getRetCode() < 0) { + log.error("HA 重试"); + continue; + } + throw e; + } } - throw e; } } - } - catch (Exception e){ - - } - finally { - lockableObject.unlock(); - } throw le; } @@ -230,27 +242,54 @@ public class SydApi4Database implements SydApi { if (null == api) { continue; } - try { - if (Consts.ECB_ENC == iFlag) { - return api.SYMEncryptData( - com.sunyard.SydApi.NALG_SM4, - "SK" + SYMUtil.genPrivateKeyMark("000000", "00A", keyIndex), - 1, - pcData); - } else { - return api.SYMDecryptData( - com.sunyard.SydApi.NALG_SM4, - "SK" + SYMUtil.genPrivateKeyMark("000000", "00A", keyIndex), - 1, - pcData); + if (isShortLinkMode) { + try { + if (Consts.ECB_ENC == iFlag) { + return api.SYMEncryptData( + com.sunyard.SydApi.NALG_SM4, + "SK" + SYMUtil.genPrivateKeyMark("000000", "00A", keyIndex), + 1, + pcData); + } else { + return api.SYMDecryptData( + com.sunyard.SydApi.NALG_SM4, + "SK" + SYMUtil.genPrivateKeyMark("000000", "00A", keyIndex), + 1, + pcData); + } + } catch (SydApiException e) { + le = e; + if (e.getRetCode() < 0) { + log.error("HA 重试"); + continue; + } + throw e; } - } catch (SydApiException e) { - le = e; - if (e.getRetCode() < 0) { - log.error("HA 重试"); - continue; + } else { + synchronized (api) { + try { + if (Consts.ECB_ENC == iFlag) { + return api.SYMEncryptData( + com.sunyard.SydApi.NALG_SM4, + "SK" + SYMUtil.genPrivateKeyMark("000000", "00A", keyIndex), + 1, + pcData); + } else { + return api.SYMDecryptData( + com.sunyard.SydApi.NALG_SM4, + "SK" + SYMUtil.genPrivateKeyMark("000000", "00A", keyIndex), + 1, + pcData); + } + } catch (SydApiException e) { + le = e; + if (e.getRetCode() < 0) { + log.error("HA 重试"); + continue; + } + throw e; + } } - throw e; } } throw le; @@ -283,20 +322,40 @@ public class SydApi4Database implements SydApi { if (null == api) { continue; } - try { - if (Consts.ECB_ENC == iFlag) { - return api.SYMEncryptDecryptBatchData(8, 1, null, keys, 1, pcData); + if (isShortLinkMode) { + try { + if (Consts.ECB_ENC == iFlag) { + return api.SYMEncryptDecryptBatchData(8, 1, null, keys, 1, pcData); - } else { - return api.SYMEncryptDecryptBatchData(9, 1, null, keys, 1, pcData); + } else { + return api.SYMEncryptDecryptBatchData(9, 1, null, keys, 1, pcData); + } + } catch (SydApiException e) { + le = e; + if (e.getRetCode() < 0) { + log.error("HA 重试"); + continue; + } + throw e; } - } catch (SydApiException e) { - le = e; - if (e.getRetCode() < 0) { - log.error("HA 重试"); - continue; + } else { + synchronized (api) { + try { + if (Consts.ECB_ENC == iFlag) { + return api.SYMEncryptDecryptBatchData(8, 1, null, keys, 1, pcData); + + } else { + return api.SYMEncryptDecryptBatchData(9, 1, null, keys, 1, pcData); + } + } catch (SydApiException e) { + le = e; + if (e.getRetCode() < 0) { + log.error("HA 重试"); + continue; + } + throw e; + } } - throw e; } } throw le; @@ -321,30 +380,60 @@ public class SydApi4Database implements SydApi { if (null == api) { continue; } - try { - if (Consts.ECB_ENC == iFlag) { - return api.SYD_SM4_LongData( - 8, - 1, null, - "SK" + SYMUtil.genPrivateKeyMark("000000", "00A", keyIndex), - 1, - pcData, iPkgNum); - } else { - return api.SYD_SM4_LongData( - 9, - 1, null, - "SK" + SYMUtil.genPrivateKeyMark("000000", "00A", keyIndex), - 1, - pcData, iPkgNum); - } + if (isShortLinkMode) { + try { + if (Consts.ECB_ENC == iFlag) { + return api.SYD_SM4_LongData( + 8, + 1, null, + "SK" + SYMUtil.genPrivateKeyMark("000000", "00A", keyIndex), + 1, + pcData, iPkgNum); + } else { + return api.SYD_SM4_LongData( + 9, + 1, null, + "SK" + SYMUtil.genPrivateKeyMark("000000", "00A", keyIndex), + 1, + pcData, iPkgNum); + } - } catch (SydApiException e) { - le = e; - if (e.getRetCode() < 0) { - log.error("HA 重试"); - continue; + } catch (SydApiException e) { + le = e; + if (e.getRetCode() < 0) { + log.error("HA 重试"); + continue; + } + throw e; + } + } else { + synchronized (api) { + try { + if (Consts.ECB_ENC == iFlag) { + return api.SYD_SM4_LongData( + 8, + 1, null, + "SK" + SYMUtil.genPrivateKeyMark("000000", "00A", keyIndex), + 1, + pcData, iPkgNum); + } else { + return api.SYD_SM4_LongData( + 9, + 1, null, + "SK" + SYMUtil.genPrivateKeyMark("000000", "00A", keyIndex), + 1, + pcData, iPkgNum); + } + + } catch (SydApiException e) { + le = e; + if (e.getRetCode() < 0) { + log.error("HA 重试"); + continue; + } + throw e; + } } - throw e; } } throw le; @@ -369,24 +458,48 @@ public class SydApi4Database implements SydApi { if (null == api) { continue; } - try { - List list = api.SYMEncryptDecryptBatchData(8, 2, null, keys, 1, pcData); - String[] ret = new String[list.size()]; - for (int i = 0; i < list.size(); i++) { - byte[] mac = new byte[16]; - byte[] buff = list.get(i); - System.arraycopy(buff, buff.length - 16, mac, 0, 16); - ret[i] = Util.bytes2HexString(buff); - } - return ret; + if (isShortLinkMode) { + try { + List list = api.SYMEncryptDecryptBatchData(8, 2, null, keys, 1, pcData); + String[] ret = new String[list.size()]; + for (int i = 0; i < list.size(); i++) { + byte[] mac = new byte[16]; + byte[] buff = list.get(i); + System.arraycopy(buff, buff.length - 16, mac, 0, 16); + ret[i] = Util.bytes2HexString(buff); + } + return ret; - } catch (SydApiException e) { - le = e; - if (e.getRetCode() < 0) { - log.error("HA 重试"); - continue; + } catch (SydApiException e) { + le = e; + if (e.getRetCode() < 0) { + log.error("HA 重试"); + continue; + } + throw e; + } + } else { + synchronized (api) { + try { + List list = api.SYMEncryptDecryptBatchData(8, 2, null, keys, 1, pcData); + String[] ret = new String[list.size()]; + for (int i = 0; i < list.size(); i++) { + byte[] mac = new byte[16]; + byte[] buff = list.get(i); + System.arraycopy(buff, buff.length - 16, mac, 0, 16); + ret[i] = Util.bytes2HexString(buff); + } + return ret; + + } catch (SydApiException e) { + le = e; + if (e.getRetCode() < 0) { + log.error("HA 重试"); + continue; + } + throw e; + } } - throw e; } } throw le; @@ -411,24 +524,48 @@ public class SydApi4Database implements SydApi { if (null == api) { continue; } - try { - List list = api.SYMEncryptDecryptBatchData(8, 2, null, keys, 1, pcData); - boolean[] ret = new boolean[list.size()]; - for (int i = 0; i < list.size(); i++) { - byte[] mac = new byte[16]; - byte[] buff = list.get(i); - System.arraycopy(buff, buff.length - 16, mac, 0, 16); - ret[i] = pcMac[i].equals(Util.bytes2HexString(buff)); - } + if (isShortLinkMode) { + try { + List list = api.SYMEncryptDecryptBatchData(8, 2, null, keys, 1, pcData); + boolean[] ret = new boolean[list.size()]; + for (int i = 0; i < list.size(); i++) { + byte[] mac = new byte[16]; + byte[] buff = list.get(i); + System.arraycopy(buff, buff.length - 16, mac, 0, 16); + ret[i] = pcMac[i].equals(Util.bytes2HexString(buff)); + } - return ret; - } catch (SydApiException e) { - le = e; - if (e.getRetCode() < 0) { - log.error("HA 重试"); - continue; + return ret; + } catch (SydApiException e) { + le = e; + if (e.getRetCode() < 0) { + log.error("HA 重试"); + continue; + } + throw e; + } + } else { + synchronized (api) { + try { + List list = api.SYMEncryptDecryptBatchData(8, 2, null, keys, 1, pcData); + boolean[] ret = new boolean[list.size()]; + for (int i = 0; i < list.size(); i++) { + byte[] mac = new byte[16]; + byte[] buff = list.get(i); + System.arraycopy(buff, buff.length - 16, mac, 0, 16); + ret[i] = pcMac[i].equals(Util.bytes2HexString(buff)); + } + + return ret; + } catch (SydApiException e) { + le = e; + if (e.getRetCode() < 0) { + log.error("HA 重试"); + continue; + } + throw e; + } } - throw e; } } throw le; @@ -458,32 +595,64 @@ public class SydApi4Database implements SydApi { if (null == api) { continue; } - try { - byte[] ret = api.SYD_SM4_LongData( - 8, - 2, iv, - "SK" + SYMUtil.genPrivateKeyMark("000000", "00A", keyIndex), - 1, - pcData, iPkgNum); + if (isShortLinkMode) { + try { + byte[] ret = api.SYD_SM4_LongData( + 8, + 2, iv, + "SK" + SYMUtil.genPrivateKeyMark("000000", "00A", keyIndex), + 1, + pcData, iPkgNum); - byte[] mac = new byte[16]; - System.arraycopy(ret, ret.length - 16, mac, 0, 16); + byte[] mac = new byte[16]; + System.arraycopy(ret, ret.length - 16, mac, 0, 16); - // 仅一包 和 尾包 返回最终结果 - if (Consts.PkgNumAll == iPkgNum || Consts.PkgNumTail == iPkgNum) { - return new LongDataReturn<>(null, Util.bytes2HexString(mac)); - } else { - // 返回中间值 - return new LongDataReturn<>(Util.bytes2HexString(mac), null); + // 仅一包 和 尾包 返回最终结果 + if (Consts.PkgNumAll == iPkgNum || Consts.PkgNumTail == iPkgNum) { + return new LongDataReturn<>(null, Util.bytes2HexString(mac)); + } else { + // 返回中间值 + return new LongDataReturn<>(Util.bytes2HexString(mac), null); + } + + } catch (SydApiException e) { + le = e; + if (e.getRetCode() < 0) { + log.error("HA 重试"); + continue; + } + throw e; } + } else { + synchronized (api) { + try { + byte[] ret = api.SYD_SM4_LongData( + 8, + 2, iv, + "SK" + SYMUtil.genPrivateKeyMark("000000", "00A", keyIndex), + 1, + pcData, iPkgNum); - } catch (SydApiException e) { - le = e; - if (e.getRetCode() < 0) { - log.error("HA 重试"); - continue; + byte[] mac = new byte[16]; + System.arraycopy(ret, ret.length - 16, mac, 0, 16); + + // 仅一包 和 尾包 返回最终结果 + if (Consts.PkgNumAll == iPkgNum || Consts.PkgNumTail == iPkgNum) { + return new LongDataReturn<>(null, Util.bytes2HexString(mac)); + } else { + // 返回中间值 + return new LongDataReturn<>(Util.bytes2HexString(mac), null); + } + + } catch (SydApiException e) { + le = e; + if (e.getRetCode() < 0) { + log.error("HA 重试"); + continue; + } + throw e; + } } - throw e; } } throw le; @@ -523,17 +692,35 @@ public class SydApi4Database implements SydApi { if (null == api) { continue; } - try { + if (isShortLinkMode) { + try { - return api.SYD_SM4Mac_ShortData(keyIndex, pcData); + return api.SYD_SM4Mac_ShortData(keyIndex, pcData); - } catch (SydApiException e) { - le = e; - if (e.getRetCode() < 0) { - log.error("HA 重试"); - continue; + } catch (SydApiException e) { + le = e; + if (e.getRetCode() < 0) { + log.error("HA 重试"); + continue; + } + throw e; + } + } + else { + synchronized (api){ + try { + + return api.SYD_SM4Mac_ShortData(keyIndex, pcData); + + } catch (SydApiException e) { + le = e; + if (e.getRetCode() < 0) { + log.error("HA 重试"); + continue; + } + throw e; + } } - throw e; } } throw le;