From 893152e52ba69edc047ca16b25e9a04724792f62 Mon Sep 17 00:00:00 2001 From: Anton Evangelatov Date: Fri, 1 Dec 2017 18:40:16 +0100 Subject: [PATCH] p2p/enr: using btcec library for signing and verifying of signature, instead of crypto --- p2p/enr/enr.go | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/p2p/enr/enr.go b/p2p/enr/enr.go index b1ccf78d6d..a4b4ac1ab0 100644 --- a/p2p/enr/enr.go +++ b/p2p/enr/enr.go @@ -222,10 +222,12 @@ func (r *Record) signAndEncode(privkey *ecdsa.PrivateKey) error { digest := crypto.Keccak256Hash(sigcontent) - r.signature, err = crypto.Sign(digest.Bytes(), privkey) + key := btcec.PrivateKey(*privkey) + signature, err := key.Sign(digest.Bytes()) if err != nil { return err } + r.signature = signature.Serialize() blob, err := rlp.EncodeToBytes(r.signature) if err != nil { @@ -263,7 +265,6 @@ func (r *Record) verifySignature() error { if err != nil { return err } - pubkey1 := pk.SerializeUncompressed() // get publickey from message and signature sigcontent, err := r.serialisedContent() @@ -273,13 +274,13 @@ func (r *Record) verifySignature() error { digest := crypto.Keccak256Hash(sigcontent) - pubkey2, err := crypto.Ecrecover(digest.Bytes(), r.signature) + sign, err := btcec.ParseSignature(r.signature, btcec.S256()) if err != nil { return err } - if bytes.Compare(pubkey1, pubkey2) != 0 { - return errors.New("public key mismatch") + if !sign.Verify(digest.Bytes(), pk) { + return errors.New("signature is not valid") } return nil