return size;
}
- void reset_tx_handler(
- std::initializer_list<std::uint32_t> update_size_sequence) override;
+ void reset_tx_handler(const uint32_t* first, const uint32_t* last) override;
void authenticated_encrypt_update(const ceph::bufferlist& plaintext) override;
ceph::bufferlist authenticated_encrypt_final() override;
};
-void AES128GCM_OnWireTxHandler::reset_tx_handler(
- std::initializer_list<std::uint32_t> update_size_sequence)
+void AES128GCM_OnWireTxHandler::reset_tx_handler(const uint32_t* first,
+ const uint32_t* last)
{
if (nonce == initial_nonce) {
if (used_initial_nonce) {
throw std::runtime_error("EVP_EncryptInit_ex failed");
}
- buffer.reserve(std::accumulate(std::begin(update_size_sequence),
- std::end(update_size_sequence), AESGCM_TAG_LEN));
+ buffer.reserve(std::accumulate(first, last, AESGCM_TAG_LEN));
nonce.random_seq = nonce.random_seq + 1;
}
// It's undefined what will happen if client doesn't follow the order.
//
// TODO: switch to always_aligned_t
- virtual void reset_tx_handler(
- std::initializer_list<std::uint32_t> update_size_sequence) = 0;
+ virtual void reset_tx_handler(const uint32_t* first,
+ const uint32_t* last) = 0;
+
+ void reset_tx_handler(std::initializer_list<uint32_t> update_size_sequence) {
+ if (update_size_sequence.size() > 0) {
+ const uint32_t* first = &*update_size_sequence.begin();
+ reset_tx_handler(first, first + update_size_sequence.size());
+ } else {
+ reset_tx_handler(nullptr, nullptr);
+ }
+ }
// Perform encryption. Client gives full ownership right to provided
// bufferlist. The method MUST NOT be called after _final() if there