react-native-openpgp

React-Native OpenPGP is an OpenPGP.js implementation made to work under React-Native.

Usage no npm install needed!

<script type="module">
  import reactNativeOpenpgp from 'https://cdn.skypack.dev/react-native-openpgp';
</script>

README

React-Native-OpenPGP

React-Native-OpenPGP is a Javascript implementation of the OpenPGP protocol based on OpenPGP.js.

Getting started

Installation

npm install --save react-native-openpgp
react-native link react-native-openpgp

Note: Run npm install -g rnpm if you haven't installed RNPM (React-Native Package Manager) yet! Alternatively you can add the Android and iOS modules library by following the official guide.

Usage

import * as openpgp from 'react-native-openpgp';

Encrypt and decrypt String data with a password

var options, encrypted;

options = {
  data: 'Hello, World!',      // input as String
  passwords: ['secret stuff'] // multiple passwords possible
};

openpgp.encrypt(options)
  .then((ciphertext) => {
    encrypted = ciphertext.data; // '-----BEGIN PGP MESSAGE ... END PGP MESSAGE-----'
  })
  .catch((error) => {
    console.log("Something went wrong: " + error);
  });
options = {
  message: openpgp.readMessage(encrypted), // parse armored message
  password: 'secret stuff'                         // decrypt with password
};

openpgp.decrypt(options)
  .then((plaintext) => {
    return plaintext.data; // 'Hello, World!'
  })
  .catch((error) => {
    console.log("Something went wrong: " + error);
  });

Encrypt and decrypt Uint8Array data with PGP keys

var options, encrypted;

var pubkey = '-----BEGIN PGP PUBLIC KEY BLOCK ... END PGP PUBLIC KEY BLOCK-----';
var privkey = '-----BEGIN PGP PRIVATE KEY BLOCK ... END PGP PRIVATE KEY BLOCK-----';

options = {
  data: new Uint8Array([0x01, 0x01, 0x01]),           // input as Uint8Array
  publicKeys: openpgp.readArmoredKey(pubkey).keys,   // for encryption
  privateKeys: openpgp.readArmoredKey(privkey).keys, // for signing (optional)
  armor: false                                        // don't ASCII armor
};

openpgp.encrypt(options)
  .then((ciphertext) => {
    encrypted = ciphertext.message.packets.write(); // get raw encrypted packets as Uint8Array
  })
  .catch((error) => {
    console.log("Something went wrong: " + error);
  });
options = {
  message: openpgp.readBinaryMessage(encrypted),             // parse encrypted bytes
  publicKeys: openpgp.readArmoredKey(pubkey).keys,     // for verification (optional)
  privateKey: openpgp.readArmoredKey(privkey).keys[0], // for decryption
  format: 'binary'                                      // output as Uint8Array
};

openpgp.decrypt(options)
  .then((plaintext) => {
    return plaintext.data // Uint8Array([0x01, 0x01, 0x01])
  })
  .catch((error) => {
    console.log("Something went wrong: " + error);
  });

Generate new key pair

var options = {
  userIds: [{ name:'Jon Smith', email:'jon@example.com' }], // multiple user IDs
  numBits: 2048,                                            // RSA key size
  passphrase: 'super long and hard to guess secret'         // protects the private key
};

openpgp.generateKey(options)
  .then((key) => {
    var privkey = key.privateKeyArmored; // '-----BEGIN PGP PRIVATE KEY BLOCK ... '
    var pubkey = key.publicKeyArmored;   // '-----BEGIN PGP PUBLIC KEY BLOCK ... '
  })
  .catch((error) => {
    console.log("Something went wrong: " + error);
  });