@@ -49,6 +49,19 @@ extern "C" {
4949 */
5050typedef struct secp256k1_context_struct secp256k1_context ;
5151
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+
5265/** Opaque data structure that holds a parsed and valid public key.
5366 *
5467 * The exact representation of data inside is implementation defined and not
@@ -372,6 +385,29 @@ SECP256K1_API void secp256k1_context_set_error_callback(
372385 const void * data
373386) SECP256K1_ARG_NONNULL (1 );
374387
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+
375411/** Parse a variable-length public key into the pubkey object.
376412 *
377413 * Returns: 1 if the public key was fully valid.
0 commit comments