@inco/lightning-js 0.0.0-bootstrap.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 (283) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +587 -0
  3. package/dist/cjs/advancedacl/index.d.ts +2 -0
  4. package/dist/cjs/advancedacl/index.js +19 -0
  5. package/dist/cjs/advancedacl/session-key.d.ts +95 -0
  6. package/dist/cjs/advancedacl/session-key.js +376 -0
  7. package/dist/cjs/advancedacl/types.d.ts +16 -0
  8. package/dist/cjs/advancedacl/types.js +3 -0
  9. package/dist/cjs/attestedcompute/attested-compute.d.ts +65 -0
  10. package/dist/cjs/attestedcompute/attested-compute.js +80 -0
  11. package/dist/cjs/attestedcompute/types.d.ts +35 -0
  12. package/dist/cjs/attestedcompute/types.js +46 -0
  13. package/dist/cjs/attesteddecrypt/attested-decrypt.d.ts +61 -0
  14. package/dist/cjs/attesteddecrypt/attested-decrypt.js +118 -0
  15. package/dist/cjs/attesteddecrypt/index.d.ts +1 -0
  16. package/dist/cjs/attesteddecrypt/index.js +18 -0
  17. package/dist/cjs/attesteddecrypt/types.d.ts +27 -0
  18. package/dist/cjs/attesteddecrypt/types.js +16 -0
  19. package/dist/cjs/attestedreveal/attested-reveal.d.ts +21 -0
  20. package/dist/cjs/attestedreveal/attested-reveal.js +31 -0
  21. package/dist/cjs/attestedreveal/index.d.ts +2 -0
  22. package/dist/cjs/attestedreveal/index.js +21 -0
  23. package/dist/cjs/attestedreveal/types.d.ts +4 -0
  24. package/dist/cjs/attestedreveal/types.js +13 -0
  25. package/dist/cjs/binary.d.ts +104 -0
  26. package/dist/cjs/binary.js +171 -0
  27. package/dist/cjs/chain.d.ts +50 -0
  28. package/dist/cjs/chain.js +62 -0
  29. package/dist/cjs/eip712/eip712.d.ts +18 -0
  30. package/dist/cjs/eip712/eip712.js +51 -0
  31. package/dist/cjs/eip712/index.d.ts +1 -0
  32. package/dist/cjs/eip712/index.js +8 -0
  33. package/dist/cjs/elistattesteddecrypt/elist-attested-decrypt.d.ts +51 -0
  34. package/dist/cjs/elistattesteddecrypt/elist-attested-decrypt.js +94 -0
  35. package/dist/cjs/elistattesteddecrypt/index.d.ts +2 -0
  36. package/dist/cjs/elistattesteddecrypt/index.js +22 -0
  37. package/dist/cjs/elistattesteddecrypt/types.d.ts +31 -0
  38. package/dist/cjs/elistattesteddecrypt/types.js +16 -0
  39. package/dist/cjs/encryption/encryption.d.ts +235 -0
  40. package/dist/cjs/encryption/encryption.js +226 -0
  41. package/dist/cjs/encryption/index.d.ts +1 -0
  42. package/dist/cjs/encryption/index.js +19 -0
  43. package/dist/cjs/generated/abis/add-two.d.ts +117 -0
  44. package/dist/cjs/generated/abis/add-two.js +80 -0
  45. package/dist/cjs/generated/abis/lightning.d.ts +3362 -0
  46. package/dist/cjs/generated/abis/lightning.js +2445 -0
  47. package/dist/cjs/generated/abis/test-elist.d.ts +276 -0
  48. package/dist/cjs/generated/abis/test-elist.js +168 -0
  49. package/dist/cjs/generated/abis/verifier.d.ts +1353 -0
  50. package/dist/cjs/generated/abis/verifier.js +954 -0
  51. package/dist/cjs/generated/es/inco/covalidator/compute/v1/server_pb.d.ts +1494 -0
  52. package/dist/cjs/generated/es/inco/covalidator/compute/v1/server_pb.js +395 -0
  53. package/dist/cjs/generated/es/inco/covalidator/compute/v1/types_pb.d.ts +247 -0
  54. package/dist/cjs/generated/es/inco/covalidator/compute/v1/types_pb.js +80 -0
  55. package/dist/cjs/generated/es/inco/helioswrapper/v1/helioswrapper_pb.d.ts +77 -0
  56. package/dist/cjs/generated/es/inco/helioswrapper/v1/helioswrapper_pb.js +28 -0
  57. package/dist/cjs/generated/es/inco/kms/lite/v1/kms_service_pb.d.ts +685 -0
  58. package/dist/cjs/generated/es/inco/kms/lite/v1/kms_service_pb.js +100 -0
  59. package/dist/cjs/generated/es/inco/kms/lite/v1/types_pb.d.ts +289 -0
  60. package/dist/cjs/generated/es/inco/kms/lite/v1/types_pb.js +136 -0
  61. package/dist/cjs/generated/es/inco/sealingfetcher/v1/sealingfetcher_pb.d.ts +371 -0
  62. package/dist/cjs/generated/es/inco/sealingfetcher/v1/sealingfetcher_pb.js +88 -0
  63. package/dist/cjs/generated/lightning.d.ts +830 -0
  64. package/dist/cjs/generated/lightning.js +872 -0
  65. package/dist/cjs/generated/local-node.d.ts +50 -0
  66. package/dist/cjs/generated/local-node.js +107 -0
  67. package/dist/cjs/handle.d.ts +123 -0
  68. package/dist/cjs/handle.js +221 -0
  69. package/dist/cjs/index.d.ts +5 -0
  70. package/dist/cjs/index.js +31 -0
  71. package/dist/cjs/kms/client.d.ts +12 -0
  72. package/dist/cjs/kms/client.js +47 -0
  73. package/dist/cjs/kms/quorumClient.d.ts +65 -0
  74. package/dist/cjs/kms/quorumClient.js +463 -0
  75. package/dist/cjs/kms/quorumConsistency.d.ts +82 -0
  76. package/dist/cjs/kms/quorumConsistency.js +269 -0
  77. package/dist/cjs/kms/signatureVerification.d.ts +35 -0
  78. package/dist/cjs/kms/signatureVerification.js +88 -0
  79. package/dist/cjs/kms/thresholdPromises.d.ts +8 -0
  80. package/dist/cjs/kms/thresholdPromises.js +62 -0
  81. package/dist/cjs/lite/attested-compute.d.ts +6 -0
  82. package/dist/cjs/lite/attested-compute.js +8 -0
  83. package/dist/cjs/lite/attested-decrypt.d.ts +4 -0
  84. package/dist/cjs/lite/attested-decrypt.js +6 -0
  85. package/dist/cjs/lite/deployments.d.ts +24 -0
  86. package/dist/cjs/lite/deployments.js +21 -0
  87. package/dist/cjs/lite/hadu.d.ts +4 -0
  88. package/dist/cjs/lite/hadu.js +28 -0
  89. package/dist/cjs/lite/index.d.ts +13 -0
  90. package/dist/cjs/lite/index.js +31 -0
  91. package/dist/cjs/lite/lightning.d.ts +459 -0
  92. package/dist/cjs/lite/lightning.js +696 -0
  93. package/dist/cjs/lite/types.d.ts +47 -0
  94. package/dist/cjs/lite/types.js +3 -0
  95. package/dist/cjs/lite/xwing.d.ts +154 -0
  96. package/dist/cjs/lite/xwing.js +326 -0
  97. package/dist/cjs/local/index.d.ts +1 -0
  98. package/dist/cjs/local/index.js +18 -0
  99. package/dist/cjs/local/local-node.d.ts +37 -0
  100. package/dist/cjs/local/local-node.js +80 -0
  101. package/dist/cjs/reencryption/eip712.d.ts +56 -0
  102. package/dist/cjs/reencryption/eip712.js +90 -0
  103. package/dist/cjs/reencryption/index.d.ts +2 -0
  104. package/dist/cjs/reencryption/index.js +19 -0
  105. package/dist/cjs/reencryption/types.d.ts +48 -0
  106. package/dist/cjs/reencryption/types.js +3 -0
  107. package/dist/cjs/retry.d.ts +30 -0
  108. package/dist/cjs/retry.js +87 -0
  109. package/dist/cjs/schema.d.ts +4 -0
  110. package/dist/cjs/schema.js +19 -0
  111. package/dist/cjs/test/mocks.d.ts +20 -0
  112. package/dist/cjs/test/mocks.js +72 -0
  113. package/dist/cjs/viem.d.ts +1141 -0
  114. package/dist/cjs/viem.js +36 -0
  115. package/dist/esm/advancedacl/index.d.ts +2 -0
  116. package/dist/esm/advancedacl/index.js +3 -0
  117. package/dist/esm/advancedacl/session-key.d.ts +95 -0
  118. package/dist/esm/advancedacl/session-key.js +367 -0
  119. package/dist/esm/advancedacl/types.d.ts +16 -0
  120. package/dist/esm/advancedacl/types.js +2 -0
  121. package/dist/esm/attestedcompute/attested-compute.d.ts +65 -0
  122. package/dist/esm/attestedcompute/attested-compute.js +76 -0
  123. package/dist/esm/attestedcompute/types.d.ts +35 -0
  124. package/dist/esm/attestedcompute/types.js +42 -0
  125. package/dist/esm/attesteddecrypt/attested-decrypt.d.ts +61 -0
  126. package/dist/esm/attesteddecrypt/attested-decrypt.js +112 -0
  127. package/dist/esm/attesteddecrypt/index.d.ts +1 -0
  128. package/dist/esm/attesteddecrypt/index.js +2 -0
  129. package/dist/esm/attesteddecrypt/types.d.ts +27 -0
  130. package/dist/esm/attesteddecrypt/types.js +12 -0
  131. package/dist/esm/attestedreveal/attested-reveal.d.ts +21 -0
  132. package/dist/esm/attestedreveal/attested-reveal.js +28 -0
  133. package/dist/esm/attestedreveal/index.d.ts +2 -0
  134. package/dist/esm/attestedreveal/index.js +3 -0
  135. package/dist/esm/attestedreveal/types.d.ts +4 -0
  136. package/dist/esm/attestedreveal/types.js +9 -0
  137. package/dist/esm/binary.d.ts +104 -0
  138. package/dist/esm/binary.js +155 -0
  139. package/dist/esm/chain.d.ts +50 -0
  140. package/dist/esm/chain.js +58 -0
  141. package/dist/esm/eip712/eip712.d.ts +18 -0
  142. package/dist/esm/eip712/eip712.js +46 -0
  143. package/dist/esm/eip712/index.d.ts +1 -0
  144. package/dist/esm/eip712/index.js +2 -0
  145. package/dist/esm/elistattesteddecrypt/elist-attested-decrypt.d.ts +51 -0
  146. package/dist/esm/elistattesteddecrypt/elist-attested-decrypt.js +89 -0
  147. package/dist/esm/elistattesteddecrypt/index.d.ts +2 -0
  148. package/dist/esm/elistattesteddecrypt/index.js +3 -0
  149. package/dist/esm/elistattesteddecrypt/types.d.ts +31 -0
  150. package/dist/esm/elistattesteddecrypt/types.js +12 -0
  151. package/dist/esm/encryption/encryption.d.ts +235 -0
  152. package/dist/esm/encryption/encryption.js +214 -0
  153. package/dist/esm/encryption/index.d.ts +1 -0
  154. package/dist/esm/encryption/index.js +2 -0
  155. package/dist/esm/generated/abis/add-two.d.ts +117 -0
  156. package/dist/esm/generated/abis/add-two.js +77 -0
  157. package/dist/esm/generated/abis/lightning.d.ts +3362 -0
  158. package/dist/esm/generated/abis/lightning.js +2442 -0
  159. package/dist/esm/generated/abis/test-elist.d.ts +276 -0
  160. package/dist/esm/generated/abis/test-elist.js +165 -0
  161. package/dist/esm/generated/abis/verifier.d.ts +1353 -0
  162. package/dist/esm/generated/abis/verifier.js +951 -0
  163. package/dist/esm/generated/es/inco/covalidator/compute/v1/server_pb.d.ts +1494 -0
  164. package/dist/esm/generated/es/inco/covalidator/compute/v1/server_pb.js +392 -0
  165. package/dist/esm/generated/es/inco/covalidator/compute/v1/types_pb.d.ts +247 -0
  166. package/dist/esm/generated/es/inco/covalidator/compute/v1/types_pb.js +77 -0
  167. package/dist/esm/generated/es/inco/helioswrapper/v1/helioswrapper_pb.d.ts +77 -0
  168. package/dist/esm/generated/es/inco/helioswrapper/v1/helioswrapper_pb.js +25 -0
  169. package/dist/esm/generated/es/inco/kms/lite/v1/kms_service_pb.d.ts +685 -0
  170. package/dist/esm/generated/es/inco/kms/lite/v1/kms_service_pb.js +97 -0
  171. package/dist/esm/generated/es/inco/kms/lite/v1/types_pb.d.ts +289 -0
  172. package/dist/esm/generated/es/inco/kms/lite/v1/types_pb.js +133 -0
  173. package/dist/esm/generated/es/inco/sealingfetcher/v1/sealingfetcher_pb.d.ts +371 -0
  174. package/dist/esm/generated/es/inco/sealingfetcher/v1/sealingfetcher_pb.js +85 -0
  175. package/dist/esm/generated/lightning.d.ts +830 -0
  176. package/dist/esm/generated/lightning.js +869 -0
  177. package/dist/esm/generated/local-node.d.ts +50 -0
  178. package/dist/esm/generated/local-node.js +104 -0
  179. package/dist/esm/handle.d.ts +123 -0
  180. package/dist/esm/handle.js +212 -0
  181. package/dist/esm/index.d.ts +5 -0
  182. package/dist/esm/index.js +6 -0
  183. package/dist/esm/kms/client.d.ts +12 -0
  184. package/dist/esm/kms/client.js +40 -0
  185. package/dist/esm/kms/quorumClient.d.ts +65 -0
  186. package/dist/esm/kms/quorumClient.js +459 -0
  187. package/dist/esm/kms/quorumConsistency.d.ts +82 -0
  188. package/dist/esm/kms/quorumConsistency.js +260 -0
  189. package/dist/esm/kms/signatureVerification.d.ts +35 -0
  190. package/dist/esm/kms/signatureVerification.js +84 -0
  191. package/dist/esm/kms/thresholdPromises.d.ts +8 -0
  192. package/dist/esm/kms/thresholdPromises.js +59 -0
  193. package/dist/esm/lite/attested-compute.d.ts +6 -0
  194. package/dist/esm/lite/attested-compute.js +4 -0
  195. package/dist/esm/lite/attested-decrypt.d.ts +4 -0
  196. package/dist/esm/lite/attested-decrypt.js +3 -0
  197. package/dist/esm/lite/deployments.d.ts +24 -0
  198. package/dist/esm/lite/deployments.js +17 -0
  199. package/dist/esm/lite/hadu.d.ts +4 -0
  200. package/dist/esm/lite/hadu.js +24 -0
  201. package/dist/esm/lite/index.d.ts +13 -0
  202. package/dist/esm/lite/index.js +10 -0
  203. package/dist/esm/lite/lightning.d.ts +459 -0
  204. package/dist/esm/lite/lightning.js +692 -0
  205. package/dist/esm/lite/types.d.ts +47 -0
  206. package/dist/esm/lite/types.js +2 -0
  207. package/dist/esm/lite/xwing.d.ts +154 -0
  208. package/dist/esm/lite/xwing.js +311 -0
  209. package/dist/esm/local/index.d.ts +1 -0
  210. package/dist/esm/local/index.js +2 -0
  211. package/dist/esm/local/local-node.d.ts +37 -0
  212. package/dist/esm/local/local-node.js +76 -0
  213. package/dist/esm/reencryption/eip712.d.ts +56 -0
  214. package/dist/esm/reencryption/eip712.js +87 -0
  215. package/dist/esm/reencryption/index.d.ts +2 -0
  216. package/dist/esm/reencryption/index.js +3 -0
  217. package/dist/esm/reencryption/types.d.ts +48 -0
  218. package/dist/esm/reencryption/types.js +2 -0
  219. package/dist/esm/retry.d.ts +30 -0
  220. package/dist/esm/retry.js +82 -0
  221. package/dist/esm/schema.d.ts +4 -0
  222. package/dist/esm/schema.js +15 -0
  223. package/dist/esm/test/mocks.d.ts +20 -0
  224. package/dist/esm/test/mocks.js +64 -0
  225. package/dist/esm/viem.d.ts +1141 -0
  226. package/dist/esm/viem.js +32 -0
  227. package/dist/types/advancedacl/index.d.ts +2 -0
  228. package/dist/types/advancedacl/session-key.d.ts +95 -0
  229. package/dist/types/advancedacl/types.d.ts +16 -0
  230. package/dist/types/attestedcompute/attested-compute.d.ts +65 -0
  231. package/dist/types/attestedcompute/types.d.ts +35 -0
  232. package/dist/types/attesteddecrypt/attested-decrypt.d.ts +61 -0
  233. package/dist/types/attesteddecrypt/index.d.ts +1 -0
  234. package/dist/types/attesteddecrypt/types.d.ts +27 -0
  235. package/dist/types/attestedreveal/attested-reveal.d.ts +21 -0
  236. package/dist/types/attestedreveal/index.d.ts +2 -0
  237. package/dist/types/attestedreveal/types.d.ts +4 -0
  238. package/dist/types/binary.d.ts +104 -0
  239. package/dist/types/chain.d.ts +50 -0
  240. package/dist/types/eip712/eip712.d.ts +18 -0
  241. package/dist/types/eip712/index.d.ts +1 -0
  242. package/dist/types/elistattesteddecrypt/elist-attested-decrypt.d.ts +51 -0
  243. package/dist/types/elistattesteddecrypt/index.d.ts +2 -0
  244. package/dist/types/elistattesteddecrypt/types.d.ts +31 -0
  245. package/dist/types/encryption/encryption.d.ts +235 -0
  246. package/dist/types/encryption/index.d.ts +1 -0
  247. package/dist/types/generated/abis/add-two.d.ts +117 -0
  248. package/dist/types/generated/abis/lightning.d.ts +3362 -0
  249. package/dist/types/generated/abis/test-elist.d.ts +276 -0
  250. package/dist/types/generated/abis/verifier.d.ts +1353 -0
  251. package/dist/types/generated/es/inco/covalidator/compute/v1/server_pb.d.ts +1494 -0
  252. package/dist/types/generated/es/inco/covalidator/compute/v1/types_pb.d.ts +247 -0
  253. package/dist/types/generated/es/inco/helioswrapper/v1/helioswrapper_pb.d.ts +77 -0
  254. package/dist/types/generated/es/inco/kms/lite/v1/kms_service_pb.d.ts +685 -0
  255. package/dist/types/generated/es/inco/kms/lite/v1/types_pb.d.ts +289 -0
  256. package/dist/types/generated/es/inco/sealingfetcher/v1/sealingfetcher_pb.d.ts +371 -0
  257. package/dist/types/generated/lightning.d.ts +830 -0
  258. package/dist/types/generated/local-node.d.ts +50 -0
  259. package/dist/types/handle.d.ts +123 -0
  260. package/dist/types/index.d.ts +5 -0
  261. package/dist/types/kms/client.d.ts +12 -0
  262. package/dist/types/kms/quorumClient.d.ts +65 -0
  263. package/dist/types/kms/quorumConsistency.d.ts +82 -0
  264. package/dist/types/kms/signatureVerification.d.ts +35 -0
  265. package/dist/types/kms/thresholdPromises.d.ts +8 -0
  266. package/dist/types/lite/attested-compute.d.ts +6 -0
  267. package/dist/types/lite/attested-decrypt.d.ts +4 -0
  268. package/dist/types/lite/deployments.d.ts +24 -0
  269. package/dist/types/lite/hadu.d.ts +4 -0
  270. package/dist/types/lite/index.d.ts +13 -0
  271. package/dist/types/lite/lightning.d.ts +459 -0
  272. package/dist/types/lite/types.d.ts +47 -0
  273. package/dist/types/lite/xwing.d.ts +154 -0
  274. package/dist/types/local/index.d.ts +1 -0
  275. package/dist/types/local/local-node.d.ts +37 -0
  276. package/dist/types/reencryption/eip712.d.ts +56 -0
  277. package/dist/types/reencryption/index.d.ts +2 -0
  278. package/dist/types/reencryption/types.d.ts +48 -0
  279. package/dist/types/retry.d.ts +30 -0
  280. package/dist/types/schema.d.ts +4 -0
  281. package/dist/types/test/mocks.d.ts +20 -0
  282. package/dist/types/viem.d.ts +1141 -0
  283. package/package.json +129 -0
