Botan 3.11.0
Crypto and TLS for C&
Botan::CT::Option< T > Class Template Referencefinal

#include <ct_utils.h>

Public Member Functions

constexpr std::optional< T > as_optional_vartime () const
constexpr Choice has_value () const
 Return true if this Option contains a value.
constexpr CT::Option< T > operator&& (CT::Choice also)
 Return a new CT::Option that is set if also is set as well.
constexpr Option ()
 Construct an unset option with a default inner value.
constexpr Option (T v)
 Construct a set option with the provided value.
constexpr Option (T v, Choice valid)
 Construct an Option which contains the specified value, and is set or not.
template<std::invocable< const T & > F>
constexpr auto transform (F f) const -> Option< std::remove_cvref_t< std::invoke_result_t< F, const T & > > >
constexpr const T & value () const
 Either returns the value or throws an exception.
constexpr T value_or (T other) const
constexpr T value_or (T other) const

Detailed Description

template<typename T>
class Botan::CT::Option< T >

A CT::Option<T> is either a valid T, or not

To maintain constant time behavior a value must always be stored. A CT::Choice tracks if the value is valid or not. It is not possible to access the inner value if the Choice is unset.

Definition at line 650 of file ct_utils.h.

Constructor & Destructor Documentation

◆ Option() [1/3]

template<typename T>
Botan::CT::Option< T >::Option ( T v,
Choice valid )
inlineconstexpr

Construct an Option which contains the specified value, and is set or not.

Definition at line 653 of file ct_utils.h.

653: m_has_value(valid), m_value(std::move(v)) {}

Referenced by Option(), Option(), and transform().

◆ Option() [2/3]

template<typename T>
Botan::CT::Option< T >::Option ( T v)
inlineexplicitconstexpr

Construct a set option with the provided value.

Definition at line 656 of file ct_utils.h.

constexpr Option()
Construct an unset option with a default inner value.
Definition ct_utils.h:659

References Option().

◆ Option() [3/3]

template<typename T>
Botan::CT::Option< T >::Option ( )
inlineconstexpr

Construct an unset option with a default inner value.

Definition at line 659 of file ct_utils.h.

661 : Option(T(), Choice::no()) {}

References Option().

Member Function Documentation

◆ as_optional_vartime()

template<typename T>
std::optional< T > Botan::CT::Option< T >::as_optional_vartime ( ) const
inlineconstexpr

Convert this Option into a std::optional

This is not constant time, leaking if the Option had a value or not

Definition at line 710 of file ct_utils.h.

710 {
711 if(m_has_value.as_bool()) {
712 return {m_value};
713 } else {
714 return {};
715 }
716 }

◆ has_value()

template<typename T>
Choice Botan::CT::Option< T >::has_value ( ) const
inlineconstexpr

Return true if this Option contains a value.

Definition at line 664 of file ct_utils.h.

664{ return m_has_value; }

Referenced by Botan::map_to_curve_sswu().

◆ operator&&()

template<typename T>
CT::Option< T > Botan::CT::Option< T >::operator&& ( CT::Choice also)
inlineconstexpr

Return a new CT::Option that is set if also is set as well.

Definition at line 719 of file ct_utils.h.

719{ return CT::Option<T>(m_value, m_has_value && also); }

◆ transform()

template<typename T>
template<std::invocable< const T & > F>
auto Botan::CT::Option< T >::transform ( F f) const->Option< std::remove_cvref_t< std::invoke_result_t< F, constT & > > >
inlineconstexpr

Apply a function to the inner value and return a new Option which contains that value. This is constant time only if f is.

Note
The function will always be called, even if the Option is None. It must be prepared to handle any possible state of T.

Definition at line 674 of file ct_utils.h.

674 {
675 return {f(m_value), m_has_value};
676 }

References Option().

◆ value()

template<typename T>
const T & Botan::CT::Option< T >::value ( ) const
inlineconstexpr

Either returns the value or throws an exception.

Definition at line 679 of file ct_utils.h.

679 {
680 BOTAN_STATE_CHECK(m_has_value.as_bool());
681 return m_value;
682 }
#define BOTAN_STATE_CHECK(expr)
Definition assert.h:49

References BOTAN_STATE_CHECK.

◆ value_or() [1/2]

template<typename T>
T Botan::CT::Option< T >::value_or ( T other) const
inlineconstexpr

Returns either the inner value or the alternative, in constant time

This variant is used for integer types where CT::Mask can perform a constant time selection

Definition at line 699 of file ct_utils.h.

701 {
702 auto mask = CT::Mask<T>::from_choice(m_has_value);
703 return mask.select(m_value, other);
704 }
static constexpr Mask< T > from_choice(Choice c)
Definition ct_utils.h:402

References Botan::CT::Mask< T >::from_choice().

◆ value_or() [2/2]

template<typename T>
T Botan::CT::Option< T >::value_or ( T other) const
inlineconstexpr

Returns either the inner value or the alternative, in constant time

This variant is used for types which explicitly define a function conditional_assign which takes a CT::Choice as the conditional.

Definition at line 688 of file ct_utils.h.

690 {
691 other.conditional_assign(m_has_value, m_value);
692 return other;
693 }

Referenced by Botan::map_to_curve_sswu().


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