@7h3/protocol 0.1.2 → 0.5.0

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 (276) hide show
  1. package/.dockerignore +19 -0
  2. package/.github/dependabot.yml +32 -0
  3. package/.github/workflows/ci.yml +31 -0
  4. package/.github/workflows/publish.yml +59 -0
  5. package/.github/workflows/scorecard.yml +37 -0
  6. package/7h3.example.yaml +125 -0
  7. package/CHANGELOG.md +152 -0
  8. package/CONTRIBUTING.md +82 -0
  9. package/Dockerfile +73 -0
  10. package/GOVERNANCE.md +62 -0
  11. package/README.md +1317 -6
  12. package/SECURITY.md +70 -0
  13. package/bench-results/replay-cache-full-1777891033256.json +10 -0
  14. package/bench-results/replay-cache-full-1777896317488.json +10 -0
  15. package/bench-results/replay-cache-full-1777900993184.json +10 -0
  16. package/bench-results/replay-cache-full-1777901019285.json +10 -0
  17. package/bench-results/replay-cache-quick-1777870170126.json +10 -0
  18. package/bench-results/signature-profiles-quick-1775875160079.json +85 -0
  19. package/bench-results/signature-profiles-quick-1775983539716.json +85 -0
  20. package/bench-results/signature-profiles-quick-1776237913190.json +85 -0
  21. package/bench-results/wire-codecs-full-1777891019803.json +93 -0
  22. package/bench-results/wire-codecs-full-1777896260964.json +93 -0
  23. package/bench-results/wire-codecs-full-1777901004247.json +93 -0
  24. package/bench-results/wire-codecs-quick-1775972879056.json +93 -0
  25. package/bench-results/wire-codecs-quick-1775983541111.json +93 -0
  26. package/bench-results/wire-codecs-quick-1776237914299.json +93 -0
  27. package/bench-results/wire-codecs-quick-1777841285236.json +93 -0
  28. package/bench-results/wire-codecs-quick-1777841321772.json +93 -0
  29. package/bench-results/wire-codecs-quick-1777841330408.json +93 -0
  30. package/bench-results/wire-codecs-quick-1777852886082.json +93 -0
  31. package/bench-results/wire-codecs-quick-1777852988773.json +93 -0
  32. package/bench-results/wire-codecs-quick-1777870188095.json +93 -0
  33. package/bench-results/wire-codecs-quick-1777870263918.json +93 -0
  34. package/bench-results/wire-codecs-quick-1777870455034.json +93 -0
  35. package/bench-results/wire-codecs-quick-1778816163081.json +93 -0
  36. package/bench-results/wire-codecs-quick-1778843936130.json +93 -0
  37. package/bin/7h3.ts +406 -0
  38. package/conformance/7h3_v0_1.json +77 -0
  39. package/conformance/7h3_v0_1_binary.json +20 -0
  40. package/conformance/aip_v0_1_binary.json +20 -0
  41. package/docker-compose.yaml +77 -0
  42. package/docs/ADOPTION_PLAN.md +120 -0
  43. package/docs/AGENTS.md +77 -0
  44. package/docs/AIP_RFC_v0.1.md +97 -0
  45. package/docs/AI_DECISION_CARD.md +122 -0
  46. package/docs/AI_RUNTIME_POLICY.json +126 -0
  47. package/docs/AI_RUNTIME_POLICY.yaml +110 -0
  48. package/docs/BACKPRESSURE_TUNING.md +65 -0
  49. package/docs/BENCHMARK_CLAIM_MATRIX.md +42 -0
  50. package/docs/BENCHMARK_REPORT_TEMPLATE.md +169 -0
  51. package/docs/BINARY_CODEC_BENCH.md +23 -0
  52. package/docs/CLEAN_CLONE_RUNBOOK.md +36 -0
  53. package/docs/CLOCK_SKEW_POLICY.md +30 -0
  54. package/docs/DISTRIBUTED_REPLAY.md +142 -0
  55. package/docs/FUZZ_CAMPAIGN.md +121 -0
  56. package/docs/GATEWAY.md +195 -0
  57. package/docs/KEY_MANAGEMENT_POLICY.md +53 -0
  58. package/docs/KEY_REVOCATION.md +69 -0
  59. package/docs/MCP_WRAPPER.md +159 -0
  60. package/docs/MIGRATION_GUIDE.md +40 -0
  61. package/docs/OPERATORS.md +184 -0
  62. package/docs/PERF_REGRESSION_POLICY.md +34 -0
  63. package/docs/PROJECT_EXAMINATION_2026-05-31.md +219 -0
  64. package/docs/RELEASE_BENCHMARK_REPORT_2026-05-15.md +135 -0
  65. package/docs/RELEASE_GATE.md +25 -0
  66. package/docs/RELEASE_NOTES_v0.1.0.md +54 -0
  67. package/docs/SECURITY_REVIEW_2026-06-05.md +165 -0
  68. package/docs/TELEMETRY.md +41 -0
  69. package/docs/THREAT_MODEL.md +89 -0
  70. package/docs/VERSIONING_POLICY.md +30 -0
  71. package/docs/assets/banner-github.png +0 -0
  72. package/docs/assets/banner.png +0 -0
  73. package/docs/assets/banner.svg +123 -0
  74. package/eslint.config.js +15 -0
  75. package/fuzz/ts/harness-decode.ts +136 -0
  76. package/fuzz/ts/harness-verify.ts +121 -0
  77. package/fuzz/ts/run.ts +35 -0
  78. package/mcp-server/README.md +38 -0
  79. package/mcp-server/package-lock.json +1187 -0
  80. package/mcp-server/package.json +35 -0
  81. package/mcp-server/src/index.ts +236 -0
  82. package/mcp-server/tsconfig.json +14 -0
  83. package/package.json +121 -13
  84. package/scripts/aip-framework-quickstart.ts +110 -0
  85. package/scripts/aip-mcp-gateway.ts +38 -0
  86. package/scripts/aip-mcp-wrap-demo.ts +72 -0
  87. package/scripts/aip-quickstart.ts +60 -0
  88. package/scripts/bench-diff.ts +118 -0
  89. package/scripts/bench-protocol-e2e.ts +937 -0
  90. package/scripts/bench-protocol-openloop.ts +1397 -0
  91. package/scripts/bench-replay-cache.ts +76 -0
  92. package/scripts/bench-signature-profiles.ts +180 -0
  93. package/scripts/bench-wire-codecs.ts +161 -0
  94. package/scripts/build-binary-conformance.ts +36 -0
  95. package/scripts/build-release-dashboard.ts +175 -0
  96. package/scripts/canary-rollout.ts +38 -0
  97. package/scripts/mcpGatewayCli.test.ts +116 -0
  98. package/scripts/prepare-aip-package.ts +88 -0
  99. package/scripts/regen-conformance-sigs.ts +18 -0
  100. package/scripts/release-gate.ts +19 -0
  101. package/scripts/validate-runtime-policy.ts +18 -0
  102. package/sdk/browser/index.test.ts +162 -0
  103. package/sdk/browser/index.ts +257 -0
  104. package/sdk/browser/package.json +13 -0
  105. package/sdk/go/cbor.go +551 -0
  106. package/sdk/go/cbor_test.go +232 -0
  107. package/sdk/go/encryption.go +280 -0
  108. package/sdk/go/encryption_test.go +318 -0
  109. package/sdk/go/go.mod +7 -0
  110. package/sdk/go/go.sum +4 -0
  111. package/sdk/go/http.go +135 -0
  112. package/sdk/go/protocol.go +324 -0
  113. package/sdk/go/protocol_test.go +334 -0
  114. package/sdk/go/replay.go +121 -0
  115. package/sdk/go/replay_test.go +149 -0
  116. package/sdk/go/webhook.go +136 -0
  117. package/sdk/pq/package-lock.json +1358 -0
  118. package/sdk/pq/package.json +42 -0
  119. package/sdk/pq/src/index.test.ts +143 -0
  120. package/sdk/pq/src/index.ts +166 -0
  121. package/sdk/pq/tsconfig.json +14 -0
  122. package/sdk/pq/vitest.config.ts +7 -0
  123. package/sdk/python/README.md +18 -0
  124. package/sdk/python/protocol_7h3/__init__.py +46 -0
  125. package/sdk/python/protocol_7h3/encryption.py +252 -0
  126. package/sdk/python/protocol_7h3/http.py +212 -0
  127. package/sdk/python/protocol_7h3/keys.py +149 -0
  128. package/sdk/python/protocol_7h3/pq.py +244 -0
  129. package/sdk/python/protocol_7h3/protocol.py +525 -0
  130. package/sdk/python/protocol_7h3/queue.py +118 -0
  131. package/sdk/python/protocol_7h3/replay.py +98 -0
  132. package/sdk/python/protocol_7h3/webhook.py +116 -0
  133. package/sdk/python/pyproject.toml +40 -0
  134. package/sdk/python/tests/test_conformance.py +110 -0
  135. package/sdk/python/tests/test_encryption.py +206 -0
  136. package/sdk/python/tests/test_http.py +305 -0
  137. package/sdk/python/tests/test_keys.py +417 -0
  138. package/sdk/python/tests/test_queue.py +120 -0
  139. package/sdk/python/tests/test_webhook.py +345 -0
  140. package/sdk/rust/Cargo.lock +371 -0
  141. package/sdk/rust/Cargo.toml +25 -0
  142. package/sdk/rust/README.md +31 -0
  143. package/sdk/rust/fuzz/Cargo.toml +29 -0
  144. package/sdk/rust/fuzz/fuzz_targets/fuzz_canonicalize.rs +46 -0
  145. package/sdk/rust/fuzz/fuzz_targets/fuzz_decode.rs +11 -0
  146. package/sdk/rust/src/bin/aip_mcp_gateway.rs +59 -0
  147. package/sdk/rust/src/http.rs +145 -0
  148. package/sdk/rust/src/keys.rs +161 -0
  149. package/sdk/rust/src/lib.rs +688 -0
  150. package/sdk/rust/src/queue.rs +79 -0
  151. package/sdk/rust/src/webhook.rs +86 -0
  152. package/sdk/rust/tests/conformance.rs +148 -0
  153. package/sdk/rust/tests/gateway.rs +130 -0
  154. package/sdk/rust/tests/http_webhook_queue.rs +201 -0
  155. package/sdk/rust/tests/keys.rs +189 -0
  156. package/sdk/threshold/index.d.ts +68 -0
  157. package/sdk/threshold/index.d.ts.map +1 -0
  158. package/sdk/threshold/index.js +254 -0
  159. package/sdk/threshold/package-lock.json +1361 -0
  160. package/sdk/threshold/package.json +39 -0
  161. package/sdk/threshold/src/index.d.ts +68 -0
  162. package/sdk/threshold/src/index.d.ts.map +1 -0
  163. package/sdk/threshold/src/index.js +254 -0
  164. package/sdk/threshold/src/index.test.ts +238 -0
  165. package/sdk/threshold/src/index.ts +355 -0
  166. package/sdk/threshold/tsconfig.json +19 -0
  167. package/sdk/threshold/vitest.config.ts +12 -0
  168. package/src/agentAdapter.test.ts +48 -0
  169. package/src/agentAdapter.ts +56 -0
  170. package/src/auditLog.test.ts +145 -0
  171. package/src/auditLog.ts +147 -0
  172. package/src/capability.test.ts +504 -0
  173. package/src/capability.ts +380 -0
  174. package/src/cborCodec.test.ts +263 -0
  175. package/src/cborCodec.ts +339 -0
  176. package/src/conformance.test.ts +136 -0
  177. package/src/conformanceVectors.ts +99 -0
  178. package/src/encryption.test.ts +206 -0
  179. package/src/encryption.ts +245 -0
  180. package/src/envelopeCbor.ts +140 -0
  181. package/src/frameworkAdapters.test.ts +290 -0
  182. package/src/frameworkAdapters.ts +261 -0
  183. package/src/gateway.test.ts +343 -0
  184. package/src/gateway.ts +246 -0
  185. package/src/grpcBinding.test.ts +211 -0
  186. package/src/grpcBinding.ts +103 -0
  187. package/src/httpBinding.test.ts +376 -0
  188. package/src/httpBinding.ts +189 -0
  189. package/src/index.ts +39 -0
  190. package/src/keyInfra.test.ts +278 -0
  191. package/src/keyInfra.ts +228 -0
  192. package/src/keyRegistry.ts +59 -0
  193. package/src/keyRotation.test.ts +78 -0
  194. package/src/keyRotation.ts +72 -0
  195. package/src/mcpGateway.test.ts +129 -0
  196. package/src/mcpGateway.ts +250 -0
  197. package/src/mcpTransports.test.ts +92 -0
  198. package/src/mcpTransports.ts +169 -0
  199. package/src/mcpWrapper.test.ts +179 -0
  200. package/src/mcpWrapper.ts +206 -0
  201. package/src/otel.ts +136 -0
  202. package/src/policyEnforcer.test.ts +99 -0
  203. package/src/policyEnforcer.ts +169 -0
  204. package/src/policyTelemetryFeedback.test.ts +25 -0
  205. package/src/policyTelemetryFeedback.ts +38 -0
  206. package/src/protocol.bench.ts +37 -0
  207. package/{protocol.d.ts → src/protocol.d.ts} +2 -1
  208. package/src/protocol.d.ts.map +1 -0
  209. package/src/protocol.js +294 -0
  210. package/src/protocol.test.ts +155 -0
  211. package/src/protocol.ts +414 -0
  212. package/src/protocolAgent.test.ts +105 -0
  213. package/src/protocolAgent.ts +169 -0
  214. package/src/protocolBinary.test.ts +165 -0
  215. package/src/protocolBinary.ts +312 -0
  216. package/src/protocolCapabilities.ts +70 -0
  217. package/src/protocolFuzz.advanced.test.ts +235 -0
  218. package/src/protocolFuzz.test.ts +111 -0
  219. package/src/protocolNegative.test.ts +97 -0
  220. package/src/protocolReplay.test.ts +71 -0
  221. package/src/protocolReplay.ts +194 -0
  222. package/src/protocolTransport.test.ts +556 -0
  223. package/src/protocolTransport.ts +483 -0
  224. package/src/queueBinding.test.ts +130 -0
  225. package/src/queueBinding.ts +102 -0
  226. package/src/rateLimiter.test.ts +96 -0
  227. package/src/rateLimiter.ts +46 -0
  228. package/src/redisClient.ts +140 -0
  229. package/src/redisIntegration.test.ts +134 -0
  230. package/src/replayStores.test.ts +273 -0
  231. package/src/replayStores.ts +215 -0
  232. package/src/revocation.test.ts +98 -0
  233. package/src/revocation.ts +0 -0
  234. package/src/routePolicy.test.ts +87 -0
  235. package/src/routePolicy.ts +72 -0
  236. package/src/runtimePolicy.test.ts +49 -0
  237. package/src/runtimePolicy.ts +81 -0
  238. package/src/runtimePolicyManager.test.ts +29 -0
  239. package/src/runtimePolicyManager.ts +50 -0
  240. package/src/runtimePolicyPresets.ts +43 -0
  241. package/src/signedResponse.test.ts +111 -0
  242. package/src/signedResponse.ts +83 -0
  243. package/src/stream.test.ts +254 -0
  244. package/src/stream.ts +417 -0
  245. package/src/telemetry.test.ts +251 -0
  246. package/src/telemetry.ts +299 -0
  247. package/src/webhookBinding.test.ts +144 -0
  248. package/src/webhookBinding.ts +115 -0
  249. package/src/wsBinding.test.ts +221 -0
  250. package/src/wsBinding.ts +200 -0
  251. package/tsconfig.json +15 -0
  252. package/tsconfig.lib.json +23 -0
  253. package/vite.lib.config.ts +16 -0
  254. package/vitest.config.ts +11 -0
  255. package/agentAdapter.d.ts +0 -26
  256. package/conformanceVectors.d.ts +0 -20
  257. package/frameworkAdapters.d.ts +0 -72
  258. package/index.d.ts +0 -20
  259. package/index.js +0 -1702
  260. package/keyRotation.d.ts +0 -20
  261. package/mcpGateway.d.ts +0 -37
  262. package/mcpTransports.d.ts +0 -62
  263. package/mcpWrapper.d.ts +0 -83
  264. package/policyEnforcer.d.ts +0 -50
  265. package/policyTelemetryFeedback.d.ts +0 -11
  266. package/protocolAgent.d.ts +0 -58
  267. package/protocolBinary.d.ts +0 -8
  268. package/protocolCapabilities.d.ts +0 -24
  269. package/protocolReplay.d.ts +0 -35
  270. package/protocolTransport.d.ts +0 -73
  271. package/redisClient.d.ts +0 -49
  272. package/replayStores.d.ts +0 -32
  273. package/revocation.d.ts +0 -71
  274. package/runtimePolicy.d.ts +0 -24
  275. package/runtimePolicyManager.d.ts +0 -15
  276. package/runtimePolicyPresets.d.ts +0 -11
