blob: dc1ff201d6a7dcd7887ffb8adac70b212be50d88 [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_SHA1_H__
21#define __PJLIB_UTIL_HMAC_SHA1_H__
22
23/**
24 * @file hmac_sha1.h
25 * @brief HMAC SHA1 Message Authentication
26 */
27
28#include <pj/types.h>
29#include <pjlib-util/sha1.h>
30
31PJ_BEGIN_DECL
32
33/**
34 * @defgroup PJLIB_UTIL_HMAC_SHA1 HMAC SHA1 Message Authentication
35 * @ingroup PJLIB_UTIL_ENCRYPTION
36 * @{
37 *
38 * This module contains the implementation of HMAC: Keyed-Hashing
39 * for Message Authentication, as described in RFC 2104.
40 */
41
42/**
43 * The HMAC-SHA1 context used in the incremental HMAC calculation.
44 */
45typedef struct pj_hmac_sha1_context
46{
47 pj_sha1_context context; /**< SHA1 context */
48 pj_uint8_t k_opad[64]; /**< opad xor-ed with key */
49} pj_hmac_sha1_context;
50
51
52/**
53 * Calculate HMAC-SHA1 digest for the specified input and key with this
54 * single function call.
55 *
56 * @param input Pointer to the input stream.
57 * @param input_len Length of input stream in bytes.
58 * @param key Pointer to the authentication key.
59 * @param key_len Length of the authentication key.
60 * @param digest Buffer to be filled with HMAC SHA1 digest.
61 */
62PJ_DECL(void) pj_hmac_sha1(const pj_uint8_t *input, unsigned input_len,
63 const pj_uint8_t *key, unsigned key_len,
64 pj_uint8_t digest[20]);
65
66
67/**
68 * Initiate HMAC-SHA1 context for incremental hashing.
69 *
70 * @param hctx HMAC-SHA1 context.
71 * @param key Pointer to the authentication key.
72 * @param key_len Length of the authentication key.
73 */
74PJ_DECL(void) pj_hmac_sha1_init(pj_hmac_sha1_context *hctx,
75 const pj_uint8_t *key, unsigned key_len);
76
77/**
78 * Append string to the message.
79 *
80 * @param hctx HMAC-SHA1 context.
81 * @param input Pointer to the input stream.
82 * @param input_len Length of input stream in bytes.
83 */
84PJ_DECL(void) pj_hmac_sha1_update(pj_hmac_sha1_context *hctx,
85 const pj_uint8_t *input,
86 unsigned input_len);
87
88/**
89 * Finish the message and return the digest.
90 *
91 * @param hctx HMAC-SHA1 context.
92 * @param digest Buffer to be filled with HMAC SHA1 digest.
93 */
94PJ_DECL(void) pj_hmac_sha1_final(pj_hmac_sha1_context *hctx,
95 pj_uint8_t digest[20]);
96
97
98/**
99 * @}
100 */
101
102PJ_END_DECL
103
104
105#endif /* __PJLIB_UTIL_HMAC_SHA1_H__ */
106
107