@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.
- package/README.md +28 -57
- package/dist/binary.js +67 -0
- package/dist/chain.js +24 -0
- package/dist/encryption/encryption.js +98 -0
- package/dist/encryption/index.cjs +132 -123
- package/dist/encryption/index.js +2 -0
- package/dist/encryption/index.mjs +132 -123
- package/dist/fhevm/fhe-environment.js +8 -0
- package/dist/fhevm/fhevm.js +139 -0
- package/dist/fhevm/index.js +2 -0
- package/dist/fhevm/reencrypt.js +123 -0
- package/dist/fhevm/tfhe.js +324 -0
- package/dist/fhevm/types.js +26 -0
- package/dist/generated/abis/addTwo.js +59 -0
- package/dist/generated/abis/inco-fhevm.js +6242 -0
- package/dist/generated/abis/index.js +3 -0
- package/dist/generated/abis/lightning.js +12489 -0
- package/dist/generated/es/cosmos/ics23/v1/proofs_pb.js +198 -0
- package/dist/generated/es/cosmos/msg/v1/msg_pb.js +33 -0
- package/dist/generated/es/cosmos_proto/cosmos_pb.js +115 -0
- package/dist/generated/es/google/api/annotations_pb.js +27 -0
- package/dist/generated/es/google/api/http_pb.js +34 -0
- package/dist/generated/es/inco/fhe/v1/events_pb.js +21 -0
- package/dist/generated/es/inco/fhe/v1/genesis_pb.js +46 -0
- package/dist/generated/es/inco/fhe/v1/query_pb.js +108 -0
- package/dist/generated/es/inco/fhe/v1/tx_pb.js +108 -0
- package/dist/generated/es/inco/fhe/v1/types_pb.js +133 -0
- package/dist/generated/es/inco/kms/lite/v1/kms_service_pb.js +43 -0
- package/dist/generated/es/inco/kms/lite/v1/types_pb.js +44 -0
- package/dist/generated/es/inco/preflight/v1/genesis_pb.js +20 -0
- package/dist/generated/es/inco/preflight/v1/query_pb.js +38 -0
- package/dist/generated/es/inco/preflight/v1/tx_pb.js +48 -0
- package/dist/generated/es/inco/preflight/v1/types_pb.js +34 -0
- package/dist/generated/es/kms/base_pb.js +238 -0
- package/dist/generated/es/sf/ethereum/type/v2/type_pb.js +571 -0
- package/dist/generated/fhe-environments.js +15 -0
- package/dist/generated/lightning.js +399 -0
- package/dist/generated/local-node.js +8 -0
- package/dist/generated/ts/amino/amino.js +8 -0
- package/dist/generated/ts/cometbft/abci/v1/types.js +5063 -0
- package/dist/generated/ts/cometbft/crypto/v1/keys.js +105 -0
- package/dist/generated/ts/cometbft/crypto/v1/proof.js +430 -0
- package/dist/generated/ts/cometbft/types/v1/params.js +713 -0
- package/dist/generated/ts/cometbft/types/v1/validator.js +353 -0
- package/dist/generated/ts/cosmos/app/v1alpha1/module.js +218 -0
- package/dist/generated/ts/cosmos/msg/v1/msg.js +8 -0
- package/dist/generated/ts/cosmos_proto/cosmos.js +211 -0
- package/dist/generated/ts/gogoproto/gogo.js +8 -0
- package/dist/generated/ts/google/api/annotations.js +8 -0
- package/dist/generated/ts/google/api/http.js +353 -0
- package/dist/generated/ts/google/protobuf/descriptor.js +5070 -0
- package/dist/generated/ts/google/protobuf/duration.js +90 -0
- package/dist/generated/ts/google/protobuf/timestamp.js +90 -0
- package/dist/generated/ts/google/protobuf/wrappers.js +506 -0
- package/dist/generated/ts/inco/abci/v1/types.js +70 -0
- package/dist/generated/ts/inco/fhe/module/v1/module.js +63 -0
- package/dist/generated/ts/inco/fhe/v1/events.js +187 -0
- package/dist/generated/ts/inco/fhe/v1/genesis.js +711 -0
- package/dist/generated/ts/inco/fhe/v1/query.js +1391 -0
- package/dist/generated/ts/inco/fhe/v1/tx.js +1233 -0
- package/dist/generated/ts/inco/fhe/v1/types.js +985 -0
- package/dist/generated/ts/inco/originchain/module/v1/module.js +63 -0
- package/dist/generated/ts/inco/originchain/v1/abci.js +328 -0
- package/dist/generated/ts/inco/originchain/v1/events.js +213 -0
- package/dist/generated/ts/inco/originchain/v1/genesis.js +66 -0
- package/dist/generated/ts/inco/originchain/v1/query.js +277 -0
- package/dist/generated/ts/inco/originchain/v1/tx.js +137 -0
- package/dist/generated/ts/inco/originchain/v1/types.js +200 -0
- package/dist/generated/ts/inco/preflight/module/v1/module.js +63 -0
- package/dist/generated/ts/inco/preflight/v1/genesis.js +182 -0
- package/dist/generated/ts/inco/preflight/v1/query.js +256 -0
- package/dist/generated/ts/inco/preflight/v1/tx.js +445 -0
- package/dist/generated/ts/inco/preflight/v1/types.js +395 -0
- package/dist/handle.js +94 -0
- package/dist/index.cjs +140 -131
- package/dist/index.js +6 -0
- package/dist/index.mjs +140 -131
- package/dist/l1/client.js +93 -0
- package/dist/l1/index.js +3 -0
- package/dist/l1/preflight.js +39 -0
- package/dist/lite/deployments.js +17 -0
- package/dist/lite/ecies.js +124 -0
- package/dist/lite/hadu.js +36 -0
- package/dist/lite/index.cjs +186 -146
- package/dist/lite/index.js +7 -0
- package/dist/lite/index.mjs +3890 -3788
- package/dist/lite/lightning.js +179 -0
- package/dist/lite/reencrypt.d.ts +1 -0
- package/dist/lite/reencrypt.js +148 -0
- package/dist/local/index.cjs +25 -2573
- package/dist/local/index.js +2 -0
- package/dist/local/index.mjs +5352 -7837
- package/dist/local/local-node.js +24 -0
- package/dist/reencryption/eip712.js +81 -0
- package/dist/reencryption/index.cjs +132 -123
- package/dist/reencryption/index.js +3 -0
- package/dist/reencryption/index.mjs +132 -123
- package/dist/reencryption/types.js +2 -0
- package/dist/schema.js +15 -0
- package/dist/viem.d.ts +53 -52
- package/dist/viem.js +8 -0
- 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).
|
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 {
|
33
|
-
import {
|
34
|
-
import {
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
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
|
-
|
47
|
-
|
48
|
-
|
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 = '
|
51
|
-
|
52
|
-
//
|
53
|
-
const plaintext =
|
54
|
-
const
|
55
|
-
|
56
|
-
|
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
|
-
|
77
|
-
console.log(ciphertext
|
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
|
-
|
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
|
-
|
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
|
-
//
|
93
|
-
|
94
|
-
const reencryptor = await
|
95
|
-
|
96
|
-
|
97
|
-
|
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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
|