{"_id":"@blondfrogs/secp256k1-wasm","_rev":"6-52c31749fc571dfec257fa78f50c0f8b","name":"@blondfrogs/secp256k1-wasm","dist-tags":{"latest":"1.3.0"},"versions":{"1.0.0":{"name":"@blondfrogs/secp256k1-wasm","version":"1.0.0","keywords":["veil","secp256k1","wasm","webassembly","cryptography","ringct","privacy","pedersen","mlsag","rangeproof"],"author":{"name":"Veil Project"},"license":"MIT","_id":"@blondfrogs/secp256k1-wasm@1.0.0","maintainers":[{"name":"blondfrogs","email":"jeremy.anderson.utah@gmail.com"}],"contributors":[{"name":"Veil Project"},{"name":"blondfrogs"}],"homepage":"https://github.com/blondfrogs/veil-secp256k1-wasm","bugs":{"url":"https://github.com/blondfrogs/veil-secp256k1-wasm/issues"},"dist":{"shasum":"92b8f5de44d9293bf9b2205aaae904cb0b533454","tarball":"https://registry.npmjs.org/@blondfrogs/secp256k1-wasm/-/secp256k1-wasm-1.0.0.tgz","fileCount":5,"integrity":"sha512-K1IBuGOxPYtfwVG4nAcxUfdTh0SZnFH/ZpIqWZBhCuliVzYP0cWV27Jj+MHTERvRr7DeO5eVToamnWaB7rjCaw==","signatures":[{"sig":"MEUCID8YkwyWFnOrNNSsBRAlkDdmoZ9suPQ2OUKUsXnW+17rAiEA9+NSZXLDytTUeeFAS2SVvkDpFi9O0EYPv/UZSMtILG0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":405507},"main":"veil_wasm.js","type":"module","types":"veil_wasm.d.ts","gitHead":"08702b07dc359fe57dd633d1654a25d12b2be5b3","_npmUser":{"name":"blondfrogs","email":"jeremy.anderson.utah@gmail.com"},"buildDate":"2025-10-29T17:52:47Z","gitBranch":"HEAD","gitCommit":"08702b0","repository":{"url":"git+https://github.com/blondfrogs/veil-secp256k1-wasm.git","type":"git"},"_npmVersion":"11.4.2","description":"Pure Rust secp256k1 cryptography for Veil blockchain with WASM bindings","directories":{},"sideEffects":["./snippets/*"],"_nodeVersion":"24.4.1","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/secp256k1-wasm_1.0.0_1761760369340_0.3077751336663237","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@blondfrogs/secp256k1-wasm","version":"1.0.1","keywords":["veil","secp256k1","wasm","webassembly","cryptography","ringct","privacy","pedersen","mlsag","rangeproof"],"author":{"name":"Veil Project"},"license":"MIT","_id":"@blondfrogs/secp256k1-wasm@1.0.1","maintainers":[{"name":"blondfrogs","email":"jeremy.anderson.utah@gmail.com"}],"contributors":[{"name":"Veil Project"},{"name":"blondfrogs"}],"homepage":"https://github.com/blondfrogs/veil-secp256k1-wasm","bugs":{"url":"https://github.com/blondfrogs/veil-secp256k1-wasm/issues"},"dist":{"shasum":"1ae89d42e44412ec856dc70093cad40fd25b50a2","tarball":"https://registry.npmjs.org/@blondfrogs/secp256k1-wasm/-/secp256k1-wasm-1.0.1.tgz","fileCount":5,"integrity":"sha512-TNMf885mnut+iyRnzhHX/tl/IiZRU5B5+lh5WqmAWDfrPmzXhu9P3FAK95Nh1+k5fUKoOmykq6Da0K6h7Jgv2A==","signatures":[{"sig":"MEUCIQDMz/K6hWFbFJ72P3ULEyxHwa0qzNBe8/v+yqZxcmNe1wIgHh/4g/uij/zORcyJ4jjqzNrD2KTUmW9thzOChE7hteY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":405386},"main":"veil_wasm.js","type":"module","types":"veil_wasm.d.ts","gitHead":"9d5dae93068fa672b467885af401ac90389bbae8","_npmUser":{"name":"blondfrogs","email":"jeremy.anderson.utah@gmail.com"},"buildDate":"2025-10-29T18:21:55Z","gitBranch":"HEAD","gitCommit":"9d5dae9","repository":{"url":"git+https://github.com/blondfrogs/veil-secp256k1-wasm.git","type":"git"},"_npmVersion":"11.4.2","description":"Pure Rust secp256k1 cryptography for Veil blockchain with WASM bindings","directories":{},"sideEffects":["./snippets/*"],"_nodeVersion":"24.4.1","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/secp256k1-wasm_1.0.1_1761762117009_0.2998756212691276","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@blondfrogs/secp256k1-wasm","version":"1.1.0","keywords":["veil","secp256k1","wasm","webassembly","cryptography","ringct","privacy","pedersen","mlsag","rangeproof"],"author":{"name":"Veil Project"},"license":"MIT","_id":"@blondfrogs/secp256k1-wasm@1.1.0","maintainers":[{"name":"blondfrogs","email":"jeremy.anderson.utah@gmail.com"}],"contributors":[{"name":"Veil Project"},{"name":"blondfrogs"}],"homepage":"https://github.com/blondfrogs/veil-secp256k1-wasm","bugs":{"url":"https://github.com/blondfrogs/veil-secp256k1-wasm/issues"},"dist":{"shasum":"4935e2bbaf4ffdcfbdc26e0ef9b040eaa8954f50","tarball":"https://registry.npmjs.org/@blondfrogs/secp256k1-wasm/-/secp256k1-wasm-1.1.0.tgz","fileCount":5,"integrity":"sha512-iBwoZyROVLmwb4W7BCNINMa7LnHsPk9m959xDaL7kLDmXtxz8cSvHq5cYUmjGOAgSysTnFM0PQJ6zYp+IzLpnw==","signatures":[{"sig":"MEUCIQDjAucAjoXujnwnNRwPqutltlVPMABXuloa+E/u6ev53AIgWkynOgcx6wATmSaw2Jd1PFZ2+yd6NfDYpGfq8CTlhU0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":399091},"main":"veil_wasm.js","type":"module","types":"veil_wasm.d.ts","gitHead":"abb9752ef25d49fc985c81781c29719f48cc289a","_npmUser":{"name":"blondfrogs","email":"jeremy.anderson.utah@gmail.com"},"buildDate":"2025-10-29T20:10:46Z","gitBranch":"HEAD","gitCommit":"abb9752","repository":{"url":"git+https://github.com/blondfrogs/veil-secp256k1-wasm.git","type":"git"},"_npmVersion":"11.4.2","description":"Pure Rust secp256k1 cryptography for Veil blockchain with WASM bindings","directories":{},"sideEffects":["./snippets/*"],"_nodeVersion":"24.4.1","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/secp256k1-wasm_1.1.0_1761768648615_0.07877825473582267","host":"s3://npm-registry-packages-npm-production"}},"1.1.1":{"name":"@blondfrogs/secp256k1-wasm","version":"1.1.1","keywords":["veil","secp256k1","wasm","webassembly","cryptography","ringct","privacy","pedersen","mlsag","rangeproof"],"author":{"name":"Veil Project"},"license":"MIT","_id":"@blondfrogs/secp256k1-wasm@1.1.1","maintainers":[{"name":"blondfrogs","email":"jeremy.anderson.utah@gmail.com"}],"contributors":[{"name":"Veil Project"},{"name":"blondfrogs"}],"homepage":"https://github.com/blondfrogs/veil-secp256k1-wasm","bugs":{"url":"https://github.com/blondfrogs/veil-secp256k1-wasm/issues"},"dist":{"shasum":"ab1c2f3d72f25a86d30abe74fbd384cd4809eaa2","tarball":"https://registry.npmjs.org/@blondfrogs/secp256k1-wasm/-/secp256k1-wasm-1.1.1.tgz","fileCount":5,"integrity":"sha512-jCc8u1tnGNuMc1Tc0mg5lgjxuC1qLS49lKn6Q71NdlOsP34EZ4MGpQy3MEyDCN0nHHcElt6MgT6tBq7pDECQng==","signatures":[{"sig":"MEYCIQCSv0Ipr2jdEUh8xiX8ZbDMdGMGETrH4LL0PEzFAskbHQIhAJGTSdtEdui2CTjZPXQTshHNy8FHMz8sd9lF5wXKFg7T","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":399071},"main":"veil_wasm.js","types":"veil_wasm.d.ts","gitHead":"abb9752ef25d49fc985c81781c29719f48cc289a","_npmUser":{"name":"blondfrogs","email":"jeremy.anderson.utah@gmail.com"},"buildDate":"2025-10-29T20:14:13Z","gitBranch":"HEAD","gitCommit":"abb9752","repository":{"url":"git+https://github.com/blondfrogs/veil-secp256k1-wasm.git","type":"git"},"_npmVersion":"11.4.2","description":"Pure Rust secp256k1 cryptography for Veil blockchain with WASM bindings","directories":{},"sideEffects":["./snippets/*"],"_nodeVersion":"24.4.1","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/secp256k1-wasm_1.1.1_1761768854543_0.3548142393156066","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"@blondfrogs/secp256k1-wasm","version":"1.2.0","keywords":["veil","secp256k1","wasm","webassembly","cryptography","ringct","privacy","pedersen","mlsag","rangeproof"],"author":{"name":"Veil Project"},"license":"MIT","_id":"@blondfrogs/secp256k1-wasm@1.2.0","maintainers":[{"name":"blondfrogs","email":"jeremy.anderson.utah@gmail.com"}],"contributors":[{"name":"Veil Project"},{"name":"blondfrogs"}],"homepage":"https://github.com/blondfrogs/veil-secp256k1-wasm","bugs":{"url":"https://github.com/blondfrogs/veil-secp256k1-wasm/issues"},"dist":{"shasum":"0703a70f2b1d4fb583ba234e8e0ca142c375609f","tarball":"https://registry.npmjs.org/@blondfrogs/secp256k1-wasm/-/secp256k1-wasm-1.2.0.tgz","fileCount":5,"integrity":"sha512-SR9rUXMV9MUzVZIS7v8J/FMWshvb/BY95Tp5j/PHnJfufD9mozJ8iV0Lzqx3qXuzWJnphyiBNJPiCW/khh7cRA==","signatures":[{"sig":"MEQCIHMOIVmo0iRXEjcnegDxzd3FuwTWdZqL91J5h0dOovxrAiAheTIKoHHxksCoXvezJgowpT/ooadCMjPq3jpJvfMAUw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":434148},"main":"veil_wasm.js","types":"veil_wasm.d.ts","gitHead":"01ba5a7ce0652960170faffb5def2db856880dd6","_npmUser":{"name":"blondfrogs","email":"jeremy.anderson.utah@gmail.com"},"buildDate":"2026-01-09T16:14:04Z","gitBranch":"HEAD","gitCommit":"01ba5a7","repository":{"url":"git+https://github.com/blondfrogs/veil-secp256k1-wasm.git","type":"git"},"_npmVersion":"11.4.2","description":"Pure Rust secp256k1 cryptography for Veil blockchain with WASM bindings","directories":{},"sideEffects":["./snippets/*"],"_nodeVersion":"24.4.1","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/secp256k1-wasm_1.2.0_1767975271431_0.8889408386884821","host":"s3://npm-registry-packages-npm-production"}},"1.3.0":{"name":"@blondfrogs/secp256k1-wasm","version":"1.3.0","description":"Pure Rust secp256k1 cryptography for Veil blockchain with WASM bindings","license":"MIT","author":{"name":"Veil Project"},"contributors":[{"name":"Veil Project"},{"name":"blondfrogs"}],"repository":{"type":"git","url":"git+https://github.com/blondfrogs/veil-secp256k1-wasm.git"},"homepage":"https://github.com/blondfrogs/veil-secp256k1-wasm","gitCommit":"f2fa5b5","gitBranch":"HEAD","buildDate":"2026-01-26T19:06:21Z","keywords":["veil","secp256k1","wasm","webassembly","cryptography","ringct","privacy","pedersen","mlsag","rangeproof"],"main":"veil_wasm.js","types":"veil_wasm.d.ts","sideEffects":["./snippets/*"],"_id":"@blondfrogs/secp256k1-wasm@1.3.0","gitHead":"f2fa5b596c6a9c8f5824a48d2016d44b793c1d0c","bugs":{"url":"https://github.com/blondfrogs/veil-secp256k1-wasm/issues"},"_nodeVersion":"24.4.1","_npmVersion":"11.4.2","dist":{"integrity":"sha512-HLxfhiE1UvGyh8RjBjil/l07j5qUSLXwEDGkB+mX8rd2Kw9Uq0kCdxcRAJ8F2FDYcuPCNL3NSb+I1kfbsjvOcg==","shasum":"4729af09e5c6a5dc9f32757e0f254f323f699e99","tarball":"https://registry.npmjs.org/@blondfrogs/secp256k1-wasm/-/secp256k1-wasm-1.3.0.tgz","fileCount":5,"unpackedSize":434176,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQC3bxs7+3JQ/CA1OXjNkCQftZmdLPxG1bvgA3RWdzjkuwIgX2L6vHamqUDAwRnIiXcL3cXvI6oUC6ySn3mobxcI6Nw="}]},"_npmUser":{"name":"blondfrogs","email":"jeremy.anderson.utah@gmail.com"},"directories":{},"maintainers":[{"name":"blondfrogs","email":"jeremy.anderson.utah@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/secp256k1-wasm_1.3.0_1769454414970_0.5668807532908922"},"_hasShrinkwrap":false}},"time":{"created":"2025-10-29T17:52:49.260Z","modified":"2026-01-26T19:06:55.310Z","1.0.0":"2025-10-29T17:52:49.552Z","1.0.1":"2025-10-29T18:21:57.291Z","1.1.0":"2025-10-29T20:10:48.843Z","1.1.1":"2025-10-29T20:14:14.755Z","1.2.0":"2026-01-09T16:14:31.585Z","1.3.0":"2026-01-26T19:06:55.196Z"},"bugs":{"url":"https://github.com/blondfrogs/veil-secp256k1-wasm/issues"},"author":{"name":"Veil Project"},"license":"MIT","homepage":"https://github.com/blondfrogs/veil-secp256k1-wasm","keywords":["veil","secp256k1","wasm","webassembly","cryptography","ringct","privacy","pedersen","mlsag","rangeproof"],"repository":{"type":"git","url":"git+https://github.com/blondfrogs/veil-secp256k1-wasm.git"},"description":"Pure Rust secp256k1 cryptography for Veil blockchain with WASM bindings","contributors":[{"name":"Veil Project"},{"name":"blondfrogs"}],"maintainers":[{"name":"blondfrogs","email":"jeremy.anderson.utah@gmail.com"}],"readme":"# @blondfrogs/secp256k1-wasm\n\nWebAssembly bindings for Veil's pure Rust secp256k1 cryptography library.\n\n[![npm version](https://img.shields.io/npm/v/@blondfrogs/secp256k1-wasm.svg)](https://www.npmjs.com/package/@blondfrogs/secp256k1-wasm)\n[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](../LICENSE)\n[![WASM Size](https://img.shields.io/badge/wasm-530KB-orange.svg)]()\n\n## Overview\n\n`@blondfrogs/secp256k1-wasm` provides JavaScript/TypeScript bindings for the `veil-crypto` Rust library, compiled to WebAssembly. This enables privacy-preserving cryptographic operations in web browsers and Node.js environments.\n\n## Features\n\n- **Pure Rust compiled to WASM** - No native dependencies\n- **530KB optimized bundle** - Small footprint\n- **Full TypeScript support** - Complete type definitions\n- **Browser + Node.js** - Works everywhere\n- **Pedersen Commitments** - Hide transaction amounts\n- **Range Proofs** - Prove values without revealing them\n- **MLSAG Ring Signatures** - Anonymous transactions\n- **Key Images** - Prevent double-spending\n- **ECDH** - Shared secret generation\n\n## Installation\n\n```bash\nnpm install @blondfrogs/secp256k1-wasm\n```\n\nOr with yarn:\n\n```bash\nyarn add @blondfrogs/secp256k1-wasm\n```\n\n## Usage\n\n### Initialize WASM\n\n```typescript\nimport init, {\n  pedersen_commit,\n  rangeproof_sign,\n  rangeproof_verify,\n  generate_mlsag,\n  derive_pubkey,\n  ecdh_veil\n} from '@blondfrogs/secp256k1-wasm';\n\n// Initialize WASM module (call once at startup)\nawait init();\n```\n\n### Pedersen Commitments\n\n```typescript\nimport { pedersen_commit } from '@blondfrogs/secp256k1-wasm';\n\nconst value = 1000n;  // Amount to commit\nconst blind = new Uint8Array(32);  // Blinding factor (use crypto.getRandomValues)\ncrypto.getRandomValues(blind);\n\nconst commitment = pedersen_commit(value, blind);\nconsole.log('Commitment:', commitment);  // 33 bytes\n```\n\n### Range Proofs\n\n```typescript\nimport { pedersen_commit, rangeproof_sign, rangeproof_verify } from '@blondfrogs/secp256k1-wasm';\n\nconst value = 1000n;\nconst blind = new Uint8Array(32);\ncrypto.getRandomValues(blind);\n\nconst commitment = pedersen_commit(value, blind);\n\n// Generate proof that value is in valid range\nconst proofResult = rangeproof_sign(\n  commitment,\n  value,\n  blind,\n  commitment,  // nonce_commit\n  new Uint8Array(0),  // extra_commit\n  0n,  // min_value\n  -1,  // exp (auto)\n  0   // min_bits\n);\n\nconsole.log('Proof size:', proofResult.proof.length);\nconsole.log('Message:', proofResult.message);\n\n// Verify proof\nconst isValid = rangeproof_verify(commitment, proofResult.proof);\nconsole.log('Valid:', isValid);  // true\n```\n\n### MLSAG Ring Signatures\n\n```typescript\nimport { prepare_mlsag, generate_mlsag, verify_mlsag } from '@blondfrogs/secp256k1-wasm';\n\nconst message = new Uint8Array(32);  // Message to sign\nconst ringSize = 11;\nconst realIndex = 5;  // Your real output position\n\n// Prepare MLSAG context\nconst context = prepare_mlsag(\n  message,\n  ringSize,\n  realIndex,\n  privateKeys,    // Array of your secret keys\n  publicKeys,     // Ring of public keys\n  commitments     // Ring of commitments\n);\n\n// Generate signature\nconst signature = generate_mlsag(context);\n\n// Verify signature\nconst isValid = verify_mlsag(message, signature, publicKeys, commitments);\nconsole.log('Valid MLSAG:', isValid);\n```\n\n### Key Derivation\n\n```typescript\nimport { derive_pubkey, ecdh_veil } from '@blondfrogs/secp256k1-wasm';\n\n// Derive public key from private key\nconst secretKey = new Uint8Array(32);\ncrypto.getRandomValues(secretKey);\n\nconst publicKey = derive_pubkey(secretKey);\nconsole.log('Public key:', publicKey);  // 33 bytes compressed\n\n// ECDH shared secret\nconst recipientPubkey = new Uint8Array(33);  // Their public key\nconst sharedSecret = ecdh_veil(secretKey, recipientPubkey);\nconsole.log('Shared secret:', sharedSecret);  // 32 bytes\n```\n\n### Key Images\n\n```typescript\nimport { generate_keyimage } from '@blondfrogs/secp256k1-wasm';\n\nconst secretKey = new Uint8Array(32);\ncrypto.getRandomValues(secretKey);\n\nconst keyImage = generate_keyimage(secretKey);\nconsole.log('Key image:', keyImage);  // 33 bytes\n```\n\n## API Reference\n\n### Commitment Functions\n\n- `pedersen_commit(value: bigint, blind: Uint8Array): Uint8Array` - Create Pedersen commitment\n- `pedersen_commit_with_generator(value: bigint, blind: Uint8Array, generator: Uint8Array): Uint8Array` - Commit with custom generator\n\n### Range Proof Functions\n\n- `rangeproof_sign(...): RangeProofResult` - Generate range proof\n- `rangeproof_verify(commitment: Uint8Array, proof: Uint8Array): boolean` - Verify range proof\n- `rangeproof_rewind(commitment: Uint8Array, proof: Uint8Array, nonce: Uint8Array): RewindResult | null` - Rewind proof to extract value\n\n### MLSAG Functions\n\n- `prepare_mlsag(...): MlsagContext` - Prepare MLSAG signing context\n- `generate_mlsag(context: MlsagContext): Uint8Array` - Generate MLSAG signature\n- `verify_mlsag(...): boolean` - Verify MLSAG signature\n\n### Key Functions\n\n- `derive_pubkey(secretKey: Uint8Array): Uint8Array` - Derive public key\n- `point_add_scalar(pubkey: Uint8Array, scalar: Uint8Array): Uint8Array` - Add scalar to point\n- `generate_keyimage(secretKey: Uint8Array): Uint8Array` - Generate key image\n\n### ECDH Functions\n\n- `ecdh_veil(secretKey: Uint8Array, publicKey: Uint8Array): Uint8Array` - Compute shared secret\n\n## TypeScript Types\n\nThe package includes full TypeScript definitions:\n\n```typescript\nexport interface RangeProofResult {\n  proof: Uint8Array;\n  message: Uint8Array;\n}\n\nexport interface RewindResult {\n  value: bigint;\n  blind: Uint8Array;\n  message: Uint8Array;\n}\n\nexport interface MlsagContext {\n  // Internal context for MLSAG signing\n}\n```\n\n## Bundle Size\n\n| Build Type | Size |\n|------------|------|\n| WASM (release) | 530 KB |\n| WASM (gzipped) | ~180 KB |\n| JS wrapper | ~5 KB |\n\n## Browser Support\n\nWorks in all modern browsers that support WebAssembly:\n\n- Chrome/Edge 57+\n- Firefox 52+\n- Safari 11+\n- Node.js 12+\n\n## Performance\n\n| Operation | Time | Notes |\n|-----------|------|-------|\n| Pedersen commitment | ~0.5ms | |\n| Range proof generation | ~50-100ms | CPU-intensive |\n| MLSAG generation | ~50-100ms | Per input |\n| Range proof verification | ~20-30ms | |\n| Key derivation | ~0.5ms | |\n\n## Security Considerations\n\n**Status:** Ready for integration testing\n\nThis implementation is:\n- ✅ Pure Rust (memory-safe)\n- ✅ WASM-isolated sandbox\n- ✅ No eval() or dynamic code\n- ✅ Fully tested\n\n**For production use:**\n- ⚠️ Professional security audit recommended\n- ⚠️ Test on testnet first\n- ⚠️ Use secure random number generation\n- ⚠️ Protect private keys\n\n## Building from Source\n\nRequires Rust 1.70+ and wasm-pack:\n\n```bash\n# Install wasm-pack\ncargo install wasm-pack\n\n# Build for Node.js\nwasm-pack build --target nodejs --release\n\n# Build for browsers\nwasm-pack build --target web --release\n\n# Build for bundlers (webpack, etc)\nwasm-pack build --target bundler --release\n```\n\nThe built package will be in `pkg/`.\n\n## Examples\n\nSee the `examples/` directory for complete examples:\n\n- Basic commitment and range proof\n- MLSAG ring signature generation\n- Key derivation and ECDH\n- Integration with transaction building\n\n## Rust Crate\n\nFor Rust projects, use the underlying crate directly:\n\n```toml\n[dependencies]\nveil-crypto = \"0.1\"\n```\n\nSee [`veil-crypto` documentation](../veil-crypto) for Rust API.\n\n## Higher-Level APIs\n\nFor transaction building, use the companion package:\n\n- **`@veil/tx-builder`** (separate repo) - High-level transaction builder\n\n## Contributing\n\nContributions welcome! Please:\n\n1. Test your changes: `npm test`\n2. Ensure WASM builds: `wasm-pack build`\n3. Update documentation\n4. Add tests for new features\n\n## License\n\nMIT License - See [LICENSE](../LICENSE) for details\n\n## Related Projects\n\n- **[veil-crypto](../veil-crypto)** - Pure Rust cryptography library\n- **[Veil Core](https://github.com/Veil-Project/veil)** - Official Veil blockchain\n- **[wasm-bindgen](https://github.com/rustwasm/wasm-bindgen)** - Rust-WASM bindings\n\n## Support\n\n- **Issues:** [GitHub Issues](https://github.com/blondfrogs/veil-secp256k1-wasm/issues)\n- **Discussions:** [GitHub Discussions](https://github.com/blondfrogs/veil-secp256k1-wasm/discussions)\n- **npm:** [@blondfrogs/secp256k1-wasm](https://www.npmjs.com/package/@blondfrogs/secp256k1-wasm)\n\n---\n\nBuilt with 🦀 Rust + 🕸️ WASM for the Veil community\n","readmeFilename":"README.md"}