1 /**
2 * @file wrap.c MD5 wrappers
3 *
4 * Copyright (C) 2010 Creytiv.com
5 */
6 #ifdef USE_OPENSSL
7 #include <stddef.h>
8 #include <openssl/md5.h>
9 #else
10 #include "md5.h"
11 #endif
12 #include <re_types.h>
13 #include <re_fmt.h>
14 #include <re_mem.h>
15 #include <re_mbuf.h>
16 #include <re_md5.h>
17
18
19 /**
20 * Calculate the MD5 hash from a buffer
21 *
22 * @param d Data buffer (input)
23 * @param n Number of input bytes
24 * @param md Calculated MD5 hash (output)
25 */
md5(const uint8_t * d,size_t n,uint8_t * md)26 void md5(const uint8_t *d, size_t n, uint8_t *md)
27 {
28 #ifdef USE_OPENSSL
29 (void)MD5(d, n, md);
30 #else
31 md5_state_t state;
32
33 md5_init(&state);
34 md5_append(&state, d, (int)n);
35 md5_finish(&state, md);
36 #endif
37 }
38
39
40 /**
41 * Calculate the MD5 hash from a formatted string
42 *
43 * @param md Calculated MD5 hash
44 * @param fmt Formatted string
45 *
46 * @return 0 if success, otherwise errorcode
47 */
md5_printf(uint8_t * md,const char * fmt,...)48 int md5_printf(uint8_t *md, const char *fmt, ...)
49 {
50 struct mbuf mb;
51 va_list ap;
52 int err;
53
54 mbuf_init(&mb);
55
56 va_start(ap, fmt);
57 err = mbuf_vprintf(&mb, fmt, ap);
58 va_end(ap);
59
60 if (!err)
61 md5(mb.buf, mb.end, md);
62
63 mbuf_reset(&mb);
64
65 return err;
66 }
67