// Copyright 2018 The GoPacket Authors. All rights reserved. // // Use of this source code is governed by a BSD-style license // that can be found in the LICENSE file in the root of the source // tree. package layers import ( "errors" "github.com/google/gopacket" ) // TLSchangeCipherSpec defines the message value inside ChangeCipherSpec Record type TLSchangeCipherSpec uint8 const ( TLSChangecipherspecMessage TLSchangeCipherSpec = 1 TLSChangecipherspecUnknown TLSchangeCipherSpec = 255 ) // TLS Change Cipher Spec // 0 1 2 3 4 5 6 7 8 // +--+--+--+--+--+--+--+--+ // | Message | // +--+--+--+--+--+--+--+--+ // TLSChangeCipherSpecRecord defines the type of data inside ChangeCipherSpec Record type TLSChangeCipherSpecRecord struct { TLSRecordHeader Message TLSchangeCipherSpec } // DecodeFromBytes decodes the slice into the TLS struct. func (t *TLSChangeCipherSpecRecord) decodeFromBytes(h TLSRecordHeader, data []byte, df gopacket.DecodeFeedback) error { // TLS Record Header t.ContentType = h.ContentType t.Version = h.Version t.Length = h.Length if len(data) != 1 { df.SetTruncated() return errors.New("TLS Change Cipher Spec record incorrect length") } t.Message = TLSchangeCipherSpec(data[0]) if t.Message != TLSChangecipherspecMessage { t.Message = TLSChangecipherspecUnknown } return nil } // String shows the message value nicely formatted func (ccs TLSchangeCipherSpec) String() string { switch ccs { default: return "Unknown" case TLSChangecipherspecMessage: return "Change Cipher Spec Message" } }