@@ -0,0 +1,47 @@
1
+ import type { HexString } from '../binary.js';
2
+ import type { BackoffConfig } from '../retry.js';
3
+ import type { XwingKeypair } from './xwing.js';
4
+ /**
5
+ * Options for attested methods when no reencrypt keys are provided.
6
+ * The KMS generates an ephemeral keypair and returns plaintext.
7
+ */
8
+ export type AttestedOptsEphemeral = {
9
+ reencryptPubKey?: never;
10
+ reencryptKeypair?: never;
11
+ backoffConfig?: Partial<BackoffConfig>;
12
+ };
13
+ /**
14
+ * Options for attested methods when only a reencrypt public key is provided.
15
+ * The KMS encrypts the result under the provided key; caller receives ciphertext.
16
+ */
17
+ export type AttestedOptsEncrypted = {
18
+ reencryptPubKey: Uint8Array;
19
+ reencryptKeypair?: never;
20
+ backoffConfig?: Partial<BackoffConfig>;
21
+ };
22
+ /**
23
+ * Options for attested methods when both a reencrypt key and keypair are provided.
24
+ * The KMS reencrypts under the public key; the SDK decrypts locally using the keypair.
25
+ */
26
+ export type AttestedOptsDecrypted = {
27
+ reencryptPubKey: Uint8Array;
28
+ reencryptKeypair: XwingKeypair;
29
+ backoffConfig?: Partial<BackoffConfig>;
30
+ };
31
+ /** Union of all valid opts for attestedDecrypt / attestedCompute. */
32
+ export type AttestedOpts = AttestedOptsEphemeral | AttestedOptsEncrypted | AttestedOptsDecrypted;
33
+ /** Extends the base opts with voucher-specific fields for WithVoucher methods. */
34
+ export type AttestedWithVoucherOptsEphemeral = AttestedOptsEphemeral & {
35
+ requesterArgData?: HexString;
36
+ };
37
+ export type AttestedWithVoucherOptsEncrypted = AttestedOptsEncrypted & {
38
+ requesterArgData?: HexString;
39
+ };
40
+ export type AttestedWithVoucherOptsDecrypted = AttestedOptsDecrypted & {
41
+ requesterArgData?: HexString;
42
+ };
43
+ export type AttestedWithVoucherOpts = AttestedWithVoucherOptsEphemeral | AttestedWithVoucherOptsEncrypted | AttestedWithVoucherOptsDecrypted;
44
+ /** Options for attestedReveal. */
45
+ export type AttestedRevealOpts = {
46
+ backoffConfig?: Partial<BackoffConfig>;
47
+ };
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGl0ZS90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIn0=
@@ -0,0 +1,154 @@
1
+ import { Decryptor, Encryptor, XwingScheme } from '../encryption/encryption.js';
2
+ import { PubKeyEncodable } from '../reencryption/index.js';
3
+ /**
4
+ * X-Wing public key size in bytes.
5
+ * Combining ML-KEM-768 (1184 bytes) and X25519 (32 bytes).
6
+ */
7
+ export declare const XWING_PUBLIC_KEY_SIZE: number;
8
+ /**
9
+ * WARNING: TEST KEY - DO NOT USE IN PRODUCTION
10
+ * This is a well-known test seed (all zeros) that provides NO security.
11
+ * Anyone can derive the private key from this seed and decrypt all data.
12
+ * Only use for local development and testing.
13
+ */
14
+ export declare const TEST_NETWORK_SEED_KEY = "0x0000000000000000000000000000000000000000000000000000000000000000";
15
+ /**
16
+ * WARNING: TEST KEY - DO NOT USE IN PRODUCTION
17
+ * This is the public key derived from TEST_NETWORK_SEED_KEY (all zeros).
18
+ * Data encrypted with this key can be decrypted by anyone who knows the seed.
19
+ * Only use for local development and testing.
20
+ *
21
+ * Generated from Go with seed of all zeros using HPKE layer: hpke.KEM_XWING.Scheme().DeriveKeyPair(seed)
22
+ * This matches the key used in covalidator's GetXwingPrivateKeyForTesting() via DeriveXwingPrivateKey
23
+ */
24
+ export declare const TEST_NETWORK_XWING_PUBKEY = "0xca882388911c7c762aafc20debd63e845b3bed28c9d5262cdea7771fb31bd660a1ae7b395a9a7df3d12c7b118e8eda5057572c1ba05cd9b635edf33dabca4cac7291e0848f19c20e5beb850c3818f3543d49b3a5c729cb86a28fda539775d04feda112fe0c81d138aaf623aea7d507a4e826e890105db6065a44aba76a10d771c00d1b33f4ac51869806aae18eada68f19047024542d64a7aa1c91a5e1aa49d93613b5224b415bcc7aa166e4b55033438d20c641f9664fdb1689b53208181463e3d1325d46b30f07c5945b7e3fa1418bf833d975258461b294664eaf60795964924a280729c10a37fc6e967440bdd55d4ca53596286383481291152365303d44517cef369c00933b0b30368a230353e729c031075e8388673678a56b3ba84a165b28096ee9bd684483e1844258b451c365c41fa534152a3b64120041450128e960c7d6437d717ee266bdde7aaeec225ed93b958d188e97407349f1382976ca47d761ecc59a6f394487eb015c083abb490584677240eb47f838c838568a496119378b8bb81484610a50792b5d9c9939db188e7d0249d3cb918c436f111a2898849b286b0743a22c57464c709c5eaceac1ba493adca3328c0b14b5e38d3aea74e328b622b17e7181c35ad11c2103bdb7f2b209d93dcbc4ab61a06bc37139e6d2b7a06c5b7e9267bef3a8918a706f793271a5acc2574532da79e5a10cf074b998147a3c43586a411a513bba0d11cc19a36c83b19277f28022c88b120abfdba7076a8263e05336e3245aef7033eb3c762b5bbfa5791ac960398b649d5cbb652ddc6b2398143a0861ab3b410b696328879c099098adf819fbf7ac170030e86675e7f45c22ac9e1cf52c3102487bb0b91ab592afdc69c6e3a9b71876b86260b6c736b8291098f1130d3b763525cbad540ce2d042eacb6ed43b7bcba898f712c412f26066e09945f44ec7026c8ef959831abc10719d2017a12a41728b41c02371a5f5756ebc79406be708ea41bbd21563c874a0b791a3b4e4224a609967004f065c5ab4f3b4c61cb35df70573269da53179c3701fc5205f61974426f9b794c1b5826494b70842b6920c17752029369264dc8590b898b85c9d89a258e1f46c1b0490efd17c485cb51687cea272041e90b8e629521d3c5e3fa7518161bad7a159295b63cc6c0077897b53d47db8bc0ecb820f550705b65715a1a1094d04854f56acd26aa0baa10cb8447fad6211f53105796a42882328e6852e8de821c283b51eaab9bc95c4dc53615626049d63b1f9a457193805276b1905b0ab39353b5cf91fdd6023d4d816aef9cce4a3cfb3d12190172df221ae61d427563a098cc60e3dc9997ef54959180be5dc64a911157db6be3a01be2ee343caab33b8729abf0c50c674758c511291941fceac646232920907c2e88b9ec10211161729c797643a553a6ae5c4b7483c04e3263bd291e311c609071348b7c3310aa97d6b8318e0a4afe8399fa22f951049a9bb8860f7c69a333d3cc1aaf0129ab560713bf29eb3a01f9a276c78e54e3a3648b2447c80242b271b11406866389426d8b59796540d6b5702092ab21ee217c075cfc0c17ef826ce9ea29b9e61617457a5b1aaa23a58615dc53c59183beb36ea19498c21820b70ab47adeb678f1c52bf8768b3597b608ea1a8a15cd62e8a29bec4a1ac248ef9f02de0144bca06025f95a42bd6c8eaaaaaa2366328561d";
25
+ /**
26
+ * Check if a byte array matches the test seed key.
27
+ * Logs a warning if it does.
28
+ */
29
+ export declare function warnIfTestSeed(seed: Uint8Array): boolean;
30
+ /**
31
+ * Check if a byte array matches the test public key.
32
+ * Logs a warning if it does.
33
+ */
34
+ export declare function warnIfTestPubKey(pubKeyBytes: Uint8Array): boolean;
35
+ /**
36
+ * X-Wing keypair interface.
37
+ * X-Wing is a post-quantum hybrid KEM combining ML-KEM-768 and X25519.
38
+ * - Private key: 32-byte seed
39
+ * - Public key: 1216 bytes
40
+ * - Encapsulated key: 1120 bytes
41
+ */
42
+ export interface XwingKeypair extends PubKeyEncodable {
43
+ scheme: XwingScheme;
44
+ publicKey: CryptoKey;
45
+ privateKey: CryptoKey;
46
+ }
47
+ /**
48
+ * Derive X-Wing keypair from a 32-byte seed (deterministic).
49
+ * This matches the Go implementation in covalidator/encoding/xwing.go
50
+ *
51
+ * @param seed - 32-byte seed for deterministic key derivation
52
+ * @returns X-Wing keypair with cached public key bytes
53
+ */
54
+ export declare function deriveXwingKeypairFromSeed(seed: Uint8Array): Promise<XwingKeypair>;
55
+ /**
56
+ * Generate a random X-Wing keypair.
57
+ *
58
+ * @returns X-Wing keypair with cached public key bytes
59
+ */
60
+ export declare function generateXwingKeypair(): Promise<XwingKeypair>;
61
+ /**
62
+ * Decode X-Wing public key from bytes.
63
+ *
64
+ * @param pubKeyBytes - 1216-byte X-Wing public key
65
+ * @returns CryptoKey for encryption operations
66
+ */
67
+ export declare function decodeXwingPublicKey(pubKeyBytes: Uint8Array): Promise<CryptoKey>;
68
+ /**
69
+ * Decode X-Wing private key from 32-byte seed.
70
+ * Alias for deriveXwingKeypairFromSeed for consistency with Go API.
71
+ *
72
+ * @param seed - 32-byte seed
73
+ * @returns X-Wing keypair
74
+ */
75
+ export declare function decodeXwingPrivateKey(seed: Uint8Array): Promise<XwingKeypair>;
76
+ /**
77
+ * Encode X-Wing public key to bytes.
78
+ *
79
+ * @param publicKey - CryptoKey containing X-Wing public key
80
+ * @returns 1216-byte serialized public key
81
+ */
82
+ export declare function encodeXwingPublicKey(publicKey: CryptoKey): Promise<Uint8Array>;
83
+ /**
84
+ * X-Wing encryptor arguments.
85
+ * pubKeyA is the recipient's public key (usually the covalidator's public key).
86
+ */
87
+ export type XwingEncryptorArgs = {
88
+ pubKeyA: CryptoKey;
89
+ };
90
+ /**
91
+ * X-Wing decryptor arguments.
92
+ * privKeyA is the recipient's private key (usually the covalidator's private key).
93
+ */
94
+ export type XwingDecryptorArgs = {
95
+ privKeyA: XwingKeypair;
96
+ };
97
+ /**
98
+ * Encrypt using X-Wing HPKE (RFC 9180) with ChaCha20-Poly1305 AEAD.
99
+ *
100
+ * Output format: encappedKey (1120 bytes) || ciphertext (variable length)
101
+ *
102
+ * @param pubKeyA - Recipient's public key
103
+ * @param msg - Message to encrypt
104
+ * @param aad - Additional authenticated data (default: empty)
105
+ * @param info - Context info for key derivation (default: empty)
106
+ * @returns Encrypted data (encappedKey || ciphertext)
107
+ */
108
+ export declare function encrypt(pubKeyA: CryptoKey, msg: Uint8Array, aad?: Uint8Array, info?: Uint8Array): Promise<Uint8Array>;
109
+ /**
110
+ * Decrypt using X-Wing HPKE (RFC 9180) with ChaCha20-Poly1305 AEAD.
111
+ *
112
+ * Input format: encappedKey (1120 bytes) || ciphertext (variable length)
113
+ *
114
+ * @param privKeyA - Recipient's private key
115
+ * @param encryptedData - Encrypted data (encappedKey || ciphertext)
116
+ * @param aad - Additional authenticated data (default: empty)
117
+ * @param info - Context info for key derivation (default: empty)
118
+ * @returns Decrypted plaintext
119
+ */
120
+ export declare function decrypt(privKeyA: XwingKeypair, encryptedData: Uint8Array, aad?: Uint8Array, info?: Uint8Array): Promise<Uint8Array>;
121
+ /**
122
+ * Create an X-Wing encryptor for encrypting inputs.
123
+ * Follows the same pattern as ECIES encryptor in ecies.ts.
124
+ *
125
+ * The encryptor:
126
+ * 1. Encodes the plaintext with its context (HADU encoding)
127
+ * 2. Encrypts using X-Wing HPKE
128
+ * 3. Computes handle for tracking
129
+ * 4. Returns the encrypted ciphertext with metadata
130
+ *
131
+ * @param args - X-Wing encryptor arguments (recipient's public key)
132
+ * @returns Encryptor function
133
+ */
134
+ export declare function getXwingEncryptor({ pubKeyA, }: XwingEncryptorArgs): Encryptor<XwingScheme>;
135
+ /**
136
+ * Create an X-Wing decryptor for decrypting inputs.
137
+ * Follows the same pattern as ECIES decryptor in ecies.ts.
138
+ *
139
+ * The decryptor:
140
+ * 1. Removes the prepended handle from the ciphertext
141
+ * 2. Decrypts using X-Wing HPKE
142
+ * 3. Decodes the HADU-encoded payload
143
+ * 4. Extracts and returns the plaintext
144
+ *
145
+ * @param args - X-Wing decryptor arguments (recipient's private key)
146
+ * @returns Decryptor function
147
+ */
148
+ export declare function getXwingDecryptor({ privKeyA, }: XwingDecryptorArgs): Decryptor<XwingScheme>;
149
+ /**
150
+ * Returns true if the raw public key bytes match the public key encoded by the keypair.
151
+ * Used to catch caller mistakes before sending the keypair to the covalidator, where a
152
+ * mismatch would produce a cryptic signature error instead of a clear failure.
153
+ */
154
+ export declare function reencryptPublicKeysMatch(reencryptPubKey: Uint8Array, reencryptKeypair: XwingKeypair): boolean;
@@ -0,0 +1,326 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TEST_NETWORK_XWING_PUBKEY = exports.TEST_NETWORK_SEED_KEY = exports.XWING_PUBLIC_KEY_SIZE = void 0;
4
+ exports.warnIfTestSeed = warnIfTestSeed;
5
+ exports.warnIfTestPubKey = warnIfTestPubKey;
6
+ exports.deriveXwingKeypairFromSeed = deriveXwingKeypairFromSeed;
7
+ exports.generateXwingKeypair = generateXwingKeypair;
8
+ exports.decodeXwingPublicKey = decodeXwingPublicKey;
9
+ exports.decodeXwingPrivateKey = decodeXwingPrivateKey;
10
+ exports.encodeXwingPublicKey = encodeXwingPublicKey;
11
+ exports.encrypt = encrypt;
12
+ exports.decrypt = decrypt;
13
+ exports.getXwingEncryptor = getXwingEncryptor;
14
+ exports.getXwingDecryptor = getXwingDecryptor;
15
+ exports.reencryptPublicKeysMatch = reencryptPublicKeysMatch;
16
+ const chacha20poly1305_1 = require("@hpke/chacha20poly1305");
17
+ const core_1 = require("@hpke/core");
18
+ const hybridkem_x_wing_1 = require("@hpke/hybridkem-x-wing");
19
+ const binary_js_1 = require("../binary.js");
20
+ const encryption_js_1 = require("../encryption/encryption.js");
21
+ const handle_js_1 = require("../handle.js");
22
+ const schema_js_1 = require("../schema.js");
23
+ const hadu_js_1 = require("./hadu.js");
24
+ // Get X-Wing key sizes from the library
25
+ const xwingKem = new hybridkem_x_wing_1.XWing();
26
+ /**
27
+ * X-Wing public key size in bytes.
28
+ * Combining ML-KEM-768 (1184 bytes) and X25519 (32 bytes).
29
+ */
30
+ exports.XWING_PUBLIC_KEY_SIZE = xwingKem.publicKeySize;
31
+ /**
32
+ * WARNING: TEST KEY - DO NOT USE IN PRODUCTION
33
+ * This is a well-known test seed (all zeros) that provides NO security.
34
+ * Anyone can derive the private key from this seed and decrypt all data.
35
+ * Only use for local development and testing.
36
+ */
37
+ exports.TEST_NETWORK_SEED_KEY = '0x0000000000000000000000000000000000000000000000000000000000000000';
38
+ const TEST_NETWORK_SEED_BYTES = (0, binary_js_1.bytesFromHexString)(exports.TEST_NETWORK_SEED_KEY);
39
+ /**
40
+ * WARNING: TEST KEY - DO NOT USE IN PRODUCTION
41
+ * This is the public key derived from TEST_NETWORK_SEED_KEY (all zeros).
42
+ * Data encrypted with this key can be decrypted by anyone who knows the seed.
43
+ * Only use for local development and testing.
44
+ *
45
+ * Generated from Go with seed of all zeros using HPKE layer: hpke.KEM_XWING.Scheme().DeriveKeyPair(seed)
46
+ * This matches the key used in covalidator's GetXwingPrivateKeyForTesting() via DeriveXwingPrivateKey
47
+ */
48
+ exports.TEST_NETWORK_XWING_PUBKEY = '0xca882388911c7c762aafc20debd63e845b3bed28c9d5262cdea7771fb31bd660a1ae7b395a9a7df3d12c7b118e8eda5057572c1ba05cd9b635edf33dabca4cac7291e0848f19c20e5beb850c3818f3543d49b3a5c729cb86a28fda539775d04feda112fe0c81d138aaf623aea7d507a4e826e890105db6065a44aba76a10d771c00d1b33f4ac51869806aae18eada68f19047024542d64a7aa1c91a5e1aa49d93613b5224b415bcc7aa166e4b55033438d20c641f9664fdb1689b53208181463e3d1325d46b30f07c5945b7e3fa1418bf833d975258461b294664eaf60795964924a280729c10a37fc6e967440bdd55d4ca53596286383481291152365303d44517cef369c00933b0b30368a230353e729c031075e8388673678a56b3ba84a165b28096ee9bd684483e1844258b451c365c41fa534152a3b64120041450128e960c7d6437d717ee266bdde7aaeec225ed93b958d188e97407349f1382976ca47d761ecc59a6f394487eb015c083abb490584677240eb47f838c838568a496119378b8bb81484610a50792b5d9c9939db188e7d0249d3cb918c436f111a2898849b286b0743a22c57464c709c5eaceac1ba493adca3328c0b14b5e38d3aea74e328b622b17e7181c35ad11c2103bdb7f2b209d93dcbc4ab61a06bc37139e6d2b7a06c5b7e9267bef3a8918a706f793271a5acc2574532da79e5a10cf074b998147a3c43586a411a513bba0d11cc19a36c83b19277f28022c88b120abfdba7076a8263e05336e3245aef7033eb3c762b5bbfa5791ac960398b649d5cbb652ddc6b2398143a0861ab3b410b696328879c099098adf819fbf7ac170030e86675e7f45c22ac9e1cf52c3102487bb0b91ab592afdc69c6e3a9b71876b86260b6c736b8291098f1130d3b763525cbad540ce2d042eacb6ed43b7bcba898f712c412f26066e09945f44ec7026c8ef959831abc10719d2017a12a41728b41c02371a5f5756ebc79406be708ea41bbd21563c874a0b791a3b4e4224a609967004f065c5ab4f3b4c61cb35df70573269da53179c3701fc5205f61974426f9b794c1b5826494b70842b6920c17752029369264dc8590b898b85c9d89a258e1f46c1b0490efd17c485cb51687cea272041e90b8e629521d3c5e3fa7518161bad7a159295b63cc6c0077897b53d47db8bc0ecb820f550705b65715a1a1094d04854f56acd26aa0baa10cb8447fad6211f53105796a42882328e6852e8de821c283b51eaab9bc95c4dc53615626049d63b1f9a457193805276b1905b0ab39353b5cf91fdd6023d4d816aef9cce4a3cfb3d12190172df221ae61d427563a098cc60e3dc9997ef54959180be5dc64a911157db6be3a01be2ee343caab33b8729abf0c50c674758c511291941fceac646232920907c2e88b9ec10211161729c797643a553a6ae5c4b7483c04e3263bd291e311c609071348b7c3310aa97d6b8318e0a4afe8399fa22f951049a9bb8860f7c69a333d3cc1aaf0129ab560713bf29eb3a01f9a276c78e54e3a3648b2447c80242b271b11406866389426d8b59796540d6b5702092ab21ee217c075cfc0c17ef826ce9ea29b9e61617457a5b1aaa23a58615dc53c59183beb36ea19498c21820b70ab47adeb678f1c52bf8768b3597b608ea1a8a15cd62e8a29bec4a1ac248ef9f02de0144bca06025f95a42bd6c8eaaaaaa2366328561d';
49
+ const TEST_NETWORK_PUBKEY_BYTES = (0, binary_js_1.bytesFromHexString)(exports.TEST_NETWORK_XWING_PUBKEY);
50
+ /**
51
+ * Check if a byte array matches the test seed key.
52
+ * Logs a warning if it does.
53
+ */
54
+ function warnIfTestSeed(seed) {
55
+ const isTestSeed = seed.every((byte, i) => byte === TEST_NETWORK_SEED_BYTES[i]);
56
+ if (isTestSeed) {
57
+ console.warn('WARNING: Using TEST_NETWORK_SEED_KEY. This key provides no security ' +
58
+ 'and should only be used for local development and testing.');
59
+ }
60
+ return isTestSeed;
61
+ }
62
+ /**
63
+ * Check if a byte array matches the test public key.
64
+ * Logs a warning if it does.
65
+ */
66
+ function warnIfTestPubKey(pubKeyBytes) {
67
+ const isTestPubKey = pubKeyBytes.every((byte, i) => byte === TEST_NETWORK_PUBKEY_BYTES[i]);
68
+ if (isTestPubKey) {
69
+ console.warn('WARNING: Using TEST_NETWORK_XWING_PUBKEY. Data encrypted with this key ' +
70
+ 'can be decrypted by anyone. Only use for local development and testing.');
71
+ }
72
+ return isTestPubKey;
73
+ }
74
+ /**
75
+ * Create HPKE cipher suite with X-Wing KEM, HKDF-SHA256, and ChaCha20-Poly1305 AEAD.
76
+ * This configuration provides post-quantum security with hybrid classical/PQ encryption.
77
+ * Workaround: Manually calls setup on the XWing KEM due to a bug in @hpke/hybridkem-x-wing@0.6.1
78
+ * where encap() calls getRandomValues before calling _setup().
79
+ */
80
+ async function createXwingSuite() {
81
+ const kem = new hybridkem_x_wing_1.XWing();
82
+ // Workaround: Call setup to initialize _api before encap() is called
83
+ // @ts-expect-error _setup is private but must be called to initialize crypto API
84
+ await kem._setup();
85
+ return new core_1.CipherSuite({
86
+ kem,
87
+ kdf: new core_1.HkdfSha256(),
88
+ aead: new chacha20poly1305_1.Chacha20Poly1305(),
89
+ });
90
+ }
91
+ /**
92
+ * Derive X-Wing keypair from a 32-byte seed (deterministic).
93
+ * This matches the Go implementation in covalidator/encoding/xwing.go
94
+ *
95
+ * @param seed - 32-byte seed for deterministic key derivation
96
+ * @returns X-Wing keypair with cached public key bytes
97
+ */
98
+ async function deriveXwingKeypairFromSeed(seed) {
99
+ if (seed.length !== 32) {
100
+ throw new Error(`Invalid X-Wing seed length: expected 32 bytes, got ${seed.length}`);
101
+ }
102
+ warnIfTestSeed(seed);
103
+ const suite = await createXwingSuite();
104
+ // Create a fresh ArrayBuffer copy to avoid SharedArrayBuffer issues
105
+ const seedCopy = new Uint8Array(seed);
106
+ const keyPair = await suite.kem.deriveKeyPair(seedCopy.buffer);
107
+ const publicKeyBytes = new Uint8Array(await suite.kem.serializePublicKey(keyPair.publicKey));
108
+ return {
109
+ scheme: encryption_js_1.encryptionSchemes.xwing,
110
+ publicKey: keyPair.publicKey,
111
+ privateKey: keyPair.privateKey,
112
+ encodePublicKey() {
113
+ return publicKeyBytes;
114
+ },
115
+ };
116
+ }
117
+ /**
118
+ * Generate a random X-Wing keypair.
119
+ *
120
+ * @returns X-Wing keypair with cached public key bytes
121
+ */
122
+ async function generateXwingKeypair() {
123
+ const suite = await createXwingSuite();
124
+ const keyPair = await suite.kem.generateKeyPair();
125
+ const publicKeyBytes = new Uint8Array(await suite.kem.serializePublicKey(keyPair.publicKey));
126
+ return {
127
+ scheme: encryption_js_1.encryptionSchemes.xwing,
128
+ publicKey: keyPair.publicKey,
129
+ privateKey: keyPair.privateKey,
130
+ encodePublicKey() {
131
+ return publicKeyBytes;
132
+ },
133
+ };
134
+ }
135
+ /**
136
+ * Decode X-Wing public key from bytes.
137
+ *
138
+ * @param pubKeyBytes - 1216-byte X-Wing public key
139
+ * @returns CryptoKey for encryption operations
140
+ */
141
+ async function decodeXwingPublicKey(pubKeyBytes) {
142
+ const suite = await createXwingSuite();
143
+ if (pubKeyBytes.length !== suite.kem.publicKeySize) {
144
+ throw new Error(`Invalid X-Wing public key length: expected ${exports.XWING_PUBLIC_KEY_SIZE} bytes, got ${pubKeyBytes.length}`);
145
+ }
146
+ warnIfTestPubKey(pubKeyBytes);
147
+ // Create a fresh ArrayBuffer copy to avoid SharedArrayBuffer issues
148
+ const pubKeyCopy = new Uint8Array(pubKeyBytes);
149
+ return await suite.kem.deserializePublicKey(pubKeyCopy.buffer);
150
+ }
151
+ /**
152
+ * Decode X-Wing private key from 32-byte seed.
153
+ * Alias for deriveXwingKeypairFromSeed for consistency with Go API.
154
+ *
155
+ * @param seed - 32-byte seed
156
+ * @returns X-Wing keypair
157
+ */
158
+ async function decodeXwingPrivateKey(seed) {
159
+ return await deriveXwingKeypairFromSeed(seed);
160
+ }
161
+ /**
162
+ * Encode X-Wing public key to bytes.
163
+ *
164
+ * @param publicKey - CryptoKey containing X-Wing public key
165
+ * @returns 1216-byte serialized public key
166
+ */
167
+ async function encodeXwingPublicKey(publicKey) {
168
+ const suite = await createXwingSuite();
169
+ return new Uint8Array(await suite.kem.serializePublicKey(publicKey));
170
+ }
171
+ /**
172
+ * Encrypt using X-Wing HPKE (RFC 9180) with ChaCha20-Poly1305 AEAD.
173
+ *
174
+ * Output format: encappedKey (1120 bytes) || ciphertext (variable length)
175
+ *
176
+ * @param pubKeyA - Recipient's public key
177
+ * @param msg - Message to encrypt
178
+ * @param aad - Additional authenticated data (default: empty)
179
+ * @param info - Context info for key derivation (default: empty)
180
+ * @returns Encrypted data (encappedKey || ciphertext)
181
+ */
182
+ async function encrypt(pubKeyA, msg, aad = new Uint8Array(0), info = new Uint8Array(0)) {
183
+ const suite = await createXwingSuite();
184
+ // Warn if using the insecure test public key
185
+ const pubKeyBytes = new Uint8Array(await suite.kem.serializePublicKey(pubKeyA));
186
+ warnIfTestPubKey(pubKeyBytes);
187
+ // Create fresh ArrayBuffer copies to avoid SharedArrayBuffer issues
188
+ const infoCopy = new Uint8Array(info);
189
+ const sender = await suite.createSenderContext({
190
+ recipientPublicKey: pubKeyA,
191
+ info: infoCopy.buffer,
192
+ });
193
+ const msgCopy = new Uint8Array(msg);
194
+ const aadCopy = new Uint8Array(aad);
195
+ const ciphertext = await sender.seal(msgCopy.buffer, aadCopy.buffer);
196
+ const encappedKey = sender.enc;
197
+ // Concatenate encappedKey and ciphertext
198
+ const result = new Uint8Array(encappedKey.byteLength + ciphertext.byteLength);
199
+ result.set(new Uint8Array(encappedKey), 0);
200
+ result.set(new Uint8Array(ciphertext), encappedKey.byteLength);
201
+ return result;
202
+ }
203
+ /**
204
+ * Decrypt using X-Wing HPKE (RFC 9180) with ChaCha20-Poly1305 AEAD.
205
+ *
206
+ * Input format: encappedKey (1120 bytes) || ciphertext (variable length)
207
+ *
208
+ * @param privKeyA - Recipient's private key
209
+ * @param encryptedData - Encrypted data (encappedKey || ciphertext)
210
+ * @param aad - Additional authenticated data (default: empty)
211
+ * @param info - Context info for key derivation (default: empty)
212
+ * @returns Decrypted plaintext
213
+ */
214
+ async function decrypt(privKeyA, encryptedData, aad = new Uint8Array(0), info = new Uint8Array(0)) {
215
+ const suite = await createXwingSuite();
216
+ // X-Wing encapsulated key size from the KEM
217
+ const encappedKeySize = suite.kem.encSize;
218
+ if (encryptedData.length < encappedKeySize) {
219
+ throw new Error(`Invalid X-Wing encrypted data length: expected at least ${encappedKeySize} bytes, got ${encryptedData.length}`);
220
+ }
221
+ // Split encappedKey and ciphertext
222
+ const encappedKey = encryptedData.slice(0, encappedKeySize);
223
+ const ciphertext = encryptedData.slice(encappedKeySize);
224
+ // Create fresh ArrayBuffer copies to avoid SharedArrayBuffer issues
225
+ const infoCopy = new Uint8Array(info);
226
+ const encCopy = new Uint8Array(encappedKey);
227
+ const recipient = await suite.createRecipientContext({
228
+ recipientKey: privKeyA.privateKey,
229
+ enc: encCopy.buffer,
230
+ info: infoCopy.buffer,
231
+ });
232
+ const ctCopy = new Uint8Array(ciphertext);
233
+ const aadCopy = new Uint8Array(aad);
234
+ const plaintext = await recipient.open(ctCopy.buffer, aadCopy.buffer);
235
+ return new Uint8Array(plaintext);
236
+ }
237
+ /**
238
+ * Create an X-Wing encryptor for encrypting inputs.
239
+ * Follows the same pattern as ECIES encryptor in ecies.ts.
240
+ *
241
+ * The encryptor:
242
+ * 1. Encodes the plaintext with its context (HADU encoding)
243
+ * 2. Encrypts using X-Wing HPKE
244
+ * 3. Computes handle for tracking
245
+ * 4. Returns the encrypted ciphertext with metadata
246
+ *
247
+ * @param args - X-Wing encryptor arguments (recipient's public key)
248
+ * @returns Encryptor function
249
+ */
250
+ function getXwingEncryptor({ pubKeyA, }) {
251
+ return async ({ plaintext, context, }) => {
252
+ if (plaintext.scheme !== encryption_js_1.encryptionSchemes.xwing) {
253
+ throw new Error(`Plaintext with scheme ${(0, encryption_js_1.getEncryptionSchemeName)(plaintext.scheme)} cannot be encrypted with X-Wing`);
254
+ }
255
+ // Encode plaintext with context (HADU encoding)
256
+ const inputCiphertextPayloadBytes = Buffer.from((0, hadu_js_1.encodeInput)({ plaintext, context }));
257
+ // Encrypt with X-Wing HPKE (empty AAD and info)
258
+ const aad = new Uint8Array(0);
259
+ const info = new Uint8Array(0);
260
+ const ct = await encrypt(pubKeyA, inputCiphertextPayloadBytes, aad, info);
261
+ // Compute handle for ciphertext tracking
262
+ const handle = (0, handle_js_1.computeHandle)({
263
+ ciphertext: ct,
264
+ handleType: plaintext.type,
265
+ indexHandle: 0,
266
+ handleVersion: 0,
267
+ context: context,
268
+ });
269
+ return {
270
+ handle: (0, binary_js_1.asBytes32)(handle),
271
+ context,
272
+ ciphertext: {
273
+ scheme: encryption_js_1.encryptionSchemes.xwing,
274
+ type: plaintext.type,
275
+ // Prepend handle as checksum for early mismatch detection
276
+ value: (0, encryption_js_1.encodeCiphertextInput)(context.version, (0, binary_js_1.bytesToHex)(handle), (0, binary_js_1.bytesToHex)(ct)),
277
+ },
278
+ };
279
+ };
280
+ }
281
+ /**
282
+ * Create an X-Wing decryptor for decrypting inputs.
283
+ * Follows the same pattern as ECIES decryptor in ecies.ts.
284
+ *
285
+ * The decryptor:
286
+ * 1. Removes the prepended handle from the ciphertext
287
+ * 2. Decrypts using X-Wing HPKE
288
+ * 3. Decodes the HADU-encoded payload
289
+ * 4. Extracts and returns the plaintext
290
+ *
291
+ * @param args - X-Wing decryptor arguments (recipient's private key)
292
+ * @returns Decryptor function
293
+ */
294
+ function getXwingDecryptor({ privKeyA, }) {
295
+ return async ({ scheme, value, }) => {
296
+ if (scheme !== encryption_js_1.encryptionSchemes.xwing) {
297
+ throw new Error(`Ciphertext with scheme ${(0, encryption_js_1.getEncryptionSchemeName)(scheme)} cannot be decrypted with X-Wing`);
298
+ }
299
+ // Remove the prepended handle
300
+ const { ciphertext } = (0, encryption_js_1.decodeCiphertextInput)(value);
301
+ // Decrypt with X-Wing HPKE (empty AAD and info)
302
+ const aad = new Uint8Array(0);
303
+ const info = new Uint8Array(0);
304
+ const ptBuf = await decrypt(privKeyA, (0, binary_js_1.bytesFromHexString)(ciphertext), aad, info);
305
+ // Decode HADU-encoded payload
306
+ const payload = (0, hadu_js_1.decodeInput)(ptBuf);
307
+ const computable = payload.value;
308
+ if (computable.case !== 'scalar') {
309
+ throw new Error(`Decrypted plaintext is not a scalar, cannot currently be decrypted. This feature may be implemented on request.`);
310
+ }
311
+ // Extract and return plaintext
312
+ const typ = (0, schema_js_1.parse)(encryption_js_1.SupportedTeeType, computable.value.type);
313
+ return (0, encryption_js_1.bytesToPlaintext)(computable.value.value, encryption_js_1.encryptionSchemes.xwing, typ);
314
+ };
315
+ }
316
+ /**
317
+ * Returns true if the raw public key bytes match the public key encoded by the keypair.
318
+ * Used to catch caller mistakes before sending the keypair to the covalidator, where a
319
+ * mismatch would produce a cryptic signature error instead of a clear failure.
320
+ */
321
+ function reencryptPublicKeysMatch(reencryptPubKey, reencryptKeypair) {
322
+ const keypairPubKey = reencryptKeypair.encodePublicKey();
323
+ return (keypairPubKey.length === reencryptPubKey.length &&
324
+ keypairPubKey.every((byte, i) => byte === reencryptPubKey[i]));
325
+ }
326
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieHdpbmcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGl0ZS94d2luZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUE4REEsd0NBV0M7QUFNRCw0Q0FXQztBQXdDRCxnRUE0QkM7QUFPRCxvREFlQztBQVFELG9EQWdCQztBQVNELHNEQUlDO0FBUUQsb0RBS0M7QUE2QkQsMEJBa0NDO0FBYUQsMEJBb0NDO0FBZUQsOENBaURDO0FBZUQsOENBNENDO0FBT0QsNERBU0M7QUFqZUQsNkRBQTBEO0FBQzFELHFDQUFxRDtBQUNyRCw2REFBK0M7QUFDL0MsNENBQXlFO0FBQ3pFLCtEQWNxQztBQUNyQyw0Q0FBNkM7QUFFN0MsNENBQXFDO0FBQ3JDLHVDQUFxRDtBQUVyRCx3Q0FBd0M7QUFDeEMsTUFBTSxRQUFRLEdBQUcsSUFBSSx3QkFBSyxFQUFFLENBQUM7QUFFN0I7OztHQUdHO0FBQ1UsUUFBQSxxQkFBcUIsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDO0FBRTVEOzs7OztHQUtHO0FBQ1UsUUFBQSxxQkFBcUIsR0FDaEMsb0VBQW9FLENBQUM7QUFFdkUsTUFBTSx1QkFBdUIsR0FBRyxJQUFBLDhCQUFrQixFQUFDLDZCQUFxQixDQUFDLENBQUM7QUFFMUU7Ozs7Ozs7O0dBUUc7QUFDVSxRQUFBLHlCQUF5QixHQUNwQyxvNEVBQW80RSxDQUFDO0FBRXY0RSxNQUFNLHlCQUF5QixHQUFHLElBQUEsOEJBQWtCLEVBQUMsaUNBQXlCLENBQUMsQ0FBQztBQUVoRjs7O0dBR0c7QUFDSCxTQUFnQixjQUFjLENBQUMsSUFBZ0I7SUFDN0MsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FDM0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLEtBQUssdUJBQXVCLENBQUMsQ0FBQyxDQUFDLENBQ2pELENBQUM7SUFDRixJQUFJLFVBQVUsRUFBRSxDQUFDO1FBQ2YsT0FBTyxDQUFDLElBQUksQ0FDVixz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
@@ -0,0 +1 @@
1
+ export * from './local-node.js';
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./local-node.js"), exports);
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbG9jYWwvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLGtEQUFnQyJ9
@@ -0,0 +1,37 @@
1
+ import { Schema } from 'effect';
2
+ /**
3
+ * Schema for the environment variables required to connect to a local Inco node.
4
+ *
5
+ * Includes executor/sender addresses, keys, covalidator settings, and optional
6
+ * remote compute-server overrides. Typically populated from a `.env` file.
7
+ */
8
+ export declare const LocalNodeEnv: Schema.Struct<{
9
+ DEPLOYER_ADDRESS: Schema.brand<Schema.filter<Schema.TemplateLiteral<`0x${string}`>>, "Address">;
10
+ STATE_DUMP: typeof Schema.String;
11
+ EXECUTOR_ADDRESS: Schema.brand<Schema.filter<Schema.TemplateLiteral<`0x${string}`>>, "Address">;
12
+ NETWORK_PUBKEY: Schema.optional<Schema.TemplateLiteral<`0x${string}`>>;
13
+ SENDER_ADDRESS: Schema.brand<Schema.filter<Schema.TemplateLiteral<`0x${string}`>>, "Address">;
14
+ SENDER_PRIVATE_KEY: Schema.TemplateLiteral<`0x${string}`>;
15
+ EIP712_SIGNER_ADDRESS: Schema.optional<Schema.TemplateLiteral<`0x${string}`>>;
16
+ PEPPER: typeof Schema.String;
17
+ COVALIDATOR_NETWORK_PRIVATE_KEY: Schema.optional<Schema.TemplateLiteral<`0x${string}`>>;
18
+ COVALIDATOR_EIP712_PRIVATE_SIGNING_KEY: Schema.optional<Schema.TemplateLiteral<`0x${string}`>>;
19
+ COVALIDATOR_INCO_EXECUTOR_ADDR: Schema.brand<Schema.filter<Schema.TemplateLiteral<`0x${string}`>>, "Address">;
20
+ COVALIDATOR_HOST_CHAIN_ID: Schema.optional<typeof Schema.String>;
21
+ COVALIDATOR_URL: Schema.optional<typeof Schema.String>;
22
+ COVALIDATOR_HOST_CHAIN_RPC_URL: Schema.optional<typeof Schema.String>;
23
+ COVALIDATOR_COMPUTE_TYPE: Schema.optional<typeof Schema.String>;
24
+ COVALIDATOR_STORAGE_KEY: Schema.optional<Schema.TemplateLiteral<`0x${string}`>>;
25
+ }>;
26
+ /** Parsed local node environment configuration. */
27
+ export type LocalNodeEnv = typeof LocalNodeEnv.Type;
28
+ /**
29
+ * Parses a dotenv-formatted string or `Buffer` into a validated {@link LocalNodeEnv}.
30
+ *
31
+ * Falls back to `process.env` when no argument is provided.
32
+ *
33
+ * @param envFileOrObj - A dotenv-formatted string, `Buffer`, or `undefined` to use `process.env`.
34
+ * @returns A validated `LocalNodeEnv` object.
35
+ * @throws If required environment variables are missing or invalid.
36
+ */
37
+ export declare function parseLocalEnv(envFileOrObj?: string | Buffer): LocalNodeEnv;