1.5.4 • Published 6 months ago

rfc4648 v1.5.4

Weekly downloads
65,405
License
MIT
Repository
github
Last release
6 months ago

rfc4648.js

Build Status JavaScript Style Guide

This library implements encoding and decoding for the data formats specified in rfc4648:

  • base64
  • base64url
  • base32
  • base32hex
  • base16

Each encoding has a simple API inspired by Javascript's built-in JSON object:

import { base32 } from "rfc4648";

base32.stringify([42, 121, 160]); // -> 'FJ42A==='
base32.parse("FJ42A==="); // -> Uint8Array([42, 121, 160])

The library has tree-shaking support, so tools like rollup.js or Webpack 2+ can automatically trim away any encodings you don't use.

  • Zero external dependencies
  • 100% test coverage
  • Built-in types for Typescript & Flow
  • 0.8K minified + gzip (can be even smaller with tree shaking)

API details

The library provides the following top-level modules:

  • base64
  • base64url
  • base32
  • base32hex
  • base16
  • codec

Each module exports a parse and stringify function.

const string = baseXX.stringify(data, opts)

Each stringify function takes array-like object of bytes and returns a string.

If you pass the option { pad: false } in the second parameter, the encoder will not output padding characters (=).

const data = baseXX.parse(string, opts)

Each parse function takes a string and returns a Uint8Array of bytes. If you would like a different return type, such as plain Array or a Node.js Buffer, pass its constructor in the second argument:

base64.parse("AOk=", { out: Array });
base64.parse("AOk=", { out: Buffer.allocUnsafe });

The constructor will be called with new, and should accept a single integer for the output length, in bytes.

If you pass the option { loose: true } in the second parameter, the parser will not validate padding characters (=):

base64.parse("AOk", { loose: true }); // No error

The base32 codec will also fix common typo characters in loose mode:

base32.parse("He1l0==", { loose: true }); // Auto-corrects as 'HELLO==='

Custom encodings

To define your own encodings, use the codec module:

const codec = require("rfc4648").codec;

const myEncoding = {
  chars: "01234567",
  bits: 3
};

codec.stringify([220, 10], myEncoding); // '670050=='
codec.parse("670050", myEncoding, { loose: true }); // [ 220, 10 ]

The encoding structure should have two members, a chars member giving the alphabet and a bits member giving the bits per character. The codec.parse function will extend this with a third member, codes, the first time it's called. The codes member is a lookup table mapping from characters back to numbers.

@lucaapp/web-crypto@llkennedy/httpgrpc@monid/vaulted-key-provider@textury/arlocal@infinitebrahmanuniverse/nolb-rf@reflame/lib-resourcejam3-react-sdk@everything-registry/sub-chunk-2665@msiemens/keycloakify-fixtalktsy-matrix-react-sdktest-matrix-react-sdkwindmill-componentsweb-auth-librarystone-soupvoluptasrerum@diva.exchange/divachain@diva.exchange/i2p-sam@dmbsk/api-crypto-address-validator@ctrl/magnet-link@coyoapp/plugin-adapter@perlboy/cfworker-jwtiscc-core-tsjolocom-libjwt-quicklattics-remotely-savestudo.jstwype-sdk@aracna/core@aspensmonster/doipjs@bibigpt/rsshub@capitual/api-crypto-address-validator@celo/react-native-fast-crypto@cinphon/mongoose-ext@cfworker/base64url@cfworker/cosmos@cfworker/jwt@cere-ddc-sdk/ddc@cloudflare/privacypass-ts@ada-labs/keysmith@dataswapjs/dataswapjsyaobweb-fs-wrappers@faustbrian/node-base16@faustbrian/node-base32@faustbrian/node-base32-hex@faustbrian/node-base64-url@guardtime/common@harryrabin/pagecrypt@hashgraph/sdk@hlolli/arlocal@fyears/rclone-crypt@functionland/rn-borg@functionland/rn-borg-bridge@functionland/rn-fula@gmanavarro/bls12381-key-pair@kubernetes/client-node@kubekit/client@kskhasegawa/bls12381-key-pair@kzfk52/cf-access-jwt@llkennedy/mercury@llkennedy/protoc-gen-tsjson@lsql/core@lsql/ui@loomat/utils@maccman/web-auth-library@magnetcustomer/keycloakify@mfellner/react-native-fast-create-hash@mser/matrix-react-sdk@mtbl/matrix-react-sdk@ngnjs/libcrypto@mattrglobal/bls12381-key-pair@meistrari/gpt-tokenizer@misskey-dev/node-http-message-signatures@mlytics/core-ts@jolocom/vaulted-key-provider@journyio/kubernetes-client@id3/bioseal-generation@id3/bioseal-verification@okkema/worker@rarimo/zkp-iden3@ramp-network/crypto-address-validator@ryanclark/k8s@recro/easy-kubernetes-controller@starportal/cf-workers-openid-connect@starportal/cf-workers-session-store@oneki/utils@oneauth/sdk-core@pnpm/crypto.base32-hash@pnnh/atom-react@pnnh/polaris-business@pnnh/venus-business@pito-plugin/media@robertlong/matrix-react-sdk@stableness/wabblemobilepassotpauth-migration-parseroidc-client-rxonekijs-coreonekijs-craonekijs-framework
1.5.4

6 months ago

1.5.3

2 years ago

1.5.2

3 years ago

1.5.1

3 years ago

1.5.0

4 years ago

1.4.0

5 years ago

1.3.0

6 years ago

1.2.1

6 years ago

1.2.0

6 years ago

1.1.0

7 years ago

1.0.0

8 years ago

0.9.1

8 years ago

0.9.0

8 years ago