keys_test.go 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. package ssh
  2. import (
  3. "crypto"
  4. "crypto/dsa"
  5. "crypto/rand"
  6. "crypto/rsa"
  7. "reflect"
  8. "testing"
  9. )
  10. func TestRSAMarshal(t *testing.T) {
  11. k0 := &rsakey.PublicKey
  12. k1 := NewRSAPublicKey(k0)
  13. k2, rest, ok := ParsePublicKey(MarshalPublicKey(k1))
  14. if !ok {
  15. t.Errorf("could not parse back Blob output")
  16. }
  17. if len(rest) > 0 {
  18. t.Errorf("trailing junk in RSA Blob() output")
  19. }
  20. if !reflect.DeepEqual(k0, k2.RawKey().(*rsa.PublicKey)) {
  21. t.Errorf("got %#v in roundtrip, want %#v", k2.RawKey(), k0)
  22. }
  23. }
  24. func TestRSAKeyVerify(t *testing.T) {
  25. pub := NewRSAPublicKey(&rsakey.PublicKey)
  26. data := []byte("sign me")
  27. h := crypto.SHA1.New()
  28. h.Write(data)
  29. digest := h.Sum(nil)
  30. sig, err := rsa.SignPKCS1v15(rand.Reader, rsakey, crypto.SHA1, digest)
  31. if err != nil {
  32. t.Fatalf("SignPKCS1v15: %v", err)
  33. }
  34. if !pub.Verify(data, sig) {
  35. t.Errorf("publicKey.Verify failed")
  36. }
  37. }
  38. func TestDSAMarshal(t *testing.T) {
  39. k0 := &dsakey.PublicKey
  40. k1 := NewDSAPublicKey(k0)
  41. k2, rest, ok := ParsePublicKey(MarshalPublicKey(k1))
  42. if !ok {
  43. t.Errorf("could not parse back Blob output")
  44. }
  45. if len(rest) > 0 {
  46. t.Errorf("trailing junk in DSA Blob() output")
  47. }
  48. if !reflect.DeepEqual(k0, k2.RawKey().(*dsa.PublicKey)) {
  49. t.Errorf("got %#v in roundtrip, want %#v", k2.RawKey(), k0)
  50. }
  51. }
  52. // TODO(hanwen): test for ECDSA marshal.