summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog7
-rw-r--r--gcm.c29
-rw-r--r--gcm.h15
-rw-r--r--nettle-types.h7
4 files changed, 33 insertions, 25 deletions
diff --git a/ChangeLog b/ChangeLog
index 0d7accd2..b476c8de 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2014-01-13 Niels Möller <nisse@lysator.liu.se>
+
+ * nettle-types.h (union nettle_block16): New type, replacing union
+ gcm_block.
+ * gcm.h (union gcm_block): Deleted. Replaced by nettle_block16.
+ * gcm.c: Replaced all use of gcm_block by nettle_block16.
+
2014-01-04 Niels Möller <nisse@lysator.liu.se>
* config.guess: Updated to 2014-01-01 version, from
diff --git a/gcm.c b/gcm.c
index c9ea30bc..43edf661 100644
--- a/gcm.c
+++ b/gcm.c
@@ -50,7 +50,8 @@
#define GHASH_POLYNOMIAL 0xE1UL
static void
-gcm_gf_add (union gcm_block *r, const union gcm_block *x, const union gcm_block *y)
+gcm_gf_add (union nettle_block16 *r,
+ const union nettle_block16 *x, const union nettle_block16 *y)
{
r->w[0] = x->w[0] ^ y->w[0];
r->w[1] = x->w[1] ^ y->w[1];
@@ -63,7 +64,7 @@ gcm_gf_add (union gcm_block *r, const union gcm_block *x, const union gcm_block
shifted out is one, the defining polynomial is added to cancel it
out. r == x is allowed. */
static void
-gcm_gf_shift (union gcm_block *r, const union gcm_block *x)
+gcm_gf_shift (union nettle_block16 *r, const union nettle_block16 *x)
{
long mask;
@@ -111,10 +112,10 @@ gcm_gf_shift (union gcm_block *r, const union gcm_block *x)
specification. y may be shorter than a full block, missing bytes
are assumed zero. */
static void
-gcm_gf_mul (union gcm_block *x, const union gcm_block *y)
+gcm_gf_mul (union nettle_block16 *x, const union nettle_block16 *y)
{
- union gcm_block V;
- union gcm_block Z;
+ union nettle_block16 V;
+ union nettle_block16 Z;
unsigned i;
memcpy(V.b, x, sizeof(V));
@@ -150,7 +151,7 @@ shift_table[0x10] = {
};
static void
-gcm_gf_shift_4(union gcm_block *x)
+gcm_gf_shift_4(union nettle_block16 *x)
{
unsigned long *w = x->w;
unsigned long reduce;
@@ -195,9 +196,9 @@ gcm_gf_shift_4(union gcm_block *x)
}
static void
-gcm_gf_mul (union gcm_block *x, const union gcm_block *table)
+gcm_gf_mul (union nettle_block16 *x, const union nettle_block16 *table)
{
- union gcm_block Z;
+ union nettle_block16 Z;
unsigned i;
memset(Z.b, 0, sizeof(Z));
@@ -218,7 +219,7 @@ gcm_gf_mul (union gcm_block *x, const union gcm_block *table)
#define gcm_hash _nettle_gcm_hash8
void
-_nettle_gcm_hash8 (const struct gcm_key *key, union gcm_block *x,
+_nettle_gcm_hash8 (const struct gcm_key *key, union nettle_block16 *x,
size_t length, const uint8_t *data);
# else /* !HAVE_NATIVE_gcm_hash8 */
static const uint16_t
@@ -258,7 +259,7 @@ shift_table[0x100] = {
};
static void
-gcm_gf_shift_8(union gcm_block *x)
+gcm_gf_shift_8(union nettle_block16 *x)
{
unsigned long *w = x->w;
unsigned long reduce;
@@ -296,9 +297,9 @@ gcm_gf_shift_8(union gcm_block *x)
}
static void
-gcm_gf_mul (union gcm_block *x, const union gcm_block *table)
+gcm_gf_mul (union nettle_block16 *x, const union nettle_block16 *table)
{
- union gcm_block Z;
+ union nettle_block16 Z;
unsigned i;
memcpy(Z.b, table[x->b[GCM_BLOCK_SIZE-1]].b, GCM_BLOCK_SIZE);
@@ -356,7 +357,7 @@ gcm_set_key(struct gcm_key *key,
#ifndef gcm_hash
static void
-gcm_hash(const struct gcm_key *key, union gcm_block *x,
+gcm_hash(const struct gcm_key *key, union nettle_block16 *x,
size_t length, const uint8_t *data)
{
for (; length >= GCM_BLOCK_SIZE;
@@ -374,7 +375,7 @@ gcm_hash(const struct gcm_key *key, union gcm_block *x,
#endif /* !gcm_hash */
static void
-gcm_hash_sizes(const struct gcm_key *key, union gcm_block *x,
+gcm_hash_sizes(const struct gcm_key *key, union nettle_block16 *x,
uint64_t auth_size, uint64_t data_size)
{
uint8_t buffer[GCM_BLOCK_SIZE];
diff --git a/gcm.h b/gcm.h
index f50c7363..39b9e48a 100644
--- a/gcm.h
+++ b/gcm.h
@@ -60,27 +60,20 @@ extern "C" {
#define GCM_TABLE_BITS 8
-/* To make sure that we have proper alignment. */
-union gcm_block
-{
- uint8_t b[GCM_BLOCK_SIZE];
- unsigned long w[GCM_BLOCK_SIZE / sizeof(unsigned long)];
-};
-
/* Hashing subkey */
struct gcm_key
{
- union gcm_block h[1 << GCM_TABLE_BITS];
+ union nettle_block16 h[1 << GCM_TABLE_BITS];
};
/* Per-message state, depending on the iv */
struct gcm_ctx {
/* Original counter block */
- union gcm_block iv;
+ union nettle_block16 iv;
/* Updated for each block. */
- union gcm_block ctr;
+ union nettle_block16 ctr;
/* Hashing state */
- union gcm_block x;
+ union nettle_block16 x;
uint64_t auth_size;
uint64_t data_size;
};
diff --git a/nettle-types.h b/nettle-types.h
index 1989d188..148ac4df 100644
--- a/nettle-types.h
+++ b/nettle-types.h
@@ -34,6 +34,13 @@
extern "C" {
#endif
+/* An aligned 16-byte block. */
+union nettle_block16
+{
+ uint8_t b[16];
+ unsigned long w[16 / sizeof(unsigned long)];
+};
+
/* Randomness. Used by key generation and dsa signature creation. */
typedef void nettle_random_func(void *ctx,
size_t length, uint8_t *dst);