@inco/js 0.2.15 → 0.2.17

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 (523) hide show
  1. package/dist/cjs/attesteddecrypt/attested-decrypt.d.ts +34 -0
  2. package/dist/cjs/attesteddecrypt/attested-decrypt.js +91 -0
  3. package/dist/cjs/attesteddecrypt/index.d.ts +2 -0
  4. package/dist/cjs/attesteddecrypt/index.js +19 -0
  5. package/dist/cjs/attesteddecrypt/types.d.ts +18 -0
  6. package/dist/cjs/attesteddecrypt/types.js +16 -0
  7. package/dist/cjs/binary.js +82 -0
  8. package/dist/{chain.js → cjs/chain.js} +1 -1
  9. package/dist/{encryption → cjs/encryption}/encryption.d.ts +2 -2
  10. package/dist/cjs/encryption/encryption.js +109 -0
  11. package/dist/cjs/encryption/index.d.ts +1 -0
  12. package/dist/{fhevm → cjs/encryption}/index.js +2 -2
  13. package/dist/{fhevm → cjs/fhevm}/fhe-environment.d.ts +1 -1
  14. package/dist/cjs/fhevm/fhe-environment.js +11 -0
  15. package/dist/{fhevm → cjs/fhevm}/fhevm.d.ts +1 -1
  16. package/dist/cjs/fhevm/fhevm.js +145 -0
  17. package/dist/cjs/fhevm/index.d.ts +1 -0
  18. package/dist/{encryption → cjs/fhevm}/index.js +2 -2
  19. package/dist/{fhevm → cjs/fhevm}/reencrypt.d.ts +3 -3
  20. package/dist/cjs/fhevm/reencrypt.js +127 -0
  21. package/dist/{fhevm → cjs/fhevm}/tfhe.d.ts +1 -1
  22. package/dist/cjs/fhevm/tfhe.js +336 -0
  23. package/dist/{fhevm → cjs/fhevm}/types.d.ts +1 -1
  24. package/dist/cjs/fhevm/types.js +29 -0
  25. package/dist/cjs/generated/abis/addTwo.js +62 -0
  26. package/dist/cjs/generated/abis/inco-fhevm.js +681 -0
  27. package/dist/{generated → cjs/generated}/abis/index.js +1 -1
  28. package/dist/cjs/generated/abis/lightning.js +1606 -0
  29. package/dist/{generated → cjs/generated}/es/cosmos/ics23/v1/proofs_pb.js +1 -1
  30. package/dist/{generated → cjs/generated}/es/cosmos/msg/v1/msg_pb.js +1 -1
  31. package/dist/{generated → cjs/generated}/es/cosmos_proto/cosmos_pb.js +1 -1
  32. package/dist/{generated → cjs/generated}/es/google/api/annotations_pb.js +1 -1
  33. package/dist/{generated → cjs/generated}/es/google/api/http_pb.js +1 -1
  34. package/dist/{generated → cjs/generated}/es/inco/fhe/v1/events_pb.js +1 -1
  35. package/dist/{generated → cjs/generated}/es/inco/fhe/v1/genesis_pb.js +1 -1
  36. package/dist/{generated → cjs/generated}/es/inco/fhe/v1/query_pb.js +1 -1
  37. package/dist/{generated → cjs/generated}/es/inco/fhe/v1/tx_pb.js +1 -1
  38. package/dist/{generated → cjs/generated}/es/inco/fhe/v1/types_pb.js +1 -1
  39. package/dist/{generated → cjs/generated}/es/inco/kms/lite/v1/kms_service_pb.d.ts +54 -41
  40. package/dist/{generated → cjs/generated}/es/inco/kms/lite/v1/kms_service_pb.js +6 -11
  41. package/dist/{generated → cjs/generated}/es/inco/kms/lite/v1/types_pb.js +1 -1
  42. package/dist/{generated → cjs/generated}/es/inco/preflight/v1/genesis_pb.js +1 -1
  43. package/dist/{generated → cjs/generated}/es/inco/preflight/v1/query_pb.js +1 -1
  44. package/dist/{generated → cjs/generated}/es/inco/preflight/v1/tx_pb.js +1 -1
  45. package/dist/{generated → cjs/generated}/es/inco/preflight/v1/types_pb.js +1 -1
  46. package/dist/{generated → cjs/generated}/es/kms/base_pb.js +1 -1
  47. package/dist/{generated → cjs/generated}/es/sf/ethereum/type/v2/type_pb.js +1 -1
  48. package/dist/{generated → cjs/generated}/fhe-environments.js +1 -1
  49. package/dist/{generated → cjs/generated}/lightning.d.ts +21 -0
  50. package/dist/{generated → cjs/generated}/lightning.js +23 -1
  51. package/dist/cjs/generated/local-node.d.ts +23 -0
  52. package/dist/cjs/generated/local-node.js +27 -0
  53. package/dist/{generated → cjs/generated}/ts/amino/amino.js +1 -1
  54. package/dist/{generated → cjs/generated}/ts/cometbft/abci/v1/types.js +1 -1
  55. package/dist/cjs/generated/ts/cometbft/crypto/v1/keys.js +108 -0
  56. package/dist/cjs/generated/ts/cometbft/crypto/v1/proof.js +433 -0
  57. package/dist/cjs/generated/ts/cometbft/types/v1/params.js +716 -0
  58. package/dist/cjs/generated/ts/cometbft/types/v1/validator.js +358 -0
  59. package/dist/cjs/generated/ts/cosmos/app/v1alpha1/module.js +221 -0
  60. package/dist/{generated → cjs/generated}/ts/cosmos/msg/v1/msg.js +1 -1
  61. package/dist/cjs/generated/ts/cosmos_proto/cosmos.js +216 -0
  62. package/dist/{generated → cjs/generated}/ts/gogoproto/gogo.js +1 -1
  63. package/dist/{generated → cjs/generated}/ts/google/api/annotations.js +1 -1
  64. package/dist/cjs/generated/ts/google/api/http.js +356 -0
  65. package/dist/{generated → cjs/generated}/ts/google/protobuf/descriptor.js +1 -1
  66. package/dist/cjs/generated/ts/google/protobuf/duration.js +93 -0
  67. package/dist/cjs/generated/ts/google/protobuf/timestamp.js +93 -0
  68. package/dist/cjs/generated/ts/google/protobuf/wrappers.js +509 -0
  69. package/dist/cjs/generated/ts/inco/abci/v1/types.js +73 -0
  70. package/dist/cjs/generated/ts/inco/fhe/module/v1/module.js +66 -0
  71. package/dist/cjs/generated/ts/inco/fhe/v1/events.js +190 -0
  72. package/dist/cjs/generated/ts/inco/fhe/v1/genesis.js +714 -0
  73. package/dist/{generated → cjs/generated}/ts/inco/fhe/v1/query.js +1 -1
  74. package/dist/{generated → cjs/generated}/ts/inco/fhe/v1/tx.js +1 -1
  75. package/dist/cjs/generated/ts/inco/fhe/v1/types.js +990 -0
  76. package/dist/cjs/generated/ts/inco/originchain/module/v1/module.js +66 -0
  77. package/dist/cjs/generated/ts/inco/originchain/v1/abci.js +331 -0
  78. package/dist/cjs/generated/ts/inco/originchain/v1/events.js +216 -0
  79. package/dist/cjs/generated/ts/inco/originchain/v1/genesis.js +69 -0
  80. package/dist/cjs/generated/ts/inco/originchain/v1/query.js +280 -0
  81. package/dist/cjs/generated/ts/inco/originchain/v1/tx.js +140 -0
  82. package/dist/cjs/generated/ts/inco/originchain/v1/types.js +203 -0
  83. package/dist/cjs/generated/ts/inco/preflight/module/v1/module.js +66 -0
  84. package/dist/cjs/generated/ts/inco/preflight/v1/genesis.js +185 -0
  85. package/dist/cjs/generated/ts/inco/preflight/v1/query.js +259 -0
  86. package/dist/cjs/generated/ts/inco/preflight/v1/tx.js +448 -0
  87. package/dist/cjs/generated/ts/inco/preflight/v1/types.js +398 -0
  88. package/dist/{handle.d.ts → cjs/handle.d.ts} +1 -1
  89. package/dist/{handle.js → cjs/handle.js} +5 -5
  90. package/dist/cjs/index.d.ts +5 -0
  91. package/dist/{index.js → cjs/index.js} +5 -5
  92. package/dist/cjs/kms/client.d.ts +8 -0
  93. package/dist/cjs/kms/client.js +41 -0
  94. package/dist/{l1 → cjs/l1}/client.d.ts +6 -6
  95. package/dist/{l1 → cjs/l1}/client.js +8 -8
  96. package/dist/cjs/l1/index.d.ts +2 -0
  97. package/dist/{l1 → cjs/l1}/index.js +3 -3
  98. package/dist/{l1 → cjs/l1}/preflight.d.ts +3 -3
  99. package/dist/cjs/l1/preflight.js +42 -0
  100. package/dist/cjs/lite/attested-decrypt.d.ts +3 -0
  101. package/dist/cjs/lite/attested-decrypt.js +6 -0
  102. package/dist/{lite → cjs/lite}/deployments.d.ts +2 -2
  103. package/dist/cjs/lite/deployments.js +21 -0
  104. package/dist/{lite → cjs/lite}/ecies.d.ts +6 -6
  105. package/dist/cjs/lite/ecies.js +135 -0
  106. package/dist/{lite → cjs/lite}/hadu.d.ts +1 -1
  107. package/dist/cjs/lite/hadu.js +41 -0
  108. package/dist/cjs/lite/index.d.ts +7 -0
  109. package/dist/cjs/lite/index.js +23 -0
  110. package/dist/{lite → cjs/lite}/lightning.d.ts +13 -6
  111. package/dist/cjs/lite/lightning.js +204 -0
  112. package/dist/{lite → cjs/lite}/reencrypt.d.ts +7 -7
  113. package/dist/cjs/lite/reencrypt.js +142 -0
  114. package/dist/cjs/local/index.d.ts +1 -0
  115. package/dist/{local → cjs/local}/index.js +2 -2
  116. package/dist/{local → cjs/local}/local-node.js +1 -1
  117. package/dist/{reencryption → cjs/reencryption}/eip712.js +5 -5
  118. package/dist/cjs/reencryption/index.d.ts +2 -0
  119. package/dist/cjs/reencryption/index.js +19 -0
  120. package/dist/{reencryption → cjs/reencryption}/types.d.ts +6 -10
  121. package/dist/{reencryption → cjs/reencryption}/types.js +1 -1
  122. package/dist/cjs/retry.d.ts +15 -0
  123. package/dist/cjs/retry.js +28 -0
  124. package/dist/{schema.js → cjs/schema.js} +1 -1
  125. package/dist/{viem.d.ts → cjs/viem.d.ts} +1 -1
  126. package/dist/cjs/viem.js +12 -0
  127. package/dist/esm/attesteddecrypt/attested-decrypt.d.ts +34 -0
  128. package/dist/esm/attesteddecrypt/attested-decrypt.js +88 -0
  129. package/dist/esm/attesteddecrypt/index.d.ts +2 -0
  130. package/dist/esm/attesteddecrypt/index.js +3 -0
  131. package/dist/esm/attesteddecrypt/types.d.ts +18 -0
  132. package/dist/esm/attesteddecrypt/types.js +12 -0
  133. package/dist/esm/binary.d.ts +21 -0
  134. package/dist/esm/binary.js +67 -0
  135. package/dist/esm/chain.d.ts +22 -0
  136. package/dist/esm/chain.js +24 -0
  137. package/dist/esm/encryption/encryption.d.ts +119 -0
  138. package/dist/esm/encryption/encryption.js +101 -0
  139. package/dist/esm/encryption/index.d.ts +1 -0
  140. package/dist/esm/encryption/index.js +2 -0
  141. package/dist/esm/fhevm/fhe-environment.d.ts +9 -0
  142. package/dist/esm/fhevm/fhe-environment.js +8 -0
  143. package/dist/esm/fhevm/fhevm.d.ts +41 -0
  144. package/dist/esm/fhevm/fhevm.js +139 -0
  145. package/dist/esm/fhevm/index.d.ts +1 -0
  146. package/dist/esm/fhevm/index.js +2 -0
  147. package/dist/esm/fhevm/reencrypt.d.ts +20 -0
  148. package/dist/esm/fhevm/reencrypt.js +123 -0
  149. package/dist/esm/fhevm/tfhe.d.ts +74 -0
  150. package/dist/esm/fhevm/tfhe.js +328 -0
  151. package/dist/esm/fhevm/types.d.ts +3 -0
  152. package/dist/esm/fhevm/types.js +26 -0
  153. package/dist/esm/generated/abis/addTwo.d.ts +83 -0
  154. package/dist/{generated → esm/generated}/abis/addTwo.js +2 -5
  155. package/dist/esm/generated/abis/inco-fhevm.d.ts +874 -0
  156. package/dist/{generated → esm/generated}/abis/inco-fhevm.js +3 -6
  157. package/dist/esm/generated/abis/index.d.ts +2 -0
  158. package/dist/esm/generated/abis/index.js +3 -0
  159. package/dist/esm/generated/abis/lightning.d.ts +2226 -0
  160. package/dist/{generated → esm/generated}/abis/lightning.js +2 -5
  161. package/dist/esm/generated/es/cosmos/ics23/v1/proofs_pb.d.ts +593 -0
  162. package/dist/esm/generated/es/cosmos/ics23/v1/proofs_pb.js +198 -0
  163. package/dist/esm/generated/es/cosmos/msg/v1/msg_pb.d.ts +29 -0
  164. package/dist/esm/generated/es/cosmos/msg/v1/msg_pb.js +33 -0
  165. package/dist/esm/generated/es/cosmos_proto/cosmos_pb.d.ts +174 -0
  166. package/dist/esm/generated/es/cosmos_proto/cosmos_pb.js +115 -0
  167. package/dist/esm/generated/es/google/api/annotations_pb.d.ts +13 -0
  168. package/dist/esm/generated/es/google/api/annotations_pb.js +27 -0
  169. package/dist/esm/generated/es/google/api/http_pb.d.ts +440 -0
  170. package/dist/esm/generated/es/google/api/http_pb.js +34 -0
  171. package/dist/esm/generated/es/inco/fhe/v1/events_pb.d.ts +79 -0
  172. package/dist/esm/generated/es/inco/fhe/v1/events_pb.js +21 -0
  173. package/dist/esm/generated/es/inco/fhe/v1/genesis_pb.d.ts +252 -0
  174. package/dist/esm/generated/es/inco/fhe/v1/genesis_pb.js +46 -0
  175. package/dist/esm/generated/es/inco/fhe/v1/query_pb.d.ts +569 -0
  176. package/dist/esm/generated/es/inco/fhe/v1/query_pb.js +108 -0
  177. package/dist/esm/generated/es/inco/fhe/v1/tx_pb.d.ts +494 -0
  178. package/dist/esm/generated/es/inco/fhe/v1/tx_pb.js +108 -0
  179. package/dist/esm/generated/es/inco/fhe/v1/types_pb.d.ts +419 -0
  180. package/dist/esm/generated/es/inco/fhe/v1/types_pb.js +133 -0
  181. package/dist/esm/generated/es/inco/kms/lite/v1/kms_service_pb.d.ts +333 -0
  182. package/dist/esm/generated/es/inco/kms/lite/v1/kms_service_pb.js +58 -0
  183. package/dist/esm/generated/es/inco/kms/lite/v1/types_pb.d.ts +212 -0
  184. package/dist/esm/generated/es/inco/kms/lite/v1/types_pb.js +44 -0
  185. package/dist/esm/generated/es/inco/preflight/v1/genesis_pb.d.ts +56 -0
  186. package/dist/esm/generated/es/inco/preflight/v1/genesis_pb.js +20 -0
  187. package/dist/esm/generated/es/inco/preflight/v1/query_pb.d.ts +100 -0
  188. package/dist/esm/generated/es/inco/preflight/v1/query_pb.js +38 -0
  189. package/dist/esm/generated/es/inco/preflight/v1/tx_pb.d.ts +193 -0
  190. package/dist/esm/generated/es/inco/preflight/v1/tx_pb.js +48 -0
  191. package/dist/esm/generated/es/inco/preflight/v1/types_pb.d.ts +144 -0
  192. package/dist/esm/generated/es/inco/preflight/v1/types_pb.js +34 -0
  193. package/dist/esm/generated/es/kms/base_pb.d.ts +765 -0
  194. package/dist/esm/generated/es/kms/base_pb.js +238 -0
  195. package/dist/esm/generated/es/sf/ethereum/type/v2/type_pb.d.ts +1736 -0
  196. package/dist/esm/generated/es/sf/ethereum/type/v2/type_pb.js +571 -0
  197. package/dist/esm/generated/fhe-environments.d.ts +14 -0
  198. package/dist/esm/generated/fhe-environments.js +15 -0
  199. package/dist/esm/generated/lightning.d.ts +211 -0
  200. package/dist/esm/generated/lightning.js +223 -0
  201. package/dist/esm/generated/local-node.d.ts +23 -0
  202. package/dist/esm/generated/local-node.js +24 -0
  203. package/dist/esm/generated/ts/amino/amino.d.ts +1 -0
  204. package/dist/esm/generated/ts/amino/amino.js +8 -0
  205. package/dist/esm/generated/ts/cometbft/abci/v1/types.d.ts +597 -0
  206. package/dist/esm/generated/ts/cometbft/abci/v1/types.js +5063 -0
  207. package/dist/esm/generated/ts/cometbft/crypto/v1/keys.d.ts +27 -0
  208. package/dist/esm/generated/ts/cometbft/crypto/v1/keys.js +105 -0
  209. package/dist/esm/generated/ts/cometbft/crypto/v1/proof.d.ts +60 -0
  210. package/dist/esm/generated/ts/cometbft/crypto/v1/proof.js +430 -0
  211. package/dist/esm/generated/ts/cometbft/types/v1/params.d.ts +179 -0
  212. package/dist/esm/generated/ts/cometbft/types/v1/params.js +713 -0
  213. package/dist/esm/generated/ts/cometbft/types/v1/validator.d.ts +61 -0
  214. package/dist/esm/generated/ts/cometbft/types/v1/validator.js +353 -0
  215. package/dist/esm/generated/ts/cosmos/app/v1alpha1/module.d.ts +104 -0
  216. package/dist/esm/generated/ts/cosmos/app/v1alpha1/module.js +218 -0
  217. package/dist/esm/generated/ts/cosmos/msg/v1/msg.d.ts +1 -0
  218. package/dist/esm/generated/ts/cosmos/msg/v1/msg.js +8 -0
  219. package/dist/esm/generated/ts/cosmos_proto/cosmos.d.ts +80 -0
  220. package/dist/esm/generated/ts/cosmos_proto/cosmos.js +211 -0
  221. package/dist/esm/generated/ts/gogoproto/gogo.d.ts +1 -0
  222. package/dist/esm/generated/ts/gogoproto/gogo.js +8 -0
  223. package/dist/esm/generated/ts/google/api/annotations.d.ts +1 -0
  224. package/dist/esm/generated/ts/google/api/annotations.js +8 -0
  225. package/dist/esm/generated/ts/google/api/http.d.ts +371 -0
  226. package/dist/esm/generated/ts/google/api/http.js +353 -0
  227. package/dist/esm/generated/ts/google/protobuf/descriptor.d.ts +1228 -0
  228. package/dist/esm/generated/ts/google/protobuf/descriptor.js +5070 -0
  229. package/dist/esm/generated/ts/google/protobuf/duration.d.ts +99 -0
  230. package/dist/esm/generated/ts/google/protobuf/duration.js +90 -0
  231. package/dist/esm/generated/ts/google/protobuf/timestamp.d.ts +128 -0
  232. package/dist/esm/generated/ts/google/protobuf/timestamp.js +90 -0
  233. package/dist/esm/generated/ts/google/protobuf/wrappers.d.ts +111 -0
  234. package/dist/esm/generated/ts/google/protobuf/wrappers.js +506 -0
  235. package/dist/esm/generated/ts/inco/abci/v1/types.d.ts +35 -0
  236. package/dist/esm/generated/ts/inco/abci/v1/types.js +70 -0
  237. package/dist/esm/generated/ts/inco/fhe/module/v1/module.d.ts +31 -0
  238. package/dist/esm/generated/ts/inco/fhe/module/v1/module.js +63 -0
  239. package/dist/esm/generated/ts/inco/fhe/v1/events.d.ts +66 -0
  240. package/dist/esm/generated/ts/inco/fhe/v1/events.js +187 -0
  241. package/dist/esm/generated/ts/inco/fhe/v1/genesis.d.ts +117 -0
  242. package/dist/esm/generated/ts/inco/fhe/v1/genesis.js +711 -0
  243. package/dist/esm/generated/ts/inco/fhe/v1/query.d.ts +366 -0
  244. package/dist/esm/generated/ts/inco/fhe/v1/query.js +1391 -0
  245. package/dist/esm/generated/ts/inco/fhe/v1/tx.d.ts +409 -0
  246. package/dist/esm/generated/ts/inco/fhe/v1/tx.js +1233 -0
  247. package/dist/esm/generated/ts/inco/fhe/v1/types.d.ts +225 -0
  248. package/dist/esm/generated/ts/inco/fhe/v1/types.js +985 -0
  249. package/dist/esm/generated/ts/inco/originchain/module/v1/module.d.ts +30 -0
  250. package/dist/esm/generated/ts/inco/originchain/module/v1/module.js +63 -0
  251. package/dist/esm/generated/ts/inco/originchain/v1/abci.d.ts +80 -0
  252. package/dist/esm/generated/ts/inco/originchain/v1/abci.js +328 -0
  253. package/dist/esm/generated/ts/inco/originchain/v1/events.d.ts +60 -0
  254. package/dist/esm/generated/ts/inco/originchain/v1/events.js +213 -0
  255. package/dist/esm/generated/ts/inco/originchain/v1/genesis.d.ts +28 -0
  256. package/dist/esm/generated/ts/inco/originchain/v1/genesis.js +66 -0
  257. package/dist/esm/generated/ts/inco/originchain/v1/query.d.ts +116 -0
  258. package/dist/esm/generated/ts/inco/originchain/v1/query.js +277 -0
  259. package/dist/esm/generated/ts/inco/originchain/v1/tx.d.ts +89 -0
  260. package/dist/esm/generated/ts/inco/originchain/v1/tx.js +137 -0
  261. package/dist/esm/generated/ts/inco/originchain/v1/types.d.ts +58 -0
  262. package/dist/esm/generated/ts/inco/originchain/v1/types.js +200 -0
  263. package/dist/esm/generated/ts/inco/preflight/module/v1/module.d.ts +31 -0
  264. package/dist/esm/generated/ts/inco/preflight/module/v1/module.js +63 -0
  265. package/dist/esm/generated/ts/inco/preflight/v1/genesis.d.ts +41 -0
  266. package/dist/esm/generated/ts/inco/preflight/v1/genesis.js +182 -0
  267. package/dist/esm/generated/ts/inco/preflight/v1/query.d.ts +93 -0
  268. package/dist/esm/generated/ts/inco/preflight/v1/query.js +256 -0
  269. package/dist/esm/generated/ts/inco/preflight/v1/tx.d.ts +187 -0
  270. package/dist/esm/generated/ts/inco/preflight/v1/tx.js +445 -0
  271. package/dist/esm/generated/ts/inco/preflight/v1/types.d.ts +84 -0
  272. package/dist/esm/generated/ts/inco/preflight/v1/types.js +395 -0
  273. package/dist/esm/handle.d.ts +41 -0
  274. package/dist/esm/handle.js +94 -0
  275. package/dist/esm/index.d.ts +5 -0
  276. package/dist/esm/index.js +6 -0
  277. package/dist/esm/kms/client.d.ts +8 -0
  278. package/dist/esm/kms/client.js +35 -0
  279. package/dist/esm/l1/client.d.ts +35 -0
  280. package/dist/esm/l1/client.js +93 -0
  281. package/dist/esm/l1/index.d.ts +2 -0
  282. package/dist/esm/l1/index.js +3 -0
  283. package/dist/esm/l1/preflight.d.ts +20 -0
  284. package/dist/esm/l1/preflight.js +39 -0
  285. package/dist/esm/lite/attested-decrypt.d.ts +3 -0
  286. package/dist/esm/lite/attested-decrypt.js +3 -0
  287. package/dist/esm/lite/deployments.d.ts +6 -0
  288. package/dist/esm/lite/deployments.js +17 -0
  289. package/dist/esm/lite/ecies.d.ts +26 -0
  290. package/dist/esm/lite/ecies.js +124 -0
  291. package/dist/esm/lite/hadu.d.ts +24 -0
  292. package/dist/esm/lite/hadu.js +36 -0
  293. package/dist/esm/lite/index.d.ts +7 -0
  294. package/dist/esm/lite/index.js +7 -0
  295. package/dist/esm/lite/lightning.d.ts +124 -0
  296. package/dist/esm/lite/lightning.js +200 -0
  297. package/dist/esm/lite/reencrypt.d.ts +24 -0
  298. package/dist/esm/lite/reencrypt.js +132 -0
  299. package/dist/esm/local/index.d.ts +1 -0
  300. package/dist/esm/local/index.js +2 -0
  301. package/dist/esm/local/local-node.d.ts +19 -0
  302. package/dist/esm/local/local-node.js +24 -0
  303. package/dist/esm/reencryption/eip712.d.ts +29 -0
  304. package/dist/esm/reencryption/eip712.js +81 -0
  305. package/dist/esm/reencryption/index.d.ts +2 -0
  306. package/dist/esm/reencryption/index.js +3 -0
  307. package/dist/esm/reencryption/types.d.ts +25 -0
  308. package/dist/esm/reencryption/types.js +2 -0
  309. package/dist/esm/retry.d.ts +15 -0
  310. package/dist/esm/retry.js +25 -0
  311. package/dist/esm/schema.d.ts +4 -0
  312. package/dist/esm/schema.js +15 -0
  313. package/dist/esm/viem.d.ts +427 -0
  314. package/dist/esm/viem.js +8 -0
  315. package/dist/types/attesteddecrypt/attested-decrypt.d.ts +34 -0
  316. package/dist/types/attesteddecrypt/index.d.ts +2 -0
  317. package/dist/types/attesteddecrypt/types.d.ts +18 -0
  318. package/dist/types/binary.d.ts +21 -0
  319. package/dist/types/chain.d.ts +22 -0
  320. package/dist/types/encryption/encryption.d.ts +119 -0
  321. package/dist/types/encryption/index.d.ts +1 -0
  322. package/dist/types/fhevm/fhe-environment.d.ts +9 -0
  323. package/dist/types/fhevm/fhevm.d.ts +41 -0
  324. package/dist/types/fhevm/index.d.ts +1 -0
  325. package/dist/types/fhevm/reencrypt.d.ts +20 -0
  326. package/dist/types/fhevm/tfhe.d.ts +74 -0
  327. package/dist/types/fhevm/types.d.ts +3 -0
  328. package/dist/types/generated/abis/addTwo.d.ts +83 -0
  329. package/dist/types/generated/abis/inco-fhevm.d.ts +874 -0
  330. package/dist/types/generated/abis/index.d.ts +2 -0
  331. package/dist/types/generated/abis/lightning.d.ts +2226 -0
  332. package/dist/types/generated/es/cosmos/ics23/v1/proofs_pb.d.ts +593 -0
  333. package/dist/types/generated/es/cosmos/msg/v1/msg_pb.d.ts +29 -0
  334. package/dist/types/generated/es/cosmos_proto/cosmos_pb.d.ts +174 -0
  335. package/dist/types/generated/es/google/api/annotations_pb.d.ts +13 -0
  336. package/dist/types/generated/es/google/api/http_pb.d.ts +440 -0
  337. package/dist/types/generated/es/inco/fhe/v1/events_pb.d.ts +79 -0
  338. package/dist/types/generated/es/inco/fhe/v1/genesis_pb.d.ts +252 -0
  339. package/dist/types/generated/es/inco/fhe/v1/query_pb.d.ts +569 -0
  340. package/dist/types/generated/es/inco/fhe/v1/tx_pb.d.ts +494 -0
  341. package/dist/types/generated/es/inco/fhe/v1/types_pb.d.ts +419 -0
  342. package/dist/types/generated/es/inco/kms/lite/v1/kms_service_pb.d.ts +333 -0
  343. package/dist/types/generated/es/inco/kms/lite/v1/types_pb.d.ts +212 -0
  344. package/dist/types/generated/es/inco/preflight/v1/genesis_pb.d.ts +56 -0
  345. package/dist/types/generated/es/inco/preflight/v1/query_pb.d.ts +100 -0
  346. package/dist/types/generated/es/inco/preflight/v1/tx_pb.d.ts +193 -0
  347. package/dist/types/generated/es/inco/preflight/v1/types_pb.d.ts +144 -0
  348. package/dist/types/generated/es/kms/base_pb.d.ts +765 -0
  349. package/dist/types/generated/es/sf/ethereum/type/v2/type_pb.d.ts +1736 -0
  350. package/dist/types/generated/fhe-environments.d.ts +14 -0
  351. package/dist/types/generated/lightning.d.ts +211 -0
  352. package/dist/types/generated/local-node.d.ts +23 -0
  353. package/dist/types/generated/ts/amino/amino.d.ts +1 -0
  354. package/dist/types/generated/ts/cometbft/abci/v1/types.d.ts +597 -0
  355. package/dist/types/generated/ts/cometbft/crypto/v1/keys.d.ts +27 -0
  356. package/dist/types/generated/ts/cometbft/crypto/v1/proof.d.ts +60 -0
  357. package/dist/types/generated/ts/cometbft/types/v1/params.d.ts +179 -0
  358. package/dist/types/generated/ts/cometbft/types/v1/validator.d.ts +61 -0
  359. package/dist/types/generated/ts/cosmos/app/v1alpha1/module.d.ts +104 -0
  360. package/dist/types/generated/ts/cosmos/msg/v1/msg.d.ts +1 -0
  361. package/dist/types/generated/ts/cosmos_proto/cosmos.d.ts +80 -0
  362. package/dist/types/generated/ts/gogoproto/gogo.d.ts +1 -0
  363. package/dist/types/generated/ts/google/api/annotations.d.ts +1 -0
  364. package/dist/types/generated/ts/google/api/http.d.ts +371 -0
  365. package/dist/types/generated/ts/google/protobuf/descriptor.d.ts +1228 -0
  366. package/dist/types/generated/ts/google/protobuf/duration.d.ts +99 -0
  367. package/dist/types/generated/ts/google/protobuf/timestamp.d.ts +128 -0
  368. package/dist/types/generated/ts/google/protobuf/wrappers.d.ts +111 -0
  369. package/dist/types/generated/ts/inco/abci/v1/types.d.ts +35 -0
  370. package/dist/types/generated/ts/inco/fhe/module/v1/module.d.ts +31 -0
  371. package/dist/types/generated/ts/inco/fhe/v1/events.d.ts +66 -0
  372. package/dist/types/generated/ts/inco/fhe/v1/genesis.d.ts +117 -0
  373. package/dist/types/generated/ts/inco/fhe/v1/query.d.ts +366 -0
  374. package/dist/types/generated/ts/inco/fhe/v1/tx.d.ts +409 -0
  375. package/dist/types/generated/ts/inco/fhe/v1/types.d.ts +225 -0
  376. package/dist/types/generated/ts/inco/originchain/module/v1/module.d.ts +30 -0
  377. package/dist/types/generated/ts/inco/originchain/v1/abci.d.ts +80 -0
  378. package/dist/types/generated/ts/inco/originchain/v1/events.d.ts +60 -0
  379. package/dist/types/generated/ts/inco/originchain/v1/genesis.d.ts +28 -0
  380. package/dist/types/generated/ts/inco/originchain/v1/query.d.ts +116 -0
  381. package/dist/types/generated/ts/inco/originchain/v1/tx.d.ts +89 -0
  382. package/dist/types/generated/ts/inco/originchain/v1/types.d.ts +58 -0
  383. package/dist/types/generated/ts/inco/preflight/module/v1/module.d.ts +31 -0
  384. package/dist/types/generated/ts/inco/preflight/v1/genesis.d.ts +41 -0
  385. package/dist/types/generated/ts/inco/preflight/v1/query.d.ts +93 -0
  386. package/dist/types/generated/ts/inco/preflight/v1/tx.d.ts +187 -0
  387. package/dist/types/generated/ts/inco/preflight/v1/types.d.ts +84 -0
  388. package/dist/types/handle.d.ts +41 -0
  389. package/dist/types/index.d.ts +5 -0
  390. package/dist/types/kms/client.d.ts +8 -0
  391. package/dist/types/l1/client.d.ts +35 -0
  392. package/dist/types/l1/index.d.ts +2 -0
  393. package/dist/types/l1/preflight.d.ts +20 -0
  394. package/dist/types/lite/attested-decrypt.d.ts +3 -0
  395. package/dist/types/lite/deployments.d.ts +6 -0
  396. package/dist/types/lite/ecies.d.ts +26 -0
  397. package/dist/types/lite/hadu.d.ts +24 -0
  398. package/dist/types/lite/index.d.ts +7 -0
  399. package/dist/types/lite/lightning.d.ts +124 -0
  400. package/dist/types/lite/reencrypt.d.ts +24 -0
  401. package/dist/types/local/index.d.ts +1 -0
  402. package/dist/types/local/local-node.d.ts +19 -0
  403. package/dist/types/reencryption/eip712.d.ts +29 -0
  404. package/dist/types/reencryption/index.d.ts +2 -0
  405. package/dist/types/reencryption/types.d.ts +25 -0
  406. package/dist/types/retry.d.ts +15 -0
  407. package/dist/types/schema.d.ts +4 -0
  408. package/dist/types/viem.d.ts +427 -0
  409. package/package.json +64 -15
  410. package/dist/binary.js +0 -82
  411. package/dist/encryption/encryption.js +0 -109
  412. package/dist/encryption/index.d.ts +0 -1
  413. package/dist/fhevm/fhe-environment.js +0 -11
  414. package/dist/fhevm/fhevm.js +0 -145
  415. package/dist/fhevm/index.d.ts +0 -1
  416. package/dist/fhevm/reencrypt.js +0 -127
  417. package/dist/fhevm/tfhe.js +0 -336
  418. package/dist/fhevm/types.js +0 -29
  419. package/dist/generated/local-node.d.ts +0 -7
  420. package/dist/generated/local-node.js +0 -11
  421. package/dist/generated/ts/cometbft/crypto/v1/keys.js +0 -108
  422. package/dist/generated/ts/cometbft/crypto/v1/proof.js +0 -433
  423. package/dist/generated/ts/cometbft/types/v1/params.js +0 -716
  424. package/dist/generated/ts/cometbft/types/v1/validator.js +0 -358
  425. package/dist/generated/ts/cosmos/app/v1alpha1/module.js +0 -221
  426. package/dist/generated/ts/cosmos_proto/cosmos.js +0 -216
  427. package/dist/generated/ts/google/api/http.js +0 -356
  428. package/dist/generated/ts/google/protobuf/duration.js +0 -93
  429. package/dist/generated/ts/google/protobuf/timestamp.js +0 -93
  430. package/dist/generated/ts/google/protobuf/wrappers.js +0 -509
  431. package/dist/generated/ts/inco/abci/v1/types.js +0 -73
  432. package/dist/generated/ts/inco/fhe/module/v1/module.js +0 -66
  433. package/dist/generated/ts/inco/fhe/v1/events.js +0 -190
  434. package/dist/generated/ts/inco/fhe/v1/genesis.js +0 -714
  435. package/dist/generated/ts/inco/fhe/v1/types.js +0 -990
  436. package/dist/generated/ts/inco/originchain/module/v1/module.js +0 -66
  437. package/dist/generated/ts/inco/originchain/v1/abci.js +0 -331
  438. package/dist/generated/ts/inco/originchain/v1/events.js +0 -216
  439. package/dist/generated/ts/inco/originchain/v1/genesis.js +0 -69
  440. package/dist/generated/ts/inco/originchain/v1/query.js +0 -280
  441. package/dist/generated/ts/inco/originchain/v1/tx.js +0 -140
  442. package/dist/generated/ts/inco/originchain/v1/types.js +0 -203
  443. package/dist/generated/ts/inco/preflight/module/v1/module.js +0 -66
  444. package/dist/generated/ts/inco/preflight/v1/genesis.js +0 -185
  445. package/dist/generated/ts/inco/preflight/v1/query.js +0 -259
  446. package/dist/generated/ts/inco/preflight/v1/tx.js +0 -448
  447. package/dist/generated/ts/inco/preflight/v1/types.js +0 -398
  448. package/dist/index.d.ts +0 -5
  449. package/dist/l1/index.d.ts +0 -2
  450. package/dist/l1/preflight.js +0 -42
  451. package/dist/lite/deployments.js +0 -21
  452. package/dist/lite/ecies.js +0 -135
  453. package/dist/lite/hadu.js +0 -41
  454. package/dist/lite/index.d.ts +0 -7
  455. package/dist/lite/index.js +0 -23
  456. package/dist/lite/lightning.js +0 -183
  457. package/dist/lite/reencrypt.js +0 -161
  458. package/dist/local/index.d.ts +0 -1
  459. package/dist/reencryption/index.d.ts +0 -2
  460. package/dist/reencryption/index.js +0 -19
  461. package/dist/viem.js +0 -12
  462. /package/dist/{binary.d.ts → cjs/binary.d.ts} +0 -0
  463. /package/dist/{chain.d.ts → cjs/chain.d.ts} +0 -0
  464. /package/dist/{generated → cjs/generated}/abis/addTwo.d.ts +0 -0
  465. /package/dist/{generated → cjs/generated}/abis/inco-fhevm.d.ts +0 -0
  466. /package/dist/{generated → cjs/generated}/abis/index.d.ts +0 -0
  467. /package/dist/{generated → cjs/generated}/abis/lightning.d.ts +0 -0
  468. /package/dist/{generated → cjs/generated}/es/cosmos/ics23/v1/proofs_pb.d.ts +0 -0
  469. /package/dist/{generated → cjs/generated}/es/cosmos/msg/v1/msg_pb.d.ts +0 -0
  470. /package/dist/{generated → cjs/generated}/es/cosmos_proto/cosmos_pb.d.ts +0 -0
  471. /package/dist/{generated → cjs/generated}/es/google/api/annotations_pb.d.ts +0 -0
  472. /package/dist/{generated → cjs/generated}/es/google/api/http_pb.d.ts +0 -0
  473. /package/dist/{generated → cjs/generated}/es/inco/fhe/v1/events_pb.d.ts +0 -0
  474. /package/dist/{generated → cjs/generated}/es/inco/fhe/v1/genesis_pb.d.ts +0 -0
  475. /package/dist/{generated → cjs/generated}/es/inco/fhe/v1/query_pb.d.ts +0 -0
  476. /package/dist/{generated → cjs/generated}/es/inco/fhe/v1/tx_pb.d.ts +0 -0
  477. /package/dist/{generated → cjs/generated}/es/inco/fhe/v1/types_pb.d.ts +0 -0
  478. /package/dist/{generated → cjs/generated}/es/inco/kms/lite/v1/types_pb.d.ts +0 -0
  479. /package/dist/{generated → cjs/generated}/es/inco/preflight/v1/genesis_pb.d.ts +0 -0
  480. /package/dist/{generated → cjs/generated}/es/inco/preflight/v1/query_pb.d.ts +0 -0
  481. /package/dist/{generated → cjs/generated}/es/inco/preflight/v1/tx_pb.d.ts +0 -0
  482. /package/dist/{generated → cjs/generated}/es/inco/preflight/v1/types_pb.d.ts +0 -0
  483. /package/dist/{generated → cjs/generated}/es/kms/base_pb.d.ts +0 -0
  484. /package/dist/{generated → cjs/generated}/es/sf/ethereum/type/v2/type_pb.d.ts +0 -0
  485. /package/dist/{generated → cjs/generated}/fhe-environments.d.ts +0 -0
  486. /package/dist/{generated → cjs/generated}/ts/amino/amino.d.ts +0 -0
  487. /package/dist/{generated → cjs/generated}/ts/cometbft/abci/v1/types.d.ts +0 -0
  488. /package/dist/{generated → cjs/generated}/ts/cometbft/crypto/v1/keys.d.ts +0 -0
  489. /package/dist/{generated → cjs/generated}/ts/cometbft/crypto/v1/proof.d.ts +0 -0
  490. /package/dist/{generated → cjs/generated}/ts/cometbft/types/v1/params.d.ts +0 -0
  491. /package/dist/{generated → cjs/generated}/ts/cometbft/types/v1/validator.d.ts +0 -0
  492. /package/dist/{generated → cjs/generated}/ts/cosmos/app/v1alpha1/module.d.ts +0 -0
  493. /package/dist/{generated → cjs/generated}/ts/cosmos/msg/v1/msg.d.ts +0 -0
  494. /package/dist/{generated → cjs/generated}/ts/cosmos_proto/cosmos.d.ts +0 -0
  495. /package/dist/{generated → cjs/generated}/ts/gogoproto/gogo.d.ts +0 -0
  496. /package/dist/{generated → cjs/generated}/ts/google/api/annotations.d.ts +0 -0
  497. /package/dist/{generated → cjs/generated}/ts/google/api/http.d.ts +0 -0
  498. /package/dist/{generated → cjs/generated}/ts/google/protobuf/descriptor.d.ts +0 -0
  499. /package/dist/{generated → cjs/generated}/ts/google/protobuf/duration.d.ts +0 -0
  500. /package/dist/{generated → cjs/generated}/ts/google/protobuf/timestamp.d.ts +0 -0
  501. /package/dist/{generated → cjs/generated}/ts/google/protobuf/wrappers.d.ts +0 -0
  502. /package/dist/{generated → cjs/generated}/ts/inco/abci/v1/types.d.ts +0 -0
  503. /package/dist/{generated → cjs/generated}/ts/inco/fhe/module/v1/module.d.ts +0 -0
  504. /package/dist/{generated → cjs/generated}/ts/inco/fhe/v1/events.d.ts +0 -0
  505. /package/dist/{generated → cjs/generated}/ts/inco/fhe/v1/genesis.d.ts +0 -0
  506. /package/dist/{generated → cjs/generated}/ts/inco/fhe/v1/query.d.ts +0 -0
  507. /package/dist/{generated → cjs/generated}/ts/inco/fhe/v1/tx.d.ts +0 -0
  508. /package/dist/{generated → cjs/generated}/ts/inco/fhe/v1/types.d.ts +0 -0
  509. /package/dist/{generated → cjs/generated}/ts/inco/originchain/module/v1/module.d.ts +0 -0
  510. /package/dist/{generated → cjs/generated}/ts/inco/originchain/v1/abci.d.ts +0 -0
  511. /package/dist/{generated → cjs/generated}/ts/inco/originchain/v1/events.d.ts +0 -0
  512. /package/dist/{generated → cjs/generated}/ts/inco/originchain/v1/genesis.d.ts +0 -0
  513. /package/dist/{generated → cjs/generated}/ts/inco/originchain/v1/query.d.ts +0 -0
  514. /package/dist/{generated → cjs/generated}/ts/inco/originchain/v1/tx.d.ts +0 -0
  515. /package/dist/{generated → cjs/generated}/ts/inco/originchain/v1/types.d.ts +0 -0
  516. /package/dist/{generated → cjs/generated}/ts/inco/preflight/module/v1/module.d.ts +0 -0
  517. /package/dist/{generated → cjs/generated}/ts/inco/preflight/v1/genesis.d.ts +0 -0
  518. /package/dist/{generated → cjs/generated}/ts/inco/preflight/v1/query.d.ts +0 -0
  519. /package/dist/{generated → cjs/generated}/ts/inco/preflight/v1/tx.d.ts +0 -0
  520. /package/dist/{generated → cjs/generated}/ts/inco/preflight/v1/types.d.ts +0 -0
  521. /package/dist/{local → cjs/local}/local-node.d.ts +0 -0
  522. /package/dist/{reencryption → cjs/reencryption}/eip712.d.ts +0 -0
  523. /package/dist/{schema.d.ts → cjs/schema.d.ts} +0 -0
