| 
									
										
										
										
											2020-05-12 13:58:47 +00:00
										 |  |  | #ifndef SECP256K1_EXTRAKEYS_H
 | 
					
						
							|  |  |  | #define SECP256K1_EXTRAKEYS_H
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include "secp256k1.h"
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #ifdef __cplusplus
 | 
					
						
							|  |  |  | extern "C" { | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-12 14:40:28 +00:00
										 |  |  | /** Opaque data structure that holds a parsed and valid "x-only" public key.
 | 
					
						
							|  |  |  |  *  An x-only pubkey encodes a point whose Y coordinate is even. It is | 
					
						
							|  |  |  |  *  serialized using only its X coordinate (32 bytes). See BIP-340 for more | 
					
						
							|  |  |  |  *  information about x-only pubkeys. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  *  The exact representation of data inside is implementation defined and not | 
					
						
							|  |  |  |  *  guaranteed to be portable between different platforms or versions. It is | 
					
						
							|  |  |  |  *  however guaranteed to be 64 bytes in size, and can be safely copied/moved. | 
					
						
							| 
									
										
										
										
											2020-11-30 18:42:32 +00:00
										 |  |  |  *  If you need to convert to a format suitable for storage, transmission, use | 
					
						
							|  |  |  |  *  use secp256k1_xonly_pubkey_serialize and secp256k1_xonly_pubkey_parse. To | 
					
						
							|  |  |  |  *  compare keys, use secp256k1_xonly_pubkey_cmp. | 
					
						
							| 
									
										
										
										
											2020-05-12 14:40:28 +00:00
										 |  |  |  */ | 
					
						
							|  |  |  | typedef struct { | 
					
						
							|  |  |  |     unsigned char data[64]; | 
					
						
							|  |  |  | } secp256k1_xonly_pubkey; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-12 14:52:34 +00:00
										 |  |  | /** Opaque data structure that holds a keypair consisting of a secret and a
 | 
					
						
							|  |  |  |  *  public key. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  *  The exact representation of data inside is implementation defined and not | 
					
						
							|  |  |  |  *  guaranteed to be portable between different platforms or versions. It is | 
					
						
							|  |  |  |  *  however guaranteed to be 96 bytes in size, and can be safely copied/moved. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | typedef struct { | 
					
						
							|  |  |  |     unsigned char data[96]; | 
					
						
							|  |  |  | } secp256k1_keypair; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-12 14:40:28 +00:00
										 |  |  | /** Parse a 32-byte sequence into a xonly_pubkey object.
 | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  *  Returns: 1 if the public key was fully valid. | 
					
						
							|  |  |  |  *           0 if the public key could not be parsed or is invalid. | 
					
						
							|  |  |  |  * | 
					
						
							| 
									
										
										
										
											2020-07-30 12:25:59 +03:00
										 |  |  |  *  Args:   ctx: a secp256k1 context object. | 
					
						
							| 
									
										
										
										
											2020-05-12 14:40:28 +00:00
										 |  |  |  *  Out: pubkey: pointer to a pubkey object. If 1 is returned, it is set to a | 
					
						
							|  |  |  |  *               parsed version of input. If not, it's set to an invalid value. | 
					
						
							| 
									
										
										
										
											2020-07-30 12:25:59 +03:00
										 |  |  |  *  In: input32: pointer to a serialized xonly_pubkey. | 
					
						
							| 
									
										
										
										
											2020-05-12 14:40:28 +00:00
										 |  |  |  */ | 
					
						
							|  |  |  | SECP256K1_API SECP256K1_WARN_UNUSED_RESULT int secp256k1_xonly_pubkey_parse( | 
					
						
							|  |  |  |     const secp256k1_context* ctx, | 
					
						
							|  |  |  |     secp256k1_xonly_pubkey* pubkey, | 
					
						
							|  |  |  |     const unsigned char *input32 | 
					
						
							|  |  |  | ) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /** Serialize an xonly_pubkey object into a 32-byte sequence.
 | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  *  Returns: 1 always. | 
					
						
							|  |  |  |  * | 
					
						
							| 
									
										
										
										
											2020-07-30 12:25:59 +03:00
										 |  |  |  *  Args:     ctx: a secp256k1 context object. | 
					
						
							|  |  |  |  *  Out: output32: a pointer to a 32-byte array to place the serialized key in. | 
					
						
							|  |  |  |  *  In:    pubkey: a pointer to a secp256k1_xonly_pubkey containing an initialized public key. | 
					
						
							| 
									
										
										
										
											2020-05-12 14:40:28 +00:00
										 |  |  |  */ | 
					
						
							|  |  |  | SECP256K1_API int secp256k1_xonly_pubkey_serialize( | 
					
						
							|  |  |  |     const secp256k1_context* ctx, | 
					
						
							|  |  |  |     unsigned char *output32, | 
					
						
							|  |  |  |     const secp256k1_xonly_pubkey* pubkey | 
					
						
							|  |  |  | ) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-30 18:42:32 +00:00
										 |  |  | /** Compare two x-only public keys using lexicographic order
 | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  *  Returns: <0 if the first public key is less than the second | 
					
						
							|  |  |  |  *           >0 if the first public key is greater than the second | 
					
						
							|  |  |  |  *           0 if the two public keys are equal | 
					
						
							|  |  |  |  *  Args: ctx:      a secp256k1 context object. | 
					
						
							|  |  |  |  *  In:   pubkey1:  first public key to compare | 
					
						
							|  |  |  |  *        pubkey2:  second public key to compare | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | SECP256K1_API int secp256k1_xonly_pubkey_cmp( | 
					
						
							|  |  |  |     const secp256k1_context* ctx, | 
					
						
							|  |  |  |     const secp256k1_xonly_pubkey* pk1, | 
					
						
							|  |  |  |     const secp256k1_xonly_pubkey* pk2 | 
					
						
							|  |  |  | ) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-12 14:40:28 +00:00
										 |  |  | /** Converts a secp256k1_pubkey into a secp256k1_xonly_pubkey.
 | 
					
						
							|  |  |  |  * | 
					
						
							| 
									
										
										
										
											2022-03-16 12:43:18 +01:00
										 |  |  |  *  Returns: 1 always. | 
					
						
							| 
									
										
										
										
											2020-05-12 14:40:28 +00:00
										 |  |  |  * | 
					
						
							| 
									
										
										
										
											2020-07-30 12:25:59 +03:00
										 |  |  |  *  Args:         ctx: pointer to a context object. | 
					
						
							|  |  |  |  *  Out: xonly_pubkey: pointer to an x-only public key object for placing the converted public key. | 
					
						
							|  |  |  |  *          pk_parity: Ignored if NULL. Otherwise, pointer to an integer that | 
					
						
							|  |  |  |  *                     will be set to 1 if the point encoded by xonly_pubkey is | 
					
						
							|  |  |  |  *                     the negation of the pubkey and set to 0 otherwise. | 
					
						
							|  |  |  |  *  In:        pubkey: pointer to a public key that is converted. | 
					
						
							| 
									
										
										
										
											2020-05-12 14:40:28 +00:00
										 |  |  |  */ | 
					
						
							|  |  |  | SECP256K1_API SECP256K1_WARN_UNUSED_RESULT int secp256k1_xonly_pubkey_from_pubkey( | 
					
						
							|  |  |  |     const secp256k1_context* ctx, | 
					
						
							|  |  |  |     secp256k1_xonly_pubkey *xonly_pubkey, | 
					
						
							|  |  |  |     int *pk_parity, | 
					
						
							|  |  |  |     const secp256k1_pubkey *pubkey | 
					
						
							|  |  |  | ) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(4); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-12 14:49:12 +00:00
										 |  |  | /** Tweak an x-only public key by adding the generator multiplied with tweak32
 | 
					
						
							|  |  |  |  *  to it. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  *  Note that the resulting point can not in general be represented by an x-only | 
					
						
							|  |  |  |  *  pubkey because it may have an odd Y coordinate. Instead, the output_pubkey | 
					
						
							|  |  |  |  *  is a normal secp256k1_pubkey. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  *  Returns: 0 if the arguments are invalid or the resulting public key would be | 
					
						
							|  |  |  |  *           invalid (only when the tweak is the negation of the corresponding | 
					
						
							|  |  |  |  *           secret key). 1 otherwise. | 
					
						
							|  |  |  |  * | 
					
						
							| 
									
										
										
										
											2022-07-05 22:36:28 +02:00
										 |  |  |  *  Args:           ctx: pointer to a context object. | 
					
						
							| 
									
										
										
										
											2020-05-12 14:49:12 +00:00
										 |  |  |  *  Out:  output_pubkey: pointer to a public key to store the result. Will be set | 
					
						
							| 
									
										
										
										
											2020-07-30 12:25:59 +03:00
										 |  |  |  *                       to an invalid value if this function returns 0. | 
					
						
							| 
									
										
										
										
											2020-05-12 14:49:12 +00:00
										 |  |  |  *  In: internal_pubkey: pointer to an x-only pubkey to apply the tweak to. | 
					
						
							|  |  |  |  *              tweak32: pointer to a 32-byte tweak. If the tweak is invalid | 
					
						
							|  |  |  |  *                       according to secp256k1_ec_seckey_verify, this function | 
					
						
							|  |  |  |  *                       returns 0. For uniformly random 32-byte arrays the | 
					
						
							| 
									
										
										
										
											2020-07-30 12:25:59 +03:00
										 |  |  |  *                       chance of being invalid is negligible (around 1 in 2^128). | 
					
						
							| 
									
										
										
										
											2020-05-12 14:49:12 +00:00
										 |  |  |  */ | 
					
						
							|  |  |  | SECP256K1_API SECP256K1_WARN_UNUSED_RESULT int secp256k1_xonly_pubkey_tweak_add( | 
					
						
							|  |  |  |     const secp256k1_context* ctx, | 
					
						
							|  |  |  |     secp256k1_pubkey *output_pubkey, | 
					
						
							|  |  |  |     const secp256k1_xonly_pubkey *internal_pubkey, | 
					
						
							|  |  |  |     const unsigned char *tweak32 | 
					
						
							|  |  |  | ) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3) SECP256K1_ARG_NONNULL(4); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /** Checks that a tweaked pubkey is the result of calling
 | 
					
						
							|  |  |  |  *  secp256k1_xonly_pubkey_tweak_add with internal_pubkey and tweak32. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  *  The tweaked pubkey is represented by its 32-byte x-only serialization and | 
					
						
							|  |  |  |  *  its pk_parity, which can both be obtained by converting the result of | 
					
						
							|  |  |  |  *  tweak_add to a secp256k1_xonly_pubkey. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  *  Note that this alone does _not_ verify that the tweaked pubkey is a | 
					
						
							|  |  |  |  *  commitment. If the tweak is not chosen in a specific way, the tweaked pubkey | 
					
						
							|  |  |  |  *  can easily be the result of a different internal_pubkey and tweak. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  *  Returns: 0 if the arguments are invalid or the tweaked pubkey is not the | 
					
						
							|  |  |  |  *           result of tweaking the internal_pubkey with tweak32. 1 otherwise. | 
					
						
							| 
									
										
										
										
											2022-07-05 22:36:28 +02:00
										 |  |  |  *  Args:            ctx: pointer to a context object. | 
					
						
							| 
									
										
										
										
											2020-07-30 12:25:59 +03:00
										 |  |  |  *  In: tweaked_pubkey32: pointer to a serialized xonly_pubkey. | 
					
						
							| 
									
										
										
										
											2020-05-12 14:49:12 +00:00
										 |  |  |  *     tweaked_pk_parity: the parity of the tweaked pubkey (whose serialization | 
					
						
							|  |  |  |  *                        is passed in as tweaked_pubkey32). This must match the | 
					
						
							|  |  |  |  *                        pk_parity value that is returned when calling | 
					
						
							|  |  |  |  *                        secp256k1_xonly_pubkey with the tweaked pubkey, or | 
					
						
							|  |  |  |  *                        this function will fail. | 
					
						
							| 
									
										
										
										
											2020-07-30 12:25:59 +03:00
										 |  |  |  *       internal_pubkey: pointer to an x-only public key object to apply the tweak to. | 
					
						
							|  |  |  |  *               tweak32: pointer to a 32-byte tweak. | 
					
						
							| 
									
										
										
										
											2020-05-12 14:49:12 +00:00
										 |  |  |  */ | 
					
						
							|  |  |  | SECP256K1_API SECP256K1_WARN_UNUSED_RESULT int secp256k1_xonly_pubkey_tweak_add_check( | 
					
						
							|  |  |  |     const secp256k1_context* ctx, | 
					
						
							|  |  |  |     const unsigned char *tweaked_pubkey32, | 
					
						
							|  |  |  |     int tweaked_pk_parity, | 
					
						
							|  |  |  |     const secp256k1_xonly_pubkey *internal_pubkey, | 
					
						
							|  |  |  |     const unsigned char *tweak32 | 
					
						
							|  |  |  | ) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(4) SECP256K1_ARG_NONNULL(5); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-12 14:52:34 +00:00
										 |  |  | /** Compute the keypair for a secret key.
 | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  *  Returns: 1: secret was valid, keypair is ready to use | 
					
						
							|  |  |  |  *           0: secret was invalid, try again with a different secret | 
					
						
							| 
									
										
										
										
											2022-11-25 21:39:12 +01:00
										 |  |  |  *  Args:    ctx: pointer to a context object (not secp256k1_context_static). | 
					
						
							| 
									
										
										
										
											2020-07-30 12:25:59 +03:00
										 |  |  |  *  Out: keypair: pointer to the created keypair. | 
					
						
							|  |  |  |  *  In:   seckey: pointer to a 32-byte secret key. | 
					
						
							| 
									
										
										
										
											2020-05-12 14:52:34 +00:00
										 |  |  |  */ | 
					
						
							|  |  |  | SECP256K1_API SECP256K1_WARN_UNUSED_RESULT int secp256k1_keypair_create( | 
					
						
							|  |  |  |     const secp256k1_context* ctx, | 
					
						
							|  |  |  |     secp256k1_keypair *keypair, | 
					
						
							|  |  |  |     const unsigned char *seckey | 
					
						
							|  |  |  | ) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-05 16:48:48 +02:00
										 |  |  | /** Get the secret key from a keypair.
 | 
					
						
							|  |  |  |  * | 
					
						
							| 
									
										
										
										
											2022-03-16 12:43:18 +01:00
										 |  |  |  *  Returns: 1 always. | 
					
						
							| 
									
										
										
										
											2020-07-30 12:25:59 +03:00
										 |  |  |  *  Args:   ctx: pointer to a context object. | 
					
						
							|  |  |  |  *  Out: seckey: pointer to a 32-byte buffer for the secret key. | 
					
						
							|  |  |  |  *  In: keypair: pointer to a keypair. | 
					
						
							| 
									
										
										
										
											2020-11-05 16:48:48 +02:00
										 |  |  |  */ | 
					
						
							|  |  |  | SECP256K1_API SECP256K1_WARN_UNUSED_RESULT int secp256k1_keypair_sec( | 
					
						
							|  |  |  |     const secp256k1_context* ctx, | 
					
						
							|  |  |  |     unsigned char *seckey, | 
					
						
							|  |  |  |     const secp256k1_keypair *keypair | 
					
						
							|  |  |  | ) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-12 14:52:34 +00:00
										 |  |  | /** Get the public key from a keypair.
 | 
					
						
							|  |  |  |  * | 
					
						
							| 
									
										
										
										
											2022-03-16 12:43:18 +01:00
										 |  |  |  *  Returns: 1 always. | 
					
						
							| 
									
										
										
										
											2020-07-30 12:25:59 +03:00
										 |  |  |  *  Args:    ctx: pointer to a context object. | 
					
						
							| 
									
										
										
										
											2020-05-12 14:52:34 +00:00
										 |  |  |  *  Out: pubkey: pointer to a pubkey object. If 1 is returned, it is set to | 
					
						
							|  |  |  |  *               the keypair public key. If not, it's set to an invalid value. | 
					
						
							| 
									
										
										
										
											2020-07-30 12:25:59 +03:00
										 |  |  |  *  In: keypair: pointer to a keypair. | 
					
						
							| 
									
										
										
										
											2020-05-12 14:52:34 +00:00
										 |  |  |  */ | 
					
						
							|  |  |  | SECP256K1_API SECP256K1_WARN_UNUSED_RESULT int secp256k1_keypair_pub( | 
					
						
							|  |  |  |     const secp256k1_context* ctx, | 
					
						
							|  |  |  |     secp256k1_pubkey *pubkey, | 
					
						
							|  |  |  |     const secp256k1_keypair *keypair | 
					
						
							|  |  |  | ) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /** Get the x-only public key from a keypair.
 | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  *  This is the same as calling secp256k1_keypair_pub and then | 
					
						
							|  |  |  |  *  secp256k1_xonly_pubkey_from_pubkey. | 
					
						
							|  |  |  |  * | 
					
						
							| 
									
										
										
										
											2022-03-16 12:43:18 +01:00
										 |  |  |  *  Returns: 1 always. | 
					
						
							| 
									
										
										
										
											2020-07-30 12:25:59 +03:00
										 |  |  |  *  Args:   ctx: pointer to a context object. | 
					
						
							| 
									
										
										
										
											2020-05-12 14:52:34 +00:00
										 |  |  |  *  Out: pubkey: pointer to an xonly_pubkey object. If 1 is returned, it is set | 
					
						
							|  |  |  |  *               to the keypair public key after converting it to an | 
					
						
							| 
									
										
										
										
											2020-07-30 12:25:59 +03:00
										 |  |  |  *               xonly_pubkey. If not, it's set to an invalid value. | 
					
						
							|  |  |  |  *    pk_parity: Ignored if NULL. Otherwise, pointer to an integer that will be set to the | 
					
						
							|  |  |  |  *               pk_parity argument of secp256k1_xonly_pubkey_from_pubkey. | 
					
						
							|  |  |  |  *  In: keypair: pointer to a keypair. | 
					
						
							| 
									
										
										
										
											2020-05-12 14:52:34 +00:00
										 |  |  |  */ | 
					
						
							|  |  |  | SECP256K1_API SECP256K1_WARN_UNUSED_RESULT int secp256k1_keypair_xonly_pub( | 
					
						
							|  |  |  |     const secp256k1_context* ctx, | 
					
						
							|  |  |  |     secp256k1_xonly_pubkey *pubkey, | 
					
						
							|  |  |  |     int *pk_parity, | 
					
						
							|  |  |  |     const secp256k1_keypair *keypair | 
					
						
							|  |  |  | ) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(4); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-07-22 09:09:34 +00:00
										 |  |  | /** Tweak a keypair by adding tweak32 to the secret key and updating the public
 | 
					
						
							|  |  |  |  *  key accordingly. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  *  Calling this function and then secp256k1_keypair_pub results in the same | 
					
						
							|  |  |  |  *  public key as calling secp256k1_keypair_xonly_pub and then | 
					
						
							|  |  |  |  *  secp256k1_xonly_pubkey_tweak_add. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  *  Returns: 0 if the arguments are invalid or the resulting keypair would be | 
					
						
							|  |  |  |  *           invalid (only when the tweak is the negation of the keypair's | 
					
						
							|  |  |  |  *           secret key). 1 otherwise. | 
					
						
							|  |  |  |  * | 
					
						
							| 
									
										
										
										
											2022-07-05 22:36:28 +02:00
										 |  |  |  *  Args:       ctx: pointer to a context object. | 
					
						
							| 
									
										
										
										
											2020-07-22 09:09:34 +00:00
										 |  |  |  *  In/Out: keypair: pointer to a keypair to apply the tweak to. Will be set to | 
					
						
							| 
									
										
										
										
											2020-07-30 12:25:59 +03:00
										 |  |  |  *                   an invalid value if this function returns 0. | 
					
						
							| 
									
										
										
										
											2020-07-22 09:09:34 +00:00
										 |  |  |  *  In:     tweak32: pointer to a 32-byte tweak. If the tweak is invalid according | 
					
						
							|  |  |  |  *                   to secp256k1_ec_seckey_verify, this function returns 0. For | 
					
						
							|  |  |  |  *                   uniformly random 32-byte arrays the chance of being invalid | 
					
						
							| 
									
										
										
										
											2020-07-30 12:25:59 +03:00
										 |  |  |  *                   is negligible (around 1 in 2^128). | 
					
						
							| 
									
										
										
										
											2020-07-22 09:09:34 +00:00
										 |  |  |  */ | 
					
						
							|  |  |  | SECP256K1_API SECP256K1_WARN_UNUSED_RESULT int secp256k1_keypair_xonly_tweak_add( | 
					
						
							|  |  |  |     const secp256k1_context* ctx, | 
					
						
							|  |  |  |     secp256k1_keypair *keypair, | 
					
						
							|  |  |  |     const unsigned char *tweak32 | 
					
						
							|  |  |  | ) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-12 13:58:47 +00:00
										 |  |  | #ifdef __cplusplus
 | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #endif /* SECP256K1_EXTRAKEYS_H */
 |