Mercurial > hg > octave-kai > gnulib-hg
annotate lib/hmac-sha1.c @ 7296:33903d90fa2b
(argp_doc): Make sure NULL is not passed to dgettext
author | Sergey Poznyakoff <gray@gnu.org.ua> |
---|---|
date | Tue, 12 Sep 2006 09:06:40 +0000 |
parents | 30ac46875fed |
children | a88f85e4728f |
rev | line source |
---|---|
6364 | 1 /* hmac-sha1.c -- hashed message authentication codes |
2 Copyright (C) 2005 Free Software Foundation, Inc. | |
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 | |
20 #ifdef HAVE_CONFIG_H | |
21 # include <config.h> | |
22 #endif | |
23 | |
24 #include "hmac.h" | |
25 | |
6395 | 26 #include "memxor.h" |
6364 | 27 #include "sha1.h" |
28 | |
29 #include <string.h> | |
30 | |
31 #define IPAD 0x36 | |
32 #define OPAD 0x5c | |
33 | |
34 int | |
35 hmac_sha1 (const void *key, size_t keylen, | |
36 const void *in, size_t inlen, void *resbuf) | |
37 { | |
38 struct sha1_ctx inner; | |
39 struct sha1_ctx outer; | |
40 char optkeybuf[20]; | |
41 char block[64]; | |
42 char innerhash[20]; | |
43 | |
6410
30ac46875fed
* hmac-md5.c (hmac_md5): Add comments, suggested by Bruno Haible
Simon Josefsson <simon@josefsson.org>
parents:
6395
diff
changeset
|
44 /* 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
|
45 |
6364 | 46 if (keylen > 64) |
47 { | |
48 struct sha1_ctx keyhash; | |
49 | |
50 sha1_init_ctx (&keyhash); | |
51 sha1_process_bytes (key, keylen, &keyhash); | |
52 sha1_finish_ctx (&keyhash, optkeybuf); | |
53 | |
54 key = optkeybuf; | |
55 keylen = 20; | |
56 } | |
57 | |
6410
30ac46875fed
* hmac-md5.c (hmac_md5): Add comments, suggested by Bruno Haible
Simon Josefsson <simon@josefsson.org>
parents:
6395
diff
changeset
|
58 /* 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
|
59 |
6364 | 60 sha1_init_ctx (&inner); |
61 | |
62 memset (block, IPAD, sizeof (block)); | |
63 memxor (block, key, keylen); | |
64 | |
65 sha1_process_block (block, 64, &inner); | |
66 sha1_process_bytes (in, inlen, &inner); | |
67 | |
68 sha1_finish_ctx (&inner, innerhash); | |
69 | |
6410
30ac46875fed
* hmac-md5.c (hmac_md5): Add comments, suggested by Bruno Haible
Simon Josefsson <simon@josefsson.org>
parents:
6395
diff
changeset
|
70 /* 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
|
71 |
6364 | 72 sha1_init_ctx (&outer); |
73 | |
74 memset (block, OPAD, sizeof (block)); | |
75 memxor (block, key, keylen); | |
76 | |
77 sha1_process_block (block, 64, &outer); | |
78 sha1_process_bytes (innerhash, 20, &outer); | |
79 | |
80 sha1_finish_ctx (&outer, resbuf); | |
81 | |
82 return 0; | |
83 } |