Important: This documentation covers Yarn 1 (Classic).
For Yarn 2+ docs and migration guide, see yarnpkg.com.

Package detail

egoroof-blowfish

egoroof74.8kMIT4.0.1TypeScript support: included

Blowfish encryption library for browsers and Node.js

blowfish, cipher, ecb, cbc, encryption, decryption, library

readme

Blowfish

npm package

Blowfish encryption library for browsers and Node.js.

Find the changelog in CHANGELOG.md

Table of Contents

Installation

Take latest version here or with npm:

npm install egoroof-blowfish --save

JS modules

The library is only deployed in native JS modules, so in browsers you have to use script with type module:

<script type="module">
  import { Blowfish } from 'https://your-host/blowfish.mjs';
  // your code here..
</script>

Or bundle the library to your code.

In Nodejs it imports easily:

import { Blowfish } from 'egoroof-blowfish';

Usage

All input data including key, IV, plaintext and ciphertext should be a String or ArrayBuffer / Buffer. Strings support all unicode including emoji ✨.

Example

import { Blowfish } from 'egoroof-blowfish';

const bf = new Blowfish('super key', Blowfish.MODE.ECB, Blowfish.PADDING.NULL); // only key isn't optional
bf.setIv('abcdefgh'); // optional for ECB mode; bytes length should be equal 8

const encoded = bf.encode('input text even with emoji 🎅');
const decoded = bf.decode(encoded, Blowfish.TYPE.STRING); // type is optional

Block cipher mode of operation

https://en.wikipedia.org/wiki/Block_cipher_mode_of_operation

Blowfish.MODE.ECB; // (default) Electronic Codebook
Blowfish.MODE.CBC; // Cipher Block Chaining

Padding

http://www.di-mgt.com.au/cryptopad.html

Blowfish.PADDING.PKCS5; // (default) Pad with bytes all of the same value as the number of padding bytes
Blowfish.PADDING.ONE_AND_ZEROS; // Pad with 0x80 followed by zero bytes
Blowfish.PADDING.LAST_BYTE; // Pad with zeroes except make the last byte equal to the number of padding bytes
Blowfish.PADDING.NULL; // Pad with zero (null) characters
Blowfish.PADDING.SPACES; // Pad with spaces

Return type

Which type of data should return method decode:

Blowfish.TYPE.STRING; // (default) String
Blowfish.TYPE.UINT8_ARRAY; // Uint8Array

changelog

Changelog

v4.0.1

  • Reduce library size 15.62 KiB -> 13.01 KiB by compressing PI numbers

v4.0.0

  • Breaking: Now this library exports only as JS native module (not UMD) and use named export (not default export)

Migration on Nodejs:

// v3 common js
const Blowfish = require('egoroof-blowfish');

// v3 esm interop
import Blowfish from 'egoroof-blowfish';

// v4
import { Blowfish } from 'egoroof-blowfish';

Migration on browsers:

<!-- v3 -->
<script src="blowfish.js"></script>
<script>
  // your code using Blowfish
</script>

<!-- v4 -->
<script type="module">
  import { Blowfish } from 'blowfish.mjs';
  // your code
</script>

v3.0.0

  • Breaking: Drop Babel & encoding lib, so now this library requires ES6 native support (IE isn't supported anymore)
  • Fixed: Empty key leads to infinite loop

v2.2.2

  • Fixed: Truncated result encoding 8 characters text

v2.2.1

  • Include typings in dist files list

v2.2.0

  • Add types definition

v2.1.0

  • Fixed: Empty string is not properly decoded

v2.0.0

  • Breaking: Now bf.encode() doesn't accept second parameter and always returns Uint8Array
// v1
const encoded = bf.encode('input text', Blowfish.TYPE.UINT8_ARRAY);

// v2
const encoded = bf.encode('input text');

v1.0.1

  • Reduce library size from 38.6 KiB to 20.9 KiB

v1.0.0

  • Breaking: Removed bf.setReturnType()

Setting bf.setReturnType() was annoying so it's removed. Now you can pass second optional argument to bf.encode() / bf.decode() to specify return type. Default return type is Blowfish.TYPE.UINT8_ARRAY for bf.encode() and Blowfish.TYPE.STRING for bf.decode:

// v0.1.0
bf.setReturnType(Blowfish.TYPE.UINT8_ARRAY);
const encoded = bf.encode('input text');
bf.setReturnType(Blowfish.TYPE.STRING);
const decoded = bf.decode(encoded);

// v1
const encoded = bf.encode('input text', Blowfish.TYPE.UINT8_ARRAY); // type is optional
const decoded = bf.decode(encoded, Blowfish.TYPE.STRING); // type is optional

v0.1.0

  • First release