Botan 3.12.0
Crypto and TLS for C&
ffi_mp.cpp File Reference
#include <botan/ffi.h>
#include <botan/assert.h>
#include <botan/numthry.h>
#include <botan/internal/barrett.h>
#include <botan/internal/divide.h>
#include <botan/internal/ffi_mp.h>
#include <botan/internal/ffi_rng.h>
#include <botan/internal/ffi_util.h>
#include <botan/internal/mem_utils.h>
#include <botan/internal/mod_inv.h>

Go to the source code of this file.

Functions

int botan_mp_add (botan_mp_t result, const botan_mp_t x, const botan_mp_t y)
int botan_mp_add_u32 (botan_mp_t result, const botan_mp_t x, uint32_t y)
int botan_mp_clear (botan_mp_t mp)
int botan_mp_clear_bit (botan_mp_t mp, size_t bit)
int botan_mp_cmp (int *result, const botan_mp_t x_w, const botan_mp_t y_w)
int botan_mp_destroy (botan_mp_t mp)
int botan_mp_div (botan_mp_t quotient, botan_mp_t remainder, const botan_mp_t x, const botan_mp_t y)
int botan_mp_equal (const botan_mp_t x_w, const botan_mp_t y_w)
int botan_mp_flip_sign (botan_mp_t mp)
int botan_mp_from_bin (botan_mp_t mp, const uint8_t bin[], size_t bin_len)
int botan_mp_gcd (botan_mp_t out, const botan_mp_t x, const botan_mp_t y)
int botan_mp_get_bit (const botan_mp_t mp, size_t bit)
int botan_mp_init (botan_mp_t *mp_out)
int botan_mp_is_even (const botan_mp_t mp)
int botan_mp_is_negative (const botan_mp_t mp)
int botan_mp_is_odd (const botan_mp_t mp)
int botan_mp_is_positive (const botan_mp_t mp)
int botan_mp_is_prime (const botan_mp_t mp, botan_rng_t rng, size_t test_prob)
int botan_mp_is_zero (const botan_mp_t mp)
int botan_mp_lshift (botan_mp_t out, const botan_mp_t in, size_t shift)
int botan_mp_mod_inverse (botan_mp_t out, const botan_mp_t in, const botan_mp_t modulus)
int botan_mp_mod_mul (botan_mp_t out, const botan_mp_t x, const botan_mp_t y, const botan_mp_t modulus)
int botan_mp_mul (botan_mp_t result, const botan_mp_t x, const botan_mp_t y)
int botan_mp_num_bits (const botan_mp_t mp, size_t *bits)
int botan_mp_num_bytes (const botan_mp_t mp, size_t *bytes)
int botan_mp_powmod (botan_mp_t out, const botan_mp_t base, const botan_mp_t exponent, const botan_mp_t modulus)
int botan_mp_rand_bits (botan_mp_t rand_out, botan_rng_t rng, size_t bits)
int botan_mp_rand_range (botan_mp_t rand_out, botan_rng_t rng, const botan_mp_t lower, const botan_mp_t upper)
int botan_mp_rshift (botan_mp_t out, const botan_mp_t in, size_t shift)
int botan_mp_set_bit (botan_mp_t mp, size_t bit)
int botan_mp_set_from_int (botan_mp_t mp, int initial_value)
int botan_mp_set_from_mp (botan_mp_t dest, const botan_mp_t source)
int botan_mp_set_from_radix_str (botan_mp_t mp, const char *str, size_t radix)
int botan_mp_set_from_str (botan_mp_t mp, const char *str)
int botan_mp_sub (botan_mp_t result, const botan_mp_t x, const botan_mp_t y)
int botan_mp_sub_u32 (botan_mp_t result, const botan_mp_t x, uint32_t y)
int botan_mp_swap (botan_mp_t x_w, botan_mp_t y_w)
int botan_mp_to_bin (const botan_mp_t mp, uint8_t vec[])
int botan_mp_to_hex (const botan_mp_t mp, char *out)
int botan_mp_to_str (const botan_mp_t mp, uint8_t radix, char *out, size_t *out_len)
int botan_mp_to_uint32 (const botan_mp_t mp, uint32_t *val)
int botan_mp_view_bin (const botan_mp_t mp, botan_view_ctx ctx, botan_view_bin_fn view)
int botan_mp_view_hex (const botan_mp_t mp, botan_view_ctx ctx, botan_view_str_fn view)
int botan_mp_view_str (const botan_mp_t mp, uint8_t radix, botan_view_ctx ctx, botan_view_str_fn view)

