github.com/luckypickle/go-ethereum-vet@v1.14.2/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      vet_secp256k1_ge_storage (*pre_g)[];    /* odd multiples of the generator */
    16  #ifdef USE_ENDOMORPHISM
    17      vet_secp256k1_ge_storage (*pre_g_128)[]; /* odd multiples of 2^128*generator */
    18  #endif
    19  } vet_secp256k1_ecmult_context;
    20  
    21  static void vet_secp256k1_ecmult_context_init(vet_secp256k1_ecmult_context *ctx);
    22  static void vet_secp256k1_ecmult_context_build(vet_secp256k1_ecmult_context *ctx, const vet_secp256k1_callback *cb);
    23  static void vet_secp256k1_ecmult_context_clone(vet_secp256k1_ecmult_context *dst,
    24                                             const vet_secp256k1_ecmult_context *src, const vet_secp256k1_callback *cb);
    25  static void vet_secp256k1_ecmult_context_clear(vet_secp256k1_ecmult_context *ctx);
    26  static int vet_secp256k1_ecmult_context_is_built(const vet_secp256k1_ecmult_context *ctx);
    27  
    28  /** Double multiply: R = na*A + ng*G */
    29  static void vet_secp256k1_ecmult(const vet_secp256k1_ecmult_context *ctx, vet_secp256k1_gej *r, const vet_secp256k1_gej *a, const vet_secp256k1_scalar *na, const vet_secp256k1_scalar *ng);
    30  
    31  #endif