@alessiofrittoli/crypto-encoder
Version:
Lightweight TypeScript encoder/decoder library
2 lines (1 loc) • 1.97 kB
JavaScript
;Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } }var _cryptobuffer = require('@alessiofrittoli/crypto-buffer');var t=class t{static encode(e,r,a){a||(a={});let i=t.getEncodeVariantAlphabetAndPadding(r),d=_nullishCoalesce(a.padding, () => (i.padding)),s=_cryptobuffer.coerceToUint8Array.call(void 0, e),n=0,c=0,o="";for(let p=0;p<s.byteLength;p++)for(c=c<<8|s[p],n+=8;n>=5;)o+=i.alphabet[c>>>n-5&31],n-=5;if(n>0&&(o+=i.alphabet[c<<5-n&31]),d)for(;o.length%8!==0;)o+="=";return o}static decode(e,r){let a=0,i=0,d=0,s=t.getDecodeVariantAlphabetAndInput(e,r),{length:n}=s.input,c=new Uint8Array(n*5/8|0);for(let o=0;o<n;o++)i=i<<5|t.readChar(s.alphabet,s.input[o]),a+=5,a>=8&&(c[d++]=i>>>a-8&255,a-=8);return c}static readChar(e,r){let a=e.indexOf(r);if(a===-1)throw new Error(`Invalid character found: "${r}"`);return a}static getEncodeVariantAlphabetAndPadding(e){switch(e){case"RFC3548":case"RFC4648":return{alphabet:t.ALPHABET.RFC4648,padding:!0};case"RFC4648-HEX":return{alphabet:t.ALPHABET.RFC4648_HEX,padding:!0};case"Crockford":return{alphabet:t.ALPHABET.CROCKFORD,padding:!1};default:throw new Error(`Unknown base32 variant: ${e}`)}}static getDecodeVariantAlphabetAndInput(e,r){switch(e=t.toString(e).replace(/=+$/,"").toUpperCase(),r){case"RFC3548":case"RFC4648":return{alphabet:t.ALPHABET.RFC4648,input:e};case"RFC4648-HEX":return{alphabet:t.ALPHABET.RFC4648_HEX,input:e};case"Crockford":return{alphabet:t.ALPHABET.CROCKFORD,input:e.replace(/O/g,"0").replace(/[IL]/g,"1")};default:throw new Error(`Unknown base32 variant: ${r}`)}}};t.VARIANT={RFC3548:"RFC3548",RFC4648:"RFC4648",RFC4648_HEX:"RFC4648-HEX",Crockford:"Crockford"},t.ALPHABET={RFC4648:"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567",RFC4648_HEX:"0123456789ABCDEFGHIJKLMNOPQRSTUV",CROCKFORD:"0123456789ABCDEFGHJKMNPQRSTVWXYZ"},t.toString=_cryptobuffer.binaryToString;var C=t;exports.a = C;