Function Documentation

◆ botan_mp_add()

int botan_mp_add ( botan_mp_t result,
const botan_mp_t x,
const botan_mp_t y )

Definition at line 153 of file ffi_mp.cpp.

153 {
154 return BOTAN_FFI_VISIT(result, [=](auto& res) {
155 if(result == x) {
156 res += safe_get(y);
157 } else {
158 res = safe_get(x) + safe_get(y);
159 }
160 });
161}
#define BOTAN_FFI_VISIT(obj, lambda)
Definition ffi_util.h:158
T & safe_get(botan_struct< T, M > *p)
Definition ffi_util.h:79

References BOTAN_FFI_VISIT, and Botan_FFI::safe_get().

◆ botan_mp_add_u32()

int botan_mp_add_u32 ( botan_mp_t result,
const botan_mp_t x,
uint32_t y )

Definition at line 173 of file ffi_mp.cpp.

173 {
174 return BOTAN_FFI_VISIT(result, [=](auto& res) {
175 if(result == x) {
176 res += static_cast<Botan::word>(y);
177 } else {
178 res = safe_get(x) + static_cast<Botan::word>(y);
179 }
180 });
181}
std::conditional_t< HasNative64BitRegisters, std::uint64_t, uint32_t > word
Definition types.h:119

References BOTAN_FFI_VISIT, and Botan_FFI::safe_get().

◆ botan_mp_clear()

int botan_mp_clear ( botan_mp_t mp)

Set the MPI to zero

Definition at line 35 of file ffi_mp.cpp.

35 {
36 return BOTAN_FFI_VISIT(mp, [](auto& bn) { bn.clear(); });
37}

References BOTAN_FFI_VISIT.

◆ botan_mp_clear_bit()

int botan_mp_clear_bit ( botan_mp_t n,
size_t bit )

Clear the specified bit

Definition at line 290 of file ffi_mp.cpp.

290 {
291 return BOTAN_FFI_VISIT(mp, [=](auto& n) { n.clear_bit(bit); });
292}

References BOTAN_FFI_VISIT.

◆ botan_mp_cmp()

int botan_mp_cmp ( int * result,
const botan_mp_t x_w,
const botan_mp_t y_w )

Definition at line 227 of file ffi_mp.cpp.

227 {
228 if(result == nullptr) {
230 }
231 return BOTAN_FFI_VISIT(x_w, [=](auto& x) { *result = x.cmp(safe_get(y_w)); });
232}
@ BOTAN_FFI_ERROR_NULL_POINTER
Definition ffi.h:133

References BOTAN_FFI_ERROR_NULL_POINTER, BOTAN_FFI_VISIT, and Botan_FFI::safe_get().

◆ botan_mp_destroy()

int botan_mp_destroy ( botan_mp_t mp)

Destroy (deallocate) an MPI

Returns
0 if success, error if invalid object handle

Definition at line 149 of file ffi_mp.cpp.

149 {
150 return BOTAN_FFI_CHECKED_DELETE(mp);
151}
#define BOTAN_FFI_CHECKED_DELETE(o)
Definition ffi_util.h:188

References BOTAN_FFI_CHECKED_DELETE.

◆ botan_mp_div()

int botan_mp_div ( botan_mp_t quotient,
botan_mp_t remainder,
const botan_mp_t x,
const botan_mp_t y )

Definition at line 203 of file ffi_mp.cpp.

203 {
204 return BOTAN_FFI_VISIT(quotient, [=](auto& q) {
207 safe_get(remainder) = r;
208 });
209}
void vartime_divide(const BigInt &x, const BigInt &y_arg, BigInt &q_out, BigInt &r_out)
Definition divide.cpp:325

