'use strict'; import { bases } from '../src/basics.js'; import { fromString } from '../src/bytes.js'; import chai from 'chai'; import chaiAsPromised from 'chai-as-promised'; chai.use(chaiAsPromised); const {assert} = chai; const encoded = [ { input: 'Decentralize everything!!', tests: [ [ 'identity', '\0Decentralize everything!!' ], [ 'base2', '001000100011001010110001101100101011011100111010001110010011000010110110001101001011110100110010100100000011001010111011001100101011100100111100101110100011010000110100101101110011001110010000100100001' ], [ 'base8', '72106254331267164344605543227514510062566312711713506415133463441102' ], [ 'base10', '9429328951066508984658627669258025763026247056774804621697313' ], [ 'base16', 'f446563656e7472616c697a652065766572797468696e672121' ], [ 'base16upper', 'F446563656E7472616C697A652065766572797468696E672121' ], [ 'base32', 'birswgzloorzgc3djpjssazlwmvzhs5dinfxgoijb' ], [ 'base32upper', 'BIRSWGZLOORZGC3DJPJSSAZLWMVZHS5DINFXGOIJB' ], [ 'base32hex', 'v8him6pbeehp62r39f9ii0pbmclp7it38d5n6e891' ], [ 'base32hexupper', 'V8HIM6PBEEHP62R39F9II0PBMCLP7IT38D5N6E891' ], [ 'base32pad', 'cirswgzloorzgc3djpjssazlwmvzhs5dinfxgoijb' ], [ 'base32padupper', 'CIRSWGZLOORZGC3DJPJSSAZLWMVZHS5DINFXGOIJB' ], [ 'base32hexpad', 't8him6pbeehp62r39f9ii0pbmclp7it38d5n6e891' ], [ 'base32hexpadupper', 'T8HIM6PBEEHP62R39F9II0PBMCLP7IT38D5N6E891' ], [ 'base32z', 'het1sg3mqqt3gn5djxj11y3msci3817depfzgqejb' ], [ 'base36', 'k343ixo7d49hqj1ium15pgy1wzww5fxrid21td7l' ], [ 'base36upper', 'K343IXO7D49HQJ1IUM15PGY1WZWW5FXRID21TD7L' ], [ 'base58flickr', 'Ztwe7gVTeK8wswS1gf8hrgAua9fcw9reboD' ], [ 'base58btc', 'zUXE7GvtEk8XTXs1GF8HSGbVA9FCX9SEBPe' ], [ 'base64', 'mRGVjZW50cmFsaXplIGV2ZXJ5dGhpbmchIQ' ], [ 'base64pad', 'MRGVjZW50cmFsaXplIGV2ZXJ5dGhpbmchIQ==' ], [ 'base64url', 'uRGVjZW50cmFsaXplIGV2ZXJ5dGhpbmchIQ' ], [ 'base64urlpad', 'URGVjZW50cmFsaXplIGV2ZXJ5dGhpbmchIQ==' ], [ 'base256emoji', '\uD83D\uDE80\uD83D\uDC9B\u270B\uD83D\uDC83\u270B\uD83D\uDE3B\uD83D\uDE08\uD83E\uDD7A\uD83E\uDD24\uD83C\uDF40\uD83C\uDF1F\uD83D\uDC90\u270B\uD83D\uDE05\u270B\uD83D\uDCA6\u270B\uD83E\uDD7A\uD83C\uDFC3\uD83D\uDE08\uD83D\uDE34\uD83C\uDF1F\uD83D\uDE3B\uD83D\uDE1D\uD83D\uDC4F\uD83D\uDC4F' ] ] }, { input: 'yes mani !', tests: [ [ 'identity', '\0yes mani !' ], [ 'base2', '001111001011001010111001100100000011011010110000101101110011010010010000000100001' ], [ 'base8', '7362625631006654133464440102' ], [ 'base10', '9573277761329450583662625' ], [ 'base16', 'f796573206d616e692021' ], [ 'base16upper', 'F796573206D616E692021' ], [ 'base32', 'bpfsxgidnmfxgsibb' ], [ 'base32upper', 'BPFSXGIDNMFXGSIBB' ], [ 'base32hex', 'vf5in683dc5n6i811' ], [ 'base32hexupper', 'VF5IN683DC5N6I811' ], [ 'base32pad', 'cpfsxgidnmfxgsibb' ], [ 'base32padupper', 'CPFSXGIDNMFXGSIBB' ], [ 'base32hexpad', 'tf5in683dc5n6i811' ], [ 'base32hexpadupper', 'TF5IN683DC5N6I811' ], [ 'base32z', 'hxf1zgedpcfzg1ebb' ], [ 'base36', 'k2lcpzo5yikidynfl' ], [ 'base36upper', 'K2LCPZO5YIKIDYNFL' ], [ 'base58flickr', 'Z7Pznk19XTTzBtx' ], [ 'base58btc', 'z7paNL19xttacUY' ], [ 'base64', 'meWVzIG1hbmkgIQ' ], [ 'base64pad', 'MeWVzIG1hbmkgIQ==' ], [ 'base64url', 'ueWVzIG1hbmkgIQ' ], [ 'base64urlpad', 'UeWVzIG1hbmkgIQ==' ], [ 'base256emoji', '\uD83D\uDE80\uD83C\uDFC3\u270B\uD83C\uDF08\uD83D\uDE05\uD83C\uDF37\uD83E\uDD24\uD83D\uDE3B\uD83C\uDF1F\uD83D\uDE05\uD83D\uDC4F' ] ] }, { input: 'hello world', tests: [ [ 'identity', '\0hello world' ], [ 'base2', '00110100001100101011011000110110001101111001000000111011101101111011100100110110001100100' ], [ 'base8', '7320625543306744035667562330620' ], [ 'base10', '9126207244316550804821666916' ], [ 'base16', 'f68656c6c6f20776f726c64' ], [ 'base16upper', 'F68656C6C6F20776F726C64' ], [ 'base32', 'bnbswy3dpeb3w64tmmq' ], [ 'base32upper', 'BNBSWY3DPEB3W64TMMQ' ], [ 'base32hex', 'vd1imor3f41rmusjccg' ], [ 'base32hexupper', 'VD1IMOR3F41RMUSJCCG' ], [ 'base32pad', 'cnbswy3dpeb3w64tmmq======' ], [ 'base32padupper', 'CNBSWY3DPEB3W64TMMQ======' ], [ 'base32hexpad', 'td1imor3f41rmusjccg======' ], [ 'base32hexpadupper', 'TD1IMOR3F41RMUSJCCG======' ], [ 'base32z', 'hpb1sa5dxrb5s6hucco' ], [ 'base36', 'kfuvrsivvnfrbjwajo' ], [ 'base36upper', 'KFUVRSIVVNFRBJWAJO' ], [ 'base58flickr', 'ZrTu1dk6cWsRYjYu' ], [ 'base58btc', 'zStV1DL6CwTryKyV' ], [ 'base64', 'maGVsbG8gd29ybGQ' ], [ 'base64pad', 'MaGVsbG8gd29ybGQ=' ], [ 'base64url', 'uaGVsbG8gd29ybGQ' ], [ 'base64urlpad', 'UaGVsbG8gd29ybGQ=' ], [ 'base256emoji', '\uD83D\uDE80\uD83D\uDE34\u270B\uD83C\uDF40\uD83C\uDF40\uD83D\uDE13\uD83D\uDE05\u2714\uD83D\uDE13\uD83E\uDD7A\uD83C\uDF40\uD83D\uDE33' ] ] }, { input: '\0yes mani !', tests: [ [ 'identity', '\0\0yes mani !' ], [ 'base2', '00000000001111001011001010111001100100000011011010110000101101110011010010010000000100001' ], [ 'base8', '7000745453462015530267151100204' ], [ 'base10', '90573277761329450583662625' ], [ 'base16', 'f00796573206d616e692021' ], [ 'base16upper', 'F00796573206D616E692021' ], [ 'base32', 'bab4wk4zanvqw42jaee' ], [ 'base32upper', 'BAB4WK4ZANVQW42JAEE' ], [ 'base32hex', 'v01smasp0dlgmsq9044' ], [ 'base32hexupper', 'V01SMASP0DLGMSQ9044' ], [ 'base32pad', 'cab4wk4zanvqw42jaee======' ], [ 'base32padupper', 'CAB4WK4ZANVQW42JAEE======' ], [ 'base32hexpad', 't01smasp0dlgmsq9044======' ], [ 'base32hexpadupper', 'T01SMASP0DLGMSQ9044======' ], [ 'base32z', 'hybhskh3ypiosh4jyrr' ], [ 'base36', 'k02lcpzo5yikidynfl' ], [ 'base36upper', 'K02LCPZO5YIKIDYNFL' ], [ 'base58flickr', 'Z17Pznk19XTTzBtx' ], [ 'base58btc', 'z17paNL19xttacUY' ], [ 'base64', 'mAHllcyBtYW5pICE' ], [ 'base64pad', 'MAHllcyBtYW5pICE=' ], [ 'base64url', 'uAHllcyBtYW5pICE' ], [ 'base64urlpad', 'UAHllcyBtYW5pICE=' ], [ 'base256emoji', '\uD83D\uDE80\uD83D\uDE80\uD83C\uDFC3\u270B\uD83C\uDF08\uD83D\uDE05\uD83C\uDF37\uD83E\uDD24\uD83D\uDE3B\uD83C\uDF1F\uD83D\uDE05\uD83D\uDC4F' ] ] }, { input: '\0\0yes mani !', tests: [ [ 'identity', '\0\0\0yes mani !' ], [ 'base2', '0000000000000000001111001011001010111001100100000011011010110000101101110011010010010000000100001' ], [ 'base8', '700000171312714403326055632220041' ], [ 'base10', '900573277761329450583662625' ], [ 'base16', 'f0000796573206d616e692021' ], [ 'base16upper', 'F0000796573206D616E692021' ], [ 'base32', 'baaahszltebwwc3tjeaqq' ], [ 'base32upper', 'BAAAHSZLTEBWWC3TJEAQQ' ], [ 'base32hex', 'v0007ipbj41mm2rj940gg' ], [ 'base32hexupper', 'V0007IPBJ41MM2RJ940GG' ], [ 'base32pad', 'caaahszltebwwc3tjeaqq====' ], [ 'base32padupper', 'CAAAHSZLTEBWWC3TJEAQQ====' ], [ 'base32hexpad', 't0007ipbj41mm2rj940gg====' ], [ 'base32hexpadupper', 'T0007IPBJ41MM2RJ940GG====' ], [ 'base32z', 'hyyy813murbssn5ujryoo' ], [ 'base36', 'k002lcpzo5yikidynfl' ], [ 'base36upper', 'K002LCPZO5YIKIDYNFL' ], [ 'base58flickr', 'Z117Pznk19XTTzBtx' ], [ 'base58btc', 'z117paNL19xttacUY' ], [ 'base64', 'mAAB5ZXMgbWFuaSAh' ], [ 'base64pad', 'MAAB5ZXMgbWFuaSAh' ], [ 'base64url', 'uAAB5ZXMgbWFuaSAh' ], [ 'base64urlpad', 'UAAB5ZXMgbWFuaSAh' ], [ 'base256emoji', '\uD83D\uDE80\uD83D\uDE80\uD83D\uDE80\uD83C\uDFC3\u270B\uD83C\uDF08\uD83D\uDE05\uD83C\uDF37\uD83E\uDD24\uD83D\uDE3B\uD83C\uDF1F\uD83D\uDE05\uD83D\uDC4F' ] ] } ]; describe('spec test', () => { let index = 0; for (const {input, tests} of encoded) { describe(`multibase spec ${ index++ }`, () => { for (const [name, output] of tests) { const base = bases[name]; describe(name, () => { it('should encode buffer', () => { const out = base.encode(fromString(input)); assert.deepStrictEqual(out, output); }); it('should decode string', () => { assert.deepStrictEqual(base.decode(output), fromString(input)); }); }); } }); } for (const base of Object.values(bases)) { it('should fail decode with invalid char', function () { if (base.name === 'identity') { return this.skip(); } assert.throws(() => base.decode(base.prefix + '^!@$%!#$%@#y'), `Non-${ base.name } character`); }); } });