aboutsummaryrefslogtreecommitdiff
path: root/src/zencore/md5.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/zencore/md5.cpp')
-rw-r--r--src/zencore/md5.cpp47
1 files changed, 36 insertions, 11 deletions
diff --git a/src/zencore/md5.cpp b/src/zencore/md5.cpp
index 4ec145697..f8cfee3ac 100644
--- a/src/zencore/md5.cpp
+++ b/src/zencore/md5.cpp
@@ -56,9 +56,9 @@ struct MD5_CTX
unsigned char digest[16]; /* actual digest after MD5Final call */
};
-void MD5Init();
-void MD5Update();
-void MD5Final();
+void MD5Init(MD5_CTX* mdContext);
+void MD5Update(MD5_CTX* mdContext, unsigned char* inBuf, unsigned int inLen);
+void MD5Final(MD5_CTX* mdContext);
/*
**********************************************************************
@@ -342,6 +342,23 @@ Transform(uint32_t* buf, uint32_t* in)
#undef G
#undef H
#undef I
+#undef ROTATE_LEFT
+#undef S11
+#undef S12
+#undef S13
+#undef S14
+#undef S21
+#undef S22
+#undef S23
+#undef S24
+#undef S31
+#undef S32
+#undef S33
+#undef S34
+#undef S41
+#undef S42
+#undef S43
+#undef S44
namespace zen {
@@ -353,28 +370,32 @@ MD5 MD5::Zero; // Initialized to all zeroes
MD5Stream::MD5Stream()
{
+ static_assert(sizeof(MD5_CTX) <= sizeof(m_Context));
Reset();
}
void
MD5Stream::Reset()
{
+ MD5Init(reinterpret_cast<MD5_CTX*>(m_Context));
}
MD5Stream&
MD5Stream::Append(const void* Data, size_t ByteCount)
{
- ZEN_UNUSED(Data);
- ZEN_UNUSED(ByteCount);
-
+ MD5Update(reinterpret_cast<MD5_CTX*>(m_Context), (unsigned char*)Data, (unsigned int)ByteCount);
return *this;
}
MD5
MD5Stream::GetHash()
{
- MD5 md5{};
+ MD5_CTX FinalCtx;
+ memcpy(&FinalCtx, m_Context, sizeof(MD5_CTX));
+ MD5Final(&FinalCtx);
+ MD5 md5{};
+ memcpy(md5.Hash, FinalCtx.digest, 16);
return md5;
}
@@ -391,7 +412,7 @@ MD5::FromHexString(const char* string)
{
MD5 md5;
- ParseHexBytes(string, 40, md5.Hash);
+ ParseHexBytes(string, 2 * sizeof md5.Hash, md5.Hash);
return md5;
}
@@ -411,7 +432,7 @@ MD5::ToHexString(StringBuilderBase& outBuilder) const
char str[41];
ToHexString(str);
- outBuilder.AppendRange(str, &str[40]);
+ outBuilder.AppendRange(str, &str[StringLength]);
return outBuilder;
}
@@ -437,6 +458,8 @@ md5_forcelink()
// return md5text;
// }
+TEST_SUITE_BEGIN("core.md5");
+
TEST_CASE("MD5")
{
using namespace std::literals;
@@ -451,13 +474,15 @@ TEST_CASE("MD5")
MD5::String_t Buffer;
Result.ToHexString(Buffer);
- CHECK(Output.compare(Buffer));
+ CHECK(Output.compare(Buffer) == 0);
MD5 Reresult = MD5::FromHexString(Buffer);
Reresult.ToHexString(Buffer);
- CHECK(Output.compare(Buffer));
+ CHECK(Output.compare(Buffer) == 0);
}
+TEST_SUITE_END();
+
#endif
} // namespace zen