summaryrefslogtreecommitdiff
path: root/cipher
diff options
context:
space:
mode:
authorJussi Kivilinna <jussi.kivilinna@iki.fi>2013-09-21 13:54:38 +0300
committerJussi Kivilinna <jussi.kivilinna@iki.fi>2013-09-21 13:54:38 +0300
commit902ea6052c11108bd19333c31b03e084bed1fb86 (patch)
treed10af9624de9aaeea6f8b2c37661c1693f123405 /cipher
parentcce7449efe471b076c5a97929ac8907162011394 (diff)
downloadlibgcrypt-902ea6052c11108bd19333c31b03e084bed1fb86.tar.gz
Make STRIBOG use the new _gcry_md_block_write helper
* cipher/stribog.c (STRIBOG_STRUCT): Add 'bctx' and remove 'buf' and 'count'. (stribog_init_512): Initialize 'bctx'. (transform64): New function. (stribog_write): Remove. (stribog_final): Use _gcry_md_block_write and bctx. (_gcry_digest_spec_stribog_256, _gcry_digest_spec_stribog_512): Use _gcry_md_block_write. -- Signed-off-by: Jussi Kivilinna <jussi.kivilinna@iki.fi>
Diffstat (limited to 'cipher')
-rw-r--r--cipher/stribog.c55
1 files changed, 19 insertions, 36 deletions
diff --git a/cipher/stribog.c b/cipher/stribog.c
index ec7ffe94..234a17e8 100644
--- a/cipher/stribog.c
+++ b/cipher/stribog.c
@@ -32,6 +32,7 @@
typedef struct
{
+ gcry_md_block_ctx_t bctx;
union
{
u64 h[8];
@@ -39,8 +40,6 @@ typedef struct
};
u64 N[8];
u64 Sigma[8];
- byte buf[64];
- int count;
} STRIBOG_CONTEXT;
static const byte Pi[256] =
@@ -1276,11 +1275,19 @@ static void g (u64 *h, u64 *m, u64 *N)
static void
+transform64 (void *context, const unsigned char *inbuf_arg);
+
+
+static void
stribog_init_512 (void *context)
{
STRIBOG_CONTEXT *hd = context;
memset (hd, 0, sizeof (*hd));
+
+ hd->bctx.blocksize = 64;
+ hd->bctx.bwrite = transform64;
+ hd->bctx.stack_burn = 768;
}
static void
@@ -1340,35 +1347,11 @@ transform (STRIBOG_CONTEXT *hd, const unsigned char *data, unsigned count)
}
static void
-stribog_write (void *context, const void *inbuf_arg, size_t inlen)
+transform64 (void *context, const unsigned char *inbuf_arg)
{
STRIBOG_CONTEXT *hd = context;
- const unsigned char *inbuf = inbuf_arg;
- if (hd->count == 64)
- {
- transform (hd, hd->buf, hd->count * 8);
- hd->count = 0;
- _gcry_burn_stack (768);
- }
- if (!inbuf)
- return;
- if (hd->count)
- {
- for (; inlen && hd->count < 64; inlen--)
- hd->buf[hd->count++] = *inbuf++;
- stribog_write (context, NULL, 0);
- if (!inlen)
- return;
- }
- while (inlen >= 64)
- {
- transform (hd, inbuf, 64 * 8);
- inlen -= 64;
- inbuf += 64;
- }
- _gcry_burn_stack (768);
- for (; inlen && hd->count < 64; inlen--)
- hd->buf[hd->count++] = *inbuf++;
+
+ transform (hd, inbuf_arg, 64 * 8);
}
/*
@@ -1383,14 +1366,14 @@ stribog_final (void *context)
u64 Z[8] = {};
int i;
- stribog_write (context, NULL, 0); /* flush */ ;
+ _gcry_md_block_write (context, NULL, 0); /* flush */ ;
/* PAD. It does not count towards message length */
- i = hd->count;
+ i = hd->bctx.count;
/* After flush we have at least one byte free) */
- hd->buf[i++] = 1;
+ hd->bctx.buf[i++] = 1;
while (i < 64)
- hd->buf[i++] = 0;
- transform (hd, hd->buf, hd->count * 8);
+ hd->bctx.buf[i++] = 0;
+ transform (hd, hd->bctx.buf, hd->bctx.count * 8);
g (hd->h, hd->N, Z);
g (hd->h, hd->Sigma, Z);
@@ -1431,13 +1414,13 @@ stribog_read_256 (void *context)
gcry_md_spec_t _gcry_digest_spec_stribog_256 =
{
"STRIBOG256", NULL, 0, NULL, 32,
- stribog_init_256, stribog_write, stribog_final, stribog_read_256,
+ stribog_init_256, _gcry_md_block_write, stribog_final, stribog_read_256,
sizeof (STRIBOG_CONTEXT)
};
gcry_md_spec_t _gcry_digest_spec_stribog_512 =
{
"STRIBOG512", NULL, 0, NULL, 64,
- stribog_init_512, stribog_write, stribog_final, stribog_read_512,
+ stribog_init_512, _gcry_md_block_write, stribog_final, stribog_read_512,
sizeof (STRIBOG_CONTEXT)
};