From a263be7c265e86d789f54f89ab22d9df3cc0e378 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dag-Erling=20Sm=C3=B8rgrav?= Date: Tue, 5 Mar 2013 09:53:33 +0000 Subject: [PATCH] Fix encoder bugs: increment *olen rather than olen, and use the correct mask for base64 (which was copy-pasted from the base32 code) git-svn-id: svn+ssh://svn.openpam.org/svn/openpam/trunk@641 185d5e19-27fe-0310-9dcf-9bff6b9f3609 --- modules/pam_oath/oath_base32.c | 5 +++-- modules/pam_oath/oath_base64.c | 11 ++++++----- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/modules/pam_oath/oath_base32.c b/modules/pam_oath/oath_base32.c index b070acd..9c0ecee 100644 --- a/modules/pam_oath/oath_base32.c +++ b/modules/pam_oath/oath_base32.c @@ -72,7 +72,7 @@ base32_enc(const uint8_t *in, size_t ilen, char *out, size_t *olen) out[5] = b32[bits >> 10 & 0x1f]; out[6] = b32[bits >> 5 & 0x1f]; out[7] = b32[bits & 0x1f]; - olen += 8; + *olen += 8; out += 8; } if (ilen > 0) { @@ -95,10 +95,11 @@ base32_enc(const uint8_t *in, size_t ilen, char *out, size_t *olen) out[5] = ilen > 3 ? b32[bits >> 10 & 0x1f] : '='; out[6] = ilen > 3 ? b32[bits >> 5 & 0x1f] : '='; out[7] = '='; - olen += 8; + *olen += 8; out += 8; } out[0] = '\0'; + ++*olen; return (0); } diff --git a/modules/pam_oath/oath_base64.c b/modules/pam_oath/oath_base64.c index 8e20cc7..d53309c 100644 --- a/modules/pam_oath/oath_base64.c +++ b/modules/pam_oath/oath_base64.c @@ -68,7 +68,7 @@ base64_enc(const uint8_t *in, size_t ilen, char *out, size_t *olen) out[1] = b64[bits >> 12 & 0x3f]; out[2] = b64[bits >> 6 & 0x3f]; out[3] = b64[bits & 0x3f]; - olen += 4; + *olen += 4; out += 4; } if (ilen > 0) { @@ -79,14 +79,15 @@ base64_enc(const uint8_t *in, size_t ilen, char *out, size_t *olen) case 1: bits |= (uint32_t)in[0] << 16; } - out[0] = b64[bits >> 18 & 0x1f]; - out[1] = b64[bits >> 12 & 0x1f]; - out[2] = ilen > 1 ? b64[bits >> 6 & 0x1f] : '='; + out[0] = b64[bits >> 18 & 0x3f]; + out[1] = b64[bits >> 12 & 0x3f]; + out[2] = ilen > 1 ? b64[bits >> 6 & 0x3f] : '='; out[3] = '='; - olen += 4; + *olen += 4; out += 4; } out[0] = '\0'; + ++*olen; return (0); }