7#ifndef SECP256K1_ECMULT_GEN_IMPL_H 
    8#define SECP256K1_ECMULT_GEN_IMPL_H 
   63    uint32_t recoded[(
COMB_BITS + 31) >> 5] = {0};
 
   66    memset(&adds, 0, 
sizeof(adds));
 
  112    for (i = 0; i < 8 && i < ((
COMB_BITS + 31) >> 5); ++i) {
 
  195        uint32_t bit_pos = comb_off;
 
  200            uint32_t bits = 0, 
sign, abs, index, tooth;
 
  209            for (tooth = 0; tooth < 
COMB_TEETH; ++tooth) {
 
  222                uint32_t 
volatile vmask = ~(1 << tooth);
 
  226                bits ^= bitdata << tooth;
 
  269        if (comb_off-- == 0) 
break;
 
  290    unsigned char nonce32[32];
 
  292    unsigned char keydata[64];
 
  297    if (seed32 == NULL) {
 
  311    memcpy(keydata + 32, seed32, 32);
 
static void secp256k1_ecmult_gen_context_clear(secp256k1_ecmult_gen_context *ctx)
 
static void secp256k1_ecmult_gen_context_build(secp256k1_ecmult_gen_context *ctx)
 
static void secp256k1_ecmult_gen(const secp256k1_ecmult_gen_context *ctx, secp256k1_gej *r, const secp256k1_scalar *gn)
 
static void secp256k1_ecmult_gen_blind(secp256k1_ecmult_gen_context *ctx, const unsigned char *seed32)
 
static int secp256k1_ecmult_gen_context_is_built(const secp256k1_ecmult_gen_context *ctx)
 
static void secp256k1_ecmult_gen_scalar_diff(secp256k1_scalar *diff)
 
#define secp256k1_fe_cmov
 
#define secp256k1_fe_negate(r, a, m)
Negate a field element.
 
static void secp256k1_fe_clear(secp256k1_fe *a)
Clear a field element to prevent leaking sensitive information.
 
static const secp256k1_fe secp256k1_fe_one
 
#define secp256k1_fe_set_b32_mod
 
#define secp256k1_fe_normalizes_to_zero
 
static void secp256k1_gej_clear(secp256k1_gej *r)
Clear a secp256k1_gej to prevent leaking sensitive information.
 
static void secp256k1_ge_clear(secp256k1_ge *r)
Clear a secp256k1_ge to prevent leaking sensitive information.
 
static void secp256k1_gej_add_ge(secp256k1_gej *r, const secp256k1_gej *a, const secp256k1_ge *b)
Set r equal to the sum of a and b (with b given in affine coordinates, and not infinity).
 
static void secp256k1_ge_from_storage(secp256k1_ge *r, const secp256k1_ge_storage *a)
Convert a group element back from the storage type.
 
static void secp256k1_gej_rescale(secp256k1_gej *r, const secp256k1_fe *b)
Rescale a jacobian point by b which must be non-zero.
 
static void secp256k1_ge_storage_cmov(secp256k1_ge_storage *r, const secp256k1_ge_storage *a, int flag)
If flag is true, set *r equal to *a; otherwise leave it.
 
static void secp256k1_ge_set_gej(secp256k1_ge *r, secp256k1_gej *a)
Set a group element equal to another which is given in jacobian coordinates.
 
static void secp256k1_ge_neg(secp256k1_ge *r, const secp256k1_ge *a)
Set r equal to the inverse of a (i.e., mirrored around the X axis)
 
static void secp256k1_gej_double(secp256k1_gej *r, const secp256k1_gej *a)
Set r equal to the double of a.
 
static void secp256k1_gej_set_ge(secp256k1_gej *r, const secp256k1_ge *a)
Set a group element (jacobian) equal to another which is given in affine coordinates.
 
static const secp256k1_ge secp256k1_ge_const_g
 
static int sign(const secp256k1_context *ctx, struct signer_secrets *signer_secrets, struct signer *signer, const secp256k1_musig_keyagg_cache *cache, const unsigned char *msg32, unsigned char *sig64)
 
const secp256k1_ge_storage secp256k1_ecmult_gen_prec_table[COMB_BLOCKS][COMB_POINTS]
 
static void secp256k1_scalar_cmov(secp256k1_scalar *r, const secp256k1_scalar *a, int flag)
If flag is true, set *r equal to *a; otherwise leave it.
 
static void secp256k1_scalar_half(secp256k1_scalar *r, const secp256k1_scalar *a)
Multiply a scalar with the multiplicative inverse of 2.
 
static void secp256k1_scalar_set_b32(secp256k1_scalar *r, const unsigned char *bin, int *overflow)
Set a scalar from a big endian byte array.
 
static int secp256k1_scalar_is_zero(const secp256k1_scalar *a)
Check whether a scalar equals zero.
 
static void secp256k1_scalar_get_b32(unsigned char *bin, const secp256k1_scalar *a)
Convert a scalar to a byte array.
 
static int secp256k1_scalar_add(secp256k1_scalar *r, const secp256k1_scalar *a, const secp256k1_scalar *b)
Add two scalars together (modulo the group order).
 
static uint32_t secp256k1_scalar_get_bits_limb32(const secp256k1_scalar *a, unsigned int offset, unsigned int count)
Access bits (1 < count <= 32) from a scalar.
 
static void secp256k1_scalar_negate(secp256k1_scalar *r, const secp256k1_scalar *a)
Compute the complement of a scalar (modulo the group order).
 
static void secp256k1_scalar_clear(secp256k1_scalar *r)
Clear a scalar to prevent the leak of sensitive data.
 
static const secp256k1_scalar secp256k1_scalar_one
 
static void secp256k1_rfc6979_hmac_sha256_generate(secp256k1_rfc6979_hmac_sha256 *rng, unsigned char *out, size_t outlen)
 
static void secp256k1_rfc6979_hmac_sha256_clear(secp256k1_rfc6979_hmac_sha256 *rng)
 
static void secp256k1_rfc6979_hmac_sha256_initialize(secp256k1_rfc6979_hmac_sha256 *rng, const unsigned char *key, size_t keylen)
 
static void secp256k1_rfc6979_hmac_sha256_finalize(secp256k1_rfc6979_hmac_sha256 *rng)
 
static SECP256K1_INLINE void secp256k1_memclear_explicit(void *ptr, size_t len)
 
static SECP256K1_INLINE uint32_t secp256k1_rotr32(const uint32_t x, const unsigned int by)
 
#define VERIFY_CHECK(cond)
 
secp256k1_scalar scalar_offset
 
This field implementation represents the value as 10 uint32_t limbs in base 2^26.
 
A group element in affine coordinates on the secp256k1 curve, or occasionally on an isomorphic curve ...
 
A group element of the secp256k1 curve, in jacobian coordinates.
 
A scalar modulo the group order of the secp256k1 curve.