Branch data Line data Source code
1 : : /*
2 : : * Copyright (C) 2005, 2010-2012 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 3 of the License, or
7 : : * (at your option) 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, see <http://www.gnu.org/licenses/>. */
16 : :
17 : : /* Written by Simon Josefsson. */
18 : :
19 : : #include <config.h>
20 : :
21 : : #include <stdio.h>
22 : : #include <string.h>
23 : : #include "hmac.h"
24 : :
25 : : int
26 : 1 : main (int argc, char *argv[])
27 : : {
28 : : {
29 : 1 : char *key =
30 : : "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b";
31 : 1 : size_t key_len = 16;
32 : 1 : char *data = "Hi There";
33 : 1 : size_t data_len = 8;
34 : 1 : char *digest =
35 : : "\x67\x5b\x0b\x3a\x1b\x4d\xdf\x4e\x12\x48\x72\xda\x6c\x2f\x63\x2b\xfe\xd9\x57\xe9";
36 : : char out[20];
37 : :
38 [ - + ]: 1 : if (hmac_sha1 (key, key_len, data, data_len, out) != 0)
39 : : {
40 : 0 : printf ("call failure\n");
41 : 0 : return 1;
42 : : }
43 : :
44 [ - + ]: 1 : if (memcmp (digest, out, 20) != 0)
45 : : {
46 : : size_t i;
47 : 0 : printf ("hash 1 mismatch. expected:\n");
48 [ # # ]: 0 : for (i = 0; i < 20; i++)
49 : 0 : printf ("%02x ", digest[i] & 0xFF);
50 : 0 : printf ("\ncomputed:\n");
51 [ # # ]: 0 : for (i = 0; i < 20; i++)
52 : 0 : printf ("%02x ", out[i] & 0xFF);
53 : 0 : printf ("\n");
54 : 0 : return 1;
55 : : }
56 : : }
57 : :
58 : : {
59 : 1 : char *key = "Jefe";
60 : 1 : size_t key_len = 4;
61 : 1 : char *data = "what do ya want for nothing?";
62 : 1 : size_t data_len = 28;
63 : 1 : char *digest =
64 : : "\xef\xfc\xdf\x6a\xe5\xeb\x2f\xa2\xd2\x74\x16\xd5\xf1\x84\xdf\x9c\x25\x9a\x7c\x79";
65 : : char out[20];
66 : :
67 [ - + ]: 1 : if (hmac_sha1 (key, key_len, data, data_len, out) != 0)
68 : : {
69 : 0 : printf ("call failure\n");
70 : 0 : return 1;
71 : : }
72 : :
73 [ - + ]: 1 : if (memcmp (digest, out, 20) != 0)
74 : : {
75 : : size_t i;
76 : 0 : printf ("hash 2 mismatch. expected:\n");
77 [ # # ]: 0 : for (i = 0; i < 20; i++)
78 : 0 : printf ("%02x ", digest[i] & 0xFF);
79 : 0 : printf ("\ncomputed:\n");
80 [ # # ]: 0 : for (i = 0; i < 20; i++)
81 : 0 : printf ("%02x ", out[i] & 0xFF);
82 : 0 : printf ("\n");
83 : 0 : return 1;
84 : : }
85 : : }
86 : :
87 : : {
88 : 1 : char *key =
89 : : "\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA";
90 : 1 : size_t key_len = 16;
91 : 1 : char *data = "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD"
92 : : "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD"
93 : : "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD"
94 : : "\xDD\xDD";
95 : 1 : size_t data_len = 50;
96 : 1 : char *digest =
97 : : "\xd7\x30\x59\x4d\x16\x7e\x35\xd5\x95\x6f\xd8\x00\x3d\x0d\xb3\xd3\xf4\x6d\xc7\xbb";
98 : : char out[20];
99 : :
100 [ - + ]: 1 : if (hmac_sha1 (key, key_len, data, data_len, out) != 0)
101 : : {
102 : 0 : printf ("call failure\n");
103 : 0 : return 1;
104 : : }
105 : :
106 [ - + ]: 1 : if (memcmp (digest, out, 20) != 0)
107 : : {
108 : : size_t i;
109 : 0 : printf ("hash 3 mismatch. expected:\n");
110 [ # # ]: 0 : for (i = 0; i < 20; i++)
111 : 0 : printf ("%02x ", digest[i] & 0xFF);
112 : 0 : printf ("\ncomputed:\n");
113 [ # # ]: 0 : for (i = 0; i < 20; i++)
114 : 0 : printf ("%02x ", out[i] & 0xFF);
115 : 0 : printf ("\n");
116 : 0 : return 1;
117 : : }
118 : : }
119 : :
120 : 1 : return 0;
121 : : }
|