Jonathan Turner před 9 roky
rodič
revize
28c696288e

+ 3 - 3
asn1tools/tools.go

@@ -1,6 +1,6 @@
+// Tools for managing ASN1 marshaled data.
 package asn1tools
 
-
 // Get the ASN1 encoded bytes for the length 'l'
 // There are two forms: short (for lengths between 0 and 127), and long definite (for lengths between 0 and 2^1008 -1).
 // Short form: One octet. Bit 8 has value "0" and bits 7-1 give the length.
@@ -28,10 +28,10 @@ func GetLengthFromASN(b []byte) int {
 		return int(b[1])
 	}
 	// The bytes that indicate the length
-	lb := b[2:2+int(b[1]) - 128]
+	lb := b[2 : 2+int(b[1])-128]
 	base := 1
 	l := 0
-	for i := len(lb)-1; i >= 0; i-- {
+	for i := len(lb) - 1; i >= 0; i-- {
 		l += int(lb[i]) * base
 		base = base * 256
 	}

+ 1 - 1
client/client.go

@@ -1,4 +1,4 @@
-// A client for Kerberos 5 authentication
+// A client for Kerberos 5 authentication.
 package client
 
 import (

+ 7 - 7
credentials/credentials.go

@@ -1,10 +1,10 @@
-// Credentials for Kerberos 5 authentication
+// Credentials for Kerberos 5 authentication.
 package credentials
 
 import (
+	"github.com/jcmturner/gokrb5/iana/nametype"
 	"github.com/jcmturner/gokrb5/keytab"
 	"github.com/jcmturner/gokrb5/types"
-	"github.com/jcmturner/gokrb5/iana/nametype"
 )
 
 // Credentials struct for a user.
@@ -12,8 +12,8 @@ import (
 // Keytabs are used over passwords if both are defined.
 type Credentials struct {
 	Username string
-	Realm string
-	CName types.PrincipalName
+	Realm    string
+	CName    types.PrincipalName
 	Keytab   keytab.Keytab
 	Password string
 }
@@ -22,12 +22,12 @@ type Credentials struct {
 func NewCredentials(username string, realm string) Credentials {
 	return Credentials{
 		Username: username,
-		Realm: realm,
+		Realm:    realm,
 		CName: types.PrincipalName{
-			NameType: nametype.KRB_NT_PRINCIPAL,
+			NameType:   nametype.KRB_NT_PRINCIPAL,
 			NameString: []string{username},
 		},
-		Keytab:   keytab.NewKeytab(),
+		Keytab: keytab.NewKeytab(),
 	}
 }
 

+ 34 - 33
crypto/crypto.go

@@ -1,3 +1,4 @@
+// Cryptographic packages for Kerberos 5 implementation.
 package crypto
 
 import (
@@ -40,13 +41,13 @@ func GetChksumEtype(id int) (etype.EType, error) {
 	}
 }
 
-func GetKeyFromPassword(passwd string, cn types.PrincipalName, realm string, etypeId int, pas types.PADataSequence) (types.EncryptionKey, etype.EType, error) {
+func GetKeyFromPassword(passwd string, cname types.PrincipalName, realm string, etypeID int, pas types.PADataSequence) (types.EncryptionKey, etype.EType, error) {
 	var key types.EncryptionKey
-	etype, err := GetEtype(etypeId)
+	et, err := GetEtype(etypeID)
 	if err != nil {
-		return key, etype, fmt.Errorf("Error getting encryption type: %v", err)
+		return key, et, fmt.Errorf("Error getting encryption type: %v", err)
 	}
-	sk2p := etype.GetDefaultStringToKeyParams()
+	sk2p := et.GetDefaultStringToKeyParams()
 	var salt string
 	var paID int
 	for _, pa := range pas {
@@ -60,18 +61,18 @@ func GetKeyFromPassword(passwd string, cn types.PrincipalName, realm string, ety
 			if paID > pa.PADataType {
 				continue
 			}
-			var et types.ETypeInfo
-			err := et.Unmarshal(pa.PADataValue)
+			var eti types.ETypeInfo
+			err := eti.Unmarshal(pa.PADataValue)
 			if err != nil {
-				return key, etype, fmt.Errorf("Error unmashalling PA Data to PA-ETYPE-INFO2: %v", err)
+				return key, et, fmt.Errorf("Error unmashalling PA Data to PA-ETYPE-INFO2: %v", err)
 			}
-			if etypeId != et[0].EType {
-				etype, err = GetEtype(et[0].EType)
+			if etypeID != eti[0].EType {
+				et, err = GetEtype(eti[0].EType)
 				if err != nil {
-					return key, etype, fmt.Errorf("Error getting encryption type: %v", err)
+					return key, et, fmt.Errorf("Error getting encryption type: %v", err)
 				}
 			}
-			salt = string(et[0].Salt)
+			salt = string(eti[0].Salt)
 		case patype.PA_ETYPE_INFO2:
 			if paID > pa.PADataType {
 				continue
@@ -79,12 +80,12 @@ func GetKeyFromPassword(passwd string, cn types.PrincipalName, realm string, ety
 			var et2 types.ETypeInfo2
 			err := et2.Unmarshal(pa.PADataValue)
 			if err != nil {
-				return key, etype, fmt.Errorf("Error unmashalling PA Data to PA-ETYPE-INFO2: %v", err)
+				return key, et, fmt.Errorf("Error unmashalling PA Data to PA-ETYPE-INFO2: %v", err)
 			}
-			if etypeId != et2[0].EType {
-				etype, err = GetEtype(et2[0].EType)
+			if etypeID != et2[0].EType {
+				et, err = GetEtype(et2[0].EType)
 				if err != nil {
-					return key, etype, fmt.Errorf("Error getting encryption type: %v", err)
+					return key, et, fmt.Errorf("Error getting encryption type: %v", err)
 				}
 			}
 			if len(et2[0].S2KParams) == 4 {
@@ -94,45 +95,45 @@ func GetKeyFromPassword(passwd string, cn types.PrincipalName, realm string, ety
 		}
 	}
 	if salt == "" {
-		salt = cn.GetSalt(realm)
+		salt = cname.GetSalt(realm)
 	}
-	k, err := etype.StringToKey(passwd, salt, sk2p)
+	k, err := et.StringToKey(passwd, salt, sk2p)
 	if err != nil {
-		return key, etype, fmt.Errorf("Error deriving key from string: %+v", err)
+		return key, et, fmt.Errorf("Error deriving key from string: %+v", err)
 	}
 	key = types.EncryptionKey{
-		KeyType:  etypeId,
+		KeyType:  etypeID,
 		KeyValue: k,
 	}
-	return key, etype, nil
+	return key, et, nil
 }
 
 // Pass a usage value of zero to use the key provided directly rather than deriving one
-func GetEncryptedData(pt []byte, key types.EncryptionKey, usage int, kvno int) (types.EncryptedData, error) {
+func GetEncryptedData(plainBytes []byte, key types.EncryptionKey, usage uint32, kvno int) (types.EncryptedData, error) {
 	var ed types.EncryptedData
-	etype, err := GetEtype(key.KeyType)
+	et, err := GetEtype(key.KeyType)
 	if err != nil {
 		return ed, fmt.Errorf("Error getting etype: %v", err)
 	}
 	k := key.KeyValue
 	if usage != 0 {
-		k, err = etype.DeriveKey(key.KeyValue, engine.GetUsageKe(uint32(usage)))
+		k, err = et.DeriveKey(key.KeyValue, engine.GetUsageKe(uint32(usage)))
 		if err != nil {
 			return ed, fmt.Errorf("Error deriving key: %v", err)
 		}
 	}
 	//confounder
-	c := make([]byte, etype.GetConfounderByteSize())
+	c := make([]byte, et.GetConfounderByteSize())
 	_, err = rand.Read(c)
 	if err != nil {
 		return ed, fmt.Errorf("Could not generate random confounder: %v", err)
 	}
-	pt = append(c, pt...)
-	_, b, err := etype.Encrypt(k, pt)
+	plainBytes = append(c, plainBytes...)
+	_, b, err := et.Encrypt(k, plainBytes)
 	if err != nil {
 		return ed, fmt.Errorf("Error encrypting data: %v", err)
 	}
-	ih, err := engine.GetIntegrityHash(pt, key.KeyValue, uint32(usage), etype)
+	ih, err := engine.GetIntegrityHash(plainBytes, key.KeyValue, usage, et)
 	b = append(b, ih...)
 	ed = types.EncryptedData{
 		EType:  key.KeyType,
@@ -142,24 +143,24 @@ func GetEncryptedData(pt []byte, key types.EncryptionKey, usage int, kvno int) (
 	return ed, nil
 }
 
-func DecryptEncPart(pe types.EncryptedData, key types.EncryptionKey, usage uint32) ([]byte, error) {
+func DecryptEncPart(ed types.EncryptedData, key types.EncryptionKey, usage uint32) ([]byte, error) {
 	//Derive the key
-	etype, err := GetEtype(key.KeyType)
-	k, err := etype.DeriveKey(key.KeyValue, engine.GetUsageKe(usage))
+	et, err := GetEtype(key.KeyType)
+	k, err := et.DeriveKey(key.KeyValue, engine.GetUsageKe(usage))
 	if err != nil {
 		return nil, fmt.Errorf("Error deriving key: %v", err)
 	}
 	// Strip off the checksum from the end
-	b, err := etype.Decrypt(k, pe.Cipher[:len(pe.Cipher)-etype.GetHMACBitLength()/8])
+	b, err := et.Decrypt(k, ed.Cipher[:len(ed.Cipher)-et.GetHMACBitLength()/8])
 	if err != nil {
 		return nil, fmt.Errorf("Error decrypting: %v", err)
 	}
 	//Verify checksum
-	if !etype.VerifyIntegrity(key.KeyValue, pe.Cipher, b, usage) {
+	if !et.VerifyIntegrity(key.KeyValue, ed.Cipher, b, usage) {
 		return nil, errors.New("Error decrypting encrypted part: integrity verification failed")
 	}
 	//Remove the confounder bytes
-	b = b[etype.GetConfounderByteSize():]
+	b = b[et.GetConfounderByteSize():]
 	if err != nil {
 		return nil, fmt.Errorf("Error decrypting encrypted part: %v", err)
 	}

+ 1 - 1
crypto/etype/etype.go

@@ -5,7 +5,7 @@ import "hash"
 type EType interface {
 	GetETypeID() int
 	GetHashID() int
-	GetKeyByteSize() int                                        // See "protocol key format" for defined values
+	GetKeyByteSize() int
 	GetKeySeedBitLength() int                                   // key-generation seed length, k
 	GetDefaultStringToKeyParams() string                        // default string-to-key parameters (s2kparams)
 	StringToKey(string, salt, s2kparams string) ([]byte, error) // string-to-key (UTF-8 string, UTF-8 string, opaque)->(protocol-key)

+ 1 - 1
iana/constants.go

@@ -1,4 +1,4 @@
-// Assigned numbers.
+// Kerberos 5 assigned numbers.
 package iana
 
 const (

+ 5 - 5
keytab/keytab.go

@@ -1,14 +1,14 @@
-// Implementation of Kerberos keytabs: https://web.mit.edu/kerberos/krb5-devel/doc/formats/keytab_file_format.html
+// Implementation of Kerberos keytabs: https://web.mit.edu/kerberos/krb5-devel/doc/formats/keytab_file_format.html.
 package keytab
 
 import (
 	"bytes"
 	"encoding/binary"
 	"errors"
+	"github.com/jcmturner/gokrb5/types"
 	"io/ioutil"
 	"time"
 	"unsafe"
-	"github.com/jcmturner/gokrb5/types"
 )
 
 // Keytab struct.
@@ -69,11 +69,11 @@ func newKeytabEntry() KeytabEntry {
 		Principal: newPrincipal(),
 		Timestamp: time.Time{},
 		KVNO8:     0,
-		Key:       types.EncryptionKey{
-			KeyType: 0,
+		Key: types.EncryptionKey{
+			KeyType:  0,
 			KeyValue: b,
 		},
-		KVNO:      0,
+		KVNO: 0,
 	}
 }
 

+ 1 - 0
messages/KRBError.go

@@ -1,3 +1,4 @@
+// Kerberos 5 message types and methods.
 package messages
 
 import (

+ 7 - 6
testdata/test_vectors.go

@@ -1,3 +1,4 @@
+// Kerberos 5 test reference data.
 package testdata
 
 const (
@@ -98,11 +99,11 @@ var TestVectors = map[string]string{
 
 const (
 	TESTUSER1_KEYTAB = "0502000000470001000b544553542e474f4b52423500097465737475736572310000000158a869020100120020bbdc430aab7e2d4622a0b6951481453b0962e9db8e2f168942ad175cda6d9de9000000370001000b544553542e474f4b52423500097465737475736572310000000158a869020100110010698c4df8e9f60e7eea5a21bf4526ad25"
-	TEST_AS_REQ = "6a81a63081a3a103020105a20302010aa30e300c300aa10402020095a2020400a48186308183a00703050040000010a1163014a003020101a10d300b1b09746573747573657231a20d1b0b544553542e474f4b524235a320301ea003020102a11730151b066b72627467741b0b544553542e474f4b524235a511180f32303137303232303134323530315aa70602040f6755a6a814301202011202011102011002011702011902011a"
-	TEST_AS_REP = "6b8202f3308202efa003020105a10302010ba22e302c302aa103020113a2230421301f301da003020112a1161b14544553542e474f4b524235746573747573657231a30d1b0b544553542e474f4b524235a4163014a003020101a10d300b1b09746573747573657231a582015a6182015630820152a003020105a10d1b0b544553542e474f4b524235a220301ea003020102a11730151b066b72627467741b0b544553542e474f4b524235a382011830820114a003020112a103020101a28201060482010264d3fa49d89b627ed471298846ff92cd8632f657c58fe25322a61fffa32bb7966dc4c44c86a81353def2a11c36c537191406a609147f424a63266c00d02bcc56a27b0969d86ff4352634be9e2a4ac0ad5a36b0b0a3d689f128c0afa97401796e88037a35ad19efaf31d1ed4f3213769c03a58bc90ffac2051db152c0ed0809ad05ffb03aa3afaf731ed85f7a73020cb72355e0de27842dcf7eae3de9f7c14aa237edb25153b217ef3693373bc3cacbebe406910ff9ae9d00b7b08f726cb29a213cb9ad51ba80a8c24fa4b6692a445686889702cfa6ea749bac03e27e982407aca623fbd48586bcf566cfe87e1d9f17a74b1315669c16480f93e9d8782e71a8f11000a682012c30820128a003020112a282011f0482011b99b86153c0393c0e4130628f3e1e0f0a1f034e7e61a111b7fad15884e231c8fd8727e0bc945c9b35be20c57d057c8b09b0de74c53fb38cc15c9a2d483023fc369f5bde4da7324b4732b5a3d9504d92f67026aaa01df4f0138245d2ccb1c5a4014804cf295c7e7e56a867e6cf0c534f667f32da7aa5e700af1461764f1c276a8ff0fbee0e99322fe2059d2321853be09d0956c3afcfd07e3e702646a4678926a77bea20d9aaf3086b6d384821c81900af9013a3519f0e50eab6e1491d72e4ee17c2a44441b2ebc8a796cc3d876e328347dce65f61104e14d4c31532885776c9c8a70186b8b39f928972945c98bd60381ead5448e7ebe93fea308054287ac34b0583b4b9b5e43c5f8518d693ba9eb48a219c27344466b3c693a70462"
-	TEST_TGS_REQ = "6c82038f3082038ba103020105a20302010ca382031a3082031630820245a103020101a282023c048202386e82023430820230a003020105a10302010ea20703050000000000a382015a6182015630820152a003020105a10d1b0b544553542e474f4b524235a220301ea003020102a11730151b066b72627467741b0b544553542e474f4b524235a382011830820114a003020112a103020101a28201060482010264d3fa49d89b627ed471298846ff92cd8632f657c58fe25322a61fffa32bb7966dc4c44c86a81353def2a11c36c537191406a609147f424a63266c00d02bcc56a27b0969d86ff4352634be9e2a4ac0ad5a36b0b0a3d689f128c0afa97401796e88037a35ad19efaf31d1ed4f3213769c03a58bc90ffac2051db152c0ed0809ad05ffb03aa3afaf731ed85f7a73020cb72355e0de27842dcf7eae3de9f7c14aa237edb25153b217ef3693373bc3cacbebe406910ff9ae9d00b7b08f726cb29a213cb9ad51ba80a8c24fa4b6692a445686889702cfa6ea749bac03e27e982407aca623fbd48586bcf566cfe87e1d9f17a74b1315669c16480f93e9d8782e71a8f11000a481bc3081b9a003020112a281b10481ae8ae3cb8ac47d77cfc7b0b6bf0d3c5f8fcc6dd569344256a6a40c004fc2d23ebbe6ee0b9e00eccf37e710b7c01a7d2a63bbed6d75f2b230d24d724ef90edad2c5680e7e2436ab1145ff68481673444ebd61e3aef79b9ee05809551672c6c436eb8ac732a7fe78bd8f380e68a541191e3125554e4bab63dcc19ea931c1477366a6039ff7b7e62521ebfeffd6784b6ef0c97f653ac4d8dfb304f3e2e843faab12d838c23f1105f0a281c39325987cb03081caa10402020088a281c10481bea081bb3081b8a1173015a003020110a10e040ce613d8e9d544f0e56c60d3bba2819c308199a003020112a2819104818ec4fabcb1ec2f24e04ef51f9247239b28275653fa5cbc1dc9e747530c597631050fe86a5f3cba2ff54270aa771dcefa87efc8c8604407f84e603f5c01a2d929e18103561c3ffbc3a0cf63340bdd67a0739d4d81989827fc1d3f7f13e9dd5cc2346ca08e26a2aaf6d0102fbef8f7a6ee0a1caae7880e953ea678da619038786122a0b71853e8d0b95f544f8fbd6945a461305fa00703050040810000a20d1b0b544553542e474f4b524235a3233021a003020101a11a30181b04485454501b10686f73742e746573742e676f6b726235a511180f32303137303232303032323634325aa706020458a9ab2aa8053003020112"
-	TEST_TGS_REP = "6d82039d30820399a003020105a10302010da281df3081dc3081d9a10402020088a281d00481cda081ca3081c7a081c43081c1a003020112a281b90481b62e2b31bd998e2747a447175bcdbe14b7bc043c747c3289e10cde7403ee685d64f9724055c667ad2d3ce6240b5457ddfe3505a5b4d5d5e35238522ba5d86f1b691f28bbe7290487ffebf7e720ecf772cef061ac2c433cabbd0d5973fbedeb5418c8ba1bb7149dd625a4ff4cb465d9599c9d4cfb899807fa088521fa0e0ed5cfa4dd6d02b2a6854c4feb4ec382de5820134ca7c140be4b0f416ca5ebb328c8a470a55154062b8070683d0897a40277bdc752e94437920aa30d1b0b544553542e474f4b524235a4163014a003020101a10d300b1b09746573747573657231a58201706182016c30820168a003020105a10d1b0b544553542e474f4b524235a2233021a003020101a11a30181b04485454501b10686f73742e746573742e676f6b726235a382012b30820127a003020112a103020102a28201190482011524db012d81dde2cb3b7b40a35ce4fe17f7898166c7a7534ad73ca761e75316a06504415b1bc62508edb6ea58544a3ac0f98911cd55332442d30e007e0f39efa939b726a5228514984a133d1ba7d93d60fec5b2f7fbb16356c85ad1b0bb7ed6108420514086ea9959037e794b535fa052651385060da83f93acffbde0cb486b2f236f8955bb521ef90bc0a52944d2a8da82389e6861065064cc5178a5a7d302e9950761648726fc4015f8772339ef401fd8327dd335c6692c010f2c31b5ccccbcd83e68f2a1b66f16ca44e0bfb2903801c27ed8dd9a7b2dcea3c2bc91d8055c603f218494b1342490fbb805492d999491c2570b3ab392ba7e62c23659663509838e91b6f560a284889075071c348c701017a0a5e5c7a682010e3082010aa003020112a28201010481fece77ad9ebec9b094b686d4885895a2530471e9a56a93c2a463eaa988932695d77a12b6c02e69edfea6759ed49b029bdef43e446129b80a1ef95b9cea69a382d5c074868e68b676869f0990cad588c6d3589b9bba795ff0572ba648915f68a3b49df1def285645e93f4285a843ead01122c4f00bebefa33ecf6df2584e33da359d3d53e0a9b8ec0f41120a0d612d3a1e4504ce464dddec5e2aa3f0d2b6dae7b8800091760d7a590eaa6d7b33539c1700d9daf22a7c8cc1e108aee75267434997666132f52c08ea7c0c898859214ac4e71e185d3bcec1467ab6e8d91e79ba2b2041d40714da495c79d232d3c4e72a0910b9143fd648fe24bc46ec3416a3c34"
-	TEST_KRB5CONF = `[libdefaults]
+	TEST_AS_REQ      = "6a81a63081a3a103020105a20302010aa30e300c300aa10402020095a2020400a48186308183a00703050040000010a1163014a003020101a10d300b1b09746573747573657231a20d1b0b544553542e474f4b524235a320301ea003020102a11730151b066b72627467741b0b544553542e474f4b524235a511180f32303137303232303134323530315aa70602040f6755a6a814301202011202011102011002011702011902011a"
+	TEST_AS_REP      = "6b8202f3308202efa003020105a10302010ba22e302c302aa103020113a2230421301f301da003020112a1161b14544553542e474f4b524235746573747573657231a30d1b0b544553542e474f4b524235a4163014a003020101a10d300b1b09746573747573657231a582015a6182015630820152a003020105a10d1b0b544553542e474f4b524235a220301ea003020102a11730151b066b72627467741b0b544553542e474f4b524235a382011830820114a003020112a103020101a28201060482010264d3fa49d89b627ed471298846ff92cd8632f657c58fe25322a61fffa32bb7966dc4c44c86a81353def2a11c36c537191406a609147f424a63266c00d02bcc56a27b0969d86ff4352634be9e2a4ac0ad5a36b0b0a3d689f128c0afa97401796e88037a35ad19efaf31d1ed4f3213769c03a58bc90ffac2051db152c0ed0809ad05ffb03aa3afaf731ed85f7a73020cb72355e0de27842dcf7eae3de9f7c14aa237edb25153b217ef3693373bc3cacbebe406910ff9ae9d00b7b08f726cb29a213cb9ad51ba80a8c24fa4b6692a445686889702cfa6ea749bac03e27e982407aca623fbd48586bcf566cfe87e1d9f17a74b1315669c16480f93e9d8782e71a8f11000a682012c30820128a003020112a282011f0482011b99b86153c0393c0e4130628f3e1e0f0a1f034e7e61a111b7fad15884e231c8fd8727e0bc945c9b35be20c57d057c8b09b0de74c53fb38cc15c9a2d483023fc369f5bde4da7324b4732b5a3d9504d92f67026aaa01df4f0138245d2ccb1c5a4014804cf295c7e7e56a867e6cf0c534f667f32da7aa5e700af1461764f1c276a8ff0fbee0e99322fe2059d2321853be09d0956c3afcfd07e3e702646a4678926a77bea20d9aaf3086b6d384821c81900af9013a3519f0e50eab6e1491d72e4ee17c2a44441b2ebc8a796cc3d876e328347dce65f61104e14d4c31532885776c9c8a70186b8b39f928972945c98bd60381ead5448e7ebe93fea308054287ac34b0583b4b9b5e43c5f8518d693ba9eb48a219c27344466b3c693a70462"
+	TEST_TGS_REQ     = "6c82038f3082038ba103020105a20302010ca382031a3082031630820245a103020101a282023c048202386e82023430820230a003020105a10302010ea20703050000000000a382015a6182015630820152a003020105a10d1b0b544553542e474f4b524235a220301ea003020102a11730151b066b72627467741b0b544553542e474f4b524235a382011830820114a003020112a103020101a28201060482010264d3fa49d89b627ed471298846ff92cd8632f657c58fe25322a61fffa32bb7966dc4c44c86a81353def2a11c36c537191406a609147f424a63266c00d02bcc56a27b0969d86ff4352634be9e2a4ac0ad5a36b0b0a3d689f128c0afa97401796e88037a35ad19efaf31d1ed4f3213769c03a58bc90ffac2051db152c0ed0809ad05ffb03aa3afaf731ed85f7a73020cb72355e0de27842dcf7eae3de9f7c14aa237edb25153b217ef3693373bc3cacbebe406910ff9ae9d00b7b08f726cb29a213cb9ad51ba80a8c24fa4b6692a445686889702cfa6ea749bac03e27e982407aca623fbd48586bcf566cfe87e1d9f17a74b1315669c16480f93e9d8782e71a8f11000a481bc3081b9a003020112a281b10481ae8ae3cb8ac47d77cfc7b0b6bf0d3c5f8fcc6dd569344256a6a40c004fc2d23ebbe6ee0b9e00eccf37e710b7c01a7d2a63bbed6d75f2b230d24d724ef90edad2c5680e7e2436ab1145ff68481673444ebd61e3aef79b9ee05809551672c6c436eb8ac732a7fe78bd8f380e68a541191e3125554e4bab63dcc19ea931c1477366a6039ff7b7e62521ebfeffd6784b6ef0c97f653ac4d8dfb304f3e2e843faab12d838c23f1105f0a281c39325987cb03081caa10402020088a281c10481bea081bb3081b8a1173015a003020110a10e040ce613d8e9d544f0e56c60d3bba2819c308199a003020112a2819104818ec4fabcb1ec2f24e04ef51f9247239b28275653fa5cbc1dc9e747530c597631050fe86a5f3cba2ff54270aa771dcefa87efc8c8604407f84e603f5c01a2d929e18103561c3ffbc3a0cf63340bdd67a0739d4d81989827fc1d3f7f13e9dd5cc2346ca08e26a2aaf6d0102fbef8f7a6ee0a1caae7880e953ea678da619038786122a0b71853e8d0b95f544f8fbd6945a461305fa00703050040810000a20d1b0b544553542e474f4b524235a3233021a003020101a11a30181b04485454501b10686f73742e746573742e676f6b726235a511180f32303137303232303032323634325aa706020458a9ab2aa8053003020112"
+	TEST_TGS_REP     = "6d82039d30820399a003020105a10302010da281df3081dc3081d9a10402020088a281d00481cda081ca3081c7a081c43081c1a003020112a281b90481b62e2b31bd998e2747a447175bcdbe14b7bc043c747c3289e10cde7403ee685d64f9724055c667ad2d3ce6240b5457ddfe3505a5b4d5d5e35238522ba5d86f1b691f28bbe7290487ffebf7e720ecf772cef061ac2c433cabbd0d5973fbedeb5418c8ba1bb7149dd625a4ff4cb465d9599c9d4cfb899807fa088521fa0e0ed5cfa4dd6d02b2a6854c4feb4ec382de5820134ca7c140be4b0f416ca5ebb328c8a470a55154062b8070683d0897a40277bdc752e94437920aa30d1b0b544553542e474f4b524235a4163014a003020101a10d300b1b09746573747573657231a58201706182016c30820168a003020105a10d1b0b544553542e474f4b524235a2233021a003020101a11a30181b04485454501b10686f73742e746573742e676f6b726235a382012b30820127a003020112a103020102a28201190482011524db012d81dde2cb3b7b40a35ce4fe17f7898166c7a7534ad73ca761e75316a06504415b1bc62508edb6ea58544a3ac0f98911cd55332442d30e007e0f39efa939b726a5228514984a133d1ba7d93d60fec5b2f7fbb16356c85ad1b0bb7ed6108420514086ea9959037e794b535fa052651385060da83f93acffbde0cb486b2f236f8955bb521ef90bc0a52944d2a8da82389e6861065064cc5178a5a7d302e9950761648726fc4015f8772339ef401fd8327dd335c6692c010f2c31b5ccccbcd83e68f2a1b66f16ca44e0bfb2903801c27ed8dd9a7b2dcea3c2bc91d8055c603f218494b1342490fbb805492d999491c2570b3ab392ba7e62c23659663509838e91b6f560a284889075071c348c701017a0a5e5c7a682010e3082010aa003020112a28201010481fece77ad9ebec9b094b686d4885895a2530471e9a56a93c2a463eaa988932695d77a12b6c02e69edfea6759ed49b029bdef43e446129b80a1ef95b9cea69a382d5c074868e68b676869f0990cad588c6d3589b9bba795ff0572ba648915f68a3b49df1def285645e93f4285a843ead01122c4f00bebefa33ecf6df2584e33da359d3d53e0a9b8ec0f41120a0d612d3a1e4504ce464dddec5e2aa3f0d2b6dae7b8800091760d7a590eaa6d7b33539c1700d9daf22a7c8cc1e108aee75267434997666132f52c08ea7c0c898859214ac4e71e185d3bcec1467ab6e8d91e79ba2b2041d40714da495c79d232d3c4e72a0910b9143fd648fe24bc46ec3416a3c34"
+	TEST_KRB5CONF    = `[libdefaults]
   default_realm = TEST.GOKRB5
   dns_lookup_realm = false
   dns_lookup_kdc = false
@@ -122,4 +123,4 @@ const (
  .test.gokrb5 = TEST.GOKRB5
  test.gokrb5 = TEST.GOKRB5
  `
-)
+)

+ 1 - 0
types/Ticket.go

@@ -1,3 +1,4 @@
+// Kerberos 5 data types.
 package types
 
 import (