wafflecrypt
v1.1.0
Published
Simple (probably stupid) encryption/decryption for browsers and node
Readme
wafflecrypt
Simple, opinionated (probably stupid) encryption/decryption.
Works in modern browsers that supports the SubtleCrypto API and node.js >= 12.9.
Details
- Uses RSA-OAEP-256 for encryption
- Can take public + private keys in the following formats
Installing
$ npm install wafflecryptUsage
// ESM / TypeScript
import {encrypt, decrypt} from 'wafflecrypt'
const inputData = 'encrypt-me'
const publicKey = {alg: 'RSA-OAEP-256', e: 'AQAB' /* … */} // JWK
const encrypted = await encrypt(publicKey, inputData)
const privateKey = {alg: 'RSA-OAEP-256', d: 'F9wnq…' /* */} // JWK
const outputData = await decrypt(privateKey, encrypted)
console.log(inputData === outputData)API
Buffer is returned for most operations in Node.js, whereas ArrayBuffer is used in browsers.
Encrypt
Encrypt the given data to a Buffer/ArrayBuffer.
function encrypt(
publicKey: JWK | PEM, // JWK as object or PEM as string
data: Buffer | ArrayBuffer | TypedArray | string
): Promise<Buffer | ArrayBuffer>Decrypt
Decrypt the given data to a Buffer/ArrayBuffer or string (if encoding option is passed).
function decrypt(
privateKey: JWK | PEM, // JWK as object or PEM as string
data: Buffer | ArrayBuffer | string, // Assumes base64 if string
options?: {encoding?: 'utf8' | 'ucs2' /* … */} // Only utf8 in browser
): Promise<Buffer | ArrayBuffer | string> // string on "encoding" optionGenerate key pair
Generates a keypair using random bytes, then encodes the keys as either PEM or JWK.
If no type is specified, it returns an object of both jwk and pem keys.
JwkKeyPair is an object with publicKey and privateKey, where the content is an object containing the actual JWK. Pass it to JSON.stringify if you want it as a string, obviously.
PemKeyPair is an object with publicKey and privateKey, where the content are PEM-strings.
function generateKeyPair(options?: {
type?: 'jwk' | 'pem'
modulusLength: number = 4096
}): Promise<JwkKeyPair | PemKeyPair | {jwk: JwkKeyPair; pem: PemKeyPair}>License
MIT © Espen Hovlandsdal
