Browse Source

Added crypto-provider attribute to the settings of ledger;

tags/1.0.0
huanghaiquan 5 years ago
parent
commit
dd021222d7
23 changed files with 370 additions and 49 deletions
  1. +2
    -0
      source/base/src/main/java/com/jd/blockchain/consts/DataCodes.java
  2. +25
    -6
      source/base/src/main/java/com/jd/blockchain/provider/ProviderManager.java
  3. +32
    -0
      source/crypto/crypto-framework/src/main/java/com/jd/blockchain/crypto/Crypto.java
  4. +8
    -2
      source/crypto/crypto-framework/src/main/java/com/jd/blockchain/crypto/CryptoAlgorithm.java
  5. +13
    -25
      source/crypto/crypto-framework/src/main/java/com/jd/blockchain/crypto/CryptoAlgorithmDefinition.java
  6. +17
    -0
      source/crypto/crypto-framework/src/main/java/com/jd/blockchain/crypto/CryptoProvider.java
  7. +24
    -0
      source/crypto/crypto-framework/src/main/java/com/jd/blockchain/crypto/CryptoProviderInfo.java
  8. +52
    -1
      source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/CryptoConfig.java
  9. +14
    -0
      source/ledger/ledger-core/src/test/java/test/com/jd/blockchain/ledger/AccountSetTest.java
  10. +13
    -0
      source/ledger/ledger-core/src/test/java/test/com/jd/blockchain/ledger/BaseAccountTest.java
  11. +13
    -0
      source/ledger/ledger-core/src/test/java/test/com/jd/blockchain/ledger/LedgerAdminAccountTest.java
  12. +13
    -0
      source/ledger/ledger-core/src/test/java/test/com/jd/blockchain/ledger/LedgerEditerTest.java
  13. +12
    -0
      source/ledger/ledger-core/src/test/java/test/com/jd/blockchain/ledger/LedgerInitOperationTest.java
  14. +13
    -0
      source/ledger/ledger-core/src/test/java/test/com/jd/blockchain/ledger/LedgerInitSettingTest.java
  15. +16
    -0
      source/ledger/ledger-core/src/test/java/test/com/jd/blockchain/ledger/LedgerManagerTest.java
  16. +27
    -0
      source/ledger/ledger-core/src/test/java/test/com/jd/blockchain/ledger/LedgerMetaDataTest.java
  17. +13
    -0
      source/ledger/ledger-core/src/test/java/test/com/jd/blockchain/ledger/LedgerTestUtils.java
  18. +26
    -0
      source/ledger/ledger-core/src/test/java/test/com/jd/blockchain/ledger/MerkleDataSetTest.java
  19. +0
    -12
      source/ledger/ledger-model/src/main/java/com/jd/blockchain/ledger/CryptoProviderInfo.java
  20. +12
    -1
      source/ledger/ledger-model/src/main/java/com/jd/blockchain/ledger/CryptoSetting.java
  21. +2
    -2
      source/ledger/ledger-model/src/main/java/com/jd/blockchain/transaction/DataAccountKVSetOpTemplate.java
  22. +11
    -0
      source/test/test-integration/src/test/java/test/com/jd/blockchain/intgr/initializer/LedgerInitializeTest.java
  23. +12
    -0
      source/tools/tools-initializer/src/main/java/com/jd/blockchain/tools/initializer/web/LedgerInitializeWebController.java

+ 2
- 0
source/base/src/main/java/com/jd/blockchain/consts/DataCodes.java View File

