From c85dd28171031fb112ed5746a901517fcb6ad549 Mon Sep 17 00:00:00 2001
From: Jeromy <jeromyj@gmail.com>
Date: Mon, 1 Sep 2014 19:36:03 -0700
Subject: [PATCH] add test for crypto handshake

---
 identify/identify.go      |  7 +++---
 identify/identify_test.go | 53 +++++++++++++++++++++++++++++++++++++++
 2 files changed, 57 insertions(+), 3 deletions(-)
 create mode 100644 identify/identify_test.go

diff --git a/identify/identify.go b/identify/identify.go
index 3fdb5e0df..a238c4a47 100644
--- a/identify/identify.go
+++ b/identify/identify.go
@@ -54,6 +54,7 @@ func Handshake(self, remote *peer.Peer, in, out chan []byte) error {
 	out <- encrypted
 	challenge := <-in
 
+	// Decrypt challenge and send plaintext to partner
 	plain, err := rsa.DecryptPKCS1v15(rand.Reader, self.PrivKey.(*rsa.PrivateKey), challenge)
 	if err != nil {
 		return err
@@ -108,15 +109,15 @@ type KeyPair struct {
 	Priv crypto.PrivateKey
 }
 
-func GenKeypair() (*KeyPair, error) {
-	priv, err := rsa.GenerateKey(rand.Reader, 4096)
+func GenKeypair(bits int) (*KeyPair, error) {
+	priv, err := rsa.GenerateKey(rand.Reader, bits)
 	if err != nil {
 		return nil, err
 	}
 
 	return &KeyPair{
 		Priv: priv,
-		Pub:  priv.PublicKey,
+		Pub:  &priv.PublicKey,
 	}, nil
 }
 
diff --git a/identify/identify_test.go b/identify/identify_test.go
new file mode 100644
index 000000000..1f932e6fc
--- /dev/null
+++ b/identify/identify_test.go
@@ -0,0 +1,53 @@
+package identify
+
+import (
+	"testing"
+
+	"github.com/jbenet/go-ipfs/peer"
+)
+
+func TestHandshake(t *testing.T) {
+	kpa, err := GenKeypair(512)
+	if err != nil {
+		t.Fatal(err)
+	}
+	kpb, err := GenKeypair(512)
+	if err != nil {
+		t.Fatal(err)
+	}
+
+	cha := make(chan []byte, 5)
+	chb := make(chan []byte, 5)
+
+	ida, err := kpa.ID()
+	if err != nil {
+		t.Fatal(err)
+	}
+	pa := &peer.Peer{
+		ID:      ida,
+		PubKey:  kpa.Pub,
+		PrivKey: kpa.Priv,
+	}
+
+	idb, err := kpb.ID()
+	if err != nil {
+		t.Fatal(err)
+	}
+	pb := &peer.Peer{
+		ID:      idb,
+		PubKey:  kpb.Pub,
+		PrivKey: kpb.Priv,
+	}
+
+	go func() {
+		err := Handshake(pa, pb, cha, chb)
+		if err != nil {
+			t.Fatal(err)
+		}
+	}()
+
+	err = Handshake(pb, pa, chb, cha)
+	if err != nil {
+		t.Fatal(err)
+	}
+}
-- 
GitLab