The API of Botan forces you to use `secure_vector<byte>` to store data to be encrypted or decrypted. That makes it impossible to eliminate unnecessary copying where possible. A huge design mistake.
Also, in C++11, `std::vector` contains the member function `data()` which returns a pointer to the underlying data. The data is mutable through this pointer.
Given the desire for the use of secure memory (hardly unique to the library), the usual overhead involved with network PKI (even if you use a hardware accelerator and rdma-type networking, left alone the CPU), and the common practice with networking code in general to copy data in to buffers (particularly with asynchronous IO code), I'd hardly call this a huge design mistake.