e2e-encryption v1.1.0
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-encryptionUsage
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
payloadshould always be aJSONobject.
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 installTo build minified versions:
$ npm run buildTests use minified version, so make sure to rebuild it every time you change
src/index.js.
Testing
To run tests:
$ npm run testIn 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