diff options
Diffstat (limited to 'src/lib/ffi/ffi.h')
-rw-r--r-- | src/lib/ffi/ffi.h | 573 |
1 files changed, 298 insertions, 275 deletions
diff --git a/src/lib/ffi/ffi.h b/src/lib/ffi/ffi.h index 73c999f66..1b846a5a4 100644 --- a/src/lib/ffi/ffi.h +++ b/src/lib/ffi/ffi.h @@ -66,39 +66,39 @@ how to provide the cleanest API for such users would be most welcome. * expressed in the form YYYYMMDD of the release date of this version * of the API. */ -BOTAN_DLL uint32_t botan_ffi_api_version(); +BOTAN_PUBLIC_API(2,0) uint32_t botan_ffi_api_version(); /** * Return 0 (ok) if the version given is one this library supports. * botan_ffi_supports_api(botan_ffi_api_version()) will always return 0. */ -BOTAN_DLL int botan_ffi_supports_api(uint32_t api_version); +BOTAN_PUBLIC_API(2,0) int botan_ffi_supports_api(uint32_t api_version); /** * Return a free-form version string, e.g., 2.0.0 */ -BOTAN_DLL const char* botan_version_string(); +BOTAN_PUBLIC_API(2,0) const char* botan_version_string(); /** * Return the major version of the library */ -BOTAN_DLL uint32_t botan_version_major(); +BOTAN_PUBLIC_API(2,0) uint32_t botan_version_major(); /** * Return the minor version of the library */ -BOTAN_DLL uint32_t botan_version_minor(); +BOTAN_PUBLIC_API(2,0) uint32_t botan_version_minor(); /** * Return the patch version of the library */ -BOTAN_DLL uint32_t botan_version_patch(); +BOTAN_PUBLIC_API(2,0) uint32_t botan_version_patch(); /** * Return the date this version was released as * an integer, or 0 if an unreleased version */ -BOTAN_DLL uint32_t botan_version_datestamp(); +BOTAN_PUBLIC_API(2,0) uint32_t botan_version_datestamp(); /* * Error handling @@ -155,18 +155,18 @@ doesn't exactly work well either! /** * Returns 0 if x[0..len] == y[0..len], or otherwise -1 */ -BOTAN_DLL int botan_constant_time_compare(const uint8_t* x, const uint8_t* y, size_t len); +BOTAN_PUBLIC_API(2,3) int botan_constant_time_compare(const uint8_t* x, const uint8_t* y, size_t len); /** * Deprecated equivalent to botan_constant_time_compare */ -BOTAN_DLL int botan_same_mem(const uint8_t* x, const uint8_t* y, size_t len); +BOTAN_PUBLIC_API(2,0) int botan_same_mem(const uint8_t* x, const uint8_t* y, size_t len); /** * Clear out memory using a system specific approach to bypass elision by the * compiler (currently using RtlSecureZeroMemory or tricks with volatile pointers). */ -BOTAN_DLL int botan_scrub_mem(void* mem, size_t bytes); +BOTAN_PUBLIC_API(2,2) int botan_scrub_mem(void* mem, size_t bytes); #define BOTAN_FFI_HEX_LOWER_CASE 1 @@ -178,7 +178,7 @@ BOTAN_DLL int botan_scrub_mem(void* mem, size_t bytes); * @param flags flags out be upper or lower case? * @return 0 on success, 1 on failure */ -BOTAN_DLL int botan_hex_encode(const uint8_t* x, size_t len, char* out, uint32_t flags); +BOTAN_PUBLIC_API(2,0) int botan_hex_encode(const uint8_t* x, size_t len, char* out, uint32_t flags); /** * Perform hex decoding @@ -187,19 +187,19 @@ BOTAN_DLL int botan_hex_encode(const uint8_t* x, size_t len, char* out, uint32_t * @param out the output buffer should be at least strlen(hex_str)/2 bytes * @param out_len the size of out */ -BOTAN_DLL int botan_hex_decode(const char* hex_str, size_t in_len, uint8_t* out, size_t* out_len); +BOTAN_PUBLIC_API(2,3) int botan_hex_decode(const char* hex_str, size_t in_len, uint8_t* out, size_t* out_len); /** * Perform base64 encoding */ -BOTAN_DLL int botan_base64_encode(const uint8_t* x, size_t len, char* out, size_t* out_len); +BOTAN_PUBLIC_API(2,3) int botan_base64_encode(const uint8_t* x, size_t len, char* out, size_t* out_len); /** * Perform base64 decoding */ -BOTAN_DLL int botan_base64_decode(const char* base64_str, size_t in_len, - uint8_t* out, size_t* out_len); +BOTAN_PUBLIC_API(2,3) int botan_base64_decode(const char* base64_str, size_t in_len, + uint8_t* out, size_t* out_len); /** * RNG type @@ -215,7 +215,7 @@ typedef struct botan_rng_struct* botan_rng_t; * * TODO: replace rng_type with simple flags? */ -BOTAN_DLL int botan_rng_init(botan_rng_t* rng, const char* rng_type); +BOTAN_PUBLIC_API(2,0) int botan_rng_init(botan_rng_t* rng, const char* rng_type); /** * Get random bytes from a random number generator @@ -226,7 +226,7 @@ BOTAN_DLL int botan_rng_init(botan_rng_t* rng, const char* rng_type); * * TODO: better name */ -BOTAN_DLL int botan_rng_get(botan_rng_t rng, uint8_t* out, size_t out_len); +BOTAN_PUBLIC_API(2,0) int botan_rng_get(botan_rng_t rng, uint8_t* out, size_t out_len); /** * Reseed a random number generator @@ -236,14 +236,14 @@ BOTAN_DLL int botan_rng_get(botan_rng_t rng, uint8_t* out, size_t out_len); * @param bits number of bits to to reseed with * @return 0 on success, a negative value on failure */ -BOTAN_DLL int botan_rng_reseed(botan_rng_t rng, size_t bits); +BOTAN_PUBLIC_API(2,0) int botan_rng_reseed(botan_rng_t rng, size_t bits); /** * Frees all resources of the random number generator object * @param rng rng object * @return always returns 0 */ -BOTAN_DLL int botan_rng_destroy(botan_rng_t rng); +BOTAN_PUBLIC_API(2,0) int botan_rng_destroy(botan_rng_t rng); /* * Hash type @@ -260,7 +260,7 @@ typedef struct botan_hash_struct* botan_hash_t; * TODO: since output_length is effectively required to use this API, * return it from init as an output parameter */ -BOTAN_DLL int botan_hash_init(botan_hash_t* hash, const char* hash_name, uint32_t flags); +BOTAN_PUBLIC_API(2,0) int botan_hash_init(botan_hash_t* hash, const char* hash_name, uint32_t flags); /** * Copy the state of a hash function object @@ -268,7 +268,7 @@ BOTAN_DLL int botan_hash_init(botan_hash_t* hash, const char* hash_name, uint32_ * @param source source hash object * @return 0 on success, a negative value on failure */ -BOTAN_DLL int botan_hash_copy_state(botan_hash_t *dest, const botan_hash_t source); +BOTAN_PUBLIC_API(2,2) int botan_hash_copy_state(botan_hash_t *dest, const botan_hash_t source); /** * Writes the output length of the hash function to *output_length @@ -276,7 +276,7 @@ BOTAN_DLL int botan_hash_copy_state(botan_hash_t *dest, const botan_hash_t sourc * @param output_length output buffer to hold the hash function output length * @return 0 on success, a negative value on failure */ -BOTAN_DLL int botan_hash_output_length(botan_hash_t hash, size_t* output_length); +BOTAN_PUBLIC_API(2,0) int botan_hash_output_length(botan_hash_t hash, size_t* output_length); /** * Writes the block size of the hash function to *block_size @@ -284,7 +284,7 @@ BOTAN_DLL int botan_hash_output_length(botan_hash_t hash, size_t* output_length) * @param block_size output buffer to hold the hash function output length * @return 0 on success, a negative value on failure */ -BOTAN_DLL int botan_hash_block_size(botan_hash_t hash, size_t* block_size); +BOTAN_PUBLIC_API(2,2) int botan_hash_block_size(botan_hash_t hash, size_t* block_size); /** * Send more input to the hash function @@ -293,7 +293,7 @@ BOTAN_DLL int botan_hash_block_size(botan_hash_t hash, size_t* block_size); * @param in_len number of bytes to read from the input buffer * @return 0 on success, a negative value on failure */ -BOTAN_DLL int botan_hash_update(botan_hash_t hash, const uint8_t* in, size_t in_len); +BOTAN_PUBLIC_API(2,0) int botan_hash_update(botan_hash_t hash, const uint8_t* in, size_t in_len); /** * Finalizes the hash computation and writes the output to @@ -303,7 +303,7 @@ BOTAN_DLL int botan_hash_update(botan_hash_t hash, const uint8_t* in, size_t in_ * @param out output buffer * @return 0 on success, a negative value on failure */ -BOTAN_DLL int botan_hash_final(botan_hash_t hash, uint8_t out[]); +BOTAN_PUBLIC_API(2,0) int botan_hash_final(botan_hash_t hash, uint8_t out[]); /** * Reinitializes the state of the hash computation. A hash can @@ -311,19 +311,19 @@ BOTAN_DLL int botan_hash_final(botan_hash_t hash, uint8_t out[]); * @param hash hash object * @return 0 on success, a negative value on failure */ -BOTAN_DLL int botan_hash_clear(botan_hash_t hash); +BOTAN_PUBLIC_API(2,0) int botan_hash_clear(botan_hash_t hash); /** * Frees all resources of the hash object * @param hash hash object * @return always returns 0 */ -BOTAN_DLL int botan_hash_destroy(botan_hash_t hash); +BOTAN_PUBLIC_API(2,0) int botan_hash_destroy(botan_hash_t hash); /** * TODO has no implementation */ -BOTAN_DLL int botan_hash_name(botan_hash_t hash, char* name, size_t name_len); +BOTAN_PUBLIC_API(2,0) int botan_hash_name(botan_hash_t hash, char* name, size_t name_len); /* * Message Authentication type @@ -338,7 +338,7 @@ typedef struct botan_mac_struct* botan_mac_t; * and return a negative value (error code) * @return 0 on success, a negative value on failure */ -BOTAN_DLL int botan_mac_init(botan_mac_t* mac, const char* mac_name, uint32_t flags); +BOTAN_PUBLIC_API(2,0) int botan_mac_init(botan_mac_t* mac, const char* mac_name, uint32_t flags); /** * Writes the output length of the message authentication code to *output_length @@ -346,7 +346,7 @@ BOTAN_DLL int botan_mac_init(botan_mac_t* mac, const char* mac_name, uint32_t fl * @param output_length output buffer to hold the MAC output length * @return 0 on success, a negative value on failure */ -BOTAN_DLL int botan_mac_output_length(botan_mac_t mac, size_t* output_length); +BOTAN_PUBLIC_API(2,0) int botan_mac_output_length(botan_mac_t mac, size_t* output_length); /** * Sets the key on the MAC @@ -355,7 +355,7 @@ BOTAN_DLL int botan_mac_output_length(botan_mac_t mac, size_t* output_length); * @param key_len size of the key buffer in bytes * @return 0 on success, a negative value on failure */ -BOTAN_DLL int botan_mac_set_key(botan_mac_t mac, const uint8_t* key, size_t key_len); +BOTAN_PUBLIC_API(2,0) int botan_mac_set_key(botan_mac_t mac, const uint8_t* key, size_t key_len); /** * Send more input to the message authentication code @@ -364,7 +364,7 @@ BOTAN_DLL int botan_mac_set_key(botan_mac_t mac, const uint8_t* key, size_t key_ * @param len number of bytes to read from the input buffer * @return 0 on success, a negative value on failure */ -BOTAN_DLL int botan_mac_update(botan_mac_t mac, const uint8_t* buf, size_t len); +BOTAN_PUBLIC_API(2,0) int botan_mac_update(botan_mac_t mac, const uint8_t* buf, size_t len); /** * Finalizes the MAC computation and writes the output to @@ -374,7 +374,7 @@ BOTAN_DLL int botan_mac_update(botan_mac_t mac, const uint8_t* buf, size_t len); * @param out output buffer * @return 0 on success, a negative value on failure */ -BOTAN_DLL int botan_mac_final(botan_mac_t mac, uint8_t out[]); +BOTAN_PUBLIC_API(2,0) int botan_mac_final(botan_mac_t mac, uint8_t out[]); /** * Reinitializes the state of the MAC computation. A MAC can @@ -382,14 +382,14 @@ BOTAN_DLL int botan_mac_final(botan_mac_t mac, uint8_t out[]); * @param mac mac object * @return 0 on success, a negative value on failure */ -BOTAN_DLL int botan_mac_clear(botan_mac_t mac); +BOTAN_PUBLIC_API(2,0) int botan_mac_clear(botan_mac_t mac); /** * Frees all resources of the MAC object * @param mac mac object * @return always returns 0 */ -BOTAN_DLL int botan_mac_destroy(botan_mac_t mac); +BOTAN_PUBLIC_API(2,0) int botan_mac_destroy(botan_mac_t mac); /* * Cipher modes @@ -400,29 +400,29 @@ typedef struct botan_cipher_struct* botan_cipher_t; #define BOTAN_CIPHER_INIT_FLAG_ENCRYPT 0 #define BOTAN_CIPHER_INIT_FLAG_DECRYPT 1 -BOTAN_DLL int botan_cipher_init(botan_cipher_t* cipher, const char* name, uint32_t flags); +BOTAN_PUBLIC_API(2,0) int botan_cipher_init(botan_cipher_t* cipher, const char* name, uint32_t flags); -BOTAN_DLL int botan_cipher_valid_nonce_length(botan_cipher_t cipher, size_t nl); -BOTAN_DLL int botan_cipher_get_tag_length(botan_cipher_t cipher, size_t* tag_size); -BOTAN_DLL int botan_cipher_get_default_nonce_length(botan_cipher_t cipher, size_t* nl); -BOTAN_DLL int botan_cipher_get_update_granularity(botan_cipher_t cipher, size_t* ug); +BOTAN_PUBLIC_API(2,0) int botan_cipher_valid_nonce_length(botan_cipher_t cipher, size_t nl); +BOTAN_PUBLIC_API(2,0) int botan_cipher_get_tag_length(botan_cipher_t cipher, size_t* tag_size); +BOTAN_PUBLIC_API(2,0) int botan_cipher_get_default_nonce_length(botan_cipher_t cipher, size_t* nl); +BOTAN_PUBLIC_API(2,0) int botan_cipher_get_update_granularity(botan_cipher_t cipher, size_t* ug); -BOTAN_DLL int botan_cipher_query_keylen(botan_cipher_t, +BOTAN_PUBLIC_API(2,0) int botan_cipher_query_keylen(botan_cipher_t, size_t* out_minimum_keylength, size_t* out_maximum_keylength); -BOTAN_DLL int botan_cipher_set_key(botan_cipher_t cipher, +BOTAN_PUBLIC_API(2,0) int botan_cipher_set_key(botan_cipher_t cipher, const uint8_t* key, size_t key_len); -BOTAN_DLL int botan_cipher_set_associated_data(botan_cipher_t cipher, +BOTAN_PUBLIC_API(2,0) int botan_cipher_set_associated_data(botan_cipher_t cipher, const uint8_t* ad, size_t ad_len); -BOTAN_DLL int botan_cipher_start(botan_cipher_t cipher, +BOTAN_PUBLIC_API(2,0) int botan_cipher_start(botan_cipher_t cipher, const uint8_t* nonce, size_t nonce_len); #define BOTAN_CIPHER_UPDATE_FLAG_FINAL (1U << 0) -BOTAN_DLL int botan_cipher_update(botan_cipher_t cipher, +BOTAN_PUBLIC_API(2,0) int botan_cipher_update(botan_cipher_t cipher, uint32_t flags, uint8_t output[], size_t output_size, @@ -431,8 +431,8 @@ BOTAN_DLL int botan_cipher_update(botan_cipher_t cipher, size_t input_size, size_t* input_consumed); -BOTAN_DLL int botan_cipher_clear(botan_cipher_t hash); -BOTAN_DLL int botan_cipher_destroy(botan_cipher_t cipher); +BOTAN_PUBLIC_API(2,0) int botan_cipher_clear(botan_cipher_t hash); +BOTAN_PUBLIC_API(2,0) int botan_cipher_destroy(botan_cipher_t cipher); /* * Derive a key from a passphrase for a number of iterations @@ -445,7 +445,7 @@ BOTAN_DLL int botan_cipher_destroy(botan_cipher_t cipher); * @param iterations the number of iterations to use (use 10K or more) * @return 0 on success, a negative value on failure */ -BOTAN_DLL int botan_pbkdf(const char* pbkdf_algo, +BOTAN_PUBLIC_API(2,0) int botan_pbkdf(const char* pbkdf_algo, uint8_t out[], size_t out_len, const char* passphrase, const uint8_t salt[], size_t salt_len, @@ -464,7 +464,7 @@ BOTAN_DLL int botan_pbkdf(const char* pbkdf_algo, * @param out_iterations_used set to the number iterations executed * @return 0 on success, a negative value on failure */ -BOTAN_DLL int botan_pbkdf_timed(const char* pbkdf_algo, +BOTAN_PUBLIC_API(2,0) int botan_pbkdf_timed(const char* pbkdf_algo, uint8_t out[], size_t out_len, const char* passphrase, const uint8_t salt[], size_t salt_len, @@ -484,7 +484,7 @@ BOTAN_DLL int botan_pbkdf_timed(const char* pbkdf_algo, * @param label_len size of label in bytes * @return 0 on success, a negative value on failure */ -BOTAN_DLL int botan_kdf(const char* kdf_algo, +BOTAN_PUBLIC_API(2,0) int botan_kdf(const char* kdf_algo, uint8_t out[], size_t out_len, const uint8_t secret[], size_t secret_len, const uint8_t salt[], size_t salt_len, @@ -503,7 +503,7 @@ BOTAN_DLL int botan_kdf(const char* kdf_algo, * Output is formatted bcrypt $2a$... */ -BOTAN_DLL int botan_bcrypt_generate(uint8_t* out, size_t* out_len, +BOTAN_PUBLIC_API(2,0) int botan_bcrypt_generate(uint8_t* out, size_t* out_len, const char* password, botan_rng_t rng, size_t work_factor, @@ -517,38 +517,38 @@ typedef struct botan_block_cipher_struct* botan_block_cipher_t; /** * Initialize a block cipher object */ -BOTAN_DLL int botan_block_cipher_init(botan_block_cipher_t* bc, +BOTAN_PUBLIC_API(2,2) int botan_block_cipher_init(botan_block_cipher_t* bc, const char* cipher_name); /** * Destroy a block cipher object */ -BOTAN_DLL int botan_block_cipher_destroy(botan_block_cipher_t bc); +BOTAN_PUBLIC_API(2,2) int botan_block_cipher_destroy(botan_block_cipher_t bc); /** * Reinitializes the block cipher * @return 0 on success, a negative value on failure */ -BOTAN_DLL int botan_block_cipher_clear(botan_block_cipher_t bc); +BOTAN_PUBLIC_API(2,2) int botan_block_cipher_clear(botan_block_cipher_t bc); /** * Set the key for a block cipher instance */ -BOTAN_DLL int botan_block_cipher_set_key(botan_block_cipher_t bc, +BOTAN_PUBLIC_API(2,2) int botan_block_cipher_set_key(botan_block_cipher_t bc, const uint8_t key[], size_t len); /** * Return the positive block size of this block cipher, or negative to * indicate an error */ -BOTAN_DLL int botan_block_cipher_block_size(botan_block_cipher_t bc); +BOTAN_PUBLIC_API(2,2) int botan_block_cipher_block_size(botan_block_cipher_t bc); -BOTAN_DLL int botan_block_cipher_encrypt_blocks(botan_block_cipher_t bc, +BOTAN_PUBLIC_API(2,2) int botan_block_cipher_encrypt_blocks(botan_block_cipher_t bc, const uint8_t in[], uint8_t out[], size_t blocks); -BOTAN_DLL int botan_block_cipher_decrypt_blocks(botan_block_cipher_t bc, +BOTAN_PUBLIC_API(2,2) int botan_block_cipher_decrypt_blocks(botan_block_cipher_t bc, const uint8_t in[], uint8_t out[], size_t blocks); @@ -559,57 +559,57 @@ BOTAN_DLL int botan_block_cipher_decrypt_blocks(botan_block_cipher_t bc, */ typedef struct botan_mp_struct* botan_mp_t; -BOTAN_DLL int botan_mp_init(botan_mp_t* mp); -BOTAN_DLL int botan_mp_destroy(botan_mp_t mp); +BOTAN_PUBLIC_API(2,2) int botan_mp_init(botan_mp_t* mp); +BOTAN_PUBLIC_API(2,2) int botan_mp_destroy(botan_mp_t mp); // writes botan_mp_num_bytes(mp)*2 + 1 bytes to out[] -BOTAN_DLL int botan_mp_to_hex(const botan_mp_t mp, char* out); -BOTAN_DLL int botan_mp_to_str(const botan_mp_t mp, uint8_t base, char* out, size_t* out_len); +BOTAN_PUBLIC_API(2,2) int botan_mp_to_hex(const botan_mp_t mp, char* out); +BOTAN_PUBLIC_API(2,2) int botan_mp_to_str(const botan_mp_t mp, uint8_t base, char* out, size_t* out_len); -BOTAN_DLL int botan_mp_clear(botan_mp_t mp); +BOTAN_PUBLIC_API(2,2) int botan_mp_clear(botan_mp_t mp); -BOTAN_DLL int botan_mp_set_from_int(botan_mp_t mp, int initial_value); -BOTAN_DLL int botan_mp_set_from_mp(botan_mp_t dest, const botan_mp_t source); -BOTAN_DLL int botan_mp_set_from_str(botan_mp_t dest, const char* str); -BOTAN_DLL int botan_mp_set_from_radix_str(botan_mp_t dest, const char* str, size_t radix); +BOTAN_PUBLIC_API(2,2) int botan_mp_set_from_int(botan_mp_t mp, int initial_value); +BOTAN_PUBLIC_API(2,2) int botan_mp_set_from_mp(botan_mp_t dest, const botan_mp_t source); +BOTAN_PUBLIC_API(2,2) int botan_mp_set_from_str(botan_mp_t dest, const char* str); +BOTAN_PUBLIC_API(2,2) int botan_mp_set_from_radix_str(botan_mp_t dest, const char* str, size_t radix); -BOTAN_DLL int botan_mp_num_bits(const botan_mp_t n, size_t* bits); -BOTAN_DLL int botan_mp_num_bytes(const botan_mp_t n, size_t* bytes); +BOTAN_PUBLIC_API(2,2) int botan_mp_num_bits(const botan_mp_t n, size_t* bits); +BOTAN_PUBLIC_API(2,2) int botan_mp_num_bytes(const botan_mp_t n, size_t* bytes); // Writes botan_mp_num_bytes(mp) to vec -BOTAN_DLL int botan_mp_to_bin(const botan_mp_t mp, uint8_t vec[]); -BOTAN_DLL int botan_mp_from_bin(const botan_mp_t mp, const uint8_t vec[], size_t vec_len); +BOTAN_PUBLIC_API(2,2) int botan_mp_to_bin(const botan_mp_t mp, uint8_t vec[]); +BOTAN_PUBLIC_API(2,2) int botan_mp_from_bin(const botan_mp_t mp, const uint8_t vec[], size_t vec_len); -BOTAN_DLL int botan_mp_to_uint32(const botan_mp_t mp, uint32_t* val); +BOTAN_PUBLIC_API(2,2) int botan_mp_to_uint32(const botan_mp_t mp, uint32_t* val); /** * This function is not well named. Returns 1 iff mp is greater than * *or equal to* zero. Use botan_mp_is_negative to detect negative * numbers, botan_mp_is_zero to check for zero. */ -BOTAN_DLL int botan_mp_is_positive(const botan_mp_t mp); +BOTAN_PUBLIC_API(2,2) int botan_mp_is_positive(const botan_mp_t mp); /** * Return 1 iff mp is less than 0 */ -BOTAN_DLL int botan_mp_is_negative(const botan_mp_t mp); +BOTAN_PUBLIC_API(2,2) int botan_mp_is_negative(const botan_mp_t mp); -BOTAN_DLL int botan_mp_flip_sign(botan_mp_t mp); -//BOTAN_DLL int botan_mp_set_negative(botan_mp_t mp); +BOTAN_PUBLIC_API(2,2) int botan_mp_flip_sign(botan_mp_t mp); +//BOTAN_PUBLIC_API(2,2) int botan_mp_set_negative(botan_mp_t mp); -BOTAN_DLL int botan_mp_is_zero(const botan_mp_t mp); -BOTAN_DLL int botan_mp_is_odd(const botan_mp_t mp); -BOTAN_DLL int botan_mp_is_even(const botan_mp_t mp); +BOTAN_PUBLIC_API(2,2) int botan_mp_is_zero(const botan_mp_t mp); +BOTAN_PUBLIC_API(2,2) int botan_mp_is_odd(const botan_mp_t mp); +BOTAN_PUBLIC_API(2,2) int botan_mp_is_even(const botan_mp_t mp); -BOTAN_DLL int botan_mp_add(botan_mp_t result, const botan_mp_t x, const botan_mp_t y); -BOTAN_DLL int botan_mp_sub(botan_mp_t result, const botan_mp_t x, const botan_mp_t y); -BOTAN_DLL int botan_mp_mul(botan_mp_t result, const botan_mp_t x, const botan_mp_t y); +BOTAN_PUBLIC_API(2,2) int botan_mp_add(botan_mp_t result, const botan_mp_t x, const botan_mp_t y); +BOTAN_PUBLIC_API(2,2) int botan_mp_sub(botan_mp_t result, const botan_mp_t x, const botan_mp_t y); +BOTAN_PUBLIC_API(2,2) int botan_mp_mul(botan_mp_t result, const botan_mp_t x, const botan_mp_t y); -BOTAN_DLL int botan_mp_div(botan_mp_t quotient, +BOTAN_PUBLIC_API(2,2) int botan_mp_div(botan_mp_t quotient, botan_mp_t remainder, const botan_mp_t x, const botan_mp_t y); -BOTAN_DLL int botan_mp_mod_mul(botan_mp_t result, const botan_mp_t x, +BOTAN_PUBLIC_API(2,2) int botan_mp_mod_mul(botan_mp_t result, const botan_mp_t x, const botan_mp_t y, const botan_mp_t mod); /* @@ -617,58 +617,58 @@ BOTAN_DLL int botan_mp_mod_mul(botan_mp_t result, const botan_mp_t x, * Returns 1 if x == y * Returns negative number on error */ -BOTAN_DLL int botan_mp_equal(const botan_mp_t x, const botan_mp_t y); +BOTAN_PUBLIC_API(2,2) int botan_mp_equal(const botan_mp_t x, const botan_mp_t y); /* * Sets *result to comparison result: * -1 if x < y, 0 if x == y, 1 if x > y * Returns negative number on error or zero on success */ -BOTAN_DLL int botan_mp_cmp(int* result, const botan_mp_t x, const botan_mp_t y); +BOTAN_PUBLIC_API(2,2) int botan_mp_cmp(int* result, const botan_mp_t x, const botan_mp_t y); /* * Swap two botan_mp_t */ -BOTAN_DLL int botan_mp_swap(botan_mp_t x, botan_mp_t y); +BOTAN_PUBLIC_API(2,2) int botan_mp_swap(botan_mp_t x, botan_mp_t y); // Return (base^exponent) % modulus -BOTAN_DLL int botan_mp_powmod(botan_mp_t out, const botan_mp_t base, const botan_mp_t exponent, const botan_mp_t modulus); +BOTAN_PUBLIC_API(2,2) int botan_mp_powmod(botan_mp_t out, const botan_mp_t base, const botan_mp_t exponent, const botan_mp_t modulus); -BOTAN_DLL int botan_mp_lshift(botan_mp_t out, const botan_mp_t in, size_t shift); -BOTAN_DLL int botan_mp_rshift(botan_mp_t out, const botan_mp_t in, size_t shift); +BOTAN_PUBLIC_API(2,2) int botan_mp_lshift(botan_mp_t out, const botan_mp_t in, size_t shift); +BOTAN_PUBLIC_API(2,2) int botan_mp_rshift(botan_mp_t out, const botan_mp_t in, size_t shift); -BOTAN_DLL int botan_mp_mod_inverse(botan_mp_t out, const botan_mp_t in, const botan_mp_t modulus); +BOTAN_PUBLIC_API(2,2) int botan_mp_mod_inverse(botan_mp_t out, const botan_mp_t in, const botan_mp_t modulus); -BOTAN_DLL int botan_mp_rand_bits(botan_mp_t rand_out, botan_rng_t rng, size_t bits); +BOTAN_PUBLIC_API(2,2) int botan_mp_rand_bits(botan_mp_t rand_out, botan_rng_t rng, size_t bits); -BOTAN_DLL int botan_mp_rand_range(botan_mp_t rand_out, botan_rng_t rng, +BOTAN_PUBLIC_API(2,2) int botan_mp_rand_range(botan_mp_t rand_out, botan_rng_t rng, const botan_mp_t lower_bound, const botan_mp_t upper_bound); -BOTAN_DLL int botan_mp_gcd(botan_mp_t out, const botan_mp_t x, const botan_mp_t y); +BOTAN_PUBLIC_API(2,2) int botan_mp_gcd(botan_mp_t out, const botan_mp_t x, const botan_mp_t y); /** * Returns 0 if n is not prime * Returns 1 if n is prime * Returns negative number on error */ -BOTAN_DLL int botan_mp_is_prime(const botan_mp_t n, botan_rng_t rng, size_t test_prob); +BOTAN_PUBLIC_API(2,2) int botan_mp_is_prime(const botan_mp_t n, botan_rng_t rng, size_t test_prob); /** * Returns 0 if specified bit of n is not set * Returns 1 if specified bit of n is set * Returns negative number on error */ -BOTAN_DLL int botan_mp_get_bit(const botan_mp_t n, size_t bit); +BOTAN_PUBLIC_API(2,2) int botan_mp_get_bit(const botan_mp_t n, size_t bit); /** * Set the specified bit */ -BOTAN_DLL int botan_mp_set_bit(botan_mp_t n, size_t bit); +BOTAN_PUBLIC_API(2,2) int botan_mp_set_bit(botan_mp_t n, size_t bit); /** * Clear the specified bit */ -BOTAN_DLL int botan_mp_clear_bit(botan_mp_t n, size_t bit); +BOTAN_PUBLIC_API(2,2) int botan_mp_clear_bit(botan_mp_t n, size_t bit); /* Bcrypt password hashing */ @@ -680,37 +680,37 @@ BOTAN_DLL int botan_mp_clear_bit(botan_mp_t n, size_t bit); * 1 if the combination is not valid (but otherwise well formed), * negative on error */ -BOTAN_DLL int botan_bcrypt_is_valid(const char* pass, const char* hash); +BOTAN_PUBLIC_API(2,0) int botan_bcrypt_is_valid(const char* pass, const char* hash); /* * Public/private key creation, import, ... */ typedef struct botan_privkey_struct* botan_privkey_t; -BOTAN_DLL int botan_privkey_create(botan_privkey_t* key, +BOTAN_PUBLIC_API(2,0) int botan_privkey_create(botan_privkey_t* key, const char* algo_name, const char* algo_params, botan_rng_t rng); #define BOTAN_CHECK_KEY_EXPENSIVE_TESTS 1 -BOTAN_DLL int botan_privkey_check_key(botan_privkey_t key, botan_rng_t rng, uint32_t flags); +BOTAN_PUBLIC_API(2,0) int botan_privkey_check_key(botan_privkey_t key, botan_rng_t rng, uint32_t flags); -BOTAN_DLL int botan_privkey_create_rsa(botan_privkey_t* key, botan_rng_t rng, size_t n_bits); -BOTAN_DLL int botan_privkey_create_ecdsa(botan_privkey_t* key, botan_rng_t rng, const char* params); -BOTAN_DLL int botan_privkey_create_ecdh(botan_privkey_t* key, botan_rng_t rng, const char* params); -BOTAN_DLL int botan_privkey_create_mceliece(botan_privkey_t* key, botan_rng_t rng, size_t n, size_t t); -BOTAN_DLL int botan_privkey_create_dh(botan_privkey_t* key, botan_rng_t rng, const char* param); +BOTAN_PUBLIC_API(2,0) int botan_privkey_create_rsa(botan_privkey_t* key, botan_rng_t rng, size_t n_bits); +BOTAN_PUBLIC_API(2,0) int botan_privkey_create_ecdsa(botan_privkey_t* key, botan_rng_t rng, const char* params); +BOTAN_PUBLIC_API(2,0) int botan_privkey_create_ecdh(botan_privkey_t* key, botan_rng_t rng, const char* params); +BOTAN_PUBLIC_API(2,0) int botan_privkey_create_mceliece(botan_privkey_t* key, botan_rng_t rng, size_t n, size_t t); +BOTAN_PUBLIC_API(2,0) int botan_privkey_create_dh(botan_privkey_t* key, botan_rng_t rng, const char* param); /* * Input currently assumed to be PKCS #8 structure; * Set password to NULL to indicate no encryption expected */ -BOTAN_DLL int botan_privkey_load(botan_privkey_t* key, botan_rng_t rng, +BOTAN_PUBLIC_API(2,0) int botan_privkey_load(botan_privkey_t* key, botan_rng_t rng, const uint8_t bits[], size_t len, const char* password); -BOTAN_DLL int botan_privkey_destroy(botan_privkey_t key); +BOTAN_PUBLIC_API(2,0) int botan_privkey_destroy(botan_privkey_t key); #define BOTAN_PRIVKEY_EXPORT_FLAG_DER 0 #define BOTAN_PRIVKEY_EXPORT_FLAG_PEM 1 @@ -722,7 +722,7 @@ BOTAN_DLL int botan_privkey_destroy(botan_privkey_t key); * Returns 0 on success and sets * If some other error occurs a negative integer is returned. */ -BOTAN_DLL int botan_privkey_export(botan_privkey_t key, +BOTAN_PUBLIC_API(2,0) int botan_privkey_export(botan_privkey_t key, uint8_t out[], size_t* out_len, uint32_t flags); @@ -730,7 +730,7 @@ BOTAN_DLL int botan_privkey_export(botan_privkey_t key, * Set encryption_algo to NULL or "" to have the library choose a default (recommended) */ BOTAN_DEPRECATED("Use botan_privkey_export_encrypted_pbkdf_{msec,iter}") -BOTAN_DLL int botan_privkey_export_encrypted(botan_privkey_t key, +BOTAN_PUBLIC_API(2,0) int botan_privkey_export_encrypted(botan_privkey_t key, uint8_t out[], size_t* out_len, botan_rng_t rng, const char* passphrase, @@ -741,7 +741,7 @@ BOTAN_DLL int botan_privkey_export_encrypted(botan_privkey_t key, * Export a private key, running PBKDF for specified amount of time * @param key the private key to export */ -BOTAN_DLL int botan_privkey_export_encrypted_pbkdf_msec(botan_privkey_t key, +BOTAN_PUBLIC_API(2,0) int botan_privkey_export_encrypted_pbkdf_msec(botan_privkey_t key, uint8_t out[], size_t* out_len, botan_rng_t rng, const char* passphrase, @@ -754,7 +754,7 @@ BOTAN_DLL int botan_privkey_export_encrypted_pbkdf_msec(botan_privkey_t key, /* * Export a private key using the specified number of iterations. */ -BOTAN_DLL int botan_privkey_export_encrypted_pbkdf_iter(botan_privkey_t key, +BOTAN_PUBLIC_API(2,0) int botan_privkey_export_encrypted_pbkdf_iter(botan_privkey_t key, uint8_t out[], size_t* out_len, botan_rng_t rng, const char* passphrase, @@ -765,79 +765,79 @@ BOTAN_DLL int botan_privkey_export_encrypted_pbkdf_iter(botan_privkey_t key, typedef struct botan_pubkey_struct* botan_pubkey_t; -BOTAN_DLL int botan_pubkey_load(botan_pubkey_t* key, const uint8_t bits[], size_t len); +BOTAN_PUBLIC_API(2,0) int botan_pubkey_load(botan_pubkey_t* key, const uint8_t bits[], size_t len); -BOTAN_DLL int botan_privkey_export_pubkey(botan_pubkey_t* out, botan_privkey_t in); +BOTAN_PUBLIC_API(2,0) int botan_privkey_export_pubkey(botan_pubkey_t* out, botan_privkey_t in); -BOTAN_DLL int botan_pubkey_export(botan_pubkey_t key, uint8_t out[], size_t* out_len, uint32_t flags); +BOTAN_PUBLIC_API(2,0) int botan_pubkey_export(botan_pubkey_t key, uint8_t out[], size_t* out_len, uint32_t flags); -BOTAN_DLL int botan_pubkey_algo_name(botan_pubkey_t key, char out[], size_t* out_len); +BOTAN_PUBLIC_API(2,0) int botan_pubkey_algo_name(botan_pubkey_t key, char out[], size_t* out_len); /** * Returns 0 if key is valid, negative if invalid key or some other error */ -BOTAN_DLL int botan_pubkey_check_key(botan_pubkey_t key, botan_rng_t rng, uint32_t flags); +BOTAN_PUBLIC_API(2,0) int botan_pubkey_check_key(botan_pubkey_t key, botan_rng_t rng, uint32_t flags); -BOTAN_DLL int botan_pubkey_estimated_strength(botan_pubkey_t key, size_t* estimate); +BOTAN_PUBLIC_API(2,0) int botan_pubkey_estimated_strength(botan_pubkey_t key, size_t* estimate); -BOTAN_DLL int botan_pubkey_fingerprint(botan_pubkey_t key, const char* hash, +BOTAN_PUBLIC_API(2,0) int botan_pubkey_fingerprint(botan_pubkey_t key, const char* hash, uint8_t out[], size_t* out_len); -BOTAN_DLL int botan_pubkey_destroy(botan_pubkey_t key); +BOTAN_PUBLIC_API(2,0) int botan_pubkey_destroy(botan_pubkey_t key); /* * Get arbitrary named fields from public or privat keys */ -BOTAN_DLL int botan_pubkey_get_field(botan_mp_t output, +BOTAN_PUBLIC_API(2,0) int botan_pubkey_get_field(botan_mp_t output, botan_pubkey_t key, const char* field_name); -BOTAN_DLL int botan_privkey_get_field(botan_mp_t output, +BOTAN_PUBLIC_API(2,0) int botan_privkey_get_field(botan_mp_t output, botan_privkey_t key, const char* field_name); /* * Algorithm specific key operations: RSA */ -BOTAN_DLL int botan_privkey_load_rsa(botan_privkey_t* key, +BOTAN_PUBLIC_API(2,0) int botan_privkey_load_rsa(botan_privkey_t* key, botan_mp_t p, botan_mp_t q, botan_mp_t e); -BOTAN_DLL int botan_privkey_rsa_get_p(botan_mp_t p, botan_privkey_t rsa_key); -BOTAN_DLL int botan_privkey_rsa_get_q(botan_mp_t q, botan_privkey_t rsa_key); -BOTAN_DLL int botan_privkey_rsa_get_d(botan_mp_t d, botan_privkey_t rsa_key); -BOTAN_DLL int botan_privkey_rsa_get_n(botan_mp_t n, botan_privkey_t rsa_key); -BOTAN_DLL int botan_privkey_rsa_get_e(botan_mp_t e, botan_privkey_t rsa_key); +BOTAN_PUBLIC_API(2,0) int botan_privkey_rsa_get_p(botan_mp_t p, botan_privkey_t rsa_key); +BOTAN_PUBLIC_API(2,0) int botan_privkey_rsa_get_q(botan_mp_t q, botan_privkey_t rsa_key); +BOTAN_PUBLIC_API(2,0) int botan_privkey_rsa_get_d(botan_mp_t d, botan_privkey_t rsa_key); +BOTAN_PUBLIC_API(2,0) int botan_privkey_rsa_get_n(botan_mp_t n, botan_privkey_t rsa_key); +BOTAN_PUBLIC_API(2,0) int botan_privkey_rsa_get_e(botan_mp_t e, botan_privkey_t rsa_key); -BOTAN_DLL int botan_pubkey_load_rsa(botan_pubkey_t* key, +BOTAN_PUBLIC_API(2,0) int botan_pubkey_load_rsa(botan_pubkey_t* key, botan_mp_t n, botan_mp_t e); -BOTAN_DLL int botan_pubkey_rsa_get_e(botan_mp_t e, botan_pubkey_t rsa_key); -BOTAN_DLL int botan_pubkey_rsa_get_n(botan_mp_t n, botan_pubkey_t rsa_key); +BOTAN_PUBLIC_API(2,0) int botan_pubkey_rsa_get_e(botan_mp_t e, botan_pubkey_t rsa_key); +BOTAN_PUBLIC_API(2,0) int botan_pubkey_rsa_get_n(botan_mp_t n, botan_pubkey_t rsa_key); /* * Algorithm specific key operations: DSA */ -BOTAN_DLL int botan_privkey_load_dsa(botan_privkey_t* key, +BOTAN_PUBLIC_API(2,0) int botan_privkey_load_dsa(botan_privkey_t* key, botan_mp_t p, botan_mp_t q, botan_mp_t g, botan_mp_t x); -BOTAN_DLL int botan_pubkey_load_dsa(botan_pubkey_t* key, +BOTAN_PUBLIC_API(2,0) int botan_pubkey_load_dsa(botan_pubkey_t* key, botan_mp_t p, botan_mp_t q, botan_mp_t g, botan_mp_t y); -BOTAN_DLL int botan_privkey_dsa_get_x(botan_mp_t n, botan_privkey_t key); +BOTAN_PUBLIC_API(2,0) int botan_privkey_dsa_get_x(botan_mp_t n, botan_privkey_t key); -BOTAN_DLL int botan_pubkey_dsa_get_p(botan_mp_t p, botan_pubkey_t key); -BOTAN_DLL int botan_pubkey_dsa_get_q(botan_mp_t q, botan_pubkey_t key); -BOTAN_DLL int botan_pubkey_dsa_get_g(botan_mp_t d, botan_pubkey_t key); -BOTAN_DLL int botan_pubkey_dsa_get_y(botan_mp_t y, botan_pubkey_t key); +BOTAN_PUBLIC_API(2,0) int botan_pubkey_dsa_get_p(botan_mp_t p, botan_pubkey_t key); +BOTAN_PUBLIC_API(2,0) int botan_pubkey_dsa_get_q(botan_mp_t q, botan_pubkey_t key); +BOTAN_PUBLIC_API(2,0) int botan_pubkey_dsa_get_g(botan_mp_t d, botan_pubkey_t key); +BOTAN_PUBLIC_API(2,0) int botan_pubkey_dsa_get_y(botan_mp_t y, botan_pubkey_t key); /* * Loads Diffie Hellman private key @@ -852,7 +852,7 @@ BOTAN_DLL int botan_pubkey_dsa_get_y(botan_mp_t y, botan_pubkey_t key); * * @return 0 on success, a negative value on failure */ -BOTAN_DLL int botan_privkey_load_dh(botan_privkey_t* key, +BOTAN_PUBLIC_API(2,0) int botan_privkey_load_dh(botan_privkey_t* key, botan_mp_t p, botan_mp_t g, botan_mp_t x); @@ -869,7 +869,7 @@ BOTAN_DLL int botan_privkey_load_dh(botan_privkey_t* key, * * @return 0 on success, a negative value on failure */ -BOTAN_DLL int botan_pubkey_load_dh(botan_pubkey_t* key, +BOTAN_PUBLIC_API(2,0) int botan_pubkey_load_dh(botan_pubkey_t* key, botan_mp_t p, botan_mp_t g, botan_mp_t y); @@ -890,7 +890,7 @@ BOTAN_DLL int botan_pubkey_load_dh(botan_pubkey_t* key, * * @return 0 on success, a negative value on failure */ -BOTAN_DLL int botan_pubkey_load_elgamal(botan_pubkey_t* key, +BOTAN_PUBLIC_API(2,0) int botan_pubkey_load_elgamal(botan_pubkey_t* key, botan_mp_t p, botan_mp_t g, botan_mp_t y); @@ -908,7 +908,7 @@ BOTAN_DLL int botan_pubkey_load_elgamal(botan_pubkey_t* key, * * @return 0 on success, a negative value on failure */ -BOTAN_DLL int botan_privkey_load_elgamal(botan_privkey_t* key, +BOTAN_PUBLIC_API(2,0) int botan_privkey_load_elgamal(botan_privkey_t* key, botan_mp_t p, botan_mp_t g, botan_mp_t x); @@ -917,76 +917,85 @@ BOTAN_DLL int botan_privkey_load_elgamal(botan_privkey_t* key, * Algorithm specific key operations: Ed25519 */ -BOTAN_DLL int botan_privkey_load_ed25519(botan_privkey_t* key, +BOTAN_PUBLIC_API(2,2) int botan_privkey_load_ed25519(botan_privkey_t* key, const uint8_t privkey[32]); -BOTAN_DLL int botan_pubkey_load_ed25519(botan_pubkey_t* key, +BOTAN_PUBLIC_API(2,2) int botan_pubkey_load_ed25519(botan_pubkey_t* key, const uint8_t pubkey[32]); -BOTAN_DLL int botan_privkey_ed25519_get_privkey(botan_privkey_t key, +BOTAN_PUBLIC_API(2,2) int botan_privkey_ed25519_get_privkey(botan_privkey_t key, uint8_t output[64]); -BOTAN_DLL int botan_pubkey_ed25519_get_pubkey(botan_pubkey_t key, +BOTAN_PUBLIC_API(2,2) int botan_pubkey_ed25519_get_pubkey(botan_pubkey_t key, uint8_t pubkey[32]); /* * Algorithm specific key operations: ECDSA and ECDH */ -BOTAN_DLL int botan_privkey_load_ecdsa(botan_privkey_t* key, - const botan_mp_t scalar, - const char* curve_name); - -BOTAN_DLL int botan_pubkey_load_ecdsa(botan_pubkey_t* key, - const botan_mp_t public_x, - const botan_mp_t public_y, - const char* curve_name); - -BOTAN_DLL int botan_pubkey_load_ecdh(botan_pubkey_t* key, - const botan_mp_t public_x, - const botan_mp_t public_y, - const char* curve_name); - -BOTAN_DLL int botan_privkey_load_ecdh(botan_privkey_t* key, - const botan_mp_t scalar, - const char* curve_name); - -BOTAN_DLL int botan_pubkey_load_sm2(botan_pubkey_t* key, - const botan_mp_t public_x, - const botan_mp_t public_y, - const char* curve_name); - -BOTAN_DLL int botan_privkey_load_sm2(botan_privkey_t* key, - const botan_mp_t scalar, - const char* curve_name); - -BOTAN_DLL int botan_pubkey_load_sm2_enc(botan_pubkey_t* key, - const botan_mp_t public_x, - const botan_mp_t public_y, - const char* curve_name); - -BOTAN_DLL int botan_privkey_load_sm2_enc(botan_privkey_t* key, - const botan_mp_t scalar, - const char* curve_name); - -BOTAN_DLL int botan_pubkey_sm2_compute_za(uint8_t out[], - size_t* out_len, - const char* ident, - const char* hash_algo, - const botan_pubkey_t key); +BOTAN_PUBLIC_API(2,2) +int botan_privkey_load_ecdsa(botan_privkey_t* key, + const botan_mp_t scalar, + const char* curve_name); + +BOTAN_PUBLIC_API(2,2) +int botan_pubkey_load_ecdsa(botan_pubkey_t* key, + const botan_mp_t public_x, + const botan_mp_t public_y, + const char* curve_name); + +BOTAN_PUBLIC_API(2,2) +int botan_pubkey_load_ecdh(botan_pubkey_t* key, + const botan_mp_t public_x, + const botan_mp_t public_y, + const char* curve_name); + +BOTAN_PUBLIC_API(2,2) +int botan_privkey_load_ecdh(botan_privkey_t* key, + const botan_mp_t scalar, + const char* curve_name); + +BOTAN_PUBLIC_API(2,2) +int botan_pubkey_load_sm2(botan_pubkey_t* key, + const botan_mp_t public_x, + const botan_mp_t public_y, + const char* curve_name); + +BOTAN_PUBLIC_API(2,2) +int botan_privkey_load_sm2(botan_privkey_t* key, + const botan_mp_t scalar, + const char* curve_name); + +BOTAN_PUBLIC_API(2,2) +int botan_pubkey_load_sm2_enc(botan_pubkey_t* key, + const botan_mp_t public_x, + const botan_mp_t public_y, + const char* curve_name); + +BOTAN_PUBLIC_API(2,2) +int botan_privkey_load_sm2_enc(botan_privkey_t* key, + const botan_mp_t scalar, + const char* curve_name); + +BOTAN_PUBLIC_API(2,3) +int botan_pubkey_sm2_compute_za(uint8_t out[], + size_t* out_len, + const char* ident, + const char* hash_algo, + const botan_pubkey_t key); /* * Public Key Encryption */ typedef struct botan_pk_op_encrypt_struct* botan_pk_op_encrypt_t; -BOTAN_DLL int botan_pk_op_encrypt_create(botan_pk_op_encrypt_t* op, +BOTAN_PUBLIC_API(2,0) int botan_pk_op_encrypt_create(botan_pk_op_encrypt_t* op, botan_pubkey_t key, const char* padding, uint32_t flags); -BOTAN_DLL int botan_pk_op_encrypt_destroy(botan_pk_op_encrypt_t op); +BOTAN_PUBLIC_API(2,0) int botan_pk_op_encrypt_destroy(botan_pk_op_encrypt_t op); -BOTAN_DLL int botan_pk_op_encrypt(botan_pk_op_encrypt_t op, +BOTAN_PUBLIC_API(2,0) int botan_pk_op_encrypt(botan_pk_op_encrypt_t op, botan_rng_t rng, uint8_t out[], size_t* out_len, const uint8_t plaintext[], size_t plaintext_len); @@ -996,13 +1005,13 @@ BOTAN_DLL int botan_pk_op_encrypt(botan_pk_op_encrypt_t op, */ typedef struct botan_pk_op_decrypt_struct* botan_pk_op_decrypt_t; -BOTAN_DLL int botan_pk_op_decrypt_create(botan_pk_op_decrypt_t* op, +BOTAN_PUBLIC_API(2,0) int botan_pk_op_decrypt_create(botan_pk_op_decrypt_t* op, botan_privkey_t key, const char* padding, uint32_t flags); -BOTAN_DLL int botan_pk_op_decrypt_destroy(botan_pk_op_decrypt_t op); +BOTAN_PUBLIC_API(2,0) int botan_pk_op_decrypt_destroy(botan_pk_op_decrypt_t op); -BOTAN_DLL int botan_pk_op_decrypt(botan_pk_op_decrypt_t op, +BOTAN_PUBLIC_API(2,0) int botan_pk_op_decrypt(botan_pk_op_decrypt_t op, uint8_t out[], size_t* out_len, const uint8_t ciphertext[], size_t ciphertext_len); @@ -1011,50 +1020,59 @@ BOTAN_DLL int botan_pk_op_decrypt(botan_pk_op_decrypt_t op, */ typedef struct botan_pk_op_sign_struct* botan_pk_op_sign_t; -BOTAN_DLL int botan_pk_op_sign_create(botan_pk_op_sign_t* op, - botan_privkey_t key, - const char* hash_and_padding, - uint32_t flags); -BOTAN_DLL int botan_pk_op_sign_destroy(botan_pk_op_sign_t op); +BOTAN_PUBLIC_API(2,0) +int botan_pk_op_sign_create(botan_pk_op_sign_t* op, + botan_privkey_t key, + const char* hash_and_padding, + uint32_t flags); + +BOTAN_PUBLIC_API(2,0) int botan_pk_op_sign_destroy(botan_pk_op_sign_t op); -BOTAN_DLL int botan_pk_op_sign_update(botan_pk_op_sign_t op, const uint8_t in[], size_t in_len); -BOTAN_DLL int botan_pk_op_sign_finish(botan_pk_op_sign_t op, botan_rng_t rng, - uint8_t sig[], size_t* sig_len); +BOTAN_PUBLIC_API(2,0) int botan_pk_op_sign_update(botan_pk_op_sign_t op, const uint8_t in[], size_t in_len); + +BOTAN_PUBLIC_API(2,0) +int botan_pk_op_sign_finish(botan_pk_op_sign_t op, botan_rng_t rng, + uint8_t sig[], size_t* sig_len); /* * Signature Verification */ typedef struct botan_pk_op_verify_struct* botan_pk_op_verify_t; -BOTAN_DLL int botan_pk_op_verify_create(botan_pk_op_verify_t* op, - botan_pubkey_t key, - const char* hash_and_padding, - uint32_t flags); -BOTAN_DLL int botan_pk_op_verify_destroy(botan_pk_op_verify_t op); +BOTAN_PUBLIC_API(2,0) +int botan_pk_op_verify_create(botan_pk_op_verify_t* op, + botan_pubkey_t key, + const char* hash_and_padding, + uint32_t flags); + +BOTAN_PUBLIC_API(2,0) int botan_pk_op_verify_destroy(botan_pk_op_verify_t op); -BOTAN_DLL int botan_pk_op_verify_update(botan_pk_op_verify_t op, const uint8_t in[], size_t in_len); -BOTAN_DLL int botan_pk_op_verify_finish(botan_pk_op_verify_t op, const uint8_t sig[], size_t sig_len); +BOTAN_PUBLIC_API(2,0) int botan_pk_op_verify_update(botan_pk_op_verify_t op, const uint8_t in[], size_t in_len); +BOTAN_PUBLIC_API(2,0) int botan_pk_op_verify_finish(botan_pk_op_verify_t op, const uint8_t sig[], size_t sig_len); /* * Key Agreement */ typedef struct botan_pk_op_ka_struct* botan_pk_op_ka_t; -BOTAN_DLL int botan_pk_op_key_agreement_create(botan_pk_op_ka_t* op, - botan_privkey_t key, - const char* kdf, - uint32_t flags); -BOTAN_DLL int botan_pk_op_key_agreement_destroy(botan_pk_op_ka_t op); +BOTAN_PUBLIC_API(2,0) +int botan_pk_op_key_agreement_create(botan_pk_op_ka_t* op, + botan_privkey_t key, + const char* kdf, + uint32_t flags); + +BOTAN_PUBLIC_API(2,0) int botan_pk_op_key_agreement_destroy(botan_pk_op_ka_t op); -BOTAN_DLL int botan_pk_op_key_agreement_export_public(botan_privkey_t key, +BOTAN_PUBLIC_API(2,0) int botan_pk_op_key_agreement_export_public(botan_privkey_t key, uint8_t out[], size_t* out_len); -BOTAN_DLL int botan_pk_op_key_agreement(botan_pk_op_ka_t op, - uint8_t out[], size_t* out_len, - const uint8_t other_key[], size_t other_key_len, - const uint8_t salt[], size_t salt_len); +BOTAN_PUBLIC_API(2,0) +int botan_pk_op_key_agreement(botan_pk_op_ka_t op, + uint8_t out[], size_t* out_len, + const uint8_t other_key[], size_t other_key_len, + const uint8_t salt[], size_t salt_len); -BOTAN_DLL int botan_pkcs_hash_id(const char* hash_name, uint8_t pkcs_id[], size_t* pkcs_id_len); +BOTAN_PUBLIC_API(2,0) int botan_pkcs_hash_id(const char* hash_name, uint8_t pkcs_id[], size_t* pkcs_id_len); /* @@ -1062,56 +1080,59 @@ BOTAN_DLL int botan_pkcs_hash_id(const char* hash_name, uint8_t pkcs_id[], size_ * @param mce_key must be a McEliece key * ct_len should be pt_len + n/8 + a few? */ -BOTAN_DLL int botan_mceies_encrypt(botan_pubkey_t mce_key, - botan_rng_t rng, - const char* aead, - const uint8_t pt[], size_t pt_len, - const uint8_t ad[], size_t ad_len, - uint8_t ct[], size_t* ct_len); - -BOTAN_DLL int botan_mceies_decrypt(botan_privkey_t mce_key, - const char* aead, - const uint8_t ct[], size_t ct_len, - const uint8_t ad[], size_t ad_len, - uint8_t pt[], size_t* pt_len); - - +BOTAN_PUBLIC_API(2,0) +int botan_mceies_encrypt(botan_pubkey_t mce_key, + botan_rng_t rng, + const char* aead, + const uint8_t pt[], size_t pt_len, + const uint8_t ad[], size_t ad_len, + uint8_t ct[], size_t* ct_len); + +BOTAN_PUBLIC_API(2,0) +int botan_mceies_decrypt(botan_privkey_t mce_key, + const char* aead, + const uint8_t ct[], size_t ct_len, + const uint8_t ad[], size_t ad_len, + uint8_t pt[], size_t* pt_len); typedef struct botan_x509_cert_struct* botan_x509_cert_t; -BOTAN_DLL int botan_x509_cert_load(botan_x509_cert_t* cert_obj, const uint8_t cert[], size_t cert_len); -BOTAN_DLL int botan_x509_cert_load_file(botan_x509_cert_t* cert_obj, const char* filename); -BOTAN_DLL int botan_x509_cert_destroy(botan_x509_cert_t cert); +BOTAN_PUBLIC_API(2,0) int botan_x509_cert_load(botan_x509_cert_t* cert_obj, const uint8_t cert[], size_t cert_len); +BOTAN_PUBLIC_API(2,0) int botan_x509_cert_load_file(botan_x509_cert_t* cert_obj, const char* filename); +BOTAN_PUBLIC_API(2,0) int botan_x509_cert_destroy(botan_x509_cert_t cert); -BOTAN_DLL int botan_x509_cert_gen_selfsigned(botan_x509_cert_t* cert, - botan_privkey_t key, - botan_rng_t rng, - const char* common_name, - const char* org_name); +BOTAN_PUBLIC_API(2,0) +int botan_x509_cert_gen_selfsigned(botan_x509_cert_t* cert, + botan_privkey_t key, + botan_rng_t rng, + const char* common_name, + const char* org_name); // TODO: return botan_time_struct instead -BOTAN_DLL int botan_x509_cert_get_time_starts(botan_x509_cert_t cert, char out[], size_t* out_len); -BOTAN_DLL int botan_x509_cert_get_time_expires(botan_x509_cert_t cert, char out[], size_t* out_len); +BOTAN_PUBLIC_API(2,0) int botan_x509_cert_get_time_starts(botan_x509_cert_t cert, char out[], size_t* out_len); +BOTAN_PUBLIC_API(2,0) int botan_x509_cert_get_time_expires(botan_x509_cert_t cert, char out[], size_t* out_len); -BOTAN_DLL int botan_x509_cert_get_fingerprint(botan_x509_cert_t cert, const char* hash, uint8_t out[], size_t* out_len); +BOTAN_PUBLIC_API(2,0) int botan_x509_cert_get_fingerprint(botan_x509_cert_t cert, const char* hash, uint8_t out[], size_t* out_len); -BOTAN_DLL int botan_x509_cert_get_serial_number(botan_x509_cert_t cert, uint8_t out[], size_t* out_len); -BOTAN_DLL int botan_x509_cert_get_authority_key_id(botan_x509_cert_t cert, uint8_t out[], size_t* out_len); -BOTAN_DLL int botan_x509_cert_get_subject_key_id(botan_x509_cert_t cert, uint8_t out[], size_t* out_len); +BOTAN_PUBLIC_API(2,0) int botan_x509_cert_get_serial_number(botan_x509_cert_t cert, uint8_t out[], size_t* out_len); +BOTAN_PUBLIC_API(2,0) int botan_x509_cert_get_authority_key_id(botan_x509_cert_t cert, uint8_t out[], size_t* out_len); +BOTAN_PUBLIC_API(2,0) int botan_x509_cert_get_subject_key_id(botan_x509_cert_t cert, uint8_t out[], size_t* out_len); -BOTAN_DLL int botan_x509_cert_get_public_key_bits(botan_x509_cert_t cert, +BOTAN_PUBLIC_API(2,0) int botan_x509_cert_get_public_key_bits(botan_x509_cert_t cert, uint8_t out[], size_t* out_len); -BOTAN_DLL int botan_x509_cert_get_public_key(botan_x509_cert_t cert, botan_pubkey_t* key); +BOTAN_PUBLIC_API(2,0) int botan_x509_cert_get_public_key(botan_x509_cert_t cert, botan_pubkey_t* key); -BOTAN_DLL int botan_x509_cert_get_issuer_dn(botan_x509_cert_t cert, - const char* key, size_t index, - uint8_t out[], size_t* out_len); +BOTAN_PUBLIC_API(2,0) +int botan_x509_cert_get_issuer_dn(botan_x509_cert_t cert, + const char* key, size_t index, + uint8_t out[], size_t* out_len); -BOTAN_DLL int botan_x509_cert_get_subject_dn(botan_x509_cert_t cert, - const char* key, size_t index, - uint8_t out[], size_t* out_len); +BOTAN_PUBLIC_API(2,0) +int botan_x509_cert_get_subject_dn(botan_x509_cert_t cert, + const char* key, size_t index, + uint8_t out[], size_t* out_len); -BOTAN_DLL int botan_x509_cert_to_string(botan_x509_cert_t cert, char out[], size_t* out_len); +BOTAN_PUBLIC_API(2,0) int botan_x509_cert_to_string(botan_x509_cert_t cert, char out[], size_t* out_len); // Must match values of Key_Constraints in key_constraints.h enum botan_x509_cert_key_constraints { @@ -1127,18 +1148,20 @@ enum botan_x509_cert_key_constraints { DECIPHER_ONLY = 128 }; -BOTAN_DLL int botan_x509_cert_allowed_usage(botan_x509_cert_t cert, unsigned int key_usage); +BOTAN_PUBLIC_API(2,0) int botan_x509_cert_allowed_usage(botan_x509_cert_t cert, unsigned int key_usage); /** * Key wrapping as per RFC 3394 */ -BOTAN_DLL int botan_key_wrap3394(const uint8_t key[], size_t key_len, - const uint8_t kek[], size_t kek_len, - uint8_t wrapped_key[], size_t *wrapped_key_len); +BOTAN_PUBLIC_API(2,2) +int botan_key_wrap3394(const uint8_t key[], size_t key_len, + const uint8_t kek[], size_t kek_len, + uint8_t wrapped_key[], size_t *wrapped_key_len); -BOTAN_DLL int botan_key_unwrap3394(const uint8_t wrapped_key[], size_t wrapped_key_len, - const uint8_t kek[], size_t kek_len, - uint8_t key[], size_t *key_len); +BOTAN_PUBLIC_API(2,2) +int botan_key_unwrap3394(const uint8_t wrapped_key[], size_t wrapped_key_len, + const uint8_t kek[], size_t kek_len, + uint8_t key[], size_t *key_len); /* * TLS (WIP) @@ -1147,15 +1170,15 @@ BOTAN_DLL int botan_key_unwrap3394(const uint8_t wrapped_key[], size_t wrapped_k typedef struct botan_tls_session_struct* botan_tls_session_t; -BOTAN_DLL int botan_tls_session_decrypt(botan_tls_session_t* session, +BOTAN_TEST_API int botan_tls_session_decrypt(botan_tls_session_t* session, const uint8_t key[], size_t key_len, const uint8_t blob[], size_t blob_len); -BOTAN_DLL int botan_tls_session_get_version(botan_tls_session_t session, uint16_t* tls_version); -BOTAN_DLL int botan_tls_session_get_ciphersuite(botan_tls_session_t session, uint16_t* ciphersuite); -BOTAN_DLL int botan_tls_session_encrypt(botan_tls_session_t session, botan_rng_t rng, uint8_t key[], size_t* key_len); +BOTAN_TEST_API int botan_tls_session_get_version(botan_tls_session_t session, uint16_t* tls_version); +BOTAN_TEST_API int botan_tls_session_get_ciphersuite(botan_tls_session_t session, uint16_t* ciphersuite); +BOTAN_TEST_API int botan_tls_session_encrypt(botan_tls_session_t session, botan_rng_t rng, uint8_t key[], size_t* key_len); -BOTAN_DLL int botan_tls_session_get_peer_certs(botan_tls_session_t session, botan_x509_cert_t certs[], size_t* cert_len); +BOTAN_TEST_API int botan_tls_session_get_peer_certs(botan_tls_session_t session, botan_x509_cert_t certs[], size_t* cert_len); // TODO: peer certs, validation, ... @@ -1171,33 +1194,33 @@ typedef void (*botan_tls_channel_session_established)(void* application_data, botan_tls_channel_t channel, botan_tls_session_t session); -BOTAN_DLL int botan_tls_channel_init_client(botan_tls_channel_t* channel, +BOTAN_TEST_API int botan_tls_channel_init_client(botan_tls_channel_t* channel, botan_tls_channel_output_fn output_fn, botan_tls_channel_data_cb data_cb, botan_tls_channel_alert_cb alert_cb, botan_tls_channel_session_established session_cb, const char* server_name); -BOTAN_DLL int botan_tls_channel_init_server(botan_tls_channel_t* channel, +BOTAN_TEST_API int botan_tls_channel_init_server(botan_tls_channel_t* channel, botan_tls_channel_output_fn output_fn, botan_tls_channel_data_cb data_cb, botan_tls_channel_alert_cb alert_cb, botan_tls_channel_session_established session_cb); -BOTAN_DLL int botan_tls_channel_received_data(botan_tls_channel_t chan, +BOTAN_TEST_API int botan_tls_channel_received_data(botan_tls_channel_t chan, const uint8_t input[], size_t len); /** * Returns 0 for client, 1 for server, negative for error */ -BOTAN_DLL int botan_tls_channel_type(botan_tls_channel_t chan); +BOTAN_TEST_API int botan_tls_channel_type(botan_tls_channel_t chan); -BOTAN_DLL int botan_tls_channel_send(botan_tls_channel_t chan, +BOTAN_TEST_API int botan_tls_channel_send(botan_tls_channel_t chan, const uint8_t input[], size_t len); -BOTAN_DLL int botan_tls_channel_close(botan_tls_channel_t chan); +BOTAN_TEST_API int botan_tls_channel_close(botan_tls_channel_t chan); -BOTAN_DLL int botan_tls_channel_destroy(botan_tls_channel_t chan); +BOTAN_TEST_API int botan_tls_channel_destroy(botan_tls_channel_t chan); #endif #ifdef __cplusplus |