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
+}