JSPM

pull-secret-channel

0.1.1
  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • 0
  • Score
    100M100P100Q26695F
  • License Apache-2.0

Pull stream of authenticated encryption ChaCha20-Poly1305

Package Exports

  • pull-secret-channel
  • pull-secret-channel/src/index.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 (pull-secret-channel) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

Readme

pull-secret-channel

npm version npm downloads ci status

Streaming authenticated encryption using ChaCha20-Poly1305 (RFC 8439) (or other AEAD constructions).

See project README.md for more information.

Install

npm install --save pull-secret-channel

Example

const { randomBytes } = require('crypto')
const pull = require('pull-stream')
const { KEY_SIZE, pullEncrypter, pullDecrypter } = require('pull-secret-channel')

// generate a random secret, `KEY_SIZE` bytes long.
const key = randomBytes(KEY_SIZE)

const plaintext1 = Buffer.from('hello world')

pull(
  pull.values([plaintext1]),

  // encrypt every byte
  pullEncrypter(key),

  // the encrypted stream
  pull.through((ciphertext) => {
    console.log('Encrypted: ', ciphertext)
  }),

  // decrypt every byte
  pullDecrypter(key),

  pull.concat((err, plaintext2) => {
    if (err) throw err
    console.log('Decrypted: ', plaintext2)
  }),
)

API

pullEncrypter(key)

Returns a "through" pull-stream.

For every plaintext content item in stream:

  • Constructs and encrypts content length
  • Encrypts content

And when stream done, constructs and encrypts an end-of-stream message.

pullDecrypter(key)

Returns a "through" pull-stream.

First reads and decrypts either a length or end-of-stream message.

If end-of-stream message, gracefully ends the stream.

Otherwise length message, so reads and decrypts the specified content.

If stream ends without end-of-stream message, aborts with an error.

KEY_SIZE

The size of a ChaCha20-Poly1305 key: 32 bytes

TAG_SIZE

The size of ChaCha20-Poly1305 authentication tag: 16 bytes.

The size of encrypted ciphertext is plaintext.length + TAG_SIZE.

The size of decrypted plaintext is ciphertext.length - TAG_SIZE.

License

Copyright 2023 Michael Williams

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.