pac_type_test.go 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. package pac
  2. import (
  3. "bytes"
  4. "encoding/hex"
  5. "fmt"
  6. "log"
  7. "testing"
  8. "github.com/stretchr/testify/assert"
  9. "gopkg.in/jcmturner/gokrb5.v7/keytab"
  10. "gopkg.in/jcmturner/gokrb5.v7/test/testdata"
  11. "gopkg.in/jcmturner/gokrb5.v7/types"
  12. )
  13. func TestPACTypeVerify(t *testing.T) {
  14. t.Parallel()
  15. b, err := hex.DecodeString(testdata.MarshaledPAC_AD_WIN2K_PAC)
  16. if err != nil {
  17. t.Fatalf("Test vector read error: %v", err)
  18. }
  19. var pac PACType
  20. err = pac.Unmarshal(b)
  21. if err != nil {
  22. t.Fatalf("Error unmarshaling test data: %v", err)
  23. }
  24. b, _ = hex.DecodeString(testdata.SYSHTTP_KEYTAB)
  25. kt := keytab.New()
  26. kt.Unmarshal(b)
  27. pn, _ := types.ParseSPNString("sysHTTP")
  28. key, err := kt.GetEncryptionKey(pn, "TEST.GOKRB5", 2, 18)
  29. if err != nil {
  30. t.Fatalf("Error getting key: %v", err)
  31. }
  32. w := bytes.NewBufferString("")
  33. l := log.New(w, "", 0)
  34. err = pac.ProcessPACInfoBuffers(key, l)
  35. if err != nil {
  36. t.Fatalf("Processing reference pac error: %v", err)
  37. }
  38. pacInvalidServerSig := pac
  39. // Check the signature to force failure
  40. pacInvalidServerSig.ServerChecksum.Signature[0] ^= 0xFF
  41. pacInvalidNilKerbValidationInfo := pac
  42. pacInvalidNilKerbValidationInfo.KerbValidationInfo = nil
  43. pacInvalidNilServerSig := pac
  44. pacInvalidNilServerSig.ServerChecksum = nil
  45. pacInvalidNilKdcSig := pac
  46. pacInvalidNilKdcSig.KDCChecksum = nil
  47. pacInvalidClientInfo := pac
  48. pacInvalidClientInfo.ClientInfo = nil
  49. var pacs = []struct {
  50. pac PACType
  51. }{
  52. {pacInvalidServerSig},
  53. {pacInvalidNilKerbValidationInfo},
  54. {pacInvalidNilServerSig},
  55. {pacInvalidNilKdcSig},
  56. {pacInvalidClientInfo},
  57. }
  58. for i, s := range pacs {
  59. v, _ := s.pac.verify(key)
  60. assert.False(t, v, fmt.Sprintf("Validation should have failed for test %v", i))
  61. }
  62. }