diff --git a/src/jamidht/conversationrepository.cpp b/src/jamidht/conversationrepository.cpp
index 983fe1aec536bb0eeee138cea1614c2b70d62d81..72cb3d0389793e7e04a5d7a7eb45f263156def0d 100644
--- a/src/jamidht/conversationrepository.cpp
+++ b/src/jamidht/conversationrepository.cpp
@@ -42,6 +42,14 @@ constexpr size_t MAX_FETCH_SIZE {256 * 1024 * 1024}; // 256Mb
 
 namespace jami {
 
+inline std::string_view as_view(const git_blob* blob) {
+    return std::string_view(static_cast<const char*>(git_blob_rawcontent(blob)),
+                                       git_blob_rawsize(blob));
+}
+inline std::string_view as_view(const GitObject& blob) {
+    return as_view(reinterpret_cast<git_blob*>(blob.get()));
+}
+
 class ConversationRepository::Impl
 {
 public:
@@ -216,11 +224,11 @@ public:
      * certificate.
      * @note There is a few exception because JAMS certificates are buggy right now
      */
-    bool verifyCertificate(const std::string& certContent,
+    bool verifyCertificate(std::string_view certContent,
                            const std::string& userUri,
-                           const std::string& oldCert = "") const
+                           std::string_view oldCert = ""sv) const
     {
-        auto cert = dht::crypto::Certificate(certContent);
+        auto cert = dht::crypto::Certificate((const uint8_t*)certContent.data(), certContent.size());
         auto isDeviceCertificate = cert.getId().toString() != userUri;
         auto issuerUid = cert.getIssuerUID();
         if (isDeviceCertificate && issuerUid.empty()) {
@@ -228,7 +236,7 @@ public:
             JAMI_ERR("Empty issuer for %s", cert.getId().to_c_str());
         }
         if (!oldCert.empty()) {
-            auto deviceCert = dht::crypto::Certificate(oldCert);
+            auto deviceCert = dht::crypto::Certificate((const uint8_t*)oldCert.data(), oldCert.size());
             if (isDeviceCertificate) {
                 if (issuerUid != deviceCert.getIssuerUID()) {
                     // NOTE: Here, because JAMS certificate can be incorrectly formatted, there is
@@ -807,31 +815,19 @@ ConversationRepository::Impl::checkValidUserDiff(const std::string& userDevice,
                 JAMI_ERR("Invalid file modified: %s", changedFile.c_str());
                 return false;
             }
-            auto* blob = reinterpret_cast<git_blob*>(oldFile.get());
-            auto oldCert = std::string(static_cast<const char*>(git_blob_rawcontent(blob)),
-                                       git_blob_rawsize(blob));
             auto newFile = fileAtTree(changedFile, treeNew);
-            blob = reinterpret_cast<git_blob*>(newFile.get());
-            auto newCert = std::string(static_cast<const char*>(git_blob_rawcontent(blob)),
-                                       git_blob_rawsize(blob));
-            if (!verifyCertificate(newCert, userUri, oldCert)) {
+            if (!verifyCertificate(as_view(newFile), userUri, as_view(oldFile))) {
                 JAMI_ERR("Invalid certificate %s", changedFile.c_str());
                 return false;
             }
         } else if (changedFile == deviceFile) {
             // In this case, device is added or modified (certificate expiration)
             auto oldFile = fileAtTree(changedFile, treeOld);
-            std::string oldCert;
-            if (oldFile) {
-                auto* blob = reinterpret_cast<git_blob*>(oldFile.get());
-                auto oldCert = std::string(static_cast<const char*>(git_blob_rawcontent(blob)),
-                                           git_blob_rawsize(blob));
-            }
+            std::string_view oldCert;
+            if (oldFile)
+                oldCert = as_view(oldFile);
             auto newFile = fileAtTree(changedFile, treeNew);
-            auto* blob = reinterpret_cast<git_blob*>(newFile.get());
-            auto newCert = std::string(static_cast<const char*>(git_blob_rawcontent(blob)),
-                                       git_blob_rawsize(blob));
-            if (!verifyCertificate(newCert, userUri, oldCert)) {
+            if (!verifyCertificate(as_view(newFile), userUri, oldCert)) {
                 JAMI_ERR("Invalid certificate %s", changedFile.c_str());
                 return false;
             }
@@ -1487,20 +1483,14 @@ ConversationRepository::Impl::checkInitialCommit(const std::string& userDevice,
         if (changedFile == adminsFile) {
             hasAdmin = true;
             auto newFile = fileAtTree(changedFile, treeNew);
-            auto* blob = reinterpret_cast<git_blob*>(newFile.get());
-            auto newCert = std::string(static_cast<const char*>(git_blob_rawcontent(blob)),
-                                       git_blob_rawsize(blob));
-            if (!verifyCertificate(newCert, userUri)) {
+            if (!verifyCertificate(as_view(newFile), userUri)) {
                 JAMI_ERR("Invalid certificate found %s", changedFile.c_str());
                 return false;
             }
         } else if (changedFile == deviceFile) {
             hasDevice = true;
             auto newFile = fileAtTree(changedFile, treeNew);
-            auto* blob = reinterpret_cast<git_blob*>(newFile.get());
-            auto newCert = std::string(static_cast<const char*>(git_blob_rawcontent(blob)),
-                                       git_blob_rawsize(blob));
-            if (!verifyCertificate(newCert, userUri)) {
+            if (!verifyCertificate(as_view(newFile), userUri)) {
                 JAMI_ERR("Invalid certificate found %s", changedFile.c_str());
                 return false;
             }