-
Notifications
You must be signed in to change notification settings - Fork 1k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Use explicit symbol visibility. #314
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -119,6 +119,20 @@ typedef int (*secp256k1_nonce_function)( | |
# define SECP256K1_INLINE inline | ||
# endif | ||
|
||
#ifndef SECP256K1_API | ||
# if defined(_WIN32) | ||
# ifdef SECP256K1_BUILD | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Can you rename There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. No. SECP256K1_BUILD does not differ for static vs dynamic build. There is no preprocessor differences between static and dynamic builds. This define is set during the build of the library itself, only during the build of library itself, and generally should not be touched by users. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. SECP256K1_BUILD is always set when building the library.
|
||
# define SECP256K1_API __declspec(dllexport) | ||
# else | ||
# define SECP256K1_API | ||
# endif | ||
# elif defined(__GNUC__) && defined(SECP256K1_BUILD) | ||
# define SECP256K1_API __attribute__ ((visibility ("default"))) | ||
# else | ||
# define SECP256K1_API | ||
# endif | ||
#endif | ||
|
||
/**Warning attributes | ||
* NONNULL is not used if SECP256K1_BUILD is set to avoid the compiler optimizing out | ||
* some paranoid null checks. */ | ||
|
@@ -145,7 +159,7 @@ typedef int (*secp256k1_nonce_function)( | |
* Returns: a newly created context object. | ||
* In: flags: which parts of the context to initialize. | ||
*/ | ||
secp256k1_context* secp256k1_context_create( | ||
SECP256K1_API secp256k1_context* secp256k1_context_create( | ||
unsigned int flags | ||
) SECP256K1_WARN_UNUSED_RESULT; | ||
|
||
|
@@ -154,7 +168,7 @@ secp256k1_context* secp256k1_context_create( | |
* Returns: a newly created context object. | ||
* Args: ctx: an existing context to copy (cannot be NULL) | ||
*/ | ||
secp256k1_context* secp256k1_context_clone( | ||
SECP256K1_API secp256k1_context* secp256k1_context_clone( | ||
const secp256k1_context* ctx | ||
) SECP256K1_ARG_NONNULL(1) SECP256K1_WARN_UNUSED_RESULT; | ||
|
||
|
@@ -163,7 +177,7 @@ secp256k1_context* secp256k1_context_clone( | |
* The context pointer may not be used afterwards. | ||
* Args: ctx: an existing context to destroy (cannot be NULL) | ||
*/ | ||
void secp256k1_context_destroy( | ||
SECP256K1_API void secp256k1_context_destroy( | ||
secp256k1_context* ctx | ||
); | ||
|
||
|
@@ -187,7 +201,7 @@ void secp256k1_context_destroy( | |
* (NULL restores a default handler that calls abort). | ||
* data: the opaque pointer to pass to fun above. | ||
*/ | ||
void secp256k1_context_set_illegal_callback( | ||
SECP256K1_API void secp256k1_context_set_illegal_callback( | ||
secp256k1_context* ctx, | ||
void (*fun)(const char* message, void* data), | ||
const void* data | ||
|
@@ -209,7 +223,7 @@ void secp256k1_context_set_illegal_callback( | |
* handler that calls abort). | ||
* data: the opaque pointer to pass to fun above. | ||
*/ | ||
void secp256k1_context_set_error_callback( | ||
SECP256K1_API void secp256k1_context_set_error_callback( | ||
secp256k1_context* ctx, | ||
void (*fun)(const char* message, void* data), | ||
const void* data | ||
|
@@ -229,7 +243,7 @@ void secp256k1_context_set_error_callback( | |
* 0x03), uncompressed (65 bytes, header byte 0x04), or hybrid (65 bytes, header | ||
* byte 0x06 or 0x07) format public keys. | ||
*/ | ||
SECP256K1_WARN_UNUSED_RESULT int secp256k1_ec_pubkey_parse( | ||
SECP256K1_API SECP256K1_WARN_UNUSED_RESULT int secp256k1_ec_pubkey_parse( | ||
const secp256k1_context* ctx, | ||
secp256k1_pubkey* pubkey, | ||
const unsigned char *input, | ||
|
@@ -249,7 +263,7 @@ SECP256K1_WARN_UNUSED_RESULT int secp256k1_ec_pubkey_parse( | |
* flags: SECP256K1_EC_COMPRESSED if serialization should be in | ||
* compressed format. | ||
*/ | ||
int secp256k1_ec_pubkey_serialize( | ||
SECP256K1_API int secp256k1_ec_pubkey_serialize( | ||
const secp256k1_context* ctx, | ||
unsigned char *output, | ||
size_t *outputlen, | ||
|
@@ -267,7 +281,7 @@ int secp256k1_ec_pubkey_serialize( | |
* | ||
* Note that this function also supports some violations of DER and even BER. | ||
*/ | ||
int secp256k1_ecdsa_signature_parse_der( | ||
SECP256K1_API int secp256k1_ecdsa_signature_parse_der( | ||
const secp256k1_context* ctx, | ||
secp256k1_ecdsa_signature* sig, | ||
const unsigned char *input, | ||
|
@@ -285,7 +299,7 @@ int secp256k1_ecdsa_signature_parse_der( | |
* if 0 was returned). | ||
* In: sig: a pointer to an initialized signature object | ||
*/ | ||
int secp256k1_ecdsa_signature_serialize_der( | ||
SECP256K1_API int secp256k1_ecdsa_signature_serialize_der( | ||
const secp256k1_context* ctx, | ||
unsigned char *output, | ||
size_t *outputlen, | ||
|
@@ -301,7 +315,7 @@ int secp256k1_ecdsa_signature_serialize_der( | |
* msg32: the 32-byte message hash being verified (cannot be NULL) | ||
* pubkey: pointer to an initialized public key to verify with (cannot be NULL) | ||
*/ | ||
SECP256K1_WARN_UNUSED_RESULT int secp256k1_ecdsa_verify( | ||
SECP256K1_API SECP256K1_WARN_UNUSED_RESULT int secp256k1_ecdsa_verify( | ||
const secp256k1_context* ctx, | ||
const secp256k1_ecdsa_signature *sig, | ||
const unsigned char *msg32, | ||
|
@@ -355,7 +369,7 @@ extern const secp256k1_nonce_function secp256k1_nonce_function_default; | |
* schemes will also accept various non-unique encodings, so care should | ||
* be taken when this property is required for an application. | ||
*/ | ||
int secp256k1_ecdsa_sign( | ||
SECP256K1_API int secp256k1_ecdsa_sign( | ||
const secp256k1_context* ctx, | ||
secp256k1_ecdsa_signature *sig, | ||
const unsigned char *msg32, | ||
|
@@ -371,7 +385,7 @@ int secp256k1_ecdsa_sign( | |
* Args: ctx: pointer to a context object (cannot be NULL) | ||
* In: seckey: pointer to a 32-byte secret key (cannot be NULL) | ||
*/ | ||
SECP256K1_WARN_UNUSED_RESULT int secp256k1_ec_seckey_verify( | ||
SECP256K1_API SECP256K1_WARN_UNUSED_RESULT int secp256k1_ec_seckey_verify( | ||
const secp256k1_context* ctx, | ||
const unsigned char *seckey | ||
) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2); | ||
|
@@ -384,7 +398,7 @@ SECP256K1_WARN_UNUSED_RESULT int secp256k1_ec_seckey_verify( | |
* Out: pubkey: pointer to the created public key (cannot be NULL) | ||
* In: seckey: pointer to a 32-byte private key (cannot be NULL) | ||
*/ | ||
SECP256K1_WARN_UNUSED_RESULT int secp256k1_ec_pubkey_create( | ||
SECP256K1_API SECP256K1_WARN_UNUSED_RESULT int secp256k1_ec_pubkey_create( | ||
const secp256k1_context* ctx, | ||
secp256k1_pubkey *pubkey, | ||
const unsigned char *seckey | ||
|
@@ -410,7 +424,7 @@ SECP256K1_WARN_UNUSED_RESULT int secp256k1_ec_pubkey_create( | |
* Note that this function does not guarantee correct DER output. It is | ||
* guaranteed to be parsable by secp256k1_ec_privkey_import. | ||
*/ | ||
SECP256K1_WARN_UNUSED_RESULT int secp256k1_ec_privkey_export( | ||
SECP256K1_API SECP256K1_WARN_UNUSED_RESULT int secp256k1_ec_privkey_export( | ||
const secp256k1_context* ctx, | ||
unsigned char *privkey, | ||
size_t *privkeylen, | ||
|
@@ -432,7 +446,7 @@ SECP256K1_WARN_UNUSED_RESULT int secp256k1_ec_privkey_export( | |
* only if you know in advance it is supposed to contain a secp256k1 private | ||
* key. | ||
*/ | ||
SECP256K1_WARN_UNUSED_RESULT int secp256k1_ec_privkey_import( | ||
SECP256K1_API SECP256K1_WARN_UNUSED_RESULT int secp256k1_ec_privkey_import( | ||
const secp256k1_context* ctx, | ||
unsigned char *seckey, | ||
const unsigned char *privkey, | ||
|
@@ -448,7 +462,7 @@ SECP256K1_WARN_UNUSED_RESULT int secp256k1_ec_privkey_import( | |
* In/Out: seckey: pointer to a 32-byte private key. | ||
* In: tweak: pointer to a 32-byte tweak. | ||
*/ | ||
SECP256K1_WARN_UNUSED_RESULT int secp256k1_ec_privkey_tweak_add( | ||
SECP256K1_API SECP256K1_WARN_UNUSED_RESULT int secp256k1_ec_privkey_tweak_add( | ||
const secp256k1_context* ctx, | ||
unsigned char *seckey, | ||
const unsigned char *tweak | ||
|
@@ -464,7 +478,7 @@ SECP256K1_WARN_UNUSED_RESULT int secp256k1_ec_privkey_tweak_add( | |
* In/Out: pubkey: pointer to a public key object. | ||
* In: tweak: pointer to a 32-byte tweak. | ||
*/ | ||
SECP256K1_WARN_UNUSED_RESULT int secp256k1_ec_pubkey_tweak_add( | ||
SECP256K1_API SECP256K1_WARN_UNUSED_RESULT int secp256k1_ec_pubkey_tweak_add( | ||
const secp256k1_context* ctx, | ||
secp256k1_pubkey *pubkey, | ||
const unsigned char *tweak | ||
|
@@ -477,7 +491,7 @@ SECP256K1_WARN_UNUSED_RESULT int secp256k1_ec_pubkey_tweak_add( | |
* In/Out: seckey: pointer to a 32-byte private key. | ||
* In: tweak: pointer to a 32-byte tweak. | ||
*/ | ||
SECP256K1_WARN_UNUSED_RESULT int secp256k1_ec_privkey_tweak_mul( | ||
SECP256K1_API SECP256K1_WARN_UNUSED_RESULT int secp256k1_ec_privkey_tweak_mul( | ||
const secp256k1_context* ctx, | ||
unsigned char *seckey, | ||
const unsigned char *tweak | ||
|
@@ -491,7 +505,7 @@ SECP256K1_WARN_UNUSED_RESULT int secp256k1_ec_privkey_tweak_mul( | |
* In/Out: pubkey: pointer to a public key obkect. | ||
* In: tweak: pointer to a 32-byte tweak. | ||
*/ | ||
SECP256K1_WARN_UNUSED_RESULT int secp256k1_ec_pubkey_tweak_mul( | ||
SECP256K1_API SECP256K1_WARN_UNUSED_RESULT int secp256k1_ec_pubkey_tweak_mul( | ||
const secp256k1_context* ctx, | ||
secp256k1_pubkey *pubkey, | ||
const unsigned char *tweak | ||
|
@@ -503,7 +517,7 @@ SECP256K1_WARN_UNUSED_RESULT int secp256k1_ec_pubkey_tweak_mul( | |
* Args: ctx: pointer to a context object (cannot be NULL) | ||
* In: seed32: pointer to a 32-byte random seed (NULL resets to initial state) | ||
*/ | ||
SECP256K1_WARN_UNUSED_RESULT int secp256k1_context_randomize( | ||
SECP256K1_API SECP256K1_WARN_UNUSED_RESULT int secp256k1_context_randomize( | ||
secp256k1_context* ctx, | ||
const unsigned char *seed32 | ||
) SECP256K1_ARG_NONNULL(1); | ||
|
@@ -519,7 +533,7 @@ SECP256K1_WARN_UNUSED_RESULT int secp256k1_context_randomize( | |
* Use secp256k1_ec_pubkey_compress and secp256k1_ec_pubkey_decompress if the | ||
* uncompressed format is needed. | ||
*/ | ||
SECP256K1_WARN_UNUSED_RESULT int secp256k1_ec_pubkey_combine( | ||
SECP256K1_API SECP256K1_WARN_UNUSED_RESULT int secp256k1_ec_pubkey_combine( | ||
const secp256k1_context* ctx, | ||
secp256k1_pubkey *out, | ||
const secp256k1_pubkey * const * ins, | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Why is that checked in the first place?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
To avoid redefinition if it has been set already, e.g. by another header.