Mercurial > libjeffpc > experimental
changeset 874:18a6543019cb
base64: rewrite padding cases to make location of zero-fill more clear
Signed-off-by: Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
author | Josef 'Jeff' Sipek <jeffpc@josefsipek.net> |
---|---|
date | Thu, 13 Jun 2019 00:19:24 +0300 |
parents | 7887fef9fcbe |
children | 92fcaa240219 |
files | base64.c |
diffstat | 1 files changed, 9 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- a/base64.c Thu Jun 13 00:16:51 2019 +0300 +++ b/base64.c Thu Jun 13 00:19:24 2019 +0300 @@ -143,7 +143,8 @@ break; case 1: /* 1 byte left - encoded it & pad with == */ - v = in[i * 3] << 4; + v = in[i * 3]; + v <<= 4; out[i * 4] = table[(v >> 6) & 0x3f]; out[i * 4 + 1] = table[(v >> 0) & 0x3f]; @@ -153,8 +154,9 @@ break; case 2: /* 2 bytes left - encoded them & pad with = */ - v = in[i * 3] << 10; - v |= in[i * 3 + 1] << 2; + v = in[i * 3] << 8; + v |= in[i * 3 + 1]; + v <<= 2; out[i * 4] = table[(v >> 12) & 0x3f]; out[i * 4 + 1] = table[(v >> 6) & 0x3f]; @@ -217,7 +219,8 @@ if (CHECK_INV(a, b, 0, 0)) return -1; - v = (a << 2) | (b >> 4); + v = (a << 6) | b; + v >>= 4; out[(groups * 3) + 0] = v & 0xff; @@ -232,7 +235,8 @@ if (CHECK_INV(a, b, c, 0)) return -1; - v = (a << 10) | (b << 4) | (c >> 2); + v = (a << 12) | (b << 6) | c; + v >>= 2; out[(groups * 3) + 0] = (v >> 8) & 0xff; out[(groups * 3) + 1] = (v >> 0) & 0xff;