References BOTAN_FFI_VISIT, Botan_FFI::safe_get(), and Botan::vartime_divide().

◆ botan_mp_equal()

int botan_mp_equal ( const botan_mp_t x_w,
const botan_mp_t y_w )

Definition at line 211 of file ffi_mp.cpp.

211 {
212 return BOTAN_FFI_VISIT(x_w, [=](const auto& x) -> int { return x == safe_get(y_w); });
213}

References BOTAN_FFI_VISIT, and Botan_FFI::safe_get().

◆ botan_mp_flip_sign()

int botan_mp_flip_sign ( botan_mp_t mp)

Definition at line 72 of file ffi_mp.cpp.

72 {
73 return BOTAN_FFI_VISIT(mp, [](auto& bn) { bn.flip_sign(); });
74}

References BOTAN_FFI_VISIT.

◆ botan_mp_from_bin()

int botan_mp_from_bin ( botan_mp_t mp,
const uint8_t bin[],
size_t bin_len )

Definition at line 76 of file ffi_mp.cpp.

76 {
77 if(bin_len > 0 && bin == nullptr) {
79 }
80 return BOTAN_FFI_VISIT(mp, [=](auto& bn) { bn._assign_from_bytes({bin, bin_len}); });
81}

References BOTAN_FFI_ERROR_NULL_POINTER, and BOTAN_FFI_VISIT.

◆ botan_mp_gcd()

int botan_mp_gcd ( botan_mp_t out,
const botan_mp_t x,
const botan_mp_t y )

Definition at line 274 of file ffi_mp.cpp.

274 {
275 return BOTAN_FFI_VISIT(out, [=](auto& o) { o = Botan::gcd(safe_get(x), safe_get(y)); });
276}
BigInt gcd(const BigInt &a, const BigInt &b)
Definition numthry.cpp:220

References BOTAN_FFI_VISIT, Botan::gcd(), and Botan_FFI::safe_get().

◆ botan_mp_get_bit()

int botan_mp_get_bit ( botan_mp_t n,
size_t bit )

Returns 0 if specified bit of n is not set Returns 1 if specified bit of n is set Returns negative number on error

Definition at line 282 of file ffi_mp.cpp.

282 {
283 return BOTAN_FFI_VISIT(mp, [=](const auto& n) -> int { return n.get_bit(bit); });
284}

References BOTAN_FFI_VISIT.

◆ botan_mp_init()

int botan_mp_init ( botan_mp_t * mp)

Initialize an MPI

Definition at line 24 of file ffi_mp.cpp.

24 {
25 return ffi_guard_thunk(__func__, [=]() -> int {
26 if(mp_out == nullptr) {
28 }
29
30 auto mp = std::make_unique<Botan::BigInt>();
31 return ffi_new_object(mp_out, std::move(mp));
32 });
33}
BOTAN_FFI_ERROR ffi_new_object(T *obj, Args &&... args)
Definition ffi_util.h:178
int ffi_guard_thunk(const char *func_name, T thunk)
Definition ffi_util.h:95

References BOTAN_FFI_ERROR_NULL_POINTER, Botan_FFI::ffi_guard_thunk(), and Botan_FFI::ffi_new_object().

◆ botan_mp_is_even()

int botan_mp_is_even ( const botan_mp_t mp)

Definition at line 223 of file ffi_mp.cpp.

223 {
224 return BOTAN_FFI_VISIT(mp, [](const auto& bn) -> int { return bn.is_even(); });
225}

References BOTAN_FFI_VISIT.

◆ botan_mp_is_negative()

int botan_mp_is_negative ( botan_mp_t mp)

Return 1 iff mp is less than 0

Definition at line 64 of file ffi_mp.cpp.

64 {
65 return BOTAN_FFI_VISIT(mp, [](const auto& bn) { return bn.signum() < 0 ? 1 : 0; });
66}

References BOTAN_FFI_VISIT.

◆ botan_mp_is_odd()

int botan_mp_is_odd ( const botan_mp_t mp)

Definition at line 219 of file ffi_mp.cpp.

