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  }