source: branches/samba-3.2.x/source/lib/hmacmd5.c@ 232

Last change on this file since 232 was 133, checked in by Paul Smedley, 18 years ago

Update trunk to 3.2.0pre3

File size: 4.2 KB
Line 
1/*
2 Unix SMB/CIFS implementation.
3 HMAC MD5 code for use in NTLMv2
4 Copyright (C) Luke Kenneth Casson Leighton 1996-2000
5 Copyright (C) Andrew Tridgell 1992-2000
6
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 3 of the License, or
10 (at your option) any later version.
11
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with this program. If not, see <http://www.gnu.org/licenses/>.
19*/
20
21/* taken direct from rfc2104 implementation and modified for suitable use
22 * for ntlmv2.
23 */
24
25#include "includes.h"
26
27/***********************************************************************
28 the rfc 2104 version of hmac_md5 initialisation.
29***********************************************************************/
30
31void hmac_md5_init_rfc2104(const unsigned char *key, int key_len, HMACMD5Context *ctx)
32{
33 int i;
34 unsigned char tk[16];
35
36 /* if key is longer than 64 bytes reset it to key=MD5(key) */
37 if (key_len > 64) {
38 struct MD5Context tctx;
39
40 MD5Init(&tctx);
41 MD5Update(&tctx, key, key_len);
42 MD5Final(tk, &tctx);
43
44 key = tk;
45 key_len = 16;
46 }
47
48 /* start out by storing key in pads */
49 ZERO_STRUCT(ctx->k_ipad);
50 ZERO_STRUCT(ctx->k_opad);
51 memcpy( ctx->k_ipad, key, key_len);
52 memcpy( ctx->k_opad, key, key_len);