{"id":40669390,"url":"https://github.com/tea2x/quantum-purse-key-vault","last_synced_at":"2026-01-21T09:19:14.014Z","repository":{"id":289056109,"uuid":"969987870","full_name":"tea2x/quantum-purse-key-vault","owner":"tea2x","description":"A SPHINCS+ key management module for CKB blockchain","archived":false,"fork":false,"pushed_at":"2026-01-15T06:32:07.000Z","size":199,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-01-15T09:44:48.109Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://www.npmjs.com/package/quantum-purse-key-vault","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/tea2x.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-04-21T09:14:20.000Z","updated_at":"2026-01-15T06:25:08.000Z","dependencies_parsed_at":"2025-06-25T07:34:11.295Z","dependency_job_id":"f13036e4-6de0-45f3-8921-038a8984509a","html_url":"https://github.com/tea2x/quantum-purse-key-vault","commit_stats":null,"previous_names":["tea2x/quantum-purse-key-vault"],"tags_count":14,"template":false,"template_full_name":null,"purl":"pkg:github/tea2x/quantum-purse-key-vault","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tea2x%2Fquantum-purse-key-vault","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tea2x%2Fquantum-purse-key-vault/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tea2x%2Fquantum-purse-key-vault/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tea2x%2Fquantum-purse-key-vault/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tea2x","download_url":"https://codeload.github.com/tea2x/quantum-purse-key-vault/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tea2x%2Fquantum-purse-key-vault/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28630946,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-21T04:47:28.174Z","status":"ssl_error","status_checked_at":"2026-01-21T04:47:22.943Z","response_time":86,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-01-21T09:19:11.837Z","updated_at":"2026-01-21T09:19:13.997Z","avatar_url":"https://github.com/tea2x.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Quantum Purse key vault\n\nThis module provides a secure authentication interface to manage FIPS205 (formerly SPHINCS+) cryptographic keys for CKB blockchain using Rust and WebAssembly.\n\n###### \u003cu\u003eFeature list\u003c/u\u003e:\n\n| Feature               | Details              |\n|-----------------------|----------------------|\n| **Signature type**    | SPHINCS+             |\n| **Store model**       | Indexed DB           |\n| **Mnemonic standard** | Custom BIP39 English |\n| **Local encryption**  | AES256               |\n| **Key derivation**    | HKDF                 |\n| **Authentication**    | Password             |\n| **Password hashing**  | Scrypt               |\n\n### Mnemonic backup format\nBIP39 is chosen as the mnemonic backup format due to its user-friendliness and quantum resistance.\n\nSPHINCS+ offers 12 parameter sets, grouped by three security parameters: 128-bit, 192-bit, and 256-bit. These require seeds of 48 bytes, 72 bytes, and 96 bytes respectively used across key generation and signing. As BIP39 supports max 32 bytes so this library introduces a custom(combined) BIP39 mnemonic backup format for each security parameter of SPHINCS+ as below:\n\n|    SPHINCS+ security parameter      |  BIP39 entropy level  |   Word count    |\n|-------------------------------------|-----------------------|-----------------|\n|    128 bit ~ 48 bytes ~ 3*16 bytes  |       3*16 bytes      | 3*12 = 36 words |\n|    192 bit ~ 72 bytes ~ 3*24 bytes  |       3*24 bytes      | 3*18 = 54 words |\n|    256 bit ~ 96 bytes ~ 3*32 bytes  |       3*32 bytes      | 3*24 = 72 words |\n\n###### For example:\n- SHA2-256s will require users to back up 72 words of mnemonic phrase.\n- SHAKE-192s will require users to back up 54 words of mnemonic phrase.\n- SHA2-128f will require users to back up 36 words of mnemonic phrase.\n\n### Key Derivation Function\n\nFrom the single master seed, quantum-purse-key-vault can derive many child keys using Key Derivation Function(KDF). Pure Hash-based KDF is the top choice for this project. Although using [BIP32](https://en.bitcoin.it/wiki/BIP_0032) carefully (with only hardened key derivation and never generate ECDSA public keys) can satisfy however the benefits of the tricky usage at this point(2025) is unclear. Thus, a fresh start with HKDF seems better because it's simpler - meaning the implementation will be easier to audit.\n\n###### Key Tree:\n```\nmaster_seed\n   ├─ index 0 → sphincs+ key 1\n   ├─ index 1 → sphincs+ key 2\n   ├─ index 2 → sphincs+ key 3\n   └─ ...\n```\n\n###### Derivation Flow:\n```\nmaster_seed\n     │\n     ▼\n(seed_part1, seed_part2, seed_part3)\n     │\n     ├─ HKDF(\"ckb/quantum-purse/sphincs-plus/\", index)\n     │\n     ▼\n(sk_seed, sk_prf, pk_seed)\n     │\n     ├─ sphincs+_key_gen()\n     │\n     ▼\n(sphincs+ public_key, sphincs+ private_key)\n```\n\n### Dependency\n- Rust \u0026 Cargo\n- Wasm-pack\n- Npm\n\n### Build\n```shell\n# run build script\n./build.sh\n\n# test\ncargo test\n```\n\n### Package and publish\n```shell\ncd dist\nnpm pack\nnpm login\nnpm publish\n```\n\n### Usage example\n\nRefer to [QuantumPurse project](https://github.com/tea2x/quantum-purse-web-static.git).","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftea2x%2Fquantum-purse-key-vault","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftea2x%2Fquantum-purse-key-vault","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftea2x%2Fquantum-purse-key-vault/lists"}