github.com/jcmturner/gokrb5/v8@v8.4.4/messages/KRBCred_test.go (about)

     1  package messages
     2  
     3  import (
     4  	"encoding/hex"
     5  	"fmt"
     6  	"testing"
     7  	"time"
     8  
     9  	"github.com/jcmturner/gokrb5/v8/iana"
    10  	"github.com/jcmturner/gokrb5/v8/iana/addrtype"
    11  	"github.com/jcmturner/gokrb5/v8/iana/msgtype"
    12  	"github.com/jcmturner/gokrb5/v8/iana/nametype"
    13  	"github.com/jcmturner/gokrb5/v8/test/testdata"
    14  	"github.com/stretchr/testify/assert"
    15  )
    16  
    17  func TestUnmarshalKRBCred(t *testing.T) {
    18  	t.Parallel()
    19  	var a KRBCred
    20  	b, err := hex.DecodeString(testdata.MarshaledKRB5cred)
    21  	if err != nil {
    22  		t.Fatalf("Test vector read error: %v", err)
    23  	}
    24  	err = a.Unmarshal(b)
    25  	if err != nil {
    26  		t.Fatalf("Unmarshal error: %v", err)
    27  	}
    28  	assert.Equal(t, iana.PVNO, a.PVNO, "PVNO not as expected")
    29  	assert.Equal(t, msgtype.KRB_CRED, a.MsgType, "Message type not as expected")
    30  	assert.Equal(t, 2, len(a.Tickets), "Number of tickets not as expected")
    31  	for i, tkt := range a.Tickets {
    32  		assert.Equal(t, iana.PVNO, tkt.TktVNO, fmt.Sprintf("Ticket (%v) ticket-vno not as expected", i+1))
    33  		assert.Equal(t, testdata.TEST_REALM, tkt.Realm, fmt.Sprintf("Ticket (%v) realm not as expected", i+1))
    34  		assert.Equal(t, nametype.KRB_NT_PRINCIPAL, tkt.SName.NameType, fmt.Sprintf("Ticket (%v) SName NameType not as expected", i+1))
    35  		assert.Equal(t, len(testdata.TEST_PRINCIPALNAME_NAMESTRING), len(tkt.SName.NameString), fmt.Sprintf("Ticket (%v) SName does not have the expected number of NameStrings", i+1))
    36  		assert.Equal(t, testdata.TEST_PRINCIPALNAME_NAMESTRING, tkt.SName.NameString, fmt.Sprintf("Ticket (%v) SName name string entries not as expected", i+1))
    37  		assert.Equal(t, testdata.TEST_ETYPE, tkt.EncPart.EType, fmt.Sprintf("Ticket (%v) encPart etype not as expected", i+1))
    38  		assert.Equal(t, iana.PVNO, tkt.EncPart.KVNO, fmt.Sprintf("Ticket (%v) encPart KVNO not as expected", i+1))
    39  		assert.Equal(t, []byte(testdata.TEST_CIPHERTEXT), tkt.EncPart.Cipher, fmt.Sprintf("Ticket (%v) encPart cipher not as expected", i+1))
    40  	}
    41  	assert.Equal(t, testdata.TEST_ETYPE, a.EncPart.EType, "encPart etype not as expected")
    42  	assert.Equal(t, iana.PVNO, a.EncPart.KVNO, "encPart KVNO not as expected")
    43  	assert.Equal(t, []byte(testdata.TEST_CIPHERTEXT), a.EncPart.Cipher, "encPart cipher not as expected")
    44  }
    45  
    46  func TestUnmarshalEncCredPart(t *testing.T) {
    47  	t.Parallel()
    48  	var a EncKrbCredPart
    49  	b, err := hex.DecodeString(testdata.MarshaledKRB5enc_cred_part)
    50  	if err != nil {
    51  		t.Fatalf("Test vector read error: %v", err)
    52  	}
    53  	err = a.Unmarshal(b)
    54  	if err != nil {
    55  		t.Fatalf("Unmarshal error: %v", err)
    56  	}
    57  	//Parse the test time value into a time.Time type
    58  	tt, _ := time.Parse(testdata.TEST_TIME_FORMAT, testdata.TEST_TIME)
    59  
    60  	assert.Equal(t, 2, len(a.TicketInfo), "Number of ticket info items not as expected")
    61  	for i, tkt := range a.TicketInfo {
    62  		assert.Equal(t, int32(1), tkt.Key.KeyType, fmt.Sprintf("Key type not as expected in ticket info item %d", i+1))
    63  		assert.Equal(t, []byte("12345678"), tkt.Key.KeyValue, fmt.Sprintf("Key value not as expected in ticket info item %d", i+1))
    64  		assert.Equal(t, testdata.TEST_REALM, tkt.PRealm, fmt.Sprintf("PRealm not as expected on ticket info item %d", i+1))
    65  		assert.Equal(t, nametype.KRB_NT_PRINCIPAL, tkt.PName.NameType, fmt.Sprintf("Ticket info (%v) PName NameType not as expected", i+1))
    66  		assert.Equal(t, len(testdata.TEST_PRINCIPALNAME_NAMESTRING), len(tkt.PName.NameString), fmt.Sprintf("Ticket info (%v) PName does not have the expected number of NameStrings", i+1))
    67  		assert.Equal(t, testdata.TEST_PRINCIPALNAME_NAMESTRING, tkt.PName.NameString, fmt.Sprintf("Ticket info (%v) PName name string entries not as expected", i+1))
    68  		assert.Equal(t, "fedcba98", hex.EncodeToString(tkt.Flags.Bytes), fmt.Sprintf("Flags not as expected on ticket info %d", i+1))
    69  		assert.Equal(t, tt, tkt.AuthTime, fmt.Sprintf("Auth time value not as expected for ticket info %d", i+1))
    70  		assert.Equal(t, tt, tkt.StartTime, fmt.Sprintf("Start time value not as expected for ticket info %d", i+1))
    71  		assert.Equal(t, tt, tkt.EndTime, fmt.Sprintf("End time value not as expected for ticket info %d", i+1))
    72  		assert.Equal(t, tt, tkt.RenewTill, fmt.Sprintf("Renew Till time value not as expected for ticket info %d", i+1))
    73  		assert.Equal(t, nametype.KRB_NT_PRINCIPAL, tkt.SName.NameType, fmt.Sprintf("Ticket info (%v) PName NameType not as expected", i+1))
    74  		assert.Equal(t, len(testdata.TEST_PRINCIPALNAME_NAMESTRING), len(tkt.SName.NameString), fmt.Sprintf("Ticket info (%v) PName does not have the expected number of NameStrings", i+1))
    75  		assert.Equal(t, testdata.TEST_PRINCIPALNAME_NAMESTRING, tkt.SName.NameString, fmt.Sprintf("Ticket info (%v) PName name string entries not as expected", i+1))
    76  		assert.Equal(t, 2, len(tkt.CAddr), "Number of client addresses not as expected")
    77  		for j, addr := range tkt.CAddr {
    78  			assert.Equal(t, addrtype.IPv4, addr.AddrType, fmt.Sprintf("Host address type not as expected for address item %d within ticket info %d", j+1, i+1))
    79  			assert.Equal(t, "12d00023", hex.EncodeToString(addr.Address), fmt.Sprintf("Host address not as expected for address item %d within ticket info %d", j+1, i+1))
    80  		}
    81  	}
    82  	assert.Equal(t, testdata.TEST_NONCE, a.Nouce, "Nouce not as expected")
    83  	assert.Equal(t, tt, a.Timestamp, "Timestamp not as expected")
    84  	assert.Equal(t, 123456, a.Usec, "Microseconds not as expected")
    85  	assert.Equal(t, addrtype.IPv4, a.SAddress.AddrType, "SAddress type not as expected")
    86  	assert.Equal(t, "12d00023", hex.EncodeToString(a.SAddress.Address), "Address not as expected for SAddress")
    87  	assert.Equal(t, addrtype.IPv4, a.RAddress.AddrType, "RAddress type not as expected")
    88  	assert.Equal(t, "12d00023", hex.EncodeToString(a.RAddress.Address), "Address not as expected for RAddress")
    89  }
    90  
    91  func TestUnmarshalEncCredPart_optionalsNULL(t *testing.T) {
    92  	t.Parallel()
    93  	var a EncKrbCredPart
    94  	b, err := hex.DecodeString(testdata.MarshaledKRB5enc_cred_partOptionalsNULL)
    95  	if err != nil {
    96  		t.Fatalf("Test vector read error: %v", err)
    97  	}
    98  	err = a.Unmarshal(b)
    99  	if err != nil {
   100  		t.Fatalf("Unmarshal error: %v", err)
   101  	}
   102  	//Parse the test time value into a time.Time type
   103  	tt, _ := time.Parse(testdata.TEST_TIME_FORMAT, testdata.TEST_TIME)
   104  
   105  	assert.Equal(t, 2, len(a.TicketInfo), "Number of ticket info items not as expected")
   106  	//1st Ticket
   107  	i := 0
   108  	assert.Equal(t, int32(1), a.TicketInfo[i].Key.KeyType, fmt.Sprintf("Key type not as expected in ticket info item %d", i+1))
   109  	assert.Equal(t, []byte("12345678"), a.TicketInfo[i].Key.KeyValue, fmt.Sprintf("Key value not as expected in ticket info item %d", i+1))
   110  
   111  	//2nd Ticket
   112  	i = 1
   113  	assert.Equal(t, int32(1), a.TicketInfo[i].Key.KeyType, fmt.Sprintf("Key type not as expected in ticket info item %d", i+1))
   114  	assert.Equal(t, []byte("12345678"), a.TicketInfo[i].Key.KeyValue, fmt.Sprintf("Key value not as expected in ticket info item %d", i+1))
   115  	assert.Equal(t, testdata.TEST_REALM, a.TicketInfo[i].PRealm, fmt.Sprintf("PRealm not as expected on ticket info item %d", i+1))
   116  	assert.Equal(t, nametype.KRB_NT_PRINCIPAL, a.TicketInfo[i].PName.NameType, fmt.Sprintf("Ticket info (%v) PName NameType not as expected", i+1))
   117  	assert.Equal(t, len(testdata.TEST_PRINCIPALNAME_NAMESTRING), len(a.TicketInfo[i].PName.NameString), fmt.Sprintf("Ticket info (%v) PName does not have the expected number of NameStrings", i+1))
   118  	assert.Equal(t, testdata.TEST_PRINCIPALNAME_NAMESTRING, a.TicketInfo[i].PName.NameString, fmt.Sprintf("Ticket info (%v) PName name string entries not as expected", i+1))
   119  	assert.Equal(t, "fedcba98", hex.EncodeToString(a.TicketInfo[i].Flags.Bytes), fmt.Sprintf("Flags not as expected on ticket info %d", i+1))
   120  	assert.Equal(t, tt, a.TicketInfo[i].AuthTime, fmt.Sprintf("Auth time value not as expected for ticket info %d", i+1))
   121  	assert.Equal(t, tt, a.TicketInfo[i].StartTime, fmt.Sprintf("Start time value not as expected for ticket info %d", i+1))
   122  	assert.Equal(t, tt, a.TicketInfo[i].EndTime, fmt.Sprintf("End time value not as expected for ticket info %d", i+1))
   123  	assert.Equal(t, tt, a.TicketInfo[i].RenewTill, fmt.Sprintf("Renew Till time value not as expected for ticket info %d", i+1))
   124  	assert.Equal(t, nametype.KRB_NT_PRINCIPAL, a.TicketInfo[i].SName.NameType, fmt.Sprintf("Ticket info (%v) PName NameType not as expected", i+1))
   125  	assert.Equal(t, len(testdata.TEST_PRINCIPALNAME_NAMESTRING), len(a.TicketInfo[i].SName.NameString), fmt.Sprintf("Ticket info (%v) PName does not have the expected number of NameStrings", i+1))
   126  	assert.Equal(t, testdata.TEST_PRINCIPALNAME_NAMESTRING, a.TicketInfo[i].SName.NameString, fmt.Sprintf("Ticket info (%v) PName name string entries not as expected", i+1))
   127  	assert.Equal(t, 2, len(a.TicketInfo[i].CAddr), "Number of client addresses not as expected")
   128  	for j, addr := range a.TicketInfo[i].CAddr {
   129  		assert.Equal(t, addrtype.IPv4, addr.AddrType, fmt.Sprintf("Host address type not as expected for address item %d within ticket info %d", j+1, i+1))
   130  		assert.Equal(t, "12d00023", hex.EncodeToString(addr.Address), fmt.Sprintf("Host address not as expected for address item %d within ticket info %d", j+1, i+1))
   131  	}
   132  }