github.com/zignig/go-ipfs@v0.0.0-20141111235910-c9e5fdf55a52/crypto/key_test.go (about) 1 package crypto 2 3 import "testing" 4 5 func TestRsaKeys(t *testing.T) { 6 sk, pk, err := GenerateKeyPair(RSA, 512) 7 if err != nil { 8 t.Fatal(err) 9 } 10 testKeySignature(t, sk) 11 testKeyEncoding(t, sk) 12 testKeyEquals(t, sk) 13 testKeyEquals(t, pk) 14 } 15 16 func testKeySignature(t *testing.T, sk PrivKey) { 17 pk := sk.GetPublic() 18 19 text := sk.GenSecret() 20 sig, err := sk.Sign(text) 21 if err != nil { 22 t.Fatal(err) 23 } 24 25 valid, err := pk.Verify(text, sig) 26 if err != nil { 27 t.Fatal(err) 28 } 29 30 if !valid { 31 t.Fatal("Invalid signature.") 32 } 33 } 34 35 func testKeyEncoding(t *testing.T, sk PrivKey) { 36 skb, err := sk.Bytes() 37 if err != nil { 38 t.Fatal(err) 39 } 40 41 _, err = UnmarshalPrivateKey(skb) 42 if err != nil { 43 t.Fatal(err) 44 } 45 46 pk := sk.GetPublic() 47 pkb, err := pk.Bytes() 48 if err != nil { 49 t.Fatal(err) 50 } 51 52 _, err = UnmarshalPublicKey(pkb) 53 if err != nil { 54 t.Fatal(err) 55 } 56 } 57 58 func testKeyEquals(t *testing.T, k Key) { 59 kb, err := k.Bytes() 60 if err != nil { 61 t.Fatal(err) 62 } 63 64 if !KeyEqual(k, k) { 65 t.Fatal("Key not equal to itself.") 66 } 67 68 if !KeyEqual(k, testkey(kb)) { 69 t.Fatal("Key not equal to key with same bytes.") 70 } 71 72 sk, pk, err := GenerateKeyPair(RSA, 512) 73 if err != nil { 74 t.Fatal(err) 75 } 76 77 if KeyEqual(k, sk) { 78 t.Fatal("Keys should not equal.") 79 } 80 81 if KeyEqual(k, pk) { 82 t.Fatal("Keys should not equal.") 83 } 84 } 85 86 type testkey []byte 87 88 func (pk testkey) Bytes() ([]byte, error) { 89 return pk, nil 90 } 91 92 func (pk testkey) Equals(k Key) bool { 93 return KeyEqual(pk, k) 94 } 95 96 func (pk testkey) Hash() ([]byte, error) { 97 return KeyHash(pk) 98 }