Skip to content

Commit

Permalink
- fixes after merge
Browse files Browse the repository at this point in the history
  • Loading branch information
iulianpascalau committed Sep 28, 2022
1 parent 848f8f7 commit 743b92a
Show file tree
Hide file tree
Showing 18 changed files with 105 additions and 180 deletions.
1 change: 1 addition & 0 deletions consensus/interface.go
Original file line number Diff line number Diff line change
Expand Up @@ -153,6 +153,7 @@ type ScheduledProcessor interface {
type SignatureHandler interface {
Reset(pubKeys []string) error
CreateSignatureShare(msg []byte, index uint16, epoch uint32) ([]byte, error)
CreateSignatureShareWithPrivateKey(message []byte, index uint16, epoch uint32, privateKeyBytes []byte) ([]byte, error)
StoreSignatureShare(index uint16, sig []byte) error
SignatureShare(index uint16) ([]byte, error)
VerifySignatureShare(index uint16, sig []byte, msg []byte, epoch uint32) error
Expand Down
26 changes: 18 additions & 8 deletions consensus/mock/signatureHandlerStub.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,15 @@ package mock

// SignatureHandlerStub implements SignatureHandler interface
type SignatureHandlerStub struct {
ResetCalled func(pubKeys []string) error
CreateSignatureShareCalled func(msg []byte, index uint16, epoch uint32) ([]byte, error)
StoreSignatureShareCalled func(index uint16, sig []byte) error
SignatureShareCalled func(index uint16) ([]byte, error)
VerifySignatureShareCalled func(index uint16, sig []byte, msg []byte, epoch uint32) error
AggregateSigsCalled func(bitmap []byte, epoch uint32) ([]byte, error)
SetAggregatedSigCalled func(_ []byte) error
VerifyCalled func(msg []byte, bitmap []byte, epoch uint32) error
ResetCalled func(pubKeys []string) error
CreateSignatureShareCalled func(msg []byte, index uint16, epoch uint32) ([]byte, error)
CreateSignatureShareWithPrivateKeyCalled func(message []byte, index uint16, epoch uint32, privateKeyBytes []byte) ([]byte, error)
StoreSignatureShareCalled func(index uint16, sig []byte) error
SignatureShareCalled func(index uint16) ([]byte, error)
VerifySignatureShareCalled func(index uint16, sig []byte, msg []byte, epoch uint32) error
AggregateSigsCalled func(bitmap []byte, epoch uint32) ([]byte, error)
SetAggregatedSigCalled func(_ []byte) error
VerifyCalled func(msg []byte, bitmap []byte, epoch uint32) error
}

// Reset -
Expand All @@ -30,6 +31,15 @@ func (stub *SignatureHandlerStub) CreateSignatureShare(msg []byte, index uint16,
return []byte("sigShare"), nil
}

// CreateSignatureShareWithPrivateKey -
func (stub *SignatureHandlerStub) CreateSignatureShareWithPrivateKey(message []byte, index uint16, epoch uint32, privateKeyBytes []byte) ([]byte, error) {
if stub.CreateSignatureShareWithPrivateKeyCalled != nil {
return stub.CreateSignatureShareWithPrivateKeyCalled(message, index, epoch, privateKeyBytes)
}

return make([]byte, 0), nil
}

// StoreSignatureShare -
func (stub *SignatureHandlerStub) StoreSignatureShare(index uint16, sig []byte) error {
if stub.StoreSignatureShareCalled != nil {
Expand Down
13 changes: 11 additions & 2 deletions consensus/signing/signing.go
Original file line number Diff line number Diff line change
Expand Up @@ -122,6 +122,15 @@ func (sh *signatureHolder) Reset(pubKeys []string) error {

// CreateSignatureShare returns a signature over a message
func (sh *signatureHolder) CreateSignatureShare(message []byte, selfIndex uint16, epoch uint32) ([]byte, error) {
sh.mutSigningData.RLock()
privateKeyBytes := sh.data.privKey
sh.mutSigningData.RUnlock()

return sh.CreateSignatureShareWithPrivateKey(message, selfIndex, epoch, privateKeyBytes)
}

// CreateSignatureShareWithPrivateKey returns a signature over a message providing the private key bytes
func (sh *signatureHolder) CreateSignatureShareWithPrivateKey(message []byte, index uint16, epoch uint32, privateKeyBytes []byte) ([]byte, error) {
if message == nil {
return nil, ErrNilMessage
}
Expand All @@ -134,12 +143,12 @@ func (sh *signatureHolder) CreateSignatureShare(message []byte, selfIndex uint16
return nil, err
}

sigShareBytes, err := multiSigner.CreateSignatureShare(sh.data.privKey, message)
sigShareBytes, err := multiSigner.CreateSignatureShare(privateKeyBytes, message)
if err != nil {
return nil, err
}

sh.data.sigShares[selfIndex] = sigShareBytes
sh.data.sigShares[index] = sigShareBytes

return sigShareBytes, nil
}
Expand Down
33 changes: 20 additions & 13 deletions consensus/spos/bls/subroundSignature.go
Original file line number Diff line number Diff line change
Expand Up @@ -73,21 +73,16 @@ func (sr *subroundSignature) doSignatureJob(_ context.Context) bool {
return false
}

selfIndex, err := sr.SelfConsensusGroupIndex()
if err != nil {
log.Debug("doSignatureJob.SelfConsensusGroupIndex: not in consensus group")
return false
}

signatureShare, err := sr.SignatureHandler().CreateSignatureShare(sr.GetData(), uint16(selfIndex), sr.Header.GetEpoch())
if err != nil {
log.Debug("doSignatureJob.CreateSignatureShare", "error", err.Error())
return false
}
isSelfLeader := sr.IsSelfLeaderInCurrentRound()

if isSelfLeader || sr.IsNodeInConsensusGroup(sr.SelfPubKey()) {
signatureShare, err := sr.MultiSigner().CreateSignatureShare(sr.GetData(), nil)
selfIndex, err := sr.SelfConsensusGroupIndex()
if err != nil {
log.Debug("doSignatureJob.SelfConsensusGroupIndex: not in consensus group")
return false
}

signatureShare, err := sr.SignatureHandler().CreateSignatureShare(sr.GetData(), uint16(selfIndex), sr.Header.GetEpoch())
if err != nil {
log.Debug("doSignatureJob.CreateSignatureShare", "error", err.Error())
return false
Expand Down Expand Up @@ -368,7 +363,19 @@ func (sr *subroundSignature) doSignatureJobForManagedKeys() bool {
}

managedPrivateKey := sr.GetMessageSigningPrivateKey(pkBytes)
signatureShare, err := sr.MultiSigner().CreateAndAddSignatureShareForKey(sr.GetData(), managedPrivateKey, pkBytes)
selfIndex, err := sr.ConsensusGroupIndex(pk)
if err != nil {
log.Warn("doSignatureJobForManagedKeys: index not found", "pk", pkBytes)
continue
}

managedPrivateKeyBytes, err := managedPrivateKey.ToByteArray()
if err != nil {
log.Warn("doSignatureJobForManagedKeys: can not recover the private key bytes", "pk", pkBytes)
continue
}

signatureShare, err := sr.SignatureHandler().CreateSignatureShareWithPrivateKey(sr.GetData(), uint16(selfIndex), sr.Header.GetEpoch(), managedPrivateKeyBytes)
if err != nil {
log.Debug("doSignatureJobForManagedKeys.CreateAndAddSignatureShareForKey", "error", err.Error())
return false
Expand Down
1 change: 1 addition & 0 deletions consensus/spos/subround_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import (
"github.com/ElrondNetwork/elrond-go/consensus/mock"
"github.com/ElrondNetwork/elrond-go/consensus/spos"
"github.com/ElrondNetwork/elrond-go/consensus/spos/bls"
"github.com/ElrondNetwork/elrond-go/testscommon"
"github.com/ElrondNetwork/elrond-go/testscommon/cryptoMocks"
"github.com/ElrondNetwork/elrond-go/testscommon/statusHandler"
"github.com/stretchr/testify/assert"
Expand Down
18 changes: 9 additions & 9 deletions factory/crypto/cryptoComponents.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ import (
"github.com/ElrondNetwork/elrond-go/genesis/process/disabled"
"github.com/ElrondNetwork/elrond-go/heartbeat"
"github.com/ElrondNetwork/elrond-go/keysManagement"
p2pCrypto "github.com/ElrondNetwork/elrond-go/p2p/crypto"
"github.com/ElrondNetwork/elrond-go/p2p"
storageFactory "github.com/ElrondNetwork/elrond-go/storage/factory"
"github.com/ElrondNetwork/elrond-go/storage/storageunit"
"github.com/ElrondNetwork/elrond-go/vm"
Expand All @@ -43,8 +43,8 @@ type CryptoComponentsFactoryArgs struct {
Config config.Config
EnableEpochs config.EnableEpochs
PrefsConfig config.Preferences
CoreComponentsHolder CoreComponentsHolder
KeyLoader KeyLoaderHandler
CoreComponentsHolder factory.CoreComponentsHolder
KeyLoader factory.KeyLoaderHandler
ActivateBLSPubKeyMessageVerification bool
IsInImportMode bool
ImportModeNoSigCheck bool
Expand All @@ -58,7 +58,7 @@ type cryptoComponentsFactory struct {
config config.Config
enableEpochs config.EnableEpochs
prefsConfig config.Preferences
coreComponentsHolder CoreComponentsHolder
coreComponentsHolder factory.CoreComponentsHolder
activateBLSPubKeyMessageVerification bool
keyLoader factory.KeyLoaderHandler
isInImportMode bool
Expand All @@ -84,8 +84,8 @@ type cryptoComponents struct {
blockSignKeyGen crypto.KeyGenerator
txSignKeyGen crypto.KeyGenerator
messageSignVerifier vm.MessageSignVerifier
managedPeersHolder heartbeat.ManagedPeersHolder
keysHandler consensus.KeysHandler
managedPeersHolder heartbeat.ManagedPeersHolder
keysHandler consensus.KeysHandler
cryptoParams
}

Expand Down Expand Up @@ -180,7 +180,7 @@ func (ccf *cryptoComponentsFactory) Create() (*cryptoComponents, error) {
isMainMachine := redundancyLevel == mainMachineRedundancyLevel
argsManagedPeersHolder := keysManagement.ArgsManagedPeersHolder{
KeyGenerator: blockSignKeyGen,
P2PIdentityGenerator: p2pCrypto.NewIdentityGenerator(),
P2PIdentityGenerator: p2p.NewRandomP2PIdentityGenerator(),
IsMainMachine: isMainMachine,
MaxRoundsWithoutReceivedMessages: redundancyLevel,
PrefsConfig: ccf.prefsConfig,
Expand All @@ -200,8 +200,8 @@ func (ccf *cryptoComponentsFactory) Create() (*cryptoComponents, error) {
blockSignKeyGen: blockSignKeyGen,
txSignKeyGen: txSignKeyGen,
messageSignVerifier: messageSignVerifier,
managedPeersHolder: managedPeersHolder,
keysHandler: keysManagement.NewKeysHandler(),
managedPeersHolder: managedPeersHolder,
keysHandler: keysManagement.NewKeysHandler(),
cryptoParams: *cp,
}, nil
}
Expand Down
6 changes: 4 additions & 2 deletions factory/crypto/cryptoComponentsHandler.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,10 @@ import (
"github.com/ElrondNetwork/elrond-go-core/core/check"
crypto "github.com/ElrondNetwork/elrond-go-crypto"
cryptoCommon "github.com/ElrondNetwork/elrond-go/common/crypto"
"github.com/ElrondNetwork/elrond-go/consensus"
"github.com/ElrondNetwork/elrond-go/errors"
"github.com/ElrondNetwork/elrond-go/factory"
"github.com/ElrondNetwork/elrond-go/heartbeat"
"github.com/ElrondNetwork/elrond-go/vm"
)

Expand Down Expand Up @@ -317,8 +319,8 @@ func (mcc *managedCryptoComponents) Clone() interface{} {
blockSignKeyGen: mcc.BlockSignKeyGen(),
txSignKeyGen: mcc.TxSignKeyGen(),
messageSignVerifier: mcc.MessageSignVerifier(),
managedPeersHolder: mcc.ManagedPeersHolder(),
keysHandler: mcc.KeysHandler(),
managedPeersHolder: mcc.ManagedPeersHolder(),
keysHandler: mcc.KeysHandler(),
cryptoParams: mcc.cryptoParams,
}
}
Expand Down
2 changes: 2 additions & 0 deletions factory/heartbeat/heartbeatV2Components_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@ func createMockHeartbeatV2ComponentsFactoryArgs() heartbeatComp.ArgHeartbeatV2Co
HideInactiveValidatorIntervalInSec: 60,
HardforkTimeBetweenSendsInSec: 5,
TimeBetweenConnectionsMetricsUpdateInSec: 10,
PeerAuthenticationTimeBetweenChecksInSec: 6,
HeartbeatPool: config.CacheConfig{
Type: "LRU",
Capacity: 1000,
Expand All @@ -64,6 +65,7 @@ func createMockHeartbeatV2ComponentsFactoryArgs() heartbeatComp.ArgHeartbeatV2Co
Identity: "identity",
},
},
BaseVersion: "test-base",
AppVersion: "test",
BoostrapComponents: bootstrapC,
CoreComponents: coreC,
Expand Down
6 changes: 4 additions & 2 deletions factory/mock/cryptoComponentsMock.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@ import (

"github.com/ElrondNetwork/elrond-go-crypto"
cryptoCommon "github.com/ElrondNetwork/elrond-go/common/crypto"
"github.com/ElrondNetwork/elrond-go/consensus"
"github.com/ElrondNetwork/elrond-go/heartbeat"
"github.com/ElrondNetwork/elrond-go/vm"
)

Expand All @@ -18,7 +20,7 @@ type CryptoComponentsMock struct {
PubKeyBytes []byte
BlockSig crypto.SingleSigner
TxSig crypto.SingleSigner
MultiSigContainer cryptoCommon.MultiSignerContainer
MultiSigContainer cryptoCommon.MultiSignerContainer
PeerSignHandler crypto.PeerSignatureHandler
BlKeyGen crypto.KeyGenerator
TxKeyGen crypto.KeyGenerator
Expand Down Expand Up @@ -135,7 +137,7 @@ func (ccm *CryptoComponentsMock) Clone() interface{} {
PubKeyBytes: ccm.PubKeyBytes,
BlockSig: ccm.BlockSig,
TxSig: ccm.TxSig,
MultiSigContainer: ccm.MultiSigContainer,
MultiSigContainer: ccm.MultiSigContainer,
PeerSignHandler: ccm.PeerSignHandler,
BlKeyGen: ccm.BlKeyGen,
TxKeyGen: ccm.TxKeyGen,
Expand Down
6 changes: 4 additions & 2 deletions integrationTests/mock/cryptoComponentsStub.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@ import (

"github.com/ElrondNetwork/elrond-go-crypto"
cryptoCommon "github.com/ElrondNetwork/elrond-go/common/crypto"
"github.com/ElrondNetwork/elrond-go/consensus"
"github.com/ElrondNetwork/elrond-go/heartbeat"
"github.com/ElrondNetwork/elrond-go/vm"
)

Expand All @@ -18,7 +20,7 @@ type CryptoComponentsStub struct {
PubKeyBytes []byte
BlockSig crypto.SingleSigner
TxSig crypto.SingleSigner
MultiSigContainer cryptoCommon.MultiSignerContainer
MultiSigContainer cryptoCommon.MultiSignerContainer
PeerSignHandler crypto.PeerSignatureHandler
BlKeyGen crypto.KeyGenerator
TxKeyGen crypto.KeyGenerator
Expand Down Expand Up @@ -150,7 +152,7 @@ func (ccs *CryptoComponentsStub) Clone() interface{} {
PubKeyBytes: ccs.PubKeyBytes,
BlockSig: ccs.BlockSig,
TxSig: ccs.TxSig,
MultiSigContainer: ccs.MultiSigContainer,
MultiSigContainer: ccs.MultiSigContainer,
PeerSignHandler: ccs.PeerSignHandler,
BlKeyGen: ccs.BlKeyGen,
TxKeyGen: ccs.TxKeyGen,
Expand Down
18 changes: 13 additions & 5 deletions integrationTests/testConsensusNode.go
Original file line number Diff line number Diff line change
Expand Up @@ -206,6 +206,11 @@ func (tcn *TestConsensusNode) initNode(
},
}

networkComponents := GetDefaultNetworkComponents()
networkComponents.Messenger = tcn.Messenger
networkComponents.InputAntiFlood = &mock.NilAntifloodHandler{}
networkComponents.PeerHonesty = &mock.PeerHonestyHandlerStub{}

cryptoComponents := GetDefaultCryptoComponents()
cryptoComponents.PrivKey = tcn.NodeKeys.Sk
cryptoComponents.PubKey = tcn.NodeKeys.Sk.GeneratePublic()
Expand All @@ -214,6 +219,14 @@ func (tcn *TestConsensusNode) initNode(
cryptoComponents.MultiSigContainer = cryptoMocks.NewMultiSignerContainerMock(testMultiSig)
cryptoComponents.BlKeyGen = keyGen
cryptoComponents.PeerSignHandler = peerSigHandler
cryptoComponents.KeysHandlerField = &testscommon.KeysHandlerStub{
GetHandledPrivateKeyCalled: func(pkBytes []byte) crypto.PrivateKey {
return tcn.NodeKeys.Sk
},
GetAssociatedPidCalled: func(pkBytes []byte) core.PeerID {
return tcn.Messenger.ID()
},
}

processComponents := GetDefaultProcessComponents()
processComponents.ForkDetect = forkDetector
Expand Down Expand Up @@ -242,11 +255,6 @@ func (tcn *TestConsensusNode) initNode(
stateComponents.Accounts = tcn.AccountsDB
stateComponents.AccountsAPI = tcn.AccountsDB

networkComponents := GetDefaultNetworkComponents()
networkComponents.Messenger = tcn.Messenger
networkComponents.InputAntiFlood = &mock.NilAntifloodHandler{}
networkComponents.PeerHonesty = &mock.PeerHonestyHandlerStub{}

var err error
tcn.Node, err = node.NewNode(
node.WithCoreComponents(coreComponents),
Expand Down
3 changes: 2 additions & 1 deletion integrationTests/testProcessorNode.go
Original file line number Diff line number Diff line change
Expand Up @@ -3080,12 +3080,13 @@ func GetDefaultCryptoComponents() *mock.CryptoComponentsStub {
PubKeyBytes: []byte("pubKey"),
BlockSig: &mock.SignerMock{},
TxSig: &mock.SignerMock{},
MultiSigContainer: cryptoMocks.NewMultiSignerContainerMock( TestMultiSig),
MultiSigContainer: cryptoMocks.NewMultiSignerContainerMock(TestMultiSig),
PeerSignHandler: &mock.PeerSignatureHandler{},
BlKeyGen: &mock.KeyGenMock{},
TxKeyGen: &mock.KeyGenMock{},
MsgSigVerifier: &testscommon.MessageSignVerifierMock{},
ManagedPeersHolderField: &testscommon.ManagedPeersHolderStub{},
KeysHandlerField: &testscommon.KeysHandlerStub{},
}
}

Expand Down
6 changes: 4 additions & 2 deletions node/mock/factory/cryptoComponentsStub.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@ import (

"github.com/ElrondNetwork/elrond-go-crypto"
cryptoCommon "github.com/ElrondNetwork/elrond-go/common/crypto"
"github.com/ElrondNetwork/elrond-go/consensus"
"github.com/ElrondNetwork/elrond-go/heartbeat"
"github.com/ElrondNetwork/elrond-go/vm"
)

Expand All @@ -18,7 +20,7 @@ type CryptoComponentsMock struct {
PubKeyBytes []byte
BlockSig crypto.SingleSigner
TxSig crypto.SingleSigner
MultiSigContainer cryptoCommon.MultiSignerContainer
MultiSigContainer cryptoCommon.MultiSignerContainer
PeerSignHandler crypto.PeerSignatureHandler
BlKeyGen crypto.KeyGenerator
TxKeyGen crypto.KeyGenerator
Expand Down Expand Up @@ -150,7 +152,7 @@ func (ccm *CryptoComponentsMock) Clone() interface{} {
PubKeyBytes: ccm.PubKeyBytes,
BlockSig: ccm.BlockSig,
TxSig: ccm.TxSig,
MultiSigContainer: ccm.MultiSigContainer,
MultiSigContainer: ccm.MultiSigContainer,
PeerSignHandler: ccm.PeerSignHandler,
BlKeyGen: ccm.BlKeyGen,
TxKeyGen: ccm.TxKeyGen,
Expand Down
5 changes: 0 additions & 5 deletions p2p/crypto/errors.go

This file was deleted.

Loading

0 comments on commit 743b92a

Please sign in to comment.