# Conflicts: # source/base/pom.xml # source/binary-proto/pom.xml # source/consensus/consensus-bftsmart/pom.xml # source/consensus/consensus-framework/pom.xml # source/consensus/consensus-mq/pom.xml # source/consensus/pom.xml # source/contract/contract-framework/pom.xml # source/contract/contract-jvm/pom.xml # source/contract/contract-maven-plugin/pom.xml # source/contract/contract-samples/pom.xml # source/contract/pom.xml # source/crypto/crypto-adv/pom.xml # source/crypto/crypto-classic/pom.xml # source/crypto/crypto-framework/pom.xml # source/crypto/crypto-pki/pom.xml # source/crypto/crypto-sm/pom.xml # source/crypto/pom.xml # source/deployment/deployment-gateway/pom.xml # source/deployment/deployment-peer/pom.xml # source/deployment/pom.xml # source/gateway/pom.xml # source/ledger/ledger-core/pom.xml # source/ledger/ledger-model/pom.xml # source/ledger/ledger-rpc/pom.xml # source/ledger/pom.xml # source/peer/pom.xml # source/pom.xml # source/runtime/pom.xml # source/runtime/runtime-context/pom.xml # source/runtime/runtime-modular-booter/pom.xml # source/runtime/runtime-modular/pom.xml # source/sdk/pom.xml # source/sdk/sdk-base/pom.xml # source/sdk/sdk-client/pom.xml # source/sdk/sdk-samples/pom.xml # source/storage/pom.xml # source/storage/storage-composite/pom.xml # source/storage/storage-redis/pom.xml # source/storage/storage-rocksdb/pom.xml # source/storage/storage-service/pom.xml # source/test/pom.xml # source/test/test-consensus-client/pom.xml # source/test/test-consensus-node/pom.xml # source/test/test-integration/pom.xml # source/test/test-ledger-core/pom.xml # source/tools/pom.xml # source/tools/tools-capability/pom.xml # source/tools/tools-initializer-booter/pom.xml # source/tools/tools-initializer/pom.xml # source/tools/tools-keygen-booter/pom.xml # source/tools/tools-keygen/pom.xml # source/tools/tools-mocker/pom.xml # source/utils/pom.xml # source/utils/utils-common/pom.xml # source/utils/utils-http/pom.xml # source/utils/utils-serialize/pom.xml # source/utils/utils-test/pom.xml # source/utils/utils-web-server/pom.xml # source/utils/utils-web/pom.xmltags/1.1.0
@@ -33,6 +33,8 @@ public class BftsmartNodeServer extends DefaultRecoverable implements NodeServer | |||||
private static Logger LOGGER = LoggerFactory.getLogger(BftsmartNodeServer.class); | private static Logger LOGGER = LoggerFactory.getLogger(BftsmartNodeServer.class); | ||||
private static final String DEFAULT_BINDING_HOST = "0.0.0.0"; | |||||
private List<StateHandle> stateHandles = new CopyOnWriteArrayList<>(); | private List<StateHandle> stateHandles = new CopyOnWriteArrayList<>(); | ||||
// TODO 暂不处理队列溢出问题 | // TODO 暂不处理队列溢出问题 | ||||
@@ -127,6 +129,8 @@ public class BftsmartNodeServer extends DefaultRecoverable implements NodeServer | |||||
protected void initConfig(int id, Properties systemsConfig, HostsConfig hostConfig) { | protected void initConfig(int id, Properties systemsConfig, HostsConfig hostConfig) { | ||||
byte[] serialHostConf = BinarySerializeUtils.serialize(hostConfig); | byte[] serialHostConf = BinarySerializeUtils.serialize(hostConfig); | ||||
Properties sysConfClone = (Properties)systemsConfig.clone(); | Properties sysConfClone = (Properties)systemsConfig.clone(); | ||||
int port = hostConfig.getPort(id); | |||||
hostConfig.add(id, DEFAULT_BINDING_HOST, port); | |||||
this.tomConfig = new TOMConfiguration(id, systemsConfig, hostConfig); | this.tomConfig = new TOMConfiguration(id, systemsConfig, hostConfig); | ||||
this.outerTomConfig = new TOMConfiguration(id, sysConfClone, BinarySerializeUtils.deserialize(serialHostConf)); | this.outerTomConfig = new TOMConfiguration(id, sysConfClone, BinarySerializeUtils.deserialize(serialHostConf)); | ||||
} | } | ||||
@@ -1,5 +1,7 @@ | |||||
package com.jd.blockchain.gateway.web; | package com.jd.blockchain.gateway.web; | ||||
import com.jd.blockchain.crypto.*; | |||||
import com.jd.blockchain.transaction.SignatureUtils; | |||||
import org.springframework.beans.factory.annotation.Autowired; | import org.springframework.beans.factory.annotation.Autowired; | ||||
import org.springframework.web.bind.annotation.RequestBody; | import org.springframework.web.bind.annotation.RequestBody; | ||||
import org.springframework.web.bind.annotation.RequestMapping; | import org.springframework.web.bind.annotation.RequestMapping; | ||||
@@ -8,9 +10,6 @@ import org.springframework.web.bind.annotation.ResponseBody; | |||||
import org.springframework.web.bind.annotation.RestController; | import org.springframework.web.bind.annotation.RestController; | ||||
import com.jd.blockchain.binaryproto.BinaryProtocol; | import com.jd.blockchain.binaryproto.BinaryProtocol; | ||||
import com.jd.blockchain.crypto.Crypto; | |||||
import com.jd.blockchain.crypto.HashDigest; | |||||
import com.jd.blockchain.crypto.SignatureFunction; | |||||
import com.jd.blockchain.gateway.PeerService; | import com.jd.blockchain.gateway.PeerService; | ||||
import com.jd.blockchain.ledger.DigitalSignature; | import com.jd.blockchain.ledger.DigitalSignature; | ||||
import com.jd.blockchain.ledger.TransactionContent; | import com.jd.blockchain.ledger.TransactionContent; | ||||
@@ -53,11 +52,8 @@ public class TxProcessingController implements TransactionService { | |||||
throw new IllegalStateException("Not implemented!"); | throw new IllegalStateException("Not implemented!"); | ||||
} else { | } else { | ||||
// 验证签名; | // 验证签名; | ||||
byte[] content = BinaryProtocol.encode(txRequest.getTransactionContent(), TransactionContent.class); | |||||
for (DigitalSignature sign : partiSigns) { | for (DigitalSignature sign : partiSigns) { | ||||
SignatureFunction signFunc = Crypto | |||||
.getSignatureFunction(sign.getPubKey().getAlgorithm()); | |||||
if (!signFunc.verify(sign.getDigest(), sign.getPubKey(), content)) { | |||||
if (!SignatureUtils.verifySignature(txRequest.getTransactionContent(), sign.getDigest(), sign.getPubKey())) { | |||||
throw new BusinessException("The validation of participant signatures fail!"); | throw new BusinessException("The validation of participant signatures fail!"); | ||||
} | } | ||||
} | } | ||||
@@ -28,6 +28,7 @@ import com.jd.blockchain.ledger.core.TransactionSet; | |||||
import com.jd.blockchain.storage.service.ExPolicyKVStorage; | import com.jd.blockchain.storage.service.ExPolicyKVStorage; | ||||
import com.jd.blockchain.storage.service.VersioningKVStorage; | import com.jd.blockchain.storage.service.VersioningKVStorage; | ||||
import com.jd.blockchain.storage.service.utils.BufferedKVStorage; | import com.jd.blockchain.storage.service.utils.BufferedKVStorage; | ||||
import com.jd.blockchain.transaction.SignatureUtils; | |||||
import com.jd.blockchain.transaction.TxBuilder; | import com.jd.blockchain.transaction.TxBuilder; | ||||
import com.jd.blockchain.transaction.TxRequestBuilder; | import com.jd.blockchain.transaction.TxRequestBuilder; | ||||
import com.jd.blockchain.utils.Bytes; | import com.jd.blockchain.utils.Bytes; | ||||
@@ -205,7 +206,7 @@ public class LedgerTransactionalEditor implements LedgerEditor { | |||||
DigitalSignature[] endpointSignatures = request.getEndpointSignatures(); | DigitalSignature[] endpointSignatures = request.getEndpointSignatures(); | ||||
if (endpointSignatures != null) { | if (endpointSignatures != null) { | ||||
for (DigitalSignature signature : endpointSignatures) { | for (DigitalSignature signature : endpointSignatures) { | ||||
if (!TxRequestBuilder.verifyHashSignature(txContent.getHash(), signature.getDigest(), | |||||
if (!SignatureUtils.verifyHashSignature(txContent.getHash(), signature.getDigest(), | |||||
signature.getPubKey())) { | signature.getPubKey())) { | ||||
return false; | return false; | ||||
} | } | ||||
@@ -214,7 +215,7 @@ public class LedgerTransactionalEditor implements LedgerEditor { | |||||
DigitalSignature[] nodeSignatures = request.getNodeSignatures(); | DigitalSignature[] nodeSignatures = request.getNodeSignatures(); | ||||
if (nodeSignatures != null) { | if (nodeSignatures != null) { | ||||
for (DigitalSignature signature : nodeSignatures) { | for (DigitalSignature signature : nodeSignatures) { | ||||
if (!TxRequestBuilder.verifyHashSignature(txContent.getHash(), signature.getDigest(), | |||||
if (!SignatureUtils.verifyHashSignature(txContent.getHash(), signature.getDigest(), | |||||
signature.getPubKey())) { | signature.getPubKey())) { | ||||
return false; | return false; | ||||
} | } | ||||
@@ -68,11 +68,7 @@ public class PreparedTx implements PreparedTransaction { | |||||
@Override | @Override | ||||
public DigitalSignature sign(AsymmetricKeypair keyPair) { | public DigitalSignature sign(AsymmetricKeypair keyPair) { | ||||
SignatureFunction signatureFunction = Crypto.getSignatureFunction(keyPair.getAlgorithm()); | |||||
PrivKey privKey = keyPair.getPrivKey(); | |||||
byte[] content = BinaryProtocol.encode(getTransactionContent(), TransactionContent.class); | |||||
SignatureDigest signatureDigest = signatureFunction.sign(privKey, content); | |||||
DigitalSignature signature = new DigitalSignatureBlob(keyPair.getPubKey(), signatureDigest); | |||||
DigitalSignature signature = SignatureUtils.sign(getTransactionContent(), keyPair); | |||||
addSignature(signature); | addSignature(signature); | ||||
return signature; | return signature; | ||||
} | } | ||||
@@ -0,0 +1,28 @@ | |||||
package com.jd.blockchain.transaction; | |||||
import com.jd.blockchain.crypto.*; | |||||
import com.jd.blockchain.ledger.DigitalSignature; | |||||
import com.jd.blockchain.ledger.TransactionContent; | |||||
public class SignatureUtils { | |||||
public static DigitalSignature sign(TransactionContent txContent, AsymmetricKeypair keyPair) { | |||||
SignatureDigest signatureDigest = sign(txContent, keyPair.getPrivKey()); | |||||
return new DigitalSignatureBlob(keyPair.getPubKey(), signatureDigest); | |||||
} | |||||
public static SignatureDigest sign(TransactionContent txContent, PrivKey privKey) { | |||||
return Crypto.getSignatureFunction(privKey.getAlgorithm()).sign(privKey, txContent.getHash().toBytes()); | |||||
} | |||||
public static boolean verifySignature(TransactionContent txContent, SignatureDigest signDigest, PubKey pubKey) { | |||||
if (!TxBuilder.verifyTxContentHash(txContent, txContent.getHash())) { | |||||
return false; | |||||
} | |||||
return verifyHashSignature(txContent.getHash(), signDigest, pubKey); | |||||
} | |||||
public static boolean verifyHashSignature(HashDigest hash, SignatureDigest signDigest, PubKey pubKey) { | |||||
return Crypto.getSignatureFunction(pubKey.getAlgorithm()).verify(signDigest, pubKey, hash.toBytes()); | |||||
} | |||||
} |
@@ -42,14 +42,14 @@ public class TxRequestBuilder implements TransactionRequestBuilder { | |||||
@Override | @Override | ||||
public DigitalSignature signAsEndpoint(AsymmetricKeypair keyPair) { | public DigitalSignature signAsEndpoint(AsymmetricKeypair keyPair) { | ||||
DigitalSignature signature = sign(txContent, keyPair); | |||||
DigitalSignature signature = SignatureUtils.sign(txContent, keyPair); | |||||
addEndpointSignature(signature); | addEndpointSignature(signature); | ||||
return signature; | return signature; | ||||
} | } | ||||
@Override | @Override | ||||
public DigitalSignature signAsNode(AsymmetricKeypair keyPair) { | public DigitalSignature signAsNode(AsymmetricKeypair keyPair) { | ||||
DigitalSignature signature = sign(txContent, keyPair); | |||||
DigitalSignature signature = SignatureUtils.sign(txContent, keyPair); | |||||
addNodeSignature(signature); | addNodeSignature(signature); | ||||
return signature; | return signature; | ||||
} | } | ||||
@@ -64,26 +64,26 @@ public class TxRequestBuilder implements TransactionRequestBuilder { | |||||
endpointSignatures.add(signature); | endpointSignatures.add(signature); | ||||
} | } | ||||
public static DigitalSignature sign(TransactionContent txContent, AsymmetricKeypair keyPair) { | |||||
SignatureDigest signatureDigest = sign(txContent, keyPair.getPrivKey()); | |||||
DigitalSignature signature = new DigitalSignatureBlob(keyPair.getPubKey(), signatureDigest); | |||||
return signature; | |||||
} | |||||
public static SignatureDigest sign(TransactionContent txContent, PrivKey privKey) { | |||||
return Crypto.getSignatureFunction(privKey.getAlgorithm()).sign(privKey, txContent.getHash().toBytes()); | |||||
} | |||||
public static boolean verifySignature(TransactionContent txContent, SignatureDigest signDigest, PubKey pubKey) { | |||||
if (!TxBuilder.verifyTxContentHash(txContent, txContent.getHash())) { | |||||
return false; | |||||
} | |||||
return verifyHashSignature(txContent.getHash(), signDigest, pubKey); | |||||
} | |||||
public static boolean verifyHashSignature(HashDigest hash, SignatureDigest signDigest, PubKey pubKey) { | |||||
return Crypto.getSignatureFunction(pubKey.getAlgorithm()).verify(signDigest, pubKey, hash.toBytes()); | |||||
} | |||||
// public static DigitalSignature sign(TransactionContent txContent, AsymmetricKeypair keyPair) { | |||||
// SignatureDigest signatureDigest = sign(txContent, keyPair.getPrivKey()); | |||||
// DigitalSignature signature = new DigitalSignatureBlob(keyPair.getPubKey(), signatureDigest); | |||||
// return signature; | |||||
// } | |||||
// | |||||
// public static SignatureDigest sign(TransactionContent txContent, PrivKey privKey) { | |||||
// return Crypto.getSignatureFunction(privKey.getAlgorithm()).sign(privKey, txContent.getHash().toBytes()); | |||||
// } | |||||
// public static boolean verifySignature(TransactionContent txContent, SignatureDigest signDigest, PubKey pubKey) { | |||||
// if (!TxBuilder.verifyTxContentHash(txContent, txContent.getHash())) { | |||||
// return false; | |||||
// } | |||||
// return verifyHashSignature(txContent.getHash(), signDigest, pubKey); | |||||
// } | |||||
// | |||||
// public static boolean verifyHashSignature(HashDigest hash, SignatureDigest signDigest, PubKey pubKey) { | |||||
// return Crypto.getSignatureFunction(pubKey.getAlgorithm()).verify(signDigest, pubKey, hash.toBytes()); | |||||
// } | |||||
@Override | @Override | ||||
public TransactionRequest buildRequest() { | public TransactionRequest buildRequest() { | ||||
@@ -47,8 +47,8 @@ public class ConsensusMessageDispatcher implements MessageHandle { | |||||
public String beginBatch(String realmName) { | public String beginBatch(String realmName) { | ||||
RealmProcessor realmProcessor = realmProcessorMap.get(realmName); | RealmProcessor realmProcessor = realmProcessorMap.get(realmName); | ||||
if (realmProcessor == null) { | if (realmProcessor == null) { | ||||
beginLock.lock(); | |||||
try { | try { | ||||
beginLock.lock(); | |||||
realmProcessor = realmProcessorMap.get(realmName); | realmProcessor = realmProcessorMap.get(realmName); | ||||
if (realmProcessor == null) { | if (realmProcessor == null) { | ||||
realmProcessor = initRealmProcessor(realmName); | realmProcessor = initRealmProcessor(realmName); | ||||
@@ -174,8 +174,8 @@ public class ConsensusMessageDispatcher implements MessageHandle { | |||||
} | } | ||||
public String newBatchId() { | public String newBatchId() { | ||||
realmLock.lock(); | |||||
try { | try { | ||||
realmLock.lock(); | |||||
if (currBatchId == null) { | if (currBatchId == null) { | ||||
currBatchId = getRealmName() + "-" + getBatchIdIndex().getAndIncrement(); | currBatchId = getRealmName() + "-" + getBatchIdIndex().getAndIncrement(); | ||||
} | } | ||||
@@ -227,8 +227,8 @@ public class ConsensusMessageDispatcher implements MessageHandle { | |||||
} | } | ||||
public void commit() { | public void commit() { | ||||
realmLock.lock(); | |||||
try { | try { | ||||
realmLock.lock(); | |||||
if (batchResultHandle == null) { | if (batchResultHandle == null) { | ||||
throw new IllegalArgumentException("BatchResultHandle is null, complete() is not execute !"); | throw new IllegalArgumentException("BatchResultHandle is null, complete() is not execute !"); | ||||
} | } | ||||
@@ -242,8 +242,8 @@ public class ConsensusMessageDispatcher implements MessageHandle { | |||||
} | } | ||||
public void rollback(int reasonCode) { | public void rollback(int reasonCode) { | ||||
realmLock.lock(); | |||||
try { | try { | ||||
realmLock.lock(); | |||||
batchResultHandle.cancel(TransactionState.valueOf((byte)reasonCode)); | batchResultHandle.cancel(TransactionState.valueOf((byte)reasonCode)); | ||||
} finally { | } finally { | ||||
realmLock.unlock(); | realmLock.unlock(); | ||||
@@ -10,10 +10,12 @@ import com.jd.blockchain.crypto.HashDigest; | |||||
import com.jd.blockchain.crypto.HashFunction; | import com.jd.blockchain.crypto.HashFunction; | ||||
import com.jd.blockchain.crypto.SignatureDigest; | import com.jd.blockchain.crypto.SignatureDigest; | ||||
import com.jd.blockchain.crypto.SignatureFunction; | import com.jd.blockchain.crypto.SignatureFunction; | ||||
import com.jd.blockchain.ledger.DigitalSignature; | |||||
import com.jd.blockchain.ledger.NodeRequest; | import com.jd.blockchain.ledger.NodeRequest; | ||||
import com.jd.blockchain.ledger.TransactionRequest; | import com.jd.blockchain.ledger.TransactionRequest; | ||||
import com.jd.blockchain.ledger.TransactionResponse; | import com.jd.blockchain.ledger.TransactionResponse; | ||||
import com.jd.blockchain.transaction.DigitalSignatureBlob; | import com.jd.blockchain.transaction.DigitalSignatureBlob; | ||||
import com.jd.blockchain.transaction.SignatureUtils; | |||||
import com.jd.blockchain.transaction.TransactionService; | import com.jd.blockchain.transaction.TransactionService; | ||||
import com.jd.blockchain.transaction.TxRequestMessage; | import com.jd.blockchain.transaction.TxRequestMessage; | ||||
import com.jd.blockchain.utils.concurrent.AsyncFuture; | import com.jd.blockchain.utils.concurrent.AsyncFuture; | ||||
@@ -62,13 +64,16 @@ public class NodeSigningAppender implements TransactionService { | |||||
public TransactionResponse process(TransactionRequest txRequest) { | public TransactionResponse process(TransactionRequest txRequest) { | ||||
TxRequestMessage txMessage = new TxRequestMessage(txRequest); | TxRequestMessage txMessage = new TxRequestMessage(txRequest); | ||||
// 生成网关签名; | |||||
byte[] endpointRequestBytes = BinaryProtocol.encode(txMessage, TransactionRequest.class); | |||||
// // 生成网关签名; | |||||
// byte[] endpointRequestBytes = BinaryProtocol.encode(txMessage, TransactionRequest.class); | |||||
// | |||||
// short signAlgorithm = nodeKeyPair.getAlgorithm(); | |||||
// SignatureFunction signFunc = Crypto.getSignatureFunction(signAlgorithm); | |||||
// SignatureDigest signDigest = signFunc.sign(nodeKeyPair.getPrivKey(), endpointRequestBytes); | |||||
short signAlgorithm = nodeKeyPair.getAlgorithm(); | |||||
SignatureFunction signFunc = Crypto.getSignatureFunction(signAlgorithm); | |||||
SignatureDigest signDigest = signFunc.sign(nodeKeyPair.getPrivKey(), endpointRequestBytes); | |||||
txMessage.addNodeSignatures(new DigitalSignatureBlob(nodeKeyPair.getPubKey(), signDigest)); | |||||
DigitalSignature nodeSign = SignatureUtils.sign(txRequest.getTransactionContent(), nodeKeyPair); | |||||
txMessage.addNodeSignatures(nodeSign); | |||||
// 计算交易哈希; | // 计算交易哈希; | ||||
byte[] nodeRequestBytes = BinaryProtocol.encode(txMessage, TransactionRequest.class); | byte[] nodeRequestBytes = BinaryProtocol.encode(txMessage, TransactionRequest.class); | ||||
@@ -16,10 +16,7 @@ import com.jd.blockchain.ledger.*; | |||||
import com.jd.blockchain.sdk.BlockchainService; | import com.jd.blockchain.sdk.BlockchainService; | ||||
import com.jd.blockchain.sdk.BlockchainServiceFactory; | import com.jd.blockchain.sdk.BlockchainServiceFactory; | ||||
import com.jd.blockchain.sdk.proxy.HttpBlockchainQueryService; | import com.jd.blockchain.sdk.proxy.HttpBlockchainQueryService; | ||||
import com.jd.blockchain.transaction.BlockchainQueryService; | |||||
import com.jd.blockchain.transaction.DigitalSignatureBlob; | |||||
import com.jd.blockchain.transaction.TransactionService; | |||||
import com.jd.blockchain.transaction.TxRequestMessage; | |||||
import com.jd.blockchain.transaction.*; | |||||
import com.jd.blockchain.utils.http.agent.HttpServiceAgent; | import com.jd.blockchain.utils.http.agent.HttpServiceAgent; | ||||
import com.jd.blockchain.utils.http.agent.ServiceConnection; | import com.jd.blockchain.utils.http.agent.ServiceConnection; | ||||
import com.jd.blockchain.utils.http.agent.ServiceConnectionManager; | import com.jd.blockchain.utils.http.agent.ServiceConnectionManager; | ||||
@@ -163,15 +160,20 @@ public class GatewayServiceFactory implements BlockchainServiceFactory, Closeabl | |||||
//TODO: 未实现按不同的账本的密码参数配置,采用不同的哈希算法和签名算法; | //TODO: 未实现按不同的账本的密码参数配置,采用不同的哈希算法和签名算法; | ||||
if (!reqMsg.containsEndpointSignature(userKey.getAddress())) { | if (!reqMsg.containsEndpointSignature(userKey.getAddress())) { | ||||
// TODO: 优化上下文对此 TransactionContent 的多次序列化带来的额外性能开销; | // TODO: 优化上下文对此 TransactionContent 的多次序列化带来的额外性能开销; | ||||
byte[] txContentBytes = BinaryProtocol.encode(txRequest.getTransactionContent(), | |||||
TransactionContent.class); | |||||
PrivKey userPrivKey = userKey.getPrivKey(); | |||||
SignatureFunction signatureFunction = Crypto.getSignatureFunction(userKey.getAlgorithm()); | |||||
if (signatureFunction != null) { | |||||
SignatureDigest signatureDigest = signatureFunction.sign(userPrivKey, txContentBytes); | |||||
DigitalSignature signature = new DigitalSignatureBlob(userKey.getPubKey(), signatureDigest); | |||||
reqMsg.addEndpointSignatures(signature); | |||||
} | |||||
DigitalSignature signature = SignatureUtils.sign(txRequest.getTransactionContent(), userKey); | |||||
reqMsg.addEndpointSignatures(signature); | |||||
// | |||||
// | |||||
// | |||||
// byte[] txContentBytes = BinaryProtocol.encode(txRequest.getTransactionContent(), | |||||
// TransactionContent.class); | |||||
// PrivKey userPrivKey = userKey.getPrivKey(); | |||||
// SignatureFunction signatureFunction = Crypto.getSignatureFunction(userKey.getAlgorithm()); | |||||
// if (signatureFunction != null) { | |||||
// SignatureDigest signatureDigest = signatureFunction.sign(userPrivKey, txContentBytes); | |||||
// DigitalSignature signature = new DigitalSignatureBlob(userKey.getPubKey(), signatureDigest); | |||||
// reqMsg.addEndpointSignatures(signature); | |||||
// } | |||||
} | } | ||||
return innerService.process(txRequest); | return innerService.process(txRequest); | ||||
} | } | ||||
@@ -10,6 +10,7 @@ import java.io.InputStream; | |||||
import java.util.Properties; | import java.util.Properties; | ||||
import java.util.concurrent.CountDownLatch; | import java.util.concurrent.CountDownLatch; | ||||
import com.jd.blockchain.transaction.SignatureUtils; | |||||
import org.springframework.boot.SpringApplication; | import org.springframework.boot.SpringApplication; | ||||
import org.springframework.context.ConfigurableApplicationContext; | import org.springframework.context.ConfigurableApplicationContext; | ||||
import org.springframework.core.io.ClassPathResource; | import org.springframework.core.io.ClassPathResource; | ||||
@@ -125,10 +126,10 @@ public class LedgerInitializeWeb4SingleStepsTest { | |||||
TransactionContent initTxContent2 = node2.getInitTxContent(); | TransactionContent initTxContent2 = node2.getInitTxContent(); | ||||
TransactionContent initTxContent3 = node3.getInitTxContent(); | TransactionContent initTxContent3 = node3.getInitTxContent(); | ||||
assertTrue(TxRequestBuilder.verifySignature(initTxContent0, permission0.getTransactionSignature(), pubKey0)); | |||||
assertTrue(TxRequestBuilder.verifySignature(initTxContent1, permission1.getTransactionSignature(), pubKey1)); | |||||
assertTrue(TxRequestBuilder.verifySignature(initTxContent2, permission2.getTransactionSignature(), pubKey2)); | |||||
assertTrue(TxRequestBuilder.verifySignature(initTxContent3, permission3.getTransactionSignature(), pubKey3)); | |||||
assertTrue(SignatureUtils.verifySignature(initTxContent0, permission0.getTransactionSignature(), pubKey0)); | |||||
assertTrue(SignatureUtils.verifySignature(initTxContent1, permission1.getTransactionSignature(), pubKey1)); | |||||
assertTrue(SignatureUtils.verifySignature(initTxContent2, permission2.getTransactionSignature(), pubKey2)); | |||||
assertTrue(SignatureUtils.verifySignature(initTxContent3, permission3.getTransactionSignature(), pubKey3)); | |||||
assertNotNull(initTxContent0.getHash()); | assertNotNull(initTxContent0.getHash()); | ||||
if (!initTxContent0.getHash().equals(initTxContent1.getHash())) { | if (!initTxContent0.getHash().equals(initTxContent1.getHash())) { | ||||
@@ -10,6 +10,7 @@ import java.util.Random; | |||||
import java.util.concurrent.CountDownLatch; | import java.util.concurrent.CountDownLatch; | ||||
import java.util.concurrent.TimeUnit; | import java.util.concurrent.TimeUnit; | ||||
import com.jd.blockchain.transaction.*; | |||||
import org.springframework.beans.factory.annotation.Autowired; | import org.springframework.beans.factory.annotation.Autowired; | ||||
import org.springframework.web.bind.annotation.PathVariable; | import org.springframework.web.bind.annotation.PathVariable; | ||||
import org.springframework.web.bind.annotation.RequestBody; | import org.springframework.web.bind.annotation.RequestBody; | ||||
@@ -58,10 +59,6 @@ import com.jd.blockchain.tools.initializer.LedgerInitProcess; | |||||
import com.jd.blockchain.tools.initializer.LedgerInitProperties; | import com.jd.blockchain.tools.initializer.LedgerInitProperties; | ||||
import com.jd.blockchain.tools.initializer.LedgerInitProperties.ConsensusParticipantConfig; | import com.jd.blockchain.tools.initializer.LedgerInitProperties.ConsensusParticipantConfig; | ||||
import com.jd.blockchain.tools.initializer.Prompter; | import com.jd.blockchain.tools.initializer.Prompter; | ||||
import com.jd.blockchain.transaction.DigitalSignatureBlob; | |||||
import com.jd.blockchain.transaction.LedgerInitSettingData; | |||||
import com.jd.blockchain.transaction.TxBuilder; | |||||
import com.jd.blockchain.transaction.TxRequestBuilder; | |||||
import com.jd.blockchain.utils.Bytes; | import com.jd.blockchain.utils.Bytes; | ||||
import com.jd.blockchain.utils.concurrent.InvocationResult; | import com.jd.blockchain.utils.concurrent.InvocationResult; | ||||
import com.jd.blockchain.utils.io.BytesUtils; | import com.jd.blockchain.utils.io.BytesUtils; | ||||
@@ -385,7 +382,7 @@ public class LedgerInitializeWebController implements LedgerInitProcess, LedgerI | |||||
this.initTxContent = initTxBuilder.prepareContent(initSetting.getCreatedTime()); | this.initTxContent = initTxBuilder.prepareContent(initSetting.getCreatedTime()); | ||||
// 对初始交易签名,生成当前参与者的账本初始化许可; | // 对初始交易签名,生成当前参与者的账本初始化许可; | ||||
SignatureDigest permissionSign = TxRequestBuilder.sign(initTxContent, privKey); | |||||
SignatureDigest permissionSign = SignatureUtils.sign(initTxContent, privKey); | |||||
LedgerInitPermissionData permission = new LedgerInitPermissionData(currentId, permissionSign); | LedgerInitPermissionData permission = new LedgerInitPermissionData(currentId, permissionSign); | ||||
this.currentId = currentId; | this.currentId = currentId; | ||||
@@ -504,7 +501,7 @@ public class LedgerInitializeWebController implements LedgerInitProcess, LedgerI | |||||
continue; | continue; | ||||
} | } | ||||
if (!TxRequestBuilder.verifySignature(this.initTxContent, permission.getTransactionSignature(), pubKey)) { | |||||
if (!SignatureUtils.verifySignature(this.initTxContent, permission.getTransactionSignature(), pubKey)) { | |||||
prompter.error("Invalid permission from participant! --[Id=%s][name=%s]", participants[i].getAddress(), | prompter.error("Invalid permission from participant! --[Id=%s][name=%s]", participants[i].getAddress(), | ||||
participants[i].getName()); | participants[i].getName()); | ||||
allPermitted = false; | allPermitted = false; | ||||
@@ -16,10 +16,7 @@ import com.jd.blockchain.tools.initializer.*; | |||||
import com.jd.blockchain.tools.initializer.LedgerInitProperties.ConsensusParticipantConfig; | import com.jd.blockchain.tools.initializer.LedgerInitProperties.ConsensusParticipantConfig; | ||||
import com.jd.blockchain.tools.initializer.web.LedgerInitConsensusService; | import com.jd.blockchain.tools.initializer.web.LedgerInitConsensusService; | ||||
import com.jd.blockchain.tools.initializer.web.LedgerInitDecisionData; | import com.jd.blockchain.tools.initializer.web.LedgerInitDecisionData; | ||||
import com.jd.blockchain.transaction.DigitalSignatureBlob; | |||||
import com.jd.blockchain.transaction.LedgerInitSettingData; | |||||
import com.jd.blockchain.transaction.TxBuilder; | |||||
import com.jd.blockchain.transaction.TxRequestBuilder; | |||||
import com.jd.blockchain.transaction.*; | |||||
import com.jd.blockchain.utils.Bytes; | import com.jd.blockchain.utils.Bytes; | ||||
import com.jd.blockchain.utils.concurrent.InvocationResult; | import com.jd.blockchain.utils.concurrent.InvocationResult; | ||||
import com.jd.blockchain.utils.io.BytesUtils; | import com.jd.blockchain.utils.io.BytesUtils; | ||||
@@ -251,7 +248,7 @@ public class MockerLedgerInitializer implements LedgerInitProcess, LedgerInitCon | |||||
this.initTxContent = initTxBuilder.prepareContent(); | this.initTxContent = initTxBuilder.prepareContent(); | ||||
// 对初始交易签名,生成当前参与者的账本初始化许可; | // 对初始交易签名,生成当前参与者的账本初始化许可; | ||||
SignatureDigest permissionSign = TxRequestBuilder.sign(initTxContent, privKey); | |||||
SignatureDigest permissionSign = SignatureUtils.sign(initTxContent, privKey); | |||||
localPermission = new LedgerInitPermissionData(currentId, permissionSign); | localPermission = new LedgerInitPermissionData(currentId, permissionSign); | ||||
this.currentId = currentId; | this.currentId = currentId; | ||||