8#include <botan/internal/prf_x942.h>
9#include <botan/der_enc.h>
10#include <botan/hash.h>
11#include <botan/internal/loadstor.h>
21std::vector<uint8_t> encode_x942_int(uint32_t n)
23 uint8_t n_buf[4] = { 0 };
26 std::vector<uint8_t> output;
34 const uint8_t secret[],
size_t secret_len,
35 const uint8_t salt[],
size_t salt_len,
36 const uint8_t label[],
size_t label_len)
const
41 const size_t blocks_required = key_len / 20;
43 if(blocks_required >= 0xFFFFFFFE)
53 in.reserve(salt_len + label_len);
54 in += std::make_pair(label,label_len);
55 in += std::make_pair(salt,salt_len);
57 while(offset != key_len && counter)
59 hash->update(secret, secret_len);
65 .encode(m_key_wrap_oid)
66 .raw_bytes(encode_x942_int(counter))
69 .encode_if(salt_len != 0,
77 .raw_bytes(encode_x942_int(
static_cast<uint32_t
>(8 * key_len)))
80 .end_cons().get_contents()
84 const size_t copied = std::min(h.size(), key_len - offset);
85 copy_mem(&key[offset], h.data(), copied);
#define BOTAN_ASSERT_NOMSG(expr)
static std::unique_ptr< HashFunction > create(std::string_view algo_spec, std::string_view provider="")
std::string to_formatted_string() const
std::string name() const override
void kdf(uint8_t key[], size_t key_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) const override
constexpr void copy_mem(T *out, const T *in, size_t n)
constexpr void store_be(uint16_t in, uint8_t out[2])
std::vector< T, secure_allocator< T > > secure_vector