Botan
1.11.15
|
#include <botan/build.h>
#include <stdint.h>
#include <stddef.h>
Go to the source code of this file.
Defines | |
#define | BOTAN_CIPHER_INIT_FLAG_DECRYPT 1 |
#define | BOTAN_CIPHER_INIT_FLAG_ENCRYPT 0 |
#define | BOTAN_CIPHER_INIT_FLAG_MASK_DIRECTION 1 |
#define | BOTAN_CIPHER_UPDATE_FLAG_FINAL (1U << 0) |
#define | BOTAN_FFI_ERROR_BAD_FLAG (-30) |
#define | BOTAN_FFI_ERROR_EXCEPTION_THROWN (-20) |
#define | BOTAN_FFI_ERROR_NULL_POINTER (-31) |
#define | BOTAN_FFI_ERROR_NULL_POINTER (-31) |
#define | BOTAN_PRIVKEY_EXPORT_FLAG_DER 0 |
#define | BOTAN_PRIVKEY_EXPORT_FLAG_PEM 1 |
Typedefs | |
typedef struct botan_cipher_struct * | botan_cipher_t |
typedef struct botan_hash_struct * | botan_hash_t |
typedef struct botan_mac_struct * | botan_mac_t |
typedef struct botan_pk_op_decrypt_struct * | botan_pk_op_decrypt_t |
typedef struct botan_pk_op_encrypt_struct * | botan_pk_op_encrypt_t |
typedef struct botan_pk_op_ka_struct * | botan_pk_op_ka_t |
typedef struct botan_pk_op_sign_struct * | botan_pk_op_sign_t |
typedef struct botan_pk_op_verify_struct * | botan_pk_op_verify_t |
typedef struct botan_privkey_struct * | botan_privkey_t |
typedef struct botan_pubkey_struct * | botan_pubkey_t |
typedef struct botan_rng_struct * | botan_rng_t |
Functions | |
BOTAN_DLL int | botan_cipher_clear (botan_cipher_t hash) |
BOTAN_DLL int | botan_cipher_destroy (botan_cipher_t cipher) |
BOTAN_DLL int | botan_cipher_get_default_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_init (botan_cipher_t *cipher, const char *name, uint32_t flags) |
BOTAN_DLL int | botan_cipher_set_associated_data (botan_cipher_t cipher, const uint8_t *ad, size_t ad_len) |
BOTAN_DLL int | botan_cipher_set_key (botan_cipher_t cipher, const uint8_t *key, size_t key_len) |
BOTAN_DLL int | botan_cipher_start (botan_cipher_t cipher, const uint8_t *nonce, size_t nonce_len) |
BOTAN_DLL int | botan_cipher_update (botan_cipher_t cipher, uint32_t flags, uint8_t output[], size_t output_size, size_t *output_written, const uint8_t input_bytes[], size_t input_size, size_t *input_consumed) |
BOTAN_DLL int | botan_cipher_valid_nonce_length (botan_cipher_t cipher, size_t nl) |
BOTAN_DLL uint32_t | botan_ffi_api_version () |
BOTAN_DLL int | botan_hash_clear (botan_hash_t hash) |
BOTAN_DLL int | botan_hash_destroy (botan_hash_t hash) |
BOTAN_DLL int | botan_hash_final (botan_hash_t hash, uint8_t out[]) |
BOTAN_DLL int | botan_hash_init (botan_hash_t *hash, const char *hash_name, uint32_t flags) |
BOTAN_DLL int | botan_hash_output_length (botan_hash_t hash, size_t *output_length) |
BOTAN_DLL int | botan_hash_update (botan_hash_t hash, const uint8_t *in, size_t in_len) |
BOTAN_DLL 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) |
BOTAN_DLL int | botan_mac_clear (botan_mac_t hash) |
BOTAN_DLL int | botan_mac_destroy (botan_mac_t mac) |
BOTAN_DLL int | botan_mac_final (botan_mac_t mac, uint8_t out[]) |
BOTAN_DLL int | botan_mac_init (botan_mac_t *mac, const char *mac_name, uint32_t flags) |
BOTAN_DLL int | botan_mac_output_length (botan_mac_t mac, size_t *output_length) |
BOTAN_DLL int | botan_mac_set_key (botan_mac_t mac, const uint8_t *key, size_t key_len) |
BOTAN_DLL int | botan_mac_update (botan_mac_t mac, const uint8_t *buf, size_t len) |
BOTAN_DLL int | botan_pbkdf (const char *pbkdf_algo, uint8_t out[], size_t out_len, const char *password, const uint8_t salt[], size_t salt_len, size_t iterations) |
BOTAN_DLL int | botan_pbkdf_timed (const char *pbkdf_algo, uint8_t out[], size_t out_len, const char *password, const uint8_t salt[], size_t salt_len, size_t milliseconds_to_run, size_t *out_iterations_used) |
BOTAN_DLL int | botan_pk_op_decrypt (botan_pk_op_decrypt_t op, uint8_t out[], size_t *out_len, uint8_t ciphertext[], size_t ciphertext_len) |
BOTAN_DLL 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_DLL 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) |
BOTAN_DLL 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_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_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_DLL 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_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_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_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_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_DLL int | botan_pk_op_verify_finish (botan_pk_op_verify_t op, const uint8_t sig[], size_t sig_len) |
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_privkey_create_ecdh (botan_privkey_t *key, botan_rng_t rng, const char *params) |
BOTAN_DLL int | botan_privkey_create_ecdsa (botan_privkey_t *key, botan_rng_t rng, const char *params) |
BOTAN_DLL int | botan_privkey_create_rsa (botan_privkey_t *key, botan_rng_t rng, size_t n_bits) |
BOTAN_DLL int | botan_privkey_destroy (botan_privkey_t key) |
BOTAN_DLL int | botan_privkey_export (botan_privkey_t key, uint8_t out[], size_t *out_len, uint32_t flags) |
BOTAN_DLL int | botan_privkey_export_encrypted (botan_privkey_t key, uint8_t out[], size_t *out_len, botan_rng_t rng, const char *passphrase, const char *encryption_algo, uint32_t flags) |
BOTAN_DLL int | botan_privkey_export_pubkey (botan_pubkey_t *out, botan_privkey_t in) |
BOTAN_DLL 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_pubkey_algo_name (botan_pubkey_t key, char out[], size_t *out_len) |
BOTAN_DLL int | botan_pubkey_destroy (botan_privkey_t key) |
BOTAN_DLL int | botan_pubkey_estimated_strength (botan_pubkey_t key, size_t *estimate) |
BOTAN_DLL int | botan_pubkey_export (botan_pubkey_t key, uint8_t out[], size_t *out_len, uint32_t flags) |
BOTAN_DLL int | botan_pubkey_fingerprint (botan_pubkey_t key, const char *hash, uint8_t out[], size_t *out_len) |
BOTAN_DLL int | botan_pubkey_load (botan_pubkey_t *key, const uint8_t bits[], size_t len) |
BOTAN_DLL int | botan_rng_destroy (botan_rng_t rng) |
BOTAN_DLL int | botan_rng_get (botan_rng_t rng, uint8_t *out, size_t out_len) |
BOTAN_DLL int | botan_rng_init (botan_rng_t *rng, const char *rng_type) |
BOTAN_DLL int | botan_rng_reseed (botan_rng_t rng, size_t bits) |
BOTAN_DLL int | botan_same_mem (const uint8_t *x, const uint8_t *y, size_t len) |
BOTAN_DLL uint32_t | botan_version_datestamp () |
BOTAN_DLL uint32_t | botan_version_major () |
BOTAN_DLL uint32_t | botan_version_minor () |
BOTAN_DLL uint32_t | botan_version_patch () |
BOTAN_DLL const char * | botan_version_string () |
#define BOTAN_CIPHER_INIT_FLAG_DECRYPT 1 |
#define BOTAN_CIPHER_INIT_FLAG_ENCRYPT 0 |
Definition at line 94 of file ffi.h.
Referenced by botan_cipher_init().
#define BOTAN_CIPHER_INIT_FLAG_MASK_DIRECTION 1 |
Definition at line 93 of file ffi.h.
Referenced by botan_cipher_init().
#define BOTAN_CIPHER_UPDATE_FLAG_FINAL (1U << 0) |
Definition at line 112 of file ffi.h.
Referenced by botan_cipher_update().
#define BOTAN_FFI_ERROR_BAD_FLAG (-30) |
Definition at line 42 of file ffi.h.
Referenced by botan_hash_init(), botan_pk_op_decrypt_create(), botan_pk_op_encrypt_create(), botan_pk_op_key_agreement_create(), botan_pk_op_sign_create(), and botan_pk_op_verify_create().
#define BOTAN_FFI_ERROR_EXCEPTION_THROWN (-20) |
Definition at line 41 of file ffi.h.
Referenced by botan_hash_init(), botan_pk_op_sign_create(), botan_privkey_create_ecdh(), botan_privkey_create_ecdsa(), botan_privkey_create_rsa(), botan_privkey_export_pubkey(), and botan_privkey_load().
#define BOTAN_FFI_ERROR_NULL_POINTER (-31) |
Definition at line 44 of file ffi.h.
Referenced by botan_hash_init().
#define BOTAN_FFI_ERROR_NULL_POINTER (-31) |
#define BOTAN_PRIVKEY_EXPORT_FLAG_DER 0 |
Definition at line 192 of file ffi.h.
Referenced by botan_privkey_export(), botan_privkey_export_encrypted(), and botan_pubkey_export().
#define BOTAN_PRIVKEY_EXPORT_FLAG_PEM 1 |
Definition at line 193 of file ffi.h.
Referenced by botan_privkey_export(), botan_privkey_export_encrypted(), and botan_pubkey_export().
typedef struct botan_cipher_struct* botan_cipher_t |
typedef struct botan_hash_struct* botan_hash_t |
typedef struct botan_mac_struct* botan_mac_t |
typedef struct botan_pk_op_decrypt_struct* botan_pk_op_decrypt_t |
typedef struct botan_pk_op_encrypt_struct* botan_pk_op_encrypt_t |
typedef struct botan_pk_op_ka_struct* botan_pk_op_ka_t |
typedef struct botan_pk_op_sign_struct* botan_pk_op_sign_t |
typedef struct botan_pk_op_verify_struct* botan_pk_op_verify_t |
typedef struct botan_privkey_struct* botan_privkey_t |
typedef struct botan_pubkey_struct* botan_pubkey_t |
typedef struct botan_rng_struct* botan_rng_t |
BOTAN_DLL int botan_cipher_clear | ( | botan_cipher_t | hash | ) |
Definition at line 422 of file ffi.cpp.
References BOTAN_FFI_DO, and Botan::Transform::clear().
{ return BOTAN_FFI_DO(Botan::Cipher_Mode, cipher, { cipher.clear(); }); }
BOTAN_DLL int botan_cipher_destroy | ( | botan_cipher_t | cipher | ) |
BOTAN_DLL int botan_cipher_get_default_nonce_length | ( | botan_cipher_t | cipher, |
size_t * | nl | ||
) |
Definition at line 575 of file ffi.cpp.
References BOTAN_FFI_DO, and Botan::Transform::default_nonce_length().
{ return BOTAN_FFI_DO(Botan::Cipher_Mode, cipher, { *nl = cipher.default_nonce_length(); }); }
BOTAN_DLL int botan_cipher_get_tag_length | ( | botan_cipher_t | cipher, |
size_t * | tag_size | ||
) |
Definition at line 580 of file ffi.cpp.
References BOTAN_FFI_DO, and Botan::Cipher_Mode::tag_size().
{ return BOTAN_FFI_DO(Botan::Cipher_Mode, cipher, { *tl = cipher.tag_size(); }); }
BOTAN_DLL int botan_cipher_init | ( | botan_cipher_t * | cipher, |
const char * | name, | ||
uint32_t | flags | ||
) |
Definition at line 392 of file ffi.cpp.
References BOTAN_CIPHER_INIT_FLAG_ENCRYPT, BOTAN_CIPHER_INIT_FLAG_MASK_DIRECTION, Botan::DECRYPTION, Botan::ENCRYPTION, and Botan::get_cipher_mode().
{ try { const bool encrypt_p = ((flags & BOTAN_CIPHER_INIT_FLAG_MASK_DIRECTION) == BOTAN_CIPHER_INIT_FLAG_ENCRYPT); const Botan::Cipher_Dir dir = encrypt_p ? Botan::ENCRYPTION : Botan::DECRYPTION; std::unique_ptr<Botan::Cipher_Mode> mode(Botan::get_cipher_mode(cipher_name, dir)); if(!mode) return -1; *cipher = new botan_cipher_struct(mode.release()); return 0; } catch(std::exception& e) { log_exception(BOTAN_CURRENT_FUNCTION, e.what()); } catch(...) { log_exception(BOTAN_CURRENT_FUNCTION, "unknown"); } return -1; }
BOTAN_DLL int botan_cipher_set_associated_data | ( | botan_cipher_t | cipher, |
const uint8_t * | ad, | ||
size_t | ad_len | ||
) |
Definition at line 556 of file ffi.cpp.
References BOTAN_FFI_DO.
{ return BOTAN_FFI_DO(Botan::Cipher_Mode, cipher, { if(Botan::AEAD_Mode* aead = dynamic_cast<Botan::AEAD_Mode*>(&cipher)) { aead->set_associated_data(ad, ad_len); return 0; } return -1; }); }
BOTAN_DLL int botan_cipher_set_key | ( | botan_cipher_t | cipher, |
const uint8_t * | key, | ||
size_t | key_len | ||
) |
Definition at line 427 of file ffi.cpp.
References BOTAN_FFI_DO, and Botan::Keyed_Transform::set_key().
{ return BOTAN_FFI_DO(Botan::Cipher_Mode, cipher, { cipher.set_key(key, key_len); }); }
BOTAN_DLL int botan_cipher_start | ( | botan_cipher_t | cipher, |
const uint8_t * | nonce, | ||
size_t | nonce_len | ||
) |
Definition at line 433 of file ffi.cpp.
References BOTAN_ASSERT, Botan::Transform::start(), and Botan::Transform::update_granularity().
{ try { Botan::Cipher_Mode& cipher = safe_get(cipher_obj); BOTAN_ASSERT(cipher.start(nonce, nonce_len).empty(), "Ciphers have no prefix"); cipher_obj->m_buf.reserve(cipher.update_granularity()); return 0; } catch(std::exception& e) { log_exception(BOTAN_CURRENT_FUNCTION, e.what()); } return -1; }
BOTAN_DLL int botan_cipher_update | ( | botan_cipher_t | cipher, |
uint32_t | flags, | ||
uint8_t | output[], | ||
size_t | output_size, | ||
size_t * | output_written, | ||
const uint8_t | input_bytes[], | ||
size_t | input_size, | ||
size_t * | input_consumed | ||
) |
Definition at line 451 of file ffi.cpp.
References BOTAN_ASSERT, BOTAN_CIPHER_UPDATE_FLAG_FINAL, Botan::copy_mem(), Botan::Transform::finish(), Botan::Transform::minimum_final_size(), Botan::round_down(), Botan::Transform::update(), and Botan::Transform::update_granularity().
{ using namespace Botan; try { Cipher_Mode& cipher = safe_get(cipher_obj); secure_vector<uint8_t>& mbuf = cipher_obj->m_buf; const bool final_input = (flags & BOTAN_CIPHER_UPDATE_FLAG_FINAL); if(final_input) { mbuf.assign(input, input + input_size); *input_consumed = input_size; *output_written = 0; try { cipher.finish(mbuf); } catch(Integrity_Failure& e) { log_exception(BOTAN_CURRENT_FUNCTION, e.what()); return -2; } *output_written = mbuf.size(); if(mbuf.size() <= output_size) { copy_mem(output, &mbuf[0], mbuf.size()); mbuf.clear(); return 0; } return -1; } if(input_size == 0) { // Currently must take entire buffer in this case *output_written = mbuf.size(); if(output_size >= mbuf.size()) { copy_mem(output, &mbuf[0], mbuf.size()); mbuf.clear(); return 0; } return -1; } const size_t ud = cipher.update_granularity(); BOTAN_ASSERT(cipher.update_granularity() > cipher.minimum_final_size(), "logic error"); #if 0 // Avoiding double copy: if(Online_Cipher_Mode* ocm = dynamic_cast<Online_Cipher_Mode*>(&cipher)) { const size_t taken = round_down(input_size, ud); *input_consumed = taken; *output_size = taken; copy_mem(&output[0], input, taken); ocm->update_in_place(output, taken); return 0; } #endif mbuf.resize(ud); size_t taken = 0, written = 0; while(input_size >= ud && output_size >= ud) { copy_mem(&mbuf[0], input, ud); cipher.update(mbuf); input_size -= ud; input += ud; taken += ud; output_size -= ud; output += ud; written += ud; } *output_written = written; *input_consumed = taken; } catch(std::exception& e) { log_exception(BOTAN_CURRENT_FUNCTION, e.what()); } return -1; }
BOTAN_DLL int botan_cipher_valid_nonce_length | ( | botan_cipher_t | cipher, |
size_t | nl | ||
) |
Definition at line 570 of file ffi.cpp.
References BOTAN_FFI_DO, and Botan::Transform::valid_nonce_length().
{ return BOTAN_FFI_DO(Botan::Cipher_Mode, cipher, { return cipher.valid_nonce_length(nl) ? 1 : 0; }); }
BOTAN_DLL uint32_t botan_ffi_api_version | ( | ) |
BOTAN_DLL int botan_hash_clear | ( | botan_hash_t | hash | ) |
Definition at line 321 of file ffi.cpp.
References BOTAN_FFI_DO, and Botan::HashFunction::clear().
{ return BOTAN_FFI_DO(Botan::HashFunction, hash, { hash.clear(); }); }
BOTAN_DLL int botan_hash_destroy | ( | botan_hash_t | hash | ) |
BOTAN_DLL int botan_hash_final | ( | botan_hash_t | hash, |
uint8_t | out[] | ||
) |
Definition at line 331 of file ffi.cpp.
References BOTAN_FFI_DO, and Botan::Buffered_Computation::final().
{ return BOTAN_FFI_DO(Botan::HashFunction, hash, { hash.final(out); }); }
BOTAN_DLL int botan_hash_init | ( | botan_hash_t * | hash, |
const char * | hash_name, | ||
uint32_t | flags | ||
) |
Definition at line 283 of file ffi.cpp.
References BOTAN_FFI_ERROR_BAD_FLAG, BOTAN_FFI_ERROR_EXCEPTION_THROWN, BOTAN_FFI_ERROR_NULL_POINTER, and Botan::get_hash_function().
{ try { if(hash == nullptr || hash_name == nullptr || *hash_name == 0) return BOTAN_FFI_ERROR_NULL_POINTER; if(flags != 0) return BOTAN_FFI_ERROR_BAD_FLAG; if(auto h = Botan::get_hash_function(hash_name)) { *hash = new botan_hash_struct(h); return 0; } } catch(std::exception& e) { log_exception(BOTAN_CURRENT_FUNCTION, e.what()); } catch(...) { log_exception(BOTAN_CURRENT_FUNCTION, "unknown"); } return BOTAN_FFI_ERROR_EXCEPTION_THROWN; }
BOTAN_DLL int botan_hash_output_length | ( | botan_hash_t | hash, |
size_t * | output_length | ||
) |
Definition at line 316 of file ffi.cpp.
References BOTAN_FFI_DO, and Botan::Buffered_Computation::output_length().
{ return BOTAN_FFI_DO(Botan::HashFunction, hash, { *out = hash.output_length(); }); }
BOTAN_DLL int botan_hash_update | ( | botan_hash_t | hash, |
const uint8_t * | in, | ||
size_t | in_len | ||
) |
Definition at line 326 of file ffi.cpp.
References BOTAN_FFI_DO, and Botan::Buffered_Computation::update().
{ return BOTAN_FFI_DO(Botan::HashFunction, hash, { hash.update(buf, len); }); }
BOTAN_DLL 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 | ||
) |
Definition at line 624 of file ffi.cpp.
References Botan::get_kdf().
{ try { std::unique_ptr<Botan::KDF> kdf(Botan::get_kdf(kdf_algo)); kdf->kdf(out, out_len, secret, secret_len, salt, salt_len); } catch(std::exception& e) { log_exception(BOTAN_CURRENT_FUNCTION, e.what()); } return -1; }
BOTAN_DLL int botan_mac_clear | ( | botan_mac_t | hash | ) |
Definition at line 377 of file ffi.cpp.
References BOTAN_FFI_DO, and Botan::SymmetricAlgorithm::clear().
{ return BOTAN_FFI_DO(Botan::MessageAuthenticationCode, mac, { mac.clear(); }); }
BOTAN_DLL int botan_mac_destroy | ( | botan_mac_t | mac | ) |
BOTAN_DLL int botan_mac_final | ( | botan_mac_t | mac, |
uint8_t | out[] | ||
) |
Definition at line 387 of file ffi.cpp.
References BOTAN_FFI_DO, and Botan::Buffered_Computation::final().
{ return BOTAN_FFI_DO(Botan::MessageAuthenticationCode, mac, { mac.final(out); }); }
BOTAN_DLL int botan_mac_init | ( | botan_mac_t * | mac, |
const char * | mac_name, | ||
uint32_t | flags | ||
) |
Definition at line 336 of file ffi.cpp.
References Botan::get_mac().
{ try { if(!mac || !mac_name || flags != 0) return -1; if(auto m = Botan::get_mac(mac_name)) { *mac = new botan_mac_struct(m); return 0; } } catch(std::exception& e) { log_exception(BOTAN_CURRENT_FUNCTION, e.what()); } catch(...) { log_exception(BOTAN_CURRENT_FUNCTION, "unknown"); } return -2; }
BOTAN_DLL int botan_mac_output_length | ( | botan_mac_t | mac, |
size_t * | output_length | ||
) |
Definition at line 372 of file ffi.cpp.
References BOTAN_FFI_DO, and Botan::Buffered_Computation::output_length().
{ return BOTAN_FFI_DO(Botan::MessageAuthenticationCode, mac, { *out = mac.output_length(); }); }
BOTAN_DLL int botan_mac_set_key | ( | botan_mac_t | mac, |
const uint8_t * | key, | ||
size_t | key_len | ||
) |
Definition at line 367 of file ffi.cpp.
References BOTAN_FFI_DO, and Botan::SymmetricAlgorithm::set_key().
{ return BOTAN_FFI_DO(Botan::MessageAuthenticationCode, mac, { mac.set_key(key, key_len); }); }
BOTAN_DLL int botan_mac_update | ( | botan_mac_t | mac, |
const uint8_t * | buf, | ||
size_t | len | ||
) |
Definition at line 382 of file ffi.cpp.
References BOTAN_FFI_DO, and Botan::Buffered_Computation::update().
{ return BOTAN_FFI_DO(Botan::MessageAuthenticationCode, mac, { mac.update(buf, len); }); }
BOTAN_DLL int botan_pbkdf | ( | const char * | pbkdf_algo, |
uint8_t | out[], | ||
size_t | out_len, | ||
const char * | password, | ||
const uint8_t | salt[], | ||
size_t | salt_len, | ||
size_t | iterations | ||
) |
Definition at line 585 of file ffi.cpp.
References Botan::get_pbkdf().
{ try { std::unique_ptr<Botan::PBKDF> pbkdf(Botan::get_pbkdf(pbkdf_algo)); pbkdf->pbkdf_iterations(out, out_len, pass, salt, salt_len, iterations); } catch(std::exception& e) { log_exception(BOTAN_CURRENT_FUNCTION, e.what()); } return -1; }
BOTAN_DLL int botan_pbkdf_timed | ( | const char * | pbkdf_algo, |
uint8_t | out[], | ||
size_t | out_len, | ||
const char * | password, | ||
const uint8_t | salt[], | ||
size_t | salt_len, | ||
size_t | milliseconds_to_run, | ||
size_t * | out_iterations_used | ||
) |
Definition at line 602 of file ffi.cpp.
References Botan::get_pbkdf().
{ try { std::unique_ptr<Botan::PBKDF> pbkdf(Botan::get_pbkdf(pbkdf_algo)); pbkdf->pbkdf_timed(out, out_len, password, salt, salt_len, std::chrono::milliseconds(ms_to_run), *iterations_used); } catch(std::exception& e) { log_exception(BOTAN_CURRENT_FUNCTION, e.what()); } return -1; }
BOTAN_DLL int botan_pk_op_decrypt | ( | botan_pk_op_decrypt_t | op, |
uint8_t | out[], | ||
size_t * | out_len, | ||
uint8_t | ciphertext[], | ||
size_t | ciphertext_len | ||
) |
Definition at line 983 of file ffi.cpp.
References BOTAN_FFI_DO.
{ return BOTAN_FFI_DO(Botan::PK_Decryptor, op, { return write_vec_output(out, out_len, op.decrypt(ciphertext, ciphertext_len)); }); }
BOTAN_DLL int botan_pk_op_decrypt_create | ( | botan_pk_op_decrypt_t * | op, |
botan_privkey_t | key, | ||
const char * | padding, | ||
uint32_t | flags | ||
) |
Definition at line 953 of file ffi.cpp.
References BOTAN_ASSERT_NONNULL, and BOTAN_FFI_ERROR_BAD_FLAG.
{ try { BOTAN_ASSERT_NONNULL(op); if(flags != 0) return BOTAN_FFI_ERROR_BAD_FLAG; std::unique_ptr<Botan::PK_Decryptor> pk(new Botan::PK_Decryptor_EME(safe_get(key_obj), padding)); *op = new botan_pk_op_decrypt_struct(pk.release()); return 0; } catch(std::exception& e) { log_exception(BOTAN_CURRENT_FUNCTION, e.what()); } return -1; }
BOTAN_DLL int botan_pk_op_decrypt_destroy | ( | botan_pk_op_decrypt_t | op | ) |
BOTAN_DLL 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 | ||
) |
Definition at line 940 of file ffi.cpp.
References BOTAN_FFI_DO.
{ return BOTAN_FFI_DO(Botan::PK_Encryptor, op, { return write_vec_output(out, out_len, op.encrypt(plaintext, plaintext_len, safe_get(rng_obj))); }); }
BOTAN_DLL int botan_pk_op_encrypt_create | ( | botan_pk_op_encrypt_t * | op, |
botan_pubkey_t | key, | ||
const char * | padding, | ||
uint32_t | flags | ||
) |
Definition at line 910 of file ffi.cpp.
References BOTAN_ASSERT_NONNULL, and BOTAN_FFI_ERROR_BAD_FLAG.
{ try { BOTAN_ASSERT_NONNULL(op); if(flags != 0) return BOTAN_FFI_ERROR_BAD_FLAG; std::unique_ptr<Botan::PK_Encryptor> pk(new Botan::PK_Encryptor_EME(safe_get(key_obj), padding)); *op = new botan_pk_op_encrypt_struct(pk.release()); return 0; } catch(std::exception& e) { log_exception(BOTAN_CURRENT_FUNCTION, e.what()); } return -1; }
BOTAN_DLL int botan_pk_op_encrypt_destroy | ( | botan_pk_op_encrypt_t | op | ) |
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 | ||
) |
Definition at line 1124 of file ffi.cpp.
References Botan::OctetString::bits_of(), BOTAN_FFI_DO, and Botan::PK_Key_Agreement::derive_key().
{ return BOTAN_FFI_DO(Botan::PK_Key_Agreement, op, { auto k = op.derive_key(*out_len, other_key, other_key_len, salt, salt_len).bits_of(); return write_vec_output(out, out_len, k); }); }
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 | ||
) |
Definition at line 1084 of file ffi.cpp.
References BOTAN_ASSERT_NONNULL, and BOTAN_FFI_ERROR_BAD_FLAG.
{ try { BOTAN_ASSERT_NONNULL(op); if(flags != 0) return BOTAN_FFI_ERROR_BAD_FLAG; std::unique_ptr<Botan::PK_Key_Agreement> pk(new Botan::PK_Key_Agreement(safe_get(key_obj), kdf)); *op = new botan_pk_op_ka_struct(pk.release()); return 0; } catch(std::exception& e) { log_exception(BOTAN_CURRENT_FUNCTION, e.what()); } return -1; }
BOTAN_DLL 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, |
uint8_t | out[], | ||
size_t * | out_len | ||
) |
Definition at line 1114 of file ffi.cpp.
References BOTAN_FFI_DO.
{ return BOTAN_FFI_DO(Botan::Private_Key, key, { if(auto kak = dynamic_cast<const Botan::PK_Key_Agreement_Key*>(&key)) return write_vec_output(out, out_len, kak->public_value()); return -2; }); }
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 | ||
) |
Definition at line 995 of file ffi.cpp.
References BOTAN_ASSERT_NONNULL, BOTAN_FFI_ERROR_BAD_FLAG, and BOTAN_FFI_ERROR_EXCEPTION_THROWN.
{ try { BOTAN_ASSERT_NONNULL(op); if(flags != 0) return BOTAN_FFI_ERROR_BAD_FLAG; std::unique_ptr<Botan::PK_Signer> pk(new Botan::PK_Signer(safe_get(key_obj), hash)); *op = new botan_pk_op_sign_struct(pk.release()); return 0; } catch(std::exception& e) { log_exception(BOTAN_CURRENT_FUNCTION, e.what()); } return BOTAN_FFI_ERROR_EXCEPTION_THROWN; }
BOTAN_DLL int botan_pk_op_sign_destroy | ( | botan_pk_op_sign_t | op | ) |
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 | ||
) |
Definition at line 1030 of file ffi.cpp.
References BOTAN_FFI_DO.
{ return BOTAN_FFI_DO(Botan::PK_Signer, op, { return write_vec_output(out, out_len, op.signature(safe_get(rng_obj))); }); }
BOTAN_DLL int botan_pk_op_sign_update | ( | botan_pk_op_sign_t | op, |
const uint8_t | in[], | ||
size_t | in_len | ||
) |
Definition at line 1025 of file ffi.cpp.
References BOTAN_FFI_DO, and Botan::PK_Signer::update().
{ return BOTAN_FFI_DO(Botan::PK_Signer, op, { op.update(in, in_len); }); }
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 | ||
) |
Definition at line 1037 of file ffi.cpp.
References BOTAN_ASSERT_NONNULL, and BOTAN_FFI_ERROR_BAD_FLAG.
{ try { BOTAN_ASSERT_NONNULL(op); if(flags != 0) return BOTAN_FFI_ERROR_BAD_FLAG; std::unique_ptr<Botan::PK_Verifier> pk(new Botan::PK_Verifier(safe_get(key_obj), hash)); *op = new botan_pk_op_verify_struct(pk.release()); return 0; } catch(std::exception& e) { log_exception(BOTAN_CURRENT_FUNCTION, e.what()); } return -1; }
BOTAN_DLL int botan_pk_op_verify_destroy | ( | botan_pk_op_verify_t | op | ) |
BOTAN_DLL int botan_pk_op_verify_finish | ( | botan_pk_op_verify_t | op, |
const uint8_t | sig[], | ||
size_t | sig_len | ||
) |
Definition at line 1072 of file ffi.cpp.
References BOTAN_FFI_DO, and Botan::PK_Verifier::check_signature().
{ return BOTAN_FFI_DO(Botan::PK_Verifier, op, { const bool legit = op.check_signature(sig, sig_len); if(legit) return 0; else return 1; }); }
BOTAN_DLL int botan_pk_op_verify_update | ( | botan_pk_op_verify_t | op, |
const uint8_t | in[], | ||
size_t | in_len | ||
) |
Definition at line 1067 of file ffi.cpp.
References BOTAN_FFI_DO, and Botan::PK_Verifier::update().
{ return BOTAN_FFI_DO(Botan::PK_Verifier, op, { op.update(in, in_len); }); }
BOTAN_DLL int botan_privkey_create_ecdh | ( | botan_privkey_t * | key, |
botan_rng_t | rng, | ||
const char * | params | ||
) |
Definition at line 750 of file ffi.cpp.
References BOTAN_FFI_ERROR_EXCEPTION_THROWN.
{ try { if(key_obj == nullptr || rng_obj == nullptr || param_str == nullptr || *param_str == 0) return -1; *key_obj = nullptr; const std::string params(param_str); #if defined(BOTAN_HAS_CURVE_25519) if(params == "curve25519") { std::unique_ptr<Botan::Private_Key> key(new Botan::Curve25519_PrivateKey(safe_get(rng_obj))); *key_obj = new botan_privkey_struct(key.release()); return 0; } #endif #if defined(BOTAN_HAS_ECDH) Botan::EC_Group grp(params); std::unique_ptr<Botan::Private_Key> key(new Botan::ECDH_PrivateKey(safe_get(rng_obj), grp)); *key_obj = new botan_privkey_struct(key.release()); return 0; #endif } catch(std::exception& e) { log_exception(BOTAN_CURRENT_FUNCTION, e.what()); } return BOTAN_FFI_ERROR_EXCEPTION_THROWN; }
BOTAN_DLL int botan_privkey_create_ecdsa | ( | botan_privkey_t * | key, |
botan_rng_t | rng, | ||
const char * | params | ||
) |
Definition at line 725 of file ffi.cpp.
References BOTAN_FFI_ERROR_EXCEPTION_THROWN.
{ try { if(key_obj == nullptr || rng_obj == nullptr || param_str == nullptr || *param_str == 0) return -1; *key_obj = nullptr; #if defined(BOTAN_HAS_ECDSA) Botan::RandomNumberGenerator& rng = safe_get(rng_obj); Botan::EC_Group grp(param_str); std::unique_ptr<Botan::Private_Key> key(new Botan::ECDSA_PrivateKey(rng, grp)); *key_obj = new botan_privkey_struct(key.release()); return 0; #endif } catch(std::exception& e) { log_exception(BOTAN_CURRENT_FUNCTION, e.what()); } return BOTAN_FFI_ERROR_EXCEPTION_THROWN; }
BOTAN_DLL int botan_privkey_create_rsa | ( | botan_privkey_t * | key, |
botan_rng_t | rng, | ||
size_t | n_bits | ||
) |
Definition at line 698 of file ffi.cpp.
References BOTAN_FFI_ERROR_EXCEPTION_THROWN.
{ try { if(key_obj == nullptr || rng_obj == nullptr) return -1; if(n_bits < 1024 || n_bits > 16*1024) return -2; *key_obj = nullptr; #if defined(BOTAN_HAS_RSA) Botan::RandomNumberGenerator& rng = safe_get(rng_obj); std::unique_ptr<Botan::Private_Key> key(new Botan::RSA_PrivateKey(rng, n_bits)); *key_obj = new botan_privkey_struct(key.release()); return 0; #endif } catch(std::exception& e) { log_exception(BOTAN_CURRENT_FUNCTION, e.what()); } return BOTAN_FFI_ERROR_EXCEPTION_THROWN; }
BOTAN_DLL int botan_privkey_destroy | ( | botan_privkey_t | key | ) |
BOTAN_DLL int botan_privkey_export | ( | botan_privkey_t | key, |
uint8_t | out[], | ||
size_t * | out_len, | ||
uint32_t | flags | ||
) |
Definition at line 864 of file ffi.cpp.
References Botan::PKCS8::BER_encode(), BOTAN_FFI_DO, BOTAN_PRIVKEY_EXPORT_FLAG_DER, BOTAN_PRIVKEY_EXPORT_FLAG_PEM, and Botan::PKCS8::PEM_encode().
{ return BOTAN_FFI_DO(Botan::Private_Key, key, { if(flags == BOTAN_PRIVKEY_EXPORT_FLAG_DER) return write_vec_output(out, out_len, Botan::PKCS8::BER_encode(key)); else if(flags == BOTAN_PRIVKEY_EXPORT_FLAG_PEM) return write_str_output(out, out_len, Botan::PKCS8::PEM_encode(key)); else return -2; }); }
BOTAN_DLL int botan_privkey_export_encrypted | ( | botan_privkey_t | key, |
uint8_t | out[], | ||
size_t * | out_len, | ||
botan_rng_t | rng, | ||
const char * | passphrase, | ||
const char * | encryption_algo, | ||
uint32_t | flags | ||
) |
Definition at line 876 of file ffi.cpp.
References Botan::PKCS8::BER_encode(), BOTAN_FFI_DO, BOTAN_PRIVKEY_EXPORT_FLAG_DER, BOTAN_PRIVKEY_EXPORT_FLAG_PEM, and Botan::PKCS8::PEM_encode().
{ return BOTAN_FFI_DO(Botan::Private_Key, key, { auto pbkdf_time = std::chrono::milliseconds(300); Botan::RandomNumberGenerator& rng = safe_get(rng_obj); if(flags == BOTAN_PRIVKEY_EXPORT_FLAG_DER) return write_vec_output(out, out_len, Botan::PKCS8::BER_encode(key, rng, pass, pbkdf_time, pbe)); else if(flags == BOTAN_PRIVKEY_EXPORT_FLAG_PEM) return write_str_output(out, out_len, Botan::PKCS8::PEM_encode(key, rng, pass, pbkdf_time, pbe)); else return -2; }); }
BOTAN_DLL int botan_privkey_export_pubkey | ( | botan_pubkey_t * | out, |
botan_privkey_t | in | ||
) |
Definition at line 829 of file ffi.cpp.
References Botan::X509::BER_encode(), BOTAN_FFI_ERROR_EXCEPTION_THROWN, and Botan::X509::load_key().
{ try { std::unique_ptr<Botan::Public_Key> pubkey( Botan::X509::load_key( Botan::X509::BER_encode(safe_get(key_obj)))); *pubout = new botan_pubkey_struct(pubkey.release()); return 0; } catch(std::exception& e) { log_exception(BOTAN_CURRENT_FUNCTION, e.what()); } return BOTAN_FFI_ERROR_EXCEPTION_THROWN; }
BOTAN_DLL int botan_privkey_load | ( | botan_privkey_t * | key, |
botan_rng_t | rng, | ||
const uint8_t | bits[], | ||
size_t | len, | ||
const char * | password | ||
) |
Definition at line 785 of file ffi.cpp.
References BOTAN_FFI_ERROR_EXCEPTION_THROWN, and Botan::PKCS8::load_key().
{ try { Botan::DataSource_Memory src(bits, len); if(password == nullptr) password = ""; Botan::RandomNumberGenerator& rng = safe_get(rng_obj); std::unique_ptr<Botan::PKCS8_PrivateKey> pkcs8; pkcs8.reset(Botan::PKCS8::load_key(src, rng, password)); if(pkcs8) { *key = new botan_privkey_struct(pkcs8.release()); return 0; } } catch(std::exception& e) { log_exception(BOTAN_CURRENT_FUNCTION, e.what()); } return -1; *key = nullptr; return BOTAN_FFI_ERROR_EXCEPTION_THROWN; }
BOTAN_DLL int botan_pubkey_algo_name | ( | botan_pubkey_t | key, |
char | out[], | ||
size_t * | out_len | ||
) |
Definition at line 847 of file ffi.cpp.
References BOTAN_FFI_DO.
{ return BOTAN_FFI_DO(Botan::Public_Key, key, { return write_str_output(out, out_len, key.algo_name()); }); }
BOTAN_DLL int botan_pubkey_destroy | ( | botan_privkey_t | key | ) |
BOTAN_DLL int botan_pubkey_estimated_strength | ( | botan_pubkey_t | key, |
size_t * | estimate | ||
) |
Definition at line 896 of file ffi.cpp.
References BOTAN_FFI_DO, and Botan::Public_Key::estimated_strength().
{ return BOTAN_FFI_DO(Botan::Public_Key, key, { *estimate = key.estimated_strength(); }); }
BOTAN_DLL int botan_pubkey_export | ( | botan_pubkey_t | key, |
uint8_t | out[], | ||
size_t * | out_len, | ||
uint32_t | flags | ||
) |
Definition at line 852 of file ffi.cpp.
References Botan::X509::BER_encode(), BOTAN_FFI_DO, BOTAN_PRIVKEY_EXPORT_FLAG_DER, BOTAN_PRIVKEY_EXPORT_FLAG_PEM, and Botan::X509::PEM_encode().
{ return BOTAN_FFI_DO(Botan::Public_Key, key, { if(flags == BOTAN_PRIVKEY_EXPORT_FLAG_DER) return write_vec_output(out, out_len, Botan::X509::BER_encode(key)); else if(flags == BOTAN_PRIVKEY_EXPORT_FLAG_PEM) return write_str_output(out, out_len, Botan::X509::PEM_encode(key)); else return -2; }); }
BOTAN_DLL int botan_pubkey_fingerprint | ( | botan_pubkey_t | key, |
const char * | hash, | ||
uint8_t | out[], | ||
size_t * | out_len | ||
) |
Definition at line 901 of file ffi.cpp.
References BOTAN_FFI_DO, and Botan::get_hash().
{ return BOTAN_FFI_DO(Botan::Public_Key, key, { std::unique_ptr<Botan::HashFunction> h(Botan::get_hash(hash_fn)); return write_vec_output(out, out_len, h->process(key.x509_subject_public_key())); }); }
BOTAN_DLL int botan_pubkey_load | ( | botan_pubkey_t * | key, |
const uint8_t | bits[], | ||
size_t | len | ||
) |
BOTAN_DLL int botan_rng_destroy | ( | botan_rng_t | rng | ) |
BOTAN_DLL int botan_rng_get | ( | botan_rng_t | rng, |
uint8_t * | out, | ||
size_t | out_len | ||
) |
Definition at line 273 of file ffi.cpp.
References BOTAN_FFI_DO, and Botan::RandomNumberGenerator::randomize().
{ return BOTAN_FFI_DO(Botan::RandomNumberGenerator, rng, { rng.randomize(out, out_len); }); }
BOTAN_DLL int botan_rng_init | ( | botan_rng_t * | rng, |
const char * | rng_type | ||
) |
Definition at line 216 of file ffi.cpp.
References BOTAN_ASSERT_ARG_NON_NULL, and Botan::system_rng().
{ // Just gives unique_ptr something to delete, really class RNG_Wrapper : public Botan::RandomNumberGenerator { public: RNG_Wrapper(Botan::RandomNumberGenerator& rng) : m_rng(rng) {} void randomize(Botan::byte out[], size_t len) override { m_rng.randomize(out, len); } bool is_seeded() const override { return m_rng.is_seeded(); } void clear() override { m_rng.clear(); } std::string name() const { return m_rng.name(); } void reseed(size_t poll_bits = 256) { m_rng.reseed(poll_bits); } void add_entropy(const Botan::byte in[], size_t len) { m_rng.add_entropy(in, len); } private: Botan::RandomNumberGenerator& m_rng; }; try { BOTAN_ASSERT_ARG_NON_NULL(rng_out); if(rng_type == nullptr || *rng_type == 0) rng_type = "system"; const std::string rng_type_s(rng_type); std::unique_ptr<Botan::RandomNumberGenerator> rng; if(rng_type_s == "system") rng.reset(new RNG_Wrapper(Botan::system_rng())); else if(rng_type_s == "user") rng.reset(new Botan::AutoSeeded_RNG); if(rng) { *rng_out = new botan_rng_struct(rng.release()); return 0; } } catch(std::exception& e) { log_exception(BOTAN_CURRENT_FUNCTION, e.what()); } catch(...) { log_exception(BOTAN_CURRENT_FUNCTION, "unknown"); } return -1; }
BOTAN_DLL int botan_rng_reseed | ( | botan_rng_t | rng, |
size_t | bits | ||
) |
Definition at line 278 of file ffi.cpp.
References BOTAN_FFI_DO, and Botan::RandomNumberGenerator::reseed().
{ return BOTAN_FFI_DO(Botan::RandomNumberGenerator, rng, { rng.reseed(bits); }); }
BOTAN_DLL int botan_same_mem | ( | const uint8_t * | x, |
const uint8_t * | y, | ||
size_t | len | ||
) |
BOTAN_DLL uint32_t botan_version_datestamp | ( | ) |
Definition at line 214 of file ffi.cpp.
References Botan::version_datestamp().
{ return Botan::version_datestamp(); }
BOTAN_DLL uint32_t botan_version_major | ( | ) |
Definition at line 211 of file ffi.cpp.
References Botan::version_major().
{ return Botan::version_major(); }
BOTAN_DLL uint32_t botan_version_minor | ( | ) |
Definition at line 212 of file ffi.cpp.
References Botan::version_minor().
{ return Botan::version_minor(); }
BOTAN_DLL uint32_t botan_version_patch | ( | ) |
Definition at line 213 of file ffi.cpp.
References Botan::version_patch().
{ return Botan::version_patch(); }
BOTAN_DLL const char* botan_version_string | ( | ) |
Definition at line 206 of file ffi.cpp.
References Botan::version_cstr().
{ return Botan::version_cstr(); }