/*
- Copyright (C) 2014-2016 Carl Hetherington <cth@carlh.net>
+ Copyright (C) 2014-2021 Carl Hetherington <cth@carlh.net>
This file is part of DCP-o-matic.
*/
+
#include "digester.h"
-#include "safe_stringstream.h"
+#include "dcpomatic_assert.h"
#include <nettle/md5.h>
#include <iomanip>
+#include <cstdio>
+
using std::string;
using std::hex;
using std::setfill;
using std::setw;
+
Digester::Digester ()
{
md5_init (&_context);
}
+
Digester::~Digester ()
{
get ();
}
+
void
Digester::add (void const * data, size_t size)
{
- md5_update (&_context, size, reinterpret_cast<uint8_t const *> (data));
+ md5_update (&_context, size, reinterpret_cast<uint8_t const *>(data));
}
+
void
Digester::add (string const & s)
{
add (s.c_str(), s.length());
}
+
string
Digester::get () const
{
unsigned char digest[MD5_DIGEST_SIZE];
md5_digest (&_context, MD5_DIGEST_SIZE, digest);
- SafeStringStream s;
+ char hex[MD5_DIGEST_SIZE * 2 + 1];
for (int i = 0; i < MD5_DIGEST_SIZE; ++i) {
- s << hex << setfill('0') << setw(2) << ((int) digest[i]);
+ sprintf(hex + i * 2, "%02x", digest[i]);
}
- _digest = s.str ();
+ _digest = hex;
}
return _digest.get ();
}
+
+
+void
+Digester::get (uint8_t* buffer) const
+{
+ md5_digest (&_context, MD5_DIGEST_SIZE, buffer);
+}
+
+
+int
+Digester::size () const
+{
+ return MD5_DIGEST_SIZE;
+}