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