From: Michael Tremer Date: Thu, 12 Dec 2019 12:47:28 +0000 (+0000) Subject: Log the signature in debug mode X-Git-Tag: 0.9.1~87 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=257626f5b398fc3fd8bc039fdeaad9abce5a5b40;p=people%2Fms%2Flibloc.git Log the signature in debug mode Signed-off-by: Michael Tremer --- diff --git a/src/database.c b/src/database.c index 77c9ebd..8c85d28 100644 --- a/src/database.c +++ b/src/database.c @@ -539,6 +539,9 @@ LOC_EXPORT int loc_database_verify(struct loc_database* db, FILE* f) { r = 1; } + // Dump signature + hexdump(db->ctx, db->signature, db->signature_length); + clock_t end = clock(); DEBUG(db->ctx, "Signature checked in %.4fms\n", (double)(end - start) / CLOCKS_PER_SEC * 1000); diff --git a/src/loc/private.h b/src/loc/private.h index 70cdbb9..6d85795 100644 --- a/src/loc/private.h +++ b/src/loc/private.h @@ -78,5 +78,47 @@ static inline void in6_addr_set_bit(struct in6_addr* address, unsigned int i, un address->s6_addr[i / 8] ^= (-val ^ address->s6_addr[i / 8]) & (1 << (7 - (i % 8))); } +static inline void hexdump(struct loc_ctx* ctx, const void* addr, size_t len) { + char buffer_hex[16 * 3 + 6]; + char buffer_ascii[17]; + + unsigned int i = 0; + unsigned char* p = (unsigned char*)addr; + + // Process every byte in the data + for (i = 0; i < len; i++) { + // Multiple of 16 means new line (with line offset) + if ((i % 16) == 0) { + // Just don't print ASCII for the zeroth line + if (i != 0) + DEBUG(ctx, " %s %s\n", buffer_hex, buffer_ascii); + + // Output the offset. + sprintf(buffer_hex, "%04x ", i); + } + + // Now the hex code for the specific character + sprintf(buffer_hex + 5 + ((i % 16) * 3), " %02x", p[i]); + + // And store a printable ASCII character for later + if ((p[i] < 0x20) || (p[i] > 0x7e)) + buffer_ascii[i % 16] = '.'; + else + buffer_ascii[i % 16] = p[i]; + + // Terminate string + buffer_ascii[(i % 16) + 1] = '\0'; + } + + // Pad out last line if not exactly 16 characters + while ((i % 16) != 0) { + sprintf(buffer_hex + 5 + ((i % 16) * 3), " "); + i++; + } + + // And print the final bit + DEBUG(ctx, " %s %s\n", buffer_hex, buffer_ascii); +} + #endif #endif diff --git a/src/writer.c b/src/writer.c index 0a4c408..26d5c32 100644 --- a/src/writer.c +++ b/src/writer.c @@ -578,9 +578,13 @@ static int loc_writer_create_signature(struct loc_writer* writer, // Save length of the signature header->signature_length = htobe32(signature_length); - DEBUG(writer->ctx, "Successfully generated signature\n"); + DEBUG(writer->ctx, "Successfully generated signature of %lu bytes\n", + signature_length); r = 0; + // Dump signature + hexdump(writer->ctx, header->signature, signature_length); + END: EVP_MD_CTX_free(mdctx);