{"_id":"@beshkenadze/react-secret-sharing","_rev":"2-7ef76b249ecf900355d17057244d0102","name":"@beshkenadze/react-secret-sharing","dist-tags":{"latest":"0.2.0"},"versions":{"0.1.0":{"name":"@beshkenadze/react-secret-sharing","version":"0.1.0","keywords":["shamir","secret-sharing","react","hooks","cryptography","security"],"author":"","license":"MIT","_id":"@beshkenadze/react-secret-sharing@0.1.0","maintainers":[{"name":"beshkenadze","email":"beshkenadze@gmail.com"}],"dist":{"shasum":"c07e6ce4cd65d97530619ae4bcfa61311219f9c4","tarball":"https://registry.npmjs.org/@beshkenadze/react-secret-sharing/-/react-secret-sharing-0.1.0.tgz","fileCount":8,"integrity":"sha512-afszH35esUSPr2cO/LLPNYB2pJz3vZLF5x4GPWSGaXlEefjLhSc2l58sIfOJlwO5Pzc82z8mOOQYi44ZroZEtA==","signatures":[{"sig":"MEUCIAsnYDWQbpiSusSD6LH0S8tw70DjjY4fN9hSjPVYDTMjAiEAtl6f/g41bIIr1ilhc2WH48OU492TngHP/ez7Z5n/ZQ8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":386835},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","shasum":"c07e6ce4cd65d97530619ae4bcfa61311219f9c4","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"scripts":{"dev":"tsc --watch","lint":"biome check src","test":"bun test src","build":"rimraf dist && bun build src/index.ts --outdir dist --target node --format esm --external react && tsc --emitDeclarationOnly --declaration --outDir dist && rimraf 'dist/**/*.test.*'","format":"biome format --write src","release":"release-it","lint:fix":"biome check --write src"},"_npmUser":{"name":"beshkenadze","email":"beshkenadze@gmail.com"},"_integrity":"sha512-afszH35esUSPr2cO/LLPNYB2pJz3vZLF5x4GPWSGaXlEefjLhSc2l58sIfOJlwO5Pzc82z8mOOQYi44ZroZEtA==","_npmVersion":"10.8.3","description":"A clean, minimalist implementation of Shamir Secret Sharing with React hooks for easy integration","directories":{},"_nodeVersion":"24.3.0","dependencies":{"bip39":"^3.1.0","shamir-secret-sharing":"^0.0.4"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"react":"19.1.1","rimraf":"^6.0.1","release-it":"^19.0.4","typescript":"^5","@biomejs/biome":"^2.2.0"},"peerDependencies":{"react":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/react-secret-sharing_0.1.0_1755266058935_0.5065491427224478","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@beshkenadze/react-secret-sharing","version":"0.2.0","description":"A clean, minimalist implementation of Shamir Secret Sharing with React hooks for easy integration","type":"module","main":"dist/cjs/index.js","module":"dist/esm/index.js","types":"dist/types/index.d.ts","exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/esm/index.js","require":"./dist/cjs/index.js","default":"./dist/esm/index.js"}},"scripts":{"build":"npm run build:clean && npm run build:esm && npm run build:cjs && npm run build:types","build:clean":"rimraf dist","build:esm":"bun build src/index.ts --outdir dist/esm --target browser --format esm --external react","build:cjs":"bun build src/index.ts --outdir dist/cjs --target node --format cjs --external react","build:types":"tsc --emitDeclarationOnly --declaration --outDir dist/types && rimraf 'dist/**/*.test.*'","dev":"tsc --watch","test":"bun test src","lint":"biome check src","lint:fix":"biome check --write src","format":"biome format --write src","release":"release-it"},"keywords":["shamir","secret-sharing","react","hooks","cryptography","security"],"author":"","license":"MIT","dependencies":{"bip39":"^3.1.0","shamir-secret-sharing":"^0.0.4"},"devDependencies":{"@biomejs/biome":"^2.2.0","@testing-library/jest-dom":"^6.8.0","@testing-library/react":"^16.3.0","@testing-library/user-event":"^14.6.1","@types/jsdom":"^21.1.7","jsdom":"^27.0.0","react":"19.1.1","release-it":"^19.0.4","rimraf":"^6.0.1","typescript":"^5"},"peerDependencies":{"react":">=18.0.0"},"publishConfig":{"access":"public"},"_id":"@beshkenadze/react-secret-sharing@0.2.0","gitHead":"7a49ae66368c8ad6b5b3777703706979b9d3afc6","_nodeVersion":"24.8.0","_npmVersion":"11.6.0","dist":{"integrity":"sha512-cv7b/N5fvmU6ID2CtQVpA5nFjVEmMMGoSrYbbzUeqB4bbhxOTWkM0J2bCF1J8/AJ6ltdK5nkQ8/Ef8VQ062Cug==","shasum":"5385ec9fdaf45c4a00a388ff07493a4e648a7f98","tarball":"https://registry.npmjs.org/@beshkenadze/react-secret-sharing/-/react-secret-sharing-0.2.0.tgz","fileCount":9,"unpackedSize":770258,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIH66JxbclurgfGkvJPwQ4ahFvXYE1/TuzIbW168dRjyOAiEAsZmpmntFnNj1qKQ7+Xw8jVEiyKfQav0sluFsiqk69GE="}]},"_npmUser":{"name":"beshkenadze","email":"beshkenadze@gmail.com"},"directories":{},"maintainers":[{"name":"beshkenadze","email":"beshkenadze@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/react-secret-sharing_0.2.0_1758553791214_0.6531104645390753"},"_hasShrinkwrap":false}},"time":{"created":"2025-08-15T13:54:18.833Z","modified":"2025-09-22T15:09:51.599Z","0.1.0":"2025-08-15T13:54:19.137Z","0.2.0":"2025-09-22T15:09:51.413Z"},"license":"MIT","keywords":["shamir","secret-sharing","react","hooks","cryptography","security"],"description":"A clean, minimalist implementation of Shamir Secret Sharing with React hooks for easy integration","maintainers":[{"name":"beshkenadze","email":"beshkenadze@gmail.com"}],"readme":"# @beshkenadze/react-secret-sharing\n\n[![npm version](https://badge.fury.io/js/@beshkenadze%2Freact-secret-sharing.svg)](https://www.npmjs.com/package/@beshkenadze/react-secret-sharing)\n\nA clean, minimalist implementation of **Shamir Secret Sharing** with React hooks for easy integration.\n\n## ✨ Features\n\n- 🔐 **Secure**: Based on Shamir's Secret Sharing algorithm\n- 📦 **Simple**: Clean API with full TypeScript support\n- ⚛️ **React Ready**: Custom hooks for seamless React integration\n- 🎯 **Flexible**: Three output formats (Base64, Hex, BIP39 Mnemonic)\n- 🔍 **Auto-Detection**: Automatically detects share formats when combining\n\n## 📦 Installation\n\n```bash\nnpm install @beshkenadze/react-secret-sharing\n```\n\n## 🚀 Quick Start\n\n```tsx\nimport { useShamir } from \"@beshkenadze/react-secret-sharing\";\n\nfunction MyComponent() {\n  const { split, combine, shares, isLoading, error, reset } = useShamir();\n  \n  const handleSplit = async () => {\n    await split(\"my-secret\", { totalShares: 3, threshold: 2 });\n  };\n  \n  const handleCombine = async () => {\n    const secret = await combine(shares.slice(0, 2));\n    console.log('Reconstructed:', secret);\n  };\n  \n  return (\n    <div>\n      {error && <div>Error: {error}</div>}\n      {isLoading && <div>Loading...</div>}\n      <button onClick={handleSplit}>Split Secret</button>\n      <button onClick={handleCombine}>Combine Shares</button>\n      <button onClick={reset}>Reset</button>\n    </div>\n  );\n}\n```\n\n## 🎨 Share Formats\n\n### Base64 (Default)\n```tsx\nawait split(\"secret\", { totalShares: 3, threshold: 2 });\n// Output: \"SGVsbG8gV29ybGQ=\"\n```\n\n### Human-Readable Hex\n```tsx\nawait split(\"secret\", { totalShares: 3, threshold: 2 }, { encoding: 'human' });\n// Output: \"48-65-6c-6c-6f-20-57-6f-72-6c-64\"\n```\n\n### BIP39 Mnemonic Words\n```tsx\nawait split(\"secret\", { totalShares: 3, threshold: 2 }, { encoding: 'mnemonic' });\n// Output: \"search only exotic way tomato sure despair ship speed beef\"\n```\n\n## 📚 API Reference\n\n### `useShamir()` Hook\n\nThe main hook for stateful Shamir operations:\n\n```tsx\nconst {\n  // State\n  isLoading,           // boolean - loading state\n  error,               // string | null - error message\n  shares,              // TShare[] - generated shares\n  reconstructedSecret, // string | null - reconstructed secret\n  \n  // Actions\n  split,               // (secret, config, options?) => Promise<TShare[]>\n  combine,             // (shares) => Promise<string>\n  reset,               // () => void - reset all state\n  clearError           // () => void - clear error only\n} = useShamir();\n```\n\n**Methods:**\n\n- **`split(secret, config, options?)`** - Split a secret into shares\n  - `secret: string` - The secret to split\n  - `config: TShamirConfig` - Configuration for shares\n  - `options?: TShamirOptions` - Optional encoding format\n  - Returns: `Promise<TShare[]>` - Array of generated shares\n\n- **`combine(shares)`** - Combine shares to reconstruct the secret\n  - `shares: TShare[]` - Array of shares to combine\n  - Returns: `Promise<string>` - The reconstructed secret\n\n- **`reset()`** - Reset all state (shares, secret, error)\n\n- **`clearError()`** - Clear only the error state\n\n### `useShamirOperations()` Hook\n\nFor one-time operations without state management:\n\n```tsx\nconst { splitSecret, combineShares } = useShamirOperations();\n\n// Direct usage\nconst result = await splitSecret(\"secret\", { totalShares: 3, threshold: 2 });\nconst reconstructed = await combineShares(result.shares.slice(0, 2));\n```\n\n### Core Functions\n\nYou can also import the core functions directly:\n\n```tsx\nimport { splitSecret, combineShares } from \"@beshkenadze/react-secret-sharing\";\n\nconst { shares } = await splitSecret(\"secret\", { totalShares: 3, threshold: 2 });\nconst { secret } = await combineShares(shares);\n```\n\n## 📝 TypeScript Types\n\n```tsx\ninterface TShamirConfig {\n  totalShares: number;  // 2-255: total number of shares to create\n  threshold: number;    // 2-totalShares: minimum shares needed to reconstruct\n}\n\ninterface TShamirOptions {\n  encoding?: 'base64' | 'human' | 'mnemonic'; // output format\n}\n\ninterface TShare {\n  id: number;    // share identifier (1-based)\n  data: string;  // encoded share data\n}\n\ninterface TSplitResult {\n  shares: TShare[];\n  config: TShamirConfig;\n}\n\ninterface TCombineResult {\n  secret: string;\n}\n```\n\n## 🧩 Auto-Detection Magic\n\nThe `combine` function automatically detects share formats - mix them seamlessly:\n\n```tsx\nconst mixedShares = [\n  { id: 1, data: \"SGVsbG8gV29ybGQ=\" },           // Base64\n  { id: 2, data: \"48-65-6c-6c-6f-20-57-6f-72\" }, // Hex  \n  { id: 3, data: \"search only exotic way tomato\" } // Mnemonic\n];\n\nconst secret = await combine(mixedShares); // ✅ Works perfectly!\n```\n\n## 🛡️ Security Notes\n\n- Shares are generated using cryptographically secure random numbers\n- Based on proven Shamir Secret Sharing algorithm\n- No secrets are stored in memory longer than necessary\n- Each share reveals no information about the original secret\n- Threshold security: need exactly K shares to reconstruct\n\n## 📄 License\n\nMIT © [Akira Beshkenadze](https://github.com/beshkenadze)","readmeFilename":"README.md"}