github.com/keltia/go-ipfs@v0.3.8-0.20150909044612-210793031c63/p2p/peer/peer_test.go (about) 1 package peer_test 2 3 import ( 4 "encoding/base64" 5 "fmt" 6 "strings" 7 "testing" 8 9 ic "github.com/ipfs/go-ipfs/p2p/crypto" 10 . "github.com/ipfs/go-ipfs/p2p/peer" 11 u "github.com/ipfs/go-ipfs/util" 12 tu "github.com/ipfs/go-ipfs/util/testutil" 13 14 b58 "github.com/ipfs/go-ipfs/Godeps/_workspace/src/github.com/jbenet/go-base58" 15 ) 16 17 var gen1 keyset // generated 18 var gen2 keyset // generated 19 var man keyset // manual 20 21 func init() { 22 if err := gen1.generate(); err != nil { 23 panic(err) 24 } 25 if err := gen2.generate(); err != nil { 26 panic(err) 27 } 28 29 skManBytes = strings.Replace(skManBytes, "\n", "", -1) 30 if err := man.load(hpkpMan, skManBytes); err != nil { 31 panic(err) 32 } 33 } 34 35 type keyset struct { 36 sk ic.PrivKey 37 pk ic.PubKey 38 hpk string 39 hpkp string 40 } 41 42 func (ks *keyset) generate() error { 43 var err error 44 ks.sk, ks.pk, err = tu.RandTestKeyPair(512) 45 if err != nil { 46 return err 47 } 48 49 bpk, err := ks.pk.Bytes() 50 if err != nil { 51 return err 52 } 53 54 ks.hpk = string(u.Hash(bpk)) 55 ks.hpkp = b58.Encode([]byte(ks.hpk)) 56 return nil 57 } 58 59 func (ks *keyset) load(hpkp, skBytesStr string) error { 60 skBytes, err := base64.StdEncoding.DecodeString(skBytesStr) 61 if err != nil { 62 return err 63 } 64 65 ks.sk, err = ic.UnmarshalPrivateKey(skBytes) 66 if err != nil { 67 return err 68 } 69 70 ks.pk = ks.sk.GetPublic() 71 bpk, err := ks.pk.Bytes() 72 if err != nil { 73 return err 74 } 75 76 ks.hpk = string(u.Hash(bpk)) 77 ks.hpkp = b58.Encode([]byte(ks.hpk)) 78 if ks.hpkp != hpkp { 79 return fmt.Errorf("hpkp doesn't match key. %s", hpkp) 80 } 81 return nil 82 } 83 84 func TestIDMatchesPublicKey(t *testing.T) { 85 86 test := func(ks keyset) { 87 p1, err := IDB58Decode(ks.hpkp) 88 if err != nil { 89 t.Fatal(err) 90 } 91 92 if ks.hpk != string(p1) { 93 t.Error("p1 and hpk differ") 94 } 95 96 if !p1.MatchesPublicKey(ks.pk) { 97 t.Fatal("p1 does not match pk") 98 } 99 100 p2, err := IDFromPublicKey(ks.pk) 101 if err != nil { 102 t.Fatal(err) 103 } 104 105 if p1 != p2 { 106 t.Error("p1 and p2 differ", p1.Pretty(), p2.Pretty()) 107 } 108 109 if p2.Pretty() != ks.hpkp { 110 t.Error("hpkp and p2.Pretty differ", ks.hpkp, p2.Pretty()) 111 } 112 } 113 114 test(gen1) 115 test(gen2) 116 test(man) 117 } 118 119 func TestIDMatchesPrivateKey(t *testing.T) { 120 121 test := func(ks keyset) { 122 p1, err := IDB58Decode(ks.hpkp) 123 if err != nil { 124 t.Fatal(err) 125 } 126 127 if ks.hpk != string(p1) { 128 t.Error("p1 and hpk differ") 129 } 130 131 if !p1.MatchesPrivateKey(ks.sk) { 132 t.Fatal("p1 does not match sk") 133 } 134 135 p2, err := IDFromPrivateKey(ks.sk) 136 if err != nil { 137 t.Fatal(err) 138 } 139 140 if p1 != p2 { 141 t.Error("p1 and p2 differ", p1.Pretty(), p2.Pretty()) 142 } 143 } 144 145 test(gen1) 146 test(gen2) 147 test(man) 148 } 149 150 var hpkpMan = `QmRK3JgmVEGiewxWbhpXLJyjWuGuLeSTMTndA1coMHEy5o` 151 var skManBytes = ` 152 CAAS4AQwggJcAgEAAoGBAL7w+Wc4VhZhCdM/+Hccg5Nrf4q9NXWwJylbSrXz/unFS24wyk6pEk0zi3W 153 7li+vSNVO+NtJQw9qGNAMtQKjVTP+3Vt/jfQRnQM3s6awojtjueEWuLYVt62z7mofOhCtj+VwIdZNBo 154 /EkLZ0ETfcvN5LVtLYa8JkXybnOPsLvK+PAgMBAAECgYBdk09HDM7zzL657uHfzfOVrdslrTCj6p5mo 155 DzvCxLkkjIzYGnlPuqfNyGjozkpSWgSUc+X+EGLLl3WqEOVdWJtbM61fewEHlRTM5JzScvwrJ39t7o6 156 CCAjKA0cBWBd6UWgbN/t53RoWvh9HrA2AW5YrT0ZiAgKe9y7EMUaENVJ8QJBAPhpdmb4ZL4Fkm4OKia 157 NEcjzn6mGTlZtef7K/0oRC9+2JkQnCuf6HBpaRhJoCJYg7DW8ZY+AV6xClKrgjBOfERMCQQDExhnzu2 158 dsQ9k8QChBlpHO0TRbZBiQfC70oU31kM1AeLseZRmrxv9Yxzdl8D693NNWS2JbKOXl0kMHHcuGQLMVA 159 kBZ7WvkmPV3aPL6jnwp2pXepntdVnaTiSxJ1dkXShZ/VSSDNZMYKY306EtHrIu3NZHtXhdyHKcggDXr 160 qkBrdgErAkAlpGPojUwemOggr4FD8sLX1ot2hDJyyV7OK2FXfajWEYJyMRL1Gm9Uk1+Un53RAkJneqp 161 JGAzKpyttXBTIDO51AkEA98KTiROMnnU8Y6Mgcvr68/SMIsvCYMt9/mtwSBGgl80VaTQ5Hpaktl6Xbh 162 VUt5Wv0tRxlXZiViCGCD1EtrrwTw== 163 `