summaryrefslogtreecommitdiffstats
path: root/src/lib/util/hashing.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/util/hashing.cpp')
-rw-r--r--src/lib/util/hashing.cpp108
1 files changed, 86 insertions, 22 deletions
diff --git a/src/lib/util/hashing.cpp b/src/lib/util/hashing.cpp
index 771d3d7b78f..4e7d7a83005 100644
--- a/src/lib/util/hashing.cpp
+++ b/src/lib/util/hashing.cpp
@@ -115,6 +115,7 @@ const crc16_t crc16_t::null = { 0 };
const crc32_t crc32_t::null = { 0 };
const md5_t md5_t::null = { { 0 } };
const sha1_t sha1_t::null = { { 0 } };
+const sum16_t sum16_t::null = { 0 };
@@ -126,23 +127,22 @@ const sha1_t sha1_t::null = { { 0 } };
// from_string - convert from a string
//-------------------------------------------------
-bool sha1_t::from_string(const char *string, int length)
+bool sha1_t::from_string(std::string_view string)
{
// must be at least long enough to hold everything
memset(m_raw, 0, sizeof(m_raw));
- if (length == -1)
- length = strlen(string);
- if (length < 2 * sizeof(m_raw))
+ if (string.length() < 2 * sizeof(m_raw))
return false;
// iterate through our raw buffer
for (auto & elem : m_raw)
{
- int upper = char_to_hex(*string++);
- int lower = char_to_hex(*string++);
+ int upper = char_to_hex(string[0]);
+ int lower = char_to_hex(string[1]);
if (upper == -1 || lower == -1)
return false;
elem = (upper << 4) | lower;
+ string.remove_prefix(2);
}
return true;
}
@@ -245,23 +245,22 @@ sha1_t sha1_creator::finish()
// from_string - convert from a string
//-------------------------------------------------
-bool md5_t::from_string(const char *string, int length)
+bool md5_t::from_string(std::string_view string)
{
// must be at least long enough to hold everything
memset(m_raw, 0, sizeof(m_raw));
- if (length == -1)
- length = strlen(string);
- if (length < 2 * sizeof(m_raw))
+ if (string.length() < 2 * sizeof(m_raw))
return false;
// iterate through our raw buffer
for (auto & elem : m_raw)
{
- int upper = char_to_hex(*string++);
- int lower = char_to_hex(*string++);
+ int upper = char_to_hex(string[0]);
+ int lower = char_to_hex(string[1]);
if (upper == -1 || lower == -1)
return false;
elem = (upper << 4) | lower;
+ string.remove_prefix(2);
}
return true;
}
@@ -291,23 +290,22 @@ std::string md5_t::as_string() const
// from_string - convert from a string
//-------------------------------------------------
-bool crc32_t::from_string(const char *string, int length)
+bool crc32_t::from_string(std::string_view string)
{
// must be at least long enough to hold everything
m_raw = 0;
- if (length == -1)
- length = strlen(string);
- if (length < 2 * sizeof(m_raw))
+ if (string.length() < 2 * sizeof(m_raw))
return false;
// iterate through our raw buffer
m_raw = 0;
for (int bytenum = 0; bytenum < sizeof(m_raw) * 2; bytenum++)
{
- int nibble = char_to_hex(*string++);
+ int nibble = char_to_hex(string[0]);
if (nibble == -1)
return false;
m_raw = (m_raw << 4) | nibble;
+ string.remove_prefix(1);
}
return true;
}
@@ -343,23 +341,22 @@ void crc32_creator::append(const void *data, uint32_t length)
// from_string - convert from a string
//-------------------------------------------------
-bool crc16_t::from_string(const char *string, int length)
+bool crc16_t::from_string(std::string_view string)
{
// must be at least long enough to hold everything
m_raw = 0;
- if (length == -1)
- length = strlen(string);
- if (length < 2 * sizeof(m_raw))
+ if (string.length() < 2 * sizeof(m_raw))
return false;
// iterate through our raw buffer
m_raw = 0;
for (int bytenum = 0; bytenum < sizeof(m_raw) * 2; bytenum++)
{
- int nibble = char_to_hex(*string++);
+ int nibble = char_to_hex(string[0]);
if (nibble == -1)
return false;
m_raw = (m_raw << 4) | nibble;
+ string.remove_prefix(1);
}
return true;
}
@@ -437,4 +434,71 @@ void crc16_creator::append(const void *data, uint32_t length)
m_accum.m_raw = crc;
}
+
+
+//**************************************************************************
+// SUM-16 HELPERS
+//**************************************************************************
+
+//-------------------------------------------------
+// from_string - convert from a string
+//-------------------------------------------------
+
+bool sum16_t::from_string(std::string_view string)
+{
+ // must be at least long enough to hold everything
+ m_raw = 0;
+ if (string.length() < 2 * sizeof(m_raw))
+ return false;
+
+ // iterate through our raw buffer
+ m_raw = 0;
+ for (int bytenum = 0; bytenum < sizeof(m_raw) * 2; bytenum++)
+ {
+ int nibble = char_to_hex(string[0]);
+ if (nibble == -1)
+ return false;
+ m_raw = (m_raw << 4) | nibble;
+ string.remove_prefix(1);
+ }
+ return true;
+}
+
+/**
+ * @fn std::string sum16_t::as_string() const
+ *
+ * @brief -------------------------------------------------
+ * as_string - convert to a string
+ * -------------------------------------------------.
+ *
+ * @return a std::string.
+ */
+
+std::string sum16_t::as_string() const
+{
+ return string_format("%04x", m_raw);
+}
+
+/**
+ * @fn void sum16_creator::append(const void *data, uint32_t length)
+ *
+ * @brief -------------------------------------------------
+ * append - sum a block of data, appending to the currently-accumulated value
+ * -------------------------------------------------.
+ *
+ * @param data The data.
+ * @param length The length.
+ */
+
+void sum16_creator::append(const void *data, uint32_t length)
+{
+ const auto *src = reinterpret_cast<const uint8_t *>(data);
+
+ // fetch the current value into a local and rip through the source data
+ uint16_t sum = m_accum.m_raw;
+ while (length-- != 0)
+ sum += *src++;
+ m_accum.m_raw = sum;
+}
+
} // namespace util