{"_id":"@cheny56/pqc-wallet","name":"@cheny56/pqc-wallet","dist-tags":{"latest":"1.0.0"},"versions":{"1.0.0":{"name":"@cheny56/pqc-wallet","version":"1.0.0","description":"Post-Quantum Cryptography wallet library for Ethereum/Quorum with BIP-39 mnemonic, ML-DSA-65 keys, and Bech32m addresses","main":"dist/index.js","module":"dist/index.mjs","types":"dist/index.d.ts","exports":{".":{"import":"./dist/index.mjs","require":"./dist/index.js","types":"./dist/index.d.ts"}},"scripts":{"build":"tsup src/index.ts --format cjs,esm --dts --clean","test":"vitest","test:run":"vitest run","lint":"eslint src --ext .ts","prepublishOnly":"npm run build"},"keywords":["pqc","post-quantum","cryptography","dilithium","ml-dsa","bip39","mnemonic","wallet","ethereum","quorum","bech32m","quantum-safe"],"author":{"name":"PQC-Chain Team"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/pqc-chain/pqc-wallet.git"},"dependencies":{"@noble/hashes":"^1.4.0","@noble/post-quantum":"^0.2.0","@scure/bip32":"^1.4.0","@scure/bip39":"^1.3.0","js-sha3":"^0.9.3"},"devDependencies":{"@types/node":"^20.0.0","@typescript-eslint/eslint-plugin":"^6.0.0","@typescript-eslint/parser":"^6.0.0","eslint":"^8.0.0","tsup":"^8.0.0","typescript":"^5.0.0","vitest":"^1.0.0"},"engines":{"node":">=18.0.0"},"directories":{"example":"examples"},"bugs":{"url":"https://github.com/pqc-chain/pqc-wallet/issues"},"homepage":"https://github.com/pqc-chain/pqc-wallet#readme","_id":"@cheny56/pqc-wallet@1.0.0","gitHead":"f72f35da0fd640b12f39ffb38d3f684a2ebd87c8","_nodeVersion":"22.21.1","_npmVersion":"10.9.4","dist":{"integrity":"sha512-M7jLQ4coqR86u2V10AZG6+tzsnV6qitQmslvfKeUUmBJSDYhQE3/Jx3VU/hqA7nw6Ln/065XxV+sGB4ijSWdwg==","shasum":"0176fd01acfb0dbdf32270cb412ab4a6baf505b2","tarball":"https://registry.npmjs.org/@cheny56/pqc-wallet/-/pqc-wallet-1.0.0.tgz","fileCount":7,"unpackedSize":180425,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIBM+TFq409wI6lvBV9WhdaqDO64Tne2chM1XHFPVj7Z8AiBWIW3xndEdTQI31XbMMN4mLYeMVDsuBNkST//TQ7zY3Q=="}]},"_npmUser":{"name":"cheny56","email":"cheny5dyh@gmail.com"},"maintainers":[{"name":"cheny56","email":"cheny5dyh@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/pqc-wallet_1.0.0_1768809312589_0.4156661978596208"},"_hasShrinkwrap":false}},"time":{"created":"2026-01-19T07:55:12.472Z","1.0.0":"2026-01-19T07:55:12.746Z","modified":"2026-01-19T07:55:12.917Z"},"maintainers":[{"name":"cheny56","email":"cheny5dyh@gmail.com"}],"description":"Post-Quantum Cryptography wallet library for Ethereum/Quorum with BIP-39 mnemonic, ML-DSA-65 keys, and Bech32m addresses","homepage":"https://github.com/pqc-chain/pqc-wallet#readme","keywords":["pqc","post-quantum","cryptography","dilithium","ml-dsa","bip39","mnemonic","wallet","ethereum","quorum","bech32m","quantum-safe"],"repository":{"type":"git","url":"git+https://github.com/pqc-chain/pqc-wallet.git"},"author":{"name":"PQC-Chain Team"},"bugs":{"url":"https://github.com/pqc-chain/pqc-wallet/issues"},"license":"MIT","readme":"# @pqc-chain/wallet\n\nA Post-Quantum Cryptography wallet library for Ethereum/Quorum with BIP-39 mnemonic support, ML-DSA (Dilithium) keys, and Bech32m addresses.\n\n## Features\n\n- **BIP-39 Mnemonic**: Standard 12/24-word mnemonic generation and recovery\n- **Quantum-Safe Keys**: ML-DSA (NIST FIPS 204) post-quantum signatures\n- **Multiple Algorithms**: ML-DSA-44, ML-DSA-65, ML-DSA-87 support\n- **Hybrid Scheme**: Combined ECDSA + PQC for gradual migration\n- **Bech32m Addresses**: Human-readable addresses with error detection\n- **Explicit Algorithm HRPs**: Algorithm-specific address encoding\n- **Multi-Algorithm Future**: Support for SLH-DSA and FN-DSA HRPs\n- **32-byte Addresses**: Enhanced security with full hash addresses\n- **TypeScript**: Full type definitions included\n\n## Installation\n\n```bash\nnpm install @pqc-chain/wallet\n```\n\n## Quick Start\n\n```typescript\nimport { createWallet, restoreWallet } from '@pqc-chain/wallet';\n\n// Create a new hybrid wallet (ECDSA + PQC)\nconst wallet = createWallet({ addressScheme: 'hybrid' });\nconsole.log('Mnemonic:', wallet.mnemonic);\n\n// Get first address\nconst address = wallet.getAddress(0);\nconsole.log('Address:', address.address);        // pqch1p... (Bech32m)\nconsole.log('Legacy:', address.legacyAddress);   // pqch1q... (Bech32)\n\n// Restore from existing mnemonic\nconst restored = restoreWallet('abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about');\n```\n\n## ML-DSA Algorithm Support\n\nThe library supports all three ML-DSA (Dilithium) variants from NIST FIPS 204:\n\n| Algorithm | Security Level | Public Key | Private Key | Signature | Use Case |\n|-----------|---------------|------------|-------------|-----------|----------|\n| ML-DSA-44 | NIST Level 2 | 1,312 bytes | 2,560 bytes | 2,420 bytes | IoT, constrained devices |\n| ML-DSA-65 | NIST Level 3 | 1,952 bytes | 4,032 bytes | 3,309 bytes | **Recommended** (default) |\n| ML-DSA-87 | NIST Level 5 | 2,592 bytes | 4,896 bytes | 4,627 bytes | High-value, long-term |\n\n```typescript\n// Use different algorithms\nconst wallet44 = createWallet({ pqcAlgorithm: 'ML-DSA-44' });\nconst wallet65 = createWallet({ pqcAlgorithm: 'ML-DSA-65' }); // default\nconst wallet87 = createWallet({ pqcAlgorithm: 'ML-DSA-87' });\n```\n\n## Specifications\n\n### Mnemonic (BIP-39)\n\n| Strength | Words | Entropy | Checksum | Security |\n|----------|-------|---------|----------|----------|\n| 128 bits | 12    | 128     | 4 bits   | Standard |\n| 256 bits | 24    | 256     | 8 bits   | High     |\n\nThe seed is always 64 bytes (512 bits), derived using PBKDF2-HMAC-SHA512 with 2048 iterations.\n\n### Key Derivation\n\n#### ECDSA (secp256k1)\n- **Method**: BIP-32/BIP-44 hierarchical deterministic derivation\n- **Default Path**: `m/44'/60'/0'/0` (Ethereum compatible)\n- **Private Key**: 32 bytes\n- **Public Key**: 33 bytes (compressed) / 65 bytes (uncompressed)\n\n#### PQC (ML-DSA)\n- **Method**: HKDF-SHA256 with domain separation\n- **Domain**: `pqc-wallet-v1` (default)\n- **Info Format**: `{domain}/{algorithm}/key/{index}`\n\n```\nHKDF-Expand(seed, info=\"pqc-wallet-v1/ML-DSA-65/key/{index}\", length=32) → ML-DSA keygen seed\n```\n\n### Address Formats\n\nThe library supports two HRP naming conventions for maximum flexibility.\n\n#### HRP Format Overview\n\n```\nAddress Format: <hrp>1<version_char><data><checksum>\n\nHRP Types:\n  1. Generic (algorithm auto-detected): pqc, pqch\n  2. Explicit (algorithm embedded):     mld65, slh128s, fnd512, etc.\n\nVersion Characters:\n  q - Version 0 (20 bytes, legacy, Bech32)\n  p - Version 1 (32 bytes, quantum-safe, Bech32m)\n```\n\n#### Generic HRPs (Auto-detect Algorithm)\n\n| Type | Version | Bytes | Format | Example |\n|------|---------|-------|--------|---------|\n| PQC (legacy) | 0 | 20 | `pqc1q<data>` | `pqc1q...` |\n| PQC (quantum-safe) | 1 | 32 | `pqc1p<data>` | `pqc1p...` |\n| Hybrid (legacy) | 0 | 20 | `pqch1q<data>` | `pqch1q...` |\n| Hybrid (quantum-safe) | 1 | 32 | `pqch1p<data>` | `pqch1p...` |\n| Testnet PQC | 0/1 | 20/32 | `tpqc1...` | `tpqc1p...` |\n| Testnet Hybrid | 0/1 | 20/32 | `tpqch1...` | `tpqch1p...` |\n\n#### Explicit Algorithm HRPs\n\nThe explicit format embeds the algorithm in the address HRP: `<family><variant>[h]`\n\n##### ML-DSA (Dilithium) - NIST FIPS 204\n\n| Algorithm | PQC HRP | Hybrid HRP | Testnet PQC | Testnet Hybrid |\n|-----------|---------|------------|-------------|----------------|\n| ML-DSA-44 | `mld44` | `mld44h` | `tmld44` | `tmld44h` |\n| ML-DSA-65 | `mld65` | `mld65h` | `tmld65` | `tmld65h` |\n| ML-DSA-87 | `mld87` | `mld87h` | `tmld87` | `tmld87h` |\n\n##### SLH-DSA (SPHINCS+) - NIST FIPS 205\n\n| Algorithm | PQC HRP | Hybrid HRP | Description |\n|-----------|---------|------------|-------------|\n| SLH-DSA-128s | `slh128s` | `slh128sh` | Small signatures, slower |\n| SLH-DSA-128f | `slh128f` | `slh128fh` | Fast signatures, larger |\n| SLH-DSA-192s | `slh192s` | `slh192sh` | Medium security, small |\n| SLH-DSA-192f | `slh192f` | `slh192fh` | Medium security, fast |\n| SLH-DSA-256s | `slh256s` | `slh256sh` | Highest security, small |\n| SLH-DSA-256f | `slh256f` | `slh256fh` | Highest security, fast |\n\n##### FN-DSA (Falcon) - Expected NIST 2024\n\n| Algorithm | PQC HRP | Hybrid HRP | Description |\n|-----------|---------|------------|-------------|\n| FN-DSA-512 | `fnd512` | `fnd512h` | Compact signatures |\n| FN-DSA-1024 | `fnd1024` | `fnd1024h` | Maximum security |\n\n#### Using Explicit Algorithm HRPs\n\n```typescript\nimport { \n  createWallet, \n  createPQCAddress, \n  parseAddressWithAlgorithm,\n  getHRPForFullAlgorithm \n} from '@pqc-chain/wallet';\n\n// Method 1: Create wallet with explicit algorithm in addresses\nconst wallet = createWallet({\n  addressScheme: 'hybrid',\n  pqcAlgorithm: 'ML-DSA-65',\n  useExplicitAlgorithmHRP: true  // Addresses will start with mld65h1p...\n});\n\n// Method 2: Create individual addresses with explicit algorithm\nconst address = createPQCAddress(publicKey, {\n  explicitAlgorithm: 'ML-DSA-65'  // Results in mld651p...\n});\n\n// Parse address to extract algorithm hint\nconst parsed = parseAddressWithAlgorithm('mld651p...');\nconsole.log(parsed.algorithm);  // 'ML-DSA-65'\nconsole.log(parsed.hrp);        // 'mld65'\n\n// Get HRP for any algorithm\nconst hrp = getHRPForFullAlgorithm('SLH-DSA-128s', false, false); // 'slh128s'\nconst hybridHrp = getHRPForFullAlgorithm('FN-DSA-512', true, false); // 'fnd512h'\n```\n\n#### When to Use Each HRP Style\n\n| Scenario | Recommended HRP | Reason |\n|----------|-----------------|--------|\n| General use | Generic (`pqc`, `pqch`) | Maximum compatibility |\n| Multi-algorithm deployment | Explicit (`mld65`, etc.) | Clear algorithm identification |\n| Debugging | Explicit | Immediate algorithm visibility |\n| UI display | Explicit | Better user understanding |\n| Future-proofing | Generic | Flexibility for upgrades |\n\n#### Address Derivation\n\n```\nPQC Address:\n  address = keccak256(pqc_public_key)\n  v0 (20 bytes) = address[12:32]\n  v1 (32 bytes) = address[0:32]\n\nHybrid Address:\n  address = keccak256(ecdsa_public_key || pqc_public_key)\n  v0 (20 bytes) = address[12:32]\n  v1 (32 bytes) = address[0:32]\n```\n\n## API Reference\n\n### Wallet Functions\n\n#### `createWallet(options?)`\n\nCreate a new wallet with a generated mnemonic.\n\n```typescript\nconst wallet = createWallet({\n  mnemonicStrength: 256,        // 128 (12 words) or 256 (24 words)\n  passphrase: '',               // Optional BIP-39 passphrase\n  addressScheme: 'hybrid',      // 'ecdsa', 'pqc', or 'hybrid'\n  bip44Path: \"m/44'/60'/0'/0\",  // BIP-44 path for ECDSA\n  pqcAlgorithm: 'ML-DSA-65',    // 'ML-DSA-44', 'ML-DSA-65', or 'ML-DSA-87'\n  pqcDomain: 'pqc-wallet-v1',   // Domain separator for PQC\n  testnet: false,               // Use testnet HRP\n  useLegacyFormat: false,       // Use 20-byte addresses\n  useExplicitAlgorithmHRP: false, // Use explicit algorithm in HRP\n});\n```\n\n#### `restoreWallet(mnemonic, options?)`\n\nRestore a wallet from an existing mnemonic.\n\n```typescript\nconst wallet = restoreWallet('word1 word2 ...', {\n  addressScheme: 'hybrid',\n});\n```\n\n#### `wallet.getAddress(index)`\n\nGet address info at a specific derivation index.\n\n```typescript\nconst info = wallet.getAddress(0);\nconsole.log(info.address);          // Primary Bech32m address\nconsole.log(info.legacyAddress);    // Legacy Bech32 address\nconsole.log(info.addressBytes);     // Raw address bytes\nconsole.log(info.ecdsaKeyPair);     // ECDSA key pair (if hybrid/ecdsa)\nconsole.log(info.pqcKeyPair);       // PQC key pair (if hybrid/pqc)\n```\n\n### Mnemonic Functions\n\n```typescript\nimport {\n  generateMnemonic,\n  validateMnemonic,\n  mnemonicToSeed,\n  getMnemonicInfo,\n} from '@pqc-chain/wallet';\n\n// Generate new mnemonic\nconst mnemonic = generateMnemonic(256); // 24 words\n\n// Validate mnemonic\nconst isValid = validateMnemonic(mnemonic); // true\n\n// Convert to seed\nconst seed = mnemonicToSeed(mnemonic, 'optional-passphrase');\nconsole.log(seed.length); // 64\n\n// Get mnemonic info\nconst info = getMnemonicInfo(mnemonic);\nconsole.log(info.wordCount);   // 24\nconsole.log(info.entropyBits); // 256\n```\n\n### Key Functions\n\n```typescript\nimport {\n  deriveECDSAKey,\n  derivePQCKey,\n  derivePQCKey44,\n  derivePQCKey87,\n  deriveHybridKeys,\n  signPQC,\n  verifyPQC,\n} from '@pqc-chain/wallet';\n\n// Derive ECDSA key\nconst ecdsaKey = deriveECDSAKey(seed, \"m/44'/60'/0'/0\", 0);\n\n// Derive PQC key (default ML-DSA-65)\nconst pqcKey = derivePQCKey(seed, 0);\n\n// Derive PQC key with specific algorithm\nconst pqcKey44 = derivePQCKey44(seed, 0);\nconst pqcKey87 = derivePQCKey87(seed, 0);\n\n// Derive both (hybrid)\nconst { ecdsa, pqc } = deriveHybridKeys(seed, 0, 'ML-DSA-65');\n\n// Sign with PQC\nconst signature = signPQC(messageHash, pqcKey.privateKey);\n\n// Verify PQC signature (auto-detects algorithm from key size)\nconst isValid = verifyPQC(messageHash, signature, pqcKey.publicKey);\n```\n\n### Address Functions\n\n```typescript\nimport {\n  createPQCAddress,\n  createHybridAddress,\n  detectAddressType,\n  parseAddress,\n  parseAddressWithAlgorithm,\n  validateAddress,\n  toEVMAddress,\n  toBech32m,\n  getHRPForFullAlgorithm,\n  getFullAlgorithmFromHRP,\n  getAlgorithmFamilyFromHRP,\n} from '@pqc-chain/wallet';\n\n// Create PQC address (generic HRP)\nconst pqcAddr = createPQCAddress(publicKey, { testnet: false });\n\n// Create PQC address (explicit algorithm HRP)\nconst explicitAddr = createPQCAddress(publicKey, { \n  explicitAlgorithm: 'ML-DSA-65' \n});\n\n// Create hybrid address\nconst hybridAddr = createHybridAddress(ecdsaPubKey, pqcPubKey);\n\n// Create hybrid address with explicit algorithm\nconst hybridExplicit = createHybridAddress(ecdsaPubKey, pqcPubKey, {\n  explicitAlgorithm: 'ML-DSA-87'\n});\n\n// Detect address type\nconst type = detectAddressType('pqc1p...'); // 'pqc-bech32m'\n\n// Parse address with algorithm extraction\nconst parsed = parseAddressWithAlgorithm('mld651p...');\nconsole.log(parsed.hrp);       // 'mld65'\nconsole.log(parsed.algorithm); // 'ML-DSA-65'\nconsole.log(parsed.data);      // Uint8Array\n\n// Get HRP for algorithm\nconst hrp = getHRPForFullAlgorithm('SLH-DSA-128s', true, false); // 'slh128sh'\n\n// Extract algorithm from HRP\nconst algo = getFullAlgorithmFromHRP('mld87h'); // 'ML-DSA-87'\nconst family = getAlgorithmFamilyFromHRP('slh256s'); // 'SLH-DSA'\n\n// Validate address\nconst valid = validateAddress('pqc1p...'); // true\n\n// Convert to EVM address\nconst evmAddr = toEVMAddress('pqc1p...'); // 0x...\n```\n\n### HRP Utility Functions\n\n```typescript\nimport {\n  HRP,\n  isHybridHRP,\n  isTestnetHRP,\n  isValidHRP,\n} from '@pqc-chain/wallet';\n\n// Access HRP constants\nconsole.log(HRP.PQC);           // 'pqc'\nconsole.log(HRP.MLDSA_65);      // 'mld65'\nconsole.log(HRP.SLHDSA_128S);   // 'slh128s'\nconsole.log(HRP.FNDSA_512);     // 'fnd512'\n\n// Check HRP properties\nconsole.log(isHybridHRP('mld65h'));   // true\nconsole.log(isTestnetHRP('tmld65'));  // true\nconsole.log(isValidHRP('mld65'));     // true\n```\n\n### Bech32m Functions\n\n```typescript\nimport {\n  encodePQCAddress,\n  decodePQCAddress,\n  validatePQCBech32Address,\n} from '@pqc-chain/wallet';\n\n// Encode address with any valid HRP\nconst address = encodePQCAddress('mld65', AddressVersion.V1_QUANTUM, addressBytes);\n\n// Decode address\nconst { hrp, version, data } = decodePQCAddress('mld651p...');\n\n// Validate\nconst valid = validatePQCBech32Address('mld651p...');\n```\n\n## Security Considerations\n\n### Quantum Resilience\n\n| Component | Classical Security | Post-Quantum Security |\n|-----------|-------------------|----------------------|\n| ECDSA (secp256k1) | 128 bits | 0 bits (broken by Shor) |\n| ML-DSA-44 | 128 bits | ~100 bits (NIST Level 2) |\n| ML-DSA-65 | 192 bits | ~128 bits (NIST Level 3) |\n| ML-DSA-87 | 256 bits | ~192 bits (NIST Level 5) |\n| Hybrid | min(ECDSA, PQC) | min(ECDSA, PQC) |\n| 20-byte address | 80 bits* | ~53 bits** |\n| 32-byte address | 128 bits* | ~85 bits** |\n\n\\* Against preimage attacks\n\\** Against quantum collision attacks (Grover/BHT)\n\n### Recommendations\n\n1. **Use Hybrid Scheme**: Provides security even if one algorithm is broken\n2. **Use 32-byte Addresses**: Better quantum collision resistance\n3. **Use 24-word Mnemonic**: Higher entropy for long-term security\n4. **Use ML-DSA-65 or Higher**: Recommended for most use cases\n5. **Use Explicit Algorithm HRPs**: When clarity about algorithm is important\n6. **Backup Securely**: Store mnemonic offline in multiple locations\n7. **Use Passphrase**: Additional protection layer for high-value wallets\n\n## Compatibility\n\n### Node Compatibility\n\nThe wallet library is compatible with the Quorum node's PQC implementation:\n\n- Same address derivation (keccak256)\n- Same Bech32m encoding with all HRP variants\n- Same ML-DSA parameters (44, 65, 87)\n- Full HRP recognition (generic and explicit)\n- Interoperable signatures\n\n### EVM Compatibility\n\n32-byte PQC addresses can be converted to 20-byte EVM addresses for smart contract interaction:\n\n```typescript\nconst evmAddress = toEVMAddress(pqcAddress);\n// Takes last 20 bytes of the 32-byte address\n```\n\n## Examples\n\nThe `examples/` directory contains comprehensive examples:\n\n| Example | Description |\n|---------|-------------|\n| `01-basic-wallet.js` | Creating and restoring wallets |\n| `02-ml-dsa-algorithms.js` | Using ML-DSA-44, ML-DSA-65, ML-DSA-87 |\n| `03-signing-verification.js` | Signing and verifying messages |\n| `04-address-formats.js` | Bech32m encoding, HRPs, and conversion |\n| `05-mnemonic-advanced.js` | Mnemonic generation and validation |\n| `06-typescript-usage.ts` | Type-safe TypeScript usage |\n| `07-key-derivation.js` | BIP-44 and HKDF key derivation |\n| `08-explicit-algorithm-hrp.js` | Explicit algorithm HRPs comprehensive guide |\n\nRun an example:\n```bash\ncd pqc-wallet\nnpm install\nnode examples/01-basic-wallet.js\n```\n\n### Example: Create Wallet with Explicit Algorithm HRP\n\n```typescript\nimport { createWallet } from '@pqc-chain/wallet';\n\n// Create wallet with explicit ML-DSA-65 in address HRP\nconst wallet = createWallet({\n  mnemonicStrength: 256,\n  addressScheme: 'hybrid',\n  pqcAlgorithm: 'ML-DSA-65',\n  useExplicitAlgorithmHRP: true,  // Enable explicit HRP\n});\n\n// Address will start with mld65h1p... instead of pqch1p...\nconst address = wallet.getAddress(0);\nconsole.log(address.address);  // mld65h1p...\n```\n\n### Example: Parse and Identify Algorithm\n\n```typescript\nimport { \n  parseAddressWithAlgorithm, \n  getAlgorithmFamilyFromHRP \n} from '@pqc-chain/wallet';\n\nconst address = 'mld651pqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq...';\nconst parsed = parseAddressWithAlgorithm(address);\n\nconsole.log('HRP:', parsed.hrp);              // 'mld65'\nconsole.log('Algorithm:', parsed.algorithm);  // 'ML-DSA-65'\nconsole.log('Family:', getAlgorithmFamilyFromHRP(parsed.hrp)); // 'ML-DSA'\nconsole.log('Is Hybrid:', parsed.hrp.endsWith('h')); // false\n```\n\n## License\n\nMIT\n\n## Contributing\n\nContributions are welcome! Please read our contributing guidelines before submitting PRs.\n\n## Related\n\n- [Quorum PQC Node](../README.md) - The Quorum node with PQC support\n- [NIST FIPS 204](https://csrc.nist.gov/publications/detail/fips/204/final) - ML-DSA specification\n- [NIST FIPS 205](https://csrc.nist.gov/publications/detail/fips/205/final) - SLH-DSA specification\n- [BIP-39](https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki) - Mnemonic code standard\n- [BIP-350](https://github.com/bitcoin/bips/blob/master/bip-0350.mediawiki) - Bech32m specification\n","readmeFilename":"README.md","_rev":"1-c3dd8144e6ca58037ef9b20330087321"}