@privy-io/crypto
TypeScript icon, indicating that this package has built-in type declarations

0.0.4 • Public • Published

@privy-io/crypto

JavaScript library for encrypting and decrypting data with Privy.

This library is intended to be used by the @privy-io/privy-browser and @privy-io/privy-node libraries to handle all cryptographic operations.

https://www.privy.io

build npm version

Documentation

See https://docs.privy.io/.

Installation

npm install --save @privy-io/crypto

Usage

import {CryptoEngine, CryptoVersion} from '@privy-io/crypto';

// Grab the engine (implementation) corresponding to the version
const x0 = CryptoEngine(CryptoVersion.x0);

// Crypto module expects Uint8Arrays.
const plaintext = new TextEncoder().encode('{"ssn": "123-45-6789"}');

// Encryption
const privyEncryption = new x0.Encryption(plaintext, {
  wrapperKey: wrapperKey, // RSA public key from privy server
  wrapperKeyId: wrapperKeyId, // Metadata id of RSA public key from Privy's KMS
});
const encryptionResult = await privyEncryption.encrypt();
const ciphertext = encryptionResult.ciphertext();
// Commitment id's are computed from the hash of a nonce concatenated with the
// plaintext. Can be used for an optional data integrity check.
const commitmentId = encryptionResult.commitmentId();

// Decryption
const privyDecryption = new x0.Decryption(ciphertext);

// This is where Privy would decrypt the encrypted data
// key against the Privy server, ultimately doing so in an HSM.
const decryptedDataKey = decryptDataKey(
  privyDecryption.wrapperKeyId(),
  privyDecryption.encryptedDataKey(),
);

const decryptionResult = await privyDecryption.decrypt(decryptedDataKey);
// Optional data integrity check.
if (!(await privyDecryption.verify(decryptionResult, commitmentId))) {
  throw 'Data integrity check failed.';
}

// Crypto module returns Uint8Arrays.
const decryptedPlaintext = new TextDecoder().decode(decryptionResult.plaintext());
console.log(decryptedPlaintext); // {"ssn": "123-45-6789"}

Running tests

To test the module interfaces, run:

npm test

To test the node crypto operations against the browser ones (which use the webcrypto standard), run:

# Requires node >= 15
npm run test-webcrypto

Package Sidebar

Install

npm i @privy-io/crypto

Weekly Downloads

194

Version

0.0.4

License

MIT

Unpacked Size

73.1 kB

Total Files

55

Last publish

Collaborators

  • koleok
  • joshnaviprivy
  • payton-privy
  • privy-bot
  • ankushswar1
  • ahollenbach
  • asta-li
  • sternhenri