2.3.8 • Published 2 years ago

@jafri/isomorphic-webcrypto v2.3.8

Weekly downloads
-
License
MIT
Repository
github
Last release
2 years ago

isomorphic-webcrypto NPM bundlephobia

webcrypto library for Node, React Native and IE11+

What?

There's a great Node polyfill for the Web Crypto API, but it's not isomorphic.

IE11 and versions of Safari < 11 use an older version of the spec, so the browser implementation includes a webcrypto-shim to iron out the differences. You'll still need to provide your own Promise polyfill.

Note: If you're performing cross-platform jwt operations, consider jwt-lite or jwt-verifier-lite (for OpenID Connect), which build on isomorphic-webcrypto

Install

npm install isomorphic-webcrypto

Usage

There's a simple hashing example below, but there are many more WebCrypto examples here. This example requires you to npm install hex-lite.

const crypto = require('isomorphic-webcrypto')
const hex = require('hex-lite')
// or
import crypto from 'isomorphic-webcrypto'
import hex from 'hex-lite'

crypto.subtle.digest(
  { name: 'SHA-256' },
  new Uint8Array([1,2,3]).buffer
)
.then(hash => {
  // hashes are usually represented as hex strings
  // hex-lite makes this easier
  const hashString = hex.fromBuffer(hash);
})

I just want to drop in a script tag

You should use the webcrypto-shim library directly:

<!-- Any Promise polyfill will do -->
<script src="https://unpkg.com/bluebird"></script>
<script src="https://unpkg.com/webcrypto-shim"></script>

Compatibility

  • IE11+
  • Safari 8+
  • Edge 12+
  • Chrome 43+
  • Opera 24+
  • Firefox 34+
  • Node 8+
  • React Native

Although the library runs on IE11+, the level of functionality varies between implementations. The grid below shows the discrepancies between the latest versions of each environment.

Legend

  • ~ works with some caveats - see the __tests__ directory for the caveats
  • ? untested
  • x unsupported algorithm
  • strikethrough broken method
KeyNodeReact NativeChrome/FirefoxSafariEdgeIE11
HS256importKeyexportKeygenerateKeysignverifyimportKeyexportKeygenerateKeysignverifyimportKeyexportKeygenerateKeysignverifyimportKeyexportKeygenerateKeysignverifyimportKeyexportKeygenerateKeysignverifyimportKeyexportKeygenerateKeysignverify
HS384importKeyexportKeygenerateKeysignverifyimportKeyexportKeygenerateKeysignverifyimportKeyexportKeygenerateKeysignverifyimportKeyexportKeygenerateKeysignverifyimportKeyexportKeygenerateKeysignverifyimportKeyexportKeygenerateKeysignverify
HS512importKeyexportKeygenerateKeysignverifyimportKeyexportKeygenerateKeysignverifyimportKeyexportKeygenerateKeysignverifyimportKeyexportKeygenerateKeysignverifyimportKeyexportKeygenerateKeysignverifyx
RS256importKeyexportKeygenerateKeysignverifyimportKeyexportKeygenerateKeysignverifyimportKeyexportKeygenerateKeysignverifyimportKeyexportKeygenerateKeysignverify~importKeyexportKey~generateKeysignverify~importKey~exportKeygenerateKeysignverify
RS384importKeyexportKeygenerateKeysignverifyimportKeyexportKeygenerateKeysignverifyimportKeyexportKeygenerateKeysignverifyimportKeyexportKeygenerateKeysignverify~importKeyexportKey~generateKeysignverifyimportKeyexportKeygenerateKeysignverify
RS512importKeyexportKeygenerateKeysignverifyimportKeyexportKeygenerateKeysignverifyimportKeyexportKeygenerateKeysignverifyimportKeyexportKeygenerateKeysignverify~importKeyexportKey~generateKeysignverifyimportKeyexportKeygenerateKeysignverify
PS256importKeyexportKeygenerateKeysignverifyimportKeyexportKeygenerateKeysignverifyimportKeyexportKeygenerateKeysignverifyimportKeyexportKeygenerateKeysignverify??
PS384importKeyexportKeygenerateKeysignverifyimportKeyexportKeygenerateKeysignverifyimportKeyexportKeygenerateKeysignverifyimportKeyexportKeygenerateKeysignverify??
PS512importKeyexportKeygenerateKeysignverifyimportKeyexportKeygenerateKeysignverifyimportKeyexportKeygenerateKeysignverifyimportKeyexportKeygenerateKeysignverify??
ES256importKeyexportKeygenerateKeysignverifyimportKeyexportKeygenerateKeysignverifyimportKeyexportKeygenerateKeysignverifyimportKeyexportKeygenerateKeysignverifyxx
ES384importKeyexportKeygenerateKeysignverifyimportKeyexportKeygenerateKeysignverifyimportKeyexportKeygenerateKeysignverifyimportKeyexportKeygenerateKeysignverifyxx
ES512importKeyexportKeygenerateKeysignverifyimportKeyexportKeygenerateKeysignverifyimportKeyexportKeygenerateKeysignverifyxxx
RSA1_5??????
RSA-OAEP??????
RSA-OAEP-256??????
A128KW??????
A192KW??????
A256KW??????
dir??????
ECDH-ES??????
ECDH-ES+A128KW??????
ECDH-ES+A192KW??????
ECDH-ES+A256KW??????
A128GCMKW??????
A192GCMKW??????
A256GCMKW??????
PBES2-HS256+A128KW??????
PBES2-HS384+A192KW??????
PBES2-HS512+A256KW??????

