Botan 3.9.0
Crypto and TLS for C&
|
#include <strong_type.h>
Public Types | |
using | const_iterator = typename T::const_iterator |
using | const_pointer = typename T::const_pointer |
using | iterator = typename T::iterator |
using | pointer = typename T::pointer |
using | size_type = typename T::size_type |
using | value_type = typename T::value_type |
using | wrapped_type = T |
using | wrapped_type = T |
Public Member Functions | |
constexpr void | _const_time_poison () const |
constexpr void | _const_time_unpoison () const |
auto | all_vartime () const |
auto | any_vartime () const |
template<typename OutT> | |
auto | as () const |
template<typename U> requires (concepts::has_bounds_checked_accessors<T>) | |
decltype(auto) | at (U &&i) const noexcept(noexcept(this->get().at(i))) |
template<typename U> requires (concepts::has_bounds_checked_accessors<T>) | |
decltype(auto) | at (U &&i) noexcept(noexcept(this->get().at(i))) |
auto | at (size_type i) |
auto | at (size_type i) const |
auto | back () |
auto | back () const |
decltype(auto) | begin () const noexcept(noexcept(this->get().begin())) |
decltype(auto) | begin () noexcept(noexcept(this->get().begin())) |
auto | capacity () const |
decltype(auto) | cbegin () const noexcept(noexcept(this->get().cbegin())) |
decltype(auto) | cbegin () noexcept(noexcept(this->get().cbegin())) |
decltype(auto) | cend () const noexcept(noexcept(this->get().cend())) |
decltype(auto) | cend () noexcept(noexcept(this->get().cend())) |
decltype(auto) | data () const noexcept(noexcept(this->get().data())) |
decltype(auto) | data () noexcept(noexcept(this->get().data())) |
bool | empty () const noexcept(noexcept(this->get().empty())) |
decltype(auto) | end () const noexcept(noexcept(this->get().end())) |
decltype(auto) | end () noexcept(noexcept(this->get().end())) |
template<bitvectorish OtherT> | |
auto | equals (const OtherT &other) const |
auto | flip () |
auto | flip (size_type i) |
auto | from_bytes (std::span< const uint8_t > bytes, std::optional< size_type > bits=std::nullopt) |
auto | front () |
auto | front () const |
constexpr T & | get () & |
constexpr T & | get () & |
constexpr T && | get () && |
constexpr T && | get () && |
constexpr const T & | get () const & |
constexpr const T & | get () const & |
constexpr const T && | get () const && |
constexpr const T && | get () const && |
auto | hamming_weight () const |
auto | has_odd_hamming_weight () const |
auto | none_vartime () const |
template<typename U> | |
decltype(auto) | operator[] (U &&i) const noexcept(noexcept(this->get().operator[](i))) |
template<typename U> | |
decltype(auto) | operator[] (U &&i) noexcept(noexcept(this->get().operator[](i))) |
auto | pop_back () |
auto | push_back (bool b) |
auto | reserve (size_type n) |
void | resize (size_type size) noexcept(noexcept(this->get().resize(size))) |
auto | set (size_type i) |
size_type | size () const noexcept(noexcept(this->get().size())) |
template<typename OutT> requires (std::unsigned_integral<strong_type_wrapped_type<OutT>> && !std::same_as<bool, strong_type_wrapped_type<OutT>>) | |
auto | subvector (size_type pos) const |
template<bitvectorish OutT = T> | |
auto | subvector (size_type pos, std::optional< size_type > length=std::nullopt) const |
template<typename InT> requires (std::unsigned_integral<strong_type_wrapped_type<InT>> && !std::same_as<bool, InT>) | |
void | subvector_replace (size_type pos, InT value) |
template<typename OutT = T> | |
auto | to_bytes () const |
auto | to_bytes (std::span< uint8_t > out) const |
auto | to_string () const |
auto | unset (size_type i) |
Static Public Member Functions | |
template<typename CapabilityT> | |
static constexpr bool | has_capability () |
Strong types can be used as wrappers around common types to provide compile time semantics. They usually contribute to more maintainable and less error-prone code especially when dealing with function parameters.
Internally, this provides adapters so that the wrapping strong type behaves as much as the underlying type as possible and desirable.
This implementation was inspired by: https://stackoverflow.com/a/69030899
Definition at line 198 of file strong_type.h.
|
inherited |
Definition at line 79 of file strong_type.h.
|
inherited |
Definition at line 163 of file strong_type.h.
|
inherited |
Definition at line 78 of file strong_type.h.
|
inherited |
Definition at line 162 of file strong_type.h.
|
inherited |
Definition at line 1366 of file bitvector.h.
|
inherited |
Definition at line 76 of file strong_type.h.
|
inherited |
Definition at line 40 of file strong_type.h.
|
inherited |
Definition at line 40 of file strong_type.h.
|
inlineconstexprinherited |
Definition at line 1450 of file bitvector.h.
References Botan::detail::Strong_Base< T >::get().
|
inlineconstexprinherited |
Definition at line 1452 of file bitvector.h.
References Botan::detail::Strong_Base< T >::get().
|
inlineinherited |
|
inlineinherited |
|
inlineinherited |
Definition at line 1384 of file bitvector.h.
References Botan::detail::Strong_Base< T >::get().
|
inlinenoexceptinherited |
Definition at line 139 of file strong_type.h.
References Botan::detail::Strong_Base< T >::get().
|
inlinenoexceptinherited |
Definition at line 146 of file strong_type.h.
References Botan::detail::Strong_Base< T >::get().
|
inlineinherited |
|
inlineinherited |
Definition at line 1371 of file bitvector.h.
References Botan::detail::Strong_Base< T >::get().
Referenced by Botan::LMOTS_Private_Key::chain_input(), and Botan::Classic_McEliece_Field_Ordering::permute_with_pivots().
|
inlineinherited |
|
inlineinherited |
|
inlinenoexceptinherited |
|
inlinenoexceptinherited |
Definition at line 92 of file strong_type.h.
References begin(), and Botan::detail::Strong_Base< T >::get().
Referenced by begin(), Container_Strong_Adapter_Base(), Botan::Classic_McEliece_Field_Ordering::create_from_control_bits(), Botan::encode_point(), Botan::TLS::operator<(), Botan::Sphincs_Hash_Functions_Sha2::Sphincs_Hash_Functions_Sha2(), and Botan::detail::Strong_Adapter< T >::Strong_Adapter().
|
inlineinherited |
|
inlinenoexceptinherited |
|
inlinenoexceptinherited |
|
inlinenoexceptinherited |
|
inlinenoexceptinherited |
|
inlinenoexceptinherited |
|
inlinenoexceptinherited |
Definition at line 179 of file strong_type.h.
References data(), get(), and Botan::detail::Strong_Base< T >::get().
Referenced by Botan::Classic_McEliece_Field_Ordering::ct_is_equal(), data(), Botan::Kyber_KEM_Decryptor::decapsulate(), Botan::TLS::Cipher_State::next_ticket_nonce(), and Botan::FrodoMatrix::serialize().
|
inlinenoexceptinherited |
Definition at line 110 of file strong_type.h.
References empty(), and Botan::detail::Strong_Base< T >::get().
Referenced by empty(), and Botan::TLS::Client_Hello_12::session_handle().
|
inlinenoexceptinherited |
|
inlinenoexceptinherited |
Definition at line 96 of file strong_type.h.
References Botan::detail::Strong_Base< T >::get().
Referenced by Container_Strong_Adapter_Base(), Botan::Classic_McEliece_Field_Ordering::create_from_control_bits(), Botan::encode_point(), Botan::TLS::operator<(), Botan::Sphincs_Hash_Functions_Sha2::Sphincs_Hash_Functions_Sha2(), and Botan::detail::Strong_Adapter< T >::Strong_Adapter().
|
inlineinherited |
Definition at line 1407 of file bitvector.h.
References Botan::detail::Strong_Base< T >::get().
|
inlineinherited |
|
inlineinherited |
Definition at line 1379 of file bitvector.h.
References Botan::detail::Strong_Base< T >::get().
|
inlineinherited |
Definition at line 1433 of file bitvector.h.
References Botan::detail::Strong_Base< T >::get().
|
inlineinherited |
|
inlineinherited |
|
inlineconstexprinherited |
Definition at line 52 of file strong_type.h.
Referenced by Botan::detail::Strong_Adapter< T >::_const_time_poison(), Botan::detail::Strong_Adapter< T >::_const_time_unpoison(), Botan::detail::Strong_Adapter< T >::all_vartime(), Botan::detail::Strong_Adapter< T >::any_vartime(), Botan::detail::Strong_Adapter< T >::as(), Botan::detail::Container_Strong_Adapter_Base< T >::at(), Botan::detail::Container_Strong_Adapter_Base< T >::at(), Botan::detail::Strong_Adapter< T >::at(), Botan::detail::Strong_Adapter< T >::at(), Botan::detail::Strong_Adapter< T >::back(), Botan::detail::Strong_Adapter< T >::back(), Botan::detail::Container_Strong_Adapter_Base< T >::begin(), Botan::detail::Container_Strong_Adapter_Base< T >::begin(), Botan::detail::Strong_Adapter< T >::capacity(), Botan::detail::Container_Strong_Adapter_Base< T >::cbegin(), Botan::detail::Container_Strong_Adapter_Base< T >::cbegin(), Botan::detail::Container_Strong_Adapter_Base< T >::cend(), Botan::detail::Container_Strong_Adapter_Base< T >::cend(), Botan::chain_lengths(), Botan::compute_root(), Botan::detail::Strong_Adapter< T >::data(), Botan::detail::Strong_Adapter< T >::data(), Botan::detail::Container_Strong_Adapter_Base< T >::empty(), Botan::detail::Container_Strong_Adapter_Base< T >::end(), Botan::detail::Container_Strong_Adapter_Base< T >::end(), Botan::detail::Strong_Adapter< T >::equals(), Botan::GF_Mask::expand(), Botan::detail::Strong_Adapter< T >::flip(), Botan::detail::Strong_Adapter< T >::flip(), Botan::detail::Strong_Adapter< T >::from_bytes(), Botan::detail::Strong_Adapter< T >::front(), Botan::detail::Strong_Adapter< T >::front(), Botan::detail::Strong_Adapter< T >::hamming_weight(), Botan::detail::Strong_Adapter< T >::has_odd_hamming_weight(), Botan::ht_sign(), Botan::ht_verify(), Botan::GF_Mask::if_set_return(), Botan::GF_Mask::is_equal(), Botan::GF_Mask::is_lte(), Botan::GF_Mask::is_zero(), Botan::detail::Strong_Adapter< T >::none_vartime(), Botan::operator&(), Botan::operator&(), Botan::operator&(), Botan::operator&=(), Botan::operator&=(), Botan::Classic_McEliece_GF::operator*(), Botan::operator*(), Botan::operator*(), Botan::operator*(), Botan::operator*=(), Botan::operator*=(), Botan::operator+(), Botan::operator+(), Botan::operator+(), Botan::operator++(), Botan::operator++(), Botan::operator+=(), Botan::operator+=(), Botan::operator-(), Botan::operator-(), Botan::operator-(), Botan::operator--(), Botan::operator--(), Botan::operator-=(), Botan::operator-=(), Botan::operator/(), Botan::operator/(), Botan::operator/(), Botan::operator/=(), Botan::operator/=(), Botan::operator<<(), Botan::operator<<(), Botan::operator<<(), Botan::operator<<(), Botan::operator<<=(), Botan::operator<<=(), Botan::operator<=>(), Botan::operator<=>(), Botan::operator<=>(), Botan::operator==(), Botan::operator==(), Botan::operator==(), Botan::operator>>(), Botan::operator>>(), Botan::operator>>(), Botan::operator>>=(), Botan::operator>>=(), Botan::detail::Container_Strong_Adapter_Base< T >::operator[](), Botan::detail::Container_Strong_Adapter_Base< T >::operator[](), Botan::operator^(), Botan::operator^(), Botan::operator^(), Botan::operator^=(), Botan::operator^=(), Botan::operator|(), Botan::operator|(), Botan::operator|(), Botan::operator|=(), Botan::operator|=(), Botan::HSS_LMS_Params::params_at_level(), Botan::detail::Strong_Adapter< T >::pop_back(), Botan::TLS::Cipher_State::psk(), Botan::detail::Strong_Adapter< T >::push_back(), Botan::Classic_McEliece_Encryptor::raw_kem_encrypt(), Botan::detail::Container_Strong_Adapter_Base< T >::reserve(), Botan::detail::Strong_Adapter< T >::reserve(), Botan::detail::Container_Strong_Adapter_Base< T >::resize(), Botan::GF_Mask::select(), Botan::GF_Mask::select(), Botan::detail::Strong_Adapter< T >::set(), Botan::Sphincs_Address::set_chain_address(), Botan::Sphincs_Address::set_hash_address(), Botan::Sphincs_Address::set_keypair_address(), Botan::Sphincs_Address::set_layer_address(), Botan::Sphincs_Address::set_tree_address(), Botan::Sphincs_Address::set_tree_height(), Botan::Sphincs_Address::set_tree_index(), Botan::HSS_LMS_PrivateKeyInternal::sign(), Botan::LMS_PrivateKey::sign_and_get_pk(), Botan::HSS_Signature::signed_pub_key(), Botan::detail::Container_Strong_Adapter_Base< T >::size(), Botan::detail::Strong_Adapter< T >::subvector(), Botan::detail::Strong_Adapter< T >::subvector(), Botan::detail::Strong_Adapter< T >::subvector_replace(), Botan::detail::Strong_Adapter< T >::to_bytes(), Botan::detail::Strong_Adapter< T >::to_bytes(), Botan::detail::Strong_Adapter< T >::to_string(), Botan::treehash(), Botan::detail::Strong_Adapter< T >::unset(), Botan::wots_public_key_from_signature(), and Botan::x448().
|
inlineconstexprinherited |
Definition at line 52 of file strong_type.h.
Referenced by Botan::detail::Strong_Adapter< T >::_const_time_poison(), Botan::detail::Strong_Adapter< T >::_const_time_unpoison(), Botan::detail::Strong_Adapter< T >::all_vartime(), Botan::detail::Strong_Adapter< T >::any_vartime(), Botan::detail::Strong_Adapter< T >::as(), Botan::detail::Container_Strong_Adapter_Base< T >::at(), Botan::detail::Container_Strong_Adapter_Base< T >::at(), Botan::detail::Strong_Adapter< T >::at(), Botan::detail::Strong_Adapter< T >::at(), Botan::detail::Strong_Adapter< T >::back(), Botan::detail::Strong_Adapter< T >::back(), Botan::detail::Container_Strong_Adapter_Base< T >::begin(), Botan::detail::Container_Strong_Adapter_Base< T >::begin(), Botan::detail::Strong_Adapter< T >::capacity(), Botan::detail::Container_Strong_Adapter_Base< T >::cbegin(), Botan::detail::Container_Strong_Adapter_Base< T >::cbegin(), Botan::detail::Container_Strong_Adapter_Base< T >::cend(), Botan::detail::Container_Strong_Adapter_Base< T >::cend(), Botan::chain_lengths(), Botan::compute_root(), Botan::detail::Strong_Adapter< T >::data(), Botan::detail::Strong_Adapter< T >::data(), Botan::detail::Container_Strong_Adapter_Base< T >::empty(), Botan::detail::Container_Strong_Adapter_Base< T >::end(), Botan::detail::Container_Strong_Adapter_Base< T >::end(), Botan::detail::Strong_Adapter< T >::equals(), Botan::GF_Mask::expand(), Botan::detail::Strong_Adapter< T >::flip(), Botan::detail::Strong_Adapter< T >::flip(), Botan::detail::Strong_Adapter< T >::from_bytes(), Botan::detail::Strong_Adapter< T >::front(), Botan::detail::Strong_Adapter< T >::front(), Botan::detail::Strong_Adapter< T >::hamming_weight(), Botan::detail::Strong_Adapter< T >::has_odd_hamming_weight(), Botan::ht_sign(), Botan::ht_verify(), Botan::GF_Mask::if_set_return(), Botan::GF_Mask::is_equal(), Botan::GF_Mask::is_lte(), Botan::GF_Mask::is_zero(), Botan::detail::Strong_Adapter< T >::none_vartime(), Botan::operator&(), Botan::operator&(), Botan::operator&(), Botan::operator&=(), Botan::operator&=(), Botan::Classic_McEliece_GF::operator*(), Botan::operator*(), Botan::operator*(), Botan::operator*(), Botan::operator*=(), Botan::operator*=(), Botan::operator+(), Botan::operator+(), Botan::operator+(), Botan::operator++(), Botan::operator++(), Botan::operator+=(), Botan::operator+=(), Botan::operator-(), Botan::operator-(), Botan::operator-(), Botan::operator--(), Botan::operator--(), Botan::operator-=(), Botan::operator-=(), Botan::operator/(), Botan::operator/(), Botan::operator/(), Botan::operator/=(), Botan::operator/=(), Botan::operator<<(), Botan::operator<<(), Botan::operator<<(), Botan::operator<<(), Botan::operator<<=(), Botan::operator<<=(), Botan::operator<=>(), Botan::operator<=>(), Botan::operator<=>(), Botan::operator==(), Botan::operator==(), Botan::operator==(), Botan::operator>>(), Botan::operator>>(), Botan::operator>>(), Botan::operator>>=(), Botan::operator>>=(), Botan::detail::Container_Strong_Adapter_Base< T >::operator[](), Botan::detail::Container_Strong_Adapter_Base< T >::operator[](), Botan::operator^(), Botan::operator^(), Botan::operator^(), Botan::operator^=(), Botan::operator^=(), Botan::operator|(), Botan::operator|(), Botan::operator|(), Botan::operator|=(), Botan::operator|=(), Botan::HSS_LMS_Params::params_at_level(), Botan::detail::Strong_Adapter< T >::pop_back(), Botan::TLS::Cipher_State::psk(), Botan::detail::Strong_Adapter< T >::push_back(), Botan::Classic_McEliece_Encryptor::raw_kem_encrypt(), Botan::detail::Container_Strong_Adapter_Base< T >::reserve(), Botan::detail::Strong_Adapter< T >::reserve(), Botan::detail::Container_Strong_Adapter_Base< T >::resize(), Botan::GF_Mask::select(), Botan::GF_Mask::select(), Botan::detail::Strong_Adapter< T >::set(), Botan::Sphincs_Address::set_chain_address(), Botan::Sphincs_Address::set_hash_address(), Botan::Sphincs_Address::set_keypair_address(), Botan::Sphincs_Address::set_layer_address(), Botan::Sphincs_Address::set_tree_address(), Botan::Sphincs_Address::set_tree_height(), Botan::Sphincs_Address::set_tree_index(), Botan::HSS_LMS_PrivateKeyInternal::sign(), Botan::LMS_PrivateKey::sign_and_get_pk(), Botan::HSS_Signature::signed_pub_key(), Botan::detail::Container_Strong_Adapter_Base< T >::size(), Botan::detail::Strong_Adapter< T >::subvector(), Botan::detail::Strong_Adapter< T >::subvector(), Botan::detail::Strong_Adapter< T >::subvector_replace(), Botan::detail::Strong_Adapter< T >::to_bytes(), Botan::detail::Strong_Adapter< T >::to_bytes(), Botan::detail::Strong_Adapter< T >::to_string(), Botan::treehash(), Botan::detail::Strong_Adapter< T >::unset(), Botan::wots_public_key_from_signature(), and Botan::x448().
|
inlineconstexprinherited |
Definition at line 56 of file strong_type.h.
|
inlineconstexprinherited |
Definition at line 56 of file strong_type.h.
|
inlineconstexprinherited |
Definition at line 54 of file strong_type.h.
|
inlineconstexprinherited |
Definition at line 54 of file strong_type.h.
|
inlineconstexprinherited |
Definition at line 58 of file strong_type.h.
|
inlineconstexprinherited |
Definition at line 58 of file strong_type.h.
|
inlineinherited |
|
inlinestaticconstexpr |
Definition at line 203 of file strong_type.h.
|
inlineinherited |
|
inlineinherited |
|
inlinenoexceptinherited |
Definition at line 129 of file strong_type.h.
References Botan::detail::Strong_Base< T >::get().
|
inlinenoexceptinherited |
Definition at line 134 of file strong_type.h.
References Botan::detail::Strong_Base< T >::get().
|
inlineinherited |
|
inlineinherited |
Definition at line 1411 of file bitvector.h.
References Botan::detail::Strong_Base< T >::get().
|
inlineinherited |
Definition at line 1448 of file bitvector.h.
References Botan::detail::Strong_Base< T >::get().
|
inlinenoexceptinherited |
Definition at line 116 of file strong_type.h.
References Botan::detail::Strong_Base< T >::get(), and size().
|
inlineinherited |
Definition at line 1375 of file bitvector.h.
References Botan::detail::Strong_Base< T >::get().
|
inlinenoexceptinherited |
Definition at line 108 of file strong_type.h.
References Botan::detail::Strong_Base< T >::get(), and size().
Referenced by Botan::compute_root(), Container_Strong_Adapter_Base(), Botan::Classic_McEliece_Field_Ordering::ct_is_equal(), Botan::Kyber_KEM_Decryptor::decapsulate(), reserve(), resize(), size(), and Botan::Sphincs_Hash_Functions_Sha2::Sphincs_Hash_Functions_Sha2().
|
inlineinherited |
Definition at line 1396 of file bitvector.h.
References Botan::detail::Strong_Base< T >::get(), and subvector().
|
inlineinherited |
Definition at line 1389 of file bitvector.h.
References Botan::detail::Strong_Base< T >::get(), and subvector().
Referenced by Botan::Classic_McEliece_Matrix::mul(), subvector(), and subvector().
|
inlineinherited |
Definition at line 1402 of file bitvector.h.
References Botan::detail::Strong_Base< T >::get().
|
inlineinherited |
Definition at line 1438 of file bitvector.h.
References Botan::detail::Strong_Base< T >::get(), and to_bytes().
Referenced by to_bytes().
|
inlineinherited |
Definition at line 1442 of file bitvector.h.
References Botan::detail::Strong_Base< T >::get().
|
inlineinherited |
|
inlineinherited |
Definition at line 1377 of file bitvector.h.
References Botan::detail::Strong_Base< T >::get().