From e9dafb60386814cb1f3467360e3f064f62ec6d1d Mon Sep 17 00:00:00 2001 From: Richard Ramos Date: Mon, 21 Feb 2022 15:21:31 -0400 Subject: [PATCH] fix: remove public key (#193) --- waku/v2/utils/enr.go | 7 ++- waku/v2/utils/public_key.go | 79 -------------------------------- waku/v2/utils/public_key_test.go | 49 -------------------- 3 files changed, 5 insertions(+), 130 deletions(-) delete mode 100644 waku/v2/utils/public_key.go delete mode 100644 waku/v2/utils/public_key_test.go diff --git a/waku/v2/utils/enr.go b/waku/v2/utils/enr.go index c5366b08..2ff67ed1 100644 --- a/waku/v2/utils/enr.go +++ b/waku/v2/utils/enr.go @@ -11,6 +11,7 @@ import ( "github.com/ethereum/go-ethereum/p2p/enode" "github.com/ethereum/go-ethereum/p2p/enr" + "github.com/libp2p/go-libp2p-core/crypto" "github.com/libp2p/go-libp2p-core/peer" ma "github.com/multiformats/go-multiaddr" "go.uber.org/zap" @@ -125,7 +126,8 @@ func GetENRandIP(addr ma.Multiaddr, wakuFlags WakuEnrBitfield, privK *ecdsa.Priv } func EnodeToMultiAddr(node *enode.Node) (ma.Multiaddr, error) { - peerID, err := peer.IDFromPublicKey(&ECDSAPublicKey{node.Pubkey()}) + pubKey := (*crypto.Secp256k1PublicKey)(node.Pubkey()) + peerID, err := peer.IDFromPublicKey(pubKey) if err != nil { return nil, err } @@ -134,7 +136,8 @@ func EnodeToMultiAddr(node *enode.Node) (ma.Multiaddr, error) { } func Multiaddress(node *enode.Node) ([]ma.Multiaddr, error) { - peerID, err := peer.IDFromPublicKey(&ECDSAPublicKey{node.Pubkey()}) + pubKey := (*crypto.Secp256k1PublicKey)(node.Pubkey()) + peerID, err := peer.IDFromPublicKey(pubKey) if err != nil { return nil, err } diff --git a/waku/v2/utils/public_key.go b/waku/v2/utils/public_key.go deleted file mode 100644 index 937adc49..00000000 --- a/waku/v2/utils/public_key.go +++ /dev/null @@ -1,79 +0,0 @@ -package utils - -import ( - "crypto/ecdsa" - "crypto/subtle" - "encoding/asn1" - "errors" - "math/big" - - ethcrypto "github.com/ethereum/go-ethereum/crypto" - "github.com/libp2p/go-libp2p-core/crypto" - pb "github.com/libp2p/go-libp2p-core/crypto/pb" - "github.com/minio/sha256-simd" -) - -// Taken from: https://github.com/libp2p/go-libp2p-core/blob/094b0d3f8ba2934339cb35e1a875b11ab6d08839/crypto/ecdsa.go as -// they don't provide a way to set the key -var ErrNilSig = errors.New("sig is nil") - -// ECDSASig holds the r and s values of an ECDSA signature -type ECDSASig struct { - R, S *big.Int -} - -// ECDSAPublicKey is an implementation of an ECDSA public key -type ECDSAPublicKey struct { - pub *ecdsa.PublicKey -} - -// Type returns the key type -func (ePub *ECDSAPublicKey) Type() pb.KeyType { - return pb.KeyType_Secp256k1 -} - -// Raw returns x509 bytes from a public key -func (ePub *ECDSAPublicKey) Raw() ([]byte, error) { - return ethcrypto.CompressPubkey(ePub.pub), nil -} - -// Bytes returns the public key as protobuf bytes -func (ePub *ECDSAPublicKey) Bytes() ([]byte, error) { - return crypto.MarshalPublicKey(ePub) -} - -// Equals compares to public keys -func (ePub *ECDSAPublicKey) Equals(o crypto.Key) bool { - return basicEquals(ePub, o) -} - -// Verify compares data to a signature -func (ePub *ECDSAPublicKey) Verify(data, sigBytes []byte) (bool, error) { - sig := new(ECDSASig) - if _, err := asn1.Unmarshal(sigBytes, sig); err != nil { - return false, err - } - if sig == nil { - return false, ErrNilSig - } - - hash := sha256.Sum256(data) - - return ecdsa.Verify(ePub.pub, hash[:], sig.R, sig.S), nil -} - -func basicEquals(k1, k2 crypto.Key) bool { - if k1.Type() != k2.Type() { - return false - } - - a, err := k1.Raw() - if err != nil { - return false - } - b, err := k2.Raw() - if err != nil { - return false - } - return subtle.ConstantTimeCompare(a, b) == 1 -} diff --git a/waku/v2/utils/public_key_test.go b/waku/v2/utils/public_key_test.go deleted file mode 100644 index 165f88e8..00000000 --- a/waku/v2/utils/public_key_test.go +++ /dev/null @@ -1,49 +0,0 @@ -package utils - -import ( - "crypto/ecdsa" - "crypto/rand" - "testing" - - "github.com/libp2p/go-libp2p-core/crypto" - pb "github.com/libp2p/go-libp2p-core/crypto/pb" - "github.com/minio/sha256-simd" - "github.com/stretchr/testify/require" -) - -func TestBasicEquals(t *testing.T) { - _, pub1, err := crypto.GenerateECDSAKeyPair(rand.Reader) - require.NoError(t, err) - - _, pub2, err := crypto.GenerateECDSAKeyPair(rand.Reader) - require.NoError(t, err) - - require.False(t, basicEquals(pub1, pub2)) - require.True(t, basicEquals(pub1, pub1)) -} - -func TestSignAndVerify(t *testing.T) { - priv1, err := ecdsa.GenerateKey(crypto.ECDSACurve, rand.Reader) - require.NoError(t, err) - pub1 := ECDSAPublicKey{pub: &priv1.PublicKey} - - require.Equal(t, pb.KeyType_Secp256k1, pub1.Type()) - - msg := []byte("hello world") - - data := sha256.Sum256(msg) - sig, err := priv1.Sign(rand.Reader, data[:], nil) - if err != nil { - t.Fatal(err) - } - - ok, err := pub1.Verify(msg, sig) - require.NoError(t, err) - require.True(t, ok) - - // change data - data[0] = ^data[0] - ok, err = pub1.Verify(data[:], sig) - require.NoError(t, err) - require.False(t, ok) -}