Commit 22876238 authored by Niels Möller's avatar Niels Möller

(base64_decode_single): Simplified, got rid of

the done variable.

Rev: src/nettle/base64-decode.c:1.3
parent 094e3713
......@@ -31,6 +31,8 @@
#define TABLE_SPACE -2
#define TABLE_END -3
/* FIXME: Make sure that all whitespace characters, SPC, HT, VT, FF,
* CR and LF are ignored. */
static const signed char
decode_table[0x100] =
{
......@@ -74,42 +76,39 @@ base64_decode_single(struct base64_decode_ctx *ctx,
switch(data)
{
default:
{
unsigned done = 0;
assert(data >= 0 && data < 0x40);
assert(data >= 0 && data < 0x40);
if (ctx->status != BASE64_DECODE_OK)
goto invalid;
ctx->word = ctx->word << 6 | data;
ctx->bits += 6;
if (ctx->bits >= 8)
{
ctx->bits -= 8;
dst[done++] = ctx->word >> ctx->bits;
}
return done;
}
if (ctx->status != BASE64_DECODE_OK)
goto invalid;
ctx->word = ctx->word << 6 | data;
ctx->bits += 6;
if (ctx->bits >= 8)
{
ctx->bits -= 8;
dst[0] = ctx->word >> ctx->bits;
return 1;
}
else return 0;
case TABLE_INVALID:
invalid:
ctx->status = BASE64_DECODE_ERROR;
/* Fall through */
case TABLE_SPACE:
return 0;
case TABLE_END:
if (!ctx->bits)
goto invalid;
if (ctx->word & ( (1<<ctx->bits) - 1))
/* We shouldn't have any leftover bits */
goto invalid;
ctx->status = BASE64_DECODE_END;
ctx->bits -= 2;
/* Fall through */
case TABLE_SPACE:
/* Ignore */
return 0;
}
}
......@@ -120,13 +119,13 @@ base64_decode_update(struct base64_decode_ctx *ctx,
unsigned length,
const uint8_t *src)
{
unsigned done = 0;
unsigned done;
unsigned i;
if (ctx->status == BASE64_DECODE_ERROR)
return 0;
for (i = 0; i<length; i++)
for (i = 0, done = 0; i<length; i++)
done += base64_decode_single(ctx, dst + done, src[i]);
assert(done <= BASE64_DECODE_LENGTH(length));
......
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