diff --git a/src/crypto.cpp b/src/crypto.cpp index 8d88bbc30b2fc765082c9d631826079151c46d58..b8e64ad474ad0bead2a5ddc98c259996e76ab9f8 100644 --- a/src/crypto.cpp +++ b/src/crypto.cpp @@ -102,18 +102,16 @@ bool aesKeySizeGood(size_t key_size) Blob aesEncrypt(const Blob& data, const Blob& key) { - std::array<uint8_t, GCM_IV_SIZE> iv; + Blob ret(data.size() + GCM_IV_SIZE + GCM_DIGEST_SIZE); { crypto::random_device rdev; - std::generate_n(iv.begin(), iv.size(), std::bind(rand_byte, std::ref(rdev))); + std::generate_n(ret.begin(), GCM_IV_SIZE, std::bind(rand_byte, std::ref(rdev))); } struct gcm_aes_ctx aes; gcm_aes_set_key(&aes, key.size(), key.data()); - gcm_aes_set_iv(&aes, iv.size(), iv.data()); + gcm_aes_set_iv(&aes, GCM_IV_SIZE, ret.data()); gcm_aes_update(&aes, data.size(), data.data()); - Blob ret(data.size() + GCM_IV_SIZE + GCM_DIGEST_SIZE); - std::copy(iv.begin(), iv.end(), ret.begin()); gcm_aes_encrypt(&aes, data.size(), ret.data() + GCM_IV_SIZE, data.data()); gcm_aes_digest(&aes, GCM_DIGEST_SIZE, ret.data() + GCM_IV_SIZE + data.size()); return ret;