@inco/lightning-js 0.0.0-bootstrap.0
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/LICENSE +201 -0
- package/README.md +587 -0
- package/dist/cjs/advancedacl/index.d.ts +2 -0
- package/dist/cjs/advancedacl/index.js +19 -0
- package/dist/cjs/advancedacl/session-key.d.ts +95 -0
- package/dist/cjs/advancedacl/session-key.js +376 -0
- package/dist/cjs/advancedacl/types.d.ts +16 -0
- package/dist/cjs/advancedacl/types.js +3 -0
- package/dist/cjs/attestedcompute/attested-compute.d.ts +65 -0
- package/dist/cjs/attestedcompute/attested-compute.js +80 -0
- package/dist/cjs/attestedcompute/types.d.ts +35 -0
- package/dist/cjs/attestedcompute/types.js +46 -0
- package/dist/cjs/attesteddecrypt/attested-decrypt.d.ts +61 -0
- package/dist/cjs/attesteddecrypt/attested-decrypt.js +118 -0
- package/dist/cjs/attesteddecrypt/index.d.ts +1 -0
- package/dist/cjs/attesteddecrypt/index.js +18 -0
- package/dist/cjs/attesteddecrypt/types.d.ts +27 -0
- package/dist/cjs/attesteddecrypt/types.js +16 -0
- package/dist/cjs/attestedreveal/attested-reveal.d.ts +21 -0
- package/dist/cjs/attestedreveal/attested-reveal.js +31 -0
- package/dist/cjs/attestedreveal/index.d.ts +2 -0
- package/dist/cjs/attestedreveal/index.js +21 -0
- package/dist/cjs/attestedreveal/types.d.ts +4 -0
- package/dist/cjs/attestedreveal/types.js +13 -0
- package/dist/cjs/binary.d.ts +104 -0
- package/dist/cjs/binary.js +171 -0
- package/dist/cjs/chain.d.ts +50 -0
- package/dist/cjs/chain.js +62 -0
- package/dist/cjs/eip712/eip712.d.ts +18 -0
- package/dist/cjs/eip712/eip712.js +51 -0
- package/dist/cjs/eip712/index.d.ts +1 -0
- package/dist/cjs/eip712/index.js +8 -0
- package/dist/cjs/elistattesteddecrypt/elist-attested-decrypt.d.ts +51 -0
- package/dist/cjs/elistattesteddecrypt/elist-attested-decrypt.js +94 -0
- package/dist/cjs/elistattesteddecrypt/index.d.ts +2 -0
- package/dist/cjs/elistattesteddecrypt/index.js +22 -0
- package/dist/cjs/elistattesteddecrypt/types.d.ts +31 -0
- package/dist/cjs/elistattesteddecrypt/types.js +16 -0
- package/dist/cjs/encryption/encryption.d.ts +235 -0
- package/dist/cjs/encryption/encryption.js +226 -0
- package/dist/cjs/encryption/index.d.ts +1 -0
- package/dist/cjs/encryption/index.js +19 -0
- package/dist/cjs/generated/abis/add-two.d.ts +117 -0
- package/dist/cjs/generated/abis/add-two.js +80 -0
- package/dist/cjs/generated/abis/lightning.d.ts +3362 -0
- package/dist/cjs/generated/abis/lightning.js +2445 -0
- package/dist/cjs/generated/abis/test-elist.d.ts +276 -0
- package/dist/cjs/generated/abis/test-elist.js +168 -0
- package/dist/cjs/generated/abis/verifier.d.ts +1353 -0
- package/dist/cjs/generated/abis/verifier.js +954 -0
- package/dist/cjs/generated/es/inco/covalidator/compute/v1/server_pb.d.ts +1494 -0
- package/dist/cjs/generated/es/inco/covalidator/compute/v1/server_pb.js +395 -0
- package/dist/cjs/generated/es/inco/covalidator/compute/v1/types_pb.d.ts +247 -0
- package/dist/cjs/generated/es/inco/covalidator/compute/v1/types_pb.js +80 -0
- package/dist/cjs/generated/es/inco/helioswrapper/v1/helioswrapper_pb.d.ts +77 -0
- package/dist/cjs/generated/es/inco/helioswrapper/v1/helioswrapper_pb.js +28 -0
- package/dist/cjs/generated/es/inco/kms/lite/v1/kms_service_pb.d.ts +685 -0
- package/dist/cjs/generated/es/inco/kms/lite/v1/kms_service_pb.js +100 -0
- package/dist/cjs/generated/es/inco/kms/lite/v1/types_pb.d.ts +289 -0
- package/dist/cjs/generated/es/inco/kms/lite/v1/types_pb.js +136 -0
- package/dist/cjs/generated/es/inco/sealingfetcher/v1/sealingfetcher_pb.d.ts +371 -0
- package/dist/cjs/generated/es/inco/sealingfetcher/v1/sealingfetcher_pb.js +88 -0
- package/dist/cjs/generated/lightning.d.ts +830 -0
- package/dist/cjs/generated/lightning.js +872 -0
- package/dist/cjs/generated/local-node.d.ts +50 -0
- package/dist/cjs/generated/local-node.js +107 -0
- package/dist/cjs/handle.d.ts +123 -0
- package/dist/cjs/handle.js +221 -0
- package/dist/cjs/index.d.ts +5 -0
- package/dist/cjs/index.js +31 -0
- package/dist/cjs/kms/client.d.ts +12 -0
- package/dist/cjs/kms/client.js +47 -0
- package/dist/cjs/kms/quorumClient.d.ts +65 -0
- package/dist/cjs/kms/quorumClient.js +463 -0
- package/dist/cjs/kms/quorumConsistency.d.ts +82 -0
- package/dist/cjs/kms/quorumConsistency.js +269 -0
- package/dist/cjs/kms/signatureVerification.d.ts +35 -0
- package/dist/cjs/kms/signatureVerification.js +88 -0
- package/dist/cjs/kms/thresholdPromises.d.ts +8 -0
- package/dist/cjs/kms/thresholdPromises.js +62 -0
- package/dist/cjs/lite/attested-compute.d.ts +6 -0
- package/dist/cjs/lite/attested-compute.js +8 -0
- package/dist/cjs/lite/attested-decrypt.d.ts +4 -0
- package/dist/cjs/lite/attested-decrypt.js +6 -0
- package/dist/cjs/lite/deployments.d.ts +24 -0
- package/dist/cjs/lite/deployments.js +21 -0
- package/dist/cjs/lite/hadu.d.ts +4 -0
- package/dist/cjs/lite/hadu.js +28 -0
- package/dist/cjs/lite/index.d.ts +13 -0
- package/dist/cjs/lite/index.js +31 -0
- package/dist/cjs/lite/lightning.d.ts +459 -0
- package/dist/cjs/lite/lightning.js +696 -0
- package/dist/cjs/lite/types.d.ts +47 -0
- package/dist/cjs/lite/types.js +3 -0
- package/dist/cjs/lite/xwing.d.ts +154 -0
- package/dist/cjs/lite/xwing.js +326 -0
- package/dist/cjs/local/index.d.ts +1 -0
- package/dist/cjs/local/index.js +18 -0
- package/dist/cjs/local/local-node.d.ts +37 -0
- package/dist/cjs/local/local-node.js +80 -0
- package/dist/cjs/reencryption/eip712.d.ts +56 -0
- package/dist/cjs/reencryption/eip712.js +90 -0
- package/dist/cjs/reencryption/index.d.ts +2 -0
- package/dist/cjs/reencryption/index.js +19 -0
- package/dist/cjs/reencryption/types.d.ts +48 -0
- package/dist/cjs/reencryption/types.js +3 -0
- package/dist/cjs/retry.d.ts +30 -0
- package/dist/cjs/retry.js +87 -0
- package/dist/cjs/schema.d.ts +4 -0
- package/dist/cjs/schema.js +19 -0
- package/dist/cjs/test/mocks.d.ts +20 -0
- package/dist/cjs/test/mocks.js +72 -0
- package/dist/cjs/viem.d.ts +1141 -0
- package/dist/cjs/viem.js +36 -0
- package/dist/esm/advancedacl/index.d.ts +2 -0
- package/dist/esm/advancedacl/index.js +3 -0
- package/dist/esm/advancedacl/session-key.d.ts +95 -0
- package/dist/esm/advancedacl/session-key.js +367 -0
- package/dist/esm/advancedacl/types.d.ts +16 -0
- package/dist/esm/advancedacl/types.js +2 -0
- package/dist/esm/attestedcompute/attested-compute.d.ts +65 -0
- package/dist/esm/attestedcompute/attested-compute.js +76 -0
- package/dist/esm/attestedcompute/types.d.ts +35 -0
- package/dist/esm/attestedcompute/types.js +42 -0
- package/dist/esm/attesteddecrypt/attested-decrypt.d.ts +61 -0
- package/dist/esm/attesteddecrypt/attested-decrypt.js +112 -0
- package/dist/esm/attesteddecrypt/index.d.ts +1 -0
- package/dist/esm/attesteddecrypt/index.js +2 -0
- package/dist/esm/attesteddecrypt/types.d.ts +27 -0
- package/dist/esm/attesteddecrypt/types.js +12 -0
- package/dist/esm/attestedreveal/attested-reveal.d.ts +21 -0
- package/dist/esm/attestedreveal/attested-reveal.js +28 -0
- package/dist/esm/attestedreveal/index.d.ts +2 -0
- package/dist/esm/attestedreveal/index.js +3 -0
- package/dist/esm/attestedreveal/types.d.ts +4 -0
- package/dist/esm/attestedreveal/types.js +9 -0
- package/dist/esm/binary.d.ts +104 -0
- package/dist/esm/binary.js +155 -0
- package/dist/esm/chain.d.ts +50 -0
- package/dist/esm/chain.js +58 -0
- package/dist/esm/eip712/eip712.d.ts +18 -0
- package/dist/esm/eip712/eip712.js +46 -0
- package/dist/esm/eip712/index.d.ts +1 -0
- package/dist/esm/eip712/index.js +2 -0
- package/dist/esm/elistattesteddecrypt/elist-attested-decrypt.d.ts +51 -0
- package/dist/esm/elistattesteddecrypt/elist-attested-decrypt.js +89 -0
- package/dist/esm/elistattesteddecrypt/index.d.ts +2 -0
- package/dist/esm/elistattesteddecrypt/index.js +3 -0
- package/dist/esm/elistattesteddecrypt/types.d.ts +31 -0
- package/dist/esm/elistattesteddecrypt/types.js +12 -0
- package/dist/esm/encryption/encryption.d.ts +235 -0
- package/dist/esm/encryption/encryption.js +214 -0
- package/dist/esm/encryption/index.d.ts +1 -0
- package/dist/esm/encryption/index.js +2 -0
- package/dist/esm/generated/abis/add-two.d.ts +117 -0
- package/dist/esm/generated/abis/add-two.js +77 -0
- package/dist/esm/generated/abis/lightning.d.ts +3362 -0
- package/dist/esm/generated/abis/lightning.js +2442 -0
- package/dist/esm/generated/abis/test-elist.d.ts +276 -0
- package/dist/esm/generated/abis/test-elist.js +165 -0
- package/dist/esm/generated/abis/verifier.d.ts +1353 -0
- package/dist/esm/generated/abis/verifier.js +951 -0
- package/dist/esm/generated/es/inco/covalidator/compute/v1/server_pb.d.ts +1494 -0
- package/dist/esm/generated/es/inco/covalidator/compute/v1/server_pb.js +392 -0
- package/dist/esm/generated/es/inco/covalidator/compute/v1/types_pb.d.ts +247 -0
- package/dist/esm/generated/es/inco/covalidator/compute/v1/types_pb.js +77 -0
- package/dist/esm/generated/es/inco/helioswrapper/v1/helioswrapper_pb.d.ts +77 -0
- package/dist/esm/generated/es/inco/helioswrapper/v1/helioswrapper_pb.js +25 -0
- package/dist/esm/generated/es/inco/kms/lite/v1/kms_service_pb.d.ts +685 -0
- package/dist/esm/generated/es/inco/kms/lite/v1/kms_service_pb.js +97 -0
- package/dist/esm/generated/es/inco/kms/lite/v1/types_pb.d.ts +289 -0
- package/dist/esm/generated/es/inco/kms/lite/v1/types_pb.js +133 -0
- package/dist/esm/generated/es/inco/sealingfetcher/v1/sealingfetcher_pb.d.ts +371 -0
- package/dist/esm/generated/es/inco/sealingfetcher/v1/sealingfetcher_pb.js +85 -0
- package/dist/esm/generated/lightning.d.ts +830 -0
- package/dist/esm/generated/lightning.js +869 -0
- package/dist/esm/generated/local-node.d.ts +50 -0
- package/dist/esm/generated/local-node.js +104 -0
- package/dist/esm/handle.d.ts +123 -0
- package/dist/esm/handle.js +212 -0
- package/dist/esm/index.d.ts +5 -0
- package/dist/esm/index.js +6 -0
- package/dist/esm/kms/client.d.ts +12 -0
- package/dist/esm/kms/client.js +40 -0
- package/dist/esm/kms/quorumClient.d.ts +65 -0
- package/dist/esm/kms/quorumClient.js +459 -0
- package/dist/esm/kms/quorumConsistency.d.ts +82 -0
- package/dist/esm/kms/quorumConsistency.js +260 -0
- package/dist/esm/kms/signatureVerification.d.ts +35 -0
- package/dist/esm/kms/signatureVerification.js +84 -0
- package/dist/esm/kms/thresholdPromises.d.ts +8 -0
- package/dist/esm/kms/thresholdPromises.js +59 -0
- package/dist/esm/lite/attested-compute.d.ts +6 -0
- package/dist/esm/lite/attested-compute.js +4 -0
- package/dist/esm/lite/attested-decrypt.d.ts +4 -0
- package/dist/esm/lite/attested-decrypt.js +3 -0
- package/dist/esm/lite/deployments.d.ts +24 -0
- package/dist/esm/lite/deployments.js +17 -0
- package/dist/esm/lite/hadu.d.ts +4 -0
- package/dist/esm/lite/hadu.js +24 -0
- package/dist/esm/lite/index.d.ts +13 -0
- package/dist/esm/lite/index.js +10 -0
- package/dist/esm/lite/lightning.d.ts +459 -0
- package/dist/esm/lite/lightning.js +692 -0
- package/dist/esm/lite/types.d.ts +47 -0
- package/dist/esm/lite/types.js +2 -0
- package/dist/esm/lite/xwing.d.ts +154 -0
- package/dist/esm/lite/xwing.js +311 -0
- package/dist/esm/local/index.d.ts +1 -0
- package/dist/esm/local/index.js +2 -0
- package/dist/esm/local/local-node.d.ts +37 -0
- package/dist/esm/local/local-node.js +76 -0
- package/dist/esm/reencryption/eip712.d.ts +56 -0
- package/dist/esm/reencryption/eip712.js +87 -0
- package/dist/esm/reencryption/index.d.ts +2 -0
- package/dist/esm/reencryption/index.js +3 -0
- package/dist/esm/reencryption/types.d.ts +48 -0
- package/dist/esm/reencryption/types.js +2 -0
- package/dist/esm/retry.d.ts +30 -0
- package/dist/esm/retry.js +82 -0
- package/dist/esm/schema.d.ts +4 -0
- package/dist/esm/schema.js +15 -0
- package/dist/esm/test/mocks.d.ts +20 -0
- package/dist/esm/test/mocks.js +64 -0
- package/dist/esm/viem.d.ts +1141 -0
- package/dist/esm/viem.js +32 -0
- package/dist/types/advancedacl/index.d.ts +2 -0
- package/dist/types/advancedacl/session-key.d.ts +95 -0
- package/dist/types/advancedacl/types.d.ts +16 -0
- package/dist/types/attestedcompute/attested-compute.d.ts +65 -0
- package/dist/types/attestedcompute/types.d.ts +35 -0
- package/dist/types/attesteddecrypt/attested-decrypt.d.ts +61 -0
- package/dist/types/attesteddecrypt/index.d.ts +1 -0
- package/dist/types/attesteddecrypt/types.d.ts +27 -0
- package/dist/types/attestedreveal/attested-reveal.d.ts +21 -0
- package/dist/types/attestedreveal/index.d.ts +2 -0
- package/dist/types/attestedreveal/types.d.ts +4 -0
- package/dist/types/binary.d.ts +104 -0
- package/dist/types/chain.d.ts +50 -0
- package/dist/types/eip712/eip712.d.ts +18 -0
- package/dist/types/eip712/index.d.ts +1 -0
- package/dist/types/elistattesteddecrypt/elist-attested-decrypt.d.ts +51 -0
- package/dist/types/elistattesteddecrypt/index.d.ts +2 -0
- package/dist/types/elistattesteddecrypt/types.d.ts +31 -0
- package/dist/types/encryption/encryption.d.ts +235 -0
- package/dist/types/encryption/index.d.ts +1 -0
- package/dist/types/generated/abis/add-two.d.ts +117 -0
- package/dist/types/generated/abis/lightning.d.ts +3362 -0
- package/dist/types/generated/abis/test-elist.d.ts +276 -0
- package/dist/types/generated/abis/verifier.d.ts +1353 -0
- package/dist/types/generated/es/inco/covalidator/compute/v1/server_pb.d.ts +1494 -0
- package/dist/types/generated/es/inco/covalidator/compute/v1/types_pb.d.ts +247 -0
- package/dist/types/generated/es/inco/helioswrapper/v1/helioswrapper_pb.d.ts +77 -0
- package/dist/types/generated/es/inco/kms/lite/v1/kms_service_pb.d.ts +685 -0
- package/dist/types/generated/es/inco/kms/lite/v1/types_pb.d.ts +289 -0
- package/dist/types/generated/es/inco/sealingfetcher/v1/sealingfetcher_pb.d.ts +371 -0
- package/dist/types/generated/lightning.d.ts +830 -0
- package/dist/types/generated/local-node.d.ts +50 -0
- package/dist/types/handle.d.ts +123 -0
- package/dist/types/index.d.ts +5 -0
- package/dist/types/kms/client.d.ts +12 -0
- package/dist/types/kms/quorumClient.d.ts +65 -0
- package/dist/types/kms/quorumConsistency.d.ts +82 -0
- package/dist/types/kms/signatureVerification.d.ts +35 -0
- package/dist/types/kms/thresholdPromises.d.ts +8 -0
- package/dist/types/lite/attested-compute.d.ts +6 -0
- package/dist/types/lite/attested-decrypt.d.ts +4 -0
- package/dist/types/lite/deployments.d.ts +24 -0
- package/dist/types/lite/hadu.d.ts +4 -0
- package/dist/types/lite/index.d.ts +13 -0
- package/dist/types/lite/lightning.d.ts +459 -0
- package/dist/types/lite/types.d.ts +47 -0
- package/dist/types/lite/xwing.d.ts +154 -0
- package/dist/types/local/index.d.ts +1 -0
- package/dist/types/local/local-node.d.ts +37 -0
- package/dist/types/reencryption/eip712.d.ts +56 -0
- package/dist/types/reencryption/index.d.ts +2 -0
- package/dist/types/reencryption/types.d.ts +48 -0
- package/dist/types/retry.d.ts +30 -0
- package/dist/types/schema.d.ts +4 -0
- package/dist/types/test/mocks.d.ts +20 -0
- package/dist/types/viem.d.ts +1141 -0
- package/package.json +129 -0
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import type { HexString } from '../binary.js';
|
|
2
|
+
import type { BackoffConfig } from '../retry.js';
|
|
3
|
+
import type { XwingKeypair } from './xwing.js';
|
|
4
|
+
/**
|
|
5
|
+
* Options for attested methods when no reencrypt keys are provided.
|
|
6
|
+
* The KMS generates an ephemeral keypair and returns plaintext.
|
|
7
|
+
*/
|
|
8
|
+
export type AttestedOptsEphemeral = {
|
|
9
|
+
reencryptPubKey?: never;
|
|
10
|
+
reencryptKeypair?: never;
|
|
11
|
+
backoffConfig?: Partial<BackoffConfig>;
|
|
12
|
+
};
|
|
13
|
+
/**
|
|
14
|
+
* Options for attested methods when only a reencrypt public key is provided.
|
|
15
|
+
* The KMS encrypts the result under the provided key; caller receives ciphertext.
|
|
16
|
+
*/
|
|
17
|
+
export type AttestedOptsEncrypted = {
|
|
18
|
+
reencryptPubKey: Uint8Array;
|
|
19
|
+
reencryptKeypair?: never;
|
|
20
|
+
backoffConfig?: Partial<BackoffConfig>;
|
|
21
|
+
};
|
|
22
|
+
/**
|
|
23
|
+
* Options for attested methods when both a reencrypt key and keypair are provided.
|
|
24
|
+
* The KMS reencrypts under the public key; the SDK decrypts locally using the keypair.
|
|
25
|
+
*/
|
|
26
|
+
export type AttestedOptsDecrypted = {
|
|
27
|
+
reencryptPubKey: Uint8Array;
|
|
28
|
+
reencryptKeypair: XwingKeypair;
|
|
29
|
+
backoffConfig?: Partial<BackoffConfig>;
|
|
30
|
+
};
|
|
31
|
+
/** Union of all valid opts for attestedDecrypt / attestedCompute. */
|
|
32
|
+
export type AttestedOpts = AttestedOptsEphemeral | AttestedOptsEncrypted | AttestedOptsDecrypted;
|
|
33
|
+
/** Extends the base opts with voucher-specific fields for WithVoucher methods. */
|
|
34
|
+
export type AttestedWithVoucherOptsEphemeral = AttestedOptsEphemeral & {
|
|
35
|
+
requesterArgData?: HexString;
|
|
36
|
+
};
|
|
37
|
+
export type AttestedWithVoucherOptsEncrypted = AttestedOptsEncrypted & {
|
|
38
|
+
requesterArgData?: HexString;
|
|
39
|
+
};
|
|
40
|
+
export type AttestedWithVoucherOptsDecrypted = AttestedOptsDecrypted & {
|
|
41
|
+
requesterArgData?: HexString;
|
|
42
|
+
};
|
|
43
|
+
export type AttestedWithVoucherOpts = AttestedWithVoucherOptsEphemeral | AttestedWithVoucherOptsEncrypted | AttestedWithVoucherOptsDecrypted;
|
|
44
|
+
/** Options for attestedReveal. */
|
|
45
|
+
export type AttestedRevealOpts = {
|
|
46
|
+
backoffConfig?: Partial<BackoffConfig>;
|
|
47
|
+
};
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
import { Decryptor, Encryptor, XwingScheme } from '../encryption/encryption.js';
|
|
2
|
+
import { PubKeyEncodable } from '../reencryption/index.js';
|
|
3
|
+
/**
|
|
4
|
+
* X-Wing public key size in bytes.
|
|
5
|
+
* Combining ML-KEM-768 (1184 bytes) and X25519 (32 bytes).
|
|
6
|
+
*/
|
|
7
|
+
export declare const XWING_PUBLIC_KEY_SIZE: number;
|
|
8
|
+
/**
|
|
9
|
+
* WARNING: TEST KEY - DO NOT USE IN PRODUCTION
|
|
10
|
+
* This is a well-known test seed (all zeros) that provides NO security.
|
|
11
|
+
* Anyone can derive the private key from this seed and decrypt all data.
|
|
12
|
+
* Only use for local development and testing.
|
|
13
|
+
*/
|
|
14
|
+
export declare const TEST_NETWORK_SEED_KEY = "0x0000000000000000000000000000000000000000000000000000000000000000";
|
|
15
|
+
/**
|
|
16
|
+
* WARNING: TEST KEY - DO NOT USE IN PRODUCTION
|
|
17
|
+
* This is the public key derived from TEST_NETWORK_SEED_KEY (all zeros).
|
|
18
|
+
* Data encrypted with this key can be decrypted by anyone who knows the seed.
|
|
19
|
+
* Only use for local development and testing.
|
|
20
|
+
*
|
|
21
|
+
* Generated from Go with seed of all zeros using HPKE layer: hpke.KEM_XWING.Scheme().DeriveKeyPair(seed)
|
|
22
|
+
* This matches the key used in covalidator's GetXwingPrivateKeyForTesting() via DeriveXwingPrivateKey
|
|
23
|
+
*/
|
|
24
|
+
export declare const TEST_NETWORK_XWING_PUBKEY = "0xca882388911c7c762aafc20debd63e845b3bed28c9d5262cdea7771fb31bd660a1ae7b395a9a7df3d12c7b118e8eda5057572c1ba05cd9b635edf33dabca4cac7291e0848f19c20e5beb850c3818f3543d49b3a5c729cb86a28fda539775d04feda112fe0c81d138aaf623aea7d507a4e826e890105db6065a44aba76a10d771c00d1b33f4ac51869806aae18eada68f19047024542d64a7aa1c91a5e1aa49d93613b5224b415bcc7aa166e4b55033438d20c641f9664fdb1689b53208181463e3d1325d46b30f07c5945b7e3fa1418bf833d975258461b294664eaf60795964924a280729c10a37fc6e967440bdd55d4ca53596286383481291152365303d44517cef369c00933b0b30368a230353e729c031075e8388673678a56b3ba84a165b28096ee9bd684483e1844258b451c365c41fa534152a3b64120041450128e960c7d6437d717ee266bdde7aaeec225ed93b958d188e97407349f1382976ca47d761ecc59a6f394487eb015c083abb490584677240eb47f838c838568a496119378b8bb81484610a50792b5d9c9939db188e7d0249d3cb918c436f111a2898849b286b0743a22c57464c709c5eaceac1ba493adca3328c0b14b5e38d3aea74e328b622b17e7181c35ad11c2103bdb7f2b209d93dcbc4ab61a06bc37139e6d2b7a06c5b7e9267bef3a8918a706f793271a5acc2574532da79e5a10cf074b998147a3c43586a411a513bba0d11cc19a36c83b19277f28022c88b120abfdba7076a8263e05336e3245aef7033eb3c762b5bbfa5791ac960398b649d5cbb652ddc6b2398143a0861ab3b410b696328879c099098adf819fbf7ac170030e86675e7f45c22ac9e1cf52c3102487bb0b91ab592afdc69c6e3a9b71876b86260b6c736b8291098f1130d3b763525cbad540ce2d042eacb6ed43b7bcba898f712c412f26066e09945f44ec7026c8ef959831abc10719d2017a12a41728b41c02371a5f5756ebc79406be708ea41bbd21563c874a0b791a3b4e4224a609967004f065c5ab4f3b4c61cb35df70573269da53179c3701fc5205f61974426f9b794c1b5826494b70842b6920c17752029369264dc8590b898b85c9d89a258e1f46c1b0490efd17c485cb51687cea272041e90b8e629521d3c5e3fa7518161bad7a159295b63cc6c0077897b53d47db8bc0ecb820f550705b65715a1a1094d04854f56acd26aa0baa10cb8447fad6211f53105796a42882328e6852e8de821c283b51eaab9bc95c4dc53615626049d63b1f9a457193805276b1905b0ab39353b5cf91fdd6023d4d816aef9cce4a3cfb3d12190172df221ae61d427563a098cc60e3dc9997ef54959180be5dc64a911157db6be3a01be2ee343caab33b8729abf0c50c674758c511291941fceac646232920907c2e88b9ec10211161729c797643a553a6ae5c4b7483c04e3263bd291e311c609071348b7c3310aa97d6b8318e0a4afe8399fa22f951049a9bb8860f7c69a333d3cc1aaf0129ab560713bf29eb3a01f9a276c78e54e3a3648b2447c80242b271b11406866389426d8b59796540d6b5702092ab21ee217c075cfc0c17ef826ce9ea29b9e61617457a5b1aaa23a58615dc53c59183beb36ea19498c21820b70ab47adeb678f1c52bf8768b3597b608ea1a8a15cd62e8a29bec4a1ac248ef9f02de0144bca06025f95a42bd6c8eaaaaaa2366328561d";
|
|
25
|
+
/**
|
|
26
|
+
* Check if a byte array matches the test seed key.
|
|
27
|
+
* Logs a warning if it does.
|
|
28
|
+
*/
|
|
29
|
+
export declare function warnIfTestSeed(seed: Uint8Array): boolean;
|
|
30
|
+
/**
|
|
31
|
+
* Check if a byte array matches the test public key.
|
|
32
|
+
* Logs a warning if it does.
|
|
33
|
+
*/
|
|
34
|
+
export declare function warnIfTestPubKey(pubKeyBytes: Uint8Array): boolean;
|
|
35
|
+
/**
|
|
36
|
+
* X-Wing keypair interface.
|
|
37
|
+
* X-Wing is a post-quantum hybrid KEM combining ML-KEM-768 and X25519.
|
|
38
|
+
* - Private key: 32-byte seed
|
|
39
|
+
* - Public key: 1216 bytes
|
|
40
|
+
* - Encapsulated key: 1120 bytes
|
|
41
|
+
*/
|
|
42
|
+
export interface XwingKeypair extends PubKeyEncodable {
|
|
43
|
+
scheme: XwingScheme;
|
|
44
|
+
publicKey: CryptoKey;
|
|
45
|
+
privateKey: CryptoKey;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Derive X-Wing keypair from a 32-byte seed (deterministic).
|
|
49
|
+
* This matches the Go implementation in covalidator/encoding/xwing.go
|
|
50
|
+
*
|
|
51
|
+
* @param seed - 32-byte seed for deterministic key derivation
|
|
52
|
+
* @returns X-Wing keypair with cached public key bytes
|
|
53
|
+
*/
|
|
54
|
+
export declare function deriveXwingKeypairFromSeed(seed: Uint8Array): Promise<XwingKeypair>;
|
|
55
|
+
/**
|
|
56
|
+
* Generate a random X-Wing keypair.
|
|
57
|
+
*
|
|
58
|
+
* @returns X-Wing keypair with cached public key bytes
|
|
59
|
+
*/
|
|
60
|
+
export declare function generateXwingKeypair(): Promise<XwingKeypair>;
|
|
61
|
+
/**
|
|
62
|
+
* Decode X-Wing public key from bytes.
|
|
63
|
+
*
|
|
64
|
+
* @param pubKeyBytes - 1216-byte X-Wing public key
|
|
65
|
+
* @returns CryptoKey for encryption operations
|
|
66
|
+
*/
|
|
67
|
+
export declare function decodeXwingPublicKey(pubKeyBytes: Uint8Array): Promise<CryptoKey>;
|
|
68
|
+
/**
|
|
69
|
+
* Decode X-Wing private key from 32-byte seed.
|
|
70
|
+
* Alias for deriveXwingKeypairFromSeed for consistency with Go API.
|
|
71
|
+
*
|
|
72
|
+
* @param seed - 32-byte seed
|
|
73
|
+
* @returns X-Wing keypair
|
|
74
|
+
*/
|
|
75
|
+
export declare function decodeXwingPrivateKey(seed: Uint8Array): Promise<XwingKeypair>;
|
|
76
|
+
/**
|
|
77
|
+
* Encode X-Wing public key to bytes.
|
|
78
|
+
*
|
|
79
|
+
* @param publicKey - CryptoKey containing X-Wing public key
|
|
80
|
+
* @returns 1216-byte serialized public key
|
|
81
|
+
*/
|
|
82
|
+
export declare function encodeXwingPublicKey(publicKey: CryptoKey): Promise<Uint8Array>;
|
|
83
|
+
/**
|
|
84
|
+
* X-Wing encryptor arguments.
|
|
85
|
+
* pubKeyA is the recipient's public key (usually the covalidator's public key).
|
|
86
|
+
*/
|
|
87
|
+
export type XwingEncryptorArgs = {
|
|
88
|
+
pubKeyA: CryptoKey;
|
|
89
|
+
};
|
|
90
|
+
/**
|
|
91
|
+
* X-Wing decryptor arguments.
|
|
92
|
+
* privKeyA is the recipient's private key (usually the covalidator's private key).
|
|
93
|
+
*/
|
|
94
|
+
export type XwingDecryptorArgs = {
|
|
95
|
+
privKeyA: XwingKeypair;
|
|
96
|
+
};
|
|
97
|
+
/**
|
|
98
|
+
* Encrypt using X-Wing HPKE (RFC 9180) with ChaCha20-Poly1305 AEAD.
|
|
99
|
+
*
|
|
100
|
+
* Output format: encappedKey (1120 bytes) || ciphertext (variable length)
|
|
101
|
+
*
|
|
102
|
+
* @param pubKeyA - Recipient's public key
|
|
103
|
+
* @param msg - Message to encrypt
|
|
104
|
+
* @param aad - Additional authenticated data (default: empty)
|
|
105
|
+
* @param info - Context info for key derivation (default: empty)
|
|
106
|
+
* @returns Encrypted data (encappedKey || ciphertext)
|
|
107
|
+
*/
|
|
108
|
+
export declare function encrypt(pubKeyA: CryptoKey, msg: Uint8Array, aad?: Uint8Array, info?: Uint8Array): Promise<Uint8Array>;
|
|
109
|
+
/**
|
|
110
|
+
* Decrypt using X-Wing HPKE (RFC 9180) with ChaCha20-Poly1305 AEAD.
|
|
111
|
+
*
|
|
112
|
+
* Input format: encappedKey (1120 bytes) || ciphertext (variable length)
|
|
113
|
+
*
|
|
114
|
+
* @param privKeyA - Recipient's private key
|
|
115
|
+
* @param encryptedData - Encrypted data (encappedKey || ciphertext)
|
|
116
|
+
* @param aad - Additional authenticated data (default: empty)
|
|
117
|
+
* @param info - Context info for key derivation (default: empty)
|
|
118
|
+
* @returns Decrypted plaintext
|
|
119
|
+
*/
|
|
120
|
+
export declare function decrypt(privKeyA: XwingKeypair, encryptedData: Uint8Array, aad?: Uint8Array, info?: Uint8Array): Promise<Uint8Array>;
|
|
121
|
+
/**
|
|
122
|
+
* Create an X-Wing encryptor for encrypting inputs.
|
|
123
|
+
* Follows the same pattern as ECIES encryptor in ecies.ts.
|
|
124
|
+
*
|
|
125
|
+
* The encryptor:
|
|
126
|
+
* 1. Encodes the plaintext with its context (HADU encoding)
|
|
127
|
+
* 2. Encrypts using X-Wing HPKE
|
|
128
|
+
* 3. Computes handle for tracking
|
|
129
|
+
* 4. Returns the encrypted ciphertext with metadata
|
|
130
|
+
*
|
|
131
|
+
* @param args - X-Wing encryptor arguments (recipient's public key)
|
|
132
|
+
* @returns Encryptor function
|
|
133
|
+
*/
|
|
134
|
+
export declare function getXwingEncryptor({ pubKeyA, }: XwingEncryptorArgs): Encryptor<XwingScheme>;
|
|
135
|
+
/**
|
|
136
|
+
* Create an X-Wing decryptor for decrypting inputs.
|
|
137
|
+
* Follows the same pattern as ECIES decryptor in ecies.ts.
|
|
138
|
+
*
|
|
139
|
+
* The decryptor:
|
|
140
|
+
* 1. Removes the prepended handle from the ciphertext
|
|
141
|
+
* 2. Decrypts using X-Wing HPKE
|
|
142
|
+
* 3. Decodes the HADU-encoded payload
|
|
143
|
+
* 4. Extracts and returns the plaintext
|
|
144
|
+
*
|
|
145
|
+
* @param args - X-Wing decryptor arguments (recipient's private key)
|
|
146
|
+
* @returns Decryptor function
|
|
147
|
+
*/
|
|
148
|
+
export declare function getXwingDecryptor({ privKeyA, }: XwingDecryptorArgs): Decryptor<XwingScheme>;
|
|
149
|
+
/**
|
|
150
|
+
* Returns true if the raw public key bytes match the public key encoded by the keypair.
|
|
151
|
+
* Used to catch caller mistakes before sending the keypair to the covalidator, where a
|
|
152
|
+
* mismatch would produce a cryptic signature error instead of a clear failure.
|
|
153
|
+
*/
|
|
154
|
+
export declare function reencryptPublicKeysMatch(reencryptPubKey: Uint8Array, reencryptKeypair: XwingKeypair): boolean;
|
|
@@ -0,0 +1,311 @@
|
|
|
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, SupportedTeeType, } from '../encryption/encryption.js';
|
|
6
|
+
import { computeHandle } 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
|
+
/**
|
|
17
|
+
* WARNING: TEST KEY - DO NOT USE IN PRODUCTION
|
|
18
|
+
* This is a well-known test seed (all zeros) that provides NO security.
|
|
19
|
+
* Anyone can derive the private key from this seed and decrypt all data.
|
|
20
|
+
* Only use for local development and testing.
|
|
21
|
+
*/
|
|
22
|
+
export const TEST_NETWORK_SEED_KEY = '0x0000000000000000000000000000000000000000000000000000000000000000';
|
|
23
|
+
const TEST_NETWORK_SEED_BYTES = bytesFromHexString(TEST_NETWORK_SEED_KEY);
|
|
24
|
+
/**
|
|
25
|
+
* WARNING: TEST KEY - DO NOT USE IN PRODUCTION
|
|
26
|
+
* This is the public key derived from TEST_NETWORK_SEED_KEY (all zeros).
|
|
27
|
+
* Data encrypted with this key can be decrypted by anyone who knows the seed.
|
|
28
|
+
* Only use for local development and testing.
|
|
29
|
+
*
|
|
30
|
+
* Generated from Go with seed of all zeros using HPKE layer: hpke.KEM_XWING.Scheme().DeriveKeyPair(seed)
|
|
31
|
+
* This matches the key used in covalidator's GetXwingPrivateKeyForTesting() via DeriveXwingPrivateKey
|
|
32
|
+
*/
|
|
33
|
+
export const TEST_NETWORK_XWING_PUBKEY = '0xca882388911c7c762aafc20debd63e845b3bed28c9d5262cdea7771fb31bd660a1ae7b395a9a7df3d12c7b118e8eda5057572c1ba05cd9b635edf33dabca4cac7291e0848f19c20e5beb850c3818f3543d49b3a5c729cb86a28fda539775d04feda112fe0c81d138aaf623aea7d507a4e826e890105db6065a44aba76a10d771c00d1b33f4ac51869806aae18eada68f19047024542d64a7aa1c91a5e1aa49d93613b5224b415bcc7aa166e4b55033438d20c641f9664fdb1689b53208181463e3d1325d46b30f07c5945b7e3fa1418bf833d975258461b294664eaf60795964924a280729c10a37fc6e967440bdd55d4ca53596286383481291152365303d44517cef369c00933b0b30368a230353e729c031075e8388673678a56b3ba84a165b28096ee9bd684483e1844258b451c365c41fa534152a3b64120041450128e960c7d6437d717ee266bdde7aaeec225ed93b958d188e97407349f1382976ca47d761ecc59a6f394487eb015c083abb490584677240eb47f838c838568a496119378b8bb81484610a50792b5d9c9939db188e7d0249d3cb918c436f111a2898849b286b0743a22c57464c709c5eaceac1ba493adca3328c0b14b5e38d3aea74e328b622b17e7181c35ad11c2103bdb7f2b209d93dcbc4ab61a06bc37139e6d2b7a06c5b7e9267bef3a8918a706f793271a5acc2574532da79e5a10cf074b998147a3c43586a411a513bba0d11cc19a36c83b19277f28022c88b120abfdba7076a8263e05336e3245aef7033eb3c762b5bbfa5791ac960398b649d5cbb652ddc6b2398143a0861ab3b410b696328879c099098adf819fbf7ac170030e86675e7f45c22ac9e1cf52c3102487bb0b91ab592afdc69c6e3a9b71876b86260b6c736b8291098f1130d3b763525cbad540ce2d042eacb6ed43b7bcba898f712c412f26066e09945f44ec7026c8ef959831abc10719d2017a12a41728b41c02371a5f5756ebc79406be708ea41bbd21563c874a0b791a3b4e4224a609967004f065c5ab4f3b4c61cb35df70573269da53179c3701fc5205f61974426f9b794c1b5826494b70842b6920c17752029369264dc8590b898b85c9d89a258e1f46c1b0490efd17c485cb51687cea272041e90b8e629521d3c5e3fa7518161bad7a159295b63cc6c0077897b53d47db8bc0ecb820f550705b65715a1a1094d04854f56acd26aa0baa10cb8447fad6211f53105796a42882328e6852e8de821c283b51eaab9bc95c4dc53615626049d63b1f9a457193805276b1905b0ab39353b5cf91fdd6023d4d816aef9cce4a3cfb3d12190172df221ae61d427563a098cc60e3dc9997ef54959180be5dc64a911157db6be3a01be2ee343caab33b8729abf0c50c674758c511291941fceac646232920907c2e88b9ec10211161729c797643a553a6ae5c4b7483c04e3263bd291e311c609071348b7c3310aa97d6b8318e0a4afe8399fa22f951049a9bb8860f7c69a333d3cc1aaf0129ab560713bf29eb3a01f9a276c78e54e3a3648b2447c80242b271b11406866389426d8b59796540d6b5702092ab21ee217c075cfc0c17ef826ce9ea29b9e61617457a5b1aaa23a58615dc53c59183beb36ea19498c21820b70ab47adeb678f1c52bf8768b3597b608ea1a8a15cd62e8a29bec4a1ac248ef9f02de0144bca06025f95a42bd6c8eaaaaaa2366328561d';
|
|
34
|
+
const TEST_NETWORK_PUBKEY_BYTES = bytesFromHexString(TEST_NETWORK_XWING_PUBKEY);
|
|
35
|
+
/**
|
|
36
|
+
* Check if a byte array matches the test seed key.
|
|
37
|
+
* Logs a warning if it does.
|
|
38
|
+
*/
|
|
39
|
+
export function warnIfTestSeed(seed) {
|
|
40
|
+
const isTestSeed = seed.every((byte, i) => byte === TEST_NETWORK_SEED_BYTES[i]);
|
|
41
|
+
if (isTestSeed) {
|
|
42
|
+
console.warn('WARNING: Using TEST_NETWORK_SEED_KEY. This key provides no security ' +
|
|
43
|
+
'and should only be used for local development and testing.');
|
|
44
|
+
}
|
|
45
|
+
return isTestSeed;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Check if a byte array matches the test public key.
|
|
49
|
+
* Logs a warning if it does.
|
|
50
|
+
*/
|
|
51
|
+
export function warnIfTestPubKey(pubKeyBytes) {
|
|
52
|
+
const isTestPubKey = pubKeyBytes.every((byte, i) => byte === TEST_NETWORK_PUBKEY_BYTES[i]);
|
|
53
|
+
if (isTestPubKey) {
|
|
54
|
+
console.warn('WARNING: Using TEST_NETWORK_XWING_PUBKEY. Data encrypted with this key ' +
|
|
55
|
+
'can be decrypted by anyone. Only use for local development and testing.');
|
|
56
|
+
}
|
|
57
|
+
return isTestPubKey;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Create HPKE cipher suite with X-Wing KEM, HKDF-SHA256, and ChaCha20-Poly1305 AEAD.
|
|
61
|
+
* This configuration provides post-quantum security with hybrid classical/PQ encryption.
|
|
62
|
+
* Workaround: Manually calls setup on the XWing KEM due to a bug in @hpke/hybridkem-x-wing@0.6.1
|
|
63
|
+
* where encap() calls getRandomValues before calling _setup().
|
|
64
|
+
*/
|
|
65
|
+
async function createXwingSuite() {
|
|
66
|
+
const kem = new XWing();
|
|
67
|
+
// Workaround: Call setup to initialize _api before encap() is called
|
|
68
|
+
// @ts-expect-error _setup is private but must be called to initialize crypto API
|
|
69
|
+
await kem._setup();
|
|
70
|
+
return new CipherSuite({
|
|
71
|
+
kem,
|
|
72
|
+
kdf: new HkdfSha256(),
|
|
73
|
+
aead: new Chacha20Poly1305(),
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Derive X-Wing keypair from a 32-byte seed (deterministic).
|
|
78
|
+
* This matches the Go implementation in covalidator/encoding/xwing.go
|
|
79
|
+
*
|
|
80
|
+
* @param seed - 32-byte seed for deterministic key derivation
|
|
81
|
+
* @returns X-Wing keypair with cached public key bytes
|
|
82
|
+
*/
|
|
83
|
+
export async function deriveXwingKeypairFromSeed(seed) {
|
|
84
|
+
if (seed.length !== 32) {
|
|
85
|
+
throw new Error(`Invalid X-Wing seed length: expected 32 bytes, got ${seed.length}`);
|
|
86
|
+
}
|
|
87
|
+
warnIfTestSeed(seed);
|
|
88
|
+
const suite = await createXwingSuite();
|
|
89
|
+
// Create a fresh ArrayBuffer copy to avoid SharedArrayBuffer issues
|
|
90
|
+
const seedCopy = new Uint8Array(seed);
|
|
91
|
+
const keyPair = await suite.kem.deriveKeyPair(seedCopy.buffer);
|
|
92
|
+
const publicKeyBytes = new Uint8Array(await suite.kem.serializePublicKey(keyPair.publicKey));
|
|
93
|
+
return {
|
|
94
|
+
scheme: encryptionSchemes.xwing,
|
|
95
|
+
publicKey: keyPair.publicKey,
|
|
96
|
+
privateKey: keyPair.privateKey,
|
|
97
|
+
encodePublicKey() {
|
|
98
|
+
return publicKeyBytes;
|
|
99
|
+
},
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Generate a random X-Wing keypair.
|
|
104
|
+
*
|
|
105
|
+
* @returns X-Wing keypair with cached public key bytes
|
|
106
|
+
*/
|
|
107
|
+
export async function generateXwingKeypair() {
|
|
108
|
+
const suite = await createXwingSuite();
|
|
109
|
+
const keyPair = await suite.kem.generateKeyPair();
|
|
110
|
+
const publicKeyBytes = new Uint8Array(await suite.kem.serializePublicKey(keyPair.publicKey));
|
|
111
|
+
return {
|
|
112
|
+
scheme: encryptionSchemes.xwing,
|
|
113
|
+
publicKey: keyPair.publicKey,
|
|
114
|
+
privateKey: keyPair.privateKey,
|
|
115
|
+
encodePublicKey() {
|
|
116
|
+
return publicKeyBytes;
|
|
117
|
+
},
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Decode X-Wing public key from bytes.
|
|
122
|
+
*
|
|
123
|
+
* @param pubKeyBytes - 1216-byte X-Wing public key
|
|
124
|
+
* @returns CryptoKey for encryption operations
|
|
125
|
+
*/
|
|
126
|
+
export async function decodeXwingPublicKey(pubKeyBytes) {
|
|
127
|
+
const suite = await createXwingSuite();
|
|
128
|
+
if (pubKeyBytes.length !== suite.kem.publicKeySize) {
|
|
129
|
+
throw new Error(`Invalid X-Wing public key length: expected ${XWING_PUBLIC_KEY_SIZE} bytes, got ${pubKeyBytes.length}`);
|
|
130
|
+
}
|
|
131
|
+
warnIfTestPubKey(pubKeyBytes);
|
|
132
|
+
// Create a fresh ArrayBuffer copy to avoid SharedArrayBuffer issues
|
|
133
|
+
const pubKeyCopy = new Uint8Array(pubKeyBytes);
|
|
134
|
+
return await suite.kem.deserializePublicKey(pubKeyCopy.buffer);
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Decode X-Wing private key from 32-byte seed.
|
|
138
|
+
* Alias for deriveXwingKeypairFromSeed for consistency with Go API.
|
|
139
|
+
*
|
|
140
|
+
* @param seed - 32-byte seed
|
|
141
|
+
* @returns X-Wing keypair
|
|
142
|
+
*/
|
|
143
|
+
export async function decodeXwingPrivateKey(seed) {
|
|
144
|
+
return await deriveXwingKeypairFromSeed(seed);
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Encode X-Wing public key to bytes.
|
|
148
|
+
*
|
|
149
|
+
* @param publicKey - CryptoKey containing X-Wing public key
|
|
150
|
+
* @returns 1216-byte serialized public key
|
|
151
|
+
*/
|
|
152
|
+
export async function encodeXwingPublicKey(publicKey) {
|
|
153
|
+
const suite = await createXwingSuite();
|
|
154
|
+
return new Uint8Array(await suite.kem.serializePublicKey(publicKey));
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Encrypt using X-Wing HPKE (RFC 9180) with ChaCha20-Poly1305 AEAD.
|
|
158
|
+
*
|
|
159
|
+
* Output format: encappedKey (1120 bytes) || ciphertext (variable length)
|
|
160
|
+
*
|
|
161
|
+
* @param pubKeyA - Recipient's public key
|
|
162
|
+
* @param msg - Message to encrypt
|
|
163
|
+
* @param aad - Additional authenticated data (default: empty)
|
|
164
|
+
* @param info - Context info for key derivation (default: empty)
|
|
165
|
+
* @returns Encrypted data (encappedKey || ciphertext)
|
|
166
|
+
*/
|
|
167
|
+
export async function encrypt(pubKeyA, msg, aad = new Uint8Array(0), info = new Uint8Array(0)) {
|
|
168
|
+
const suite = await createXwingSuite();
|
|
169
|
+
// Warn if using the insecure test public key
|
|
170
|
+
const pubKeyBytes = new Uint8Array(await suite.kem.serializePublicKey(pubKeyA));
|
|
171
|
+
warnIfTestPubKey(pubKeyBytes);
|
|
172
|
+
// Create fresh ArrayBuffer copies to avoid SharedArrayBuffer issues
|
|
173
|
+
const infoCopy = new Uint8Array(info);
|
|
174
|
+
const sender = await suite.createSenderContext({
|
|
175
|
+
recipientPublicKey: pubKeyA,
|
|
176
|
+
info: infoCopy.buffer,
|
|
177
|
+
});
|
|
178
|
+
const msgCopy = new Uint8Array(msg);
|
|
179
|
+
const aadCopy = new Uint8Array(aad);
|
|
180
|
+
const ciphertext = await sender.seal(msgCopy.buffer, aadCopy.buffer);
|
|
181
|
+
const encappedKey = sender.enc;
|
|
182
|
+
// Concatenate encappedKey and ciphertext
|
|
183
|
+
const result = new Uint8Array(encappedKey.byteLength + ciphertext.byteLength);
|
|
184
|
+
result.set(new Uint8Array(encappedKey), 0);
|
|
185
|
+
result.set(new Uint8Array(ciphertext), encappedKey.byteLength);
|
|
186
|
+
return result;
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* Decrypt using X-Wing HPKE (RFC 9180) with ChaCha20-Poly1305 AEAD.
|
|
190
|
+
*
|
|
191
|
+
* Input format: encappedKey (1120 bytes) || ciphertext (variable length)
|
|
192
|
+
*
|
|
193
|
+
* @param privKeyA - Recipient's private key
|
|
194
|
+
* @param encryptedData - Encrypted data (encappedKey || ciphertext)
|
|
195
|
+
* @param aad - Additional authenticated data (default: empty)
|
|
196
|
+
* @param info - Context info for key derivation (default: empty)
|
|
197
|
+
* @returns Decrypted plaintext
|
|
198
|
+
*/
|
|
199
|
+
export async function decrypt(privKeyA, encryptedData, aad = new Uint8Array(0), info = new Uint8Array(0)) {
|
|
200
|
+
const suite = await createXwingSuite();
|
|
201
|
+
// X-Wing encapsulated key size from the KEM
|
|
202
|
+
const encappedKeySize = suite.kem.encSize;
|
|
203
|
+
if (encryptedData.length < encappedKeySize) {
|
|
204
|
+
throw new Error(`Invalid X-Wing encrypted data length: expected at least ${encappedKeySize} bytes, got ${encryptedData.length}`);
|
|
205
|
+
}
|
|
206
|
+
// Split encappedKey and ciphertext
|
|
207
|
+
const encappedKey = encryptedData.slice(0, encappedKeySize);
|
|
208
|
+
const ciphertext = encryptedData.slice(encappedKeySize);
|
|
209
|
+
// Create fresh ArrayBuffer copies to avoid SharedArrayBuffer issues
|
|
210
|
+
const infoCopy = new Uint8Array(info);
|
|
211
|
+
const encCopy = new Uint8Array(encappedKey);
|
|
212
|
+
const recipient = await suite.createRecipientContext({
|
|
213
|
+
recipientKey: privKeyA.privateKey,
|
|
214
|
+
enc: encCopy.buffer,
|
|
215
|
+
info: infoCopy.buffer,
|
|
216
|
+
});
|
|
217
|
+
const ctCopy = new Uint8Array(ciphertext);
|
|
218
|
+
const aadCopy = new Uint8Array(aad);
|
|
219
|
+
const plaintext = await recipient.open(ctCopy.buffer, aadCopy.buffer);
|
|
220
|
+
return new Uint8Array(plaintext);
|
|
221
|
+
}
|
|
222
|
+
/**
|
|
223
|
+
* Create an X-Wing encryptor for encrypting inputs.
|
|
224
|
+
* Follows the same pattern as ECIES encryptor in ecies.ts.
|
|
225
|
+
*
|
|
226
|
+
* The encryptor:
|
|
227
|
+
* 1. Encodes the plaintext with its context (HADU encoding)
|
|
228
|
+
* 2. Encrypts using X-Wing HPKE
|
|
229
|
+
* 3. Computes handle for tracking
|
|
230
|
+
* 4. Returns the encrypted ciphertext with metadata
|
|
231
|
+
*
|
|
232
|
+
* @param args - X-Wing encryptor arguments (recipient's public key)
|
|
233
|
+
* @returns Encryptor function
|
|
234
|
+
*/
|
|
235
|
+
export function getXwingEncryptor({ pubKeyA, }) {
|
|
236
|
+
return async ({ plaintext, context, }) => {
|
|
237
|
+
if (plaintext.scheme !== encryptionSchemes.xwing) {
|
|
238
|
+
throw new Error(`Plaintext with scheme ${getEncryptionSchemeName(plaintext.scheme)} cannot be encrypted with X-Wing`);
|
|
239
|
+
}
|
|
240
|
+
// Encode plaintext with context (HADU encoding)
|
|
241
|
+
const inputCiphertextPayloadBytes = Buffer.from(encodeInput({ plaintext, context }));
|
|
242
|
+
// Encrypt with X-Wing HPKE (empty AAD and info)
|
|
243
|
+
const aad = new Uint8Array(0);
|
|
244
|
+
const info = new Uint8Array(0);
|
|
245
|
+
const ct = await encrypt(pubKeyA, inputCiphertextPayloadBytes, aad, info);
|
|
246
|
+
// Compute handle for ciphertext tracking
|
|
247
|
+
const handle = computeHandle({
|
|
248
|
+
ciphertext: ct,
|
|
249
|
+
handleType: plaintext.type,
|
|
250
|
+
indexHandle: 0,
|
|
251
|
+
handleVersion: 0,
|
|
252
|
+
context: context,
|
|
253
|
+
});
|
|
254
|
+
return {
|
|
255
|
+
handle: asBytes32(handle),
|
|
256
|
+
context,
|
|
257
|
+
ciphertext: {
|
|
258
|
+
scheme: encryptionSchemes.xwing,
|
|
259
|
+
type: plaintext.type,
|
|
260
|
+
// Prepend handle as checksum for early mismatch detection
|
|
261
|
+
value: encodeCiphertextInput(context.version, bytesToHex(handle), bytesToHex(ct)),
|
|
262
|
+
},
|
|
263
|
+
};
|
|
264
|
+
};
|
|
265
|
+
}
|
|
266
|
+
/**
|
|
267
|
+
* Create an X-Wing decryptor for decrypting inputs.
|
|
268
|
+
* Follows the same pattern as ECIES decryptor in ecies.ts.
|
|
269
|
+
*
|
|
270
|
+
* The decryptor:
|
|
271
|
+
* 1. Removes the prepended handle from the ciphertext
|
|
272
|
+
* 2. Decrypts using X-Wing HPKE
|
|
273
|
+
* 3. Decodes the HADU-encoded payload
|
|
274
|
+
* 4. Extracts and returns the plaintext
|
|
275
|
+
*
|
|
276
|
+
* @param args - X-Wing decryptor arguments (recipient's private key)
|
|
277
|
+
* @returns Decryptor function
|
|
278
|
+
*/
|
|
279
|
+
export function getXwingDecryptor({ privKeyA, }) {
|
|
280
|
+
return async ({ scheme, value, }) => {
|
|
281
|
+
if (scheme !== encryptionSchemes.xwing) {
|
|
282
|
+
throw new Error(`Ciphertext with scheme ${getEncryptionSchemeName(scheme)} cannot be decrypted with X-Wing`);
|
|
283
|
+
}
|
|
284
|
+
// Remove the prepended handle
|
|
285
|
+
const { ciphertext } = decodeCiphertextInput(value);
|
|
286
|
+
// Decrypt with X-Wing HPKE (empty AAD and info)
|
|
287
|
+
const aad = new Uint8Array(0);
|
|
288
|
+
const info = new Uint8Array(0);
|
|
289
|
+
const ptBuf = await decrypt(privKeyA, bytesFromHexString(ciphertext), aad, info);
|
|
290
|
+
// Decode HADU-encoded payload
|
|
291
|
+
const payload = decodeInput(ptBuf);
|
|
292
|
+
const computable = payload.value;
|
|
293
|
+
if (computable.case !== 'scalar') {
|
|
294
|
+
throw new Error(`Decrypted plaintext is not a scalar, cannot currently be decrypted. This feature may be implemented on request.`);
|
|
295
|
+
}
|
|
296
|
+
// Extract and return plaintext
|
|
297
|
+
const typ = parse(SupportedTeeType, computable.value.type);
|
|
298
|
+
return bytesToPlaintext(computable.value.value, encryptionSchemes.xwing, typ);
|
|
299
|
+
};
|
|
300
|
+
}
|
|
301
|
+
/**
|
|
302
|
+
* Returns true if the raw public key bytes match the public key encoded by the keypair.
|
|
303
|
+
* Used to catch caller mistakes before sending the keypair to the covalidator, where a
|
|
304
|
+
* mismatch would produce a cryptic signature error instead of a clear failure.
|
|
305
|
+
*/
|
|
306
|
+
export function reencryptPublicKeysMatch(reencryptPubKey, reencryptKeypair) {
|
|
307
|
+
const keypairPubKey = reencryptKeypair.encodePublicKey();
|
|
308
|
+
return (keypairPubKey.length === reencryptPubKey.length &&
|
|
309
|
+
keypairPubKey.every((byte, i) => byte === reencryptPubKey[i]));
|
|
310
|
+
}
|
|
311
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieHdpbmcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGl0ZS94d2luZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUMxRCxPQUFPLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUNyRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxrQkFBa0IsRUFBRSxVQUFVLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDekUsT0FBTyxFQUNMLGdCQUFnQixFQUVoQixxQkFBcUIsRUFFckIscUJBQXFCLEVBQ3JCLGlCQUFpQixFQUdqQix1QkFBdUIsRUFHdkIsZ0JBQWdCLEdBRWpCLE1BQU0sNkJBQTZCLENBQUM7QUFDckMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUU3QyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3JDLE9BQU8sRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRXJELHdDQUF3QztBQUN4QyxNQUFNLFFBQVEsR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFDO0FBRTdCOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUM7QUFFNUQ7Ozs7O0dBS0c7QUFDSCxNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FDaEMsb0VBQW9FLENBQUM7QUFFdkUsTUFBTSx1QkFBdUIsR0FBRyxrQkFBa0IsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO0FBRTFFOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxDQUFDLE1BQU0seUJBQXlCLEdBQ3BDLG80RUFBbzRFLENBQUM7QUFFdjRFLE1BQU0seUJBQXlCLEdBQUcsa0JBQWtCLENBQUMseUJBQXlCLENBQUMs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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './local-node.js';
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { Schema } from 'effect';
|
|
2
|
+
/**
|
|
3
|
+
* Schema for the environment variables required to connect to a local Inco node.
|
|
4
|
+
*
|
|
5
|
+
* Includes executor/sender addresses, keys, covalidator settings, and optional
|
|
6
|
+
* remote compute-server overrides. Typically populated from a `.env` file.
|
|
7
|
+
*/
|
|
8
|
+
export declare const LocalNodeEnv: Schema.Struct<{
|
|
9
|
+
DEPLOYER_ADDRESS: Schema.brand<Schema.filter<Schema.TemplateLiteral<`0x${string}`>>, "Address">;
|
|
10
|
+
STATE_DUMP: typeof Schema.String;
|
|
11
|
+
EXECUTOR_ADDRESS: Schema.brand<Schema.filter<Schema.TemplateLiteral<`0x${string}`>>, "Address">;
|
|
12
|
+
NETWORK_PUBKEY: Schema.optional<Schema.TemplateLiteral<`0x${string}`>>;
|
|
13
|
+
SENDER_ADDRESS: Schema.brand<Schema.filter<Schema.TemplateLiteral<`0x${string}`>>, "Address">;
|
|
14
|
+
SENDER_PRIVATE_KEY: Schema.TemplateLiteral<`0x${string}`>;
|
|
15
|
+
EIP712_SIGNER_ADDRESS: Schema.optional<Schema.TemplateLiteral<`0x${string}`>>;
|
|
16
|
+
PEPPER: typeof Schema.String;
|
|
17
|
+
COVALIDATOR_NETWORK_PRIVATE_KEY: Schema.optional<Schema.TemplateLiteral<`0x${string}`>>;
|
|
18
|
+
COVALIDATOR_EIP712_PRIVATE_SIGNING_KEY: Schema.optional<Schema.TemplateLiteral<`0x${string}`>>;
|
|
19
|
+
COVALIDATOR_INCO_EXECUTOR_ADDR: Schema.brand<Schema.filter<Schema.TemplateLiteral<`0x${string}`>>, "Address">;
|
|
20
|
+
COVALIDATOR_HOST_CHAIN_ID: Schema.optional<typeof Schema.String>;
|
|
21
|
+
COVALIDATOR_URL: Schema.optional<typeof Schema.String>;
|
|
22
|
+
COVALIDATOR_HOST_CHAIN_RPC_URL: Schema.optional<typeof Schema.String>;
|
|
23
|
+
COVALIDATOR_COMPUTE_TYPE: Schema.optional<typeof Schema.String>;
|
|
24
|
+
COVALIDATOR_STORAGE_KEY: Schema.optional<Schema.TemplateLiteral<`0x${string}`>>;
|
|
25
|
+
}>;
|
|
26
|
+
/** Parsed local node environment configuration. */
|
|
27
|
+
export type LocalNodeEnv = typeof LocalNodeEnv.Type;
|
|
28
|
+
/**
|
|
29
|
+
* Parses a dotenv-formatted string or `Buffer` into a validated {@link LocalNodeEnv}.
|
|
30
|
+
*
|
|
31
|
+
* Falls back to `process.env` when no argument is provided.
|
|
32
|
+
*
|
|
33
|
+
* @param envFileOrObj - A dotenv-formatted string, `Buffer`, or `undefined` to use `process.env`.
|
|
34
|
+
* @returns A validated `LocalNodeEnv` object.
|
|
35
|
+
* @throws If required environment variables are missing or invalid.
|
|
36
|
+
*/
|
|
37
|
+
export declare function parseLocalEnv(envFileOrObj?: string | Buffer): LocalNodeEnv;
|