@cryptotaxi247 / kubo / commits / c85dd2817

add test for crypto handshake

Jeromy committed Sep 1, 2014 at 19:36 UTC c85dd28171031fb112ed5746a901517fcb6ad549
2 files changed +57 -3
identify/identify.go
+4 -3
@@ -54,6 +54,7 @@ func Handshake(self, remote *peer.Peer, in, out chan []byte) error {
54 out <- encrypted
55 challenge := <-in
56
57 + // Decrypt challenge and send plaintext to partner
58 plain, err := rsa.DecryptPKCS1v15(rand.Reader, self.PrivKey.(*rsa.PrivateKey), challenge)
59 if err != nil {
60 return err
@@ -108,15 +109,15 @@ type KeyPair struct {
109 Priv crypto.PrivateKey
110 }
111
111 -func GenKeypair() (*KeyPair, error) {
112 - priv, err := rsa.GenerateKey(rand.Reader, 4096)
112 +func GenKeypair(bits int) (*KeyPair, error) {
113 + priv, err := rsa.GenerateKey(rand.Reader, bits)
114 if err != nil {
115 return nil, err
116 }
117
118 return &KeyPair{
119 Priv: priv,
119 - Pub: priv.PublicKey,
120 + Pub: &priv.PublicKey,
121 }, nil
122 }
123
identify/identify_test.go new
+53
@@ -0,0 +1,53 @@
1 +package identify
2 +
3 +import (
4 + "testing"
5 +
6 + "github.com/jbenet/go-ipfs/peer"
7 +)
8 +
9 +func TestHandshake(t *testing.T) {
10 + kpa, err := GenKeypair(512)
11 + if err != nil {
12 + t.Fatal(err)
13 + }
14 + kpb, err := GenKeypair(512)
15 + if err != nil {
16 + t.Fatal(err)
17 + }
18 +
19 + cha := make(chan []byte, 5)
20 + chb := make(chan []byte, 5)
21 +
22 + ida, err := kpa.ID()
23 + if err != nil {
24 + t.Fatal(err)
25 + }
26 + pa := &peer.Peer{
27 + ID: ida,
28 + PubKey: kpa.Pub,
29 + PrivKey: kpa.Priv,
30 + }
31 +
32 + idb, err := kpb.ID()
33 + if err != nil {
34 + t.Fatal(err)
35 + }
36 + pb := &peer.Peer{
37 + ID: idb,
38 + PubKey: kpb.Pub,
39 + PrivKey: kpb.Priv,
40 + }
41 +
42 + go func() {
43 + err := Handshake(pa, pb, cha, chb)
44 + if err != nil {
45 + t.Fatal(err)
46 + }
47 + }()
48 +
49 + err = Handshake(pb, pa, chb, cha)
50 + if err != nil {
51 + t.Fatal(err)
52 + }
53 +}