gcm-aes.c 2.04 KB
Newer Older
Niels Möller's avatar
Niels Möller committed
1
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
33
34
35
36
37
38
/* gcm_aes.c
 *
 * Galois counter mode using AES as the underlying cipher.
 */

/* nettle, low-level cryptographics library
 *
 * Copyright (C) 2011 Niels Möller
 *
 * 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.
 */

#include "gcm.h"

void
gcm_aes_set_key(struct gcm_aes_ctx *ctx, unsigned length, const uint8_t *key)
{
  GCM_SET_KEY(ctx, aes_set_encrypt_key, (nettle_crypt_func *) aes_encrypt,
	      length, key);
}

void
gcm_aes_set_iv(struct gcm_aes_ctx *ctx,
	       unsigned length, const uint8_t *iv)
{
39
  gcm_set_iv(&ctx->gcm, &ctx->key, length, iv);
Niels Möller's avatar
Niels Möller committed
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
}

/* FIXME: Rename to gcm_aes_update, for consistency with other hash
   and mac functions? */
void
gcm_aes_auth(struct gcm_aes_ctx *ctx, unsigned length, const uint8_t *data)
{
  GCM_AUTH(ctx, (nettle_crypt_func *) aes_encrypt,
	   length, data);
}

void
gcm_aes_encrypt(struct gcm_aes_ctx *ctx,
		unsigned length, uint8_t *dst, const uint8_t *src)
{
  GCM_ENCRYPT(ctx, (nettle_crypt_func *) aes_encrypt,
	      length, dst, src);
}

void
gcm_aes_decrypt(struct gcm_aes_ctx *ctx,
		unsigned length, uint8_t *dst, const uint8_t *src)
{
  GCM_DECRYPT(ctx, (nettle_crypt_func *) aes_encrypt,
	      length, dst, src);
}

void
gcm_aes_digest(struct gcm_aes_ctx *ctx,
	       unsigned length, uint8_t *digest)
{
  GCM_DIGEST(ctx, (nettle_crypt_func *) aes_encrypt,
	     length, digest);
  
}