Botan 3.9.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 678 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 681 of file ct_utils.h.

681: 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 684 of file ct_utils.h.

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

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 687 of file ct_utils.h.

689 : 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 738 of file ct_utils.h.

738 {
739 if(m_has_value.as_bool()) {
740 return {m_value};
741 } else {
742 return {};
743 }
744 }

◆ 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 692 of file ct_utils.h.

692{ 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 747 of file ct_utils.h.

747{ 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, const T&>>>
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 702 of file ct_utils.h.

702 {
703 return {f(m_value), m_has_value};
704 }

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 707 of file ct_utils.h.

707 {
708 BOTAN_STATE_CHECK(m_has_value.as_bool());
709 return m_value;
710 }
#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 types which explicitly define a function conditional_assign which takes a CT::Choice as the conditional.

Definition at line 716 of file ct_utils.h.

718 {
719 other.conditional_assign(m_has_value, m_value);
720 return other;
721 }

Referenced by Botan::map_to_curve_sswu().

◆ 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 integer types where CT::Mask can perform a constant time selection

Definition at line 727 of file ct_utils.h.

729 {
730 auto mask = CT::Mask<T>::from_choice(m_has_value);
731 return mask.select(m_value, other);
732 }
static constexpr Mask< T > from_choice(Choice c)
Definition ct_utils.h:430

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


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