diff --git a/node-atob.js b/node-atob.js index 9e2c2b1..88bf3a3 100644 --- a/node-atob.js +++ b/node-atob.js @@ -1,11 +1,24 @@ "use strict"; -const b64Alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=' +// var b64Alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='; + +function toCharCode(ch) { + return ch.charCodeAt(0); +} + +function isValidB64Char(charCode) { + return charCode >= toCharCode('A') && charCode <= toCharCode('Z') + || charCode >= toCharCode('a') && charCode <= toCharCode('z') + || charCode >= toCharCode('0') && charCode <= toCharCode('9') + || charCode === toCharCode('+') + || charCode === toCharCode('/') + || charCode === toCharCode('='); +} function atob(str) { - for (const ch of str) - if (!b64Alphabet.includes(ch)) - throw new Error(`Invalid character '${ch}' in base64 String`); + for (var idx in str) + if (!isValidB64Char(str.charCodeAt(idx))) + throw new Error('Invalid character ' + str.charAt(idx) + ' in base64 String'); return Buffer.from(str, 'base64').toString('binary'); }