address comments from the PR #45
Jeromy committed
Sep 15, 2014 at 20:32 UTC
d1f011244f7991a9332a1f238be08a0e308b11e4
9 files changed
+64
-21
crypto/key.go
+3
@@ -27,6 +27,9 @@ type Key interface {
27
// Bytes returns a serialized, storeable representation of this key
28
Bytes() ([]byte, error)
29
30
+ // Hash returns the hash of this key
31
+ Hash() ([]byte, error)
32
+
33
// Equals checks whether two PubKeys are the same
34
Equals(Key) bool
35
}
crypto/rsa.go
+17
@@ -9,6 +9,7 @@ import (
9
"errors"
10
11
"github.com/jbenet/go-ipfs/Godeps/_workspace/src/code.google.com/p/goprotobuf/proto"
12
+ u "github.com/jbenet/go-ipfs/util"
13
)
14
15
type RsaPrivateKey struct {
@@ -46,6 +47,14 @@ func (pk *RsaPublicKey) Equals(k Key) bool {
47
return KeyEqual(pk, k)
48
}
49
50
+func (pk *RsaPublicKey) Hash() ([]byte, error) {
51
+ pkb, err := pk.Bytes()
52
+ if err != nil {
53
+ return nil, err
54
+ }
55
+ return u.Hash(pkb)
56
+}
57
+
58
func (sk *RsaPrivateKey) GenSecret() []byte {
59
buf := make([]byte, 16)
60
rand.Read(buf)
@@ -75,6 +84,14 @@ func (sk *RsaPrivateKey) Equals(k Key) bool {
84
return KeyEqual(sk, k)
85
}
86
87
+func (sk *RsaPrivateKey) Hash() ([]byte, error) {
88
+ skb, err := sk.Bytes()
89
+ if err != nil {
90
+ return nil, err
91
+ }
92
+ return u.Hash(skb)
93
+}
94
+
95
func UnmarshalRsaPrivateKey(b []byte) (*RsaPrivateKey, error) {
96
sk, err := x509.ParsePKCS1PrivateKey(b)
97
if err != nil {
crypto/spipe/handshake.go
+2
-2
@@ -230,7 +230,7 @@ func (s *SecurePipe) handleSecureIn(hashType string, tIV, tCKey, tMKey []byte) {
230
data, ok := <-s.insecure.In
231
if !ok {
232
u.DOut("Closing incoming proxy.\n")
233
- close(secureIn)
233
+ close(s.In)
234
return
235
}
236
@@ -268,7 +268,7 @@ func (s *SecurePipe) handleSecureOut(hashType string, mIV, mCKey, mMKey []byte)
268
data, ok := <-s.Out
269
if !ok {
270
u.DOut("Closing outgoing proxy.\n")
271
- close(secureOut)
271
+ close(s.Out)
272
return
273
}
274
namesys/dns.go
+4
@@ -12,6 +12,10 @@ type DNSResolver struct {
12
// cache would need a timeout
13
}
14
15
+func (r *DNSResolver) Matches(name string) bool {
16
+ return strings.Contains(name, ".")
17
+}
18
+
19
func (r *DNSResolver) Resolve(name string) (string, error) {
20
txt, err := net.LookupTXT(name)
21
if err != nil {
namesys/nsresolver.go
+1
@@ -2,4 +2,5 @@ package namesys
2
3
type Resolver interface {
4
Resolve(string) (string, error)
5
+ Matches(string) bool
6
}
namesys/proquint.go
+5
@@ -10,6 +10,11 @@ var _ = proquint.Encode
10
11
type ProquintResolver struct{}
12
13
+func (r *ProquintResolver) Matches(name string) bool {
14
+ ok, err := proquint.IsProquint(name)
15
+ return err == nil && ok
16
+}
17
+
18
func (r *ProquintResolver) Resolve(name string) (string, error) {
19
ok, err := proquint.IsProquint(name)
20
if err != nil {
namesys/publisher.go
+2
-2
@@ -32,7 +32,7 @@ func (p *IpnsPublisher) Publish(k ci.PrivKey, value u.Key) error {
32
}
33
namekey := u.Key(nameb).Pretty()
34
35
- ipnskey, err := u.Hash([]byte("ipns:" + namekey))
35
+ ipnskey, err := u.Hash([]byte("/ipns/" + namekey))
36
if err != nil {
37
return err
38
}
@@ -43,7 +43,7 @@ func (p *IpnsPublisher) Publish(k ci.PrivKey, value u.Key) error {
43
return err
44
}
45
46
- // Store ipns entry at h("ipns:"+b58(h(pubkey)))
46
+ // Store ipns entry at h("/ipns/"+b58(h(pubkey)))
47
err = p.routing.PutValue(u.Key(ipnskey), data)
48
if err != nil {
49
return err
namesys/resolver.go
+21
-13
@@ -1,34 +1,42 @@
1
package namesys
2
3
import (
4
- "strings"
4
+ "errors"
5
6
mdag "github.com/jbenet/go-ipfs/merkledag"
7
"github.com/jbenet/go-ipfs/routing"
8
)
9
10
+var ErrCouldntResolve = errors.New("could not resolve name.")
11
+
12
type MasterResolver struct {
11
- dns *DNSResolver
12
- routing *RoutingResolver
13
- pro *ProquintResolver
13
+ res []Resolver
14
}
15
16
func NewMasterResolver(r routing.IpfsRouting, dag *mdag.DAGService) *MasterResolver {
17
mr := new(MasterResolver)
18
- mr.dns = new(DNSResolver)
19
- mr.pro = new(ProquintResolver)
20
- mr.routing = NewRoutingResolver(r, dag)
18
+ mr.res = []Resolver{
19
+ new(DNSResolver),
20
+ new(ProquintResolver),
21
+ NewRoutingResolver(r, dag),
22
+ }
23
return mr
24
}
25
26
func (mr *MasterResolver) Resolve(name string) (string, error) {
25
- if strings.Contains(name, ".") {
26
- return mr.dns.Resolve(name)
27
+ for _, r := range mr.res {
28
+ if r.Matches(name) {
29
+ return r.Resolve(name)
30
+ }
31
}
32
+ return "", ErrCouldntResolve
33
+}
34
29
- if strings.Contains(name, "-") {
30
- return mr.pro.Resolve(name)
35
+func (mr *MasterResolver) Matches(name string) bool {
36
+ for _, r := range mr.res {
37
+ if r.Matches(name) {
38
+ return true
39
+ }
40
}
32
-
33
- return mr.routing.Resolve(name)
41
+ return false
42
}
namesys/routing.go
+9
-4
@@ -26,6 +26,11 @@ func NewRoutingResolver(route routing.IpfsRouting, dagservice *mdag.DAGService)
26
}
27
}
28
29
+func (r *RoutingResolver) Matches(name string) bool {
30
+ _, err := mh.FromB58String(name)
31
+ return err == nil
32
+}
33
+
34
func (r *RoutingResolver) Resolve(name string) (string, error) {
35
hash, err := mh.FromB58String(name)
36
if err != nil {
@@ -36,13 +41,13 @@ func (r *RoutingResolver) Resolve(name string) (string, error) {
41
42
// use the routing system to get the name.
43
// /ipns/<name>
39
- h, err := u.Hash([]byte("ipns:" + name))
44
+ h, err := u.Hash([]byte("/ipns/" + name))
45
if err != nil {
46
return "", err
47
}
48
44
- inpsKey := u.Key(h)
45
- val, err := r.routing.GetValue(inpsKey, time.Second*10)
49
+ ipnsKey := u.Key(h)
50
+ val, err := r.routing.GetValue(ipnsKey, time.Second*10)
51
if err != nil {
52
u.DOut("RoutingResolve get failed.\n")
53
return "", err
@@ -70,7 +75,7 @@ func (r *RoutingResolver) Resolve(name string) (string, error) {
75
}
76
77
// check sig with pk
73
- if ok, err := pk.Verify(entry.GetValue(), entry.GetSignature()); err != nil && ok {
78
+ if ok, err := pk.Verify(entry.GetValue(), entry.GetSignature()); err != nil || !ok {
79
return "", fmt.Errorf("Invalid value. Not signed by PrivateKey corresponding to %v", pk)
80
}
81