Here's a legend for the JWA alg abbreviations:

KeySignature, MAC or Key Management Algorithm
HS256HMAC using SHA-256
HS384HMAC using SHA-384
HS512HMAC using SHA-512
RS256RSASSA-PKCS1-v1_5 using SHA-256
RS384RSASSA-PKCS1-v1_5 using SHA-384
RS512RSASSA-PKCS1-v1_5 using SHA-512
ES256ECDSA using P-256 and SHA-256
ES384ECDSA using P-384 and SHA-384
ES512ECDSA using P-521 and SHA-512
PS256RSASSA-PSS using SHA-256 and MGF1 with SHA-256
PS384RSASSA-PSS using SHA-384 and MGF1 with SHA-384
PS512RSASSA-PSS using SHA-512 and MGF1 with SHA-512
RSA1_5RSAES-PKCS1-v1_5
RSA-OAEPRSAES OAEP using default parameters
RSA-OAEP-256RSAES OAEP using SHA-256 and MGF1 with SHA-256
A128KWAES Key Wrap with default initial value using 128-bit key
A192KWAES Key Wrap with default initial value using 192-bit key
A256KWAES Key Wrap with default initial value using 256-bit key
dirDirect use of a shared symmetric key as the CEK
ECDH-ESElliptic Curve Diffie-Hellman Ephemeral Static key agreement using Concat KDF
ECDH-ES+A128KWECDH-ES using Concat KDF and CEK wrapped with "A128KW"
ECDH-ES+A192KWECDH-ES using Concat KDF and CEK wrapped with "A192KW"
ECDH-ES+A256KWECDH-ES using Concat KDF and CEK wrapped with "A256KW"
A128GCMKWKey wrapping with AES GCM using 128-bit key
A192GCMKWKey wrapping with AES GCM using 192-bit key
A256GCMKWKey wrapping with AES GCM using 256-bit key
PBES2-HS256+A128KWPBES2 with HMAC SHA-256 and "A128KW" wrapping
PBES2-HS384+A192KWPBES2 with HMAC SHA-384 and "A192KW" wrapping
PBES2-HS512+A256KWPBES2 with HMAC SHA-512 and "A256KW" wrapping

License

MIT