From 4391ba4ff4df2580d68cc1bdadea5dc38240e801 Mon Sep 17 00:00:00 2001 From: Juan Batiz-Benet Date: Sat, 20 Dec 2014 13:23:40 -0800 Subject: [PATCH] testutil: use crand for PeerID gen RandPeerID generates random "valid" peer IDs. it does not NEED to generate keys because it is as if we lost the key right away. fine to read some randomness and hash it. to generate proper keys and an ID, use: sk, pk, _ := testutil.RandKeyPair() id, _ := peer.IDFromPublicKey(pk) Also added RandPeerIDFatal helper --- util/testutil/gen.go | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/util/testutil/gen.go b/util/testutil/gen.go index 46bc3ce36..585f563fc 100644 --- a/util/testutil/gen.go +++ b/util/testutil/gen.go @@ -2,12 +2,15 @@ package testutil import ( "bytes" + crand "crypto/rand" "errors" "fmt" + "io" "testing" ci "github.com/jbenet/go-ipfs/crypto" peer "github.com/jbenet/go-ipfs/peer" + u "github.com/jbenet/go-ipfs/util" ma "github.com/jbenet/go-ipfs/Godeps/_workspace/src/github.com/jbenet/go-multiaddr" ) @@ -16,12 +19,26 @@ func RandKeyPair(bits int) (ci.PrivKey, ci.PubKey, error) { return ci.GenerateKeyPair(ci.RSA, bits) } +// RandPeerID generates random "valid" peer IDs. it does not NEED to generate +// keys because it is as if we lost the key right away. fine to read randomness +// and hash it. to generate proper keys and corresponding PeerID, use: +// sk, pk, _ := testutil.RandKeyPair() +// id, _ := peer.IDFromPublicKey(pk) func RandPeerID() (peer.ID, error) { - _, pk, err := ci.GenerateKeyPair(ci.RSA, 512) - if err != nil { + buf := make([]byte, 16) + if _, err := io.ReadFull(crand.Reader, buf); err != nil { return "", err } - return peer.IDFromPublicKey(pk) + h := u.Hash(buf) + return peer.ID(h), nil +} + +func RandPeerIDFatal(t testing.TB) peer.ID { + p, err := RandPeerID() + if err != nil { + t.Fatal(err) + } + return p } var nextPort = 0