11#include <botan/hash.h> 
   13#include <botan/internal/ffi_mp.h> 
   14#include <botan/internal/ffi_pkey.h> 
   15#include <botan/internal/ffi_rng.h> 
   16#include <botan/internal/ffi_util.h> 
   18#if defined(BOTAN_HAS_DL_GROUP) 
   19   #include <botan/dl_group.h> 
   22#if defined(BOTAN_HAS_ECC_PUBLIC_KEY_CRYPTO) 
   23   #include <botan/ecc_key.h> 
   26#if defined(BOTAN_HAS_RSA) 
   27   #include <botan/rsa.h> 
   30#if defined(BOTAN_HAS_ELGAMAL) 
   31   #include <botan/elgamal.h> 
   34#if defined(BOTAN_HAS_DSA) 
   35   #include <botan/dsa.h> 
   38#if defined(BOTAN_HAS_ECDSA) 
   39   #include <botan/ecdsa.h> 
   42#if defined(BOTAN_HAS_SM2) 
   43   #include <botan/sm2.h> 
   46#if defined(BOTAN_HAS_ECDH) 
   47   #include <botan/ecdh.h> 
   50#if defined(BOTAN_HAS_X25519) 
   51   #include <botan/x25519.h> 
   54#if defined(BOTAN_HAS_X448) 
   55   #include <botan/x448.h> 
   58#if defined(BOTAN_HAS_ED25519) 
   59   #include <botan/ed25519.h> 
   62#if defined(BOTAN_HAS_ED448) 
   63   #include <botan/ed448.h> 
   66#if defined(BOTAN_HAS_MCELIECE) 
   67   #include <botan/mceliece.h> 
   70#if defined(BOTAN_HAS_DIFFIE_HELLMAN) 
   74#if defined(BOTAN_HAS_KYBER) || defined(BOTAN_HAS_KYBER_90S) 
   75   #include <botan/kyber.h> 
   78#if defined(BOTAN_HAS_ML_KEM) 
   79   #include <botan/ml_kem.h> 
   82#if defined(BOTAN_HAS_FRODOKEM) 
   83   #include <botan/frodokem.h> 
   86#if defined(BOTAN_HAS_ML_DSA) 
   87   #include <botan/ml_dsa.h> 
   90#if defined(BOTAN_HAS_SLH_DSA_WITH_SHA2) || defined(BOTAN_HAS_SLH_DSA_WITH_SHAKE) 
   91   #include <botan/slh_dsa.h> 
   94#if defined(BOTAN_HAS_CLASSICMCELIECE) 
   95   #include <botan/cmce.h> 
  100#if defined(BOTAN_HAS_ECC_PUBLIC_KEY_CRYPTO) 
  104template <
