diff options
author | Linus Nordberg <linus@nordberg.se> | 2013-04-23 11:48:55 +0200 |
---|---|---|
committer | Linus Nordberg <linus@nordberg.se> | 2013-09-02 13:36:19 +0200 |
commit | e205daa66decffa8480722118e33d31526de70b4 (patch) | |
tree | abe3aa9d2e0dc439fcc9ff5d9a999da1329673c9 /fticks_hashmac.c | |
parent | 0bab4d616c9f4ca06b729c341cc05e88b96d8864 (diff) |
Improve the documentation for the fticks_hashmac() interface.
That interface is a bit surprising. radsecproxy-hash(1) was indeed
bitten by it.
Also, make _format_hash() behave consistently even when out_len < 3.
Conflicts:
fticks_hashmac.c
Diffstat (limited to 'fticks_hashmac.c')
-rw-r--r-- | fticks_hashmac.c | 22 |
1 files changed, 19 insertions, 3 deletions
diff --git a/fticks_hashmac.c b/fticks_hashmac.c index bc7b8ba..98dcd69 100644 --- a/fticks_hashmac.c +++ b/fticks_hashmac.c @@ -1,6 +1,5 @@ -/* Copyright (C) 2011 NORDUnet A/S - * See LICENSE for information about licensing. - */ +/* Copyright (c) 2011,2013, NORDUnet A/S */ +/* See LICENSE for licensing information. */ #include <stdio.h> #include <stdlib.h> @@ -11,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]); } @@ -58,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 |