@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,2 @@
1
+ export {};
2
+ //# 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,311 @@
1
+ import { Chacha20Poly1305 } from '@hpke/chacha20poly1305';
2
+ import { CipherSuite, HkdfSha256 } from '@hpke/core';
3
+ import { XWing } from '@hpke/hybridkem-x-wing';
4
+ import { asBytes32, bytesFromHexString, bytesToHex } from '../binary.js';
5
+ import { bytesToPlaintext, decodeCiphertextInput, encodeCiphertextInput, encryptionSchemes, getEncryptionSchemeName, SupportedTeeType, } from '../encryption/encryption.js';
6
+ import { computeHandle } from '../handle.js';
7
+ import { parse } from '../schema.js';
8
+ import { decodeInput, encodeInput } from './hadu.js';
9
+ // Get X-Wing key sizes from the library
10
+ const xwingKem = new XWing();
11
+ /**
12
+ * X-Wing public key size in bytes.
13
+ * Combining ML-KEM-768 (1184 bytes) and X25519 (32 bytes).
14
+ */
15
+ export const XWING_PUBLIC_KEY_SIZE = xwingKem.publicKeySize;
16
+ /**
17
+ * WARNING: TEST KEY - DO NOT USE IN PRODUCTION
18
+ * This is a well-known test seed (all zeros) that provides NO security.
19
+ * Anyone can derive the private key from this seed and decrypt all data.
20
+ * Only use for local development and testing.
21
+ */
22
+ export const TEST_NETWORK_SEED_KEY = '0x0000000000000000000000000000000000000000000000000000000000000000';
23
+ const TEST_NETWORK_SEED_BYTES = bytesFromHexString(TEST_NETWORK_SEED_KEY);
24
+ /**
25
+ * WARNING: TEST KEY - DO NOT USE IN PRODUCTION
26
+ * This is the public key derived from TEST_NETWORK_SEED_KEY (all zeros).
27
+ * Data encrypted with this key can be decrypted by anyone who knows the seed.
28
+ * Only use for local development and testing.
29
+ *
30
+ * Generated from Go with seed of all zeros using HPKE layer: hpke.KEM_XWING.Scheme().DeriveKeyPair(seed)
31
+ * This matches the key used in covalidator's GetXwingPrivateKeyForTesting() via DeriveXwingPrivateKey
32
+ */
33
+ export const TEST_NETWORK_XWING_PUBKEY = '0xca882388911c7c762aafc20debd63e845b3bed28c9d5262cdea7771fb31bd660a1ae7b395a9a7df3d12c7b118e8eda5057572c1ba05cd9b635edf33dabca4cac7291e0848f19c20e5beb850c3818f3543d49b3a5c729cb86a28fda539775d04feda112fe0c81d138aaf623aea7d507a4e826e890105db6065a44aba76a10d771c00d1b33f4ac51869806aae18eada68f19047024542d64a7aa1c91a5e1aa49d93613b5224b415bcc7aa166e4b55033438d20c641f9664fdb1689b53208181463e3d1325d46b30f07c5945b7e3fa1418bf833d975258461b294664eaf60795964924a280729c10a37fc6e967440bdd55d4ca53596286383481291152365303d44517cef369c00933b0b30368a230353e729c031075e8388673678a56b3ba84a165b28096ee9bd684483e1844258b451c365c41fa534152a3b64120041450128e960c7d6437d717ee266bdde7aaeec225ed93b958d188e97407349f1382976ca47d761ecc59a6f394487eb015c083abb490584677240eb47f838c838568a496119378b8bb81484610a50792b5d9c9939db188e7d0249d3cb918c436f111a2898849b286b0743a22c57464c709c5eaceac1ba493adca3328c0b14b5e38d3aea74e328b622b17e7181c35ad11c2103bdb7f2b209d93dcbc4ab61a06bc37139e6d2b7a06c5b7e9267bef3a8918a706f793271a5acc2574532da79e5a10cf074b998147a3c43586a411a513bba0d11cc19a36c83b19277f28022c88b120abfdba7076a8263e05336e3245aef7033eb3c762b5bbfa5791ac960398b649d5cbb652ddc6b2398143a0861ab3b410b696328879c099098adf819fbf7ac170030e86675e7f45c22ac9e1cf52c3102487bb0b91ab592afdc69c6e3a9b71876b86260b6c736b8291098f1130d3b763525cbad540ce2d042eacb6ed43b7bcba898f712c412f26066e09945f44ec7026c8ef959831abc10719d2017a12a41728b41c02371a5f5756ebc79406be708ea41bbd21563c874a0b791a3b4e4224a609967004f065c5ab4f3b4c61cb35df70573269da53179c3701fc5205f61974426f9b794c1b5826494b70842b6920c17752029369264dc8590b898b85c9d89a258e1f46c1b0490efd17c485cb51687cea272041e90b8e629521d3c5e3fa7518161bad7a159295b63cc6c0077897b53d47db8bc0ecb820f550705b65715a1a1094d04854f56acd26aa0baa10cb8447fad6211f53105796a42882328e6852e8de821c283b51eaab9bc95c4dc53615626049d63b1f9a457193805276b1905b0ab39353b5cf91fdd6023d4d816aef9cce4a3cfb3d12190172df221ae61d427563a098cc60e3dc9997ef54959180be5dc64a911157db6be3a01be2ee343caab33b8729abf0c50c674758c511291941fceac646232920907c2e88b9ec10211161729c797643a553a6ae5c4b7483c04e3263bd291e311c609071348b7c3310aa97d6b8318e0a4afe8399fa22f951049a9bb8860f7c69a333d3cc1aaf0129ab560713bf29eb3a01f9a276c78e54e3a3648b2447c80242b271b11406866389426d8b59796540d6b5702092ab21ee217c075cfc0c17ef826ce9ea29b9e61617457a5b1aaa23a58615dc53c59183beb36ea19498c21820b70ab47adeb678f1c52bf8768b3597b608ea1a8a15cd62e8a29bec4a1ac248ef9f02de0144bca06025f95a42bd6c8eaaaaaa2366328561d';
34
+ const TEST_NETWORK_PUBKEY_BYTES = bytesFromHexString(TEST_NETWORK_XWING_PUBKEY);
35
+ /**
36
+ * Check if a byte array matches the test seed key.
37
+ * Logs a warning if it does.
38
+ */
39
+ export function warnIfTestSeed(seed) {
40
+ const isTestSeed = seed.every((byte, i) => byte === TEST_NETWORK_SEED_BYTES[i]);
41
+ if (isTestSeed) {
42
+ console.warn('WARNING: Using TEST_NETWORK_SEED_KEY. This key provides no security ' +
43
+ 'and should only be used for local development and testing.');
44
+ }
45
+ return isTestSeed;
46
+ }
47
+ /**
48
+ * Check if a byte array matches the test public key.
49
+ * Logs a warning if it does.
50
+ */
51
+ export function warnIfTestPubKey(pubKeyBytes) {
52
+ const isTestPubKey = pubKeyBytes.every((byte, i) => byte === TEST_NETWORK_PUBKEY_BYTES[i]);
53
+ if (isTestPubKey) {
54
+ console.warn('WARNING: Using TEST_NETWORK_XWING_PUBKEY. Data encrypted with this key ' +
55
+ 'can be decrypted by anyone. Only use for local development and testing.');
56
+ }
57
+ return isTestPubKey;
58
+ }
59
+ /**
60
+ * Create HPKE cipher suite with X-Wing KEM, HKDF-SHA256, and ChaCha20-Poly1305 AEAD.
61
+ * This configuration provides post-quantum security with hybrid classical/PQ encryption.
62
+ * Workaround: Manually calls setup on the XWing KEM due to a bug in @hpke/hybridkem-x-wing@0.6.1
63
+ * where encap() calls getRandomValues before calling _setup().
64
+ */
65
+ async function createXwingSuite() {
66
+ const kem = new XWing();
67
+ // Workaround: Call setup to initialize _api before encap() is called
68
+ // @ts-expect-error _setup is private but must be called to initialize crypto API
69
+ await kem._setup();
70
+ return new CipherSuite({
71
+ kem,
72
+ kdf: new HkdfSha256(),
73
+ aead: new Chacha20Poly1305(),
74
+ });
75
+ }
76
+ /**
77
+ * Derive X-Wing keypair from a 32-byte seed (deterministic).
78
+ * This matches the Go implementation in covalidator/encoding/xwing.go
79
+ *
80
+ * @param seed - 32-byte seed for deterministic key derivation
81
+ * @returns X-Wing keypair with cached public key bytes
82
+ */
83
+ export async function deriveXwingKeypairFromSeed(seed) {
84
+ if (seed.length !== 32) {
85
+ throw new Error(`Invalid X-Wing seed length: expected 32 bytes, got ${seed.length}`);
86
+ }
87
+ warnIfTestSeed(seed);
88
+ const suite = await createXwingSuite();
89
+ // Create a fresh ArrayBuffer copy to avoid SharedArrayBuffer issues
90
+ const seedCopy = new Uint8Array(seed);
91
+ const keyPair = await suite.kem.deriveKeyPair(seedCopy.buffer);
92
+ const publicKeyBytes = new Uint8Array(await suite.kem.serializePublicKey(keyPair.publicKey));
93
+ return {
94
+ scheme: encryptionSchemes.xwing,
95
+ publicKey: keyPair.publicKey,
96
+ privateKey: keyPair.privateKey,
97
+ encodePublicKey() {
98
+ return publicKeyBytes;
99
+ },
100
+ };
101
+ }
102
+ /**
103
+ * Generate a random X-Wing keypair.
104
+ *
105
+ * @returns X-Wing keypair with cached public key bytes
106
+ */
107
+ export async function generateXwingKeypair() {
108
+ const suite = await createXwingSuite();
109
+ const keyPair = await suite.kem.generateKeyPair();
110
+ const publicKeyBytes = new Uint8Array(await suite.kem.serializePublicKey(keyPair.publicKey));
111
+ return {
112
+ scheme: encryptionSchemes.xwing,
113
+ publicKey: keyPair.publicKey,
114
+ privateKey: keyPair.privateKey,
115
+ encodePublicKey() {
116
+ return publicKeyBytes;
117
+ },
118
+ };
119
+ }
120
+ /**
121
+ * Decode X-Wing public key from bytes.
122
+ *
123
+ * @param pubKeyBytes - 1216-byte X-Wing public key
124
+ * @returns CryptoKey for encryption operations
125
+ */
126
+ export async function decodeXwingPublicKey(pubKeyBytes) {
127
+ const suite = await createXwingSuite();
128
+ if (pubKeyBytes.length !== suite.kem.publicKeySize) {
129
+ throw new Error(`Invalid X-Wing public key length: expected ${XWING_PUBLIC_KEY_SIZE} bytes, got ${pubKeyBytes.length}`);
130
+ }
131
+ warnIfTestPubKey(pubKeyBytes);
132
+ // Create a fresh ArrayBuffer copy to avoid SharedArrayBuffer issues
133
+ const pubKeyCopy = new Uint8Array(pubKeyBytes);
134
+ return await suite.kem.deserializePublicKey(pubKeyCopy.buffer);
135
+ }
136
+ /**
137
+ * Decode X-Wing private key from 32-byte seed.
138
+ * Alias for deriveXwingKeypairFromSeed for consistency with Go API.
139
+ *
140
+ * @param seed - 32-byte seed
141
+ * @returns X-Wing keypair
142
+ */
143
+ export async function decodeXwingPrivateKey(seed) {
144
+ return await deriveXwingKeypairFromSeed(seed);
145
+ }
146
+ /**
147
+ * Encode X-Wing public key to bytes.
148
+ *
149
+ * @param publicKey - CryptoKey containing X-Wing public key
150
+ * @returns 1216-byte serialized public key
151
+ */
152
+ export async function encodeXwingPublicKey(publicKey) {
153
+ const suite = await createXwingSuite();
154
+ return new Uint8Array(await suite.kem.serializePublicKey(publicKey));
155
+ }
156
+ /**
157
+ * Encrypt using X-Wing HPKE (RFC 9180) with ChaCha20-Poly1305 AEAD.
158
+ *
159
+ * Output format: encappedKey (1120 bytes) || ciphertext (variable length)
160
+ *
161
+ * @param pubKeyA - Recipient's public key
162
+ * @param msg - Message to encrypt
163
+ * @param aad - Additional authenticated data (default: empty)
164
+ * @param info - Context info for key derivation (default: empty)
165
+ * @returns Encrypted data (encappedKey || ciphertext)
166
+ */
167
+ export async function encrypt(pubKeyA, msg, aad = new Uint8Array(0), info = new Uint8Array(0)) {
168
+ const suite = await createXwingSuite();
169
+ // Warn if using the insecure test public key
170
+ const pubKeyBytes = new Uint8Array(await suite.kem.serializePublicKey(pubKeyA));
171
+ warnIfTestPubKey(pubKeyBytes);
172
+ // Create fresh ArrayBuffer copies to avoid SharedArrayBuffer issues
173
+ const infoCopy = new Uint8Array(info);
174
+ const sender = await suite.createSenderContext({
175
+ recipientPublicKey: pubKeyA,
176
+ info: infoCopy.buffer,
177
+ });
178
+ const msgCopy = new Uint8Array(msg);
179
+ const aadCopy = new Uint8Array(aad);
180
+ const ciphertext = await sender.seal(msgCopy.buffer, aadCopy.buffer);
181
+ const encappedKey = sender.enc;
182
+ // Concatenate encappedKey and ciphertext
183
+ const result = new Uint8Array(encappedKey.byteLength + ciphertext.byteLength);
184
+ result.set(new Uint8Array(encappedKey), 0);
185
+ result.set(new Uint8Array(ciphertext), encappedKey.byteLength);
186
+ return result;
187
+ }
188
+ /**
189
+ * Decrypt using X-Wing HPKE (RFC 9180) with ChaCha20-Poly1305 AEAD.
190
+ *
191
+ * Input format: encappedKey (1120 bytes) || ciphertext (variable length)
192
+ *
193
+ * @param privKeyA - Recipient's private key
194
+ * @param encryptedData - Encrypted data (encappedKey || ciphertext)
195
+ * @param aad - Additional authenticated data (default: empty)
196
+ * @param info - Context info for key derivation (default: empty)
197
+ * @returns Decrypted plaintext
198
+ */
199
+ export async function decrypt(privKeyA, encryptedData, aad = new Uint8Array(0), info = new Uint8Array(0)) {
200
+ const suite = await createXwingSuite();
201
+ // X-Wing encapsulated key size from the KEM
202
+ const encappedKeySize = suite.kem.encSize;
203
+ if (encryptedData.length < encappedKeySize) {
204
+ throw new Error(`Invalid X-Wing encrypted data length: expected at least ${encappedKeySize} bytes, got ${encryptedData.length}`);
205
+ }
206
+ // Split encappedKey and ciphertext
207
+ const encappedKey = encryptedData.slice(0, encappedKeySize);
208
+ const ciphertext = encryptedData.slice(encappedKeySize);
209
+ // Create fresh ArrayBuffer copies to avoid SharedArrayBuffer issues
210
+ const infoCopy = new Uint8Array(info);
211
+ const encCopy = new Uint8Array(encappedKey);
212
+ const recipient = await suite.createRecipientContext({
213
+ recipientKey: privKeyA.privateKey,
214
+ enc: encCopy.buffer,
215
+ info: infoCopy.buffer,
216
+ });
217
+ const ctCopy = new Uint8Array(ciphertext);
218
+ const aadCopy = new Uint8Array(aad);
219
+ const plaintext = await recipient.open(ctCopy.buffer, aadCopy.buffer);
220
+ return new Uint8Array(plaintext);
221
+ }
222
+ /**
223
+ * Create an X-Wing encryptor for encrypting inputs.
224
+ * Follows the same pattern as ECIES encryptor in ecies.ts.
225
+ *
226
+ * The encryptor:
227
+ * 1. Encodes the plaintext with its context (HADU encoding)
228
+ * 2. Encrypts using X-Wing HPKE
229
+ * 3. Computes handle for tracking
230
+ * 4. Returns the encrypted ciphertext with metadata
231
+ *
232
+ * @param args - X-Wing encryptor arguments (recipient's public key)
233
+ * @returns Encryptor function
234
+ */
235
+ export function getXwingEncryptor({ pubKeyA, }) {
236
+ return async ({ plaintext, context, }) => {
237
+ if (plaintext.scheme !== encryptionSchemes.xwing) {
238
+ throw new Error(`Plaintext with scheme ${getEncryptionSchemeName(plaintext.scheme)} cannot be encrypted with X-Wing`);
239
+ }
240
+ // Encode plaintext with context (HADU encoding)
241
+ const inputCiphertextPayloadBytes = Buffer.from(encodeInput({ plaintext, context }));
242
+ // Encrypt with X-Wing HPKE (empty AAD and info)
243
+ const aad = new Uint8Array(0);
244
+ const info = new Uint8Array(0);
245
+ const ct = await encrypt(pubKeyA, inputCiphertextPayloadBytes, aad, info);
246
+ // Compute handle for ciphertext tracking
247
+ const handle = computeHandle({
248
+ ciphertext: ct,
249
+ handleType: plaintext.type,
250
+ indexHandle: 0,
251
+ handleVersion: 0,
252
+ context: context,
253
+ });
254
+ return {
255
+ handle: asBytes32(handle),
256
+ context,
257
+ ciphertext: {
258
+ scheme: encryptionSchemes.xwing,
259
+ type: plaintext.type,
260
+ // Prepend handle as checksum for early mismatch detection
261
+ value: encodeCiphertextInput(context.version, bytesToHex(handle), bytesToHex(ct)),
262
+ },
263
+ };
264
+ };
265
+ }
266
+ /**
267
+ * Create an X-Wing decryptor for decrypting inputs.
268
+ * Follows the same pattern as ECIES decryptor in ecies.ts.
269
+ *
270
+ * The decryptor:
271
+ * 1. Removes the prepended handle from the ciphertext
272
+ * 2. Decrypts using X-Wing HPKE
273
+ * 3. Decodes the HADU-encoded payload
274
+ * 4. Extracts and returns the plaintext
275
+ *
276
+ * @param args - X-Wing decryptor arguments (recipient's private key)
277
+ * @returns Decryptor function
278
+ */
279
+ export function getXwingDecryptor({ privKeyA, }) {
280
+ return async ({ scheme, value, }) => {
281
+ if (scheme !== encryptionSchemes.xwing) {
282
+ throw new Error(`Ciphertext with scheme ${getEncryptionSchemeName(scheme)} cannot be decrypted with X-Wing`);
283
+ }
284
+ // Remove the prepended handle
285
+ const { ciphertext } = decodeCiphertextInput(value);
286
+ // Decrypt with X-Wing HPKE (empty AAD and info)
287
+ const aad = new Uint8Array(0);
288
+ const info = new Uint8Array(0);
289
+ const ptBuf = await decrypt(privKeyA, bytesFromHexString(ciphertext), aad, info);
290
+ // Decode HADU-encoded payload
291
+ const payload = decodeInput(ptBuf);
292
+ const computable = payload.value;
293
+ if (computable.case !== 'scalar') {
294
+ throw new Error(`Decrypted plaintext is not a scalar, cannot currently be decrypted. This feature may be implemented on request.`);
295
+ }
296
+ // Extract and return plaintext
297
+ const typ = parse(SupportedTeeType, computable.value.type);
298
+ return bytesToPlaintext(computable.value.value, encryptionSchemes.xwing, typ);
299
+ };
300
+ }
301
+ /**
302
+ * Returns true if the raw public key bytes match the public key encoded by the keypair.
303
+ * Used to catch caller mistakes before sending the keypair to the covalidator, where a
304
+ * mismatch would produce a cryptic signature error instead of a clear failure.
305
+ */
306
+ export function reencryptPublicKeysMatch(reencryptPubKey, reencryptKeypair) {
307
+ const keypairPubKey = reencryptKeypair.encodePublicKey();
308
+ return (keypairPubKey.length === reencryptPubKey.length &&
309
+ keypairPubKey.every((byte, i) => byte === reencryptPubKey[i]));
310
+ }
311
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieHdpbmcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGl0ZS94d2luZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUMxRCxPQUFPLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUNyRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxrQkFBa0IsRUFBRSxVQUFVLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDekUsT0FBTyxFQUNMLGdCQUFnQixFQUVoQixxQkFBcUIsRUFFckIscUJBQXFCLEVBQ3JCLGlCQUFpQixFQUdqQix1QkFBdUIsRUFHdkIsZ0JBQWdCLEdBRWpCLE1BQU0sNkJBQTZCLENBQUM7QUFDckMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUU3QyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3JDLE9BQU8sRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRXJELHdDQUF3QztBQUN4QyxNQUFNLFFBQVEsR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFDO0FBRTdCOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUM7QUFFNUQ7Ozs7O0dBS0c7QUFDSCxNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FDaEMsb0VBQW9FLENBQUM7QUFFdkUsTUFBTSx1QkFBdUIsR0FBRyxrQkFBa0IsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO0FBRTFFOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxDQUFDLE1BQU0seUJBQXlCLEdBQ3BDLG80RUFBbzRFLENBQUM7QUFFdjRFLE1BQU0seUJBQXlCLEdBQUcsa0JBQWtCLENBQUMseUJBQXlCLENBQUMsQ0FBQztBQUVoRjs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsY0FBYyxDQUFDLElBQWdCO0lBQzdDLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQzNCLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxLQUFLLHVCQUF1QixDQUFDLENBQUMsQ0FBQyxDQUNqRCxDQUFDO0lBQ0YsSUFBSSxVQUFVLEVBQUUsQ0FBQztRQUNmLE9BQU8sQ0FBQyxJQUFJLENBQ1Ysc0VBQXNFO1lBQ3BFLDREQUE0RCxDQUMvRCxDQUFDO0lBQ0osQ0FBQztJQUNELE9BQU8sVUFBVSxDQUFDO0FBQ3BCLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsZ0JBQWdCLENBQUMsV0FBdUI7SUFDdEQsTUFBTSxZQUFZLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FDcEMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLEtBQUsseUJBQXlCLENBQUMsQ0FBQyxDQUFDLENBQ25ELENBQUM7SUFDRixJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ2pCLE9BQU8sQ0FBQyxJQUFJLENBQ1YseUVBQXlFO1lBQ3ZFLHlFQUF5RSxDQUM1RSxDQUFDO0lBQ0osQ0FBQztJQUNELE9BQU8sWUFBWSxDQUFDO0FBQ3RCLENBQUM7QUFlRDs7Ozs7R0FLRztBQUNILEtBQUssVUFBVSxnQkFBZ0I7SUFDN0IsTUFBTSxHQUFHLEdBQUcsSUFBSSxLQUFLLEVBQUUsQ0FBQztJQUN4QixxRUFBcUU7SUFDckUsaUZBQWlGO0lBQ2pGLE1BQU0sR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQ25CLE9BQU8sSUFBSSxXQUFXLENBQUM7UUFDckIsR0FBRztRQUNILEdBQUcsRUFBRSxJQUFJLFVBQVUsRUFBRTtRQUNyQixJQUFJLEVBQUUsSUFBSSxnQkFBZ0IsRUFBRTtLQUM3QixDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSwwQkFBMEIsQ0FDOUMsSUFBZ0I7SUFFaEIsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLEVBQUUsRUFBRSxDQUFDO1FBQ3ZCLE1BQU0sSUFBSSxLQUFLLENBQ2Isc0RBQXNELElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FDcEUsQ0FBQztJQUNKLENBQUM7SUFFRCxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUM7SUFFckIsTUFBTSxLQUFLLEdBQUcsTUFBTSxnQkFBZ0IsRUFBRSxDQUFDO0lBQ3ZDLG9FQUFvRTtJQUNwRSxNQUFNLFFBQVEsR0FBRyxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUV0QyxNQUFNLE9BQU8sR0FBRyxNQUFNLEtBQUssQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMvRCxNQUFNLGNBQWMsR0FBRyxJQUFJLFVBQVUsQ0FDbkMsTUFBTSxLQUFLLENBQUMsR0FBRyxDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FDdEQsQ0FBQztJQUVGLE9BQU87UUFDTCxNQUFNLEVBQUUsaUJBQWlCLENBQUMsS0FBSztRQUMvQixTQUFTLEVBQUUsT0FBTyxDQUFDLFNBQVM7UUFDNUIsVUFBVSxFQUFFLE9BQU8sQ0FBQyxVQUFVO1FBQzlCLGVBQWU7WUFDYixPQUFPLGNBQWMsQ0FBQztRQUN4QixDQUFDO0tBQ0YsQ0FBQztBQUNKLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxvQkFBb0I7SUFDeEMsTUFBTSxLQUFLLEdBQUcsTUFBTSxnQkFBZ0IsRUFBRSxDQUFDO0lBQ3ZDLE1BQU0sT0FBTyxHQUFHLE1BQU0sS0FBSyxDQUFDLEdBQUcsQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUNsRCxNQUFNLGNBQWMsR0FBRyxJQUFJLFVBQVUsQ0FDbkMsTUFBTSxLQUFLLENBQUMsR0FBRyxDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FDdEQsQ0FBQztJQUVGLE9BQU87UUFDTCxNQUFNLEVBQUUsaUJBQWlCLENBQUMsS0FBSztRQUMvQixTQUFTLEVBQUUsT0FBTyxDQUFDLFNBQVM7UUFDNUIsVUFBVSxFQUFFLE9BQU8sQ0FBQyxVQUFVO1FBQzlCLGVBQWU7WUFDYixPQUFPLGNBQWMsQ0FBQztRQUN4QixDQUFDO0tBQ0YsQ0FBQztBQUNKLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsb0JBQW9CLENBQ3hDLFdBQXVCO0lBRXZCLE1BQU0sS0FBSyxHQUFHLE1BQU0sZ0JBQWdCLEVBQUUsQ0FBQztJQUN2QyxJQUFJLFdBQVcsQ0FBQyxNQUFNLEtBQUssS0FBSyxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNuRCxNQUFNLElBQUksS0FBSyxDQUNiLDhDQUE4QyxxQkFBcUIsZUFBZSxXQUFXLENBQUMsTUFBTSxFQUFFLENBQ3ZHLENBQUM7SUFDSixDQUFDO0lBRUQsZ0JBQWdCLENBQUMsV0FBVyxDQUFDLENBQUM7SUFFOUIsb0VBQW9FO0lBQ3BFLE1BQU0sVUFBVSxHQUFHLElBQUksVUFBVSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBRS9DLE9BQU8sTUFBTSxLQUFLLENBQUMsR0FBRyxDQUFDLG9CQUFvQixDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNqRSxDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxxQkFBcUIsQ0FDekMsSUFBZ0I7SUFFaEIsT0FBTyxNQUFNLDBCQUEwQixDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2hELENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsb0JBQW9CLENBQ3hDLFNBQW9CO0lBRXBCLE1BQU0sS0FBSyxHQUFHLE1BQU0sZ0JBQWdCLEVBQUUsQ0FBQztJQUN2QyxPQUFPLElBQUksVUFBVSxDQUFDLE1BQU0sS0FBSyxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO0FBQ3ZFLENBQUM7QUFrQkQ7Ozs7Ozs7Ozs7R0FVRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsT0FBTyxDQUMzQixPQUFrQixFQUNsQixHQUFlLEVBQ2YsTUFBa0IsSUFBSSxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQ25DLE9BQW1CLElBQUksVUFBVSxDQUFDLENBQUMsQ0FBQztJQUVwQyxNQUFNLEtBQUssR0FBRyxNQUFNLGdCQUFnQixFQUFFLENBQUM7SUFFdkMsNkNBQTZDO0lBQzdDLE1BQU0sV0FBVyxHQUFHLElBQUksVUFBVSxDQUNoQyxNQUFNLEtBQUssQ0FBQyxHQUFHLENBQUMsa0JBQWtCLENBQUMsT0FBTyxDQUFDLENBQzVDLENBQUM7SUFDRixnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUU5QixvRUFBb0U7SUFDcEUsTUFBTSxRQUFRLEdBQUcsSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7SUFFdEMsTUFBTSxNQUFNLEdBQUcsTUFBTSxLQUFLLENBQUMsbUJBQW1CLENBQUM7UUFDN0Msa0JBQWtCLEVBQUUsT0FBTztRQUMzQixJQUFJLEVBQUUsUUFBUSxDQUFDLE1BQU07S0FDdEIsQ0FBQyxDQUFDO0lBRUgsTUFBTSxPQUFPLEdBQUcsSUFBSSxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDcEMsTUFBTSxPQUFPLEdBQUcsSUFBSSxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7SUFFcEMsTUFBTSxVQUFVLEdBQUcsTUFBTSxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3JFLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUM7SUFFL0IseUNBQXlDO0lBQ3pDLE1BQU0sTUFBTSxHQUFHLElBQUksVUFBVSxDQUFDLFdBQVcsQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQzlFLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxVQUFVLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDM0MsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxVQUFVLENBQUMsRUFBRSxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUM7SUFFL0QsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQztBQUVEOzs7Ozs7Ozs7O0dBVUc7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLE9BQU8sQ0FDM0IsUUFBc0IsRUFDdEIsYUFBeUIsRUFDekIsTUFBa0IsSUFBSSxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQ25DLE9BQW1CLElBQUksVUFBVSxDQUFDLENBQUMsQ0FBQztJQUVwQyxNQUFNLEtBQUssR0FBRyxNQUFNLGdCQUFnQixFQUFFLENBQUM7SUFFdkMsNENBQTRDO0lBQzVDLE1BQU0sZUFBZSxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDO0lBQzFDLElBQUksYUFBYSxDQUFDLE1BQU0sR0FBRyxlQUFlLEVBQUUsQ0FBQztRQUMzQyxNQUFNLElBQUksS0FBSyxDQUNiLDJEQUEyRCxlQUFlLGVBQWUsYUFBYSxDQUFDLE1BQU0sRUFBRSxDQUNoSCxDQUFDO0lBQ0osQ0FBQztJQUVELG1DQUFtQztJQUNuQyxNQUFNLFdBQVcsR0FBRyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxlQUFlLENBQUMsQ0FBQztJQUM1RCxNQUFNLFVBQVUsR0FBRyxhQUFhLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBRXhELG9FQUFvRTtJQUNwRSxNQUFNLFFBQVEsR0FBRyxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN0QyxNQUFNLE9BQU8sR0FBRyxJQUFJLFVBQVUsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUU1QyxNQUFNLFNBQVMsR0FBRyxNQUFNLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQztRQUNuRCxZQUFZLEVBQUUsUUFBUSxDQUFDLFVBQVU7UUFDakMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxNQUFNO1FBQ25CLElBQUksRUFBRSxRQUFRLENBQUMsTUFBTTtLQUN0QixDQUFDLENBQUM7SUFFSCxNQUFNLE1BQU0sR0FBRyxJQUFJLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUMxQyxNQUFNLE9BQU8sR0FBRyxJQUFJLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUVwQyxNQUFNLFNBQVMsR0FBRyxNQUFNLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7SUFFdEUsT0FBTyxJQUFJLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUNuQyxDQUFDO0FBRUQ7Ozs7Ozs7Ozs7OztHQVlHO0FBQ0gsTUFBTSxVQUFVLGlCQUFpQixDQUFDLEVBQ2hDLE9BQU8sR0FDWTtJQUNuQixPQUFPLEtBQUssRUFBOEIsRUFDeEMsU0FBUyxFQUNULE9BQU8sR0FDZ0MsRUFFdkMsRUFBRTtRQUNGLElBQUksU0FBUyxDQUFDLE1BQU0sS0FBSyxpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNqRCxNQUFNLElBQUksS0FBSyxDQUNiLHlCQUF5Qix1QkFBdUIsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLGtDQUFrQyxDQUNyRyxDQUFDO1FBQ0osQ0FBQztRQUVELGdEQUFnRDtRQUNoRCxNQUFNLDJCQUEyQixHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQzdDLFdBQVcsQ0FBQyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUNwQyxDQUFDO1FBRUYsZ0RBQWdEO1FBQ2hELE1BQU0sR0FBRyxHQUFHLElBQUksVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzlCLE1BQU0sSUFBSSxHQUFHLElBQUksVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQy9CLE1BQU0sRUFBRSxHQUFHLE1BQU0sT0FBTyxDQUFDLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFFMUUseUNBQXlDO1FBQ3pDLE1BQU0sTUFBTSxHQUFHLGFBQWEsQ0FBQztZQUMzQixVQUFVLEVBQUUsRUFBRTtZQUNkLFVBQVUsRUFBRSxTQUFTLENBQUMsSUFBSTtZQUMxQixXQUFXLEVBQUUsQ0FBQztZQUNkLGFBQWEsRUFBRSxDQUFDO1lBQ2hCLE9BQU8sRUFBRSxPQUFPO1NBQ2pCLENBQUMsQ0FBQztRQUVILE9BQU87WUFDTCxNQUFNLEVBQUUsU0FBUyxDQUFDLE1BQU0sQ0FBQztZQUN6QixPQUFPO1lBQ1AsVUFBVSxFQUFFO2dCQUNWLE1BQU0sRUFBRSxpQkFBaUIsQ0FBQyxLQUFLO2dCQUMvQixJQUFJLEVBQUUsU0FBUyxDQUFDLElBQUk7Z0JBQ3BCLDBEQUEwRDtnQkFDMUQsS0FBSyxFQUFFLHFCQUFxQixDQUMxQixPQUFPLENBQUMsT0FBTyxFQUNmLFVBQVUsQ0FBQyxNQUFNLENBQUMsRUFDbEIsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUNmO2FBQ0Y7U0FDRixDQUFDO0lBQ0osQ0FBQyxDQUFDO0FBQ0osQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7R0FZRztBQUNILE1BQU0sVUFBVSxpQkFBaUIsQ0FBQyxFQUNoQyxRQUFRLEdBQ1c7SUFDbkIsT0FBTyxLQUFLLEVBQThCLEVBQ3hDLE1BQU0sRUFDTixLQUFLLEdBQ3dCLEVBQXdDLEVBQUU7UUFDdkUsSUFBSSxNQUFNLEtBQUssaUJBQWlCLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDdkMsTUFBTSxJQUFJLEtBQUssQ0FDYiwwQkFBMEIsdUJBQXVCLENBQUMsTUFBTSxDQUFDLGtDQUFrQyxDQUM1RixDQUFDO1FBQ0osQ0FBQztRQUVELDhCQUE4QjtRQUM5QixNQUFNLEVBQUUsVUFBVSxFQUFFLEdBQUcscUJBQXFCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFcEQsZ0RBQWdEO1FBQ2hELE1BQU0sR0FBRyxHQUFHLElBQUksVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzlCLE1BQU0sSUFBSSxHQUFHLElBQUksVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQy9CLE1BQU0sS0FBSyxHQUFHLE1BQU0sT0FBTyxDQUN6QixRQUFRLEVBQ1Isa0JBQWtCLENBQUMsVUFBVSxDQUFDLEVBQzlCLEdBQUcsRUFDSCxJQUFJLENBQ0wsQ0FBQztRQUVGLDhCQUE4QjtRQUM5QixNQUFNLE9BQU8sR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbkMsTUFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQztRQUVqQyxJQUFJLFVBQVUsQ0FBQyxJQUFJLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDakMsTUFBTSxJQUFJLEtBQUssQ0FDYixpSEFBaUgsQ0FDbEgsQ0FBQztRQUNKLENBQUM7UUFFRCwrQkFBK0I7UUFDL0IsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLGdCQUFnQixFQUFFLFVBQVUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDM0QsT0FBTyxnQkFBZ0IsQ0FDckIsVUFBVSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQ3RCLGlCQUFpQixDQUFDLEtBQUssRUFDdkIsR0FBRyxDQUMyQixDQUFDO0lBQ25DLENBQUMsQ0FBQztBQUNKLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLHdCQUF3QixDQUN0QyxlQUEyQixFQUMzQixnQkFBOEI7SUFFOUIsTUFBTSxhQUFhLEdBQUcsZ0JBQWdCLENBQUMsZUFBZSxFQUFFLENBQUM7SUFDekQsT0FBTyxDQUNMLGFBQWEsQ0FBQyxNQUFNLEtBQUssZUFBZSxDQUFDLE1BQU07UUFDL0MsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksS0FBSyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FDOUQsQ0FBQztBQUNKLENBQUMifQ==
@@ -0,0 +1 @@
1
+ export * from './local-node.js';
@@ -0,0 +1,2 @@
1
+ export * from './local-node.js';
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbG9jYWwvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxpQkFBaUIsQ0FBQyJ9
@@ -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;