Skip to content

Commit 101f4d3

Browse files
committed
check if decrpytion key already exists in the db, if equal skip verification
1 parent 3b26468 commit 101f4d3

File tree

1 file changed

+20
-6
lines changed
  • rolling-shutter/keyper/epochkghandler

1 file changed

+20
-6
lines changed

rolling-shutter/keyper/epochkghandler/key.go

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ import (
99
"github.com/pkg/errors"
1010
"github.com/rs/zerolog/log"
1111
"github.com/shutter-network/rolling-shutter/rolling-shutter/medley"
12-
1312
"github.com/shutter-network/shutter/shlib/puredkg"
1413
"github.com/shutter-network/shutter/shlib/shcrypto"
1514

@@ -56,7 +55,7 @@ func (handler *DecryptionKeyHandler) ValidateMessage(ctx context.Context, msg p2
5655
}
5756

5857
dkgResultDB, err := queries.GetDKGResultForKeyperConfigIndex(ctx, eon)
59-
if err == pgx.ErrNoRows {
58+
if errors.Is(err, pgx.ErrNoRows) {
6059
return pubsub.ValidationReject, errors.Errorf("no DKG result found for eon %d", eon)
6160
}
6261
if err != nil {
@@ -81,16 +80,31 @@ func (handler *DecryptionKeyHandler) ValidateMessage(ctx context.Context, msg p2
8180
)
8281
}
8382

84-
validationResult, err := checkKeysErrors(key.Keys, pureDKGResult)
83+
validationResult, err := checkKeysErrors(ctx, key, pureDKGResult, queries)
8584
return validationResult, err
8685
}
8786

88-
func checkKeysErrors(keys []*p2pmsg.Key, pureDKGResult *puredkg.Result) (pubsub.ValidationResult, error) {
89-
for i, k := range keys {
87+
func checkKeysErrors(ctx context.Context, msg *p2pmsg.DecryptionKeys, pureDKGResult *puredkg.Result, queries *database.Queries) (pubsub.ValidationResult, error) {
88+
89+
for i, k := range msg.Keys {
9090
epochSecretKey, err := k.GetEpochSecretKey()
9191
if err != nil {
9292
return pubsub.ValidationReject, err
9393
}
94+
eon, err := medley.Uint64ToInt64Safe(msg.Eon)
95+
if err != nil {
96+
return pubsub.ValidationReject, errors.Wrapf(err, "overflow error while converting eon to int64 %d", msg.Eon)
97+
}
98+
decryptionKey, err := queries.GetDecryptionKey(ctx, database.GetDecryptionKeyParams{
99+
Eon: eon,
100+
EpochID: k.GetIdentity(),
101+
})
102+
if err != nil && !errors.Is(err, pgx.ErrNoRows) {
103+
return pubsub.ValidationReject, errors.Wrapf(err, "failed to get decryption key for identity %x from db", k.Identity)
104+
}
105+
if bytes.Equal(k.Key, decryptionKey.DecryptionKey) {
106+
continue
107+
}
94108
ok, err := shcrypto.VerifyEpochSecretKey(epochSecretKey, pureDKGResult.PublicKey, k.Identity)
95109
if err != nil {
96110
return pubsub.ValidationReject, errors.Wrapf(err, "error while checking epoch secret key for identity %x", k.Identity)
@@ -99,7 +113,7 @@ func checkKeysErrors(keys []*p2pmsg.Key, pureDKGResult *puredkg.Result) (pubsub.
99113
return pubsub.ValidationReject, errors.Errorf("epoch secret key for identity %x is not valid", k.Identity)
100114
}
101115

102-
if i > 0 && bytes.Compare(k.Identity, keys[i-1].Identity) < 0 {
116+
if i > 0 && bytes.Compare(k.Identity, msg.Keys[i-1].Identity) < 0 {
103117
return pubsub.ValidationReject, errors.Errorf("keys not ordered")
104118
}
105119
}

0 commit comments

Comments
 (0)