pac_type_test.go 1.5 KB

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