diff options
-rw-r--r-- | ChangeLog | 7 | ||||
-rw-r--r-- | gcm.c | 29 | ||||
-rw-r--r-- | gcm.h | 15 | ||||
-rw-r--r-- | nettle-types.h | 7 |
4 files changed, 33 insertions, 25 deletions
@@ -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 @@ -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]; @@ -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); |