Skip to content
Snippets Groups Projects
Commit 22876238 authored by Niels Möller's avatar Niels Möller
Browse files

(base64_decode_single): Simplified, got rid of

the done variable.

Rev: src/nettle/base64-decode.c:1.3
parent 094e3713
No related branches found
No related tags found
No related merge requests found
...@@ -31,6 +31,8 @@ ...@@ -31,6 +31,8 @@
#define TABLE_SPACE -2 #define TABLE_SPACE -2
#define TABLE_END -3 #define TABLE_END -3
/* FIXME: Make sure that all whitespace characters, SPC, HT, VT, FF,
* CR and LF are ignored. */
static const signed char static const signed char
decode_table[0x100] = decode_table[0x100] =
{ {
...@@ -74,42 +76,39 @@ base64_decode_single(struct base64_decode_ctx *ctx, ...@@ -74,42 +76,39 @@ base64_decode_single(struct base64_decode_ctx *ctx,
switch(data) switch(data)
{ {
default: default:
{ assert(data >= 0 && data < 0x40);
unsigned done = 0;
assert(data >= 0 && data < 0x40);
if (ctx->status != BASE64_DECODE_OK) if (ctx->status != BASE64_DECODE_OK)
goto invalid; goto invalid;
ctx->word = ctx->word << 6 | data; ctx->word = ctx->word << 6 | data;
ctx->bits += 6; ctx->bits += 6;
if (ctx->bits >= 8) if (ctx->bits >= 8)
{ {
ctx->bits -= 8; ctx->bits -= 8;
dst[done++] = ctx->word >> ctx->bits; dst[0] = ctx->word >> ctx->bits;
} return 1;
return done; }
} else return 0;
case TABLE_INVALID: case TABLE_INVALID:
invalid: invalid:
ctx->status = BASE64_DECODE_ERROR; ctx->status = BASE64_DECODE_ERROR;
/* Fall through */
case TABLE_SPACE:
return 0; return 0;
case TABLE_END: case TABLE_END:
if (!ctx->bits) if (!ctx->bits)
goto invalid; goto invalid;
if (ctx->word & ( (1<<ctx->bits) - 1)) if (ctx->word & ( (1<<ctx->bits) - 1))
/* We shouldn't have any leftover bits */ /* We shouldn't have any leftover bits */
goto invalid; goto invalid;
ctx->status = BASE64_DECODE_END; ctx->status = BASE64_DECODE_END;
ctx->bits -= 2; ctx->bits -= 2;
/* Fall through */
case TABLE_SPACE:
/* Ignore */
return 0; return 0;
} }
} }
...@@ -120,13 +119,13 @@ base64_decode_update(struct base64_decode_ctx *ctx, ...@@ -120,13 +119,13 @@ base64_decode_update(struct base64_decode_ctx *ctx,
unsigned length, unsigned length,
const uint8_t *src) const uint8_t *src)
{ {
unsigned done = 0; unsigned done;
unsigned i; unsigned i;
if (ctx->status == BASE64_DECODE_ERROR) if (ctx->status == BASE64_DECODE_ERROR)
return 0; 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]); done += base64_decode_single(ctx, dst + done, src[i]);
assert(done <= BASE64_DECODE_LENGTH(length)); assert(done <= BASE64_DECODE_LENGTH(length));
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment