@protontech/drive-sdk 0.10.0 → 0.12.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.
Files changed (125) hide show
  1. package/dist/crypto/driveCrypto.d.ts +20 -2
  2. package/dist/crypto/driveCrypto.js +72 -14
  3. package/dist/crypto/driveCrypto.js.map +1 -1
  4. package/dist/crypto/driveCrypto.test.js +3 -2
  5. package/dist/crypto/driveCrypto.test.js.map +1 -1
  6. package/dist/crypto/interface.d.ts +22 -8
  7. package/dist/crypto/openPGPCrypto.d.ts +30 -7
  8. package/dist/crypto/openPGPCrypto.js +46 -8
  9. package/dist/crypto/openPGPCrypto.js.map +1 -1
  10. package/dist/diagnostic/telemetry.js +3 -0
  11. package/dist/diagnostic/telemetry.js.map +1 -1
  12. package/dist/interface/featureFlags.d.ts +4 -1
  13. package/dist/interface/featureFlags.js +5 -0
  14. package/dist/interface/featureFlags.js.map +1 -1
  15. package/dist/interface/index.d.ts +2 -0
  16. package/dist/interface/index.js +5 -1
  17. package/dist/interface/index.js.map +1 -1
  18. package/dist/interface/photos.d.ts +13 -1
  19. package/dist/interface/photos.js +14 -0
  20. package/dist/interface/photos.js.map +1 -1
  21. package/dist/interface/telemetry.d.ts +12 -1
  22. package/dist/interface/telemetry.js.map +1 -1
  23. package/dist/internal/apiService/apiService.d.ts +1 -1
  24. package/dist/internal/apiService/apiService.js +2 -2
  25. package/dist/internal/apiService/apiService.js.map +1 -1
  26. package/dist/internal/nodes/apiService.js.map +1 -1
  27. package/dist/internal/nodes/nodesAccess.js +1 -1
  28. package/dist/internal/nodes/nodesAccess.js.map +1 -1
  29. package/dist/internal/photos/addToAlbum.d.ts +1 -5
  30. package/dist/internal/photos/addToAlbum.js +8 -87
  31. package/dist/internal/photos/addToAlbum.js.map +1 -1
  32. package/dist/internal/photos/{albums.d.ts → albumsManager.d.ts} +1 -1
  33. package/dist/internal/photos/{albums.js → albumsManager.js} +4 -4
  34. package/dist/internal/photos/albumsManager.js.map +1 -0
  35. package/dist/internal/photos/{albums.test.js → albumsManager.test.js} +3 -3
  36. package/dist/internal/photos/albumsManager.test.js.map +1 -0
  37. package/dist/internal/photos/apiService.d.ts +8 -4
  38. package/dist/internal/photos/apiService.js +38 -6
  39. package/dist/internal/photos/apiService.js.map +1 -1
  40. package/dist/internal/photos/index.d.ts +7 -5
  41. package/dist/internal/photos/index.js +7 -4
  42. package/dist/internal/photos/index.js.map +1 -1
  43. package/dist/internal/photos/interface.d.ts +3 -26
  44. package/dist/internal/photos/interface.js +0 -14
  45. package/dist/internal/photos/interface.js.map +1 -1
  46. package/dist/internal/photos/nodes.js +1 -1
  47. package/dist/internal/photos/nodes.js.map +1 -1
  48. package/dist/internal/photos/photosManager.d.ts +22 -0
  49. package/dist/internal/photos/photosManager.js +101 -0
  50. package/dist/internal/photos/photosManager.js.map +1 -0
  51. package/dist/internal/photos/photosManager.test.d.ts +1 -0
  52. package/dist/internal/photos/photosManager.test.js +222 -0
  53. package/dist/internal/photos/photosManager.test.js.map +1 -0
  54. package/dist/internal/photos/photosTransferPayloadBuilder.d.ts +57 -0
  55. package/dist/internal/photos/photosTransferPayloadBuilder.js +113 -0
  56. package/dist/internal/photos/photosTransferPayloadBuilder.js.map +1 -0
  57. package/dist/internal/photos/photosTransferPayloadBuilder.test.d.ts +1 -0
  58. package/dist/internal/photos/photosTransferPayloadBuilder.test.js +289 -0
  59. package/dist/internal/photos/photosTransferPayloadBuilder.test.js.map +1 -0
  60. package/dist/internal/photos/upload.d.ts +2 -2
  61. package/dist/internal/photos/upload.js +3 -3
  62. package/dist/internal/photos/upload.js.map +1 -1
  63. package/dist/internal/sharingPublic/nodes.js +11 -4
  64. package/dist/internal/sharingPublic/nodes.js.map +1 -1
  65. package/dist/internal/upload/apiService.d.ts +0 -4
  66. package/dist/internal/upload/apiService.js +0 -4
  67. package/dist/internal/upload/apiService.js.map +1 -1
  68. package/dist/internal/upload/cryptoService.d.ts +4 -2
  69. package/dist/internal/upload/cryptoService.js +18 -6
  70. package/dist/internal/upload/cryptoService.js.map +1 -1
  71. package/dist/internal/upload/index.d.ts +2 -2
  72. package/dist/internal/upload/index.js +2 -2
  73. package/dist/internal/upload/index.js.map +1 -1
  74. package/dist/internal/upload/interface.d.ts +1 -1
  75. package/dist/internal/upload/streamUploader.d.ts +1 -1
  76. package/dist/internal/upload/streamUploader.js +12 -13
  77. package/dist/internal/upload/streamUploader.js.map +1 -1
  78. package/dist/internal/upload/streamUploader.test.js +28 -4
  79. package/dist/internal/upload/streamUploader.test.js.map +1 -1
  80. package/dist/protonDriveClient.js +2 -2
  81. package/dist/protonDriveClient.js.map +1 -1
  82. package/dist/protonDrivePhotosClient.d.ts +20 -3
  83. package/dist/protonDrivePhotosClient.js +27 -3
  84. package/dist/protonDrivePhotosClient.js.map +1 -1
  85. package/dist/protonDrivePublicLinkClient.d.ts +3 -2
  86. package/dist/protonDrivePublicLinkClient.js +7 -3
  87. package/dist/protonDrivePublicLinkClient.js.map +1 -1
  88. package/package.json +1 -1
  89. package/src/crypto/driveCrypto.test.ts +3 -1
  90. package/src/crypto/driveCrypto.ts +82 -7
  91. package/src/crypto/interface.ts +21 -8
  92. package/src/crypto/openPGPCrypto.ts +68 -8
  93. package/src/diagnostic/telemetry.ts +3 -0
  94. package/src/interface/featureFlags.ts +5 -1
  95. package/src/interface/index.ts +2 -0
  96. package/src/interface/photos.ts +14 -1
  97. package/src/interface/telemetry.ts +14 -1
  98. package/src/internal/apiService/apiService.ts +6 -2
  99. package/src/internal/nodes/apiService.ts +2 -2
  100. package/src/internal/nodes/nodesAccess.ts +1 -1
  101. package/src/internal/photos/addToAlbum.ts +29 -136
  102. package/src/internal/photos/{albums.test.ts → albumsManager.test.ts} +3 -3
  103. package/src/internal/photos/{albums.ts → albumsManager.ts} +1 -1
  104. package/src/internal/photos/apiService.ts +73 -16
  105. package/src/internal/photos/index.ts +9 -4
  106. package/src/internal/photos/interface.ts +3 -28
  107. package/src/internal/photos/nodes.ts +1 -1
  108. package/src/internal/photos/photosManager.test.ts +266 -0
  109. package/src/internal/photos/photosManager.ts +144 -0
  110. package/src/internal/photos/photosTransferPayloadBuilder.test.ts +380 -0
  111. package/src/internal/photos/photosTransferPayloadBuilder.ts +203 -0
  112. package/src/internal/photos/upload.ts +20 -7
  113. package/src/internal/sharingPublic/nodes.ts +11 -4
  114. package/src/internal/upload/apiService.ts +7 -9
  115. package/src/internal/upload/cryptoService.ts +28 -7
  116. package/src/internal/upload/index.ts +3 -2
  117. package/src/internal/upload/interface.ts +1 -1
  118. package/src/internal/upload/streamUploader.test.ts +33 -4
  119. package/src/internal/upload/streamUploader.ts +13 -13
  120. package/src/protonDriveClient.ts +2 -1
  121. package/src/protonDrivePhotosClient.ts +39 -2
  122. package/src/protonDrivePublicLinkClient.ts +9 -1
  123. package/dist/internal/photos/albums.js.map +0 -1
  124. package/dist/internal/photos/albums.test.js.map +0 -1
  125. /package/dist/internal/photos/{albums.test.d.ts → albumsManager.test.d.ts} +0 -0
