@icure/api 8.0.63 → 8.0.65

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 (135) hide show
  1. package/icc-api/api/internal/IccExchangeDataApi.d.ts +2 -0
  2. package/icc-api/api/internal/IccExchangeDataApi.js +10 -0
  3. package/icc-api/api/internal/IccExchangeDataApi.js.map +1 -1
  4. package/icc-api/iccApi.d.ts +0 -1
  5. package/icc-api/iccApi.js +0 -1
  6. package/icc-api/iccApi.js.map +1 -1
  7. package/icc-api/index.d.ts +0 -1
  8. package/icc-api/index.js +0 -1
  9. package/icc-api/index.js.map +1 -1
  10. package/icc-x-api/crypto/AccessControlSecretUtils.d.ts +4 -13
  11. package/icc-x-api/crypto/AccessControlSecretUtils.js +19 -29
  12. package/icc-x-api/crypto/AccessControlSecretUtils.js.map +1 -1
  13. package/icc-x-api/crypto/BaseExchangeDataManager.d.ts +6 -2
  14. package/icc-x-api/crypto/BaseExchangeDataManager.js +26 -9
  15. package/icc-x-api/crypto/BaseExchangeDataManager.js.map +1 -1
  16. package/icc-x-api/crypto/BaseExchangeKeysManager.d.ts +2 -3
  17. package/icc-x-api/crypto/BaseExchangeKeysManager.js +8 -16
  18. package/icc-x-api/crypto/BaseExchangeKeysManager.js.map +1 -1
  19. package/icc-x-api/crypto/CryptoPrimitives.d.ts +2 -0
  20. package/icc-x-api/crypto/CryptoPrimitives.js +3 -0
  21. package/icc-x-api/crypto/CryptoPrimitives.js.map +1 -1
  22. package/icc-x-api/crypto/DelegationsDeAnonymization.d.ts +3 -3
  23. package/icc-x-api/crypto/DelegationsDeAnonymization.js +7 -7
  24. package/icc-x-api/crypto/DelegationsDeAnonymization.js.map +1 -1
  25. package/icc-x-api/crypto/ExchangeDataManager.d.ts +19 -29
  26. package/icc-x-api/crypto/ExchangeDataManager.js +200 -225
  27. package/icc-x-api/crypto/ExchangeDataManager.js.map +1 -1
  28. package/icc-x-api/crypto/ExchangeDataMapManager.js +6 -4
  29. package/icc-x-api/crypto/ExchangeDataMapManager.js.map +1 -1
  30. package/icc-x-api/crypto/ExchangeKeysManager.d.ts +4 -16
  31. package/icc-x-api/crypto/ExchangeKeysManager.js +44 -41
  32. package/icc-x-api/crypto/ExchangeKeysManager.js.map +1 -1
  33. package/icc-x-api/crypto/ExtendedApisUtils.d.ts +47 -25
  34. package/icc-x-api/crypto/ExtendedApisUtils.js.map +1 -1
  35. package/icc-x-api/crypto/ExtendedApisUtilsImpl.d.ts +19 -18
  36. package/icc-x-api/crypto/ExtendedApisUtilsImpl.js +213 -134
  37. package/icc-x-api/crypto/ExtendedApisUtilsImpl.js.map +1 -1
  38. package/icc-x-api/crypto/HMACUtils.d.ts +2 -2
  39. package/icc-x-api/crypto/HMACUtils.js +3 -4
  40. package/icc-x-api/crypto/HMACUtils.js.map +1 -1
  41. package/icc-x-api/crypto/NativeCryptoPrimitivesBridge.d.ts +1 -0
  42. package/icc-x-api/crypto/NativeCryptoPrimitivesBridge.js +5 -0
  43. package/icc-x-api/crypto/NativeCryptoPrimitivesBridge.js.map +1 -1
  44. package/icc-x-api/crypto/SecureDelegationsManager.d.ts +0 -1
  45. package/icc-x-api/crypto/SecureDelegationsManager.js +17 -49
  46. package/icc-x-api/crypto/SecureDelegationsManager.js.map +1 -1
  47. package/icc-x-api/crypto/SecurityMetadataDecryptor.d.ts +59 -90
  48. package/icc-x-api/crypto/SecurityMetadataDecryptor.js +470 -56
  49. package/icc-x-api/crypto/SecurityMetadataDecryptor.js.map +1 -1
  50. package/icc-x-api/crypto/ShamirKeysManager.js +1 -1
  51. package/icc-x-api/crypto/ShamirKeysManager.js.map +1 -1
  52. package/icc-x-api/crypto/TransferKeysManager.d.ts +1 -3
  53. package/icc-x-api/crypto/TransferKeysManager.js +2 -4
  54. package/icc-x-api/crypto/TransferKeysManager.js.map +1 -1
  55. package/icc-x-api/icc-accesslog-x-api.d.ts +2 -2
  56. package/icc-x-api/icc-accesslog-x-api.js +7 -3
  57. package/icc-x-api/icc-accesslog-x-api.js.map +1 -1
  58. package/icc-x-api/icc-calendar-item-x-api.js +4 -2
  59. package/icc-x-api/icc-calendar-item-x-api.js.map +1 -1
  60. package/icc-x-api/icc-contact-x-api.d.ts +0 -1
  61. package/icc-x-api/icc-contact-x-api.js +33 -48
  62. package/icc-x-api/icc-contact-x-api.js.map +1 -1
  63. package/icc-x-api/icc-crypto-x-api.js +1 -1
  64. package/icc-x-api/icc-crypto-x-api.js.map +1 -1
  65. package/icc-x-api/icc-document-x-api.d.ts +2 -2
  66. package/icc-x-api/icc-document-x-api.js +45 -42
  67. package/icc-x-api/icc-document-x-api.js.map +1 -1
  68. package/icc-x-api/icc-form-x-api.js +3 -1
  69. package/icc-x-api/icc-form-x-api.js.map +1 -1
  70. package/icc-x-api/icc-hcparty-x-api.d.ts +1 -1
  71. package/icc-x-api/icc-hcparty-x-api.js +62 -25
  72. package/icc-x-api/icc-hcparty-x-api.js.map +1 -1
  73. package/icc-x-api/icc-helement-x-api.js +4 -4
  74. package/icc-x-api/icc-helement-x-api.js.map +1 -1
  75. package/icc-x-api/icc-maintenance-task-x-api.js +4 -2
  76. package/icc-x-api/icc-maintenance-task-x-api.js.map +1 -1
  77. package/icc-x-api/icc-message-x-api.js +4 -2
  78. package/icc-x-api/icc-message-x-api.js.map +1 -1
  79. package/icc-x-api/icc-patient-x-api.js +5 -7
  80. package/icc-x-api/icc-patient-x-api.js.map +1 -1
  81. package/icc-x-api/icc-topic-x-api.js +2 -2
  82. package/icc-x-api/icc-topic-x-api.js.map +1 -1
  83. package/icc-x-api/index.d.ts +1 -2
  84. package/icc-x-api/index.js +7 -13
  85. package/icc-x-api/index.js.map +1 -1
  86. package/icc-x-api/utils/crypto-utils.d.ts +6 -4
  87. package/icc-x-api/utils/crypto-utils.js +27 -6
  88. package/icc-x-api/utils/crypto-utils.js.map +1 -1
  89. package/icc-x-api/utils/simple-lru-cache.d.ts +19 -0
  90. package/icc-x-api/utils/simple-lru-cache.js +90 -0
  91. package/icc-x-api/utils/simple-lru-cache.js.map +1 -0
  92. package/package.json +4 -2
  93. package/test/icc-x-api/crud/entities-crud-test-interface.js +0 -8
  94. package/test/icc-x-api/crud/entities-crud-test-interface.js.map +1 -1
  95. package/test/icc-x-api/crypto/exchange-data-manager-test.js +74 -92
  96. package/test/icc-x-api/crypto/exchange-data-manager-test.js.map +1 -1
  97. package/test/icc-x-api/crypto/legacy-metadata-migration-test.js.map +1 -1
  98. package/test/icc-x-api/crypto/secure-delegations-manager-test.js +27 -15
  99. package/test/icc-x-api/crypto/secure-delegations-manager-test.js.map +1 -1
  100. package/test/icc-x-api/icc-hcparty-x-api-test.d.ts +1 -0
  101. package/test/icc-x-api/icc-hcparty-x-api-test.js +55 -0
  102. package/test/icc-x-api/icc-hcparty-x-api-test.js.map +1 -0
  103. package/test/utils/FakeEncryptionKeysManager.d.ts +1 -0
  104. package/test/utils/FakeEncryptionKeysManager.js +11 -0
  105. package/test/utils/FakeEncryptionKeysManager.js.map +1 -1
  106. package/test/utils/FakeExchangeDataApi.d.ts +4 -2
  107. package/test/utils/FakeExchangeDataApi.js +24 -6
  108. package/test/utils/FakeExchangeDataApi.js.map +1 -1
  109. package/test/utils/FakeExchangeDataManager.d.ts +10 -10
  110. package/test/utils/FakeExchangeDataManager.js +12 -22
  111. package/test/utils/FakeExchangeDataManager.js.map +1 -1
  112. package/icc-api/api/IccArticleApi.d.ts +0 -72
  113. package/icc-api/api/IccArticleApi.js +0 -149
  114. package/icc-api/api/IccArticleApi.js.map +0 -1
  115. package/icc-x-api/crypto/LegacyDelegationSecurityMetadataDecryptor.d.ts +0 -33
  116. package/icc-x-api/crypto/LegacyDelegationSecurityMetadataDecryptor.js +0 -141
  117. package/icc-x-api/crypto/LegacyDelegationSecurityMetadataDecryptor.js.map +0 -1
  118. package/icc-x-api/crypto/SecureDelegationsSecurityMetadataDecryptor.d.ts +0 -46
  119. package/icc-x-api/crypto/SecureDelegationsSecurityMetadataDecryptor.js +0 -312
  120. package/icc-x-api/crypto/SecureDelegationsSecurityMetadataDecryptor.js.map +0 -1
  121. package/icc-x-api/crypto/UserSignatureKeysManager.d.ts +0 -26
  122. package/icc-x-api/crypto/UserSignatureKeysManager.js +0 -78
  123. package/icc-x-api/crypto/UserSignatureKeysManager.js.map +0 -1
  124. package/test/icc-x-api/crypto/secure-delegations-metadata-decryptor-test.d.ts +0 -1
  125. package/test/icc-x-api/crypto/secure-delegations-metadata-decryptor-test.js +0 -393
  126. package/test/icc-x-api/crypto/secure-delegations-metadata-decryptor-test.js.map +0 -1
  127. package/test/icc-x-api/crypto/security-metadata-decryptor-chain-test.d.ts +0 -1
  128. package/test/icc-x-api/crypto/security-metadata-decryptor-chain-test.js +0 -213
  129. package/test/icc-x-api/crypto/security-metadata-decryptor-chain-test.js.map +0 -1
  130. package/test/icc-x-api/crypto/signature-keys-manager-test.d.ts +0 -1
  131. package/test/icc-x-api/crypto/signature-keys-manager-test.js +0 -44
  132. package/test/icc-x-api/crypto/signature-keys-manager-test.js.map +0 -1
  133. package/test/utils/FakeSignatureKeysManager.d.ts +0 -16
  134. package/test/utils/FakeSignatureKeysManager.js +0 -54
  135. package/test/utils/FakeSignatureKeysManager.js.map +0 -1
