Botan 3.9.0
Crypto and TLS for C&
ct_utils.h File Reference

Internal Header. More...

#include <botan/concepts.h>
#include <botan/secmem.h>
#include <botan/internal/bit_ops.h>
#include <botan/internal/stl_util.h>
#include <botan/internal/target_info.h>
#include <optional>
#include <span>
#include <type_traits>

Go to the source code of this file.

Classes

class  Botan::CT::Choice
class  Botan::CT::Mask< T >
class  Botan::CT::Option< T >

Namespaces

namespace  Botan
namespace  Botan::CT

Concepts

concept  Botan::CT::custom_poisonable
concept  Botan::CT::custom_unpoisonable
concept  Botan::CT::poisonable
concept  Botan::CT::unpoisonable
concept  Botan::CT::ct_conditional_assignable

Functions

template<typename T>
constexpr CT::Mask< T > Botan::CT::all_zeros (const T elem[], size_t len)
template<typename T>
constexpr Mask< T > Botan::CT::conditional_assign_mem (Choice cnd, T *dest, const T *src, size_t elems)
template<typename T>
constexpr Mask< T > Botan::CT::conditional_assign_mem (T cnd, T *dest, const T *src, size_t elems)
template<typename T>
constexpr Mask< T > Botan::CT::conditional_copy_mem (Mask< T > mask, T *dest, const T *if_set, const T *if_unset, size_t elems)
template<typename T>
constexpr Mask< T > Botan::CT::conditional_copy_mem (T cnd, T *dest, const T *if_set, const T *if_unset, size_t elems)
template<typename T>
constexpr void Botan::CT::conditional_swap (bool cnd, T &x, T &y)
template<typename T>
constexpr void Botan::CT::conditional_swap_ptr (bool cnd, T &x, T &y)
BOTAN_TEST_API CT::Option< size_t > Botan::CT::copy_output (CT::Choice accept, std::span< uint8_t > output, std::span< const uint8_t > input, size_t offset)
size_t Botan::CT::count_leading_zero_bytes (std::span< const uint8_t > input)
template<typename T>
constexpr CT::Mask< T > Botan::CT::is_equal (const T x[], const T y[], size_t len)
template<typename T>
constexpr CT::Mask< T > Botan::CT::is_equal (std::span< const T > x, std::span< const T > y)
template<typename T>
constexpr CT::Mask< T > Botan::CT::is_not_equal (const T x[], const T y[], size_t len)
secure_vector< uint8_t > Botan::CT::strip_leading_zeros (std::span< const uint8_t > input)
template<std::unsigned_integral T>
requires (!std::same_as<bool, T>)
constexpr T Botan::CT::value_barrier (T x)
Constant Time Check Annotation Helpers
template<typename T>
constexpr void Botan::CT::poison (const T *p, size_t n)
bool Botan::CT::poison_has_effect ()
template<typename T>
constexpr void Botan::CT::unpoison (const T *p, size_t n)
Constant Time Check Annotation Convenience overloads
template<ranges::spanable_range R>
requires std::is_trivially_copyable_v<std::ranges::range_value_t<R>> && (!custom_poisonable<R>)
constexpr void Botan::CT::poison (const R &r)
template<typename T>
requires requires(const T& v) { ::Botan::CT::poison(v); }
constexpr void Botan::CT::poison (const std::optional< T > &x)
template<std::integral T>
constexpr void Botan::CT::poison (const T &p)
template<custom_poisonable T>
constexpr void Botan::CT::poison (const T &x)
template<ranges::spanable_range R>
requires std::is_trivially_copyable_v<std::ranges::range_value_t<R>> && (!custom_unpoisonable<R>)
constexpr void Botan::CT::unpoison (const R &r)
template<typename T>
requires requires(const T& v) { ::Botan::CT::unpoison(v); }
constexpr void Botan::CT::unpoison (const std::optional< T > &x)
template<std::integral T>
constexpr void Botan::CT::unpoison (const T &p)
template<custom_unpoisonable T>
constexpr void Botan::CT::unpoison (const T &x)
Higher-level Constant Time Check Annotation Helpers
template<poisonable T>
requires (std::is_rvalue_reference_v<decltype(v)>)
decltype(auto) Botan::CT::driveby_poison (T &&v)
template<unpoisonable T>
requires (std::is_rvalue_reference_v<decltype(v)>)
decltype(auto) Botan::CT::driveby_unpoison (T &&v)
template<poisonable... Ts>
requires (sizeof...(Ts) > 0)
constexpr void Botan::CT::poison_all (const Ts &... ts)
template<std::ranges::range R>
requires poisonable<std::ranges::range_value_t<R>>
constexpr void Botan::CT::poison_range (const R &r)
template<typename... Ts>
requires (sizeof...(Ts) > 0) && (poisonable<Ts> && ...) && (unpoisonable<Ts> && ...)
constexpr auto Botan::CT::scoped_poison (const Ts &... xs)
template<unpoisonable... Ts>
requires (sizeof...(Ts) > 0)
constexpr void Botan::CT::unpoison_all (const Ts &... ts)
template<std::ranges::range R>
requires unpoisonable<std::ranges::range_value_t<R>>
constexpr void Botan::CT::unpoison_range (const R &r)

Detailed Description

Internal Header.

Definition in file ct_utils.h.