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