@@ -49,6 +49,19 @@ extern "C" {
49
49
*/
50
50
typedef struct secp256k1_context_struct secp256k1_context ;
51
51
52
+ /** Opaque data structure that holds rewritable "scratch space"
53
+ *
54
+ * The purpose of this structure is to replace dynamic memory allocations,
55
+ * because we target architectures where this may not be available. It is
56
+ * essentially a resizable (within specified parameters) block of bytes,
57
+ * which is initially created either by memory allocation or TODO as a pointer
58
+ * into some fixed rewritable space.
59
+ *
60
+ * Unlike the context object, this cannot safely be shared between threads
61
+ * without additional synchronization logic.
62
+ */
63
+ typedef struct secp256k1_scratch_space_struct secp256k1_scratch_space ;
64
+
52
65
/** Opaque data structure that holds a parsed and valid public key.
53
66
*
54
67
* The exact representation of data inside is implementation defined and not
@@ -372,6 +385,29 @@ SECP256K1_API void secp256k1_context_set_error_callback(
372
385
const void * data
373
386
) SECP256K1_ARG_NONNULL (1 );
374
387
388
+ /** Create a secp256k1 scratch space object.
389
+ *
390
+ * Returns: a newly created scratch space.
391
+ * Args: ctx: an existing context object.
392
+ * In: size: amount of memory to be available as scratch space. Some extra
393
+ * (<100 bytes) will be allocated for extra accounting.
394
+ */
395
+ SECP256K1_API SECP256K1_WARN_UNUSED_RESULT secp256k1_scratch_space * secp256k1_scratch_space_create (
396
+ const secp256k1_context * ctx ,
397
+ size_t size
398
+ ) SECP256K1_ARG_NONNULL (1 );
399
+
400
+ /** Destroy a secp256k1 scratch space.
401
+ *
402
+ * The pointer may not be used afterwards.
403
+ * Args: ctx: a secp256k1 context object.
404
+ * scratch: space to destroy
405
+ */
406
+ SECP256K1_API void secp256k1_scratch_space_destroy (
407
+ const secp256k1_context * ctx ,
408
+ secp256k1_scratch_space * scratch
409
+ ) SECP256K1_ARG_NONNULL (1 );
410
+
375
411
/** Parse a variable-length public key into the pubkey object.
376
412
*
377
413
* Returns: 1 if the public key was fully valid.
0 commit comments