@inco/js 0.11.0-testnet-2 → 1.0.0-devnet-1
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/dist/cjs/advancedacl/session-key.d.ts +4 -3
- package/dist/cjs/advancedacl/session-key.js +16 -9
- package/dist/cjs/advancedacl/types.d.ts +1 -0
- package/dist/cjs/attestedcompute/attested-compute.d.ts +4 -4
- package/dist/cjs/attestedcompute/types.d.ts +9 -9
- package/dist/cjs/attestedcompute/types.js +20 -20
- package/dist/cjs/attesteddecrypt/attested-decrypt.d.ts +4 -4
- package/dist/cjs/attesteddecrypt/types.d.ts +5 -5
- package/dist/cjs/attestedreveal/attested-reveal.d.ts +2 -2
- package/dist/cjs/elistattesteddecrypt/elist-attested-decrypt.d.ts +5 -5
- package/dist/cjs/elistattesteddecrypt/types.d.ts +5 -5
- package/dist/cjs/encryption/encryption.d.ts +19 -16
- package/dist/cjs/encryption/encryption.js +6 -6
- package/dist/cjs/encryption/index.d.ts +1 -1
- package/dist/cjs/encryption/index.js +4 -4
- package/dist/cjs/generated/abis/lightning.d.ts +166 -1
- package/dist/cjs/generated/abis/lightning.js +141 -2
- package/dist/cjs/generated/abis/verifier.d.ts +62 -0
- package/dist/cjs/generated/abis/verifier.js +53 -1
- package/dist/cjs/generated/es/inco/covalidator/compute/v1/server_pb.d.ts +101 -107
- package/dist/cjs/generated/es/inco/covalidator/compute/v1/server_pb.js +93 -93
- package/dist/cjs/generated/es/inco/covalidator/compute/v1/types_pb.d.ts +6 -0
- package/dist/cjs/generated/es/inco/covalidator/compute/v1/types_pb.js +2 -2
- package/dist/cjs/generated/es/inco/kms/lite/v1/types_pb.d.ts +48 -41
- package/dist/cjs/generated/es/inco/kms/lite/v1/types_pb.js +43 -43
- package/dist/cjs/generated/lightning.d.ts +98 -0
- package/dist/cjs/generated/lightning.js +118 -18
- package/dist/cjs/generated/local-node.d.ts +7 -7
- package/dist/cjs/generated/local-node.js +7 -7
- package/dist/cjs/handle.d.ts +17 -15
- package/dist/cjs/handle.js +32 -19
- package/dist/cjs/index.d.ts +1 -1
- package/dist/cjs/index.js +2 -2
- package/dist/cjs/kms/quorumClient.d.ts +6 -6
- package/dist/cjs/lite/lightning.d.ts +20 -20
- package/dist/cjs/lite/lightning.js +4 -2
- package/dist/cjs/lite/xwing.js +1 -1
- package/dist/cjs/reencryption/types.d.ts +3 -3
- package/dist/esm/advancedacl/session-key.d.ts +4 -3
- package/dist/esm/advancedacl/session-key.js +15 -9
- package/dist/esm/advancedacl/types.d.ts +1 -0
- package/dist/esm/attestedcompute/attested-compute.d.ts +4 -4
- package/dist/esm/attestedcompute/types.d.ts +9 -9
- package/dist/esm/attestedcompute/types.js +20 -20
- package/dist/esm/attesteddecrypt/attested-decrypt.d.ts +4 -4
- package/dist/esm/attesteddecrypt/types.d.ts +5 -5
- package/dist/esm/attestedreveal/attested-reveal.d.ts +2 -2
- package/dist/esm/elistattesteddecrypt/elist-attested-decrypt.d.ts +5 -5
- package/dist/esm/elistattesteddecrypt/types.d.ts +5 -5
- package/dist/esm/encryption/encryption.d.ts +19 -16
- package/dist/esm/encryption/encryption.js +5 -5
- package/dist/esm/encryption/index.d.ts +1 -1
- package/dist/esm/encryption/index.js +1 -1
- package/dist/esm/generated/abis/lightning.d.ts +166 -1
- package/dist/esm/generated/abis/lightning.js +141 -2
- package/dist/esm/generated/abis/verifier.d.ts +62 -0
- package/dist/esm/generated/abis/verifier.js +53 -1
- package/dist/esm/generated/es/inco/covalidator/compute/v1/server_pb.d.ts +101 -107
- package/dist/esm/generated/es/inco/covalidator/compute/v1/server_pb.js +92 -92
- package/dist/esm/generated/es/inco/covalidator/compute/v1/types_pb.d.ts +6 -0
- package/dist/esm/generated/es/inco/covalidator/compute/v1/types_pb.js +2 -2
- package/dist/esm/generated/es/inco/kms/lite/v1/types_pb.d.ts +48 -41
- package/dist/esm/generated/es/inco/kms/lite/v1/types_pb.js +43 -43
- package/dist/esm/generated/lightning.d.ts +98 -0
- package/dist/esm/generated/lightning.js +118 -18
- package/dist/esm/generated/local-node.d.ts +7 -7
- package/dist/esm/generated/local-node.js +7 -7
- package/dist/esm/handle.d.ts +17 -15
- package/dist/esm/handle.js +31 -18
- package/dist/esm/index.d.ts +1 -1
- package/dist/esm/index.js +1 -1
- package/dist/esm/kms/quorumClient.d.ts +6 -6
- package/dist/esm/lite/lightning.d.ts +20 -20
- package/dist/esm/lite/lightning.js +4 -2
- package/dist/esm/lite/xwing.js +2 -2
- package/dist/esm/reencryption/types.d.ts +3 -3
- package/dist/types/advancedacl/session-key.d.ts +4 -3
- package/dist/types/advancedacl/types.d.ts +1 -0
- package/dist/types/attestedcompute/attested-compute.d.ts +4 -4
- package/dist/types/attestedcompute/types.d.ts +9 -9
- package/dist/types/attesteddecrypt/attested-decrypt.d.ts +4 -4
- package/dist/types/attesteddecrypt/types.d.ts +5 -5
- package/dist/types/attestedreveal/attested-reveal.d.ts +2 -2
- package/dist/types/elistattesteddecrypt/elist-attested-decrypt.d.ts +5 -5
- package/dist/types/elistattesteddecrypt/types.d.ts +5 -5
- package/dist/types/encryption/encryption.d.ts +19 -16
- package/dist/types/encryption/index.d.ts +1 -1
- package/dist/types/generated/abis/lightning.d.ts +166 -1
- package/dist/types/generated/abis/verifier.d.ts +62 -0
- package/dist/types/generated/es/inco/covalidator/compute/v1/server_pb.d.ts +101 -107
- package/dist/types/generated/es/inco/covalidator/compute/v1/types_pb.d.ts +6 -0
- package/dist/types/generated/es/inco/kms/lite/v1/types_pb.d.ts +48 -41
- package/dist/types/generated/lightning.d.ts +98 -0
- package/dist/types/generated/local-node.d.ts +7 -7
- package/dist/types/handle.d.ts +17 -15
- package/dist/types/index.d.ts +1 -1
- package/dist/types/kms/quorumClient.d.ts +6 -6
- package/dist/types/lite/lightning.d.ts +20 -20
- package/dist/types/reencryption/types.d.ts +3 -3
- package/package.json +1 -1
|
@@ -2,13 +2,14 @@ import { type Account, type Address, type Chain, type Hex, PublicClient, type Tr
|
|
|
2
2
|
import type { PrivateKeyAccount } from 'viem/accounts';
|
|
3
3
|
import { DecryptionAttestation, EncryptedDecryptionAttestation } from '../attesteddecrypt/index.js';
|
|
4
4
|
import { SupportedChainId } from '../chain.js';
|
|
5
|
-
import { EncryptionScheme,
|
|
5
|
+
import { EncryptionScheme, SupportedTeeType } from '../encryption/encryption.js';
|
|
6
6
|
import { HexString } from '../index.js';
|
|
7
7
|
import { type XwingKeypair } from '../lite/xwing.js';
|
|
8
8
|
import { BackoffConfig } from '../retry.js';
|
|
9
9
|
import type { AllowanceVoucher, AllowanceVoucherWithSig } from './types.js';
|
|
10
10
|
import { AttestedComputeOP } from '../attestedcompute/types.js';
|
|
11
11
|
import { KmsQuorumClient } from '../kms/quorumClient.js';
|
|
12
|
+
export declare const SESSION_KEY_WARNING = "Inco Warning: signing this message may leak your private data, including from unrelated apps. Sign only if you fully trust this app.";
|
|
12
13
|
export interface Session {
|
|
13
14
|
decrypter: Address;
|
|
14
15
|
expiresAt: bigint;
|
|
@@ -47,7 +48,7 @@ export interface SessionKeyAttestedComputeArgs {
|
|
|
47
48
|
reencryptPubKey?: Uint8Array | undefined;
|
|
48
49
|
reencryptKeypair?: XwingKeypair | undefined;
|
|
49
50
|
}
|
|
50
|
-
export declare function sessionKeyAttestedCompute<T extends
|
|
51
|
+
export declare function sessionKeyAttestedCompute<T extends SupportedTeeType>({ lhsHandle, op, rhsPlaintext, backoffConfig, chainId, kmsQuorumClient, ephemeralAccount, allowanceVoucherWithSig, requesterArgData, ethClient, executorAddress, reencryptPubKey, reencryptKeypair, }: SessionKeyAttestedComputeArgs): Promise<DecryptionAttestation<EncryptionScheme, SupportedTeeType> | EncryptedDecryptionAttestation<EncryptionScheme, SupportedTeeType>>;
|
|
51
52
|
export interface SessionKeyAttestedDecryptArgs {
|
|
52
53
|
chainId: SupportedChainId;
|
|
53
54
|
ephemeralAccount: PrivateKeyAccount;
|
|
@@ -91,4 +92,4 @@ export interface SessionKeyAttestedDecryptArgs {
|
|
|
91
92
|
* );
|
|
92
93
|
* ```
|
|
93
94
|
*/
|
|
94
|
-
export declare function sessionKeyAttestedDecrypt({ chainId, kmsQuorumClient, handles, ephemeralAccount, allowanceVoucherWithSig, requesterArgData, backoffConfig, reencryptPubKey, reencryptKeypair, ethClient, executorAddress, }: SessionKeyAttestedDecryptArgs): Promise<Array<DecryptionAttestation<EncryptionScheme,
|
|
95
|
+
export declare function sessionKeyAttestedDecrypt({ chainId, kmsQuorumClient, handles, ephemeralAccount, allowanceVoucherWithSig, requesterArgData, backoffConfig, reencryptPubKey, reencryptKeypair, ethClient, executorAddress, }: SessionKeyAttestedDecryptArgs): Promise<Array<DecryptionAttestation<EncryptionScheme, SupportedTeeType> | EncryptedDecryptionAttestation<EncryptionScheme, SupportedTeeType>>>;
|
|
@@ -12,9 +12,15 @@ import { AttestedDecryptError } from '../attesteddecrypt/types.js';
|
|
|
12
12
|
import { fetchEip712DomainVersion } from '../eip712/eip712.js';
|
|
13
13
|
import { AttestedComputeRequestSchema, AttestedDecryptRequestSchema, } from '../generated/es/inco/kms/lite/v1/kms_service_pb.js';
|
|
14
14
|
import { AllowanceProofSchema, AllowanceVoucherSchema, HandleWithProofSchema, IncoLiteAdvancedACLProofSchema, } from '../generated/es/inco/kms/lite/v1/types_pb.js';
|
|
15
|
+
// SessionKey is a special case of the SessionVerifier allowance, where the
|
|
16
|
+
// requester is an ephemeral keypair generated by the user, to use the same
|
|
17
|
+
// keypair for multiple reencryptions, expired after a certain time.
|
|
18
|
+
// Default warning message included in session vouchers. Displayed by wallets
|
|
19
|
+
// at signing time so users understand what they are granting access to.
|
|
20
|
+
export const SESSION_KEY_WARNING = 'Inco Warning: signing this message may leak your private data, including from unrelated apps. Sign only if you fully trust this app.';
|
|
15
21
|
// Given a sharer's wallet client, an incoLite contract address, and a
|
|
16
22
|
// (verifyingContract, callFunction, sharerArgData) tuple, this function
|
|
17
|
-
// creates an AllowanceVoucher.
|
|
23
|
+
// creates an AllowanceVoucher. The warning is always SESSION_KEY_WARNING.
|
|
18
24
|
export async function createAllowanceVoucher(incoLiteAddress, sharerWalletClient, verifyingContract, callFunction, sharerArgData) {
|
|
19
25
|
const verifier = await getIncoVerifier(incoLiteAddress, sharerWalletClient);
|
|
20
26
|
// The session nonce in the AllowanceVoucher must match the current active
|
|
@@ -27,9 +33,11 @@ export async function createAllowanceVoucher(incoLiteAddress, sharerWalletClient
|
|
|
27
33
|
verifyingContract,
|
|
28
34
|
callFunction,
|
|
29
35
|
sharerArgData,
|
|
36
|
+
warning: SESSION_KEY_WARNING,
|
|
30
37
|
};
|
|
31
38
|
}
|
|
32
|
-
// Let the sharer grant a session to the requester.
|
|
39
|
+
// Let the sharer grant a session key to the requester.
|
|
40
|
+
// The session grants temporary access to ALL of the sharer's encrypted handles.
|
|
33
41
|
export async function grantSessionKey({ chainId, incoLiteAddress, sessionVerifierContractAddress, granteeAddress, sharerWalletClient, expiresAt, }) {
|
|
34
42
|
// Validate that expiresAt is a valid Date object
|
|
35
43
|
if (!(expiresAt instanceof Date) || isNaN(expiresAt.getTime())) {
|
|
@@ -41,13 +49,9 @@ export async function grantSessionKey({ chainId, incoLiteAddress, sessionVerifie
|
|
|
41
49
|
if (expiresAtMs < nowMs) {
|
|
42
50
|
throw new Error('expiresAt must be in the future');
|
|
43
51
|
}
|
|
44
|
-
const session = {
|
|
45
|
-
decrypter: granteeAddress,
|
|
46
|
-
expiresAt: BigInt(Math.floor(expiresAtMs / 1000)),
|
|
47
|
-
};
|
|
48
52
|
const sharerArgData = encodeAbiParameters(getSessionAbi(), [
|
|
49
|
-
|
|
50
|
-
|
|
53
|
+
granteeAddress,
|
|
54
|
+
BigInt(Math.floor(expiresAtMs / 1000)),
|
|
51
55
|
]);
|
|
52
56
|
const incoVerifier = await getIncoVerifier(incoLiteAddress, sharerWalletClient);
|
|
53
57
|
// returned by read.eip712Domain():
|
|
@@ -180,6 +184,7 @@ export async function sessionKeyAttestedCompute({ lhsHandle, op, rhsPlaintext, b
|
|
|
180
184
|
verifyingContract: allowanceVoucherWithSig.voucher.verifyingContract,
|
|
181
185
|
callFunction: hexToBytes(allowanceVoucherWithSig.voucher.callFunction),
|
|
182
186
|
sharerArgData: hexToBytes(allowanceVoucherWithSig.voucher.sharerArgData),
|
|
187
|
+
warning: allowanceVoucherWithSig.voucher.warning,
|
|
183
188
|
}),
|
|
184
189
|
voucherSignature: hexToBytes(allowanceVoucherWithSig.voucherSignature),
|
|
185
190
|
// For DefaultSessionVerifier, the requesterArgData is empty.
|
|
@@ -270,6 +275,7 @@ export async function sessionKeyAttestedDecrypt({ chainId, kmsQuorumClient, hand
|
|
|
270
275
|
verifyingContract: allowanceVoucherWithSig.voucher.verifyingContract,
|
|
271
276
|
callFunction: hexToBytes(allowanceVoucherWithSig.voucher.callFunction),
|
|
272
277
|
sharerArgData: hexToBytes(allowanceVoucherWithSig.voucher.sharerArgData),
|
|
278
|
+
warning: allowanceVoucherWithSig.voucher.warning,
|
|
273
279
|
}),
|
|
274
280
|
voucherSignature: hexToBytes(allowanceVoucherWithSig.voucherSignature),
|
|
275
281
|
// For DefaultSessionVerifier, the requesterArgData is empty.
|
|
@@ -358,4 +364,4 @@ async function getIncoVerifier(incoLiteAddress, walletClient) {
|
|
|
358
364
|
client: walletClient,
|
|
359
365
|
});
|
|
360
366
|
}
|
|
361
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Vzc2lvbi1rZXkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYWR2YW5jZWRhY2wvc2Vzc2lvbi1rZXkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzVDLE9BQU8sRUFHTCxVQUFVLEVBRVYsbUJBQW1CLEVBQ25CLFdBQVcsRUFFWCxVQUFVLEVBRVYsa0JBQWtCLEdBR25CLE1BQU0sTUFBTSxDQUFDO0FBV2QsT0FBTyxFQUNMLFlBQVksRUFDWix3QkFBd0IsRUFDeEIsZ0JBQWdCLEVBQ2hCLGtCQUFrQixHQUNuQixNQUFNLGdDQUFnQyxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNoRSxPQUFPLEVBQUUsZUFBZSxFQUFhLE1BQU0sYUFBYSxDQUFDO0FBTXpELE9BQU8sRUFDTCw0QkFBNEIsRUFDNUIsNEJBQTRCLEdBQzdCLE1BQU0sa0JBQWtCLENBQUM7QUFDMUIsT0FBTyxFQUFFLHdCQUF3QixFQUFxQixNQUFNLGtCQUFrQixDQUFDO0FBQy9FLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBSS9ELE9BQU8sRUFDTCxvQkFBb0IsR0FFckIsTUFBTSw2QkFBNkIsQ0FBQztBQUNyQyxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUN0RixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNuRSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUMvRCxPQUFPLEVBQ0wsNEJBQTRCLEVBQzVCLDRCQUE0QixHQUM3QixNQUFNLG9EQUFvRCxDQUFDO0FBQzVELE9BQU8sRUFDTCxvQkFBb0IsRUFDcEIsc0JBQXNCLEVBQ3RCLHFCQUFxQixFQUNyQiw4QkFBOEIsR0FDL0IsTUFBTSw4Q0FBOEMsQ0FBQztB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
|
|
367
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Vzc2lvbi1rZXkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYWR2YW5jZWRhY2wvc2Vzc2lvbi1rZXkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzVDLE9BQU8sRUFHTCxVQUFVLEVBRVYsbUJBQW1CLEVBQ25CLFdBQVcsRUFFWCxVQUFVLEVBRVYsa0JBQWtCLEdBR25CLE1BQU0sTUFBTSxDQUFDO0FBV2QsT0FBTyxFQUNMLFlBQVksRUFDWix3QkFBd0IsRUFDeEIsZ0JBQWdCLEVBQ2hCLGtCQUFrQixHQUNuQixNQUFNLGdDQUFnQyxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNoRSxPQUFPLEVBQUUsZUFBZSxFQUFhLE1BQU0sYUFBYSxDQUFDO0FBTXpELE9BQU8sRUFDTCw0QkFBNEIsRUFDNUIsNEJBQTRCLEdBQzdCLE1BQU0sa0JBQWtCLENBQUM7QUFDMUIsT0FBTyxFQUFFLHdCQUF3QixFQUFxQixNQUFNLGtCQUFrQixDQUFDO0FBQy9FLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBSS9ELE9BQU8sRUFDTCxvQkFBb0IsR0FFckIsTUFBTSw2QkFBNkIsQ0FBQztBQUNyQyxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUN0RixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNuRSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUMvRCxPQUFPLEVBQ0wsNEJBQTRCLEVBQzVCLDRCQUE0QixHQUM3QixNQUFNLG9EQUFvRCxDQUFDO0FBQzVELE9BQU8sRUFDTCxvQkFBb0IsRUFDcEIsc0JBQXNCLEVBQ3RCLHFCQUFxQixFQUNyQiw4QkFBOEIsR0FDL0IsTUFBTSw4Q0FBOEMsQ0FBQztB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
|
|
@@ -2,7 +2,7 @@ import type { Account, Chain, Transport, WalletClient } from 'viem';
|
|
|
2
2
|
import { DecryptionAttestation, EncryptedDecryptionAttestation } from '../attesteddecrypt/types.js';
|
|
3
3
|
import { HexString } from '../binary.js';
|
|
4
4
|
import { SupportedChainId } from '../chain.js';
|
|
5
|
-
import type { EncryptionScheme,
|
|
5
|
+
import type { EncryptionScheme, SupportedTeeType } from '../encryption/encryption.js';
|
|
6
6
|
import { KmsQuorumClient } from '../kms/quorumClient.js';
|
|
7
7
|
import { type XwingKeypair } from '../lite/xwing.js';
|
|
8
8
|
import type { BackoffConfig } from '../retry.js';
|
|
@@ -27,7 +27,7 @@ export interface IncoLiteAttestedComputeArgs {
|
|
|
27
27
|
*
|
|
28
28
|
* @todo Support multiple operations in a single request.
|
|
29
29
|
*/
|
|
30
|
-
export declare function attestedCompute<T extends
|
|
30
|
+
export declare function attestedCompute<T extends SupportedTeeType>({ executorAddress, lhsHandle, op, rhsPlaintext, backoffConfig, walletClient, kmsQuorumClient, chainId, reencryptPubKey, reencryptKeypair, }: {
|
|
31
31
|
executorAddress: HexString;
|
|
32
32
|
lhsHandle: HexString;
|
|
33
33
|
op: AttestedComputeOP;
|
|
@@ -39,7 +39,7 @@ export declare function attestedCompute<T extends SupportedFheType>({ executorAd
|
|
|
39
39
|
reencryptPubKey: Uint8Array;
|
|
40
40
|
reencryptKeypair: XwingKeypair;
|
|
41
41
|
}): Promise<DecryptionAttestation<EncryptionScheme, T>>;
|
|
42
|
-
export declare function attestedCompute<T extends
|
|
42
|
+
export declare function attestedCompute<T extends SupportedTeeType>({ executorAddress, lhsHandle, op, rhsPlaintext, backoffConfig, walletClient, kmsQuorumClient, chainId, reencryptPubKey, }: {
|
|
43
43
|
executorAddress: HexString;
|
|
44
44
|
lhsHandle: HexString;
|
|
45
45
|
op: AttestedComputeOP;
|
|
@@ -51,7 +51,7 @@ export declare function attestedCompute<T extends SupportedFheType>({ executorAd
|
|
|
51
51
|
reencryptPubKey: Uint8Array;
|
|
52
52
|
reencryptKeypair?: never;
|
|
53
53
|
}): Promise<EncryptedDecryptionAttestation<EncryptionScheme, T>>;
|
|
54
|
-
export declare function attestedCompute<T extends
|
|
54
|
+
export declare function attestedCompute<T extends SupportedTeeType>({ executorAddress, lhsHandle, op, rhsPlaintext, backoffConfig, walletClient, kmsQuorumClient, chainId, }: {
|
|
55
55
|
executorAddress: HexString;
|
|
56
56
|
lhsHandle: HexString;
|
|
57
57
|
op: AttestedComputeOP;
|
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
import type { DecryptionAttestation } from '../attesteddecrypt/types.js';
|
|
2
2
|
import { HexString } from '../binary.js';
|
|
3
|
-
import { EncryptionScheme,
|
|
3
|
+
import { EncryptionScheme, SupportedTeeType } from '../encryption/encryption.js';
|
|
4
4
|
import { SupportedScalarBinaryOp } from '../generated/es/inco/kms/lite/v1/types_pb.js';
|
|
5
5
|
import type { BackoffConfig } from '../retry.js';
|
|
6
6
|
/**
|
|
7
7
|
* Supported attested compute operations.
|
|
8
8
|
*/
|
|
9
9
|
export declare const AttestedComputeSupportedOps: {
|
|
10
|
-
readonly Eq: SupportedScalarBinaryOp.
|
|
11
|
-
readonly Ne: SupportedScalarBinaryOp.
|
|
12
|
-
readonly Ge: SupportedScalarBinaryOp.
|
|
13
|
-
readonly Gt: SupportedScalarBinaryOp.
|
|
14
|
-
readonly Le: SupportedScalarBinaryOp.
|
|
15
|
-
readonly Lt: SupportedScalarBinaryOp.
|
|
10
|
+
readonly Eq: SupportedScalarBinaryOp.TEE_EQ;
|
|
11
|
+
readonly Ne: SupportedScalarBinaryOp.TEE_NE;
|
|
12
|
+
readonly Ge: SupportedScalarBinaryOp.TEE_GE;
|
|
13
|
+
readonly Gt: SupportedScalarBinaryOp.TEE_GT;
|
|
14
|
+
readonly Le: SupportedScalarBinaryOp.TEE_LE;
|
|
15
|
+
readonly Lt: SupportedScalarBinaryOp.TEE_LT;
|
|
16
16
|
};
|
|
17
17
|
/**
|
|
18
18
|
* This type represents all the supported operations for attested compute.
|
|
@@ -25,8 +25,8 @@ export declare class AttestedComputeError extends Error {
|
|
|
25
25
|
readonly cause?: unknown | undefined;
|
|
26
26
|
constructor(message: string, cause?: unknown | undefined);
|
|
27
27
|
}
|
|
28
|
-
export type AttestedCompute<S extends EncryptionScheme> = <T extends
|
|
29
|
-
export type AttestedComputeFnArgs<S extends EncryptionScheme, T extends
|
|
28
|
+
export type AttestedCompute<S extends EncryptionScheme> = <T extends SupportedTeeType>(args: AttestedComputeFnArgs<S, T>) => Promise<DecryptionAttestation<S, T>>;
|
|
29
|
+
export type AttestedComputeFnArgs<S extends EncryptionScheme, T extends SupportedTeeType> = {
|
|
30
30
|
/** The handle to compute on */
|
|
31
31
|
lhsHandle: HexString;
|
|
32
32
|
op: AttestedComputeOP;
|
|
@@ -4,28 +4,28 @@ import { SupportedScalarBinaryOp } from '../generated/es/inco/kms/lite/v1/types_
|
|
|
4
4
|
*/
|
|
5
5
|
export const AttestedComputeSupportedOps = {
|
|
6
6
|
/*
|
|
7
|
-
Add: SupportedScalarBinaryOp.
|
|
8
|
-
Sub: SupportedScalarBinaryOp.
|
|
9
|
-
Mul: SupportedScalarBinaryOp.
|
|
10
|
-
Div: SupportedScalarBinaryOp.
|
|
11
|
-
Rem: SupportedScalarBinaryOp.
|
|
12
|
-
BitAnd: SupportedScalarBinaryOp.
|
|
13
|
-
BitOr: SupportedScalarBinaryOp.
|
|
14
|
-
BitXor: SupportedScalarBinaryOp.
|
|
15
|
-
Shl: SupportedScalarBinaryOp.
|
|
16
|
-
Shr: SupportedScalarBinaryOp.
|
|
17
|
-
Rotl: SupportedScalarBinaryOp.
|
|
18
|
-
Rotr: SupportedScalarBinaryOp.
|
|
7
|
+
Add: SupportedScalarBinaryOp.TEE_ADD,
|
|
8
|
+
Sub: SupportedScalarBinaryOp.TEE_SUB,
|
|
9
|
+
Mul: SupportedScalarBinaryOp.TEE_MUL,
|
|
10
|
+
Div: SupportedScalarBinaryOp.TEE_DIV,
|
|
11
|
+
Rem: SupportedScalarBinaryOp.TEE_REM,
|
|
12
|
+
BitAnd: SupportedScalarBinaryOp.TEE_BIT_AND,
|
|
13
|
+
BitOr: SupportedScalarBinaryOp.TEE_BIT_OR,
|
|
14
|
+
BitXor: SupportedScalarBinaryOp.TEE_BIT_XOR,
|
|
15
|
+
Shl: SupportedScalarBinaryOp.TEE_SHL,
|
|
16
|
+
Shr: SupportedScalarBinaryOp.TEE_SHR,
|
|
17
|
+
Rotl: SupportedScalarBinaryOp.TEE_ROTL,
|
|
18
|
+
Rotr: SupportedScalarBinaryOp.TEE_ROTR,
|
|
19
19
|
*/
|
|
20
|
-
Eq: SupportedScalarBinaryOp.
|
|
21
|
-
Ne: SupportedScalarBinaryOp.
|
|
22
|
-
Ge: SupportedScalarBinaryOp.
|
|
23
|
-
Gt: SupportedScalarBinaryOp.
|
|
24
|
-
Le: SupportedScalarBinaryOp.
|
|
25
|
-
Lt: SupportedScalarBinaryOp.
|
|
20
|
+
Eq: SupportedScalarBinaryOp.TEE_EQ,
|
|
21
|
+
Ne: SupportedScalarBinaryOp.TEE_NE,
|
|
22
|
+
Ge: SupportedScalarBinaryOp.TEE_GE,
|
|
23
|
+
Gt: SupportedScalarBinaryOp.TEE_GT,
|
|
24
|
+
Le: SupportedScalarBinaryOp.TEE_LE,
|
|
25
|
+
Lt: SupportedScalarBinaryOp.TEE_LT,
|
|
26
26
|
/*
|
|
27
|
-
Min: SupportedScalarBinaryOp.
|
|
28
|
-
Max: SupportedScalarBinaryOp.
|
|
27
|
+
Min: SupportedScalarBinaryOp.TEE_MIN,
|
|
28
|
+
Max: SupportedScalarBinaryOp.TEE_MAX,
|
|
29
29
|
*/
|
|
30
30
|
};
|
|
31
31
|
/**
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { Account, Chain, Transport, WalletClient } from 'viem';
|
|
2
2
|
import { type HexString } from '../binary.js';
|
|
3
3
|
import { type SupportedChainId } from '../chain.js';
|
|
4
|
-
import { EncryptionScheme, type
|
|
4
|
+
import { EncryptionScheme, type SupportedTeeType } from '../encryption/encryption.js';
|
|
5
5
|
import { type HandleWithProof } from '../generated/es/inco/kms/lite/v1/types_pb.js';
|
|
6
6
|
import { validateHandle } from '../handle.js';
|
|
7
7
|
import { KmsQuorumClient } from '../kms/quorumClient.js';
|
|
@@ -38,7 +38,7 @@ export declare function attestedDecrypt({ handles, backoffConfig, walletClient,
|
|
|
38
38
|
reencryptKeypair: XwingKeypair;
|
|
39
39
|
kmsQuorumClient: KmsQuorumClient;
|
|
40
40
|
executorAddress: HexString;
|
|
41
|
-
}): Promise<Array<DecryptionAttestation<EncryptionScheme,
|
|
41
|
+
}): Promise<Array<DecryptionAttestation<EncryptionScheme, SupportedTeeType>>>;
|
|
42
42
|
/**
|
|
43
43
|
* Decrypt multiple handles in a single attested request.
|
|
44
44
|
* Returns an array of attestations aligned with the response ordering.
|
|
@@ -56,6 +56,6 @@ export declare function attestedDecrypt({ handles, backoffConfig, walletClient,
|
|
|
56
56
|
reencryptKeypair?: never;
|
|
57
57
|
kmsQuorumClient: KmsQuorumClient;
|
|
58
58
|
executorAddress: HexString;
|
|
59
|
-
}): Promise<Array<EncryptedDecryptionAttestation<EncryptionScheme,
|
|
59
|
+
}): Promise<Array<EncryptedDecryptionAttestation<EncryptionScheme, SupportedTeeType>>>;
|
|
60
60
|
export declare function buildHandlesWithProofs(handles: HexString[]): Array<HandleWithProof>;
|
|
61
|
-
export declare function decryptEncryptedAttestations(attestations: Array<DecryptionAttestation<EncryptionScheme,
|
|
61
|
+
export declare function decryptEncryptedAttestations(attestations: Array<DecryptionAttestation<EncryptionScheme, SupportedTeeType> | EncryptedDecryptionAttestation<EncryptionScheme, SupportedTeeType>>, reencryptKeypair: XwingKeypair): Promise<Array<DecryptionAttestation<EncryptionScheme, SupportedTeeType>>>;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { HexString } from '../binary.js';
|
|
2
|
-
import type { EncryptionScheme, EncryptResultOf, PlaintextOf,
|
|
2
|
+
import type { EncryptionScheme, EncryptResultOf, PlaintextOf, SupportedTeeType } from '../encryption/encryption.js';
|
|
3
3
|
import type { BackoffConfig } from '../retry.js';
|
|
4
4
|
/**
|
|
5
5
|
* Custom error class for attested decrypt operations.
|
|
@@ -8,19 +8,19 @@ export declare class AttestedDecryptError extends Error {
|
|
|
8
8
|
readonly cause?: unknown | undefined;
|
|
9
9
|
constructor(message: string, cause?: unknown | undefined);
|
|
10
10
|
}
|
|
11
|
-
export type DecryptionAttestation<S extends EncryptionScheme, T extends
|
|
11
|
+
export type DecryptionAttestation<S extends EncryptionScheme, T extends SupportedTeeType> = {
|
|
12
12
|
handle: HexString;
|
|
13
13
|
plaintext: PlaintextOf<S, T>;
|
|
14
14
|
covalidatorSignatures: Uint8Array[];
|
|
15
15
|
};
|
|
16
|
-
export type EncryptedDecryptionAttestation<S extends EncryptionScheme, T extends
|
|
16
|
+
export type EncryptedDecryptionAttestation<S extends EncryptionScheme, T extends SupportedTeeType> = {
|
|
17
17
|
handle: HexString;
|
|
18
18
|
encryptedPlaintext: EncryptResultOf<S, T>;
|
|
19
19
|
encryptedSignatures: Uint8Array[];
|
|
20
20
|
covalidatorSignatures: Uint8Array[];
|
|
21
21
|
};
|
|
22
|
-
export type AttestedDecryptor<S extends EncryptionScheme> = <T extends
|
|
23
|
-
export type AttestedDecryptFnArgs<S extends EncryptionScheme, T extends
|
|
22
|
+
export type AttestedDecryptor<S extends EncryptionScheme> = <T extends SupportedTeeType>(args: AttestedDecryptFnArgs<S, T>) => Promise<DecryptionAttestation<S, T>>;
|
|
23
|
+
export type AttestedDecryptFnArgs<S extends EncryptionScheme, T extends SupportedTeeType> = {
|
|
24
24
|
/** The handle to decrypt */
|
|
25
25
|
handle: HexString;
|
|
26
26
|
backoffConfig?: Partial<BackoffConfig>;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { Chain, PublicClient, Transport } from 'viem';
|
|
2
2
|
import type { DecryptionAttestation } from '../attesteddecrypt/types.js';
|
|
3
3
|
import type { HexString } from '../binary.js';
|
|
4
|
-
import type { EncryptionScheme,
|
|
4
|
+
import type { EncryptionScheme, SupportedTeeType } from '../encryption/encryption.js';
|
|
5
5
|
import type { KmsQuorumClient } from '../kms/quorumClient.js';
|
|
6
6
|
import type { BackoffConfig } from '../retry.js';
|
|
7
7
|
/**
|
|
@@ -18,4 +18,4 @@ export declare function attestedReveal({ handles, kmsQuorumClient, executorAddre
|
|
|
18
18
|
executorAddress: HexString;
|
|
19
19
|
publicClient: PublicClient<Transport, Chain>;
|
|
20
20
|
backoffConfig?: Partial<BackoffConfig> | undefined;
|
|
21
|
-
}): Promise<Array<DecryptionAttestation<EncryptionScheme,
|
|
21
|
+
}): Promise<Array<DecryptionAttestation<EncryptionScheme, SupportedTeeType>>>;
|
|
@@ -2,7 +2,7 @@ import type { Account, Chain, Transport, WalletClient } from 'viem';
|
|
|
2
2
|
import { validateHandle } from '../attesteddecrypt/attested-decrypt.js';
|
|
3
3
|
import { type HexString } from '../binary.js';
|
|
4
4
|
import { type SupportedChainId } from '../chain.js';
|
|
5
|
-
import { type EncryptionScheme, type
|
|
5
|
+
import { type EncryptionScheme, type SupportedTeeType } from '../encryption/encryption.js';
|
|
6
6
|
import { KmsQuorumClient } from '../kms/quorumClient.js';
|
|
7
7
|
import type { XwingKeypair } from '../lite/xwing.js';
|
|
8
8
|
import type { BackoffConfig } from '../retry.js';
|
|
@@ -17,7 +17,7 @@ export declare function eListAttestedDecrypt({ handle, backoffConfig, walletClie
|
|
|
17
17
|
reencryptKeypair: XwingKeypair;
|
|
18
18
|
kmsQuorumClient: KmsQuorumClient;
|
|
19
19
|
executorAddress: HexString;
|
|
20
|
-
}): Promise<EListDecryptionAttestation<EncryptionScheme,
|
|
20
|
+
}): Promise<EListDecryptionAttestation<EncryptionScheme, SupportedTeeType>>;
|
|
21
21
|
export declare function eListAttestedDecrypt({ handle, backoffConfig, walletClient, chainId, reencryptPubKey, kmsQuorumClient, executorAddress, }: {
|
|
22
22
|
handle: HexString;
|
|
23
23
|
backoffConfig?: Partial<BackoffConfig> | undefined;
|
|
@@ -27,7 +27,7 @@ export declare function eListAttestedDecrypt({ handle, backoffConfig, walletClie
|
|
|
27
27
|
reencryptKeypair?: never;
|
|
28
28
|
kmsQuorumClient: KmsQuorumClient;
|
|
29
29
|
executorAddress: HexString;
|
|
30
|
-
}): Promise<EncryptedEListDecryptionAttestation<EncryptionScheme,
|
|
30
|
+
}): Promise<EncryptedEListDecryptionAttestation<EncryptionScheme, SupportedTeeType>>;
|
|
31
31
|
export declare function eListAttestedDecrypt({ handle, backoffConfig, walletClient, chainId, kmsQuorumClient, executorAddress, }: {
|
|
32
32
|
handle: HexString;
|
|
33
33
|
backoffConfig?: Partial<BackoffConfig> | undefined;
|
|
@@ -37,7 +37,7 @@ export declare function eListAttestedDecrypt({ handle, backoffConfig, walletClie
|
|
|
37
37
|
reencryptKeypair?: never;
|
|
38
38
|
kmsQuorumClient: KmsQuorumClient;
|
|
39
39
|
executorAddress: HexString;
|
|
40
|
-
}): Promise<EListDecryptionAttestation<EncryptionScheme,
|
|
40
|
+
}): Promise<EListDecryptionAttestation<EncryptionScheme, SupportedTeeType>>;
|
|
41
41
|
/**
|
|
42
42
|
* Reveal a single elist handle without wallet authentication.
|
|
43
43
|
* Returns plaintext values along with an attestation of the checksum.
|
|
@@ -46,4 +46,4 @@ export declare function eListAttestedReveal({ handle, backoffConfig, kmsQuorumCl
|
|
|
46
46
|
handle: HexString;
|
|
47
47
|
backoffConfig?: Partial<BackoffConfig> | undefined;
|
|
48
48
|
kmsQuorumClient: KmsQuorumClient;
|
|
49
|
-
}): Promise<EListDecryptionAttestation<EncryptionScheme,
|
|
49
|
+
}): Promise<EListDecryptionAttestation<EncryptionScheme, SupportedTeeType>>;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { HexString } from '../binary.js';
|
|
2
|
-
import type { EncryptionScheme, EncryptResultOf, PlaintextOf,
|
|
2
|
+
import type { EncryptionScheme, EncryptResultOf, PlaintextOf, SupportedTeeType } from '../encryption/encryption.js';
|
|
3
3
|
import { handleTypes } from '../index.js';
|
|
4
4
|
import type { BackoffConfig } from '../retry.js';
|
|
5
5
|
/**
|
|
@@ -9,22 +9,22 @@ export declare class EListAttestedDecryptError extends Error {
|
|
|
9
9
|
readonly cause?: unknown | undefined;
|
|
10
10
|
constructor(message: string, cause?: unknown | undefined);
|
|
11
11
|
}
|
|
12
|
-
export type EListDecryptionAttestation<S extends EncryptionScheme, T extends
|
|
12
|
+
export type EListDecryptionAttestation<S extends EncryptionScheme, T extends SupportedTeeType> = {
|
|
13
13
|
handle: HexString;
|
|
14
14
|
commitmentProof: PlaintextOf<S, typeof handleTypes.euint256>;
|
|
15
15
|
values: PlaintextOf<S, T>[];
|
|
16
16
|
covalidatorSignatures: Uint8Array[];
|
|
17
17
|
commitments: Uint8Array[];
|
|
18
18
|
};
|
|
19
|
-
export type EncryptedEListDecryptionAttestation<S extends EncryptionScheme, T extends
|
|
19
|
+
export type EncryptedEListDecryptionAttestation<S extends EncryptionScheme, T extends SupportedTeeType> = {
|
|
20
20
|
handle: HexString;
|
|
21
21
|
commitmentProof: PlaintextOf<S, typeof handleTypes.euint256>;
|
|
22
22
|
values: EncryptResultOf<S, T>[];
|
|
23
23
|
covalidatorSignatures: Uint8Array[];
|
|
24
24
|
commitments: Uint8Array[];
|
|
25
25
|
};
|
|
26
|
-
export type EListAttestedDecryptor<S extends EncryptionScheme> = <T extends
|
|
27
|
-
export type EListAttestedDecryptFnArgs<S extends EncryptionScheme, T extends
|
|
26
|
+
export type EListAttestedDecryptor<S extends EncryptionScheme> = <T extends SupportedTeeType>(args: EListAttestedDecryptFnArgs<S, T>) => Promise<EListDecryptionAttestation<S, T>>;
|
|
27
|
+
export type EListAttestedDecryptFnArgs<S extends EncryptionScheme, T extends SupportedTeeType> = {
|
|
28
28
|
/** The handle to decrypt */
|
|
29
29
|
handle: HexString;
|
|
30
30
|
backoffConfig?: Partial<BackoffConfig>;
|
|
@@ -11,7 +11,7 @@ import { Bytes32 } from '../binary.js';
|
|
|
11
11
|
* // result.handle, result.ciphertext
|
|
12
12
|
* ```
|
|
13
13
|
*/
|
|
14
|
-
export type Encryptor<S extends EncryptionScheme = EncryptionScheme> = <T extends
|
|
14
|
+
export type Encryptor<S extends EncryptionScheme = EncryptionScheme> = <T extends SupportedTeeType>(plaintext: PlaintextWithContextOf<S, T>) => Promise<EncryptResultOf<S, T>>;
|
|
15
15
|
/**
|
|
16
16
|
* A function that decrypts a ciphertext back to its plaintext value.
|
|
17
17
|
*
|
|
@@ -21,26 +21,26 @@ export type Encryptor<S extends EncryptionScheme = EncryptionScheme> = <T extend
|
|
|
21
21
|
* const plaintext = await decrypt({ scheme: 2, type: 5, value: '0x...' });
|
|
22
22
|
* ```
|
|
23
23
|
*/
|
|
24
|
-
export type Decryptor<S extends EncryptionScheme = EncryptionScheme> = <T extends
|
|
24
|
+
export type Decryptor<S extends EncryptionScheme = EncryptionScheme> = <T extends SupportedTeeType>(ciphertext: CiphertextOf<S, T>) => Promise<PlaintextOf<S, T>>;
|
|
25
25
|
/**
|
|
26
26
|
* Subset of ENCRYPTION types currently supported for encryption/decryption.
|
|
27
27
|
*
|
|
28
28
|
* @remarks TODO: review need of `euint64` and `euint160` — `Lib.sol` only supports `euint256` and `ebool`.
|
|
29
29
|
*/
|
|
30
|
-
export declare const
|
|
30
|
+
export declare const supportedTeeTypes: {
|
|
31
31
|
readonly euint64: 5;
|
|
32
32
|
readonly euint160: 7;
|
|
33
33
|
readonly euint256: 8;
|
|
34
34
|
readonly ebool: 0;
|
|
35
35
|
};
|
|
36
36
|
/** Schema that validates a string is one of the supported ENCRYPTION type names. */
|
|
37
|
-
export declare const
|
|
37
|
+
export declare const SupportedTeeTypeName: Schema.SchemaClass<"ebool" | "euint64" | "euint160" | "euint256", "ebool" | "euint64" | "euint160" | "euint256", never>;
|
|
38
38
|
/** A supported ENCRYPTION type name (e.g. `"euint256"`, `"ebool"`). */
|
|
39
|
-
export type
|
|
39
|
+
export type SupportedTeeTypeName = typeof SupportedTeeTypeName.Type;
|
|
40
40
|
/** Schema that validates a number is one of the supported ENCRYPTION type integer identifiers. */
|
|
41
|
-
export declare const
|
|
41
|
+
export declare const SupportedTeeType: Schema.SchemaClass<0 | 5 | 7 | 8, 0 | 5 | 7 | 8, never>;
|
|
42
42
|
/** Integer identifier of a supported ENCRYPTION type (a subset of all ENCRYPTION types). */
|
|
43
|
-
export type
|
|
43
|
+
export type SupportedTeeType = typeof SupportedTeeType.Type;
|
|
44
44
|
/** Map of encryption scheme names to their integer identifiers. Currently only X-Wing (2) is supported. */
|
|
45
45
|
export declare const encryptionSchemes: {
|
|
46
46
|
readonly xwing: 2;
|
|
@@ -60,7 +60,7 @@ export type XwingScheme = EncryptionSchemes['xwing'];
|
|
|
60
60
|
export declare const EncryptionScheme: Schema.Literal<[2]>;
|
|
61
61
|
/** An encryption scheme identifier (currently only X-Wing = `2`). */
|
|
62
62
|
export type EncryptionScheme = typeof EncryptionScheme.Type;
|
|
63
|
-
type DistType<P, S extends EncryptionScheme, T extends
|
|
63
|
+
type DistType<P, S extends EncryptionScheme, T extends SupportedTeeType> = P extends any ? P & {
|
|
64
64
|
scheme: S;
|
|
65
65
|
type: T;
|
|
66
66
|
} : never;
|
|
@@ -72,7 +72,7 @@ export declare const Ciphertext: Schema.Struct<{
|
|
|
72
72
|
}>;
|
|
73
73
|
/** An ENCRYPTION ciphertext containing the encryption scheme, ENCRYPTION type, and encrypted hex value. */
|
|
74
74
|
export type Ciphertext = typeof Ciphertext.Type;
|
|
75
|
-
export type CiphertextOf<S extends EncryptionScheme, T extends
|
|
75
|
+
export type CiphertextOf<S extends EncryptionScheme, T extends SupportedTeeType> = DistType<Ciphertext, S, T>;
|
|
76
76
|
/** Schema for a ciphertext paired with the {@link InputContext} it was encrypted under. */
|
|
77
77
|
export declare const CiphertextWithContext: Schema.Struct<{
|
|
78
78
|
ciphertext: Schema.Struct<{
|
|
@@ -86,11 +86,12 @@ export declare const CiphertextWithContext: Schema.Struct<{
|
|
|
86
86
|
userAddress: Schema.TemplateLiteral<`0x${string}`>;
|
|
87
87
|
contractAddress: Schema.TemplateLiteral<`0x${string}`>;
|
|
88
88
|
version: typeof Schema.Number;
|
|
89
|
+
inputType: typeof Schema.Number;
|
|
89
90
|
}>;
|
|
90
91
|
}>;
|
|
91
92
|
/** A ciphertext paired with the {@link InputContext} it was encrypted under. */
|
|
92
93
|
export type CiphertextWithContext = typeof CiphertextWithContext.Type;
|
|
93
|
-
export type CiphertextWithContextOf<S extends EncryptionScheme, T extends
|
|
94
|
+
export type CiphertextWithContextOf<S extends EncryptionScheme, T extends SupportedTeeType> = CiphertextWithContext & {
|
|
94
95
|
ciphertext: CiphertextOf<S, T>;
|
|
95
96
|
};
|
|
96
97
|
/** Schema for the result of an encryption operation: ciphertext, input context, and final handle. */
|
|
@@ -106,12 +107,13 @@ export declare const EncryptResult: Schema.Struct<{
|
|
|
106
107
|
userAddress: Schema.TemplateLiteral<`0x${string}`>;
|
|
107
108
|
contractAddress: Schema.TemplateLiteral<`0x${string}`>;
|
|
108
109
|
version: typeof Schema.Number;
|
|
110
|
+
inputType: typeof Schema.Number;
|
|
109
111
|
}>;
|
|
110
112
|
handle: Schema.brand<Schema.filter<Schema.transformOrFail<Schema.Union<[typeof Schema.String, Schema.refine<object & Uint8Array<ArrayBufferLike>, Schema.Schema<object, object, never>>]>, Schema.TemplateLiteral<`0x${string}`>, never>>, "Bytes32">;
|
|
111
113
|
}>;
|
|
112
114
|
/** The result of an encryption operation, containing the ciphertext, context, and deterministic handle. */
|
|
113
115
|
export type EncryptResult = typeof EncryptResult.Type;
|
|
114
|
-
export type EncryptResultOf<S extends EncryptionScheme, T extends
|
|
116
|
+
export type EncryptResultOf<S extends EncryptionScheme, T extends SupportedTeeType> = EncryptResult & {
|
|
115
117
|
ciphertext: CiphertextOf<S, T>;
|
|
116
118
|
};
|
|
117
119
|
/**
|
|
@@ -130,7 +132,7 @@ export declare const Plaintext: Schema.Union<[Schema.Struct<{
|
|
|
130
132
|
}>]>;
|
|
131
133
|
/** An ENCRYPTION plaintext value — `bigint` for integer types, `boolean` for `ebool`. */
|
|
132
134
|
export type Plaintext = typeof Plaintext.Type;
|
|
133
|
-
export type PlaintextOf<S extends EncryptionScheme, T extends
|
|
135
|
+
export type PlaintextOf<S extends EncryptionScheme, T extends SupportedTeeType> = DistType<Plaintext, S, T>;
|
|
134
136
|
/** Schema for a plaintext paired with the {@link InputContext} it will be encrypted under. */
|
|
135
137
|
export declare const PlaintextWithContext: Schema.Struct<{
|
|
136
138
|
plaintext: Schema.Union<[Schema.Struct<{
|
|
@@ -148,11 +150,12 @@ export declare const PlaintextWithContext: Schema.Struct<{
|
|
|
148
150
|
userAddress: Schema.TemplateLiteral<`0x${string}`>;
|
|
149
151
|
contractAddress: Schema.TemplateLiteral<`0x${string}`>;
|
|
150
152
|
version: typeof Schema.Number;
|
|
153
|
+
inputType: typeof Schema.Number;
|
|
151
154
|
}>;
|
|
152
155
|
}>;
|
|
153
156
|
/** A plaintext paired with the {@link InputContext} it will be encrypted under. */
|
|
154
157
|
export type PlaintextWithContext = typeof PlaintextWithContext.Type;
|
|
155
|
-
export type PlaintextWithContextOf<S extends EncryptionScheme, T extends
|
|
158
|
+
export type PlaintextWithContextOf<S extends EncryptionScheme, T extends SupportedTeeType> = PlaintextWithContext & {
|
|
156
159
|
plaintext: PlaintextOf<S, T>;
|
|
157
160
|
};
|
|
158
161
|
/**
|
|
@@ -167,7 +170,7 @@ export type PlaintextWithContextOf<S extends EncryptionScheme, T extends Support
|
|
|
167
170
|
* @returns A typed `Plaintext` matching the given scheme and ENCRYPTION type.
|
|
168
171
|
* @throws If `type` is not a supported ENCRYPTION type.
|
|
169
172
|
*/
|
|
170
|
-
export declare function bigintToPlaintext<S extends EncryptionScheme, T extends
|
|
173
|
+
export declare function bigintToPlaintext<S extends EncryptionScheme, T extends SupportedTeeType>(scheme: S, type: T, bigPt: bigint): PlaintextOf<S, T>;
|
|
171
174
|
/**
|
|
172
175
|
* Decodes an ABI-encoded ciphertext input into its components.
|
|
173
176
|
*
|
|
@@ -220,7 +223,7 @@ export declare function plaintextToBytes(plaintext: Plaintext): Buffer;
|
|
|
220
223
|
* @param type - The ENCRYPTION type to interpret the bytes as.
|
|
221
224
|
* @returns A typed `Plaintext` value.
|
|
222
225
|
*/
|
|
223
|
-
export declare function bytes32ToPlaintext(plaintext: Bytes32, scheme: EncryptionScheme, type:
|
|
226
|
+
export declare function bytes32ToPlaintext(plaintext: Bytes32, scheme: EncryptionScheme, type: SupportedTeeType): Plaintext;
|
|
224
227
|
/**
|
|
225
228
|
* Parses a `Uint8Array` into a typed {@link Plaintext}.
|
|
226
229
|
* @param plaintext - The byte array to interpret.
|
|
@@ -228,5 +231,5 @@ export declare function bytes32ToPlaintext(plaintext: Bytes32, scheme: Encryptio
|
|
|
228
231
|
* @param type - The ENCRYPTION type to interpret the bytes as.
|
|
229
232
|
* @returns A typed `Plaintext` value.
|
|
230
233
|
*/
|
|
231
|
-
export declare function bytesToPlaintext(plaintext: Uint8Array, scheme: EncryptionScheme, type:
|
|
234
|
+
export declare function bytesToPlaintext(plaintext: Uint8Array, scheme: EncryptionScheme, type: SupportedTeeType): Plaintext;
|
|
232
235
|
export {};
|
|
@@ -7,18 +7,18 @@ import { handleTypes, InputContext } from '../handle.js';
|
|
|
7
7
|
*
|
|
8
8
|
* @remarks TODO: review need of `euint64` and `euint160` — `Lib.sol` only supports `euint256` and `ebool`.
|
|
9
9
|
*/
|
|
10
|
-
export const
|
|
10
|
+
export const supportedTeeTypes = {
|
|
11
11
|
euint64: handleTypes.euint64,
|
|
12
12
|
euint160: handleTypes.euint160,
|
|
13
13
|
euint256: handleTypes.euint256,
|
|
14
14
|
ebool: handleTypes.ebool,
|
|
15
15
|
};
|
|
16
|
-
const
|
|
16
|
+
const supportedTeeTypeNames = Object.keys(supportedTeeTypes);
|
|
17
17
|
/** Schema that validates a string is one of the supported ENCRYPTION type names. */
|
|
18
|
-
export const
|
|
18
|
+
export const SupportedTeeTypeName = Schema.Literal(...supportedTeeTypeNames);
|
|
19
19
|
/** Schema that validates a number is one of the supported ENCRYPTION type integer identifiers. */
|
|
20
20
|
// TODO: extend to all types
|
|
21
|
-
export const
|
|
21
|
+
export const SupportedTeeType = Schema.Literal(...Object.values(supportedTeeTypes));
|
|
22
22
|
/** Map of encryption scheme names to their integer identifiers. Currently only X-Wing (2) is supported. */
|
|
23
23
|
export const encryptionSchemes = {
|
|
24
24
|
xwing: 2,
|
|
@@ -42,7 +42,7 @@ export const EncryptionScheme = Schema.Literal(encryptionSchemes.xwing);
|
|
|
42
42
|
/** Schema for an ENCRYPTION ciphertext: encryption scheme, ENCRYPTION type, and the encrypted value as a hex string. */
|
|
43
43
|
export const Ciphertext = Schema.Struct({
|
|
44
44
|
scheme: EncryptionScheme,
|
|
45
|
-
type:
|
|
45
|
+
type: SupportedTeeType,
|
|
46
46
|
value: HexString,
|
|
47
47
|
});
|
|
48
48
|
/** Schema for a ciphertext paired with the {@link InputContext} it was encrypted under. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export { Ciphertext, EncryptionScheme, Plaintext,
|
|
1
|
+
export { Ciphertext, EncryptionScheme, Plaintext, SupportedTeeType, SupportedTeeTypeName, bigintToPlaintext, bytes32ToPlaintext, bytesToPlaintext, encryptionSchemes, getEncryptionSchemeName, plaintextToBigint, plaintextToBytes, plaintextToBytes32, supportedTeeTypes, type EncryptionSchemes, } from './encryption.js';
|