219 {
220 return BOTAN_FFI_VISIT(mp, [](const auto& bn) -> int { return bn.is_odd(); });
221}

References BOTAN_FFI_VISIT.

◆ botan_mp_is_positive()

int botan_mp_is_positive ( botan_mp_t mp)

This function should have been named mp_is_non_negative. Returns 1 iff mp is greater than or equal to zero. Use botan_mp_is_negative to detect negative numbers, botan_mp_is_zero to check for zero.

Definition at line 68 of file ffi_mp.cpp.

68 {
69 return BOTAN_FFI_VISIT(mp, [](const auto& bn) { return bn.signum() >= 0 ? 1 : 0; });
70}

References BOTAN_FFI_VISIT.

◆ botan_mp_is_prime()

int botan_mp_is_prime ( botan_mp_t n,
botan_rng_t rng,
size_t test_prob )

Returns 0 if n is not prime Returns 1 if n is prime Returns negative number on error

Definition at line 278 of file ffi_mp.cpp.

278 {
279 return BOTAN_FFI_VISIT(mp, [=](const auto& n) { return (Botan::is_prime(n, safe_get(rng), test_prob)) ? 1 : 0; });
280}
bool is_prime(const BigInt &n, RandomNumberGenerator &rng, size_t prob, bool is_random)
Definition numthry.cpp:381

References BOTAN_FFI_VISIT, Botan::is_prime(), and Botan_FFI::safe_get().

◆ botan_mp_is_zero()

int botan_mp_is_zero ( const botan_mp_t mp)

Definition at line 215 of file ffi_mp.cpp.

215 {
216 return BOTAN_FFI_VISIT(mp, [](const auto& bn) -> int { return bn.is_zero(); });
217}

References BOTAN_FFI_VISIT.

◆ botan_mp_lshift()

int botan_mp_lshift ( botan_mp_t out,
const botan_mp_t in,
size_t shift )

Definition at line 244 of file ffi_mp.cpp.

244 {
245 return BOTAN_FFI_VISIT(out, [=](auto& o) { o = safe_get(in) << shift; });
246}

References BOTAN_FFI_VISIT, and Botan_FFI::safe_get().

◆ botan_mp_mod_inverse()

int botan_mp_mod_inverse ( botan_mp_t out,
const botan_mp_t in,
const botan_mp_t modulus )

Definition at line 252 of file ffi_mp.cpp.

252 {
253 return BOTAN_FFI_VISIT(out, [=](auto& o) {
255 });
256}
static BigInt zero()
Definition bigint.h:50
std::optional< BigInt > inverse_mod_general(const BigInt &x, const BigInt &mod)
Definition mod_inv.cpp:179

References BOTAN_FFI_VISIT, Botan::inverse_mod_general(), Botan_FFI::safe_get(), and Botan::BigInt::zero().

◆ botan_mp_mod_mul()

int botan_mp_mod_mul ( botan_mp_t out,
const botan_mp_t x,
const botan_mp_t y,
const botan_mp_t modulus )

Definition at line 258 of file ffi_mp.cpp.

258 {
259 return BOTAN_FFI_VISIT(out, [=](auto& o) {
261 o = reducer.multiply(safe_get(x), safe_get(y));
262 });
263}
static Barrett_Reduction for_secret_modulus(const BigInt &m)
Definition barrett.cpp:23

References BOTAN_FFI_VISIT, Botan::Barrett_Reduction::for_secret_modulus(), and Botan_FFI::safe_get().

◆ botan_mp_mul()

int botan_mp_mul ( botan_mp_t result,
const botan_mp_t x,
const botan_mp_t y )

Definition at line 193 of file ffi_mp.cpp.

193 {
194 return BOTAN_FFI_VISIT(result, [=](auto& res) {
195 if(result == x) {
196 res *= safe_get(y);
197 } else {
198 res = safe_get(x) * safe_get(y);
199 }
200 });
201}

References BOTAN_FFI_VISIT, and Botan_FFI::safe_get().

◆ botan_mp_num_bits()

int botan_mp_num_bits ( botan_mp_t n,
size_t * bits )

Return the number of significant bits in the MPI

Definition at line 294 of file ffi_mp.cpp.

