stream-crypto
TypeScript icon, indicating that this package has built-in type declarations

1.1.1 • Public • Published

stream-crypto

This is a library for performing streaming crypto in Node.js, exported in accordance with the usage of the Web Stream API. It is planned to achieve unified stream crypto operations across Deno, Node.js, and the browser, making it convenient to unify various functionalities.

Getting Start

Here is an example of end-to-end encryption based on AES.

import {
    createRandomBytesStream,
    HexDecodeStream,
    HexEncoderStream,
    createHashStream,
    createCipherivStream,
    createDecipherivStream,
} from "stream-crypto";

// Sending Side
const originData = randomBytes(200);
const key = randomBytes(32);
const iv = randomBytes(16);

const [dataStream, copiedStream] = createStream(originData)
    .pipeThrough(createCipherivStream("aes-256-cbc", key, iv))
    .tee();
const hashStream = copiedStream
    .pipeThrough(createHashStream("sha256"))
    .pipeThrough(new HexEncoderStream());

sendStreamsToOtherSide(dataStream, hashStream);
import {
    createRandomBytesStream,
    HexDecodeStream,
    HexEncoderStream,
    createHashStream,
    createDecipherivStream,
    getFinalDataFromStream,
} from "stream-crypto";

//*** get stream from some where
const { key, iv } = getMessageFromSendingSide();
const [dataStream, hashStream] = getStreamFromSendingSide();

// Receive End
const [forDecrypt, forHashCheck] = dataStream.tee();
const [decrypted, hashCheck, hashString] = await getFinalDataFromStreams(
    forDecrypt.pipeThrough(createDecipherivStream("aes-256-cbc", key, iv)),
    forHashCheck
        .pipeThrough(createHashStream("sha256"))
        .pipeThrough(new HexEncoderStream()),
    hashStream
);

hashCheck === hashString; // true
decrypted; // originData

browser polyfill

Use Vite node polyfill to enable crypto and stream in browser

import { nodePolyfills } from "vite-plugin-node-polyfills";
export default {
    plugins: [
        nodePolyfills({
            // To exclude specific polyfills, add them to this list.
            exclude: [
                "fs", // Excludes the polyfill for `fs` and `node:fs`.
            ],
            // Whether to polyfill specific globals.
            globals: {
                Buffer: false, // can also be 'build', 'dev', or false
                global: true,
                process: true,
            },
            // Whether to polyfill `node:` protocol imports.
            protocolImports: true,
        }),
    ],
};

/stream-crypto/

    Package Sidebar

    Install

    npm i stream-crypto

    Weekly Downloads

    2

    Version

    1.1.1

    License

    Apache-2.0

    Unpacked Size

    52.8 kB

    Total Files

    42

    Last publish

    Collaborators

    • konghayao