bsaes
v0.0.2
Published
Advanced Encryption Standard
Downloads
2,059
Readme
bsaes.js - JavaScript AES
Just as it's possible to write a TCP/IP protocol stack in some utterly inappropriate programing language like ML or Visual Basic, so too, it's possible to implement TCP/IP over carrier pidgeons, or paper tape, or demons summoned from the vasty deep.
-- Stross, C., The Jennifer Morgue
This package provides a pure-JavaScript bitsliced AES implementation, as logical operations on 32 bit unsigned integers, ported from the Go port of the BearSSL code.
As a concession to performance and the futility of pure-JS crypto,
a variable time table based AESENC
analog is also provided in the
unsafe
sub-module.
WARNING
THIS IS NOT INTENDED AS A GENERAL PURPOSE AES IMPLEMENTATION. Unless
you need access to AES algorithm internals (ie: AddRoundKey
, SubBytes
,
ShiftRows
, and or MixColumns
) it is strongly recommended that you use
crypto
instead.
While sensible languages and compilers generally would transform an AES implementation of this design into something that is timing side-channel free, JavaScript and it's various implementations are not sensible by any common definition of the word.
Notes
The inverse transformations are not currently implemented for reasons of brevity.
The bitsliced nature of the implementation means that under the hood each operation is applied to 2 blocks at once. This can be used to increase performance of certain constructs.
If timing side-channels are beyond your threat model, this could be more easily accomplished via a table driven implementation, with better performance.
The package is not documented as developers that can't figure it out really have no business using it, at all.