From dd021222d783144f74a414e6c47b87939e9e6266 Mon Sep 17 00:00:00 2001 From: huanghaiquan Date: Sun, 19 May 2019 01:15:06 +0800 Subject: [PATCH] Added crypto-provider attribute to the settings of ledger; --- .../com/jd/blockchain/consts/DataCodes.java | 2 + .../blockchain/provider/ProviderManager.java | 31 ++++++++--- .../java/com/jd/blockchain/crypto/Crypto.java | 32 +++++++++++ .../jd/blockchain/crypto/CryptoAlgorithm.java | 10 +++- .../crypto/CryptoAlgorithmDefinition.java | 38 +++++-------- .../jd/blockchain/crypto/CryptoProvider.java | 17 ++++++ .../blockchain/crypto/CryptoProviderInfo.java | 24 +++++++++ .../blockchain/ledger/core/CryptoConfig.java | 53 ++++++++++++++++++- .../jd/blockchain/ledger/AccountSetTest.java | 14 +++++ .../jd/blockchain/ledger/BaseAccountTest.java | 13 +++++ .../ledger/LedgerAdminAccountTest.java | 13 +++++ .../blockchain/ledger/LedgerEditerTest.java | 13 +++++ .../ledger/LedgerInitOperationTest.java | 12 +++++ .../ledger/LedgerInitSettingTest.java | 13 +++++ .../blockchain/ledger/LedgerManagerTest.java | 16 ++++++ .../blockchain/ledger/LedgerMetaDataTest.java | 27 ++++++++++ .../jd/blockchain/ledger/LedgerTestUtils.java | 13 +++++ .../blockchain/ledger/MerkleDataSetTest.java | 26 +++++++++ .../blockchain/ledger/CryptoProviderInfo.java | 12 ----- .../jd/blockchain/ledger/CryptoSetting.java | 13 ++++- .../DataAccountKVSetOpTemplate.java | 4 +- .../initializer/LedgerInitializeTest.java | 11 ++++ .../web/LedgerInitializeWebController.java | 12 +++++ 23 files changed, 370 insertions(+), 49 deletions(-) create mode 100644 source/crypto/crypto-framework/src/main/java/com/jd/blockchain/crypto/CryptoProvider.java create mode 100644 source/crypto/crypto-framework/src/main/java/com/jd/blockchain/crypto/CryptoProviderInfo.java delete mode 100644 source/ledger/ledger-model/src/main/java/com/jd/blockchain/ledger/CryptoProviderInfo.java diff --git a/source/base/src/main/java/com/jd/blockchain/consts/DataCodes.java b/source/base/src/main/java/com/jd/blockchain/consts/DataCodes.java index e4e17a14..6b47a505 100644 --- a/source/base/src/main/java/com/jd/blockchain/consts/DataCodes.java +++ b/source/base/src/main/java/com/jd/blockchain/consts/DataCodes.java @@ -68,6 +68,8 @@ public interface DataCodes { // public static final int METADATA_PARTICIPANT_INFO = 0x640; public static final int METADATA_CRYPTO_SETTING = 0x642; + + public static final int METADATA_CRYPTO_SETTING_PROVIDER = 0x643; // public static final int ACCOUNT = 0x700; diff --git a/source/base/src/main/java/com/jd/blockchain/provider/ProviderManager.java b/source/base/src/main/java/com/jd/blockchain/provider/ProviderManager.java index 447ba3db..98584de4 100644 --- a/source/base/src/main/java/com/jd/blockchain/provider/ProviderManager.java +++ b/source/base/src/main/java/com/jd/blockchain/provider/ProviderManager.java @@ -4,6 +4,7 @@ import java.security.AccessControlContext; import java.security.AccessController; import java.security.PrivilegedAction; import java.util.Collection; +import java.util.Collections; import java.util.HashMap; import java.util.LinkedHashMap; import java.util.Map; @@ -48,32 +49,45 @@ public final class ProviderManager { * @return */ public S getService(Class serviceClazz, String providerName) { - NamedProviders providers = getServiceProvider(serviceClazz); + NamedProviders providers = getNamedProviders(serviceClazz); return providers.getService(providerName); } + + public Provider getProvider(Class serviceClazz, String providerName) { + @SuppressWarnings("unchecked") + NamedProviders providers = (NamedProviders) serviceProviders.get(serviceClazz); + if (providers == null) { + return null; + } + return providers.getProvider(providerName); + } public Collection> getAllProviders(Class serviceClazz) { - NamedProviders providers = getServiceProvider(serviceClazz); + @SuppressWarnings("unchecked") + NamedProviders providers = (NamedProviders) serviceProviders.get(serviceClazz); + if (providers == null) { + return Collections.emptyList(); + } return providers.getProviders(); } public S installProvider(Class serviceClazz, String providerFullName) { - NamedProviders providers = getServiceProvider(serviceClazz); + NamedProviders providers = getNamedProviders(serviceClazz); return providers.install(providerFullName); } public S installProvider(Class service, String providerFullName, ClassLoader classLoader) { - NamedProviders providers = getServiceProvider(service); + NamedProviders providers = getNamedProviders(service); return providers.install(providerFullName, classLoader); } public void installAllProviders(Class serviceClazz, ClassLoader classLoader) { - NamedProviders providers = getServiceProvider(serviceClazz); + NamedProviders providers = getNamedProviders(serviceClazz); providers.installAll(classLoader); } @SuppressWarnings("unchecked") - private NamedProviders getServiceProvider(Class serviceClazz) { + private NamedProviders getNamedProviders(Class serviceClazz) { NamedProviders providers = (NamedProviders) serviceProviders.get(serviceClazz); if (providers == null) { synchronized (mutex) { @@ -189,6 +203,11 @@ public final class ProviderManager { public Collection> getProviders() { return namedProviders.values(); } + + + public Provider getProvider(String providerFullName) { + return namedProviders.get(providerFullName); + } public S getService(String name) { String fullName = shortNames.get(name); diff --git a/source/crypto/crypto-framework/src/main/java/com/jd/blockchain/crypto/Crypto.java b/source/crypto/crypto-framework/src/main/java/com/jd/blockchain/crypto/Crypto.java index 86dbf55b..b6b94603 100644 --- a/source/crypto/crypto-framework/src/main/java/com/jd/blockchain/crypto/Crypto.java +++ b/source/crypto/crypto-framework/src/main/java/com/jd/blockchain/crypto/Crypto.java @@ -106,6 +106,38 @@ public final class Crypto { private Crypto() { } + public static CryptoProvider[] getProviders() { + Collection> providers = pm.getAllProviders(CryptoService.class); + CryptoProvider[] infos = new CryptoProvider[providers.size()]; + + int i = 0; + for (Provider pd : providers) { + CryptoProviderInfo info = getProviderInfo(pd); + infos[i] = info; + } + + return infos; + } + + private static CryptoProviderInfo getProviderInfo(Provider pd) { + Collection functions = pd.getService().getFunctions(); + CryptoAlgorithm[] algorithms = new CryptoAlgorithm[functions.size()]; + int i = 0; + for (CryptoFunction function : functions) { + algorithms[i] = function.getAlgorithm(); + i++; + } + return new CryptoProviderInfo(pd.getFullName(), algorithms); + } + + public static CryptoProvider getProvider(String providerFullName) { + Provider pd = pm.getProvider(CryptoService.class, providerFullName); + if (pd == null) { + return null; + } + return getProviderInfo(pd); + } + public static Collection getAllAlgorithms() { return algorithms.values(); } diff --git a/source/crypto/crypto-framework/src/main/java/com/jd/blockchain/crypto/CryptoAlgorithm.java b/source/crypto/crypto-framework/src/main/java/com/jd/blockchain/crypto/CryptoAlgorithm.java index 4f505ba9..b501626f 100644 --- a/source/crypto/crypto-framework/src/main/java/com/jd/blockchain/crypto/CryptoAlgorithm.java +++ b/source/crypto/crypto-framework/src/main/java/com/jd/blockchain/crypto/CryptoAlgorithm.java @@ -9,7 +9,7 @@ import com.jd.blockchain.binaryproto.PrimitiveType; import com.jd.blockchain.consts.DataCodes; import com.jd.blockchain.utils.io.BytesUtils; -//@DataContract(code = DataCodes.CRYPTO_ALGORITHM) +@DataContract(code = DataCodes.CRYPTO_ALGORITHM) public interface CryptoAlgorithm { /** @@ -63,7 +63,7 @@ public interface CryptoAlgorithm { * {@link #EXT_ALGORITHM}) 5 种); 接下来4位标识密钥类型(包括:{@link #SYMMETRIC_KEY}, * {@link #ASYMMETRIC_KEY}); 最后8位是算法唯一ID; */ -// @DataField(primitiveType = PrimitiveType.INT16, order = 0) + @DataField(order = 0, primitiveType = PrimitiveType.INT16) short code(); /** @@ -75,7 +75,13 @@ public interface CryptoAlgorithm { * * @return */ + @DataField(order = 1, primitiveType = PrimitiveType.TEXT) String name(); + + + public static String getString(CryptoAlgorithm algorithm) { + return String.format("%s[%s]", algorithm.name(), (algorithm.code() & 0xFFFF)); + } /** * diff --git a/source/crypto/crypto-framework/src/main/java/com/jd/blockchain/crypto/CryptoAlgorithmDefinition.java b/source/crypto/crypto-framework/src/main/java/com/jd/blockchain/crypto/CryptoAlgorithmDefinition.java index 64b6a3e1..4e9f94b0 100644 --- a/source/crypto/crypto-framework/src/main/java/com/jd/blockchain/crypto/CryptoAlgorithmDefinition.java +++ b/source/crypto/crypto-framework/src/main/java/com/jd/blockchain/crypto/CryptoAlgorithmDefinition.java @@ -23,16 +23,14 @@ public final class CryptoAlgorithmDefinition implements CryptoAlgorithm { @Override public String toString() { - return name + "[" + (code & 0xFFFF) + "]"; + return CryptoAlgorithm.getString(this); } /** * 声明一项哈希算法; * - * @param name - * 算法名称; - * @param uid - * 算法ID;需要在同类算法中保持唯一性; + * @param name 算法名称; + * @param uid 算法ID;需要在同类算法中保持唯一性; * @return */ public static CryptoAlgorithm defineHash(String name, byte uid) { @@ -43,10 +41,8 @@ public final class CryptoAlgorithmDefinition implements CryptoAlgorithm { /** * 声明一项非对称密码算法; * - * @param name - * 算法名称; - * @param uid - * 算法ID;需要在同类算法中保持唯一性; + * @param name 算法名称; + * @param uid 算法ID;需要在同类算法中保持唯一性; * @return */ public static CryptoAlgorithm defineSignature(String name, boolean encryptable, byte uid) { @@ -62,10 +58,8 @@ public final class CryptoAlgorithmDefinition implements CryptoAlgorithm { /** * 声明一项非对称加密算法; * - * @param name - * 算法名称; - * @param uid - * 算法ID;需要在同类算法中保持唯一性; + * @param name 算法名称; + * @param uid 算法ID;需要在同类算法中保持唯一性; * @return */ public static CryptoAlgorithm defineAsymmetricEncryption(String name, byte uid) { @@ -76,10 +70,8 @@ public final class CryptoAlgorithmDefinition implements CryptoAlgorithm { /** * 声明一项对称密码算法; * - * @param name - * 算法名称; - * @param uid - * 算法ID;需要在同类算法中保持唯一性; + * @param name 算法名称; + * @param uid 算法ID;需要在同类算法中保持唯一性; * @return */ public static CryptoAlgorithm defineSymmetricEncryption(String name, byte uid) { @@ -90,10 +82,8 @@ public final class CryptoAlgorithmDefinition implements CryptoAlgorithm { /** * 声明一项随机数算法; * - * @param name - * 算法名称; - * @param uid - * 算法ID;需要在同类算法中保持唯一性; + * @param name 算法名称; + * @param uid 算法ID;需要在同类算法中保持唯一性; * @return */ public static CryptoAlgorithm defineRandom(String name, byte uid) { @@ -104,10 +94,8 @@ public final class CryptoAlgorithmDefinition implements CryptoAlgorithm { /** * 声明一项扩展的密码算法; * - * @param name - * 算法名称; - * @param uid - * 算法ID;需要在同类算法中保持唯一性; + * @param name 算法名称; + * @param uid 算法ID;需要在同类算法中保持唯一性; * @return */ public static CryptoAlgorithm definExt(String name, byte uid) { diff --git a/source/crypto/crypto-framework/src/main/java/com/jd/blockchain/crypto/CryptoProvider.java b/source/crypto/crypto-framework/src/main/java/com/jd/blockchain/crypto/CryptoProvider.java new file mode 100644 index 00000000..57b06831 --- /dev/null +++ b/source/crypto/crypto-framework/src/main/java/com/jd/blockchain/crypto/CryptoProvider.java @@ -0,0 +1,17 @@ +package com.jd.blockchain.crypto; + +import com.jd.blockchain.binaryproto.DataContract; +import com.jd.blockchain.binaryproto.DataField; +import com.jd.blockchain.binaryproto.PrimitiveType; +import com.jd.blockchain.consts.DataCodes; + +@DataContract(code = DataCodes.METADATA_CRYPTO_SETTING_PROVIDER) +public interface CryptoProvider { + + @DataField(order = 0, primitiveType = PrimitiveType.TEXT) + String getName(); + + @DataField(order = 1, list = true, refContract = true) + CryptoAlgorithm[] getAlgorithms(); + +} diff --git a/source/crypto/crypto-framework/src/main/java/com/jd/blockchain/crypto/CryptoProviderInfo.java b/source/crypto/crypto-framework/src/main/java/com/jd/blockchain/crypto/CryptoProviderInfo.java new file mode 100644 index 00000000..b0b17231 --- /dev/null +++ b/source/crypto/crypto-framework/src/main/java/com/jd/blockchain/crypto/CryptoProviderInfo.java @@ -0,0 +1,24 @@ +package com.jd.blockchain.crypto; + +class CryptoProviderInfo implements CryptoProvider { + + private String name; + + private CryptoAlgorithm[] algorithms; + + public CryptoProviderInfo(String name, CryptoAlgorithm[] algorithms) { + this.name = name; + this.algorithms = algorithms; + } + + @Override + public String getName() { + return name; + } + + @Override + public CryptoAlgorithm[] getAlgorithms() { + return algorithms.clone(); + } + +} diff --git a/source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/CryptoConfig.java b/source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/CryptoConfig.java index 6244d018..1939e36b 100644 --- a/source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/CryptoConfig.java +++ b/source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/CryptoConfig.java @@ -1,13 +1,23 @@ package com.jd.blockchain.ledger.core; +import java.util.HashMap; + import com.jd.blockchain.crypto.CryptoAlgorithm; +import com.jd.blockchain.crypto.CryptoProvider; import com.jd.blockchain.ledger.CryptoSetting; public class CryptoConfig implements CryptoSetting { + private CryptoProvider[] cryptoProviders; + private short hashAlgorithm; private boolean autoVerifyHash; + + HashMap providers; + HashMap nameAlgorithms; + HashMap codeAlgorithms; + public CryptoConfig() { } @@ -17,6 +27,11 @@ public class CryptoConfig implements CryptoSetting { this.autoVerifyHash = setting.getAutoVerifyHash(); } + @Override + public CryptoProvider[] getSupportedProviders() { + return cryptoProviders == null ? null : cryptoProviders.clone(); + } + @Override public short getHashAlgorithm() { return hashAlgorithm; @@ -27,11 +42,47 @@ public class CryptoConfig implements CryptoSetting { return autoVerifyHash; } + public void setSupportedProviders(CryptoProvider[] supportedProviders) { + HashMap providers = new HashMap(); + HashMap nameAlgorithms = new HashMap(); + HashMap codeAlgorithms = new HashMap(); + if (supportedProviders != null) { + // 检查是否存在重复的提供者以及算法; + for (CryptoProvider cryptoProvider : supportedProviders) { + if (providers.containsKey(cryptoProvider.getName())) { + throw new LedgerException("Duplicate crypto providers [" + cryptoProvider.getName() + "]!"); + } + CryptoAlgorithm[] algorithms = cryptoProvider.getAlgorithms(); + for (CryptoAlgorithm alg : algorithms) { + if (nameAlgorithms.containsKey(alg.name())) { + throw new LedgerException("Duplicate crypto algorithms [" + alg.toString() + "] from provider " + + cryptoProvider.getName() + "!"); + } + if (codeAlgorithms.containsKey(alg.code())) { + throw new LedgerException("Duplicate crypto algorithms [" + alg.toString() + "] from provider" + + cryptoProvider.getName() + "!"); + } + nameAlgorithms.put(alg.name(), alg); + codeAlgorithms.put(alg.code(), alg); + } + providers.put(cryptoProvider.getName(), cryptoProvider); + } + } + this.providers = providers; + this.nameAlgorithms = nameAlgorithms; + this.codeAlgorithms = codeAlgorithms; + + this.cryptoProviders = supportedProviders; + } + public void setHashAlgorithm(CryptoAlgorithm hashAlgorithm) { - this.hashAlgorithm = hashAlgorithm.code(); + setHashAlgorithm(hashAlgorithm.code()); } public void setHashAlgorithm(short hashAlgorithm) { + if (codeAlgorithms == null || !codeAlgorithms.containsKey(hashAlgorithm)) { + throw new LedgerException("The specified algorithm has no provider!"); + } this.hashAlgorithm = hashAlgorithm; } diff --git a/source/ledger/ledger-core/src/test/java/test/com/jd/blockchain/ledger/AccountSetTest.java b/source/ledger/ledger-core/src/test/java/test/com/jd/blockchain/ledger/AccountSetTest.java index 1334bdf5..5b69b118 100644 --- a/source/ledger/ledger-core/src/test/java/test/com/jd/blockchain/ledger/AccountSetTest.java +++ b/source/ledger/ledger-core/src/test/java/test/com/jd/blockchain/ledger/AccountSetTest.java @@ -6,8 +6,12 @@ import static org.junit.Assert.assertTrue; import org.junit.Test; +import com.jd.blockchain.crypto.Crypto; +import com.jd.blockchain.crypto.CryptoProvider; import com.jd.blockchain.crypto.HashDigest; import com.jd.blockchain.crypto.service.classic.ClassicAlgorithm; +import com.jd.blockchain.crypto.service.classic.ClassicCryptoService; +import com.jd.blockchain.crypto.service.sm.SMCryptoService; import com.jd.blockchain.ledger.BlockchainKeyGenerator; import com.jd.blockchain.ledger.BlockchainKeypair; import com.jd.blockchain.ledger.core.AccountSet; @@ -17,6 +21,11 @@ import com.jd.blockchain.ledger.core.impl.OpeningAccessPolicy; import com.jd.blockchain.storage.service.utils.MemoryKVStorage; public class AccountSetTest { + + + private static final String[] SUPPORTED_PROVIDERS = { ClassicCryptoService.class.getName(), + SMCryptoService.class.getName() }; + @Test public void test() { @@ -24,7 +33,12 @@ public class AccountSetTest { MemoryKVStorage storage = new MemoryKVStorage(); + CryptoProvider[] supportedProviders = new CryptoProvider[SUPPORTED_PROVIDERS.length]; + for (int i = 0; i < SUPPORTED_PROVIDERS.length; i++) { + supportedProviders[i] = Crypto.getProvider(SUPPORTED_PROVIDERS[i]); + } CryptoConfig cryptoConf = new CryptoConfig(); + cryptoConf.setSupportedProviders(supportedProviders); cryptoConf.setAutoVerifyHash(true); cryptoConf.setHashAlgorithm(ClassicAlgorithm.SHA256); diff --git a/source/ledger/ledger-core/src/test/java/test/com/jd/blockchain/ledger/BaseAccountTest.java b/source/ledger/ledger-core/src/test/java/test/com/jd/blockchain/ledger/BaseAccountTest.java index 5d11b337..23b3445a 100644 --- a/source/ledger/ledger-core/src/test/java/test/com/jd/blockchain/ledger/BaseAccountTest.java +++ b/source/ledger/ledger-core/src/test/java/test/com/jd/blockchain/ledger/BaseAccountTest.java @@ -5,7 +5,11 @@ import static org.junit.Assert.assertFalse; import org.junit.Test; +import com.jd.blockchain.crypto.Crypto; +import com.jd.blockchain.crypto.CryptoProvider; import com.jd.blockchain.crypto.service.classic.ClassicAlgorithm; +import com.jd.blockchain.crypto.service.classic.ClassicCryptoService; +import com.jd.blockchain.crypto.service.sm.SMCryptoService; import com.jd.blockchain.ledger.BlockchainKeyGenerator; import com.jd.blockchain.ledger.BlockchainKeypair; import com.jd.blockchain.ledger.core.BaseAccount; @@ -22,12 +26,21 @@ import com.jd.blockchain.utils.io.BytesUtils; */ public class BaseAccountTest { + public static final String[] SUPPORTED_PROVIDERS = { ClassicCryptoService.class.getName(), + SMCryptoService.class.getName() }; + @Test public void basicTest() { String keyPrefix = ""; MemoryKVStorage testStorage = new MemoryKVStorage(); + CryptoProvider[] supportedProviders = new CryptoProvider[SUPPORTED_PROVIDERS.length]; + for (int i = 0; i < SUPPORTED_PROVIDERS.length; i++) { + supportedProviders[i] = Crypto.getProvider(SUPPORTED_PROVIDERS[i]); + } + CryptoConfig cryptoConf = new CryptoConfig(); + cryptoConf.setSupportedProviders(supportedProviders); cryptoConf.setAutoVerifyHash(true); cryptoConf.setHashAlgorithm(ClassicAlgorithm.SHA256); diff --git a/source/ledger/ledger-core/src/test/java/test/com/jd/blockchain/ledger/LedgerAdminAccountTest.java b/source/ledger/ledger-core/src/test/java/test/com/jd/blockchain/ledger/LedgerAdminAccountTest.java index 823b3397..1293a9d8 100644 --- a/source/ledger/ledger-core/src/test/java/test/com/jd/blockchain/ledger/LedgerAdminAccountTest.java +++ b/source/ledger/ledger-core/src/test/java/test/com/jd/blockchain/ledger/LedgerAdminAccountTest.java @@ -13,8 +13,12 @@ import com.jd.blockchain.ledger.LedgerMetadata; import org.junit.Test; import com.jd.blockchain.crypto.AddressEncoding; +import com.jd.blockchain.crypto.Crypto; +import com.jd.blockchain.crypto.CryptoProvider; import com.jd.blockchain.crypto.HashDigest; import com.jd.blockchain.crypto.service.classic.ClassicAlgorithm; +import com.jd.blockchain.crypto.service.classic.ClassicCryptoService; +import com.jd.blockchain.crypto.service.sm.SMCryptoService; import com.jd.blockchain.ledger.BlockchainKeyGenerator; import com.jd.blockchain.ledger.BlockchainKeypair; import com.jd.blockchain.ledger.ParticipantNode; @@ -30,6 +34,9 @@ import com.jd.blockchain.utils.net.NetworkAddress; public class LedgerAdminAccountTest { + private static final String[] SUPPORTED_PROVIDERS = { ClassicCryptoService.class.getName(), + SMCryptoService.class.getName() }; + private Random rand = new Random(); @Test @@ -55,7 +62,13 @@ public class LedgerAdminAccountTest { initSetting.setConsensusSettings(new Bytes(csSysSettingBytes)); initSetting.setConsensusProvider("consensus-provider"); + CryptoProvider[] supportedProviders = new CryptoProvider[SUPPORTED_PROVIDERS.length]; + for (int i = 0; i < SUPPORTED_PROVIDERS.length; i++) { + supportedProviders[i] = Crypto.getProvider(SUPPORTED_PROVIDERS[i]); + } + CryptoConfig cryptoSetting = new CryptoConfig(); + cryptoSetting.setSupportedProviders(supportedProviders); cryptoSetting.setAutoVerifyHash(true); cryptoSetting.setHashAlgorithm(ClassicAlgorithm.SHA256); initSetting.setCryptoSetting(cryptoSetting); diff --git a/source/ledger/ledger-core/src/test/java/test/com/jd/blockchain/ledger/LedgerEditerTest.java b/source/ledger/ledger-core/src/test/java/test/com/jd/blockchain/ledger/LedgerEditerTest.java index 621aa6fc..3ae78c32 100644 --- a/source/ledger/ledger-core/src/test/java/test/com/jd/blockchain/ledger/LedgerEditerTest.java +++ b/source/ledger/ledger-core/src/test/java/test/com/jd/blockchain/ledger/LedgerEditerTest.java @@ -11,8 +11,11 @@ import com.jd.blockchain.binaryproto.DataContractRegistry; import com.jd.blockchain.crypto.AddressEncoding; import com.jd.blockchain.crypto.AsymmetricKeypair; import com.jd.blockchain.crypto.Crypto; +import com.jd.blockchain.crypto.CryptoProvider; import com.jd.blockchain.crypto.SignatureFunction; import com.jd.blockchain.crypto.service.classic.ClassicAlgorithm; +import com.jd.blockchain.crypto.service.classic.ClassicCryptoService; +import com.jd.blockchain.crypto.service.sm.SMCryptoService; import com.jd.blockchain.ledger.BlockchainKeypair; import com.jd.blockchain.ledger.LedgerBlock; import com.jd.blockchain.ledger.LedgerInitSetting; @@ -34,6 +37,10 @@ import com.jd.blockchain.utils.io.BytesUtils; import com.jd.blockchain.utils.net.NetworkAddress; public class LedgerEditerTest { + + private static final String[] SUPPORTED_PROVIDERS = { ClassicCryptoService.class.getName(), + SMCryptoService.class.getName() }; + static { DataContractRegistry.register(com.jd.blockchain.ledger.TransactionContent.class); @@ -109,8 +116,14 @@ public class LedgerEditerTest { private LedgerInitSetting createLedgerInitSetting() { SignatureFunction signFunc = Crypto.getSignatureFunction("ED25519"); + + CryptoProvider[] supportedProviders = new CryptoProvider[SUPPORTED_PROVIDERS.length]; + for (int i = 0; i < SUPPORTED_PROVIDERS.length; i++) { + supportedProviders[i] = Crypto.getProvider(SUPPORTED_PROVIDERS[i]); + } CryptoConfig defCryptoSetting = new CryptoConfig(); + defCryptoSetting.setSupportedProviders(supportedProviders); defCryptoSetting.setAutoVerifyHash(true); defCryptoSetting.setHashAlgorithm(ClassicAlgorithm.SHA256); diff --git a/source/ledger/ledger-core/src/test/java/test/com/jd/blockchain/ledger/LedgerInitOperationTest.java b/source/ledger/ledger-core/src/test/java/test/com/jd/blockchain/ledger/LedgerInitOperationTest.java index e9ae7693..9cee71df 100644 --- a/source/ledger/ledger-core/src/test/java/test/com/jd/blockchain/ledger/LedgerInitOperationTest.java +++ b/source/ledger/ledger-core/src/test/java/test/com/jd/blockchain/ledger/LedgerInitOperationTest.java @@ -12,7 +12,11 @@ import org.junit.Test; import com.jd.blockchain.binaryproto.BinaryProtocol; import com.jd.blockchain.binaryproto.DataContractRegistry; import com.jd.blockchain.crypto.AddressEncoding; +import com.jd.blockchain.crypto.Crypto; +import com.jd.blockchain.crypto.CryptoProvider; import com.jd.blockchain.crypto.service.classic.ClassicAlgorithm; +import com.jd.blockchain.crypto.service.classic.ClassicCryptoService; +import com.jd.blockchain.crypto.service.sm.SMCryptoService; import com.jd.blockchain.ledger.BlockchainKeyGenerator; import com.jd.blockchain.ledger.BlockchainKeypair; import com.jd.blockchain.ledger.LedgerInitOperation; @@ -27,6 +31,9 @@ import com.jd.blockchain.utils.net.NetworkAddress; public class LedgerInitOperationTest { + private static final String[] SUPPORTED_PROVIDERS = { ClassicCryptoService.class.getName(), + SMCryptoService.class.getName() }; + byte[] seed = null; byte[] csSysSettingBytes = null; LedgerInitSettingData ledgerInitSettingData = new LedgerInitSettingData(); @@ -44,7 +51,12 @@ public class LedgerInitOperationTest { csSysSettingBytes = new byte[64]; rand.nextBytes(csSysSettingBytes); + CryptoProvider[] supportedProviders = new CryptoProvider[SUPPORTED_PROVIDERS.length]; + for (int i = 0; i < SUPPORTED_PROVIDERS.length; i++) { + supportedProviders[i] = Crypto.getProvider(SUPPORTED_PROVIDERS[i]); + } CryptoConfig cryptoConfig = new CryptoConfig(); + cryptoConfig.setSupportedProviders(supportedProviders); cryptoConfig.setAutoVerifyHash(true); cryptoConfig.setHashAlgorithm(ClassicAlgorithm.SHA256); diff --git a/source/ledger/ledger-core/src/test/java/test/com/jd/blockchain/ledger/LedgerInitSettingTest.java b/source/ledger/ledger-core/src/test/java/test/com/jd/blockchain/ledger/LedgerInitSettingTest.java index 7f9a4e7c..7e2c6850 100644 --- a/source/ledger/ledger-core/src/test/java/test/com/jd/blockchain/ledger/LedgerInitSettingTest.java +++ b/source/ledger/ledger-core/src/test/java/test/com/jd/blockchain/ledger/LedgerInitSettingTest.java @@ -12,7 +12,11 @@ import org.junit.Test; import com.jd.blockchain.binaryproto.BinaryProtocol; import com.jd.blockchain.binaryproto.DataContractRegistry; import com.jd.blockchain.crypto.AddressEncoding; +import com.jd.blockchain.crypto.Crypto; +import com.jd.blockchain.crypto.CryptoProvider; import com.jd.blockchain.crypto.service.classic.ClassicAlgorithm; +import com.jd.blockchain.crypto.service.classic.ClassicCryptoService; +import com.jd.blockchain.crypto.service.sm.SMCryptoService; import com.jd.blockchain.ledger.BlockchainKeyGenerator; import com.jd.blockchain.ledger.BlockchainKeypair; import com.jd.blockchain.ledger.LedgerInitSetting; @@ -30,6 +34,9 @@ public class LedgerInitSettingTest { LedgerInitSettingData ledgerInitSettingData = new LedgerInitSettingData(); LedgerInitOpTemplate template = new LedgerInitOpTemplate(); + private static final String[] SUPPORTED_PROVIDERS = { ClassicCryptoService.class.getName(), + SMCryptoService.class.getName() }; + @Before public void initCfg() { @@ -41,7 +48,13 @@ public class LedgerInitSettingTest { csSysSettingBytes = new byte[64]; rand.nextBytes(csSysSettingBytes); + CryptoProvider[] supportedProviders = new CryptoProvider[SUPPORTED_PROVIDERS.length]; + for (int i = 0; i < SUPPORTED_PROVIDERS.length; i++) { + supportedProviders[i] = Crypto.getProvider(SUPPORTED_PROVIDERS[i]); + } + CryptoConfig cryptoConfig = new CryptoConfig(); + cryptoConfig.setSupportedProviders(supportedProviders); cryptoConfig.setAutoVerifyHash(true); cryptoConfig.setHashAlgorithm(ClassicAlgorithm.SHA256); diff --git a/source/ledger/ledger-core/src/test/java/test/com/jd/blockchain/ledger/LedgerManagerTest.java b/source/ledger/ledger-core/src/test/java/test/com/jd/blockchain/ledger/LedgerManagerTest.java index 9974d5d8..066151cd 100644 --- a/source/ledger/ledger-core/src/test/java/test/com/jd/blockchain/ledger/LedgerManagerTest.java +++ b/source/ledger/ledger-core/src/test/java/test/com/jd/blockchain/ledger/LedgerManagerTest.java @@ -13,9 +13,12 @@ import com.jd.blockchain.binaryproto.DataContractRegistry; import com.jd.blockchain.crypto.AddressEncoding; import com.jd.blockchain.crypto.AsymmetricKeypair; import com.jd.blockchain.crypto.Crypto; +import com.jd.blockchain.crypto.CryptoProvider; import com.jd.blockchain.crypto.HashDigest; import com.jd.blockchain.crypto.SignatureFunction; import com.jd.blockchain.crypto.service.classic.ClassicAlgorithm; +import com.jd.blockchain.crypto.service.classic.ClassicCryptoService; +import com.jd.blockchain.crypto.service.sm.SMCryptoService; import com.jd.blockchain.ledger.BlockBody; import com.jd.blockchain.ledger.BlockchainKeyGenerator; import com.jd.blockchain.ledger.BlockchainKeypair; @@ -55,6 +58,10 @@ public class LedgerManagerTest { DataContractRegistry.register(DataAccountRegisterOperation.class); DataContractRegistry.register(BlockBody.class); } + + + public static final String[] SUPPORTED_PROVIDERS = { ClassicCryptoService.class.getName(), + SMCryptoService.class.getName() }; private SignatureFunction signatureFunction; @@ -170,7 +177,16 @@ public class LedgerManagerTest { } private LedgerInitSetting createLedgerInitSetting() { + + CryptoProvider[] supportedProviders = new CryptoProvider[SUPPORTED_PROVIDERS.length]; + for (int i = 0; i < SUPPORTED_PROVIDERS.length; i++) { + supportedProviders[i] = Crypto.getProvider(SUPPORTED_PROVIDERS[i]); + } + CryptoConfig defCryptoSetting = new CryptoConfig(); + + defCryptoSetting.setSupportedProviders(supportedProviders); + defCryptoSetting.setAutoVerifyHash(true); defCryptoSetting.setHashAlgorithm(ClassicAlgorithm.SHA256); diff --git a/source/ledger/ledger-core/src/test/java/test/com/jd/blockchain/ledger/LedgerMetaDataTest.java b/source/ledger/ledger-core/src/test/java/test/com/jd/blockchain/ledger/LedgerMetaDataTest.java index f744780d..401c5de2 100644 --- a/source/ledger/ledger-core/src/test/java/test/com/jd/blockchain/ledger/LedgerMetaDataTest.java +++ b/source/ledger/ledger-core/src/test/java/test/com/jd/blockchain/ledger/LedgerMetaDataTest.java @@ -15,9 +15,13 @@ import org.junit.Test; import com.jd.blockchain.binaryproto.BinaryProtocol; import com.jd.blockchain.binaryproto.DataContractRegistry; import com.jd.blockchain.crypto.AddressEncoding; +import com.jd.blockchain.crypto.Crypto; +import com.jd.blockchain.crypto.CryptoProvider; import com.jd.blockchain.crypto.HashDigest; import com.jd.blockchain.crypto.PubKey; import com.jd.blockchain.crypto.service.classic.ClassicAlgorithm; +import com.jd.blockchain.crypto.service.classic.ClassicCryptoService; +import com.jd.blockchain.crypto.service.sm.SMCryptoService; import com.jd.blockchain.ledger.CryptoSetting; import com.jd.blockchain.ledger.ParticipantNode; import com.jd.blockchain.ledger.core.CryptoConfig; @@ -30,6 +34,10 @@ import com.jd.blockchain.utils.Bytes; * Created by zhangshuang3 on 2018/8/31. */ public class LedgerMetaDataTest { + + private static final String[] SUPPORTED_PROVIDERS = { ClassicCryptoService.class.getName(), + SMCryptoService.class.getName() }; + byte[] seed = null; String consensusProvider = "test-provider"; byte[] consensusSettingBytes = null; @@ -56,7 +64,13 @@ public class LedgerMetaDataTest { // ConsensusConfig consensusConfig = new ConsensusConfig(); // consensusConfig.setValue(settingValue);ClassicCryptoService.ED25519_ALGORITHM + CryptoProvider[] supportedProviders = new CryptoProvider[SUPPORTED_PROVIDERS.length]; + for (int i = 0; i < SUPPORTED_PROVIDERS.length; i++) { + supportedProviders[i] = Crypto.getProvider(SUPPORTED_PROVIDERS[i]); + } + CryptoConfig cryptoConfig = new CryptoConfig(); + cryptoConfig.setSupportedProviders(supportedProviders); cryptoConfig.setAutoVerifyHash(true); cryptoConfig.setHashAlgorithm(ClassicAlgorithm.SHA256); @@ -93,7 +107,13 @@ public class LedgerMetaDataTest { // ConsensusConfig consensusConfig = new ConsensusConfig(); // consensusConfig.setValue(settingValue); + CryptoProvider[] supportedProviders = new CryptoProvider[SUPPORTED_PROVIDERS.length]; + for (int i = 0; i < SUPPORTED_PROVIDERS.length; i++) { + supportedProviders[i] = Crypto.getProvider(SUPPORTED_PROVIDERS[i]); + } + CryptoConfig cryptoConfig = new CryptoConfig(); + cryptoConfig.setSupportedProviders(supportedProviders); cryptoConfig.setAutoVerifyHash(true); cryptoConfig.setHashAlgorithm(ClassicAlgorithm.SHA256); @@ -133,7 +153,14 @@ public class LedgerMetaDataTest { @Test public void testSerialize_CryptoSetting() { // LedgerCodes.METADATA_LEDGER_SETTING_CRYPTO + + CryptoProvider[] supportedProviders = new CryptoProvider[SUPPORTED_PROVIDERS.length]; + for (int i = 0; i < SUPPORTED_PROVIDERS.length; i++) { + supportedProviders[i] = Crypto.getProvider(SUPPORTED_PROVIDERS[i]); + } + CryptoConfig cryptoConfig = new CryptoConfig(); + cryptoConfig.setSupportedProviders(supportedProviders); cryptoConfig.setAutoVerifyHash(true); cryptoConfig.setHashAlgorithm(ClassicAlgorithm.SHA256); byte[] encodeBytes = BinaryProtocol.encode(cryptoConfig, CryptoSetting.class); diff --git a/source/ledger/ledger-core/src/test/java/test/com/jd/blockchain/ledger/LedgerTestUtils.java b/source/ledger/ledger-core/src/test/java/test/com/jd/blockchain/ledger/LedgerTestUtils.java index d6f6ae43..9bfdcc6a 100644 --- a/source/ledger/ledger-core/src/test/java/test/com/jd/blockchain/ledger/LedgerTestUtils.java +++ b/source/ledger/ledger-core/src/test/java/test/com/jd/blockchain/ledger/LedgerTestUtils.java @@ -4,10 +4,13 @@ import java.util.Random; import com.jd.blockchain.crypto.AsymmetricKeypair; import com.jd.blockchain.crypto.Crypto; +import com.jd.blockchain.crypto.CryptoProvider; import com.jd.blockchain.crypto.HashDigest; import com.jd.blockchain.crypto.PubKey; import com.jd.blockchain.crypto.SignatureFunction; import com.jd.blockchain.crypto.service.classic.ClassicAlgorithm; +import com.jd.blockchain.crypto.service.classic.ClassicCryptoService; +import com.jd.blockchain.crypto.service.sm.SMCryptoService; import com.jd.blockchain.ledger.BlockchainIdentityData; import com.jd.blockchain.ledger.CryptoSetting; import com.jd.blockchain.ledger.PreparedTransaction; @@ -22,6 +25,9 @@ public class LedgerTestUtils { // private static ThreadLocalRandom rand = ThreadLocalRandom.current(); + private static final String[] SUPPORTED_PROVIDERS = { ClassicCryptoService.class.getName(), + SMCryptoService.class.getName() }; + private static Random rand = new Random(); public static TransactionRequest createTxRequest(HashDigest ledgerHash) { @@ -76,7 +82,14 @@ public class LedgerTestUtils { } public static CryptoSetting createDefaultCryptoSetting() { + + CryptoProvider[] supportedProviders = new CryptoProvider[SUPPORTED_PROVIDERS.length]; + for (int i = 0; i < SUPPORTED_PROVIDERS.length; i++) { + supportedProviders[i] = Crypto.getProvider(SUPPORTED_PROVIDERS[i]); + } + CryptoConfig cryptoSetting = new CryptoConfig(); + cryptoSetting.setSupportedProviders(supportedProviders); cryptoSetting.setAutoVerifyHash(true); cryptoSetting.setHashAlgorithm(ClassicAlgorithm.SHA256); return cryptoSetting; diff --git a/source/ledger/ledger-core/src/test/java/test/com/jd/blockchain/ledger/MerkleDataSetTest.java b/source/ledger/ledger-core/src/test/java/test/com/jd/blockchain/ledger/MerkleDataSetTest.java index 2e966c50..fbb5eb09 100644 --- a/source/ledger/ledger-core/src/test/java/test/com/jd/blockchain/ledger/MerkleDataSetTest.java +++ b/source/ledger/ledger-core/src/test/java/test/com/jd/blockchain/ledger/MerkleDataSetTest.java @@ -14,8 +14,12 @@ import java.util.Set; import org.junit.Test; +import com.jd.blockchain.crypto.Crypto; +import com.jd.blockchain.crypto.CryptoProvider; import com.jd.blockchain.crypto.HashDigest; import com.jd.blockchain.crypto.service.classic.ClassicAlgorithm; +import com.jd.blockchain.crypto.service.classic.ClassicCryptoService; +import com.jd.blockchain.crypto.service.sm.SMCryptoService; import com.jd.blockchain.ledger.core.CryptoConfig; import com.jd.blockchain.ledger.core.MerkleDataSet; import com.jd.blockchain.ledger.core.MerkleProof; @@ -26,13 +30,23 @@ import com.jd.blockchain.utils.io.BytesUtils; public class MerkleDataSetTest { + private static final String[] SUPPORTED_PROVIDERS = { ClassicCryptoService.class.getName(), + SMCryptoService.class.getName() }; + /** * 测试存储的增长; */ @Test public void testStorageIncreasement() { + + CryptoProvider[] supportedProviders = new CryptoProvider[SUPPORTED_PROVIDERS.length]; + for (int i = 0; i < SUPPORTED_PROVIDERS.length; i++) { + supportedProviders[i] = Crypto.getProvider(SUPPORTED_PROVIDERS[i]); + } + String keyPrefix = ""; CryptoConfig cryptoConfig = new CryptoConfig(); + cryptoConfig.setSupportedProviders(supportedProviders); cryptoConfig.setHashAlgorithm(ClassicAlgorithm.SHA256); cryptoConfig.setAutoVerifyHash(true); @@ -116,7 +130,13 @@ public class MerkleDataSetTest { String keyPrefix = ""; Random rand = new Random(); + CryptoProvider[] supportedProviders = new CryptoProvider[SUPPORTED_PROVIDERS.length]; + for (int i = 0; i < SUPPORTED_PROVIDERS.length; i++) { + supportedProviders[i] = Crypto.getProvider(SUPPORTED_PROVIDERS[i]); + } + CryptoConfig cryptoConfig = new CryptoConfig(); + cryptoConfig.setSupportedProviders(supportedProviders); cryptoConfig.setHashAlgorithm(ClassicAlgorithm.SHA256); cryptoConfig.setAutoVerifyHash(true); @@ -281,7 +301,13 @@ public class MerkleDataSetTest { String keyPrefix = ""; Random rand = new Random(); + CryptoProvider[] supportedProviders = new CryptoProvider[SUPPORTED_PROVIDERS.length]; + for (int i = 0; i < SUPPORTED_PROVIDERS.length; i++) { + supportedProviders[i] = Crypto.getProvider(SUPPORTED_PROVIDERS[i]); + } + CryptoConfig cryptoConfig = new CryptoConfig(); + cryptoConfig.setSupportedProviders(supportedProviders); cryptoConfig.setHashAlgorithm(ClassicAlgorithm.SHA256); cryptoConfig.setAutoVerifyHash(true); diff --git a/source/ledger/ledger-model/src/main/java/com/jd/blockchain/ledger/CryptoProviderInfo.java b/source/ledger/ledger-model/src/main/java/com/jd/blockchain/ledger/CryptoProviderInfo.java deleted file mode 100644 index 01527459..00000000 --- a/source/ledger/ledger-model/src/main/java/com/jd/blockchain/ledger/CryptoProviderInfo.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.jd.blockchain.ledger; - -import com.jd.blockchain.crypto.CryptoAlgorithm; - -public interface CryptoProviderInfo { - - String getName(); - - CryptoAlgorithm[] getAlgorithms(); - - -} diff --git a/source/ledger/ledger-model/src/main/java/com/jd/blockchain/ledger/CryptoSetting.java b/source/ledger/ledger-model/src/main/java/com/jd/blockchain/ledger/CryptoSetting.java index cb41c645..373fd1b3 100644 --- a/source/ledger/ledger-model/src/main/java/com/jd/blockchain/ledger/CryptoSetting.java +++ b/source/ledger/ledger-model/src/main/java/com/jd/blockchain/ledger/CryptoSetting.java @@ -4,6 +4,7 @@ import com.jd.blockchain.binaryproto.DataContract; import com.jd.blockchain.binaryproto.DataField; import com.jd.blockchain.binaryproto.PrimitiveType; import com.jd.blockchain.consts.DataCodes; +import com.jd.blockchain.crypto.CryptoProvider; /** * 默克尔树算法相关的配置; @@ -14,6 +15,15 @@ import com.jd.blockchain.consts.DataCodes; @DataContract(code = DataCodes.METADATA_CRYPTO_SETTING) public interface CryptoSetting { + /** + * 系统支持的密码服务提供者; + * + * @return + */ + public CryptoProvider[] getSupportedProviders(); + + + /** * 系统中使用的 Hash 算法;
* @@ -27,7 +37,7 @@ public interface CryptoSetting { public short getHashAlgorithm(); /** - * 当有完整性证明的数据被从持久化介质中加载时,是否对其进行完整性校验(重新计算 hash 比对是否一致);
+ * 当有加载附带哈希摘要的数据时,是否重新计算哈希摘要进行完整性校验;
* * 如果为 true ,则自动进行校验,如果校验失败,会引发异常;
* @@ -37,5 +47,6 @@ public interface CryptoSetting { */ @DataField(order = 2, primitiveType = PrimitiveType.BOOLEAN) public boolean getAutoVerifyHash(); + } diff --git a/source/ledger/ledger-model/src/main/java/com/jd/blockchain/transaction/DataAccountKVSetOpTemplate.java b/source/ledger/ledger-model/src/main/java/com/jd/blockchain/transaction/DataAccountKVSetOpTemplate.java index 5a1b48ab..a9873c4c 100644 --- a/source/ledger/ledger-model/src/main/java/com/jd/blockchain/transaction/DataAccountKVSetOpTemplate.java +++ b/source/ledger/ledger-model/src/main/java/com/jd/blockchain/transaction/DataAccountKVSetOpTemplate.java @@ -49,7 +49,7 @@ public class DataAccountKVSetOpTemplate implements DataAccountKVSetOperation { public void set(String key, BytesValue value, long expVersion) { if (kvset.containsKey(key)) { - throw new IllegalArgumentException("Cann't set the same key repeatly!"); + throw new IllegalArgumentException("Cann't set the same key repeatedly!"); } KVData kvdata = new KVData(key, value, expVersion); kvset.put(key, kvdata); @@ -57,7 +57,7 @@ public class DataAccountKVSetOpTemplate implements DataAccountKVSetOperation { public void set(KVData kvData) { if (kvset.containsKey(kvData.getKey())) { - throw new IllegalArgumentException("Cann't set the same key repeatly!"); + throw new IllegalArgumentException("Cann't set the same key repeatedly!"); } kvset.put(kvData.getKey(), kvData); } diff --git a/source/test/test-integration/src/test/java/test/com/jd/blockchain/intgr/initializer/LedgerInitializeTest.java b/source/test/test-integration/src/test/java/test/com/jd/blockchain/intgr/initializer/LedgerInitializeTest.java index e96d3c18..3fee1d32 100644 --- a/source/test/test-integration/src/test/java/test/com/jd/blockchain/intgr/initializer/LedgerInitializeTest.java +++ b/source/test/test-integration/src/test/java/test/com/jd/blockchain/intgr/initializer/LedgerInitializeTest.java @@ -19,12 +19,15 @@ import com.jd.blockchain.consensus.ConsensusProviders; import com.jd.blockchain.consensus.ConsensusSettings; import com.jd.blockchain.crypto.AddressEncoding; import com.jd.blockchain.crypto.CryptoAlgorithm; +import com.jd.blockchain.crypto.CryptoProvider; import com.jd.blockchain.crypto.AsymmetricKeypair; import com.jd.blockchain.crypto.Crypto; import com.jd.blockchain.crypto.HashDigest; import com.jd.blockchain.crypto.PrivKey; import com.jd.blockchain.crypto.PubKey; import com.jd.blockchain.crypto.SignatureDigest; +import com.jd.blockchain.crypto.service.classic.ClassicCryptoService; +import com.jd.blockchain.crypto.service.sm.SMCryptoService; import com.jd.blockchain.ledger.LedgerBlock; import com.jd.blockchain.ledger.LedgerInitOperation; import com.jd.blockchain.ledger.UserRegisterOperation; @@ -60,6 +63,9 @@ public class LedgerInitializeTest { DataContractRegistry.register(UserRegisterOperation.class); } + private static final String[] SUPPORTED_PROVIDERS = { ClassicCryptoService.class.getName(), + SMCryptoService.class.getName() }; + public static final String PASSWORD = IntegrationBase.PASSWORD; public static final String[] PUB_KEYS = IntegrationBase.PUB_KEYS; @@ -254,7 +260,12 @@ public class LedgerInitializeTest { ConsensusSettings csProps, ConsensusProvider csProvider, DBConnectionConfig dbConnConfig, Prompter prompter, boolean autoVerifyHash) { + CryptoProvider[] supportedProviders = new CryptoProvider[SUPPORTED_PROVIDERS.length]; + for (int i = 0; i < SUPPORTED_PROVIDERS.length; i++) { + supportedProviders[i] = Crypto.getProvider(SUPPORTED_PROVIDERS[i]); + } CryptoConfig cryptoSetting = new CryptoConfig(); + cryptoSetting.setSupportedProviders(supportedProviders); cryptoSetting.setAutoVerifyHash(autoVerifyHash); cryptoSetting.setHashAlgorithm(Crypto.getAlgorithm("SHA256")); diff --git a/source/tools/tools-initializer/src/main/java/com/jd/blockchain/tools/initializer/web/LedgerInitializeWebController.java b/source/tools/tools-initializer/src/main/java/com/jd/blockchain/tools/initializer/web/LedgerInitializeWebController.java index 42e1d5d6..546e154b 100644 --- a/source/tools/tools-initializer/src/main/java/com/jd/blockchain/tools/initializer/web/LedgerInitializeWebController.java +++ b/source/tools/tools-initializer/src/main/java/com/jd/blockchain/tools/initializer/web/LedgerInitializeWebController.java @@ -20,12 +20,15 @@ import com.jd.blockchain.binaryproto.DataContractRegistry; import com.jd.blockchain.consensus.ConsensusProvider; import com.jd.blockchain.consensus.ConsensusSettings; import com.jd.blockchain.crypto.CryptoAlgorithm; +import com.jd.blockchain.crypto.CryptoProvider; import com.jd.blockchain.crypto.Crypto; import com.jd.blockchain.crypto.HashDigest; import com.jd.blockchain.crypto.PrivKey; import com.jd.blockchain.crypto.PubKey; import com.jd.blockchain.crypto.SignatureDigest; import com.jd.blockchain.crypto.SignatureFunction; +import com.jd.blockchain.crypto.service.classic.ClassicCryptoService; +import com.jd.blockchain.crypto.service.sm.SMCryptoService; import com.jd.blockchain.ledger.BlockchainIdentity; import com.jd.blockchain.ledger.BlockchainIdentityData; import com.jd.blockchain.ledger.CryptoSetting; @@ -75,6 +78,10 @@ public class LedgerInitializeWebController implements LedgerInitProcess, LedgerI static { DataContractRegistry.register(TransactionRequest.class); } + + private static final String[] SUPPORTED_PROVIDERS = { ClassicCryptoService.class.getName(), + SMCryptoService.class.getName() }; + private static final String DEFAULT_SIGN_ALGORITHM = "ED25519"; @@ -299,7 +306,12 @@ public class LedgerInitializeWebController implements LedgerInitProcess, LedgerI } public CryptoSetting createDefaultCryptoSetting() { + CryptoProvider[] supportedProviders = new CryptoProvider[SUPPORTED_PROVIDERS.length]; + for (int i = 0; i < SUPPORTED_PROVIDERS.length; i++) { + supportedProviders[i] = Crypto.getProvider(SUPPORTED_PROVIDERS[i]); + } CryptoConfig defCryptoSetting = new CryptoConfig(); + defCryptoSetting.setSupportedProviders(supportedProviders); defCryptoSetting.setAutoVerifyHash(true); defCryptoSetting.setHashAlgorithm(Crypto.getAlgorithm("SHA256"));