Dash Core Source Documentation (0.16.0.1)

Find detailed information regarding the Dash Core source code.

scalar.h File Reference
#include "num.h"
+ Include dependency graph for scalar.h:
+ This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Functions

static void secp256k1_scalar_clear (secp256k1_scalar *r)
 Clear a scalar to prevent the leak of sensitive data. More...
 
static unsigned int secp256k1_scalar_get_bits (const secp256k1_scalar *a, unsigned int offset, unsigned int count)
 Access bits from a scalar. More...
 
static unsigned int secp256k1_scalar_get_bits_var (const secp256k1_scalar *a, unsigned int offset, unsigned int count)
 Access bits from a scalar. More...
 
static void secp256k1_scalar_set_b32 (secp256k1_scalar *r, const unsigned char *bin, int *overflow)
 Set a scalar from a big endian byte array. More...
 
static void secp256k1_scalar_set_int (secp256k1_scalar *r, unsigned int v)
 Set a scalar to an unsigned integer. More...
 
static void secp256k1_scalar_get_b32 (unsigned char *bin, const secp256k1_scalar *a)
 Convert a scalar to a byte array. More...
 
static int secp256k1_scalar_add (secp256k1_scalar *r, const secp256k1_scalar *a, const secp256k1_scalar *b)
 Add two scalars together (modulo the group order). More...
 
static void secp256k1_scalar_cadd_bit (secp256k1_scalar *r, unsigned int bit, int flag)
 Conditionally add a power of two to a scalar. More...
 
static void secp256k1_scalar_mul (secp256k1_scalar *r, const secp256k1_scalar *a, const secp256k1_scalar *b)
 Multiply two scalars (modulo the group order). More...
 
static int secp256k1_scalar_shr_int (secp256k1_scalar *r, int n)
 Shift a scalar right by some amount strictly between 0 and 16, returning the low bits that were shifted off. More...
 
static void secp256k1_scalar_sqr (secp256k1_scalar *r, const secp256k1_scalar *a)
 Compute the square of a scalar (modulo the group order). More...
 
static void secp256k1_scalar_inverse (secp256k1_scalar *r, const secp256k1_scalar *a)
 Compute the inverse of a scalar (modulo the group order). More...
 
static void secp256k1_scalar_inverse_var (secp256k1_scalar *r, const secp256k1_scalar *a)
 Compute the inverse of a scalar (modulo the group order), without constant-time guarantee. More...
 
static void secp256k1_scalar_negate (secp256k1_scalar *r, const secp256k1_scalar *a)
 Compute the complement of a scalar (modulo the group order). More...
 
static int secp256k1_scalar_is_zero (const secp256k1_scalar *a)
 Check whether a scalar equals zero. More...
 
static int secp256k1_scalar_is_one (const secp256k1_scalar *a)
 Check whether a scalar equals one. More...
 
static int secp256k1_scalar_is_even (const secp256k1_scalar *a)
 Check whether a scalar, considered as an nonnegative integer, is even. More...
 
static int secp256k1_scalar_is_high (const secp256k1_scalar *a)
 Check whether a scalar is higher than the group order divided by 2. More...
 
static int secp256k1_scalar_cond_negate (secp256k1_scalar *a, int flag)
 Conditionally negate a number, in constant time. More...
 
static void secp256k1_scalar_get_num (secp256k1_num *r, const secp256k1_scalar *a)
 Convert a scalar to a number. More...
 
static void secp256k1_scalar_order_get_num (secp256k1_num *r)
 Get the order of the group as a number. More...
 
static int secp256k1_scalar_eq (const secp256k1_scalar *a, const secp256k1_scalar *b)
 Compare two scalars. More...
 
static void secp256k1_scalar_mul_shift_var (secp256k1_scalar *r, const secp256k1_scalar *a, const secp256k1_scalar *b, unsigned int shift)
 Multiply a and b (without taking the modulus!), divide by 2**shift, and round to the nearest integer. More...
 

Function Documentation

◆ secp256k1_scalar_add()

◆ secp256k1_scalar_cadd_bit()

static void secp256k1_scalar_cadd_bit ( secp256k1_scalar r,
unsigned int  bit,
int  flag 
)
static

Conditionally add a power of two to a scalar.

The result is not allowed to overflow.

Referenced by scalar_test(), secp256k1_wnaf_const(), test_constant_wnaf(), and test_fixed_wnaf().

◆ secp256k1_scalar_clear()

◆ secp256k1_scalar_cond_negate()

static int secp256k1_scalar_cond_negate ( secp256k1_scalar a,
int  flag 
)
static

Conditionally negate a number, in constant time.

Returns -1 if the number was negated, 1 otherwise

