Mercurial > hg > octave-kai > gnulib-hg
annotate lib/hmac-md5.c @ 10606:442a5ff4bcc1
Reduce code duplication.
author | Paolo Bonzini <bonzini@gnu.org> |
---|---|
date | Thu, 09 Oct 2008 13:31:16 +0200 |
parents | a88f85e4728f |
children | e8d2c6fc33ad |
rev | line source |
---|---|
6344 | 1 /* hmac-md5.c -- hashed message authentication codes |
7584
a88f85e4728f
* lib/arcfour.c: Assume config.h.
Eric Blake <ebb9@byu.net>
parents:
6410
diff
changeset
|
2 Copyright (C) 2005, 2006 Free Software Foundation, Inc. |
6344 | 3 |
4 This program is free software; you can redistribute it and/or modify | |
5 it under the terms of the GNU General Public License as published by | |
6 the Free Software Foundation; either version 2, or (at your option) | |
7 any later version. | |
8 | |
9 This program is distributed in the hope that it will be useful, | |
10 but WITHOUT ANY WARRANTY; without even the implied warranty of | |
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
12 GNU General Public License for more details. | |
13 | |
14 You should have received a copy of the GNU General Public License | |
15 along with this program; if not, write to the Free Software Foundation, | |
16 Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ | |
17 | |
18 /* Written by Simon Josefsson. */ | |
19 | |
7584
a88f85e4728f
* lib/arcfour.c: Assume config.h.
Eric Blake <ebb9@byu.net>
parents:
6410
diff
changeset
|
20 #include <config.h> |
6344 | 21 |
22 #include "hmac.h" | |
23 | |
6395 | 24 #include "memxor.h" |
6344 | 25 #include "md5.h" |
26 | |
27 #include <string.h> | |
28 | |
29 #define IPAD 0x36 | |
30 #define OPAD 0x5c | |
31 | |
32 int | |
33 hmac_md5 (const void *key, size_t keylen, | |
34 const void *in, size_t inlen, void *resbuf) | |
35 { | |
36 struct md5_ctx inner; | |
37 struct md5_ctx outer; | |
38 char optkeybuf[16]; | |
39 char block[64]; | |
40 char innerhash[16]; | |
41 | |
6410
30ac46875fed
* hmac-md5.c (hmac_md5): Add comments, suggested by Bruno Haible
Simon Josefsson <simon@josefsson.org>
parents:
6395
diff
changeset
|
42 /* Reduce the key's size, so that it becomes <= 64 bytes large. */ |
30ac46875fed
* hmac-md5.c (hmac_md5): Add comments, suggested by Bruno Haible
Simon Josefsson <simon@josefsson.org>
parents:
6395
diff
changeset
|
43 |
6344 | 44 if (keylen > 64) |
45 { | |
46 struct md5_ctx keyhash; | |
47 | |
48 md5_init_ctx (&keyhash); | |
49 md5_process_bytes (key, keylen, &keyhash); | |
50 md5_finish_ctx (&keyhash, optkeybuf); | |
51 | |
52 key = optkeybuf; | |
53 keylen = 16; | |
54 } | |
55 | |
6410
30ac46875fed
* hmac-md5.c (hmac_md5): Add comments, suggested by Bruno Haible
Simon Josefsson <simon@josefsson.org>
parents:
6395
diff
changeset
|
56 /* Compute INNERHASH from KEY and IN. */ |
30ac46875fed
* hmac-md5.c (hmac_md5): Add comments, suggested by Bruno Haible
Simon Josefsson <simon@josefsson.org>
parents:
6395
diff
changeset
|
57 |
6344 | 58 md5_init_ctx (&inner); |
59 | |
60 memset (block, IPAD, sizeof (block)); | |
61 memxor (block, key, keylen); | |
62 | |
63 md5_process_block (block, 64, &inner); | |
64 md5_process_bytes (in, inlen, &inner); | |
65 | |
66 md5_finish_ctx (&inner, innerhash); | |
67 | |
6410
30ac46875fed
* hmac-md5.c (hmac_md5): Add comments, suggested by Bruno Haible
Simon Josefsson <simon@josefsson.org>
parents:
6395
diff
changeset
|
68 /* Compute result from KEY and INNERHASH. */ |
30ac46875fed
* hmac-md5.c (hmac_md5): Add comments, suggested by Bruno Haible
Simon Josefsson <simon@josefsson.org>
parents:
6395
diff
changeset
|
69 |
6344 | 70 md5_init_ctx (&outer); |
71 | |
72 memset (block, OPAD, sizeof (block)); | |
73 memxor (block, key, keylen); | |
74 | |
75 md5_process_block (block, 64, &outer); | |
76 md5_process_bytes (innerhash, 16, &outer); | |
77 | |
78 md5_finish_ctx (&outer, resbuf); | |
79 | |
80 return 0; | |
81 } |