Add a SecureBuffer class

SecureBuffer is like SecureString, but a specialization of
std::vector<uint8_t> that cleans up after itself

Tested: Executed various ipmi commands to see that they still work

Change-Id: Ifd255ef682d6e46d981de6a5a294d12f3666698b
Signed-off-by: Vernon Mauery <vernon.mauery@linux.intel.com>
diff --git a/ipmid-new.cpp b/ipmid-new.cpp
index b507cb3..88a51b5 100644
--- a/ipmid-new.cpp
+++ b/ipmid-new.cpp
@@ -472,11 +472,11 @@
 /* called from sdbus async server context */
 auto executionEntry(boost::asio::yield_context yield,
                     sdbusplus::message::message& m, NetFn netFn, uint8_t lun,
-                    Cmd cmd, std::vector<uint8_t>& data,
+                    Cmd cmd, ipmi::SecureBuffer& data,
                     std::map<std::string, ipmi::Value>& options)
 {
     const auto dbusResponse =
-        [netFn, lun, cmd](Cc cc, const std::vector<uint8_t>& data = {}) {
+        [netFn, lun, cmd](Cc cc, const ipmi::SecureBuffer& data = {}) {
             constexpr uint8_t netFnResponse = 0x01;
             uint8_t retNetFn = netFn | netFnResponse;
             return std::make_tuple(retNetFn, lun, cmd, cc, data);
@@ -564,7 +564,7 @@
                                                channel, userId, sessionId,
                                                privilege, rqSA, hostIdx, yield);
     auto request = std::make_shared<ipmi::message::Request>(
-        ctx, std::forward<std::vector<uint8_t>>(data));
+        ctx, std::forward<ipmi::SecureBuffer>(data));
     message::Response::ptr response = executeIpmiCommand(request);
 
     return dbusResponse(response->cc, response->payload.raw);
@@ -770,14 +770,14 @@
                                             boost::asio::yield_context yield) {
         sdbusplus::message::message m{std::move(b)};
         unsigned char seq = 0, netFn = 0, lun = 0, cmd = 0;
-        std::vector<uint8_t> data;
+        ipmi::SecureBuffer data;
 
         m.read(seq, netFn, lun, cmd, data);
         std::shared_ptr<sdbusplus::asio::connection> bus = getSdBus();
         auto ctx = std::make_shared<ipmi::Context>(
             bus, netFn, lun, cmd, 0, 0, 0, ipmi::Privilege::Admin, 0, 0, yield);
         auto request = std::make_shared<ipmi::message::Request>(
-            ctx, std::forward<std::vector<uint8_t>>(data));
+            ctx, std::forward<ipmi::SecureBuffer>(data));
         ipmi::message::Response::ptr response =
             ipmi::executeIpmiCommand(request);