8 #include <botan/prf_x942.h>
9 #include <botan/der_enc.h>
10 #include <botan/oids.h>
11 #include <botan/sha160.h>
12 #include <botan/loadstor.h>
23 MemoryVector<byte> encode_x942_int(
u32bit n)
25 byte n_buf[4] = { 0 };
27 return DER_Encoder().encode(n_buf, 4,
OCTET_STRING).get_contents();
36 const byte secret[],
size_t secret_len,
37 const byte salt[],
size_t salt_len)
const
40 const OID kek_algo(key_wrap_oid);
45 while(key.
size() != key_len && counter)
47 hash.
update(secret, secret_len);
54 .raw_bytes(encode_x942_int(counter))
57 .encode_if(salt_len != 0,
65 .raw_bytes(encode_x942_int(static_cast<u32bit>(8 * key_len)))
68 .end_cons().get_contents()
72 const size_t needed = std::min(digest.
size(), key_len - key.
size());
73 key += std::make_pair(&digest[0], needed);
std::string lookup(const OID &oid)
void update(const byte in[], size_t length)
X942_PRF(const std::string &oid)
std::string encode(const byte der[], size_t length, const std::string &label, size_t width)
void store_be(u16bit in, byte out[2])
bool have_oid(const std::string &name)
SecureVector< byte > derive(size_t, const byte[], size_t, const byte[], size_t) const