aboutsummaryrefslogtreecommitdiffstats
path: root/brillo/secure_blob.cc
diff options
context:
space:
mode:
Diffstat (limited to 'brillo/secure_blob.cc')
-rw-r--r--brillo/secure_blob.cc39
1 files changed, 38 insertions, 1 deletions
diff --git a/brillo/secure_blob.cc b/brillo/secure_blob.cc
index 9e6d570..f4b797f 100644
--- a/brillo/secure_blob.cc
+++ b/brillo/secure_blob.cc
@@ -5,11 +5,34 @@
#include <cstring> // memcpy
#include <base/stl_util.h>
+#include <base/strings/string_number_conversions.h>
#include "brillo/secure_blob.h"
namespace brillo {
+std::string BlobToString(const Blob& blob) {
+ return std::string(blob.begin(), blob.end());
+}
+
+Blob BlobFromString(const std::string& bytes) {
+ return Blob(bytes.begin(), bytes.end());
+}
+
+Blob CombineBlobs(const std::initializer_list<Blob>& blobs) {
+ size_t total_size = 0;
+ for (const auto& blob : blobs)
+ total_size += blob.size();
+ Blob concatenation;
+ concatenation.reserve(total_size);
+ for (const auto& blob : blobs)
+ concatenation.insert(concatenation.end(), blob.begin(), blob.end());
+ return concatenation;
+}
+
+SecureBlob::SecureBlob(const Blob& blob)
+ : SecureBlob(blob.begin(), blob.end()) {}
+
SecureBlob::SecureBlob(const std::string& data)
: SecureBlob(data.begin(), data.end()) {}
@@ -49,7 +72,21 @@ SecureBlob SecureBlob::Combine(const SecureBlob& blob1,
return result;
}
-void* SecureMemset(void* v, int c, size_t n) {
+bool SecureBlob::HexStringToSecureBlob(const std::string& input,
+ SecureBlob* output) {
+ // TODO(jorgelo,crbug.com/728047): Consider not using an intermediate
+ // std::vector here at all.
+ std::vector<uint8_t> temp;
+ if (!base::HexStringToBytes(input, &temp)) {
+ output->clear();
+ return false;
+ }
+ output->assign(temp.begin(), temp.end());
+ SecureMemset(temp.data(), 0, temp.capacity());
+ return true;
+}
+
+BRILLO_DISABLE_ASAN void* SecureMemset(void* v, int c, size_t n) {
volatile uint8_t* p = reinterpret_cast<volatile uint8_t*>(v);
while (n--)
*p++ = c;