@inco/js 0.1.31 → 0.1.33

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 (102) hide show
  1. package/README.md +28 -57
  2. package/dist/binary.js +67 -0
  3. package/dist/chain.js +24 -0
  4. package/dist/encryption/encryption.js +98 -0
  5. package/dist/encryption/index.cjs +132 -123
  6. package/dist/encryption/index.js +2 -0
  7. package/dist/encryption/index.mjs +132 -123
  8. package/dist/fhevm/fhe-environment.js +8 -0
  9. package/dist/fhevm/fhevm.js +139 -0
  10. package/dist/fhevm/index.js +2 -0
  11. package/dist/fhevm/reencrypt.js +123 -0
  12. package/dist/fhevm/tfhe.js +324 -0
  13. package/dist/fhevm/types.js +26 -0
  14. package/dist/generated/abis/addTwo.js +59 -0
  15. package/dist/generated/abis/inco-fhevm.js +6242 -0
  16. package/dist/generated/abis/index.js +3 -0
  17. package/dist/generated/abis/lightning.js +12489 -0
  18. package/dist/generated/es/cosmos/ics23/v1/proofs_pb.js +198 -0
  19. package/dist/generated/es/cosmos/msg/v1/msg_pb.js +33 -0
  20. package/dist/generated/es/cosmos_proto/cosmos_pb.js +115 -0
  21. package/dist/generated/es/google/api/annotations_pb.js +27 -0
  22. package/dist/generated/es/google/api/http_pb.js +34 -0
  23. package/dist/generated/es/inco/fhe/v1/events_pb.js +21 -0
  24. package/dist/generated/es/inco/fhe/v1/genesis_pb.js +46 -0
  25. package/dist/generated/es/inco/fhe/v1/query_pb.js +108 -0
  26. package/dist/generated/es/inco/fhe/v1/tx_pb.js +108 -0
  27. package/dist/generated/es/inco/fhe/v1/types_pb.js +133 -0
  28. package/dist/generated/es/inco/kms/lite/v1/kms_service_pb.js +43 -0
  29. package/dist/generated/es/inco/kms/lite/v1/types_pb.js +44 -0
  30. package/dist/generated/es/inco/preflight/v1/genesis_pb.js +20 -0
  31. package/dist/generated/es/inco/preflight/v1/query_pb.js +38 -0
  32. package/dist/generated/es/inco/preflight/v1/tx_pb.js +48 -0
  33. package/dist/generated/es/inco/preflight/v1/types_pb.js +34 -0
  34. package/dist/generated/es/kms/base_pb.js +238 -0
  35. package/dist/generated/es/sf/ethereum/type/v2/type_pb.js +571 -0
  36. package/dist/generated/fhe-environments.js +15 -0
  37. package/dist/generated/lightning.js +399 -0
  38. package/dist/generated/local-node.js +8 -0
  39. package/dist/generated/ts/amino/amino.js +8 -0
  40. package/dist/generated/ts/cometbft/abci/v1/types.js +5063 -0
  41. package/dist/generated/ts/cometbft/crypto/v1/keys.js +105 -0
  42. package/dist/generated/ts/cometbft/crypto/v1/proof.js +430 -0
  43. package/dist/generated/ts/cometbft/types/v1/params.js +713 -0
  44. package/dist/generated/ts/cometbft/types/v1/validator.js +353 -0
  45. package/dist/generated/ts/cosmos/app/v1alpha1/module.js +218 -0
  46. package/dist/generated/ts/cosmos/msg/v1/msg.js +8 -0
  47. package/dist/generated/ts/cosmos_proto/cosmos.js +211 -0
  48. package/dist/generated/ts/gogoproto/gogo.js +8 -0
  49. package/dist/generated/ts/google/api/annotations.js +8 -0
  50. package/dist/generated/ts/google/api/http.js +353 -0
  51. package/dist/generated/ts/google/protobuf/descriptor.js +5070 -0
  52. package/dist/generated/ts/google/protobuf/duration.js +90 -0
  53. package/dist/generated/ts/google/protobuf/timestamp.js +90 -0
  54. package/dist/generated/ts/google/protobuf/wrappers.js +506 -0
  55. package/dist/generated/ts/inco/abci/v1/types.js +70 -0
  56. package/dist/generated/ts/inco/fhe/module/v1/module.js +63 -0
  57. package/dist/generated/ts/inco/fhe/v1/events.js +187 -0
  58. package/dist/generated/ts/inco/fhe/v1/genesis.js +711 -0
  59. package/dist/generated/ts/inco/fhe/v1/query.js +1391 -0
  60. package/dist/generated/ts/inco/fhe/v1/tx.js +1233 -0
  61. package/dist/generated/ts/inco/fhe/v1/types.js +985 -0
  62. package/dist/generated/ts/inco/originchain/module/v1/module.js +63 -0
  63. package/dist/generated/ts/inco/originchain/v1/abci.js +328 -0
  64. package/dist/generated/ts/inco/originchain/v1/events.js +213 -0
  65. package/dist/generated/ts/inco/originchain/v1/genesis.js +66 -0
  66. package/dist/generated/ts/inco/originchain/v1/query.js +277 -0
  67. package/dist/generated/ts/inco/originchain/v1/tx.js +137 -0
  68. package/dist/generated/ts/inco/originchain/v1/types.js +200 -0
  69. package/dist/generated/ts/inco/preflight/module/v1/module.js +63 -0
  70. package/dist/generated/ts/inco/preflight/v1/genesis.js +182 -0
  71. package/dist/generated/ts/inco/preflight/v1/query.js +256 -0
  72. package/dist/generated/ts/inco/preflight/v1/tx.js +445 -0
  73. package/dist/generated/ts/inco/preflight/v1/types.js +395 -0
  74. package/dist/handle.js +94 -0
  75. package/dist/index.cjs +140 -131
  76. package/dist/index.js +6 -0
  77. package/dist/index.mjs +140 -131
  78. package/dist/l1/client.js +93 -0
  79. package/dist/l1/index.js +3 -0
  80. package/dist/l1/preflight.js +39 -0
  81. package/dist/lite/deployments.js +17 -0
  82. package/dist/lite/ecies.js +124 -0
  83. package/dist/lite/hadu.js +36 -0
  84. package/dist/lite/index.cjs +186 -146
  85. package/dist/lite/index.js +7 -0
  86. package/dist/lite/index.mjs +3890 -3788
  87. package/dist/lite/lightning.js +179 -0
  88. package/dist/lite/reencrypt.d.ts +1 -0
  89. package/dist/lite/reencrypt.js +148 -0
  90. package/dist/local/index.cjs +25 -2573
  91. package/dist/local/index.js +2 -0
  92. package/dist/local/index.mjs +5352 -7837
  93. package/dist/local/local-node.js +24 -0
  94. package/dist/reencryption/eip712.js +81 -0
  95. package/dist/reencryption/index.cjs +132 -123
  96. package/dist/reencryption/index.js +3 -0
  97. package/dist/reencryption/index.mjs +132 -123
  98. package/dist/reencryption/types.js +2 -0
  99. package/dist/schema.js +15 -0
  100. package/dist/viem.d.ts +53 -52
  101. package/dist/viem.js +8 -0
  102. package/package.json +11 -48
