@lifeready/core 1.0.2 → 1.0.4

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 (225) hide show
  1. package/README.md +62 -62
  2. package/bundles/lifeready-core.umd.js +15445 -15445
  3. package/bundles/lifeready-core.umd.js.map +1 -1
  4. package/bundles/lifeready-core.umd.min.js.map +1 -1
  5. package/esm2015/lib/_common/ast.js +40 -40
  6. package/esm2015/lib/_common/deferred-promise.js +24 -24
  7. package/esm2015/lib/_common/exceptions.js +157 -157
  8. package/esm2015/lib/_common/queries.gql.js +190 -190
  9. package/esm2015/lib/_common/run-outside-angular.js +79 -79
  10. package/esm2015/lib/_common/types.js +1 -1
  11. package/esm2015/lib/_common/utils.js +44 -44
  12. package/esm2015/lib/api/contact-card.gql.js +79 -79
  13. package/esm2015/lib/api/contact-card.service.js +154 -154
  14. package/esm2015/lib/api/contact-card2.gql.js +60 -60
  15. package/esm2015/lib/api/contact-card2.service.js +103 -103
  16. package/esm2015/lib/api/file.service.js +74 -74
  17. package/esm2015/lib/api/item2.gql.js +110 -110
  18. package/esm2015/lib/api/item2.service.js +311 -311
  19. package/esm2015/lib/api/key-exchange.gql.js +188 -188
  20. package/esm2015/lib/api/key-exchange.service.js +442 -442
  21. package/esm2015/lib/api/key-exchange.types.js +18 -18
  22. package/esm2015/lib/api/key-exchange2.gql.js +171 -171
  23. package/esm2015/lib/api/key-exchange2.service.js +479 -479
  24. package/esm2015/lib/api/lock.gql.js +40 -40
  25. package/esm2015/lib/api/lock.service.js +64 -64
  26. package/esm2015/lib/api/lr-apollo.service.js +46 -46
  27. package/esm2015/lib/api/lr-graphql/index.js +6 -6
  28. package/esm2015/lib/api/lr-graphql/lr-graphql.service.js +155 -155
  29. package/esm2015/lib/api/lr-graphql/lr-merged-mutation.js +213 -213
  30. package/esm2015/lib/api/lr-graphql/lr-mutation-base.js +51 -51
  31. package/esm2015/lib/api/lr-graphql/lr-mutation.js +48 -48
  32. package/esm2015/lib/api/lr-graphql/lr.service.js +18 -18
  33. package/esm2015/lib/api/message.service.js +138 -138
  34. package/esm2015/lib/api/persist.service.js +181 -181
  35. package/esm2015/lib/api/query-processor/common-processors.service.js +93 -93
  36. package/esm2015/lib/api/query-processor/index.js +3 -3
  37. package/esm2015/lib/api/query-processor/query-processor.service.js +192 -192
  38. package/esm2015/lib/api/query-processor/tp-password-reset-processor.service.js +109 -109
  39. package/esm2015/lib/api/shared-contact-card.service.js +119 -119
  40. package/esm2015/lib/api/shared-contact-card2.gql.js +41 -41
  41. package/esm2015/lib/api/shared-contact-card2.service.js +117 -117
  42. package/esm2015/lib/api/time.service.js +146 -146
  43. package/esm2015/lib/api/types/graphql.types.js +7 -7
  44. package/esm2015/lib/api/types/index.js +3 -3
  45. package/esm2015/lib/api/types/lr-graphql.types.js +71 -71
  46. package/esm2015/lib/auth/auth.config.js +57 -57
  47. package/esm2015/lib/auth/auth.gql.js +48 -48
  48. package/esm2015/lib/auth/auth.types.js +27 -27
  49. package/esm2015/lib/auth/idle.service.js +168 -168
  50. package/esm2015/lib/auth/idle.types.js +7 -7
  51. package/esm2015/lib/auth/lbop.service.js +355 -355
  52. package/esm2015/lib/auth/life-ready-auth.service.js +500 -500
  53. package/esm2015/lib/auth/password.service.js +320 -320
  54. package/esm2015/lib/auth/register.service.js +172 -172
  55. package/esm2015/lib/auth/two-factor.service.js +74 -74
  56. package/esm2015/lib/category/category-meta.service.js +99 -99
  57. package/esm2015/lib/category/category.gql.js +406 -406
  58. package/esm2015/lib/category/category.service.js +390 -390
  59. package/esm2015/lib/category/category.types.js +29 -29
  60. package/esm2015/lib/cryptography/cryptography.types.js +11 -11
  61. package/esm2015/lib/cryptography/encryption.service.js +189 -189
  62. package/esm2015/lib/cryptography/key-factory.service.js +237 -237
  63. package/esm2015/lib/cryptography/key-graph.service.js +280 -280
  64. package/esm2015/lib/cryptography/key-meta.service.js +200 -200
  65. package/esm2015/lib/cryptography/key.service.js +124 -124
  66. package/esm2015/lib/cryptography/slip39.service.js +169 -169
  67. package/esm2015/lib/cryptography/web-crypto.service.js +29 -29
  68. package/esm2015/lib/life-ready.config.js +84 -84
  69. package/esm2015/lib/life-ready.module.js +74 -74
  70. package/esm2015/lib/plan/plan.gql.js +123 -123
  71. package/esm2015/lib/plan/plan.service.js +149 -149
  72. package/esm2015/lib/plan/plan.types.js +11 -11
  73. package/esm2015/lib/record/record-attachment.service.js +101 -101
  74. package/esm2015/lib/record/record.gql.js +179 -179
  75. package/esm2015/lib/record/record.service.js +206 -206
  76. package/esm2015/lib/record/record.types.js +15 -15
  77. package/esm2015/lib/record-type/record-type.service.js +75 -75
  78. package/esm2015/lib/record-type/record-type.types.js +28 -28
  79. package/esm2015/lib/scenario/approvals/scenario-approval.gql.js +105 -105
  80. package/esm2015/lib/scenario/approvals/scenario-approval.types.js +1 -1
  81. package/esm2015/lib/scenario/approvals/scenario-approver.service.js +300 -300
  82. package/esm2015/lib/scenario/claimants/scenario-claimant.gql.js +52 -52
  83. package/esm2015/lib/scenario/claimants/scenario-claimant.service.js +97 -97
  84. package/esm2015/lib/scenario/claimants/scenario-claimant.types.js +1 -1
  85. package/esm2015/lib/scenario/receivers/scenario-receiver.gql.js +150 -150
  86. package/esm2015/lib/scenario/receivers/scenario-receiver.service.js +229 -229
  87. package/esm2015/lib/scenario/receivers/scenario-receiver.types.js +1 -1
  88. package/esm2015/lib/scenario/scenario-setup.service.js +269 -269
  89. package/esm2015/lib/scenario/scenario.gql.js +368 -368
  90. package/esm2015/lib/scenario/scenario.service.js +611 -611
  91. package/esm2015/lib/scenario/scenario.types.js +64 -64
  92. package/esm2015/lib/search/search.gql.js +62 -62
  93. package/esm2015/lib/search/search.service.js +156 -156
  94. package/esm2015/lib/search/search.types.js +6 -6
  95. package/esm2015/lib/trusted-parties/tp-password-reset-request.service.js +112 -112
  96. package/esm2015/lib/trusted-parties/tp-password-reset-user.service.js +129 -129
  97. package/esm2015/lib/trusted-parties/tp-password-reset.constants.js +4 -4
  98. package/esm2015/lib/trusted-parties/tp-password-reset.gql.js +232 -232
  99. package/esm2015/lib/trusted-parties/tp-password-reset.service.js +299 -299
  100. package/esm2015/lib/trusted-parties/trusted-party.gql.js +148 -148
  101. package/esm2015/lib/trusted-parties/trusted-party.service.js +326 -326
  102. package/esm2015/lib/trusted-parties/trusted-party.types.js +41 -41
  103. package/esm2015/lib/trusted-parties/trusted-party2.gql.js +87 -87
  104. package/esm2015/lib/trusted-parties/trusted-party2.service.js +215 -215
  105. package/esm2015/lib/users/profile-details.service.js +214 -214
  106. package/esm2015/lib/users/profile.gql.js +97 -97
  107. package/esm2015/lib/users/profile.service.js +169 -169
  108. package/esm2015/lib/users/profile.types.js +34 -34
  109. package/esm2015/lib/users/user.gql.js +60 -60
  110. package/esm2015/lib/users/user.service.js +79 -79
  111. package/esm2015/lib/users/user.types.js +5 -5
  112. package/esm2015/lifeready-core.js +10 -10
  113. package/esm2015/public-api.js +81 -81
  114. package/fesm2015/lifeready-core.js +13088 -13088
  115. package/fesm2015/lifeready-core.js.map +1 -1
  116. package/lib/_common/ast.d.ts +11 -11
  117. package/lib/_common/deferred-promise.d.ts +12 -12
  118. package/lib/_common/exceptions.d.ts +109 -109
  119. package/lib/_common/queries.gql.d.ts +10 -10
  120. package/lib/_common/run-outside-angular.d.ts +14 -14
  121. package/lib/_common/types.d.ts +10 -10
  122. package/lib/_common/utils.d.ts +3 -3
  123. package/lib/api/contact-card.gql.d.ts +7 -7
  124. package/lib/api/contact-card.service.d.ts +52 -52
  125. package/lib/api/contact-card2.gql.d.ts +34 -34
  126. package/lib/api/contact-card2.service.d.ts +49 -49
  127. package/lib/api/file.service.d.ts +18 -18
  128. package/lib/api/item2.gql.d.ts +96 -96
  129. package/lib/api/item2.service.d.ts +177 -177
  130. package/lib/api/key-exchange.gql.d.ts +9 -9
  131. package/lib/api/key-exchange.service.d.ts +39 -39
  132. package/lib/api/key-exchange.types.d.ts +196 -196
  133. package/lib/api/key-exchange2.gql.d.ts +125 -125
  134. package/lib/api/key-exchange2.service.d.ts +187 -187
  135. package/lib/api/lock.gql.d.ts +27 -27
  136. package/lib/api/lock.service.d.ts +25 -25
  137. package/lib/api/lr-apollo.service.d.ts +15 -15
  138. package/lib/api/lr-graphql/index.d.ts +5 -5
  139. package/lib/api/lr-graphql/lr-graphql.service.d.ts +60 -60
  140. package/lib/api/lr-graphql/lr-merged-mutation.d.ts +27 -27
  141. package/lib/api/lr-graphql/lr-mutation-base.d.ts +28 -28
  142. package/lib/api/lr-graphql/lr-mutation.d.ts +8 -8
  143. package/lib/api/lr-graphql/lr.service.d.ts +9 -9
  144. package/lib/api/message.service.d.ts +58 -58
  145. package/lib/api/persist.service.d.ts +31 -31
  146. package/lib/api/query-processor/common-processors.service.d.ts +36 -36
  147. package/lib/api/query-processor/index.d.ts +2 -2
  148. package/lib/api/query-processor/query-processor.service.d.ts +18 -18
  149. package/lib/api/query-processor/tp-password-reset-processor.service.d.ts +15 -15
  150. package/lib/api/shared-contact-card.service.d.ts +33 -33
  151. package/lib/api/shared-contact-card2.gql.d.ts +36 -36
  152. package/lib/api/shared-contact-card2.service.d.ts +45 -45
  153. package/lib/api/time.service.d.ts +16 -16
  154. package/lib/api/types/graphql.types.d.ts +29 -29
  155. package/lib/api/types/index.d.ts +2 -2
  156. package/lib/api/types/lr-graphql.types.d.ts +385 -385
  157. package/lib/auth/auth.config.d.ts +5 -5
  158. package/lib/auth/auth.gql.d.ts +15 -15
  159. package/lib/auth/auth.types.d.ts +66 -66
  160. package/lib/auth/idle.service.d.ts +40 -40
  161. package/lib/auth/idle.types.d.ts +10 -10
  162. package/lib/auth/lbop.service.d.ts +91 -91
  163. package/lib/auth/life-ready-auth.service.d.ts +59 -59
  164. package/lib/auth/password.service.d.ts +78 -78
  165. package/lib/auth/register.service.d.ts +25 -25
  166. package/lib/auth/two-factor.service.d.ts +15 -15
  167. package/lib/category/category-meta.service.d.ts +23 -23
  168. package/lib/category/category.gql.d.ts +45 -45
  169. package/lib/category/category.service.d.ts +67 -67
  170. package/lib/category/category.types.d.ts +79 -79
  171. package/lib/cryptography/cryptography.types.d.ts +83 -83
  172. package/lib/cryptography/encryption.service.d.ts +41 -41
  173. package/lib/cryptography/key-factory.service.d.ts +38 -38
  174. package/lib/cryptography/key-graph.service.d.ts +33 -33
  175. package/lib/cryptography/key-meta.service.d.ts +44 -44
  176. package/lib/cryptography/key.service.d.ts +36 -36
  177. package/lib/cryptography/slip39.service.d.ts +43 -43
  178. package/lib/cryptography/web-crypto.service.d.ts +5 -5
  179. package/lib/life-ready.config.d.ts +14 -14
  180. package/lib/life-ready.module.d.ts +5 -5
  181. package/lib/plan/plan.gql.d.ts +11 -11
  182. package/lib/plan/plan.service.d.ts +33 -33
  183. package/lib/plan/plan.types.d.ts +31 -31
  184. package/lib/record/record-attachment.service.d.ts +16 -16
  185. package/lib/record/record.gql.d.ts +14 -14
  186. package/lib/record/record.service.d.ts +25 -25
  187. package/lib/record/record.types.d.ts +57 -57
  188. package/lib/record-type/record-type.service.d.ts +11 -11
  189. package/lib/record-type/record-type.types.d.ts +50 -50
  190. package/lib/scenario/approvals/scenario-approval.gql.d.ts +7 -7
  191. package/lib/scenario/approvals/scenario-approval.types.d.ts +63 -63
  192. package/lib/scenario/approvals/scenario-approver.service.d.ts +32 -32
  193. package/lib/scenario/claimants/scenario-claimant.gql.d.ts +5 -5
  194. package/lib/scenario/claimants/scenario-claimant.service.d.ts +17 -17
  195. package/lib/scenario/claimants/scenario-claimant.types.d.ts +18 -18
  196. package/lib/scenario/receivers/scenario-receiver.gql.d.ts +8 -8
  197. package/lib/scenario/receivers/scenario-receiver.service.d.ts +30 -30
  198. package/lib/scenario/receivers/scenario-receiver.types.d.ts +54 -54
  199. package/lib/scenario/scenario-setup.service.d.ts +22 -22
  200. package/lib/scenario/scenario.gql.d.ts +34 -34
  201. package/lib/scenario/scenario.service.d.ts +58 -58
  202. package/lib/scenario/scenario.types.d.ts +217 -217
  203. package/lib/search/search.gql.d.ts +1 -1
  204. package/lib/search/search.service.d.ts +25 -25
  205. package/lib/search/search.types.d.ts +20 -20
  206. package/lib/trusted-parties/tp-password-reset-request.service.d.ts +20 -20
  207. package/lib/trusted-parties/tp-password-reset-user.service.d.ts +35 -35
  208. package/lib/trusted-parties/tp-password-reset.constants.d.ts +3 -3
  209. package/lib/trusted-parties/tp-password-reset.gql.d.ts +218 -218
  210. package/lib/trusted-parties/tp-password-reset.service.d.ts +130 -130
  211. package/lib/trusted-parties/trusted-party.gql.d.ts +9 -9
  212. package/lib/trusted-parties/trusted-party.service.d.ts +44 -44
  213. package/lib/trusted-parties/trusted-party.types.d.ts +102 -102
  214. package/lib/trusted-parties/trusted-party2.gql.d.ts +79 -79
  215. package/lib/trusted-parties/trusted-party2.service.d.ts +114 -114
  216. package/lib/users/profile-details.service.d.ts +21 -21
  217. package/lib/users/profile.gql.d.ts +11 -11
  218. package/lib/users/profile.service.d.ts +35 -35
  219. package/lib/users/profile.types.d.ts +96 -96
  220. package/lib/users/user.gql.d.ts +9 -9
  221. package/lib/users/user.service.d.ts +12 -12
  222. package/lib/users/user.types.d.ts +23 -23
  223. package/lifeready-core.d.ts +9 -9
  224. package/package.json +1 -1
  225. package/public-api.d.ts +77 -77
