@andgohq/cassl
v1.1.8
Published
CASSL: Configurable Authenticated Secret Sharing Library
Downloads
643
Readme
CASSL: Configurable Authenticated Secret Sharing Library
Now internal usage only.
Supported platform: NodeJs Supported mode: MAC-SSS, SMAC-SSS, SSS, SSS-MAC, SSS-SMAC
Install
npm install @andgohq/casslUsage
import { split, combine, genKeyPair, type NONCE_BYTES } from "@andgohq/cassl";
const MODE = "AEAD-SSS";
const data = Buffer.from("hello, world", "utf8");
const keyPair = genKeyPair();
const nonce = Buffer.alloc(NONCE_BYTES);
// split data into 5 shares, 3 of them are required to recover the data
const shares = split(MODE, data, 5, 3, nonce, keyPair.publicKey);
// combine 3 shares to recover the data
const recovered = combine(
MODE,
shares.slice(0, 3),
nonce,
keyPair.secretKey
).toString("utf8");
console.log(recovered === "hello, world"); // trueResource Requirements
Rough requirements when using default parameters.
- Platform: Node.js on x64 / amd64 (or arm64)
- Minimum memory: 128MB ※
- Minimum CPU clock: 1GHz (single-thread is sufficient) ※
- Local storage: roughly original data size × n for the generated shares (SSD recommended for combine, which reads
nshare streams concurrently)
Reference values (sssSplit / sssCombine, n = 3, k = 2, on a Linux VM with AMD EPYC 7763):
| Data size | split | combine | | --- | --- | --- | | 1 MiB | ~0.1 s | ~0.3 s | | 10 MiB | ~1.0 s | ~3.9 s | | 100 MiB | ~15 s | ~33 s |
※ When using default parameter values. Memory usage scales linearly with the number of shares n (up to n × CASSL_BUFFER_BYTES during combine), so allocate accordingly when using larger n.
Environment Variables
CASSL_LOG_LEVEL: default=info, the log level.CASSL_LOG_FILE: when set, the log will be written to the file.CASSL_BUFFER_BYTES: default=10485760 (10MiB), hard cap on each per-share Fifo buffer during combine (safety limit; exceeding raises an error).CASSL_CONTROL_CHUNK_BYTES: default=524288 (512KiB), the size of the control chunk.CASSL_HIGH_WATER_MARK: default=524288 (512KiB), soft backpressure threshold. Controls the internal highWaterMark ofSssSplitWritable(split side) and triggerspause()on each combine-side share buffer when its size exceeds this value (resume at half). Must be less thanCASSL_BUFFER_BYTES.
Key Pair
In the above, we used genKeyPair().
Alternatevely, we can also generate key pair using openssl.
openssl genpkey -algorithm x25519 -out x25519-priv.pem
openssl pkey -in x25519-priv.pem -pubout -out x25519-pub.pemAfter that, we can import the pem file.
In NodeJs, we can use crypto.createPrivateKey() and crypto.createPublicKey() to import the pem file.
Note that the x25519 algorithm is not supported by the openssl version shipped with macOS.
Development
# install dependencies
npm install
# test
npm run test
# test with long data
npm run test:long
# build
npm run build
# publish
npm publishNotes
- Use
globalThis.process.envto avoid the hardcoding by parcel builder.
