123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165 |
- // 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"
- "fmt"
- "github.com/google/gopacket"
- )
- // TLSAlertLevel defines the alert level data type
- type TLSAlertLevel uint8
- // TLSAlertDescr defines the alert descrption data type
- type TLSAlertDescr uint8
- const (
- TLSAlertWarning TLSAlertLevel = 1
- TLSAlertFatal TLSAlertLevel = 2
- TLSAlertUnknownLevel TLSAlertLevel = 255
- TLSAlertCloseNotify TLSAlertDescr = 0
- TLSAlertUnexpectedMessage TLSAlertDescr = 10
- TLSAlertBadRecordMac TLSAlertDescr = 20
- TLSAlertDecryptionFailedRESERVED TLSAlertDescr = 21
- TLSAlertRecordOverflow TLSAlertDescr = 22
- TLSAlertDecompressionFailure TLSAlertDescr = 30
- TLSAlertHandshakeFailure TLSAlertDescr = 40
- TLSAlertNoCertificateRESERVED TLSAlertDescr = 41
- TLSAlertBadCertificate TLSAlertDescr = 42
- TLSAlertUnsupportedCertificate TLSAlertDescr = 43
- TLSAlertCertificateRevoked TLSAlertDescr = 44
- TLSAlertCertificateExpired TLSAlertDescr = 45
- TLSAlertCertificateUnknown TLSAlertDescr = 46
- TLSAlertIllegalParameter TLSAlertDescr = 47
- TLSAlertUnknownCa TLSAlertDescr = 48
- TLSAlertAccessDenied TLSAlertDescr = 49
- TLSAlertDecodeError TLSAlertDescr = 50
- TLSAlertDecryptError TLSAlertDescr = 51
- TLSAlertExportRestrictionRESERVED TLSAlertDescr = 60
- TLSAlertProtocolVersion TLSAlertDescr = 70
- TLSAlertInsufficientSecurity TLSAlertDescr = 71
- TLSAlertInternalError TLSAlertDescr = 80
- TLSAlertUserCanceled TLSAlertDescr = 90
- TLSAlertNoRenegotiation TLSAlertDescr = 100
- TLSAlertUnsupportedExtension TLSAlertDescr = 110
- TLSAlertUnknownDescription TLSAlertDescr = 255
- )
- // TLS Alert
- // 0 1 2 3 4 5 6 7 8
- // +--+--+--+--+--+--+--+--+
- // | Level |
- // +--+--+--+--+--+--+--+--+
- // | Description |
- // +--+--+--+--+--+--+--+--+
- // TLSAlertRecord contains all the information that each Alert Record type should have
- type TLSAlertRecord struct {
- TLSRecordHeader
- Level TLSAlertLevel
- Description TLSAlertDescr
- EncryptedMsg []byte
- }
- // DecodeFromBytes decodes the slice into the TLS struct.
- func (t *TLSAlertRecord) 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) < 2 {
- df.SetTruncated()
- return errors.New("TLS Alert packet too short")
- }
- if t.Length == 2 {
- t.Level = TLSAlertLevel(data[0])
- t.Description = TLSAlertDescr(data[1])
- } else {
- t.Level = TLSAlertUnknownLevel
- t.Description = TLSAlertUnknownDescription
- t.EncryptedMsg = data
- }
- return nil
- }
- // Strings shows the TLS alert level nicely formatted
- func (al TLSAlertLevel) String() string {
- switch al {
- default:
- return fmt.Sprintf("Unknown(%d)", al)
- case TLSAlertWarning:
- return "Warning"
- case TLSAlertFatal:
- return "Fatal"
- }
- }
- // Strings shows the TLS alert description nicely formatted
- func (ad TLSAlertDescr) String() string {
- switch ad {
- default:
- return "Unknown"
- case TLSAlertCloseNotify:
- return "close_notify"
- case TLSAlertUnexpectedMessage:
- return "unexpected_message"
- case TLSAlertBadRecordMac:
- return "bad_record_mac"
- case TLSAlertDecryptionFailedRESERVED:
- return "decryption_failed_RESERVED"
- case TLSAlertRecordOverflow:
- return "record_overflow"
- case TLSAlertDecompressionFailure:
- return "decompression_failure"
- case TLSAlertHandshakeFailure:
- return "handshake_failure"
- case TLSAlertNoCertificateRESERVED:
- return "no_certificate_RESERVED"
- case TLSAlertBadCertificate:
- return "bad_certificate"
- case TLSAlertUnsupportedCertificate:
- return "unsupported_certificate"
- case TLSAlertCertificateRevoked:
- return "certificate_revoked"
- case TLSAlertCertificateExpired:
- return "certificate_expired"
- case TLSAlertCertificateUnknown:
- return "certificate_unknown"
- case TLSAlertIllegalParameter:
- return "illegal_parameter"
- case TLSAlertUnknownCa:
- return "unknown_ca"
- case TLSAlertAccessDenied:
- return "access_denied"
- case TLSAlertDecodeError:
- return "decode_error"
- case TLSAlertDecryptError:
- return "decrypt_error"
- case TLSAlertExportRestrictionRESERVED:
- return "export_restriction_RESERVED"
- case TLSAlertProtocolVersion:
- return "protocol_version"
- case TLSAlertInsufficientSecurity:
- return "insufficient_security"
- case TLSAlertInternalError:
- return "internal_error"
- case TLSAlertUserCanceled:
- return "user_canceled"
- case TLSAlertNoRenegotiation:
- return "no_renegotiation"
- case TLSAlertUnsupportedExtension:
- return "unsupported_extension"
- }
- }
|