9namespace sparkplug::detail {
16 SecureBuffer() =
default;
17 explicit SecureBuffer(std::string_view value) {
21 SecureBuffer(
const SecureBuffer&) =
delete;
22 SecureBuffer& operator=(
const SecureBuffer&) =
delete;
24 SecureBuffer(SecureBuffer&& other) noexcept : data_(std::move(other.data_)) {
29 SecureBuffer& operator=(SecureBuffer&& other)
noexcept {
32 data_ = std::move(other.data_);
43 void assign(std::string_view value) {
46 data_.reserve(value.size() + 1);
47 data_.assign(value.begin(), value.end());
48 data_.push_back(
'\0');
58 [[nodiscard]]
const char* c_str() const noexcept {
59 return data_.empty() ? nullptr : data_.data();
62 [[nodiscard]]
bool empty() const noexcept {
67 static void scrub_string(std::string& s) {
69 volatile char* p = s.data();
70 for (
size_t i = 0; i < s.size(); ++i) {
80 volatile char* p = data_.data();
81 for (
size_t i = 0; i < data_.size(); ++i) {
87 std::vector<char> data_;