summaryrefslogtreecommitdiffstatshomepage
path: root/src/lib/util/hashing.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/util/hashing.c')
-rw-r--r--src/lib/util/hashing.c44
1 files changed, 32 insertions, 12 deletions
diff --git a/src/lib/util/hashing.c b/src/lib/util/hashing.c
index 97afb184156..866cec8fc0d 100644
--- a/src/lib/util/hashing.c
+++ b/src/lib/util/hashing.c
@@ -38,6 +38,7 @@
***************************************************************************/
#include "hashing.h"
+#include "zlib.h"
//**************************************************************************
@@ -81,10 +82,12 @@ inline int char_to_hex(char c)
// from_string - convert from a string
//-------------------------------------------------
-bool sha1_t::from_string(const char *string)
+bool sha1_t::from_string(const char *string, int length)
{
// must be at least long enough to hold everything
- if (strlen(string) < 2 * sizeof(m_raw))
+ if (length == -1)
+ length = strlen(string);
+ if (length < 2 * sizeof(m_raw))
return false;
// iterate through our raw buffer
@@ -104,7 +107,7 @@ bool sha1_t::from_string(const char *string)
// as_string - convert to a string
//-------------------------------------------------
-const char *sha1_t::as_string(astring &buffer)
+const char *sha1_t::as_string(astring &buffer) const
{
buffer.reset();
for (int i = 0; i < ARRAY_LENGTH(m_raw); i++)
@@ -121,10 +124,12 @@ const char *sha1_t::as_string(astring &buffer)
// from_string - convert from a string
//-------------------------------------------------
-bool md5_t::from_string(const char *string)
+bool md5_t::from_string(const char *string, int length)
{
// must be at least long enough to hold everything
- if (strlen(string) < 2 * sizeof(m_raw))
+ if (length == -1)
+ length = strlen(string);
+ if (length < 2 * sizeof(m_raw))
return false;
// iterate through our raw buffer
@@ -144,7 +149,7 @@ bool md5_t::from_string(const char *string)
// as_string - convert to a string
//-------------------------------------------------
-const char *md5_t::as_string(astring &buffer)
+const char *md5_t::as_string(astring &buffer) const
{
buffer.reset();
for (int i = 0; i < ARRAY_LENGTH(m_raw); i++)
@@ -162,10 +167,12 @@ const char *md5_t::as_string(astring &buffer)
// from_string - convert from a string
//-------------------------------------------------
-bool crc32_t::from_string(const char *string)
+bool crc32_t::from_string(const char *string, int length)
{
// must be at least long enough to hold everything
- if (strlen(string) < 2 * sizeof(m_raw))
+ if (length == -1)
+ length = strlen(string);
+ if (length < 2 * sizeof(m_raw))
return false;
// iterate through our raw buffer
@@ -185,12 +192,23 @@ bool crc32_t::from_string(const char *string)
// as_string - convert to a string
//-------------------------------------------------
-const char *crc32_t::as_string(astring &buffer)
+const char *crc32_t::as_string(astring &buffer) const
{
return buffer.format("%08x", m_raw);
}
+//-------------------------------------------------
+// append - hash a block of data, appending to
+// the currently-accumulated value
+//-------------------------------------------------
+
+void crc32_creator::append(const void *data, UINT32 length)
+{
+ m_accum.m_raw = crc32(m_accum, reinterpret_cast<const Bytef *>(data), length);
+}
+
+
//**************************************************************************
// CRC-16 HELPERS
@@ -200,10 +218,12 @@ const char *crc32_t::as_string(astring &buffer)
// from_string - convert from a string
//-------------------------------------------------
-bool crc16_t::from_string(const char *string)
+bool crc16_t::from_string(const char *string, int length)
{
// must be at least long enough to hold everything
- if (strlen(string) < 2 * sizeof(m_raw))
+ if (length == -1)
+ length = strlen(string);
+ if (length < 2 * sizeof(m_raw))
return false;
// iterate through our raw buffer
@@ -223,7 +243,7 @@ bool crc16_t::from_string(const char *string)
// as_string - convert to a string
//-------------------------------------------------
-const char *crc16_t::as_string(astring &buffer)
+const char *crc16_t::as_string(astring &buffer) const
{
return buffer.format("%04x", m_raw);
}