stream-crypto
v1.1.1
Published
This is a library for performing streaming crypto in Node.js, exported in accordance with the usage of the Web Stream API.
Downloads
7
Readme
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,
}),
],
};