aboutsummaryrefslogtreecommitdiff
path: root/lib/sha1.h
diff options
context:
space:
mode:
authorBen Pfaff <blp@nicira.com>2009-11-04 15:12:54 -0800
committerBen Pfaff <blp@nicira.com>2009-11-04 15:24:40 -0800
commite7f1bf58e44a3449ba6dcf637a51191006bd2324 (patch)
treef78774467343fa23961fece9082336ae27e4c47d /lib/sha1.h
parent0611aea043269d0e3dad7090b590b196aa378382 (diff)
sha1: Add functions, macros for converting digests to and from strings.
These will be used in the upcoming OVSDB. The SHA1_FMT and SHA1_ARGS macros are arguably absurd, but they are also convenient.
Diffstat (limited to 'lib/sha1.h')
-rw-r--r--lib/sha1.h19
1 files changed, 17 insertions, 2 deletions
diff --git a/lib/sha1.h b/lib/sha1.h
index 75d3533d..9a372775 100644
--- a/lib/sha1.h
+++ b/lib/sha1.h
@@ -29,11 +29,12 @@
#ifndef SHA1_H
#define SHA1_H
+#include <stdbool.h>
#include <stddef.h>
#include <stdint.h>
-/* Size of the SHA1 digest. */
-#define SHA1_DIGEST_SIZE 20
+#define SHA1_DIGEST_SIZE 20 /* Size of the SHA1 digest. */
+#define SHA1_HEX_DIGEST_LEN 40 /* Length of SHA1 digest as hex in ASCII. */
/* SHA1 context structure. */
struct sha1_ctx {
@@ -48,4 +49,18 @@ void sha1_update(struct sha1_ctx *, const void *, size_t);
void sha1_final(struct sha1_ctx *, uint8_t digest[SHA1_DIGEST_SIZE]);
void sha1_bytes(const void *, size_t, uint8_t digest[SHA1_DIGEST_SIZE]);
+#define SHA1_FMT \
+ "%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x" \
+ "%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x"
+#define SHA1_ARGS(DIGEST) \
+ ((DIGEST)[0]), ((DIGEST)[1]), ((DIGEST)[2]), ((DIGEST)[3]), \
+ ((DIGEST)[4]), ((DIGEST)[5]), ((DIGEST)[6]), ((DIGEST)[7]), \
+ ((DIGEST)[8]), ((DIGEST)[9]), ((DIGEST)[10]), ((DIGEST)[11]), \
+ ((DIGEST)[12]), ((DIGEST)[13]), ((DIGEST)[14]), ((DIGEST)[15]), \
+ ((DIGEST)[16]), ((DIGEST)[17]), ((DIGEST)[18]), ((DIGEST)[19])
+
+void sha1_to_hex(const uint8_t digest[SHA1_DIGEST_SIZE],
+ char hex[SHA1_HEX_DIGEST_LEN + 1]);
+bool sha1_from_hex(uint8_t digest[SHA1_DIGEST_SIZE], const char *hex);
+
#endif /* sha1.h */