Botan 3.12.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 (const 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 319 of file tls_extensions.h.

Constructor & Destructor Documentation

◆ SRTP_Protection_Profiles() [1/3]

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

Definition at line 331 of file tls_extensions.h.

331: m_pp(pp) {}

◆ SRTP_Protection_Profiles() [2/3]

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

Definition at line 333 of file tls_extensions.h.

333: 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 743 of file tls_extensions.cpp.

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

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

Member Function Documentation

◆ empty()

bool Botan::TLS::SRTP_Protection_Profiles::empty ( ) const
inlineoverridevirtual
Returns
if we should encode this extension or not

Implements Botan::TLS::Extension.

Definition at line 329 of file tls_extensions.h.

329{ return m_pp.empty(); }

◆ is_implemented()

virtual bool Botan::TLS::Extension::is_implemented ( ) const
inlinevirtualinherited
Returns
true if this extension is known and implemented by Botan

Reimplemented in Botan::TLS::Unknown_Extension.

Definition at line 100 of file tls_extensions.h.

100{ return true; }

◆ profiles()

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

Definition at line 325 of file tls_extensions.h.

325{ return m_pp; }

◆ serialize()

std::vector< uint8_t > Botan::TLS::SRTP_Protection_Profiles::serialize ( Connection_Side whoami) const
overridevirtual
Returns
serialized binary for the extension

Implements Botan::TLS::Extension.

Definition at line 765 of file tls_extensions.cpp.

765 {
766 std::vector<uint8_t> buf;
767
768 const uint16_t pp_len = static_cast<uint16_t>(m_pp.size() * 2);
769 buf.push_back(get_byte<0>(pp_len));
770 buf.push_back(get_byte<1>(pp_len));
771
772 for(const uint16_t pp : m_pp) {
773 buf.push_back(get_byte<0>(pp));
774 buf.push_back(get_byte<1>(pp));
775 }
776
777 buf.push_back(0); // srtp_mki, always empty here
778
779 return buf;
780}
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 321 of file tls_extensions.h.

References Botan::TLS::UseSrtp.

Referenced by type().

◆ type()

Extension_Code Botan::TLS::SRTP_Protection_Profiles::type ( ) const
inlineoverridevirtual
Returns
code number of the extension

Implements Botan::TLS::Extension.

Definition at line 323 of file tls_extensions.h.

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

References static_type().


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