KRBPriv_test.go 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. package messages
  2. import (
  3. "encoding/hex"
  4. "testing"
  5. "time"
  6. "github.com/stretchr/testify/assert"
  7. "gopkg.in/jcmturner/gokrb5.v7/iana"
  8. "gopkg.in/jcmturner/gokrb5.v7/iana/addrtype"
  9. "gopkg.in/jcmturner/gokrb5.v7/iana/msgtype"
  10. "gopkg.in/jcmturner/gokrb5.v7/test/testdata"
  11. "gopkg.in/jcmturner/gokrb5.v7/types"
  12. )
  13. func TestUnmarshalKRBPriv(t *testing.T) {
  14. t.Parallel()
  15. var a KRBPriv
  16. b, err := hex.DecodeString(testdata.MarshaledKRB5priv)
  17. if err != nil {
  18. t.Fatalf("Test vector read error: %v", err)
  19. }
  20. err = a.Unmarshal(b)
  21. if err != nil {
  22. t.Fatalf("Unmarshal error: %v", err)
  23. }
  24. assert.Equal(t, iana.PVNO, a.PVNO, "PVNO not as expected")
  25. assert.Equal(t, msgtype.KRB_PRIV, a.MsgType, "Message type not as expected")
  26. assert.Equal(t, iana.PVNO, a.EncPart.KVNO, "EncPart KVNO not as expected")
  27. assert.Equal(t, testdata.TEST_ETYPE, a.EncPart.EType, "EncPart etype not as expected")
  28. assert.Equal(t, []byte(testdata.TEST_CIPHERTEXT), a.EncPart.Cipher, "Cipher text of EncPart not as expected")
  29. }
  30. func TestUnmarshalEncPrivPart(t *testing.T) {
  31. t.Parallel()
  32. var a EncKrbPrivPart
  33. b, err := hex.DecodeString(testdata.MarshaledKRB5enc_priv_part)
  34. if err != nil {
  35. t.Fatalf("Test vector read error: %v", err)
  36. }
  37. err = a.Unmarshal(b)
  38. if err != nil {
  39. t.Fatalf("Unmarshal error: %v", err)
  40. }
  41. //Parse the test time value into a time.Time type
  42. tt, _ := time.Parse(testdata.TEST_TIME_FORMAT, testdata.TEST_TIME)
  43. assert.Equal(t, "krb5data", string(a.UserData), "User data not as expected")
  44. assert.Equal(t, tt, a.Timestamp, "Timestamp not as expected")
  45. assert.Equal(t, 123456, a.Usec, "Microseconds not as expected")
  46. assert.Equal(t, int64(17), a.SequenceNumber, "Sequence number not as expected")
  47. assert.Equal(t, addrtype.IPv4, a.SAddress.AddrType, "SAddress type not as expected")
  48. assert.Equal(t, "12d00023", hex.EncodeToString(a.SAddress.Address), "Address not as expected for SAddress")
  49. assert.Equal(t, addrtype.IPv4, a.RAddress.AddrType, "RAddress type not as expected")
  50. assert.Equal(t, "12d00023", hex.EncodeToString(a.RAddress.Address), "Address not as expected for RAddress")
  51. }
  52. func TestUnmarshalEncPrivPart_optionalsNULL(t *testing.T) {
  53. t.Parallel()
  54. var a EncKrbPrivPart
  55. b, err := hex.DecodeString(testdata.MarshaledKRB5enc_priv_partOptionalsNULL)
  56. if err != nil {
  57. t.Fatalf("Test vector read error: %v", err)
  58. }
  59. err = a.Unmarshal(b)
  60. if err != nil {
  61. t.Fatalf("Unmarshal error: %v", err)
  62. }
  63. assert.Equal(t, "krb5data", string(a.UserData), "User data not as expected")
  64. assert.Equal(t, addrtype.IPv4, a.SAddress.AddrType, "SAddress type not as expected")
  65. assert.Equal(t, "12d00023", hex.EncodeToString(a.SAddress.Address), "Address not as expected for SAddress")
  66. }
  67. func TestMarshalKRBPriv(t *testing.T) {
  68. t.Parallel()
  69. var a KRBPriv
  70. b, err := hex.DecodeString(testdata.MarshaledKRB5priv)
  71. if err != nil {
  72. t.Fatalf("Test vector read error: %v", err)
  73. }
  74. err = a.Unmarshal(b)
  75. if err != nil {
  76. t.Fatalf("Unmarshal error: %v", err)
  77. }
  78. mb, err := a.Marshal()
  79. if err != nil {
  80. t.Fatalf("error marshaling KRBPriv: %v", err)
  81. }
  82. assert.Equal(t, b, mb, "marshaled bytes not as expected")
  83. be, err := hex.DecodeString(testdata.MarshaledKRB5enc_priv_part)
  84. if err != nil {
  85. t.Fatalf("Test vector read error: %v", err)
  86. }
  87. err = a.DecryptedEncPart.Unmarshal(be)
  88. if err != nil {
  89. t.Fatalf("Unmarshal error: %v", err)
  90. }
  91. mb, err = a.Marshal()
  92. if err != nil {
  93. t.Fatalf("error marshaling KRBPriv: %v", err)
  94. }
  95. assert.Equal(t, b, mb, "marshaled bytes not as expected when it has decrypted encpart")
  96. }
  97. func TestKRBPriv_EncryptEncPart(t *testing.T) {
  98. t.Parallel()
  99. var a KRBPriv
  100. b, err := hex.DecodeString(testdata.MarshaledKRB5priv)
  101. if err != nil {
  102. t.Fatalf("Test vector read error: %v", err)
  103. }
  104. err = a.Unmarshal(b)
  105. if err != nil {
  106. t.Fatalf("Unmarshal error: %v", err)
  107. }
  108. b, err = hex.DecodeString(testdata.MarshaledKRB5enc_priv_part)
  109. if err != nil {
  110. t.Fatalf("Test vector read error: %v", err)
  111. }
  112. err = a.DecryptedEncPart.Unmarshal(b)
  113. if err != nil {
  114. t.Fatalf("Unmarshal error: %v", err)
  115. }
  116. key := types.EncryptionKey{
  117. KeyType: int32(18),
  118. KeyValue: []byte("12345678901234567890123456789012"),
  119. }
  120. err = a.EncryptEncPart(key)
  121. if err != nil {
  122. t.Fatalf("error encrypting encpart: %v", err)
  123. }
  124. }