72#define BOTAN_FFI_API_VERSION 20250829
81 #define BOTAN_FFI_EXPORT(maj, min) BOTAN_DLL
83 #if defined(__has_attribute)
84 #if __has_attribute(visibility)
85 #define BOTAN_FFI_EXPORT(maj, min) __attribute__((visibility("default")))
87 #elif defined(_MSC_VER) && !defined(BOTAN_IS_BEING_BUILT)
88 #define BOTAN_FFI_EXPORT(maj, min) __declspec(dllimport)
90 #define BOTAN_FFI_EXPORT(maj, min)
94#if !defined(BOTAN_NO_DEPRECATED_WARNINGS) && !defined(BOTAN_AMALGAMATION_H_) && !defined(BOTAN_IS_BEING_BUILT)
95 #if defined(__has_attribute)
96 #if __has_attribute(deprecated)
97 #define BOTAN_FFI_DEPRECATED(msg) __attribute__((deprecated(msg)))
99 #elif defined(_MSC_VER)
100 #define BOTAN_FFI_DEPRECATED(msg) __declspec(deprecated(msg))
104#if !defined(BOTAN_FFI_DEPRECATED)
105 #define BOTAN_FFI_DEPRECATED(msg)
247#define BOTAN_FFI_HEX_LOWER_CASE 1
316 const
char* rng_name,
318 int (*get_cb)(
void* context, uint8_t* out,
size_t out_len),
319 int (*add_entropy_cb)(
void* context, const uint8_t input[],
size_t length),
320 void (*destroy_cb)(
void* context));
543 size_t* out_minimum_keylength,
544 size_t* out_maximum_keylength,
545 size_t* out_keylength_modulo);
559#define BOTAN_CIPHER_INIT_FLAG_MASK_DIRECTION 1
560#define BOTAN_CIPHER_INIT_FLAG_ENCRYPT 0
561#define BOTAN_CIPHER_INIT_FLAG_DECRYPT 1
654#define BOTAN_CIPHER_UPDATE_FLAG_FINAL (1U << 0)
683 size_t* output_written,
684 const uint8_t input_bytes[],
686 size_t* input_consumed);
719 const
char* passphrase,
720 const uint8_t salt[],
752 const
char* passphrase,
753 const uint8_t salt[],
755 size_t milliseconds_to_run,
756 size_t* out_iterations_used);
779 const
char* passphrase,
780 size_t passphrase_len,
781 const uint8_t salt[],
807 const
char* passphrase,
808 size_t passphrase_len,
809 const uint8_t salt[],
821 const
char* passphrase,
822 const uint8_t salt[],
845 const uint8_t secret[],
847 const uint8_t salt[],
849 const uint8_t label[],
914 size_t* out_minimum_keylength,
915 size_t* out_maximum_keylength,
916 size_t* out_keylength_modulo);
1126 uint8_t* out,
size_t* out_len, const
char* password,
botan_rng_t rng,
size_t work_factor, uint32_t flags);
1348#define BOTAN_CHECK_KEY_EXPENSIVE_TESTS 1
1418#define BOTAN_PRIVKEY_EXPORT_FLAG_DER 0
1419#define BOTAN_PRIVKEY_EXPORT_FLAG_PEM 1
1420#define BOTAN_PRIVKEY_EXPORT_FLAG_RAW 2
1453BOTAN_FFI_EXPORT(2, 0)
1454int botan_privkey_export_encrypted(botan_privkey_t key,
1458 const char* passphrase,
1459 const char* encryption_algo,
1463* Export a private key, running PBKDF for specified amount of time
1464* @param key the private key to export
1466* Note: starting in 3.0, the output iterations count is not provided
1468BOTAN_FFI_DEPRECATED("Use botan_privkey_view_encrypted_{der,pem}_timed
")
1469BOTAN_FFI_EXPORT(2, 0)
1470int botan_privkey_export_encrypted_pbkdf_msec(botan_privkey_t key,
1474 const char* passphrase,
1475 uint32_t pbkdf_msec_runtime,
1476 size_t* pbkdf_iterations_out,
1477 const char* cipher_algo,
1478 const char* pbkdf_algo,
1484BOTAN_FFI_DEPRECATED("Use botan_privkey_view_encrypted_{der,pem}
")
1485BOTAN_FFI_EXPORT(2, 0)
1486int botan_privkey_export_encrypted_pbkdf_iter(botan_privkey_t key,
1490 const char* passphrase,
1491 size_t pbkdf_iterations,
1492 const char* cipher_algo,
1493 const char* pbkdf_algo,
1502BOTAN_FFI_EXPORT(3, 0)
1503int botan_privkey_view_encrypted_der(botan_privkey_t key,
1505 const char* passphrase,
1506 const char* cipher_algo,
1507 const char* pbkdf_algo,
1508 size_t pbkdf_iterations,
1510 botan_view_bin_fn view);
1517BOTAN_FFI_EXPORT(3, 0)
1518int botan_privkey_view_encrypted_der_timed(botan_privkey_t key,
1520 const char* passphrase,
1521 const char* cipher_algo,
1522 const char* pbkdf_algo,
1523 size_t pbkdf_runtime_msec,
1525 botan_view_bin_fn view);
1533BOTAN_FFI_EXPORT(3, 0)
1534int botan_privkey_view_encrypted_pem(botan_privkey_t key,
1536 const char* passphrase,
1537 const char* cipher_algo,
1538 const char* pbkdf_algo,
1539 size_t pbkdf_iterations,
1541 botan_view_str_fn view);
1548BOTAN_FFI_EXPORT(3, 0)
1549int botan_privkey_view_encrypted_pem_timed(botan_privkey_t key,
1551 const char* passphrase,
1552 const char* cipher_algo,
1553 const char* pbkdf_algo,
1554 size_t pbkdf_runtime_msec,
1556 botan_view_str_fn view);
1558typedef struct botan_pubkey_struct* botan_pubkey_t;
1560BOTAN_FFI_EXPORT(2, 0) int botan_pubkey_load(botan_pubkey_t* key, const uint8_t bits[], size_t len);
1562BOTAN_FFI_EXPORT(2, 0) int botan_privkey_export_pubkey(botan_pubkey_t* out, botan_privkey_t in);
1564BOTAN_FFI_DEPRECATED("Use botan_pubkey_view_{der,pem,raw}
")
1565BOTAN_FFI_EXPORT(2, 0) int botan_pubkey_export(botan_pubkey_t key, uint8_t out[], size_t* out_len, uint32_t flags);
1570BOTAN_FFI_EXPORT(3, 0) int botan_pubkey_view_der(botan_pubkey_t key, botan_view_ctx ctx, botan_view_bin_fn view);
1575BOTAN_FFI_EXPORT(3, 0) int botan_pubkey_view_pem(botan_pubkey_t key, botan_view_ctx ctx, botan_view_str_fn view);
1580BOTAN_FFI_EXPORT(3, 6) int botan_pubkey_view_raw(botan_pubkey_t key, botan_view_ctx ctx, botan_view_bin_fn view);
1582BOTAN_FFI_EXPORT(2, 0) int botan_pubkey_algo_name(botan_pubkey_t key, char out[], size_t* out_len);
1587BOTAN_FFI_EXPORT(2, 0) int botan_pubkey_check_key(botan_pubkey_t key, botan_rng_t rng, uint32_t flags);
1589BOTAN_FFI_EXPORT(2, 0) int botan_pubkey_estimated_strength(botan_pubkey_t key, size_t* estimate);
1591BOTAN_FFI_EXPORT(2, 0)
1592int botan_pubkey_fingerprint(botan_pubkey_t key, const char* hash, uint8_t out[], size_t* out_len);
1597BOTAN_FFI_EXPORT(2, 0) int botan_pubkey_destroy(botan_pubkey_t key);
1600* Get arbitrary named fields from public or private keys
1602BOTAN_FFI_EXPORT(2, 0) int botan_pubkey_get_field(botan_mp_t output, botan_pubkey_t key, const char* field_name);
1604BOTAN_FFI_EXPORT(2, 0) int botan_privkey_get_field(botan_mp_t output, botan_privkey_t key, const char* field_name);
1607* Get the OID from public or private keys
1609BOTAN_FFI_EXPORT(3, 8)
1610int botan_pubkey_oid(botan_asn1_oid_t* oid, botan_pubkey_t key);
1612BOTAN_FFI_EXPORT(3, 8)
1613int botan_privkey_oid(botan_asn1_oid_t* oid, botan_privkey_t key);
1620BOTAN_FFI_EXPORT(3, 8) int botan_privkey_stateful_operation(botan_privkey_t key, int* out);
1627BOTAN_FFI_EXPORT(3, 8) int botan_privkey_remaining_operations(botan_privkey_t key, uint64_t* out);
1630* Algorithm specific key operations: RSA
1632BOTAN_FFI_EXPORT(2, 0) int botan_privkey_load_rsa(botan_privkey_t* key, botan_mp_t p, botan_mp_t q, botan_mp_t e);
1634BOTAN_FFI_EXPORT(2, 8) int botan_privkey_load_rsa_pkcs1(botan_privkey_t* key, const uint8_t bits[], size_t len);
1637BOTAN_FFI_EXPORT(2, 0) int botan_privkey_rsa_get_p(botan_mp_t p, botan_privkey_t rsa_key);
1639BOTAN_FFI_EXPORT(2, 0) int botan_privkey_rsa_get_q(botan_mp_t q, botan_privkey_t rsa_key);
1641BOTAN_FFI_EXPORT(2, 0) int botan_privkey_rsa_get_d(botan_mp_t d, botan_privkey_t rsa_key);
1643BOTAN_FFI_EXPORT(2, 0) int botan_privkey_rsa_get_n(botan_mp_t n, botan_privkey_t rsa_key);
1645BOTAN_FFI_EXPORT(2, 0) int botan_privkey_rsa_get_e(botan_mp_t e, botan_privkey_t rsa_key);
1647BOTAN_FFI_EXPORT(2, 8)
1648int botan_privkey_rsa_get_privkey(botan_privkey_t rsa_key, uint8_t out[], size_t* out_len, uint32_t flags);
1650BOTAN_FFI_EXPORT(2, 0) int botan_pubkey_load_rsa(botan_pubkey_t* key, botan_mp_t n, botan_mp_t e);
1653BOTAN_FFI_EXPORT(2, 0) int botan_pubkey_rsa_get_e(botan_mp_t e, botan_pubkey_t rsa_key);
1655BOTAN_FFI_EXPORT(2, 0) int botan_pubkey_rsa_get_n(botan_mp_t n, botan_pubkey_t rsa_key);
1658* Algorithm specific key operations: DSA
1660BOTAN_FFI_EXPORT(2, 0)
1661int botan_privkey_load_dsa(botan_privkey_t* key, botan_mp_t p, botan_mp_t q, botan_mp_t g, botan_mp_t x);
1663BOTAN_FFI_EXPORT(2, 0)
1664int botan_pubkey_load_dsa(botan_pubkey_t* key, botan_mp_t p, botan_mp_t q, botan_mp_t g, botan_mp_t y);
1667BOTAN_FFI_EXPORT(2, 0) int botan_privkey_dsa_get_x(botan_mp_t n, botan_privkey_t key);
1670BOTAN_FFI_EXPORT(2, 0) int botan_pubkey_dsa_get_p(botan_mp_t p, botan_pubkey_t key);
1672BOTAN_FFI_EXPORT(2, 0) int botan_pubkey_dsa_get_q(botan_mp_t q, botan_pubkey_t key);
1674BOTAN_FFI_EXPORT(2, 0) int botan_pubkey_dsa_get_g(botan_mp_t d, botan_pubkey_t key);
1676BOTAN_FFI_EXPORT(2, 0) int botan_pubkey_dsa_get_y(botan_mp_t y, botan_pubkey_t key);
1679* Loads Diffie Hellman private key
1681* @param key variable populated with key material
1682* @param p prime order of a Z_p group
1683* @param g group generator
1684* @param x private key
1686* @pre key is NULL on input
1687* @post function allocates memory and assigns to `key'
1689* @return 0 on success, a negative value on failure
1691BOTAN_FFI_EXPORT(2, 0) int botan_privkey_load_dh(botan_privkey_t* key, botan_mp_t p, botan_mp_t g, botan_mp_t x);
1705BOTAN_FFI_EXPORT(2, 0) int botan_pubkey_load_dh(botan_pubkey_t* key, botan_mp_t p, botan_mp_t g, botan_mp_t y);
1708* Algorithm specific key operations: ElGamal
1723BOTAN_FFI_EXPORT(2, 0) int botan_pubkey_load_elgamal(botan_pubkey_t* key, botan_mp_t p, botan_mp_t g, botan_mp_t y);
1738BOTAN_FFI_EXPORT(2, 0) int botan_privkey_load_elgamal(botan_privkey_t* key, botan_mp_t p, botan_mp_t g, botan_mp_t x);
1741* Algorithm specific key operations: Ed25519
1744BOTAN_FFI_EXPORT(2, 2) int botan_privkey_load_ed25519(botan_privkey_t* key, const uint8_t privkey[32]);
1746BOTAN_FFI_EXPORT(2, 2) int botan_pubkey_load_ed25519(botan_pubkey_t* key, const uint8_t pubkey[32]);
1749BOTAN_FFI_EXPORT(2, 2) int botan_privkey_ed25519_get_privkey(botan_privkey_t key, uint8_t output[64]);
1752BOTAN_FFI_EXPORT(2, 2) int botan_pubkey_ed25519_get_pubkey(botan_pubkey_t key, uint8_t pubkey[32]);
1755* Algorithm specific key operations: Ed448
1758BOTAN_FFI_EXPORT(3, 4) int botan_privkey_load_ed448(botan_privkey_t* key, const uint8_t privkey[57]);
1760BOTAN_FFI_EXPORT(3, 4) int botan_pubkey_load_ed448(botan_pubkey_t* key, const uint8_t pubkey[57]);
1763BOTAN_FFI_EXPORT(3, 4) int botan_privkey_ed448_get_privkey(botan_privkey_t key, uint8_t output[57]);
1766BOTAN_FFI_EXPORT(3, 4) int botan_pubkey_ed448_get_pubkey(botan_pubkey_t key, uint8_t pubkey[57]);
1769* Algorithm specific key operations: X25519
1772BOTAN_FFI_EXPORT(2, 8) int botan_privkey_load_x25519(botan_privkey_t* key, const uint8_t privkey[32]);
1774BOTAN_FFI_EXPORT(2, 8) int botan_pubkey_load_x25519(botan_pubkey_t* key, const uint8_t pubkey[32]);
1777BOTAN_FFI_EXPORT(2, 8) int botan_privkey_x25519_get_privkey(botan_privkey_t key, uint8_t output[32]);
1780BOTAN_FFI_EXPORT(2, 8) int botan_pubkey_x25519_get_pubkey(botan_pubkey_t key, uint8_t pubkey[32]);
1783* Algorithm specific key operations: X448
1786BOTAN_FFI_EXPORT(3, 4) int botan_privkey_load_x448(botan_privkey_t* key, const uint8_t privkey[56]);
1788BOTAN_FFI_EXPORT(3, 4) int botan_pubkey_load_x448(botan_pubkey_t* key, const uint8_t pubkey[56]);
1791BOTAN_FFI_EXPORT(3, 4) int botan_privkey_x448_get_privkey(botan_privkey_t key, uint8_t output[56]);
1794BOTAN_FFI_EXPORT(3, 4) int botan_pubkey_x448_get_pubkey(botan_pubkey_t key, uint8_t pubkey[56]);
1797* Algorithm specific key operations: ML-DSA
1800BOTAN_FFI_EXPORT(3, 6)
1801int botan_privkey_load_ml_dsa(botan_privkey_t* key, const uint8_t privkey[], size_t key_len, const char* mldsa_mode);
1803BOTAN_FFI_EXPORT(3, 6)
1804int botan_pubkey_load_ml_dsa(botan_pubkey_t* key, const uint8_t pubkey[], size_t key_len, const char* mldsa_mode);
1807* Algorithm specific key operations: Kyber R3
1809* Note that Kyber R3 support is somewhat deprecated and may be removed in a
1810* future major release. Using the final ML-KEM is highly recommended in any new
1814BOTAN_FFI_DEPRECATED("Kyber R3 support is deprecated
")
1815BOTAN_FFI_EXPORT(3, 1) int botan_privkey_load_kyber(botan_privkey_t* key, const uint8_t privkey[], size_t key_len);
1817BOTAN_FFI_DEPRECATED("Kyber R3 support is deprecated
")
1818BOTAN_FFI_EXPORT(3, 1) int botan_pubkey_load_kyber(botan_pubkey_t* key, const uint8_t pubkey[], size_t key_len);
1821BOTAN_FFI_EXPORT(3, 1)
1822int botan_privkey_view_kyber_raw_key(botan_privkey_t key, botan_view_ctx ctx, botan_view_bin_fn view);
1825BOTAN_FFI_EXPORT(3, 1)
1826int botan_pubkey_view_kyber_raw_key(botan_pubkey_t key, botan_view_ctx ctx, botan_view_bin_fn view);
1832BOTAN_FFI_EXPORT(3, 6)
1833int botan_privkey_load_frodokem(botan_privkey_t* key, const uint8_t privkey[], size_t key_len, const char* frodo_mode);
1835BOTAN_FFI_EXPORT(3, 6)
1836int botan_pubkey_load_frodokem(botan_pubkey_t* key, const uint8_t pubkey[], size_t key_len, const char* frodo_mode);
1842BOTAN_FFI_EXPORT(3, 6)
1843int botan_privkey_load_classic_mceliece(botan_privkey_t* key,
1844 const uint8_t privkey[],
1846 const char* cmce_mode);
1848BOTAN_FFI_EXPORT(3, 6)
1849int botan_pubkey_load_classic_mceliece(botan_pubkey_t* key,
1850 const uint8_t pubkey[],
1852 const char* cmce_mode);
1855* Algorithm specific key operations: ML-KEM
1858BOTAN_FFI_EXPORT(3, 6)
1859int botan_privkey_load_ml_kem(botan_privkey_t* key, const uint8_t privkey[], size_t key_len, const char* mlkem_mode);
1861BOTAN_FFI_EXPORT(3, 6)
1862int botan_pubkey_load_ml_kem(botan_pubkey_t* key, const uint8_t pubkey[], size_t key_len, const char* mlkem_mode);
1865* Algorithm specific key operations: SLH-DSA
1868BOTAN_FFI_EXPORT(3, 6)
1869int botan_privkey_load_slh_dsa(botan_privkey_t* key, const uint8_t privkey[], size_t key_len, const char* slhdsa_mode);
1871BOTAN_FFI_EXPORT(3, 6)
1872int botan_pubkey_load_slh_dsa(botan_pubkey_t* key, const uint8_t pubkey[], size_t key_len, const char* slhdsa_mode);
1875* Algorithm specific key operations: ECDSA and ECDH
1877BOTAN_FFI_EXPORT(3, 2)
1878int botan_pubkey_ecc_key_used_explicit_encoding(botan_pubkey_t key);
1880BOTAN_FFI_EXPORT(2, 2)
1881int botan_privkey_load_ecdsa(botan_privkey_t* key, botan_mp_t scalar, const char* curve_name);
1883BOTAN_FFI_EXPORT(2, 2)
1884int botan_pubkey_load_ecdsa(botan_pubkey_t* key, botan_mp_t public_x, botan_mp_t public_y, const char* curve_name);
1886BOTAN_FFI_EXPORT(3, 10)
1887int botan_pubkey_load_ecdsa_sec1(botan_pubkey_t* key, const uint8_t sec1[], size_t sec1_len, const char* curve_name);
1889BOTAN_FFI_EXPORT(2, 2)
1890int botan_pubkey_load_ecdh(botan_pubkey_t* key, botan_mp_t public_x, botan_mp_t public_y, const char* curve_name);
1892BOTAN_FFI_EXPORT(3, 10)
1893int botan_pubkey_load_ecdh_sec1(botan_pubkey_t* key, const uint8_t sec1[], size_t sec1_len, const char* curve_name);
1895BOTAN_FFI_EXPORT(2, 2)
1896int botan_privkey_load_ecdh(botan_privkey_t* key, botan_mp_t scalar, const char* curve_name);
1898BOTAN_FFI_EXPORT(2, 2)
1899int botan_pubkey_load_sm2(botan_pubkey_t* key, botan_mp_t public_x, botan_mp_t public_y, const char* curve_name);
1901BOTAN_FFI_EXPORT(3, 10)
1902int botan_pubkey_load_sm2_sec1(botan_pubkey_t* key, const uint8_t sec1[], size_t sec1_len, const char* curve_name);
1904BOTAN_FFI_EXPORT(2, 2)
1905int botan_privkey_load_sm2(botan_privkey_t* key, botan_mp_t scalar, const char* curve_name);
1908BOTAN_FFI_EXPORT(2, 2)
1909int botan_pubkey_load_sm2_enc(botan_pubkey_t* key, botan_mp_t public_x, botan_mp_t public_y, const char* curve_name);
1912BOTAN_FFI_EXPORT(2, 2)
1913int botan_privkey_load_sm2_enc(botan_privkey_t* key, botan_mp_t scalar, const char* curve_name);
1915BOTAN_FFI_EXPORT(2, 3)
1916int botan_pubkey_sm2_compute_za(
1917 uint8_t out[], size_t* out_len, const char* ident, const char* hash_algo, botan_pubkey_t key);
1922BOTAN_FFI_EXPORT(3, 0)
1923int botan_pubkey_view_ec_public_point(botan_pubkey_t key, botan_view_ctx ctx, botan_view_bin_fn view);
1926* Public Key Encryption
1928typedef struct botan_pk_op_encrypt_struct* botan_pk_op_encrypt_t;
1930BOTAN_FFI_EXPORT(2, 0)
1931int botan_pk_op_encrypt_create(botan_pk_op_encrypt_t* op, botan_pubkey_t key, const char* padding, uint32_t flags);
1936BOTAN_FFI_EXPORT(2, 0) int botan_pk_op_encrypt_destroy(botan_pk_op_encrypt_t op);
1938BOTAN_FFI_EXPORT(2, 8)
1939int botan_pk_op_encrypt_output_length(botan_pk_op_encrypt_t op, size_t ptext_len, size_t* ctext_len);
1941BOTAN_FFI_EXPORT(2, 0)
1942int botan_pk_op_encrypt(botan_pk_op_encrypt_t op,
1946 const uint8_t plaintext[],
1947 size_t plaintext_len);
1950* Public Key Decryption
1952typedef struct botan_pk_op_decrypt_struct* botan_pk_op_decrypt_t;
1954BOTAN_FFI_EXPORT(2, 0)
1955int botan_pk_op_decrypt_create(botan_pk_op_decrypt_t* op, botan_privkey_t key, const char* padding, uint32_t flags);
1960BOTAN_FFI_EXPORT(2, 0) int botan_pk_op_decrypt_destroy(botan_pk_op_decrypt_t op);
1962BOTAN_FFI_EXPORT(2, 8)
1963int botan_pk_op_decrypt_output_length(botan_pk_op_decrypt_t op, size_t ctext_len, size_t* ptext_len);
1965BOTAN_FFI_EXPORT(2, 0)
1966int botan_pk_op_decrypt(
1967 botan_pk_op_decrypt_t op, uint8_t out[], size_t* out_len, const uint8_t ciphertext[], size_t ciphertext_len);
1970* Signature Generation
1973#define BOTAN_PUBKEY_DER_FORMAT_SIGNATURE 1
1975typedef struct botan_pk_op_sign_struct* botan_pk_op_sign_t;
1977BOTAN_FFI_EXPORT(2, 0)
1978int botan_pk_op_sign_create(botan_pk_op_sign_t* op, botan_privkey_t key, const char* hash_and_padding, uint32_t flags);
1983BOTAN_FFI_EXPORT(2, 0) int botan_pk_op_sign_destroy(botan_pk_op_sign_t op);
1985BOTAN_FFI_EXPORT(2, 8) int botan_pk_op_sign_output_length(botan_pk_op_sign_t op, size_t* olen);
1987BOTAN_FFI_EXPORT(2, 0) int botan_pk_op_sign_update(botan_pk_op_sign_t op, const uint8_t in[], size_t in_len);
1989BOTAN_FFI_EXPORT(2, 0)
1990int botan_pk_op_sign_finish(botan_pk_op_sign_t op, botan_rng_t rng, uint8_t sig[], size_t* sig_len);
1993* Signature Verification
1995typedef struct botan_pk_op_verify_struct* botan_pk_op_verify_t;
1997BOTAN_FFI_EXPORT(2, 0)
1998int botan_pk_op_verify_create(botan_pk_op_verify_t* op,
2000 const char* hash_and_padding,
2006BOTAN_FFI_EXPORT(2, 0) int botan_pk_op_verify_destroy(botan_pk_op_verify_t op);
2008BOTAN_FFI_EXPORT(2, 0) int botan_pk_op_verify_update(botan_pk_op_verify_t op, const uint8_t in[], size_t in_len);
2009BOTAN_FFI_EXPORT(2, 0) int botan_pk_op_verify_finish(botan_pk_op_verify_t op, const uint8_t sig[], size_t sig_len);
2014typedef struct botan_pk_op_ka_struct* botan_pk_op_ka_t;
2016BOTAN_FFI_EXPORT(2, 0)
2017int botan_pk_op_key_agreement_create(botan_pk_op_ka_t* op, botan_privkey_t key, const char* kdf, uint32_t flags);
2022BOTAN_FFI_EXPORT(2, 0) int botan_pk_op_key_agreement_destroy(botan_pk_op_ka_t op);
2024BOTAN_FFI_EXPORT(2, 0) int botan_pk_op_key_agreement_export_public(botan_privkey_t key, uint8_t out[], size_t* out_len);
2026BOTAN_FFI_EXPORT(3, 0)
2027int botan_pk_op_key_agreement_view_public(botan_privkey_t key, botan_view_ctx ctx, botan_view_bin_fn view);
2029BOTAN_FFI_EXPORT(2, 8) int botan_pk_op_key_agreement_size(botan_pk_op_ka_t op, size_t* out_len);
2031BOTAN_FFI_EXPORT(2, 0)
2032int botan_pk_op_key_agreement(botan_pk_op_ka_t op,
2035 const uint8_t other_key[],
2036 size_t other_key_len,
2037 const uint8_t salt[],
2043typedef struct botan_pk_op_kem_encrypt_struct* botan_pk_op_kem_encrypt_t;
2045BOTAN_FFI_EXPORT(3, 0)
2046int botan_pk_op_kem_encrypt_create(botan_pk_op_kem_encrypt_t* op, botan_pubkey_t key, const char* kdf);
2051BOTAN_FFI_EXPORT(3, 0) int botan_pk_op_kem_encrypt_destroy(botan_pk_op_kem_encrypt_t op);
2053BOTAN_FFI_EXPORT(3, 0)
2054int botan_pk_op_kem_encrypt_shared_key_length(botan_pk_op_kem_encrypt_t op,
2055 size_t desired_shared_key_length,
2056 size_t* output_shared_key_length);
2058BOTAN_FFI_EXPORT(3, 0)
2059int botan_pk_op_kem_encrypt_encapsulated_key_length(botan_pk_op_kem_encrypt_t op,
2060 size_t* output_encapsulated_key_length);
2062BOTAN_FFI_EXPORT(3, 0)
2063int botan_pk_op_kem_encrypt_create_shared_key(botan_pk_op_kem_encrypt_t op,
2065 const uint8_t salt[],
2067 size_t desired_shared_key_len,
2068 uint8_t shared_key[],
2069 size_t* shared_key_len,
2070 uint8_t encapsulated_key[],
2071 size_t* encapsulated_key_len);
2073typedef struct botan_pk_op_kem_decrypt_struct* botan_pk_op_kem_decrypt_t;
2075BOTAN_FFI_EXPORT(3, 0)
2076int botan_pk_op_kem_decrypt_create(botan_pk_op_kem_decrypt_t* op, botan_privkey_t key, const char* kdf);
2081BOTAN_FFI_EXPORT(3, 0) int botan_pk_op_kem_decrypt_destroy(botan_pk_op_kem_decrypt_t op);
2083BOTAN_FFI_EXPORT(3, 0)
2084int botan_pk_op_kem_decrypt_shared_key_length(botan_pk_op_kem_decrypt_t op,
2085 size_t desired_shared_key_length,
2086 size_t* output_shared_key_length);
2088BOTAN_FFI_EXPORT(3, 0)
2089int botan_pk_op_kem_decrypt_shared_key(botan_pk_op_kem_decrypt_t op,
2090 const uint8_t salt[],
2092 const uint8_t encapsulated_key[],
2093 size_t encapsulated_key_len,
2094 size_t desired_shared_key_len,
2095 uint8_t shared_key[],
2096 size_t* shared_key_len);
2102BOTAN_FFI_EXPORT(2, 0) int botan_pkcs_hash_id(const char* hash_name, uint8_t pkcs_id[], size_t* pkcs_id_len);
2105* Always returns BOTAN_FFI_ERROR_NOT_IMPLEMENTED
2107BOTAN_FFI_DEPRECATED("No longer implemented
")
2108BOTAN_FFI_EXPORT(2, 0)
2109int botan_mceies_encrypt(botan_pubkey_t mce_key,
2120* Always returns BOTAN_FFI_ERROR_NOT_IMPLEMENTED
2122BOTAN_FFI_DEPRECATED("No longer implemented
")
2123BOTAN_FFI_EXPORT(2, 0)
2124int botan_mceies_decrypt(botan_privkey_t mce_key,
2135**************************/
2137typedef struct botan_x509_cert_struct* botan_x509_cert_t;
2139BOTAN_FFI_EXPORT(2, 0) int botan_x509_cert_load(botan_x509_cert_t* cert_obj, const uint8_t cert[], size_t cert_len);
2140BOTAN_FFI_EXPORT(2, 0) int botan_x509_cert_load_file(botan_x509_cert_t* cert_obj, const char* filename);
2145BOTAN_FFI_EXPORT(2, 0) int botan_x509_cert_destroy(botan_x509_cert_t cert);
2147BOTAN_FFI_EXPORT(2, 8) int botan_x509_cert_dup(botan_x509_cert_t* new_cert, botan_x509_cert_t cert);
2149/* Prefer botan_x509_cert_not_before and botan_x509_cert_not_after */
2150BOTAN_FFI_EXPORT(2, 0) int botan_x509_cert_get_time_starts(botan_x509_cert_t cert, char out[], size_t* out_len);
2151BOTAN_FFI_EXPORT(2, 0) int botan_x509_cert_get_time_expires(botan_x509_cert_t cert, char out[], size_t* out_len);
2153BOTAN_FFI_EXPORT(2, 8) int botan_x509_cert_not_before(botan_x509_cert_t cert, uint64_t* time_since_epoch);
2154BOTAN_FFI_EXPORT(2, 8) int botan_x509_cert_not_after(botan_x509_cert_t cert, uint64_t* time_since_epoch);
2156/* TODO(Botan4) this should use char for the out param */
2157BOTAN_FFI_EXPORT(2, 0)
2158int botan_x509_cert_get_fingerprint(botan_x509_cert_t cert, const char* hash, uint8_t out[], size_t* out_len);
2160BOTAN_FFI_EXPORT(2, 0) int botan_x509_cert_get_serial_number(botan_x509_cert_t cert, uint8_t out[], size_t* out_len);
2161BOTAN_FFI_EXPORT(2, 0) int botan_x509_cert_get_authority_key_id(botan_x509_cert_t cert, uint8_t out[], size_t* out_len);
2162BOTAN_FFI_EXPORT(2, 0) int botan_x509_cert_get_subject_key_id(botan_x509_cert_t cert, uint8_t out[], size_t* out_len);
2164BOTAN_FFI_EXPORT(2, 0) int botan_x509_cert_get_public_key_bits(botan_x509_cert_t cert, uint8_t out[], size_t* out_len);
2166BOTAN_FFI_EXPORT(3, 0)
2167int botan_x509_cert_view_public_key_bits(botan_x509_cert_t cert, botan_view_ctx ctx, botan_view_bin_fn view);
2169BOTAN_FFI_EXPORT(2, 0) int botan_x509_cert_get_public_key(botan_x509_cert_t cert, botan_pubkey_t* key);
2171/* TODO(Botan4) this should use char for the out param */
2172BOTAN_FFI_EXPORT(2, 0)
2173int botan_x509_cert_get_issuer_dn(
2174 botan_x509_cert_t cert, const char* key, size_t index, uint8_t out[], size_t* out_len);
2176/* TODO(Botan4) this should use char for the out param */
2177BOTAN_FFI_EXPORT(2, 0)
2178int botan_x509_cert_get_subject_dn(
2179 botan_x509_cert_t cert, const char* key, size_t index, uint8_t out[], size_t* out_len);
2181BOTAN_FFI_EXPORT(2, 0) int botan_x509_cert_to_string(botan_x509_cert_t cert, char out[], size_t* out_len);
2183BOTAN_FFI_EXPORT(3, 0)
2184int botan_x509_cert_view_as_string(botan_x509_cert_t cert, botan_view_ctx ctx, botan_view_str_fn view);
2186/* Must match values of Key_Constraints in key_constraints.h */
2187enum botan_x509_cert_key_constraints /* NOLINT(*-enum-size,*-use-enum-class) */ {
2189 DIGITAL_SIGNATURE = 32768,
2190 NON_REPUDIATION = 16384,
2191 KEY_ENCIPHERMENT = 8192,
2192 DATA_ENCIPHERMENT = 4096,
2193 KEY_AGREEMENT = 2048,
2194 KEY_CERT_SIGN = 1024,
2196 ENCIPHER_ONLY = 256,
2200BOTAN_FFI_EXPORT(2, 0) int botan_x509_cert_allowed_usage(botan_x509_cert_t cert, unsigned int key_usage);
2206BOTAN_FFI_EXPORT(2, 5) int botan_x509_cert_hostname_match(botan_x509_cert_t cert, const char* hostname);
2216BOTAN_FFI_EXPORT(2, 8)
2217int botan_x509_cert_verify(int* validation_result,
2218 botan_x509_cert_t cert,
2219 const botan_x509_cert_t* intermediates,
2220 size_t intermediates_len,
2221 const botan_x509_cert_t* trusted,
2223 const char* trusted_path,
2224 size_t required_strength,
2225 const char* hostname,
2226 uint64_t reference_time);
2232BOTAN_FFI_EXPORT(2, 8) const char* botan_x509_cert_validation_status(int code);
2236**************************/
2238typedef struct botan_x509_crl_struct* botan_x509_crl_t;
2240BOTAN_FFI_EXPORT(2, 13) int botan_x509_crl_load_file(botan_x509_crl_t* crl_obj, const char* crl_path);
2241BOTAN_FFI_EXPORT(2, 13)
2242int botan_x509_crl_load(botan_x509_crl_t* crl_obj, const uint8_t crl_bits[], size_t crl_bits_len);
2244BOTAN_FFI_EXPORT(2, 13) int botan_x509_crl_destroy(botan_x509_crl_t crl);
2250BOTAN_FFI_EXPORT(2, 13) int botan_x509_is_revoked(botan_x509_crl_t crl, botan_x509_cert_t cert);
2256BOTAN_FFI_EXPORT(2, 13)
2257int botan_x509_cert_verify_with_crl(int* validation_result,
2258 botan_x509_cert_t cert,
2259 const botan_x509_cert_t* intermediates,
2260 size_t intermediates_len,
2261 const botan_x509_cert_t* trusted,
2263 const botan_x509_crl_t* crls,
2265 const char* trusted_path,
2266 size_t required_strength,
2267 const char* hostname,
2268 uint64_t reference_time);
2274BOTAN_FFI_EXPORT(2, 2)
2275int botan_key_wrap3394(const uint8_t key[],
2277 const uint8_t kek[],
2279 uint8_t wrapped_key[],
2280 size_t* wrapped_key_len);
2283BOTAN_FFI_EXPORT(2, 2)
2284int botan_key_unwrap3394(const uint8_t wrapped_key[],
2285 size_t wrapped_key_len,
2286 const uint8_t kek[],
2291BOTAN_FFI_EXPORT(3, 0)
2292int botan_nist_kw_enc(const char* cipher_algo,
2294 const uint8_t key[],
2296 const uint8_t kek[],
2298 uint8_t wrapped_key[],
2299 size_t* wrapped_key_len);
2301BOTAN_FFI_EXPORT(3, 0)
2302int botan_nist_kw_dec(const char* cipher_algo,
2304 const uint8_t wrapped_key[],
2305 size_t wrapped_key_len,
2306 const uint8_t kek[],
2315typedef struct botan_hotp_struct* botan_hotp_t;
2320BOTAN_FFI_EXPORT(2, 8)
2321int botan_hotp_init(botan_hotp_t* hotp, const uint8_t key[], size_t key_len, const char* hash_algo, size_t digits);
2327BOTAN_FFI_EXPORT(2, 8)
2328int botan_hotp_destroy(botan_hotp_t hotp);
2333BOTAN_FFI_EXPORT(2, 8)
2334int botan_hotp_generate(botan_hotp_t hotp, uint32_t* hotp_code, uint64_t hotp_counter);
2339BOTAN_FFI_EXPORT(2, 8)
2340int botan_hotp_check(
2341 botan_hotp_t hotp, uint64_t* next_hotp_counter, uint32_t hotp_code, uint64_t hotp_counter, size_t resync_range);
2347typedef struct botan_totp_struct* botan_totp_t;
2352BOTAN_FFI_EXPORT(2, 8)
2354 botan_totp_t* totp, const uint8_t key[], size_t key_len, const char* hash_algo, size_t digits, size_t time_step);
2360BOTAN_FFI_EXPORT(2, 8)
2361int botan_totp_destroy(botan_totp_t totp);
2369BOTAN_FFI_EXPORT(2, 8)
2370int botan_totp_generate(botan_totp_t totp, uint32_t* totp_code, uint64_t timestamp);
2380BOTAN_FFI_EXPORT(2, 8)
2381int botan_totp_check(botan_totp_t totp, uint32_t totp_code, uint64_t timestamp, size_t acceptable_clock_drift);
2387typedef struct botan_fpe_struct* botan_fpe_t;
2389#define BOTAN_FPE_FLAG_FE1_COMPAT_MODE 1
2391BOTAN_FFI_EXPORT(2, 8)
2392int botan_fpe_fe1_init(
2393 botan_fpe_t* fpe, botan_mp_t n, const uint8_t key[], size_t key_len, size_t rounds, uint32_t flags);
2398BOTAN_FFI_EXPORT(2, 8)
2399int botan_fpe_destroy(botan_fpe_t fpe);
2401BOTAN_FFI_EXPORT(2, 8)
2402int botan_fpe_encrypt(botan_fpe_t fpe, botan_mp_t x, const uint8_t tweak[], size_t tweak_len);
2404BOTAN_FFI_EXPORT(2, 8)
2405int botan_fpe_decrypt(botan_fpe_t fpe, botan_mp_t x, const uint8_t tweak[], size_t tweak_len);
2410typedef struct botan_srp6_server_session_struct* botan_srp6_server_session_t;
2416BOTAN_FFI_EXPORT(3, 0)
2417int botan_srp6_server_session_init(botan_srp6_server_session_t* srp6);
2424BOTAN_FFI_EXPORT(3, 0)
2425int botan_srp6_server_session_destroy(botan_srp6_server_session_t srp6);
2439BOTAN_FFI_EXPORT(3, 0)
2440int botan_srp6_server_session_step1(botan_srp6_server_session_t srp6,
2441 const uint8_t verifier[],
2442 size_t verifier_len,
2443 const char* group_id,
2444 const char* hash_id,
2445 botan_rng_t rng_obj,
2458BOTAN_FFI_EXPORT(3, 0)
2459int botan_srp6_server_session_step2(
2460 botan_srp6_server_session_t srp6, const uint8_t A[], size_t A_len, uint8_t key[], size_t* key_len);
2474BOTAN_FFI_EXPORT(3, 0)
2475int botan_srp6_generate_verifier(const char* identifier,
2476 const char* password,
2477 const uint8_t salt[],
2479 const char* group_id,
2480 const char* hash_id,
2482 size_t* verifier_len);
2501BOTAN_FFI_EXPORT(3, 0)
2502int botan_srp6_client_agree(const char* username,
2503 const char* password,
2504 const char* group_id,
2505 const char* hash_id,
2506 const uint8_t salt[],
2510 botan_rng_t rng_obj,
2519BOTAN_FFI_EXPORT(3, 0)
2520int botan_srp6_group_size(const char* group_id, size_t* group_p_bytes);
2540BOTAN_FFI_EXPORT(3, 0)
2541int botan_zfec_encode(size_t K, size_t N, const uint8_t* input, size_t size, uint8_t** outputs);
2561BOTAN_FFI_EXPORT(3, 0)
2562int botan_zfec_decode(
2563 size_t K, size_t N, const size_t* indexes, uint8_t* const* inputs, size_t shareSize, uint8_t** outputs);
2568typedef struct botan_tpm2_ctx_struct* botan_tpm2_ctx_t;
2573typedef struct botan_tpm2_session_struct* botan_tpm2_session_t;
2578typedef struct botan_tpm2_crypto_backend_state_struct* botan_tpm2_crypto_backend_state_t;
2586BOTAN_FFI_EXPORT(3, 6)
2587int botan_tpm2_supports_crypto_backend(void);
2595BOTAN_FFI_EXPORT(3, 6) int botan_tpm2_ctx_init(botan_tpm2_ctx_t* ctx_out, const char* tcti_nameconf);
2604BOTAN_FFI_EXPORT(3, 6)
2605int botan_tpm2_ctx_init_ex(botan_tpm2_ctx_t* ctx_out, const char* tcti_name, const char* tcti_conf);
2615BOTAN_FFI_EXPORT(3, 7)
2616int botan_tpm2_ctx_from_esys(botan_tpm2_ctx_t* ctx_out, struct ESYS_CONTEXT* esys_ctx);
2627BOTAN_FFI_EXPORT(3, 6)
2628int botan_tpm2_ctx_enable_crypto_backend(botan_tpm2_ctx_t ctx, botan_rng_t rng);
2635BOTAN_FFI_EXPORT(3, 6) int botan_tpm2_ctx_destroy(botan_tpm2_ctx_t ctx);
2648BOTAN_FFI_EXPORT(3, 7)
2649int botan_tpm2_enable_crypto_backend(botan_tpm2_crypto_backend_state_t* cbs_out,
2650 struct ESYS_CONTEXT* esys_ctx,
2661BOTAN_FFI_EXPORT(3, 7) int botan_tpm2_crypto_backend_state_destroy(botan_tpm2_crypto_backend_state_t cbs);
2671BOTAN_FFI_EXPORT(3, 6)
2672int botan_tpm2_rng_init(botan_rng_t* rng_out,
2673 botan_tpm2_ctx_t ctx,
2674 botan_tpm2_session_t s1,
2675 botan_tpm2_session_t s2,
2676 botan_tpm2_session_t s3);
2683BOTAN_FFI_EXPORT(3, 6)
2684int botan_tpm2_unauthenticated_session_init(botan_tpm2_session_t* session_out, botan_tpm2_ctx_t ctx);
2690BOTAN_FFI_EXPORT(3, 6)
2691int botan_tpm2_session_destroy(botan_tpm2_session_t session);
2693/* NOLINTEND(*-macro-usage,*-misplaced-const) */
int botan_mp_lshift(botan_mp_t out, botan_mp_t in, size_t shift)
int botan_block_cipher_get_keyspec(botan_block_cipher_t cipher, size_t *out_minimum_keylength, size_t *out_maximum_keylength, size_t *out_keylength_modulo)
int botan_block_cipher_init(botan_block_cipher_t *bc, const char *cipher_name)
int botan_mp_is_prime(botan_mp_t n, botan_rng_t rng, size_t test_prob)
int botan_rng_reseed_from_rng(botan_rng_t rng, botan_rng_t source_rng, size_t bits)
int botan_ec_group_get_g_x(botan_mp_t *g_x, botan_ec_group_t ec_group)
int botan_mp_div(botan_mp_t quotient, botan_mp_t remainder, botan_mp_t x, botan_mp_t y)
uint32_t botan_version_minor(void)
int botan_mp_set_from_int(botan_mp_t mp, int initial_value)
int botan_mp_to_bin(botan_mp_t mp, uint8_t vec[])
int botan_bcrypt_generate(uint8_t *out, size_t *out_len, const char *password, botan_rng_t rng, size_t work_factor, uint32_t flags)
int botan_privkey_check_key(botan_privkey_t key, botan_rng_t rng, uint32_t flags)
int botan_base64_encode(const uint8_t *x, size_t len, char *out, size_t *out_len)
int botan_privkey_create_elgamal(botan_privkey_t *key, botan_rng_t rng, size_t pbits, size_t qbits)
int botan_mp_rand_range(botan_mp_t rand_out, botan_rng_t rng, botan_mp_t lower_bound, botan_mp_t upper_bound)
int botan_hash_update(botan_hash_t hash, const uint8_t *in, size_t in_len)
int botan_mp_rshift(botan_mp_t out, botan_mp_t in, size_t shift)
int botan_nist_kw_enc(const char *cipher_algo, int padded, 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)
int botan_privkey_create_rsa(botan_privkey_t *key, botan_rng_t rng, size_t n_bits)
uint32_t botan_version_datestamp(void)
uint32_t botan_version_patch(void)
int botan_privkey_create_ecdsa(botan_privkey_t *key, botan_rng_t rng, const char *params)
int botan_mp_set_from_radix_str(botan_mp_t dest, const char *str, size_t radix)
int botan_rng_add_entropy(botan_rng_t rng, const uint8_t *entropy, size_t entropy_len)
int botan_cipher_start(botan_cipher_t cipher, const uint8_t *nonce, size_t nonce_len)
int botan_mp_add(botan_mp_t result, botan_mp_t x, botan_mp_t y)
int botan_oid_cmp(int *result, botan_asn1_oid_t a, botan_asn1_oid_t b)
int botan_mp_powmod(botan_mp_t out, botan_mp_t base, botan_mp_t exponent, botan_mp_t modulus)
uint32_t botan_version_major(void)
int botan_cipher_valid_nonce_length(botan_cipher_t cipher, size_t nl)
int botan_ec_group_view_pem(botan_ec_group_t ec_group, botan_view_ctx ctx, botan_view_str_fn view)
int botan_mac_init(botan_mac_t *mac, const char *mac_name, uint32_t flags)
int botan_ec_group_get_curve_oid(botan_asn1_oid_t *oid, botan_ec_group_t ec_group)
int botan_mp_to_uint32(botan_mp_t mp, uint32_t *val)
int botan_privkey_create_dh(botan_privkey_t *key, botan_rng_t rng, const char *param)
int botan_hash_name(botan_hash_t hash, char *name, size_t *name_len)
int botan_cipher_get_tag_length(botan_cipher_t cipher, size_t *tag_size)
int botan_ec_group_from_params(botan_ec_group_t *ec_group, botan_asn1_oid_t oid, botan_mp_t p, botan_mp_t a, botan_mp_t b, botan_mp_t base_x, botan_mp_t base_y, botan_mp_t order)
int botan_ec_group_get_g_y(botan_mp_t *g_y, botan_ec_group_t ec_group)
int botan_privkey_get_field(botan_mp_t output, botan_privkey_t key, const char *field_name)
int botan_rng_init_custom(botan_rng_t *rng_out, const char *rng_name, void *context, int(*get_cb)(void *context, uint8_t *out, size_t out_len), int(*add_entropy_cb)(void *context, const uint8_t input[], size_t length), void(*destroy_cb)(void *context))
#define BOTAN_FFI_EXPORT(maj, min)
int botan_pwdhash_timed(const char *algo, uint32_t msec, size_t *param1, size_t *param2, size_t *param3, uint8_t out[], size_t out_len, const char *passphrase, size_t passphrase_len, const uint8_t salt[], size_t salt_len)
int botan_rng_reseed(botan_rng_t rng, size_t bits)
int botan_mp_init(botan_mp_t *mp)
int botan_same_mem(const uint8_t *x, const uint8_t *y, size_t len)
int botan_privkey_load(botan_privkey_t *key, botan_rng_t rng, const uint8_t bits[], size_t len, const char *password)
struct botan_mac_struct * botan_mac_t
int botan_mp_to_str(botan_mp_t mp, uint8_t radix, char *out, size_t *out_len)
int botan_base64_decode(const char *base64_str, size_t in_len, uint8_t *out, size_t *out_len)
int botan_mac_destroy(botan_mac_t mac)
int botan_mp_is_odd(botan_mp_t mp)
struct botan_asn1_oid_struct * botan_asn1_oid_t
int botan_cipher_requires_entire_message(botan_cipher_t cipher)
struct botan_privkey_struct * botan_privkey_t
int botan_cipher_output_length(botan_cipher_t cipher, size_t in_len, size_t *out_len)
int botan_oid_from_string(botan_asn1_oid_t *oid, const char *oid_str)
int botan_cipher_reset(botan_cipher_t cipher)
int botan_cipher_init(botan_cipher_t *cipher, const char *name, uint32_t flags)
int botan_block_cipher_clear(botan_block_cipher_t bc)
int botan_privkey_export(botan_privkey_t key, uint8_t out[], size_t *out_len, uint32_t flags)
int botan_hash_destroy(botan_hash_t hash)
int botan_mac_set_nonce(botan_mac_t mac, const uint8_t *nonce, size_t nonce_len)
int botan_block_cipher_block_size(botan_block_cipher_t bc)
int botan_cipher_destroy(botan_cipher_t cipher)
#define BOTAN_FFI_DEPRECATED(msg)
int botan_mp_num_bytes(botan_mp_t n, size_t *bytes)
int botan_cipher_name(botan_cipher_t cipher, char *name, size_t *name_len)
int botan_cipher_set_associated_data(botan_cipher_t cipher, const uint8_t *ad, size_t ad_len)
int botan_mp_view_hex(botan_mp_t mp, botan_view_ctx ctx, botan_view_str_fn view)
int botan_privkey_destroy(botan_privkey_t key)
int botan_mp_from_bin(botan_mp_t mp, const uint8_t vec[], size_t vec_len)
int botan_ec_group_get_a(botan_mp_t *a, botan_ec_group_t ec_group)
int botan_block_cipher_decrypt_blocks(botan_block_cipher_t bc, const uint8_t in[], uint8_t out[], size_t blocks)
int botan_hash_clear(botan_hash_t hash)
int botan_mp_add_u32(botan_mp_t result, botan_mp_t x, uint32_t y)
int botan_mp_to_hex(botan_mp_t mp, char *out)
int botan_privkey_view_der(botan_privkey_t key, botan_view_ctx ctx, botan_view_bin_fn view)
int botan_mp_swap(botan_mp_t x, botan_mp_t y)
int botan_mp_destroy(botan_mp_t mp)
uint32_t botan_ffi_api_version(void)
int botan_mp_mod_mul(botan_mp_t result, botan_mp_t x, botan_mp_t y, botan_mp_t mod)
int botan_privkey_view_raw(botan_privkey_t key, botan_view_ctx ctx, botan_view_bin_fn view)
int botan_hash_output_length(botan_hash_t hash, size_t *output_length)
int botan_ec_group_equal(botan_ec_group_t curve1, botan_ec_group_t curve2)
int botan_mp_rand_bits(botan_mp_t rand_out, botan_rng_t rng, size_t bits)
int botan_cipher_set_key(botan_cipher_t cipher, const uint8_t *key, size_t key_len)
int botan_mp_equal(botan_mp_t x, botan_mp_t y)
int botan_ec_group_view_der(botan_ec_group_t ec_group, botan_view_ctx ctx, botan_view_bin_fn view)
int botan_oid_register(botan_asn1_oid_t oid, const char *name)
int botan_mp_set_from_str(botan_mp_t dest, const char *str)
int botan_mp_flip_sign(botan_mp_t mp)
int botan_scrypt(uint8_t out[], size_t out_len, const char *passphrase, const uint8_t salt[], size_t salt_len, size_t N, size_t r, size_t p)
int botan_cipher_get_ideal_update_granularity(botan_cipher_t cipher, size_t *ug)
int botan_mp_clear_bit(botan_mp_t n, size_t bit)
int botan_mp_is_zero(botan_mp_t mp)
int botan_mp_mod_inverse(botan_mp_t out, botan_mp_t in, botan_mp_t modulus)
int botan_mp_cmp(int *result, botan_mp_t x, botan_mp_t y)
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, size_t iterations)
int botan_mp_gcd(botan_mp_t out, botan_mp_t x, botan_mp_t y)
struct botan_block_cipher_struct * botan_block_cipher_t
struct botan_ec_group_struct * botan_ec_group_t
int botan_system_rng_get(uint8_t *out, size_t out_len)
const char * botan_version_string(void)
int botan_hex_encode(const uint8_t *x, size_t len, char *out, uint32_t flags)
int botan_mp_clear(botan_mp_t mp)
int botan_ec_group_supports_named_group(const char *name, int *out)
int botan_cipher_is_authenticated(botan_cipher_t cipher)
int botan_mp_view_str(botan_mp_t mp, uint8_t radix, botan_view_ctx ctx, botan_view_str_fn view)
int botan_mp_get_bit(botan_mp_t n, size_t bit)
int botan_privkey_load_sm2(botan_privkey_t *key, botan_mp_t scalar, const char *curve_name)
int botan_mac_final(botan_mac_t mac, uint8_t out[])
int botan_ec_group_get_order(botan_mp_t *order, botan_ec_group_t ec_group)
int botan_block_cipher_name(botan_block_cipher_t cipher, char *name, size_t *name_len)
int botan_rng_get(botan_rng_t rng, uint8_t *out, size_t out_len)
int(* botan_view_bin_fn)(botan_view_ctx view_ctx, const uint8_t *data, size_t len)
int botan_mp_sub_u32(botan_mp_t result, botan_mp_t x, uint32_t y)
int botan_scrub_mem(void *mem, size_t bytes)
int botan_mp_view_bin(botan_mp_t mp, botan_view_ctx ctx, botan_view_bin_fn view)
int botan_ec_group_from_oid(botan_ec_group_t *ec_group, botan_asn1_oid_t oid)
int botan_mp_num_bits(botan_mp_t n, size_t *bits)
int botan_oid_view_string(botan_asn1_oid_t oid, botan_view_ctx ctx, botan_view_str_fn view)
int botan_privkey_create(botan_privkey_t *key, const char *algo_name, const char *algo_params, botan_rng_t rng)
int botan_mac_update(botan_mac_t mac, const uint8_t *buf, size_t len)
int botan_privkey_create_mceliece(botan_privkey_t *key, botan_rng_t rng, size_t n, size_t t)
int botan_mp_mul(botan_mp_t result, botan_mp_t x, botan_mp_t y)
int botan_privkey_algo_name(botan_privkey_t key, char out[], size_t *out_len)
int botan_hash_block_size(botan_hash_t hash, size_t *block_size)
int botan_ec_group_from_name(botan_ec_group_t *ec_group, const char *name)
int botan_ec_group_supports_application_specific_group(int *out)
int botan_cipher_get_keyspec(botan_cipher_t cipher, size_t *min_keylen, size_t *max_keylen, size_t *mod_keylen)
int botan_pubkey_view_raw(botan_pubkey_t key, botan_view_ctx ctx, botan_view_bin_fn view)
int botan_hash_copy_state(botan_hash_t *dest, botan_hash_t source)
int botan_pubkey_get_field(botan_mp_t output, botan_pubkey_t key, const char *field_name)
int botan_privkey_create_dsa(botan_privkey_t *key, botan_rng_t rng, size_t pbits, size_t qbits)
int botan_ec_group_destroy(botan_ec_group_t ec_group)
int botan_ec_privkey_create(botan_privkey_t *key, const char *algo_name, botan_ec_group_t ec_group, botan_rng_t rng)
int botan_pubkey_load_sm2(botan_pubkey_t *key, botan_mp_t public_x, botan_mp_t public_y, const char *curve_name)
struct botan_mp_struct * botan_mp_t
struct botan_rng_struct * botan_rng_t
int botan_ec_group_get_b(botan_mp_t *b, botan_ec_group_t ec_group)
int botan_block_cipher_destroy(botan_block_cipher_t bc)
@ BOTAN_FFI_ERROR_TPM_ERROR
@ BOTAN_FFI_ERROR_NOT_IMPLEMENTED
@ BOTAN_FFI_ERROR_INVALID_KEY_LENGTH
@ BOTAN_FFI_ERROR_KEY_NOT_SET
@ BOTAN_FFI_ERROR_TLS_ERROR
@ BOTAN_FFI_ERROR_EXCEPTION_THROWN
@ BOTAN_FFI_ERROR_OUT_OF_MEMORY
@ BOTAN_FFI_ERROR_INTERNAL_ERROR
@ BOTAN_FFI_INVALID_VERIFIER
@ BOTAN_FFI_ERROR_INVALID_OBJECT
@ BOTAN_FFI_ERROR_UNKNOWN_ERROR
@ BOTAN_FFI_ERROR_HTTP_ERROR
@ BOTAN_FFI_ERROR_BAD_FLAG
@ BOTAN_FFI_ERROR_INVALID_INPUT
@ BOTAN_FFI_ERROR_STRING_CONVERSION_ERROR
@ BOTAN_FFI_ERROR_NULL_POINTER
@ BOTAN_FFI_ERROR_SYSTEM_ERROR
@ BOTAN_FFI_ERROR_ROUGHTIME_ERROR
@ BOTAN_FFI_ERROR_NO_VALUE
@ BOTAN_FFI_ERROR_INVALID_OBJECT_STATE
@ BOTAN_FFI_ERROR_INSUFFICIENT_BUFFER_SPACE
@ BOTAN_FFI_ERROR_BAD_MAC
@ BOTAN_FFI_ERROR_BAD_PARAMETER
int botan_pwdhash(const char *algo, size_t param1, size_t param2, size_t param3, uint8_t out[], size_t out_len, const char *passphrase, size_t passphrase_len, const uint8_t salt[], size_t salt_len)
int botan_mac_name(botan_mac_t mac, char *name, size_t *name_len)
int botan_oid_view_name(botan_asn1_oid_t oid, botan_view_ctx ctx, botan_view_str_fn view)
int botan_cipher_clear(botan_cipher_t hash)
int botan_mp_is_even(botan_mp_t mp)
int botan_ec_group_get_p(botan_mp_t *p, botan_ec_group_t ec_group)
int botan_ec_group_from_ber(botan_ec_group_t *ec_group, const uint8_t *ber, size_t ber_len)
int botan_rng_destroy(botan_rng_t rng)
int botan_ffi_supports_api(uint32_t api_version)
const char * botan_error_description(int err)
int botan_oid_equal(botan_asn1_oid_t a, botan_asn1_oid_t b)
int botan_hash_final(botan_hash_t hash, uint8_t out[])
const char * botan_error_last_exception_message(void)
int botan_hash_init(botan_hash_t *hash, const char *hash_name, uint32_t flags)
int botan_mac_get_keyspec(botan_mac_t mac, size_t *out_minimum_keylength, size_t *out_maximum_keylength, size_t *out_keylength_modulo)
struct botan_cipher_struct * botan_cipher_t
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)
Encrypt/Decrypt some data and/or finalize the encryption/decryption.
int botan_mac_output_length(botan_mac_t mac, size_t *output_length)
int(* botan_view_str_fn)(botan_view_ctx view_ctx, const char *str, size_t len)
int botan_constant_time_compare(const uint8_t *x, const uint8_t *y, size_t len)
int botan_ec_group_from_pem(botan_ec_group_t *ec_group, const char *pem)
int botan_mp_is_negative(botan_mp_t mp)
int botan_hex_decode(const char *hex_str, size_t in_len, uint8_t *out, size_t *out_len)
int botan_mac_set_key(botan_mac_t mac, const uint8_t *key, size_t key_len)
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, const uint8_t label[], size_t label_len)
int botan_mp_sub(botan_mp_t result, botan_mp_t x, botan_mp_t y)
int botan_privkey_create_ecdh(botan_privkey_t *key, botan_rng_t rng, const char *params)
int botan_rng_init(botan_rng_t *rng, const char *rng_type)
int botan_block_cipher_encrypt_blocks(botan_block_cipher_t bc, const uint8_t in[], uint8_t out[], size_t blocks)
int botan_cipher_get_default_nonce_length(botan_cipher_t cipher, size_t *nl)
int botan_mp_is_positive(botan_mp_t mp)
int botan_privkey_view_pem(botan_privkey_t key, botan_view_ctx ctx, botan_view_str_fn view)
int botan_oid_destroy(botan_asn1_oid_t oid)
int botan_nist_kw_dec(const char *cipher_algo, int padded, 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)
int botan_cipher_query_keylen(botan_cipher_t cipher, size_t *out_minimum_keylength, size_t *out_maximum_keylength)
int botan_cipher_get_update_granularity(botan_cipher_t cipher, size_t *ug)
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, size_t milliseconds_to_run, size_t *out_iterations_used)
int botan_mac_clear(botan_mac_t mac)
int botan_block_cipher_set_key(botan_block_cipher_t bc, const uint8_t key[], size_t len)
int botan_mp_set_bit(botan_mp_t n, size_t bit)
int botan_bcrypt_is_valid(const char *pass, const char *hash)
int botan_mp_set_from_mp(botan_mp_t dest, botan_mp_t source)
struct botan_hash_struct * botan_hash_t