diff --git a/source/contract/pom.xml b/source/contract/pom.xml
index 8093c879..39cbad89 100644
--- a/source/contract/pom.xml
+++ b/source/contract/pom.xml
@@ -14,9 +14,6 @@
contract-framework
contract-jvm
contract-maven-plugin
- contract-compile
-
-
\ No newline at end of file
diff --git a/source/crypto/crypto-framework/src/main/java/com/jd/blockchain/crypto/BaseCryptoBytes.java b/source/crypto/crypto-framework/src/main/java/com/jd/blockchain/crypto/BaseCryptoBytes.java
index e6bd3d3e..e51460f8 100644
--- a/source/crypto/crypto-framework/src/main/java/com/jd/blockchain/crypto/BaseCryptoBytes.java
+++ b/source/crypto/crypto-framework/src/main/java/com/jd/blockchain/crypto/BaseCryptoBytes.java
@@ -49,12 +49,10 @@ public abstract class BaseCryptoBytes extends Bytes implements CryptoBytes {
@Override
public CryptoAlgorithm getAlgorithm() {
- // return resolveAlgorithm(encodedBytes);
return algorithm;
}
protected BytesSlice getRawCryptoBytes() {
- // return resolveRawCryptoBytes(encodedBytes);
return new BytesSlice(getDirectBytes(), 2);
}
}
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 5837590b..aa2303ab 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
@@ -181,4 +181,7 @@ public interface CryptoAlgorithm {
return isEncryptionAlgorithm(algorithm) && hasAsymmetricKey(algorithm);
}
+ static boolean equals(CryptoAlgorithm algorithm1, CryptoAlgorithm algorithm2) {
+ return algorithm1.code() == algorithm2.code();
+ }
}
diff --git a/source/crypto/crypto-framework/src/main/java/com/jd/blockchain/crypto/CryptoServiceProviders.java b/source/crypto/crypto-framework/src/main/java/com/jd/blockchain/crypto/CryptoServiceProviders.java
index 1a185cf9..d8468f7d 100644
--- a/source/crypto/crypto-framework/src/main/java/com/jd/blockchain/crypto/CryptoServiceProviders.java
+++ b/source/crypto/crypto-framework/src/main/java/com/jd/blockchain/crypto/CryptoServiceProviders.java
@@ -129,6 +129,15 @@ public final class CryptoServiceProviders {
Short code = names.get(name.toUpperCase());
return code == null ? null : algorithms.get(code);
}
+
+ public static RandomFunction getRandomFunction(String algorithmName) {
+ CryptoAlgorithm algorithm = getAlgorithm(algorithmName);
+ if (algorithm == null) {
+ throw new CryptoException(
+ "Algorithm " + algorithmName + " has no service provider!");
+ }
+ return getRandomFunction(algorithm);
+ }
public static RandomFunction getRandomFunction(CryptoAlgorithm algorithm) {
if (!CryptoAlgorithm.isRandomAlgorithm(algorithm)) {
@@ -143,6 +152,15 @@ public final class CryptoServiceProviders {
return (RandomFunction) func;
}
+
+ public static HashFunction getHashFunction(String algorithmName) {
+ CryptoAlgorithm algorithm = getAlgorithm(algorithmName);
+ if (algorithm == null) {
+ throw new CryptoException(
+ "Algorithm " + algorithmName + " has no service provider!");
+ }
+ return getHashFunction(algorithm);
+ }
public static HashFunction getHashFunction(CryptoAlgorithm algorithm) {
if (!CryptoAlgorithm.isHashAlgorithm(algorithm)) {
@@ -157,6 +175,15 @@ public final class CryptoServiceProviders {
return (HashFunction) func;
}
+
+ public static AsymmetricEncryptionFunction getAsymmetricEncryptionFunction(String algorithmName) {
+ CryptoAlgorithm algorithm = getAlgorithm(algorithmName);
+ if (algorithm == null) {
+ throw new CryptoException(
+ "Algorithm " + algorithmName + " has no service provider!");
+ }
+ return getAsymmetricEncryptionFunction(algorithm);
+ }
public static AsymmetricEncryptionFunction getAsymmetricEncryptionFunction(CryptoAlgorithm algorithm) {
if (!CryptoAlgorithm.isAsymmetricEncryptionAlgorithm(algorithm)) {
@@ -171,6 +198,16 @@ public final class CryptoServiceProviders {
return (AsymmetricEncryptionFunction) func;
}
+
+
+ public static SignatureFunction getSignatureFunction(String algorithmName) {
+ CryptoAlgorithm algorithm = getAlgorithm(algorithmName);
+ if (algorithm == null) {
+ throw new CryptoException(
+ "Algorithm " + algorithmName + " has no service provider!");
+ }
+ return getSignatureFunction(algorithm);
+ }
public static SignatureFunction getSignatureFunction(CryptoAlgorithm algorithm) {
if (!CryptoAlgorithm.isSignatureAlgorithm(algorithm)) {
@@ -185,6 +222,16 @@ public final class CryptoServiceProviders {
return (SignatureFunction) func;
}
+
+
+ public static SymmetricEncryptionFunction getSymmetricEncryptionFunction(String algorithmName) {
+ CryptoAlgorithm algorithm = getAlgorithm(algorithmName);
+ if (algorithm == null) {
+ throw new CryptoException(
+ "Algorithm " + algorithmName + " has no service provider!");
+ }
+ return getSymmetricEncryptionFunction(algorithm);
+ }
public static SymmetricEncryptionFunction getSymmetricEncryptionFunction(CryptoAlgorithm algorithm) {
if (!CryptoAlgorithm.isSymmetricEncryptionAlgorithm(algorithm)) {
@@ -199,6 +246,16 @@ public final class CryptoServiceProviders {
return (SymmetricEncryptionFunction) func;
}
+
+
+ public static CryptoFunction getCryptoFunction(String algorithmName) {
+ CryptoAlgorithm algorithm = getAlgorithm(algorithmName);
+ if (algorithm == null) {
+ throw new CryptoException(
+ "Algorithm " + algorithmName + " has no service provider!");
+ }
+ return getCryptoFunction(algorithm);
+ }
public static CryptoFunction getCryptoFunction(CryptoAlgorithm algorithm) {
CryptoFunction func = functions.get(algorithm.code());
diff --git a/source/crypto/crypto-framework/src/main/java/com/jd/blockchain/crypto/asymmetric/CryptoKeyPair.java b/source/crypto/crypto-framework/src/main/java/com/jd/blockchain/crypto/asymmetric/CryptoKeyPair.java
index df2e1017..cb954e39 100644
--- a/source/crypto/crypto-framework/src/main/java/com/jd/blockchain/crypto/asymmetric/CryptoKeyPair.java
+++ b/source/crypto/crypto-framework/src/main/java/com/jd/blockchain/crypto/asymmetric/CryptoKeyPair.java
@@ -1,14 +1,19 @@
package com.jd.blockchain.crypto.asymmetric;
+import com.jd.blockchain.crypto.CryptoAlgorithm;
import com.jd.blockchain.crypto.PrivKey;
import com.jd.blockchain.crypto.PubKey;
public class CryptoKeyPair {
-
+
private PubKey pubKey;
-
+
private PrivKey privKey;
+ public CryptoAlgorithm getAlgorithm() {
+ return pubKey.getAlgorithm();
+ }
+
public PubKey getPubKey() {
return pubKey;
}
@@ -18,8 +23,11 @@ public class CryptoKeyPair {
}
public CryptoKeyPair(PubKey pubKey, PrivKey privKey) {
+ if (!CryptoAlgorithm.equals(pubKey.getAlgorithm(), privKey.getAlgorithm())) {
+ throw new IllegalArgumentException("The algorithms of PubKey and PrivKey don't match!");
+ }
this.pubKey = pubKey;
this.privKey = privKey;
}
-
+
}
diff --git a/source/ledger/ledger-model/pom.xml b/source/ledger/ledger-model/pom.xml
index 0c19fb1e..d9df06a7 100644
--- a/source/ledger/ledger-model/pom.xml
+++ b/source/ledger/ledger-model/pom.xml
@@ -11,46 +11,35 @@
ledger-model
+
com.jd.blockchain
- binary-proto
+ utils-common
${project.version}
com.jd.blockchain
- crypto-framework
+ utils-web
${project.version}
-
+
com.jd.blockchain
- crypto-impl
+ binary-proto
${project.version}
- test
-
com.jd.blockchain
- utils-common
+ crypto-framework
${project.version}
com.jd.blockchain
- utils-web
+ crypto-classic
${project.version}
+ test
-
-
-
-
-
-
\ No newline at end of file
diff --git a/source/ledger/ledger-model/src/main/java/com/jd/blockchain/ledger/BlockchainKeyGenerator.java b/source/ledger/ledger-model/src/main/java/com/jd/blockchain/ledger/BlockchainKeyGenerator.java
index 03fce3d1..75408ad4 100644
--- a/source/ledger/ledger-model/src/main/java/com/jd/blockchain/ledger/BlockchainKeyGenerator.java
+++ b/source/ledger/ledger-model/src/main/java/com/jd/blockchain/ledger/BlockchainKeyGenerator.java
@@ -1,8 +1,9 @@
package com.jd.blockchain.ledger;
import com.jd.blockchain.crypto.CryptoAlgorithm;
-import com.jd.blockchain.crypto.CryptoUtils;
+import com.jd.blockchain.crypto.CryptoServiceProviders;
import com.jd.blockchain.crypto.asymmetric.CryptoKeyPair;
+import com.jd.blockchain.crypto.asymmetric.SignatureFunction;
/**
* 区块链密钥生成器;
@@ -11,6 +12,8 @@ import com.jd.blockchain.crypto.asymmetric.CryptoKeyPair;
*
*/
public class BlockchainKeyGenerator {
+
+ public static final String DEFAULT_ALGORITHM = "ED25519";
private BlockchainKeyGenerator() {
}
@@ -20,11 +23,17 @@ public class BlockchainKeyGenerator {
}
public BlockchainKeyPair generate() {
- return generate(CryptoAlgorithm.ED25519);
+ return generate(DEFAULT_ALGORITHM);
}
+ public BlockchainKeyPair generate(String algorithmName) {
+ CryptoAlgorithm algorithm = CryptoServiceProviders.getAlgorithm(algorithmName);
+ return generate(algorithm);
+ }
+
public BlockchainKeyPair generate(CryptoAlgorithm signatureAlgorithm) {
- CryptoKeyPair cryptoKeyPair = CryptoUtils.sign(signatureAlgorithm).generateKeyPair();
+ SignatureFunction signFunc = CryptoServiceProviders.getSignatureFunction(signatureAlgorithm);
+ CryptoKeyPair cryptoKeyPair = signFunc.generateKeyPair();
return new BlockchainKeyPair(cryptoKeyPair.getPubKey(), cryptoKeyPair.getPrivKey());
}
diff --git a/source/ledger/ledger-model/src/main/java/com/jd/blockchain/ledger/data/DigitalSignatureBlob.java b/source/ledger/ledger-model/src/main/java/com/jd/blockchain/ledger/data/DigitalSignatureBlob.java
index 86e78819..2e78aa65 100644
--- a/source/ledger/ledger-model/src/main/java/com/jd/blockchain/ledger/data/DigitalSignatureBlob.java
+++ b/source/ledger/ledger-model/src/main/java/com/jd/blockchain/ledger/data/DigitalSignatureBlob.java
@@ -24,7 +24,7 @@ import com.jd.blockchain.ledger.MagicNumber;
* @author huanghaiquan
*
*/
-public class DigitalSignatureBlob implements DigitalSignature { //, Externalizable
+public class DigitalSignatureBlob implements DigitalSignature {
private PubKey pubKey;
diff --git a/source/ledger/ledger-model/src/main/java/com/jd/blockchain/ledger/data/PreparedTx.java b/source/ledger/ledger-model/src/main/java/com/jd/blockchain/ledger/data/PreparedTx.java
index 7e798102..01bfecce 100644
--- a/source/ledger/ledger-model/src/main/java/com/jd/blockchain/ledger/data/PreparedTx.java
+++ b/source/ledger/ledger-model/src/main/java/com/jd/blockchain/ledger/data/PreparedTx.java
@@ -1,7 +1,7 @@
package com.jd.blockchain.ledger.data;
import com.jd.blockchain.binaryproto.BinaryEncodingUtils;
-import com.jd.blockchain.crypto.CryptoUtils;
+import com.jd.blockchain.crypto.CryptoServiceProviders;
import com.jd.blockchain.crypto.PrivKey;
import com.jd.blockchain.crypto.asymmetric.CryptoKeyPair;
import com.jd.blockchain.crypto.asymmetric.SignatureDigest;
@@ -37,8 +37,7 @@ public class PreparedTx implements PreparedTransaction {
@Override
public DigitalSignature sign(CryptoKeyPair keyPair) {
-// SignatureFunction signatureFunction = new ED25519SignatureFunction();
- SignatureFunction signatureFunction = CryptoUtils.sign(keyPair.getPubKey().getAlgorithm());
+ SignatureFunction signatureFunction = CryptoServiceProviders.getSignatureFunction(keyPair.getAlgorithm());
PrivKey privKey = keyPair.getPrivKey();
byte[] content = BinaryEncodingUtils.encode(getTransactionContent(), TransactionContent.class);
SignatureDigest signatureDigest = signatureFunction.sign(privKey, content);
diff --git a/source/ledger/ledger-model/src/main/java/com/jd/blockchain/ledger/data/SignatureUtils.java b/source/ledger/ledger-model/src/main/java/com/jd/blockchain/ledger/data/SignatureUtils.java
deleted file mode 100644
index 9dd0a32c..00000000
--- a/source/ledger/ledger-model/src/main/java/com/jd/blockchain/ledger/data/SignatureUtils.java
+++ /dev/null
@@ -1,50 +0,0 @@
-package com.jd.blockchain.ledger.data;
-
-import com.jd.blockchain.crypto.CryptoAlgorithm;
-import com.jd.blockchain.crypto.asymmetric.SignatureDigest;
-import com.jd.blockchain.ledger.BlockchainKeyPair;
-import com.jd.blockchain.ledger.DigitalSignature;
-import com.jd.blockchain.utils.io.ByteArray;
-import com.jd.blockchain.utils.security.Ed25519Utils;
-
-public class SignatureUtils {
-
- public static DigitalSignature sign(ByteArray data, BlockchainKeyPair keyPair) {
- return sign(data.bytes(), keyPair);
- }
-
- public static DigitalSignature sign(byte[] data, BlockchainKeyPair keyPair) {
- // 对交易内容的hash进行签名;
- CryptoAlgorithm algorithm = keyPair.getPrivKey().getAlgorithm();
- switch (algorithm) {
- case ED25519:
- byte[] digest = Ed25519Utils.sign_512(data, keyPair.getPrivKey().getRawKeyBytes());
- DigitalSignatureBlob signature = new DigitalSignatureBlob(keyPair.getPubKey(), new SignatureDigest(digest));
- return signature;
- case SM2:
- throw new IllegalArgumentException("Unsupported KeyType[" + algorithm + "]!");
-// case CA:
-// throw new IllegalArgumentException("Unsupported KeyType[" + keyType + "]!");
- default:
- throw new IllegalArgumentException("Unsupported KeyType[" + algorithm + "]!");
- }
- }
-
- public static boolean verify(ByteArray data, DigitalSignature signature) {
- return verify(data.bytes(), signature);
- }
-
- public static boolean verify(byte[] data, DigitalSignature signature) {
- CryptoAlgorithm algorithm = signature.getPubKey().getAlgorithm();
- switch (algorithm) {
- case ED25519:
- return Ed25519Utils.verify(data, signature.getPubKey().getRawKeyBytes(), signature.getDigest().toBytes());
- case SM2:
- throw new IllegalArgumentException("Unsupported KeyType[" + algorithm + "]!");
-// case CA:
-// throw new IllegalArgumentException("Unsupported KeyType[" + keyType + "]!");
- default:
- throw new IllegalArgumentException("Unsupported KeyType[" + algorithm + "]!");
- }
- }
-}
diff --git a/source/ledger/ledger-model/src/main/java/com/jd/blockchain/ledger/data/TxBuilder.java b/source/ledger/ledger-model/src/main/java/com/jd/blockchain/ledger/data/TxBuilder.java
index fc2680ba..dd754737 100644
--- a/source/ledger/ledger-model/src/main/java/com/jd/blockchain/ledger/data/TxBuilder.java
+++ b/source/ledger/ledger-model/src/main/java/com/jd/blockchain/ledger/data/TxBuilder.java
@@ -2,8 +2,7 @@ package com.jd.blockchain.ledger.data;
import com.jd.blockchain.binaryproto.BinaryEncodingUtils;
import com.jd.blockchain.binaryproto.DataContractRegistry;
-import com.jd.blockchain.crypto.CryptoAlgorithm;
-import com.jd.blockchain.crypto.CryptoUtils;
+import com.jd.blockchain.crypto.CryptoServiceProviders;
import com.jd.blockchain.crypto.hash.HashDigest;
import com.jd.blockchain.ledger.TransactionBuilder;
import com.jd.blockchain.ledger.TransactionContent;
@@ -19,8 +18,8 @@ public class TxBuilder implements TransactionBuilder {
private BlockchainOperationFactory opFactory = new BlockchainOperationFactory();
- private CryptoAlgorithm defaultHashAlgorithm = CryptoAlgorithm.SHA256;
-
+ private static final String DEFAULT_HASH_ALGORITHM = "SHA256";
+
private HashDigest ledgerHash;
public TxBuilder(HashDigest ledgerHash) {
@@ -44,7 +43,7 @@ public class TxBuilder implements TransactionBuilder {
txContent.addOperations(opFactory.getOperations());
byte[] contentBodyBytes = BinaryEncodingUtils.encode(txContent, TransactionContentBody.class);
- HashDigest contentHash = CryptoUtils.hash(defaultHashAlgorithm).hash(contentBodyBytes);
+ HashDigest contentHash = CryptoServiceProviders.getHashFunction(DEFAULT_HASH_ALGORITHM).hash(contentBodyBytes);
txContent.setHash(contentHash);
return txContent;
diff --git a/source/ledger/ledger-model/src/main/java/com/jd/blockchain/ledger/data/TxRequestBuilder.java b/source/ledger/ledger-model/src/main/java/com/jd/blockchain/ledger/data/TxRequestBuilder.java
index 8d2577a1..8f0a6a50 100644
--- a/source/ledger/ledger-model/src/main/java/com/jd/blockchain/ledger/data/TxRequestBuilder.java
+++ b/source/ledger/ledger-model/src/main/java/com/jd/blockchain/ledger/data/TxRequestBuilder.java
@@ -4,8 +4,7 @@ import java.util.ArrayList;
import java.util.List;
import com.jd.blockchain.binaryproto.BinaryEncodingUtils;
-import com.jd.blockchain.crypto.CryptoAlgorithm;
-import com.jd.blockchain.crypto.CryptoUtils;
+import com.jd.blockchain.crypto.CryptoServiceProviders;
import com.jd.blockchain.crypto.PrivKey;
import com.jd.blockchain.crypto.PubKey;
import com.jd.blockchain.crypto.asymmetric.CryptoKeyPair;
@@ -19,6 +18,8 @@ import com.jd.blockchain.ledger.TransactionRequestBuilder;
public class TxRequestBuilder implements TransactionRequestBuilder {
+ private static final String DEFAULT_HASH_ALGORITHM = "SHA256";
+
private TransactionContent txContent;
private List endpointSignatures = new ArrayList<>();
@@ -70,11 +71,13 @@ public class TxRequestBuilder implements TransactionRequestBuilder {
}
public static SignatureDigest sign(TransactionContent txContent, PrivKey privKey) {
- return CryptoUtils.sign(privKey.getAlgorithm()).sign(privKey, txContent.getHash().toBytes());
+ return CryptoServiceProviders.getSignatureFunction(privKey.getAlgorithm()).sign(privKey,
+ txContent.getHash().toBytes());
}
public static boolean verifySignature(TransactionContent txContent, SignatureDigest signDigest, PubKey pubKey) {
- return CryptoUtils.sign(signDigest.getAlgorithm()).verify(signDigest, pubKey, txContent.getHash().toBytes());
+ return CryptoServiceProviders.getSignatureFunction(pubKey.getAlgorithm()).verify(signDigest, pubKey,
+ txContent.getHash().toBytes());
}
@Override
@@ -84,7 +87,7 @@ public class TxRequestBuilder implements TransactionRequestBuilder {
txMessage.addNodeSignatures(nodeSignatures);
byte[] reqBytes = BinaryEncodingUtils.encode(txMessage, NodeRequest.class);
- HashDigest reqHash = CryptoUtils.hash(CryptoAlgorithm.SHA256).hash(reqBytes);
+ HashDigest reqHash = CryptoServiceProviders.getHashFunction(DEFAULT_HASH_ALGORITHM).hash(reqBytes);
txMessage.setHash(reqHash);
return txMessage;
diff --git a/source/ledger/ledger-model/src/test/java/test/com/jd/blockchain/ledger/data/ContractCodeDeployOpTemplateTest.java b/source/ledger/ledger-model/src/test/java/test/com/jd/blockchain/ledger/data/ContractCodeDeployOpTemplateTest.java
index ca6e28d3..1bef2b2a 100644
--- a/source/ledger/ledger-model/src/test/java/test/com/jd/blockchain/ledger/data/ContractCodeDeployOpTemplateTest.java
+++ b/source/ledger/ledger-model/src/test/java/test/com/jd/blockchain/ledger/data/ContractCodeDeployOpTemplateTest.java
@@ -8,21 +8,25 @@
*/
package test.com.jd.blockchain.ledger.data;
+import static org.junit.Assert.assertArrayEquals;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
+import org.junit.Before;
+import org.junit.Test;
+
import com.jd.blockchain.binaryproto.BinaryEncodingUtils;
import com.jd.blockchain.binaryproto.DataContractRegistry;
-import com.jd.blockchain.crypto.CryptoAlgorithm;
+import com.jd.blockchain.crypto.CryptoServiceProviders;
import com.jd.blockchain.crypto.PubKey;
-import com.jd.blockchain.ledger.*;
+import com.jd.blockchain.crypto.asymmetric.SignatureFunction;
+import com.jd.blockchain.ledger.BlockchainIdentity;
+import com.jd.blockchain.ledger.BlockchainIdentityData;
+import com.jd.blockchain.ledger.ContractCodeDeployOperation;
+import com.jd.blockchain.ledger.Operation;
import com.jd.blockchain.ledger.data.ContractCodeDeployOpTemplate;
import com.jd.blockchain.utils.io.BytesUtils;
-import org.junit.Before;
-import org.junit.Test;
-
-import static org.junit.Assert.assertArrayEquals;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-
/**
*
* @author shaozhuguang
@@ -38,8 +42,8 @@ public class ContractCodeDeployOpTemplateTest {
public void initContractCodeDeployOpTemplate() {
DataContractRegistry.register(ContractCodeDeployOperation.class);
DataContractRegistry.register(Operation.class);
- String pubKeyVal = "jd.com";
- PubKey pubKey = new PubKey(CryptoAlgorithm.ED25519, pubKeyVal.getBytes());
+ SignatureFunction signFunc = CryptoServiceProviders.getSignatureFunction("ED25519");
+ PubKey pubKey = signFunc.generateKeyPair().getPubKey();
BlockchainIdentity contractID = new BlockchainIdentityData(pubKey);
byte[] chainCode = "jd-test".getBytes();
data = new ContractCodeDeployOpTemplate(contractID, chainCode);
diff --git a/source/ledger/ledger-model/src/test/java/test/com/jd/blockchain/ledger/data/DataAccountRegisterOpTemplateTest.java b/source/ledger/ledger-model/src/test/java/test/com/jd/blockchain/ledger/data/DataAccountRegisterOpTemplateTest.java
index 27b62443..afddc89e 100644
--- a/source/ledger/ledger-model/src/test/java/test/com/jd/blockchain/ledger/data/DataAccountRegisterOpTemplateTest.java
+++ b/source/ledger/ledger-model/src/test/java/test/com/jd/blockchain/ledger/data/DataAccountRegisterOpTemplateTest.java
@@ -8,18 +8,21 @@
*/
package test.com.jd.blockchain.ledger.data;
-import com.jd.blockchain.binaryproto.BinaryEncodingUtils;
-import com.jd.blockchain.binaryproto.DataContractRegistry;
-import com.jd.blockchain.crypto.CryptoAlgorithm;
-import com.jd.blockchain.crypto.PubKey;
-import com.jd.blockchain.ledger.*;
-import com.jd.blockchain.ledger.data.DataAccountRegisterOpTemplate;
-import com.jd.blockchain.utils.io.ByteArray;
+import static org.junit.Assert.assertEquals;
import org.junit.Before;
import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import com.jd.blockchain.binaryproto.BinaryEncodingUtils;
+import com.jd.blockchain.binaryproto.DataContractRegistry;
+import com.jd.blockchain.crypto.CryptoServiceProviders;
+import com.jd.blockchain.crypto.PubKey;
+import com.jd.blockchain.crypto.asymmetric.SignatureFunction;
+import com.jd.blockchain.ledger.BlockchainIdentity;
+import com.jd.blockchain.ledger.BlockchainIdentityData;
+import com.jd.blockchain.ledger.DataAccountRegisterOperation;
+import com.jd.blockchain.ledger.Operation;
+import com.jd.blockchain.ledger.data.DataAccountRegisterOpTemplate;
/**
*
@@ -36,8 +39,8 @@ public class DataAccountRegisterOpTemplateTest {
public void initDataAccountRegisterOpTemplate() {
DataContractRegistry.register(DataAccountRegisterOperation.class);
DataContractRegistry.register(Operation.class);
- String pubKeyVal = "jd.com";
- PubKey pubKey = new PubKey(CryptoAlgorithm.ED25519, pubKeyVal.getBytes());
+ SignatureFunction signFunc = CryptoServiceProviders.getSignatureFunction("ED25519");
+ PubKey pubKey = signFunc.generateKeyPair().getPubKey();
BlockchainIdentity contractID = new BlockchainIdentityData(pubKey);
data = new DataAccountRegisterOpTemplate(contractID);
diff --git a/source/ledger/ledger-model/src/test/java/test/com/jd/blockchain/ledger/data/DigitalSignatureBlobTest.java b/source/ledger/ledger-model/src/test/java/test/com/jd/blockchain/ledger/data/DigitalSignatureBlobTest.java
index b75c4149..fd24c38a 100644
--- a/source/ledger/ledger-model/src/test/java/test/com/jd/blockchain/ledger/data/DigitalSignatureBlobTest.java
+++ b/source/ledger/ledger-model/src/test/java/test/com/jd/blockchain/ledger/data/DigitalSignatureBlobTest.java
@@ -16,8 +16,11 @@ import org.junit.Test;
import com.jd.blockchain.binaryproto.BinaryEncodingUtils;
import com.jd.blockchain.binaryproto.DataContractRegistry;
import com.jd.blockchain.crypto.CryptoAlgorithm;
+import com.jd.blockchain.crypto.CryptoServiceProviders;
import com.jd.blockchain.crypto.PubKey;
+import com.jd.blockchain.crypto.asymmetric.CryptoKeyPair;
import com.jd.blockchain.crypto.asymmetric.SignatureDigest;
+import com.jd.blockchain.crypto.asymmetric.SignatureFunction;
import com.jd.blockchain.ledger.DigitalSignature;
import com.jd.blockchain.ledger.DigitalSignatureBody;
import com.jd.blockchain.ledger.data.DigitalSignatureBlob;
@@ -37,8 +40,11 @@ public class DigitalSignatureBlobTest {
public void initDigitalSignatureBlob() throws Exception {
DataContractRegistry.register(DigitalSignature.class);
DataContractRegistry.register(DigitalSignatureBody.class);
- PubKey pubKey = new PubKey(CryptoAlgorithm.ED25519, "jd.com".getBytes());
- SignatureDigest digest = new SignatureDigest(CryptoAlgorithm.ED25519, "zhangsan".getBytes());
+ SignatureFunction signFunc = CryptoServiceProviders.getSignatureFunction("ED25519");
+ CryptoKeyPair kp = signFunc.generateKeyPair();
+ PubKey pubKey = kp.getPubKey();
+
+ SignatureDigest digest = signFunc.sign(kp.getPrivKey(), "zhangsan".getBytes());
data = new DigitalSignatureBlob(pubKey, digest);
}
diff --git a/source/ledger/ledger-model/src/test/java/test/com/jd/blockchain/ledger/data/ED25519SignatureTest.java b/source/ledger/ledger-model/src/test/java/test/com/jd/blockchain/ledger/data/ED25519SignatureTest.java
index fbadccf0..590fcd3a 100644
--- a/source/ledger/ledger-model/src/test/java/test/com/jd/blockchain/ledger/data/ED25519SignatureTest.java
+++ b/source/ledger/ledger-model/src/test/java/test/com/jd/blockchain/ledger/data/ED25519SignatureTest.java
@@ -2,25 +2,28 @@ package test.com.jd.blockchain.ledger.data;
import java.util.Random;
-import com.jd.blockchain.crypto.CryptoAlgorithm;
-import com.jd.blockchain.ledger.BlockchainKeyGenerator;
-import com.jd.blockchain.ledger.BlockchainKeyPair;
+import org.junit.Test;
+
+import com.jd.blockchain.crypto.CryptoServiceProviders;
+import com.jd.blockchain.crypto.asymmetric.CryptoKeyPair;
+import com.jd.blockchain.crypto.asymmetric.SignatureFunction;
import com.jd.blockchain.utils.security.Ed25519Utils;
public class ED25519SignatureTest {
- public static void main(String[] args) {
+ @Test
+ public void perfomanceTest() {
Random rand = new Random();
byte[] data = new byte[64];
rand.nextBytes(data);
- BlockchainKeyPair key = BlockchainKeyGenerator.getInstance().generate(CryptoAlgorithm.ED25519);
-
+ SignatureFunction signFunc = CryptoServiceProviders.getSignatureFunction("ED25519");
+ CryptoKeyPair key = signFunc.generateKeyPair();
byte[] pubKey = key.getPubKey().getRawKeyBytes();
byte[] privKey = key.getPrivKey().getRawKeyBytes();
int count = 10000;
-
+
System.out.println("=================== do sign test ===================");
byte[] sign = null;
for (int r = 0; r < 5; r++) {
@@ -33,7 +36,7 @@ public class ED25519SignatureTest {
System.out.println(String.format("Siging Count=%s; Elapsed Times=%s; TPS=%.2f", count, elapsedTS,
(count * 1000.00D) / elapsedTS));
}
-
+
System.out.println("=================== do verify test ===================");
for (int r = 0; r < 5; r++) {
System.out.println("------------- round[" + r + "] --------------");
diff --git a/source/ledger/ledger-model/src/test/java/test/com/jd/blockchain/ledger/data/TxContentBlobTest.java b/source/ledger/ledger-model/src/test/java/test/com/jd/blockchain/ledger/data/TxContentBlobTest.java
index 4b1ae8c0..cd634a17 100644
--- a/source/ledger/ledger-model/src/test/java/test/com/jd/blockchain/ledger/data/TxContentBlobTest.java
+++ b/source/ledger/ledger-model/src/test/java/test/com/jd/blockchain/ledger/data/TxContentBlobTest.java
@@ -6,15 +6,20 @@ import static org.junit.Assert.assertEquals;
import java.io.IOException;
import java.util.UUID;
-import com.jd.blockchain.ledger.*;
import org.junit.Before;
import org.junit.Test;
import com.jd.blockchain.binaryproto.BinaryEncodingUtils;
import com.jd.blockchain.binaryproto.DataContractRegistry;
-import com.jd.blockchain.crypto.CryptoAlgorithm;
-import com.jd.blockchain.crypto.CryptoUtils;
+import com.jd.blockchain.crypto.CryptoServiceProviders;
import com.jd.blockchain.crypto.hash.HashDigest;
+import com.jd.blockchain.ledger.BlockchainKeyGenerator;
+import com.jd.blockchain.ledger.BlockchainKeyPair;
+import com.jd.blockchain.ledger.DataAccountKVSetOperation;
+import com.jd.blockchain.ledger.HashObject;
+import com.jd.blockchain.ledger.Operation;
+import com.jd.blockchain.ledger.TransactionContent;
+import com.jd.blockchain.ledger.TransactionContentBody;
import com.jd.blockchain.ledger.data.BlockchainOperationFactory;
import com.jd.blockchain.ledger.data.TxContentBlob;
import com.jd.blockchain.utils.io.ByteArray;
@@ -29,32 +34,36 @@ public class TxContentBlobTest {
DataContractRegistry.register(TransactionContent.class);
DataContractRegistry.register(HashObject.class);
- BlockchainKeyPair id = BlockchainKeyGenerator.getInstance().generate(CryptoAlgorithm.ED25519);
+ BlockchainKeyPair id = BlockchainKeyGenerator.getInstance().generate("ED25519");
- HashDigest ledgerHash = CryptoUtils.hash(CryptoAlgorithm.SHA256).hash(UUID.randomUUID().toString().getBytes("UTF-8"));
+ HashDigest ledgerHash = CryptoServiceProviders.getHashFunction("SHA256")
+ .hash(UUID.randomUUID().toString().getBytes("UTF-8"));
BlockchainOperationFactory opFactory = new BlockchainOperationFactory();
contentBlob = new TxContentBlob(ledgerHash);
- contentBlob.setHash(new HashDigest(CryptoAlgorithm.SHA256, "jd.com".getBytes()));
+ HashDigest contentHash = CryptoServiceProviders.getHashFunction("SHA256")
+ .hash("jd.com".getBytes());
+ contentBlob.setHash(contentHash);
-// contentBlob.setSubjectAccount(id.getAddress());
-// contentBlob.setSequenceNumber(1);
-
- DataAccountKVSetOperation kvsetOP = opFactory.dataAccount(id.getAddress()).set("Name", ByteArray.fromString("AAA", "UTF-8"), -1).getOperation();
+ DataAccountKVSetOperation kvsetOP = opFactory.dataAccount(id.getAddress())
+ .set("Name", ByteArray.fromString("AAA", "UTF-8"), -1).getOperation();
contentBlob.addOperation(kvsetOP);
}
@Test
- public void testSerialize_TransactionContentBody() throws IOException,InstantiationException,IllegalAccessException{
+ public void testSerialize_TransactionContentBody()
+ throws IOException, InstantiationException, IllegalAccessException {
byte[] bytesContent = BinaryEncodingUtils.encode(contentBlob, TransactionContentBody.class);
TransactionContentBody resolvedContentBlob = BinaryEncodingUtils.decode(bytesContent);
-
+
assertEquals(contentBlob.getLedgerHash(), resolvedContentBlob.getLedgerHash());
-// assertEquals(contentBlob.getSubjectAccount(), resolvedContentBlob.getSubjectAccount());
-// assertEquals(contentBlob.getSequenceNumber(), resolvedContentBlob.getSequenceNumber());
+ // assertEquals(contentBlob.getSubjectAccount(),
+ // resolvedContentBlob.getSubjectAccount());
+ // assertEquals(contentBlob.getSequenceNumber(),
+ // resolvedContentBlob.getSequenceNumber());
assertEquals(contentBlob.getOperations().length, resolvedContentBlob.getOperations().length);
assertEquals(contentBlob.getOperations().length, resolvedContentBlob.getOperations().length);
@@ -69,20 +78,23 @@ public class TxContentBlobTest {
for (int j = 0; j < dataKv.length; j++) {
assertEquals(dataKv[i].getKey(), resolvedKv[i].getKey());
assertEquals(dataKv[i].getExpectedVersion(), resolvedKv[i].getExpectedVersion());
- assertArrayEquals(dataKv[i].getValue().getValue().toBytes(), resolvedKv[i].getValue().getValue().toBytes());
+ assertArrayEquals(dataKv[i].getValue().getValue().toBytes(),
+ resolvedKv[i].getValue().getValue().toBytes());
}
}
}
@Test
- public void testSerialize_TransactionContent() throws IOException,InstantiationException,IllegalAccessException{
+ public void testSerialize_TransactionContent() throws IOException, InstantiationException, IllegalAccessException {
byte[] bytesContent = BinaryEncodingUtils.encode(contentBlob, TransactionContent.class);
TransactionContentBody resolvedContentBlob = BinaryEncodingUtils.decode(bytesContent);
assertEquals(contentBlob.getLedgerHash(), resolvedContentBlob.getLedgerHash());
-// assertEquals(contentBlob.getSubjectAccount(), resolvedContentBlob.getSubjectAccount());
-// assertEquals(contentBlob.getSequenceNumber(), resolvedContentBlob.getSequenceNumber());
+ // assertEquals(contentBlob.getSubjectAccount(),
+ // resolvedContentBlob.getSubjectAccount());
+ // assertEquals(contentBlob.getSequenceNumber(),
+ // resolvedContentBlob.getSequenceNumber());
assertEquals(contentBlob.getOperations().length, resolvedContentBlob.getOperations().length);
assertEquals(contentBlob.getOperations().length, resolvedContentBlob.getOperations().length);
@@ -97,7 +109,8 @@ public class TxContentBlobTest {
for (int j = 0; j < dataKv.length; j++) {
assertEquals(dataKv[i].getKey(), resolvedKv[i].getKey());
assertEquals(dataKv[i].getExpectedVersion(), resolvedKv[i].getExpectedVersion());
- assertArrayEquals(dataKv[i].getValue().getValue().toBytes(), resolvedKv[i].getValue().getValue().toBytes());
+ assertArrayEquals(dataKv[i].getValue().getValue().toBytes(),
+ resolvedKv[i].getValue().getValue().toBytes());
}
}
}
diff --git a/source/ledger/ledger-model/src/test/java/test/com/jd/blockchain/ledger/data/TxRequestMessageTest.java b/source/ledger/ledger-model/src/test/java/test/com/jd/blockchain/ledger/data/TxRequestMessageTest.java
index a361cfa3..ef2943e1 100644
--- a/source/ledger/ledger-model/src/test/java/test/com/jd/blockchain/ledger/data/TxRequestMessageTest.java
+++ b/source/ledger/ledger-model/src/test/java/test/com/jd/blockchain/ledger/data/TxRequestMessageTest.java
@@ -17,11 +17,12 @@ import org.junit.Test;
import com.jd.blockchain.binaryproto.BinaryEncodingUtils;
import com.jd.blockchain.binaryproto.DataContractRegistry;
-import com.jd.blockchain.crypto.CryptoAlgorithm;
-import com.jd.blockchain.crypto.CryptoUtils;
-import com.jd.blockchain.crypto.PubKey;
+import com.jd.blockchain.crypto.CryptoServiceProviders;
+import com.jd.blockchain.crypto.asymmetric.CryptoKeyPair;
import com.jd.blockchain.crypto.asymmetric.SignatureDigest;
+import com.jd.blockchain.crypto.asymmetric.SignatureFunction;
import com.jd.blockchain.crypto.hash.HashDigest;
+import com.jd.blockchain.crypto.hash.HashFunction;
import com.jd.blockchain.ledger.BlockchainKeyGenerator;
import com.jd.blockchain.ledger.BlockchainKeyPair;
import com.jd.blockchain.ledger.DataAccountKVSetOperation;
@@ -58,25 +59,27 @@ public class TxRequestMessageTest {
data = new TxRequestMessage(initTransactionContent());
- SignatureDigest digest1 = new SignatureDigest(CryptoAlgorithm.ED25519, "zhangsan".getBytes());
- SignatureDigest digest2 = new SignatureDigest(CryptoAlgorithm.ED25519, "lisi".getBytes());
- DigitalSignatureBlob endPoint1 = new DigitalSignatureBlob(
- new PubKey(CryptoAlgorithm.ED25519, "jd1.com".getBytes()), digest1);
- DigitalSignatureBlob endPoint2 = new DigitalSignatureBlob(
- new PubKey(CryptoAlgorithm.ED25519, "jd2.com".getBytes()), digest2);
+ SignatureFunction signFunc = CryptoServiceProviders.getSignatureFunction("ED25519");
+ CryptoKeyPair key1 = signFunc.generateKeyPair();
+ CryptoKeyPair key2 = signFunc.generateKeyPair();
+ CryptoKeyPair key3 = signFunc.generateKeyPair();
+ CryptoKeyPair key4 = signFunc.generateKeyPair();
+
+ SignatureDigest digest1 = signFunc.sign(key1.getPrivKey(), "zhangsan".getBytes());
+ SignatureDigest digest2 = signFunc.sign(key2.getPrivKey(), "lisi".getBytes());
+ DigitalSignatureBlob endPoint1 = new DigitalSignatureBlob(key1.getPubKey(), digest1);
+ DigitalSignatureBlob endPoint2 = new DigitalSignatureBlob(key2.getPubKey(), digest2);
data.addEndpointSignatures(endPoint1);
data.addEndpointSignatures(endPoint2);
- SignatureDigest digest3 = new SignatureDigest(CryptoAlgorithm.ED25519, "wangwu".getBytes());
- SignatureDigest digest4 = new SignatureDigest(CryptoAlgorithm.ED25519, "zhaoliu".getBytes());
- DigitalSignatureBlob node1 = new DigitalSignatureBlob(new PubKey(CryptoAlgorithm.ED25519, "jd3.com".getBytes()),
- digest3);
- DigitalSignatureBlob node2 = new DigitalSignatureBlob(new PubKey(CryptoAlgorithm.ED25519, "jd4.com".getBytes()),
- digest4);
+ SignatureDigest digest3 = signFunc.sign(key3.getPrivKey(), "wangwu".getBytes());
+ SignatureDigest digest4 = signFunc.sign(key4.getPrivKey(), "zhaoliu".getBytes());
+ DigitalSignatureBlob node1 = new DigitalSignatureBlob(key3.getPubKey(), digest3);
+ DigitalSignatureBlob node2 = new DigitalSignatureBlob(key4.getPubKey(), digest4);
data.addNodeSignatures(node1);
data.addNodeSignatures(node2);
- HashDigest hash = new HashDigest(CryptoAlgorithm.SHA256, "sunqi".getBytes());
+ HashDigest hash = CryptoServiceProviders.getHashFunction("SHA256").hash("DATA".getBytes());
data.setHash(hash);
}
@@ -192,12 +195,12 @@ public class TxRequestMessageTest {
private TransactionContent initTransactionContent() throws Exception {
TxContentBlob contentBlob = null;
- BlockchainKeyPair id = BlockchainKeyGenerator.getInstance().generate(CryptoAlgorithm.ED25519);
- HashDigest ledgerHash = CryptoUtils.hash(CryptoAlgorithm.SHA256)
- .hash(UUID.randomUUID().toString().getBytes("UTF-8"));
+ BlockchainKeyPair id = BlockchainKeyGenerator.getInstance().generate("ED25519");
+ HashFunction hashFunc = CryptoServiceProviders.getHashFunction("SHA256");
+ HashDigest ledgerHash = hashFunc.hash(UUID.randomUUID().toString().getBytes("UTF-8"));
BlockchainOperationFactory opFactory = new BlockchainOperationFactory();
contentBlob = new TxContentBlob(ledgerHash);
- contentBlob.setHash(new HashDigest(CryptoAlgorithm.SHA256, "jd.com".getBytes()));
+ contentBlob.setHash(hashFunc.hash("jd.com".getBytes()));
// contentBlob.setSubjectAccount(id.getAddress());
// contentBlob.setSequenceNumber(1);
DataAccountKVSetOperation kvsetOP = opFactory.dataAccount(id.getAddress())
diff --git a/source/ledger/ledger-model/src/test/java/test/com/jd/blockchain/ledger/data/TxResponseMessageTest.java b/source/ledger/ledger-model/src/test/java/test/com/jd/blockchain/ledger/data/TxResponseMessageTest.java
index 26b00df0..970eea4e 100644
--- a/source/ledger/ledger-model/src/test/java/test/com/jd/blockchain/ledger/data/TxResponseMessageTest.java
+++ b/source/ledger/ledger-model/src/test/java/test/com/jd/blockchain/ledger/data/TxResponseMessageTest.java
@@ -8,16 +8,19 @@
*/
package test.com.jd.blockchain.ledger.data;
+import static org.junit.Assert.assertEquals;
+
+import org.junit.Before;
+import org.junit.Test;
+
import com.jd.blockchain.binaryproto.BinaryEncodingUtils;
import com.jd.blockchain.binaryproto.DataContractRegistry;
-import com.jd.blockchain.crypto.CryptoAlgorithm;
+import com.jd.blockchain.crypto.CryptoServiceProviders;
import com.jd.blockchain.crypto.hash.HashDigest;
-import com.jd.blockchain.ledger.*;
+import com.jd.blockchain.crypto.hash.HashFunction;
+import com.jd.blockchain.ledger.TransactionResponse;
+import com.jd.blockchain.ledger.TransactionState;
import com.jd.blockchain.ledger.data.TxResponseMessage;
-import org.junit.Before;
-import org.junit.Test;
-
-import static org.junit.Assert.assertEquals;
/**
*
@@ -28,33 +31,33 @@ import static org.junit.Assert.assertEquals;
public class TxResponseMessageTest {
- private TxResponseMessage data;
-
- @Before
- public void initTxRequestMessage() throws Exception {
- DataContractRegistry.register(TransactionResponse.class);
-
- HashDigest contentHash = new HashDigest(CryptoAlgorithm.SHA256, "jd-content".getBytes());
-
- HashDigest blockHash = new HashDigest(CryptoAlgorithm.SHA256, "jd-block".getBytes());
-
- long blockHeight = 9999L;
- data = new TxResponseMessage(contentHash);
- data.setBlockHash(blockHash);
- data.setBlockHeight(blockHeight);
- data.setExecutionState(TransactionState.SUCCESS);
- }
-
- @Test
- public void testSerialize_TransactionResponse() {
- byte[] serialBytes = BinaryEncodingUtils.encode(data, TransactionResponse.class);
- TransactionResponse resolvedData = BinaryEncodingUtils.decode(serialBytes);
- System.out.println("------Assert start ------");
- assertEquals(resolvedData.getBlockHash(), data.getBlockHash());
- assertEquals(resolvedData.getBlockHeight(), data.getBlockHeight());
- assertEquals(resolvedData.getContentHash(), data.getContentHash());
- assertEquals(resolvedData.getExecutionState(), data.getExecutionState());
- assertEquals(resolvedData.isSuccess(), data.isSuccess());
- System.out.println("------Assert OK ------");
- }
+ private TxResponseMessage data;
+
+ @Before
+ public void initTxRequestMessage() throws Exception {
+ DataContractRegistry.register(TransactionResponse.class);
+ HashFunction hashFunc = CryptoServiceProviders.getHashFunction("SHA256");
+ HashDigest contentHash = hashFunc.hash("jd-content".getBytes());
+
+ HashDigest blockHash = hashFunc.hash("jd-block".getBytes());
+
+ long blockHeight = 9999L;
+ data = new TxResponseMessage(contentHash);
+ data.setBlockHash(blockHash);
+ data.setBlockHeight(blockHeight);
+ data.setExecutionState(TransactionState.SUCCESS);
+ }
+
+ @Test
+ public void testSerialize_TransactionResponse() {
+ byte[] serialBytes = BinaryEncodingUtils.encode(data, TransactionResponse.class);
+ TransactionResponse resolvedData = BinaryEncodingUtils.decode(serialBytes);
+ System.out.println("------Assert start ------");
+ assertEquals(resolvedData.getBlockHash(), data.getBlockHash());
+ assertEquals(resolvedData.getBlockHeight(), data.getBlockHeight());
+ assertEquals(resolvedData.getContentHash(), data.getContentHash());
+ assertEquals(resolvedData.getExecutionState(), data.getExecutionState());
+ assertEquals(resolvedData.isSuccess(), data.isSuccess());
+ System.out.println("------Assert OK ------");
+ }
}
\ No newline at end of file
diff --git a/source/ledger/ledger-model/src/test/java/test/com/jd/blockchain/ledger/data/UserRegisterOpTemplateTest.java b/source/ledger/ledger-model/src/test/java/test/com/jd/blockchain/ledger/data/UserRegisterOpTemplateTest.java
index ce31ce45..15c7296a 100644
--- a/source/ledger/ledger-model/src/test/java/test/com/jd/blockchain/ledger/data/UserRegisterOpTemplateTest.java
+++ b/source/ledger/ledger-model/src/test/java/test/com/jd/blockchain/ledger/data/UserRegisterOpTemplateTest.java
@@ -8,20 +8,21 @@
*/
package test.com.jd.blockchain.ledger.data;
-import com.jd.blockchain.binaryproto.BinaryEncodingUtils;
-import com.jd.blockchain.binaryproto.DataContractRegistry;
-import com.jd.blockchain.crypto.CryptoAlgorithm;
-import com.jd.blockchain.crypto.PubKey;
-import com.jd.blockchain.ledger.*;
-import com.jd.blockchain.ledger.data.ContractEventSendOpTemplate;
-import com.jd.blockchain.ledger.data.DataAccountRegisterOpTemplate;
-import com.jd.blockchain.ledger.data.UserRegisterOpTemplate;
-import com.jd.blockchain.utils.io.ByteArray;
+import static org.junit.Assert.assertEquals;
import org.junit.Before;
import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import com.jd.blockchain.binaryproto.BinaryEncodingUtils;
+import com.jd.blockchain.binaryproto.DataContractRegistry;
+import com.jd.blockchain.crypto.CryptoServiceProviders;
+import com.jd.blockchain.crypto.PubKey;
+import com.jd.blockchain.crypto.asymmetric.CryptoKeyPair;
+import com.jd.blockchain.ledger.BlockchainIdentity;
+import com.jd.blockchain.ledger.BlockchainIdentityData;
+import com.jd.blockchain.ledger.Operation;
+import com.jd.blockchain.ledger.UserRegisterOperation;
+import com.jd.blockchain.ledger.data.UserRegisterOpTemplate;
/**
*
@@ -38,8 +39,8 @@ public class UserRegisterOpTemplateTest {
public void initUserRegisterOpTemplate() {
DataContractRegistry.register(UserRegisterOperation.class);
DataContractRegistry.register(Operation.class);
- String pubKeyVal = "jd.com";
- PubKey pubKey = new PubKey(CryptoAlgorithm.ED25519, pubKeyVal.getBytes());
+ CryptoKeyPair key = CryptoServiceProviders.getSignatureFunction("ED25519").generateKeyPair();
+ PubKey pubKey = key.getPubKey();
BlockchainIdentity contractID = new BlockchainIdentityData(pubKey);
data = new UserRegisterOpTemplate(contractID);
}
diff --git a/source/sdk/sdk-base/src/main/java/com/jd/blockchain/sdk/service/NodeSigningAppender.java b/source/sdk/sdk-base/src/main/java/com/jd/blockchain/sdk/service/NodeSigningAppender.java
index a0eeec6c..b2e5ab52 100644
--- a/source/sdk/sdk-base/src/main/java/com/jd/blockchain/sdk/service/NodeSigningAppender.java
+++ b/source/sdk/sdk-base/src/main/java/com/jd/blockchain/sdk/service/NodeSigningAppender.java
@@ -5,10 +5,12 @@ import com.jd.blockchain.binaryproto.DataContractRegistry;
import com.jd.blockchain.consensus.MessageService;
import com.jd.blockchain.consensus.client.ConsensusClient;
import com.jd.blockchain.crypto.CryptoAlgorithm;
-import com.jd.blockchain.crypto.CryptoUtils;
+import com.jd.blockchain.crypto.CryptoServiceProviders;
import com.jd.blockchain.crypto.asymmetric.CryptoKeyPair;
import com.jd.blockchain.crypto.asymmetric.SignatureDigest;
+import com.jd.blockchain.crypto.asymmetric.SignatureFunction;
import com.jd.blockchain.crypto.hash.HashDigest;
+import com.jd.blockchain.crypto.hash.HashFunction;
import com.jd.blockchain.ledger.NodeRequest;
import com.jd.blockchain.ledger.TransactionRequest;
import com.jd.blockchain.ledger.TransactionResponse;
@@ -64,13 +66,15 @@ public class NodeSigningAppender implements TransactionService {
// 生成网关签名;
byte[] endpointRequestBytes = BinaryEncodingUtils.encode(txMessage, TransactionRequest.class);
- CryptoAlgorithm signAlgorithm = nodeKeyPair.getPrivKey().getAlgorithm();
- SignatureDigest signDigest = CryptoUtils.sign(signAlgorithm).sign(nodeKeyPair.getPrivKey(), endpointRequestBytes);
+ CryptoAlgorithm signAlgorithm = nodeKeyPair.getAlgorithm();
+ SignatureFunction signFunc = CryptoServiceProviders.getSignatureFunction(nodeKeyPair.getAlgorithm());
+ SignatureDigest signDigest = signFunc.sign(nodeKeyPair.getPrivKey(), endpointRequestBytes);
txMessage.addNodeSignatures(new DigitalSignatureBlob(nodeKeyPair.getPubKey(), signDigest));
// 计算交易哈希;
byte[] nodeRequestBytes = BinaryEncodingUtils.encode(txMessage, TransactionRequest.class);
- HashDigest txHash = CryptoUtils.hash(hashAlgorithm).hash(nodeRequestBytes);
+ HashFunction hashFunc = CryptoServiceProviders.getHashFunction(nodeKeyPair.getAlgorithm());
+ HashDigest txHash = hashFunc.hash(nodeRequestBytes);
txMessage.setHash(txHash);
AsyncFuture result = messageService.sendOrdered(BinaryEncodingUtils.encode(txMessage, TransactionRequest.class));
diff --git a/source/sdk/sdk-client/src/main/java/com/jd/blockchain/sdk/client/GatewayServiceFactory.java b/source/sdk/sdk-client/src/main/java/com/jd/blockchain/sdk/client/GatewayServiceFactory.java
index 3ddad013..733d28f8 100644
--- a/source/sdk/sdk-client/src/main/java/com/jd/blockchain/sdk/client/GatewayServiceFactory.java
+++ b/source/sdk/sdk-client/src/main/java/com/jd/blockchain/sdk/client/GatewayServiceFactory.java
@@ -4,7 +4,7 @@ import java.io.Closeable;
import com.jd.blockchain.binaryproto.BinaryEncodingUtils;
import com.jd.blockchain.crypto.CryptoAlgorithm;
-import com.jd.blockchain.crypto.CryptoUtils;
+import com.jd.blockchain.crypto.CryptoServiceProviders;
import com.jd.blockchain.crypto.PrivKey;
import com.jd.blockchain.crypto.asymmetric.SignatureDigest;
import com.jd.blockchain.crypto.asymmetric.SignatureFunction;
@@ -139,16 +139,8 @@ public class GatewayServiceFactory implements BlockchainServiceFactory, Closeabl
byte[] txContentBytes = BinaryEncodingUtils.encode(txRequest.getTransactionContent(),
TransactionContent.class);
PrivKey userPrivKey = userKey.getPrivKey();
- CryptoAlgorithm userAlgorithm = userPrivKey.getAlgorithm();
- SignatureFunction signatureFunction = null;
- switch (userAlgorithm) {
- case ED25519:
- signatureFunction = CryptoUtils.asymmCrypto().getSignatureFunction(CryptoAlgorithm.ED25519);
- break;
- default:
- signatureFunction = CryptoUtils.asymmCrypto().getSignatureFunction(CryptoAlgorithm.ED25519);
- break;
- }
+ CryptoAlgorithm userAlgorithm = userKey.getAlgorithm();
+ SignatureFunction signatureFunction = CryptoServiceProviders.getSignatureFunction(userAlgorithm);
if (signatureFunction != null) {
SignatureDigest signatureDigest = signatureFunction.sign(userPrivKey, txContentBytes);
DigitalSignature signature = new DigitalSignatureBlob(userKey.getPubKey(), signatureDigest);
diff --git a/source/sdk/sdk-samples/src/main/java/com/jd/blockchain/sdk/samples/SDKDemo_Contract.java b/source/sdk/sdk-samples/src/main/java/com/jd/blockchain/sdk/samples/SDKDemo_Contract.java
index d79764eb..c57c1e28 100644
--- a/source/sdk/sdk-samples/src/main/java/com/jd/blockchain/sdk/samples/SDKDemo_Contract.java
+++ b/source/sdk/sdk-samples/src/main/java/com/jd/blockchain/sdk/samples/SDKDemo_Contract.java
@@ -1,8 +1,6 @@
package com.jd.blockchain.sdk.samples;
-import com.jd.blockchain.crypto.CryptoAlgorithm;
-import com.jd.blockchain.crypto.CryptoUtils;
-import com.jd.blockchain.crypto.asymmetric.AsymmetricCryptography;
+import com.jd.blockchain.crypto.CryptoServiceProviders;
import com.jd.blockchain.crypto.asymmetric.CryptoKeyPair;
import com.jd.blockchain.crypto.asymmetric.SignatureFunction;
import com.jd.blockchain.crypto.hash.HashDigest;
@@ -24,9 +22,7 @@ import com.jd.blockchain.utils.serialize.json.JSONSerializeUtils;
*/
public class SDKDemo_Contract {
- public static BlockchainKeyPair CLIENT_CERT = BlockchainKeyGenerator.getInstance().generate(CryptoAlgorithm.ED25519);
-
- public static AsymmetricCryptography asymmetricCryptography = CryptoUtils.asymmCrypto();
+ public static BlockchainKeyPair CLIENT_CERT = BlockchainKeyGenerator.getInstance().generate("ED25519");
/**
* 演示合约执行的过程;
@@ -112,7 +108,7 @@ public class SDKDemo_Contract {
* @return
*/
private static CryptoKeyPair getSponsorKey() {
- SignatureFunction signatureFunction = asymmetricCryptography.getSignatureFunction(CryptoAlgorithm.ED25519);
+ SignatureFunction signatureFunction = CryptoServiceProviders.getSignatureFunction("ED25519");
return signatureFunction.generateKeyPair();
}
diff --git a/source/sdk/sdk-samples/src/main/java/com/jd/blockchain/sdk/samples/SDKDemo_DataAccount.java b/source/sdk/sdk-samples/src/main/java/com/jd/blockchain/sdk/samples/SDKDemo_DataAccount.java
index fdcee7c2..7994d38d 100644
--- a/source/sdk/sdk-samples/src/main/java/com/jd/blockchain/sdk/samples/SDKDemo_DataAccount.java
+++ b/source/sdk/sdk-samples/src/main/java/com/jd/blockchain/sdk/samples/SDKDemo_DataAccount.java
@@ -1,8 +1,6 @@
package com.jd.blockchain.sdk.samples;
-import com.jd.blockchain.crypto.CryptoAlgorithm;
-import com.jd.blockchain.crypto.CryptoUtils;
-import com.jd.blockchain.crypto.asymmetric.AsymmetricCryptography;
+import com.jd.blockchain.crypto.CryptoServiceProviders;
import com.jd.blockchain.crypto.asymmetric.CryptoKeyPair;
import com.jd.blockchain.crypto.asymmetric.SignatureFunction;
import com.jd.blockchain.crypto.hash.HashDigest;
@@ -16,9 +14,8 @@ import com.jd.blockchain.utils.net.NetworkAddress;
public class SDKDemo_DataAccount {
- public static BlockchainKeyPair CLIENT_CERT = BlockchainKeyGenerator.getInstance().generate(CryptoAlgorithm.ED25519);
+ public static BlockchainKeyPair CLIENT_CERT = BlockchainKeyGenerator.getInstance().generate("ED25519");
- public static AsymmetricCryptography asymmetricCryptography = CryptoUtils.asymmCrypto();
/**
* 生成一个区块链用户,并注册到区块链;
@@ -54,7 +51,7 @@ public class SDKDemo_DataAccount {
// 在本地产生要注册的账户的秘钥;
BlockchainKeyGenerator generator = BlockchainKeyGenerator.getInstance();
- BlockchainKeyPair dataAccount = generator.generate(CryptoAlgorithm.ED25519);
+ BlockchainKeyPair dataAccount = generator.generate("ED25519");
txTemp.dataAccounts().register(dataAccount.getIdentity());
@@ -77,7 +74,7 @@ public class SDKDemo_DataAccount {
}
private static CryptoKeyPair getSponsorKey() {
- SignatureFunction signatureFunction = asymmetricCryptography.getSignatureFunction(CryptoAlgorithm.ED25519);
+ SignatureFunction signatureFunction = CryptoServiceProviders.getSignatureFunction("ED25519");
return signatureFunction.generateKeyPair();
}
diff --git a/source/sdk/sdk-samples/src/main/java/com/jd/blockchain/sdk/samples/SDKDemo_InsertData.java b/source/sdk/sdk-samples/src/main/java/com/jd/blockchain/sdk/samples/SDKDemo_InsertData.java
index be38f91b..20f1ed5e 100644
--- a/source/sdk/sdk-samples/src/main/java/com/jd/blockchain/sdk/samples/SDKDemo_InsertData.java
+++ b/source/sdk/sdk-samples/src/main/java/com/jd/blockchain/sdk/samples/SDKDemo_InsertData.java
@@ -1,8 +1,6 @@
package com.jd.blockchain.sdk.samples;
-import com.jd.blockchain.crypto.CryptoAlgorithm;
-import com.jd.blockchain.crypto.CryptoUtils;
-import com.jd.blockchain.crypto.asymmetric.AsymmetricCryptography;
+import com.jd.blockchain.crypto.CryptoServiceProviders;
import com.jd.blockchain.crypto.asymmetric.CryptoKeyPair;
import com.jd.blockchain.crypto.asymmetric.SignatureFunction;
import com.jd.blockchain.crypto.hash.HashDigest;
@@ -23,9 +21,8 @@ import com.jd.blockchain.utils.net.NetworkAddress;
*/
public class SDKDemo_InsertData {
- public static BlockchainKeyPair CLIENT_CERT = BlockchainKeyGenerator.getInstance().generate(CryptoAlgorithm.ED25519);
+ public static BlockchainKeyPair CLIENT_CERT = BlockchainKeyGenerator.getInstance().generate("ED25519");
- public static AsymmetricCryptography asymmetricCryptography = CryptoUtils.asymmCrypto();
/**
* 演示数据写入的调用过程;
@@ -83,7 +80,7 @@ public class SDKDemo_InsertData {
}
private static CryptoKeyPair getSponsorKey() {
- SignatureFunction signatureFunction = asymmetricCryptography.getSignatureFunction(CryptoAlgorithm.ED25519);
+ SignatureFunction signatureFunction = CryptoServiceProviders.getSignatureFunction("ED25519");
return signatureFunction.generateKeyPair();
}
diff --git a/source/sdk/sdk-samples/src/main/java/com/jd/blockchain/sdk/samples/SDKDemo_Query.java b/source/sdk/sdk-samples/src/main/java/com/jd/blockchain/sdk/samples/SDKDemo_Query.java
index 7a680ac8..1530af84 100644
--- a/source/sdk/sdk-samples/src/main/java/com/jd/blockchain/sdk/samples/SDKDemo_Query.java
+++ b/source/sdk/sdk-samples/src/main/java/com/jd/blockchain/sdk/samples/SDKDemo_Query.java
@@ -1,7 +1,6 @@
package com.jd.blockchain.sdk.samples;
-import com.jd.blockchain.crypto.CryptoAlgorithm;
-import com.jd.blockchain.crypto.CryptoUtils;
+import com.jd.blockchain.crypto.CryptoServiceProviders;
import com.jd.blockchain.crypto.hash.HashDigest;
import com.jd.blockchain.ledger.BlockchainKeyGenerator;
import com.jd.blockchain.ledger.BlockchainKeyPair;
@@ -21,9 +20,9 @@ import com.jd.blockchain.utils.net.NetworkAddress;
*/
public class SDKDemo_Query {
- public static BlockchainKeyPair CLIENT_CERT = BlockchainKeyGenerator.getInstance().generate(CryptoAlgorithm.ED25519);
+ public static BlockchainKeyPair CLIENT_CERT = BlockchainKeyGenerator.getInstance().generate("ED25519");
- public static final HashDigest LEDGER_HASH = CryptoUtils.hash(CryptoAlgorithm.SHA256)
+ public static final HashDigest LEDGER_HASH = CryptoServiceProviders.getHashFunction("SHA256")
.hash("xkxjcioewfqwe".getBytes());
/**
diff --git a/source/sdk/sdk-samples/src/main/java/com/jd/blockchain/sdk/samples/SDKDemo_User.java b/source/sdk/sdk-samples/src/main/java/com/jd/blockchain/sdk/samples/SDKDemo_User.java
index 7e92dfcd..728a533d 100644
--- a/source/sdk/sdk-samples/src/main/java/com/jd/blockchain/sdk/samples/SDKDemo_User.java
+++ b/source/sdk/sdk-samples/src/main/java/com/jd/blockchain/sdk/samples/SDKDemo_User.java
@@ -1,8 +1,6 @@
package com.jd.blockchain.sdk.samples;
-import com.jd.blockchain.crypto.CryptoAlgorithm;
-import com.jd.blockchain.crypto.CryptoUtils;
-import com.jd.blockchain.crypto.asymmetric.AsymmetricCryptography;
+import com.jd.blockchain.crypto.CryptoServiceProviders;
import com.jd.blockchain.crypto.asymmetric.CryptoKeyPair;
import com.jd.blockchain.crypto.asymmetric.SignatureFunction;
import com.jd.blockchain.crypto.hash.HashDigest;
@@ -18,8 +16,6 @@ public class SDKDemo_User {
public static BlockchainKeyPair CLIENT_CERT = BlockchainKeyGenerator.getInstance().generate();
- public static AsymmetricCryptography asymmetricCryptography = CryptoUtils.asymmCrypto();
-
/**
* 生成一个区块链用户,并注册到区块链;
*/
@@ -67,7 +63,7 @@ public class SDKDemo_User {
//BlockchainKeyGenerator generator = BlockchainKeyGenerator.getInstance();
//BlockchainKeyPair user = generator.generate(CryptoKeyType.PUBLIC);
- SignatureFunction signatureFunction = asymmetricCryptography.getSignatureFunction(CryptoAlgorithm.ED25519);
+ SignatureFunction signatureFunction = CryptoServiceProviders.getSignatureFunction("ED25519");
CryptoKeyPair cryptoKeyPair = signatureFunction.generateKeyPair();
BlockchainKeyPair user = new BlockchainKeyPair(cryptoKeyPair.getPubKey(), cryptoKeyPair.getPrivKey());
@@ -92,7 +88,7 @@ public class SDKDemo_User {
}
private static CryptoKeyPair getSponsorKey() {
- SignatureFunction signatureFunction = asymmetricCryptography.getSignatureFunction(CryptoAlgorithm.ED25519);
+ SignatureFunction signatureFunction = CryptoServiceProviders.getSignatureFunction("ED25519");
return signatureFunction.generateKeyPair();
}
diff --git a/source/sdk/sdk-samples/src/test/java/test/com/jd/blockchain/sdk/test/SDK_GateWay_BatchInsertData_Test_.java b/source/sdk/sdk-samples/src/test/java/test/com/jd/blockchain/sdk/test/SDK_GateWay_BatchInsertData_Test_.java
index ee851828..17404128 100644
--- a/source/sdk/sdk-samples/src/test/java/test/com/jd/blockchain/sdk/test/SDK_GateWay_BatchInsertData_Test_.java
+++ b/source/sdk/sdk-samples/src/test/java/test/com/jd/blockchain/sdk/test/SDK_GateWay_BatchInsertData_Test_.java
@@ -14,12 +14,11 @@ import org.junit.Before;
import org.junit.Test;
import com.jd.blockchain.binaryproto.DataContractRegistry;
-import com.jd.blockchain.crypto.CryptoAlgorithm;
-import com.jd.blockchain.crypto.CryptoUtils;
-import com.jd.blockchain.crypto.asymmetric.AsymmetricCryptography;
+import com.jd.blockchain.crypto.CryptoServiceProviders;
import com.jd.blockchain.crypto.asymmetric.CryptoKeyPair;
import com.jd.blockchain.crypto.asymmetric.SignatureFunction;
import com.jd.blockchain.crypto.hash.HashDigest;
+import com.jd.blockchain.crypto.hash.HashFunction;
import com.jd.blockchain.ledger.BlockchainKeyGenerator;
import com.jd.blockchain.ledger.BlockchainKeyPair;
import com.jd.blockchain.ledger.EndpointRequest;
@@ -57,11 +56,10 @@ public class SDK_GateWay_BatchInsertData_Test_ {
private BlockchainTransactionService service;
- private AsymmetricCryptography asymmetricCryptography = CryptoUtils.asymmCrypto();
@Before
public void init() {
- CLIENT_CERT = BlockchainKeyGenerator.getInstance().generate(CryptoAlgorithm.ED25519);
+ CLIENT_CERT = BlockchainKeyGenerator.getInstance().generate("ED25519");
GATEWAY_IPADDR = "127.0.0.1";
GATEWAY_PORT = 8000;
SECURE = false;
@@ -126,13 +124,14 @@ public class SDK_GateWay_BatchInsertData_Test_ {
private CryptoKeyPair getSponsorKey() {
- SignatureFunction signatureFunction = asymmetricCryptography.getSignatureFunction(CryptoAlgorithm.ED25519);
+ SignatureFunction signatureFunction = CryptoServiceProviders.getSignatureFunction("ED25519");
return signatureFunction.generateKeyPair();
}
private TransactionResponse initResponse() {
- HashDigest contentHash = new HashDigest(CryptoAlgorithm.SHA256, "contentHash".getBytes());
- HashDigest blockHash = new HashDigest(CryptoAlgorithm.SHA256, "blockHash".getBytes());
+ HashFunction hashFunc = CryptoServiceProviders.getHashFunction("SHA256");;
+ HashDigest contentHash = hashFunc.hash("contentHash".getBytes());
+ HashDigest blockHash = hashFunc.hash("blockHash".getBytes());
long blockHeight = 9998L;
TxResponseMessage resp = new TxResponseMessage(contentHash);
diff --git a/source/sdk/sdk-samples/src/test/java/test/com/jd/blockchain/sdk/test/SDK_GateWay_DataAccount_Test_.java b/source/sdk/sdk-samples/src/test/java/test/com/jd/blockchain/sdk/test/SDK_GateWay_DataAccount_Test_.java
index b203d2e4..6c762756 100644
--- a/source/sdk/sdk-samples/src/test/java/test/com/jd/blockchain/sdk/test/SDK_GateWay_DataAccount_Test_.java
+++ b/source/sdk/sdk-samples/src/test/java/test/com/jd/blockchain/sdk/test/SDK_GateWay_DataAccount_Test_.java
@@ -12,12 +12,11 @@ import org.junit.Before;
import org.junit.Test;
import com.jd.blockchain.binaryproto.DataContractRegistry;
-import com.jd.blockchain.crypto.CryptoAlgorithm;
-import com.jd.blockchain.crypto.CryptoUtils;
-import com.jd.blockchain.crypto.asymmetric.AsymmetricCryptography;
+import com.jd.blockchain.crypto.CryptoServiceProviders;
import com.jd.blockchain.crypto.asymmetric.CryptoKeyPair;
import com.jd.blockchain.crypto.asymmetric.SignatureFunction;
import com.jd.blockchain.crypto.hash.HashDigest;
+import com.jd.blockchain.crypto.hash.HashFunction;
import com.jd.blockchain.ledger.BlockchainKeyGenerator;
import com.jd.blockchain.ledger.BlockchainKeyPair;
import com.jd.blockchain.ledger.EndpointRequest;
@@ -52,8 +51,6 @@ public class SDK_GateWay_DataAccount_Test_ {
private BlockchainService service;
- private AsymmetricCryptography asymmetricCryptography = CryptoUtils.asymmCrypto();
-
@Before
public void init() {
CLIENT_CERT = new BlockchainKeyPair(SDK_GateWay_KeyPair_Para.pubKey0, SDK_GateWay_KeyPair_Para.privkey0);
@@ -112,12 +109,13 @@ public class SDK_GateWay_DataAccount_Test_ {
}
private HashDigest getLedgerHash() {
- HashDigest ledgerHash = new HashDigest(CryptoAlgorithm.SHA256, "jd-gateway".getBytes());
+ HashFunction hashFunc = CryptoServiceProviders.getHashFunction("SHA256");;
+ HashDigest ledgerHash =hashFunc.hash("jd-gateway".getBytes());
return ledgerHash;
}
private SignatureFunction getSignatureFunction() {
- return asymmetricCryptography.getSignatureFunction(CryptoAlgorithm.ED25519);
+ return CryptoServiceProviders.getSignatureFunction("ED25519");
}
private CryptoKeyPair getSponsorKey() {
@@ -125,8 +123,9 @@ public class SDK_GateWay_DataAccount_Test_ {
}
private TransactionResponse initResponse() {
- HashDigest contentHash = new HashDigest(CryptoAlgorithm.SHA256, "contentHash".getBytes());
- HashDigest blockHash = new HashDigest(CryptoAlgorithm.SHA256, "blockHash".getBytes());
+ HashFunction hashFunc = CryptoServiceProviders.getHashFunction("SHA256");;
+ HashDigest contentHash = hashFunc.hash("contentHash".getBytes());
+ HashDigest blockHash = hashFunc.hash("blockHash".getBytes());
long blockHeight = 9998L;
TxResponseMessage resp = new TxResponseMessage(contentHash);
diff --git a/source/sdk/sdk-samples/src/test/java/test/com/jd/blockchain/sdk/test/SDK_GateWay_InsertData_Test_.java b/source/sdk/sdk-samples/src/test/java/test/com/jd/blockchain/sdk/test/SDK_GateWay_InsertData_Test_.java
index 578c8143..11ce07ad 100644
--- a/source/sdk/sdk-samples/src/test/java/test/com/jd/blockchain/sdk/test/SDK_GateWay_InsertData_Test_.java
+++ b/source/sdk/sdk-samples/src/test/java/test/com/jd/blockchain/sdk/test/SDK_GateWay_InsertData_Test_.java
@@ -14,12 +14,11 @@ import org.junit.Before;
import org.junit.Test;
import com.jd.blockchain.binaryproto.DataContractRegistry;
-import com.jd.blockchain.crypto.CryptoAlgorithm;
-import com.jd.blockchain.crypto.CryptoUtils;
-import com.jd.blockchain.crypto.asymmetric.AsymmetricCryptography;
+import com.jd.blockchain.crypto.CryptoServiceProviders;
import com.jd.blockchain.crypto.asymmetric.CryptoKeyPair;
import com.jd.blockchain.crypto.asymmetric.SignatureFunction;
import com.jd.blockchain.crypto.hash.HashDigest;
+import com.jd.blockchain.crypto.hash.HashFunction;
import com.jd.blockchain.ledger.BlockchainKeyGenerator;
import com.jd.blockchain.ledger.BlockchainKeyPair;
import com.jd.blockchain.ledger.EndpointRequest;
@@ -54,11 +53,10 @@ public class SDK_GateWay_InsertData_Test_ {
private BlockchainTransactionService service;
- private AsymmetricCryptography asymmetricCryptography = CryptoUtils.asymmCrypto();
@Before
public void init() {
- CLIENT_CERT = BlockchainKeyGenerator.getInstance().generate(CryptoAlgorithm.ED25519);
+ CLIENT_CERT = BlockchainKeyGenerator.getInstance().generate("ED25519");
GATEWAY_IPADDR = "127.0.0.1";
GATEWAY_PORT = 8000;
SECURE = false;
@@ -113,19 +111,21 @@ public class SDK_GateWay_InsertData_Test_ {
}
private HashDigest getLedgerHash() {
- HashDigest ledgerHash = new HashDigest(CryptoAlgorithm.SHA256, "jd-gateway".getBytes());
+ HashFunction hashFunc = CryptoServiceProviders.getHashFunction("SHA256");
+ HashDigest ledgerHash = hashFunc.hash("jd-gateway".getBytes());
return ledgerHash;
}
private CryptoKeyPair getSponsorKey() {
- SignatureFunction signatureFunction = asymmetricCryptography.getSignatureFunction(CryptoAlgorithm.ED25519);
+ SignatureFunction signatureFunction = CryptoServiceProviders.getSignatureFunction("ED25519");
return signatureFunction.generateKeyPair();
}
private TransactionResponse initResponse() {
- HashDigest contentHash = new HashDigest(CryptoAlgorithm.SHA256, "contentHash".getBytes());
- HashDigest blockHash = new HashDigest(CryptoAlgorithm.SHA256, "blockHash".getBytes());
+ HashFunction hashFunc = CryptoServiceProviders.getHashFunction("SHA256");
+ HashDigest contentHash = hashFunc.hash("contentHash".getBytes());
+ HashDigest blockHash = hashFunc.hash("blockHash".getBytes());
long blockHeight = 9998L;
TxResponseMessage resp = new TxResponseMessage(contentHash);
diff --git a/source/sdk/sdk-samples/src/test/java/test/com/jd/blockchain/sdk/test/SDK_GateWay_Query_Test_.java b/source/sdk/sdk-samples/src/test/java/test/com/jd/blockchain/sdk/test/SDK_GateWay_Query_Test_.java
index d3782d98..03017ef6 100644
--- a/source/sdk/sdk-samples/src/test/java/test/com/jd/blockchain/sdk/test/SDK_GateWay_Query_Test_.java
+++ b/source/sdk/sdk-samples/src/test/java/test/com/jd/blockchain/sdk/test/SDK_GateWay_Query_Test_.java
@@ -12,14 +12,13 @@ import org.junit.Before;
import org.junit.Test;
import com.jd.blockchain.binaryproto.DataContractRegistry;
-import com.jd.blockchain.crypto.CryptoAlgorithm;
-import com.jd.blockchain.crypto.CryptoUtils;
+import com.jd.blockchain.crypto.CryptoServiceProviders;
import com.jd.blockchain.crypto.PubKey;
-import com.jd.blockchain.crypto.asymmetric.AsymmetricCryptography;
import com.jd.blockchain.crypto.asymmetric.CryptoKeyPair;
import com.jd.blockchain.crypto.asymmetric.SignatureDigest;
import com.jd.blockchain.crypto.asymmetric.SignatureFunction;
import com.jd.blockchain.crypto.hash.HashDigest;
+import com.jd.blockchain.crypto.hash.HashFunction;
import com.jd.blockchain.crypto.serialize.ByteArrayObjectDeserializer;
import com.jd.blockchain.crypto.serialize.ByteArrayObjectSerializer;
import com.jd.blockchain.ledger.AccountHeader;
@@ -46,6 +45,7 @@ import com.jd.blockchain.utils.serialize.json.JSONSerializeUtils;
/**
* 插入数据测试
+ *
* @author shaozhuguang
* @create 2018/9/4
* @since 1.0.0
@@ -53,153 +53,155 @@ import com.jd.blockchain.utils.serialize.json.JSONSerializeUtils;
public class SDK_GateWay_Query_Test_ {
- private static Class>[] byteArrayClasss = new Class>[]{HashDigest.class, PubKey.class, SignatureDigest.class};
-
- static {
- for (Class> byteArrayClass : byteArrayClasss) {
- JSONSerializeUtils.configSerialization(byteArrayClass,
- ByteArrayObjectSerializer.getInstance(byteArrayClass),
- ByteArrayObjectDeserializer.getInstance(byteArrayClass));
- }
- }
-
- private BlockchainKeyPair CLIENT_CERT = null;
-
- private String GATEWAY_IPADDR = null;
-
- private int GATEWAY_PORT;
-
- private boolean SECURE;
-
- private BlockchainService service;
-
- private AsymmetricCryptography asymmetricCryptography = CryptoUtils.asymmCrypto();
-
- @Before
- public void init() {
- CLIENT_CERT = BlockchainKeyGenerator.getInstance().generate(CryptoAlgorithm.ED25519);
- GATEWAY_IPADDR = "127.0.0.1";
- GATEWAY_PORT = 11000;
- SECURE = false;
- GatewayServiceFactory serviceFactory = GatewayServiceFactory.connect(GATEWAY_IPADDR, GATEWAY_PORT, SECURE,
- CLIENT_CERT);
- service = serviceFactory.getBlockchainService();
-
- DataContractRegistry.register(TransactionContent.class);
- DataContractRegistry.register(TransactionContentBody.class);
- DataContractRegistry.register(TransactionRequest.class);
- DataContractRegistry.register(NodeRequest.class);
- DataContractRegistry.register(EndpointRequest.class);
- DataContractRegistry.register(TransactionResponse.class);
- }
-
- @Test
- public void query_Test() {
-
- HashDigest ledgerHash = service.getLedgerHashs()[0];;
-// ParserConfig.global.setAutoTypeSupport(true);
-
- LedgerInfo ledgerInfo = service.getLedger(ledgerHash);
- long ledgerNumber = ledgerInfo.getLatestBlockHeight();
- System.out.println(ledgerNumber);
- HashDigest hashDigest = ledgerInfo.getHash();
- System.out.println(hashDigest);
-// 最新区块;
- LedgerBlock latestBlock = service.getBlock(ledgerHash, ledgerNumber);
- System.out.println("latestBlock.Hash=" + latestBlock.getHash());
- long count = service.getContractCount(ledgerHash, 3L);
- System.out.println("contractCount=" + count);
- count = service.getContractCount(ledgerHash, hashDigest);
- System.out.println("contractCount=" + count);
- AccountHeader contract = service.getContract(ledgerHash, "12345678");
- System.out.println(contract);
-
- LedgerBlock block = service.getBlock(ledgerHash, hashDigest);
- System.out.println("block.Hash=" + block.getHash());
-
- count = service.getDataAccountCount(ledgerHash, 123456);
- System.out.println("dataAccountCount=" + count);
- count = service.getDataAccountCount(ledgerHash, hashDigest);
- System.out.println("dataAccountCount=" + count);
-
- AccountHeader dataAccount = service.getDataAccount(ledgerHash, "1245633");
- System.out.println(dataAccount.getAddress());
-
- count = service.getTransactionCount(ledgerHash, hashDigest);
- System.out.println("transactionCount=" + count);
- count = service.getTransactionCount(ledgerHash, 12456);
- System.out.println("transactionCount=" + count);
-
- LedgerTransaction[] txList = service.getTransactions(ledgerHash, ledgerNumber, 0, 100);
- for (LedgerTransaction ledgerTransaction : txList) {
- System.out.println("ledgerTransaction.Hash=" + ledgerTransaction.getHash());
- }
-
- txList = service.getTransactions(ledgerHash, hashDigest, 0, 100);
- for (LedgerTransaction ledgerTransaction : txList) {
- System.out.println("ledgerTransaction.Hash=" + ledgerTransaction.getHash());
- }
-
- Transaction tx = service.getTransactionByContentHash(ledgerHash, hashDigest);
- DigitalSignature[] signatures = tx.getEndpointSignatures();
- for (DigitalSignature signature : signatures) {
- System.out.println(signature.getDigest().getAlgorithm());
- }
- System.out.println("transaction.blockHeight=" + tx.getBlockHeight());
- System.out.println("transaction.executionState=" + tx.getExecutionState());
-
-
- ParticipantNode[] participants = service.getConsensusParticipants(ledgerHash);
- for (ParticipantNode participant : participants) {
- System.out.println("participant.name=" + participant.getName());
-// System.out.println(participant.getConsensusAddress());
-// System.out.println("participant.host=" + participant.getConsensusAddress().getHost());
- System.out.println("participant.getPubKey=" + participant.getPubKey());
- System.out.println("participant.getKeyType=" + participant.getPubKey().getKeyType());
- System.out.println("participant.getRawKeyBytes=" + participant.getPubKey().getRawKeyBytes());
- System.out.println("participant.algorithm=" + participant.getPubKey().getAlgorithm());
- }
-
- String commerceAccount = "GGhhreGeasdfasfUUfehf9932lkae99ds66jf==";
- String[] objKeys = new String[] { "x001", "x002" };
- KVDataEntry[] kvData = service.getDataEntries(ledgerHash, commerceAccount, objKeys);
- for (KVDataEntry kvDatum : kvData) {
- System.out.println("kvData.key=" + kvDatum.getKey());
- System.out.println("kvData.version=" + kvDatum.getVersion());
- System.out.println("kvData.value=" + kvDatum.getValue());
- }
-
- HashDigest[] hashs = service.getLedgerHashs();
- for (HashDigest hash : hashs) {
- System.out.println("hash.toBase58=" + hash.toBase58());
- }
- }
-
- private HashDigest getLedgerHash() {
- HashDigest ledgerHash = new HashDigest(CryptoAlgorithm.SHA256, "jd-gateway".getBytes());
- return ledgerHash;
- }
-
- private SignatureFunction getSignatureFunction() {
- return asymmetricCryptography.getSignatureFunction(CryptoAlgorithm.ED25519);
- }
-
- private BlockchainKeyPair getSponsorKey() {
- SignatureFunction signatureFunction = asymmetricCryptography.getSignatureFunction(CryptoAlgorithm.ED25519);
- CryptoKeyPair cryptoKeyPair = signatureFunction.generateKeyPair();
- BlockchainKeyPair blockchainKeyPair = new BlockchainKeyPair(cryptoKeyPair.getPubKey(), cryptoKeyPair.getPrivKey());
- return blockchainKeyPair;
- }
-
- private TransactionResponse initResponse() {
- HashDigest contentHash = new HashDigest(CryptoAlgorithm.SHA256, "contentHash".getBytes());
- HashDigest blockHash = new HashDigest(CryptoAlgorithm.SHA256, "blockHash".getBytes());
- long blockHeight = 9998L;
-
- TxResponseMessage resp = new TxResponseMessage(contentHash);
- resp.setBlockHash(blockHash);
- resp.setBlockHeight(blockHeight);
- resp.setExecutionState(TransactionState.SUCCESS);
- return resp;
- }
+ private static Class>[] byteArrayClasss = new Class>[] { HashDigest.class, PubKey.class,
+ SignatureDigest.class };
+
+ static {
+ for (Class> byteArrayClass : byteArrayClasss) {
+ JSONSerializeUtils.configSerialization(byteArrayClass,
+ ByteArrayObjectSerializer.getInstance(byteArrayClass),
+ ByteArrayObjectDeserializer.getInstance(byteArrayClass));
+ }
+ }
+
+ private BlockchainKeyPair CLIENT_CERT = null;
+
+ private String GATEWAY_IPADDR = null;
+
+ private int GATEWAY_PORT;
+
+ private boolean SECURE;
+
+ private BlockchainService service;
+
+ @Before
+ public void init() {
+ CLIENT_CERT = BlockchainKeyGenerator.getInstance().generate("ED25519");
+ GATEWAY_IPADDR = "127.0.0.1";
+ GATEWAY_PORT = 11000;
+ SECURE = false;
+ GatewayServiceFactory serviceFactory = GatewayServiceFactory.connect(GATEWAY_IPADDR, GATEWAY_PORT, SECURE,
+ CLIENT_CERT);
+ service = serviceFactory.getBlockchainService();
+
+ DataContractRegistry.register(TransactionContent.class);
+ DataContractRegistry.register(TransactionContentBody.class);
+ DataContractRegistry.register(TransactionRequest.class);
+ DataContractRegistry.register(NodeRequest.class);
+ DataContractRegistry.register(EndpointRequest.class);
+ DataContractRegistry.register(TransactionResponse.class);
+ }
+
+ @Test
+ public void query_Test() {
+
+ HashDigest ledgerHash = service.getLedgerHashs()[0];
+ ;
+ // ParserConfig.global.setAutoTypeSupport(true);
+
+ LedgerInfo ledgerInfo = service.getLedger(ledgerHash);
+ long ledgerNumber = ledgerInfo.getLatestBlockHeight();
+ System.out.println(ledgerNumber);
+ HashDigest hashDigest = ledgerInfo.getHash();
+ System.out.println(hashDigest);
+ // 最新区块;
+ LedgerBlock latestBlock = service.getBlock(ledgerHash, ledgerNumber);
+ System.out.println("latestBlock.Hash=" + latestBlock.getHash());
+ long count = service.getContractCount(ledgerHash, 3L);
+ System.out.println("contractCount=" + count);
+ count = service.getContractCount(ledgerHash, hashDigest);
+ System.out.println("contractCount=" + count);
+ AccountHeader contract = service.getContract(ledgerHash, "12345678");
+ System.out.println(contract);
+
+ LedgerBlock block = service.getBlock(ledgerHash, hashDigest);
+ System.out.println("block.Hash=" + block.getHash());
+
+ count = service.getDataAccountCount(ledgerHash, 123456);
+ System.out.println("dataAccountCount=" + count);
+ count = service.getDataAccountCount(ledgerHash, hashDigest);
+ System.out.println("dataAccountCount=" + count);
+
+ AccountHeader dataAccount = service.getDataAccount(ledgerHash, "1245633");
+ System.out.println(dataAccount.getAddress());
+
+ count = service.getTransactionCount(ledgerHash, hashDigest);
+ System.out.println("transactionCount=" + count);
+ count = service.getTransactionCount(ledgerHash, 12456);
+ System.out.println("transactionCount=" + count);
+
+ LedgerTransaction[] txList = service.getTransactions(ledgerHash, ledgerNumber, 0, 100);
+ for (LedgerTransaction ledgerTransaction : txList) {
+ System.out.println("ledgerTransaction.Hash=" + ledgerTransaction.getHash());
+ }
+
+ txList = service.getTransactions(ledgerHash, hashDigest, 0, 100);
+ for (LedgerTransaction ledgerTransaction : txList) {
+ System.out.println("ledgerTransaction.Hash=" + ledgerTransaction.getHash());
+ }
+
+ Transaction tx = service.getTransactionByContentHash(ledgerHash, hashDigest);
+ DigitalSignature[] signatures = tx.getEndpointSignatures();
+ for (DigitalSignature signature : signatures) {
+ System.out.println(signature.getDigest().getAlgorithm());
+ }
+ System.out.println("transaction.blockHeight=" + tx.getBlockHeight());
+ System.out.println("transaction.executionState=" + tx.getExecutionState());
+
+ ParticipantNode[] participants = service.getConsensusParticipants(ledgerHash);
+ for (ParticipantNode participant : participants) {
+ System.out.println("participant.name=" + participant.getName());
+ // System.out.println(participant.getConsensusAddress());
+ // System.out.println("participant.host=" +
+ // participant.getConsensusAddress().getHost());
+ System.out.println("participant.getPubKey=" + participant.getPubKey());
+ System.out.println("participant.getKeyType=" + participant.getPubKey().getKeyType());
+ System.out.println("participant.getRawKeyBytes=" + participant.getPubKey().getRawKeyBytes());
+ System.out.println("participant.algorithm=" + participant.getPubKey().getAlgorithm());
+ }
+
+ String commerceAccount = "GGhhreGeasdfasfUUfehf9932lkae99ds66jf==";
+ String[] objKeys = new String[] { "x001", "x002" };
+ KVDataEntry[] kvData = service.getDataEntries(ledgerHash, commerceAccount, objKeys);
+ for (KVDataEntry kvDatum : kvData) {
+ System.out.println("kvData.key=" + kvDatum.getKey());
+ System.out.println("kvData.version=" + kvDatum.getVersion());
+ System.out.println("kvData.value=" + kvDatum.getValue());
+ }
+
+ HashDigest[] hashs = service.getLedgerHashs();
+ for (HashDigest hash : hashs) {
+ System.out.println("hash.toBase58=" + hash.toBase58());
+ }
+ }
+
+ private HashDigest getLedgerHash() {
+ HashDigest ledgerHash = CryptoServiceProviders.getHashFunction("SHA256").hash("jd-gateway".getBytes());
+ return ledgerHash;
+ }
+
+ private SignatureFunction getSignatureFunction() {
+ return CryptoServiceProviders.getSignatureFunction("ED25519");
+ }
+
+ private BlockchainKeyPair getSponsorKey() {
+ SignatureFunction signatureFunction = getSignatureFunction();
+ CryptoKeyPair cryptoKeyPair = signatureFunction.generateKeyPair();
+ BlockchainKeyPair blockchainKeyPair = new BlockchainKeyPair(cryptoKeyPair.getPubKey(),
+ cryptoKeyPair.getPrivKey());
+ return blockchainKeyPair;
+ }
+
+ private TransactionResponse initResponse() {
+ HashFunction hashFunc = CryptoServiceProviders.getHashFunction("SHA256");
+ HashDigest contentHash = hashFunc.hash("contentHash".getBytes());
+ HashDigest blockHash = hashFunc.hash("blockHash".getBytes());
+ long blockHeight = 9998L;
+
+ TxResponseMessage resp = new TxResponseMessage(contentHash);
+ resp.setBlockHash(blockHash);
+ resp.setBlockHeight(blockHeight);
+ resp.setExecutionState(TransactionState.SUCCESS);
+ return resp;
+ }
}
\ No newline at end of file
diff --git a/source/sdk/sdk-samples/src/test/java/test/com/jd/blockchain/sdk/test/SDK_GateWay_User_Test_.java b/source/sdk/sdk-samples/src/test/java/test/com/jd/blockchain/sdk/test/SDK_GateWay_User_Test_.java
index 74892d75..9d7b3bc9 100644
--- a/source/sdk/sdk-samples/src/test/java/test/com/jd/blockchain/sdk/test/SDK_GateWay_User_Test_.java
+++ b/source/sdk/sdk-samples/src/test/java/test/com/jd/blockchain/sdk/test/SDK_GateWay_User_Test_.java
@@ -14,14 +14,13 @@ import org.junit.Before;
import org.junit.Test;
import com.jd.blockchain.binaryproto.DataContractRegistry;
-import com.jd.blockchain.crypto.CryptoAlgorithm;
-import com.jd.blockchain.crypto.CryptoUtils;
+import com.jd.blockchain.crypto.CryptoServiceProviders;
import com.jd.blockchain.crypto.PrivKey;
import com.jd.blockchain.crypto.PubKey;
-import com.jd.blockchain.crypto.asymmetric.AsymmetricCryptography;
import com.jd.blockchain.crypto.asymmetric.CryptoKeyPair;
import com.jd.blockchain.crypto.asymmetric.SignatureFunction;
import com.jd.blockchain.crypto.hash.HashDigest;
+import com.jd.blockchain.crypto.hash.HashFunction;
import com.jd.blockchain.ledger.BlockchainKeyGenerator;
import com.jd.blockchain.ledger.BlockchainKeyPair;
import com.jd.blockchain.ledger.EndpointRequest;
@@ -65,8 +64,6 @@ public class SDK_GateWay_User_Test_ {
private BlockchainService service;
- private AsymmetricCryptography asymmetricCryptography = CryptoUtils.asymmCrypto();
-
@Before
public void init() {
@@ -141,13 +138,14 @@ public class SDK_GateWay_User_Test_ {
// }
private CryptoKeyPair getSponsorKey() {
- SignatureFunction signatureFunction = asymmetricCryptography.getSignatureFunction(CryptoAlgorithm.ED25519);
+ SignatureFunction signatureFunction = CryptoServiceProviders.getSignatureFunction("ED25519");
return signatureFunction.generateKeyPair();
}
private TransactionResponse initResponse() {
- HashDigest contentHash = new HashDigest(CryptoAlgorithm.SHA256, "contentHash".getBytes());
- HashDigest blockHash = new HashDigest(CryptoAlgorithm.SHA256, "blockHash".getBytes());
+ HashFunction hashFunc = CryptoServiceProviders.getHashFunction("SHA256");;
+ HashDigest contentHash = hashFunc.hash("contentHash".getBytes());
+ HashDigest blockHash = hashFunc.hash("blockHash".getBytes());
long blockHeight = 9998L;
TxResponseMessage resp = new TxResponseMessage(contentHash);