aes.h 5.1 KB
Newer Older
Niels Möller's avatar
Niels Möller committed
1
/* aes.h
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32

   The aes/rijndael block cipher.

   Copyright (C) 2001, 2013 Niels Möller

   This file is part of GNU Nettle.

   GNU Nettle is free software: you can redistribute it and/or
   modify it under the terms of either:

     * the GNU Lesser General Public License as published by the Free
       Software Foundation; either version 3 of the License, or (at your
       option) any later version.

   or

     * the GNU General Public License as published by the Free
       Software Foundation; either version 2 of the License, or (at your
       option) any later version.

   or both in parallel, as here.

   GNU Nettle 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
   General Public License for more details.

   You should have received copies of the GNU General Public License and
   the GNU Lesser General Public License along with this program.  If
   not, see http://www.gnu.org/licenses/.
*/
Niels Möller's avatar
Niels Möller committed
33 34 35 36
 
#ifndef NETTLE_AES_H_INCLUDED
#define NETTLE_AES_H_INCLUDED

37
#include "nettle-types.h"
Niels Möller's avatar
Niels Möller committed
38

Niels Möller's avatar
Niels Möller committed
39 40 41 42
#ifdef __cplusplus
extern "C" {
#endif

43 44 45
/* Name mangling */
#define aes_set_encrypt_key nettle_aes_set_encrypt_key
#define aes_set_decrypt_key nettle_aes_set_decrypt_key
46
#define aes_invert_key nettle_aes_invert_key
47 48
#define aes_encrypt nettle_aes_encrypt
#define aes_decrypt nettle_aes_decrypt
Niels Möller's avatar
Niels Möller committed
49 50 51 52 53 54 55 56 57 58
#define aes128_set_encrypt_key nettle_aes128_set_encrypt_key
#define aes128_set_decrypt_key nettle_aes128_set_decrypt_key
#define aes128_invert_key nettle_aes128_invert_key
#define aes128_encrypt nettle_aes128_encrypt
#define aes128_decrypt nettle_aes128_decrypt
#define aes192_set_encrypt_key nettle_aes192_set_encrypt_key
#define aes192_set_decrypt_key nettle_aes192_set_decrypt_key
#define aes192_invert_key nettle_aes192_invert_key
#define aes192_encrypt nettle_aes192_encrypt
#define aes192_decrypt nettle_aes192_decrypt
59 60 61 62 63
#define aes256_set_encrypt_key nettle_aes256_set_encrypt_key
#define aes256_set_decrypt_key nettle_aes256_set_decrypt_key
#define aes256_invert_key nettle_aes256_invert_key
#define aes256_encrypt nettle_aes256_encrypt
#define aes256_decrypt nettle_aes256_decrypt
64

Niels Möller's avatar
Niels Möller committed
65 66
#define AES_BLOCK_SIZE 16

67 68 69 70 71 72 73
#define AES128_KEY_SIZE 16
#define AES192_KEY_SIZE 24
#define AES256_KEY_SIZE 32
#define _AES128_ROUNDS 10
#define _AES192_ROUNDS 12
#define _AES256_ROUNDS 14

Niels Möller's avatar
Niels Möller committed
74 75
/* Variable key size between 128 and 256 bits. But the only valid
 * values are 16 (128 bits), 24 (192 bits) and 32 (256 bits). */
76 77
#define AES_MIN_KEY_SIZE AES128_KEY_SIZE
#define AES_MAX_KEY_SIZE AES256_KEY_SIZE
Niels Möller's avatar
Niels Möller committed
78

Niels Möller's avatar
Niels Möller committed
79 80
/* The older nettle-2.7 AES interface is deprecated, please migrate to
   the newer interface where each algorithm has a fixed key size. */
Niels Möller's avatar
Niels Möller committed
81

Niels Möller's avatar
Niels Möller committed
82 83 84 85
#define AES_KEY_SIZE 32

struct aes_ctx
{
Niels Möller's avatar
Niels Möller committed
86
  unsigned rounds;  /* number of rounds to use for our key size */
87
  uint32_t keys[4*(_AES256_ROUNDS + 1)];  /* maximum size of key schedule */
Niels Möller's avatar
Niels Möller committed
88 89 90
};

void
91
aes_set_encrypt_key(struct aes_ctx *ctx,
Niels Möller's avatar
Niels Möller committed
92 93
		    size_t length, const uint8_t *key)
  _NETTLE_ATTRIBUTE_DEPRECATED;
94

95 96
void
aes_set_decrypt_key(struct aes_ctx *ctx,
Niels Möller's avatar
Niels Möller committed
97 98
		   size_t length, const uint8_t *key)
  _NETTLE_ATTRIBUTE_DEPRECATED;
Niels Möller's avatar
Niels Möller committed
99

100 101
void
aes_invert_key(struct aes_ctx *dst,
Niels Möller's avatar
Niels Möller committed
102 103
	       const struct aes_ctx *src)
  _NETTLE_ATTRIBUTE_DEPRECATED;
104

Niels Möller's avatar
Niels Möller committed
105
void
106
aes_encrypt(const struct aes_ctx *ctx,
107
	    size_t length, uint8_t *dst,
Niels Möller's avatar
Niels Möller committed
108
	    const uint8_t *src) _NETTLE_ATTRIBUTE_DEPRECATED;
Niels Möller's avatar
Niels Möller committed
109
void
110
aes_decrypt(const struct aes_ctx *ctx,
111
	    size_t length, uint8_t *dst,
Niels Möller's avatar
Niels Möller committed
112
	    const uint8_t *src) _NETTLE_ATTRIBUTE_DEPRECATED;
Niels Möller's avatar
Niels Möller committed
113

Niels Möller's avatar
Niels Möller committed
114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134
struct aes128_ctx
{
  uint32_t keys[4 * (_AES128_ROUNDS + 1)];
};

void
aes128_set_encrypt_key(struct aes128_ctx *ctx, const uint8_t *key);
void
aes128_set_decrypt_key(struct aes128_ctx *ctx, const uint8_t *key);
void
aes128_invert_key(struct aes128_ctx *dst,
		  const struct aes128_ctx *src);
void
aes128_encrypt(const struct aes128_ctx *ctx,
	       size_t length, uint8_t *dst,
	       const uint8_t *src);
void
aes128_decrypt(const struct aes128_ctx *ctx,
	       size_t length, uint8_t *dst,
	       const uint8_t *src);

Niels Möller's avatar
Niels Möller committed
135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155
struct aes192_ctx
{
  uint32_t keys[4 * (_AES192_ROUNDS + 1)];
};

void
aes192_set_encrypt_key(struct aes192_ctx *ctx, const uint8_t *key);
void
aes192_set_decrypt_key(struct aes192_ctx *ctx, const uint8_t *key);
void
aes192_invert_key(struct aes192_ctx *dst,
		  const struct aes192_ctx *src);
void
aes192_encrypt(const struct aes192_ctx *ctx,
	       size_t length, uint8_t *dst,
	       const uint8_t *src);
void
aes192_decrypt(const struct aes192_ctx *ctx,
	       size_t length, uint8_t *dst,
	       const uint8_t *src);

156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176
struct aes256_ctx
{
  uint32_t keys[4 * (_AES256_ROUNDS + 1)];
};

void
aes256_set_encrypt_key(struct aes256_ctx *ctx, const uint8_t *key);
void
aes256_set_decrypt_key(struct aes256_ctx *ctx, const uint8_t *key);
void
aes256_invert_key(struct aes256_ctx *dst,
		  const struct aes256_ctx *src);
void
aes256_encrypt(const struct aes256_ctx *ctx,
	       size_t length, uint8_t *dst,
	       const uint8_t *src);
void
aes256_decrypt(const struct aes256_ctx *ctx,
	       size_t length, uint8_t *dst,
	       const uint8_t *src);

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_AES_H_INCLUDED */