294 {
295 if(bits == nullptr) {
297 }
298 return BOTAN_FFI_VISIT(mp, [=](const auto& n) { *bits = n.bits(); });
299}

References BOTAN_FFI_ERROR_NULL_POINTER, and BOTAN_FFI_VISIT.

◆ botan_mp_num_bytes()

int botan_mp_num_bytes ( botan_mp_t n,
size_t * bytes )

Return the number of significant bytes in the MPI

Definition at line 301 of file ffi_mp.cpp.

301 {
302 if(bytes == nullptr) {
304 }
305 return BOTAN_FFI_VISIT(mp, [=](const auto& n) { *bytes = n.bytes(); });
306}

References BOTAN_FFI_ERROR_NULL_POINTER, and BOTAN_FFI_VISIT.

◆ botan_mp_powmod()

int botan_mp_powmod ( botan_mp_t out,
const botan_mp_t base,
const botan_mp_t exponent,
const botan_mp_t modulus )

Definition at line 239 of file ffi_mp.cpp.

239 {
240 return BOTAN_FFI_VISIT(
241 out, [=](auto& o) { o = Botan::power_mod(safe_get(base), safe_get(exponent), safe_get(modulus)); });
242}
BigInt power_mod(const BigInt &base, const BigInt &exp, const BigInt &mod)
Definition numthry.cpp:310

References BOTAN_FFI_VISIT, Botan::power_mod(), and Botan_FFI::safe_get().

◆ botan_mp_rand_bits()

int botan_mp_rand_bits ( botan_mp_t rand_out,
botan_rng_t rng,
size_t bits )

Definition at line 265 of file ffi_mp.cpp.

265 {
266 return BOTAN_FFI_VISIT(rng, [=](auto& r) { safe_get(rand_out).randomize(r, bits); });
267}

References BOTAN_FFI_VISIT, and Botan_FFI::safe_get().

◆ botan_mp_rand_range()

int botan_mp_rand_range ( botan_mp_t rand_out,
botan_rng_t rng,
const botan_mp_t lower,
const botan_mp_t upper )

Definition at line 269 of file ffi_mp.cpp.

269 {
270 return BOTAN_FFI_VISIT(
271 rng, [=](auto& r) { safe_get(rand_out) = Botan::BigInt::random_integer(r, safe_get(lower), safe_get(upper)); });
272}
static BigInt random_integer(RandomNumberGenerator &rng, const BigInt &min, const BigInt &max)
Definition big_rand.cpp:44

References BOTAN_FFI_VISIT, Botan::BigInt::random_integer(), and Botan_FFI::safe_get().

◆ botan_mp_rshift()

int botan_mp_rshift ( botan_mp_t out,
const botan_mp_t in,
size_t shift )

Definition at line 248 of file ffi_mp.cpp.

248 {
249 return BOTAN_FFI_VISIT(out, [=](auto& o) { o = safe_get(in) >> shift; });
250}

References BOTAN_FFI_VISIT, and Botan_FFI::safe_get().

◆ botan_mp_set_bit()

int botan_mp_set_bit ( botan_mp_t n,
size_t bit )

Set the specified bit

Definition at line 286 of file ffi_mp.cpp.

286 {
287 return BOTAN_FFI_VISIT(mp, [=](auto& n) { n.set_bit(bit); });
288}

References BOTAN_FFI_VISIT.

◆ botan_mp_set_from_int()

int botan_mp_set_from_int ( botan_mp_t mp,
int initial_value )

Set the MPI value from an int

Definition at line 39 of file ffi_mp.cpp.

39 {
40 return BOTAN_FFI_VISIT(mp, [=](auto& bn) { bn = Botan::BigInt::from_s32(initial_value); });
41}
static BigInt from_s32(int32_t n)
Definition bigint.cpp:42

References BOTAN_FFI_VISIT, and Botan::BigInt::from_s32().

◆ botan_mp_set_from_mp()

int botan_mp_set_from_mp ( botan_mp_t dest,
botan_mp_t source )

Set the MPI value from another MP object

Definition at line 60 of file ffi_mp.cpp.

