@zhoujun_aptos/octopus-ts-sdk-min 0.1.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/README.md +108 -0
- package/dist/aes256gcm.d.ts +16 -0
- package/dist/aes256gcm.d.ts.map +1 -0
- package/dist/aes256gcm.js +98 -0
- package/dist/aes256gcm.js.map +1 -0
- package/dist/elgamal.d.ts +31 -0
- package/dist/elgamal.d.ts.map +1 -0
- package/dist/elgamal.js +96 -0
- package/dist/elgamal.js.map +1 -0
- package/dist/enc/index.d.ts +35 -0
- package/dist/enc/index.d.ts.map +1 -0
- package/dist/enc/index.js +171 -0
- package/dist/enc/index.js.map +1 -0
- package/dist/enc/simple_elgamal_ristretto255.d.ts +27 -0
- package/dist/enc/simple_elgamal_ristretto255.d.ts.map +1 -0
- package/dist/enc/simple_elgamal_ristretto255.js +135 -0
- package/dist/enc/simple_elgamal_ristretto255.js.map +1 -0
- package/dist/group.d.ts +37 -0
- package/dist/group.d.ts.map +1 -0
- package/dist/group.js +150 -0
- package/dist/group.js.map +1 -0
- package/dist/ibe/index.d.ts +46 -0
- package/dist/ibe/index.d.ts.map +1 -0
- package/dist/ibe/index.js +238 -0
- package/dist/ibe/index.js.map +1 -0
- package/dist/ibe/otp_hmac_boneh_franklin_bls12381_short_pk.d.ts +37 -0
- package/dist/ibe/otp_hmac_boneh_franklin_bls12381_short_pk.d.ts.map +1 -0
- package/dist/ibe/otp_hmac_boneh_franklin_bls12381_short_pk.js +131 -0
- package/dist/ibe/otp_hmac_boneh_franklin_bls12381_short_pk.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +47 -0
- package/dist/index.js.map +1 -0
- package/dist/shamir_gf256.d.ts +61 -0
- package/dist/shamir_gf256.d.ts.map +1 -0
- package/dist/shamir_gf256.js +295 -0
- package/dist/shamir_gf256.js.map +1 -0
- package/dist/sig/index.d.ts +35 -0
- package/dist/sig/index.d.ts.map +1 -0
- package/dist/sig/index.js +171 -0
- package/dist/sig/index.js.map +1 -0
- package/dist/sig/schnorr_ristretto255.d.ts +28 -0
- package/dist/sig/schnorr_ristretto255.d.ts.map +1 -0
- package/dist/sig/schnorr_ristretto255.js +135 -0
- package/dist/sig/schnorr_ristretto255.js.map +1 -0
- package/dist/silent_setup_encryption.d.ts +82 -0
- package/dist/silent_setup_encryption.d.ts.map +1 -0
- package/dist/silent_setup_encryption.js +285 -0
- package/dist/silent_setup_encryption.js.map +1 -0
- package/dist/utils.d.ts +9 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +100 -0
- package/dist/utils.js.map +1 -0
- package/dist/worker_config.d.ts +17 -0
- package/dist/worker_config.d.ts.map +1 -0
- package/dist/worker_config.js +84 -0
- package/dist/worker_config.js.map +1 -0
- package/dist/worker_task.d.ts +15 -0
- package/dist/worker_task.d.ts.map +1 -0
- package/dist/worker_task.js +59 -0
- package/dist/worker_task.js.map +1 -0
- package/package.json +35 -0
package/README.md
ADDED
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
# Octopus TypeScript SDK
|
|
2
|
+
|
|
3
|
+
This TypeScript SDK provides cryptographic operations for the Aptos crypto oracle, including ElGamal encryption over BLS12-381 curves with AES-256-GCM for symmetric encryption.
|
|
4
|
+
|
|
5
|
+
## Features
|
|
6
|
+
|
|
7
|
+
- **ElGamal Encryption**: Public-key encryption over BLS12-381 elliptic curves
|
|
8
|
+
- **AES-256-GCM**: Authenticated symmetric encryption for bulk data
|
|
9
|
+
- **Hybrid Encryption**: Combines asymmetric and symmetric encryption for efficiency
|
|
10
|
+
- **TypeScript Support**: Full TypeScript support with proper type definitions
|
|
11
|
+
- **Serialization**: Support for Aptos Move serialization format
|
|
12
|
+
|
|
13
|
+
## Installation
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
npm install
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## Building
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
npm run build
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## Testing
|
|
26
|
+
|
|
27
|
+
The project includes comprehensive test coverage for all cryptographic operations:
|
|
28
|
+
|
|
29
|
+
### Running Tests
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
# Run tests in watch mode
|
|
33
|
+
npm test
|
|
34
|
+
|
|
35
|
+
# Run tests once
|
|
36
|
+
npm run test:run
|
|
37
|
+
|
|
38
|
+
# Run tests with coverage
|
|
39
|
+
npm run test:coverage
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
### Test Coverage
|
|
43
|
+
|
|
44
|
+
The test suite covers:
|
|
45
|
+
|
|
46
|
+
1. **Key Generation**
|
|
47
|
+
- Valid key pair generation
|
|
48
|
+
- Uniqueness of generated keys
|
|
49
|
+
- BLS12-381 curve point validation
|
|
50
|
+
|
|
51
|
+
2. **Encryption & Decryption**
|
|
52
|
+
- Basic encryption/decryption functionality
|
|
53
|
+
- Empty and large plaintext handling
|
|
54
|
+
- Binary data support
|
|
55
|
+
- Unicode text support
|
|
56
|
+
- Wrong key rejection
|
|
57
|
+
|
|
58
|
+
3. **Serialization**
|
|
59
|
+
- Byte array serialization/deserialization
|
|
60
|
+
- Hex encoding/decoding
|
|
61
|
+
- Key integrity preservation
|
|
62
|
+
|
|
63
|
+
4. **Error Handling**
|
|
64
|
+
- Corrupted ciphertext handling
|
|
65
|
+
- Truncated data handling
|
|
66
|
+
- Invalid input validation
|
|
67
|
+
|
|
68
|
+
5. **Cryptographic Properties**
|
|
69
|
+
- Semantic security verification
|
|
70
|
+
- Key privacy validation
|
|
71
|
+
- Multiple encryption support
|
|
72
|
+
|
|
73
|
+
6. **Performance & Edge Cases**
|
|
74
|
+
- Multiple key generation efficiency
|
|
75
|
+
- Large data handling
|
|
76
|
+
- Boundary condition testing
|
|
77
|
+
|
|
78
|
+
## Usage
|
|
79
|
+
|
|
80
|
+
```typescript
|
|
81
|
+
import { keygen, encrypt, tryDecrypt } from './src/elgamal_bls12381_aes256gcm';
|
|
82
|
+
|
|
83
|
+
// Generate key pair
|
|
84
|
+
const { privateKey, publicKey } = keygen();
|
|
85
|
+
|
|
86
|
+
// Encrypt data
|
|
87
|
+
const plaintext = new TextEncoder().encode('Hello, World!');
|
|
88
|
+
const ciphertext = encrypt(publicKey, plaintext);
|
|
89
|
+
|
|
90
|
+
// Decrypt data
|
|
91
|
+
const decrypted = tryDecrypt(privateKey, ciphertext);
|
|
92
|
+
console.log(new TextDecoder().decode(decrypted)); // "Hello, World!"
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
## Dependencies
|
|
96
|
+
|
|
97
|
+
- `@aptos-labs/ts-sdk`: Aptos TypeScript SDK for serialization
|
|
98
|
+
- `@noble/curves`: BLS12-381 elliptic curve implementation
|
|
99
|
+
- `@noble/hashes`: SHA-256 hash function
|
|
100
|
+
- `crypto`: Node.js built-in cryptographic functions
|
|
101
|
+
|
|
102
|
+
## Security
|
|
103
|
+
|
|
104
|
+
This implementation provides:
|
|
105
|
+
- **Semantic Security**: Same plaintext produces different ciphertexts
|
|
106
|
+
- **Key Privacy**: Ciphertexts don't reveal the public key
|
|
107
|
+
- **Authenticated Encryption**: AES-GCM provides both confidentiality and authenticity
|
|
108
|
+
- **Post-Quantum Resistance**: BLS12-381 curves provide quantum resistance
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { Deserializer, Serializer } from "@aptos-labs/ts-sdk";
|
|
2
|
+
export declare class Ciphertext {
|
|
3
|
+
iv: Uint8Array;
|
|
4
|
+
ct: Uint8Array;
|
|
5
|
+
tag: Uint8Array;
|
|
6
|
+
constructor(iv: Uint8Array, ct: Uint8Array, tag: Uint8Array);
|
|
7
|
+
static decode(deserializer: Deserializer): Ciphertext;
|
|
8
|
+
static fromBytes(bytes: Uint8Array): Ciphertext;
|
|
9
|
+
static fromHex(hex: string): Ciphertext;
|
|
10
|
+
encode(serializer: Serializer): void;
|
|
11
|
+
toBytes(): Uint8Array;
|
|
12
|
+
toHex(): string;
|
|
13
|
+
}
|
|
14
|
+
export declare function encrypt(aesKey: Uint8Array, plaintext: Uint8Array): Ciphertext;
|
|
15
|
+
export declare function decrypt(aesKey: Uint8Array, ciphertext: Ciphertext): Uint8Array;
|
|
16
|
+
//# sourceMappingURL=aes256gcm.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"aes256gcm.d.ts","sourceRoot":"","sources":["../src/aes256gcm.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAG9D,qBAAa,UAAU;IACnB,EAAE,EAAE,UAAU,CAAC;IACf,EAAE,EAAE,UAAU,CAAC;IACf,GAAG,EAAE,UAAU,CAAC;gBAEJ,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU;IAM3D,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,YAAY,GAAG,UAAU;IAOrD,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,UAAU,GAAG,UAAU;IAK/C,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU;IAIvC,MAAM,CAAC,UAAU,EAAE,UAAU,GAAG,IAAI;IAMpC,OAAO,IAAI,UAAU;IAMrB,KAAK,IAAI,MAAM;CAGlB;AAED,wBAAgB,OAAO,CAAC,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,GAAG,UAAU,CAiC7E;AAGD,wBAAgB,OAAO,CAAC,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,GAAG,UAAU,CAyB9E"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Ciphertext = void 0;
|
|
4
|
+
exports.encrypt = encrypt;
|
|
5
|
+
exports.decrypt = decrypt;
|
|
6
|
+
const aes_1 = require("@noble/ciphers/aes");
|
|
7
|
+
const utils_1 = require("./utils");
|
|
8
|
+
const ts_sdk_1 = require("@aptos-labs/ts-sdk");
|
|
9
|
+
const utils_2 = require("@noble/curves/utils");
|
|
10
|
+
class Ciphertext {
|
|
11
|
+
iv;
|
|
12
|
+
ct;
|
|
13
|
+
tag;
|
|
14
|
+
constructor(iv, ct, tag) {
|
|
15
|
+
this.iv = iv;
|
|
16
|
+
this.ct = ct;
|
|
17
|
+
this.tag = tag;
|
|
18
|
+
}
|
|
19
|
+
static decode(deserializer) {
|
|
20
|
+
let iv = deserializer.deserializeFixedBytes(12);
|
|
21
|
+
let ct = deserializer.deserializeBytes();
|
|
22
|
+
let tag = deserializer.deserializeFixedBytes(16);
|
|
23
|
+
return new Ciphertext(iv, ct, tag);
|
|
24
|
+
}
|
|
25
|
+
static fromBytes(bytes) {
|
|
26
|
+
let deserializer = new ts_sdk_1.Deserializer(bytes);
|
|
27
|
+
return Ciphertext.decode(deserializer);
|
|
28
|
+
}
|
|
29
|
+
static fromHex(hex) {
|
|
30
|
+
return Ciphertext.fromBytes((0, utils_2.hexToBytes)(hex));
|
|
31
|
+
}
|
|
32
|
+
encode(serializer) {
|
|
33
|
+
serializer.serializeFixedBytes(this.iv);
|
|
34
|
+
serializer.serializeBytes(this.ct);
|
|
35
|
+
serializer.serializeFixedBytes(this.tag);
|
|
36
|
+
}
|
|
37
|
+
toBytes() {
|
|
38
|
+
let serializer = new ts_sdk_1.Serializer();
|
|
39
|
+
this.encode(serializer);
|
|
40
|
+
return serializer.toUint8Array();
|
|
41
|
+
}
|
|
42
|
+
toHex() {
|
|
43
|
+
return (0, utils_2.bytesToHex)(this.toBytes());
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
exports.Ciphertext = Ciphertext;
|
|
47
|
+
function encrypt(aesKey, plaintext) {
|
|
48
|
+
try {
|
|
49
|
+
// Generate a random nonce (12 bytes for GCM)
|
|
50
|
+
const nonce = (0, utils_1.randBytes)(12);
|
|
51
|
+
// Create GCM instance with key and nonce
|
|
52
|
+
const gcmInstance = (0, aes_1.gcm)(aesKey, nonce);
|
|
53
|
+
// Encrypt the plaintext
|
|
54
|
+
const encrypted = gcmInstance.encrypt(plaintext);
|
|
55
|
+
// The encrypted result contains: ciphertext + tag
|
|
56
|
+
// We need to extract the tag (last 16 bytes)
|
|
57
|
+
const tagLength = 16; // 128-bit tag for GCM
|
|
58
|
+
const ciphertext = encrypted.slice(0, -tagLength);
|
|
59
|
+
const tag = encrypted.slice(-tagLength);
|
|
60
|
+
return new Ciphertext(nonce, ciphertext, tag);
|
|
61
|
+
}
|
|
62
|
+
catch (error) {
|
|
63
|
+
// Fallback to simple XOR if AES-GCM fails
|
|
64
|
+
console.warn('AES-GCM failed, falling back to XOR encryption (NOT SECURE):', error);
|
|
65
|
+
const iv = (0, utils_1.randBytes)(12);
|
|
66
|
+
const key = aesKey.slice(0, 32);
|
|
67
|
+
const ciphertext = new Uint8Array(plaintext.length);
|
|
68
|
+
for (let i = 0; i < plaintext.length; i++) {
|
|
69
|
+
ciphertext[i] = plaintext[i] ^ key[i % key.length];
|
|
70
|
+
}
|
|
71
|
+
const tag = (0, utils_1.randBytes)(16);
|
|
72
|
+
return new Ciphertext(iv, ciphertext, tag);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
// Real AES-256-GCM decryption using @noble/ciphers (pure JS, works in both Node.js and browser)
|
|
76
|
+
function decrypt(aesKey, ciphertext) {
|
|
77
|
+
try {
|
|
78
|
+
// Create GCM instance with key and nonce
|
|
79
|
+
const gcmInstance = (0, aes_1.gcm)(aesKey, ciphertext.iv);
|
|
80
|
+
// Combine ciphertext + tag for decryption
|
|
81
|
+
const encryptedData = new Uint8Array(ciphertext.ct.length + ciphertext.tag.length);
|
|
82
|
+
encryptedData.set(ciphertext.ct, 0);
|
|
83
|
+
encryptedData.set(ciphertext.tag, ciphertext.ct.length);
|
|
84
|
+
// Decrypt
|
|
85
|
+
return gcmInstance.decrypt(encryptedData);
|
|
86
|
+
}
|
|
87
|
+
catch (error) {
|
|
88
|
+
// Fallback to simple XOR if AES-GCM fails
|
|
89
|
+
console.warn('AES-GCM failed, falling back to XOR decryption (NOT SECURE):', error);
|
|
90
|
+
const key = aesKey.slice(0, 32);
|
|
91
|
+
const plaintext = new Uint8Array(ciphertext.ct.length);
|
|
92
|
+
for (let i = 0; i < ciphertext.ct.length; i++) {
|
|
93
|
+
plaintext[i] = ciphertext.ct[i] ^ key[i % key.length];
|
|
94
|
+
}
|
|
95
|
+
return plaintext;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
//# sourceMappingURL=aes256gcm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"aes256gcm.js","sourceRoot":"","sources":["../src/aes256gcm.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { Deserializer, Serializer } from '@aptos-labs/ts-sdk';
|
|
2
|
+
import { Element, Scalar } from './group';
|
|
3
|
+
export declare class Ciphertext {
|
|
4
|
+
c0: Element;
|
|
5
|
+
c1: Element;
|
|
6
|
+
constructor(c0: Element, c1: Element);
|
|
7
|
+
static deserialize(deserializer: Deserializer): Ciphertext;
|
|
8
|
+
encode(serializer: Serializer): void;
|
|
9
|
+
toBytes(): Uint8Array;
|
|
10
|
+
add(other: Ciphertext): Ciphertext;
|
|
11
|
+
scale(scalar: Scalar): Ciphertext;
|
|
12
|
+
}
|
|
13
|
+
export declare class DecKey {
|
|
14
|
+
encBase: Element;
|
|
15
|
+
privateScalar: Scalar;
|
|
16
|
+
constructor(encBase: Element, privateScalar: Scalar);
|
|
17
|
+
static deserialize(deserializer: Deserializer): DecKey;
|
|
18
|
+
encode(serializer: Serializer): void;
|
|
19
|
+
}
|
|
20
|
+
export declare class EncKey {
|
|
21
|
+
encBase: Element;
|
|
22
|
+
publicPoint: Element;
|
|
23
|
+
constructor(encBase: Element, publicPoint: Element);
|
|
24
|
+
static decode(deserializer: Deserializer): EncKey;
|
|
25
|
+
encode(serializer: Serializer): void;
|
|
26
|
+
toBytes(): Uint8Array;
|
|
27
|
+
}
|
|
28
|
+
export declare function enc(ek: EncKey, randomizer: Scalar, ptxt: Element): Ciphertext;
|
|
29
|
+
export declare function dec(dk: DecKey, ciph: Ciphertext): Element;
|
|
30
|
+
export declare function multiExp(ciphs: Ciphertext[], scalars: Scalar[]): Ciphertext;
|
|
31
|
+
//# sourceMappingURL=elgamal.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"elgamal.d.ts","sourceRoot":"","sources":["../src/elgamal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAE1C,qBAAa,UAAU;IACnB,EAAE,EAAE,OAAO,CAAC;IACZ,EAAE,EAAE,OAAO,CAAC;gBAEA,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO;IAKpC,MAAM,CAAC,WAAW,CAAC,YAAY,EAAE,YAAY,GAAG,UAAU;IAM1D,MAAM,CAAC,UAAU,EAAE,UAAU,GAAG,IAAI;IAKpC,OAAO,IAAI,UAAU;IAMrB,GAAG,CAAC,KAAK,EAAE,UAAU,GAAG,UAAU;IAIlC,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU;CAGpC;AAED,qBAAa,MAAM;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;gBAEV,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM;IAKnD,MAAM,CAAC,WAAW,CAAC,YAAY,EAAE,YAAY,GAAG,MAAM;IAMtD,MAAM,CAAC,UAAU,EAAE,UAAU,GAAG,IAAI;CAIvC;AAED,qBAAa,MAAM;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,OAAO,CAAC;gBAET,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,OAAO;IAKlD,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,YAAY,GAAG,MAAM;IAMjD,MAAM,CAAC,UAAU,EAAE,UAAU,GAAG,IAAI;IAKpC,OAAO,IAAI,UAAU;CAKxB;AAED,wBAAgB,GAAG,CACf,EAAE,EAAE,MAAM,EACV,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,OAAO,GACd,UAAU,CAKZ;AAED,wBAAgB,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,OAAO,CAGzD;AAED,wBAAgB,QAAQ,CACpB,KAAK,EAAE,UAAU,EAAE,EACnB,OAAO,EAAE,MAAM,EAAE,GAClB,UAAU,CASZ"}
|
package/dist/elgamal.js
ADDED
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.EncKey = exports.DecKey = exports.Ciphertext = void 0;
|
|
4
|
+
exports.enc = enc;
|
|
5
|
+
exports.dec = dec;
|
|
6
|
+
exports.multiExp = multiExp;
|
|
7
|
+
const ts_sdk_1 = require("@aptos-labs/ts-sdk");
|
|
8
|
+
const group_1 = require("./group");
|
|
9
|
+
class Ciphertext {
|
|
10
|
+
c0;
|
|
11
|
+
c1;
|
|
12
|
+
constructor(c0, c1) {
|
|
13
|
+
this.c0 = c0;
|
|
14
|
+
this.c1 = c1;
|
|
15
|
+
}
|
|
16
|
+
static deserialize(deserializer) {
|
|
17
|
+
const c0 = group_1.Element.deserialize(deserializer);
|
|
18
|
+
const c1 = group_1.Element.deserialize(deserializer);
|
|
19
|
+
return new Ciphertext(c0, c1);
|
|
20
|
+
}
|
|
21
|
+
encode(serializer) {
|
|
22
|
+
this.c0.encode(serializer);
|
|
23
|
+
this.c1.encode(serializer);
|
|
24
|
+
}
|
|
25
|
+
toBytes() {
|
|
26
|
+
const serializer = new ts_sdk_1.Serializer();
|
|
27
|
+
this.encode(serializer);
|
|
28
|
+
return serializer.toUint8Array();
|
|
29
|
+
}
|
|
30
|
+
add(other) {
|
|
31
|
+
return new Ciphertext(this.c0.add(other.c0), this.c1.add(other.c1));
|
|
32
|
+
}
|
|
33
|
+
scale(scalar) {
|
|
34
|
+
return new Ciphertext(this.c0.scale(scalar), this.c1.scale(scalar));
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
exports.Ciphertext = Ciphertext;
|
|
38
|
+
;
|
|
39
|
+
class DecKey {
|
|
40
|
+
encBase;
|
|
41
|
+
privateScalar;
|
|
42
|
+
constructor(encBase, privateScalar) {
|
|
43
|
+
this.encBase = encBase;
|
|
44
|
+
this.privateScalar = privateScalar;
|
|
45
|
+
}
|
|
46
|
+
static deserialize(deserializer) {
|
|
47
|
+
const encBase = group_1.Element.deserialize(deserializer);
|
|
48
|
+
const privateScalar = group_1.Scalar.deserialize(deserializer);
|
|
49
|
+
return new DecKey(encBase, privateScalar);
|
|
50
|
+
}
|
|
51
|
+
encode(serializer) {
|
|
52
|
+
this.encBase.encode(serializer);
|
|
53
|
+
this.privateScalar.encode(serializer);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
exports.DecKey = DecKey;
|
|
57
|
+
;
|
|
58
|
+
class EncKey {
|
|
59
|
+
encBase;
|
|
60
|
+
publicPoint;
|
|
61
|
+
constructor(encBase, publicPoint) {
|
|
62
|
+
this.encBase = encBase;
|
|
63
|
+
this.publicPoint = publicPoint;
|
|
64
|
+
}
|
|
65
|
+
static decode(deserializer) {
|
|
66
|
+
const encBase = group_1.Element.deserialize(deserializer);
|
|
67
|
+
const publicPoint = group_1.Element.deserialize(deserializer);
|
|
68
|
+
return new EncKey(encBase, publicPoint);
|
|
69
|
+
}
|
|
70
|
+
encode(serializer) {
|
|
71
|
+
this.encBase.encode(serializer);
|
|
72
|
+
this.publicPoint.encode(serializer);
|
|
73
|
+
}
|
|
74
|
+
toBytes() {
|
|
75
|
+
const serializer = new ts_sdk_1.Serializer();
|
|
76
|
+
this.encode(serializer);
|
|
77
|
+
return serializer.toUint8Array();
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
exports.EncKey = EncKey;
|
|
81
|
+
;
|
|
82
|
+
function enc(ek, randomizer, ptxt) {
|
|
83
|
+
return new Ciphertext(ek.encBase.scale(randomizer), ptxt.add(ek.publicPoint.scale(randomizer)));
|
|
84
|
+
}
|
|
85
|
+
function dec(dk, ciph) {
|
|
86
|
+
const unblinder = ciph.c0.scale(dk.privateScalar);
|
|
87
|
+
return ciph.c1.sub(unblinder);
|
|
88
|
+
}
|
|
89
|
+
function multiExp(ciphs, scalars) {
|
|
90
|
+
let acc = new Ciphertext(group_1.Element.groupIdentity(), group_1.Element.groupIdentity());
|
|
91
|
+
for (let i = 0; i < ciphs.length; i++) {
|
|
92
|
+
acc = acc.add(ciphs[i].scale(scalars[i]));
|
|
93
|
+
}
|
|
94
|
+
return acc;
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=elgamal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"elgamal.js","sourceRoot":"","sources":["../src/elgamal.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { Deserializer, Serializer } from '@aptos-labs/ts-sdk';
|
|
2
|
+
import * as SimpleElGamalRistretto255 from './simple_elgamal_ristretto255';
|
|
3
|
+
export declare const SCHEME_SIMPLE_ELGAMAL_RISTRETTO255 = 0;
|
|
4
|
+
export declare class EncryptionKey {
|
|
5
|
+
scheme: number;
|
|
6
|
+
inner: SimpleElGamalRistretto255.SimpleElGamalRistretto255EncKey;
|
|
7
|
+
constructor(scheme: number, inner: SimpleElGamalRistretto255.SimpleElGamalRistretto255EncKey);
|
|
8
|
+
static deserialize(deserializer: Deserializer): EncryptionKey;
|
|
9
|
+
static fromBytes(bytes: Uint8Array): EncryptionKey;
|
|
10
|
+
serialize(serializer: Serializer): void;
|
|
11
|
+
toBytes(): Uint8Array;
|
|
12
|
+
}
|
|
13
|
+
export declare class DecryptionKey {
|
|
14
|
+
scheme: number;
|
|
15
|
+
inner: SimpleElGamalRistretto255.SimpleElGamalRistretto255DecKey;
|
|
16
|
+
constructor(scheme: number, inner: SimpleElGamalRistretto255.SimpleElGamalRistretto255DecKey);
|
|
17
|
+
static deserialize(deserializer: Deserializer): DecryptionKey;
|
|
18
|
+
static fromBytes(bytes: Uint8Array): DecryptionKey;
|
|
19
|
+
serialize(serializer: Serializer): void;
|
|
20
|
+
toBytes(): Uint8Array;
|
|
21
|
+
}
|
|
22
|
+
export declare class Ciphertext {
|
|
23
|
+
scheme: number;
|
|
24
|
+
inner: SimpleElGamalRistretto255.SimpleElGamalRistretto255Ciphertext;
|
|
25
|
+
constructor(scheme: number, inner: SimpleElGamalRistretto255.SimpleElGamalRistretto255Ciphertext);
|
|
26
|
+
static deserialize(deserializer: Deserializer): Ciphertext;
|
|
27
|
+
static fromBytes(bytes: Uint8Array): Ciphertext;
|
|
28
|
+
serialize(serializer: Serializer): void;
|
|
29
|
+
toBytes(): Uint8Array;
|
|
30
|
+
}
|
|
31
|
+
export declare function keygen(schemeId?: number): DecryptionKey;
|
|
32
|
+
export declare function deriveEncryptionKey(dk: DecryptionKey): EncryptionKey;
|
|
33
|
+
export declare function encrypt(ek: EncryptionKey, msg: Uint8Array): Ciphertext;
|
|
34
|
+
export declare function decrypt(dk: DecryptionKey, ciphertext: Ciphertext): Uint8Array | undefined;
|
|
35
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/enc/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,KAAK,yBAAyB,MAAM,+BAA+B,CAAC;AAE3E,eAAO,MAAM,kCAAkC,IAAI,CAAC;AAEpD,qBAAa,aAAa;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,yBAAyB,CAAC,+BAA+B,CAAC;gBAErD,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,yBAAyB,CAAC,+BAA+B;IAK5F,MAAM,CAAC,WAAW,CAAC,YAAY,EAAE,YAAY,GAAG,aAAa;IAS7D,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,UAAU,GAAG,aAAa;IAKlD,SAAS,CAAC,UAAU,EAAE,UAAU,GAAG,IAAI;IAKvC,OAAO,IAAI,UAAU;CAKxB;AAED,qBAAa,aAAa;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,yBAAyB,CAAC,+BAA+B,CAAC;gBAErD,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,yBAAyB,CAAC,+BAA+B;IAK5F,MAAM,CAAC,WAAW,CAAC,YAAY,EAAE,YAAY,GAAG,aAAa;IAS7D,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,UAAU,GAAG,aAAa;IAKlD,SAAS,CAAC,UAAU,EAAE,UAAU,GAAG,IAAI;IAKvC,OAAO,IAAI,UAAU;CAKxB;AAED,qBAAa,UAAU;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,yBAAyB,CAAC,mCAAmC,CAAC;gBAEzD,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,yBAAyB,CAAC,mCAAmC;IAKhG,MAAM,CAAC,WAAW,CAAC,YAAY,EAAE,YAAY,GAAG,UAAU;IAS1D,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,UAAU,GAAG,UAAU;IAK/C,SAAS,CAAC,UAAU,EAAE,UAAU,GAAG,IAAI;IAKvC,OAAO,IAAI,UAAU;CAKxB;AAID,wBAAgB,MAAM,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,aAAa,CASvD;AAED,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,aAAa,GAAG,aAAa,CAOpE;AAED,wBAAgB,OAAO,CAAC,EAAE,EAAE,aAAa,EAAE,GAAG,EAAE,UAAU,GAAG,UAAU,CAOtE;AAED,wBAAgB,OAAO,CAAC,EAAE,EAAE,aAAa,EAAE,UAAU,EAAE,UAAU,GAAG,UAAU,GAAG,SAAS,CAMzF"}
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.Ciphertext = exports.DecryptionKey = exports.EncryptionKey = exports.SCHEME_SIMPLE_ELGAMAL_RISTRETTO255 = void 0;
|
|
37
|
+
exports.keygen = keygen;
|
|
38
|
+
exports.deriveEncryptionKey = deriveEncryptionKey;
|
|
39
|
+
exports.encrypt = encrypt;
|
|
40
|
+
exports.decrypt = decrypt;
|
|
41
|
+
const ts_sdk_1 = require("@aptos-labs/ts-sdk");
|
|
42
|
+
const SimpleElGamalRistretto255 = __importStar(require("./simple_elgamal_ristretto255"));
|
|
43
|
+
exports.SCHEME_SIMPLE_ELGAMAL_RISTRETTO255 = 0;
|
|
44
|
+
class EncryptionKey {
|
|
45
|
+
scheme;
|
|
46
|
+
inner;
|
|
47
|
+
constructor(scheme, inner) {
|
|
48
|
+
this.scheme = scheme;
|
|
49
|
+
this.inner = inner;
|
|
50
|
+
}
|
|
51
|
+
static deserialize(deserializer) {
|
|
52
|
+
const scheme = deserializer.deserializeU8();
|
|
53
|
+
if (scheme === exports.SCHEME_SIMPLE_ELGAMAL_RISTRETTO255) {
|
|
54
|
+
const inner = SimpleElGamalRistretto255.SimpleElGamalRistretto255EncKey.deserialize(deserializer);
|
|
55
|
+
return new EncryptionKey(scheme, inner);
|
|
56
|
+
}
|
|
57
|
+
throw new Error(`Unknown scheme: ${scheme}`);
|
|
58
|
+
}
|
|
59
|
+
static fromBytes(bytes) {
|
|
60
|
+
const deserializer = new ts_sdk_1.Deserializer(bytes);
|
|
61
|
+
return EncryptionKey.deserialize(deserializer);
|
|
62
|
+
}
|
|
63
|
+
serialize(serializer) {
|
|
64
|
+
serializer.serializeU8(this.scheme);
|
|
65
|
+
this.inner.serialize(serializer);
|
|
66
|
+
}
|
|
67
|
+
toBytes() {
|
|
68
|
+
const serializer = new ts_sdk_1.Serializer();
|
|
69
|
+
this.serialize(serializer);
|
|
70
|
+
return serializer.toUint8Array();
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
exports.EncryptionKey = EncryptionKey;
|
|
74
|
+
class DecryptionKey {
|
|
75
|
+
scheme;
|
|
76
|
+
inner;
|
|
77
|
+
constructor(scheme, inner) {
|
|
78
|
+
this.scheme = scheme;
|
|
79
|
+
this.inner = inner;
|
|
80
|
+
}
|
|
81
|
+
static deserialize(deserializer) {
|
|
82
|
+
const scheme = deserializer.deserializeU8();
|
|
83
|
+
if (scheme === exports.SCHEME_SIMPLE_ELGAMAL_RISTRETTO255) {
|
|
84
|
+
const inner = SimpleElGamalRistretto255.SimpleElGamalRistretto255DecKey.deserialize(deserializer);
|
|
85
|
+
return new DecryptionKey(scheme, inner);
|
|
86
|
+
}
|
|
87
|
+
throw new Error(`Unknown scheme: ${scheme}`);
|
|
88
|
+
}
|
|
89
|
+
static fromBytes(bytes) {
|
|
90
|
+
const deserializer = new ts_sdk_1.Deserializer(bytes);
|
|
91
|
+
return DecryptionKey.deserialize(deserializer);
|
|
92
|
+
}
|
|
93
|
+
serialize(serializer) {
|
|
94
|
+
serializer.serializeU8(this.scheme);
|
|
95
|
+
this.inner.serialize(serializer);
|
|
96
|
+
}
|
|
97
|
+
toBytes() {
|
|
98
|
+
const serializer = new ts_sdk_1.Serializer();
|
|
99
|
+
this.serialize(serializer);
|
|
100
|
+
return serializer.toUint8Array();
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
exports.DecryptionKey = DecryptionKey;
|
|
104
|
+
class Ciphertext {
|
|
105
|
+
scheme;
|
|
106
|
+
inner;
|
|
107
|
+
constructor(scheme, inner) {
|
|
108
|
+
this.scheme = scheme;
|
|
109
|
+
this.inner = inner;
|
|
110
|
+
}
|
|
111
|
+
static deserialize(deserializer) {
|
|
112
|
+
const scheme = deserializer.deserializeU8();
|
|
113
|
+
if (scheme === exports.SCHEME_SIMPLE_ELGAMAL_RISTRETTO255) {
|
|
114
|
+
const inner = SimpleElGamalRistretto255.SimpleElGamalRistretto255Ciphertext.deserialize(deserializer);
|
|
115
|
+
return new Ciphertext(scheme, inner);
|
|
116
|
+
}
|
|
117
|
+
throw new Error(`Unknown scheme: ${scheme}`);
|
|
118
|
+
}
|
|
119
|
+
static fromBytes(bytes) {
|
|
120
|
+
const deserializer = new ts_sdk_1.Deserializer(bytes);
|
|
121
|
+
return Ciphertext.deserialize(deserializer);
|
|
122
|
+
}
|
|
123
|
+
serialize(serializer) {
|
|
124
|
+
serializer.serializeU8(this.scheme);
|
|
125
|
+
this.inner.serialize(serializer);
|
|
126
|
+
}
|
|
127
|
+
toBytes() {
|
|
128
|
+
const serializer = new ts_sdk_1.Serializer();
|
|
129
|
+
this.serialize(serializer);
|
|
130
|
+
return serializer.toUint8Array();
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
exports.Ciphertext = Ciphertext;
|
|
134
|
+
// Core encryption functions
|
|
135
|
+
function keygen(schemeId) {
|
|
136
|
+
const scheme = schemeId ?? exports.SCHEME_SIMPLE_ELGAMAL_RISTRETTO255;
|
|
137
|
+
if (scheme === exports.SCHEME_SIMPLE_ELGAMAL_RISTRETTO255) {
|
|
138
|
+
const dk = SimpleElGamalRistretto255.keygen();
|
|
139
|
+
return new DecryptionKey(scheme, dk);
|
|
140
|
+
}
|
|
141
|
+
else {
|
|
142
|
+
throw new Error(`Unknown scheme: ${scheme}`);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
function deriveEncryptionKey(dk) {
|
|
146
|
+
if (dk.scheme === exports.SCHEME_SIMPLE_ELGAMAL_RISTRETTO255) {
|
|
147
|
+
const ek = SimpleElGamalRistretto255.deriveEncryptionKey(dk.inner);
|
|
148
|
+
return new EncryptionKey(dk.scheme, ek);
|
|
149
|
+
}
|
|
150
|
+
else {
|
|
151
|
+
throw new Error(`Unknown scheme: ${dk.scheme}`);
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
function encrypt(ek, msg) {
|
|
155
|
+
if (ek.scheme === exports.SCHEME_SIMPLE_ELGAMAL_RISTRETTO255) {
|
|
156
|
+
const ciphertext = SimpleElGamalRistretto255.encrypt(ek.inner, msg);
|
|
157
|
+
return new Ciphertext(ek.scheme, ciphertext);
|
|
158
|
+
}
|
|
159
|
+
else {
|
|
160
|
+
throw new Error(`Unknown scheme: ${ek.scheme}`);
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
function decrypt(dk, ciphertext) {
|
|
164
|
+
if (dk.scheme === exports.SCHEME_SIMPLE_ELGAMAL_RISTRETTO255 && ciphertext.scheme === exports.SCHEME_SIMPLE_ELGAMAL_RISTRETTO255) {
|
|
165
|
+
return SimpleElGamalRistretto255.decrypt(dk.inner, ciphertext.inner);
|
|
166
|
+
}
|
|
167
|
+
else {
|
|
168
|
+
throw new Error(`Unknown scheme: dk=${dk.scheme}, ciphertext=${ciphertext.scheme}`);
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/enc/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { Deserializer, Serializer } from '@aptos-labs/ts-sdk';
|
|
2
|
+
import * as ElGamal from '../elgamal';
|
|
3
|
+
export declare class SimpleElGamalRistretto255EncKey {
|
|
4
|
+
elgamalEk: ElGamal.EncKey;
|
|
5
|
+
constructor(elgamalEk: ElGamal.EncKey);
|
|
6
|
+
static deserialize(deserializer: Deserializer): SimpleElGamalRistretto255EncKey;
|
|
7
|
+
serialize(serializer: Serializer): void;
|
|
8
|
+
}
|
|
9
|
+
export declare class SimpleElGamalRistretto255DecKey {
|
|
10
|
+
elgamalDk: ElGamal.DecKey;
|
|
11
|
+
constructor(elgamalDk: ElGamal.DecKey);
|
|
12
|
+
static deserialize(deserializer: Deserializer): SimpleElGamalRistretto255DecKey;
|
|
13
|
+
serialize(serializer: Serializer): void;
|
|
14
|
+
}
|
|
15
|
+
export declare class SimpleElGamalRistretto255Ciphertext {
|
|
16
|
+
elgamalCiph: ElGamal.Ciphertext;
|
|
17
|
+
symmetricCiph: Uint8Array;
|
|
18
|
+
mac: Uint8Array;
|
|
19
|
+
constructor(elgamalCiph: ElGamal.Ciphertext, symmetricCiph: Uint8Array, mac: Uint8Array);
|
|
20
|
+
static deserialize(deserializer: Deserializer): SimpleElGamalRistretto255Ciphertext;
|
|
21
|
+
serialize(serializer: Serializer): void;
|
|
22
|
+
}
|
|
23
|
+
export declare function keygen(): SimpleElGamalRistretto255DecKey;
|
|
24
|
+
export declare function deriveEncryptionKey(dk: SimpleElGamalRistretto255DecKey): SimpleElGamalRistretto255EncKey;
|
|
25
|
+
export declare function encrypt(ek: SimpleElGamalRistretto255EncKey, msg: Uint8Array): SimpleElGamalRistretto255Ciphertext;
|
|
26
|
+
export declare function decrypt(dk: SimpleElGamalRistretto255DecKey, ciphertext: SimpleElGamalRistretto255Ciphertext): Uint8Array | undefined;
|
|
27
|
+
//# sourceMappingURL=simple_elgamal_ristretto255.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"simple_elgamal_ristretto255.d.ts","sourceRoot":"","sources":["../../src/enc/simple_elgamal_ristretto255.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,KAAK,OAAO,MAAM,YAAY,CAAC;AAItC,qBAAa,+BAA+B;IACxC,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC;gBAEd,SAAS,EAAE,OAAO,CAAC,MAAM;IAIrC,MAAM,CAAC,WAAW,CAAC,YAAY,EAAE,YAAY,GAAG,+BAA+B;IAK/E,SAAS,CAAC,UAAU,EAAE,UAAU,GAAG,IAAI;CAG1C;AAED,qBAAa,+BAA+B;IACxC,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC;gBAEd,SAAS,EAAE,OAAO,CAAC,MAAM;IAIrC,MAAM,CAAC,WAAW,CAAC,YAAY,EAAE,YAAY,GAAG,+BAA+B;IAK/E,SAAS,CAAC,UAAU,EAAE,UAAU,GAAG,IAAI;CAG1C;AAED,qBAAa,mCAAmC;IAC5C,WAAW,EAAE,OAAO,CAAC,UAAU,CAAC;IAChC,aAAa,EAAE,UAAU,CAAC;IAC1B,GAAG,EAAE,UAAU,CAAC;gBAEJ,WAAW,EAAE,OAAO,CAAC,UAAU,EAAE,aAAa,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU;IAMvF,MAAM,CAAC,WAAW,CAAC,YAAY,EAAE,YAAY,GAAG,mCAAmC;IAOnF,SAAS,CAAC,UAAU,EAAE,UAAU,GAAG,IAAI;CAK1C;AAID,wBAAgB,MAAM,IAAI,+BAA+B,CAOxD;AAED,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,+BAA+B,GAAG,+BAA+B,CAOxG;AAED,wBAAgB,OAAO,CAAC,EAAE,EAAE,+BAA+B,EAAE,GAAG,EAAE,UAAU,GAAG,mCAAmC,CAejH;AAED,wBAAgB,OAAO,CAAC,EAAE,EAAE,+BAA+B,EAAE,UAAU,EAAE,mCAAmC,GAAG,UAAU,GAAG,SAAS,CAmBpI"}
|