mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-05-27 18:29:26 +00:00
Updates the libsecp256k1 dependency to commit: c0d9480fbbf8eccbd4be23ed27f6f2af6f3b211e PR: ``` BenchmarkSign-24 57756 21214 ns/op 164 B/op 3 allocs/op BenchmarkRecover-24 37156 33044 ns/op 80 B/op 1 allocs/op BenchmarkEcrecoverSignature-24 36889 32935 ns/op 80 B/op 1 allocs/op BenchmarkVerifySignature-24 41163 29207 ns/op 0 B/op 0 allocs/op BenchmarkDecompressPubkey-24 318624 4062 ns/op 304 B/op 6 allocs/op ``` Master: ``` BenchmarkSign-24 34509 35330 ns/op 164 B/op 3 allocs/op BenchmarkRecover-24 25418 47725 ns/op 80 B/op 1 allocs/op BenchmarkEcrecoverSignature-24 25735 47591 ns/op 80 B/op 1 allocs/op BenchmarkVerifySignature-24 29108 41097 ns/op 0 B/op 0 allocs/op BenchmarkDecompressPubkey-24 294747 4143 ns/op 304 B/op 6 allocs/op ``` Performance seems to be improved significantly: ``` Sign-24 34.86µ ± 3% 21.66µ ± 2% -37.86% (p=0.000 n=10) Recover-24 46.14µ ± 3% 33.24µ ± 2% -27.95% (p=0.000 n=10) ```
44 lines
2.2 KiB
C
44 lines
2.2 KiB
C
/***********************************************************************
|
|
* Copyright (c) 2017 Andrew Poelstra *
|
|
* Distributed under the MIT software license, see the accompanying *
|
|
* file COPYING or https://www.opensource.org/licenses/mit-license.php.*
|
|
***********************************************************************/
|
|
|
|
#ifndef SECP256K1_SCRATCH_H
|
|
#define SECP256K1_SCRATCH_H
|
|
|
|
/* The typedef is used internally; the struct name is used in the public API
|
|
* (where it is exposed as a different typedef) */
|
|
typedef struct secp256k1_scratch_space_struct {
|
|
/** guard against interpreting this object as other types */
|
|
unsigned char magic[8];
|
|
/** actual allocated data */
|
|
void *data;
|
|
/** amount that has been allocated (i.e. `data + offset` is the next
|
|
* available pointer) */
|
|
size_t alloc_size;
|
|
/** maximum size available to allocate */
|
|
size_t max_size;
|
|
} secp256k1_scratch;
|
|
|
|
typedef struct secp256k1_scratch_space_struct secp256k1_scratch_space;
|
|
|
|
static secp256k1_scratch* secp256k1_scratch_create(const secp256k1_callback* error_callback, size_t max_size);
|
|
|
|
static void secp256k1_scratch_destroy(const secp256k1_callback* error_callback, secp256k1_scratch* scratch);
|
|
|
|
/** Returns an opaque object used to "checkpoint" a scratch space. Used
|
|
* with `secp256k1_scratch_apply_checkpoint` to undo allocations. */
|
|
static size_t secp256k1_scratch_checkpoint(const secp256k1_callback* error_callback, const secp256k1_scratch* scratch);
|
|
|
|
/** Applies a check point received from `secp256k1_scratch_checkpoint`,
|
|
* undoing all allocations since that point. */
|
|
static void secp256k1_scratch_apply_checkpoint(const secp256k1_callback* error_callback, secp256k1_scratch* scratch, size_t checkpoint);
|
|
|
|
/** Returns the maximum allocation the scratch space will allow */
|
|
static size_t secp256k1_scratch_max_allocation(const secp256k1_callback* error_callback, const secp256k1_scratch* scratch, size_t n_objects);
|
|
|
|
/** Returns a pointer into the most recently allocated frame, or NULL if there is insufficient available space */
|
|
static void *secp256k1_scratch_alloc(const secp256k1_callback* error_callback, secp256k1_scratch* scratch, size_t n);
|
|
|
|
#endif
|