hmac.h 4.16 KB
Newer Older
Niels Möller's avatar
Niels Möller committed
1
2
/* hmac.h
 *
Niels Möller's avatar
Niels Möller committed
3
 * HMAC message authentication code (RFC-2104).
Niels Möller's avatar
Niels Möller committed
4
5
6
7
 */

/* nettle, low-level cryptographics library
 *
8
 * Copyright (C) 2001, 2002 Niels Mller
Niels Möller's avatar
Niels Möller committed
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
 *  
 * The nettle library is free software; you can redistribute it and/or modify
 * it under the terms of the GNU Lesser General Public License as published by
 * the Free Software Foundation; either version 2.1 of the License, or (at your
 * option) any later version.
 * 
 * The nettle library is distributed in the hope that it will be useful, but
 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
 * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public
 * License for more details.
 * 
 * You should have received a copy of the GNU Lesser General Public License
 * along with the nettle library; see the file COPYING.LIB.  If not, write to
 * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
 * MA 02111-1307, USA.
 */

#ifndef NETTLE_HMAC_H_INCLUDED
#define NETTLE_HMAC_H_INCLUDED

#include "nettle-meta.h"

31
32
33
#include "md5.h"
#include "sha.h"

Niels Möller's avatar
Niels Möller committed
34
35
36
37
#ifdef __cplusplus
extern "C" {
#endif

38
39
40
41
42
43
44
45
46
47
48
49
50
/* Namespace mangling */
#define hmac_set_key nettle_hmac_set_key
#define hmac_update nettle_hmac_update
#define hmac_digest nettle_hmac_digest
#define hmac_md5_set_key nettle_hmac_md5_set_key
#define hmac_md5_update nettle_hmac_md5_update
#define hmac_md5_digest nettle_hmac_md5_digest
#define hmac_sha1_set_key nettle_hmac_sha1_set_key
#define hmac_sha1_update nettle_hmac_sha1_update
#define hmac_sha1_digest nettle_hmac_sha1_digest
#define hmac_sha256_set_key nettle_hmac_sha256_set_key
#define hmac_sha256_update nettle_hmac_sha256_update
#define hmac_sha256_digest nettle_hmac_sha256_digest
51
52
53
#define hmac_sha512_set_key nettle_hmac_sha512_set_key
#define hmac_sha512_update nettle_hmac_sha512_update
#define hmac_sha512_digest nettle_hmac_sha512_digest
Niels Möller's avatar
Niels Möller committed
54
55

void
56
57
58
hmac_set_key(void *outer, void *inner, void *state,
	     const struct nettle_hash *hash,
	     unsigned length, const uint8_t *key);
Niels Möller's avatar
Niels Möller committed
59

60
61
/* This function is not strictly needed, it's s just the same as the
 * hash update function. */
Niels Möller's avatar
Niels Möller committed
62
void
63
64
65
hmac_update(void *state,
	    const struct nettle_hash *hash,
	    unsigned length, const uint8_t *data);
Niels Möller's avatar
Niels Möller committed
66
67

void
68
69
70
71
hmac_digest(const void *outer, const void *inner, void *state,
	    const struct nettle_hash *hash,
	    unsigned length, uint8_t *digest);

Niels Möller's avatar
Niels Möller committed
72
73
74
75

#define HMAC_CTX(type) \
{ type outer; type inner; type state; }

76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
#define HMAC_SET_KEY(ctx, hash, length, key)			\
  hmac_set_key( &(ctx)->outer, &(ctx)->inner, &(ctx)->state,	\
                (hash), (length), (key) )

#define HMAC_DIGEST(ctx, hash, length, digest)			\
  hmac_digest( &(ctx)->outer, &(ctx)->inner, &(ctx)->state,	\
               (hash), (length), (digest) )

/* HMAC using specific hash functions */

/* hmac-md5 */
struct hmac_md5_ctx HMAC_CTX(struct md5_ctx);

void
hmac_md5_set_key(struct hmac_md5_ctx *ctx,
		 unsigned key_length, const uint8_t *key);

void
hmac_md5_update(struct hmac_md5_ctx *ctx,
		unsigned length, const uint8_t *data);

void
hmac_md5_digest(struct hmac_md5_ctx *ctx,
		unsigned length, uint8_t *digest);


/* hmac-sha1 */
struct hmac_sha1_ctx HMAC_CTX(struct sha1_ctx);

void
hmac_sha1_set_key(struct hmac_sha1_ctx *ctx,
		  unsigned key_length, const uint8_t *key);

void
hmac_sha1_update(struct hmac_sha1_ctx *ctx,
		 unsigned length, const uint8_t *data);

void
hmac_sha1_digest(struct hmac_sha1_ctx *ctx,
		 unsigned length, uint8_t *digest);

/* hmac-sha256 */
struct hmac_sha256_ctx HMAC_CTX(struct sha256_ctx);

void
hmac_sha256_set_key(struct hmac_sha256_ctx *ctx,
		    unsigned key_length, const uint8_t *key);

void
hmac_sha256_update(struct hmac_sha256_ctx *ctx,
		   unsigned length, const uint8_t *data);

void
hmac_sha256_digest(struct hmac_sha256_ctx *ctx,
		   unsigned length, uint8_t *digest);
Niels Möller's avatar
Niels Möller committed
131

132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
/* hmac-sha512 */
struct hmac_sha512_ctx HMAC_CTX(struct sha512_ctx);

void
hmac_sha512_set_key(struct hmac_sha512_ctx *ctx,
		    unsigned key_length, const uint8_t *key);

void
hmac_sha512_update(struct hmac_sha512_ctx *ctx,
		   unsigned length, const uint8_t *data);

void
hmac_sha512_digest(struct hmac_sha512_ctx *ctx,
		   unsigned length, uint8_t *digest);

Niels Möller's avatar
Niels Möller committed
147
148
149
150
#ifdef __cplusplus
}
#endif

Niels Möller's avatar
Niels Möller committed
151
#endif /* NETTLE_HMAC_H_INCLUDED */