@inco/js 0.8.0-devnet-5 → 0.9.0-devnet-test-2
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 +11 -10
- package/dist/cjs/advancedacl/session-key.js +7 -11
- package/dist/cjs/attestedcompute/attested-compute.d.ts +6 -6
- package/dist/cjs/attestedcompute/attested-compute.js +2 -2
- package/dist/cjs/attesteddecrypt/attested-decrypt.d.ts +8 -8
- package/dist/cjs/attesteddecrypt/attested-decrypt.js +6 -6
- package/dist/cjs/encryption/encryption.d.ts +10 -10
- package/dist/cjs/encryption/encryption.js +5 -5
- package/dist/cjs/generated/es/inco/covalidator/compute/v1/server_pb.d.ts +270 -7
- package/dist/cjs/generated/es/inco/covalidator/compute/v1/server_pb.js +98 -12
- package/dist/cjs/generated/es/inco/covalidator/compute/v1/types_pb.d.ts +0 -6
- package/dist/cjs/generated/es/inco/covalidator/compute/v1/types_pb.js +2 -8
- package/dist/cjs/generated/es/inco/kms/lite/v1/kms_service_pb.d.ts +213 -0
- package/dist/cjs/generated/es/inco/kms/lite/v1/kms_service_pb.js +36 -11
- package/dist/cjs/generated/es/inco/sealingfetcher/v1/sealingfetcher_pb.d.ts +3 -3
- package/dist/cjs/kms/quorumClient.d.ts +5 -4
- package/dist/cjs/kms/quorumClient.js +33 -30
- package/dist/cjs/lite/index.d.ts +1 -1
- package/dist/cjs/lite/index.js +15 -2
- package/dist/cjs/lite/lightning.d.ts +33 -24
- package/dist/cjs/lite/lightning.js +67 -38
- package/dist/cjs/lite/xwing.d.ts +123 -0
- package/dist/cjs/lite/xwing.js +275 -0
- package/dist/cjs/reencryption/types.d.ts +2 -2
- package/dist/esm/advancedacl/session-key.d.ts +11 -10
- package/dist/esm/advancedacl/session-key.js +7 -11
- package/dist/esm/attestedcompute/attested-compute.d.ts +6 -6
- package/dist/esm/attestedcompute/attested-compute.js +2 -2
- package/dist/esm/attesteddecrypt/attested-decrypt.d.ts +8 -8
- package/dist/esm/attesteddecrypt/attested-decrypt.js +4 -4
- package/dist/esm/encryption/encryption.d.ts +10 -10
- package/dist/esm/encryption/encryption.js +5 -5
- package/dist/esm/generated/es/inco/covalidator/compute/v1/server_pb.d.ts +270 -7
- package/dist/esm/generated/es/inco/covalidator/compute/v1/server_pb.js +97 -11
- package/dist/esm/generated/es/inco/covalidator/compute/v1/types_pb.d.ts +0 -6
- package/dist/esm/generated/es/inco/covalidator/compute/v1/types_pb.js +2 -8
- package/dist/esm/generated/es/inco/kms/lite/v1/kms_service_pb.d.ts +213 -0
- package/dist/esm/generated/es/inco/kms/lite/v1/kms_service_pb.js +35 -10
- package/dist/esm/generated/es/inco/sealingfetcher/v1/sealingfetcher_pb.d.ts +3 -3
- package/dist/esm/kms/quorumClient.d.ts +5 -4
- package/dist/esm/kms/quorumClient.js +33 -30
- package/dist/esm/lite/index.d.ts +1 -1
- package/dist/esm/lite/index.js +2 -2
- package/dist/esm/lite/lightning.d.ts +33 -24
- package/dist/esm/lite/lightning.js +67 -38
- package/dist/esm/lite/xwing.d.ts +123 -0
- package/dist/esm/lite/xwing.js +263 -0
- package/dist/esm/reencryption/types.d.ts +2 -2
- package/dist/types/advancedacl/session-key.d.ts +11 -10
- package/dist/types/attestedcompute/attested-compute.d.ts +6 -6
- package/dist/types/attesteddecrypt/attested-decrypt.d.ts +8 -8
- package/dist/types/encryption/encryption.d.ts +10 -10
- package/dist/types/generated/es/inco/covalidator/compute/v1/server_pb.d.ts +270 -7
- package/dist/types/generated/es/inco/covalidator/compute/v1/types_pb.d.ts +0 -6
- package/dist/types/generated/es/inco/kms/lite/v1/kms_service_pb.d.ts +213 -0
- package/dist/types/generated/es/inco/sealingfetcher/v1/sealingfetcher_pb.d.ts +3 -3
- package/dist/types/kms/quorumClient.d.ts +5 -4
- package/dist/types/lite/index.d.ts +1 -1
- package/dist/types/lite/lightning.d.ts +33 -24
- package/dist/types/lite/xwing.d.ts +123 -0
- package/dist/types/reencryption/types.d.ts +2 -2
- package/package.json +6 -6
- package/dist/cjs/lite/ecies.d.ts +0 -26
- package/dist/cjs/lite/ecies.js +0 -146
- package/dist/esm/lite/ecies.d.ts +0 -26
- package/dist/esm/lite/ecies.js +0 -134
- package/dist/types/lite/ecies.d.ts +0 -26
|
@@ -0,0 +1,263 @@
|
|
|
1
|
+
import { Chacha20Poly1305 } from '@hpke/chacha20poly1305';
|
|
2
|
+
import { CipherSuite, HkdfSha256 } from '@hpke/core';
|
|
3
|
+
import { XWing } from '@hpke/hybridkem-x-wing';
|
|
4
|
+
import { asBytes32, bytesFromHexString, bytesToHex } from '../binary.js';
|
|
5
|
+
import { bytesToPlaintext, decodeCiphertextInput, encodeCiphertextInput, encryptionSchemes, getEncryptionSchemeName, SupportedFheType, } from '../encryption/encryption.js';
|
|
6
|
+
import { computeHandle, computePrehandle } from '../handle.js';
|
|
7
|
+
import { parse } from '../schema.js';
|
|
8
|
+
import { decodeInput, encodeInput } from './hadu.js';
|
|
9
|
+
// Get X-Wing key sizes from the library
|
|
10
|
+
const xwingKem = new XWing();
|
|
11
|
+
/**
|
|
12
|
+
* X-Wing public key size in bytes.
|
|
13
|
+
* Combining ML-KEM-768 (1184 bytes) and X25519 (32 bytes).
|
|
14
|
+
*/
|
|
15
|
+
export const XWING_PUBLIC_KEY_SIZE = xwingKem.publicKeySize;
|
|
16
|
+
// Test network private key for testing
|
|
17
|
+
export const TEST_NETWORK_SEED_KEY = '0x0000000000000000000000000000000000000000000000000000000000000000';
|
|
18
|
+
// Test network X-Wing public key (1216 bytes)
|
|
19
|
+
// Generated from Go with seed of all zeros using HPKE layer: hpke.KEM_XWING.Scheme().DeriveKeyPair(seed)
|
|
20
|
+
// This matches the key used in covalidator's GetXwingPrivateKeyForTesting() via DeriveXwingPrivateKey
|
|
21
|
+
export const TEST_NETWORK_XWING_PUBKEY = '0xca882388911c7c762aafc20debd63e845b3bed28c9d5262cdea7771fb31bd660a1ae7b395a9a7df3d12c7b118e8eda5057572c1ba05cd9b635edf33dabca4cac7291e0848f19c20e5beb850c3818f3543d49b3a5c729cb86a28fda539775d04feda112fe0c81d138aaf623aea7d507a4e826e890105db6065a44aba76a10d771c00d1b33f4ac51869806aae18eada68f19047024542d64a7aa1c91a5e1aa49d93613b5224b415bcc7aa166e4b55033438d20c641f9664fdb1689b53208181463e3d1325d46b30f07c5945b7e3fa1418bf833d975258461b294664eaf60795964924a280729c10a37fc6e967440bdd55d4ca53596286383481291152365303d44517cef369c00933b0b30368a230353e729c031075e8388673678a56b3ba84a165b28096ee9bd684483e1844258b451c365c41fa534152a3b64120041450128e960c7d6437d717ee266bdde7aaeec225ed93b958d188e97407349f1382976ca47d761ecc59a6f394487eb015c083abb490584677240eb47f838c838568a496119378b8bb81484610a50792b5d9c9939db188e7d0249d3cb918c436f111a2898849b286b0743a22c57464c709c5eaceac1ba493adca3328c0b14b5e38d3aea74e328b622b17e7181c35ad11c2103bdb7f2b209d93dcbc4ab61a06bc37139e6d2b7a06c5b7e9267bef3a8918a706f793271a5acc2574532da79e5a10cf074b998147a3c43586a411a513bba0d11cc19a36c83b19277f28022c88b120abfdba7076a8263e05336e3245aef7033eb3c762b5bbfa5791ac960398b649d5cbb652ddc6b2398143a0861ab3b410b696328879c099098adf819fbf7ac170030e86675e7f45c22ac9e1cf52c3102487bb0b91ab592afdc69c6e3a9b71876b86260b6c736b8291098f1130d3b763525cbad540ce2d042eacb6ed43b7bcba898f712c412f26066e09945f44ec7026c8ef959831abc10719d2017a12a41728b41c02371a5f5756ebc79406be708ea41bbd21563c874a0b791a3b4e4224a609967004f065c5ab4f3b4c61cb35df70573269da53179c3701fc5205f61974426f9b794c1b5826494b70842b6920c17752029369264dc8590b898b85c9d89a258e1f46c1b0490efd17c485cb51687cea272041e90b8e629521d3c5e3fa7518161bad7a159295b63cc6c0077897b53d47db8bc0ecb820f550705b65715a1a1094d04854f56acd26aa0baa10cb8447fad6211f53105796a42882328e6852e8de821c283b51eaab9bc95c4dc53615626049d63b1f9a457193805276b1905b0ab39353b5cf91fdd6023d4d816aef9cce4a3cfb3d12190172df221ae61d427563a098cc60e3dc9997ef54959180be5dc64a911157db6be3a01be2ee343caab33b8729abf0c50c674758c511291941fceac646232920907c2e88b9ec10211161729c797643a553a6ae5c4b7483c04e3263bd291e311c609071348b7c3310aa97d6b8318e0a4afe8399fa22f951049a9bb8860f7c69a333d3cc1aaf0129ab560713bf29eb3a01f9a276c78e54e3a3648b2447c80242b271b11406866389426d8b59796540d6b5702092ab21ee217c075cfc0c17ef826ce9ea29b9e61617457a5b1aaa23a58615dc53c59183beb36ea19498c21820b70ab47adeb678f1c52bf8768b3597b608ea1a8a15cd62e8a29bec4a1ac248ef9f02de0144bca06025f95a42bd6c8eaaaaaa2366328561d';
|
|
22
|
+
/**
|
|
23
|
+
* Create HPKE cipher suite with X-Wing KEM, HKDF-SHA256, and ChaCha20-Poly1305 AEAD.
|
|
24
|
+
* This configuration provides post-quantum security with hybrid classical/PQ encryption.
|
|
25
|
+
* Workaround: Manually calls setup on the XWing KEM due to a bug in @hpke/hybridkem-x-wing@0.6.1
|
|
26
|
+
* where encap() calls getRandomValues before calling _setup().
|
|
27
|
+
*/
|
|
28
|
+
async function createXwingSuite() {
|
|
29
|
+
const kem = new XWing();
|
|
30
|
+
// Workaround: Call setup to initialize _api before encap() is called
|
|
31
|
+
// @ts-expect-error _setup is private but must be called to initialize crypto API
|
|
32
|
+
await kem._setup();
|
|
33
|
+
return new CipherSuite({
|
|
34
|
+
kem,
|
|
35
|
+
kdf: new HkdfSha256(),
|
|
36
|
+
aead: new Chacha20Poly1305(),
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Derive X-Wing keypair from a 32-byte seed (deterministic).
|
|
41
|
+
* This matches the Go implementation in covalidator/encoding/xwing.go
|
|
42
|
+
*
|
|
43
|
+
* @param seed - 32-byte seed for deterministic key derivation
|
|
44
|
+
* @returns X-Wing keypair with cached public key bytes
|
|
45
|
+
*/
|
|
46
|
+
export async function deriveXwingKeypairFromSeed(seed) {
|
|
47
|
+
if (seed.length !== 32) {
|
|
48
|
+
throw new Error(`Invalid X-Wing seed length: expected 32 bytes, got ${seed.length}`);
|
|
49
|
+
}
|
|
50
|
+
const suite = await createXwingSuite();
|
|
51
|
+
// Create a fresh ArrayBuffer copy to avoid SharedArrayBuffer issues
|
|
52
|
+
const seedCopy = new Uint8Array(seed);
|
|
53
|
+
const keyPair = await suite.kem.deriveKeyPair(seedCopy.buffer);
|
|
54
|
+
const publicKeyBytes = new Uint8Array(await suite.kem.serializePublicKey(keyPair.publicKey));
|
|
55
|
+
return {
|
|
56
|
+
scheme: encryptionSchemes.xwing,
|
|
57
|
+
publicKey: keyPair.publicKey,
|
|
58
|
+
privateKey: keyPair.privateKey,
|
|
59
|
+
encodePublicKey() {
|
|
60
|
+
return publicKeyBytes;
|
|
61
|
+
},
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Generate a random X-Wing keypair.
|
|
66
|
+
*
|
|
67
|
+
* @returns X-Wing keypair with cached public key bytes
|
|
68
|
+
*/
|
|
69
|
+
export async function generateXwingKeypair() {
|
|
70
|
+
const suite = await createXwingSuite();
|
|
71
|
+
const keyPair = await suite.kem.generateKeyPair();
|
|
72
|
+
const publicKeyBytes = new Uint8Array(await suite.kem.serializePublicKey(keyPair.publicKey));
|
|
73
|
+
return {
|
|
74
|
+
scheme: encryptionSchemes.xwing,
|
|
75
|
+
publicKey: keyPair.publicKey,
|
|
76
|
+
privateKey: keyPair.privateKey,
|
|
77
|
+
encodePublicKey() {
|
|
78
|
+
return publicKeyBytes;
|
|
79
|
+
},
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Decode X-Wing public key from bytes.
|
|
84
|
+
*
|
|
85
|
+
* @param pubKeyBytes - 1216-byte X-Wing public key
|
|
86
|
+
* @returns CryptoKey for encryption operations
|
|
87
|
+
*/
|
|
88
|
+
export async function decodeXwingPublicKey(pubKeyBytes) {
|
|
89
|
+
const suite = await createXwingSuite();
|
|
90
|
+
if (pubKeyBytes.length !== suite.kem.publicKeySize) {
|
|
91
|
+
throw new Error(`Invalid X-Wing public key length: expected ${XWING_PUBLIC_KEY_SIZE} bytes, got ${pubKeyBytes.length}`);
|
|
92
|
+
}
|
|
93
|
+
// Create a fresh ArrayBuffer copy to avoid SharedArrayBuffer issues
|
|
94
|
+
const pubKeyCopy = new Uint8Array(pubKeyBytes);
|
|
95
|
+
return await suite.kem.deserializePublicKey(pubKeyCopy.buffer);
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Decode X-Wing private key from 32-byte seed.
|
|
99
|
+
* Alias for deriveXwingKeypairFromSeed for consistency with Go API.
|
|
100
|
+
*
|
|
101
|
+
* @param seed - 32-byte seed
|
|
102
|
+
* @returns X-Wing keypair
|
|
103
|
+
*/
|
|
104
|
+
export async function decodeXwingPrivateKey(seed) {
|
|
105
|
+
return await deriveXwingKeypairFromSeed(seed);
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Encode X-Wing public key to bytes.
|
|
109
|
+
*
|
|
110
|
+
* @param publicKey - CryptoKey containing X-Wing public key
|
|
111
|
+
* @returns 1216-byte serialized public key
|
|
112
|
+
*/
|
|
113
|
+
export async function encodeXwingPublicKey(publicKey) {
|
|
114
|
+
const suite = await createXwingSuite();
|
|
115
|
+
return new Uint8Array(await suite.kem.serializePublicKey(publicKey));
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Encrypt using X-Wing HPKE (RFC 9180) with ChaCha20-Poly1305 AEAD.
|
|
119
|
+
*
|
|
120
|
+
* Output format: encappedKey (1184 bytes) || ciphertext (variable length)
|
|
121
|
+
*
|
|
122
|
+
* @param pubKeyA - Recipient's public key
|
|
123
|
+
* @param msg - Message to encrypt
|
|
124
|
+
* @param aad - Additional authenticated data (default: empty)
|
|
125
|
+
* @param info - Context info for key derivation (default: empty)
|
|
126
|
+
* @returns Encrypted data (encappedKey || ciphertext)
|
|
127
|
+
*/
|
|
128
|
+
export async function encrypt(pubKeyA, msg, aad = new Uint8Array(0), info = new Uint8Array(0)) {
|
|
129
|
+
const suite = await createXwingSuite();
|
|
130
|
+
// Create fresh ArrayBuffer copies to avoid SharedArrayBuffer issues
|
|
131
|
+
const infoCopy = new Uint8Array(info);
|
|
132
|
+
const sender = await suite.createSenderContext({
|
|
133
|
+
recipientPublicKey: pubKeyA,
|
|
134
|
+
info: infoCopy.buffer,
|
|
135
|
+
});
|
|
136
|
+
const msgCopy = new Uint8Array(msg);
|
|
137
|
+
const aadCopy = new Uint8Array(aad);
|
|
138
|
+
const ciphertext = await sender.seal(msgCopy.buffer, aadCopy.buffer);
|
|
139
|
+
const encappedKey = sender.enc;
|
|
140
|
+
// Concatenate encappedKey and ciphertext
|
|
141
|
+
const result = new Uint8Array(encappedKey.byteLength + ciphertext.byteLength);
|
|
142
|
+
result.set(new Uint8Array(encappedKey), 0);
|
|
143
|
+
result.set(new Uint8Array(ciphertext), encappedKey.byteLength);
|
|
144
|
+
return result;
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Decrypt using X-Wing HPKE (RFC 9180) with ChaCha20-Poly1305 AEAD.
|
|
148
|
+
*
|
|
149
|
+
* Input format: encappedKey (1184 bytes) || ciphertext (variable length)
|
|
150
|
+
*
|
|
151
|
+
* @param privKeyA - Recipient's private key
|
|
152
|
+
* @param encryptedData - Encrypted data (encappedKey || ciphertext)
|
|
153
|
+
* @param aad - Additional authenticated data (default: empty)
|
|
154
|
+
* @param info - Context info for key derivation (default: empty)
|
|
155
|
+
* @returns Decrypted plaintext
|
|
156
|
+
*/
|
|
157
|
+
export async function decrypt(privKeyA, encryptedData, aad = new Uint8Array(0), info = new Uint8Array(0)) {
|
|
158
|
+
const suite = await createXwingSuite();
|
|
159
|
+
// X-Wing encapsulated key size from the KEM
|
|
160
|
+
const encappedKeySize = suite.kem.encSize;
|
|
161
|
+
if (encryptedData.length < encappedKeySize) {
|
|
162
|
+
throw new Error(`Invalid X-Wing encrypted data length: expected at least ${encappedKeySize} bytes, got ${encryptedData.length}`);
|
|
163
|
+
}
|
|
164
|
+
// Split encappedKey and ciphertext
|
|
165
|
+
const encappedKey = encryptedData.slice(0, encappedKeySize);
|
|
166
|
+
const ciphertext = encryptedData.slice(encappedKeySize);
|
|
167
|
+
// Create fresh ArrayBuffer copies to avoid SharedArrayBuffer issues
|
|
168
|
+
const infoCopy = new Uint8Array(info);
|
|
169
|
+
const encCopy = new Uint8Array(encappedKey);
|
|
170
|
+
const recipient = await suite.createRecipientContext({
|
|
171
|
+
recipientKey: privKeyA.privateKey,
|
|
172
|
+
enc: encCopy.buffer,
|
|
173
|
+
info: infoCopy.buffer,
|
|
174
|
+
});
|
|
175
|
+
const ctCopy = new Uint8Array(ciphertext);
|
|
176
|
+
const aadCopy = new Uint8Array(aad);
|
|
177
|
+
const plaintext = await recipient.open(ctCopy.buffer, aadCopy.buffer);
|
|
178
|
+
return new Uint8Array(plaintext);
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Create an X-Wing encryptor for encrypting inputs.
|
|
182
|
+
* Follows the same pattern as ECIES encryptor in ecies.ts.
|
|
183
|
+
*
|
|
184
|
+
* The encryptor:
|
|
185
|
+
* 1. Encodes the plaintext with its context (HADU encoding)
|
|
186
|
+
* 2. Encrypts using X-Wing HPKE
|
|
187
|
+
* 3. Computes prehandle and handle for tracking
|
|
188
|
+
* 4. Returns the encrypted ciphertext with metadata
|
|
189
|
+
*
|
|
190
|
+
* @param args - X-Wing encryptor arguments (recipient's public key)
|
|
191
|
+
* @returns Encryptor function
|
|
192
|
+
*/
|
|
193
|
+
export function getXwingEncryptor({ pubKeyA, }) {
|
|
194
|
+
return async ({ plaintext, context, }) => {
|
|
195
|
+
if (plaintext.scheme !== encryptionSchemes.xwing) {
|
|
196
|
+
throw new Error(`Plaintext with scheme ${getEncryptionSchemeName(plaintext.scheme)} cannot be encrypted with X-Wing`);
|
|
197
|
+
}
|
|
198
|
+
// Encode plaintext with context (HADU encoding)
|
|
199
|
+
const inputCiphertextPayloadBytes = Buffer.from(encodeInput({ plaintext, context }));
|
|
200
|
+
// Encrypt with X-Wing HPKE (empty AAD and info)
|
|
201
|
+
const aad = new Uint8Array(0);
|
|
202
|
+
const info = new Uint8Array(0);
|
|
203
|
+
const ct = await encrypt(pubKeyA, inputCiphertextPayloadBytes, aad, info);
|
|
204
|
+
// Compute prehandle and handle for ciphertext tracking
|
|
205
|
+
const prehandle = computePrehandle({
|
|
206
|
+
ciphertext: ct,
|
|
207
|
+
handleType: plaintext.type,
|
|
208
|
+
indexHandle: 0,
|
|
209
|
+
handleVersion: 0,
|
|
210
|
+
});
|
|
211
|
+
const handle = computeHandle({
|
|
212
|
+
prehandle,
|
|
213
|
+
context: context,
|
|
214
|
+
});
|
|
215
|
+
return {
|
|
216
|
+
prehandle: asBytes32(prehandle),
|
|
217
|
+
handle: asBytes32(handle),
|
|
218
|
+
context,
|
|
219
|
+
ciphertext: {
|
|
220
|
+
scheme: encryptionSchemes.xwing,
|
|
221
|
+
type: plaintext.type,
|
|
222
|
+
// Prepend handle as checksum for early mismatch detection
|
|
223
|
+
value: encodeCiphertextInput(context.version, bytesToHex(handle), bytesToHex(ct)),
|
|
224
|
+
},
|
|
225
|
+
};
|
|
226
|
+
};
|
|
227
|
+
}
|
|
228
|
+
/**
|
|
229
|
+
* Create an X-Wing decryptor for decrypting inputs.
|
|
230
|
+
* Follows the same pattern as ECIES decryptor in ecies.ts.
|
|
231
|
+
*
|
|
232
|
+
* The decryptor:
|
|
233
|
+
* 1. Removes the prepended handle from the ciphertext
|
|
234
|
+
* 2. Decrypts using X-Wing HPKE
|
|
235
|
+
* 3. Decodes the HADU-encoded payload
|
|
236
|
+
* 4. Extracts and returns the plaintext
|
|
237
|
+
*
|
|
238
|
+
* @param args - X-Wing decryptor arguments (recipient's private key)
|
|
239
|
+
* @returns Decryptor function
|
|
240
|
+
*/
|
|
241
|
+
export function getXwingDecryptor({ privKeyA, }) {
|
|
242
|
+
return async ({ scheme, value, }) => {
|
|
243
|
+
if (scheme !== encryptionSchemes.xwing) {
|
|
244
|
+
throw new Error(`Ciphertext with scheme ${getEncryptionSchemeName(scheme)} cannot be decrypted with X-Wing`);
|
|
245
|
+
}
|
|
246
|
+
// Remove the prepended handle
|
|
247
|
+
const { ciphertext } = decodeCiphertextInput(value);
|
|
248
|
+
// Decrypt with X-Wing HPKE (empty AAD and info)
|
|
249
|
+
const aad = new Uint8Array(0);
|
|
250
|
+
const info = new Uint8Array(0);
|
|
251
|
+
const ptBuf = await decrypt(privKeyA, bytesFromHexString(ciphertext), aad, info);
|
|
252
|
+
// Decode HADU-encoded payload
|
|
253
|
+
const payload = decodeInput(ptBuf);
|
|
254
|
+
const computable = payload.value;
|
|
255
|
+
if (computable.case !== 'scalar') {
|
|
256
|
+
throw new Error(`Decrypted plaintext is not a scalar, cannot currently be decrypted. This feature may be implemented on request.`);
|
|
257
|
+
}
|
|
258
|
+
// Extract and return plaintext
|
|
259
|
+
const typ = parse(SupportedFheType, computable.value.type);
|
|
260
|
+
return bytesToPlaintext(computable.value.value, encryptionSchemes.xwing, typ);
|
|
261
|
+
};
|
|
262
|
+
}
|
|
263
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieHdpbmcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGl0ZS94d2luZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUMxRCxPQUFPLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUNyRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxrQkFBa0IsRUFBRSxVQUFVLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDekUsT0FBTyxFQUNMLGdCQUFnQixFQUVoQixxQkFBcUIsRUFFckIscUJBQXFCLEVBQ3JCLGlCQUFpQixFQUdqQix1QkFBdUIsRUFHdkIsZ0JBQWdCLEdBRWpCLE1BQU0sNkJBQTZCLENBQUM7QUFDckMsT0FBTyxFQUFFLGFBQWEsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUUvRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3JDLE9BQU8sRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRXJELHdDQUF3QztBQUN4QyxNQUFNLFFBQVEsR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFDO0FBRTdCOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUM7QUFFNUQsdUNBQXVDO0FBQ3ZDLE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUNoQyxvRUFBb0UsQ0FBQztBQUV2RSw4Q0FBOEM7QUFDOUMseUdBQXlHO0FBQ3pHLHNHQUFzRztBQUN0RyxNQUFNLENBQUMsTUFBTSx5QkFBeUIsR0FDcEMsbzRFQUFvNEUsQ0FBQztBQWV2NEU7Ozs7O0dBS0c7QUFDSCxLQUFLLFVBQVUsZ0JBQWdCO0lBQzdCLE1BQU0sR0FBRyxHQUFHLElBQUksS0FB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
|
|
@@ -2,7 +2,7 @@ import { Address } from 'viem';
|
|
|
2
2
|
import { HexString } from '../binary.js';
|
|
3
3
|
import { CiphertextOf, EncryptionScheme, PlaintextOf, SupportedFheType } from '../encryption/encryption.js';
|
|
4
4
|
import { Handle } from '../handle.js';
|
|
5
|
-
import type {
|
|
5
|
+
import type { XwingKeypair } from '../lite/xwing.js';
|
|
6
6
|
import type { BackoffConfig } from '../retry.js';
|
|
7
7
|
export type Reencryptor<S extends EncryptionScheme> = <T extends SupportedFheType>(args: ReencryptFnArgs<S, T>, backoffConfig?: Partial<BackoffConfig>) => Promise<PlaintextOf<S, T>>;
|
|
8
8
|
export interface ReencryptorArgs {
|
|
@@ -12,7 +12,7 @@ export type ReencryptFnArgs<S extends EncryptionScheme, T extends SupportedFheTy
|
|
|
12
12
|
handle: Handle;
|
|
13
13
|
ciphertext?: CiphertextOf<S, T>;
|
|
14
14
|
};
|
|
15
|
-
export type SupportedEphemeralKeypairs =
|
|
15
|
+
export type SupportedEphemeralKeypairs = XwingKeypair;
|
|
16
16
|
export interface PubKeyEncodable {
|
|
17
17
|
encodePublicKey(): Uint8Array;
|
|
18
18
|
}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { type Account, type Address, type Chain, type Hex, PublicClient, type Transport, type WalletClient } from 'viem';
|
|
2
|
+
import type { PrivateKeyAccount } from 'viem/accounts';
|
|
2
3
|
import { DecryptionAttestation, EncryptedDecryptionAttestation } from '../attesteddecrypt/index.js';
|
|
3
4
|
import { SupportedChainId } from '../chain.js';
|
|
4
|
-
import {
|
|
5
|
+
import { EncryptionScheme, SupportedFheType } from '../encryption/encryption.js';
|
|
5
6
|
import { HexString } from '../index.js';
|
|
6
|
-
import type {
|
|
7
|
+
import type { XwingKeypair } from '../lite/index.js';
|
|
7
8
|
import { BackoffConfig } from '../retry.js';
|
|
8
9
|
import type { AllowanceVoucher, AllowanceVoucherWithSig } from './types.js';
|
|
9
10
|
import { AttestedComputeOP } from '../attestedcompute/types.js';
|
|
@@ -33,7 +34,7 @@ export declare function grantSessionKeyCustomVerifier({ chainId, incoLiteAddress
|
|
|
33
34
|
export declare function updateActiveVouchersSessionNonce(incoLiteAddress: Address, sharerWalletClient: WalletClient<Transport, Chain, Account>): Promise<`0x${string}`>;
|
|
34
35
|
export interface SessionKeyAttestedComputeArgs {
|
|
35
36
|
chainId: SupportedChainId;
|
|
36
|
-
|
|
37
|
+
ephemeralAccount: PrivateKeyAccount;
|
|
37
38
|
kmsQuorumClient: KmsQuorumClient;
|
|
38
39
|
allowanceVoucherWithSig: AllowanceVoucherWithSig;
|
|
39
40
|
lhsHandle: HexString;
|
|
@@ -44,19 +45,19 @@ export interface SessionKeyAttestedComputeArgs {
|
|
|
44
45
|
ethClient?: PublicClient<Transport, Chain> | WalletClient<Transport, Chain, Account> | undefined;
|
|
45
46
|
executorAddress?: HexString | undefined;
|
|
46
47
|
reencryptPubKey?: Uint8Array | undefined;
|
|
47
|
-
reencryptKeypair?:
|
|
48
|
+
reencryptKeypair?: XwingKeypair | undefined;
|
|
48
49
|
}
|
|
49
|
-
export declare function sessionKeyAttestedCompute<T extends SupportedFheType>({ lhsHandle, op, rhsPlaintext, backoffConfig, chainId, kmsQuorumClient,
|
|
50
|
+
export declare function sessionKeyAttestedCompute<T extends SupportedFheType>({ lhsHandle, op, rhsPlaintext, backoffConfig, chainId, kmsQuorumClient, ephemeralAccount, allowanceVoucherWithSig, requesterArgData, ethClient, executorAddress, reencryptPubKey, reencryptKeypair, }: SessionKeyAttestedComputeArgs): Promise<DecryptionAttestation<EncryptionScheme, SupportedFheType> | EncryptedDecryptionAttestation<EncryptionScheme, SupportedFheType>>;
|
|
50
51
|
export interface SessionKeyAttestedDecryptArgs {
|
|
51
52
|
chainId: SupportedChainId;
|
|
52
|
-
|
|
53
|
+
ephemeralAccount: PrivateKeyAccount;
|
|
53
54
|
kmsQuorumClient: KmsQuorumClient;
|
|
54
55
|
allowanceVoucherWithSig: AllowanceVoucherWithSig;
|
|
55
56
|
handles: HexString[];
|
|
56
57
|
requesterArgData?: Hex | undefined;
|
|
57
58
|
backoffConfig?: Partial<BackoffConfig> | undefined;
|
|
58
59
|
reencryptPubKey?: Uint8Array | undefined;
|
|
59
|
-
reencryptKeypair?:
|
|
60
|
+
reencryptKeypair?: XwingKeypair | undefined;
|
|
60
61
|
ethClient?: PublicClient<Transport, Chain> | WalletClient<Transport, Chain, Account> | undefined;
|
|
61
62
|
executorAddress?: HexString | undefined;
|
|
62
63
|
}
|
|
@@ -69,7 +70,7 @@ export interface SessionKeyAttestedDecryptArgs {
|
|
|
69
70
|
* chainId,
|
|
70
71
|
* kmsConnectRpcEndpointOrClient: covalidatorUrl,
|
|
71
72
|
* allowanceVoucherWithSig: voucher,
|
|
72
|
-
*
|
|
73
|
+
* ephemeralAccount,
|
|
73
74
|
* handles,
|
|
74
75
|
* });
|
|
75
76
|
* console.log(attestations[0].plaintext.value);
|
|
@@ -81,7 +82,7 @@ export interface SessionKeyAttestedDecryptArgs {
|
|
|
81
82
|
* chainId,
|
|
82
83
|
* kmsConnectRpcEndpointOrClient: covalidatorUrl,
|
|
83
84
|
* allowanceVoucherWithSig: voucher,
|
|
84
|
-
*
|
|
85
|
+
* ephemeralAccount,
|
|
85
86
|
* handles,
|
|
86
87
|
* reencryptPubKey: recipientPubKey,
|
|
87
88
|
* });
|
|
@@ -90,4 +91,4 @@ export interface SessionKeyAttestedDecryptArgs {
|
|
|
90
91
|
* );
|
|
91
92
|
* ```
|
|
92
93
|
*/
|
|
93
|
-
export declare function sessionKeyAttestedDecrypt({ chainId, kmsQuorumClient, handles,
|
|
94
|
+
export declare function sessionKeyAttestedDecrypt({ chainId, kmsQuorumClient, handles, ephemeralAccount, allowanceVoucherWithSig, requesterArgData, backoffConfig, reencryptPubKey, reencryptKeypair, ethClient, executorAddress, }: SessionKeyAttestedDecryptArgs): Promise<Array<DecryptionAttestation<EncryptionScheme, SupportedFheType> | EncryptedDecryptionAttestation<EncryptionScheme, SupportedFheType>>>;
|
|
@@ -2,9 +2,9 @@ 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 {
|
|
5
|
+
import type { EncryptionScheme, SupportedFheType } from '../encryption/encryption.js';
|
|
6
6
|
import { KmsQuorumClient } from '../kms/quorumClient.js';
|
|
7
|
-
import type {
|
|
7
|
+
import type { XwingKeypair } from '../lite/xwing.js';
|
|
8
8
|
import type { BackoffConfig } from '../retry.js';
|
|
9
9
|
import { AttestedComputeOP } from './types.js';
|
|
10
10
|
export declare const ATTESTED_COMPUTE_DOMAIN_NAME = "IncoAttestedCompute";
|
|
@@ -38,8 +38,8 @@ export declare function attestedCompute<T extends SupportedFheType>({ executorAd
|
|
|
38
38
|
kmsQuorumClient: KmsQuorumClient;
|
|
39
39
|
chainId: SupportedChainId;
|
|
40
40
|
reencryptPubKey: Uint8Array;
|
|
41
|
-
reencryptKeypair:
|
|
42
|
-
}): Promise<DecryptionAttestation<
|
|
41
|
+
reencryptKeypair: XwingKeypair;
|
|
42
|
+
}): Promise<DecryptionAttestation<EncryptionScheme, T>>;
|
|
43
43
|
export declare function attestedCompute<T extends SupportedFheType>({ executorAddress, lhsHandle, op, rhsPlaintext, backoffConfig, walletClient, kmsQuorumClient, chainId, reencryptPubKey, }: {
|
|
44
44
|
executorAddress: HexString;
|
|
45
45
|
lhsHandle: HexString;
|
|
@@ -51,7 +51,7 @@ export declare function attestedCompute<T extends SupportedFheType>({ executorAd
|
|
|
51
51
|
chainId: SupportedChainId;
|
|
52
52
|
reencryptPubKey: Uint8Array;
|
|
53
53
|
reencryptKeypair?: never;
|
|
54
|
-
}): Promise<EncryptedDecryptionAttestation<
|
|
54
|
+
}): Promise<EncryptedDecryptionAttestation<EncryptionScheme, T>>;
|
|
55
55
|
export declare function attestedCompute<T extends SupportedFheType>({ executorAddress, lhsHandle, op, rhsPlaintext, backoffConfig, walletClient, kmsQuorumClient, chainId, }: {
|
|
56
56
|
executorAddress: HexString;
|
|
57
57
|
lhsHandle: HexString;
|
|
@@ -63,4 +63,4 @@ export declare function attestedCompute<T extends SupportedFheType>({ executorAd
|
|
|
63
63
|
chainId: SupportedChainId;
|
|
64
64
|
reencryptPubKey?: never;
|
|
65
65
|
reencryptKeypair?: never;
|
|
66
|
-
}): Promise<DecryptionAttestation<
|
|
66
|
+
}): Promise<DecryptionAttestation<EncryptionScheme, T>>;
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import type { Account, Chain, PublicClient, Transport, WalletClient } from 'viem';
|
|
2
2
|
import { type HexString } from '../binary.js';
|
|
3
3
|
import { type SupportedChainId } from '../chain.js';
|
|
4
|
-
import {
|
|
4
|
+
import { EncryptionScheme, type SupportedFheType } from '../encryption/encryption.js';
|
|
5
5
|
import { KmsQuorumClient } from '../kms/quorumClient.js';
|
|
6
|
-
import type {
|
|
6
|
+
import type { XwingKeypair } from '../lite/xwing.js';
|
|
7
7
|
import type { BackoffConfig } from '../retry.js';
|
|
8
8
|
import { type DecryptionAttestation, type EncryptedDecryptionAttestation } from './types.js';
|
|
9
9
|
export declare const ATTESTED_DECRYPT_DOMAIN_NAME = "IncoAttestedDecrypt";
|
|
@@ -34,7 +34,7 @@ export declare function attestedDecrypt({ handles, backoffConfig, chainId, kmsQu
|
|
|
34
34
|
chainId: SupportedChainId;
|
|
35
35
|
kmsQuorumClient: KmsQuorumClient;
|
|
36
36
|
executorAddress: HexString;
|
|
37
|
-
}): Promise<Array<DecryptionAttestation<
|
|
37
|
+
}): Promise<Array<DecryptionAttestation<EncryptionScheme, SupportedFheType>>>;
|
|
38
38
|
/**
|
|
39
39
|
* Decrypt multiple handles in a single attested request.
|
|
40
40
|
* Returns an array of attestations aligned with the response ordering.
|
|
@@ -49,10 +49,10 @@ export declare function attestedDecrypt({ handles, backoffConfig, walletClient,
|
|
|
49
49
|
walletClient: WalletClient<Transport, Chain, Account>;
|
|
50
50
|
chainId: SupportedChainId;
|
|
51
51
|
reencryptPubKey: Uint8Array;
|
|
52
|
-
reencryptKeypair:
|
|
52
|
+
reencryptKeypair: XwingKeypair;
|
|
53
53
|
kmsQuorumClient: KmsQuorumClient;
|
|
54
54
|
executorAddress: HexString;
|
|
55
|
-
}): Promise<Array<DecryptionAttestation<
|
|
55
|
+
}): Promise<Array<DecryptionAttestation<EncryptionScheme, SupportedFheType>>>;
|
|
56
56
|
/**
|
|
57
57
|
* Decrypt multiple handles in a single attested request.
|
|
58
58
|
* Returns an array of attestations aligned with the response ordering.
|
|
@@ -70,7 +70,7 @@ export declare function attestedDecrypt({ handles, backoffConfig, walletClient,
|
|
|
70
70
|
reencryptKeypair?: never;
|
|
71
71
|
kmsQuorumClient: KmsQuorumClient;
|
|
72
72
|
executorAddress: HexString;
|
|
73
|
-
}): Promise<Array<EncryptedDecryptionAttestation<
|
|
73
|
+
}): Promise<Array<EncryptedDecryptionAttestation<EncryptionScheme, SupportedFheType>>>;
|
|
74
74
|
/**
|
|
75
75
|
* Decrypt multiple handles in a single attested request.
|
|
76
76
|
* Returns an array of attestations aligned with the response ordering.
|
|
@@ -88,9 +88,9 @@ export declare function attestedDecrypt({ handles, backoffConfig, walletClient,
|
|
|
88
88
|
reencryptKeypair?: never;
|
|
89
89
|
kmsQuorumClient: KmsQuorumClient;
|
|
90
90
|
executorAddress: HexString;
|
|
91
|
-
}): Promise<Array<DecryptionAttestation<
|
|
91
|
+
}): Promise<Array<DecryptionAttestation<EncryptionScheme, SupportedFheType>>>;
|
|
92
92
|
export declare function fetchEip712DomainVersion(executorAddress: HexString | undefined, defaultVersion: string, walletClient?: WalletClient<Transport, Chain, Account> | PublicClient<Transport, Chain>): Promise<string>;
|
|
93
|
-
export declare function decryptEncryptedAttestations(attestations: Array<DecryptionAttestation<
|
|
93
|
+
export declare function decryptEncryptedAttestations(attestations: Array<DecryptionAttestation<EncryptionScheme, SupportedFheType> | EncryptedDecryptionAttestation<EncryptionScheme, SupportedFheType>>, reencryptKeypair: XwingKeypair): Promise<Array<DecryptionAttestation<EncryptionScheme, SupportedFheType>>>;
|
|
94
94
|
/**
|
|
95
95
|
* Validates a handle format.
|
|
96
96
|
* @param handle - The handle to validate
|
|
@@ -14,19 +14,19 @@ export type SupportedFheTypeName = typeof SupportedFheTypeName.Type;
|
|
|
14
14
|
export declare const SupportedFheType: Schema.SchemaClass<0 | 5 | 7 | 8, 0 | 5 | 7 | 8, never>;
|
|
15
15
|
export type SupportedFheType = typeof SupportedFheType.Type;
|
|
16
16
|
export declare const encryptionSchemes: {
|
|
17
|
-
readonly
|
|
17
|
+
readonly xwing: 2;
|
|
18
18
|
};
|
|
19
19
|
export declare function getEncryptionSchemeName(scheme: number): string;
|
|
20
20
|
export type EncryptionSchemes = typeof encryptionSchemes;
|
|
21
|
-
export type
|
|
22
|
-
export declare const EncryptionScheme: Schema.Literal<[
|
|
21
|
+
export type XwingScheme = EncryptionSchemes['xwing'];
|
|
22
|
+
export declare const EncryptionScheme: Schema.Literal<[2]>;
|
|
23
23
|
export type EncryptionScheme = typeof EncryptionScheme.Type;
|
|
24
24
|
type DistType<P, S extends EncryptionScheme, T extends SupportedFheType> = P extends any ? P & {
|
|
25
25
|
scheme: S;
|
|
26
26
|
type: T;
|
|
27
27
|
} : never;
|
|
28
28
|
export declare const Ciphertext: Schema.Struct<{
|
|
29
|
-
scheme: Schema.Literal<[
|
|
29
|
+
scheme: Schema.Literal<[2]>;
|
|
30
30
|
type: Schema.SchemaClass<0 | 5 | 7 | 8, 0 | 5 | 7 | 8, never>;
|
|
31
31
|
value: Schema.TemplateLiteral<`0x${string}`>;
|
|
32
32
|
}>;
|
|
@@ -34,7 +34,7 @@ export type Ciphertext = typeof Ciphertext.Type;
|
|
|
34
34
|
export type CiphertextOf<S extends EncryptionScheme, T extends SupportedFheType> = DistType<Ciphertext, S, T>;
|
|
35
35
|
export declare const CiphertextWithContext: Schema.Struct<{
|
|
36
36
|
ciphertext: Schema.Struct<{
|
|
37
|
-
scheme: Schema.Literal<[
|
|
37
|
+
scheme: Schema.Literal<[2]>;
|
|
38
38
|
type: Schema.SchemaClass<0 | 5 | 7 | 8, 0 | 5 | 7 | 8, never>;
|
|
39
39
|
value: Schema.TemplateLiteral<`0x${string}`>;
|
|
40
40
|
}>;
|
|
@@ -52,7 +52,7 @@ export type CiphertextWithContextOf<S extends EncryptionScheme, T extends Suppor
|
|
|
52
52
|
};
|
|
53
53
|
export declare const EncryptResult: Schema.Struct<{
|
|
54
54
|
ciphertext: Schema.Struct<{
|
|
55
|
-
scheme: Schema.Literal<[
|
|
55
|
+
scheme: Schema.Literal<[2]>;
|
|
56
56
|
type: Schema.SchemaClass<0 | 5 | 7 | 8, 0 | 5 | 7 | 8, never>;
|
|
57
57
|
value: Schema.TemplateLiteral<`0x${string}`>;
|
|
58
58
|
}>;
|
|
@@ -71,11 +71,11 @@ export type EncryptResultOf<S extends EncryptionScheme, T extends SupportedFheTy
|
|
|
71
71
|
ciphertext: CiphertextOf<S, T>;
|
|
72
72
|
};
|
|
73
73
|
export declare const Plaintext: Schema.Union<[Schema.Struct<{
|
|
74
|
-
scheme: Schema.Literal<[
|
|
74
|
+
scheme: Schema.Literal<[2]>;
|
|
75
75
|
type: Schema.Literal<[5, 7, 8]>;
|
|
76
76
|
value: typeof Schema.BigInt;
|
|
77
77
|
}>, Schema.Struct<{
|
|
78
|
-
scheme: Schema.Literal<[
|
|
78
|
+
scheme: Schema.Literal<[2]>;
|
|
79
79
|
type: Schema.Literal<[0]>;
|
|
80
80
|
value: typeof Schema.Boolean;
|
|
81
81
|
}>]>;
|
|
@@ -83,11 +83,11 @@ export type Plaintext = typeof Plaintext.Type;
|
|
|
83
83
|
export type PlaintextOf<S extends EncryptionScheme, T extends SupportedFheType> = DistType<Plaintext, S, T>;
|
|
84
84
|
export declare const PlaintextWithContext: Schema.Struct<{
|
|
85
85
|
plaintext: Schema.Union<[Schema.Struct<{
|
|
86
|
-
scheme: Schema.Literal<[
|
|
86
|
+
scheme: Schema.Literal<[2]>;
|
|
87
87
|
type: Schema.Literal<[5, 7, 8]>;
|
|
88
88
|
value: typeof Schema.BigInt;
|
|
89
89
|
}>, Schema.Struct<{
|
|
90
|
-
scheme: Schema.Literal<[
|
|
90
|
+
scheme: Schema.Literal<[2]>;
|
|
91
91
|
type: Schema.Literal<[0]>;
|
|
92
92
|
value: typeof Schema.Boolean;
|
|
93
93
|
}>]>;
|