60 {
61 return BOTAN_FFI_VISIT(dest, [=](auto& bn) { bn = safe_get(source); });
62}

References BOTAN_FFI_VISIT, and Botan_FFI::safe_get().

◆ botan_mp_set_from_radix_str()

int botan_mp_set_from_radix_str ( botan_mp_t dest,
const char * str,
size_t radix )

Set the MPI value from a string with arbitrary radix. For arbitrary being 10 or 16.

Definition at line 47 of file ffi_mp.cpp.

47 {
48 return BOTAN_FFI_VISIT(mp, [=](auto& bn) {
49 if(radix != 10 && radix != 16) {
51 }
52
53 bn = Botan::BigInt::from_radix_digits(std::string_view(str), radix);
54 return BOTAN_FFI_SUCCESS;
55 });
56}
static BigInt from_radix_digits(std::string_view digits, size_t radix)
Definition big_code.cpp:125
@ BOTAN_FFI_ERROR_NOT_IMPLEMENTED
Definition ffi.h:140
@ BOTAN_FFI_SUCCESS
Definition ffi.h:116

References BOTAN_FFI_ERROR_NOT_IMPLEMENTED, BOTAN_FFI_SUCCESS, BOTAN_FFI_VISIT, and Botan::BigInt::from_radix_digits().

◆ botan_mp_set_from_str()

int botan_mp_set_from_str ( botan_mp_t dest,
const char * str )

Set the MPI value from a string

Definition at line 43 of file ffi_mp.cpp.

43 {
44 return BOTAN_FFI_VISIT(mp, [=](auto& bn) { bn = Botan::BigInt(str); });
45}

References BOTAN_FFI_VISIT.

◆ botan_mp_sub()

int botan_mp_sub ( botan_mp_t result,
const botan_mp_t x,
const botan_mp_t y )

Definition at line 163 of file ffi_mp.cpp.

163 {
164 return BOTAN_FFI_VISIT(result, [=](auto& res) {
165 if(result == x) {
166 res -= safe_get(y);
167 } else {
168 res = safe_get(x) - safe_get(y);
169 }
170 });
171}

References BOTAN_FFI_VISIT, and Botan_FFI::safe_get().

◆ botan_mp_sub_u32()

int botan_mp_sub_u32 ( botan_mp_t result,
const botan_mp_t x,
uint32_t y )

Definition at line 183 of file ffi_mp.cpp.

183 {
184 return BOTAN_FFI_VISIT(result, [=](auto& res) {
185 if(result == x) {
186 res -= static_cast<Botan::word>(y);
187 } else {
188 res = safe_get(x) - static_cast<Botan::word>(y);
189 }
190 });
191}

References BOTAN_FFI_VISIT, and Botan_FFI::safe_get().

◆ botan_mp_swap()

int botan_mp_swap ( botan_mp_t x_w,
botan_mp_t y_w )

Definition at line 234 of file ffi_mp.cpp.

234 {
235 return BOTAN_FFI_VISIT(x_w, [=](auto& x) { x.swap(safe_get(y_w)); });
236}

References BOTAN_FFI_VISIT, and Botan_FFI::safe_get().

◆ botan_mp_to_bin()

int botan_mp_to_bin ( const botan_mp_t mp,
uint8_t vec[] )

Definition at line 128 of file ffi_mp.cpp.

128 {
129 if(vec == nullptr) {
131 }
132 return BOTAN_FFI_VISIT(mp, [=](const auto& bn) { bn.serialize_to(std::span{vec, bn.bytes()}); });
133}

References BOTAN_FFI_ERROR_NULL_POINTER, and BOTAN_FFI_VISIT.

◆ botan_mp_to_hex()

int botan_mp_to_hex ( botan_mp_t mp,
char * out )

Convert the MPI to a hex string. Writes up to botan_mp_num_bytes(mp)*2 + 5 bytes

Prefer botan_mp_view_hex

Definition at line 83 of file ffi_mp.cpp.

