diff options
author | Mateusz Zalega <mateusz@appliedsourcery.com> | 2015-10-22 23:07:23 +0200 |
---|---|---|
committer | Mateusz Zalega <mateusz@appliedsourcery.com> | 2015-10-26 20:49:55 +0100 |
commit | 9b8ebc6ed1a1fdc15c404774bf102c883a34d990 (patch) | |
tree | fce9205359704dcce84a1f770878901fbc9c2b3e /misc.cc | |
parent | c4aec144256e3f27fedd8f8de03e10cc08eecab8 (diff) | |
download | libnitrokey-9b8ebc6ed1a1fdc15c404774bf102c883a34d990.tar.gz libnitrokey-9b8ebc6ed1a1fdc15c404774bf102c883a34d990.tar.bz2 |
Minor fixes, working version
Diffstat (limited to 'misc.cc')
-rw-r--r-- | misc.cc | 51 |
1 files changed, 51 insertions, 0 deletions
@@ -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; +} + +} +} |