quantum-resistant-rustykey 0.10.0 → 0.10.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/README.md +18 -16
  2. package/package.json +1 -1
package/README.md CHANGED
@@ -13,15 +13,15 @@ npm i quantum-resistant-rustykey
13
13
  ## Implementation status: Pre-production (stable for testing)
14
14
 
15
15
  - ***Recommendation***: Await v1.0.0 (following security audit) for production/regulated deployment.
16
- - includes NIST approved as well as riskier NIST 'on-ramp' variants eg SQISign
17
- - **ML-DSA** (ML-DSA-65, ML-DSA-87)
18
- - **FN-DSA** (FN-DSA-512, FN-DSA-1024)
19
- - **SQIsign** (Level 1, Level 3, Level 5)
20
- - **ML-KEM** (512, 768, 1024) using [mlkem-native](https://github.com/pq-code-package/mlkem-native).
16
+ - includes NIST approved and NIST "on-ramp" round 3 candidate SQISign
17
+ - **SQIsign** Level 1, Level 3, Level 5 NOT approved yet by NIST, refer [cose-sqisign] (https://datatracker.ietf.org/doc/draft-mott-cose-sqisign/)
18
+ - **ML-DSA** ML-DSA-65, ML-DSA-87
19
+ - **FN-DSA** FN-DSA-512, FN-DSA-1024
20
+ - **ML-KEM** 512, 768, 1024 using [mlkem-native](https://github.com/pq-code-package/mlkem-native).
21
21
 
22
- ### NOTE: Why we support SQISign when it is 'NIST-on-ramp' only
22
+ ### SQISign is 'NIST-on-ramp' only yet highly suitable for constrained-development use
23
23
  *TLDR; to help hurdle the "silent" barrier to post-quantum adoption: 1024-byte buffer limit in many existing FIDO2/WebAuthn implementations*
24
- - please see our IETF standards track draft for inclusion of SQISign [cose-sqisign](https://www.ietf.org/archive/id/draft-mott-cose-sqisign-03.html)
24
+ - support our IETF standards track draft and help move things along with SQISign [cose-sqisign](https://www.ietf.org/archive/id/draft-mott-cose-sqisign-03.html)
25
25
 
26
26
  #### WebAuthn PQC Signature size constraints
27
27
  Dilithium variants, and Falcon-1024 are physically incompatible with millions of existing FIDO2/WebAuthn authenticators that rely on the CTAP2 1024-byte buffer limit.
@@ -33,13 +33,13 @@ Dilithium variants, and Falcon-1024 are physically incompatible with millions of
33
33
  - At roughly 204 bytes, SQIsign is currently the only candidate that offers NIST-level (more accurately NIST-on-ramp-level) security safely within the 1024-byte limit alongside its necessary metadata.
34
34
 
35
35
  #### Critical use case example
36
- For mission-critical applications like low-latency augmented reality remote telesurgery, where ultra-low latency and hardware-rooted trust are non-negotiable. RustyKey® who financially support this repo and the npm package, required a WASM port of SQIsign specifically because the 204-byte signatures are the only PQC option that worked within their current hardware constraints, enabling immediate quantum-resistant public key ceremonies without breaking the existing WebAuthn ecosystem.
36
+ For constrained-device or mission-critical applications like low-latency augmented reality remote telesurgery, ultra-low latency and hardware-rooted trust are non-negotiable. RustyKey® who financially support this repo and the npm package, required a WASM port of SQIsign specifically as the small signatures is the only PQC option that works with current demanding hardware constraints, with the practical advantage of near-immediate quantum-resistant public key ceremonies without breaking the existing WebAuthn ecosystem.
37
37
 
38
38
  ## Broad user-friendly live example testbed and playground
39
39
 
40
40
  Live at **[pqc.rustykey.me](https://pqc.rustykey.me)** — a test environment where general-purpose users and seasoned cryptanalysts can encrypt and decrypt and play, using all three variants of KEM and test WebAuthn implementations using the signature algorithms.
41
41
  - lattice-based vs isogeny: run tests to check: Montgomery constant times, the surprising difference in time taken for the various steps
42
- - all are encouraged to suggest improvements, and help a wider audience see how PQC works under the hood and adopt it more quickly and without breaking existing infrastructure.
42
+ - any and all who are interested kicking the tires of SQISign and other PQC algorithms are encouraged to suggest improvements. The playground's goal is to help a wider audience see how PQC works under the hood, find bugs, suggest improvements and help adopt it more quickly without breaking existing infrastructure.
43
43
 
44
44
  ## Security assurance and verification
45
45
 
@@ -67,11 +67,13 @@ The three parameter sets (512/768/1024) use the same implementation family and d
67
67
  - This package builds the same source for all three variants by changing only `MLK_CONFIG_PARAMETER_SET` in `wasm/Makefile`.
68
68
  - Variant sizes/parameters are defined upstream in `mlkem/mlkem_native.h`.
69
69
 
70
- ### Why we mix C => emscripten with Rust => wasm-bindgen for web-assembly module creation
70
+ ### We predominantly use C, not Rust for our web-assembly (WASM) modules: Why?
71
71
 
72
- Current status in this repository: the shipped cryptographic WASM modules are built via Emscripten from vetted C/C++ upstream code, while Rust/TypeScript is primarily used for package-level ergonomics and integration layers.
72
+ It seems all the cool cryptanalyst kids nowadays rely on Rust's proven memory and concurrency safety and high performance without a Garbage Collector. As outlined below, current way forward in this repository: the shipped cryptographic WASM modules will continue to be built via Emscripten from vetted C/C++ upstream code, while Rust/TypeScript will be primarily used for package-level ergonomics and integration layers.
73
73
 
74
- Increasingly, developers favor Rust => wasm-bindgen over C => emscripten for Rust's superior compile-time memory safety...and leaning on Rust is implied in our brand! RustyKey® current dual approach is a way to balance performance, security-vetted logic, and web compatibility. Some technical factors may make C => emscripten approach acceptable and, in some cases, preferable for post-quantum cryptography:
74
+ Leaning on Rust is implied in our brand, so this deserves a bit of explanation! Many developers new to web-assembly migrations (i.e. from other languages) don't realize that final WebAssembly (WASM) bytecode looks completely different depending on if we start with C or Rust!
75
+
76
+ RustyKey® current dual approach is a way to balance performance, security-vetted logic, and web compatibility. Some technical factors may make C => emscripten approach acceptable and, in some cases, preferable for post-quantum cryptography:
75
77
 
76
78
  - upstream Reliability: Many NIST-standardized PQC algorithms (like ML-KEM) have highly optimized, audited, and "constant-time" reference implementations written in C. Using C => Emscripten allows RustyKey® to port these vetted "upstream" sources directly, reducing the risk of introducing new implementation bugs during a full rewrite into Rust.
77
79
 
@@ -85,7 +87,7 @@ Increasingly, developers favor Rust => wasm-bindgen over C => emscripten for Rus
85
87
 
86
88
  - Practical Side-Channel Discipline in Rust is non-trivial: Rust memory safety does not automatically guarantee constant-time behavior. Extra care is still required around branching, indexing, optimizer behavior, allocations, and panic paths, especially when targeting wasm32.
87
89
 
88
- - Long-term Strategy: once a Rust implementation reaches parity in test vectors, profiling, and side-channel review, migrating selected modules can reduce FFI complexity. Until then, Emscripten can be the lower-risk route for production-adjacent cryptographic primitives.
90
+ - Long-term Strategy: once a Rust implementation reaches parity in test vectors, profiling, and side-channel review, migrating selected modules can reduce FFI complexity. Until then, Emscripten appears to be the lower-risk route for production-adjacent cryptographic primitives.
89
91
 
90
92
 
91
93
  ### Why we offer WASM implementations of SQISign (NIST on-ramp only) alongside established, standards-track Falcon and Dilithium?
@@ -101,7 +103,7 @@ Increasingly, developers favor Rust => wasm-bindgen over C => emscripten for Rus
101
103
  - SQISign has smaller signatures: Short Quaternion Isogeny Signatures. This repo and associated npm package is primarily a WASM-based project targeting web or mobile, where signature size is a massive bottleneck for bandwidth.
102
104
 
103
105
 
104
- ### How users can independently verify all algorithms and variants
106
+ ### How to independently verify all algorithms and variants
105
107
 
106
108
  From the repository root:
107
109
 
@@ -129,7 +131,7 @@ Notes:
129
131
  - signature algorithms:
130
132
  - FN-DSA (Falcon-512, Falcon-1024)
131
133
  - ML-DSA (Dilithium variants)
132
- - SQISign
134
+ - SQISign Team
133
135
  - module-lattice-based key-encapsulation mechanism
134
136
  - ML-KEM
135
137
  - approach adapted from Dmitry Chestnykh's `mlkem-wasm`: https://github.com/dchest/mlkem-wasm
@@ -362,7 +364,7 @@ async function main() {
362
364
  ```
363
365
 
364
366
  > [!NOTE]
365
- > **SQIsign Performance**: Level 1 signing is extremely CPU-intensive (can take seconds to minutes depending on hardware). It is recommended for "sign-once, verify-many" scenarios like certificates or firmware updates.
367
+ > **SQIsign Performance**: Level 1 signing is CPU-intensive (can take seconds to minutes depending on hardware). We recommend "sign-once, verify-many" scenarios for certificates or firmware updates.
366
368
 
367
369
  ## Browser example (local)
368
370
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "quantum-resistant-rustykey",
3
- "version": "0.10.0",
3
+ "version": "0.10.1",
4
4
  "description": "WebAssembly post-quantum-resistant tools for web",
5
5
  "author": "Antony R Mott <a@auditcanary.com> (https://rustykey.app)",
6
6
  "license": "ISC",