package/README.md CHANGED
@@ -4,7 +4,7 @@ The @inco/js package contains the TypeScript SDK for creating dapps built on Inc
4
4
 
5
5
  ## Current Status: Active Development
6
6
 
7
- The SDK is currently going through active development, to support all new features that Inco offers. As such, do expect breaking changes in subsequent releases, which will be documented in the [CHANGELOG](./CHANGELOG.md). The current state of `@inco/js` includes all low-level blocks to build functional dapps, but an improved public-facing API is also in the works.
7
+ The SDK is currently going through active development, to support all new features that Inco offers. As such, do expect breaking changes in subsequent releases, which will be documented in the [CHANGELOG](./CHANGELOG.md).
8
8
 
9
9
  ## Install
10
10
 
@@ -29,76 +29,47 @@ A typical usage of `@inco/js` includes 3 steps:
29
29
  ### 1. Encrypt a value
30
30
 
31
31
  ```ts
32
- import { getSupportedChain, getViemChain, handleTypes, HexString } from '@inco/js';
33
- import { EciesScheme, encryptionSchemes, PlaintextWithContextOf } from '@inco/js/encryption';
34
- import {
35
- decodeSecp256k1PublicKey,
36
- generateSecp256k1Keypair,
37
- getActiveLightningDeployment,
38
- getEciesEncryptor,
39
- } from '@inco/js/lite';
40
- import { createWalletClient, hexToBytes } from 'viem';
41
-
42
- // Setup. Do it once at initialization.
43
- const chain = getSupportedChain('baseSepolia');
44
- const lightningConfig = getActiveLightningDeployment(chain);
32
+ import { getViemChain, supportedChains } from '@inco/js';
33
+ import { Lightning } from '@inco/js/lite';
34
+ import { createWalletClient } from 'viem';
35
+
36
+ // Setup: do it once at initialization
37
+ const chainId = supportedChains.baseSepolia;
38
+ const zap = Lightning.latest('testnet', chainId); // Connect to Inco's latest public testnet
45
39
  const walletClient = createWalletClient({
46
- chain: getViemChain(chain),
47
- account: /* Choose your account */,
48
- transport: /* Choose your transport */,
40
+ chain: getViemChain(chainId),
41
+ account: /* Choose your account, e.g. from window.ethereum */,
42
+ transport: /* Choose your transport, e.g. from Alchemy */,
49
43
  });
50
- const dappAddress = '0x0000000000000000000000000000000000000000'; // Put your contract address here
51
-
52
- // Define plaintext, along with context needed for verification.
53
- const plaintext = 42n; // bigint
54
- const plaintextWithContext: PlaintextWithContextOf<EciesScheme, typeof handleTypes.euint256> = {
55
- plaintext: {
56
- scheme: encryptionSchemes.ecies,
57
- value: plaintext,
58
- type: handleTypes.euint256,
59
- },
60
- context: {
61
- hostChainId: BigInt(chain.id),
62
- aclAddress: lightningConfig.executorAddress,
63
- userAddress: walletClient.account.address,
64
- contractAddress: dappAddress,
65
- },
66
- };
67
-
68
- // Encrypt.
69
- const ephemeralKeypair = await generateSecp256k1Keypair();
70
- const eciesPubKey = decodeSecp256k1PublicKey(hexToBytes(lightningConfig.eciesPublicKey));
71
- const encryptor = getEciesEncryptor({
72
- scheme: encryptionSchemes.ecies,
73
- pubKeyA: eciesPubKey,
74
- privKeyB: ephemeralKeypair,
44
+ const dappAddress = '0x00000000000000000000000000000000deadbeef'; // Put your contract address here
45
+
46
+ // Encrypt the plaintext value
47
+ const plaintext = 42;
48
+ const ciphertext = await zap.encrypt(plaintext, {
49
+ accountAddress: walletClient.account.address,
50
+ dappAddress,
75
51
  });
76
- const { ciphertext } = await encryptor(plaintextWithContext);
77
- console.log(ciphertext.value); // Will print the encrypted value as hex
52
+
53
+ console.log(ciphertext); // A long hex string representing the encrypted value
78
54
  ```