@@ -0,0 +1,123 @@
1
+ import { Schema } from 'effect';
2
+ import { cryptobox_get_pk, cryptobox_keygen, cryptobox_pk_to_u8vec, cryptobox_sk_to_u8vec, new_client, process_reencryption_resp_from_js, u8vec_to_cryptobox_pk, u8vec_to_cryptobox_sk, } from 'node-tkms';
3
+ import { getAddress, hexToBigInt } from 'viem';
4
+ import { bytesToBigInt, bytesToHex } from '../binary.js';
5
+ import { bigintToPlaintext, encryptionSchemes, } from '../encryption/encryption.js';
6
+ import { getHandleType } from '../handle.js';
7
+ import { createEIP712Payload } from '../reencryption/index.js';
8
+ import { parse } from '../schema.js';
9
+ // The domain constants that Zama uses for reencrypts.
10
+ const ZAMA_REENCRYPT_DOMAIN = {
11
+ name: 'Authorization token',
12
+ version: '1',
13
+ salt: undefined,
14
+ };
15
+ export async function zamaReencryptor({ chainId, gatewayUrl, walletClient, unsafeSkipVerifyKMSSignatures, contractAddress, kmsSigners, userAddress, }) {
16
+ const ephemeralKeypair = generateCryptoBoxEphemeralKeyPair();
17
+ // Sign the EIP712 attesting that the user has access to the private key
18
+ // corresponding to the ephemeral public key.
19
+ const eip712Payload = createEIP712Payload({
20
+ chainId,
21
+ primaryType: 'ReencryptionRequest',
22
+ primaryTypeFields: [{ name: 'publicKey', type: 'bytes' }],
23
+ message: {
24
+ publicKey: bytesToHex(ephemeralKeypair.encodePublicKey()),
25
+ },
26
+ domainName: ZAMA_REENCRYPT_DOMAIN.name,
27
+ domainVersion: ZAMA_REENCRYPT_DOMAIN.version,
28
+ });
29
+ // Using browser extensions, this step will prompt the user to sign the
30
+ // payload.
31
+ const eip712Signature = await walletClient.signTypedData(eip712Payload);
32
+ return async function reencrypt({ handle, }) {
33
+ const handleBigInt = hexToBigInt(handle);
34
+ const reencryptRequest = {
35
+ signature: eip712Signature.replace(/^(0x)/, ''),
36
+ client_address: getAddress(userAddress),
37
+ enc_key: bytesToHex(ephemeralKeypair.encodePublicKey()).replace(/^(0x)/, ''),
38
+ ciphertext_handle: handleBigInt.toString(16).padStart(64, '0'),
39
+ eip712_verifying_contract: getAddress(contractAddress),
40
+ };
41
+ const reencryptResponse = await makeReencryptRequest(reencryptRequest, gatewayUrl);
42
+ let pubKey;
43
+ let privKey;
44
+ try {
45
+ pubKey = u8vec_to_cryptobox_pk(ephemeralKeypair.publicKey);
46
+ privKey = u8vec_to_cryptobox_sk(ephemeralKeypair.privateKey);
47
+ }
48
+ catch (e) {
49
+ throw new Error(`Invalid public or private key: ${JSON.stringify(e)}`);
50
+ }
51
+ const client = new_client(kmsSigners, userAddress, 'default');
52
+ try {
53
+ const buffer = new ArrayBuffer(32);
54
+ const view = new DataView(buffer);
55
+ view.setUint32(28, Number(chainId), false);
56
+ const chainIdArrayBE = new Uint8Array(buffer);
57
+ // Duplicate reencryptRequest and replace ciphertext_handle with ciphertext_digest.
58
+ const { ciphertext_handle, ...p } = reencryptRequest;
59
+ // TODO (from Zama): check all ciphertext digests are all the same
60
+ const payloadForVerification = {
61
+ ...p,
62
+ ciphertext_digest: reencryptResponse.response[0].ciphertext_digest,
63
+ };
64
+ const decrypted = process_reencryption_resp_from_js(client, payloadForVerification, {
65
+ name: eip712Payload.domain.name,
66
+ version: eip712Payload.domain.version,
67
+ chain_id: chainIdArrayBE,
68
+ verifying_contract: eip712Payload.domain.verifyingContract,
69
+ }, reencryptResponse.response, pubKey, privKey, !unsafeSkipVerifyKMSSignatures);
70
+ return bigintToPlaintext(encryptionSchemes.cryptobox, getHandleType(handle), bytesToBigInt(decrypted));
71
+ }
72
+ catch (e) {
73
+ console.error(e);
74
+ throw new Error(`An error occurred during decryption: ${e}`);
75
+ }
76
+ };
77
+ }
78
+ // Generate a new ephemeral keypair for reencryption.
79
+ export function generateCryptoBoxEphemeralKeyPair() {
80
+ const keypair = cryptobox_keygen();
81
+ const publicKey = cryptobox_pk_to_u8vec(cryptobox_get_pk(keypair));
82
+ return {
83
+ scheme: encryptionSchemes.cryptobox,
84
+ publicKey,
85
+ privateKey: cryptobox_sk_to_u8vec(keypair),
86
+ encodePublicKey() {
87
+ return publicKey;
88
+ },
89
+ };
90
+ }
91
+ // This is the response type of the reencrypt endpoint, defined on the
92
+ // server-side in Zama's gateway. The response field is a vector of this struct
93
+ // in Rust:
94
+ // https://github.com/zama-ai/kms-core/blob/a3b824b389e87429d04537696e28dee902a3b2d9/blockchain/events/src/kms.rs#L985-L1003
95
+ const ZamaGatewayReencryptResponse = Schema.Struct({
96
+ status: Schema.Union(Schema.Literal('success'), Schema.Literal('failure')),
97
+ response: Schema.Array(Schema.Struct({
98
+ ciphertext_digest: Schema.optional(Schema.String),
99
+ payload: Schema.String,
100
+ signature: Schema.String,
101
+ })),
102
+ });
103
+ // Make a HTTP request to the reencrypt endpoint of the gateway.
104
+ async function makeReencryptRequest(request, gatewayUrl) {
105
+ const fetchOptions = {
106
+ method: 'POST',
107
+ headers: {
108
+ 'Content-Type': 'application/json',
109
+ },
110
+ body: JSON.stringify(request),
111
+ };
112
+ const response = await fetch(`${gatewayUrl}/reencrypt`, fetchOptions);
113
+ if (!response.ok) {
114
+ throw new Error(`Reencrypt failed: gateway respond with HTTP code ${response.status}: ${JSON.stringify(await response.json())}`);
115
+ }
116
+ const json = await response.json();
117
+ const reencryptResponse = parse(ZamaGatewayReencryptResponse, json);
118
+ if (reencryptResponse.status === 'failure') {
119
+ throw new Error('Reencrypt failed: gateway responded with failure');
120
+ }
121
+ return reencryptResponse;
122
+ }
123
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVlbmNyeXB0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2ZoZXZtL3JlZW5jcnlwdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQ2hDLE9BQU8sRUFDTCxnQkFBZ0IsRUFDaEIsZ0JBQWdCLEVBQ2hCLHFCQUFxQixFQUNyQixxQkFBcUIsRUFDckIsVUFBVSxFQUNWLGlDQUFpQyxFQUNqQyxxQkFBcUIsRUFDckIscUJBQXFCLEdBQ3RCLE1BQU0sV0FBVyxDQUFDO0FBQ25CLE9BQU8sRUFBMkIsVUFBVSxFQUFFLFdBQVcsRUFBMkIsTUFBTSxNQUFNLENBQUM7QUFDakcsT0FBTyxFQUFFLGFBQWEsRUFBRSxVQUFVLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDekQsT0FBTyxFQUNMLGlCQUFpQixFQUVqQixpQkFBaUIsR0FHbEIsTUFBTSw2QkFBNkIsQ0FBQztBQUNyQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBRTdDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRS9ELE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFpQ3JDLHNEQUFzRDtBQUN0RCxNQUFNLHFCQUFxQixHQUFHO0lBQzVCLElBQUksRUFBRSxxQkFBcUI7SUFDM0IsT0FBTyxFQUFFLEdBQUc7SUFDWixJQUFJLEVBQUUsU0FBUztDQUNoQixDQUFDO0FBRUYsTUFBTSxDQUFDLEtBQUssVUFBVSxlQUFlLENBQUMsRUFDcEMsT0FBTyxFQUNQLFVBQVUsRUFDVixZQUFZLEVBQ1osNkJBQTZCLEVBQzdCLGVBQWUsRUFDZixVQUFVLEVBQ1YsV0FBVyxHQUNTO0lBQ3BCLE1BQU0sZ0JBQWdCLEdBQUcsaUNBQWlDLEVBQUUsQ0FBQztJQUU3RCx3RUFBd0U7SUFDeEUsNkNBQTZDO0lBQzdDLE1BQU0sYUFBYSxHQUFHLG1CQUFt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
@@ -0,0 +1,74 @@
1
+ import { RustType } from 'bincode-ts';
2
+ import { Schema } from 'effect';
3
+ import { CompactPkePublicParams, TfheCompactPublicKey } from 'node-tfhe';
4
+ import { Decryptor, Encryptor, Plaintext, TfheScheme } from '../encryption/encryption.js';
5
+ export declare const SERIALIZED_SIZE_LIMIT_CIPHERTEXT: bigint;
6
+ export declare const SERIALIZED_SIZE_LIMIT_PK: bigint;
7
+ export declare const SERIALIZED_SIZE_LIMIT_CRS: bigint;
8
+ export type TfheEncryptorArgs = {
9
+ scheme: TfheScheme;
10
+ publicKey: Buffer;
11
+ crs2048: Buffer;
12
+ };
13
+ export type TfheDecryptorArgs = {
14
+ scheme: TfheScheme;
15
+ cks: Buffer;
16
+ };
17
+ export type PublicParams<T = CompactPkePublicParams> = {
18
+ [key in EncryptionTypes]?: {
19
+ publicParams: T;
20
+ };
21
+ };
22
+ export declare const ENCRYPTION_TYPES: {
23
+ 1: number;
24
+ 4: number;
25
+ 8: number;
26
+ 16: number;
27
+ 32: number;
28
+ 64: number;
29
+ 128: number;
30
+ 160: number;
31
+ 256: number;
32
+ 512: number;
33
+ 1024: number;
34
+ 2048: number;
35
+ };
36
+ export type EncryptionTypes = keyof typeof ENCRYPTION_TYPES;
37
+ export type ZKInput = {
38
+ addBool: (value: boolean) => ZKInput;
39
+ add4: (value: number | bigint) => ZKInput;
40
+ add8: (value: number | bigint) => ZKInput;
41
+ add16: (value: number | bigint) => ZKInput;
42
+ add32: (value: number | bigint) => ZKInput;
43
+ add64: (value: number | bigint) => ZKInput;
44
+ add128: (value: number | bigint) => ZKInput;
45
+ add256: (value: number | bigint) => ZKInput;
46
+ addBytes64: (value: Uint8Array) => ZKInput;
47
+ addBytes128: (value: Uint8Array) => ZKInput;
48
+ addBytes256: (value: Uint8Array) => ZKInput;
49
+ addAddress: (value: string) => ZKInput;
50
+ getBits: () => number[];
51
+ encrypt: () => Promise<{
52
+ prehandles: Uint8Array[];
53
+ ciphertext: Uint8Array;
54
+ }>;
55
+ };
56
+ export declare function getTfheEncryptor(args: TfheEncryptorArgs): Encryptor<TfheScheme>;
57
+ export declare function createEncryptedInput(aclContractAddress: string, chainId: bigint, tfheCompactPublicKey: TfheCompactPublicKey, publicParams: PublicParams): (userAddress: string, contractAddress: string) => ZKInput;
58
+ export declare function addPlaintextInput(input: ZKInput, plaintext: Plaintext): ZKInput;
59
+ export declare function getTfheDecryptor({ cks }: TfheDecryptorArgs): Decryptor<TfheScheme>;
60
+ export declare const SerializationHeader: RustType.Type<{
61
+ [x: string]: {};
62
+ } & {
63
+ [x: string]: {};
64
+ }>;
65
+ export declare const ProvenCompactCiphertextListTypeName = "high_level_api::ProvenCompactCiphertextList";
66
+ export declare const FheUintTypeName = "high_level_api::FheUint";
67
+ export declare const TfheSerialisationTypeName: Schema.Literal<["high_level_api::ProvenCompactCiphertextList", "high_level_api::FheUint"]>;
68
+ export type TfheSerialisationTypeName = typeof TfheSerialisationTypeName.Type;
69
+ export declare const TfheSerializationHeader: Schema.Struct<{
70
+ header_version: typeof Schema.String;
71
+ name: Schema.Union<[Schema.Literal<["high_level_api::ProvenCompactCiphertextList", "high_level_api::FheUint"]>, typeof Schema.String]>;
72
+ }>;
73
+ export type TfheSerializationHeader = typeof TfheSerializationHeader.Type;
74
+ export declare function decodeTfheSerializationHeader(buffer: Uint8Array): TfheSerializationHeader;
@@ -0,0 +1,328 @@
1
+ import { Decoder, RustType } from 'bincode-ts';
2
+ import { Schema } from 'effect';
3
+ import { CompactCiphertextList, CompactPkePublicParams, FheBool, FheTypes, FheUint160, FheUint256, FheUint64, ProvenCompactCiphertextList, set_server_key, TfheClientKey, TfheCompactPublicKey, TfheServerKey, ZkComputeLoad, } from 'node-tfhe';
4
+ import { isAddress } from 'viem';
5
+ import { asBytes32, bytesFromHexString, bytesToBigInt, bytesToHex } from '../binary.js';
6
+ import { encryptionSchemes, getEncryptionSchemeName, } from '../encryption/encryption.js';
7
+ import { computeHandle, computePrehandle, HANDLE_VERSION, handleTypes } from '../handle.js';
8
+ import { parse } from '../schema.js';
9
+ import { getHandleTypeFromFheType } from './types.js';
10
+ // This code pulled and modifier from fhevmjs which currently is a relatively poor dependency to extend since it does
11
+ // not expose types correctly and does not export various modules
12
+ // Handed down on a stone tablet from: https://github.com/zama-ai/fhevm-backend/blob/5a70c19a90671cfa4901413db9e162a65c4cf17a/fhevm-engine/fhevm-engine-common/src/utils.rs#L6-L7
13
+ // We use fhevm-backend in KMS and compute services
14
+ export const SERIALIZED_SIZE_LIMIT_CIPHERTEXT = BigInt(1024 * 1024 * 512);
15
+ export const SERIALIZED_SIZE_LIMIT_PK = BigInt(1024 * 1024 * 512);
16
+ export const SERIALIZED_SIZE_LIMIT_CRS = BigInt(1024 * 1024 * 512);
17
+ export const ENCRYPTION_TYPES = {
18
+ 1: 0, // ebool takes 2 encrypted bits
19
+ 4: 1,
20
+ 8: 2,
21
+ 16: 3,
22
+ 32: 4,
23
+ 64: 5,
24
+ 128: 6,
25
+ 160: 7,
26
+ 256: 8,
27
+ 512: 9,
28
+ 1024: 10,
29
+ 2048: 11,
30
+ };
31
+ export function getTfheEncryptor(args) {
32
+ const publicKey = TfheCompactPublicKey.safe_deserialize(args.publicKey, SERIALIZED_SIZE_LIMIT_PK);
33
+ const publicParams = CompactPkePublicParams.safe_deserialize(args.crs2048, SERIALIZED_SIZE_LIMIT_CRS);
34
+ return async ({ context, plaintext, }) => {
35
+ if (plaintext.scheme !== encryptionSchemes.tfhe) {
36
+ throw new Error(`Plaintext with scheme ${getEncryptionSchemeName(plaintext.scheme)} cannot be encrypted with TFHE`);
37
+ }
38
+ const { aclAddress, userAddress, contractAddress, hostChainId } = context;
39
+ const input = createEncryptedInput(aclAddress, hostChainId, publicKey, { 2048: { publicParams } })(userAddress, contractAddress);
40
+ const encInput = await addPlaintextInput(input, plaintext).encrypt();
41
+ // FIXME: support multi-valued ciphertext properly
42
+ const prehandle = encInput.prehandles[0];
43
+ const handle = computeHandle({ prehandle, context });
44
+ return {
45
+ context,
46
+ // The '0x' prefix is required for bytes32 for correct json parsing in foundry, but avoided in ciphertext to avoid bytes-based encoding
47
+ // we may need
48
+ prehandle: asBytes32(prehandle),
49
+ handle: asBytes32(handle),
50
+ ciphertext: {
51
+ scheme: plaintext.scheme,
52
+ type: plaintext.type,
53
+ value: bytesToHex(encInput.ciphertext),
54
+ },
55
+ };
56
+ };
57
+ }
58
+ export function createEncryptedInput(aclContractAddress, chainId, tfheCompactPublicKey, publicParams) {
59
+ return (userAddress, contractAddress) => {
60
+ if (!isAddress(contractAddress)) {
61
+ throw new Error('Contract address is not a valid address.');
62
+ }
63
+ if (!isAddress(userAddress)) {
64
+ throw new Error('User address is not a valid address.');
65
+ }
66
+ const bits = [];
67
+ const builder = CompactCiphertextList.builder(tfheCompactPublicKey);
68
+ const checkLimit = (added) => {
69
+ if (bits.reduce((acc, val) => acc + Math.max(2, val), 0) + added > 2048) {
70
+ throw Error('Packing more than 2048 bits in a single input ciphertext is unsupported');
71
+ }
72
+ if (bits.length + 1 > 256)
73
+ throw Error('Packing more than 256 variables in a single input ciphertext is unsupported');
74
+ };
75
+ function checkEncryptedValue(value, bits) {
76
+ if (value == null)
77
+ throw new Error('Missing value');
78
+ let limit;
79
+ if (bits >= 8) {
80
+ limit = BigInt(`0x${new Array(bits / 8).fill(null).reduce((v) => `${v}ff`, '')}`);
81
+ }
82
+ else {
83
+ limit = BigInt(2 ** bits - 1);
84
+ }
85
+ if (value > limit) {
86
+ throw new Error(`The value exceeds the limit for ${bits}bits integer (${limit.toString()}).`);
87
+ }
88
+ }
89
+ return {
90
+ addBool(value) {
91
+ if (typeof value !== 'bigint' && Number(value) > 1)
92
+ throw new Error('The value must be 1 or 0.');
93
+ checkEncryptedValue(Number(value), 1);
94
+ checkLimit(2);
95
+ builder.push_boolean(!!value);
96
+ bits.push(1); // ebool takes 2 encrypted bits
97
+ return this;
98
+ },
99
+ add4(value) {
100
+ checkEncryptedValue(value, 4);
101
+ checkLimit(4);
102
+ builder.push_u4(Number(value));
103
+ bits.push(4);
104
+ return this;
105
+ },
106
+ add8(value) {
107
+ checkEncryptedValue(value, 8);
108
+ checkLimit(8);
109
+ builder.push_u8(Number(value));
110
+ bits.push(8);
111
+ return this;
112
+ },
113
+ add16(value) {
114
+ checkEncryptedValue(value, 16);
115
+ checkLimit(16);
116
+ builder.push_u16(Number(value));
117
+ bits.push(16);
118
+ return this;
119
+ },
120
+ add32(value) {
121
+ checkEncryptedValue(value, 32);
122
+ checkLimit(32);
123
+ builder.push_u32(Number(value));
124
+ bits.push(32);
125
+ return this;
126
+ },
127
+ add64(value) {
128
+ checkEncryptedValue(value, 64);
129
+ checkLimit(64);
130
+ builder.push_u64(BigInt(value));
131
+ bits.push(64);
132
+ return this;
133
+ },
134
+ add128(value) {
135
+ checkEncryptedValue(value, 128);
136
+ checkLimit(128);
137
+ builder.push_u128(BigInt(value));
138
+ bits.push(128);
139
+ return this;
140
+ },
141
+ addAddress(value) {
142
+ if (!isAddress(value)) {
143
+ throw new Error('The value must be a valid address.');
144
+ }
145
+ checkLimit(160);
146
+ builder.push_u160(BigInt(value));
147
+ bits.push(160);
148
+ return this;
149
+ },
150
+ add256(value) {
151
+ checkEncryptedValue(value, 256);
152
+ checkLimit(256);
153
+ builder.push_u256(BigInt(value));
154
+ bits.push(256);
155
+ return this;
156
+ },
157
+ addBytes64(value) {
158
+ if (value.length !== 64)
159
+ throw Error('Incorrect length of input Uint8Array, should be 64 for an ebytes64');
160
+ const bigIntValue = bytesToBigInt(value);
161
+ checkEncryptedValue(bigIntValue, 512);
162
+ checkLimit(512);
163
+ builder.push_u512(bigIntValue);
164
+ bits.push(512);
165
+ return this;
166
+ },
167
+ addBytes128(value) {
168
+ if (value.length !== 128)
169
+ throw Error('Incorrect length of input Uint8Array, should be 128 for an ebytes128');
170
+ const bigIntValue = bytesToBigInt(value);
171
+ checkEncryptedValue(bigIntValue, 1024);
172
+ checkLimit(1024);
173
+ builder.push_u1024(bigIntValue);
174
+ bits.push(1024);
175
+ return this;
176
+ },
177
+ addBytes256(value) {
178
+ if (value.length !== 256)
179
+ throw Error('Incorrect length of input Uint8Array, should be 256 for an ebytes256');
180
+ const bigIntValue = bytesToBigInt(value);
181
+ checkEncryptedValue(bigIntValue, 2048);
182
+ checkLimit(2048);
183
+ builder.push_u2048(bigIntValue);
184
+ bits.push(2048);
185
+ return this;
186
+ },
187
+ getBits() {
188
+ return bits;
189
+ },
190
+ async encrypt() {
191
+ const getKeys = (obj) => Object.keys(obj);
192
+ const totalBits = bits.reduce((total, v) => total + v, 0);
193
+ const now = Date.now();
194
+ // const ppTypes = getKeys(publicParams);
195
+ const ppTypes = getKeys(publicParams);
196
+ const closestPP = ppTypes.find((k) => Number(k) >= totalBits);
197
+ if (!closestPP) {
198
+ throw new Error(`Too many bits in provided values. Maximum is ${ppTypes[ppTypes.length - 1]}.`);
199
+ }
200
+ const pp = publicParams[closestPP].publicParams;
201
+ const buffContract = bytesFromHexString(contractAddress);
202
+ const buffUser = bytesFromHexString(userAddress);
203
+ const buffAcl = bytesFromHexString(aclContractAddress);
204
+ const buffChainId = bytesFromHexString(chainId.toString(16));
205
+ const auxData = new Uint8Array(buffContract.length + buffUser.length + buffAcl.length + 32);
206
+ auxData.set(buffContract, 0);
207
+ auxData.set(buffUser, 20);
208
+ auxData.set(buffAcl, 40);
209
+ auxData.set(buffChainId, auxData.length - buffChainId.length);
210
+ const encrypted = builder.build_with_proof_packed(pp, auxData, ZkComputeLoad.Proof);
211
+ const ciphertext = Buffer.from(encrypted.safe_serialize(SERIALIZED_SIZE_LIMIT_CIPHERTEXT));
212
+ // These prehandles have the expected layout expected by verifyCiphertext
213
+ // including type and version metadata
214
+ const prehandles = [];
215
+ for (let i = 0; i < encrypted.len(); i++) {
216
+ const handleType = getHandleTypeFromFheType(encrypted.get_kind_of(i));
217
+ prehandles[i] = computePrehandle({
218
+ ciphertext,
219
+ handleType: handleType,
220
+ handleVersion: HANDLE_VERSION,
221
+ indexHandle: i,
222
+ });
223
+ }
224
+ return {
225
+ prehandles,
226
+ ciphertext,
227
+ };
228
+ },
229
+ };
230
+ };
231
+ }
232
+ export function addPlaintextInput(input, plaintext) {
233
+ switch (plaintext.type) {
234
+ case handleTypes.ebool:
235
+ return input.addBool(plaintext.value);
236
+ case handleTypes.euint64:
237
+ return input.add64(plaintext.value);
238
+ case handleTypes.euint160:
239
+ let addrStr = plaintext.value.toString(16);
240
+ return input.addAddress(addrStr);
241
+ case handleTypes.euint256:
242
+ return input.add256(plaintext.value);
243
+ }
244
+ }
245
+ // Decryption...
246
+ export function getTfheDecryptor({ cks }) {
247
+ const clientKey = TfheClientKey.safe_deserialize(cks, SERIALIZED_SIZE_LIMIT_CIPHERTEXT);
248
+ const serverKey = TfheServerKey.new(clientKey);
249
+ set_server_key(serverKey);
250
+ return async ({ scheme, type, value, }) => {
251
+ if (scheme !== encryptionSchemes.tfhe) {
252
+ throw new Error(`Ciphertext with scheme ${getEncryptionSchemeName(scheme)} cannot be decrypted with TFHE`);
253
+ }
254
+ const handleType = type;
255
+ const ctBuf = bytesFromHexString(value);
256
+ const header = decodeTfheSerializationHeader(ctBuf);
257
+ // For now just support a singleton ciphertext list
258
+ if (header.name === ProvenCompactCiphertextListTypeName) {
259
+ const encrypted = ProvenCompactCiphertextList.safe_deserialize(ctBuf, SERIALIZED_SIZE_LIMIT_CIPHERTEXT);
260
+ const decrypted = encrypted.expand_without_verification();
261
+ const kind = decrypted.get_kind_of(0);
262
+ return fromCiphertextList(decrypted, clientKey);
263
+ }
264
+ const decryptor = decryptionClasses[handleType];
265
+ if (!decryptor) {
266
+ throw new Error(`Unsupported handle type: ${handleType}`);
267
+ }
268
+ const encrypted = decryptor.safe_deserialize(ctBuf, SERIALIZED_SIZE_LIMIT_CIPHERTEXT);
269
+ const decrypted = encrypted.decrypt(clientKey);
270
+ // First assign to unnarrowed plaintext to avoid concealing type
271
+ const plaintext = { scheme: encryptionSchemes.tfhe, type: handleType, value: decrypted };
272
+ return plaintext;
273
+ };
274
+ }
275
+ function fromCiphertextList(decrypted, clientKey) {
276
+ const kind = decrypted.get_kind_of(0);
277
+ const scheme = encryptionSchemes.tfhe;
278
+ switch (kind) {
279
+ case FheTypes.Bool:
280
+ return { scheme, type: handleTypes.ebool, value: decrypted.get_bool(0).decrypt(clientKey) };
281
+ case FheTypes.Uint64:
282
+ return { scheme, type: handleTypes.euint64, value: decrypted.get_uint64(0).decrypt(clientKey) };
283
+ case FheTypes.Uint256:
284
+ return { scheme, type: handleTypes.euint256, value: decrypted.get_uint256(0).decrypt(clientKey) };
285
+ }
286
+ throw new Error(`Unsupported kind: ${kind}`);
287
+ }
288
+ const decryptionClasses = {
289
+ [handleTypes.ebool]: FheBool,
290
+ [handleTypes.euint64]: FheUint64,
291
+ [handleTypes.euint160]: FheUint160,
292
+ [handleTypes.euint256]: FheUint256,
293
+ };
294
+ var VersioningMode;
295
+ (function (VersioningMode) {
296
+ VersioningMode[VersioningMode["Versioned"] = 0] = "Versioned";
297
+ VersioningMode[VersioningMode["Unversioned"] = 1] = "Unversioned";
298
+ })(VersioningMode || (VersioningMode = {}));
299
+ // Representation of (https://github.com/zama-ai/tfhe-rs/blob/8ee1bdd9a935e9f00c72238f2ff5220ccf77c850/tfhe/src/safe_serialization.rs#L75-L79):
300
+ // struct SerializationHeader {
301
+ // header_version: Cow<'static, str>,
302
+ // versioning_mode: SerializationVersioningMode,
303
+ // name: Cow<'static, str>,
304
+ // }
305
+ export const SerializationHeader = RustType.Struct([
306
+ ['header_version', RustType.Str],
307
+ [
308
+ 'versioning_mode',
309
+ RustType.Enum({ [VersioningMode.Versioned]: RustType.Str, [VersioningMode.Unversioned]: RustType.Str }),
310
+ ],
311
+ ['name', RustType.Str],
312
+ ]);
313
+ // Output schema (note we currently strip the versioning_mode field because we do not care about it, only the name
314
+ export const ProvenCompactCiphertextListTypeName = 'high_level_api::ProvenCompactCiphertextList';
315
+ export const FheUintTypeName = 'high_level_api::FheUint';
316
+ export const TfheSerialisationTypeName = Schema.Literal(ProvenCompactCiphertextListTypeName, FheUintTypeName);
317
+ export const TfheSerializationHeader = Schema.Struct({
318
+ header_version: Schema.String,
319
+ // For now, we will accept any string to avoid having to define an exhaustive union above
320
+ name: Schema.Union(TfheSerialisationTypeName, Schema.String),
321
+ });
322
+ // Decode a serialisation header from a ciphertext or other bincode-serialised data from tfhe-rs
323
+ export function decodeTfheSerializationHeader(buffer) {
324
+ const decoder = new Decoder();
325
+ const decoded = decoder.load(Uint8Array.from(buffer).buffer).decodeAs(SerializationHeader);
326
+ return parse(TfheSerializationHeader, decoded);
327
+ }
328
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGZoZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9maGV2bS90ZmhlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQy9DLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDaEMsT0FBTyxFQUNMLHFCQUFxQixFQUVyQixzQkFBc0IsRUFDdEIsT0FBTyxFQUNQLFFBQVEsRUFDUixVQUFVLEVBQ1YsVUFBVSxFQUNWLFNBQVMsRUFDVCwyQkFBMkIsRUFDM0IsY0FBYyxFQUNkLGFBQWEsRUFDYixvQkFBb0IsRUFDcEIsYUFBYSxFQUNiLGFBQWEsR0FDZCxNQUFNLFdBQVcsQ0FBQztBQUNuQixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2pDLE9BQU8sRUFBRSxTQUFTLEVBQUUsa0JBQWtCLEVBQUUsYUFBYSxFQUFFLFVBQVUsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUN4RixPQUFPLEVBR0wsaUJBQWlCLEVBR2pCLHVCQUF1QixHQU14QixNQUFNLDZCQUE2QixDQUFDO0FBQ3JDLE9BQU8sRUFBRSxhQUFhLEVBQUUsZ0JBQWdCLEVBQUUsY0FBYyxFQUFFLFdBQVcsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUM1RixPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3JDLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUV0RCxxSEFBcUg7QUFDckgsbUVBQW1FO0FBRW5FLGlMQUFpTDtBQUNqTCxtREFBbUQ7QUFDbkQsTUFBTSxDQUFDLE1BQU0sZ0NBQWdDLEdBQUcsTUFBTSxDQUFDLElBQUksR0FBRyxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFDMUUsTUFBTSxDQUFDLE1BQU0sd0JBQXdCLEdBQUcsTUFBTSxDQUFDLElBQUksR0FBRyxJQUFJLEdBQUcsR0FB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
@@ -0,0 +1,3 @@
1
+ import { FheTypes } from 'node-tfhe';
2
+ import { FheType } from '../handle.js';
3
+ export declare function getHandleTypeFromFheType(fheType: FheTypes | undefined): FheType;
@@ -0,0 +1,26 @@
1
+ import { FheTypes } from 'node-tfhe';
2
+ import { handleTypes } from '../handle.js';
3
+ // To HandleType
4
+ // FIXME: how did you arrive at this?
5
+ const fheTypeToHandleType = Object.freeze({
6
+ [FheTypes.Bool]: handleTypes.ebool,
7
+ [FheTypes.Uint4]: handleTypes.euint4,
8
+ [FheTypes.Uint8]: handleTypes.euint8,
9
+ [FheTypes.Uint16]: handleTypes.euint16,
10
+ [FheTypes.Uint32]: handleTypes.euint32,
11
+ [FheTypes.Uint64]: handleTypes.euint64,
12
+ [FheTypes.Uint128]: handleTypes.euint128,
13
+ [FheTypes.Uint160]: handleTypes.euint160,
14
+ [FheTypes.Uint256]: handleTypes.euint256,
15
+ });
16
+ export function getHandleTypeFromFheType(fheType) {
17
+ if (!fheType) {
18
+ throw new Error('FHE type is required');
19
+ }
20
+ const handleType = fheTypeToHandleType[fheType];
21
+ if (!handleType) {
22
+ throw new Error(`Inco SDK does not know how to map FHE type '${fheType}' to HandleType`);
23
+ }
24
+ return handleType;
25
+ }
26
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZmhldm0vdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNyQyxPQUFPLEVBQVcsV0FBVyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBRXBELGdCQUFnQjtBQUNoQixxQ0FBcUM7QUFDckMsTUFBTSxtQkFBbUIsR0FBdUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUM1RSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxXQUFXLENBQUMsS0FBSztJQUNsQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRSxXQUFXLENBQUMsTUFBTTtJQUNwQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRSxXQUFXLENBQUMsTUFBTTtJQUNwQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFBRSxXQUFXLENBQUMsT0FBTztJQUN0QyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFBRSxXQUFXLENBQUMsT0FBTztJQUN0QyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFBRSxXQUFXLENBQUMsT0FBTztJQUN0QyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRSxXQUFXLENBQUMsUUFBUTtJQUN4QyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRSxXQUFXLENBQUMsUUFBUTtJQUN4QyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRSxXQUFXLENBQUMsUUFBUTtDQUN6QyxDQUFDLENBQUM7QUFFSCxNQUFNLFVBQVUsd0JBQXdCLENBQUMsT0FBNkI7SUFDcEUsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2IsTUFBTSxJQUFJLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFDRCxNQUFNLFVBQVUsR0FBRyxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNoRCxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDaEIsTUFBTSxJQUFJLEtBQUssQ0FBQywrQ0FBK0MsT0FBTyxpQkFBaUIsQ0FBQyxDQUFDO0lBQzNGLENBQUM7SUFDRCxPQUFPLFVBQVUsQ0FBQztBQUNwQixDQUFDIn0=