Referenced by run_wnaf(), secp256k1_wnaf_const(), test_constant_wnaf_negate(), and test_ecmult_multi().

◆ secp256k1_scalar_eq()

◆ secp256k1_scalar_get_b32()

◆ secp256k1_scalar_get_bits()

static unsigned int secp256k1_scalar_get_bits ( const secp256k1_scalar a,
unsigned int  offset,
unsigned int  count 
)
static

Access bits from a scalar.

All requested bits must belong to the same 32-bit limb.

Referenced by scalar_test(), secp256k1_ecmult_gen(), secp256k1_ecmult_wnaf(), and test_constant_wnaf_negate().

◆ secp256k1_scalar_get_bits_var()

static unsigned int secp256k1_scalar_get_bits_var ( const secp256k1_scalar a,
unsigned int  offset,
unsigned int  count 
)
static

Access bits from a scalar.

Not constant time.

Referenced by scalar_test(), secp256k1_ecmult_wnaf(), and secp256k1_wnaf_fixed().

◆ secp256k1_scalar_get_num()

static void secp256k1_scalar_get_num ( secp256k1_num r,
const secp256k1_scalar a 
)
static

◆ secp256k1_scalar_inverse()

static void secp256k1_scalar_inverse ( secp256k1_scalar r,
const secp256k1_scalar a 
)
static

Compute the inverse of a scalar (modulo the group order).

Referenced by bench_scalar_inverse(), run_scalar_tests(), scalar_test(), secp256k1_ecdsa_sig_sign(), and test_ecdsa_edge_cases().

◆ secp256k1_scalar_inverse_var()

static void secp256k1_scalar_inverse_var ( secp256k1_scalar r,
const secp256k1_scalar a 
)
static

Compute the inverse of a scalar (modulo the group order), without constant-time guarantee.

Referenced by bench_scalar_inverse_var(), run_scalar_tests(), secp256k1_ecdsa_sig_recover(), secp256k1_ecdsa_sig_verify(), and test_ecdsa_edge_cases().

◆ secp256k1_scalar_is_even()

static int secp256k1_scalar_is_even ( const secp256k1_scalar a)
static

Check whether a scalar, considered as an nonnegative integer, is even.

Referenced by secp256k1_wnaf_const(), secp256k1_wnaf_fixed(), and test_constant_wnaf_negate().

◆ secp256k1_scalar_is_high()

static int secp256k1_scalar_is_high ( const secp256k1_scalar a)
static

Check whether a scalar is higher than the group order divided by 2.

Referenced by scalar_test(), secp256k1_ecdsa_sig_sign(), secp256k1_ecdsa_signature_normalize(), secp256k1_ecdsa_verify(), secp256k1_wnaf_const(), and test_exhaustive_verify().

◆ secp256k1_scalar_is_one()

static int secp256k1_scalar_is_one ( const secp256k1_scalar a)
static

Check whether a scalar equals one.

Referenced by run_scalar_tests(), scalar_test(), secp256k1_scalar_inverse_var(), and secp256k1_wnaf_const().

◆ secp256k1_scalar_is_zero()

◆ secp256k1_scalar_mul()

◆ secp256k1_scalar_mul_shift_var()

static void secp256k1_scalar_mul_shift_var ( secp256k1_scalar r,
const secp256k1_scalar a,
const secp256k1_scalar b,
unsigned int  shift 
)
static

Multiply a and b (without taking the modulus!), divide by 2**shift, and round to the nearest integer.

Shift must be at least 256.

Referenced by scalar_test().

◆ secp256k1_scalar_negate()

◆ secp256k1_scalar_order_get_num()

static void secp256k1_scalar_order_get_num ( secp256k1_num r)
static

Get the order of the group as a number.

Referenced by bench_num_jacobi(), run_scalar_tests(), scalar_test(), and test_num_jacobi().

◆ secp256k1_scalar_set_b32()

◆ secp256k1_scalar_set_int()

◆ secp256k1_scalar_shr_int()

static int secp256k1_scalar_shr_int ( secp256k1_scalar r,
int  n 
)
static

Shift a scalar right by some amount strictly between 0 and 16, returning the low bits that were shifted off.

Referenced by scalar_test(), secp256k1_wnaf_const(), test_constant_wnaf(), and test_fixed_wnaf().

◆ secp256k1_scalar_sqr()

static void secp256k1_scalar_sqr ( secp256k1_scalar r,
const secp256k1_scalar a 
)
static

Compute the square of a scalar (modulo the group order).

Referenced by bench_scalar_sqr(), run_scalar_tests(), scalar_test(), and test_num_jacobi().

Released under the MIT license