e2e-encryption
v1.1.0
Published
Send and receive messages in an End-to-End Encrypted Environment.
Downloads
5
Maintainers
Readme
e2e-encryption (End-to-End Encryption npm
Package)
Overview
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 e2e-encryption
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 aJSON
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 run build
Tests use minified version, so make sure to rebuild it every time you change
src/index.js
.
Testing
To run tests:
$ npm run 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