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;