react-native-e2e-encryption
TypeScript icon, indicating that this package has built-in type declarations

1.0.1 • Public • Published

react-native-e2e-encryption (End-to-End Encryption npm Package)

Overview

Forked to work without tweetnacl-utils to work with react-native.

The primary aim of this package is to provide easier End-2-End encryption for the client-side web applications. This package is a wrapper around the original tweetnacl NPM package and uses its functions and object definitions internally.

Installation

You can install e2e-encryption via a package manager:

NPM:

$ npm install react-native-e2e-encryption

yarn:

$ yarn add react-native-e2e-encryption

or download source code.

Usage

Internally uses the x25519-xsalsa20-poly1305 algorithm, that has been implemented by tweetnacl package.

new E2E(publicKey, privateKey, options)

Generates a new random key pair for object if publicKey or privateKey arguments are empty and returns it as an object:

const instance = new E2E('', '', {});

Attributes and function calls supported by the object:

{
  publicKey: ...,
  privateKey: ...,
  Encrypt: (plainText, receiverPublicKey, options),
  Decrypt: (cipherText, senderPublicKey, options),
}

Options attributes allows you to set the flag to use same symmetric keys for the same client everytime.

{
  useSameKeyPerClient: true / false
}

Encrypt (payload, receiverPublicKey, options)

Generates the encrypted text using a symmetric key generated / used automatically in the internal execution which depends on the local options object passed above or the global options object, that was used during the instance creation.

NOTE: The payload should always be a JSON object.

const encryptedText = sender.Encrypt({ Hello: 'World' }, receiverPublicKey, {
  useSameKeyPerClient: true,
});

encryptedText contains the payload that was encrypted and is appended by the Symmetric Key, used to encrypt the payload, encrypted by the sender's private key and receiver's public key.

<Encrypted Payload>.<Encrypted Symmetric Key>

Local Options object passed here takes precedence over the global Options.

Decrypt(cipherText, senderPublicKey, options)

Generates the decrypted text by extracting / using the symmetric key automatically which depends on the local Options object passed or the global Options object that was used during the instance creation.

const DecryptedText = receiver.Decrypt(
  '<encrypted payload>.<encrypted symmetric key>',
  senderPublicKey,
  {
    useSameKeyPerClient: true,
  },
);

DecryptedText is the JSON object that was encrypted.

{ Hello: 'World' }

Local Options object passed takes precedence over the global Options passed.

The function will throw an error if:

  • Payload has been tampered with
  • Encrypted Symmetric Key has been modified
  • Pass the option to use already present symmetric key but the payload was encrypted using a different symmetric key

Development and Testing

Install NPM modules needed for development:

$ npm install

To build minified versions:

$ npm build

Testing

To run tests:

$ npm test

In Progress Tasks

  • [ ] Allow for import of symmetric keys that might have been defined already
  • [ ] Better error handling
  • [ ] Most customizations for the symmetric keys and private/public keys

Package Sidebar

Install

npm i react-native-e2e-encryption

Weekly Downloads

2

Version

1.0.1

License

MIT

Unpacked Size

38.6 kB

Total Files

20

Last publish

Collaborators

  • frooastside