mirror of https://github.com/certusone/dc4bc.git
added airgapped command to verify BLS signature
This commit is contained in:
parent
3c7dc184a4
commit
c95c91a54a
|
@ -1,6 +1,7 @@
|
||||||
package airgapped
|
package airgapped
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"encoding/base64"
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
|
@ -106,7 +107,7 @@ func (am *AirgappedMachine) reconstructThresholdSignature(o *client.Operation) e
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("failed to reconsruct full signature for msg: %w", err)
|
return fmt.Errorf("failed to reconsruct full signature for msg: %w", err)
|
||||||
}
|
}
|
||||||
fmt.Println(reconstructedSignature)
|
fmt.Println(base64.StdEncoding.EncodeToString(reconstructedSignature))
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -133,7 +134,7 @@ func (am *AirgappedMachine) recoverFullSign(msg []byte, sigShares [][]byte, t, n
|
||||||
}
|
}
|
||||||
|
|
||||||
// verifySign verifies a signature of a message
|
// 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)
|
blsKeyring, err := am.loadBLSKeyring(dkgIdentifier)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("failed to load blsKeyring: %w", err)
|
return fmt.Errorf("failed to load blsKeyring: %w", err)
|
||||||
|
|
|
@ -68,6 +68,10 @@ func NewTerminal(machine *airgapped.AirgappedMachine) *terminal {
|
||||||
},
|
},
|
||||||
description: "stops the machine",
|
description: "stops the machine",
|
||||||
})
|
})
|
||||||
|
t.addCommand("verify_signature", &terminalCommand{
|
||||||
|
commandHandler: t.verifySignCommand,
|
||||||
|
description: "verifies a BLS signature of a message",
|
||||||
|
})
|
||||||
return &t
|
return &t
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -144,6 +148,43 @@ func (t *terminal) dropOperationLogCommand() error {
|
||||||
return nil
|
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 {
|
func (t *terminal) enterEncryptionPasswordIfNeeded() error {
|
||||||
t.airgapped.Lock()
|
t.airgapped.Lock()
|
||||||
defer t.airgapped.Unlock()
|
defer t.airgapped.Unlock()
|
||||||
|
|
2
go.mod
2
go.mod
|
@ -24,5 +24,3 @@ require (
|
||||||
)
|
)
|
||||||
|
|
||||||
replace golang.org/x/crypto => github.com/tendermint/crypto v0.0.0-20180820045704-3764759f34a5
|
replace golang.org/x/crypto => github.com/tendermint/crypto v0.0.0-20180820045704-3764759f34a5
|
||||||
|
|
||||||
replace github.com/corestario/kyber => ../kyber
|
|
||||||
|
|
5
go.sum
5
go.sum
|
@ -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/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 h1:SEWofdorUUeAJTsa9WJmrUYFyWHSWyXLgqDTFFEIzes=
|
||||||
github.com/corestario/kyber v1.3.0/go.mod h1:kIWfWekm8kSJNti3Fo3DCV0GHEH050MWQrdvZdefbkk=
|
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/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.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 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
|
||||||
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
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 h1:ra3VcXLAwGdHzcPRXkDVVr2Gb9wpi+XHyljk0J566vs=
|
||||||
github.com/depools/kyber-bls12381 v0.0.0-20200929134032-c24859b7d890/go.mod h1:82QP3olqMtRnlRCNxEc9/EKk1qlFCOklxasHvSnXMSI=
|
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=
|
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/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 h1:+dTQ8DZQJz0Mb/HjFlkptS1FeQ4cWSnN941F8aEG4SQ=
|
||||||
github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
|
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 h1:Gkbcsh/GbpXz7lPftLA3P6TYMwjCLYm83jiFQZF/3gY=
|
||||||
github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
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=
|
github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ=
|
||||||
|
|
Loading…
Reference in New Issue