func defaultRepo(dstore repo.Datastore) (repo.Repo, error) { c := cfg.Config{} priv, pub, err := ci.GenerateKeyPairWithReader(ci.RSA, 1024, rand.Reader) if err != nil { return nil, err } data, err := pub.Hash() if err != nil { return nil, err } privkeyb, err := priv.Bytes() if err != nil { return nil, err } c.Bootstrap = cfg.DefaultBootstrapAddresses c.Addresses.Swarm = []string{"/ip4/0.0.0.0/tcp/4001"} c.Identity.PeerID = key.Key(data).B58String() c.Identity.PrivKey = base64.StdEncoding.EncodeToString(privkeyb) return &repo.Mock{ D: dstore, C: c, }, nil }
func IdentityKeyFromSeed(seed []byte, bits int) ([]byte, error) { reader := &DeterministicReader{Seed: seed, Counter: 0} sk, _, err := libp2p.GenerateKeyPairWithReader(libp2p.RSA, bits, reader) if err != nil { return nil, err } encodedKey, err := libp2p.MarshalPrivateKey(sk) if err != nil { return nil, err } return encodedKey, nil }
func SeededTestKeyPair(seed int64) (ci.PrivKey, ci.PubKey, error) { return ci.GenerateKeyPairWithReader(ci.RSA, 512, u.NewSeededRand(seed)) }
func RandTestKeyPair(bits int) (ci.PrivKey, ci.PubKey, error) { return ci.GenerateKeyPairWithReader(ci.RSA, bits, u.NewTimeSeededRand()) }
func TestOrdering(t *testing.T) { // select timestamp so selection is deterministic ts := time.Unix(1000000, 0) // generate a key for signing the records r := u.NewSeededRand(15) // generate deterministic keypair priv, _, err := ci.GenerateKeyPairWithReader(ci.RSA, 1024, r) if err != nil { t.Fatal(err) } e1, err := CreateRoutingEntryData(priv, path.Path("foo"), 1, ts.Add(time.Hour)) if err != nil { t.Fatal(err) } e2, err := CreateRoutingEntryData(priv, path.Path("bar"), 2, ts.Add(time.Hour)) if err != nil { t.Fatal(err) } e3, err := CreateRoutingEntryData(priv, path.Path("baz"), 3, ts.Add(time.Hour)) if err != nil { t.Fatal(err) } e4, err := CreateRoutingEntryData(priv, path.Path("cat"), 3, ts.Add(time.Hour*2)) if err != nil { t.Fatal(err) } e5, err := CreateRoutingEntryData(priv, path.Path("dog"), 4, ts.Add(time.Hour*3)) if err != nil { t.Fatal(err) } e6, err := CreateRoutingEntryData(priv, path.Path("fish"), 4, ts.Add(time.Hour*3)) if err != nil { t.Fatal(err) } // e1 is the only record, i hope it gets this right err = AssertSelected(e1, e1) if err != nil { t.Fatal(err) } // e2 has the highest sequence number err = AssertSelected(e2, e1, e2) if err != nil { t.Fatal(err) } // e3 has the highest sequence number err = AssertSelected(e3, e1, e2, e3) if err != nil { t.Fatal(err) } // e4 has a higher timeout err = AssertSelected(e4, e1, e2, e3, e4) if err != nil { t.Fatal(err) } // e5 has the highest sequence number err = AssertSelected(e5, e1, e2, e3, e4, e5) if err != nil { t.Fatal(err) } // e6 should be selected as its signauture will win in the comparison err = AssertSelected(e6, e1, e2, e3, e4, e5, e6) if err != nil { t.Fatal(err) } _ = []interface{}{e1, e2, e3, e4, e5, e6} }