2.5 KiB
concatBytes
(no submodules)
Purpose
Concatenate any number of Uint8Array buffers into a single freshly-allocated result. Used extensively by crypto protocols that frame authenticated data by length-prefix or that split a plaintext across record boundaries. This module re-exports concatUint8Arrays from @suaveplan/bytes under the crypto-friendly name concatBytes, centralising the helper so every downstream cipher, MAC, or encoding never has to handwrite the set-at-offset loop and all packages share a single, tested implementation.
Features
- Variadic: accepts any number of parts (including zero).
- Returns a new
Uint8Arrayeven for single-arg calls (never aliases an input). - Delegates to
@suaveplan/bytes— one implementation, zero duplication. - Zero implementation code in this module — pure delegation.
Usage: Basic Example
import { concatBytes } from "@suaveplan/crypto-utils/bytes";
const frame = concatBytes(header, payload, footer);
Usage: Advanced Example
import { concatBytes } from "@suaveplan/crypto-utils/bytes";
// Build a TLS-style length-prefixed message.
function frame(...parts: Uint8Array[]): Uint8Array {
const body = concatBytes(...parts);
const lenPrefix = new Uint8Array([(body.length >> 8) & 0xff, body.length & 0xff]);
return concatBytes(lenPrefix, body);
}
const out = frame(new Uint8Array([0x01]), new Uint8Array([0x02, 0x03]));
API Reference
concatBytes(...parts: Uint8Array[]): Uint8Array— Returns a newUint8Arraywhose contents are the concatenation of everypartin order. Never throws. Alias forconcatUint8Arraysfrom@suaveplan/bytes.
Implementation Notes
concatBytes is a direct const alias for concatUint8Arrays from @suaveplan/bytes. The underlying implementation uses two passes: the first sums part.length to pre-allocate once (no reallocation), the second uses Uint8Array#set which hits the fast path in every modern engine. Delegating here removes identical logic that previously lived in both packages and ensures all @suaveplan/crypto-* consumers share the same implementation with a single point of maintenance.
Edge Cases
concatBytes preserves exact input order and is safe to call with zero, one, or many arrays. Passing a zero-length array returns a new zero-length Uint8Array. Callers relying on fixed output lengths for cryptographic framing should validate each input's length before calling; the function trusts its inputs and performs a single pre-sized allocation.