github.com/guiltylotus/go-ethereum@v1.9.7/crypto/secp256k1/libsecp256k1/src/ecmult.h (about)

     1  /**********************************************************************
     2   * Copyright (c) 2013, 2014 Pieter Wuille                             *
     3   * Distributed under the MIT software license, see the accompanying   *
     4   * file COPYING or http://www.opensource.org/licenses/mit-license.php.*
     5   **********************************************************************/
     6  
     7  #ifndef _SECP256K1_ECMULT_
     8  #define _SECP256K1_ECMULT_
     9  
    10  #include "num.h"
    11  #include "group.h"
    12  
    13  typedef struct {
    14      /* For accelerating the computation of a*P + b*G: */
    15      secp256k1_ge_storage (*pre_g)[];    /* odd multiples of the generator */
    16  #ifdef USE_ENDOMORPHISM
    17      secp256k1_ge_storage (*pre_g_128)[]; /* odd multiples of 2^128*generator */
    18  #endif
    19  } secp256k1_ecmult_context;
    20  
    21  static void secp256k1_ecmult_context_init(secp256k1_ecmult_context *ctx);
    22  static void secp256k1_ecmult_context_build(secp256k1_ecmult_context *ctx, const secp256k1_callback *cb);
    23  static void secp256k1_ecmult_context_clone(secp256k1_ecmult_context *dst,
    24                                             const secp256k1_ecmult_context *src, const secp256k1_callback *cb);
    25  static void secp256k1_ecmult_context_clear(secp256k1_ecmult_context *ctx);
    26  static int secp256k1_ecmult_context_is_built(const secp256k1_ecmult_context *ctx);
    27  
    28  /** Double multiply: R = na*A + ng*G */
    29  static void secp256k1_ecmult(const secp256k1_ecmult_context *ctx, secp256k1_gej *r, const secp256k1_gej *a, const secp256k1_scalar *na, const secp256k1_scalar *ng);
    30  
    31  #endif