# HG changeset patch # User Alain Mazy # Date 1692876918 -7200 # Node ID daf4807631c5fa8329f7e0e7abdf39ae48004f8b # Parent 4ab905749aed7a83f49b5ef9ceea15542a43acf1 ComputeMD5 for std::set diff -r 4ab905749aed -r daf4807631c5 OrthancFramework/Sources/Toolbox.cpp --- a/OrthancFramework/Sources/Toolbox.cpp Tue Aug 22 16:35:22 2023 +0200 +++ b/OrthancFramework/Sources/Toolbox.cpp Thu Aug 24 13:35:18 2023 +0200 @@ -496,6 +496,34 @@ result[2 * i + 1] = GetHexadecimalCharacter(static_cast(actualHash[i] % 16)); } } + + void Toolbox::ComputeMD5(std::string& result, + const std::set& data) + { + md5_state_s state; + md5_init(&state); + + if (data.size() > 0) + { + for (std::set::const_iterator it = data.begin(); it != data.end(); ++it) + { + md5_append(&state, + reinterpret_cast(it->c_str()), + static_cast(it->size())); + } + } + + md5_byte_t actualHash[16]; + md5_finish(&state, actualHash); + + result.resize(32); + for (unsigned int i = 0; i < 16; i++) + { + result[2 * i] = GetHexadecimalCharacter(static_cast(actualHash[i] / 16)); + result[2 * i + 1] = GetHexadecimalCharacter(static_cast(actualHash[i] % 16)); + } + } + #endif diff -r 4ab905749aed -r daf4807631c5 OrthancFramework/Sources/Toolbox.h --- a/OrthancFramework/Sources/Toolbox.h Tue Aug 22 16:35:22 2023 +0200 +++ b/OrthancFramework/Sources/Toolbox.h Thu Aug 24 13:35:18 2023 +0200 @@ -128,6 +128,9 @@ static void ComputeMD5(std::string& result, const void* data, size_t size); + + static void ComputeMD5(std::string& result, + const std::set& data); #endif static void ComputeSHA1(std::string& result, diff -r 4ab905749aed -r daf4807631c5 OrthancFramework/UnitTestsSources/FrameworkTests.cpp --- a/OrthancFramework/UnitTestsSources/FrameworkTests.cpp Tue Aug 22 16:35:22 2023 +0200 +++ b/OrthancFramework/UnitTestsSources/FrameworkTests.cpp Thu Aug 24 13:35:18 2023 +0200 @@ -381,6 +381,21 @@ ASSERT_EQ("8b1a9953c4611296a827abf8c47804d7", s); Toolbox::ComputeMD5(s, ""); ASSERT_EQ("d41d8cd98f00b204e9800998ecf8427e", s); + + Toolbox::ComputeMD5(s, "aaabbbccc"); + ASSERT_EQ("d1aaf4767a3c10a473407a4e47b02da6", s); + + std::set set; + + Toolbox::ComputeMD5(s, set); + ASSERT_EQ("d41d8cd98f00b204e9800998ecf8427e", s); // empty set same as empty string + + set.insert("bbb"); + set.insert("ccc"); + set.insert("aaa"); + + Toolbox::ComputeMD5(s, set); + ASSERT_EQ("d1aaf4767a3c10a473407a4e47b02da6", s); // set md5 same as string with the values sorted } TEST(Toolbox, ComputeSHA1)