package/SECURITY.md ADDED
@@ -0,0 +1,70 @@
1
+ # Security Policy
2
+
3
+ ## Reporting a Vulnerability
4
+
5
+ Please do not open a GitHub Issue for security findings. Use coordinated disclosure instead.
6
+
7
+ **Send private reports to:** tech@mysms.promo
8
+ **Subject line:** `[AIP Security] <brief description>`
9
+
10
+ ### What to include
11
+
12
+ A useful report contains:
13
+
14
+ - A clear description of the vulnerability and which component it affects
15
+ - Steps to reproduce, ideally as a minimal test case or fixture
16
+ - Your assessment of the impact (confidentiality, integrity, availability, scope)
17
+ - The affected versions (check `package.json` version and the wire version `aip/0.1`)
18
+ - Any suggested fix or mitigation you have in mind (optional but appreciated)
19
+
20
+ Reports that include a conformance vector demonstrating the issue are especially
21
+ helpful and make the triage process faster.
22
+
23
+ ## Response Timeline
24
+
25
+ | Event | Target |
26
+ |---|---|
27
+ | Acknowledgement | 48 hours |
28
+ | Triage and severity assignment | 5 business days |
29
+ | Patch for critical/high severity | 14 days from confirmation |
30
+ | Patch for medium/low severity | 60 days from confirmation |
31
+ | Public disclosure | After patch is released and verified |
32
+
33
+ We ask that reporters hold off on public disclosure until a patch is available.
34
+ If the 14-day critical window is going to slip, we will contact you to agree on
35
+ an extended timeline or coordinated partial disclosure.
36
+
37
+ ## Scope
38
+
39
+ The following are in scope:
40
+
41
+ - Envelope signing and verification (`src/aip/`)
42
+ - Canonicalization logic and determinism guarantees
43
+ - Replay-safety (nonce and timestamp validation)
44
+ - Wire format parsing in all three runtimes (TypeScript, Python, Rust)
45
+ - Intent vocabulary validation
46
+
47
+ Out of scope: third-party dependencies (report those upstream), benchmark
48
+ scripts, and documentation typos.
49
+
50
+ ## Audit Status
51
+
52
+ No independent third-party security audit has been performed on this codebase
53
+ as of the current release. The protocol design has been reviewed by the
54
+ maintainer against known attack classes for signed messaging systems, but that
55
+ is not a substitute for a formal audit. Reproductions of conformance vectors
56
+ that reveal edge-case signing or deserialization behavior are welcome and
57
+ treated as high-value contributions.
58
+
59
+ ## Hall of Thanks
60
+
61
+ Researchers who report valid, confirmed vulnerabilities will be acknowledged
62
+ here (with their permission).
63
+
64
+ _No entries yet._
65
+
66
+ ---
67
+
68
+ Maintainer: [@IceMasterT](https://github.com/IceMasterT)
69
+ Package: `@7h3/protocol`
70
+ License: MIT
@@ -0,0 +1,10 @@
1
+ {
2
+ "generatedAt": "2026-05-04T10:37:13.242Z",
3
+ "profile": "full",
4
+ "iterations": 500000,
5
+ "batchSize": 128,
6
+ "singleOpsPerSecond": 2046707.947,
7
+ "batchOpsPerSecond": 1936866.811,
8
+ "singleUsPerOp": 0.489,
9
+ "batchUsPerOp": 0.516
10
+ }
@@ -0,0 +1,10 @@
1
+ {
2
+ "generatedAt": "2026-05-04T12:05:17.474Z",
3
+ "profile": "full",
4
+ "iterations": 500000,
5
+ "batchSize": 128,
6
+ "singleOpsPerSecond": 2196802.03,
7
+ "batchOpsPerSecond": 2513299.501,
8
+ "singleUsPerOp": 0.455,
9
+ "batchUsPerOp": 0.398
10
+ }
@@ -0,0 +1,10 @@
1
+ {
2
+ "generatedAt": "2026-05-04T13:23:13.169Z",
3
+ "profile": "full",
4
+ "iterations": 500000,
5
+ "batchSize": 128,
6
+ "singleOpsPerSecond": 1943753.028,
7
+ "batchOpsPerSecond": 2330929.665,
8
+ "singleUsPerOp": 0.514,
9
+ "batchUsPerOp": 0.429
10
+ }
@@ -0,0 +1,10 @@
1
+ {
2
+ "generatedAt": "2026-05-04T13:23:39.285Z",
3
+ "profile": "full",
4
+ "iterations": 500000,
5
+ "batchSize": 128,
6
+ "singleOpsPerSecond": 1650105.21,
7
+ "batchOpsPerSecond": 2241347.099,
8
+ "singleUsPerOp": 0.606,
9
+ "batchUsPerOp": 0.446
10
+ }
@@ -0,0 +1,10 @@
1
+ {
2
+ "generatedAt": "2026-05-04T04:49:30.121Z",
3
+ "profile": "quick",
4
+ "iterations": 50000,
5
+ "batchSize": 32,
6
+ "singleOpsPerSecond": 520177.319,
7
+ "batchOpsPerSecond": 140227.322,
8
+ "singleUsPerOp": 1.922,
9
+ "batchUsPerOp": 7.131
10
+ }
@@ -0,0 +1,85 @@
1
+ {
2
+ "generatedAt": "2026-04-11T02:39:20.079Z",
3
+ "profile": "quick",
4
+ "iterations": 2000,
5
+ "payloadSizes": [
6
+ 256,
7
+ 1024,
8
+ 4096,
9
+ 16384
10
+ ],
11
+ "results": [
12
+ {
13
+ "profile": "quick",
14
+ "payloadBytes": 256,
15
+ "algorithm": "HS256",
16
+ "signUsPerOp": 16.5,
17
+ "verifyUsPerOp": 14.176,
18
+ "signOpsPerSecond": 60606.367,
19
+ "verifyOpsPerSecond": 70539.362
20
+ },
21
+ {
22
+ "profile": "quick",
23
+ "payloadBytes": 256,
24
+ "algorithm": "ED25519",
25
+ "signUsPerOp": 45.6,
26
+ "verifyUsPerOp": 119.231,
27
+ "signOpsPerSecond": 21929.753,
28
+ "verifyOpsPerSecond": 8387.068
29
+ },
30
+ {
31
+ "profile": "quick",
32
+ "payloadBytes": 1024,
33
+ "algorithm": "HS256",
34
+ "signUsPerOp": 23.745,
35
+ "verifyUsPerOp": 18.396,
36
+ "signOpsPerSecond": 42113.324,
37
+ "verifyOpsPerSecond": 54360.747
38
+ },
39
+ {
40
+ "profile": "quick",
41
+ "payloadBytes": 1024,
42
+ "algorithm": "ED25519",
43
+ "signUsPerOp": 51.284,
44
+ "verifyUsPerOp": 106.092,
45
+ "signOpsPerSecond": 19499.138,
46
+ "verifyOpsPerSecond": 9425.777
47
+ },
48
+ {
49
+ "profile": "quick",
50
+ "payloadBytes": 4096,
51
+ "algorithm": "HS256",
52
+ "signUsPerOp": 18.235,
53
+ "verifyUsPerOp": 20.365,
54
+ "signOpsPerSecond": 54839.636,
55
+ "verifyOpsPerSecond": 49103.017
56
+ },
57
+ {
58
+ "profile": "quick",
59
+ "payloadBytes": 4096,
60
+ "algorithm": "ED25519",
61
+ "signUsPerOp": 53.216,
62
+ "verifyUsPerOp": 101.756,
63
+ "signOpsPerSecond": 18791.24,
64
+ "verifyOpsPerSecond": 9827.469
65
+ },
66
+ {
67
+ "profile": "quick",
68
+ "payloadBytes": 16384,
69
+ "algorithm": "HS256",
70
+ "signUsPerOp": 33.59,
71
+ "verifyUsPerOp": 32.805,
72
+ "signOpsPerSecond": 29770.829,
73
+ "verifyOpsPerSecond": 30483.215
74
+ },
75
+ {
76
+ "profile": "quick",
77
+ "payloadBytes": 16384,
78
+ "algorithm": "ED25519",
79
+ "signUsPerOp": 96.924,
80
+ "verifyUsPerOp": 141.141,
81
+ "signOpsPerSecond": 10317.338,
82
+ "verifyOpsPerSecond": 7085.133
83
+ }
84
+ ]
85
+ }
@@ -0,0 +1,85 @@
1
+ {
2
+ "generatedAt": "2026-04-12T08:45:39.716Z",
3
+ "profile": "quick",
4
+ "iterations": 2000,
5
+ "payloadSizes": [
6
+ 256,
7
+ 1024,
8
+ 4096,
9
+ 16384
10
+ ],
11
+ "results": [
12
+ {
13
+ "profile": "quick",
14
+ "payloadBytes": 256,
15
+ "algorithm": "HS256",
16
+ "signUsPerOp": 17.09,
17
+ "verifyUsPerOp": 16.676,
18
+ "signOpsPerSecond": 58514.475,
19
+ "verifyOpsPerSecond": 59965.552
20
+ },
21
+ {
22
+ "profile": "quick",
23
+ "payloadBytes": 256,
24
+ "algorithm": "ED25519",
25
+ "signUsPerOp": 48.942,
26
+ "verifyUsPerOp": 129.521,
27
+ "signOpsPerSecond": 20432.528,
28
+ "verifyOpsPerSecond": 7720.783
29
+ },
30
+ {
31
+ "profile": "quick",
32
+ "payloadBytes": 1024,
33
+ "algorithm": "HS256",
34
+ "signUsPerOp": 16.402,
35
+ "verifyUsPerOp": 13.4,
36
+ "signOpsPerSecond": 60968.249,
37
+ "verifyOpsPerSecond": 74629.015
38
+ },
39
+ {
40
+ "profile": "quick",
41
+ "payloadBytes": 1024,
42
+ "algorithm": "ED25519",
43
+ "signUsPerOp": 41.484,
44
+ "verifyUsPerOp": 106.096,
45
+ "signOpsPerSecond": 24105.829,
46
+ "verifyOpsPerSecond": 9425.432
47
+ },
48
+ {
49
+ "profile": "quick",
50
+ "payloadBytes": 4096,
51
+ "algorithm": "HS256",
52
+ "signUsPerOp": 41.471,
53
+ "verifyUsPerOp": 21.896,
54
+ "signOpsPerSecond": 24113.328,
55
+ "verifyOpsPerSecond": 45669.707
56
+ },
57
+ {
58
+ "profile": "quick",
59
+ "payloadBytes": 4096,
60
+ "algorithm": "ED25519",
61
+ "signUsPerOp": 53.73,
62
+ "verifyUsPerOp": 118.702,
63
+ "signOpsPerSecond": 18611.446,
64
+ "verifyOpsPerSecond": 8424.459
65
+ },
66
+ {
67
+ "profile": "quick",
68
+ "payloadBytes": 16384,
69
+ "algorithm": "HS256",
70
+ "signUsPerOp": 37.261,
71
+ "verifyUsPerOp": 39.437,
72
+ "signOpsPerSecond": 26837.366,
73
+ "verifyOpsPerSecond": 25356.841
74
+ },
75
+ {
76
+ "profile": "quick",
77
+ "payloadBytes": 16384,
78
+ "algorithm": "ED25519",
79
+ "signUsPerOp": 120.929,
80
+ "verifyUsPerOp": 163.363,
81
+ "signOpsPerSecond": 8269.337,
82
+ "verifyOpsPerSecond": 6121.336
83
+ }
84
+ ]
85
+ }
@@ -0,0 +1,85 @@
1
+ {
2
+ "generatedAt": "2026-04-15T07:25:13.190Z",
3
+ "profile": "quick",
4
+ "iterations": 2000,
5
+ "payloadSizes": [
6
+ 256,
7
+ 1024,
8
+ 4096,
9
+ 16384
10
+ ],
11
+ "results": [
12
+ {
13
+ "profile": "quick",
14
+ "payloadBytes": 256,
15
+ "algorithm": "HS256",
16
+ "signUsPerOp": 22.028,
17
+ "verifyUsPerOp": 16.82,
18
+ "signOpsPerSecond": 45396.554,
19
+ "verifyOpsPerSecond": 59452.295
20
+ },
21
+ {
22
+ "profile": "quick",
23
+ "payloadBytes": 256,
24
+ "algorithm": "ED25519",
25
+ "signUsPerOp": 46.164,
26
+ "verifyUsPerOp": 103.618,
27
+ "signOpsPerSecond": 21662.042,
28
+ "verifyOpsPerSecond": 9650.834
29
+ },
30
+ {
31
+ "profile": "quick",
32
+ "payloadBytes": 1024,
33
+ "algorithm": "HS256",
34
+ "signUsPerOp": 12.433,
35
+ "verifyUsPerOp": 12.785,
36
+ "signOpsPerSecond": 80430.499,
37
+ "verifyOpsPerSecond": 78216.853
38
+ },
39
+ {
40
+ "profile": "quick",
41
+ "payloadBytes": 1024,
42
+ "algorithm": "ED25519",
43
+ "signUsPerOp": 37.853,
44
+ "verifyUsPerOp": 98.984,
45
+ "signOpsPerSecond": 26417.71,
46
+ "verifyOpsPerSecond": 10102.674
47
+ },
48
+ {
49
+ "profile": "quick",
50
+ "payloadBytes": 4096,
51
+ "algorithm": "HS256",
52
+ "signUsPerOp": 31.288,
53
+ "verifyUsPerOp": 21.144,
54
+ "signOpsPerSecond": 31961.127,
55
+ "verifyOpsPerSecond": 47295.763
56
+ },
57
+ {
58
+ "profile": "quick",
59
+ "payloadBytes": 4096,
60
+ "algorithm": "ED25519",
61
+ "signUsPerOp": 52.753,
62
+ "verifyUsPerOp": 108.71,
63
+ "signOpsPerSecond": 18956.391,
64
+ "verifyOpsPerSecond": 9198.782
65
+ },
66
+ {
67
+ "profile": "quick",
68
+ "payloadBytes": 16384,
69
+ "algorithm": "HS256",
70
+ "signUsPerOp": 36.642,
71
+ "verifyUsPerOp": 32.576,
72
+ "signOpsPerSecond": 27290.862,
73
+ "verifyOpsPerSecond": 30697.597
74
+ },
75
+ {
76
+ "profile": "quick",
77
+ "payloadBytes": 16384,
78
+ "algorithm": "ED25519",
79
+ "signUsPerOp": 93.648,
80
+ "verifyUsPerOp": 140.267,
81
+ "signOpsPerSecond": 10678.28,
82
+ "verifyOpsPerSecond": 7129.262
83
+ }
84
+ ]
85
+ }
@@ -0,0 +1,93 @@
1
+ {
2
+ "generatedAt": "2026-05-04T10:36:59.803Z",
3
+ "profile": "full",
4
+ "iterations": 100000,
5
+ "payloadSizes": [
6
+ 256,
7
+ 1024,
8
+ 4096,
9
+ 16384
10
+ ],
11
+ "results": [
12
+ {
13
+ "profile": "full",
14
+ "payloadBytes": 256,
15
+ "format": "compact-json",
16
+ "encodedBytes": 498,
17
+ "encodeUsPerOp": 0.871,
18
+ "decodeUsPerOp": 0.846,
19
+ "encodeOpsPerSecond": 1147888.7,
20
+ "decodeOpsPerSecond": 1182094.018
21
+ },
22
+ {
23
+ "profile": "full",
24
+ "payloadBytes": 256,
25
+ "format": "binary",
26
+ "encodedBytes": 426,
27
+ "encodeUsPerOp": 6.03,
28
+ "decodeUsPerOp": 2.594,
29
+ "encodeOpsPerSecond": 165840.776,
30
+ "decodeOpsPerSecond": 385485.005
31
+ },
32
+ {
33
+ "profile": "full",
34
+ "payloadBytes": 1024,
35
+ "format": "compact-json",
36
+ "encodedBytes": 1269,
37
+ "encodeUsPerOp": 1.011,
38
+ "decodeUsPerOp": 0.979,
39
+ "encodeOpsPerSecond": 989524.233,
40
+ "decodeOpsPerSecond": 1021032.577
41
+ },
42
+ {
43
+ "profile": "full",
44
+ "payloadBytes": 1024,
45
+ "format": "binary",
46
+ "encodedBytes": 1197,
47
+ "encodeUsPerOp": 7.83,
48
+ "decodeUsPerOp": 2.143,
49
+ "encodeOpsPerSecond": 127710.375,
50
+ "decodeOpsPerSecond": 466610.385
51
+ },
52
+ {
53
+ "profile": "full",
54
+ "payloadBytes": 4096,
55
+ "format": "compact-json",
56
+ "encodedBytes": 4341,
57
+ "encodeUsPerOp": 2.405,
58
+ "decodeUsPerOp": 1.454,
59
+ "encodeOpsPerSecond": 415830.048,
60
+ "decodeOpsPerSecond": 687659.376
61
+ },
62
+ {
63
+ "profile": "full",
64
+ "payloadBytes": 4096,
65
+ "format": "binary",
66
+ "encodedBytes": 4269,
67
+ "encodeUsPerOp": 8.232,
68
+ "decodeUsPerOp": 3.499,
69
+ "encodeOpsPerSecond": 121470.1,
70
+ "decodeOpsPerSecond": 285787.277
71
+ },
72
+ {
73
+ "profile": "full",
74
+ "payloadBytes": 16384,
75
+ "format": "compact-json",
76
+ "encodedBytes": 16632,
77
+ "encodeUsPerOp": 7.041,
78
+ "decodeUsPerOp": 6.088,
79
+ "encodeOpsPerSecond": 142021.041,
80
+ "decodeOpsPerSecond": 164249.051
81
+ },
82
+ {
83
+ "profile": "full",
84
+ "payloadBytes": 16384,
85
+ "format": "binary",
86
+ "encodedBytes": 16560,
87
+ "encodeUsPerOp": 12.829,
88
+ "decodeUsPerOp": 4.781,
89
+ "encodeOpsPerSecond": 77948.266,
90
+ "decodeOpsPerSecond": 209141.901
91
+ }
92
+ ]
93
+ }
@@ -0,0 +1,93 @@
1
+ {
2
+ "generatedAt": "2026-05-04T12:04:20.964Z",
3
+ "profile": "full",
4
+ "iterations": 100000,
5
+ "payloadSizes": [
6
+ 256,
7
+ 1024,
8
+ 4096,
9
+ 16384
10
+ ],
11
+ "results": [
12
+ {
13
+ "profile": "full",
14
+ "payloadBytes": 256,
15
+ "format": "compact-json",
16
+ "encodedBytes": 498,
17
+ "encodeUsPerOp": 0.725,
18
+ "decodeUsPerOp": 0.854,
19
+ "encodeOpsPerSecond": 1379340.728,
20
+ "decodeOpsPerSecond": 1171266.376
21
+ },
22
+ {
23
+ "profile": "full",
24
+ "payloadBytes": 256,
25
+ "format": "binary",
26
+ "encodedBytes": 426,
27
+ "encodeUsPerOp": 5.926,
28
+ "decodeUsPerOp": 2.479,
29
+ "encodeOpsPerSecond": 168754.579,
30
+ "decodeOpsPerSecond": 403328.781
31
+ },
32
+ {
33
+ "profile": "full",
34
+ "payloadBytes": 1024,
35
+ "format": "compact-json",
36
+ "encodedBytes": 1269,
37
+ "encodeUsPerOp": 1.169,
38
+ "decodeUsPerOp": 1.086,
39
+ "encodeOpsPerSecond": 855546.881,
40
+ "decodeOpsPerSecond": 921166.777
41
+ },
42
+ {
43
+ "profile": "full",
44
+ "payloadBytes": 1024,
45
+ "format": "binary",
46
+ "encodedBytes": 1197,
47
+ "encodeUsPerOp": 7.344,
48
+ "decodeUsPerOp": 2.558,
49
+ "encodeOpsPerSecond": 136162.207,
50
+ "decodeOpsPerSecond": 390905.125
51
+ },
52
+ {
53
+ "profile": "full",
54
+ "payloadBytes": 4096,
55
+ "format": "compact-json",
56
+ "encodedBytes": 4341,
57
+ "encodeUsPerOp": 2.744,
58
+ "decodeUsPerOp": 1.614,
59
+ "encodeOpsPerSecond": 364451.4,
60
+ "decodeOpsPerSecond": 619485.948
61
+ },
62
+ {
63
+ "profile": "full",
64
+ "payloadBytes": 4096,
65
+ "format": "binary",
66
+ "encodedBytes": 4269,
67
+ "encodeUsPerOp": 8.049,
68
+ "decodeUsPerOp": 2.825,
69
+ "encodeOpsPerSecond": 124237.744,
70
+ "decodeOpsPerSecond": 354024.566
71
+ },
72
+ {
73
+ "profile": "full",
74
+ "payloadBytes": 16384,
75
+ "format": "compact-json",
76
+ "encodedBytes": 16632,
77
+ "encodeUsPerOp": 7.81,
78
+ "decodeUsPerOp": 4.271,
79
+ "encodeOpsPerSecond": 128044.375,
80
+ "decodeOpsPerSecond": 234138.851
81
+ },
82
+ {
83
+ "profile": "full",
84
+ "payloadBytes": 16384,
85
+ "format": "binary",
86
+ "encodedBytes": 16560,
87
+ "encodeUsPerOp": 13.755,
88
+ "decodeUsPerOp": 4.153,
89
+ "encodeOpsPerSecond": 72701.905,
90
+ "decodeOpsPerSecond": 240791.753
91
+ }
92
+ ]
93
+ }
@@ -0,0 +1,93 @@
1
+ {
2
+ "generatedAt": "2026-05-04T13:23:24.247Z",
3
+ "profile": "full",
4
+ "iterations": 100000,
5
+ "payloadSizes": [
6
+ 256,
7
+ 1024,
8
+ 4096,
9
+ 16384
10
+ ],
11
+ "results": [
12
+ {
13
+ "profile": "full",
14
+ "payloadBytes": 256,
15
+ "format": "compact-json",
16
+ "encodedBytes": 498,
17
+ "encodeUsPerOp": 0.624,
18
+ "decodeUsPerOp": 0.702,
19
+ "encodeOpsPerSecond": 1602360.829,
20
+ "decodeOpsPerSecond": 1423500.452
21
+ },
22
+ {
23
+ "profile": "full",
24
+ "payloadBytes": 256,
25
+ "format": "binary",
26
+ "encodedBytes": 426,
27
+ "encodeUsPerOp": 4.988,
28
+ "decodeUsPerOp": 2.053,
29
+ "encodeOpsPerSecond": 200491.897,
30
+ "decodeOpsPerSecond": 487198.326
31
+ },
32
+ {
33
+ "profile": "full",
34
+ "payloadBytes": 1024,
35
+ "format": "compact-json",
36
+ "encodedBytes": 1269,
37
+ "encodeUsPerOp": 0.869,
38
+ "decodeUsPerOp": 0.846,
39
+ "encodeOpsPerSecond": 1150110.357,
40
+ "decodeOpsPerSecond": 1182337.332
41
+ },
42
+ {
43
+ "profile": "full",
44
+ "payloadBytes": 1024,
45
+ "format": "binary",
46
+ "encodedBytes": 1197,
47
+ "encodeUsPerOp": 7.191,
48
+ "decodeUsPerOp": 2.513,
49
+ "encodeOpsPerSecond": 139070.874,
50
+ "decodeOpsPerSecond": 398006.723
51
+ },
52
+ {
53
+ "profile": "full",
54
+ "payloadBytes": 4096,
55
+ "format": "compact-json",
56
+ "encodedBytes": 4341,
57
+ "encodeUsPerOp": 2.528,
58
+ "decodeUsPerOp": 1.705,
59
+ "encodeOpsPerSecond": 395510.237,
60
+ "decodeOpsPerSecond": 586432.501
61
+ },
62
+ {
63
+ "profile": "full",
64
+ "payloadBytes": 4096,
65
+ "format": "binary",
66
+ "encodedBytes": 4269,
67
+ "encodeUsPerOp": 8.741,
68
+ "decodeUsPerOp": 2.829,
69
+ "encodeOpsPerSecond": 114399.142,
70
+ "decodeOpsPerSecond": 353500.956
71
+ },
72
+ {
73
+ "profile": "full",
74
+ "payloadBytes": 16384,
75
+ "format": "compact-json",
76
+ "encodedBytes": 16632,
77
+ "encodeUsPerOp": 7.262,
78
+ "decodeUsPerOp": 3.881,
79
+ "encodeOpsPerSecond": 137696.221,
80
+ "decodeOpsPerSecond": 257643.134
81
+ },
82
+ {
83
+ "profile": "full",
84
+ "payloadBytes": 16384,
85
+ "format": "binary",
86
+ "encodedBytes": 16560,
87
+ "encodeUsPerOp": 12.18,
88
+ "decodeUsPerOp": 3.845,
89
+ "encodeOpsPerSecond": 82104.791,
90
+ "decodeOpsPerSecond": 260069.289
91
+ }
92
+ ]
93
+ }