@@ -68,6 +68,8 @@ public interface DataCodes {
// public static final int METADATA_PARTICIPANT_INFO = 0x640; // public static final int METADATA_PARTICIPANT_INFO = 0x640;


public static final int METADATA_CRYPTO_SETTING = 0x642; public static final int METADATA_CRYPTO_SETTING = 0x642;
public static final int METADATA_CRYPTO_SETTING_PROVIDER = 0x643;


// public static final int ACCOUNT = 0x700; // public static final int ACCOUNT = 0x700;




+ 25
- 6
source/base/src/main/java/com/jd/blockchain/provider/ProviderManager.java View File

@@ -4,6 +4,7 @@ import java.security.AccessControlContext;
import java.security.AccessController; import java.security.AccessController;
import java.security.PrivilegedAction; import java.security.PrivilegedAction;
import java.util.Collection; import java.util.Collection;
import java.util.Collections;
import java.util.HashMap; import java.util.HashMap;
import java.util.LinkedHashMap; import java.util.LinkedHashMap;
import java.util.Map; import java.util.Map;
@@ -48,32 +49,45 @@ public final class ProviderManager {
* @return * @return
*/ */
public <S> S getService(Class<S> serviceClazz, String providerName) { public <S> S getService(Class<S> serviceClazz, String providerName) {
NamedProviders<S> providers = getServiceProvider(serviceClazz);
NamedProviders<S> providers = getNamedProviders(serviceClazz);
return providers.getService(providerName); return providers.getService(providerName);
} }
public <S> Provider<S> getProvider(Class<S> serviceClazz, String providerName) {
@SuppressWarnings("unchecked")
NamedProviders<S> providers = (NamedProviders<S>) serviceProviders.get(serviceClazz);
if (providers == null) {
return null;
}
return providers.getProvider(providerName);
}


public <S> Collection<Provider<S>> getAllProviders(Class<S> serviceClazz) { public <S> Collection<Provider<S>> getAllProviders(Class<S> serviceClazz) {
NamedProviders<S> providers = getServiceProvider(serviceClazz);
@SuppressWarnings("unchecked")
NamedProviders<S> providers = (NamedProviders<S>) serviceProviders.get(serviceClazz);
if (providers == null) {
return Collections.emptyList();
}
return providers.getProviders(); return providers.getProviders();
} }


public <S> S installProvider(Class<S> serviceClazz, String providerFullName) { public <S> S installProvider(Class<S> serviceClazz, String providerFullName) {
NamedProviders<S> providers = getServiceProvider(serviceClazz);
NamedProviders<S> providers = getNamedProviders(serviceClazz);
return providers.install(providerFullName); return providers.install(providerFullName);
} }


public <S> S installProvider(Class<S> service, String providerFullName, ClassLoader classLoader) { public <S> S installProvider(Class<S> service, String providerFullName, ClassLoader classLoader) {
NamedProviders<S> providers = getServiceProvider(service);
NamedProviders<S> providers = getNamedProviders(service);
return providers.install(providerFullName, classLoader); return providers.install(providerFullName, classLoader);
} }


public <S> void installAllProviders(Class<S> serviceClazz, ClassLoader classLoader) { public <S> void installAllProviders(Class<S> serviceClazz, ClassLoader classLoader) {
NamedProviders<S> providers = getServiceProvider(serviceClazz);
NamedProviders<S> providers = getNamedProviders(serviceClazz);
providers.installAll(classLoader); providers.installAll(classLoader);
} }


@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
private <S> NamedProviders<S> getServiceProvider(Class<S> serviceClazz) {
private <S> NamedProviders<S> getNamedProviders(Class<S> serviceClazz) {
NamedProviders<S> providers = (NamedProviders<S>) serviceProviders.get(serviceClazz); NamedProviders<S> providers = (NamedProviders<S>) serviceProviders.get(serviceClazz);
if (providers == null) { if (providers == null) {
synchronized (mutex) { synchronized (mutex) {
@@ -189,6 +203,11 @@ public final class ProviderManager {
public Collection<Provider<S>> getProviders() { public Collection<Provider<S>> getProviders() {
return namedProviders.values(); return namedProviders.values();
} }

public Provider<S> getProvider(String providerFullName) {
return namedProviders.get(providerFullName);
}


public S getService(String name) { public S getService(String name) {
String fullName = shortNames.get(name); String fullName = shortNames.get(name);


+ 32
- 0
source/crypto/crypto-framework/src/main/java/com/jd/blockchain/crypto/Crypto.java View File

@@ -106,6 +106,38 @@ public final class Crypto {
private Crypto() { private Crypto() {
} }


public static CryptoProvider[] getProviders() {
Collection<Provider<CryptoService>> providers = pm.getAllProviders(CryptoService.class);
CryptoProvider[] infos = new CryptoProvider[providers.size()];

int i = 0;
for (Provider<CryptoService> pd : providers) {
CryptoProviderInfo info = getProviderInfo(pd);
infos[i] = info;
}

return infos;
}

private static CryptoProviderInfo getProviderInfo(Provider<CryptoService> pd) {
Collection<CryptoFunction> 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<CryptoService> pd = pm.getProvider(CryptoService.class, providerFullName);
if (pd == null) {
return null;
}
return getProviderInfo(pd);
}

public static Collection<CryptoAlgorithm> getAllAlgorithms() { public static Collection<CryptoAlgorithm> getAllAlgorithms() {
return algorithms.values(); return algorithms.values();
} }


+ 8
- 2
source/crypto/crypto-framework/src/main/java/com/jd/blockchain/crypto/CryptoAlgorithm.java View File

@@ -9,7 +9,7 @@ import com.jd.blockchain.binaryproto.PrimitiveType;
import com.jd.blockchain.consts.DataCodes; import com.jd.blockchain.consts.DataCodes;
import com.jd.blockchain.utils.io.BytesUtils; import com.jd.blockchain.utils.io.BytesUtils;


//@DataContract(code = DataCodes.CRYPTO_ALGORITHM)
@DataContract(code = DataCodes.CRYPTO_ALGORITHM)
public interface CryptoAlgorithm { public interface CryptoAlgorithm {


/** /**
@@ -63,7 +63,7 @@ public interface CryptoAlgorithm {
* {@link #EXT_ALGORITHM}) 5 种); 接下来4位标识密钥类型(包括:{@link #SYMMETRIC_KEY}, * {@link #EXT_ALGORITHM}) 5 种); 接下来4位标识密钥类型(包括:{@link #SYMMETRIC_KEY},
* {@link #ASYMMETRIC_KEY}); 最后8位是算法唯一ID; * {@link #ASYMMETRIC_KEY}); 最后8位是算法唯一ID;
*/ */
// @DataField(primitiveType = PrimitiveType.INT16, order = 0)
@DataField(order = 0, primitiveType = PrimitiveType.INT16)
short code(); short code();


/** /**
@@ -75,7 +75,13 @@ public interface CryptoAlgorithm {
* *
* @return * @return
*/ */
@DataField(order = 1, primitiveType = PrimitiveType.TEXT)
String name(); String name();

public static String getString(CryptoAlgorithm algorithm) {
return String.format("%s[%s]", algorithm.name(), (algorithm.code() & 0xFFFF));
}


/** /**
* *


+ 13
- 25
source/crypto/crypto-framework/src/main/java/com/jd/blockchain/crypto/CryptoAlgorithmDefinition.java View File

@@ -23,16 +23,14 @@ public final class CryptoAlgorithmDefinition implements CryptoAlgorithm {


@Override @Override
public String toString() { public String toString() {
return name + "[" + (code & 0xFFFF) + "]";
return CryptoAlgorithm.getString(this);
} }


/** /**
* 声明一项哈希算法; * 声明一项哈希算法;
* *
* @param name
* 算法名称;
* @param uid
* 算法ID;需要在同类算法中保持唯一性;
* @param name 算法名称;
* @param uid 算法ID;需要在同类算法中保持唯一性;
* @return * @return
*/ */
public static CryptoAlgorithm defineHash(String name, byte uid) { 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 * @return
*/ */
public static CryptoAlgorithm defineSignature(String name, boolean encryptable, byte uid) { 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 * @return
*/ */
public static CryptoAlgorithm defineAsymmetricEncryption(String name, byte uid) { 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 * @return
*/ */
public static CryptoAlgorithm defineSymmetricEncryption(String name, byte uid) { 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 * @return
*/ */
public static CryptoAlgorithm defineRandom(String name, byte uid) { 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 * @return
*/ */
public static CryptoAlgorithm definExt(String name, byte uid) { public static CryptoAlgorithm definExt(String name, byte uid) {


+ 17
- 0
source/crypto/crypto-framework/src/main/java/com/jd/blockchain/crypto/CryptoProvider.java View File

@@ -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();

}

+ 24
- 0
source/crypto/crypto-framework/src/main/java/com/jd/blockchain/crypto/CryptoProviderInfo.java View File

@@ -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();
}

}

+ 52
- 1
source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/CryptoConfig.java View File

@@ -1,13 +1,23 @@
package com.jd.blockchain.ledger.core; package com.jd.blockchain.ledger.core;


import java.util.HashMap;

import com.jd.blockchain.crypto.CryptoAlgorithm; import com.jd.blockchain.crypto.CryptoAlgorithm;
import com.jd.blockchain.crypto.CryptoProvider;
import com.jd.blockchain.ledger.CryptoSetting; import com.jd.blockchain.ledger.CryptoSetting;


public class CryptoConfig implements CryptoSetting { public class CryptoConfig implements CryptoSetting {


private CryptoProvider[] cryptoProviders;

private short hashAlgorithm; private short hashAlgorithm;


private boolean autoVerifyHash; private boolean autoVerifyHash;
HashMap<String, CryptoProvider> providers;
HashMap<String, CryptoAlgorithm> nameAlgorithms;
HashMap<Short, CryptoAlgorithm> codeAlgorithms;



public CryptoConfig() { public CryptoConfig() {
} }
@@ -17,6 +27,11 @@ public class CryptoConfig implements CryptoSetting {
this.autoVerifyHash = setting.getAutoVerifyHash(); this.autoVerifyHash = setting.getAutoVerifyHash();
} }


@Override
public CryptoProvider[] getSupportedProviders() {
return cryptoProviders == null ? null : cryptoProviders.clone();
}

@Override @Override
public short getHashAlgorithm() { public short getHashAlgorithm() {
return hashAlgorithm; return hashAlgorithm;
@@ -27,11 +42,47 @@ public class CryptoConfig implements CryptoSetting {
return autoVerifyHash; return autoVerifyHash;
} }


public void setSupportedProviders(CryptoProvider[] supportedProviders) {
HashMap<String, CryptoProvider> providers = new HashMap<String, CryptoProvider>();
HashMap<String, CryptoAlgorithm> nameAlgorithms = new HashMap<String, CryptoAlgorithm>();
HashMap<Short, CryptoAlgorithm> codeAlgorithms = new HashMap<Short, CryptoAlgorithm>();
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) { public void setHashAlgorithm(CryptoAlgorithm hashAlgorithm) {
this.hashAlgorithm = hashAlgorithm.code();
setHashAlgorithm(hashAlgorithm.code());
} }


public void setHashAlgorithm(short hashAlgorithm) { public void setHashAlgorithm(short hashAlgorithm) {
if (codeAlgorithms == null || !codeAlgorithms.containsKey(hashAlgorithm)) {
throw new LedgerException("The specified algorithm has no provider!");
}
this.hashAlgorithm = hashAlgorithm; this.hashAlgorithm = hashAlgorithm;
} }




+ 14
- 0
source/ledger/ledger-core/src/test/java/test/com/jd/blockchain/ledger/AccountSetTest.java View File

@@ -6,8 +6,12 @@ import static org.junit.Assert.assertTrue;


import org.junit.Test; 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.HashDigest;
import com.jd.blockchain.crypto.service.classic.ClassicAlgorithm; 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.BlockchainKeyGenerator;
import com.jd.blockchain.ledger.BlockchainKeypair; import com.jd.blockchain.ledger.BlockchainKeypair;
import com.jd.blockchain.ledger.core.AccountSet; 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; import com.jd.blockchain.storage.service.utils.MemoryKVStorage;


public class AccountSetTest { public class AccountSetTest {

private static final String[] SUPPORTED_PROVIDERS = { ClassicCryptoService.class.getName(),
SMCryptoService.class.getName() };



@Test @Test
public void test() { public void test() {
@@ -24,7 +33,12 @@ public class AccountSetTest {


MemoryKVStorage storage = new MemoryKVStorage(); 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(); CryptoConfig cryptoConf = new CryptoConfig();
cryptoConf.setSupportedProviders(supportedProviders);
cryptoConf.setAutoVerifyHash(true); cryptoConf.setAutoVerifyHash(true);
cryptoConf.setHashAlgorithm(ClassicAlgorithm.SHA256); cryptoConf.setHashAlgorithm(ClassicAlgorithm.SHA256);




+ 13
- 0
source/ledger/ledger-core/src/test/java/test/com/jd/blockchain/ledger/BaseAccountTest.java View File

@@ -5,7 +5,11 @@ import static org.junit.Assert.assertFalse;


import org.junit.Test; 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.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.BlockchainKeyGenerator;
import com.jd.blockchain.ledger.BlockchainKeypair; import com.jd.blockchain.ledger.BlockchainKeypair;
import com.jd.blockchain.ledger.core.BaseAccount; import com.jd.blockchain.ledger.core.BaseAccount;
@@ -22,12 +26,21 @@ import com.jd.blockchain.utils.io.BytesUtils;
*/ */
public class BaseAccountTest { public class BaseAccountTest {


public static final String[] SUPPORTED_PROVIDERS = { ClassicCryptoService.class.getName(),
SMCryptoService.class.getName() };

@Test @Test
public void basicTest() { public void basicTest() {
String keyPrefix = ""; String keyPrefix = "";
MemoryKVStorage testStorage = new MemoryKVStorage(); 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(); CryptoConfig cryptoConf = new CryptoConfig();
cryptoConf.setSupportedProviders(supportedProviders);
cryptoConf.setAutoVerifyHash(true); cryptoConf.setAutoVerifyHash(true);
cryptoConf.setHashAlgorithm(ClassicAlgorithm.SHA256); cryptoConf.setHashAlgorithm(ClassicAlgorithm.SHA256);




+ 13
- 0
source/ledger/ledger-core/src/test/java/test/com/jd/blockchain/ledger/LedgerAdminAccountTest.java View File

@@ -13,8 +13,12 @@ import com.jd.blockchain.ledger.LedgerMetadata;
import org.junit.Test; import org.junit.Test;


import com.jd.blockchain.crypto.AddressEncoding; 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.HashDigest;
import com.jd.blockchain.crypto.service.classic.ClassicAlgorithm; 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.BlockchainKeyGenerator;
import com.jd.blockchain.ledger.BlockchainKeypair; import com.jd.blockchain.ledger.BlockchainKeypair;
import com.jd.blockchain.ledger.ParticipantNode; import com.jd.blockchain.ledger.ParticipantNode;
@@ -30,6 +34,9 @@ import com.jd.blockchain.utils.net.NetworkAddress;


public class LedgerAdminAccountTest { public class LedgerAdminAccountTest {


private static final String[] SUPPORTED_PROVIDERS = { ClassicCryptoService.class.getName(),
SMCryptoService.class.getName() };

private Random rand = new Random(); private Random rand = new Random();


@Test @Test
@@ -55,7 +62,13 @@ public class LedgerAdminAccountTest {
initSetting.setConsensusSettings(new Bytes(csSysSettingBytes)); initSetting.setConsensusSettings(new Bytes(csSysSettingBytes));
initSetting.setConsensusProvider("consensus-provider"); 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(); CryptoConfig cryptoSetting = new CryptoConfig();
cryptoSetting.setSupportedProviders(supportedProviders);
cryptoSetting.setAutoVerifyHash(true); cryptoSetting.setAutoVerifyHash(true);
cryptoSetting.setHashAlgorithm(ClassicAlgorithm.SHA256); cryptoSetting.setHashAlgorithm(ClassicAlgorithm.SHA256);
initSetting.setCryptoSetting(cryptoSetting); initSetting.setCryptoSetting(cryptoSetting);


+ 13
- 0
source/ledger/ledger-core/src/test/java/test/com/jd/blockchain/ledger/LedgerEditerTest.java View File

@@ -11,8 +11,11 @@ import com.jd.blockchain.binaryproto.DataContractRegistry;
import com.jd.blockchain.crypto.AddressEncoding; import com.jd.blockchain.crypto.AddressEncoding;
import com.jd.blockchain.crypto.AsymmetricKeypair; import com.jd.blockchain.crypto.AsymmetricKeypair;
import com.jd.blockchain.crypto.Crypto; import com.jd.blockchain.crypto.Crypto;
import com.jd.blockchain.crypto.CryptoProvider;
import com.jd.blockchain.crypto.SignatureFunction; import com.jd.blockchain.crypto.SignatureFunction;
import com.jd.blockchain.crypto.service.classic.ClassicAlgorithm; 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.BlockchainKeypair;
import com.jd.blockchain.ledger.LedgerBlock; import com.jd.blockchain.ledger.LedgerBlock;
import com.jd.blockchain.ledger.LedgerInitSetting; import com.jd.blockchain.ledger.LedgerInitSetting;
@@ -34,6 +37,10 @@ import com.jd.blockchain.utils.io.BytesUtils;
import com.jd.blockchain.utils.net.NetworkAddress; import com.jd.blockchain.utils.net.NetworkAddress;


public class LedgerEditerTest { public class LedgerEditerTest {
private static final String[] SUPPORTED_PROVIDERS = { ClassicCryptoService.class.getName(),
SMCryptoService.class.getName() };



static { static {
DataContractRegistry.register(com.jd.blockchain.ledger.TransactionContent.class); DataContractRegistry.register(com.jd.blockchain.ledger.TransactionContent.class);
@@ -109,8 +116,14 @@ public class LedgerEditerTest {


private LedgerInitSetting createLedgerInitSetting() { private LedgerInitSetting createLedgerInitSetting() {
SignatureFunction signFunc = Crypto.getSignatureFunction("ED25519"); 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(); CryptoConfig defCryptoSetting = new CryptoConfig();
defCryptoSetting.setSupportedProviders(supportedProviders);
defCryptoSetting.setAutoVerifyHash(true); defCryptoSetting.setAutoVerifyHash(true);
defCryptoSetting.setHashAlgorithm(ClassicAlgorithm.SHA256); defCryptoSetting.setHashAlgorithm(ClassicAlgorithm.SHA256);




+ 12
- 0
source/ledger/ledger-core/src/test/java/test/com/jd/blockchain/ledger/LedgerInitOperationTest.java View File

@@ -12,7 +12,11 @@ import org.junit.Test;
import com.jd.blockchain.binaryproto.BinaryProtocol; import com.jd.blockchain.binaryproto.BinaryProtocol;
import com.jd.blockchain.binaryproto.DataContractRegistry; import com.jd.blockchain.binaryproto.DataContractRegistry;
import com.jd.blockchain.crypto.AddressEncoding; 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.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.BlockchainKeyGenerator;
import com.jd.blockchain.ledger.BlockchainKeypair; import com.jd.blockchain.ledger.BlockchainKeypair;
import com.jd.blockchain.ledger.LedgerInitOperation; import com.jd.blockchain.ledger.LedgerInitOperation;
@@ -27,6 +31,9 @@ import com.jd.blockchain.utils.net.NetworkAddress;


public class LedgerInitOperationTest { public class LedgerInitOperationTest {


private static final String[] SUPPORTED_PROVIDERS = { ClassicCryptoService.class.getName(),
SMCryptoService.class.getName() };

byte[] seed = null; byte[] seed = null;
byte[] csSysSettingBytes = null; byte[] csSysSettingBytes = null;
LedgerInitSettingData ledgerInitSettingData = new LedgerInitSettingData(); LedgerInitSettingData ledgerInitSettingData = new LedgerInitSettingData();
@@ -44,7 +51,12 @@ public class LedgerInitOperationTest {
csSysSettingBytes = new byte[64]; csSysSettingBytes = new byte[64];
rand.nextBytes(csSysSettingBytes); 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 cryptoConfig = new CryptoConfig();
cryptoConfig.setSupportedProviders(supportedProviders);
cryptoConfig.setAutoVerifyHash(true); cryptoConfig.setAutoVerifyHash(true);
cryptoConfig.setHashAlgorithm(ClassicAlgorithm.SHA256); cryptoConfig.setHashAlgorithm(ClassicAlgorithm.SHA256);




+ 13
- 0
source/ledger/ledger-core/src/test/java/test/com/jd/blockchain/ledger/LedgerInitSettingTest.java View File

@@ -12,7 +12,11 @@ import org.junit.Test;
import com.jd.blockchain.binaryproto.BinaryProtocol; import com.jd.blockchain.binaryproto.BinaryProtocol;
import com.jd.blockchain.binaryproto.DataContractRegistry; import com.jd.blockchain.binaryproto.DataContractRegistry;
import com.jd.blockchain.crypto.AddressEncoding; 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.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.BlockchainKeyGenerator;
import com.jd.blockchain.ledger.BlockchainKeypair; import com.jd.blockchain.ledger.BlockchainKeypair;
import com.jd.blockchain.ledger.LedgerInitSetting; import com.jd.blockchain.ledger.LedgerInitSetting;
@@ -30,6 +34,9 @@ public class LedgerInitSettingTest {
LedgerInitSettingData ledgerInitSettingData = new LedgerInitSettingData(); LedgerInitSettingData ledgerInitSettingData = new LedgerInitSettingData();
LedgerInitOpTemplate template = new LedgerInitOpTemplate(); LedgerInitOpTemplate template = new LedgerInitOpTemplate();


private static final String[] SUPPORTED_PROVIDERS = { ClassicCryptoService.class.getName(),
SMCryptoService.class.getName() };

@Before @Before
public void initCfg() { public void initCfg() {


@@ -41,7 +48,13 @@ public class LedgerInitSettingTest {
csSysSettingBytes = new byte[64]; csSysSettingBytes = new byte[64];
rand.nextBytes(csSysSettingBytes); 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 cryptoConfig = new CryptoConfig();
cryptoConfig.setSupportedProviders(supportedProviders);
cryptoConfig.setAutoVerifyHash(true); cryptoConfig.setAutoVerifyHash(true);
cryptoConfig.setHashAlgorithm(ClassicAlgorithm.SHA256); cryptoConfig.setHashAlgorithm(ClassicAlgorithm.SHA256);




+ 16
- 0
source/ledger/ledger-core/src/test/java/test/com/jd/blockchain/ledger/LedgerManagerTest.java View File

@@ -13,9 +13,12 @@ import com.jd.blockchain.binaryproto.DataContractRegistry;
import com.jd.blockchain.crypto.AddressEncoding; import com.jd.blockchain.crypto.AddressEncoding;
import com.jd.blockchain.crypto.AsymmetricKeypair; import com.jd.blockchain.crypto.AsymmetricKeypair;
import com.jd.blockchain.crypto.Crypto; import com.jd.blockchain.crypto.Crypto;
import com.jd.blockchain.crypto.CryptoProvider;
import com.jd.blockchain.crypto.HashDigest; import com.jd.blockchain.crypto.HashDigest;
import com.jd.blockchain.crypto.SignatureFunction; import com.jd.blockchain.crypto.SignatureFunction;
import com.jd.blockchain.crypto.service.classic.ClassicAlgorithm; 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.BlockBody;
import com.jd.blockchain.ledger.BlockchainKeyGenerator; import com.jd.blockchain.ledger.BlockchainKeyGenerator;
import com.jd.blockchain.ledger.BlockchainKeypair; import com.jd.blockchain.ledger.BlockchainKeypair;
@@ -55,6 +58,10 @@ public class LedgerManagerTest {
DataContractRegistry.register(DataAccountRegisterOperation.class); DataContractRegistry.register(DataAccountRegisterOperation.class);
DataContractRegistry.register(BlockBody.class); DataContractRegistry.register(BlockBody.class);
} }

public static final String[] SUPPORTED_PROVIDERS = { ClassicCryptoService.class.getName(),
SMCryptoService.class.getName() };


private SignatureFunction signatureFunction; private SignatureFunction signatureFunction;


@@ -170,7 +177,16 @@ public class LedgerManagerTest {
} }


private LedgerInitSetting createLedgerInitSetting() { 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(); CryptoConfig defCryptoSetting = new CryptoConfig();
defCryptoSetting.setSupportedProviders(supportedProviders);
defCryptoSetting.setAutoVerifyHash(true); defCryptoSetting.setAutoVerifyHash(true);
defCryptoSetting.setHashAlgorithm(ClassicAlgorithm.SHA256); defCryptoSetting.setHashAlgorithm(ClassicAlgorithm.SHA256);




+ 27
- 0
source/ledger/ledger-core/src/test/java/test/com/jd/blockchain/ledger/LedgerMetaDataTest.java View File

@@ -15,9 +15,13 @@ import org.junit.Test;
import com.jd.blockchain.binaryproto.BinaryProtocol; import com.jd.blockchain.binaryproto.BinaryProtocol;
import com.jd.blockchain.binaryproto.DataContractRegistry; import com.jd.blockchain.binaryproto.DataContractRegistry;
import com.jd.blockchain.crypto.AddressEncoding; 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.HashDigest;
import com.jd.blockchain.crypto.PubKey; import com.jd.blockchain.crypto.PubKey;
import com.jd.blockchain.crypto.service.classic.ClassicAlgorithm; 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.CryptoSetting;
import com.jd.blockchain.ledger.ParticipantNode; import com.jd.blockchain.ledger.ParticipantNode;
import com.jd.blockchain.ledger.core.CryptoConfig; import com.jd.blockchain.ledger.core.CryptoConfig;
@@ -30,6 +34,10 @@ import com.jd.blockchain.utils.Bytes;
* Created by zhangshuang3 on 2018/8/31. * Created by zhangshuang3 on 2018/8/31.
*/ */
public class LedgerMetaDataTest { public class LedgerMetaDataTest {

private static final String[] SUPPORTED_PROVIDERS = { ClassicCryptoService.class.getName(),
SMCryptoService.class.getName() };

byte[] seed = null; byte[] seed = null;
String consensusProvider = "test-provider"; String consensusProvider = "test-provider";
byte[] consensusSettingBytes = null; byte[] consensusSettingBytes = null;
@@ -56,7 +64,13 @@ public class LedgerMetaDataTest {
// ConsensusConfig consensusConfig = new ConsensusConfig(); // ConsensusConfig consensusConfig = new ConsensusConfig();
// consensusConfig.setValue(settingValue);ClassicCryptoService.ED25519_ALGORITHM // 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 cryptoConfig = new CryptoConfig();
cryptoConfig.setSupportedProviders(supportedProviders);
cryptoConfig.setAutoVerifyHash(true); cryptoConfig.setAutoVerifyHash(true);
cryptoConfig.setHashAlgorithm(ClassicAlgorithm.SHA256); cryptoConfig.setHashAlgorithm(ClassicAlgorithm.SHA256);


@@ -93,7 +107,13 @@ public class LedgerMetaDataTest {
// ConsensusConfig consensusConfig = new ConsensusConfig(); // ConsensusConfig consensusConfig = new ConsensusConfig();
// consensusConfig.setValue(settingValue); // 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 cryptoConfig = new CryptoConfig();
cryptoConfig.setSupportedProviders(supportedProviders);
cryptoConfig.setAutoVerifyHash(true); cryptoConfig.setAutoVerifyHash(true);
cryptoConfig.setHashAlgorithm(ClassicAlgorithm.SHA256); cryptoConfig.setHashAlgorithm(ClassicAlgorithm.SHA256);


@@ -133,7 +153,14 @@ public class LedgerMetaDataTest {
@Test @Test
public void testSerialize_CryptoSetting() { public void testSerialize_CryptoSetting() {
// LedgerCodes.METADATA_LEDGER_SETTING_CRYPTO // 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 cryptoConfig = new CryptoConfig();
cryptoConfig.setSupportedProviders(supportedProviders);
cryptoConfig.setAutoVerifyHash(true); cryptoConfig.setAutoVerifyHash(true);
cryptoConfig.setHashAlgorithm(ClassicAlgorithm.SHA256); cryptoConfig.setHashAlgorithm(ClassicAlgorithm.SHA256);
byte[] encodeBytes = BinaryProtocol.encode(cryptoConfig, CryptoSetting.class); byte[] encodeBytes = BinaryProtocol.encode(cryptoConfig, CryptoSetting.class);


+ 13
- 0
source/ledger/ledger-core/src/test/java/test/com/jd/blockchain/ledger/LedgerTestUtils.java View File

@@ -4,10 +4,13 @@ import java.util.Random;


import com.jd.blockchain.crypto.AsymmetricKeypair; import com.jd.blockchain.crypto.AsymmetricKeypair;
import com.jd.blockchain.crypto.Crypto; import com.jd.blockchain.crypto.Crypto;
import com.jd.blockchain.crypto.CryptoProvider;
import com.jd.blockchain.crypto.HashDigest; import com.jd.blockchain.crypto.HashDigest;
import com.jd.blockchain.crypto.PubKey; import com.jd.blockchain.crypto.PubKey;
import com.jd.blockchain.crypto.SignatureFunction; import com.jd.blockchain.crypto.SignatureFunction;
import com.jd.blockchain.crypto.service.classic.ClassicAlgorithm; 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.BlockchainIdentityData;
import com.jd.blockchain.ledger.CryptoSetting; import com.jd.blockchain.ledger.CryptoSetting;
import com.jd.blockchain.ledger.PreparedTransaction; import com.jd.blockchain.ledger.PreparedTransaction;
@@ -22,6 +25,9 @@ public class LedgerTestUtils {


// private static ThreadLocalRandom rand = ThreadLocalRandom.current(); // private static ThreadLocalRandom rand = ThreadLocalRandom.current();


private static final String[] SUPPORTED_PROVIDERS = { ClassicCryptoService.class.getName(),
SMCryptoService.class.getName() };

private static Random rand = new Random(); private static Random rand = new Random();


public static TransactionRequest createTxRequest(HashDigest ledgerHash) { public static TransactionRequest createTxRequest(HashDigest ledgerHash) {
@@ -76,7 +82,14 @@ public class LedgerTestUtils {
} }


public static CryptoSetting createDefaultCryptoSetting() { 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(); CryptoConfig cryptoSetting = new CryptoConfig();
cryptoSetting.setSupportedProviders(supportedProviders);
cryptoSetting.setAutoVerifyHash(true); cryptoSetting.setAutoVerifyHash(true);
cryptoSetting.setHashAlgorithm(ClassicAlgorithm.SHA256); cryptoSetting.setHashAlgorithm(ClassicAlgorithm.SHA256);
return cryptoSetting; return cryptoSetting;


+ 26
- 0
source/ledger/ledger-core/src/test/java/test/com/jd/blockchain/ledger/MerkleDataSetTest.java View File

@@ -14,8 +14,12 @@ import java.util.Set;


import org.junit.Test; 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.HashDigest;
import com.jd.blockchain.crypto.service.classic.ClassicAlgorithm; 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.CryptoConfig;
import com.jd.blockchain.ledger.core.MerkleDataSet; import com.jd.blockchain.ledger.core.MerkleDataSet;
import com.jd.blockchain.ledger.core.MerkleProof; import com.jd.blockchain.ledger.core.MerkleProof;
@@ -26,13 +30,23 @@ import com.jd.blockchain.utils.io.BytesUtils;


public class MerkleDataSetTest { public class MerkleDataSetTest {


private static final String[] SUPPORTED_PROVIDERS = { ClassicCryptoService.class.getName(),
SMCryptoService.class.getName() };

/** /**
* 测试存储的增长; * 测试存储的增长;
*/ */
@Test @Test
public void testStorageIncreasement() { 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 = ""; String keyPrefix = "";
CryptoConfig cryptoConfig = new CryptoConfig(); CryptoConfig cryptoConfig = new CryptoConfig();
cryptoConfig.setSupportedProviders(supportedProviders);
cryptoConfig.setHashAlgorithm(ClassicAlgorithm.SHA256); cryptoConfig.setHashAlgorithm(ClassicAlgorithm.SHA256);
cryptoConfig.setAutoVerifyHash(true); cryptoConfig.setAutoVerifyHash(true);


@@ -116,7 +130,13 @@ public class MerkleDataSetTest {
String keyPrefix = ""; String keyPrefix = "";
Random rand = new Random(); 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 cryptoConfig = new CryptoConfig();
cryptoConfig.setSupportedProviders(supportedProviders);
cryptoConfig.setHashAlgorithm(ClassicAlgorithm.SHA256); cryptoConfig.setHashAlgorithm(ClassicAlgorithm.SHA256);
cryptoConfig.setAutoVerifyHash(true); cryptoConfig.setAutoVerifyHash(true);


@@ -281,7 +301,13 @@ public class MerkleDataSetTest {
String keyPrefix = ""; String keyPrefix = "";
Random rand = new Random(); 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 cryptoConfig = new CryptoConfig();
cryptoConfig.setSupportedProviders(supportedProviders);
cryptoConfig.setHashAlgorithm(ClassicAlgorithm.SHA256); cryptoConfig.setHashAlgorithm(ClassicAlgorithm.SHA256);
cryptoConfig.setAutoVerifyHash(true); cryptoConfig.setAutoVerifyHash(true);




+ 0
- 12
source/ledger/ledger-model/src/main/java/com/jd/blockchain/ledger/CryptoProviderInfo.java View File

@@ -1,12 +0,0 @@
package com.jd.blockchain.ledger;

import com.jd.blockchain.crypto.CryptoAlgorithm;

public interface CryptoProviderInfo {
String getName();
CryptoAlgorithm[] getAlgorithms();
}

+ 12
- 1
source/ledger/ledger-model/src/main/java/com/jd/blockchain/ledger/CryptoSetting.java View File

@@ -4,6 +4,7 @@ import com.jd.blockchain.binaryproto.DataContract;
import com.jd.blockchain.binaryproto.DataField; import com.jd.blockchain.binaryproto.DataField;
import com.jd.blockchain.binaryproto.PrimitiveType; import com.jd.blockchain.binaryproto.PrimitiveType;
import com.jd.blockchain.consts.DataCodes; 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) @DataContract(code = DataCodes.METADATA_CRYPTO_SETTING)
public interface CryptoSetting { public interface CryptoSetting {


/**
* 系统支持的密码服务提供者;
*
* @return
*/
public CryptoProvider[] getSupportedProviders();

/** /**
* 系统中使用的 Hash 算法; <br> * 系统中使用的 Hash 算法; <br>
* *
@@ -27,7 +37,7 @@ public interface CryptoSetting {
public short getHashAlgorithm(); public short getHashAlgorithm();


/** /**
* 当有完整性证明的数据被从持久化介质中加载时,是否对其进行完整性校验(重新计算 hash 比对是否一致); <br>
* 当有加载附带哈希摘要的数据时,是否重新计算哈希摘要进行完整性校验; <br>
* *
* 如果为 true ,则自动进行校验,如果校验失败,会引发异常; <br> * 如果为 true ,则自动进行校验,如果校验失败,会引发异常; <br>
* *
@@ -37,5 +47,6 @@ public interface CryptoSetting {
*/ */
@DataField(order = 2, primitiveType = PrimitiveType.BOOLEAN) @DataField(order = 2, primitiveType = PrimitiveType.BOOLEAN)
public boolean getAutoVerifyHash(); public boolean getAutoVerifyHash();


} }

+ 2
- 2
source/ledger/ledger-model/src/main/java/com/jd/blockchain/transaction/DataAccountKVSetOpTemplate.java View File

@@ -49,7 +49,7 @@ public class DataAccountKVSetOpTemplate implements DataAccountKVSetOperation {
public void set(String key, BytesValue value, long expVersion) { public void set(String key, BytesValue value, long expVersion) {
if (kvset.containsKey(key)) { 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); KVData kvdata = new KVData(key, value, expVersion);
kvset.put(key, kvdata); kvset.put(key, kvdata);
@@ -57,7 +57,7 @@ public class DataAccountKVSetOpTemplate implements DataAccountKVSetOperation {
public void set(KVData kvData) { public void set(KVData kvData) {
if (kvset.containsKey(kvData.getKey())) { 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); kvset.put(kvData.getKey(), kvData);
} }


+ 11
- 0
source/test/test-integration/src/test/java/test/com/jd/blockchain/intgr/initializer/LedgerInitializeTest.java View File

@@ -19,12 +19,15 @@ import com.jd.blockchain.consensus.ConsensusProviders;
import com.jd.blockchain.consensus.ConsensusSettings; import com.jd.blockchain.consensus.ConsensusSettings;
import com.jd.blockchain.crypto.AddressEncoding; import com.jd.blockchain.crypto.AddressEncoding;
import com.jd.blockchain.crypto.CryptoAlgorithm; import com.jd.blockchain.crypto.CryptoAlgorithm;
import com.jd.blockchain.crypto.CryptoProvider;
import com.jd.blockchain.crypto.AsymmetricKeypair; import com.jd.blockchain.crypto.AsymmetricKeypair;
import com.jd.blockchain.crypto.Crypto; import com.jd.blockchain.crypto.Crypto;
import com.jd.blockchain.crypto.HashDigest; import com.jd.blockchain.crypto.HashDigest;
import com.jd.blockchain.crypto.PrivKey; import com.jd.blockchain.crypto.PrivKey;
import com.jd.blockchain.crypto.PubKey; import com.jd.blockchain.crypto.PubKey;
import com.jd.blockchain.crypto.SignatureDigest; 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.LedgerBlock;
import com.jd.blockchain.ledger.LedgerInitOperation; import com.jd.blockchain.ledger.LedgerInitOperation;
import com.jd.blockchain.ledger.UserRegisterOperation; import com.jd.blockchain.ledger.UserRegisterOperation;
@@ -60,6 +63,9 @@ public class LedgerInitializeTest {
DataContractRegistry.register(UserRegisterOperation.class); 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 PASSWORD = IntegrationBase.PASSWORD;


public static final String[] PUB_KEYS = IntegrationBase.PUB_KEYS; public static final String[] PUB_KEYS = IntegrationBase.PUB_KEYS;
@@ -254,7 +260,12 @@ public class LedgerInitializeTest {
ConsensusSettings csProps, ConsensusProvider csProvider, DBConnectionConfig dbConnConfig, ConsensusSettings csProps, ConsensusProvider csProvider, DBConnectionConfig dbConnConfig,
Prompter prompter, boolean autoVerifyHash) { 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(); CryptoConfig cryptoSetting = new CryptoConfig();
cryptoSetting.setSupportedProviders(supportedProviders);
cryptoSetting.setAutoVerifyHash(autoVerifyHash); cryptoSetting.setAutoVerifyHash(autoVerifyHash);
cryptoSetting.setHashAlgorithm(Crypto.getAlgorithm("SHA256")); cryptoSetting.setHashAlgorithm(Crypto.getAlgorithm("SHA256"));




+ 12
- 0
source/tools/tools-initializer/src/main/java/com/jd/blockchain/tools/initializer/web/LedgerInitializeWebController.java View File

@@ -20,12 +20,15 @@ import com.jd.blockchain.binaryproto.DataContractRegistry;
import com.jd.blockchain.consensus.ConsensusProvider; import com.jd.blockchain.consensus.ConsensusProvider;
import com.jd.blockchain.consensus.ConsensusSettings; import com.jd.blockchain.consensus.ConsensusSettings;
import com.jd.blockchain.crypto.CryptoAlgorithm; import com.jd.blockchain.crypto.CryptoAlgorithm;
import com.jd.blockchain.crypto.CryptoProvider;
import com.jd.blockchain.crypto.Crypto; import com.jd.blockchain.crypto.Crypto;
import com.jd.blockchain.crypto.HashDigest; import com.jd.blockchain.crypto.HashDigest;
import com.jd.blockchain.crypto.PrivKey; import com.jd.blockchain.crypto.PrivKey;
import com.jd.blockchain.crypto.PubKey; import com.jd.blockchain.crypto.PubKey;
import com.jd.blockchain.crypto.SignatureDigest; import com.jd.blockchain.crypto.SignatureDigest;
import com.jd.blockchain.crypto.SignatureFunction; 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.BlockchainIdentity;
import com.jd.blockchain.ledger.BlockchainIdentityData; import com.jd.blockchain.ledger.BlockchainIdentityData;
import com.jd.blockchain.ledger.CryptoSetting; import com.jd.blockchain.ledger.CryptoSetting;
@@ -75,6 +78,10 @@ public class LedgerInitializeWebController implements LedgerInitProcess, LedgerI
static { static {
DataContractRegistry.register(TransactionRequest.class); DataContractRegistry.register(TransactionRequest.class);
} }
private static final String[] SUPPORTED_PROVIDERS = { ClassicCryptoService.class.getName(),
SMCryptoService.class.getName() };



private static final String DEFAULT_SIGN_ALGORITHM = "ED25519"; private static final String DEFAULT_SIGN_ALGORITHM = "ED25519";
@@ -299,7 +306,12 @@ public class LedgerInitializeWebController implements LedgerInitProcess, LedgerI
} }


public CryptoSetting createDefaultCryptoSetting() { 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(); CryptoConfig defCryptoSetting = new CryptoConfig();
defCryptoSetting.setSupportedProviders(supportedProviders);
defCryptoSetting.setAutoVerifyHash(true); defCryptoSetting.setAutoVerifyHash(true);
defCryptoSetting.setHashAlgorithm(Crypto.getAlgorithm("SHA256")); defCryptoSetting.setHashAlgorithm(Crypto.getAlgorithm("SHA256"));




Loading…
Cancel
Save