@@ -1,3 +1,4 @@
1
+ import { ProtonDriveTelemetry } from '../interface';
1
2
  import { OpenPGPCrypto, PrivateKey, PublicKey, SessionKey, SRPModule, SRPVerifier, VERIFICATION_STATUS } from './interface';
2
3
  /**
3
4
  * Drive crypto layer to provide general operations for Drive crypto.
@@ -8,11 +9,25 @@ import { OpenPGPCrypto, PrivateKey, PublicKey, SessionKey, SRPModule, SRPVerifie
8
9
  * but we do share same key generation across shares and nodes modules,
9
10
  * for example, which we can generelise here and in each module just
10
11
  * call with specific arguments.
12
+ *
13
+ * Note about AEAD encryption:
14
+ *
15
+ * The algorithm of generated session key or encrypted data is defined by
16
+ * the encryption key preferences. If encryption key was generated with
17
+ * `aeadProtect` set to true, session key or encrypted data should use
18
+ * AEAD algorithm.
19
+ *
20
+ * However, in Drive, we do not want to use the AEAD algorithm everywhere,
21
+ * only for file content. Thus, we must pass the `enableAeadWithEncryptionKeys`
22
+ * flag explicitely to control whether to use the encryption key preferences
23
+ * to avoid using AEAD on places where it would not be supported. It should
24
+ * be set to false by default everywhere except for content encryption.
11
25
  */
12
26
  export declare class DriveCrypto {
27
+ private telemetry;
13
28
  private openPGPCrypto;
14
29
  private srpModule;
15
- constructor(openPGPCrypto: OpenPGPCrypto, srpModule: SRPModule);
30
+ constructor(telemetry: ProtonDriveTelemetry, openPGPCrypto: OpenPGPCrypto, srpModule: SRPModule);
16
31
  /**
17
32
  * It generates passphrase and key that is encrypted with the
18
33
  * generated passphrase.
@@ -26,7 +41,9 @@ export declare class DriveCrypto {
26
41
  * signature) for sending to the server
27
42
  * - decrypted data (key, sessionKey) for crypto usage
28
43
  */
29
- generateKey(encryptionKeys: PrivateKey[], signingKey: PrivateKey): Promise<{
44
+ generateKey(encryptionKeys: PrivateKey[], signingKey: PrivateKey, { enableAead }?: {
45
+ enableAead: boolean;
46
+ }): Promise<{
30
47
  encrypted: {
31
48
  armoredKey: string;
32
49
  armoredPassphrase: string;
@@ -219,6 +236,7 @@ export declare class DriveCrypto {
219
236
  }>;
220
237
  decryptShareUrlPassword(armoredPassword: string, decryptionKeys: PrivateKey[]): Promise<string>;
221
238
  encryptShareUrlPassword(password: string, encryptionKey: PrivateKey, signingKey: PrivateKey): Promise<string>;
239
+ private recordPerformance;
222
240
  }
223
241
  export declare function uint8ArrayToUtf8(input: Uint8Array<ArrayBuffer>): string;
224
242
  /**
@@ -20,13 +20,29 @@ var SIGNING_CONTEXTS;
20
20
  * but we do share same key generation across shares and nodes modules,
21
21
  * for example, which we can generelise here and in each module just
22
22
  * call with specific arguments.
23
+ *
24
+ * Note about AEAD encryption:
25
+ *
26
+ * The algorithm of generated session key or encrypted data is defined by
27
+ * the encryption key preferences. If encryption key was generated with
28
+ * `aeadProtect` set to true, session key or encrypted data should use
29
+ * AEAD algorithm.
30
+ *
31
+ * However, in Drive, we do not want to use the AEAD algorithm everywhere,
32
+ * only for file content. Thus, we must pass the `enableAeadWithEncryptionKeys`
33
+ * flag explicitely to control whether to use the encryption key preferences
34
+ * to avoid using AEAD on places where it would not be supported. It should
35
+ * be set to false by default everywhere except for content encryption.
23
36
  */
24
37
  class DriveCrypto {
38
+ telemetry;
25
39
  openPGPCrypto;
26
40
  srpModule;
27
- constructor(openPGPCrypto, srpModule) {
41
+ constructor(telemetry, openPGPCrypto, srpModule) {
42
+ this.telemetry = telemetry;
28
43
  this.openPGPCrypto = openPGPCrypto;
29
44
  this.srpModule = srpModule;
45
+ this.telemetry = telemetry;
30
46
  this.openPGPCrypto = openPGPCrypto;
31
47
  this.srpModule = srpModule;
32
48
  }
@@ -43,11 +59,12 @@ class DriveCrypto {
43
59
  * signature) for sending to the server
44
60
  * - decrypted data (key, sessionKey) for crypto usage
45
61
  */
46
- async generateKey(encryptionKeys, signingKey) {
62
+ async generateKey(encryptionKeys, signingKey, { enableAead } = { enableAead: false }) {
47
63
  const passphrase = this.openPGPCrypto.generatePassphrase();
48
64
  const [{ privateKey, armoredKey }, passphraseSessionKey] = await Promise.all([
49
- this.openPGPCrypto.generateKey(passphrase),
50
- this.openPGPCrypto.generateSessionKey(encryptionKeys),
65
+ this.openPGPCrypto.generateKey(passphrase, { enableAead }),
66
+ // See note in the interface documentation about AEAD encryption.
67
+ this.openPGPCrypto.generateSessionKey(encryptionKeys, { enableAeadWithEncryptionKeys: false }),
51
68
  ]);
52
69
  const { armoredPassphrase, armoredPassphraseSignature } = await this.encryptPassphrase(passphrase, passphraseSessionKey, encryptionKeys, signingKey);
53
70
  return {
@@ -70,7 +87,10 @@ class DriveCrypto {
70
87
  * @returns Object with serialised key packet and decrypted session key.
71
88
  */
72
89
  async generateContentKey(encryptionKey) {
73
- const contentKeyPacketSessionKey = await this.openPGPCrypto.generateSessionKey([encryptionKey]);
90
+ // See note in the interface documentation about AEAD encryption.
91
+ const contentKeyPacketSessionKey = await this.openPGPCrypto.generateSessionKey([encryptionKey], {
92
+ enableAeadWithEncryptionKeys: true,
93
+ });
74
94
  const { signature: armoredContentKeyPacketSignature } = await this.openPGPCrypto.signArmored(contentKeyPacketSessionKey.data, [encryptionKey]);
75
95
  const { keyPacket } = await this.openPGPCrypto.encryptSessionKey(contentKeyPacketSessionKey, [encryptionKey]);
76
96
  return {
@@ -91,7 +111,9 @@ class DriveCrypto {
91
111
  * @returns Object with armored passphrase and passphrase signature.
92
112
  */
93
113
  async encryptPassphrase(passphrase, sessionKey, encryptionKeys, signingKey) {
94
- const { armoredData: armoredPassphrase, armoredSignature: armoredPassphraseSignature } = await this.openPGPCrypto.encryptAndSignDetachedArmored(new TextEncoder().encode(passphrase), sessionKey, encryptionKeys, signingKey);
114
+ const { armoredData: armoredPassphrase, armoredSignature: armoredPassphraseSignature } = await this.openPGPCrypto.encryptAndSignDetachedArmored(new TextEncoder().encode(passphrase), sessionKey, encryptionKeys, signingKey,
115
+ // See note in the interface documentation about AEAD encryption.
116
+ { enableAeadWithEncryptionKeys: false });
95
117
  return {
96
118
  armoredPassphrase,
97
119
  armoredPassphraseSignature,
@@ -139,7 +161,9 @@ class DriveCrypto {
139
161
  */
140
162
  async encryptPublicLinkPasswordAndSessionKey(password, addressKey, bcryptPassphrase, sharePassphraseSessionKey) {
141
163
  const [{ armoredData: armoredPassword }, { keyPacket }, srp] = await Promise.all([
142
- this.openPGPCrypto.encryptArmored(new TextEncoder().encode(password), [addressKey]),
164
+ this.openPGPCrypto.encryptArmored(new TextEncoder().encode(password), [addressKey], undefined,
165
+ // See note in the interface documentation about AEAD encryption.
166
+ { enableAeadWithEncryptionKeys: false }),
143
167
  this.openPGPCrypto.encryptSessionKeyWithPassword(sharePassphraseSessionKey, bcryptPassphrase),
144
168
  this.srpModule.getSrpVerifier(password),
145
169
  ]);
@@ -204,7 +228,9 @@ class DriveCrypto {
204
228
  * It encrypts and armors signature with provided session and encryption keys.
205
229
  */
206
230
  async encryptSignature(signature, encryptionKey, sessionKey) {
207
- const { armoredData: armoredSignature } = await this.openPGPCrypto.encryptArmored(signature, [encryptionKey], sessionKey);
231
+ const { armoredData: armoredSignature } = await this.openPGPCrypto.encryptArmored(signature, [encryptionKey], sessionKey,
232
+ // See note in the interface documentation about AEAD encryption.
233
+ { enableAeadWithEncryptionKeys: false });
208
234
  return {
209
235
  armoredSignature,
210
236
  };
@@ -219,7 +245,9 @@ class DriveCrypto {
219
245
  //const passphrase crypto.getRandomValues(new Uint8Array(32));
220
246
  const passphrase = this.openPGPCrypto.generatePassphrase();
221
247
  const hashKey = new TextEncoder().encode(passphrase);
222
- const { armoredData: armoredHashKey } = await this.openPGPCrypto.encryptAndSignArmored(hashKey, undefined, [encryptionAndSigningKey], encryptionAndSigningKey);
248
+ const { armoredData: armoredHashKey } = await this.openPGPCrypto.encryptAndSignArmored(hashKey, undefined, [encryptionAndSigningKey], encryptionAndSigningKey,
249
+ // See note in the interface documentation about AEAD encryption.
250
+ { enableAeadWithEncryptionKeys: false });
223
251
  return {
224
252
  armoredHashKey,
225
253
  hashKey,
@@ -242,7 +270,9 @@ class DriveCrypto {
242
270
  if (!sessionKey && !encryptionKey) {
243
271
  throw new Error('Neither session nor encryption key provided for encrypting node name');
244
272
  }
245
- const { armoredData: armoredNodeName } = await this.openPGPCrypto.encryptAndSignArmored(new TextEncoder().encode(nodeName), sessionKey, encryptionKey ? [encryptionKey] : [], signingKey);
273
+ const { armoredData: armoredNodeName } = await this.openPGPCrypto.encryptAndSignArmored(new TextEncoder().encode(nodeName), sessionKey, encryptionKey ? [encryptionKey] : [], signingKey,
274
+ // See note in the interface documentation about AEAD encryption.
275
+ { enableAeadWithEncryptionKeys: false });
246
276
  return {
247
277
  armoredNodeName,
248
278
  };
@@ -282,7 +312,9 @@ class DriveCrypto {
282
312
  };
283
313
  }
284
314
  async encryptExtendedAttributes(extendedAttributes, encryptionKey, signingKey) {
285
- const { armoredData: armoredExtendedAttributes } = await this.openPGPCrypto.encryptAndSignArmored(new TextEncoder().encode(extendedAttributes), undefined, [encryptionKey], signingKey, { compress: true });
315
+ const { armoredData: armoredExtendedAttributes } = await this.openPGPCrypto.encryptAndSignArmored(new TextEncoder().encode(extendedAttributes), undefined, [encryptionKey], signingKey,
316
+ // See note in the interface documentation about AEAD encryption.
317
+ { compress: true, enableAeadWithEncryptionKeys: false });
286
318
  return {
287
319
  armoredExtendedAttributes,
288
320
  };
@@ -322,14 +354,20 @@ class DriveCrypto {
322
354
  };
323
355
  }
324
356
  async encryptThumbnailBlock(thumbnailData, sessionKey, signingKey) {
357
+ const start = performance.now();
325
358
  const { encryptedData } = await this.openPGPCrypto.encryptAndSign(thumbnailData, sessionKey, [], // Thumbnails use the session key so we do not send encryption key.
326
- signingKey);
359
+ signingKey,
360
+ // See note in the interface documentation about AEAD encryption.
361
+ { enableAeadWithEncryptionKeys: true });
362
+ this.recordPerformance('content_encryption', sessionKey, thumbnailData.length, start);
327
363
  return {
328
364
  encryptedData,
329
365
  };
330
366
  }
331
367
  async decryptThumbnailBlock(encryptedThumbnail, sessionKey, verificationKeys) {
368
+ const start = performance.now();
332
369
  const { data: decryptedThumbnail, verified, verificationErrors, } = await this.openPGPCrypto.decryptAndVerify(encryptedThumbnail, sessionKey, verificationKeys);
370
+ this.recordPerformance('content_decryption', sessionKey, decryptedThumbnail.length, start);
333
371
  return {
334
372
  decryptedThumbnail,
335
373
  verified,
@@ -337,8 +375,12 @@ class DriveCrypto {
337
375
  };
338
376
  }
339
377
  async encryptBlock(blockData, encryptionKey, sessionKey, signingKey) {
378
+ const start = performance.now();
340
379
  const { encryptedData, signature } = await this.openPGPCrypto.encryptAndSignDetached(blockData, sessionKey, [], // Blocks use the session key so we do not send encryption key.
341
- signingKey);
380
+ signingKey,
381
+ // See note in the interface documentation about AEAD encryption.
382
+ { enableAeadWithEncryptionKeys: true });
383
+ this.recordPerformance('content_encryption', sessionKey, blockData.length, start);
342
384
  const { armoredSignature } = await this.encryptSignature(signature, encryptionKey, sessionKey);
343
385
  return {
344
386
  encryptedData,
@@ -346,7 +388,9 @@ class DriveCrypto {
346
388
  };
347
389
  }
348
390
  async decryptBlock(encryptedBlock, sessionKey) {
391
+ const start = performance.now();
349
392
  const { data: decryptedBlock } = await this.openPGPCrypto.decryptAndVerify(encryptedBlock, sessionKey, []);
393
+ this.recordPerformance('content_decryption', sessionKey, decryptedBlock.length, start);
350
394
  return decryptedBlock;
351
395
  }
352
396
  async signManifest(manifest, signingKey) {
@@ -367,9 +411,23 @@ class DriveCrypto {
367
411
  return uint8ArrayToUtf8(password);
368
412
  }
369
413
  async encryptShareUrlPassword(password, encryptionKey, signingKey) {
370
- const { armoredData } = await this.openPGPCrypto.encryptAndSignArmored(new TextEncoder().encode(password), undefined, [encryptionKey], signingKey);
414
+ const { armoredData } = await this.openPGPCrypto.encryptAndSignArmored(new TextEncoder().encode(password), undefined, [encryptionKey], signingKey,
415
+ // See note in the interface documentation about AEAD encryption.
416
+ { enableAeadWithEncryptionKeys: false });
371
417
  return armoredData;
372
418
  }
419
+ recordPerformance(type, sessionKey, bytesProcessed, start) {
420
+ const end = performance.now();
421
+ const duration = end - start;
422
+ const cryptoModel = sessionKey.aeadAlgorithm ? 'v1.5' : 'v1';
423
+ this.telemetry.recordMetric({
424
+ eventName: 'performance',
425
+ type,
426
+ cryptoModel,
427
+ bytesProcessed,
428
+ milliseconds: Math.round(duration),
429
+ });
430
+ }
373
431
  }
374
432
  exports.DriveCrypto = DriveCrypto;
375
433
  function uint8ArrayToUtf8(input) {
@@ -1 +1 @@
1
- {"version":3,"file":"driveCrypto.js","sourceRoot":"","sources":["../../src/crypto/driveCrypto.ts"],"names":[],"mappings":";;;AAytBA,4CAEC;AAltBD,mCAA6E;AAC7E,qDAAqD;AACrD,iCAA6D;AAE7D,IAAK,gBAIJ;AAJD,WAAK,gBAAgB;IACjB,kEAA8C,CAAA;IAC9C,kGAA8E,CAAA;IAC9E,gEAA4C,CAAA;AAChD,CAAC,EAJI,gBAAgB,KAAhB,gBAAgB,QAIpB;AAED;;;;;;;;;GASG;AACH,MAAa,WAAW;IAER;IACA;IAFZ,YACY,aAA4B,EAC5B,SAAoB;QADpB,kBAAa,GAAb,aAAa,CAAe;QAC5B,cAAS,GAAT,SAAS,CAAW;QAE5B,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QACnC,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC/B,CAAC;IAED;;;;;;;;;;;;OAYG;IACH,KAAK,CAAC,WAAW,CACb,cAA4B,EAC5B,UAAsB;QAatB,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,kBAAkB,EAAE,CAAC;QAC3D,MAAM,CAAC,EAAE,UAAU,EAAE,UAAU,EAAE,EAAE,oBAAoB,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YACzE,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,UAAU,CAAC;YAC1C,IAAI,CAAC,aAAa,CAAC,kBAAkB,CAAC,cAAc,CAAC;SACxD,CAAC,CAAC;QAEH,MAAM,EAAE,iBAAiB,EAAE,0BAA0B,EAAE,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAClF,UAAU,EACV,oBAAoB,EACpB,cAAc,EACd,UAAU,CACb,CAAC;QAEF,OAAO;YACH,SAAS,EAAE;gBACP,UAAU;gBACV,iBAAiB;gBACjB,0BAA0B;aAC7B;YACD,SAAS,EAAE;gBACP,UAAU;gBACV,GAAG,EAAE,UAAU;gBACf,oBAAoB;aACvB;SACJ,CAAC;IACN,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,kBAAkB,CAAC,aAAyB;QAS9C,MAAM,0BAA0B,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,kBAAkB,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC;QAChG,MAAM,EAAE,SAAS,EAAE,gCAAgC,EAAE,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,WAAW,CACxF,0BAA0B,CAAC,IAAI,EAC/B,CAAC,aAAa,CAAC,CAClB,CAAC;QACF,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,iBAAiB,CAAC,0BAA0B,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC;QAE9G,OAAO;YACH,SAAS,EAAE;gBACP,sBAAsB,EAAE,IAAA,gCAAwB,EAAC,SAAS,CAAC;gBAC3D,gCAAgC;aACnC;YACD,SAAS,EAAE;gBACP,0BAA0B;aAC7B;SACJ,CAAC;IACN,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,iBAAiB,CACnB,UAAkB,EAClB,UAAsB,EACtB,cAA4B,EAC5B,UAAsB;QAKtB,MAAM,EAAE,WAAW,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,0BAA0B,EAAE,GAClF,MAAM,IAAI,CAAC,aAAa,CAAC,6BAA6B,CAClD,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,EACpC,UAAU,EACV,cAAc,EACd,UAAU,CACb,CAAC;QAEN,OAAO;YACH,iBAAiB;YACjB,0BAA0B;SAC7B,CAAC;IACN,CAAC;IAED;;;;;;;;;;;;OAYG;IACH,KAAK,CAAC,UAAU,CACZ,UAAkB,EAClB,iBAAyB,EACzB,0BAA8C,EAC9C,cAA4B,EAC5B,gBAA6B;QAQ7B,MAAM,oBAAoB,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,wBAAwB,CAC1E,iBAAiB,EACjB,cAAc,CACjB,CAAC;QAEF,MAAM,EACF,IAAI,EAAE,mBAAmB,EACzB,QAAQ,EACR,kBAAkB,GACrB,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,+BAA+B,CACxD,iBAAiB,EACjB,0BAA0B,EAC1B,oBAAoB,EACpB,gBAAgB,CACnB,CAAC;QAEF,MAAM,UAAU,GAAG,gBAAgB,CAAC,mBAAmB,CAAC,CAAC;QAEzD,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;QACxE,OAAO;YACH,UAAU;YACV,GAAG;YACH,oBAAoB;YACpB,QAAQ;YACR,kBAAkB;SACrB,CAAC;IACN,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,iBAAiB,CACnB,UAAsB,EACtB,aAAwB;QAIxB,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,iBAAiB,CAAC,UAAU,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC;QAC9F,OAAO;YACH,eAAe,EAAE,IAAA,gCAAwB,EAAC,SAAS,CAAC;SACvD,CAAC;IACN,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,sCAAsC,CACxC,QAAgB,EAChB,UAAsB,EACtB,gBAAwB,EACxB,yBAAqC;QAMrC,MAAM,CAAC,EAAE,WAAW,EAAE,eAAe,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,GAAG,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YAC7E,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC;YACnF,IAAI,CAAC,aAAa,CAAC,6BAA6B,CAAC,yBAAyB,EAAE,gBAAgB,CAAC;YAC7F,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,QAAQ,CAAC;SAC1C,CAAC,CAAC;QAEH,OAAO;YACH,eAAe;YACf,8BAA8B,EAAE,IAAA,gCAAwB,EAAC,SAAS,CAAC;YACnE,GAAG;SACN,CAAC;IACN,CAAC;IAED;;;;;;;OAOG;IACH,KAAK,CAAC,yBAAyB,CAC3B,QAAgB,EAChB,IAAY,EACZ,UAAkB,EAClB,iBAAyB;QAIzB,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,kBAAkB,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QAE5E,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,0BAA0B,CAAC,iBAAiB,EAAE,WAAW,CAAC,CAAC;QAEvG,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,UAAU,EAAE,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC;QAElG,OAAO;YACH,GAAG;SACN,CAAC;IACN,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,iBAAiB,CAAC,WAAmB,EAAE,cAAyC;QAClF,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,wBAAwB,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;QAClG,OAAO,UAAU,CAAC;IACtB,CAAC;IAED,KAAK,CAAC,0BAA0B,CAC5B,UAAkB,EAClB,gBAAoC,EACpC,cAAyC,EACzC,gBAA6B;QAM7B,MAAM,IAAI,GAAG,IAAA,gCAAwB,EAAC,UAAU,CAAC,CAAC;QAElD,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,iBAAiB,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;QAEpF,IAAI,QAAQ,CAAC;QACb,IAAI,kBAAkB,CAAC;QACvB,IAAI,gBAAgB,EAAE,CAAC;YACnB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,UAAU,CAAC,IAAI,EAAE,gBAAgB,EAAE,gBAAgB,CAAC,CAAC;YAC3G,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;YAC3B,kBAAkB,GAAG,MAAM,CAAC,kBAAkB,CAAC;QACnD,CAAC;QAED,OAAO;YACH,UAAU;YACV,QAAQ;YACR,kBAAkB;SACrB,CAAC;IACN,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,kBAAkB,CACpB,UAAkB,EAClB,iBAAyB,EACzB,cAAyC;QAEzC,MAAM,EAAE,IAAI,EAAE,mBAAmB,EAAE,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,uBAAuB,CAClF,iBAAiB,EACjB,cAAc,EACd,EAAE,CACL,CAAC;QAEF,MAAM,UAAU,GAAG,gBAAgB,CAAC,mBAAmB,CAAC,CAAC;QAEzD,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;QAExE,OAAO,GAAG,CAAC;IACf,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,gBAAgB,CAClB,SAAkC,EAClC,aAAyB,EACzB,UAAsB;QAItB,MAAM,EAAE,WAAW,EAAE,gBAAgB,EAAE,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,cAAc,CAC7E,SAAS,EACT,CAAC,aAAa,CAAC,EACf,UAAU,CACb,CAAC;QACF,OAAO;YACH,gBAAgB;SACnB,CAAC;IACN,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,eAAe,CAAC,uBAAmC;QAIrD,6DAA6D;QAC7D,8DAA8D;QAC9D,8DAA8D;QAC9D,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,kBAAkB,EAAE,CAAC;QAC3D,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QAErD,MAAM,EAAE,WAAW,EAAE,cAAc,EAAE,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,qBAAqB,CAClF,OAAO,EACP,SAAS,EACT,CAAC,uBAAuB,CAAC,EACzB,uBAAuB,CAC1B,CAAC;QACF,OAAO;YACH,cAAc;YACd,OAAO;SACV,CAAC;IACN,CAAC;IAED,KAAK,CAAC,kBAAkB,CAAC,OAAe,EAAE,aAAsC;QAC5E,MAAM,GAAG,GAAG,MAAM,IAAA,oBAAa,EAAC,aAAa,CAAC,CAAC;QAE/C,MAAM,SAAS,GAAG,MAAM,IAAA,2BAAoB,EAAC,GAAG,EAAE,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;QACrF,OAAO,IAAA,wBAAgB,EAAC,SAAS,CAAC,CAAC;IACvC,CAAC;IAED;;;;;;;OAOG;IACH,KAAK,CAAC,eAAe,CACjB,QAAgB,EAChB,UAAkC,EAClC,aAAqC,EACrC,UAAsB;QAItB,IAAI,CAAC,UAAU,IAAI,CAAC,aAAa,EAAE,CAAC;YAChC,MAAM,IAAI,KAAK,CAAC,sEAAsE,CAAC,CAAC;QAC5F,CAAC;QAED,MAAM,EAAE,WAAW,EAAE,eAAe,EAAE,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,qBAAqB,CACnF,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,EAClC,UAAU,EACV,aAAa,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,EAAE,EACpC,UAAU,CACb,CAAC;QACF,OAAO;YACH,eAAe;SAClB,CAAC;IACN,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,eAAe,CACjB,eAAuB,EACvB,aAAyB,EACzB,gBAA6B;QAM7B,MAAM,EACF,IAAI,EAAE,IAAI,EACV,QAAQ,EACR,kBAAkB,GACrB,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,uBAAuB,CAAC,eAAe,EAAE,CAAC,aAAa,CAAC,EAAE,gBAAgB,CAAC,CAAC;QACzG,OAAO;YACH,IAAI,EAAE,gBAAgB,CAAC,IAAI,CAAC;YAC5B,QAAQ;YACR,kBAAkB;SACrB,CAAC;IACN,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,kBAAkB,CACpB,cAAsB,EACtB,4BAAwC,EACxC,qBAAkC;QAMlC,qEAAqE;QACrE,uEAAuE;QACvE,kEAAkE;QAClE,mEAAmE;QACnE,gEAAgE;QAChE,kDAAkD;QAClD,MAAM,EACF,IAAI,EAAE,OAAO,EACb,QAAQ,EACR,kBAAkB,GACrB,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,uBAAuB,CAChD,cAAc,EACd,CAAC,4BAA4B,CAAC,EAC9B,CAAC,4BAA4B,EAAE,GAAG,qBAAqB,CAAC,CAC3D,CAAC;QACF,OAAO;YACH,OAAO;YACP,QAAQ;YACR,kBAAkB;SACrB,CAAC;IACN,CAAC;IAED,KAAK,CAAC,yBAAyB,CAC3B,kBAA0B,EAC1B,aAAyB,EACzB,UAAsB;QAItB,MAAM,EAAE,WAAW,EAAE,yBAAyB,EAAE,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,qBAAqB,CAC7F,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,kBAAkB,CAAC,EAC5C,SAAS,EACT,CAAC,aAAa,CAAC,EACf,UAAU,EACV,EAAE,QAAQ,EAAE,IAAI,EAAE,CACrB,CAAC;QACF,OAAO;YACH,yBAAyB;SAC5B,CAAC;IACN,CAAC;IAED,KAAK,CAAC,yBAAyB,CAC3B,wBAAgC,EAChC,aAAyB,EACzB,gBAA6B;QAM7B,MAAM,EACF,IAAI,EAAE,2BAA2B,EACjC,QAAQ,EACR,kBAAkB,GACrB,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,uBAAuB,CAChD,wBAAwB,EACxB,CAAC,aAAa,CAAC,EACf,gBAAgB,CACnB,CAAC;QAEF,OAAO;YACH,kBAAkB,EAAE,gBAAgB,CAAC,2BAA2B,CAAC;YACjE,QAAQ;YACR,kBAAkB;SACrB,CAAC;IACN,CAAC;IAED,KAAK,CAAC,iBAAiB,CACnB,eAA2B,EAC3B,aAAwB,EACxB,UAAsB;QAKtB,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,iBAAiB,CAAC,eAAe,EAAE,aAAa,CAAC,CAAC;QACjG,MAAM,EAAE,SAAS,EAAE,kBAAkB,EAAE,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,CACnE,SAAS,EACT,UAAU,EACV,gBAAgB,CAAC,eAAe,CACnC,CAAC;QACF,OAAO;YACH,eAAe,EAAE,IAAA,gCAAwB,EAAC,SAAS,CAAC;YACpD,wBAAwB,EAAE,IAAA,gCAAwB,EAAC,kBAAkB,CAAC;SACzE,CAAC;IACN,CAAC;IAED,KAAK,CAAC,gBAAgB,CAClB,eAAuB,EACvB,yBAAiC,EACjC,gBAA6B;QAK7B,MAAM,EAAE,QAAQ,EAAE,kBAAkB,EAAE,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,aAAa,CAC3E,IAAA,gCAAwB,EAAC,eAAe,CAAC,EACzC,yBAAyB,EACzB,gBAAgB,EAChB,gBAAgB,CAAC,eAAe,CACnC,CAAC;QACF,OAAO,EAAE,QAAQ,EAAE,kBAAkB,EAAE,CAAC;IAC5C,CAAC;IAED,KAAK,CAAC,gBAAgB,CAClB,eAAuB,EACvB,UAAsB;QAItB,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,iBAAiB,CACzD,IAAA,gCAAwB,EAAC,eAAe,CAAC,EACzC,UAAU,CACb,CAAC;QAEF,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,CAC/C,UAAU,CAAC,IAAI,EACf,UAAU,EACV,gBAAgB,CAAC,cAAc,CAClC,CAAC;QAEF,OAAO;YACH,yBAAyB,EAAE,IAAA,gCAAwB,EAAC,SAAS,CAAC;SACjE,CAAC;IACN,CAAC;IAED,KAAK,CAAC,yBAAyB,CAC3B,eAA2B,EAC3B,UAAsB,EACtB,YAAoB;QAIpB,MAAM,IAAI,GAAG,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,IAAA,gCAAwB,EAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC;QAE7F,MAAM,EAAE,SAAS,EAAE,0BAA0B,EAAE,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,CAC3E,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,EAC9B,UAAU,EACV,gBAAgB,CAAC,mCAAmC,CACvD,CAAC;QACF,OAAO;YACH,iCAAiC,EAAE,IAAA,gCAAwB,EAAC,0BAA0B,CAAC;SAC1F,CAAC;IACN,CAAC;IAED,KAAK,CAAC,qBAAqB,CACvB,aAAsC,EACtC,UAAsB,EACtB,UAAsB;QAItB,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,cAAc,CAC7D,aAAa,EACb,UAAU,EACV,EAAE,EAAE,mEAAmE;QACvE,UAAU,CACb,CAAC;QAEF,OAAO;YACH,aAAa;SAChB,CAAC;IACN,CAAC;IAED,KAAK,CAAC,qBAAqB,CACvB,kBAA2C,EAC3C,UAAsB,EACtB,gBAA6B;QAM7B,MAAM,EACF,IAAI,EAAE,kBAAkB,EACxB,QAAQ,EACR,kBAAkB,GACrB,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,UAAU,EAAE,gBAAgB,CAAC,CAAC;QAChG,OAAO;YACH,kBAAkB;YAClB,QAAQ;YACR,kBAAkB;SACrB,CAAC;IACN,CAAC;IAED,KAAK,CAAC,YAAY,CACd,SAAkC,EAClC,aAAyB,EACzB,UAAsB,EACtB,UAAsB;QAKtB,MAAM,EAAE,aAAa,EAAE,SAAS,EAAE,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,sBAAsB,CAChF,SAAS,EACT,UAAU,EACV,EAAE,EAAE,+DAA+D;QACnE,UAAU,CACb,CAAC;QAEF,MAAM,EAAE,gBAAgB,EAAE,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE,aAAa,EAAE,UAAU,CAAC,CAAC;QAE/F,OAAO;YACH,aAAa;YACb,gBAAgB;SACnB,CAAC;IACN,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,cAAuC,EAAE,UAAsB;QAC9E,MAAM,EAAE,IAAI,EAAE,cAAc,EAAE,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,gBAAgB,CAAC,cAAc,EAAE,UAAU,EAAE,EAAE,CAAC,CAAC;QAE3G,OAAO,cAAc,CAAC;IAC1B,CAAC;IAED,KAAK,CAAC,YAAY,CACd,QAAiC,EACjC,UAAsB;QAItB,MAAM,EAAE,SAAS,EAAE,wBAAwB,EAAE,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QAC3G,OAAO;YACH,wBAAwB;SAC3B,CAAC;IACN,CAAC;IAED,KAAK,CAAC,cAAc,CAChB,QAAiC,EACjC,gBAAwB,EACxB,gBAAyC;QAKzC,MAAM,EAAE,QAAQ,EAAE,kBAAkB,EAAE,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,aAAa,CAC3E,QAAQ,EACR,gBAAgB,EAChB,gBAAgB,CACnB,CAAC;QACF,OAAO;YACH,QAAQ;YACR,kBAAkB;SACrB,CAAC;IACN,CAAC;IAED,KAAK,CAAC,uBAAuB,CAAC,eAAuB,EAAE,cAA4B;QAC/E,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,eAAe,EAAE,cAAc,CAAC,CAAC;QAC1F,OAAO,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IACtC,CAAC;IAED,KAAK,CAAC,uBAAuB,CAAC,QAAgB,EAAE,aAAyB,EAAE,UAAsB;QAC7F,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,qBAAqB,CAClE,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,EAClC,SAAS,EACT,CAAC,aAAa,CAAC,EACf,UAAU,CACb,CAAC;QACF,OAAO,WAAW,CAAC;IACvB,CAAC;CACJ;AA1rBD,kCA0rBC;AAED,SAAgB,gBAAgB,CAAC,KAA8B;IAC3D,OAAO,IAAI,WAAW,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACnE,CAAC;AAED;;;;GAIG;AACI,MAAM,gBAAgB,GAAG,CAAC,KAA8B,EAAE,EAAE;IAC/D,MAAM,WAAW,GAAG,kBAAkB,CAAC;IACvC,IAAI,CAAC,GAAG,EAAE,CAAC;IACX,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;QAChB,CAAC,IAAI,WAAW,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;IACH,OAAO,CAAC,CAAC;AACb,CAAC,CAAC;AAPW,QAAA,gBAAgB,oBAO3B"}
1
+ {"version":3,"file":"driveCrypto.js","sourceRoot":"","sources":["../../src/crypto/driveCrypto.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const driveCrypto_1 = require("./driveCrypto");
4
+ const telemetry_1 = require("../tests/telemetry");
4
5
  describe('uint8ArrayToUtf8', () => {
5
6
  it('should convert a Uint8Array to a UTF-8 string', () => {
6
7
  const input = new Uint8Array([72, 101, 108, 108, 111]);
@@ -47,13 +48,13 @@ describe('DriveCrypto.encryptShareUrlPassword', () => {
47
48
  }),
48
49
  };
49
50
  const mockSrpModule = jest.fn();
50
- const driveCrypto = new driveCrypto_1.DriveCrypto(mockOpenPGPCrypto, mockSrpModule);
51
+ const driveCrypto = new driveCrypto_1.DriveCrypto((0, telemetry_1.getMockTelemetry)(), mockOpenPGPCrypto, mockSrpModule);
51
52
  const password = 'testPassword123';
52
53
  const encryptionKey = 'mockEncryptionKey';
53
54
  const signingKey = 'mockSigningKey';
54
55
  const result = await driveCrypto.encryptShareUrlPassword(password, encryptionKey, signingKey);
55
56
  expect(result).toBe('-----BEGIN PGP MESSAGE-----\nencrypted data\n-----END PGP MESSAGE-----');
56
- expect(mockOpenPGPCrypto.encryptAndSignArmored).toHaveBeenCalledWith(new TextEncoder().encode(password), undefined, [encryptionKey], signingKey);
57
+ expect(mockOpenPGPCrypto.encryptAndSignArmored).toHaveBeenCalledWith(new TextEncoder().encode(password), undefined, [encryptionKey], signingKey, { enableAeadWithEncryptionKeys: false });
57
58
  });
58
59
  });
59
60
  //# sourceMappingURL=driveCrypto.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"driveCrypto.test.js","sourceRoot":"","sources":["../../src/crypto/driveCrypto.test.ts"],"names":[],"mappings":";;AAAA,+CAAgF;AAEhF,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;IAC9B,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;QACrD,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;QACvD,MAAM,cAAc,GAAG,OAAO,CAAC;QAC/B,MAAM,MAAM,GAAG,IAAA,8BAAgB,EAAC,KAAK,CAAC,CAAC;QACvC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;QACzC,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,EAAE,CAAC,CAAC;QACjC,MAAM,cAAc,GAAG,EAAE,CAAC;QAC1B,MAAM,MAAM,GAAG,IAAA,8BAAgB,EAAC,KAAK,CAAC,CAAC;QACvC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;QACxC,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC;QACnD,MAAM,CAAC,GAAG,EAAE,CAAC,IAAA,8BAAgB,EAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,mDAAmD,CAAC,CAAC;IACvG,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;IAC9B,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACnD,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;QAC/C,MAAM,cAAc,GAAG,UAAU,CAAC;QAClC,MAAM,MAAM,GAAG,IAAA,8BAAgB,EAAC,KAAK,CAAC,CAAC;QACvC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;QACzC,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,EAAE,CAAC,CAAC;QACjC,MAAM,cAAc,GAAG,EAAE,CAAC;QAC1B,MAAM,MAAM,GAAG,IAAA,8BAAgB,EAAC,KAAK,CAAC,CAAC;QACvC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACnD,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAClC,MAAM,cAAc,GAAG,IAAI,CAAC;QAC5B,MAAM,MAAM,GAAG,IAAA,8BAAgB,EAAC,KAAK,CAAC,CAAC;QACvC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,qCAAqC,EAAE,GAAG,EAAE;IACjD,EAAE,CAAC,sCAAsC,EAAE,KAAK,IAAI,EAAE;QAClD,MAAM,iBAAiB,GAAG;YACtB,qBAAqB,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC;gBAC/C,WAAW,EAAE,wEAAwE;aACxF,CAAC;SACL,CAAC;QAEF,MAAM,aAAa,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;QAChC,MAAM,WAAW,GAAG,IAAI,yBAAW,CAAC,iBAAwB,EAAE,aAAoB,CAAC,CAAC;QAEpF,MAAM,QAAQ,GAAG,iBAAiB,CAAC;QACnC,MAAM,aAAa,GAAG,mBAA0B,CAAC;QACjD,MAAM,UAAU,GAAG,gBAAuB,CAAC;QAE3C,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,uBAAuB,CAAC,QAAQ,EAAE,aAAa,EAAE,UAAU,CAAC,CAAC;QAE9F,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,wEAAwE,CAAC,CAAC;QAC9F,MAAM,CAAC,iBAAiB,CAAC,qBAAqB,CAAC,CAAC,oBAAoB,CAChE,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,EAClC,SAAS,EACT,CAAC,aAAa,CAAC,EACf,UAAU,CACb,CAAC;IACN,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"driveCrypto.test.js","sourceRoot":"","sources":["../../src/crypto/driveCrypto.test.ts"],"names":[],"mappings":"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"}
@@ -25,7 +25,8 @@ export interface PrivateKey extends PublicKey {
25
25
  }
26
26
  export interface SessionKey {
27
27
  data: Uint8Array<ArrayBuffer>;
28
- algorithm: any;
28
+ algorithm: string | null;
29
+ aeadAlgorithm: string | null;
29
30
  }
30
31
  export declare enum VERIFICATION_STATUS {
31
32
  NOT_SIGNED = 0,
@@ -65,7 +66,9 @@ export interface OpenPGPCrypto {
65
66
  * 32 random bytes are generated and encoded into a base64 string.
66
67
  */
67
68
  generatePassphrase: () => string;
68
- generateSessionKey: (encryptionKeys: PublicKey[]) => Promise<SessionKey>;
69
+ generateSessionKey: (encryptionKeys: PublicKey[], options: {
70
+ enableAeadWithEncryptionKeys: boolean;
71
+ }) => Promise<SessionKey>;
69
72
  encryptSessionKey: (sessionKey: SessionKey, encryptionKeys: PublicKey | PublicKey[]) => Promise<{
70
73
  keyPacket: Uint8Array<ArrayBuffer>;
71
74
  }>;
@@ -77,26 +80,37 @@ export interface OpenPGPCrypto {
77
80
  *
78
81
  * The key pair is generated using the Curve25519 algorithm.
79
82
  */
80
- generateKey: (passphrase: string) => Promise<{
83
+ generateKey: (passphrase: string, options: {
84
+ enableAead: boolean;
85
+ }) => Promise<{
81
86
  privateKey: PrivateKey;
82
87
  armoredKey: string;
83
88
  }>;
84
- encryptArmored: (data: Uint8Array<ArrayBuffer>, encryptionKeys: PublicKey[], sessionKey?: SessionKey) => Promise<{
89
+ encryptArmored: (data: Uint8Array<ArrayBuffer>, encryptionKeys: PublicKey[], sessionKey: SessionKey | undefined, options: {
90
+ enableAeadWithEncryptionKeys: boolean;
91
+ }) => Promise<{
85
92
  armoredData: string;
86
93
  }>;
87
- encryptAndSign: (data: Uint8Array<ArrayBuffer>, sessionKey: SessionKey, encryptionKeys: PublicKey[], signingKey: PrivateKey) => Promise<{
94
+ encryptAndSign: (data: Uint8Array<ArrayBuffer>, sessionKey: SessionKey, encryptionKeys: PublicKey[], signingKey: PrivateKey, options: {
95
+ enableAeadWithEncryptionKeys: boolean;
96
+ }) => Promise<{
88
97
  encryptedData: Uint8Array<ArrayBuffer>;
89
98
  }>;
90
- encryptAndSignArmored: (data: Uint8Array<ArrayBuffer>, sessionKey: SessionKey | undefined, encryptionKeys: PublicKey[], signingKey: PrivateKey, options?: {
99
+ encryptAndSignArmored: (data: Uint8Array<ArrayBuffer>, sessionKey: SessionKey | undefined, encryptionKeys: PublicKey[], signingKey: PrivateKey, options: {
91
100
  compress?: boolean;
101
+ enableAeadWithEncryptionKeys: boolean;
92
102
  }) => Promise<{
93
103
  armoredData: string;
94
104
  }>;
95
- encryptAndSignDetached: (data: Uint8Array<ArrayBuffer>, sessionKey: SessionKey, encryptionKeys: PublicKey[], signingKey: PrivateKey) => Promise<{
105
+ encryptAndSignDetached: (data: Uint8Array<ArrayBuffer>, sessionKey: SessionKey, encryptionKeys: PublicKey[], signingKey: PrivateKey, options: {
106
+ enableAeadWithEncryptionKeys: boolean;
107
+ }) => Promise<{
96
108
  encryptedData: Uint8Array<ArrayBuffer>;
97
109
  signature: Uint8Array<ArrayBuffer>;
98
110
  }>;
99
- encryptAndSignDetachedArmored: (data: Uint8Array<ArrayBuffer>, sessionKey: SessionKey, encryptionKeys: PublicKey[], signingKey: PrivateKey) => Promise<{
111
+ encryptAndSignDetachedArmored: (data: Uint8Array<ArrayBuffer>, sessionKey: SessionKey, encryptionKeys: PublicKey[], signingKey: PrivateKey, options: {
112
+ enableAeadWithEncryptionKeys: boolean;
113
+ }) => Promise<{
100
114
  armoredData: string;
101
115
  armoredSignature: string;
102
116
  }>;
@@ -10,6 +10,9 @@ export interface OpenPGPCryptoProxy {
10
10
  }[];
11
11
  type: 'ecc';
12
12
  curve: 'ed25519Legacy';
13
+ config?: {
14
+ aeadProtect: boolean;
15
+ };
13
16
  }) => Promise<PrivateKey>;
14
17
  exportPrivateKey: (options: {
15
18
  privateKey: PrivateKey;
@@ -21,6 +24,9 @@ export interface OpenPGPCryptoProxy {
21
24
  }) => Promise<PrivateKey>;
22
25
  generateSessionKey: (options: {
23
26
  recipientKeys: PublicKey[];
27
+ config?: {
28
+ ignoreSEIPDv2FeatureFlag: boolean;
29
+ };
24
30
  }) => Promise<SessionKey>;
25
31
  encryptSessionKey: (options: SessionKey & {
26
32
  format: 'binary';
@@ -40,6 +46,9 @@ export interface OpenPGPCryptoProxy {
40
46
  signingKeys?: PrivateKey;
41
47
  detached?: Detached;
42
48
  compress?: boolean;
49
+ config?: {
50
+ ignoreSEIPDv2FeatureFlag: boolean;
51
+ };
43
52
  }) => Promise<Detached extends true ? {
44
53
  message: Format extends 'binary' ? Uint8Array<ArrayBuffer> : string;
45
54
  signature: Format extends 'binary' ? Uint8Array<ArrayBuffer> : string;
@@ -94,33 +103,47 @@ export declare class OpenPGPCryptoWithCryptoProxy implements OpenPGPCrypto {
94
103
  private cryptoProxy;
95
104
  constructor(cryptoProxy: OpenPGPCryptoProxy);
96
105
  generatePassphrase(): string;
97
- generateSessionKey(encryptionKeys: PublicKey[]): Promise<SessionKey>;
106
+ generateSessionKey(encryptionKeys: PublicKey[], options: {
107
+ enableAeadWithEncryptionKeys: boolean;
108
+ }): Promise<SessionKey>;
98
109
  encryptSessionKey(sessionKey: SessionKey, encryptionKeys: PublicKey | PublicKey[]): Promise<{
99
110
  keyPacket: Uint8Array<ArrayBuffer>;
100
111
  }>;
101
112
  encryptSessionKeyWithPassword(sessionKey: SessionKey, password: string): Promise<{
102
113
  keyPacket: Uint8Array<ArrayBuffer>;
103
114
  }>;
104
- generateKey(passphrase: string): Promise<{
115
+ generateKey(passphrase: string, options: {
116
+ enableAead: boolean;
117
+ }): Promise<{
105
118
  armoredKey: string;
106
119
  privateKey: PrivateKey;
107
120
  }>;
108
- encryptArmored(data: Uint8Array<ArrayBuffer>, encryptionKeys: PublicKey[], sessionKey?: SessionKey): Promise<{
121
+ encryptArmored(data: Uint8Array<ArrayBuffer>, encryptionKeys: PublicKey[], sessionKey: SessionKey | undefined, options: {
122
+ enableAeadWithEncryptionKeys: boolean;
123
+ }): Promise<{
109
124
  armoredData: string;
110
125
  }>;
111
- encryptAndSign(data: Uint8Array<ArrayBuffer>, sessionKey: SessionKey, encryptionKeys: PublicKey[], signingKey: PrivateKey): Promise<{
126
+ encryptAndSign(data: Uint8Array<ArrayBuffer>, sessionKey: SessionKey, encryptionKeys: PublicKey[], signingKey: PrivateKey, options: {
127
+ compress?: boolean;
128
+ enableAeadWithEncryptionKeys: boolean;
129
+ }): Promise<{
112
130
  encryptedData: Uint8Array<ArrayBuffer>;
113
131
  }>;
114
- encryptAndSignArmored(data: Uint8Array<ArrayBuffer>, sessionKey: SessionKey | undefined, encryptionKeys: PublicKey[], signingKey: PrivateKey, options?: {
132
+ encryptAndSignArmored(data: Uint8Array<ArrayBuffer>, sessionKey: SessionKey | undefined, encryptionKeys: PublicKey[], signingKey: PrivateKey, options: {
115
133
  compress?: boolean;
134
+ enableAeadWithEncryptionKeys: boolean;
116
135
  }): Promise<{
117
136
  armoredData: string;
118
137
  }>;
119
- encryptAndSignDetached(data: Uint8Array<ArrayBuffer>, sessionKey: SessionKey, encryptionKeys: PublicKey[], signingKey: PrivateKey): Promise<{
138
+ encryptAndSignDetached(data: Uint8Array<ArrayBuffer>, sessionKey: SessionKey, encryptionKeys: PublicKey[], signingKey: PrivateKey, options: {
139
+ enableAeadWithEncryptionKeys: boolean;
140
+ }): Promise<{
120
141
  encryptedData: Uint8Array<ArrayBuffer>;
121
142
  signature: Uint8Array<ArrayBuffer>;
122
143
  }>;
123
- encryptAndSignDetachedArmored(data: Uint8Array<ArrayBuffer>, sessionKey: SessionKey, encryptionKeys: PublicKey[], signingKey: PrivateKey): Promise<{
144
+ encryptAndSignDetachedArmored(data: Uint8Array<ArrayBuffer>, sessionKey: SessionKey, encryptionKeys: PublicKey[], signingKey: PrivateKey, options: {
145
+ enableAeadWithEncryptionKeys: boolean;
146
+ }): Promise<{
124
147
  armoredData: string;
125
148
  armoredSignature: string;
126
149
  }>;
@@ -20,8 +20,15 @@ class OpenPGPCryptoWithCryptoProxy {
20
20
  // generating of random bytes without encoding it into base64.
21
21
  return (0, utils_1.uint8ArrayToBase64String)(value);
22
22
  }
23
- async generateSessionKey(encryptionKeys) {
24
- return this.cryptoProxy.generateSessionKey({ recipientKeys: encryptionKeys });
23
+ async generateSessionKey(encryptionKeys, options) {
24
+ return this.cryptoProxy.generateSessionKey({
25
+ recipientKeys: encryptionKeys,
26
+ // `ignoreSEIPDv2FeatureFlag` means that the key preferences are
27
+ // ignored. If set to `true`, the session key will be generated
28
+ // the standard non-AEAD algorithm. If set to `false`, the session
29
+ // key will always follow the encryption key preferences.
30
+ config: { ignoreSEIPDv2FeatureFlag: !options.enableAeadWithEncryptionKeys },
31
+ });
25
32
  }
26
33
  async encryptSessionKey(sessionKey, encryptionKeys) {
27
34
  const keyPacket = await this.cryptoProxy.encryptSessionKey({
@@ -43,11 +50,12 @@ class OpenPGPCryptoWithCryptoProxy {
43
50
  keyPacket,
44
51
  };
45
52
  }
46
- async generateKey(passphrase) {
53
+ async generateKey(passphrase, options) {
47
54
  const privateKey = await this.cryptoProxy.generateKey({
48
55
  userIDs: [{ name: 'Drive key' }],
49
56
  type: 'ecc',
50
57
  curve: 'ed25519Legacy',
58
+ config: { aeadProtect: options.enableAead },
51
59
  });
52
60
  const armoredKey = await this.cryptoProxy.exportPrivateKey({
53
61
  privateKey,
@@ -58,17 +66,22 @@ class OpenPGPCryptoWithCryptoProxy {
58
66
  privateKey,
59
67
  };
60
68
  }
61
- async encryptArmored(data, encryptionKeys, sessionKey) {
69
+ async encryptArmored(data, encryptionKeys, sessionKey, options) {
62
70
  const { message: armoredData } = await this.cryptoProxy.encryptMessage({
63
71
  binaryData: data,
64
72
  sessionKey,
65
73
  encryptionKeys,
74
+ // `ignoreSEIPDv2FeatureFlag` means that the key preferences are
75
+ // ignored. If set to `true`, the encrypted data will be generated
76
+ // the standard non-AEAD algorithm. If set to `false`, the session
77
+ // key will always follow the encryption key preferences.
78
+ config: { ignoreSEIPDv2FeatureFlag: !options.enableAeadWithEncryptionKeys },
66
79
  });
67
80
  return {
68
81
  armoredData: armoredData,
69
82
  };
70
83
  }
71
- async encryptAndSign(data, sessionKey, encryptionKeys, signingKey) {
84
+ async encryptAndSign(data, sessionKey, encryptionKeys, signingKey, options) {
72
85
  const { message: encryptedData } = await this.cryptoProxy.encryptMessage({
73
86
  binaryData: data,
74
87
  sessionKey,
@@ -76,12 +89,17 @@ class OpenPGPCryptoWithCryptoProxy {
76
89
  encryptionKeys,
77
90
  format: 'binary',
78
91
  detached: false,
92
+ // `ignoreSEIPDv2FeatureFlag` means that the key preferences are
93
+ // ignored. If set to `true`, the encrypted data will be generated
94
+ // the standard non-AEAD algorithm. If set to `false`, the session
95
+ // key will always follow the encryption key preferences.
96
+ config: { ignoreSEIPDv2FeatureFlag: !options.enableAeadWithEncryptionKeys },
79
97
  });
80
98
  return {
81
99
  encryptedData: encryptedData,
82
100
  };
83
101
  }
84
- async encryptAndSignArmored(data, sessionKey, encryptionKeys, signingKey, options = {}) {
102
+ async encryptAndSignArmored(data, sessionKey, encryptionKeys, signingKey, options) {
85
103
  const { message: armoredData } = await this.cryptoProxy.encryptMessage({
86
104
  binaryData: data,
87
105
  encryptionKeys,
@@ -89,12 +107,17 @@ class OpenPGPCryptoWithCryptoProxy {
89
107
  signingKeys: signingKey,
90
108
  detached: false,
91
109
  compress: options.compress || false,
110
+ // `ignoreSEIPDv2FeatureFlag` means that the key preferences are
111
+ // ignored. If set to `true`, the encrypted data will be generated
112
+ // the standard non-AEAD algorithm. If set to `false`, the session
113
+ // key will always follow the encryption key preferences.
114
+ config: { ignoreSEIPDv2FeatureFlag: !options.enableAeadWithEncryptionKeys },
92
115
  });
93
116
  return {
94
117
  armoredData: armoredData,
95
118
  };
96
119
  }
97
- async encryptAndSignDetached(data, sessionKey, encryptionKeys, signingKey) {
120
+ async encryptAndSignDetached(data, sessionKey, encryptionKeys, signingKey, options) {
98
121
  const { message: encryptedData, signature } = await this.cryptoProxy.encryptMessage({
99
122
  binaryData: data,
100
123
  sessionKey,
@@ -102,19 +125,29 @@ class OpenPGPCryptoWithCryptoProxy {
102
125
  encryptionKeys,
103
126
  format: 'binary',
104
127
  detached: true,
128
+ // `ignoreSEIPDv2FeatureFlag` means that the key preferences are
129
+ // ignored. If set to `true`, the encrypted data will be generated
130
+ // the standard non-AEAD algorithm. If set to `false`, the session
131
+ // key will always follow the encryption key preferences.
132
+ config: { ignoreSEIPDv2FeatureFlag: !options.enableAeadWithEncryptionKeys },
105
133
  });
106
134
  return {
107
135
  encryptedData: encryptedData,
108
136
  signature: signature,
109
137
  };
110
138
  }
111
- async encryptAndSignDetachedArmored(data, sessionKey, encryptionKeys, signingKey) {
139
+ async encryptAndSignDetachedArmored(data, sessionKey, encryptionKeys, signingKey, options) {
112
140
  const { message: armoredData, signature: armoredSignature } = await this.cryptoProxy.encryptMessage({
113
141
  binaryData: data,
114
142
  sessionKey,
115
143
  signingKeys: signingKey,
116
144
  encryptionKeys,
117
145
  detached: true,
146
+ // `ignoreSEIPDv2FeatureFlag` means that the key preferences are
147
+ // ignored. If set to `true`, the encrypted data will be generated
148
+ // the standard non-AEAD algorithm. If set to `false`, the session
149
+ // key will always follow the encryption key preferences.
150
+ config: { ignoreSEIPDv2FeatureFlag: !options.enableAeadWithEncryptionKeys },
118
151
  });
119
152
  return {
120
153
  armoredData: armoredData,
@@ -175,6 +208,11 @@ class OpenPGPCryptoWithCryptoProxy {
175
208
  if (!sessionKey) {
176
209
  throw new Error('Could not decrypt session key');
177
210
  }
211
+ // Encrypted OpenPGP v6 session keys used for AEAD do not store algorithm information, so we hardcode it
212
+ if (sessionKey.algorithm === null) {
213
+ sessionKey.algorithm = 'aes256';
214
+ sessionKey.aeadAlgorithm = 'gcm';
215
+ }
178
216
  return sessionKey;
179
217
  }
180
218
  async decryptArmoredSessionKey(armoredData, decryptionKeys) {