diff options
Diffstat (limited to 'fticks_hashmac.c')
-rw-r--r-- | fticks_hashmac.c | 19 |
1 files changed, 18 insertions, 1 deletions
diff --git a/fticks_hashmac.c b/fticks_hashmac.c index c0dd7d8..5616291 100644 --- a/fticks_hashmac.c +++ b/fticks_hashmac.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2011, NORDUnet A/S */ +/* Copyright (c) 2011,2013, NORDUnet A/S */ /* See LICENSE for licensing information. */ #include <stdio.h> @@ -10,11 +10,19 @@ #include <nettle/hmac.h> #include "fticks_hashmac.h" +/** \a HASH is an input buffer of length SHA256_DIGEST_SIZE bytes. + \a OUT_LEN is the size in bytes of \OUT. + \a OUT is an output buffer of length \a OUT_LEN. */ static void _format_hash(const uint8_t *hash, size_t out_len, uint8_t *out) { int ir, iw; + if (out_len < 3) { + memset(out, 0, out_len); + return; + } + for (ir = 0, iw = 0; iw <= out_len - 3; ir++, iw += 2) sprintf((char *) out + iw, "%02x", hash[ir % SHA256_DIGEST_SIZE]); } @@ -57,6 +65,15 @@ _hash(const uint8_t *in, supposedly has a praxis of tacking on SSID to the MAC address in Calling-Station-Id. + The resulting hash value is written to \a OUT as a NUL terminated + string of numbers in two-digit hexadecimal ASCII representation. + + Exactly \a OUT_LEN bytes are written to \a OUT, based on the first + (\a OUT_LEN - 1) / 2 bytes of the hash. Note that in the case when + \OUT_LEN - 1 is more than two times the length of the hash, the + output is repeated by concatinating another hex ASCII + representation of the hash to the output until the buffer is full. + \return 0 on success, -ENOMEM on out of memory. */ int |