10#if defined(PURIFY_CBMC_MODEL_SMALL_FIELD)
11 #include "verification/cbmc/model_small_field_constants.h"
12 PURIFY_CBMC_MODEL_FIELD_PRIME_INIT
14 UINT64_C(0xBFD25E8CD0364141),
15 UINT64_C(0xBAAEDCE6AF48A03B),
16 UINT64_C(0xFFFFFFFFFFFFFFFE),
17 UINT64_C(0xFFFFFFFFFFFFFFFF),
22 UINT64_C(1), UINT64_C(0), UINT64_C(0), UINT64_C(0),
50 unsigned char bytes[32];
51 purify_u256_to_bytes_be(bytes, value);
60 unsigned char bytes[32];
62 purify_u256_from_bytes_be(out, bytes,
sizeof(bytes));
128 bits = purify_u256_bit_length(exponent);
129 for (i = bits; i != 0; --i) {
132 if (purify_u256_bit(exponent, idx) != 0) {
140 uint64_t exponent[4];
149 purify_u256_shift_right_one(exponent);
180 while (purify_u256_bit(q, 0) == 0) {
181 purify_u256_shift_right_one(q);
186 uint64_t exponent[4];
187 memcpy(exponent, q,
sizeof(exponent));
188 purify_u256_try_add_small(exponent, 1);
189 purify_u256_shift_right_one(exponent);
205 uint64_t exponent[4];
206 memcpy(exponent, q,
sizeof(exponent));
207 purify_u256_try_add_small(exponent, 1);
208 purify_u256_shift_right_one(exponent);
235 purify_u256_set_u64(b_exp, 1);
236 purify_u256_shifted_left(shifted, b_exp, m - i - 1u);
237 memcpy(b_exp, shifted,
sizeof(b_exp));
int purify_fe_is_square(const purify_fe *value)
int purify_fe_legendre_symbol(const purify_fe *value)
void purify_fe_set_zero(purify_fe *out)
int purify_fe_set_u256(purify_fe *out, const uint64_t value[4])
void purify_fe_inverse(purify_fe *out, const purify_fe *value)
int purify_fe_sqrt(purify_fe *out, const purify_fe *value)
static const uint64_t kPurifyU256One[4]
static const uint64_t kPurifyFieldPrime[4]
int purify_fe_is_zero(const purify_fe *value)
void purify_fe_pow(purify_fe *out, const purify_fe *value, const uint64_t exponent[4])
int purify_fe_is_one(const purify_fe *value)
void purify_fe_inverse_var(purify_fe *out, const purify_fe *value)
void purify_fe_get_b32(unsigned char output32[32], const purify_fe *value)
void purify_fe_mul(purify_fe *out, const purify_fe *lhs, const purify_fe *rhs)
void purify_fe_square(purify_fe *out, const purify_fe *value)
void purify_fe_add(purify_fe *out, const purify_fe *lhs, const purify_fe *rhs)
void purify_fe_sub(purify_fe *out, const purify_fe *lhs, const purify_fe *rhs)
int purify_fe_set_b32(purify_fe *out, const unsigned char input32[32])
void purify_fe_set_i64(purify_fe *out, int64_t value)
void purify_fe_cmov(purify_fe *dst, const purify_fe *src, int flag)
void purify_fe_get_u256(uint64_t out[4], const purify_fe *value)
int purify_fe_eq(const purify_fe *lhs, const purify_fe *rhs)
void purify_fe_set_u64(purify_fe *out, uint64_t value)
int purify_fe_is_odd(const purify_fe *value)
void purify_fe_negate(purify_fe *out, const purify_fe *value)
void purify_scalar_mul(purify_scalar *out, const purify_scalar *lhs, const purify_scalar *rhs)
Multiplies two scalars modulo the backend field.
int purify_scalar_is_zero(const purify_scalar *value)
Returns nonzero when the scalar is zero.
int purify_scalar_add(purify_scalar *out, const purify_scalar *lhs, const purify_scalar *rhs)
Adds two scalars modulo the backend field.
void purify_scalar_set_int(purify_scalar *out, unsigned int value)
Initializes a scalar from an unsigned integer.
void purify_scalar_cmov(purify_scalar *dst, const purify_scalar *src, int flag)
Conditionally assigns src into dst when flag is nonzero.
int purify_scalar_is_even(const purify_scalar *value)
Returns nonzero when the scalar is even.
int purify_scalar_is_one(const purify_scalar *value)
Returns nonzero when the scalar is one.
void purify_scalar_inverse(purify_scalar *out, const purify_scalar *value)
Computes the multiplicative inverse of a scalar in constant time.
void purify_scalar_inverse_var(purify_scalar *out, const purify_scalar *value)
Computes the multiplicative inverse of a scalar.
int purify_scalar_eq(const purify_scalar *lhs, const purify_scalar *rhs)
Returns nonzero when two scalars are equal.
void purify_scalar_negate(purify_scalar *out, const purify_scalar *value)
Computes the additive inverse of a scalar.
void purify_scalar_set_u64(purify_scalar *out, uint64_t value)
Initializes a scalar from a 64-bit unsigned integer.
void purify_scalar_get_b32(unsigned char output32[32], const purify_scalar *value)
Serializes a scalar as 32 big-endian bytes.
void purify_scalar_set_b32(purify_scalar *out, const unsigned char input32[32], int *overflow)
Parses a big-endian 32-byte scalar.