@cryptotaxi247 / kubo / commits / d1f011244

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