aes-ts

0 dependency, pure TypesScript implementation of the AES block cipher and common modes of operation.

Usage no npm install needed!

<script type="module">
  import aesTs from 'https://cdn.skypack.dev/aes-ts';
</script>

README

AES-TS

test status npm version zero dependencies MIT License

a modern port of AES-JS:

A pure JavaScript implementation of the AES block cipher algorithm and all common modes of operation (CBC, CFB, CTR, ECB and OFB).

for proper documentation please check their README.md.

motivation

  • enable three shaking
    • it's rare that an app will use all this modes
    • not every app needs encryption + decryption
    • only half of the constants are needed on each direction
  • a good replacement for libraries that import crypto-browserify on the browser.
  • built-in typescript types

best practices

  • don't roll your own crypto, especially don't touch Block directly.
  • don't use ECB. don't reuse IVs.
  • don't use this library, use SubtleCrypto, whenever possible.

exports

ESM exports, listed by Common Mode Of Operation.

* Encryptor Decryptor
Block Encryptor Decryptor
CBC CBCEncryptor CBCDecryptor
CFB CFBEncryptor CFBDecryptor
CTR CTREncryptor CTRDecryptor
ECB ECBEncryptor ECBDecryptor
OFB OFBEncryptor OFBDecryptor

interfaces

replace ___ for the mode of operation.

each mode has unique parameters, described by their types.

Encryptor

const encryptor = new ___Encryptor(key)
const ciphertext = encryptor.encrypt(plaintext)

Decryptor

const decryptor = new ___Decryptor(key)
const plaintext = decryptor.decrypt(ciphertext)

Encryptor + Decryptor

const mode = new ___(key)
const sametext = mode.decrypt(mode.encrypt(plaintext))

license and acknowledgments

MIT

all crypto code and tests were taken directly from AES-JS, written by @ricmoo.