Commit d7779be9 authored by Steven Allen's avatar Steven Allen

add an explicit test case for the EmbedPublicKey function

parent 130e692f
......@@ -68,6 +68,8 @@ func GetEOL(entry *pb.IpnsEntry) (time.Time, error) {
// that don't embed their public keys as they may not be able to validate them
// efficiently.
func EmbedPublicKey(pk ic.PubKey, entry *pb.IpnsEntry) error {
// Try extracting the public key from the ID. If we can, *don't* embed
// it.
id, err := peer.IDFromPublicKey(pk)
if err != nil {
return err
......@@ -79,6 +81,9 @@ func EmbedPublicKey(pk ic.PubKey, entry *pb.IpnsEntry) error {
if extraced != nil {
return nil
}
// We failed to extract the public key from the peer ID, embed it in the
// record.
pkBytes, err := pk.Bytes()
if err != nil {
return err
......
package ipns
import (
"testing"
"time"
u "github.com/ipfs/go-ipfs-util"
ci "github.com/libp2p/go-libp2p-crypto"
peer "github.com/libp2p/go-libp2p-peer"
)
func TestEmbedPublicKey(t *testing.T) {
sr := u.NewTimeSeededRand()
priv, pub, err := ci.GenerateKeyPairWithReader(ci.RSA, 1024, sr)
if err != nil {
t.Fatal(err)
}
pid, err := peer.IDFromPublicKey(pub)
if err != nil {
t.Fatal(err)
}
e, err := Create(priv, []byte("/a/b"), 0, time.Now().Add(1*time.Hour))
if err != nil {
t.Fatal(err)
}
if err := EmbedPublicKey(pub, e); err != nil {
t.Fatal(err)
}
embeddedPk, err := ci.UnmarshalPublicKey(e.PubKey)
if err != nil {
t.Fatal(err)
}
embeddedPid, err := peer.IDFromPublicKey(embeddedPk)
if err != nil {
t.Fatal(err)
}
if embeddedPid != pid {
t.Fatalf("pid mismatch: %s != %s", pid, embeddedPid)
}
}
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment