@opentdf/sdk 0.2.0 → 0.3.0-beta.2050
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/src/access.js +1 -2
- package/dist/cjs/src/auth/auth.js +1 -1
- package/dist/cjs/src/encodings/base64.js +1 -1
- package/dist/cjs/src/index.js +2 -1
- package/dist/cjs/src/nanoclients.js +17 -10
- package/dist/cjs/src/nanotdf/Client.js +1 -1
- package/dist/cjs/src/nanotdf/NanoTDF.js +1 -1
- package/dist/cjs/src/nanotdf/encrypt-dataset.js +1 -1
- package/dist/cjs/src/nanotdf/encrypt.js +1 -1
- package/dist/cjs/src/nanotdf/helpers/getHkdfSalt.js +1 -1
- package/dist/cjs/src/nanotdf-crypto/digest.js +1 -1
- package/dist/cjs/src/nanotdf-crypto/pemPublicToCrypto.js +4 -27
- package/dist/cjs/src/opentdf.js +175 -45
- package/dist/cjs/src/tdf/Policy.js +15 -12
- package/dist/cjs/src/version.js +1 -1
- package/dist/cjs/tdf3/index.js +1 -1
- package/dist/cjs/tdf3/src/assertions.js +1 -1
- package/dist/cjs/tdf3/src/crypto/salt.js +12 -0
- package/dist/cjs/tdf3/src/models/attribute.js +3 -0
- package/dist/cjs/tdf3/src/models/index.js +2 -2
- package/dist/cjs/tdf3/src/models/key-access.js +3 -2
- package/dist/cjs/tdf3/src/tdf.js +8 -3
- package/dist/types/src/access.d.ts.map +1 -1
- package/dist/types/src/auth/auth.d.ts +2 -2
- package/dist/types/src/auth/auth.d.ts.map +1 -1
- package/dist/types/src/auth/providers.d.ts.map +1 -1
- package/dist/types/src/encodings/base64.d.ts +1 -1
- package/dist/types/src/encodings/base64.d.ts.map +1 -1
- package/dist/types/src/index.d.ts +1 -0
- package/dist/types/src/index.d.ts.map +1 -1
- package/dist/types/src/nanoclients.d.ts +10 -11
- package/dist/types/src/nanoclients.d.ts.map +1 -1
- package/dist/types/src/nanotdf/Client.d.ts +1 -2
- package/dist/types/src/nanotdf/Client.d.ts.map +1 -1
- package/dist/types/src/nanotdf/NanoTDF.d.ts +1 -2
- package/dist/types/src/nanotdf/NanoTDF.d.ts.map +1 -1
- package/dist/types/src/nanotdf/encrypt-dataset.d.ts +1 -2
- package/dist/types/src/nanotdf/encrypt-dataset.d.ts.map +1 -1
- package/dist/types/src/nanotdf/encrypt.d.ts +1 -2
- package/dist/types/src/nanotdf/encrypt.d.ts.map +1 -1
- package/dist/types/src/nanotdf/helpers/getHkdfSalt.d.ts +1 -2
- package/dist/types/src/nanotdf/helpers/getHkdfSalt.d.ts.map +1 -1
- package/dist/types/src/nanotdf-crypto/digest.d.ts +1 -2
- package/dist/types/src/nanotdf-crypto/digest.d.ts.map +1 -1
- package/dist/types/src/nanotdf-crypto/pemPublicToCrypto.d.ts.map +1 -1
- package/dist/types/src/opentdf.d.ts +29 -5
- package/dist/types/src/opentdf.d.ts.map +1 -1
- package/dist/types/src/seekable.d.ts.map +1 -1
- package/dist/types/src/tdf/Policy.d.ts +4 -2
- package/dist/types/src/tdf/Policy.d.ts.map +1 -1
- package/dist/types/src/utils.d.ts.map +1 -1
- package/dist/types/src/version.d.ts +1 -1
- package/dist/types/tdf3/index.d.ts +1 -1
- package/dist/types/tdf3/index.d.ts.map +1 -1
- package/dist/types/tdf3/src/assertions.d.ts +1 -2
- package/dist/types/tdf3/src/assertions.d.ts.map +1 -1
- package/dist/types/tdf3/src/client/DecoratedReadableStream.d.ts +1 -1
- package/dist/types/tdf3/src/client/index.d.ts +1 -6
- package/dist/types/tdf3/src/client/index.d.ts.map +1 -1
- package/dist/types/tdf3/src/client/validation.d.ts.map +1 -1
- package/dist/types/tdf3/src/crypto/crypto-utils.d.ts.map +1 -1
- package/dist/types/tdf3/src/crypto/salt.d.ts +2 -0
- package/dist/types/tdf3/src/crypto/salt.d.ts.map +1 -0
- package/dist/types/tdf3/src/models/attribute.d.ts +16 -0
- package/dist/types/tdf3/src/models/attribute.d.ts.map +1 -0
- package/dist/types/tdf3/src/models/index.d.ts +1 -1
- package/dist/types/tdf3/src/models/index.d.ts.map +1 -1
- package/dist/types/tdf3/src/models/key-access.d.ts.map +1 -1
- package/dist/types/tdf3/src/models/payload.d.ts +1 -0
- package/dist/types/tdf3/src/models/payload.d.ts.map +1 -1
- package/dist/types/tdf3/src/models/policy.d.ts +1 -1
- package/dist/types/tdf3/src/models/policy.d.ts.map +1 -1
- package/dist/types/tdf3/src/tdf.d.ts +5 -9
- package/dist/types/tdf3/src/tdf.d.ts.map +1 -1
- package/dist/web/src/access.js +1 -2
- package/dist/web/src/auth/auth.js +1 -1
- package/dist/web/src/encodings/base64.js +1 -1
- package/dist/web/src/index.js +2 -1
- package/dist/web/src/nanoclients.js +18 -11
- package/dist/web/src/nanotdf/Client.js +1 -1
- package/dist/web/src/nanotdf/NanoTDF.js +1 -1
- package/dist/web/src/nanotdf/encrypt-dataset.js +1 -1
- package/dist/web/src/nanotdf/encrypt.js +1 -1
- package/dist/web/src/nanotdf/helpers/getHkdfSalt.js +1 -1
- package/dist/web/src/nanotdf-crypto/digest.js +1 -1
- package/dist/web/src/nanotdf-crypto/pemPublicToCrypto.js +4 -27
- package/dist/web/src/opentdf.js +174 -44
- package/dist/web/src/tdf/Policy.js +13 -10
- package/dist/web/src/version.js +1 -1
- package/dist/web/tdf3/index.js +1 -1
- package/dist/web/tdf3/src/assertions.js +1 -1
- package/dist/web/tdf3/src/crypto/salt.js +9 -0
- package/dist/web/tdf3/src/models/attribute.js +2 -0
- package/dist/web/tdf3/src/models/index.js +2 -2
- package/dist/web/tdf3/src/models/key-access.js +3 -2
- package/dist/web/tdf3/src/tdf.js +7 -3
- package/package.json +12 -12
- package/src/access.ts +0 -1
- package/src/auth/auth.ts +2 -2
- package/src/encodings/base64.ts +1 -1
- package/src/index.ts +1 -0
- package/src/nanoclients.ts +24 -23
- package/src/nanotdf/Client.ts +2 -3
- package/src/nanotdf/NanoTDF.ts +1 -2
- package/src/nanotdf/encrypt-dataset.ts +1 -2
- package/src/nanotdf/encrypt.ts +1 -2
- package/src/nanotdf/helpers/getHkdfSalt.ts +1 -3
- package/src/nanotdf-crypto/digest.ts +1 -3
- package/src/nanotdf-crypto/pemPublicToCrypto.ts +3 -33
- package/src/opentdf.ts +249 -54
- package/src/tdf/Policy.ts +15 -9
- package/src/version.ts +1 -1
- package/tdf3/index.ts +2 -1
- package/tdf3/src/assertions.ts +2 -2
- package/tdf3/src/crypto/salt.ts +11 -0
- package/tdf3/src/models/attribute.ts +26 -0
- package/tdf3/src/models/index.ts +1 -1
- package/tdf3/src/models/key-access.ts +2 -1
- package/tdf3/src/models/payload.ts +1 -0
- package/tdf3/src/models/policy.ts +1 -1
- package/tdf3/src/tdf.ts +22 -13
- package/dist/cjs/src/tdf/PolicyObject.js +0 -3
- package/dist/cjs/src/tdf/TypedArray.js +0 -3
- package/dist/cjs/tdf3/src/models/attribute-set.js +0 -122
- package/dist/types/src/tdf/PolicyObject.d.ts +0 -10
- package/dist/types/src/tdf/PolicyObject.d.ts.map +0 -1
- package/dist/types/src/tdf/TypedArray.d.ts +0 -2
- package/dist/types/src/tdf/TypedArray.d.ts.map +0 -1
- package/dist/types/tdf3/src/models/attribute-set.d.ts +0 -65
- package/dist/types/tdf3/src/models/attribute-set.d.ts.map +0 -1
- package/dist/web/src/tdf/PolicyObject.js +0 -2
- package/dist/web/src/tdf/TypedArray.js +0 -2
- package/dist/web/tdf3/src/models/attribute-set.js +0 -118
- package/src/tdf/PolicyObject.ts +0 -11
- package/src/tdf/TypedArray.ts +0 -10
- package/tdf3/src/models/attribute-set.ts +0 -142
package/dist/cjs/src/opentdf.js
CHANGED
|
@@ -15,6 +15,9 @@ const seekable_js_1 = require("./seekable.js");
|
|
|
15
15
|
const index_js_2 = require("../tdf3/src/client/index.js");
|
|
16
16
|
const access_js_1 = require("./access.js");
|
|
17
17
|
Object.defineProperty(exports, "isPublicKeyAlgorithm", { enumerable: true, get: function () { return access_js_1.isPublicKeyAlgorithm; } });
|
|
18
|
+
const tdf_js_1 = require("../tdf3/src/tdf.js");
|
|
19
|
+
const index_js_3 = require("./encodings/index.js");
|
|
20
|
+
const PolicyTypeEnum_js_1 = __importDefault(require("./nanotdf/enum/PolicyTypeEnum.js"));
|
|
18
21
|
const defaultRewrapCacheOptions = {
|
|
19
22
|
bypass: false,
|
|
20
23
|
maxAge: 300000,
|
|
@@ -134,64 +137,191 @@ class OpenTDF {
|
|
|
134
137
|
return stream;
|
|
135
138
|
}
|
|
136
139
|
/**
|
|
137
|
-
*
|
|
138
|
-
* @param
|
|
140
|
+
* Opens a TDF file for inspection and decryption.
|
|
141
|
+
* @param opts the file to open, and any appropriate configuration options
|
|
142
|
+
* @returns
|
|
139
143
|
*/
|
|
140
|
-
|
|
144
|
+
open(opts) {
|
|
141
145
|
opts = { ...this.defaultReadOptions, ...opts };
|
|
142
|
-
|
|
146
|
+
return new UnknownTypeReader(this, opts, this.rewrapCache);
|
|
147
|
+
}
|
|
148
|
+
async read(opts) {
|
|
149
|
+
const reader = this.open(opts);
|
|
150
|
+
return reader.decrypt();
|
|
151
|
+
}
|
|
152
|
+
close() {
|
|
153
|
+
this.rewrapCache.close();
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
exports.OpenTDF = OpenTDF;
|
|
157
|
+
class UnknownTypeReader {
|
|
158
|
+
constructor(outer, opts, rewrapCache) {
|
|
159
|
+
this.outer = outer;
|
|
160
|
+
this.opts = opts;
|
|
161
|
+
this.rewrapCache = rewrapCache;
|
|
162
|
+
this.state = 'init';
|
|
163
|
+
this.delegate = this.resolveType();
|
|
164
|
+
}
|
|
165
|
+
async resolveType() {
|
|
166
|
+
if (this.state === 'done') {
|
|
167
|
+
throw new errors_js_1.ConfigurationError('reader is closed');
|
|
168
|
+
}
|
|
169
|
+
this.state = 'resolving';
|
|
170
|
+
const chunker = await (0, seekable_js_1.fromSource)(this.opts.source);
|
|
143
171
|
const prefix = await chunker(0, 3);
|
|
144
|
-
// switch for prefix, if starts with `PK` in ascii, or `L1L` in ascii:
|
|
145
172
|
if (prefix[0] === 0x50 && prefix[1] === 0x4b) {
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
source: opts.source,
|
|
149
|
-
allowList,
|
|
150
|
-
assertionVerificationKeys: opts.assertionVerificationKeys,
|
|
151
|
-
noVerifyAssertions: opts.noVerify,
|
|
152
|
-
wrappingKeyAlgorithm: opts.wrappingKeyAlgorithm,
|
|
153
|
-
});
|
|
154
|
-
const stream = oldStream.stream;
|
|
155
|
-
stream.metadata = Promise.resolve(oldStream.metadata);
|
|
156
|
-
return stream;
|
|
173
|
+
this.state = 'loaded';
|
|
174
|
+
return new ZTDFReader(this.outer.tdf3Client, this.opts, chunker);
|
|
157
175
|
}
|
|
158
176
|
else if (prefix[0] === 0x4c && prefix[1] === 0x31 && prefix[2] === 0x4c) {
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
177
|
+
this.state = 'loaded';
|
|
178
|
+
return new NanoTDFReader(this.outer, this.opts, chunker, this.rewrapCache);
|
|
179
|
+
}
|
|
180
|
+
this.state = 'done';
|
|
181
|
+
throw new errors_js_1.InvalidFileError(`unsupported format; prefix not recognized ${prefix}`);
|
|
182
|
+
}
|
|
183
|
+
async decrypt() {
|
|
184
|
+
const actual = await this.delegate;
|
|
185
|
+
return actual.decrypt();
|
|
186
|
+
}
|
|
187
|
+
async attributes() {
|
|
188
|
+
const actual = await this.delegate;
|
|
189
|
+
return actual.attributes();
|
|
190
|
+
}
|
|
191
|
+
async manifest() {
|
|
192
|
+
const actual = await this.delegate;
|
|
193
|
+
return actual.manifest();
|
|
194
|
+
}
|
|
195
|
+
async close() {
|
|
196
|
+
if (this.state === 'done') {
|
|
197
|
+
return;
|
|
198
|
+
}
|
|
199
|
+
if (this.state === 'init') {
|
|
200
|
+
// delegate resolve never started
|
|
201
|
+
this.state = 'done';
|
|
202
|
+
return;
|
|
203
|
+
}
|
|
204
|
+
this.state = 'closing';
|
|
205
|
+
const actual = await this.delegate;
|
|
206
|
+
return actual.close().then(() => {
|
|
207
|
+
this.state = 'done';
|
|
208
|
+
});
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
class NanoTDFReader {
|
|
212
|
+
constructor(outer, opts, chunker, rewrapCache) {
|
|
213
|
+
this.outer = outer;
|
|
214
|
+
this.opts = opts;
|
|
215
|
+
this.chunker = chunker;
|
|
216
|
+
this.rewrapCache = rewrapCache;
|
|
217
|
+
// lazily load the container
|
|
218
|
+
this.container = new Promise(async (resolve, reject) => {
|
|
219
|
+
try {
|
|
220
|
+
const ciphertext = await chunker();
|
|
221
|
+
const nanotdf = NanoTDF_js_1.default.from(ciphertext);
|
|
222
|
+
resolve(nanotdf);
|
|
166
223
|
}
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
authProvider: this.authProvider,
|
|
170
|
-
ignoreAllowList: opts.ignoreAllowlist,
|
|
171
|
-
dpopEnabled: this.dpopEnabled,
|
|
172
|
-
dpopKeys: this.dpopKeys,
|
|
173
|
-
kasEndpoint: opts.allowedKASEndpoints?.[0] || 'https://disallow.all.invalid',
|
|
174
|
-
});
|
|
175
|
-
// TODO: The version number should be fetched from the API
|
|
176
|
-
const version = '0.0.1';
|
|
177
|
-
// Rewrap key on every request
|
|
178
|
-
const dek = await nc.rewrapKey(nanotdf.header.toBuffer(), nanotdf.header.getKasRewrapUrl(), nanotdf.header.magicNumberVersion, version);
|
|
179
|
-
if (!dek) {
|
|
180
|
-
// These should have thrown already.
|
|
181
|
-
throw new Error('internal: key rewrap failure');
|
|
224
|
+
catch (e) {
|
|
225
|
+
reject(e);
|
|
182
226
|
}
|
|
183
|
-
|
|
184
|
-
|
|
227
|
+
});
|
|
228
|
+
}
|
|
229
|
+
async decrypt() {
|
|
230
|
+
const nanotdf = await this.container;
|
|
231
|
+
const cachedDEK = this.rewrapCache.get(nanotdf.header.ephemeralPublicKey);
|
|
232
|
+
if (cachedDEK) {
|
|
233
|
+
const r = await streamify((0, decrypt_js_1.default)(cachedDEK, nanotdf));
|
|
185
234
|
r.header = nanotdf.header;
|
|
186
235
|
return r;
|
|
187
236
|
}
|
|
188
|
-
|
|
237
|
+
const nc = new Client_js_1.default({
|
|
238
|
+
allowedKases: this.opts.allowedKASEndpoints,
|
|
239
|
+
authProvider: this.outer.authProvider,
|
|
240
|
+
ignoreAllowList: this.opts.ignoreAllowlist,
|
|
241
|
+
dpopEnabled: this.outer.dpopEnabled,
|
|
242
|
+
dpopKeys: this.outer.dpopKeys,
|
|
243
|
+
kasEndpoint: this.opts.allowedKASEndpoints?.[0] || 'https://disallow.all.invalid',
|
|
244
|
+
});
|
|
245
|
+
// TODO: The version number should be fetched from the API
|
|
246
|
+
const version = '0.0.1';
|
|
247
|
+
// Rewrap key on every request
|
|
248
|
+
const dek = await nc.rewrapKey(nanotdf.header.toBuffer(), nanotdf.header.getKasRewrapUrl(), nanotdf.header.magicNumberVersion, version);
|
|
249
|
+
if (!dek) {
|
|
250
|
+
// These should have thrown already.
|
|
251
|
+
throw new Error('internal: key rewrap failure');
|
|
252
|
+
}
|
|
253
|
+
this.rewrapCache.set(nanotdf.header.ephemeralPublicKey, dek);
|
|
254
|
+
const r = await streamify((0, decrypt_js_1.default)(dek, nanotdf));
|
|
255
|
+
// TODO figure out how to attach policy and metadata to the stream
|
|
256
|
+
r.header = nanotdf.header;
|
|
257
|
+
return r;
|
|
189
258
|
}
|
|
190
|
-
close() {
|
|
191
|
-
|
|
259
|
+
async close() { }
|
|
260
|
+
async manifest() {
|
|
261
|
+
return {};
|
|
262
|
+
}
|
|
263
|
+
async attributes() {
|
|
264
|
+
const nanotdf = await this.container;
|
|
265
|
+
if (!nanotdf.header.policy?.content) {
|
|
266
|
+
return [];
|
|
267
|
+
}
|
|
268
|
+
if (nanotdf.header.policy.type !== PolicyTypeEnum_js_1.default.EmbeddedText) {
|
|
269
|
+
throw new Error('unsupported policy type');
|
|
270
|
+
}
|
|
271
|
+
const policyString = new TextDecoder().decode(nanotdf.header.policy.content);
|
|
272
|
+
const policy = JSON.parse(policyString);
|
|
273
|
+
return policy?.body?.dataAttributes.map((a) => a.attribute) || [];
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
class ZTDFReader {
|
|
277
|
+
constructor(client, opts, source) {
|
|
278
|
+
this.client = client;
|
|
279
|
+
this.opts = opts;
|
|
280
|
+
this.source = source;
|
|
281
|
+
this.overview = (0, tdf_js_1.loadTDFStream)(source);
|
|
282
|
+
}
|
|
283
|
+
async decrypt() {
|
|
284
|
+
const { assertionVerificationKeys, noVerify: noVerifyAssertions, wrappingKeyAlgorithm, } = this.opts;
|
|
285
|
+
const allowList = new access_js_1.OriginAllowList(this.opts.allowedKASEndpoints ?? [], this.opts.ignoreAllowlist);
|
|
286
|
+
const dpopKeys = await this.client.dpopKeys;
|
|
287
|
+
const { authProvider, cryptoService } = this.client;
|
|
288
|
+
if (!authProvider) {
|
|
289
|
+
throw new errors_js_1.ConfigurationError('authProvider is required');
|
|
290
|
+
}
|
|
291
|
+
const overview = await this.overview;
|
|
292
|
+
const oldStream = await (0, tdf_js_1.decryptStreamFrom)({
|
|
293
|
+
allowList,
|
|
294
|
+
authProvider,
|
|
295
|
+
chunker: this.source,
|
|
296
|
+
concurrencyLimit: 1,
|
|
297
|
+
cryptoService,
|
|
298
|
+
dpopKeys,
|
|
299
|
+
fileStreamServiceWorker: this.client.clientConfig.fileStreamServiceWorker,
|
|
300
|
+
keyMiddleware: async (k) => k,
|
|
301
|
+
progressHandler: this.client.clientConfig.progressHandler,
|
|
302
|
+
assertionVerificationKeys,
|
|
303
|
+
noVerifyAssertions,
|
|
304
|
+
wrappingKeyAlgorithm,
|
|
305
|
+
}, overview);
|
|
306
|
+
const stream = oldStream.stream;
|
|
307
|
+
stream.manifest = Promise.resolve(overview.manifest);
|
|
308
|
+
stream.metadata = Promise.resolve(oldStream.metadata);
|
|
309
|
+
return stream;
|
|
310
|
+
}
|
|
311
|
+
async close() {
|
|
312
|
+
// TODO figure out how to close a chunker, if we want to.
|
|
313
|
+
}
|
|
314
|
+
async manifest() {
|
|
315
|
+
const overview = await this.overview;
|
|
316
|
+
return overview.manifest;
|
|
317
|
+
}
|
|
318
|
+
async attributes() {
|
|
319
|
+
const manifest = await this.manifest();
|
|
320
|
+
const policyJSON = index_js_3.base64.decode(manifest.encryptionInformation.policy);
|
|
321
|
+
const policy = JSON.parse(policyJSON);
|
|
322
|
+
return policy?.body?.dataAttributes.map((a) => a.attribute) || [];
|
|
192
323
|
}
|
|
193
324
|
}
|
|
194
|
-
exports.OpenTDF = OpenTDF;
|
|
195
325
|
async function streamify(ab) {
|
|
196
326
|
const stream = new ReadableStream({
|
|
197
327
|
start(controller) {
|
|
@@ -248,4 +378,4 @@ class Collection {
|
|
|
248
378
|
delete this.client;
|
|
249
379
|
}
|
|
250
380
|
}
|
|
251
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3BlbnRkZi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9vcGVudGRmLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUNBLDJDQUFtRTtBQUNuRSxxREFBbUc7QUFDbkcsd0RBQW1FO0FBQTFELHNHQUFBLE1BQU0sT0FBYztBQUM3QixzRUFBMkM7QUFDM0Msc0VBQWtEO0FBQ2xELG9FQUF5QztBQUV6QywrQ0FBd0U7QUFDeEUsMERBQW1FO0FBTW5FLDJDQUFnRztBQXFCOUYscUdBckJvRCxnQ0FBb0IsT0FxQnBEO0FBeUp0QixNQUFNLHlCQUF5QixHQUFpQztJQUM5RCxNQUFNLEVBQUUsS0FBSztJQUNiLE1BQU0sRUFBRSxNQUFNO0lBQ2QsWUFBWSxFQUFFLEdBQUc7Q0FDbEIsQ0FBQztBQUVGLDRDQUE0QztBQUM1QywrRUFBK0U7QUFDL0UsMEZBQTBGO0FBQzFGLDREQUE0RDtBQUM1RCxNQUFhLFdBQVc7SUFHdEIsWUFBWSxJQUF5QjtRQUNuQyxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsR0FBRyxFQUFFLEdBQUcseUJBQXlCLEVBQUUsR0FBRyxJQUFJLEVBQUUsQ0FBQztRQUNuRixJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQ1gsT0FBTztRQUNULENBQUM7UUFDRCxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksR0FBRyxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLE1BQU0sR0FBRyxXQUFXLENBQUMsR0FBRyxFQUFFO1lBQzdCLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUN2QixNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO1lBQ3JCLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDUCxPQUFPO1lBQ1QsQ0FBQztZQUNELEtBQUssTUFBTSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFFLEVB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
|
|
381
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3BlbnRkZi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9vcGVudGRmLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUNBLDJDQUFtRTtBQUNuRSxxREFBbUc7QUFDbkcsd0RBQW1FO0FBQTFELHNHQUFBLE1BQU0sT0FBYztBQUM3QixzRUFBMkM7QUFDM0Msc0VBQWtEO0FBQ2xELG9FQUF5QztBQUV6QywrQ0FBaUY7QUFDakYsMERBQW1FO0FBTW5FLDJDQUFnRztBQTZCOUYscUdBN0JvRCxnQ0FBb0IsT0E2QnBEO0FBcEJ0QiwrQ0FLNEI7QUFDNUIsbURBQThDO0FBQzlDLHlGQUEwRDtBQXNLMUQsTUFBTSx5QkFBeUIsR0FBaUM7SUFDOUQsTUFBTSxFQUFFLEtBQUs7SUFDYixNQUFNLEVBQUUsTUFBTTtJQUNkLFlBQVksRUFBRSxHQUFHO0NBQ2xCLENBQUM7QUFFRiw0Q0FBNEM7QUFDNUMsK0VBQStFO0FBQy9FLDBGQUEwRjtBQUMxRiw0REFBNEQ7QUFDNUQsTUFBYSxXQUFXO0lBR3RCLFlBQVksSUFBeUI7UUFDbkMsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLEdBQUcsRUFBRSxHQUFHLHlCQUF5QixFQUFFLEdBQUcsSUFBSSxFQUFFLENBQUM7UUFDbkYsSUFBSSxNQUFNLEVBQUUsQ0FBQztZQUNYLE9BQU87UUFDVCxDQUFDO1FBQ0QsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxNQUFNLEdBQUcsV0FBVyxDQUFDLEdBQUcsRUFBRTtZQUM3QixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDdkIsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztZQUNyQixJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQ1AsT0FBTztZQUNULENBQUM7WUFDRCxLQUFLLE1BQU0sQ0FBQyxHQUFHLEVB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
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.PolicyBuilder = void 0;
|
|
4
4
|
const uuid_1 = require("uuid");
|
|
5
|
-
class
|
|
5
|
+
class PolicyBuilder {
|
|
6
6
|
constructor() {
|
|
7
7
|
this.uuidStr = (0, uuid_1.v4)();
|
|
8
8
|
this.dataAttributesList = [];
|
|
@@ -30,21 +30,24 @@ class Policy {
|
|
|
30
30
|
addAttribute(attribute) {
|
|
31
31
|
this.dataAttributesList.push(attribute);
|
|
32
32
|
}
|
|
33
|
+
toPolicy() {
|
|
34
|
+
return {
|
|
35
|
+
uuid: this.uuidStr,
|
|
36
|
+
body: {
|
|
37
|
+
dataAttributes: this.dataAttributesList,
|
|
38
|
+
dissem: this.dissemList,
|
|
39
|
+
},
|
|
40
|
+
};
|
|
41
|
+
}
|
|
33
42
|
/**
|
|
34
43
|
* Returns the JSON string of Policy object
|
|
35
44
|
*
|
|
36
45
|
* @return {string} [The constructed Policy object as JSON string]
|
|
37
46
|
*/
|
|
38
47
|
toJSON() {
|
|
39
|
-
return JSON.stringify(
|
|
40
|
-
uuid: this.uuidStr,
|
|
41
|
-
body: {
|
|
42
|
-
dataAttributes: this.dataAttributesList,
|
|
43
|
-
dissem: this.dissemList,
|
|
44
|
-
},
|
|
45
|
-
});
|
|
48
|
+
return JSON.stringify(this.toPolicy());
|
|
46
49
|
}
|
|
47
50
|
}
|
|
48
|
-
exports.
|
|
49
|
-
|
|
50
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
51
|
+
exports.PolicyBuilder = PolicyBuilder;
|
|
52
|
+
PolicyBuilder.CURRENT_VERSION = '1.1.0';
|
|
53
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUG9saWN5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3RkZi9Qb2xpY3kudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsK0JBQWtDO0FBS2xDLE1BQWEsYUFBYTtJQUExQjtRQUdVLFlBQU8sR0FBRyxJQUFBLFNBQUksR0FBRSxDQUFDO1FBQ2pCLHVCQUFrQixHQUFzQixFQUFFLENBQUM7UUFDM0MsZUFBVSxHQUFhLEVBQUUsQ0FBQztJQTZDcEMsQ0FBQztJQTNDQzs7Ozs7T0FLRztJQUNILFdBQVcsQ0FBQyxRQUFrQjtRQUM1QixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDO1FBRWxDLHdCQUF3QjtRQUN4QixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsRUFBRTtZQUM3RCxPQUFPLEtBQUssS0FBSyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3RDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsWUFBWSxDQUFDLFNBQTBCO1FBQ3JDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUVELFFBQVE7UUFDTixPQUFPO1lBQ0wsSUFBSSxFQUFFLElBQUksQ0FBQyxPQUFPO1lBQ2xCLElBQUksRUFBRTtnQkFDSixjQUFjLEVBQUUsSUFBSSxDQUFDLGtCQUFrQjtnQkFDdkMsTUFBTSxFQUFFLElBQUksQ0FBQyxVQUFVO2FBQ3hCO1NBQ0YsQ0FBQztJQUNKLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsTUFBTTtRQUNKLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUN6QyxDQUFDOztBQWpESCxzQ0FrREM7QUFqRFEsNkJBQWUsR0FBRyxPQUFPLEFBQVYsQ0FBVyJ9
|
package/dist/cjs/src/version.js
CHANGED
|
@@ -4,7 +4,7 @@ exports.tdfSpecVersion = exports.clientType = exports.version = void 0;
|
|
|
4
4
|
/**
|
|
5
5
|
* Exposes the released version number of the `@opentdf/sdk` package
|
|
6
6
|
*/
|
|
7
|
-
exports.version = '0.
|
|
7
|
+
exports.version = '0.3.0';
|
|
8
8
|
/**
|
|
9
9
|
* A string name used to label requests as coming from this library client.
|
|
10
10
|
*/
|
package/dist/cjs/tdf3/index.js
CHANGED
|
@@ -65,4 +65,4 @@ Object.defineProperty(exports, "Algorithms", { enumerable: true, get: function (
|
|
|
65
65
|
exports.WebCryptoService = __importStar(require("./src/crypto/index.js"));
|
|
66
66
|
var opentdf_js_1 = require("../src/opentdf.js");
|
|
67
67
|
Object.defineProperty(exports, "OpenTDF", { enumerable: true, get: function () { return opentdf_js_1.OpenTDF; } });
|
|
68
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
68
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90ZGYzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLCtDQUF5QztBQTREdkMsdUZBNURPLGtCQUFNLE9BNERQO0FBM0RSLHdGQUFrRjtBQThEaEYsd0dBOURPLG9EQUF1QixPQThEUDtBQTdEekIsMERBV2tDO0FBb0RoQyxxR0E3REEsa0NBQW9CLE9BNkRBO0FBSXBCLHFHQTFEQSxrQ0FBb0IsT0EwREE7QUF2RHRCLG9EQUE2RTtBQWdFM0Usa0dBaEUwQiw0QkFBaUIsT0FnRTFCO0FBekRuQiw2Q0FBNEQ7QUF3QzFELHVGQXhDTyxpQkFBTSxPQXdDUDtBQVNOLHVGQWpEZSxpQkFBTSxPQWlEZjtBQU1OLDJGQXZEdUIscUJBQVUsT0F1RHZCO0FBdERaLHNGQUlnRDtBQWlEOUMseUZBbkRBLG9DQUFRLE9BbURBO0FBaERWLGlEQUE4RjtBQTRDNUYsNEZBNUNzQyxxQkFBVyxPQTRDdEM7QUFRWCw0RkFwRG1ELHFCQUFXLE9Bb0RuRDtBQW5EYix1RUFBK0Q7QUE2QjdELDZGQTdCTyxnQ0FBWSxPQTZCUDtBQTVCZCxzREFNNkI7QUFzQzNCLDhGQTNDQSw0QkFBYSxPQTJDQTtBQUNiLHFHQTNDQSxtQ0FBb0IsT0EyQ0E7QUFmcEIsOEZBM0JBLDRCQUFhLE9BMkJBO0FBcUJiLHdGQS9DQSxzQkFBTyxPQStDQTtBQUhQLDJGQTNDQSx5QkFBVSxPQTJDQTtBQXpDWiwrREFBZ0c7QUFzQjlGLDJGQXRCTywwQkFBVSxPQXNCUDtBQXlCWiwwRUFBMEQ7QUFDMUQsZ0RBWTJCO0FBRHpCLHFHQUFBLE9BQU8sT0FBQSJ9
|
|
@@ -129,4 +129,4 @@ function concatenateUint8Arrays(array1, array2) {
|
|
|
129
129
|
combinedArray.set(array2, array1.length);
|
|
130
130
|
return combinedArray;
|
|
131
131
|
}
|
|
132
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
132
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXJ0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3RkZjMvc3JjL2Fzc2VydGlvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUE0Q0Esb0JBS0M7QUFpQ0QsOENBbUJDO0FBU0Qsd0JBMENDO0FBS0QsMENBMEJDO0FBdkxELHlEQUFtRDtBQUNuRCwrQkFBMEM7QUFDMUMsMkRBQTJEO0FBQzNELG1EQUEyRjtBQW9DM0Y7Ozs7R0FJRztBQUNJLEtBQUssVUFBVSxJQUFJLENBQUMsQ0FBWTtJQUNyQyxNQUFNLE1BQU0sR0FBRyxJQUFBLGtDQUFjLEVBQUMsQ0FBQyxFQUFFLEVBQUUsT0FBTyxFQUFFLENBQUMsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBRXJGLE1BQU0sSUFBSSxHQUFHLE1BQU0sTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLElBQUksV0FBVyxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDckYsT0FBTyxjQUFHLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDckMsQ0FBQztBQUVEOzs7Ozs7O0dBT0c7QUFDSCxLQUFLLFVBQVUsSUFBSSxDQUNqQixJQUFlLEVBQ2YsYUFBcUIsRUFDckIsR0FBVyxFQUNYLEdBQWlCO0lBRWpCLE1BQU0sT0FBTyxHQUFxQjtRQUNoQyxhQUFhO1FBQ2IsWUFBWSxFQUFFLEdBQUc7S0FDbEIsQ0FBQztJQUVGLElBQUksS0FBYSxDQUFDO0lBQ2xCLElBQUksQ0FBQztRQUNILEtBQUssR0FBRyxNQUFNLElBQUksY0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLGtCQUFrQixDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDeEYsQ0FB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
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ztdfSalt = void 0;
|
|
4
|
+
const generateSalt = async () => {
|
|
5
|
+
const encoder = new TextEncoder();
|
|
6
|
+
const data = encoder.encode('TDF');
|
|
7
|
+
// Generate hash
|
|
8
|
+
const hashBuffer = await crypto.subtle.digest('SHA-256', data);
|
|
9
|
+
return new Uint8Array(hashBuffer);
|
|
10
|
+
};
|
|
11
|
+
exports.ztdfSalt = generateSalt();
|
|
12
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2FsdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3RkZjMvc3JjL2NyeXB0by9zYWx0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLE1BQU0sWUFBWSxHQUFHLEtBQUssSUFBSSxFQUFFO0lBQzlCLE1BQU0sT0FBTyxHQUFHLElBQUksV0FBVyxFQUFFLENBQUM7SUFDbEMsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUVuQyxnQkFBZ0I7SUFDaEIsTUFBTSxVQUFVLEdBQUcsTUFBTSxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFFL0QsT0FBTyxJQUFJLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUNwQyxDQUFDLENBQUM7QUFFVyxRQUFBLFFBQVEsR0FBRyxZQUFZLEVBQUUsQ0FBQyJ9
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0cmlidXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vdGRmMy9zcmMvbW9kZWxzL2F0dHJpYnV0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIn0=
|
|
@@ -14,11 +14,11 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
14
14
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
__exportStar(require("./attribute
|
|
17
|
+
__exportStar(require("./attribute.js"), exports);
|
|
18
18
|
__exportStar(require("./encryption-information.js"), exports);
|
|
19
19
|
__exportStar(require("./key-access.js"), exports);
|
|
20
20
|
__exportStar(require("./manifest.js"), exports);
|
|
21
21
|
__exportStar(require("./payload.js"), exports);
|
|
22
22
|
__exportStar(require("./policy.js"), exports);
|
|
23
23
|
__exportStar(require("../assertions.js"), exports);
|
|
24
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
24
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi90ZGYzL3NyYy9tb2RlbHMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLGlEQUErQjtBQUMvQiw4REFBNEM7QUFDNUMsa0RBQWdDO0FBQ2hDLGdEQUE4QjtBQUM5QiwrQ0FBNkI7QUFDN0IsOENBQTRCO0FBQzVCLG1EQUFpQyJ9
|
|
@@ -41,6 +41,7 @@ const pemPublicToCrypto_js_1 = require("../../../src/nanotdf-crypto/pemPublicToC
|
|
|
41
41
|
const utils_js_1 = require("../../../src/utils.js");
|
|
42
42
|
const binary_js_1 = require("../binary.js");
|
|
43
43
|
const cryptoService = __importStar(require("../crypto/index.js"));
|
|
44
|
+
const salt_js_1 = require("../crypto/salt.js");
|
|
44
45
|
exports.schemaVersion = '1.0';
|
|
45
46
|
class ECWrapped {
|
|
46
47
|
constructor(url, kid, publicKey, metadata, sid) {
|
|
@@ -62,7 +63,7 @@ class ECWrapped {
|
|
|
62
63
|
(0, pemPublicToCrypto_js_1.pemPublicToCrypto)(this.publicKey),
|
|
63
64
|
]);
|
|
64
65
|
const kek = await (0, keyAgreement_js_1.keyAgreement)(ek.privateKey, clientPublicKey, {
|
|
65
|
-
hkdfSalt:
|
|
66
|
+
hkdfSalt: await salt_js_1.ztdfSalt,
|
|
66
67
|
hkdfHash: 'SHA-256',
|
|
67
68
|
});
|
|
68
69
|
const iv = (0, generateRandomNumber_js_1.generateRandomNumber)(12);
|
|
@@ -132,4 +133,4 @@ class Wrapped {
|
|
|
132
133
|
}
|
|
133
134
|
}
|
|
134
135
|
exports.Wrapped = Wrapped;
|
|
135
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
136
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5LWFjY2Vzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3RkZjMvc3JjL21vZGVscy9rZXktYWNjZXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDhEQUE4RDtBQUM5RCxpR0FBMkY7QUFDM0YsaUZBQTJFO0FBQzNFLDJGQUFxRjtBQUNyRixvREFBMEQ7QUFDMUQsNENBQXNDO0FBQ3RDLGtFQUFvRDtBQUNwRCwrQ0FBNkM7QUFLaEMsUUFBQSxhQUFhLEdBQUcsS0FBSyxDQUFDO0FBRW5DLE1BQWEsU0FBUztJQUtwQixZQUNrQixHQUFXLEVBQ1gsR0FBdUIsRUFDdkIsU0FBaUIsRUFDakIsUUFBaUIsRUFDakIsR0FBWTtRQUpaLFFBQUcsR0FBSCxHQUFHLENBQVE7UUFDWCxRQUFHLEdBQUgsR0FBRyxDQUFvQjtRQUN2QixjQUFTLEdBQVQsU0FBUyxDQUFRO1FBQ2pCLGFBQVEsR0FBUixRQUFRLENBQVM7UUFDakIsUUFBRyxHQUFILEdBQUcsQ0FBUztRQVRyQixTQUFJLEdBQUcsWUFBWSxDQUFDO1FBVzNCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FDL0M7WUFDRSxJQUFJLEVBQUUsTUFBTTtZQUNaLFVBQVUsRUFBRSxPQUFPO1NBQ3BCLEVBQ0QsS0FBSyxFQUNMLENBQUMsWUFBWSxFQUFFLFdBQVcsQ0FBQyxDQUM1QixDQUFDO0lBQ0osQ0FBQztJQUVELEtBQUssQ0FBQyxLQUFLLENBQ1QsTUFBYyxFQUNkLEdBQWUsRUFDZixvQkFBNEI7UUFFNUIsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN6QyxNQUFNLENBQUMsRUFBRSxFQUFFLGVBQWUsQ0FBQyxHQUFHLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQztZQUM5QyxJQUFJLENBQUMsZ0JBQWdC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
|