blob: 2b59024ee84a28960bbefd838512907db55aaa5a [file] [log] [blame]
Alexandre Lision8af73cb2013-12-10 14:11:20 -05001/* $Id$ */
2/*
3 * Copyright (C) 2008-2011 Teluu Inc. (http://www.teluu.com)
4 * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19 */
20#ifndef __PJLIB_UTIL_HMAC_MD5_H__
21#define __PJLIB_UTIL_HMAC_MD5_H__
22
23/**
24 * @file hmac_md5.h
25 * @brief HMAC MD5 Message Authentication
26 */
27
28/**
29 * @defgroup PJLIB_UTIL_ENCRYPTION Encryption Algorithms
30 */
31
32#include <pj/types.h>
33#include <pjlib-util/md5.h>
34
35PJ_BEGIN_DECL
36
37/**
38 * @defgroup PJLIB_UTIL_HMAC_MD5 HMAC MD5 Message Authentication
39 * @ingroup PJLIB_UTIL_ENCRYPTION
40 * @{
41 *
42 * This module contains the implementation of HMAC: Keyed-Hashing
43 * for Message Authentication, as described in RFC 2104
44 */
45
46/**
47 * The HMAC-MD5 context used in the incremental HMAC calculation.
48 */
49typedef struct pj_hmac_md5_context
50{
51 pj_md5_context context; /**< MD5 context */
52 pj_uint8_t k_opad[64]; /**< opad xor-ed with key */
53} pj_hmac_md5_context;
54
55
56/**
57 * Calculate HMAC MD5 digest for the specified input and key.
58 *
59 * @param input Pointer to the input stream.
60 * @param input_len Length of input stream in bytes.
61 * @param key Pointer to the authentication key.
62 * @param key_len Length of the authentication key.
63 * @param digest Buffer to be filled with HMAC MD5 digest.
64 */
65PJ_DECL(void) pj_hmac_md5(const pj_uint8_t *input, unsigned input_len,
66 const pj_uint8_t *key, unsigned key_len,
67 pj_uint8_t digest[16]);
68
69
70/**
71 * Initiate HMAC-MD5 context for incremental hashing.
72 *
73 * @param hctx HMAC-MD5 context.
74 * @param key Pointer to the authentication key.
75 * @param key_len Length of the authentication key.
76 */
77PJ_DECL(void) pj_hmac_md5_init(pj_hmac_md5_context *hctx,
78 const pj_uint8_t *key, unsigned key_len);
79
80/**
81 * Append string to the message.
82 *
83 * @param hctx HMAC-MD5 context.
84 * @param input Pointer to the input stream.
85 * @param input_len Length of input stream in bytes.
86 */
87PJ_DECL(void) pj_hmac_md5_update(pj_hmac_md5_context *hctx,
88 const pj_uint8_t *input,
89 unsigned input_len);
90
91/**
92 * Finish the message and return the digest.
93 *
94 * @param hctx HMAC-MD5 context.
95 * @param digest Buffer to be filled with HMAC MD5 digest.
96 */
97PJ_DECL(void) pj_hmac_md5_final(pj_hmac_md5_context *hctx,
98 pj_uint8_t digest[16]);
99
100/**
101 * @}
102 */
103
104PJ_END_DECL
105
106
107#endif /* __PJLIB_UTIL_HMAC_MD5_H__ */
108
109