Botan 3.13.0
Crypto and TLS for C&
Botan::TLS::SRTP_Protection_Profiles Class Referencefinal

#include <tls_extensions.h>

Inheritance diagram for Botan::TLS::SRTP_Protection_Profiles:
Botan::TLS::Extension

Public Member Functions

bool empty () const override
virtual bool is_implemented () const
const std::vector< uint16_t > & profiles () const
std::vector< uint8_t > serialize (Connection_Side whoami) const override
 SRTP_Protection_Profiles (std::vector< uint16_t > pp)
 SRTP_Protection_Profiles (TLS_Data_Reader &reader, uint16_t extension_size)
 SRTP_Protection_Profiles (uint16_t pp)
Extension_Code type () const override

Static Public Member Functions

static Extension_Code static_type ()

Detailed Description

Used to indicate SRTP algorithms for DTLS (RFC 5764)

Definition at line 332 of file tls_extensions.h.

Constructor & Destructor Documentation

◆ SRTP_Protection_Profiles() [1/3]

Botan::TLS::SRTP_Protection_Profiles::SRTP_Protection_Profiles ( std::vector< uint16_t > pp)
inlineexplicit

Definition at line 344 of file tls_extensions.h.

344: m_pp(std::move(pp)) {}

◆ SRTP_Protection_Profiles() [2/3]

Botan::TLS::SRTP_Protection_Profiles::SRTP_Protection_Profiles ( uint16_t pp)
inlineexplicit

Definition at line 346 of file tls_extensions.h.

346: m_pp(1, pp) {}

◆ SRTP_Protection_Profiles() [3/3]

Botan::TLS::SRTP_Protection_Profiles::SRTP_Protection_Profiles ( TLS_Data_Reader & reader,
uint16_t extension_size )

Definition at line 748 of file tls_extensions.cpp.

748 {
749 // RFC 5764 4.1.1: UseSRTPData consists of
750 // SRTPProtectionProfile SRTPProtectionProfiles<2..2^16-1>;
751 // opaque srtp_mki<0..255>;
752 // for a wire size of 2 (profiles len) + 2*N + 1 (mki len) + mki_bytes,
753 // with N >= 1.
754 if(extension_size < 5) {
755 throw Decoding_Error("Truncated SRTP protection extension");
756 }
757 const size_t max_profile_pairs = (static_cast<size_t>(extension_size) - 3) / 2;
758 m_pp = reader.get_range<uint16_t>(2, 1, max_profile_pairs);
759 const std::vector<uint8_t> mki = reader.get_range<uint8_t>(1, 0, 255);
760
761 if(m_pp.size() * 2 + mki.size() + 3 != extension_size) {
762 throw Decoding_Error("Bad encoding for SRTP protection extension");
763 }
764
765 if(!mki.empty()) {
766 throw Decoding_Error("Unhandled non-empty MKI for SRTP protection extension");
767 }
768}

References Botan::TLS::TLS_Data_Reader::get_range().

Member Function Documentation

◆ empty()

bool Botan::TLS::SRTP_Protection_Profiles::empty ( ) const
inlineoverridevirtual

Predicate if a TLS extension should be included or not

Returns
true if this extension should be encoded, otherwise false

Implements Botan::TLS::Extension.

Definition at line 342 of file tls_extensions.h.

342{ return m_pp.empty(); }

◆ is_implemented()

virtual bool Botan::TLS::Extension::is_implemented ( ) const
inlinevirtualinherited

Predicate if the extension is known/implemented

Note
this exists primarily to support unknown extension handling and doesn't need to be overridden even in the custom extension case.
Returns
true if this extension is known

Reimplemented in Botan::TLS::Unknown_Extension.

Definition at line 113 of file tls_extensions.h.

113{ return true; }

◆ profiles()

const std::vector< uint16_t > & Botan::TLS::SRTP_Protection_Profiles::profiles ( ) const
inline

Definition at line 338 of file tls_extensions.h.

338{ return m_pp; }

◆ serialize()

std::vector< uint8_t > Botan::TLS::SRTP_Protection_Profiles::serialize ( Connection_Side whoami) const
overridevirtual

Serialize a TLS extension

Parameters
whoamiwhich peer we are acting as in the protocol
Returns
serialized binary for the extension

Implements Botan::TLS::Extension.

Definition at line 770 of file tls_extensions.cpp.

770 {
771 std::vector<uint8_t> buf;
772
773 const uint16_t pp_len = static_cast<uint16_t>(m_pp.size() * 2);
774 buf.push_back(get_byte<0>(pp_len));
775 buf.push_back(get_byte<1>(pp_len));
776
777 for(const uint16_t pp : m_pp) {
778 buf.push_back(get_byte<0>(pp));
779 buf.push_back(get_byte<1>(pp));
780 }
781
782 buf.push_back(0); // srtp_mki, always empty here
783
784 return buf;
785}
constexpr uint8_t get_byte(T input)
Definition loadstor.h:79

References Botan::get_byte().

◆ static_type()

Extension_Code Botan::TLS::SRTP_Protection_Profiles::static_type ( )
inlinestatic

Definition at line 334 of file tls_extensions.h.

References Botan::TLS::UseSrtp.

Referenced by type().

◆ type()

Extension_Code Botan::TLS::SRTP_Protection_Profiles::type ( ) const
inlineoverridevirtual

Return TLS extension code

Returns
code number of the extension

Implements Botan::TLS::Extension.

Definition at line 336 of file tls_extensions.h.

336{ return static_type(); }
static Extension_Code static_type()

References static_type().


The documentation for this class was generated from the following files: