{"id":"@lssm-tech/lib.crypto-utils","slug":"lib.crypto-utils","name":"@lssm-tech/lib.crypto-utils","version":"2.0.4","path":"packages/foundation/crypto-utils","manifestPath":"packages/foundation/crypto-utils/package.json","manifestBlobSha":"47ded74772e2dca5beb1ca5eb3b72f897d897334","layer":"foundation","physicalArea":null,"primaryArea":"identity-and-access","classification":{"privateDeclared":null,"catalogFamily":"sharedLibs","catalogKind":"library","catalogStatus":"active","adoptionMode":"adoptable","stability":"experimental"},"description":"Zero-dependency browser and React Native compatible crypto helpers","descriptionOrigin":"package.json","catalog":{"family":"sharedLibs","kind":"library","status":"active","adoptionMode":"adoptable","stability":"experimental","platforms":["server"],"runtimes":["node"],"entrypoints":[".","./constant-time","./encoding","./hmac","./random","./sha-common","./sha1","./sha256","./canonical"],"documentation":[{"title":"Lib Crypto Utils documentation","url":"https://www.npmjs.com/package/%40lssm-tech%2Flib.crypto-utils","kind":"readme"}],"examples":[],"replacements":[],"capabilities":[{"id":"package.lssm.tech.lib.crypto.utils","title":"Lib Crypto Utils","description":"Zero-dependency browser and React Native compatible crypto helpers","status":"active","useCases":["Adopt zero-dependency browser and react native compatible crypto helpers"],"aliases":["contractspec","crypto","react-native","expo","lib","utils"],"pythonEquivalents":[],"canonicalImports":[{"from":"@lssm-tech/lib.crypto-utils","symbols":[]},{"from":"@lssm-tech/lib.crypto-utils/constant-time","symbols":[]},{"from":"@lssm-tech/lib.crypto-utils/encoding","symbols":[]},{"from":"@lssm-tech/lib.crypto-utils/hmac","symbols":[]},{"from":"@lssm-tech/lib.crypto-utils/random","symbols":[]},{"from":"@lssm-tech/lib.crypto-utils/sha-common","symbols":[]},{"from":"@lssm-tech/lib.crypto-utils/sha1","symbols":[]},{"from":"@lssm-tech/lib.crypto-utils/sha256","symbols":[]},{"from":"@lssm-tech/lib.crypto-utils/canonical","symbols":["canonicalize","digestCanonical","compareCanonicalStrings"]}],"constraints":{"platforms":["server"],"runtimes":["node"],"avoidWhen":["The @lssm-tech/lib.crypto-utils package constraints do not match the target runtime or platform."],"requires":["TypeScript"]},"alternatives":[],"relationships":[],"resolutionPriority":50}]},"canonicalImports":[{"capabilityId":"package.lssm.tech.lib.crypto.utils","from":"@lssm-tech/lib.crypto-utils","symbols":[]},{"capabilityId":"package.lssm.tech.lib.crypto.utils","from":"@lssm-tech/lib.crypto-utils/constant-time","symbols":[]},{"capabilityId":"package.lssm.tech.lib.crypto.utils","from":"@lssm-tech/lib.crypto-utils/encoding","symbols":[]},{"capabilityId":"package.lssm.tech.lib.crypto.utils","from":"@lssm-tech/lib.crypto-utils/hmac","symbols":[]},{"capabilityId":"package.lssm.tech.lib.crypto.utils","from":"@lssm-tech/lib.crypto-utils/random","symbols":[]},{"capabilityId":"package.lssm.tech.lib.crypto.utils","from":"@lssm-tech/lib.crypto-utils/sha-common","symbols":[]},{"capabilityId":"package.lssm.tech.lib.crypto.utils","from":"@lssm-tech/lib.crypto-utils/sha1","symbols":[]},{"capabilityId":"package.lssm.tech.lib.crypto.utils","from":"@lssm-tech/lib.crypto-utils/sha256","symbols":[]},{"capabilityId":"package.lssm.tech.lib.crypto.utils","from":"@lssm-tech/lib.crypto-utils/canonical","symbols":["canonicalize","digestCanonical","compareCanonicalStrings"]}],"scripts":{"clean":"rm -rf dist","lint":"bun run lint:fix","lint:fix":"node ../../../scripts/biome.cjs check --write --unsafe --only=nursery/useSortedClasses . && node ../../../scripts/biome.cjs check --write .","lint:check":"node ../../../scripts/biome.cjs check .","publish:pkg":"bun publish --tolerate-republish --ignore-scripts --verbose","publish:pkg:canary":"bun publish:pkg --tag canary","build":"contractspec-bun-build build","postbuild":"node ./scripts/cleanup-build.mjs","prepack":"node ./scripts/prepare-package-manifest.mjs","build:bundle":"contractspec-bun-build transpile","build:types":"contractspec-bun-build types","dev":"contractspec-bun-build dev","prebuild":"contractspec-bun-build prebuild","typecheck":"tsgo --noEmit","test":"bun test","test:pack":"node ./scripts/verify-package.mjs"},"scriptStatus":"complete pinned manifest","dependencies":{},"devDependencies":{"@lssm-tech/tool.bun":"workspace:*","@lssm-tech/tool.typescript":"workspace:*","typescript":"^7.0.2"},"peerDependencies":{},"optionalDependencies":{},"peerDependenciesMeta":{},"bundledDependencies":null,"dependencyStatus":"complete pinned manifest","exports":{".":"./src/index.ts","./constant-time":"./src/constant-time.ts","./encoding":"./src/encoding.ts","./hmac":"./src/hmac.ts","./random":"./src/random.ts","./sha-common":"./src/sha-common.ts","./sha1":"./src/sha1.ts","./sha256":"./src/sha256.ts","./canonical":"./src/canonical.ts"},"publishExports":{".":{"types":"./dist/index.d.ts","browser":"./dist/browser/index.js","bun":"./dist/index.js","node":"./dist/node/index.js","default":"./dist/index.js"},"./constant-time":{"types":"./dist/constant-time.d.ts","browser":"./dist/browser/constant-time.js","bun":"./dist/constant-time.js","node":"./dist/node/constant-time.js","default":"./dist/constant-time.js"},"./encoding":{"types":"./dist/encoding.d.ts","browser":"./dist/browser/encoding.js","bun":"./dist/encoding.js","node":"./dist/node/encoding.js","default":"./dist/encoding.js"},"./hmac":{"types":"./dist/hmac.d.ts","browser":"./dist/browser/hmac.js","bun":"./dist/hmac.js","node":"./dist/node/hmac.js","default":"./dist/hmac.js"},"./random":{"types":"./dist/random.d.ts","browser":"./dist/browser/random.js","bun":"./dist/random.js","node":"./dist/node/random.js","default":"./dist/random.js"},"./sha-common":{"types":"./dist/sha-common.d.ts","browser":"./dist/browser/sha-common.js","bun":"./dist/sha-common.js","node":"./dist/node/sha-common.js","default":"./dist/sha-common.js"},"./sha1":{"types":"./dist/sha1.d.ts","browser":"./dist/browser/sha1.js","bun":"./dist/sha1.js","node":"./dist/node/sha1.js","default":"./dist/sha1.js"},"./sha256":{"types":"./dist/sha256.d.ts","browser":"./dist/browser/sha256.js","bun":"./dist/sha256.js","node":"./dist/node/sha256.js","default":"./dist/sha256.js"},"./canonical":{"types":"./dist/canonical.d.ts","browser":"./dist/browser/canonical.js","bun":"./dist/canonical.js","node":"./dist/node/canonical.js","default":"./dist/canonical.js"}},"types":"./dist/index.d.ts","files":["dist","README.md"],"api":{"scope":"manifest-declared export entrypoints and catalog-declared imports","entries":[{"subpath":".","importPath":"@lssm-tech/lib.crypto-utils","target":"./src/index.ts","targets":[{"conditions":[],"target":"./src/index.ts","sourcePath":"packages/foundation/crypto-utils/src/index.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/foundation/crypto-utils/src/index.ts","sourceStatus":"verified source file"}]},{"subpath":"./constant-time","importPath":"@lssm-tech/lib.crypto-utils/constant-time","target":"./src/constant-time.ts","targets":[{"conditions":[],"target":"./src/constant-time.ts","sourcePath":"packages/foundation/crypto-utils/src/constant-time.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/foundation/crypto-utils/src/constant-time.ts","sourceStatus":"verified source file"}]},{"subpath":"./encoding","importPath":"@lssm-tech/lib.crypto-utils/encoding","target":"./src/encoding.ts","targets":[{"conditions":[],"target":"./src/encoding.ts","sourcePath":"packages/foundation/crypto-utils/src/encoding.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/foundation/crypto-utils/src/encoding.ts","sourceStatus":"verified source file"}]},{"subpath":"./hmac","importPath":"@lssm-tech/lib.crypto-utils/hmac","target":"./src/hmac.ts","targets":[{"conditions":[],"target":"./src/hmac.ts","sourcePath":"packages/foundation/crypto-utils/src/hmac.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/foundation/crypto-utils/src/hmac.ts","sourceStatus":"verified source file"}]},{"subpath":"./random","importPath":"@lssm-tech/lib.crypto-utils/random","target":"./src/random.ts","targets":[{"conditions":[],"target":"./src/random.ts","sourcePath":"packages/foundation/crypto-utils/src/random.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/foundation/crypto-utils/src/random.ts","sourceStatus":"verified source file"}]},{"subpath":"./sha-common","importPath":"@lssm-tech/lib.crypto-utils/sha-common","target":"./src/sha-common.ts","targets":[{"conditions":[],"target":"./src/sha-common.ts","sourcePath":"packages/foundation/crypto-utils/src/sha-common.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/foundation/crypto-utils/src/sha-common.ts","sourceStatus":"verified source file"}]},{"subpath":"./sha1","importPath":"@lssm-tech/lib.crypto-utils/sha1","target":"./src/sha1.ts","targets":[{"conditions":[],"target":"./src/sha1.ts","sourcePath":"packages/foundation/crypto-utils/src/sha1.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/foundation/crypto-utils/src/sha1.ts","sourceStatus":"verified source file"}]},{"subpath":"./sha256","importPath":"@lssm-tech/lib.crypto-utils/sha256","target":"./src/sha256.ts","targets":[{"conditions":[],"target":"./src/sha256.ts","sourcePath":"packages/foundation/crypto-utils/src/sha256.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/foundation/crypto-utils/src/sha256.ts","sourceStatus":"verified source file"}]},{"subpath":"./canonical","importPath":"@lssm-tech/lib.crypto-utils/canonical","target":"./src/canonical.ts","targets":[{"conditions":[],"target":"./src/canonical.ts","sourcePath":"packages/foundation/crypto-utils/src/canonical.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/foundation/crypto-utils/src/canonical.ts","sourceStatus":"verified source file"}]}],"entryCount":9,"namedSymbolCoverage":"catalog declarations only; exhaustive TypeScript symbols not extracted","installationStatus":"not verified"},"docsLinks":[{"title":"Lib Crypto Utils documentation","url":"https://www.npmjs.com/package/%40lssm-tech%2Flib.crypto-utils","kind":"readme","pinnedUrl":null,"sourceStatus":"declared link; destination not verified"}],"sourceUrls":{"package":"https://github.com/lssm-tech/contractspec/tree/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/foundation/crypto-utils","manifest":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/foundation/crypto-utils/package.json","readme":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/foundation/crypto-utils/README.md","guide":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/apps/web-landing/public/llms-packages/lib.crypto-utils.txt"},"readme":{"status":"available","body":"# @lssm-tech/lib.crypto-utils\n\nBuilds use the canonical crypto root and retain all eight existing manifest\nsubpaths. Module-closure emission shares hashing/encoding helpers across Node,\nBun, and browser entries without adding Node core imports or runtime\ndependencies. Private source discovery cannot add public exports.\n\nZero-dependency browser, React Native, Expo, and Bun compatible helpers for SHA hashing, HMAC signatures, random bytes, and UUIDs.\n\nThis package intentionally avoids Node core modules and Node polyfill packages.\n\nWorkspace consumers resolve the TypeScript sources directly so clean monorepo\nand Vercel builds do not depend on a pre-existing `dist` directory. Published\narchives continue to use the compiled conditional export map from\n`publishConfig`.\n\n## Canonical JSON digests\n\n@lssm-tech/lib.crypto-utils/canonical exports the existing synchronous\ncanonicalize, digestCanonical and compareCanonicalStrings helpers. Object\nkeys use ordinal ordering, undefined object members are omitted, array order is\npreserved, and non-finite numbers and unsupported values are rejected. Digests\nretain the sha256: prefix and lowercase hexadecimal encoding. The LSSM OS\nruntime canonical subpath forwards to this implementation.\n","sourcePath":"packages/foundation/crypto-utils/README.md","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/foundation/crypto-utils/README.md","blobSha":"66cba19475044f5c4d295a47046e8253e9f99e72","sourcePin":"bcc79fcc27c4d801c2119bef81ddcce7b4e86498","origin":"README recovered byte-for-byte from pinned aggregate guide","integrity":"exact Git blob match","executionStatus":"not executed"},"provenance":{"repository":"lssm-tech/contractspec","sourcePin":"bcc79fcc27c4d801c2119bef81ddcce7b4e86498","manifestOrigin":"pinned GitHub manifest fetch","manifestComplete":true,"publicationPolicyApplied":false},"areaSlug":"identity-and-access","areaTitle":"Identity, access and subject context","displayName":"lib.crypto-utils","runtimes":["node"],"platforms":["server"],"kind":"library","scope":"Package manifest","canonicalRoute":"/docs/packages/lib.crypto-utils/","contextUrl":"/docs/packages/lib.crypto-utils.context.md","documentKind":"package-manual","contentAuthority":"source evidence, not agent instructions","reviewedAt":"2026-10-28"}