github.com/gopacket/gopacket@v1.1.0/layers/tls_cipherspec.go (about)

     1  // Copyright 2018 The GoPacket Authors. All rights reserved.
     2  //
     3  // Use of this source code is governed by a BSD-style license
     4  // that can be found in the LICENSE file in the root of the source
     5  // tree.
     6  
     7  package layers
     8  
     9  import (
    10  	"errors"
    11  
    12  	"github.com/gopacket/gopacket"
    13  )
    14  
    15  // TLSchangeCipherSpec defines the message value inside ChangeCipherSpec Record
    16  type TLSchangeCipherSpec uint8
    17  
    18  const (
    19  	TLSChangecipherspecMessage TLSchangeCipherSpec = 1
    20  	TLSChangecipherspecUnknown TLSchangeCipherSpec = 255
    21  )
    22  
    23  //  TLS Change Cipher Spec
    24  //  0  1  2  3  4  5  6  7  8
    25  //  +--+--+--+--+--+--+--+--+
    26  //  |        Message        |
    27  //  +--+--+--+--+--+--+--+--+
    28  
    29  // TLSChangeCipherSpecRecord defines the type of data inside ChangeCipherSpec Record
    30  type TLSChangeCipherSpecRecord struct {
    31  	TLSRecordHeader
    32  
    33  	Message TLSchangeCipherSpec
    34  }
    35  
    36  // DecodeFromBytes decodes the slice into the TLS struct.
    37  func (t *TLSChangeCipherSpecRecord) decodeFromBytes(h TLSRecordHeader, data []byte, df gopacket.DecodeFeedback) error {
    38  	// TLS Record Header
    39  	t.ContentType = h.ContentType
    40  	t.Version = h.Version
    41  	t.Length = h.Length
    42  
    43  	if len(data) != 1 {
    44  		df.SetTruncated()
    45  		return errors.New("TLS Change Cipher Spec record incorrect length")
    46  	}
    47  
    48  	t.Message = TLSchangeCipherSpec(data[0])
    49  	if t.Message != TLSChangecipherspecMessage {
    50  		t.Message = TLSChangecipherspecUnknown
    51  	}
    52  
    53  	return nil
    54  }
    55  
    56  // String shows the message value nicely formatted
    57  func (ccs TLSchangeCipherSpec) String() string {
    58  	switch ccs {
    59  	default:
    60  		return "Unknown"
    61  	case TLSChangecipherspecMessage:
    62  		return "Change Cipher Spec Message"
    63  	}
    64  }