Код: Выделить всё
std::unique_ptr rfc3394_key_unwrap(const uint8_t* key, size_t key_len,
const void *input, size_t input_len, const void *iv) noexcept
{
AES_KEY aes_key;
AES_set_decrypt_key(key, key_len * 8, &aes_key);
const int output_len = input_len - 8;
auto out = std::make_unique(output_len);
const auto ret = AES_unwrap_key(&aes_key, (const uint8_t*)iv, out.get(),
(const uint8_t*)input, input_len);
if (ret != output_len) {
return nullptr;
}
return out;
}
Код: Выделить всё
uint8_t* rfc3394_key_unwrap(const uint8_t *key, size_t key_len, const void *input,
size_t input_len, const void *iv)
{
AES_KEY aes_key;
AES_set_decrypt_key(key, key_len * 8, &aes_key);
const int output_len = input_len - 8;
uint8_t* out = (uint8_t*) malloc(output_len);
const int ret = AES_unwrap_key(&aes_key, (const uint8_t*)iv, out,
(const uint8_t*)input, input_len);
if (ret != output_len) {
free(out);
return NULL;
}
return out;
}
Подробнее здесь: https://stackoverflow.com/questions/790 ... -openssl-3