JSPM

  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 1
  • Score
    100M100P100Q28892F

End-to-End Encrypted eXchange

Package Exports

  • e3x
  • e3x/ciphers/1a/export.browser.js
  • e3x/ciphers/1a/export.js
  • e3x/ciphers/2a/export.browser.js
  • e3x/ciphers/2a/export.js
  • e3x/ciphers/3a/export.browser.js
  • e3x/ciphers/3a/export.js

This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (e3x) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

Readme

e3x: End-to-End Encrypted eXchange (javascript)

Build Status

This module implements all of e3x in javascript as a node and browserify module. It is used by telehash-js which is designed to provide a friendly higher level api, whereas this is low level and expects the application to manage all state tracking.

Usage

All packets use lob-enc structure of: {json:{...}, body:Buffer(...)}

var e3x = require('e3x');

var secrets = e3x.generate();

var self = e3x.self(args);
if(!self) //console.log(e3x.err);

var inner = self.decrypt(message);

var exchange = self.exchange(args);
if(!exchange) //console.log(self.err);

exchange.token; // 16 byte buffer
exchange.sending = function(packet){ }

var bool = exchange.verify(message);
var message = exchange.encrypt(inner);

var inner = exchange.receive(cpacket);

var at = exchange.at(at); // set the at, or return the current one if none given, will start to timeout channels until in sync
var bool = exchange.sync(handshake); // processes handshake to do all setup stuff, resends channels if in sync
var handshake = exchange.handshake(); // returns current handshake to be sent

var channel = exchange.channel(open);
if(!channel) //console.log(exchange.err);

var bool = channel.receive(inner); // true if accepted
channel.send(packet); // calls exchange.sending()
channel.state;
channel.receiving = function(err, packet){};

Cipher Sets

These are the current Cipher Sets supported by default:

The API to implement a new CS module is just a simplified crypto wrapper:

var cs = require('e3x-csxx');
cs.id; // 'xx';

cs.generate(cb); // new local keypair, cb(err, pair)

var local = new cs.Local(pair);
var inner = local.decrypt(body);

var remote = new cs.Remote(public_key_endpoint);
var bool = remote.verify(local, body);
var outer = remote.encrypt(local, inner);

var ephemeral = new cs.Ephemeral(remote, body);
var outer = ephemeral.encrypt(inner)
var inner = ephemeral.decrypt(outer)