added airgapped command to verify BLS signature

This commit is contained in:
programmer10110 2020-09-30 13:32:36 +03:00
parent 3c7dc184a4
commit c95c91a54a
4 changed files with 46 additions and 7 deletions

View File

@ -1,6 +1,7 @@
package airgapped
import (
"encoding/base64"
"encoding/json"
"fmt"
@ -106,7 +107,7 @@ func (am *AirgappedMachine) reconstructThresholdSignature(o *client.Operation) e
if err != nil {
return fmt.Errorf("failed to reconsruct full signature for msg: %w", err)
}
fmt.Println(reconstructedSignature)
fmt.Println(base64.StdEncoding.EncodeToString(reconstructedSignature))
return nil
}
@ -133,7 +134,7 @@ func (am *AirgappedMachine) recoverFullSign(msg []byte, sigShares [][]byte, t, n
}
// verifySign verifies a signature of a message
func (am *AirgappedMachine) verifySign(msg []byte, fullSignature []byte, dkgIdentifier string) error {
func (am *AirgappedMachine) VerifySign(msg []byte, fullSignature []byte, dkgIdentifier string) error {
blsKeyring, err := am.loadBLSKeyring(dkgIdentifier)
if err != nil {
return fmt.Errorf("failed to load blsKeyring: %w", err)

View File

@ -68,6 +68,10 @@ func NewTerminal(machine *airgapped.AirgappedMachine) *terminal {
},
description: "stops the machine",
})
t.addCommand("verify_signature", &terminalCommand{
commandHandler: t.verifySignCommand,
description: "verifies a BLS signature of a message",
})
return &t
}
@ -144,6 +148,43 @@ func (t *terminal) dropOperationLogCommand() error {
return nil
}
func (t *terminal) verifySignCommand() error {
fmt.Print("> Enter the DKGRoundIdentifier: ")
dkgRoundIdentifier, err := t.reader.ReadString('\n')
if err != nil {
return fmt.Errorf("failed to read dkgRoundIdentifier: %w", err)
}
fmt.Print("> Enter the BLS signature: ")
signature, err := t.reader.ReadString('\n')
if err != nil {
return fmt.Errorf("failed to read BLS signature (base64): %w", err)
}
signatureDecoded, err := base64.StdEncoding.DecodeString(strings.Trim(signature, "\n"))
if err != nil {
return fmt.Errorf("failed to decode BLS signature: %w", err)
}
fmt.Print("> Enter the message which was signed (base64): ")
message, err := t.reader.ReadString('\n')
if err != nil {
return fmt.Errorf("failed to read dkgRoundIdentifier: %w", err)
}
messageDecoded, err := base64.StdEncoding.DecodeString(strings.Trim(message, "\n"))
if err != nil {
return fmt.Errorf("failed to decode message: %w", err)
}
if err := t.airgapped.VerifySign(messageDecoded, signatureDecoded, strings.Trim(dkgRoundIdentifier, "\n")); err != nil {
fmt.Printf("Signature is invalid: %v\n", err)
} else {
fmt.Println("Signature is correct!")
}
return nil
}
func (t *terminal) enterEncryptionPasswordIfNeeded() error {
t.airgapped.Lock()
defer t.airgapped.Unlock()

2
go.mod
View File

@ -24,5 +24,3 @@ require (
)
replace golang.org/x/crypto => github.com/tendermint/crypto v0.0.0-20180820045704-3764759f34a5
replace github.com/corestario/kyber => ../kyber

5
go.sum
View File

@ -17,12 +17,12 @@ github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7
github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA=
github.com/corestario/kyber v1.3.0 h1:SEWofdorUUeAJTsa9WJmrUYFyWHSWyXLgqDTFFEIzes=
github.com/corestario/kyber v1.3.0/go.mod h1:kIWfWekm8kSJNti3Fo3DCV0GHEH050MWQrdvZdefbkk=
github.com/corestario/kyber v1.4.0 h1:jSB8P5vBvRDiFESJHxlx9BzH1+E1FDQSuu7xfiCy3HY=
github.com/corestario/kyber v1.4.0/go.mod h1:kIWfWekm8kSJNti3Fo3DCV0GHEH050MWQrdvZdefbkk=
github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/depools/kyber-bls12381 v0.0.0-20200831104422-978ac58f592e h1:pi/Oli1/ryp6wx4vbGM9qEBd6LDqFN5xH+FG72x2H8I=
github.com/depools/kyber-bls12381 v0.0.0-20200831104422-978ac58f592e/go.mod h1:4sthQ2LjQIoysUBx/d+QbtjXksr3L0mgKf/Wuzy1M/4=
github.com/depools/kyber-bls12381 v0.0.0-20200929134032-c24859b7d890 h1:ra3VcXLAwGdHzcPRXkDVVr2Gb9wpi+XHyljk0J566vs=
github.com/depools/kyber-bls12381 v0.0.0-20200929134032-c24859b7d890/go.mod h1:82QP3olqMtRnlRCNxEc9/EKk1qlFCOklxasHvSnXMSI=
github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ=
@ -53,7 +53,6 @@ github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEW
github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
github.com/google/go-cmp v0.2.0 h1:+dTQ8DZQJz0Mb/HjFlkptS1FeQ4cWSnN941F8aEG4SQ=
github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
github.com/google/go-cmp v0.5.2 h1:X2ev0eStA3AbceY54o37/0PQ/UWqKEiiO2dKL5OPaFM=
github.com/google/uuid v1.1.1 h1:Gkbcsh/GbpXz7lPftLA3P6TYMwjCLYm83jiFQZF/3gY=
github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ=