summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2025-09-15 21:56:54 +0200
committerCarl Hetherington <cth@carlh.net>2025-09-16 09:24:04 +0200
commit940dd4e6a49716e602b8d0e99672b345f43a3d4a (patch)
treef1556fe6933c0deb1f64549f2218041d2f3b0723
parent4bd0b79901f21dc511df8e7e48a15ca8f4998336 (diff)
Add Digester::get_vector() and use a vector internally.
-rw-r--r--src/lib/digester.cc37
-rw-r--r--src/lib/digester.h4
2 files changed, 26 insertions, 15 deletions
diff --git a/src/lib/digester.cc b/src/lib/digester.cc
index 023046ebe..8c59d0386 100644
--- a/src/lib/digester.cc
+++ b/src/lib/digester.cc
@@ -19,17 +19,18 @@
*/
-#include "digester.h"
#include "dcpomatic_assert.h"
+#include "digester.h"
#include <nettle/md5.h>
-#include <iomanip>
#include <cstdio>
+#include <iomanip>
-using std::string;
using std::hex;
using std::setfill;
using std::setw;
+using std::string;
+using std::vector;
Digester::Digester()
@@ -52,29 +53,37 @@ Digester::add(string const & s)
}
+vector<unsigned char>
+Digester::get_vector() const
+{
+ if (_digest.empty()) {
+ _digest.resize(MD5_DIGEST_SIZE);
+ md5_digest(&_context, MD5_DIGEST_SIZE, _digest.data());
+ }
+
+ return _digest;
+}
+
+
string
Digester::get() const
{
- if (!_digest) {
- unsigned char digest[MD5_DIGEST_SIZE];
- md5_digest(&_context, MD5_DIGEST_SIZE, digest);
-
- char hex[MD5_DIGEST_SIZE * 2 + 1];
- for (int i = 0; i < MD5_DIGEST_SIZE; ++i) {
- snprintf(hex + i * 2, 3, "%02x", digest[i]);
- }
+ auto const digest = get_vector();
- _digest = hex;
+ char hex[MD5_DIGEST_SIZE * 2 + 1];
+ for (int i = 0; i < MD5_DIGEST_SIZE; ++i) {
+ snprintf(hex + i * 2, 3, "%02x", digest[i]);
}
- return _digest.get();
+ return hex;
}
void
Digester::get(uint8_t* buffer) const
{
- md5_digest(&_context, MD5_DIGEST_SIZE, buffer);
+ auto const digest = get_vector();
+ memcpy(buffer, digest.data(), digest.size());
}
diff --git a/src/lib/digester.h b/src/lib/digester.h
index 8dd3d3fa7..1b5930521 100644
--- a/src/lib/digester.h
+++ b/src/lib/digester.h
@@ -22,6 +22,7 @@
#include <nettle/md5.h>
#include <boost/optional.hpp>
#include <string>
+#include <vector>
class Digester
@@ -42,6 +43,7 @@ public:
void add(std::string const & s);
std::string get() const;
+ std::vector<unsigned char> get_vector() const;
void get(uint8_t* buffer) const;
@@ -49,5 +51,5 @@ public:
private:
mutable md5_ctx _context;
- mutable boost::optional<std::string> _digest;
+ mutable std::vector<unsigned char> _digest;
};