79
55
 
80
56
  ### 2. Post the ciphertext to the contract
81
57
 
82
- For this step, there is nothing specific to the `@inco/js`. We recommend continue using [viem](https://viem.sh). In particular, take a look at their [`writeContract`](https://viem.sh/docs/contract/writeContract) methods to make a transaction on chain, and pass in the `ciphertext.value` from the previous step as the input ciphertext.
58
+ This step does not require any specific `@inco/js` functionality. We recommend using [viem](https://viem.sh) to interact with the blockchain. Specifically, use the [`writeContract`](https://viem.sh/docs/contract/writeContract) method to submit transactions. Pass the `ciphertext` from the previous encryption step as the input ciphertext parameter of type `bytes`.
83
59
 
84
60
  ### 3. Request a reencryption
85
61
 
86
- After submitting your transaction, the Inco covalidators will process your request and perform the computation. In your contract, the result handle of the computation should be stored on chain, let's call it `resultHandle` of type `Handle` (hex).
62
+ Following transaction submission, the Inco covalidator processes the computation request. The contract stores the computation result as a handle on-chain. This handle, referenced below as `resultHandle`, is a hexadecimal string of type `Handle` that serves as a reference to the encrypted computation output.
87
63
 
88
64
  ```ts
89
- import { incoLiteReencryptor } from "@inco/js/lite";
90
65
  import { Hex } from "viem";
91
66
 
92
- // Reencrypt.
93
- let resultHandle = "0x..." as Hex; // Retrieve it, e.g. by reading from your dapp contract.
94
- const reencryptor = await incoLiteReencryptor({
95
- chainId: BigInt(chain.id),
96
- walletClient: walletClient,
97
- }); // This step will ask you to sign an EIP-712 needed for reencryption verification
98
- const resultPlaintext = await reencryptor({
99
- handle: resultHandle,
100
- });
101
- console.log(resultPlaintext.value); // Plaintext of the final result after computation
67
+ // Request a re-encryption of the result ciphertext
68
+ const resultHandle = "0x..." as Hex; // Retrieve the handle from the contract, e.g. using viem
69
+ const reencryptor = await zap.getReencryptor(walletClient); // Use same walletClient as previous step
70
+ const resultPlaintext = await reencryptor({ handle: resultHandle });
71
+
72
+ console.log(resultPlaintext.value); // The decrypted value
102
73
  ```
103
74
 
104
75
  ## License
package/dist/binary.js ADDED
@@ -0,0 +1,67 @@
1
+ import { ParseResult, Schema } from 'effect';
2
+ import { isHex } from 'viem';
3
+ import { parse } from './schema';
4
+ export const HexString = Schema.TemplateLiteral('0x', Schema.String);
5
+ export function bytesToBigInt(byteArray) {
6
+ // Ugly but better than bigint-buffer that insists on writing junk to stderr if it doesn't have native bindings
7
+ return !byteArray?.length ? BigInt(0) : BigInt('0x' + Buffer.from(byteArray).toString('hex'));
8
+ }
9
+ export function bufferToBigInt(buffer) {
10
+ return bytesToBigInt(Uint8Array.from(buffer));
11
+ }
12
+ // Convert a bigint to a 32-byte array, left-padded if necessary. Note: it is
13
+ // caller's responsibility to ensure that the bigint is not too large to fit in
14
+ // 32 bytes, or else the result will be truncated.
15
+ export function bigintToBytes32(value) {
16
+ return parse(Bytes32, Buffer.from(value.toString(16).padStart(64, '0'), 'hex').toString('hex'));
17
+ }
18
+ export function padLeft(bs, n) {
19
+ if (bs.length > n) {
20
+ throw new Error(`Cannot pad ${bs.length} bytes to ${n} - would truncate`);
21
+ }
22
+ const buf = Buffer.alloc(n);
23
+ buf.set(bs, n - bs.length);
24
+ return buf;
25
+ }
26
+ export function bytes32ToBigint(bs) {
27
+ const bytes32 = asBytes32(bs);
28
+ return BigInt(bytes32);
29
+ }
30
+ export function bytesFromHexString(hexString) {
31
+ return Buffer.from(hexString.startsWith('0x') ? hexString.slice(2) : hexString, 'hex');
32
+ }
33
+ export function mustBeHex(value) {
34
+ if (!isHex(value)) {
35
+ throw new Error(`Expected hex string, got: ${value}`);
36
+ }
37
+ return value;
38
+ }
39
+ export function normaliseToHex(value) {
40
+ return mustBeHex(value.startsWith('0x') ? value : `0x${value}`);
41
+ }
42
+ export function bytesToHex(bs) {
43
+ return ('0x' + Buffer.from(bs).toString('hex'));
44
+ }
45
+ const ByteArray = Schema.Object.pipe(Schema.filter((x) => x instanceof Uint8Array));
46
+ const BytesToHex = Schema.transformOrFail(Schema.Union(Schema.String, ByteArray), HexString, {
47
+ strict: true,
48
+ encode: ParseResult.succeed,
49
+ decode: (x) => x instanceof Uint8Array
50
+ ? ParseResult.succeed(bytesToHex(x))
51
+ : ((y) => isHex(y)
52
+ ? ParseResult.succeed(y)
53
+ : ParseResult.fail(new ParseResult.Unexpected(y, `'${y}' is not a hex string`)))(normaliseToHex(x)),
54
+ });
55
+ export const Bytes32 = BytesToHex.pipe(Schema.filter((x) => x.length === 66 ||
56
+ `Expected 32-byte hex string (66 characters with 0x prefix) but got ${x.length} character string`), Schema.brand('Bytes32'));
57
+ export function asBytes32(x) {
58
+ return parse(Bytes32, x);
59
+ }
60
+ export const Address = HexString.pipe(Schema.filter((s) => s.length === 42 || `Address must be a 20-byte '0x'-prefixed hex string, but got: ${s}`), Schema.brand('Address'));
61
+ export function parseAddress(address) {
62
+ return parse(Address, address);
63
+ }
64
+ export function parseHex(hex) {
65
+ return parse(HexString, hex);
66
+ }
67
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmluYXJ5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2JpbmFyeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUM3QyxPQUFPLEVBQU8sS0FBSyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2xDLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFFakMsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztBQU1yRSxNQUFNLFVBQVUsYUFBYSxDQUFDLFNBQXFCO0lBQ2pELCtHQUErRztJQUMvRyxPQUFPLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDaEcsQ0FBQztBQUVELE1BQU0sVUFBVSxjQUFjLENBQUMsTUFBYztJQUMzQyxPQUFPLGFBQWEsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDaEQsQ0FBQztBQUVELDZFQUE2RTtBQUM3RSwrRUFBK0U7QUFDL0Usa0RBQWtEO0FBQ2xELE1BQU0sVUFBVSxlQUFlLENBQUMsS0FBYTtJQUMzQyxPQUFPLEtBQUssQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDbEcsQ0FBQztBQUVELE1BQU0s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
package/dist/chain.js ADDED
@@ -0,0 +1,24 @@
1
+ // No imports here to avoid issues with closures and modules across pulumi boundary
2
+ // This file can be seen as mirroring the functionality of viem changes without depending on it directly.
3
+ // It exists as a workaround for some very gnarly issues with code reuse between Pulumi and this module, partly
4
+ // relating to modules but also linked to Pulumi's ability to capture closures and serialise them.
5
+ export const supportedChains = {
6
+ baseSepolia: 84532,
7
+ sepolia: 11155111,
8
+ monadTestnet: 10143,
9
+ };
10
+ export const fheSupportedChains = { baseSepolia: 84532, sepolia: 11155111 };
11
+ // Get supportedChain either by its chain ID or the short name (lower pascal case)
12
+ export function getSupportedChain(chainish) {
13
+ const found = typeof chainish === 'number' || typeof chainish === 'bigint'
14
+ ? Object.entries(supportedChains).find(([, id]) => id === Number(chainish))
15
+ : typeof chainish === 'object'
16
+ ? Object.entries(supportedChains).find(([, id]) => id === Number(chainish.id))
17
+ : Object.entries(supportedChains).find(([shortName]) => shortName === chainish);
18
+ if (!found) {
19
+ throw new Error(`Supported chain ${JSON.stringify(chainish)} not found`);
20
+ }
21
+ const [name, id] = found;
22
+ return { name: name, id };
23
+ }
24
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhaW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvY2hhaW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsbUZBQW1GO0FBRW5GLHlHQUF5RztBQUN6RywrR0FBK0c7QUFDL0csa0dBQWtHO0FBRWxHLE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRztJQUM3QixXQUFXLEVBQUUsS0FBSztJQUNsQixPQUFPLEVBQUUsUUFBUTtJQUNqQixZQUFZLEVBQUUsS0FBSztDQUNYLENBQUM7QUFFWCxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBVyxDQUFDO0FBY3JGLGtGQUFrRjtBQUNsRixNQUFNLFVBQVUsaUJBQWlCLENBQUMsUUFBa0I7SUFDbEQsTUFBTSxLQUFLLEdBQ1QsT0FBTyxRQUFRLEtBQUssUUFBUSxJQUFJLE9BQU8sUUFBUSxLQUFLLFFBQVE7UUFDMUQsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEtBQUssTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzNFLENBQUMsQ0FBQyxPQUFPLFFBQVEsS0FBSyxRQUFRO1lBQzVCLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxLQUFLLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDOUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsRUFBRSxFQUFFLENBQUMsU0FBUyxLQUFLLFFBQVEsQ0FBQyxDQUFDO0lBQ3RGLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNYLE1BQU0sSUFBSSxLQUFLLENBQUMsbUJBQW1CLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQzNFLENBQUM7SUFDRCxNQUFNLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQztJQUN6QixPQUFPLEVBQUUsSUFBSSxFQUFFLElBQTBCLEVBQUUsRUFBRSxFQUFFLENBQUM7QUFDbEQsQ0FBQyJ9
@@ -0,0 +1,98 @@
1
+ import { Schema } from 'effect';
2
+ import { bigintToBytes32, Bytes32, HexString } from '../binary';
3
+ import { handleTypes, InputContext } from '../handle';
4
+ export const supportedFheTypes = {
5
+ euint64: handleTypes.euint64,
6
+ euint256: handleTypes.euint256,
7
+ ebool: handleTypes.ebool,
8
+ };
9
+ const supportedFheTypeNames = Object.keys(supportedFheTypes);
10
+ export const SupportedFheTypeName = Schema.Literal(...supportedFheTypeNames);
11
+ // TODO: extend to all types
12
+ export const SupportedFheType = Schema.Literal(...Object.values(supportedFheTypes));
13
+ export const encryptionSchemes = {
14
+ tfhe: 0,
15
+ ecies: 1,
16
+ cryptobox: 2,
17
+ };
18
+ export function getEncryptionSchemeName(scheme) {
19
+ switch (scheme) {
20
+ case encryptionSchemes.tfhe:
21
+ return 'TFHE';
22
+ case encryptionSchemes.ecies:
23
+ return 'ECIES';
24
+ case encryptionSchemes.cryptobox:
25
+ return 'NACLCryptoBox';
26
+ default:
27
+ throw new Error(`Unknown encryption scheme: ${scheme}`);
28
+ }
29
+ }
30
+ export const EncryptionScheme = Schema.Literal(encryptionSchemes.tfhe, encryptionSchemes.ecies, encryptionSchemes.cryptobox);
31
+ export const ciphertextEnvelopes = {
32
+ none: 0,
33
+ hadu: 1,
34
+ };
35
+ export const CiphertextEnvelope = Schema.Literal(...Object.values(ciphertextEnvelopes));
36
+ export const Ciphertext = Schema.Struct({
37
+ scheme: EncryptionScheme,
38
+ type: SupportedFheType,
39
+ value: HexString,
40
+ envelope: Schema.optional(CiphertextEnvelope),
41
+ });
42
+ export const CiphertextWithContext = Schema.Struct({
43
+ ciphertext: Ciphertext,
44
+ context: InputContext,
45
+ });
46
+ export const EncryptResult = Schema.Struct({
47
+ ciphertext: Ciphertext,
48
+ context: InputContext,
49
+ prehandle: Bytes32,
50
+ handle: Bytes32,
51
+ });
52
+ export const Plaintext = Schema.Union(Schema.Struct({
53
+ scheme: EncryptionScheme,
54
+ type: Schema.Literal(handleTypes.euint64, handleTypes.euint256),
55
+ value: Schema.BigInt,
56
+ }), Schema.Struct({
57
+ scheme: EncryptionScheme,
58
+ type: Schema.Literal(handleTypes.ebool),
59
+ value: Schema.Boolean,
60
+ }));
61
+ export const PlaintextWithContext = Schema.Struct({
62
+ plaintext: Plaintext,
63
+ context: InputContext,
64
+ });
65
+ export function bigintToPlaintext(scheme, type, bigPt) {
66
+ switch (type) {
67
+ case handleTypes.euint64:
68
+ case handleTypes.euint256:
69
+ return {
70
+ scheme,
71
+ type,
72
+ value: bigPt,
73
+ };
74
+ case handleTypes.ebool:
75
+ return {
76
+ scheme,
77
+ type,
78
+ value: bigPt !== 0n,
79
+ };
80
+ }
81
+ throw new Error(`Unsupported FHE type: ${type}`);
82
+ }
83
+ export function plaintextToBigint(plaintext) {
84
+ switch (plaintext.type) {
85
+ case handleTypes.euint64:
86
+ case handleTypes.euint256:
87
+ return plaintext.value;
88
+ case handleTypes.ebool:
89
+ return plaintext.value ? 1n : 0n;
90
+ }
91
+ }
92
+ export function plaintextToBytes32(plaintext) {
93
+ return bigintToBytes32(plaintextToBigint(plaintext));
94
+ }
95
+ export function bytes32ToPlaintext(plaintext, scheme, type) {
96
+ return bigintToPlaintext(scheme, type, BigInt(plaintext));
97
+ }
98
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW5jcnlwdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbmNyeXB0aW9uL2VuY3J5cHRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUNoQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDaEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFhdEQsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUc7SUFDL0IsT0FBTyxFQUFFLFdBQVcsQ0FBQyxPQUFPO0lBQzVCLFFBQVEsRUFBRSxXQUFXLENBQUMsUUFBUTtJQUM5QixLQUFLLEVBQUUsV0FBVyxDQUFDLEtBQUs7Q0FDaEIsQ0FBQztBQUVYLE1BQU0scUJBQXFCLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBdUMsQ0FBQztBQUVuRyxNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcscUJBQXFCLENBQUMsQ0FBQztBQUk3RSw0QkFBNEI7QUFDNUIsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDO0FBSXBGLE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHO0lBQy9CLElBQUksRUFBRSxDQUFDO0lBQ1AsS0FBSyxFQUFFLENBQUM7SUFDUixTQUFTLEVBQUUsQ0FBQztDQUNKLENBQUM7QUFFWCxNQUFNLFVBQVUsdUJBQXVCLENBQUMsTUFBYztJQUNwRCxRQUFRLE1BQU0sRUFBRSxDQUFDO1FBQ2YsS0FBSyxpQkFBaUIsQ0FBQyxJQUFJO1lBQ3pCLE9BQU8sTUFBTSxDQUFDO1FBQ2hCLEtBQUssaUJBQWlCLENBQUMsS0FBSztZ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