9#include <botan/internal/ffi_util.h>
11#if defined(BOTAN_HAS_NIST_KEYWRAP)
12 #include <botan/block_cipher.h>
13 #include <botan/nist_keywrap.h>
21 const uint8_t key[],
size_t key_len,
22 const uint8_t kek[],
size_t kek_len,
23 uint8_t wrapped_key[],
size_t *wrapped_key_len)
25#if defined(BOTAN_HAS_NIST_KEYWRAP)
27 if(padded != 0 && padded != 1)
30 bc->set_key(kek, kek_len);
32 std::vector<uint8_t> output;
42 BOTAN_UNUSED(cipher_algo, padded, key, key_len, kek, kek_len, wrapped_key, wrapped_key_len);
48 const uint8_t wrapped_key[],
size_t wrapped_key_len,
49 const uint8_t kek[],
size_t kek_len,
50 uint8_t key[],
size_t *key_len)
52#if defined(BOTAN_HAS_NIST_KEYWRAP)
54 if(padded != 0 && padded != 1)
58 bc->set_key(kek, kek_len);
70 BOTAN_UNUSED(cipher_algo, padded, key, key_len, kek, kek_len, wrapped_key, wrapped_key_len);
76 const uint8_t kek[],
size_t kek_len,
77 uint8_t wrapped_key[],
size_t* wrapped_key_len)
79 std::string cipher_name =
"AES-" + std::to_string(8*kek_len);
84 wrapped_key, wrapped_key_len);
88 const uint8_t kek[],
size_t kek_len,
89 uint8_t key[],
size_t* key_len)
91 std::string cipher_name =
"AES-" + std::to_string(8*kek_len);
94 wrapped_key, wrapped_key_len,
#define BOTAN_UNUSED(...)
static std::unique_ptr< BlockCipher > create_or_throw(std::string_view algo_spec, std::string_view provider="")
@ BOTAN_FFI_ERROR_NOT_IMPLEMENTED
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_key_unwrap3394(const uint8_t wrapped_key[], size_t wrapped_key_len, const uint8_t kek[], size_t kek_len, uint8_t key[], size_t *key_len)
int botan_key_wrap3394(const uint8_t key[], size_t key_len, const uint8_t kek[], size_t kek_len, uint8_t wrapped_key[], size_t *wrapped_key_len)
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 ffi_guard_thunk(const char *func_name, const std::function< int()> &thunk)
int write_vec_output(uint8_t out[], size_t *out_len, const std::vector< uint8_t, Alloc > &buf)
std::vector< uint8_t > nist_key_wrap(const uint8_t input[], size_t input_len, const BlockCipher &bc)
std::vector< uint8_t > nist_key_wrap_padded(const uint8_t input[], size_t input_len, const BlockCipher &bc)
secure_vector< uint8_t > nist_key_unwrap_padded(const uint8_t input[], size_t input_len, const BlockCipher &bc)
std::vector< T, secure_allocator< T > > secure_vector
secure_vector< uint8_t > nist_key_unwrap(const uint8_t input[], size_t input_len, const BlockCipher &bc)