@@ -1,200 +1,200 @@
1
- import { __awaiter } from "tslib";
2
- import { Injectable } from '@angular/core';
3
- import { LrApolloService } from '../api/lr-apollo.service';
4
- import { GetCategoryKeyIdQuery } from '../category/category.gql';
5
- import { EncryptionService, } from './encryption.service';
6
- import { KeyFactoryService } from './key-factory.service';
7
- import { KeyGraphService } from './key-graph.service';
8
- import { KeyService } from './key.service';
9
- import * as i0 from "@angular/core";
10
- import * as i1 from "./encryption.service";
11
- import * as i2 from "./key-graph.service";
12
- import * as i3 from "../api/lr-apollo.service";
13
- import * as i4 from "./key.service";
14
- import * as i5 from "./key-factory.service";
15
- export class WrappedContent {
16
- }
17
- export class WrappingKey {
18
- }
19
- export class KeyMetaService {
20
- constructor(encryptionService, keyGraph, lrApollo, keyService, keyFactory) {
21
- this.encryptionService = encryptionService;
22
- this.keyGraph = keyGraph;
23
- this.lrApollo = lrApollo;
24
- this.keyService = keyService;
25
- this.keyFactory = keyFactory;
26
- }
27
- // async decryptFromString<T>(
28
- // keyOrId: string | Key,
29
- // cipherData: string,
30
- // options?: DecryptOptions
31
- // ): Promise<T> {
32
- // if (cipherData) {
33
- // const key = await this.keyGraphService.getJwkKey(keyOrId);
34
- // return (await this.encryptionService.decrypt(
35
- // key,
36
- // JSON.parse(cipherData),
37
- // options
38
- // )) as any;
39
- // }
40
- // return null;
41
- // }
42
- decryptMeta(metaHaver) {
43
- return __awaiter(this, void 0, void 0, function* () {
44
- if (metaHaver.cipherMeta) {
45
- const key = yield this.keyGraph.getJwkKey(metaHaver.keyId);
46
- return (yield this.encryptionService.decrypt(key, JSON.parse(metaHaver.cipherMeta)));
47
- }
48
- return null;
49
- });
50
- }
51
- // async decryptFile(keyId: string, file: any): Promise<any> {
52
- // const key = await this.keyGraphService.getJwkKey(keyId);
53
- // return (await this.encryptionService.decrypt(key, file, {
54
- // payloadType: 'ArrayBuffer',
55
- // })) as any;
56
- // }
57
- // // TODO rename this to encrypt() and use as the most common usecase
58
- // async encryptToString(
59
- // key: string | Key | JWK.Key,
60
- // content: any
61
- // ): Promise<string> {
62
- // // Empty string should be encrypted since you want to clear the field.
63
- // // Null is not encrypted because it's not valid JSON in the old JSON spec. Use
64
- // // empty string instead. It'll function as a logic false as well.
65
- // // Note that passing in empty string means it'll be encrypted which verifies
66
- // // it's integrity. But we still want to have a way to set the DB field
67
- // // to NULL, so we explicitly return null when content == null. A null
68
- // // variable in graphql mutation on KC server clears the field to NULL.
69
- // if (content == null) {
70
- // return null;
71
- // }
72
- // const jwk =
73
- // asJwk(key) || (await this.keyGraphService.getJwkKey(key as string | Key));
74
- // return JSON.stringify(await this.encryptionService.encrypt(jwk, content));
75
- // }
76
- // // Wraps a symmetric encryption key.
77
- // // Throws exception if wrapping public keys.
78
- // async wrapKey<T>(
79
- // wrappingKey: string | Key | JWK.Key,
80
- // key: JWK.Key
81
- // ): Promise<string> {
82
- // if (!isSymmetricKey(key)) {
83
- // throw new LrBadArgumentException(
84
- // 'Only allowing wrapping of symmetric keys.'
85
- // );
86
- // }
87
- // return this.encryptToString(wrappingKey, key.toJSON(true));
88
- // }
89
- // // TODO
90
- // // async wrapPublicKey<T>();
91
- // // async wrapPrivateKey<T>();
92
- doubleWrapContent(secureContent, categoryIds, fileContent) {
93
- return __awaiter(this, void 0, void 0, function* () {
94
- const key = yield this.keyFactory.createKey();
95
- const wrappedContent = yield this.wrapContent(key.toJSON(true), categoryIds);
96
- return {
97
- rootKey: wrappedContent.rootKey,
98
- wrappedKeys: wrappedContent.wrappedKeys,
99
- doubleWrappedKey: wrappedContent.cipherMeta,
100
- cipherMeta: secureContent
101
- ? JSON.stringify(yield this.encryptionService.encrypt(key, secureContent))
102
- : null,
103
- cipherFileContent: fileContent
104
- ? JSON.stringify(yield this.encryptionService.encrypt(key, fileContent))
105
- : null,
106
- };
107
- });
108
- }
109
- reWrapContent(keyId, secureContent) {
110
- return __awaiter(this, void 0, void 0, function* () {
111
- const key = yield this.keyGraph.getJwkKey(keyId);
112
- const newKey = yield this.keyFactory.createKey();
113
- return {
114
- doubleWrappedKey: JSON.stringify(yield this.encryptionService.encrypt(key, newKey.toJSON(true))),
115
- cipherMeta: secureContent
116
- ? JSON.stringify(yield this.encryptionService.encrypt(newKey, secureContent))
117
- : null,
118
- };
119
- });
120
- }
121
- wrapContent(secureContent, categoryIds) {
122
- return __awaiter(this, void 0, void 0, function* () {
123
- const key = yield this.keyFactory.createKey();
124
- let wrappedKeys;
125
- let rootWrappingKey;
126
- if (categoryIds && categoryIds.length) {
127
- wrappedKeys = yield Promise.all(categoryIds.map((categoryId) => __awaiter(this, void 0, void 0, function* () {
128
- const parentKey = yield this.getCategoryKeyId(categoryId);
129
- const wrappedKey = JSON.stringify(yield this.encryptionService.encrypt(parentKey.key, key.toJSON(true)));
130
- return {
131
- directoryId: categoryId,
132
- wrappingKeyId: parentKey.keyId,
133
- wrappedKey,
134
- };
135
- })));
136
- }
137
- else {
138
- // Adding to root directory
139
- const rootKey = this.keyService.getCurrentRootKey();
140
- const wrappedKey = JSON.stringify(yield this.encryptionService.encrypt(rootKey.jwk, key.toJSON(true)));
141
- rootWrappingKey = {
142
- wrappingKeyId: rootKey.id,
143
- wrappedKey,
144
- };
145
- }
146
- return {
147
- key,
148
- rootKey: rootWrappingKey,
149
- wrappedKeys,
150
- cipherMeta: secureContent
151
- ? JSON.stringify(yield this.encryptionService.encrypt(key, secureContent))
152
- : null,
153
- };
154
- });
155
- }
156
- wrapContentWithKey(secureContent, keyId) {
157
- return __awaiter(this, void 0, void 0, function* () {
158
- const key = yield this.keyFactory.createKey();
159
- const wrappedKey = yield this.keyGraph.encryptToString(keyId, key.toJSON(true));
160
- return {
161
- key,
162
- rootKey: {
163
- wrappingKeyId: keyId,
164
- wrappedKey,
165
- },
166
- cipherMeta: secureContent
167
- ? JSON.stringify(yield this.encryptionService.encrypt(key, secureContent))
168
- : null,
169
- };
170
- });
171
- }
172
- getCategoryKeyId(categoryId) {
173
- return __awaiter(this, void 0, void 0, function* () {
174
- const { category } = yield this.lrApollo.query({
175
- query: GetCategoryKeyIdQuery,
176
- variables: {
177
- id: categoryId,
178
- },
179
- });
180
- return {
181
- keyId: category.keyId,
182
- key: yield this.keyGraph.getJwkKey(category.keyId),
183
- };
184
- });
185
- }
186
- }
187
- KeyMetaService.ɵprov = i0.ɵɵdefineInjectable({ factory: function KeyMetaService_Factory() { return new KeyMetaService(i0.ɵɵinject(i1.EncryptionService), i0.ɵɵinject(i2.KeyGraphService), i0.ɵɵinject(i3.LrApolloService), i0.ɵɵinject(i4.KeyService), i0.ɵɵinject(i5.KeyFactoryService)); }, token: KeyMetaService, providedIn: "root" });
188
- KeyMetaService.decorators = [
189
- { type: Injectable, args: [{
190
- providedIn: 'root',
191
- },] }
192
- ];
193
- KeyMetaService.ctorParameters = () => [
194
- { type: EncryptionService },
195
- { type: KeyGraphService },
196
- { type: LrApolloService },
197
- { type: KeyService },
198
- { type: KeyFactoryService }
199
- ];
200
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5LW1ldGEuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIvb3B0L2F0bGFzc2lhbi9waXBlbGluZXMvYWdlbnQvYnVpbGQvcHJvamVjdHMvY29yZS9zcmMvIiwic291cmNlcyI6WyJsaWIvY3J5cHRvZ3JhcGh5L2tleS1tZXRhLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBR2pFLE9BQU8sRUFHTCxpQkFBaUIsR0FFbEIsTUFBTSxzQkFBc0IsQ0FBQztBQUM5QixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7Ozs7OztBQU8zQyxNQUFNLE9BQU8sY0FBYztDQUsxQjtBQUVELE1BQU0sT0FBTyxXQUFXO0NBSXZCO0FBS0QsTUFBTSxPQUFPLGNBQWM7SUFDekIsWUFDVSxpQkFBb0MsRUFDcEMsUUFBeUIsRUFDekIsUUFBeUIsRUFDekIsVUFBc0IsRUFDdEIsVUFBNkI7UUFKN0Isc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQUNwQyxhQUFRLEdBQVIsUUFBUSxDQUFpQjtRQUN6QixhQUFRLEdBQVIsUUFBUSxDQUFpQjtRQUN6QixlQUFVLEdBQVYsVUFBVSxDQUFZO1FBQ3RCLGVBQVUsR0FBVixVQUFVLENBQW1CO0lBQ3BDLENBQUM7SUFFSiw4QkFBOEI7SUFDOUIsMkJBQTJCO0lBQzNCLHdCQUF3QjtJQUN4Qiw2QkFBNkI7SUFDN0Isa0JBQWtCO0lBQ2xCLHNCQUFzQjtJQUN0QixpRUFBaUU7SUFDakUsb0RBQW9EO0lBQ3BELGFBQWE7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TSxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBTTtnQkFDbEQsS0FBSyxFQUFFLHFCQUFxQjtnQkFDNUIsU0FBUyxFQUFFO29CQUNULEVBQUUsRUFBRSxVQUFVO2lCQUNmO2FBQ0YsQ0FBQyxDQUFDO1lBRUgsT0FBTztnQkFDTCxLQUFLLEVBQUUsUUFBUSxDQUFDLEtBQUs7Z0JBQ3JCLEdBQUcsRUFBRSxNQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7YUFDbkQsQ0FBQztRQUNKLENBQUM7S0FBQTs7OztZQTFORixVQUFVLFNBQUM7Z0JBQ1YsVUFBVSxFQUFFLE1BQU07YUFDbkI7OztZQTNCQyxpQkFBaUI7WUFJVixlQUFlO1lBWGYsZUFBZTtZQVlmLFVBQVU7WUFGVixpQkFBaUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBKV0sgfSBmcm9tICdub2RlLWpvc2UnO1xuaW1wb3J0IHsgTHJBcG9sbG9TZXJ2aWNlIH0gZnJvbSAnLi4vYXBpL2xyLWFwb2xsby5zZXJ2aWNlJztcbmltcG9ydCB7IEdldENhdGVnb3J5S2V5SWRRdWVyeSB9IGZyb20gJy4uL2NhdGVnb3J5L2NhdGVnb3J5LmdxbCc7XG5pbXBvcnQgeyBMckJhZEFyZ3VtZW50RXhjZXB0aW9uIH0gZnJvbSAnLi4vX2NvbW1vbi9leGNlcHRpb25zJztcbmltcG9ydCB7IEtleSwgUGF5bG9hZFR5cGUgfSBmcm9tICcuL2NyeXB0b2dyYXBoeS50eXBlcyc7XG5pbXBvcnQge1xuICBhc0p3ayxcbiAgRGVjcnlwdE9wdGlvbnMsXG4gIEVuY3J5cHRpb25TZXJ2aWNlLFxuICBpc1N5bW1ldHJpY0tleSxcbn0gZnJvbSAnLi9lbmNyeXB0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgS2V5RmFjdG9yeVNlcnZpY2UgfSBmcm9tICcuL2tleS1mYWN0b3J5LnNlcnZpY2UnO1xuaW1wb3J0IHsgS2V5R3JhcGhTZXJ2aWNlIH0gZnJvbSAnLi9rZXktZ3JhcGguc2VydmljZSc7XG5pbXBvcnQgeyBLZXlTZXJ2aWNlIH0gZnJvbSAnLi9rZXkuc2VydmljZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSGFzQ2lwaGVyTWV0YSB7XG4gIGtleUlkOiBzdHJpbmc7XG4gIGNpcGhlck1ldGE6IHN0cmluZztcbn1cblxuZXhwb3J0IGNsYXNzIFdyYXBwZWRDb250ZW50IHtcbiAga2V5OiBKV0suS2V5O1xuICBjaXBoZXJNZXRhOiBzdHJpbmc7XG4gIHdyYXBwZWRLZXlzPzogV3JhcHBpbmdLZXlbXTtcbiAgcm9vdEtleT86IFdyYXBwaW5nS2V5O1xufVxuXG5leHBvcnQgY2xhc3MgV3JhcHBpbmdLZXkge1xuICBkaXJlY3RvcnlJZD86IHN0cmluZztcbiAgd3JhcHBpbmdLZXlJZDogc3RyaW5nO1xuICB3cmFwcGVkS2V5OiBzdHJpbmc7XG59XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBLZXlNZXRhU2VydmljZSB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZW5jcnlwdGlvblNlcnZpY2U6IEVuY3J5cHRpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUga2V5R3JhcGg6IEtleUdyYXBoU2VydmljZSxcbiAgICBwcml2YXRlIGxyQXBvbGxvOiBMckFwb2xsb1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBrZXlTZXJ2aWNlOiBLZXlTZXJ2aWNlLFxuICAgIHByaXZhdGUga2V5RmFjdG9yeTogS2V5RmFjdG9yeVNlcnZpY2VcbiAgKSB7fVxuXG4gIC8vIGFzeW5jIGRlY3J5cHRGcm9tU3RyaW5nPFQ+KFxuICAvLyAgIGtleU9ySWQ6IHN0cmluZyB8IEtleSxcbiAgLy8gICBjaXBoZXJEYXRhOiBzdHJpbmcsXG4gIC8vICAgb3B0aW9ucz86IERlY3J5cHRPcHRpb25zXG4gIC8vICk6IFByb21pc2U8VD4ge1xuICAvLyAgIGlmIChjaXBoZXJEYXRhKSB7XG4gIC8vICAgICBjb25zdCBrZXkgPSBhd2FpdCB0aGlzLmtleUdyYXBoU2VydmljZS5nZXRKd2tLZXkoa2V5T3JJZCk7XG4gIC8vICAgICByZXR1cm4gKGF3YWl0IHRoaXMuZW5jcnlwdGlvblNlcnZpY2UuZGVjcnlwdChcbiAgLy8gICAgICAga2V5LFxuICAvLyAgICAgICBKU09OLnBhcnNlKGNpcGhlckRhdGEpLFxuICAvLyAgICAgICBvcHRpb25zXG4gIC8vICAgICApKSBhcyBhbnk7XG4gIC8vICAgfVxuICAvLyAgIHJldHVybiBudWxsO1xuICAvLyB9XG5cbiAgYXN5bmMgZGVjcnlwdE1ldGE8VD4obWV0YUhhdmVyOiBIYXNDaXBoZXJNZXRhKTogUHJvbWlzZTxUPiB7XG4gICAgaWYgKG1ldGFIYXZlci5jaXBoZXJNZXRhKSB7XG4gICAgICBjb25zdCBrZXkgPSBhd2FpdCB0aGlzLmtleUdyYXBoLmdldEp3a0tleShtZXRhSGF2ZXIua2V5SWQpO1xuICAgICAgcmV0dXJuIChhd2FpdCB0aGlzLmVuY3J5cHRpb25TZXJ2aWNlLmRlY3J5cHQoXG4gICAgICAgIGtleSxcbiAgICAgICAgSlNPTi5wYXJzZShtZXRhSGF2ZXIuY2lwaGVyTWV0YSlcbiAgICAgICkpIGFzIGFueTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvLyBhc3luYyBkZWNyeXB0RmlsZShrZXlJZDogc3RyaW5nLCBmaWxlOiBhbnkpOiBQcm9taXNlPGFueT4ge1xuICAvLyAgIGNvbnN0IGtleSA9IGF3YWl0IHRoaXMua2V5R3JhcGhTZXJ2aWNlLmdldEp3a0tleShrZXlJZCk7XG4gIC8vICAgcmV0dXJuIChhd2FpdCB0aGlzLmVuY3J5cHRpb25TZXJ2aWNlLmRlY3J5cHQoa2V5LCBmaWxlLCB7XG4gIC8vICAgICBwYXlsb2FkVHlwZTogJ0FycmF5QnVmZmVyJyxcbiAgLy8gICB9KSkgYXMgYW55O1xuICAvLyB9XG5cbiAgLy8gLy8gVE9ETyByZW5hbWUgdGhpcyB0byBlbmNyeXB0KCkgYW5kIHVzZSBhcyB0aGUgbW9zdCBjb21tb24gdXNlY2FzZVxuICAvLyBhc3luYyBlbmNyeXB0VG9TdHJpbmcoXG4gIC8vICAga2V5OiBzdHJpbmcgfCBLZXkgfCBKV0suS2V5LFxuICAvLyAgIGNvbnRlbnQ6IGFueVxuICAvLyApOiBQcm9taXNlPHN0cmluZz4ge1xuICAvLyAgIC8vIEVtcHR5IHN0cmluZyBzaG91bGQgYmUgZW5jcnlwdGVkIHNpbmNlIHlvdSB3YW50IHRvIGNsZWFyIHRoZSBmaWVsZC5cbiAgLy8gICAvLyBOdWxsIGlzIG5vdCBlbmNyeXB0ZWQgYmVjYXVzZSBpdCdzIG5vdCB2YWxpZCBKU09OIGluIHRoZSBvbGQgSlNPTiBzcGVjLiBVc2VcbiAgLy8gICAvLyBlbXB0eSBzdHJpbmcgaW5zdGVhZC4gSXQnbGwgZnVuY3Rpb24gYXMgYSBsb2dpYyBmYWxzZSBhcyB3ZWxsLlxuICAvLyAgIC8vIE5vdGUgdGhhdCBwYXNzaW5nIGluIGVtcHR5IHN0cmluZyBtZWFucyBpdCdsbCBiZSBlbmNyeXB0ZWQgd2hpY2ggdmVyaWZpZXNcbiAgLy8gICAvLyBpdCdzIGludGVncml0eS4gQnV0IHdlIHN0aWxsIHdhbnQgdG8gaGF2ZSBhIHdheSB0byBzZXQgdGhlIERCIGZpZWxkXG4gIC8vICAgLy8gdG8gTlVMTCwgc28gd2UgZXhwbGljaXRseSByZXR1cm4gbnVsbCB3aGVuIGNvbnRlbnQgPT0gbnVsbC4gQSBudWxsXG4gIC8vICAgLy8gdmFyaWFibGUgaW4gZ3JhcGhxbCBtdXRhdGlvbiBvbiBLQyBzZXJ2ZXIgY2xlYXJzIHRoZSBmaWVsZCB0byBOVUxMLlxuICAvLyAgIGlmIChjb250ZW50ID09IG51bGwpIHtcbiAgLy8gICAgIHJldHVybiBudWxsO1xuICAvLyAgIH1cblxuICAvLyAgIGNvbnN0IGp3ayA9XG4gIC8vICAgICBhc0p3ayhrZXkpIHx8IChhd2FpdCB0aGlzLmtleUdyYXBoU2VydmljZS5nZXRKd2tLZXkoa2V5IGFzIHN0cmluZyB8IEtleSkpO1xuICAvLyAgIHJldHVybiBKU09OLnN0cmluZ2lmeShhd2FpdCB0aGlzLmVuY3J5cHRpb25TZXJ2aWNlLmVuY3J5cHQoandrLCBjb250ZW50KSk7XG4gIC8vIH1cblxuICAvLyAvLyBXcmFwcyBhIHN5bW1ldHJpYyBlbmNyeXB0aW9uIGtleS5cbiAgLy8gLy8gVGhyb3dzIGV4Y2VwdGlvbiBpZiB3cmFwcGluZyBwdWJsaWMga2V5cy5cbiAgLy8gYXN5bmMgd3JhcEtleTxUPihcbiAgLy8gICB3cmFwcGluZ0tleTogc3RyaW5nIHwgS2V5IHwgSldLLktleSxcbiAgLy8gICBrZXk6IEpXSy5LZXlcbiAgLy8gKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgLy8gICBpZiAoIWlzU3ltbWV0cmljS2V5KGtleSkpIHtcbiAgLy8gICAgIHRocm93IG5ldyBMckJhZEFyZ3VtZW50RXhjZXB0aW9uKFxuICAvLyAgICAgICAnT25seSBhbGxvd2luZyB3cmFwcGluZyBvZiBzeW1tZXRyaWMga2V5cy4nXG4gIC8vICAgICApO1xuICAvLyAgIH1cblxuICAvLyAgIHJldHVybiB0aGlzLmVuY3J5cHRUb1N0cmluZyh3cmFwcGluZ0tleSwga2V5LnRvSlNPTih0cnVlKSk7XG4gIC8vIH1cblxuICAvLyAvLyBUT0RPXG4gIC8vIC8vIGFzeW5jIHdyYXBQdWJsaWNLZXk8VD4oKTtcbiAgLy8gLy8gYXN5bmMgd3JhcFByaXZhdGVLZXk8VD4oKTtcblxuICBhc3luYyBkb3VibGVXcmFwQ29udGVudChcbiAgICBzZWN1cmVDb250ZW50OiBhbnksXG4gICAgY2F0ZWdvcnlJZHM6IHN0cmluZ1tdLFxuICAgIGZpbGVDb250ZW50PzogQXJyYXlCdWZmZXJcbiAgKSB7XG4gICAgY29uc3Qga2V5ID0gYXdhaXQgdGhpcy5rZXlGYWN0b3J5LmNyZWF0ZUtleSgpO1xuXG4gICAgY29uc3Qgd3JhcHBlZENvbnRlbnQgPSBhd2FpdCB0aGlzLndyYXBDb250ZW50KFxuICAgICAga2V5LnRvSlNPTih0cnVlKSxcbiAgICAgIGNhdGVnb3J5SWRzXG4gICAgKTtcblxuICAgIHJldHVybiB7XG4gICAgICByb290S2V5OiB3cmFwcGVkQ29udGVudC5yb290S2V5LFxuICAgICAgd3JhcHBlZEtleXM6IHdyYXBwZWRDb250ZW50LndyYXBwZWRLZXlzLFxuICAgICAgZG91YmxlV3JhcHBlZEtleTogd3JhcHBlZENvbnRlbnQuY2lwaGVyTWV0YSxcbiAgICAgIGNpcGhlck1ldGE6IHNlY3VyZUNvbnRlbnRcbiAgICAgICAgPyBKU09OLnN0cmluZ2lmeShcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuZW5jcnlwdGlvblNlcnZpY2UuZW5jcnlwdChrZXksIHNlY3VyZUNvbnRlbnQpXG4gICAgICAgICAgKVxuICAgICAgICA6IG51bGwsXG4gICAgICBjaXBoZXJGaWxlQ29udGVudDogZmlsZUNvbnRlbnRcbiAgICAgICAgPyBKU09OLnN0cmluZ2lmeShhd2FpdCB0aGlzLmVuY3J5cHRpb25TZXJ2aWNlLmVuY3J5cHQoa2V5LCBmaWxlQ29udGVudCkpXG4gICAgICAgIDogbnVsbCxcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgcmVXcmFwQ29udGVudChrZXlJZDogc3RyaW5nLCBzZWN1cmVDb250ZW50OiBhbnkpIHtcbiAgICBjb25zdCBrZXkgPSBhd2FpdCB0aGlzLmtleUdyYXBoLmdldEp3a0tleShrZXlJZCk7XG4gICAgY29uc3QgbmV3S2V5ID0gYXdhaXQgdGhpcy5rZXlGYWN0b3J5LmNyZWF0ZUtleSgpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGRvdWJsZVdyYXBwZWRLZXk6IEpTT04uc3RyaW5naWZ5KFxuICAgICAgICBhd2FpdCB0aGlzLmVuY3J5cHRpb25TZXJ2aWNlLmVuY3J5cHQoa2V5LCBuZXdLZXkudG9KU09OKHRydWUpKVxuICAgICAgKSxcbiAgICAgIGNpcGhlck1ldGE6IHNlY3VyZUNvbnRlbnRcbiAgICAgICAgPyBKU09OLnN0cmluZ2lmeShcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuZW5jcnlwdGlvblNlcnZpY2UuZW5jcnlwdChuZXdLZXksIHNlY3VyZUNvbnRlbnQpXG4gICAgICAgICAgKVxuICAgICAgICA6IG51bGwsXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIHdyYXBDb250ZW50KFxuICAgIHNlY3VyZUNvbnRlbnQ6IGFueSxcbiAgICBjYXRlZ29yeUlkcz86IHN0cmluZ1tdXG4gICk6IFByb21pc2U8V3JhcHBlZENvbnRlbnQ+IHtcbiAgICBjb25zdCBrZXkgPSBhd2FpdCB0aGlzLmtleUZhY3RvcnkuY3JlYXRlS2V5KCk7XG5cbiAgICBsZXQgd3JhcHBlZEtleXM6IFdyYXBwaW5nS2V5W107XG4gICAgbGV0IHJvb3RXcmFwcGluZ0tleTogV3JhcHBpbmdLZXk7XG5cbiAgICBpZiAoY2F0ZWdvcnlJZHMgJiYgY2F0ZWdvcnlJZHMubGVuZ3RoKSB7XG4gICAgICB3cmFwcGVkS2V5cyA9IGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICBjYXRlZ29yeUlkcy5tYXAoYXN5bmMgKGNhdGVnb3J5SWQpID0+IHtcbiAgICAgICAgICBjb25zdCBwYXJlbnRLZXkgPSBhd2FpdCB0aGlzLmdldENhdGVnb3J5S2V5SWQoY2F0ZWdvcnlJZCk7XG4gICAgICAgICAgY29uc3Qgd3JhcHBlZEtleSA9IEpTT04uc3RyaW5naWZ5KFxuICAgICAgICAgICAgYXdhaXQgdGhpcy5lbmNyeXB0aW9uU2VydmljZS5lbmNyeXB0KFxuICAgICAgICAgICAgICBwYXJlbnRLZXkua2V5LFxuICAgICAgICAgICAgICBrZXkudG9KU09OKHRydWUpXG4gICAgICAgICAgICApXG4gICAgICAgICAgKTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZGlyZWN0b3J5SWQ6IGNhdGVnb3J5SWQsXG4gICAgICAgICAgICB3cmFwcGluZ0tleUlkOiBwYXJlbnRLZXkua2V5SWQsXG4gICAgICAgICAgICB3cmFwcGVkS2V5LFxuICAgICAgICAgIH07XG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBBZGRpbmcgdG8gcm9vdCBkaXJlY3RvcnlcbiAgICAgIGNvbnN0IHJvb3RLZXkgPSB0aGlzLmtleVNlcnZpY2UuZ2V0Q3VycmVudFJvb3RLZXkoKTtcbiAgICAgIGNvbnN0IHdyYXBwZWRLZXkgPSBKU09OLnN0cmluZ2lmeShcbiAgICAgICAgYXdhaXQgdGhpcy5lbmNyeXB0aW9uU2VydmljZS5lbmNyeXB0KHJvb3RLZXkuandrLCBrZXkudG9KU09OKHRydWUpKVxuICAgICAgKTtcbiAgICAgIHJvb3RXcmFwcGluZ0tleSA9IHtcbiAgICAgICAgd3JhcHBpbmdLZXlJZDogcm9vdEtleS5pZCxcbiAgICAgICAgd3JhcHBlZEtleSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGtleSxcbiAgICAgIHJvb3RLZXk6IHJvb3RXcmFwcGluZ0tleSxcbiAgICAgIHdyYXBwZWRLZXlzLFxuICAgICAgY2lwaGVyTWV0YTogc2VjdXJlQ29udGVudFxuICAgICAgICA/IEpTT04uc3RyaW5naWZ5KFxuICAgICAgICAgICAgYXdhaXQgdGhpcy5lbmNyeXB0aW9uU2VydmljZS5lbmNyeXB0KGtleSwgc2VjdXJlQ29udGVudClcbiAgICAgICAgICApXG4gICAgICAgIDogbnVsbCxcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgd3JhcENvbnRlbnRXaXRoS2V5KFxuICAgIHNlY3VyZUNvbnRlbnQ6IGFueSxcbiAgICBrZXlJZDogc3RyaW5nXG4gICk6IFByb21pc2U8V3JhcHBlZENvbnRlbnQ+IHtcbiAgICBjb25zdCBrZXkgPSBhd2FpdCB0aGlzLmtleUZhY3RvcnkuY3JlYXRlS2V5KCk7XG5cbiAgICBjb25zdCB3cmFwcGVkS2V5ID0gYXdhaXQgdGhpcy5rZXlHcmFwaC5lbmNyeXB0VG9TdHJpbmcoXG4gICAgICBrZXlJZCxcbiAgICAgIGtleS50b0pTT04odHJ1ZSlcbiAgICApO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGtleSxcbiAgICAgIHJvb3RLZXk6IHtcbiAgICAgICAgd3JhcHBpbmdLZXlJZDoga2V5SWQsXG4gICAgICAgIHdyYXBwZWRLZXksXG4gICAgICB9LFxuICAgICAgY2lwaGVyTWV0YTogc2VjdXJlQ29udGVudFxuICAgICAgICA/IEpTT04uc3RyaW5naWZ5KFxuICAgICAgICAgICAgYXdhaXQgdGhpcy5lbmNyeXB0aW9uU2VydmljZS5lbmNyeXB0KGtleSwgc2VjdXJlQ29udGVudClcbiAgICAgICAgICApXG4gICAgICAgIDogbnVsbCxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBnZXRDYXRlZ29yeUtleUlkKFxuICAgIGNhdGVnb3J5SWQ6IHN0cmluZ1xuICApOiBQcm9taXNlPHsga2V5SWQ6IHN0cmluZzsga2V5OiBhbnkgfT4ge1xuICAgIGNvbnN0IHsgY2F0ZWdvcnkgfSA9IGF3YWl0IHRoaXMubHJBcG9sbG8ucXVlcnk8YW55Pih7XG4gICAgICBxdWVyeTogR2V0Q2F0ZWdvcnlLZXlJZFF1ZXJ5LFxuICAgICAgdmFyaWFibGVzOiB7XG4gICAgICAgIGlkOiBjYXRlZ29yeUlkLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiB7XG4gICAgICBrZXlJZDogY2F0ZWdvcnkua2V5SWQsXG4gICAgICBrZXk6IGF3YWl0IHRoaXMua2V5R3JhcGguZ2V0SndrS2V5KGNhdGVnb3J5LmtleUlkKSxcbiAgICB9O1xuICB9XG59XG4iXX0=
1
+ import { __awaiter } from "tslib";
2
+ import { Injectable } from '@angular/core';
3
+ import { LrApolloService } from '../api/lr-apollo.service';
4
+ import { GetCategoryKeyIdQuery } from '../category/category.gql';
5
+ import { EncryptionService, } from './encryption.service';
6
+ import { KeyFactoryService } from './key-factory.service';
7
+ import { KeyGraphService } from './key-graph.service';
8
+ import { KeyService } from './key.service';
9
+ import * as i0 from "@angular/core";
10
+ import * as i1 from "./encryption.service";
11
+ import * as i2 from "./key-graph.service";
12
+ import * as i3 from "../api/lr-apollo.service";
13
+ import * as i4 from "./key.service";
14
+ import * as i5 from "./key-factory.service";
15
+ export class WrappedContent {
16
+ }
17
+ export class WrappingKey {
18
+ }
19
+ export class KeyMetaService {
20
+ constructor(encryptionService, keyGraph, lrApollo, keyService, keyFactory) {
21
+ this.encryptionService = encryptionService;
22
+ this.keyGraph = keyGraph;
23
+ this.lrApollo = lrApollo;
24
+ this.keyService = keyService;
25
+ this.keyFactory = keyFactory;
26
+ }
27
+ // async decryptFromString<T>(
28
+ // keyOrId: string | Key,
29
+ // cipherData: string,
30
+ // options?: DecryptOptions
31
+ // ): Promise<T> {
32
+ // if (cipherData) {
33
+ // const key = await this.keyGraphService.getJwkKey(keyOrId);
34
+ // return (await this.encryptionService.decrypt(
35
+ // key,
36
+ // JSON.parse(cipherData),
37
+ // options
38
+ // )) as any;
39
+ // }
40
+ // return null;
41
+ // }
42
+ decryptMeta(metaHaver) {
43
+ return __awaiter(this, void 0, void 0, function* () {
44
+ if (metaHaver.cipherMeta) {
45
+ const key = yield this.keyGraph.getJwkKey(metaHaver.keyId);
46
+ return (yield this.encryptionService.decrypt(key, JSON.parse(metaHaver.cipherMeta)));
47
+ }
48
+ return null;
49
+ });
50
+ }
51
+ // async decryptFile(keyId: string, file: any): Promise<any> {
52
+ // const key = await this.keyGraphService.getJwkKey(keyId);
53
+ // return (await this.encryptionService.decrypt(key, file, {
54
+ // payloadType: 'ArrayBuffer',
55
+ // })) as any;
56
+ // }
57
+ // // TODO rename this to encrypt() and use as the most common usecase
58
+ // async encryptToString(
59
+ // key: string | Key | JWK.Key,
60
+ // content: any
61
+ // ): Promise<string> {
62
+ // // Empty string should be encrypted since you want to clear the field.
63
+ // // Null is not encrypted because it's not valid JSON in the old JSON spec. Use
64
+ // // empty string instead. It'll function as a logic false as well.
65
+ // // Note that passing in empty string means it'll be encrypted which verifies
66
+ // // it's integrity. But we still want to have a way to set the DB field
67
+ // // to NULL, so we explicitly return null when content == null. A null
68
+ // // variable in graphql mutation on KC server clears the field to NULL.
69
+ // if (content == null) {
70
+ // return null;
71
+ // }
72
+ // const jwk =
73
+ // asJwk(key) || (await this.keyGraphService.getJwkKey(key as string | Key));
74
+ // return JSON.stringify(await this.encryptionService.encrypt(jwk, content));
75
+ // }
76
+ // // Wraps a symmetric encryption key.
77
+ // // Throws exception if wrapping public keys.
78
+ // async wrapKey<T>(
79
+ // wrappingKey: string | Key | JWK.Key,
80
+ // key: JWK.Key
81
+ // ): Promise<string> {
82
+ // if (!isSymmetricKey(key)) {
83
+ // throw new LrBadArgumentException(
84
+ // 'Only allowing wrapping of symmetric keys.'
85
+ // );
86
+ // }
87
+ // return this.encryptToString(wrappingKey, key.toJSON(true));
88
+ // }
89
+ // // TODO
90
+ // // async wrapPublicKey<T>();
91
+ // // async wrapPrivateKey<T>();
92
+ doubleWrapContent(secureContent, categoryIds, fileContent) {
93
+ return __awaiter(this, void 0, void 0, function* () {
94
+ const key = yield this.keyFactory.createKey();
95
+ const wrappedContent = yield this.wrapContent(key.toJSON(true), categoryIds);
96
+ return {
97
+ rootKey: wrappedContent.rootKey,
98
+ wrappedKeys: wrappedContent.wrappedKeys,
99
+ doubleWrappedKey: wrappedContent.cipherMeta,
100
+ cipherMeta: secureContent
101
+ ? JSON.stringify(yield this.encryptionService.encrypt(key, secureContent))
102
+ : null,
103
+ cipherFileContent: fileContent
104
+ ? JSON.stringify(yield this.encryptionService.encrypt(key, fileContent))
105
+ : null,
106
+ };
107
+ });
108
+ }
109
+ reWrapContent(keyId, secureContent) {
110
+ return __awaiter(this, void 0, void 0, function* () {
111
+ const key = yield this.keyGraph.getJwkKey(keyId);
112
+ const newKey = yield this.keyFactory.createKey();
113
+ return {
114
+ doubleWrappedKey: JSON.stringify(yield this.encryptionService.encrypt(key, newKey.toJSON(true))),
115
+ cipherMeta: secureContent
116
+ ? JSON.stringify(yield this.encryptionService.encrypt(newKey, secureContent))
117
+ : null,
118
+ };
119
+ });
120
+ }
121
+ wrapContent(secureContent, categoryIds) {
122
+ return __awaiter(this, void 0, void 0, function* () {
123
+ const key = yield this.keyFactory.createKey();
124
+ let wrappedKeys;
125
+ let rootWrappingKey;
126
+ if (categoryIds && categoryIds.length) {
127
+ wrappedKeys = yield Promise.all(categoryIds.map((categoryId) => __awaiter(this, void 0, void 0, function* () {
128
+ const parentKey = yield this.getCategoryKeyId(categoryId);
129
+ const wrappedKey = JSON.stringify(yield this.encryptionService.encrypt(parentKey.key, key.toJSON(true)));
130
+ return {
131
+ directoryId: categoryId,
132
+ wrappingKeyId: parentKey.keyId,
133
+ wrappedKey,
134
+ };
135
+ })));
136
+ }
137
+ else {
138
+ // Adding to root directory
139
+ const rootKey = this.keyService.getCurrentRootKey();
140
+ const wrappedKey = JSON.stringify(yield this.encryptionService.encrypt(rootKey.jwk, key.toJSON(true)));
141
+ rootWrappingKey = {
142
+ wrappingKeyId: rootKey.id,
143
+ wrappedKey,
144
+ };
145
+ }
146
+ return {
147
+ key,
148
+ rootKey: rootWrappingKey,
149
+ wrappedKeys,
150
+ cipherMeta: secureContent
151
+ ? JSON.stringify(yield this.encryptionService.encrypt(key, secureContent))
152
+ : null,
153
+ };
154
+ });
155
+ }
156
+ wrapContentWithKey(secureContent, keyId) {
157
+ return __awaiter(this, void 0, void 0, function* () {
158
+ const key = yield this.keyFactory.createKey();
159
+ const wrappedKey = yield this.keyGraph.encryptToString(keyId, key.toJSON(true));
160
+ return {
161
+ key,
162
+ rootKey: {
163
+ wrappingKeyId: keyId,
164
+ wrappedKey,
165
+ },
166
+ cipherMeta: secureContent
167
+ ? JSON.stringify(yield this.encryptionService.encrypt(key, secureContent))
168
+ : null,
169
+ };
170
+ });
171
+ }
172
+ getCategoryKeyId(categoryId) {
173
+ return __awaiter(this, void 0, void 0, function* () {
174
+ const { category } = yield this.lrApollo.query({
175
+ query: GetCategoryKeyIdQuery,
176
+ variables: {
177
+ id: categoryId,
178
+ },
179
+ });
180
+ return {
181
+ keyId: category.keyId,
182
+ key: yield this.keyGraph.getJwkKey(category.keyId),
183
+ };
184
+ });
185
+ }
186
+ }
187
+ KeyMetaService.ɵprov = i0.ɵɵdefineInjectable({ factory: function KeyMetaService_Factory() { return new KeyMetaService(i0.ɵɵinject(i1.EncryptionService), i0.ɵɵinject(i2.KeyGraphService), i0.ɵɵinject(i3.LrApolloService), i0.ɵɵinject(i4.KeyService), i0.ɵɵinject(i5.KeyFactoryService)); }, token: KeyMetaService, providedIn: "root" });
188
+ KeyMetaService.decorators = [
189
+ { type: Injectable, args: [{
190
+ providedIn: 'root',
191
+ },] }
192
+ ];
193
+ KeyMetaService.ctorParameters = () => [
194
+ { type: EncryptionService },
195
+ { type: KeyGraphService },
196
+ { type: LrApolloService },
197
+ { type: KeyService },
198
+ { type: KeyFactoryService }
199
+ ];
200
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5LW1ldGEuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJDOi9Qcm9qZWN0cy9uZXdyZXBvL2tjLWNsaWVudC9wcm9qZWN0cy9jb3JlL3NyYy8iLCJzb3VyY2VzIjpbImxpYi9jcnlwdG9ncmFwaHkva2V5LW1ldGEuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFHakUsT0FBTyxFQUdMLGlCQUFpQixHQUVsQixNQUFNLHNCQUFzQixDQUFDO0FBQzlCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzFELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7Ozs7O0FBTzNDLE1BQU0sT0FBTyxjQUFjO0NBSzFCO0FBRUQsTUFBTSxPQUFPLFdBQVc7Q0FJdkI7QUFLRCxNQUFNLE9BQU8sY0FBYztJQUN6QixZQUNVLGlCQUFvQyxFQUNwQyxRQUF5QixFQUN6QixRQUF5QixFQUN6QixVQUFzQixFQUN0QixVQUE2QjtRQUo3QixzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBQ3BDLGFBQVEsR0FBUixRQUFRLENBQWlCO1FBQ3pCLGFBQVEsR0FBUixRQUFRLENBQWlCO1FBQ3pCLGVBQVUsR0FBVixVQUFVLENBQVk7UUFDdEIsZUFBVSxHQUFWLFVBQVUsQ0FBbUI7SUFDcEMsQ0FBQztJQUVKLDhCQUE4QjtJQUM5QiwyQkFBMkI7SUFDM0Isd0JBQXdCO0lBQ3hCLDZCQUE2QjtJQUM3QixrQkFBa0I7SUFDbEIsc0JBQXNCO0lBQ3RCLGlFQUFpRTtJQUNqRSxvREFBb0Q7SUFDcEQsYUFBYTtJQUNiLGdD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Q0FBQyxRQUFRLENBQUMsS0FBSyxDQUFNO2dCQUNsRCxLQUFLLEVBQUUscUJBQXFCO2dCQUM1QixTQUFTLEVBQUU7b0JBQ1QsRUFBRSxFQUFFLFVBQVU7aUJBQ2Y7YUFDRixDQUFDLENBQUM7WUFFSCxPQUFPO2dCQUNMLEtBQUssRUFBRSxRQUFRLENBQUMsS0FBSztnQkFDckIsR0FBRyxFQUFFLE1BQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQzthQUNuRCxDQUFDO1FBQ0osQ0FBQztLQUFBOzs7O1lBMU5GLFVBQVUsU0FBQztnQkFDVixVQUFVLEVBQUUsTUFBTTthQUNuQjs7O1lBM0JDLGlCQUFpQjtZQUlWLGVBQWU7WUFYZixlQUFlO1lBWWYsVUFBVTtZQUZWLGlCQUFpQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgSldLIH0gZnJvbSAnbm9kZS1qb3NlJztcclxuaW1wb3J0IHsgTHJBcG9sbG9TZXJ2aWNlIH0gZnJvbSAnLi4vYXBpL2xyLWFwb2xsby5zZXJ2aWNlJztcclxuaW1wb3J0IHsgR2V0Q2F0ZWdvcnlLZXlJZFF1ZXJ5IH0gZnJvbSAnLi4vY2F0ZWdvcnkvY2F0ZWdvcnkuZ3FsJztcclxuaW1wb3J0IHsgTHJCYWRBcmd1bWVudEV4Y2VwdGlvbiB9IGZyb20gJy4uL19jb21tb24vZXhjZXB0aW9ucyc7XHJcbmltcG9ydCB7IEtleSwgUGF5bG9hZFR5cGUgfSBmcm9tICcuL2NyeXB0b2dyYXBoeS50eXBlcyc7XHJcbmltcG9ydCB7XHJcbiAgYXNKd2ssXHJcbiAgRGVjcnlwdE9wdGlvbnMsXHJcbiAgRW5jcnlwdGlvblNlcnZpY2UsXHJcbiAgaXNTeW1tZXRyaWNLZXksXHJcbn0gZnJvbSAnLi9lbmNyeXB0aW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBLZXlGYWN0b3J5U2VydmljZSB9IGZyb20gJy4va2V5LWZhY3Rvcnkuc2VydmljZSc7XHJcbmltcG9ydCB7IEtleUdyYXBoU2VydmljZSB9IGZyb20gJy4va2V5LWdyYXBoLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBLZXlTZXJ2aWNlIH0gZnJvbSAnLi9rZXkuc2VydmljZSc7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEhhc0NpcGhlck1ldGEge1xyXG4gIGtleUlkOiBzdHJpbmc7XHJcbiAgY2lwaGVyTWV0YTogc3RyaW5nO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgV3JhcHBlZENvbnRlbnQge1xyXG4gIGtleTogSldLLktleTtcclxuICBjaXBoZXJNZXRhOiBzdHJpbmc7XHJcbiAgd3JhcHBlZEtleXM/OiBXcmFwcGluZ0tleVtdO1xyXG4gIHJvb3RLZXk/OiBXcmFwcGluZ0tleTtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFdyYXBwaW5nS2V5IHtcclxuICBkaXJlY3RvcnlJZD86IHN0cmluZztcclxuICB3cmFwcGluZ0tleUlkOiBzdHJpbmc7XHJcbiAgd3JhcHBlZEtleTogc3RyaW5nO1xyXG59XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgS2V5TWV0YVNlcnZpY2Uge1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBlbmNyeXB0aW9uU2VydmljZTogRW5jcnlwdGlvblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGtleUdyYXBoOiBLZXlHcmFwaFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGxyQXBvbGxvOiBMckFwb2xsb1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIGtleVNlcnZpY2U6IEtleVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGtleUZhY3Rvcnk6IEtleUZhY3RvcnlTZXJ2aWNlXHJcbiAgKSB7fVxyXG5cclxuICAvLyBhc3luYyBkZWNyeXB0RnJvbVN0cmluZzxUPihcclxuICAvLyAgIGtleU9ySWQ6IHN0cmluZyB8IEtleSxcclxuICAvLyAgIGNpcGhlckRhdGE6IHN0cmluZyxcclxuICAvLyAgIG9wdGlvbnM/OiBEZWNyeXB0T3B0aW9uc1xyXG4gIC8vICk6IFByb21pc2U8VD4ge1xyXG4gIC8vICAgaWYgKGNpcGhlckRhdGEpIHtcclxuICAvLyAgICAgY29uc3Qga2V5ID0gYXdhaXQgdGhpcy5rZXlHcmFwaFNlcnZpY2UuZ2V0SndrS2V5KGtleU9ySWQpO1xyXG4gIC8vICAgICByZXR1cm4gKGF3YWl0IHRoaXMuZW5jcnlwdGlvblNlcnZpY2UuZGVjcnlwdChcclxuICAvLyAgICAgICBrZXksXHJcbiAgLy8gICAgICAgSlNPTi5wYXJzZShjaXBoZXJEYXRhKSxcclxuICAvLyAgICAgICBvcHRpb25zXHJcbiAgLy8gICAgICkpIGFzIGFueTtcclxuICAvLyAgIH1cclxuICAvLyAgIHJldHVybiBudWxsO1xyXG4gIC8vIH1cclxuXHJcbiAgYXN5bmMgZGVjcnlwdE1ldGE8VD4obWV0YUhhdmVyOiBIYXNDaXBoZXJNZXRhKTogUHJvbWlzZTxUPiB7XHJcbiAgICBpZiAobWV0YUhhdmVyLmNpcGhlck1ldGEpIHtcclxuICAgICAgY29uc3Qga2V5ID0gYXdhaXQgdGhpcy5rZXlHcmFwaC5nZXRKd2tLZXkobWV0YUhhdmVyLmtleUlkKTtcclxuICAgICAgcmV0dXJuIChhd2FpdCB0aGlzLmVuY3J5cHRpb25TZXJ2aWNlLmRlY3J5cHQoXHJcbiAgICAgICAga2V5LFxyXG4gICAgICAgIEpTT04ucGFyc2UobWV0YUhhdmVyLmNpcGhlck1ldGEpXHJcbiAgICAgICkpIGFzIGFueTtcclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgLy8gYXN5bmMgZGVjcnlwdEZpbGUoa2V5SWQ6IHN0cmluZywgZmlsZTogYW55KTogUHJvbWlzZTxhbnk+IHtcclxuICAvLyAgIGNvbnN0IGtleSA9IGF3YWl0IHRoaXMua2V5R3JhcGhTZXJ2aWNlLmdldEp3a0tleShrZXlJZCk7XHJcbiAgLy8gICByZXR1cm4gKGF3YWl0IHRoaXMuZW5jcnlwdGlvblNlcnZpY2UuZGVjcnlwdChrZXksIGZpbGUsIHtcclxuICAvLyAgICAgcGF5bG9hZFR5cGU6ICdBcnJheUJ1ZmZlcicsXHJcbiAgLy8gICB9KSkgYXMgYW55O1xyXG4gIC8vIH1cclxuXHJcbiAgLy8gLy8gVE9ETyByZW5hbWUgdGhpcyB0byBlbmNyeXB0KCkgYW5kIHVzZSBhcyB0aGUgbW9zdCBjb21tb24gdXNlY2FzZVxyXG4gIC8vIGFzeW5jIGVuY3J5cHRUb1N0cmluZyhcclxuICAvLyAgIGtleTogc3RyaW5nIHwgS2V5IHwgSldLLktleSxcclxuICAvLyAgIGNvbnRlbnQ6IGFueVxyXG4gIC8vICk6IFByb21pc2U8c3RyaW5nPiB7XHJcbiAgLy8gICAvLyBFbXB0eSBzdHJpbmcgc2hvdWxkIGJlIGVuY3J5cHRlZCBzaW5jZSB5b3Ugd2FudCB0byBjbGVhciB0aGUgZmllbGQuXHJcbiAgLy8gICAvLyBOdWxsIGlzIG5vdCBlbmNyeXB0ZWQgYmVjYXVzZSBpdCdzIG5vdCB2YWxpZCBKU09OIGluIHRoZSBvbGQgSlNPTiBzcGVjLiBVc2VcclxuICAvLyAgIC8vIGVtcHR5IHN0cmluZyBpbnN0ZWFkLiBJdCdsbCBmdW5jdGlvbiBhcyBhIGxvZ2ljIGZhbHNlIGFzIHdlbGwuXHJcbiAgLy8gICAvLyBOb3RlIHRoYXQgcGFzc2luZyBpbiBlbXB0eSBzdHJpbmcgbWVhbnMgaXQnbGwgYmUgZW5jcnlwdGVkIHdoaWNoIHZlcmlmaWVzXHJcbiAgLy8gICAvLyBpdCdzIGludGVncml0eS4gQnV0IHdlIHN0aWxsIHdhbnQgdG8gaGF2ZSBhIHdheSB0byBzZXQgdGhlIERCIGZpZWxkXHJcbiAgLy8gICAvLyB0byBOVUxMLCBzbyB3ZSBleHBsaWNpdGx5IHJldHVybiBudWxsIHdoZW4gY29udGVudCA9PSBudWxsLiBBIG51bGxcclxuICAvLyAgIC8vIHZhcmlhYmxlIGluIGdyYXBocWwgbXV0YXRpb24gb24gS0Mgc2VydmVyIGNsZWFycyB0aGUgZmllbGQgdG8gTlVMTC5cclxuICAvLyAgIGlmIChjb250ZW50ID09IG51bGwpIHtcclxuICAvLyAgICAgcmV0dXJuIG51bGw7XHJcbiAgLy8gICB9XHJcblxyXG4gIC8vICAgY29uc3QgandrID1cclxuICAvLyAgICAgYXNKd2soa2V5KSB8fCAoYXdhaXQgdGhpcy5rZXlHcmFwaFNlcnZpY2UuZ2V0SndrS2V5KGtleSBhcyBzdHJpbmcgfCBLZXkpKTtcclxuICAvLyAgIHJldHVybiBKU09OLnN0cmluZ2lmeShhd2FpdCB0aGlzLmVuY3J5cHRpb25TZXJ2aWNlLmVuY3J5cHQoandrLCBjb250ZW50KSk7XHJcbiAgLy8gfVxyXG5cclxuICAvLyAvLyBXcmFwcyBhIHN5bW1ldHJpYyBlbmNyeXB0aW9uIGtleS5cclxuICAvLyAvLyBUaHJvd3MgZXhjZXB0aW9uIGlmIHdyYXBwaW5nIHB1YmxpYyBrZXlzLlxyXG4gIC8vIGFzeW5jIHdyYXBLZXk8VD4oXHJcbiAgLy8gICB3cmFwcGluZ0tleTogc3RyaW5nIHwgS2V5IHwgSldLLktleSxcclxuICAvLyAgIGtleTogSldLLktleVxyXG4gIC8vICk6IFByb21pc2U8c3RyaW5nPiB7XHJcbiAgLy8gICBpZiAoIWlzU3ltbWV0cmljS2V5KGtleSkpIHtcclxuICAvLyAgICAgdGhyb3cgbmV3IExyQmFkQXJndW1lbnRFeGNlcHRpb24oXHJcbiAgLy8gICAgICAgJ09ubHkgYWxsb3dpbmcgd3JhcHBpbmcgb2Ygc3ltbWV0cmljIGtleXMuJ1xyXG4gIC8vICAgICApO1xyXG4gIC8vICAgfVxyXG5cclxuICAvLyAgIHJldHVybiB0aGlzLmVuY3J5cHRUb1N0cmluZyh3cmFwcGluZ0tleSwga2V5LnRvSlNPTih0cnVlKSk7XHJcbiAgLy8gfVxyXG5cclxuICAvLyAvLyBUT0RPXHJcbiAgLy8gLy8gYXN5bmMgd3JhcFB1YmxpY0tleTxUPigpO1xyXG4gIC8vIC8vIGFzeW5jIHdyYXBQcml2YXRlS2V5PFQ+KCk7XHJcblxyXG4gIGFzeW5jIGRvdWJsZVdyYXBDb250ZW50KFxyXG4gICAgc2VjdXJlQ29udGVudDogYW55LFxyXG4gICAgY2F0ZWdvcnlJZHM6IHN0cmluZ1tdLFxyXG4gICAgZmlsZUNvbnRlbnQ/OiBBcnJheUJ1ZmZlclxyXG4gICkge1xyXG4gICAgY29uc3Qga2V5ID0gYXdhaXQgdGhpcy5rZXlGYWN0b3J5LmNyZWF0ZUtleSgpO1xyXG5cclxuICAgIGNvbnN0IHdyYXBwZWRDb250ZW50ID0gYXdhaXQgdGhpcy53cmFwQ29udGVudChcclxuICAgICAga2V5LnRvSlNPTih0cnVlKSxcclxuICAgICAgY2F0ZWdvcnlJZHNcclxuICAgICk7XHJcblxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgcm9vdEtleTogd3JhcHBlZENvbnRlbnQucm9vdEtleSxcclxuICAgICAgd3JhcHBlZEtleXM6IHdyYXBwZWRDb250ZW50LndyYXBwZWRLZXlzLFxyXG4gICAgICBkb3VibGVXcmFwcGVkS2V5OiB3cmFwcGVkQ29udGVudC5jaXBoZXJNZXRhLFxyXG4gICAgICBjaXBoZXJNZXRhOiBzZWN1cmVDb250ZW50XHJcbiAgICAgICAgPyBKU09OLnN0cmluZ2lmeShcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5lbmNyeXB0aW9uU2VydmljZS5lbmNyeXB0KGtleSwgc2VjdXJlQ29udGVudClcclxuICAgICAgICAgIClcclxuICAgICAgICA6IG51bGwsXHJcbiAgICAgIGNpcGhlckZpbGVDb250ZW50OiBmaWxlQ29udGVudFxyXG4gICAgICAgID8gSlNPTi5zdHJpbmdpZnkoYXdhaXQgdGhpcy5lbmNyeXB0aW9uU2VydmljZS5lbmNyeXB0KGtleSwgZmlsZUNvbnRlbnQpKVxyXG4gICAgICAgIDogbnVsbCxcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBhc3luYyByZVdyYXBDb250ZW50KGtleUlkOiBzdHJpbmcsIHNlY3VyZUNvbnRlbnQ6IGFueSkge1xyXG4gICAgY29uc3Qga2V5ID0gYXdhaXQgdGhpcy5rZXlHcmFwaC5nZXRKd2tLZXkoa2V5SWQpO1xyXG4gICAgY29uc3QgbmV3S2V5ID0gYXdhaXQgdGhpcy5rZXlGYWN0b3J5LmNyZWF0ZUtleSgpO1xyXG5cclxuICAgIHJldHVybiB7XHJcbiAgICAgIGRvdWJsZVdyYXBwZWRLZXk6IEpTT04uc3RyaW5naWZ5KFxyXG4gICAgICAgIGF3YWl0IHRoaXMuZW5jcnlwdGlvblNlcnZpY2UuZW5jcnlwdChrZXksIG5ld0tleS50b0pTT04odHJ1ZSkpXHJcbiAgICAgICksXHJcbiAgICAgIGNpcGhlck1ldGE6IHNlY3VyZUNvbnRlbnRcclxuICAgICAgICA/IEpTT04uc3RyaW5naWZ5KFxyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLmVuY3J5cHRpb25TZXJ2aWNlLmVuY3J5cHQobmV3S2V5LCBzZWN1cmVDb250ZW50KVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgIDogbnVsbCxcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBhc3luYyB3cmFwQ29udGVudChcclxuICAgIHNlY3VyZUNvbnRlbnQ6IGFueSxcclxuICAgIGNhdGVnb3J5SWRzPzogc3RyaW5nW11cclxuICApOiBQcm9taXNlPFdyYXBwZWRDb250ZW50PiB7XHJcbiAgICBjb25zdCBrZXkgPSBhd2FpdCB0aGlzLmtleUZhY3RvcnkuY3JlYXRlS2V5KCk7XHJcblxyXG4gICAgbGV0IHdyYXBwZWRLZXlzOiBXcmFwcGluZ0tleVtdO1xyXG4gICAgbGV0IHJvb3RXcmFwcGluZ0tleTogV3JhcHBpbmdLZXk7XHJcblxyXG4gICAgaWYgKGNhdGVnb3J5SWRzICYmIGNhdGVnb3J5SWRzLmxlbmd0aCkge1xyXG4gICAgICB3cmFwcGVkS2V5cyA9IGF3YWl0IFByb21pc2UuYWxsKFxyXG4gICAgICAgIGNhdGVnb3J5SWRzLm1hcChhc3luYyAoY2F0ZWdvcnlJZCkgPT4ge1xyXG4gICAgICAgICAgY29uc3QgcGFyZW50S2V5ID0gYXdhaXQgdGhpcy5nZXRDYXRlZ29yeUtleUlkKGNhdGVnb3J5SWQpO1xyXG4gICAgICAgICAgY29uc3Qgd3JhcHBlZEtleSA9IEpTT04uc3RyaW5naWZ5KFxyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLmVuY3J5cHRpb25TZXJ2aWNlLmVuY3J5cHQoXHJcbiAgICAgICAgICAgICAgcGFyZW50S2V5LmtleSxcclxuICAgICAgICAgICAgICBrZXkudG9KU09OKHRydWUpXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBkaXJlY3RvcnlJZDogY2F0ZWdvcnlJZCxcclxuICAgICAgICAgICAgd3JhcHBpbmdLZXlJZDogcGFyZW50S2V5LmtleUlkLFxyXG4gICAgICAgICAgICB3cmFwcGVkS2V5LFxyXG4gICAgICAgICAgfTtcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gQWRkaW5nIHRvIHJvb3QgZGlyZWN0b3J5XHJcbiAgICAgIGNvbnN0IHJvb3RLZXkgPSB0aGlzLmtleVNlcnZpY2UuZ2V0Q3VycmVudFJvb3RLZXkoKTtcclxuICAgICAgY29uc3Qgd3JhcHBlZEtleSA9IEpTT04uc3RyaW5naWZ5KFxyXG4gICAgICAgIGF3YWl0IHRoaXMuZW5jcnlwdGlvblNlcnZpY2UuZW5jcnlwdChyb290S2V5Lmp3aywga2V5LnRvSlNPTih0cnVlKSlcclxuICAgICAgKTtcclxuICAgICAgcm9vdFdyYXBwaW5nS2V5ID0ge1xyXG4gICAgICAgIHdyYXBwaW5nS2V5SWQ6IHJvb3RLZXkuaWQsXHJcbiAgICAgICAgd3JhcHBlZEtleSxcclxuICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBrZXksXHJcbiAgICAgIHJvb3RLZXk6IHJvb3RXcmFwcGluZ0tleSxcclxuICAgICAgd3JhcHBlZEtleXMsXHJcbiAgICAgIGNpcGhlck1ldGE6IHNlY3VyZUNvbnRlbnRcclxuICAgICAgICA/IEpTT04uc3RyaW5naWZ5KFxyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLmVuY3J5cHRpb25TZXJ2aWNlLmVuY3J5cHQoa2V5LCBzZWN1cmVDb250ZW50KVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgIDogbnVsbCxcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBhc3luYyB3cmFwQ29udGVudFdpdGhLZXkoXHJcbiAgICBzZWN1cmVDb250ZW50OiBhbnksXHJcbiAgICBrZXlJZDogc3RyaW5nXHJcbiAgKTogUHJvbWlzZTxXcmFwcGVkQ29udGVudD4ge1xyXG4gICAgY29uc3Qga2V5ID0gYXdhaXQgdGhpcy5rZXlGYWN0b3J5LmNyZWF0ZUtleSgpO1xyXG5cclxuICAgIGNvbnN0IHdyYXBwZWRLZXkgPSBhd2FpdCB0aGlzLmtleUdyYXBoLmVuY3J5cHRUb1N0cmluZyhcclxuICAgICAga2V5SWQsXHJcbiAgICAgIGtleS50b0pTT04odHJ1ZSlcclxuICAgICk7XHJcblxyXG4gICAgcmV0dXJuIHtcclxuICAgICAga2V5LFxyXG4gICAgICByb290S2V5OiB7XHJcbiAgICAgICAgd3JhcHBpbmdLZXlJZDoga2V5SWQsXHJcbiAgICAgICAgd3JhcHBlZEtleSxcclxuICAgICAgfSxcclxuICAgICAgY2lwaGVyTWV0YTogc2VjdXJlQ29udGVudFxyXG4gICAgICAgID8gSlNPTi5zdHJpbmdpZnkoXHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuZW5jcnlwdGlvblNlcnZpY2UuZW5jcnlwdChrZXksIHNlY3VyZUNvbnRlbnQpXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgOiBudWxsLFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgZ2V0Q2F0ZWdvcnlLZXlJZChcclxuICAgIGNhdGVnb3J5SWQ6IHN0cmluZ1xyXG4gICk6IFByb21pc2U8eyBrZXlJZDogc3RyaW5nOyBrZXk6IGFueSB9PiB7XHJcbiAgICBjb25zdCB7IGNhdGVnb3J5IH0gPSBhd2FpdCB0aGlzLmxyQXBvbGxvLnF1ZXJ5PGFueT4oe1xyXG4gICAgICBxdWVyeTogR2V0Q2F0ZWdvcnlLZXlJZFF1ZXJ5LFxyXG4gICAgICB2YXJpYWJsZXM6IHtcclxuICAgICAgICBpZDogY2F0ZWdvcnlJZCxcclxuICAgICAgfSxcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiB7XHJcbiAgICAgIGtleUlkOiBjYXRlZ29yeS5rZXlJZCxcclxuICAgICAga2V5OiBhd2FpdCB0aGlzLmtleUdyYXBoLmdldEp3a0tleShjYXRlZ29yeS5rZXlJZCksXHJcbiAgICB9O1xyXG4gIH1cclxufVxyXG4iXX0=