Commit 61d9a6a0 authored by Niels Möller's avatar Niels Möller

New type nettle_block16.

parent 5ea9dfb0
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> 2014-01-04 Niels Möller <nisse@lysator.liu.se>
* config.guess: Updated to 2014-01-01 version, from * config.guess: Updated to 2014-01-01 version, from
......
...@@ -50,7 +50,8 @@ ...@@ -50,7 +50,8 @@
#define GHASH_POLYNOMIAL 0xE1UL #define GHASH_POLYNOMIAL 0xE1UL
static void 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[0] = x->w[0] ^ y->w[0];
r->w[1] = x->w[1] ^ y->w[1]; 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 ...@@ -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 shifted out is one, the defining polynomial is added to cancel it
out. r == x is allowed. */ out. r == x is allowed. */
static void 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; long mask;
...@@ -111,10 +112,10 @@ gcm_gf_shift (union gcm_block *r, const union gcm_block *x) ...@@ -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 specification. y may be shorter than a full block, missing bytes
are assumed zero. */ are assumed zero. */
static void 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 nettle_block16 V;
union gcm_block Z; union nettle_block16 Z;
unsigned i; unsigned i;
memcpy(V.b, x, sizeof(V)); memcpy(V.b, x, sizeof(V));
...@@ -150,7 +151,7 @@ shift_table[0x10] = { ...@@ -150,7 +151,7 @@ shift_table[0x10] = {
}; };
static void 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 *w = x->w;
unsigned long reduce; unsigned long reduce;
...@@ -195,9 +196,9 @@ gcm_gf_shift_4(union gcm_block *x) ...@@ -195,9 +196,9 @@ gcm_gf_shift_4(union gcm_block *x)
} }
static void 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; unsigned i;
memset(Z.b, 0, sizeof(Z)); memset(Z.b, 0, sizeof(Z));
...@@ -218,7 +219,7 @@ gcm_gf_mul (union gcm_block *x, const union gcm_block *table) ...@@ -218,7 +219,7 @@ gcm_gf_mul (union gcm_block *x, const union gcm_block *table)
#define gcm_hash _nettle_gcm_hash8 #define gcm_hash _nettle_gcm_hash8
void 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); size_t length, const uint8_t *data);
# else /* !HAVE_NATIVE_gcm_hash8 */ # else /* !HAVE_NATIVE_gcm_hash8 */
static const uint16_t static const uint16_t
...@@ -258,7 +259,7 @@ shift_table[0x100] = { ...@@ -258,7 +259,7 @@ shift_table[0x100] = {
}; };
static void 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 *w = x->w;
unsigned long reduce; unsigned long reduce;
...@@ -296,9 +297,9 @@ gcm_gf_shift_8(union gcm_block *x) ...@@ -296,9 +297,9 @@ gcm_gf_shift_8(union gcm_block *x)
} }
static void 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; unsigned i;
memcpy(Z.b, table[x->b[GCM_BLOCK_SIZE-1]].b, GCM_BLOCK_SIZE); 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, ...@@ -356,7 +357,7 @@ gcm_set_key(struct gcm_key *key,
#ifndef gcm_hash #ifndef gcm_hash
static void 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) size_t length, const uint8_t *data)
{ {
for (; length >= GCM_BLOCK_SIZE; for (; length >= GCM_BLOCK_SIZE;
...@@ -374,7 +375,7 @@ gcm_hash(const struct gcm_key *key, union gcm_block *x, ...@@ -374,7 +375,7 @@ gcm_hash(const struct gcm_key *key, union gcm_block *x,
#endif /* !gcm_hash */ #endif /* !gcm_hash */
static void 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) uint64_t auth_size, uint64_t data_size)
{ {
uint8_t buffer[GCM_BLOCK_SIZE]; uint8_t buffer[GCM_BLOCK_SIZE];
......
...@@ -60,27 +60,20 @@ extern "C" { ...@@ -60,27 +60,20 @@ extern "C" {
#define GCM_TABLE_BITS 8 #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 */ /* Hashing subkey */
struct gcm_key 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 */ /* Per-message state, depending on the iv */
struct gcm_ctx { struct gcm_ctx {
/* Original counter block */ /* Original counter block */
union gcm_block iv; union nettle_block16 iv;
/* Updated for each block. */ /* Updated for each block. */
union gcm_block ctr; union nettle_block16 ctr;
/* Hashing state */ /* Hashing state */
union gcm_block x; union nettle_block16 x;
uint64_t auth_size; uint64_t auth_size;
uint64_t data_size; uint64_t data_size;
}; };
......
...@@ -34,6 +34,13 @@ ...@@ -34,6 +34,13 @@
extern "C" { extern "C" {
#endif #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. */ /* Randomness. Used by key generation and dsa signature creation. */
typedef void nettle_random_func(void *ctx, typedef void nettle_random_func(void *ctx,
size_t length, uint8_t *dst); size_t length, uint8_t *dst);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment