hmac.h 4.98 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
/* 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
48 49
#define hmac_sha224_set_key nettle_hmac_sha224_set_key
#define hmac_sha224_digest nettle_hmac_sha224_digest
50 51 52
#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
53 54
#define hmac_sha384_set_key nettle_hmac_sha384_set_key
#define hmac_sha384_digest nettle_hmac_sha384_digest
55 56 57
#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
58 59

void
60 61 62
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
63

64 65
/* 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
66
void
67 68 69
hmac_update(void *state,
	    const struct nettle_hash *hash,
	    unsigned length, const uint8_t *data);
Niels Möller's avatar
Niels Möller committed
70 71

void
72 73 74 75
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
76 77 78 79

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

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 131 132 133 134
#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
135

136 137 138 139 140 141 142 143 144 145 146 147 148
/* hmac-sha224 */
#define hmac_sha224_ctx hmac_sha256_ctx

void
hmac_sha224_set_key(struct hmac_sha224_ctx *ctx,
		    unsigned key_length, const uint8_t *key);

#define hmac_sha224_update nettle_hmac_sha256_update

void
hmac_sha224_digest(struct hmac_sha224_ctx *ctx,
		   unsigned length, uint8_t *digest);

149 150 151 152 153 154 155 156 157 158 159 160 161 162 163
/* 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
164 165 166 167 168 169 170
/* hmac-sha384 */
#define hmac_sha384_ctx hmac_sha512_ctx

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

171
#define hmac_sha384_update nettle_hmac_sha512_update
Niels Möller's avatar
Niels Möller committed
172 173 174 175 176

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

Niels Möller's avatar
Niels Möller committed
177 178 179 180
#ifdef __cplusplus
}
#endif

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