public_key_test.go 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. // Copyright 2011 The Go Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style
  3. // license that can be found in the LICENSE file.
  4. package packet
  5. import (
  6. "bytes"
  7. "encoding/hex"
  8. "testing"
  9. "time"
  10. )
  11. var pubKeyTests = []struct {
  12. hexData string
  13. hexFingerprint string
  14. creationTime time.Time
  15. pubKeyAlgo PublicKeyAlgorithm
  16. keyId uint64
  17. keyIdString string
  18. keyIdShort string
  19. }{
  20. {rsaPkDataHex, rsaFingerprintHex, time.Unix(0x4d3c5c10, 0), PubKeyAlgoRSA, 0xa34d7e18c20c31bb, "A34D7E18C20C31BB", "C20C31BB"},
  21. {dsaPkDataHex, dsaFingerprintHex, time.Unix(0x4d432f89, 0), PubKeyAlgoDSA, 0x8e8fbe54062f19ed, "8E8FBE54062F19ED", "062F19ED"},
  22. }
  23. func TestPublicKeyRead(t *testing.T) {
  24. for i, test := range pubKeyTests {
  25. packet, err := Read(readerFromHex(test.hexData))
  26. if err != nil {
  27. t.Errorf("#%d: Read error: %s", i, err)
  28. continue
  29. }
  30. pk, ok := packet.(*PublicKey)
  31. if !ok {
  32. t.Errorf("#%d: failed to parse, got: %#v", i, packet)
  33. continue
  34. }
  35. if pk.PubKeyAlgo != test.pubKeyAlgo {
  36. t.Errorf("#%d: bad public key algorithm got:%x want:%x", i, pk.PubKeyAlgo, test.pubKeyAlgo)
  37. }
  38. if !pk.CreationTime.Equal(test.creationTime) {
  39. t.Errorf("#%d: bad creation time got:%v want:%v", i, pk.CreationTime, test.creationTime)
  40. }
  41. expectedFingerprint, _ := hex.DecodeString(test.hexFingerprint)
  42. if !bytes.Equal(expectedFingerprint, pk.Fingerprint[:]) {
  43. t.Errorf("#%d: bad fingerprint got:%x want:%x", i, pk.Fingerprint[:], expectedFingerprint)
  44. }
  45. if pk.KeyId != test.keyId {
  46. t.Errorf("#%d: bad keyid got:%x want:%x", i, pk.KeyId, test.keyId)
  47. }
  48. if g, e := pk.KeyIdString(), test.keyIdString; g != e {
  49. t.Errorf("#%d: bad KeyIdString got:%q want:%q", i, g, e)
  50. }
  51. if g, e := pk.KeyIdShortString(), test.keyIdShort; g != e {
  52. t.Errorf("#%d: bad KeyIdShortString got:%q want:%q", i, g, e)
  53. }
  54. }
  55. }
  56. func TestPublicKeySerialize(t *testing.T) {
  57. for i, test := range pubKeyTests {
  58. packet, err := Read(readerFromHex(test.hexData))
  59. if err != nil {
  60. t.Errorf("#%d: Read error: %s", i, err)
  61. continue
  62. }
  63. pk, ok := packet.(*PublicKey)
  64. if !ok {
  65. t.Errorf("#%d: failed to parse, got: %#v", i, packet)
  66. continue
  67. }
  68. serializeBuf := bytes.NewBuffer(nil)
  69. err = pk.Serialize(serializeBuf)
  70. if err != nil {
  71. t.Errorf("#%d: failed to serialize: %s", i, err)
  72. continue
  73. }
  74. packet, err = Read(serializeBuf)
  75. if err != nil {
  76. t.Errorf("#%d: Read error (from serialized data): %s", i, err)
  77. continue
  78. }
  79. pk, ok = packet.(*PublicKey)
  80. if !ok {
  81. t.Errorf("#%d: failed to parse serialized data, got: %#v", i, packet)
  82. continue
  83. }
  84. }
  85. }
  86. const rsaFingerprintHex = "5fb74b1d03b1e3cb31bc2f8aa34d7e18c20c31bb"
  87. const rsaPkDataHex = "988d044d3c5c10010400b1d13382944bd5aba23a4312968b5095d14f947f600eb478e14a6fcb16b0e0cac764884909c020bc495cfcc39a935387c661507bdb236a0612fb582cac3af9b29cc2c8c70090616c41b662f4da4c1201e195472eb7f4ae1ccbcbf9940fe21d985e379a5563dde5b9a23d35f1cfaa5790da3b79db26f23695107bfaca8e7b5bcd0011010001"
  88. const dsaFingerprintHex = "eece4c094db002103714c63c8e8fbe54062f19ed"
  89. const dsaPkDataHex = "9901a2044d432f89110400cd581334f0d7a1e1bdc8b9d6d8c0baf68793632735d2bb0903224cbaa1dfbf35a60ee7a13b92643421e1eb41aa8d79bea19a115a677f6b8ba3c7818ce53a6c2a24a1608bd8b8d6e55c5090cbde09dd26e356267465ae25e69ec8bdd57c7bbb2623e4d73336f73a0a9098f7f16da2e25252130fd694c0e8070c55a812a423ae7f00a0ebf50e70c2f19c3520a551bd4b08d30f23530d3d03ff7d0bf4a53a64a09dc5e6e6e35854b7d70c882b0c60293401958b1bd9e40abec3ea05ba87cf64899299d4bd6aa7f459c201d3fbbd6c82004bdc5e8a9eb8082d12054cc90fa9d4ec251a843236a588bf49552441817436c4f43326966fe85447d4e6d0acf8fa1ef0f014730770603ad7634c3088dc52501c237328417c31c89ed70400b2f1a98b0bf42f11fefc430704bebbaa41d9f355600c3facee1e490f64208e0e094ea55e3a598a219a58500bf78ac677b670a14f4e47e9cf8eab4f368cc1ddcaa18cc59309d4cc62dd4f680e73e6cc3e1ce87a84d0925efbcb26c575c093fc42eecf45135fabf6403a25c2016e1774c0484e440a18319072c617cc97ac0a3bb0"