From a992aa1f0525e2ac70d91dcdcfbbd2f4aecd2ea6 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Adrien=20B=C3=A9raud?= <adrien.beraud@savoirfairelinux.com>
Date: Thu, 28 Jul 2022 17:07:56 -0400
Subject: [PATCH] crypto: allow to build all from std::string_view

---
 include/opendht/crypto.h | 18 +++++++++++-------
 1 file changed, 11 insertions(+), 7 deletions(-)

diff --git a/include/opendht/crypto.h b/include/opendht/crypto.h
index 15aec880..71a69beb 100644
--- a/include/opendht/crypto.h
+++ b/include/opendht/crypto.h
@@ -34,6 +34,7 @@ extern "C" {
 #include <memory>
 #include <atomic>
 #include <mutex>
+#include <string_view>
 
 #ifdef _WIN32
 #include <iso646.h>
@@ -86,7 +87,8 @@ struct OPENDHT_PUBLIC PublicKey
     /** Import public key from serialized data */
     PublicKey(const uint8_t* dat, size_t dat_size);
     PublicKey(const Blob& pk) : PublicKey(pk.data(), pk.size()) {}
-    PublicKey(PublicKey&& o) noexcept : pk(o.pk) { o.pk = nullptr; };
+    PublicKey(std::string_view pk) : PublicKey((const uint8_t*)pk.data(), pk.size()) {}
+    PublicKey(PublicKey&& o) noexcept : pk(o.pk) { o.pk = nullptr; }
 
     ~PublicKey();
     explicit operator bool() const { return pk; }
@@ -167,7 +169,9 @@ struct OPENDHT_PUBLIC PrivateKey
     PrivateKey& operator=(PrivateKey&& o) noexcept;
 
     PrivateKey(const uint8_t* src, size_t src_size, const char* password = nullptr);
-    PrivateKey(const Blob& src, const std::string& password = {}) : PrivateKey(src.data(), src.size(), password.data()) {}
+    PrivateKey(const Blob& src, const std::string& password = {}) : PrivateKey(src.data(), src.size(), password.c_str()) {}
+    PrivateKey(std::string_view src, const std::string& password = {}) : PrivateKey((const uint8_t*)src.data(), src.size(), password.c_str()) {}
+
     ~PrivateKey();
     explicit operator bool() const { return key; }
 
@@ -294,6 +298,7 @@ class OPENDHT_PUBLIC CertificateRequest {
 public:
     CertificateRequest();
     CertificateRequest(const uint8_t* data, size_t size);
+    CertificateRequest(std::string_view src) : CertificateRequest((const uint8_t*)src.data(), src.size()) {}
     CertificateRequest(const Blob& data) : CertificateRequest(data.data(), data.size()) {}
 
     CertificateRequest(CertificateRequest&& o) noexcept : request(std::move(o.request)) {
@@ -327,8 +332,9 @@ private:
 class OPENDHT_PUBLIC OcspRequest
 {
 public:
-    OcspRequest(gnutls_ocsp_req_t r) : request(r) {};
+    OcspRequest(gnutls_ocsp_req_t r) : request(r) {}
     OcspRequest(const uint8_t* dat_ptr, size_t dat_size);
+    OcspRequest(std::string_view dat): OcspRequest((const uint8_t*)dat.data(), dat.size()) {}
     ~OcspRequest();
 
     /*
@@ -346,7 +352,7 @@ class OPENDHT_PUBLIC OcspResponse
 {
 public:
     OcspResponse(const uint8_t* dat_ptr, size_t dat_size);
-    OcspResponse(const std::string& response) : OcspResponse((const uint8_t*)response.data(), response.size()) {};
+    OcspResponse(std::string_view response) : OcspResponse((const uint8_t*)response.data(), response.size()) {}
     ~OcspResponse();
 
     Blob pack() const;
@@ -388,12 +394,10 @@ struct OPENDHT_PUBLIC Certificate {
      * ordered from subject to issuer
      */
     Certificate(const Blob& crt);
-    Certificate(const std::string& pem) : cert(nullptr) {
-        unpack((const uint8_t*)pem.data(), pem.size());
-    }
     Certificate(const uint8_t* dat, size_t dat_size) : cert(nullptr) {
         unpack(dat, dat_size);
     }
+    Certificate(std::string_view pem) : Certificate((const uint8_t*)pem.data(), pem.size()) {}
 
     /**
      * Import certificate chain (PEM or DER),
-- 
GitLab