aboutsummaryrefslogtreecommitdiff
path: root/misc.cc
diff options
context:
space:
mode:
authorMateusz Zalega <mateusz@appliedsourcery.com>2015-10-22 23:07:23 +0200
committerMateusz Zalega <mateusz@appliedsourcery.com>2015-10-26 20:49:55 +0100
commit9b8ebc6ed1a1fdc15c404774bf102c883a34d990 (patch)
treefce9205359704dcce84a1f770878901fbc9c2b3e /misc.cc
parentc4aec144256e3f27fedd8f8de03e10cc08eecab8 (diff)
downloadlibnitrokey-9b8ebc6ed1a1fdc15c404774bf102c883a34d990.tar.gz
libnitrokey-9b8ebc6ed1a1fdc15c404774bf102c883a34d990.tar.bz2
Minor fixes, working version
Diffstat (limited to 'misc.cc')
-rw-r--r--misc.cc51
1 files changed, 51 insertions, 0 deletions
diff --git a/misc.cc b/misc.cc
new file mode 100644
index 0000000..aafa372
--- /dev/null
+++ b/misc.cc
@@ -0,0 +1,51 @@
+#include <sstream>
+#include <string>
+#include "misc.h"
+#include "inttypes.h"
+
+namespace nitrokey {
+namespace misc {
+
+std::string hexdump(const char *p, size_t size) {
+ std::stringstream out;
+ char formatbuf[128];
+ const char *pstart = p;
+
+ for (const char *pend = p + size; p < pend;) {
+ snprintf(formatbuf, 128, "%04x\t", p - pstart);
+ out << formatbuf;
+
+ for (const char *le = p + 16; p < le && p < pend; p++) {
+ snprintf(formatbuf, 128, "%02x ", uint8_t(*p));
+ out << formatbuf;
+ }
+ out << std::endl;
+ }
+ return out.str();
+}
+
+static uint32_t _crc32 (uint32_t crc, uint32_t data)
+{
+ int i;
+ crc = crc ^ data;
+
+ for (i = 0; i < 32; i++) {
+ if (crc & 0x80000000)
+ crc = (crc << 1) ^ 0x04C11DB7; // polynomial used in STM32
+ else
+ crc = (crc << 1);
+ }
+
+ return crc;
+}
+
+uint32_t stm_crc32(const uint8_t *data, size_t size) {
+ uint32_t crc = 0xffffffff;
+ const uint32_t *pend = (const uint32_t *)(data + size);
+ for (const uint32_t *p = (const uint32_t *)(data); p < pend; p++)
+ crc = _crc32(crc, *p);
+ return crc;
+}
+
+}
+}