@@ -1,213 +0,0 @@
1
- "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
- var __await = (this && this.__await) || function (v) { return this instanceof __await ? (this.v = v, this) : new __await(v); }
12
- var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _arguments, generator) {
13
- if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
14
- var g = generator.apply(thisArg, _arguments || []), i, q = [];
15
- return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i;
16
- function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }
17
- function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }
18
- function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }
19
- function fulfill(value) { resume("next", value); }
20
- function reject(value) { resume("throw", value); }
21
- function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }
22
- };
23
- Object.defineProperty(exports, "__esModule", { value: true });
24
- const mocha_1 = require("mocha");
25
- const chai_1 = require("chai");
26
- const SecurityMetadataDecryptor_1 = require("../../../icc-x-api/crypto/SecurityMetadataDecryptor");
27
- const lodash_1 = require("lodash");
28
- const EntityWithDelegationTypeName_1 = require("../../../icc-x-api/utils/EntityWithDelegationTypeName");
29
- const SecureDelegation_1 = require("../../../icc-api/model/SecureDelegation");
30
- var AccessLevel = SecureDelegation_1.SecureDelegation.AccessLevelEnum;
31
- const baseDecryptor = {
32
- decryptEncryptionKeysOf: () => {
33
- throw new Error('This should not be called');
34
- },
35
- decryptOwningEntityIdsOf: () => {
36
- throw new Error('This should not be called');
37
- },
38
- decryptSecretIdsOf: () => {
39
- throw new Error('This should not be called');
40
- },
41
- getEntityAccessLevel: () => {
42
- throw new Error('This should not be called');
43
- },
44
- hasAnyEncryptionKeys() {
45
- throw new Error('This should not be called');
46
- },
47
- getDataOwnersWithAccessTo() {
48
- throw new Error('This should not be called');
49
- },
50
- };
51
- (0, mocha_1.describe)('Security metadata decryptor chain', function () {
52
- return __awaiter(this, void 0, void 0, function* () {
53
- const expectedEntity = { entity: {}, type: EntityWithDelegationTypeName_1.EntityWithDelegationTypeName.Patient };
54
- const expectedDataOwnerHierarchySubset = ['a', 'b'];
55
- it('should return all elements in order for encryption keys', function () {
56
- var _a, _b, _c, _d;
57
- return __awaiter(this, void 0, void 0, function* () {
58
- const chained = new SecurityMetadataDecryptor_1.SecurityMetadataDecryptorChain([
59
- Object.assign(Object.assign({}, baseDecryptor), { decryptEncryptionKeysOf(typedEntity, dataOwnersHierarchySubset) {
60
- (0, chai_1.expect)(typedEntity).to.equal(expectedEntity);
61
- (0, chai_1.expect)(dataOwnersHierarchySubset).to.equal(expectedDataOwnerHierarchySubset);
62
- function generator() {
63
- return __asyncGenerator(this, arguments, function* generator_1() {
64
- yield yield __await({ decrypted: '1', dataOwnersWithAccess: ['1'] });
65
- yield yield __await({ decrypted: '2', dataOwnersWithAccess: ['2'] });
66
- yield yield __await({ decrypted: '3', dataOwnersWithAccess: ['3'] });
67
- });
68
- }
69
- return generator();
70
- } }),
71
- Object.assign(Object.assign({}, baseDecryptor), { decryptEncryptionKeysOf(typedEntity, dataOwnersHierarchySubset) {
72
- (0, chai_1.expect)(typedEntity).to.equal(expectedEntity);
73
- (0, chai_1.expect)(dataOwnersHierarchySubset).to.equal(expectedDataOwnerHierarchySubset);
74
- function generator() {
75
- return __asyncGenerator(this, arguments, function* generator_2() {
76
- yield yield __await({ decrypted: '4', dataOwnersWithAccess: ['4'] });
77
- yield yield __await({ decrypted: '5', dataOwnersWithAccess: ['5'] });
78
- yield yield __await({ decrypted: '6', dataOwnersWithAccess: ['6'] });
79
- });
80
- }
81
- return generator();
82
- } }),
83
- ]);
84
- let generator = chained.decryptEncryptionKeysOf(expectedEntity, expectedDataOwnerHierarchySubset);
85
- let next = yield generator.next();
86
- for (let i = 1; i <= 6; i++) {
87
- const si = (0, lodash_1.toString)(i);
88
- (0, chai_1.expect)((_a = next.value) === null || _a === void 0 ? void 0 : _a.decrypted).to.equal(si);
89
- (0, chai_1.expect)((_c = (_b = next.value) === null || _b === void 0 ? void 0 : _b.dataOwnersWithAccess) === null || _c === void 0 ? void 0 : _c[0]).to.equal(si);
90
- (0, chai_1.expect)((_d = next.value) === null || _d === void 0 ? void 0 : _d.dataOwnersWithAccess).to.have.length(1);
91
- (0, chai_1.expect)(next.done).to.be.false;
92
- next = yield generator.next();
93
- }
94
- (0, chai_1.expect)(next.value).to.be.undefined;
95
- (0, chai_1.expect)(next.done).to.be.true;
96
- });
97
- });
98
- it('should return all elements in order for secret ids', function () {
99
- var _a, _b, _c, _d;
100
- return __awaiter(this, void 0, void 0, function* () {
101
- const chained = new SecurityMetadataDecryptor_1.SecurityMetadataDecryptorChain([
102
- Object.assign(Object.assign({}, baseDecryptor), { decryptSecretIdsOf(typedEntity, dataOwnersHierarchySubset) {
103
- (0, chai_1.expect)(typedEntity).to.equal(expectedEntity);
104
- (0, chai_1.expect)(dataOwnersHierarchySubset).to.equal(expectedDataOwnerHierarchySubset);
105
- function generator() {
106
- return __asyncGenerator(this, arguments, function* generator_3() {
107
- yield yield __await({ decrypted: '1', dataOwnersWithAccess: ['1'] });
108
- yield yield __await({ decrypted: '2', dataOwnersWithAccess: ['2'] });
109
- yield yield __await({ decrypted: '3', dataOwnersWithAccess: ['3'] });
110
- });
111
- }
112
- return generator();
113
- } }),
114
- Object.assign(Object.assign({}, baseDecryptor), { decryptSecretIdsOf(typedEntity, dataOwnersHierarchySubset) {
115
- (0, chai_1.expect)(typedEntity).to.equal(expectedEntity);
116
- (0, chai_1.expect)(dataOwnersHierarchySubset).to.equal(expectedDataOwnerHierarchySubset);
117
- function generator() {
118
- return __asyncGenerator(this, arguments, function* generator_4() {
119
- yield yield __await({ decrypted: '4', dataOwnersWithAccess: ['4'] });
120
- yield yield __await({ decrypted: '5', dataOwnersWithAccess: ['5'] });
121
- yield yield __await({ decrypted: '6', dataOwnersWithAccess: ['6'] });
122
- });
123
- }
124
- return generator();
125
- } }),
126
- ]);
127
- let generator = chained.decryptSecretIdsOf(expectedEntity, expectedDataOwnerHierarchySubset);
128
- let next = yield generator.next();
129
- for (let i = 1; i <= 6; i++) {
130
- const si = (0, lodash_1.toString)(i);
131
- (0, chai_1.expect)((_a = next.value) === null || _a === void 0 ? void 0 : _a.decrypted).to.equal(si);
132
- (0, chai_1.expect)((_c = (_b = next.value) === null || _b === void 0 ? void 0 : _b.dataOwnersWithAccess) === null || _c === void 0 ? void 0 : _c[0]).to.equal(si);
133
- (0, chai_1.expect)((_d = next.value) === null || _d === void 0 ? void 0 : _d.dataOwnersWithAccess).to.have.length(1);
134
- (0, chai_1.expect)(next.done).to.be.false;
135
- next = yield generator.next();
136
- }
137
- (0, chai_1.expect)(next.value).to.be.undefined;
138
- (0, chai_1.expect)(next.done).to.be.true;
139
- });
140
- });
141
- it('should return all elements in order for owning entity id', function () {
142
- var _a, _b, _c, _d;
143
- return __awaiter(this, void 0, void 0, function* () {
144
- const chained = new SecurityMetadataDecryptor_1.SecurityMetadataDecryptorChain([
145
- Object.assign(Object.assign({}, baseDecryptor), { decryptOwningEntityIdsOf(typedEntity, dataOwnersHierarchySubset) {
146
- (0, chai_1.expect)(typedEntity).to.equal(expectedEntity);
147
- (0, chai_1.expect)(dataOwnersHierarchySubset).to.equal(expectedDataOwnerHierarchySubset);
148
- function generator() {
149
- return __asyncGenerator(this, arguments, function* generator_5() {
150
- yield yield __await({ decrypted: '1', dataOwnersWithAccess: ['1'] });
151
- yield yield __await({ decrypted: '2', dataOwnersWithAccess: ['2'] });
152
- yield yield __await({ decrypted: '3', dataOwnersWithAccess: ['3'] });
153
- });
154
- }
155
- return generator();
156
- } }),
157
- Object.assign(Object.assign({}, baseDecryptor), { decryptOwningEntityIdsOf(typedEntity, dataOwnersHierarchySubset) {
158
- (0, chai_1.expect)(typedEntity).to.equal(expectedEntity);
159
- (0, chai_1.expect)(dataOwnersHierarchySubset).to.equal(expectedDataOwnerHierarchySubset);
160
- function generator() {
161
- return __asyncGenerator(this, arguments, function* generator_6() {
162
- yield yield __await({ decrypted: '4', dataOwnersWithAccess: ['4'] });
163
- yield yield __await({ decrypted: '5', dataOwnersWithAccess: ['5'] });
164
- yield yield __await({ decrypted: '6', dataOwnersWithAccess: ['6'] });
165
- });
166
- }
167
- return generator();
168
- } }),
169
- ]);
170
- let generator = chained.decryptOwningEntityIdsOf(expectedEntity, expectedDataOwnerHierarchySubset);
171
- let next = yield generator.next();
172
- for (let i = 1; i <= 6; i++) {
173
- const si = (0, lodash_1.toString)(i);
174
- (0, chai_1.expect)((_a = next.value) === null || _a === void 0 ? void 0 : _a.decrypted).to.equal(si);
175
- (0, chai_1.expect)((_c = (_b = next.value) === null || _b === void 0 ? void 0 : _b.dataOwnersWithAccess) === null || _c === void 0 ? void 0 : _c[0]).to.equal(si);
176
- (0, chai_1.expect)((_d = next.value) === null || _d === void 0 ? void 0 : _d.dataOwnersWithAccess).to.have.length(1);
177
- (0, chai_1.expect)(next.done).to.be.false;
178
- next = yield generator.next();
179
- }
180
- (0, chai_1.expect)(next.value).to.be.undefined;
181
- (0, chai_1.expect)(next.done).to.be.true;
182
- });
183
- });
184
- it('should return the best access level across all decryptors of the chain', function () {
185
- return __awaiter(this, void 0, void 0, function* () {
186
- function newAccessLevelDecryptor(accessLevel) {
187
- return Object.assign(Object.assign({}, baseDecryptor), { getEntityAccessLevel: (typedEntity, dataOwnersHierarchySubset) => {
188
- (0, chai_1.expect)(typedEntity).to.equal(expectedEntity);
189
- (0, chai_1.expect)(dataOwnersHierarchySubset).to.equal(expectedDataOwnerHierarchySubset);
190
- return Promise.resolve(accessLevel);
191
- } });
192
- }
193
- (0, chai_1.expect)(yield new SecurityMetadataDecryptor_1.SecurityMetadataDecryptorChain([newAccessLevelDecryptor(undefined), newAccessLevelDecryptor(AccessLevel.READ)]).getEntityAccessLevel(expectedEntity, expectedDataOwnerHierarchySubset)).to.equal(AccessLevel.READ);
194
- (0, chai_1.expect)(yield new SecurityMetadataDecryptor_1.SecurityMetadataDecryptorChain([newAccessLevelDecryptor(AccessLevel.READ), newAccessLevelDecryptor(undefined)]).getEntityAccessLevel(expectedEntity, expectedDataOwnerHierarchySubset)).to.equal(AccessLevel.READ);
195
- (0, chai_1.expect)(yield new SecurityMetadataDecryptor_1.SecurityMetadataDecryptorChain([
196
- newAccessLevelDecryptor(AccessLevel.READ),
197
- newAccessLevelDecryptor(undefined),
198
- newAccessLevelDecryptor(AccessLevel.WRITE),
199
- newAccessLevelDecryptor(AccessLevel.READ),
200
- ]).getEntityAccessLevel(expectedEntity, expectedDataOwnerHierarchySubset)).to.equal(AccessLevel.WRITE);
201
- (0, chai_1.expect)(yield new SecurityMetadataDecryptor_1.SecurityMetadataDecryptorChain([newAccessLevelDecryptor(undefined), newAccessLevelDecryptor(undefined)]).getEntityAccessLevel(expectedEntity, expectedDataOwnerHierarchySubset)).to.equal(undefined);
202
- (0, chai_1.expect)(yield new SecurityMetadataDecryptor_1.SecurityMetadataDecryptorChain([
203
- newAccessLevelDecryptor(undefined),
204
- newAccessLevelDecryptor(AccessLevel.READ),
205
- newAccessLevelDecryptor(AccessLevel.READ),
206
- newAccessLevelDecryptor(undefined),
207
- newAccessLevelDecryptor(AccessLevel.WRITE),
208
- ]).getEntityAccessLevel(expectedEntity, expectedDataOwnerHierarchySubset)).to.equal(AccessLevel.WRITE);
209
- });
210
- });
211
- });
212
- });
213
- //# sourceMappingURL=security-metadata-decryptor-chain-test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"security-metadata-decryptor-chain-test.js","sourceRoot":"","sources":["../../../../test/icc-x-api/crypto/security-metadata-decryptor-chain-test.ts"],"names":[],"mappings":"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","sourcesContent":["import { describe } from 'mocha'\nimport { expect } from 'chai'\nimport { SecurityMetadataDecryptor, SecurityMetadataDecryptorChain } from '../../../icc-x-api/crypto/SecurityMetadataDecryptor'\nimport { EncryptedEntityStub } from '../../../icc-api/model/models'\nimport { toString } from 'lodash'\nimport { EncryptedEntityWithType, EntityWithDelegationTypeName } from '../../../icc-x-api/utils/EntityWithDelegationTypeName'\nimport { SecureDelegation } from '../../../icc-api/model/SecureDelegation'\nimport AccessLevel = SecureDelegation.AccessLevelEnum\n\nconst baseDecryptor = {\n decryptEncryptionKeysOf: () => {\n throw new Error('This should not be called')\n },\n decryptOwningEntityIdsOf: () => {\n throw new Error('This should not be called')\n },\n decryptSecretIdsOf: () => {\n throw new Error('This should not be called')\n },\n getEntityAccessLevel: () => {\n throw new Error('This should not be called')\n },\n hasAnyEncryptionKeys(): boolean {\n throw new Error('This should not be called')\n },\n getDataOwnersWithAccessTo() {\n throw new Error('This should not be called')\n },\n}\n\ndescribe('Security metadata decryptor chain', async function () {\n const expectedEntity: EncryptedEntityWithType = { entity: {} as EncryptedEntityStub, type: EntityWithDelegationTypeName.Patient }\n const expectedDataOwnerHierarchySubset = ['a', 'b']\n\n it('should return all elements in order for encryption keys', async function () {\n const chained = new SecurityMetadataDecryptorChain([\n {\n ...baseDecryptor,\n decryptEncryptionKeysOf(\n typedEntity: EncryptedEntityWithType,\n dataOwnersHierarchySubset: string[]\n ): AsyncGenerator<{ decrypted: string; dataOwnersWithAccess: string[] }, void, never> {\n expect(typedEntity).to.equal(expectedEntity)\n expect(dataOwnersHierarchySubset).to.equal(expectedDataOwnerHierarchySubset)\n async function* generator(): AsyncGenerator<{ decrypted: string; dataOwnersWithAccess: string[] }, void, never> {\n yield { decrypted: '1', dataOwnersWithAccess: ['1'] }\n yield { decrypted: '2', dataOwnersWithAccess: ['2'] }\n yield { decrypted: '3', dataOwnersWithAccess: ['3'] }\n }\n return generator()\n },\n },\n {\n ...baseDecryptor,\n decryptEncryptionKeysOf(\n typedEntity: EncryptedEntityWithType,\n dataOwnersHierarchySubset: string[]\n ): AsyncGenerator<{ decrypted: string; dataOwnersWithAccess: string[] }, void, never> {\n expect(typedEntity).to.equal(expectedEntity)\n expect(dataOwnersHierarchySubset).to.equal(expectedDataOwnerHierarchySubset)\n async function* generator(): AsyncGenerator<{ decrypted: string; dataOwnersWithAccess: string[] }, void, never> {\n yield { decrypted: '4', dataOwnersWithAccess: ['4'] }\n yield { decrypted: '5', dataOwnersWithAccess: ['5'] }\n yield { decrypted: '6', dataOwnersWithAccess: ['6'] }\n }\n return generator()\n },\n },\n ])\n let generator = chained.decryptEncryptionKeysOf(expectedEntity, expectedDataOwnerHierarchySubset)\n let next = await generator.next()\n for (let i = 1; i <= 6; i++) {\n const si = toString(i)\n expect(next.value?.decrypted).to.equal(si)\n expect(next.value?.dataOwnersWithAccess?.[0]).to.equal(si)\n expect(next.value?.dataOwnersWithAccess).to.have.length(1)\n expect(next.done).to.be.false\n next = await generator.next()\n }\n expect(next.value).to.be.undefined\n expect(next.done).to.be.true\n })\n\n it('should return all elements in order for secret ids', async function () {\n const chained = new SecurityMetadataDecryptorChain([\n {\n ...baseDecryptor,\n decryptSecretIdsOf(\n typedEntity: EncryptedEntityWithType,\n dataOwnersHierarchySubset: string[]\n ): AsyncGenerator<{ decrypted: string; dataOwnersWithAccess: string[] }, void, never> {\n expect(typedEntity).to.equal(expectedEntity)\n expect(dataOwnersHierarchySubset).to.equal(expectedDataOwnerHierarchySubset)\n async function* generator(): AsyncGenerator<{ decrypted: string; dataOwnersWithAccess: string[] }, void, never> {\n yield { decrypted: '1', dataOwnersWithAccess: ['1'] }\n yield { decrypted: '2', dataOwnersWithAccess: ['2'] }\n yield { decrypted: '3', dataOwnersWithAccess: ['3'] }\n }\n return generator()\n },\n },\n {\n ...baseDecryptor,\n decryptSecretIdsOf(\n typedEntity: EncryptedEntityWithType,\n dataOwnersHierarchySubset: string[]\n ): AsyncGenerator<{ decrypted: string; dataOwnersWithAccess: string[] }, void, never> {\n expect(typedEntity).to.equal(expectedEntity)\n expect(dataOwnersHierarchySubset).to.equal(expectedDataOwnerHierarchySubset)\n async function* generator(): AsyncGenerator<{ decrypted: string; dataOwnersWithAccess: string[] }, void, never> {\n yield { decrypted: '4', dataOwnersWithAccess: ['4'] }\n yield { decrypted: '5', dataOwnersWithAccess: ['5'] }\n yield { decrypted: '6', dataOwnersWithAccess: ['6'] }\n }\n return generator()\n },\n },\n ])\n let generator = chained.decryptSecretIdsOf(expectedEntity, expectedDataOwnerHierarchySubset)\n let next = await generator.next()\n for (let i = 1; i <= 6; i++) {\n const si = toString(i)\n expect(next.value?.decrypted).to.equal(si)\n expect(next.value?.dataOwnersWithAccess?.[0]).to.equal(si)\n expect(next.value?.dataOwnersWithAccess).to.have.length(1)\n expect(next.done).to.be.false\n next = await generator.next()\n }\n expect(next.value).to.be.undefined\n expect(next.done).to.be.true\n })\n\n it('should return all elements in order for owning entity id', async function () {\n const chained = new SecurityMetadataDecryptorChain([\n {\n ...baseDecryptor,\n decryptOwningEntityIdsOf(\n typedEntity: EncryptedEntityWithType,\n dataOwnersHierarchySubset: string[]\n ): AsyncGenerator<{ decrypted: string; dataOwnersWithAccess: string[] }, void, never> {\n expect(typedEntity).to.equal(expectedEntity)\n expect(dataOwnersHierarchySubset).to.equal(expectedDataOwnerHierarchySubset)\n async function* generator(): AsyncGenerator<{ decrypted: string; dataOwnersWithAccess: string[] }, void, never> {\n yield { decrypted: '1', dataOwnersWithAccess: ['1'] }\n yield { decrypted: '2', dataOwnersWithAccess: ['2'] }\n yield { decrypted: '3', dataOwnersWithAccess: ['3'] }\n }\n return generator()\n },\n },\n {\n ...baseDecryptor,\n decryptOwningEntityIdsOf(\n typedEntity: EncryptedEntityWithType,\n dataOwnersHierarchySubset: string[]\n ): AsyncGenerator<{ decrypted: string; dataOwnersWithAccess: string[] }, void, never> {\n expect(typedEntity).to.equal(expectedEntity)\n expect(dataOwnersHierarchySubset).to.equal(expectedDataOwnerHierarchySubset)\n async function* generator(): AsyncGenerator<{ decrypted: string; dataOwnersWithAccess: string[] }, void, never> {\n yield { decrypted: '4', dataOwnersWithAccess: ['4'] }\n yield { decrypted: '5', dataOwnersWithAccess: ['5'] }\n yield { decrypted: '6', dataOwnersWithAccess: ['6'] }\n }\n return generator()\n },\n },\n ])\n let generator = chained.decryptOwningEntityIdsOf(expectedEntity, expectedDataOwnerHierarchySubset)\n let next = await generator.next()\n for (let i = 1; i <= 6; i++) {\n const si = toString(i)\n expect(next.value?.decrypted).to.equal(si)\n expect(next.value?.dataOwnersWithAccess?.[0]).to.equal(si)\n expect(next.value?.dataOwnersWithAccess).to.have.length(1)\n expect(next.done).to.be.false\n next = await generator.next()\n }\n expect(next.value).to.be.undefined\n expect(next.done).to.be.true\n })\n\n it('should return the best access level across all decryptors of the chain', async function () {\n function newAccessLevelDecryptor(accessLevel: AccessLevel | undefined): SecurityMetadataDecryptor {\n return {\n ...baseDecryptor,\n getEntityAccessLevel: (typedEntity, dataOwnersHierarchySubset) => {\n expect(typedEntity).to.equal(expectedEntity)\n expect(dataOwnersHierarchySubset).to.equal(expectedDataOwnerHierarchySubset)\n return Promise.resolve(accessLevel)\n },\n }\n }\n expect(\n await new SecurityMetadataDecryptorChain([newAccessLevelDecryptor(undefined), newAccessLevelDecryptor(AccessLevel.READ)]).getEntityAccessLevel(\n expectedEntity,\n expectedDataOwnerHierarchySubset\n )\n ).to.equal(AccessLevel.READ)\n expect(\n await new SecurityMetadataDecryptorChain([newAccessLevelDecryptor(AccessLevel.READ), newAccessLevelDecryptor(undefined)]).getEntityAccessLevel(\n expectedEntity,\n expectedDataOwnerHierarchySubset\n )\n ).to.equal(AccessLevel.READ)\n expect(\n await new SecurityMetadataDecryptorChain([\n newAccessLevelDecryptor(AccessLevel.READ),\n newAccessLevelDecryptor(undefined),\n newAccessLevelDecryptor(AccessLevel.WRITE),\n newAccessLevelDecryptor(AccessLevel.READ),\n ]).getEntityAccessLevel(expectedEntity, expectedDataOwnerHierarchySubset)\n ).to.equal(AccessLevel.WRITE)\n expect(\n await new SecurityMetadataDecryptorChain([newAccessLevelDecryptor(undefined), newAccessLevelDecryptor(undefined)]).getEntityAccessLevel(\n expectedEntity,\n expectedDataOwnerHierarchySubset\n )\n ).to.equal(undefined)\n expect(\n await new SecurityMetadataDecryptorChain([\n newAccessLevelDecryptor(undefined),\n newAccessLevelDecryptor(AccessLevel.READ),\n newAccessLevelDecryptor(AccessLevel.READ),\n newAccessLevelDecryptor(undefined),\n newAccessLevelDecryptor(AccessLevel.WRITE),\n ]).getEntityAccessLevel(expectedEntity, expectedDataOwnerHierarchySubset)\n ).to.equal(AccessLevel.WRITE)\n })\n})\n"]}
@@ -1,44 +0,0 @@
1
- "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
- Object.defineProperty(exports, "__esModule", { value: true });
12
- const UserSignatureKeysManager_1 = require("../../../icc-x-api/crypto/UserSignatureKeysManager");
13
- const IcureStorageFacade_1 = require("../../../icc-x-api/storage/IcureStorageFacade");
14
- const TestStorage_1 = require("../../utils/TestStorage");
15
- const DefaultStorageEntryKeysFactory_1 = require("../../../icc-x-api/storage/DefaultStorageEntryKeysFactory");
16
- const FakeDataOwnerApi_1 = require("../../utils/FakeDataOwnerApi");
17
- const CryptoPrimitives_1 = require("../../../icc-x-api/crypto/CryptoPrimitives");
18
- const crypto_1 = require("crypto");
19
- const DataOwnerTypeEnum_1 = require("../../../icc-api/model/DataOwnerTypeEnum");
20
- const icc_x_api_1 = require("../../../icc-x-api");
21
- const chai_1 = require("chai");
22
- const utils_1 = require("../../../icc-x-api/crypto/utils");
23
- describe('SignatureKeysManager', () => {
24
- it('should be able to store a key pair in local storage and reload it', () => __awaiter(void 0, void 0, void 0, function* () {
25
- const iCureStorage = new IcureStorageFacade_1.IcureStorageFacade(new TestStorage_1.TestKeyStorage(), new TestStorage_1.TestStorage(), new DefaultStorageEntryKeysFactory_1.DefaultStorageEntryKeysFactory());
26
- const primitives = new CryptoPrimitives_1.WebCryptoPrimitives(crypto_1.webcrypto);
27
- const dataOwnerApi = new FakeDataOwnerApi_1.FakeDataOwnerApi({ id: primitives.randomUuid(), type: DataOwnerTypeEnum_1.DataOwnerTypeEnum.Hcp });
28
- const manager1 = new UserSignatureKeysManager_1.UserSignatureKeysManager(iCureStorage, dataOwnerApi, primitives);
29
- const pair1 = yield manager1.getOrCreateSignatureKeyPair();
30
- const manager2 = new UserSignatureKeysManager_1.UserSignatureKeysManager(iCureStorage, dataOwnerApi, primitives);
31
- const pair2 = yield manager2.getOrCreateSignatureKeyPair();
32
- const private1 = (0, icc_x_api_1.ua2hex)(yield primitives.RSA.exportKey(pair1.keyPair.privateKey, 'pkcs8'));
33
- const private2 = (0, icc_x_api_1.ua2hex)(yield primitives.RSA.exportKey(pair2.keyPair.privateKey, 'pkcs8'));
34
- (0, chai_1.expect)(private1).to.equal(private2);
35
- const public1 = (0, icc_x_api_1.ua2hex)(yield primitives.RSA.exportKey(pair1.keyPair.publicKey, 'spki'));
36
- const public2 = (0, icc_x_api_1.ua2hex)(yield primitives.RSA.exportKey(pair2.keyPair.publicKey, 'spki'));
37
- (0, chai_1.expect)(public1).to.equal(public2);
38
- const verification1 = (0, icc_x_api_1.ua2hex)(yield primitives.RSA.exportKey((yield manager1.getSignatureVerificationKey((0, utils_1.fingerprintV2)(public1))), 'spki'));
39
- const verification2 = (0, icc_x_api_1.ua2hex)(yield primitives.RSA.exportKey((yield manager2.getSignatureVerificationKey((0, utils_1.fingerprintV2)(public1))), 'spki'));
40
- (0, chai_1.expect)(verification1).to.equal(public1);
41
- (0, chai_1.expect)(verification2).to.equal(public1);
42
- }));
43
- });
44
- //# sourceMappingURL=signature-keys-manager-test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"signature-keys-manager-test.js","sourceRoot":"","sources":["../../../../test/icc-x-api/crypto/signature-keys-manager-test.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,iGAA6F;AAC7F,sFAAkF;AAClF,yDAAqE;AACrE,8GAA0G;AAC1G,mEAA+D;AAC/D,iFAAkG;AAClG,mCAAkC;AAClC,gFAA4E;AAC5E,kDAA2C;AAC3C,+BAA6B;AAC7B,2DAA8E;AAE9E,QAAQ,CAAC,sBAAsB,EAAE,GAAG,EAAE;IACpC,EAAE,CAAC,mEAAmE,EAAE,GAAS,EAAE;QACjF,MAAM,YAAY,GAAG,IAAI,uCAAkB,CAAC,IAAI,4BAAc,EAAE,EAAE,IAAI,yBAAW,EAAE,EAAE,IAAI,+DAA8B,EAAE,CAAC,CAAA;QAC1H,MAAM,UAAU,GAAG,IAAI,sCAAmB,CAAC,kBAAgB,CAAC,CAAA;QAC5D,MAAM,YAAY,GAAG,IAAI,mCAAgB,CAAC,EAAE,EAAE,EAAE,UAAU,CAAC,UAAU,EAAE,EAAE,IAAI,EAAE,qCAAiB,CAAC,GAAG,EAAE,CAAC,CAAA;QACvG,MAAM,QAAQ,GAAG,IAAI,mDAAwB,CAAC,YAAY,EAAE,YAAY,EAAE,UAAU,CAAC,CAAA;QACrF,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,2BAA2B,EAAE,CAAA;QAC1D,MAAM,QAAQ,GAAG,IAAI,mDAAwB,CAAC,YAAY,EAAE,YAAY,EAAE,UAAU,CAAC,CAAA;QACrF,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,2BAA2B,EAAE,CAAA;QAC1D,MAAM,QAAQ,GAAG,IAAA,kBAAM,EAAC,MAAM,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAA;QAC1F,MAAM,QAAQ,GAAG,IAAA,kBAAM,EAAC,MAAM,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAA;QAC1F,IAAA,aAAM,EAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;QACnC,MAAM,OAAO,GAAG,IAAA,kBAAM,EAAC,MAAM,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAA;QACvF,MAAM,OAAO,GAAG,IAAA,kBAAM,EAAC,MAAM,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAA;QACvF,IAAA,aAAM,EAAC,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;QACjC,MAAM,aAAa,GAAG,IAAA,kBAAM,EAAC,MAAM,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,MAAM,QAAQ,CAAC,2BAA2B,CAAC,IAAA,qBAAa,EAAC,OAAO,CAAC,CAAC,CAAE,EAAE,MAAM,CAAC,CAAC,CAAA;QAC3I,MAAM,aAAa,GAAG,IAAA,kBAAM,EAAC,MAAM,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,MAAM,QAAQ,CAAC,2BAA2B,CAAC,IAAA,qBAAa,EAAC,OAAO,CAAC,CAAC,CAAE,EAAE,MAAM,CAAC,CAAC,CAAA;QAC3I,IAAA,aAAM,EAAC,aAAa,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;QACvC,IAAA,aAAM,EAAC,aAAa,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;IACzC,CAAC,CAAA,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA","sourcesContent":["import { UserSignatureKeysManager } from '../../../icc-x-api/crypto/UserSignatureKeysManager'\nimport { IcureStorageFacade } from '../../../icc-x-api/storage/IcureStorageFacade'\nimport { TestKeyStorage, TestStorage } from '../../utils/TestStorage'\nimport { DefaultStorageEntryKeysFactory } from '../../../icc-x-api/storage/DefaultStorageEntryKeysFactory'\nimport { FakeDataOwnerApi } from '../../utils/FakeDataOwnerApi'\nimport { CryptoPrimitives, WebCryptoPrimitives } from '../../../icc-x-api/crypto/CryptoPrimitives'\nimport { webcrypto } from 'crypto'\nimport { DataOwnerTypeEnum } from '../../../icc-api/model/DataOwnerTypeEnum'\nimport { ua2hex } from '../../../icc-x-api'\nimport { expect } from 'chai'\nimport { fingerprintV1, fingerprintV2 } from '../../../icc-x-api/crypto/utils'\n\ndescribe('SignatureKeysManager', () => {\n it('should be able to store a key pair in local storage and reload it', async () => {\n const iCureStorage = new IcureStorageFacade(new TestKeyStorage(), new TestStorage(), new DefaultStorageEntryKeysFactory())\n const primitives = new WebCryptoPrimitives(webcrypto as any)\n const dataOwnerApi = new FakeDataOwnerApi({ id: primitives.randomUuid(), type: DataOwnerTypeEnum.Hcp })\n const manager1 = new UserSignatureKeysManager(iCureStorage, dataOwnerApi, primitives)\n const pair1 = await manager1.getOrCreateSignatureKeyPair()\n const manager2 = new UserSignatureKeysManager(iCureStorage, dataOwnerApi, primitives)\n const pair2 = await manager2.getOrCreateSignatureKeyPair()\n const private1 = ua2hex(await primitives.RSA.exportKey(pair1.keyPair.privateKey, 'pkcs8'))\n const private2 = ua2hex(await primitives.RSA.exportKey(pair2.keyPair.privateKey, 'pkcs8'))\n expect(private1).to.equal(private2)\n const public1 = ua2hex(await primitives.RSA.exportKey(pair1.keyPair.publicKey, 'spki'))\n const public2 = ua2hex(await primitives.RSA.exportKey(pair2.keyPair.publicKey, 'spki'))\n expect(public1).to.equal(public2)\n const verification1 = ua2hex(await primitives.RSA.exportKey((await manager1.getSignatureVerificationKey(fingerprintV2(public1)))!, 'spki'))\n const verification2 = ua2hex(await primitives.RSA.exportKey((await manager2.getSignatureVerificationKey(fingerprintV2(public1)))!, 'spki'))\n expect(verification1).to.equal(public1)\n expect(verification2).to.equal(public1)\n })\n})\n"]}
@@ -1,16 +0,0 @@
1
- import { KeyPair } from '../../icc-x-api/crypto/RSA';
2
- import { UserSignatureKeysManager } from '../../icc-x-api/crypto/UserSignatureKeysManager';
3
- import { CryptoPrimitives } from '../../icc-x-api/crypto/CryptoPrimitives';
4
- export declare class FakeSignatureKeysManager extends UserSignatureKeysManager {
5
- private readonly _primitives;
6
- constructor(_primitives: CryptoPrimitives);
7
- private signatureKeypair;
8
- private extraKeys;
9
- getSignatureVerificationKey(fingerprint: string): Promise<CryptoKey | undefined>;
10
- getOrCreateSignatureKeyPair(): Promise<{
11
- fingerprint: string;
12
- keyPair: KeyPair<CryptoKey>;
13
- }>;
14
- addVerificationKey(key: CryptoKey): Promise<string>;
15
- clearKeys(): void;
16
- }
@@ -1,54 +0,0 @@
1
- "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
- Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.FakeSignatureKeysManager = void 0;
13
- const UserSignatureKeysManager_1 = require("../../icc-x-api/crypto/UserSignatureKeysManager");
14
- const icc_x_api_1 = require("../../icc-x-api");
15
- class FakeSignatureKeysManager extends UserSignatureKeysManager_1.UserSignatureKeysManager {
16
- constructor(_primitives) {
17
- super(null, null, _primitives);
18
- this._primitives = _primitives;
19
- this.extraKeys = new Map();
20
- }
21
- getSignatureVerificationKey(fingerprint) {
22
- var _a;
23
- return __awaiter(this, void 0, void 0, function* () {
24
- if (((_a = this.signatureKeypair) === null || _a === void 0 ? void 0 : _a.fingerprint) === fingerprint) {
25
- return this.signatureKeypair.keyPair.publicKey;
26
- }
27
- else
28
- return this.extraKeys.get(fingerprint);
29
- });
30
- }
31
- getOrCreateSignatureKeyPair() {
32
- return __awaiter(this, void 0, void 0, function* () {
33
- if (!this.signatureKeypair) {
34
- const keyPair = yield this._primitives.RSA.generateSignatureKeyPair();
35
- const fingerprint = (0, icc_x_api_1.ua2hex)(yield this._primitives.RSA.exportKey(keyPair.publicKey, 'spki')).slice(-32);
36
- this.signatureKeypair = { keyPair, fingerprint };
37
- }
38
- return this.signatureKeypair;
39
- });
40
- }
41
- addVerificationKey(key) {
42
- return __awaiter(this, void 0, void 0, function* () {
43
- const fingerprint = (0, icc_x_api_1.ua2hex)(yield this._primitives.RSA.exportKey(key, 'spki')).slice(-32);
44
- this.extraKeys.set(fingerprint, key);
45
- return fingerprint;
46
- });
47
- }
48
- clearKeys() {
49
- this.extraKeys.clear();
50
- this.signatureKeypair = undefined;
51
- }
52
- }
53
- exports.FakeSignatureKeysManager = FakeSignatureKeysManager;
54
- //# sourceMappingURL=FakeSignatureKeysManager.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"FakeSignatureKeysManager.js","sourceRoot":"","sources":["../../../test/utils/FakeSignatureKeysManager.ts"],"names":[],"mappings":";;;;;;;;;;;;AACA,8FAA0F;AAE1F,+CAAwC;AAExC,MAAa,wBAAyB,SAAQ,mDAAwB;IACpE,YAA6B,WAA6B;QACxD,KAAK,CAAC,IAAW,EAAE,IAAW,EAAE,WAAW,CAAC,CAAA;QADjB,gBAAW,GAAX,WAAW,CAAkB;QAKlD,cAAS,GAA2B,IAAI,GAAG,EAAE,CAAA;IAHrD,CAAC;IAKK,2BAA2B,CAAC,WAAmB;;;YACnD,IAAI,CAAA,MAAA,IAAI,CAAC,gBAAgB,0CAAE,WAAW,MAAK,WAAW,EAAE;gBACtD,OAAO,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,SAAS,CAAA;aAC/C;;gBAAM,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,CAAA;;KAC9C;IAEK,2BAA2B;;YAC/B,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE;gBAC1B,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,wBAAwB,EAAE,CAAA;gBACrE,MAAM,WAAW,GAAG,IAAA,kBAAM,EAAC,MAAM,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAA;gBACtG,IAAI,CAAC,gBAAgB,GAAG,EAAE,OAAO,EAAE,WAAW,EAAE,CAAA;aACjD;YACD,OAAO,IAAI,CAAC,gBAAiB,CAAA;QAC/B,CAAC;KAAA;IAEK,kBAAkB,CAAC,GAAc;;YACrC,MAAM,WAAW,GAAG,IAAA,kBAAM,EAAC,MAAM,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAA;YACxF,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,EAAE,GAAG,CAAC,CAAA;YACpC,OAAO,WAAW,CAAA;QACpB,CAAC;KAAA;IAED,SAAS;QACP,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAA;QACtB,IAAI,CAAC,gBAAgB,GAAG,SAAS,CAAA;IACnC,CAAC;CACF;AAjCD,4DAiCC","sourcesContent":["import { KeyPair } from '../../icc-x-api/crypto/RSA'\nimport { UserSignatureKeysManager } from '../../icc-x-api/crypto/UserSignatureKeysManager'\nimport { CryptoPrimitives } from '../../icc-x-api/crypto/CryptoPrimitives'\nimport { ua2hex } from '../../icc-x-api'\n\nexport class FakeSignatureKeysManager extends UserSignatureKeysManager {\n constructor(private readonly _primitives: CryptoPrimitives) {\n super(null as any, null as any, _primitives)\n }\n\n private signatureKeypair: { fingerprint: string; keyPair: KeyPair<CryptoKey> } | undefined\n private extraKeys: Map<string, CryptoKey> = new Map()\n\n async getSignatureVerificationKey(fingerprint: string): Promise<CryptoKey | undefined> {\n if (this.signatureKeypair?.fingerprint === fingerprint) {\n return this.signatureKeypair.keyPair.publicKey\n } else return this.extraKeys.get(fingerprint)\n }\n\n async getOrCreateSignatureKeyPair(): Promise<{ fingerprint: string; keyPair: KeyPair<CryptoKey> }> {\n if (!this.signatureKeypair) {\n const keyPair = await this._primitives.RSA.generateSignatureKeyPair()\n const fingerprint = ua2hex(await this._primitives.RSA.exportKey(keyPair.publicKey, 'spki')).slice(-32)\n this.signatureKeypair = { keyPair, fingerprint }\n }\n return this.signatureKeypair!\n }\n\n async addVerificationKey(key: CryptoKey): Promise<string> {\n const fingerprint = ua2hex(await this._primitives.RSA.exportKey(key, 'spki')).slice(-32)\n this.extraKeys.set(fingerprint, key)\n return fingerprint\n }\n\n clearKeys() {\n this.extraKeys.clear()\n this.signatureKeypair = undefined\n }\n}\n"]}