Files
2026-05-27 23:47:53 +01:00

66 lines
21 KiB
Markdown

# @suaveplan/crypto-utils - Shared cryptographic utilities: encoding (hex/base64/base64url/base58), byte helpers (concat/xor/i2osp/os2ip), constant-time equality, random bytes, zeroize, Merkle tree helpers, KAT/differential-fuzz test harnesses, PrimitiveId registry, PrimitiveNotImplemented error. Zero runtime crypto dependencies.
## Summary
Shared cryptographic utilities consumed internally by all other `@suaveplan/crypto-*` packages. Provides the low-level primitives that every crypto implementation needs but that belong in one place: multi-alphabet encoding (`toHex`/`fromHex`, `toBase64`/`fromBase64`, `toBase64Url`, `toBase58`/`fromBase58`); byte helpers (`concatBytes`, `xor`, `i2osp`/`os2ip` for integer-to-octet-string conversions); `constantTimeEqual` for timing-safe comparisons; `randomBytes` with an injectable `ByteSource`; `zeroize` for wiping key material; Merkle tree helpers (`merkleRoot`, `merkleProof`, `verifyMerkleProof`); a `PrimitiveId` registry and `PrimitiveNotImplemented` sentinel error; and KAT/differential-fuzz harnesses (`runVectors`, `diffFuzz`) used in every crypto primitive's test suite. Zero runtime crypto dependencies — this package provides helpers only, not cryptographic algorithms. Application code should generally import from `@suaveplan/crypto` or `@suaveplan/crypto-hash`; import from this package only when building a new cryptographic primitive or engine adapter.
<!-- begin:auto-docs -->
## Documentation tree
- [concat-bytes](./src/bytes/concat-bytes/concat-bytes.md) — <!-- begin:auto-docs --> _(no submodules)_ <!-- end:auto-docs -->
- [concat-bytes](./src/bytes/concat-bytes/concat-bytes.md) — <!-- begin:auto-docs --> _(no submodules)_ <!-- end:auto-docs -->
- [i2osp](./src/bytes/i2osp/i2osp.md) — <!-- begin:auto-docs --> _(no submodules)_ <!-- end:auto-docs -->
- [i2osp](./src/bytes/i2osp/i2osp.md) — <!-- begin:auto-docs --> _(no submodules)_ <!-- end:auto-docs -->
- [os2ip](./src/bytes/os2ip/os2ip.md) — <!-- begin:auto-docs --> _(no submodules)_ <!-- end:auto-docs -->
- [os2ip](./src/bytes/os2ip/os2ip.md) — <!-- begin:auto-docs --> _(no submodules)_ <!-- end:auto-docs -->
- [xor](./src/bytes/xor/xor.md) — <!-- begin:auto-docs --> _(no submodules)_ <!-- end:auto-docs -->
- [xor](./src/bytes/xor/xor.md) — <!-- begin:auto-docs --> _(no submodules)_ <!-- end:auto-docs -->
- [constant-time-equal](./src/constant-time/constant-time-equal/constant-time-equal.md) — <!-- begin:auto-docs --> _(no submodules)_ <!-- end:auto-docs -->
- [constant-time-equal](./src/constant-time/constant-time-equal/constant-time-equal.md) — <!-- begin:auto-docs --> _(no submodules)_ <!-- end:auto-docs -->
- [base58](./src/encoding/base58/base58.md) — <!-- begin:auto-docs --> _(no submodules)_ <!-- end:auto-docs -->
- [base58](./src/encoding/base58/base58.md) — <!-- begin:auto-docs --> _(no submodules)_ <!-- end:auto-docs -->
- [base64](./src/encoding/base64/base64.md) — <!-- begin:auto-docs --> _(no submodules)_ <!-- end:auto-docs -->
- [base64](./src/encoding/base64/base64.md) — <!-- begin:auto-docs --> _(no submodules)_ <!-- end:auto-docs -->
- [hex](./src/encoding/hex/hex.md) — <!-- begin:auto-docs --> _(no submodules)_ <!-- end:auto-docs -->
- [hex](./src/encoding/hex/hex.md) — <!-- begin:auto-docs --> _(no submodules)_ <!-- end:auto-docs -->
- [codes](./src/errors/codes/codes.md) — <!-- begin:auto-docs --> _(no submodules)_ <!-- end:auto-docs -->
- [codes](./src/errors/codes/codes.md) — <!-- begin:auto-docs --> _(no submodules)_ <!-- end:auto-docs -->
- [crypto-utils-error](./src/errors/crypto-utils-error/crypto-utils-error.md) — <!-- begin:auto-docs --> _(no submodules)_ <!-- end:auto-docs -->
- [crypto-utils-error](./src/errors/crypto-utils-error/crypto-utils-error.md) — <!-- begin:auto-docs --> _(no submodules)_ <!-- end:auto-docs -->
- [primitive-not-implemented](./src/errors/primitive-not-implemented/primitive-not-implemented.md) — <!-- begin:auto-docs --> _(no submodules)_ <!-- end:auto-docs -->
- [primitive-not-implemented](./src/errors/primitive-not-implemented/primitive-not-implemented.md) — <!-- begin:auto-docs --> _(no submodules)_ <!-- end:auto-docs -->
- [merkle-proof](./src/merkle/merkle-proof/merkle-proof.md) — <!-- begin:auto-docs --> _(no submodules)_ <!-- end:auto-docs -->
- [merkle-proof](./src/merkle/merkle-proof/merkle-proof.md) — <!-- begin:auto-docs --> _(no submodules)_ <!-- end:auto-docs -->
- [merkle-root](./src/merkle/merkle-root/merkle-root.md) — <!-- begin:auto-docs --> _(no submodules)_ <!-- end:auto-docs -->
- [merkle-root](./src/merkle/merkle-root/merkle-root.md) — <!-- begin:auto-docs --> _(no submodules)_ <!-- end:auto-docs -->
- [primitive-id](./src/primitive-id/primitive-id.md) — <!-- begin:auto-docs --> _(no submodules)_ <!-- end:auto-docs -->
- [primitive-id](./src/primitive-id/primitive-id.md) — <!-- begin:auto-docs --> _(no submodules)_ <!-- end:auto-docs -->
- [random-bytes](./src/random/random-bytes/random-bytes.md) — <!-- begin:auto-docs --> _(no submodules)_ <!-- end:auto-docs -->
- [random-bytes](./src/random/random-bytes/random-bytes.md) — <!-- begin:auto-docs --> _(no submodules)_ <!-- end:auto-docs -->
- [diff-fuzz](./src/testing/diff-fuzz/diff-fuzz.md) — <!-- begin:auto-docs --> _(no submodules)_ <!-- end:auto-docs -->
- [diff-fuzz](./src/testing/diff-fuzz/diff-fuzz.md) — <!-- begin:auto-docs --> _(no submodules)_ <!-- end:auto-docs -->
- [dudect](./src/testing/dudect/dudect.md) — <!-- begin:auto-docs --> _(no submodules)_ <!-- end:auto-docs -->
- [dudect](./src/testing/dudect/dudect.md) — <!-- begin:auto-docs --> _(no submodules)_ <!-- end:auto-docs -->
- [run-vectors](./src/testing/run-vectors/run-vectors.md) — <!-- begin:auto-docs --> _(no submodules)_ <!-- end:auto-docs -->
- [run-vectors](./src/testing/run-vectors/run-vectors.md) — <!-- begin:auto-docs --> _(no submodules)_ <!-- end:auto-docs -->
- [zeroize](./src/zeroize/zeroize.md) — <!-- begin:auto-docs --> _(no submodules)_ <!-- end:auto-docs -->
- [zeroize](./src/zeroize/zeroize.md) — <!-- begin:auto-docs --> _(no submodules)_ <!-- end:auto-docs -->
<!-- end:auto-docs --> - [concat-bytes](./src/bytes/concat-bytes/concat-bytes.md) — <!-- begin:auto-docs --> _(no submodules)_- [i2osp](./src/bytes/i2osp/i2osp.md) — <!-- begin:auto-docs --> _(no submodules)_- [i2osp](./src/bytes/i2osp/i2osp.md) — <!-- begin:auto-docs --> _(no submodules)_- [os2ip](./src/bytes/os2ip/os2ip.md) — <!-- begin:auto-docs --> _(no submodules)_- [os2ip](./src/bytes/os2ip/os2ip.md) — <!-- begin:auto-docs --> _(no submodules)_- [xor](./src/bytes/xor/xor.md) — <!-- begin:auto-docs --> _(no submodules)_- [xor](./src/bytes/xor/xor.md) — <!-- begin:auto-docs --> _(no submodules)_- [constant-time-equal](./src/constant-time/constant-time-equal/constant-time-equal.md) — <!-- begin:auto-docs --> _(no submodules)_- [constant-time-equal](./src/constant-time/constant-time-equal/constant-time-equal.md) — <!-- begin:auto-docs --> _(no submodules)_- [base58](./src/encoding/base58/base58.md) — <!-- begin:auto-docs --> _(no submodules)_- [base58](./src/encoding/base58/base58.md) — <!-- begin:auto-docs --> _(no submodules)_- [base64](./src/encoding/base64/base64.md) — <!-- begin:auto-docs --> _(no submodules)_- [base64](./src/encoding/base64/base64.md) — <!-- begin:auto-docs --> _(no submodules)_- [hex](./src/encoding/hex/hex.md) — <!-- begin:auto-docs --> _(no submodules)_- [hex](./src/encoding/hex/hex.md) — <!-- begin:auto-docs --> _(no submodules)_- [codes](./src/errors/codes/codes.md) — <!-- begin:auto-docs --> _(no submodules)_- [codes](./src/errors/codes/codes.md) — <!-- begin:auto-docs --> _(no submodules)_- [crypto-utils-error](./src/errors/crypto-utils-error/crypto-utils-error.md) — <!-- begin:auto-docs --> _(no submodules)_- [crypto-utils-error](./src/errors/crypto-utils-error/crypto-utils-error.md) — <!-- begin:auto-docs --> _(no submodules)_- [primitive-not-implemented](./src/errors/primitive-not-implemented/primitive-not-implemented.md) — <!-- begin:auto-docs --> _(no submodules)_- [primitive-not-implemented](./src/errors/primitive-not-implemented/primitive-not-implemented.md) — <!-- begin:auto-docs --> _(no submodules)_- [merkle-proof](./src/merkle/merkle-proof/merkle-proof.md) — <!-- begin:auto-docs --> _(no submodules)_- [merkle-proof](./src/merkle/merkle-proof/merkle-proof.md) — <!-- begin:auto-docs --> _(no submodules)_- [merkle-root](./src/merkle/merkle-root/merkle-root.md) — <!-- begin:auto-docs --> _(no submodules)_- [merkle-root](./src/merkle/merkle-root/merkle-root.md) — <!-- begin:auto-docs --> _(no submodules)_- [primitive-id](./src/primitive-id/primitive-id.md) — <!-- begin:auto-docs --> _(no submodules)_- [primitive-id](./src/primitive-id/primitive-id.md) — <!-- begin:auto-docs --> _(no submodules)_- [random-bytes](./src/random/random-bytes/random-bytes.md) — <!-- begin:auto-docs --> _(no submodules)_- [random-bytes](./src/random/random-bytes/random-bytes.md) — <!-- begin:auto-docs --> _(no submodules)_- [diff-fuzz](./src/testing/diff-fuzz/diff-fuzz.md) — <!-- begin:auto-docs --> _(no submodules)_- [diff-fuzz](./src/testing/diff-fuzz/diff-fuzz.md) — <!-- begin:auto-docs --> _(no submodules)_- [dudect](./src/testing/dudect/dudect.md) — <!-- begin:auto-docs --> _(no submodules)_- [dudect](./src/testing/dudect/dudect.md) — <!-- begin:auto-docs --> _(no submodules)_- [run-vectors](./src/testing/run-vectors/run-vectors.md) — <!-- begin:auto-docs --> _(no submodules)_- [run-vectors](./src/testing/run-vectors/run-vectors.md) — <!-- begin:auto-docs --> _(no submodules)_- [zeroize](./src/zeroize/zeroize.md) — <!-- begin:auto-docs --> _(no submodules)_- [zeroize](./src/zeroize/zeroize.md) — <!-- begin:auto-docs --> _(no submodules)_- [concat-bytes](./src/bytes/concat-bytes/concat-bytes.md) — <!-- begin:auto-docs --> _(no submodules)_- [i2osp](./src/bytes/i2osp/i2osp.md) — <!-- begin:auto-docs --> _(no submodules)_- [i2osp](./src/bytes/i2osp/i2osp.md) — <!-- begin:auto-docs --> _(no submodules)_- [os2ip](./src/bytes/os2ip/os2ip.md) — <!-- begin:auto-docs --> _(no submodules)_- [os2ip](./src/bytes/os2ip/os2ip.md) — <!-- begin:auto-docs --> _(no submodules)_- [xor](./src/bytes/xor/xor.md) — <!-- begin:auto-docs --> _(no submodules)_- [xor](./src/bytes/xor/xor.md) — <!-- begin:auto-docs --> _(no submodules)_- [constant-time-equal](./src/constant-time/constant-time-equal/constant-time-equal.md) — <!-- begin:auto-docs --> _(no submodules)_- [constant-time-equal](./src/constant-time/constant-time-equal/constant-time-equal.md) — <!-- begin:auto-docs --> _(no submodules)_- [base58](./src/encoding/base58/base58.md) — <!-- begin:auto-docs --> _(no submodules)_- [base58](./src/encoding/base58/base58.md) — <!-- begin:auto-docs --> _(no submodules)_- [base64](./src/encoding/base64/base64.md) — <!-- begin:auto-docs --> _(no submodules)_- [base64](./src/encoding/base64/base64.md) — <!-- begin:auto-docs --> _(no submodules)_- [hex](./src/encoding/hex/hex.md) — <!-- begin:auto-docs --> _(no submodules)_- [hex](./src/encoding/hex/hex.md) — <!-- begin:auto-docs --> _(no submodules)_- [codes](./src/errors/codes/codes.md) — <!-- begin:auto-docs --> _(no submodules)_- [codes](./src/errors/codes/codes.md) — <!-- begin:auto-docs --> _(no submodules)_- [crypto-utils-error](./src/errors/crypto-utils-error/crypto-utils-error.md) — <!-- begin:auto-docs --> _(no submodules)_- [crypto-utils-error](./src/errors/crypto-utils-error/crypto-utils-error.md) — <!-- begin:auto-docs --> _(no submodules)_- [primitive-not-implemented](./src/errors/primitive-not-implemented/primitive-not-implemented.md) — <!-- begin:auto-docs --> _(no submodules)_- [primitive-not-implemented](./src/errors/primitive-not-implemented/primitive-not-implemented.md) — <!-- begin:auto-docs --> _(no submodules)_- [merkle-proof](./src/merkle/merkle-proof/merkle-proof.md) — <!-- begin:auto-docs --> _(no submodules)_- [merkle-proof](./src/merkle/merkle-proof/merkle-proof.md) — <!-- begin:auto-docs --> _(no submodules)_- [merkle-root](./src/merkle/merkle-root/merkle-root.md) — <!-- begin:auto-docs --> _(no submodules)_- [merkle-root](./src/merkle/merkle-root/merkle-root.md) — <!-- begin:auto-docs --> _(no submodules)_- [primitive-id](./src/primitive-id/primitive-id.md) — <!-- begin:auto-docs --> _(no submodules)_- [primitive-id](./src/primitive-id/primitive-id.md) — <!-- begin:auto-docs --> _(no submodules)_- [random-bytes](./src/random/random-bytes/random-bytes.md) — <!-- begin:auto-docs --> _(no submodules)_- [random-bytes](./src/random/random-bytes/random-bytes.md) — <!-- begin:auto-docs --> _(no submodules)_- [diff-fuzz](./src/testing/diff-fuzz/diff-fuzz.md) — <!-- begin:auto-docs --> _(no submodules)_- [diff-fuzz](./src/testing/diff-fuzz/diff-fuzz.md) — <!-- begin:auto-docs --> _(no submodules)_- [dudect](./src/testing/dudect/dudect.md) — <!-- begin:auto-docs --> _(no submodules)_- [dudect](./src/testing/dudect/dudect.md) — <!-- begin:auto-docs --> _(no submodules)_- [run-vectors](./src/testing/run-vectors/run-vectors.md) — <!-- begin:auto-docs --> _(no submodules)_- [run-vectors](./src/testing/run-vectors/run-vectors.md) — <!-- begin:auto-docs --> _(no submodules)_- [zeroize](./src/zeroize/zeroize.md) — <!-- begin:auto-docs --> _(no submodules)_- [zeroize](./src/zeroize/zeroize.md) — <!-- begin:auto-docs --> _(no submodules)_- [concat-bytes](./src/bytes/concat-bytes/concat-bytes.md) — <!-- begin:auto-docs --> _(no submodules)_- [i2osp](./src/bytes/i2osp/i2osp.md) — <!-- begin:auto-docs --> _(no submodules)_- [i2osp](./src/bytes/i2osp/i2osp.md) — <!-- begin:auto-docs --> _(no submodules)_- [os2ip](./src/bytes/os2ip/os2ip.md) — <!-- begin:auto-docs --> _(no submodules)_- [os2ip](./src/bytes/os2ip/os2ip.md) — <!-- begin:auto-docs --> _(no submodules)_- [xor](./src/bytes/xor/xor.md) — <!-- begin:auto-docs --> _(no submodules)_- [xor](./src/bytes/xor/xor.md) — <!-- begin:auto-docs --> _(no submodules)_- [constant-time-equal](./src/constant-time/constant-time-equal/constant-time-equal.md) — <!-- begin:auto-docs --> _(no submodules)_- [constant-time-equal](./src/constant-time/constant-time-equal/constant-time-equal.md) — <!-- begin:auto-docs --> _(no submodules)_- [base58](./src/encoding/base58/base58.md) — <!-- begin:auto-docs --> _(no submodules)_- [base58](./src/encoding/base58/base58.md) — <!-- begin:auto-docs --> _(no submodules)_- [base64](./src/encoding/base64/base64.md) — <!-- begin:auto-docs --> _(no submodules)_- [base64](./src/encoding/base64/base64.md) — <!-- begin:auto-docs --> _(no submodules)_- [hex](./src/encoding/hex/hex.md) — <!-- begin:auto-docs --> _(no submodules)_- [hex](./src/encoding/hex/hex.md) — <!-- begin:auto-docs --> _(no submodules)_- [codes](./src/errors/codes/codes.md) — <!-- begin:auto-docs --> _(no submodules)_- [codes](./src/errors/codes/codes.md) — <!-- begin:auto-docs --> _(no submodules)_- [crypto-utils-error](./src/errors/crypto-utils-error/crypto-utils-error.md) — <!-- begin:auto-docs --> _(no submodules)_- [crypto-utils-error](./src/errors/crypto-utils-error/crypto-utils-error.md) — <!-- begin:auto-docs --> _(no submodules)_- [primitive-not-implemented](./src/errors/primitive-not-implemented/primitive-not-implemented.md) — <!-- begin:auto-docs --> _(no submodules)_- [primitive-not-implemented](./src/errors/primitive-not-implemented/primitive-not-implemented.md) — <!-- begin:auto-docs --> _(no submodules)_- [merkle-proof](./src/merkle/merkle-proof/merkle-proof.md) — <!-- begin:auto-docs --> _(no submodules)_- [merkle-proof](./src/merkle/merkle-proof/merkle-proof.md) — <!-- begin:auto-docs --> _(no submodules)_- [merkle-root](./src/merkle/merkle-root/merkle-root.md) — <!-- begin:auto-docs --> _(no submodules)_- [merkle-root](./src/merkle/merkle-root/merkle-root.md) — <!-- begin:auto-docs --> _(no submodules)_- [primitive-id](./src/primitive-id/primitive-id.md) — <!-- begin:auto-docs --> _(no submodules)_- [primitive-id](./src/primitive-id/primitive-id.md) — <!-- begin:auto-docs --> _(no submodules)_- [random-bytes](./src/random/random-bytes/random-bytes.md) — <!-- begin:auto-docs --> _(no submodules)_- [random-bytes](./src/random/random-bytes/random-bytes.md) — <!-- begin:auto-docs --> _(no submodules)_- [diff-fuzz](./src/testing/diff-fuzz/diff-fuzz.md) — <!-- begin:auto-docs --> _(no submodules)_- [diff-fuzz](./src/testing/diff-fuzz/diff-fuzz.md) — <!-- begin:auto-docs --> _(no submodules)_- [dudect](./src/testing/dudect/dudect.md) — <!-- begin:auto-docs --> _(no submodules)_- [dudect](./src/testing/dudect/dudect.md) — <!-- begin:auto-docs --> _(no submodules)_- [run-vectors](./src/testing/run-vectors/run-vectors.md) — <!-- begin:auto-docs --> _(no submodules)_- [run-vectors](./src/testing/run-vectors/run-vectors.md) — <!-- begin:auto-docs --> _(no submodules)_- [zeroize](./src/zeroize/zeroize.md) — <!-- begin:auto-docs --> _(no submodules)_- [zeroize](./src/zeroize/zeroize.md) — <!-- begin:auto-docs --> _(no submodules)_- [concat-bytes](./src/bytes/concat-bytes/concat-bytes.md) — <!-- begin:auto-docs --> _(no submodules)_- [i2osp](./src/bytes/i2osp/i2osp.md) — <!-- begin:auto-docs --> _(no submodules)_ - [i2osp](./src/bytes/i2osp/i2osp.md) — <!-- begin:auto-docs --> _(no submodules)_- [os2ip](./src/bytes/os2ip/os2ip.md) — <!-- begin:auto-docs --> _(no submodules)_ - [os2ip](./src/bytes/os2ip/os2ip.md) — <!-- begin:auto-docs --> _(no submodules)_- [xor](./src/bytes/xor/xor.md) — <!-- begin:auto-docs --> _(no submodules)_ - [xor](./src/bytes/xor/xor.md) — <!-- begin:auto-docs --> _(no submodules)_- [constant-time-equal](./src/constant-time/constant-time-equal/constant-time-equal.md) — <!-- begin:auto-docs --> _(no submodules)_ - [constant-time-equal](./src/constant-time/constant-time-equal/constant-time-equal.md) — <!-- begin:auto-docs --> _(no submodules)_- [base58](./src/encoding/base58/base58.md) — <!-- begin:auto-docs --> _(no submodules)_ - [base58](./src/encoding/base58/base58.md) — <!-- begin:auto-docs --> _(no submodules)_- [base64](./src/encoding/base64/base64.md) — <!-- begin:auto-docs --> _(no submodules)_ - [base64](./src/encoding/base64/base64.md) — <!-- begin:auto-docs --> _(no submodules)_- [hex](./src/encoding/hex/hex.md) — <!-- begin:auto-docs --> _(no submodules)_ - [hex](./src/encoding/hex/hex.md) — <!-- begin:auto-docs --> _(no submodules)_- [codes](./src/errors/codes/codes.md) — <!-- begin:auto-docs --> _(no submodules)_ - [codes](./src/errors/codes/codes.md) — <!-- begin:auto-docs --> _(no submodules)_- [crypto-utils-error](./src/errors/crypto-utils-error/crypto-utils-error.md) — <!-- begin:auto-docs --> _(no submodules)_ - [crypto-utils-error](./src/errors/crypto-utils-error/crypto-utils-error.md) — <!-- begin:auto-docs --> _(no submodules)_- [primitive-not-implemented](./src/errors/primitive-not-implemented/primitive-not-implemented.md) — <!-- begin:auto-docs --> _(no submodules)_ - [primitive-not-implemented](./src/errors/primitive-not-implemented/primitive-not-implemented.md) — <!-- begin:auto-docs --> _(no submodules)_- [merkle-proof](./src/merkle/merkle-proof/merkle-proof.md) — <!-- begin:auto-docs --> _(no submodules)_ - [merkle-proof](./src/merkle/merkle-proof/merkle-proof.md) — <!-- begin:auto-docs --> _(no submodules)_- [merkle-root](./src/merkle/merkle-root/merkle-root.md) — <!-- begin:auto-docs --> _(no submodules)_ - [merkle-root](./src/merkle/merkle-root/merkle-root.md) — <!-- begin:auto-docs --> _(no submodules)_- [primitive-id](./src/primitive-id/primitive-id.md) — <!-- begin:auto-docs --> _(no submodules)_ - [primitive-id](./src/primitive-id/primitive-id.md) — <!-- begin:auto-docs --> _(no submodules)_- [random-bytes](./src/random/random-bytes/random-bytes.md) — <!-- begin:auto-docs --> _(no submodules)_ - [random-bytes](./src/random/random-bytes/random-bytes.md) — <!-- begin:auto-docs --> _(no submodules)_- [diff-fuzz](./src/testing/diff-fuzz/diff-fuzz.md) — <!-- begin:auto-docs --> _(no submodules)_ - [diff-fuzz](./src/testing/diff-fuzz/diff-fuzz.md) — <!-- begin:auto-docs --> _(no submodules)_- [dudect](./src/testing/dudect/dudect.md) — <!-- begin:auto-docs --> _(no submodules)_ - [dudect](./src/testing/dudect/dudect.md) — <!-- begin:auto-docs --> _(no submodules)_- [run-vectors](./src/testing/run-vectors/run-vectors.md) — <!-- begin:auto-docs --> _(no submodules)_ - [run-vectors](./src/testing/run-vectors/run-vectors.md) — <!-- begin:auto-docs --> _(no submodules)_- [zeroize](./src/zeroize/zeroize.md) — <!-- begin:auto-docs --> _(no submodules)_ - [zeroize](./src/zeroize/zeroize.md) — <!-- begin:auto-docs --> _(no submodules)_
## Subpath exports
- `@suaveplan/crypto-utils` — umbrella barrel.
- `@suaveplan/crypto-utils/encoding` — `toHex` / `fromHex`, `toBase64` / `fromBase64`, `toBase64Url` / `fromBase64Url`, `toBase58` / `fromBase58`.
- `@suaveplan/crypto-utils/bytes` — `concatBytes`, `xor`, `i2osp`, `os2ip`.
- `@suaveplan/crypto-utils/constant-time` — `constantTimeEqual`.
- `@suaveplan/crypto-utils/random` — `randomBytes`, `ByteSource`, `defaultByteSource`.
- `@suaveplan/crypto-utils/zeroize` — `zeroize`.
- `@suaveplan/crypto-utils/merkle` — `merkleRoot`, `merkleProof`, `verifyMerkleProof`.
- `@suaveplan/crypto-utils/testing` — `runVectors`, `diffFuzz`.
- `@suaveplan/crypto-utils/primitive-id` — `PrimitiveId`, `PRIMITIVE_IDS`, guards.
- `@suaveplan/crypto-utils/errors` — `PrimitiveNotImplemented`, `CRYPTO_UTILS_CODES`, `CryptoUtilsError`.
## Module documentation
See each co-located `.md` next to its implementation file.