class ECPrivateKey_t>
 
  105int privkey_load_ec(std::unique_ptr<ECPrivateKey_t>& key, 
const Botan::BigInt& scalar, 
const char* curve_name) {
 
  106   if(curve_name == 
nullptr) {
 
  115   key.reset(
new ECPrivateKey_t(null_rng, grp, scalar));
 
  119template <
class ECPublicKey_t>
 
  120int pubkey_load_ec(std::unique_ptr<ECPublicKey_t>& key,
 
  123                   const char* curve_name) {
 
  124   if(curve_name == 
nullptr) {
 
  135      key.reset(
new ECPublicKey_t(group, pt.value()));
 
  145#if defined(BOTAN_HAS_ECC_PUBLIC_KEY_CRYPTO) 
  148      if(field == 
"public_x") {
 
  150      } 
else if(field == 
"public_y") {
 
  164#if defined(BOTAN_HAS_ECC_PUBLIC_KEY_CRYPTO) 
  167      if(field == 
"public_x") {
 
  169      } 
else if(field == 
"public_y") {
 
  189   if(field_name_cstr == 
nullptr) {
 
  193   const std::string field_name(field_name_cstr);
 
 
  199   if(field_name_cstr == 
nullptr) {
 
  203   const std::string field_name(field_name_cstr);
 
 
  211   if(n_bits < 1024 || n_bits > 16 * 1024) {
 
  215   std::string n_str = std::to_string(n_bits);
 
 
  221#if defined(BOTAN_HAS_RSA) 
 
  238#if defined(BOTAN_HAS_RSA) 
  239   if(key == 
nullptr || bits == 
nullptr) {
 
  246      auto rsa = std::make_unique<Botan::RSA_PrivateKey>(alg_id, std::span{bits, len});
 
 
  256#if defined(BOTAN_HAS_RSA) 
  262      auto rsa = std::make_unique<Botan::RSA_PublicKey>(
safe_get(n), 
safe_get(e));
 
 
  300#if defined(BOTAN_HAS_RSA) 
 
  325#if defined(BOTAN_HAS_DSA) 
  327   if((rng_obj == 
nullptr) || (key == 
nullptr)) {
 
  331   if((pbits % 64 != 0) || (qbits % 8 != 0) || (pbits < 1024) || (pbits > 3072) || (qbits < 160) || (qbits > 256)) {
 
  338      auto dsa = std::make_unique<Botan::DSA_PrivateKey>(rng, group);
 
 
  348#if defined(BOTAN_HAS_DSA) 
  356      auto dsa = std::make_unique<Botan::DSA_PrivateKey>(group, 
safe_get(x));
 
 
  366#if defined(BOTAN_HAS_DSA) 
  374      auto dsa = std::make_unique<Botan::DSA_PublicKey>(group, 
safe_get(y));
 
 
  410#if defined(BOTAN_HAS_ECC_KEY) 
  415      if(ec_key == 
nullptr) {
 
 
  432                            const char* curve_name) {
 
  433#if defined(BOTAN_HAS_ECDSA) 
  434   if(key == 
nullptr || curve_name == 
nullptr) {
 
  440      std::unique_ptr<Botan::ECDSA_PublicKey> p_key;
 
  442      int rc = pubkey_load_ec(p_key, 
safe_get(public_x), 
safe_get(public_y), curve_name);
 
 
  456#if defined(BOTAN_HAS_ECDSA) 
  457   if(key == 
nullptr || curve_name == 
nullptr) {
 
  463      std::unique_ptr<Botan::ECDSA_PrivateKey> p_key;
 
  464      int rc = privkey_load_ec(p_key, 
safe_get(scalar), curve_name);
 
 
  478#if defined(BOTAN_HAS_ELGAMAL) 
  479   if(key == 
nullptr || rng_obj == 
nullptr) {
 
  484   if(pbits < 1024 || qbits < 160) {
 
  494      auto elg = std::make_unique<Botan::ElGamal_PrivateKey>(rng, group);
 
 
  504#if defined(BOTAN_HAS_ELGAMAL) 
  511      auto elg = std::make_unique<Botan::ElGamal_PublicKey>(group, 
safe_get(y));
 
 
  521#if defined(BOTAN_HAS_ELGAMAL) 
  528      auto elg = std::make_unique<Botan::ElGamal_PrivateKey>(group, 
safe_get(x));
 
 
  544#if defined(BOTAN_HAS_DIFFIE_HELLMAN) 
  551      auto dh = std::make_unique<Botan::DH_PrivateKey>(group, 
safe_get(x));
 
 
  561#if defined(BOTAN_HAS_DIFFIE_HELLMAN) 
  568      auto dh = std::make_unique<Botan::DH_PublicKey>(group, 
safe_get(y));
 
 
  580   if(key_obj == 
nullptr || param_str == 
nullptr) {
 
  585   const std::string params(param_str);
 
  587   if(params == 
"X25519" || params == 
"x25519" || params == 
"curve25519") {
 
  591   if(params == 
"X448" || params == 
"x448") {
 
 
  601                           const char* curve_name) {
 
  602#if defined(BOTAN_HAS_ECDH) 
  603   if(key == 
nullptr || curve_name == 
nullptr) {
 
  608      std::unique_ptr<Botan::ECDH_PublicKey> p_key;
 
  609      int rc = pubkey_load_ec(p_key, 
safe_get(public_x), 
safe_get(public_y), curve_name);
 
 
  623#if defined(BOTAN_HAS_ECDH) 
  624   if(key == 
nullptr || curve_name == 
nullptr) {
 
  629      std::unique_ptr<Botan::ECDH_PrivateKey> p_key;
 
  630      int rc = privkey_load_ec(p_key, 
safe_get(scalar), curve_name);
 
 
  645   uint8_t out[], 
size_t* out_len, 
const char* ident, 
const char* hash_algo, 
const botan_pubkey_t key) {
 
  646   if(out == 
nullptr || out_len == 
nullptr || ident == 
nullptr || hash_algo == 
nullptr || key == 
nullptr) {
 
  650#if defined(BOTAN_HAS_SM2) 
  655      if(ec_key == 
nullptr) {
 
  663      const std::string ident_str(ident);
 
 
  680                          const char* curve_name) {
 
  681#if defined(BOTAN_HAS_SM2) 
  682   if(key == 
nullptr || curve_name == 
nullptr) {
 
  688      std::unique_ptr<Botan::SM2_PublicKey> p_key;
 
  689      if(pubkey_load_ec(p_key, 
safe_get(public_x), 
safe_get(public_y), curve_name) == 0) {
 
 
  702#if defined(BOTAN_HAS_SM2) 
  703   if(key == 
nullptr || curve_name == 
nullptr) {
 
  709      std::unique_ptr<Botan::SM2_PrivateKey> p_key;
 
  710      int rc = privkey_load_ec(p_key, 
safe_get(scalar), curve_name);
 
 
  726                              const char* curve_name) {
 
 
  737#if defined(BOTAN_HAS_ED25519) 
 
  754#if defined(BOTAN_HAS_ED25519) 
  760      const std::vector<uint8_t> pubkey_vec(pubkey, pubkey + 32);
 
  761      auto ed25519 = std::make_unique<Botan::Ed25519_PublicKey>(pubkey_vec);
 
 
  771#if defined(BOTAN_HAS_ED25519) 
  774         const auto ed_key = ed->raw_private_key_bits();
 
  775         if(ed_key.size() != 64) {
 
 
  791#if defined(BOTAN_HAS_ED25519) 
  794         const std::vector<uint8_t>& ed_key = ed->get_public_key();
 
  795         if(ed_key.size() != 32) {
 
 
  813#if defined(BOTAN_HAS_ED448) 
  819      auto ed448 = std::make_unique<Botan::Ed448_PrivateKey>(std::span(privkey, 57));
 
 
  829#if defined(BOTAN_HAS_ED448) 
  835      auto ed448 = std::make_unique<Botan::Ed448_PublicKey>(std::span(pubkey, 57));
 
 
  845#if defined(BOTAN_HAS_ED448) 
  848         const auto ed_key = ed->raw_private_key_bits();
 
 
  862#if defined(BOTAN_HAS_ED448) 
  865         const auto ed_key = ed->public_key_bits();
 
 
  881#if defined(BOTAN_HAS_X25519) 
  887      auto x25519 = std::make_unique<Botan::X25519_PrivateKey>(std::span{privkey, 32});
 
 
  897#if defined(BOTAN_HAS_X25519) 
  903      auto x25519 = std::make_unique<Botan::X25519_PublicKey>(std::span{pubkey, 32});
 
 
  913#if defined(BOTAN_HAS_X25519) 
  916         const auto x25519_key = x25519->raw_private_key_bits();
 
  917         if(x25519_key.size() != 32) {
 
 
  933#if defined(BOTAN_HAS_X25519) 
 
  951#if defined(BOTAN_HAS_X448) 
  957      auto x448 = std::make_unique<Botan::X448_PrivateKey>(std::span{privkey, 56});
 
 
  967#if defined(BOTAN_HAS_X448) 
  973      auto x448 = std::make_unique<Botan::X448_PublicKey>(std::span{pubkey, 56});
 
 
  983#if defined(BOTAN_HAS_X448) 
  986         const auto x448_key = x448->raw_private_key_bits();
 
 
 1000#if defined(BOTAN_HAS_X448) 
 
 1020#if defined(BOTAN_HAS_KYBER) 
 1021   if(key == 
nullptr) {
 
 1026   const auto mode = [](
size_t len) -> std::optional<Botan::KyberMode> {
 
 1029      } 
else if(len == 2400) {
 
 1031      } 
else if(len == 3168) {
 
 1038   if(mode.has_value()) {
 
 1040         auto kyber = std::make_unique<Botan::Kyber_PrivateKey>(std::span{privkey, key_len}, *mode);
 
 
 1053#if defined(BOTAN_HAS_KYBER) 
 1054   if(key == 
nullptr) {
 
 1059   const auto mode = [](
size_t len) -> std::optional<Botan::KyberMode> {
 
 1062      } 
else if(len == 1184) {
 
 1064      } 
else if(len == 1568) {
 
 1071   if(mode.has_value()) {
 
 1072      auto kyber = std::make_unique<Botan::Kyber_PublicKey>(std::span{pubkey, key_len}, *mode);
 
 
 1084#if defined(BOTAN_HAS_KYBER) 
 
 1099#if defined(BOTAN_HAS_KYBER) 
 
 1118#if defined(BOTAN_HAS_ML_KEM) 
 1119   if(key == 
nullptr || privkey == 
nullptr || mlkem_mode == 
nullptr) {
 
 1127      if(!mode.is_ml_kem()) {
 
 1131      auto mlkem_key = std::make_unique<Botan::ML_KEM_PrivateKey>(std::span{privkey, key_len}, mode);
 
 
 1141#if defined(BOTAN_HAS_ML_KEM) 
 1142   if(key == 
nullptr || pubkey == 
nullptr || mlkem_mode == 
nullptr) {
 
 1150      if(!mode.is_ml_kem()) {
 
 1154      auto mlkem_key = std::make_unique<Botan::ML_KEM_PublicKey>(std::span{pubkey, key_len}, mode.mode());
 
 
 1168#if defined(BOTAN_HAS_ML_DSA) 
 1169   if(key == 
nullptr || privkey == 
nullptr || mldsa_mode == 
nullptr) {
 
 1177      if(!mode.is_ml_dsa()) {
 
 1181      auto mldsa_key = std::make_unique<Botan::ML_DSA_PrivateKey>(std::span{privkey, key_len}, mode);
 
 
 1191#if defined(BOTAN_HAS_ML_DSA) 
 1192   if(key == 
nullptr || pubkey == 
nullptr || mldsa_mode == 
nullptr) {
 
 1200      if(!mode.is_ml_dsa()) {
 
 1204      auto mldsa_key = std::make_unique<Botan::ML_DSA_PublicKey>(std::span{pubkey, key_len}, mode);
 
 
 1218#if defined(BOTAN_HAS_SLH_DSA_WITH_SHA2) || defined(BOTAN_HAS_SLH_DSA_WITH_SHAKE) 
 1219   if(key == 
nullptr || privkey == 
nullptr || slhdsa_mode == 
nullptr) {
 
 1226      auto mode = Botan::SLH_DSA_Parameters::create(slhdsa_mode);
 
 1227      if(!mode.is_slh_dsa()) {
 
 1231      auto slhdsa_key = std::make_unique<Botan::SLH_DSA_PrivateKey>(std::span{privkey, key_len}, mode);
 
 
 1241#if defined(BOTAN_HAS_SLH_DSA_WITH_SHA2) || defined(BOTAN_HAS_SLH_DSA_WITH_SHAKE) 
 1242   if(key == 
nullptr || pubkey == 
nullptr || slhdsa_mode == 
nullptr) {
 
 1249      auto mode = Botan::SLH_DSA_Parameters::create(slhdsa_mode);
 
 1250      if(!mode.is_slh_dsa()) {
 
 1254      auto mldsa_key = std::make_unique<Botan::SLH_DSA_PublicKey>(std::span{pubkey, key_len}, mode);
 
 
 1268#if defined(BOTAN_HAS_FRODOKEM) 
 1269   if(key == 
nullptr || privkey == 
nullptr || frodo_mode == 
nullptr) {
 
 1277      auto frodo_key = std::make_unique<Botan::FrodoKEM_PrivateKey>(std::span{privkey, key_len}, mode);
 
 
 1287#if defined(BOTAN_HAS_FRODOKEM) 
 1288   if(key == 
nullptr || pubkey == 
nullptr || frodo_mode == 
nullptr) {
 
 1296      auto frodo_key = std::make_unique<Botan::FrodoKEM_PublicKey>(std::span{pubkey, key_len}, mode);
 
 
 1310                                        const uint8_t privkey[],
 
 1312                                        const char* cmce_mode) {
 
 1313#if defined(BOTAN_HAS_CLASSICMCELIECE) 
 1314   if(key == 
nullptr || privkey == 
nullptr || cmce_mode == 
nullptr) {
 
 1322      auto cmce_key = std::make_unique<Botan::Classic_McEliece_PrivateKey>(std::span{privkey, key_len}, mode);
 
 
 1332                                       const uint8_t pubkey[],
 
 1334                                       const char* cmce_mode) {
 
 1335#if defined(BOTAN_HAS_CLASSICMCELIECE) 
 1336   if(key == 
nullptr || pubkey == 
nullptr || cmce_mode == 
nullptr) {
 
 1344      auto cmce_key = std::make_unique<Botan::Classic_McEliece_PublicKey>(std::span{pubkey, key_len}, mode);
 
 
 1354#if defined(BOTAN_HAS_ECC_PUBLIC_KEY_CRYPTO) 
 1357         auto pt = ecc->_public_ec_point().serialize_uncompressed();
 
 
 1372   const std::string mce_params = std::to_string(n) + 
"," + std::to_string(t);
 
 
 1384   BOTAN_UNUSED(mce_key_obj, aead, ct, ct_len, ad, ad_len, out, out_len);
 
 
 1397   BOTAN_UNUSED(mce_key_obj, rng_obj, aead, pt, pt_len, ad, ad_len, out, out_len);
 
 
virtual std::string algo_name() const =0
 
virtual const BigInt & get_int_field(std::string_view field) const
 
static BigInt from_bytes(std::span< const uint8_t > bytes)
 
static Classic_McEliece_Parameter_Set from_string(std::string_view param_name)
Get the parameter set for a given parameter set name.
 
static std::optional< EC_AffinePoint > from_bigint_xy(const EC_Group &group, const BigInt &x, const BigInt &y)
 
static EC_Group from_name(std::string_view name)
 
bool used_explicit_encoding() const
 
static bool supports_named_group(std::string_view name)
 
const EC_Group & domain() const
 
const EC_AffinePoint & _public_ec_point() const
 
static Ed25519_PrivateKey from_seed(std::span< const uint8_t > seed)
 
A private key for Ed448/Ed448ph according to RFC 8032.
 
A public key for Ed448/Ed448ph according to RFC 8032.
 
static std::unique_ptr< HashFunction > create_or_throw(std::string_view algo_spec, std::string_view provider="")
 
A private key for the X448 key agreement scheme according to RFC 7748.
 
A public key for the X448 key agreement scheme according to RFC 7748.
 
struct botan_pubkey_struct * botan_pubkey_t
 
struct botan_privkey_struct * botan_privkey_t
 
int(* botan_view_bin_fn)(botan_view_ctx view_ctx, const uint8_t *data, size_t len)
 
int botan_privkey_create(botan_privkey_t *key, const char *algo_name, const char *algo_params, botan_rng_t rng)
 
#define BOTAN_PRIVKEY_EXPORT_FLAG_PEM
 
struct botan_mp_struct * botan_mp_t
 
struct botan_rng_struct * botan_rng_t
 
#define BOTAN_PRIVKEY_EXPORT_FLAG_DER
 
@ BOTAN_FFI_ERROR_NOT_IMPLEMENTED
 
@ BOTAN_FFI_ERROR_UNKNOWN_ERROR
 
@ BOTAN_FFI_ERROR_BAD_FLAG
 
@ BOTAN_FFI_ERROR_NULL_POINTER
 
@ BOTAN_FFI_ERROR_INSUFFICIENT_BUFFER_SPACE
 
@ BOTAN_FFI_ERROR_BAD_PARAMETER
 
int botan_privkey_create_elgamal(botan_privkey_t *key, botan_rng_t rng_obj, size_t pbits, size_t qbits)
 
int botan_pubkey_rsa_get_n(botan_mp_t n, botan_pubkey_t key)
 
int botan_privkey_load_x448(botan_privkey_t *key, const uint8_t privkey[56])
 
int botan_pubkey_get_field(botan_mp_t output, botan_pubkey_t key, const char *field_name_cstr)
 
int botan_pubkey_load_ml_dsa(botan_pubkey_t *key, const uint8_t pubkey[], size_t key_len, const char *mldsa_mode)
 
int botan_privkey_load_ecdh(botan_privkey_t *key, const botan_mp_t scalar, const char *curve_name)
 
int botan_privkey_view_kyber_raw_key(botan_privkey_t key, botan_view_ctx ctx, botan_view_bin_fn view)
 
int botan_pubkey_load_dh(botan_pubkey_t *key, botan_mp_t p, botan_mp_t g, botan_mp_t y)
 
int botan_pubkey_ed25519_get_pubkey(botan_pubkey_t key, uint8_t output[32])
 
int botan_privkey_rsa_get_privkey(botan_privkey_t rsa_key, uint8_t out[], size_t *out_len, uint32_t flags)
 
int botan_privkey_load_rsa_pkcs1(botan_privkey_t *key, const uint8_t bits[], size_t len)
 
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)
 
int botan_pubkey_load_slh_dsa(botan_pubkey_t *key, const uint8_t pubkey[], size_t key_len, const char *slhdsa_mode)
 
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)
 
int botan_pubkey_load_classic_mceliece(botan_pubkey_t *key, const uint8_t pubkey[], size_t key_len, const char *cmce_mode)
 
int botan_privkey_load_classic_mceliece(botan_privkey_t *key, const uint8_t privkey[], size_t key_len, const char *cmce_mode)
 
int botan_privkey_load_x25519(botan_privkey_t *key, const uint8_t privkey[32])
 
int botan_pubkey_dsa_get_p(botan_mp_t p, botan_pubkey_t key)
 
int botan_privkey_rsa_get_q(botan_mp_t q, botan_privkey_t key)
 
int botan_pubkey_ecc_key_used_explicit_encoding(botan_pubkey_t key)
 
int botan_pubkey_load_frodokem(botan_pubkey_t *key, const uint8_t pubkey[], size_t key_len, const char *frodo_mode)
 
int botan_privkey_ed25519_get_privkey(botan_privkey_t key, uint8_t output[64])
 
int botan_privkey_load_sm2_enc(botan_privkey_t *key, const botan_mp_t scalar, const char *curve_name)
 
int botan_privkey_get_field(botan_mp_t output, botan_privkey_t key, const char *field_name_cstr)
 
int botan_pubkey_x448_get_pubkey(botan_pubkey_t key, uint8_t output[56])
 
int botan_privkey_load_rsa(botan_privkey_t *key, botan_mp_t rsa_p, botan_mp_t rsa_q, botan_mp_t rsa_e)
 
int botan_pubkey_dsa_get_y(botan_mp_t y, botan_pubkey_t key)
 
int botan_pubkey_load_ml_kem(botan_pubkey_t *key, const uint8_t pubkey[], size_t key_len, const char *mlkem_mode)
 
int botan_privkey_load_ed448(botan_privkey_t *key, const uint8_t privkey[57])
 
int botan_pubkey_view_ec_public_point(const botan_pubkey_t key, botan_view_ctx ctx, botan_view_bin_fn view)
 
int botan_privkey_load_dh(botan_privkey_t *key, botan_mp_t p, botan_mp_t g, botan_mp_t x)
 
int botan_privkey_load_sm2(botan_privkey_t *key, const botan_mp_t scalar, const char *curve_name)
 
int botan_pubkey_load_ed25519(botan_pubkey_t *key, const uint8_t pubkey[32])
 
int botan_privkey_load_ecdsa(botan_privkey_t *key, const botan_mp_t scalar, const char *curve_name)
 
int botan_mceies_encrypt(botan_pubkey_t mce_key_obj, botan_rng_t rng_obj, const char *aead, const uint8_t pt[], size_t pt_len, const uint8_t ad[], size_t ad_len, uint8_t out[], size_t *out_len)
 
int botan_pubkey_x25519_get_pubkey(botan_pubkey_t key, uint8_t output[32])
 
int botan_pubkey_load_elgamal(botan_pubkey_t *key, botan_mp_t p, botan_mp_t g, botan_mp_t y)
 
int botan_privkey_load_slh_dsa(botan_privkey_t *key, const uint8_t privkey[], size_t key_len, const char *slhdsa_mode)
 
int botan_privkey_create_dsa(botan_privkey_t *key, botan_rng_t rng_obj, size_t pbits, size_t qbits)
 
int botan_privkey_rsa_get_p(botan_mp_t p, botan_privkey_t key)
 
int botan_privkey_create_mceliece(botan_privkey_t *key_obj, botan_rng_t rng_obj, size_t n, size_t t)
 
int botan_pubkey_load_ed448(botan_pubkey_t *key, const uint8_t pubkey[57])
 
int botan_privkey_load_ml_kem(botan_privkey_t *key, const uint8_t privkey[], size_t key_len, const char *mlkem_mode)
 
int botan_privkey_create_ecdh(botan_privkey_t *key_obj, botan_rng_t rng_obj, const char *param_str)
 
int botan_privkey_rsa_get_d(botan_mp_t d, botan_privkey_t key)
 
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)
 
int botan_mceies_decrypt(botan_privkey_t mce_key_obj, const char *aead, const uint8_t ct[], size_t ct_len, const uint8_t ad[], size_t ad_len, uint8_t out[], size_t *out_len)
 
int botan_pubkey_load_x25519(botan_pubkey_t *key, const uint8_t pubkey[32])
 
int botan_privkey_load_elgamal(botan_privkey_t *key, botan_mp_t p, botan_mp_t g, botan_mp_t x)
 
int botan_privkey_create_rsa(botan_privkey_t *key_obj, botan_rng_t rng_obj, size_t n_bits)
 
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)
 
int botan_pubkey_load_kyber(botan_pubkey_t *key, const uint8_t pubkey[], size_t key_len)
 
int botan_pubkey_ed448_get_pubkey(botan_pubkey_t key, uint8_t output[57])
 
int botan_privkey_create_dh(botan_privkey_t *key_obj, botan_rng_t rng_obj, const char *param_str)
 
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)
 
int botan_privkey_rsa_get_n(botan_mp_t n, botan_privkey_t key)
 
int botan_privkey_load_kyber(botan_privkey_t *key, const uint8_t privkey[], size_t key_len)
 
int botan_pubkey_rsa_get_e(botan_mp_t e, botan_pubkey_t key)
 
int botan_pubkey_dsa_get_g(botan_mp_t g, botan_pubkey_t key)
 
int botan_pubkey_dsa_get_q(botan_mp_t q, botan_pubkey_t key)
 
int botan_privkey_load_frodokem(botan_privkey_t *key, const uint8_t privkey[], size_t key_len, const char *frodo_mode)
 
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)
 
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)
 
int botan_privkey_load_ml_dsa(botan_privkey_t *key, const uint8_t privkey[], size_t key_len, const char *mldsa_mode)
 
int botan_privkey_x448_get_privkey(botan_privkey_t key, uint8_t output[56])
 
int botan_privkey_load_ed25519(botan_privkey_t *key, const uint8_t privkey[32])
 
int botan_privkey_rsa_get_e(botan_mp_t e, botan_privkey_t key)
 
int botan_privkey_x25519_get_privkey(botan_privkey_t key, uint8_t output[32])
 
int botan_privkey_ed448_get_privkey(botan_privkey_t key, uint8_t output[57])
 
int botan_privkey_dsa_get_x(botan_mp_t x, botan_privkey_t key)
 
int botan_pubkey_load_rsa(botan_pubkey_t *key, botan_mp_t n, botan_mp_t e)
 
int botan_privkey_create_ecdsa(botan_privkey_t *key_obj, botan_rng_t rng_obj, const char *param_str)
 
int botan_pubkey_view_kyber_raw_key(botan_pubkey_t key, botan_view_ctx ctx, botan_view_bin_fn view)
 
int botan_pubkey_load_x448(botan_pubkey_t *key, const uint8_t pubkey[56])
 
#define BOTAN_FFI_VISIT(obj, lambda)
 
std::string encode(const uint8_t der[], size_t length, std::string_view label, size_t width)
 
int invoke_view_callback(botan_view_bin_fn view, botan_view_ctx ctx, std::span< const uint8_t > buf)
 
T & safe_get(botan_struct< T, M > *p)
 
BOTAN_FFI_ERROR ffi_new_object(T *obj, Args &&... args)
 
int ffi_guard_thunk(const char *func_name, T thunk)
 
int write_vec_output(uint8_t out[], size_t *out_len, std::span< const uint8_t > buf)
 
int write_str_output(char out[], size_t *out_len, const std::string &str)
 
DilithiumMode ML_DSA_Mode
 
constexpr void copy_mem(T *out, const T *in, size_t n)
 
std::vector< uint8_t > sm2_compute_za(HashFunction &hash, std::string_view user_id, const EC_Group &group, const EC_AffinePoint &pubkey)