Code Monkey home page Code Monkey logo

node-saltpack's Introduction

node-saltpack

our standard saltpack implementation in JS

Features

  • Full implementation of the saltpack spec (https://saltpack.org)
  • Written for streaming (composable with standard node streams)
  • Browser-ready

Encrypting and decrypting

First, you'll need to obtain keys somehow. See our NaCl library for info on how to do that. If you just want random keys for testing, there's an alice_and_bob function that returns two keypairs in lib/util.js.

Once you have keys for the encryptor and the public keys of each recipient:

//this is the fanciest `echo`  e v e r!
//(this script will read from stdin, encrypt, decrypt, and write to stdout)
var saltpack = require("saltpack");

//get some testing keys, create encrypt/decrypt streams
var alice, bob;
({alice, bob} = saltpack.lowlevel.util.alice_and_bob());

//to specify anonymous recipients, simply add an "anonymized_recipients" argument
//to the dict, with "null" in place of a public key for each recipient you want to hide.
var es = new saltpack.stream.EncryptStream({
    encryptor: alice,
    do_armoring: true,
    recipients: [bob.publicKey]
})
var ds = new saltpack.stream.DecryptStream({decryptor: bob, do_armoring: true})

//register error listeners
es.on('error', function (err) { throw err; })
ds.on('error', function (err) { throw err; })

//roundtrip encrypt/decrypt from stdin to stdout
process.stdin.pipe(es)
//{Encrypt,Decrypt}Streams don't yet know how to accept pipes, so we have to pipe to
//their .first_stream.
es.pipe(ds.first_stream);
ds.pipe(process.stdout)

Stream interface

EncryptStream and DecryptStream mimic the NodeJS stream API as closely as possible. Accordingly, you can watch for the following events:

  • Writable side (input):
    • drain
    • pipe
    • unpipe
  • Readable side (output):
    • close
    • data
    • end
    • finish
    • readable The events are propagated up to the caller by the wrapped stream classes. Additionally, 'error' events emitted by any stream in the pipeline will propagate up to the caller.

EncryptStream and DecryptStream also provide three stream-interface methods:

  • .write(chunk)
  • .pipe(dest)
  • .end()

Unfortunately, at this time it is not possibe to chain .pipe() calls, as explained above. Other than this you can treat EncryptStream and DecryptStream as standard NodeJS streams.

node-saltpack's People

Contributors

mpcsh avatar amarcedone avatar maxtaco avatar

Watchers

James Cloos avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.