Bitcoin Core  0.20.99
P2P Digital Currency
Functions
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()

static int secp256k1_scalar_add ( secp256k1_scalar r,
const secp256k1_scalar a,
const secp256k1_scalar b 
)
static

Add two scalars together (modulo the group order).

Returns whether it overflowed.

Here is the caller graph for this function:

◆ 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.

Here is the caller graph for this function:

◆ secp256k1_scalar_clear()

static void secp256k1_scalar_clear ( secp256k1_scalar r)
static

Clear a scalar to prevent the leak of sensitive data.

Here is the caller graph for this function:

◆ 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

Here is the caller graph for this function:

◆ secp256k1_scalar_eq()

static int secp256k1_scalar_eq ( const secp256k1_scalar a,
const secp256k1_scalar b 
)
static

Compare two scalars.

Here is the caller graph for this function:

◆ secp256k1_scalar_get_b32()

static void secp256k1_scalar_get_b32 ( unsigned char *  bin,
const secp256k1_scalar a 
)
static

Convert a scalar to a byte array.

Here is the caller graph for this function:

◆ 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.

Here is the caller graph for this function:

◆ 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.

Here is the caller graph for this function:

◆ secp256k1_scalar_get_num()

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

Convert a scalar to a number.

Here is the caller graph for this function:

◆ 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).

Here is the caller graph for this function:

◆ 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.

Here is the caller graph for this function:

◆ 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.

Here is the caller graph for this function:

◆ 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.

Here is the caller graph for this function:

◆ secp256k1_scalar_is_one()

static int secp256k1_scalar_is_one ( const secp256k1_scalar a)
static

Check whether a scalar equals one.

Here is the caller graph for this function:

◆ secp256k1_scalar_is_zero()

static int secp256k1_scalar_is_zero ( const secp256k1_scalar a)
static

Check whether a scalar equals zero.

Here is the caller graph for this function:

◆ secp256k1_scalar_mul()

static void secp256k1_scalar_mul ( secp256k1_scalar r,
const secp256k1_scalar a,
const secp256k1_scalar b 
)
static

Multiply two scalars (modulo the group order).

Here is the caller graph for this function:

◆ 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.

Here is the caller graph for this function:

◆ secp256k1_scalar_negate()

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

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

Here is the caller graph for this function:

◆ 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.

Here is the caller graph for this function:

◆ secp256k1_scalar_set_b32()

static void secp256k1_scalar_set_b32 ( secp256k1_scalar r,
const unsigned char *  bin,
int *  overflow 
)
static

Set a scalar from a big endian byte array.

Here is the caller graph for this function:

◆ secp256k1_scalar_set_int()

static void secp256k1_scalar_set_int ( secp256k1_scalar r,
unsigned int  v 
)
static

Set a scalar to an unsigned integer.

Here is the caller graph for this function:

◆ 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.

Here is the caller graph for this function:

◆ 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).

Here is the caller graph for this function: