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

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