83 {
84 if(out == nullptr) {
86 }
87 return BOTAN_FFI_VISIT(mp, [=](const auto& bn) {
88 const std::string hex = bn.to_hex_string();
89
90 // Check that we are about to write no more than the documented upper bound
91 const size_t upper_bound = 2 * bn.bytes() + 5;
92 BOTAN_ASSERT_NOMSG(hex.size() + 1 <= upper_bound);
93 std::memcpy(out, hex.c_str(), 1 + hex.size());
94 });
95}
#define BOTAN_ASSERT_NOMSG(expr)
Definition assert.h:75

References BOTAN_ASSERT_NOMSG, BOTAN_FFI_ERROR_NULL_POINTER, and BOTAN_FFI_VISIT.

◆ botan_mp_to_str()

int botan_mp_to_str ( botan_mp_t mp,
uint8_t radix,
char * out,
size_t * out_len )

Convert the MPI to a string. Currently radix == 10 and radix == 16 are supported.

Definition at line 104 of file ffi_mp.cpp.

104 {
105 return BOTAN_FFI_VISIT(mp, [=](const auto& bn) -> int {
106 if(radix == 0 || radix == 10) {
107 return write_str_output(out, out_len, bn.to_dec_string());
108 } else if(radix == 16) {
109 return write_str_output(out, out_len, bn.to_hex_string());
110 } else {
112 }
113 });
114}
@ BOTAN_FFI_ERROR_BAD_PARAMETER
Definition ffi.h:134
int write_str_output(char out[], size_t *out_len, const std::string &str)
Definition ffi_util.h:268

References BOTAN_FFI_ERROR_BAD_PARAMETER, BOTAN_FFI_VISIT, and Botan_FFI::write_str_output().

◆ botan_mp_to_uint32()

int botan_mp_to_uint32 ( const botan_mp_t mp,
uint32_t * val )

Definition at line 142 of file ffi_mp.cpp.

142 {
143 if(val == nullptr) {
145 }
146 return BOTAN_FFI_VISIT(mp, [=](const auto& bn) { *val = bn.to_u32bit(); });
147}

References BOTAN_FFI_ERROR_NULL_POINTER, and BOTAN_FFI_VISIT.

◆ botan_mp_view_bin()

int botan_mp_view_bin ( const botan_mp_t mp,
botan_view_ctx ctx,
botan_view_bin_fn view )

Definition at line 135 of file ffi_mp.cpp.

135 {
136 return BOTAN_FFI_VISIT(mp, [=](const auto& bn) {
137 const auto bytes = bn.serialize();
138 return invoke_view_callback(view, ctx, bytes);
139 });
140}
int invoke_view_callback(botan_view_bin_fn view, botan_view_ctx ctx, std::span< const uint8_t > buf)
Definition ffi_util.h:190

References BOTAN_FFI_VISIT, and Botan_FFI::invoke_view_callback().

◆ botan_mp_view_hex()

int botan_mp_view_hex ( botan_mp_t mp,
botan_view_ctx ctx,
botan_view_str_fn view )

View the hex string encoding of the MPI.

Definition at line 97 of file ffi_mp.cpp.

97 {
98 return BOTAN_FFI_VISIT(mp, [=](const auto& bn) -> int {
99 const std::string hex = bn.to_hex_string();
100 return invoke_view_callback(view, ctx, hex);
101 });
102}

References BOTAN_FFI_VISIT, and Botan_FFI::invoke_view_callback().

◆ botan_mp_view_str()

int botan_mp_view_str ( botan_mp_t mp,
uint8_t radix,
botan_view_ctx ctx,
botan_view_str_fn view )

View the MPI as a radix-N integer. Currently only radix 10 and radix 16 are supported

Definition at line 116 of file ffi_mp.cpp.

116 {
117 return BOTAN_FFI_VISIT(mp, [=](const auto& bn) -> int {
118 if(radix == 10) {
119 return invoke_view_callback(view, ctx, bn.to_dec_string());
120 } else if(radix == 16) {
121 return invoke_view_callback(view, ctx, bn.to_hex_string());
122 } else {
124 }
125 });
126}

References BOTAN_FFI_ERROR_BAD_PARAMETER, BOTAN_FFI_VISIT, and Botan_FFI::invoke_view_callback().