diff options
| author | Carl Hetherington <cth@carlh.net> | 2025-09-15 21:56:54 +0200 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2025-09-16 09:24:04 +0200 |
| commit | 940dd4e6a49716e602b8d0e99672b345f43a3d4a (patch) | |
| tree | f1556fe6933c0deb1f64549f2218041d2f3b0723 | |
| parent | 4bd0b79901f21dc511df8e7e48a15ca8f4998336 (diff) | |
Add Digester::get_vector() and use a vector internally.
| -rw-r--r-- | src/lib/digester.cc | 37 | ||||
| -rw-r--r-- | src/lib/digester.h | 4 |
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; }; |
