@digitaldefiance/ecies-lib 1.0.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 +21 -0
- package/README.md +237 -0
- package/dist/backup-code-string.d.ts +26 -0
- package/dist/backup-code-string.d.ts.map +1 -0
- package/dist/backup-code-string.js +69 -0
- package/dist/backup-code-string.js.map +1 -0
- package/dist/constants.d.ts +22 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +177 -0
- package/dist/constants.js.map +1 -0
- package/dist/email-string.d.ts +42 -0
- package/dist/email-string.d.ts.map +1 -0
- package/dist/email-string.js +67 -0
- package/dist/email-string.js.map +1 -0
- package/dist/enumerations/ecies-encryption-type.d.ts +15 -0
- package/dist/enumerations/ecies-encryption-type.d.ts.map +1 -0
- package/dist/enumerations/ecies-encryption-type.js +63 -0
- package/dist/enumerations/ecies-encryption-type.js.map +1 -0
- package/dist/enumerations/ecies-error-type.d.ts +32 -0
- package/dist/enumerations/ecies-error-type.d.ts.map +1 -0
- package/dist/enumerations/ecies-error-type.js +33 -0
- package/dist/enumerations/ecies-error-type.js.map +1 -0
- package/dist/enumerations/guid-brand-type.d.ts +27 -0
- package/dist/enumerations/guid-brand-type.d.ts.map +1 -0
- package/dist/enumerations/guid-brand-type.js +28 -0
- package/dist/enumerations/guid-brand-type.js.map +1 -0
- package/dist/enumerations/guid-error-type.d.ts +7 -0
- package/dist/enumerations/guid-error-type.d.ts.map +1 -0
- package/dist/enumerations/guid-error-type.js +8 -0
- package/dist/enumerations/guid-error-type.js.map +1 -0
- package/dist/enumerations/index.d.ts +13 -0
- package/dist/enumerations/index.d.ts.map +1 -0
- package/dist/enumerations/index.js +13 -0
- package/dist/enumerations/index.js.map +1 -0
- package/dist/enumerations/invalid-email-type.d.ts +6 -0
- package/dist/enumerations/invalid-email-type.d.ts.map +1 -0
- package/dist/enumerations/invalid-email-type.js +7 -0
- package/dist/enumerations/invalid-email-type.js.map +1 -0
- package/dist/enumerations/length-encoding-type.d.ts +7 -0
- package/dist/enumerations/length-encoding-type.d.ts.map +1 -0
- package/dist/enumerations/length-encoding-type.js +8 -0
- package/dist/enumerations/length-encoding-type.js.map +1 -0
- package/dist/enumerations/length-error-type.d.ts +6 -0
- package/dist/enumerations/length-error-type.d.ts.map +1 -0
- package/dist/enumerations/length-error-type.js +7 -0
- package/dist/enumerations/length-error-type.js.map +1 -0
- package/dist/enumerations/member-error-type.d.ts +87 -0
- package/dist/enumerations/member-error-type.d.ts.map +1 -0
- package/dist/enumerations/member-error-type.js +88 -0
- package/dist/enumerations/member-error-type.js.map +1 -0
- package/dist/enumerations/member-type.d.ts +16 -0
- package/dist/enumerations/member-type.d.ts.map +1 -0
- package/dist/enumerations/member-type.js +17 -0
- package/dist/enumerations/member-type.js.map +1 -0
- package/dist/enumerations/pbkdf2-error-type.d.ts +5 -0
- package/dist/enumerations/pbkdf2-error-type.d.ts.map +1 -0
- package/dist/enumerations/pbkdf2-error-type.js +6 -0
- package/dist/enumerations/pbkdf2-error-type.js.map +1 -0
- package/dist/enumerations/pbkdf2-profile.d.ts +5 -0
- package/dist/enumerations/pbkdf2-profile.d.ts.map +1 -0
- package/dist/enumerations/pbkdf2-profile.js +6 -0
- package/dist/enumerations/pbkdf2-profile.js.map +1 -0
- package/dist/enumerations/secure-storage-error-type.d.ts +6 -0
- package/dist/enumerations/secure-storage-error-type.d.ts.map +1 -0
- package/dist/enumerations/secure-storage-error-type.js +7 -0
- package/dist/enumerations/secure-storage-error-type.js.map +1 -0
- package/dist/errors/disposed.d.ts +4 -0
- package/dist/errors/disposed.d.ts.map +1 -0
- package/dist/errors/disposed.js +8 -0
- package/dist/errors/disposed.js.map +1 -0
- package/dist/errors/ecies.d.ts +6 -0
- package/dist/errors/ecies.d.ts.map +1 -0
- package/dist/errors/ecies.js +8 -0
- package/dist/errors/ecies.js.map +1 -0
- package/dist/errors/guid.d.ts +14 -0
- package/dist/errors/guid.d.ts.map +1 -0
- package/dist/errors/guid.js +19 -0
- package/dist/errors/guid.js.map +1 -0
- package/dist/errors/index.d.ts +9 -0
- package/dist/errors/index.d.ts.map +1 -0
- package/dist/errors/index.js +9 -0
- package/dist/errors/index.js.map +1 -0
- package/dist/errors/invalid-backup-code.d.ts +4 -0
- package/dist/errors/invalid-backup-code.d.ts.map +1 -0
- package/dist/errors/invalid-backup-code.js +7 -0
- package/dist/errors/invalid-backup-code.js.map +1 -0
- package/dist/errors/invalid-email.d.ts +6 -0
- package/dist/errors/invalid-email.d.ts.map +1 -0
- package/dist/errors/invalid-email.js +9 -0
- package/dist/errors/invalid-email.js.map +1 -0
- package/dist/errors/length.d.ts +6 -0
- package/dist/errors/length.d.ts.map +1 -0
- package/dist/errors/length.js +9 -0
- package/dist/errors/length.js.map +1 -0
- package/dist/errors/member.d.ts +6 -0
- package/dist/errors/member.d.ts.map +1 -0
- package/dist/errors/member.js +8 -0
- package/dist/errors/member.js.map +1 -0
- package/dist/errors/pbkdf2.d.ts +6 -0
- package/dist/errors/pbkdf2.d.ts.map +1 -0
- package/dist/errors/pbkdf2.js +8 -0
- package/dist/errors/pbkdf2.js.map +1 -0
- package/dist/errors/secure-storage.d.ts +6 -0
- package/dist/errors/secure-storage.d.ts.map +1 -0
- package/dist/errors/secure-storage.js +8 -0
- package/dist/errors/secure-storage.js.map +1 -0
- package/dist/errors/typed.d.ts +5 -0
- package/dist/errors/typed.d.ts.map +1 -0
- package/dist/errors/typed.js +11 -0
- package/dist/errors/typed.js.map +1 -0
- package/dist/guid.d.ts +153 -0
- package/dist/guid.d.ts.map +1 -0
- package/dist/guid.js +604 -0
- package/dist/guid.js.map +1 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +13 -0
- package/dist/index.js.map +1 -0
- package/dist/interfaces/backup-code-consts.d.ts +16 -0
- package/dist/interfaces/backup-code-consts.d.ts.map +1 -0
- package/dist/interfaces/backup-code-consts.js +2 -0
- package/dist/interfaces/backup-code-consts.js.map +1 -0
- package/dist/interfaces/backup-code.d.ts +7 -0
- package/dist/interfaces/backup-code.d.ts.map +1 -0
- package/dist/interfaces/backup-code.js +2 -0
- package/dist/interfaces/backup-code.js.map +1 -0
- package/dist/interfaces/constants.d.ts +45 -0
- package/dist/interfaces/constants.d.ts.map +1 -0
- package/dist/interfaces/constants.js +2 -0
- package/dist/interfaces/constants.js.map +1 -0
- package/dist/interfaces/ecies-config.d.ts +9 -0
- package/dist/interfaces/ecies-config.d.ts.map +1 -0
- package/dist/interfaces/ecies-config.js +2 -0
- package/dist/interfaces/ecies-config.js.map +1 -0
- package/dist/interfaces/ecies-consts.d.ts +58 -0
- package/dist/interfaces/ecies-consts.d.ts.map +1 -0
- package/dist/interfaces/ecies-consts.js +2 -0
- package/dist/interfaces/ecies-consts.js.map +1 -0
- package/dist/interfaces/ecies-file-service.d.ts +7 -0
- package/dist/interfaces/ecies-file-service.d.ts.map +1 -0
- package/dist/interfaces/ecies-file-service.js +2 -0
- package/dist/interfaces/ecies-file-service.js.map +1 -0
- package/dist/interfaces/guid.d.ts +45 -0
- package/dist/interfaces/guid.d.ts.map +1 -0
- package/dist/interfaces/guid.js +2 -0
- package/dist/interfaces/guid.js.map +1 -0
- package/dist/interfaces/index.d.ts +14 -0
- package/dist/interfaces/index.d.ts.map +1 -0
- package/dist/interfaces/index.js +14 -0
- package/dist/interfaces/index.js.map +1 -0
- package/dist/interfaces/member-operational.d.ts +39 -0
- package/dist/interfaces/member-operational.d.ts.map +1 -0
- package/dist/interfaces/member-operational.js +2 -0
- package/dist/interfaces/member-operational.js.map +1 -0
- package/dist/interfaces/member-storage.d.ts +21 -0
- package/dist/interfaces/member-storage.d.ts.map +1 -0
- package/dist/interfaces/member-storage.js +2 -0
- package/dist/interfaces/member-storage.js.map +1 -0
- package/dist/interfaces/member-with-mnemonic.d.ts +7 -0
- package/dist/interfaces/member-with-mnemonic.d.ts.map +1 -0
- package/dist/interfaces/member-with-mnemonic.js +2 -0
- package/dist/interfaces/member-with-mnemonic.js.map +1 -0
- package/dist/interfaces/pbkdf2-config.d.ts +7 -0
- package/dist/interfaces/pbkdf2-config.d.ts.map +1 -0
- package/dist/interfaces/pbkdf2-config.js +2 -0
- package/dist/interfaces/pbkdf2-config.js.map +1 -0
- package/dist/interfaces/pbkdf2-consts.d.ts +9 -0
- package/dist/interfaces/pbkdf2-consts.d.ts.map +1 -0
- package/dist/interfaces/pbkdf2-consts.js +2 -0
- package/dist/interfaces/pbkdf2-consts.js.map +1 -0
- package/dist/interfaces/pbkdf2-result.d.ts +6 -0
- package/dist/interfaces/pbkdf2-result.d.ts.map +1 -0
- package/dist/interfaces/pbkdf2-result.js +2 -0
- package/dist/interfaces/pbkdf2-result.js.map +1 -0
- package/dist/member.d.ts +68 -0
- package/dist/member.d.ts.map +1 -0
- package/dist/member.js +256 -0
- package/dist/member.js.map +1 -0
- package/dist/pbkdf2-profiles.d.ts +6 -0
- package/dist/pbkdf2-profiles.d.ts.map +1 -0
- package/dist/pbkdf2-profiles.js +2 -0
- package/dist/pbkdf2-profiles.js.map +1 -0
- package/dist/secure-buffer.d.ts +38 -0
- package/dist/secure-buffer.d.ts.map +1 -0
- package/dist/secure-buffer.js +161 -0
- package/dist/secure-buffer.js.map +1 -0
- package/dist/secure-string.d.ts +39 -0
- package/dist/secure-string.d.ts.map +1 -0
- package/dist/secure-string.js +188 -0
- package/dist/secure-string.js.map +1 -0
- package/dist/services/aes-gcm.d.ts +56 -0
- package/dist/services/aes-gcm.d.ts.map +1 -0
- package/dist/services/aes-gcm.js +101 -0
- package/dist/services/aes-gcm.js.map +1 -0
- package/dist/services/ecies/crypto-core.d.ts +53 -0
- package/dist/services/ecies/crypto-core.d.ts.map +1 -0
- package/dist/services/ecies/crypto-core.js +158 -0
- package/dist/services/ecies/crypto-core.js.map +1 -0
- package/dist/services/ecies/example.d.ts +25 -0
- package/dist/services/ecies/example.d.ts.map +1 -0
- package/dist/services/ecies/example.js +121 -0
- package/dist/services/ecies/example.js.map +1 -0
- package/dist/services/ecies/file.d.ts +18 -0
- package/dist/services/ecies/file.d.ts.map +1 -0
- package/dist/services/ecies/file.js +106 -0
- package/dist/services/ecies/file.js.map +1 -0
- package/dist/services/ecies/index.d.ts +38 -0
- package/dist/services/ecies/index.d.ts.map +1 -0
- package/dist/services/ecies/index.js +39 -0
- package/dist/services/ecies/index.js.map +1 -0
- package/dist/services/ecies/integration.d.ts +59 -0
- package/dist/services/ecies/integration.d.ts.map +1 -0
- package/dist/services/ecies/integration.js +163 -0
- package/dist/services/ecies/integration.js.map +1 -0
- package/dist/services/ecies/interfaces.d.ts +51 -0
- package/dist/services/ecies/interfaces.d.ts.map +1 -0
- package/dist/services/ecies/interfaces.js +5 -0
- package/dist/services/ecies/interfaces.js.map +1 -0
- package/dist/services/ecies/manual-test.d.ts +29 -0
- package/dist/services/ecies/manual-test.d.ts.map +1 -0
- package/dist/services/ecies/manual-test.js +163 -0
- package/dist/services/ecies/manual-test.js.map +1 -0
- package/dist/services/ecies/multi-recipient.d.ts +49 -0
- package/dist/services/ecies/multi-recipient.d.ts.map +1 -0
- package/dist/services/ecies/multi-recipient.js +222 -0
- package/dist/services/ecies/multi-recipient.js.map +1 -0
- package/dist/services/ecies/service.d.ts +100 -0
- package/dist/services/ecies/service.d.ts.map +1 -0
- package/dist/services/ecies/service.js +186 -0
- package/dist/services/ecies/service.js.map +1 -0
- package/dist/services/ecies/signature.d.ts +27 -0
- package/dist/services/ecies/signature.d.ts.map +1 -0
- package/dist/services/ecies/signature.js +72 -0
- package/dist/services/ecies/signature.js.map +1 -0
- package/dist/services/ecies/single-recipient.d.ts +43 -0
- package/dist/services/ecies/single-recipient.d.ts.map +1 -0
- package/dist/services/ecies/single-recipient.js +196 -0
- package/dist/services/ecies/single-recipient.js.map +1 -0
- package/dist/services/index.d.ts +5 -0
- package/dist/services/index.d.ts.map +1 -0
- package/dist/services/index.js +5 -0
- package/dist/services/index.js.map +1 -0
- package/dist/services/password-login.d.ts +41 -0
- package/dist/services/password-login.d.ts.map +1 -0
- package/dist/services/password-login.js +96 -0
- package/dist/services/password-login.js.map +1 -0
- package/dist/services/pbkdf2.d.ts +49 -0
- package/dist/services/pbkdf2.d.ts.map +1 -0
- package/dist/services/pbkdf2.js +97 -0
- package/dist/services/pbkdf2.js.map +1 -0
- package/dist/services/xor.d.ts +37 -0
- package/dist/services/xor.d.ts.map +1 -0
- package/dist/services/xor.js +63 -0
- package/dist/services/xor.js.map +1 -0
- package/dist/types.d.ts +29 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/utils.d.ts +62 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +244 -0
- package/dist/utils.js.map +1 -0
- package/dist/xor.d.ts +37 -0
- package/dist/xor.d.ts.map +1 -0
- package/dist/xor.js +63 -0
- package/dist/xor.js.map +1 -0
- package/package.json +60 -0
package/dist/member.js
ADDED
|
@@ -0,0 +1,256 @@
|
|
|
1
|
+
import { ECIES } from './constants';
|
|
2
|
+
import { EmailString } from './email-string';
|
|
3
|
+
import MemberErrorType from './enumerations/member-error-type';
|
|
4
|
+
import MemberType from './enumerations/member-type';
|
|
5
|
+
import { MemberError } from './errors/member';
|
|
6
|
+
import { GuidV4 } from './guid';
|
|
7
|
+
import { SecureBuffer } from './secure-buffer';
|
|
8
|
+
import { base64ToUint8Array, uint8ArrayToBase64, uint8ArrayToHex, } from './utils';
|
|
9
|
+
/**
|
|
10
|
+
* A member of Brightchain.
|
|
11
|
+
* In the Owner Free Filesystem (OFF), members are used to:
|
|
12
|
+
* 1. Sign and verify data
|
|
13
|
+
* 2. Encrypt and decrypt data
|
|
14
|
+
* 3. Participate in voting
|
|
15
|
+
* 4. Establish ownership of data
|
|
16
|
+
*/
|
|
17
|
+
export class Member {
|
|
18
|
+
_eciesService;
|
|
19
|
+
_id;
|
|
20
|
+
_type;
|
|
21
|
+
_name;
|
|
22
|
+
_email;
|
|
23
|
+
_publicKey;
|
|
24
|
+
_creatorId;
|
|
25
|
+
_dateCreated;
|
|
26
|
+
_dateUpdated;
|
|
27
|
+
_privateKey;
|
|
28
|
+
_wallet;
|
|
29
|
+
constructor(
|
|
30
|
+
// Add injected services as parameters
|
|
31
|
+
eciesService,
|
|
32
|
+
// Original parameters
|
|
33
|
+
type, name, email, publicKey, privateKey, wallet, id, dateCreated, dateUpdated, creatorId) {
|
|
34
|
+
// Assign injected services
|
|
35
|
+
this._eciesService = eciesService;
|
|
36
|
+
// Assign original parameters
|
|
37
|
+
this._type = type;
|
|
38
|
+
this._id = id ?? GuidV4.new();
|
|
39
|
+
this._name = name;
|
|
40
|
+
if (!this._name || this._name.length == 0) {
|
|
41
|
+
throw new MemberError(MemberErrorType.MissingMemberName);
|
|
42
|
+
}
|
|
43
|
+
if (this._name.trim() != this._name) {
|
|
44
|
+
throw new MemberError(MemberErrorType.InvalidMemberNameWhitespace);
|
|
45
|
+
}
|
|
46
|
+
this._email = email;
|
|
47
|
+
this._publicKey = publicKey;
|
|
48
|
+
this._privateKey = privateKey;
|
|
49
|
+
this._wallet = wallet;
|
|
50
|
+
// don't create a new date object with nearly identical values to the existing one
|
|
51
|
+
let _now = null;
|
|
52
|
+
const now = function () {
|
|
53
|
+
if (!_now) {
|
|
54
|
+
_now = new Date();
|
|
55
|
+
}
|
|
56
|
+
return _now;
|
|
57
|
+
};
|
|
58
|
+
this._dateCreated = dateCreated ?? now();
|
|
59
|
+
this._dateUpdated = dateUpdated ?? now();
|
|
60
|
+
this._creatorId = creatorId ?? this._id;
|
|
61
|
+
}
|
|
62
|
+
// Required getters
|
|
63
|
+
get id() {
|
|
64
|
+
return this._id;
|
|
65
|
+
}
|
|
66
|
+
get type() {
|
|
67
|
+
return this._type;
|
|
68
|
+
}
|
|
69
|
+
get name() {
|
|
70
|
+
return this._name;
|
|
71
|
+
}
|
|
72
|
+
get email() {
|
|
73
|
+
return this._email;
|
|
74
|
+
}
|
|
75
|
+
get publicKey() {
|
|
76
|
+
return this._publicKey;
|
|
77
|
+
}
|
|
78
|
+
get creatorId() {
|
|
79
|
+
return this._creatorId;
|
|
80
|
+
}
|
|
81
|
+
get dateCreated() {
|
|
82
|
+
return this._dateCreated;
|
|
83
|
+
}
|
|
84
|
+
get dateUpdated() {
|
|
85
|
+
return this._dateUpdated;
|
|
86
|
+
}
|
|
87
|
+
// Optional private data getters
|
|
88
|
+
get privateKey() {
|
|
89
|
+
return this._privateKey;
|
|
90
|
+
}
|
|
91
|
+
get wallet() {
|
|
92
|
+
if (!this._wallet) {
|
|
93
|
+
throw new MemberError(MemberErrorType.NoWallet);
|
|
94
|
+
}
|
|
95
|
+
return this._wallet;
|
|
96
|
+
}
|
|
97
|
+
// State getters
|
|
98
|
+
get hasPrivateKey() {
|
|
99
|
+
return this._privateKey !== undefined;
|
|
100
|
+
}
|
|
101
|
+
unloadPrivateKey() {
|
|
102
|
+
// Do not dispose here; tests expect the same SecureBuffer instance to remain usable
|
|
103
|
+
// when reloaded into another member in the same process.
|
|
104
|
+
this._privateKey = undefined;
|
|
105
|
+
}
|
|
106
|
+
unloadWallet() {
|
|
107
|
+
this._wallet = undefined;
|
|
108
|
+
}
|
|
109
|
+
unloadWalletAndPrivateKey() {
|
|
110
|
+
this.unloadWallet();
|
|
111
|
+
this.unloadPrivateKey();
|
|
112
|
+
}
|
|
113
|
+
loadWallet(mnemonic) {
|
|
114
|
+
if (this._wallet) {
|
|
115
|
+
throw new MemberError(MemberErrorType.WalletAlreadyLoaded);
|
|
116
|
+
}
|
|
117
|
+
const { wallet } = this._eciesService.walletAndSeedFromMnemonic(mnemonic);
|
|
118
|
+
const privateKey = wallet.getPrivateKey();
|
|
119
|
+
const publicKey = wallet.getPublicKey();
|
|
120
|
+
const publicKeyWithPrefix = new Uint8Array(publicKey.length + 1);
|
|
121
|
+
publicKeyWithPrefix[0] = ECIES.PUBLIC_KEY_MAGIC;
|
|
122
|
+
publicKeyWithPrefix.set(publicKey, 1);
|
|
123
|
+
if (uint8ArrayToHex(publicKeyWithPrefix) !== uint8ArrayToHex(this._publicKey)) {
|
|
124
|
+
throw new MemberError(MemberErrorType.InvalidMnemonic);
|
|
125
|
+
}
|
|
126
|
+
this._wallet = wallet;
|
|
127
|
+
this._privateKey = new SecureBuffer(privateKey);
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Loads the private key and optionally the voting private key.
|
|
131
|
+
*
|
|
132
|
+
* @param privateKey The private key to load.
|
|
133
|
+
* @param votingPrivateKey The voting private key to load.
|
|
134
|
+
*/
|
|
135
|
+
loadPrivateKey(privateKey) {
|
|
136
|
+
this._privateKey = privateKey;
|
|
137
|
+
}
|
|
138
|
+
sign(data) {
|
|
139
|
+
if (!this._privateKey) {
|
|
140
|
+
throw new MemberError(MemberErrorType.MissingPrivateKey);
|
|
141
|
+
}
|
|
142
|
+
return this._eciesService.signMessage(this._privateKey.value, data);
|
|
143
|
+
}
|
|
144
|
+
signData(data) {
|
|
145
|
+
if (!this._privateKey) {
|
|
146
|
+
throw new MemberError(MemberErrorType.MissingPrivateKey);
|
|
147
|
+
}
|
|
148
|
+
return this._eciesService.signMessage(new Uint8Array(this._privateKey.value), data);
|
|
149
|
+
}
|
|
150
|
+
verify(signature, data) {
|
|
151
|
+
return this._eciesService.verifyMessage(this._publicKey, data, signature);
|
|
152
|
+
}
|
|
153
|
+
verifySignature(data, signature, publicKey) {
|
|
154
|
+
return this._eciesService.verifyMessage(publicKey, data, signature);
|
|
155
|
+
}
|
|
156
|
+
static MAX_ENCRYPTION_SIZE = 1024 * 1024 * 10; // 10MB limit
|
|
157
|
+
static VALID_STRING_REGEX = /^[\x20-\x7E\n\r\t]*$/; // Printable ASCII + common whitespace
|
|
158
|
+
async encryptData(data, recipientPublicKey) {
|
|
159
|
+
// Validate input
|
|
160
|
+
if (!data) {
|
|
161
|
+
throw new MemberError(MemberErrorType.MissingEncryptionData);
|
|
162
|
+
}
|
|
163
|
+
// Check size limit
|
|
164
|
+
const arr = data instanceof Uint8Array ? data : new TextEncoder().encode(data);
|
|
165
|
+
if (arr.length > Member.MAX_ENCRYPTION_SIZE) {
|
|
166
|
+
throw new MemberError(MemberErrorType.EncryptionDataTooLarge);
|
|
167
|
+
}
|
|
168
|
+
// Use recipient public key or self public key
|
|
169
|
+
const targetPublicKey = recipientPublicKey || this._publicKey;
|
|
170
|
+
return await this._eciesService.encryptSimpleOrSingle(false, targetPublicKey, arr);
|
|
171
|
+
}
|
|
172
|
+
async decryptData(encryptedData) {
|
|
173
|
+
if (!this._privateKey) {
|
|
174
|
+
throw new MemberError(MemberErrorType.MissingPrivateKey);
|
|
175
|
+
}
|
|
176
|
+
// decryptSingleWithHeader now returns the Uint8Array directly
|
|
177
|
+
return await this._eciesService.decryptSimpleOrSingleWithHeader(false, new Uint8Array(this._privateKey.value), encryptedData);
|
|
178
|
+
}
|
|
179
|
+
toJson() {
|
|
180
|
+
const storage = {
|
|
181
|
+
id: this._id.toString(),
|
|
182
|
+
type: this._type,
|
|
183
|
+
name: this._name,
|
|
184
|
+
email: this._email.toString(),
|
|
185
|
+
publicKey: uint8ArrayToBase64(this._publicKey),
|
|
186
|
+
creatorId: this._creatorId.toString(),
|
|
187
|
+
dateCreated: this._dateCreated.toISOString(),
|
|
188
|
+
dateUpdated: this._dateUpdated.toISOString(),
|
|
189
|
+
};
|
|
190
|
+
return JSON.stringify(storage);
|
|
191
|
+
}
|
|
192
|
+
dispose() {
|
|
193
|
+
// Ensure secret material is zeroized when disposing
|
|
194
|
+
try {
|
|
195
|
+
this._privateKey?.dispose();
|
|
196
|
+
}
|
|
197
|
+
finally {
|
|
198
|
+
this.unloadWalletAndPrivateKey();
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
static fromJson(json,
|
|
202
|
+
// Add injected services as parameters
|
|
203
|
+
eciesService) {
|
|
204
|
+
const storage = JSON.parse(json);
|
|
205
|
+
const email = new EmailString(storage.email);
|
|
206
|
+
// Pass injected services to constructor
|
|
207
|
+
const dateCreated = new Date(storage.dateCreated);
|
|
208
|
+
return new Member(eciesService, storage.type, storage.name, email, base64ToUint8Array(storage.publicKey), undefined, undefined, new GuidV4(storage.id), dateCreated, new Date(storage.dateUpdated), new GuidV4(storage.creatorId));
|
|
209
|
+
}
|
|
210
|
+
static fromMnemonic(mnemonic, eciesService) {
|
|
211
|
+
const { wallet } = eciesService.walletAndSeedFromMnemonic(mnemonic);
|
|
212
|
+
const privateKey = wallet.getPrivateKey();
|
|
213
|
+
const publicKey = wallet.getPublicKey();
|
|
214
|
+
const publicKeyWithPrefix = new Uint8Array(publicKey.length + 1);
|
|
215
|
+
publicKeyWithPrefix[0] = ECIES.PUBLIC_KEY_MAGIC;
|
|
216
|
+
publicKeyWithPrefix.set(publicKey, 1);
|
|
217
|
+
return new Member(eciesService, MemberType.User, 'Test User', new EmailString('test@example.com'), publicKeyWithPrefix, new SecureBuffer(privateKey), wallet);
|
|
218
|
+
}
|
|
219
|
+
static newMember(
|
|
220
|
+
// Add injected services as parameters
|
|
221
|
+
eciesService,
|
|
222
|
+
// Original parameters
|
|
223
|
+
type, name, email, forceMnemonic, createdBy) {
|
|
224
|
+
// Validate inputs first
|
|
225
|
+
if (!name || name.length == 0) {
|
|
226
|
+
throw new MemberError(MemberErrorType.MissingMemberName);
|
|
227
|
+
}
|
|
228
|
+
if (name.trim() != name) {
|
|
229
|
+
throw new MemberError(MemberErrorType.InvalidMemberNameWhitespace);
|
|
230
|
+
}
|
|
231
|
+
if (!email || email.toString().length == 0) {
|
|
232
|
+
throw new MemberError(MemberErrorType.MissingEmail);
|
|
233
|
+
}
|
|
234
|
+
if (email.toString().trim() != email.toString()) {
|
|
235
|
+
throw new MemberError(MemberErrorType.InvalidEmailWhitespace);
|
|
236
|
+
}
|
|
237
|
+
// Use injected services
|
|
238
|
+
const mnemonic = forceMnemonic ?? eciesService.generateNewMnemonic();
|
|
239
|
+
const { wallet } = eciesService.walletAndSeedFromMnemonic(mnemonic);
|
|
240
|
+
// Get private key from wallet
|
|
241
|
+
const privateKey = wallet.getPrivateKey();
|
|
242
|
+
// Get public key with 0x04 prefix
|
|
243
|
+
const publicKey = wallet.getPublicKey();
|
|
244
|
+
const publicKeyWithPrefix = new Uint8Array(publicKey.length + 1);
|
|
245
|
+
publicKeyWithPrefix[0] = ECIES.PUBLIC_KEY_MAGIC;
|
|
246
|
+
publicKeyWithPrefix.set(publicKey, 1);
|
|
247
|
+
const newId = GuidV4.new();
|
|
248
|
+
const dateCreated = new Date();
|
|
249
|
+
return {
|
|
250
|
+
// Pass injected services to constructor
|
|
251
|
+
member: new Member(eciesService, type, name, email, publicKeyWithPrefix, new SecureBuffer(privateKey), wallet, newId, dateCreated, dateCreated, createdBy ?? newId),
|
|
252
|
+
mnemonic,
|
|
253
|
+
};
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
//# sourceMappingURL=member.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"member.js","sourceRoot":"","sources":["../src/member.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pbkdf2-profiles.d.ts","sourceRoot":"","sources":["../src/pbkdf2-profiles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAE3D,MAAM,MAAM,cAAc,GAAG;KAC1B,GAAG,IAAI,iBAAiB,GAAG,aAAa;CAC1C,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pbkdf2-profiles.js","sourceRoot":"","sources":["../src/pbkdf2-profiles.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { FullHexGuid, RawGuidUint8Array } from './types';
|
|
2
|
+
/**
|
|
3
|
+
* A secure string buffer is a buffer whose intent is to prevent the raw password from being stored in memory.
|
|
4
|
+
* The buffer is encrypted with a key derived from a GUID.
|
|
5
|
+
* The GUID is stored in the clear, but the buffer is encrypted with a key derived from the GUID.
|
|
6
|
+
* This allows the buffer to be decrypted, but only if the GUID and salt are known.
|
|
7
|
+
*/
|
|
8
|
+
export declare class SecureBuffer {
|
|
9
|
+
private _disposed;
|
|
10
|
+
private readonly _id;
|
|
11
|
+
private readonly _length;
|
|
12
|
+
private readonly _obfuscatedValue;
|
|
13
|
+
private readonly _key;
|
|
14
|
+
private readonly _obfuscatedChecksum;
|
|
15
|
+
private _disposedAt?;
|
|
16
|
+
constructor(data?: Uint8Array);
|
|
17
|
+
dispose(): void;
|
|
18
|
+
private assertNotDisposed;
|
|
19
|
+
static fromString(data: string): SecureBuffer;
|
|
20
|
+
get disposedAtStack(): string | undefined;
|
|
21
|
+
get id(): FullHexGuid;
|
|
22
|
+
get idUint8Array(): RawGuidUint8Array;
|
|
23
|
+
get originalLength(): number;
|
|
24
|
+
get value(): Uint8Array;
|
|
25
|
+
get valueAsString(): string;
|
|
26
|
+
get valueAsHexString(): string;
|
|
27
|
+
get valueAsBase64String(): string;
|
|
28
|
+
get checksum(): string;
|
|
29
|
+
private generateSimpleChecksum;
|
|
30
|
+
private createSimpleObfuscatedChecksum;
|
|
31
|
+
private validateSimpleChecksum;
|
|
32
|
+
private timingSafeEqual;
|
|
33
|
+
private validateObfuscatedChecksum;
|
|
34
|
+
private obfuscateData;
|
|
35
|
+
private deobfuscateData;
|
|
36
|
+
get length(): number;
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=secure-buffer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"secure-buffer.d.ts","sourceRoot":"","sources":["../src/secure-buffer.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAGzD;;;;;GAKG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,SAAS,CAAkB;IACnC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAS;IAC7B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAa;IAC9C,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAa;IAClC,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAa;IACjD,OAAO,CAAC,WAAW,CAAC,CAAS;gBACjB,IAAI,CAAC,EAAE,UAAU;IAgBtB,OAAO,IAAI,IAAI;IAWtB,OAAO,CAAC,iBAAiB;WAUX,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY;IAGpD,IAAW,eAAe,IAAI,MAAM,GAAG,SAAS,CAE/C;IACD,IAAW,EAAE,IAAI,WAAW,CAG3B;IACD,IAAW,YAAY,IAAI,iBAAiB,CAG3C;IACD,IAAW,cAAc,IAAI,MAAM,CAGlC;IACD,IAAW,KAAK,IAAI,UAAU,CA4B7B;IACD,IAAW,aAAa,IAAI,MAAM,CAGjC;IACD,IAAW,gBAAgB,IAAI,MAAM,CAGpC;IACD,IAAW,mBAAmB,IAAI,MAAM,CAGvC;IACD,IAAW,QAAQ,IAAI,MAAM,CAM5B;IACD,OAAO,CAAC,sBAAsB;IAS9B,OAAO,CAAC,8BAA8B;IAOtC,OAAO,CAAC,sBAAsB;IAQ9B,OAAO,CAAC,eAAe;IAUvB,OAAO,CAAC,0BAA0B;IAMlC,OAAO,CAAC,aAAa;IAGrB,OAAO,CAAC,eAAe;IAGvB,IAAW,MAAM,IAAI,MAAM,CAG1B;CACF"}
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
import { SecureStorageErrorType } from './enumerations/secure-storage-error-type';
|
|
2
|
+
import { DisposedError } from './errors/disposed';
|
|
3
|
+
import { SecureStorageError } from './errors/secure-storage';
|
|
4
|
+
import { GuidV4 } from './guid';
|
|
5
|
+
import { XorService } from './services/xor';
|
|
6
|
+
import { uint8ArrayToHex } from './utils';
|
|
7
|
+
/**
|
|
8
|
+
* A secure string buffer is a buffer whose intent is to prevent the raw password from being stored in memory.
|
|
9
|
+
* The buffer is encrypted with a key derived from a GUID.
|
|
10
|
+
* The GUID is stored in the clear, but the buffer is encrypted with a key derived from the GUID.
|
|
11
|
+
* This allows the buffer to be decrypted, but only if the GUID and salt are known.
|
|
12
|
+
*/
|
|
13
|
+
export class SecureBuffer {
|
|
14
|
+
_disposed = false;
|
|
15
|
+
_id;
|
|
16
|
+
_length;
|
|
17
|
+
_obfuscatedValue;
|
|
18
|
+
_key;
|
|
19
|
+
_obfuscatedChecksum;
|
|
20
|
+
_disposedAt;
|
|
21
|
+
constructor(data) {
|
|
22
|
+
this._id = GuidV4.new();
|
|
23
|
+
// don't bother encrypting an empty buffer
|
|
24
|
+
if (data === undefined || data.length === 0) {
|
|
25
|
+
this._length = 0;
|
|
26
|
+
this._obfuscatedValue = new Uint8Array(0);
|
|
27
|
+
this._key = new Uint8Array(0);
|
|
28
|
+
this._obfuscatedChecksum = new Uint8Array(0);
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
this._length = data.length;
|
|
32
|
+
this._key = this.idUint8Array;
|
|
33
|
+
this._obfuscatedValue = this.obfuscateData(data);
|
|
34
|
+
// Create a simple checksum without crypto for synchronous operation
|
|
35
|
+
this._obfuscatedChecksum = this.createSimpleObfuscatedChecksum(data);
|
|
36
|
+
}
|
|
37
|
+
dispose() {
|
|
38
|
+
const err = new DisposedError();
|
|
39
|
+
if (typeof Error.captureStackTrace === 'function') {
|
|
40
|
+
Error.captureStackTrace(err, this.dispose);
|
|
41
|
+
}
|
|
42
|
+
this._disposedAt = err.stack ?? 'stack unavailable';
|
|
43
|
+
this._obfuscatedValue.fill(0);
|
|
44
|
+
this._key.fill(0);
|
|
45
|
+
this._obfuscatedChecksum.fill(0);
|
|
46
|
+
this._disposed = true;
|
|
47
|
+
}
|
|
48
|
+
assertNotDisposed() {
|
|
49
|
+
if (!this._disposed)
|
|
50
|
+
return;
|
|
51
|
+
const e = new DisposedError();
|
|
52
|
+
try {
|
|
53
|
+
e.disposedAt = this._disposedAt;
|
|
54
|
+
}
|
|
55
|
+
catch {
|
|
56
|
+
// ignore if Error object is sealed/frozen
|
|
57
|
+
}
|
|
58
|
+
throw e;
|
|
59
|
+
}
|
|
60
|
+
static fromString(data) {
|
|
61
|
+
return new SecureBuffer(new TextEncoder().encode(data));
|
|
62
|
+
}
|
|
63
|
+
get disposedAtStack() {
|
|
64
|
+
return this._disposedAt;
|
|
65
|
+
}
|
|
66
|
+
get id() {
|
|
67
|
+
this.assertNotDisposed();
|
|
68
|
+
return this._id.asFullHexGuid;
|
|
69
|
+
}
|
|
70
|
+
get idUint8Array() {
|
|
71
|
+
this.assertNotDisposed();
|
|
72
|
+
return this._id.asRawGuidUint8Array;
|
|
73
|
+
}
|
|
74
|
+
get originalLength() {
|
|
75
|
+
this.assertNotDisposed();
|
|
76
|
+
return this._length;
|
|
77
|
+
}
|
|
78
|
+
get value() {
|
|
79
|
+
this.assertNotDisposed();
|
|
80
|
+
if (this._length === 0) {
|
|
81
|
+
return new Uint8Array(0);
|
|
82
|
+
}
|
|
83
|
+
try {
|
|
84
|
+
const deobfuscatedResult = this.deobfuscateData(this._obfuscatedValue);
|
|
85
|
+
if (deobfuscatedResult.length !== this._length) {
|
|
86
|
+
throw new SecureStorageError(SecureStorageErrorType.DecryptedValueLengthMismatch);
|
|
87
|
+
}
|
|
88
|
+
if (!this.validateObfuscatedChecksum(deobfuscatedResult)) {
|
|
89
|
+
throw new SecureStorageError(SecureStorageErrorType.DecryptedValueChecksumMismatch);
|
|
90
|
+
}
|
|
91
|
+
return deobfuscatedResult;
|
|
92
|
+
}
|
|
93
|
+
catch (error) {
|
|
94
|
+
// If it's already a SecureStorageError, re-throw it
|
|
95
|
+
if (error instanceof SecureStorageError) {
|
|
96
|
+
throw error;
|
|
97
|
+
}
|
|
98
|
+
// Convert any other error (including AES-GCM authentication errors) to SecureStorageError
|
|
99
|
+
throw new SecureStorageError(SecureStorageErrorType.DecryptedValueChecksumMismatch);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
get valueAsString() {
|
|
103
|
+
this.assertNotDisposed();
|
|
104
|
+
return new TextDecoder().decode(this.value);
|
|
105
|
+
}
|
|
106
|
+
get valueAsHexString() {
|
|
107
|
+
this.assertNotDisposed();
|
|
108
|
+
return uint8ArrayToHex(this.value);
|
|
109
|
+
}
|
|
110
|
+
get valueAsBase64String() {
|
|
111
|
+
this.assertNotDisposed();
|
|
112
|
+
return btoa(String.fromCharCode(...this.value));
|
|
113
|
+
}
|
|
114
|
+
get checksum() {
|
|
115
|
+
this.assertNotDisposed();
|
|
116
|
+
const deobfuscatedChecksum = new TextDecoder().decode(this.deobfuscateData(this._obfuscatedChecksum));
|
|
117
|
+
return deobfuscatedChecksum;
|
|
118
|
+
}
|
|
119
|
+
generateSimpleChecksum(data) {
|
|
120
|
+
const dataBytes = typeof data === 'string' ? new TextEncoder().encode(data) : data;
|
|
121
|
+
let hash = 0;
|
|
122
|
+
for (let i = 0; i < dataBytes.length; i++) {
|
|
123
|
+
hash = ((hash << 5) - hash + dataBytes[i]) & 0xffffffff;
|
|
124
|
+
}
|
|
125
|
+
return hash.toString(16);
|
|
126
|
+
}
|
|
127
|
+
createSimpleObfuscatedChecksum(data) {
|
|
128
|
+
const checksum = this.generateSimpleChecksum(data);
|
|
129
|
+
const result = this.obfuscateData(new TextEncoder().encode(checksum));
|
|
130
|
+
return result;
|
|
131
|
+
}
|
|
132
|
+
validateSimpleChecksum(data, checksum) {
|
|
133
|
+
const generatedChecksum = this.generateSimpleChecksum(data);
|
|
134
|
+
return generatedChecksum === checksum;
|
|
135
|
+
}
|
|
136
|
+
timingSafeEqual(a, b) {
|
|
137
|
+
if (a.length !== b.length) {
|
|
138
|
+
return false;
|
|
139
|
+
}
|
|
140
|
+
let result = 0;
|
|
141
|
+
for (let i = 0; i < a.length; i++) {
|
|
142
|
+
result |= a[i] ^ b[i];
|
|
143
|
+
}
|
|
144
|
+
return result === 0;
|
|
145
|
+
}
|
|
146
|
+
validateObfuscatedChecksum(data) {
|
|
147
|
+
const deobfuscatedChecksum = new TextDecoder().decode(this.deobfuscateData(this._obfuscatedChecksum));
|
|
148
|
+
return this.validateSimpleChecksum(data, deobfuscatedChecksum);
|
|
149
|
+
}
|
|
150
|
+
obfuscateData(data) {
|
|
151
|
+
return XorService.xor(data, this._key);
|
|
152
|
+
}
|
|
153
|
+
deobfuscateData(data) {
|
|
154
|
+
return XorService.xor(data, this._key);
|
|
155
|
+
}
|
|
156
|
+
get length() {
|
|
157
|
+
this.assertNotDisposed();
|
|
158
|
+
return this._length;
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
//# sourceMappingURL=secure-buffer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"secure-buffer.js","sourceRoot":"","sources":["../src/secure-buffer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { FullHexGuid, RawGuidUint8Array } from './types';
|
|
2
|
+
/**
|
|
3
|
+
* A secure string buffer is a buffer whose intent is to prevent the raw password from being stored in memory.
|
|
4
|
+
*/
|
|
5
|
+
export declare class SecureString {
|
|
6
|
+
private _disposed;
|
|
7
|
+
private readonly _isNull;
|
|
8
|
+
private readonly _id;
|
|
9
|
+
private readonly _length;
|
|
10
|
+
private readonly _obfuscatedValue;
|
|
11
|
+
private readonly _key;
|
|
12
|
+
private readonly _obfuscatedChecksum;
|
|
13
|
+
private _disposedAt?;
|
|
14
|
+
constructor(data?: string | Uint8Array | null);
|
|
15
|
+
private assertNotDisposed;
|
|
16
|
+
dispose(): void;
|
|
17
|
+
get disposedAtStack(): string | undefined;
|
|
18
|
+
get id(): FullHexGuid;
|
|
19
|
+
get idUint8Array(): RawGuidUint8Array;
|
|
20
|
+
get originalLength(): number;
|
|
21
|
+
get valueAsUint8Array(): Uint8Array;
|
|
22
|
+
get value(): string | null;
|
|
23
|
+
get notNullValue(): string;
|
|
24
|
+
get valueAsHexString(): string;
|
|
25
|
+
get valueAsBase64String(): string;
|
|
26
|
+
get hasValue(): boolean;
|
|
27
|
+
get checksum(): string;
|
|
28
|
+
get length(): number;
|
|
29
|
+
private generateChecksum;
|
|
30
|
+
private createSimpleChecksum;
|
|
31
|
+
private createSimpleObfuscatedChecksum;
|
|
32
|
+
private createObfuscatedChecksum;
|
|
33
|
+
private validateChecksum;
|
|
34
|
+
private timingSafeEqual;
|
|
35
|
+
private validateObfuscatedChecksum;
|
|
36
|
+
private obfuscateData;
|
|
37
|
+
private deobfuscateData;
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=secure-string.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"secure-string.d.ts","sourceRoot":"","sources":["../src/secure-string.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAGzD;;GAEG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,SAAS,CAAkB;IACnC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAU;IAClC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAS;IAC7B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAa;IAC9C,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAa;IAClC,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAa;IACjD,OAAO,CAAC,WAAW,CAAC,CAAS;gBACjB,IAAI,CAAC,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI;IAuB7C,OAAO,CAAC,iBAAiB;IAUlB,OAAO,IAAI,IAAI;IAWtB,IAAW,eAAe,IAAI,MAAM,GAAG,SAAS,CAE/C;IACD,IAAW,EAAE,IAAI,WAAW,CAG3B;IACD,IAAW,YAAY,IAAI,iBAAiB,CAG3C;IACD,IAAW,cAAc,IAAI,MAAM,CAGlC;IACD,IAAW,iBAAiB,IAAI,UAAU,CAoCzC;IACD,IAAW,KAAK,IAAI,MAAM,GAAG,IAAI,CAMhC;IACD,IAAW,YAAY,IAAI,MAAM,CAMhC;IACD,IAAW,gBAAgB,IAAI,MAAM,CAGpC;IACD,IAAW,mBAAmB,IAAI,MAAM,CAGvC;IACD,IAAW,QAAQ,IAAI,OAAO,CAG7B;IACD,IAAW,QAAQ,IAAI,MAAM,CAM5B;IACD,IAAW,MAAM,IAAI,MAAM,CAG1B;YACa,gBAAgB;IAS9B,OAAO,CAAC,oBAAoB;IAQ5B,OAAO,CAAC,8BAA8B;YASxB,wBAAwB;YAOxB,gBAAgB;IAQ9B,OAAO,CAAC,eAAe;YAUT,0BAA0B;IAQxC,OAAO,CAAC,aAAa;IAGrB,OAAO,CAAC,eAAe;CAGxB"}
|