@credo-ts/askar 0.6.1-pr-2091-20241119140918 → 0.6.1

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 (166) hide show
  1. package/build/AskarApi.d.mts +68 -0
  2. package/build/AskarApi.d.mts.map +1 -0
  3. package/build/AskarApi.mjs +94 -0
  4. package/build/AskarApi.mjs.map +1 -0
  5. package/build/AskarApiOptions.d.mts +29 -0
  6. package/build/AskarApiOptions.d.mts.map +1 -0
  7. package/build/AskarModule.d.mts +18 -0
  8. package/build/AskarModule.d.mts.map +1 -0
  9. package/build/AskarModule.mjs +61 -0
  10. package/build/AskarModule.mjs.map +1 -0
  11. package/build/AskarModuleConfig.d.mts +125 -0
  12. package/build/AskarModuleConfig.d.mts.map +1 -0
  13. package/build/AskarModuleConfig.mjs +41 -0
  14. package/build/AskarModuleConfig.mjs.map +1 -0
  15. package/build/AskarStorageConfig.d.mts +32 -0
  16. package/build/AskarStorageConfig.d.mts.map +1 -0
  17. package/build/AskarStorageConfig.mjs +11 -0
  18. package/build/AskarStorageConfig.mjs.map +1 -0
  19. package/build/AskarStoreManager.d.mts +109 -0
  20. package/build/AskarStoreManager.d.mts.map +1 -0
  21. package/build/AskarStoreManager.mjs +386 -0
  22. package/build/AskarStoreManager.mjs.map +1 -0
  23. package/build/_virtual/_@oxc-project_runtime@0.99.0/helpers/decorate.mjs +10 -0
  24. package/build/_virtual/_@oxc-project_runtime@0.99.0/helpers/decorateMetadata.mjs +7 -0
  25. package/build/_virtual/_@oxc-project_runtime@0.99.0/helpers/decorateParam.mjs +9 -0
  26. package/build/error/AskarError.d.mts +1 -0
  27. package/build/error/AskarError.mjs +12 -0
  28. package/build/error/AskarError.mjs.map +1 -0
  29. package/build/error/AskarStoreDuplicateError.d.mts +13 -0
  30. package/build/error/AskarStoreDuplicateError.d.mts.map +1 -0
  31. package/build/error/AskarStoreDuplicateError.mjs +12 -0
  32. package/build/error/AskarStoreDuplicateError.mjs.map +1 -0
  33. package/build/error/AskarStoreError.d.mts +13 -0
  34. package/build/error/AskarStoreError.d.mts.map +1 -0
  35. package/build/error/AskarStoreError.mjs +12 -0
  36. package/build/error/AskarStoreError.mjs.map +1 -0
  37. package/build/error/AskarStoreExportPathExistsError.d.mts +13 -0
  38. package/build/error/AskarStoreExportPathExistsError.d.mts.map +1 -0
  39. package/build/error/AskarStoreExportPathExistsError.mjs +12 -0
  40. package/build/error/AskarStoreExportPathExistsError.mjs.map +1 -0
  41. package/build/error/AskarStoreExportUnsupportedError.d.mts +13 -0
  42. package/build/error/AskarStoreExportUnsupportedError.d.mts.map +1 -0
  43. package/build/error/AskarStoreExportUnsupportedError.mjs +12 -0
  44. package/build/error/AskarStoreExportUnsupportedError.mjs.map +1 -0
  45. package/build/error/AskarStoreImportPathExistsError.d.mts +13 -0
  46. package/build/error/AskarStoreImportPathExistsError.d.mts.map +1 -0
  47. package/build/error/AskarStoreImportPathExistsError.mjs +12 -0
  48. package/build/error/AskarStoreImportPathExistsError.mjs.map +1 -0
  49. package/build/error/AskarStoreInvalidKeyError.d.mts +13 -0
  50. package/build/error/AskarStoreInvalidKeyError.d.mts.map +1 -0
  51. package/build/error/AskarStoreInvalidKeyError.mjs +12 -0
  52. package/build/error/AskarStoreInvalidKeyError.mjs.map +1 -0
  53. package/build/error/AskarStoreNotFoundError.d.mts +13 -0
  54. package/build/error/AskarStoreNotFoundError.d.mts.map +1 -0
  55. package/build/error/AskarStoreNotFoundError.mjs +12 -0
  56. package/build/error/AskarStoreNotFoundError.mjs.map +1 -0
  57. package/build/error/index.d.mts +8 -0
  58. package/build/error/index.mjs +8 -0
  59. package/build/index.d.mts +19 -0
  60. package/build/index.mjs +19 -0
  61. package/build/kms/AskarKeyManagementService.d.mts +30 -0
  62. package/build/kms/AskarKeyManagementService.d.mts.map +1 -0
  63. package/build/kms/AskarKeyManagementService.mjs +415 -0
  64. package/build/kms/AskarKeyManagementService.mjs.map +1 -0
  65. package/build/kms/crypto/decrypt.mjs +21 -0
  66. package/build/kms/crypto/decrypt.mjs.map +1 -0
  67. package/build/kms/crypto/deriveKey.mjs +87 -0
  68. package/build/kms/crypto/deriveKey.mjs.map +1 -0
  69. package/build/kms/crypto/encrypt.mjs +24 -0
  70. package/build/kms/crypto/encrypt.mjs.map +1 -0
  71. package/build/kms/crypto/randomBytes.mjs +19 -0
  72. package/build/kms/crypto/randomBytes.mjs.map +1 -0
  73. package/build/storage/AskarStorageService.d.mts +34 -0
  74. package/build/storage/AskarStorageService.d.mts.map +1 -0
  75. package/build/storage/AskarStorageService.mjs +169 -0
  76. package/build/storage/AskarStorageService.mjs.map +1 -0
  77. package/build/storage/index.d.mts +1 -0
  78. package/build/storage/index.mjs +1 -0
  79. package/build/storage/utils.d.mts +8 -0
  80. package/build/storage/utils.d.mts.map +1 -0
  81. package/build/storage/utils.mjs +58 -0
  82. package/build/storage/utils.mjs.map +1 -0
  83. package/build/tenants.mjs +42 -0
  84. package/build/tenants.mjs.map +1 -0
  85. package/build/utils/askarError.d.mts +1 -0
  86. package/build/utils/askarError.mjs +21 -0
  87. package/build/utils/askarError.mjs.map +1 -0
  88. package/build/utils/askarKeyTypes.d.mts +2 -0
  89. package/build/utils/askarKeyTypes.mjs +25 -0
  90. package/build/utils/askarKeyTypes.mjs.map +1 -0
  91. package/build/utils/askarStoreConfig.d.mts +2 -0
  92. package/build/utils/askarStoreConfig.mjs +47 -0
  93. package/build/utils/askarStoreConfig.mjs.map +1 -0
  94. package/build/utils/index.d.mts +4 -0
  95. package/build/utils/index.mjs +4 -0
  96. package/build/utils/transformPrivateKey.d.mts +73 -0
  97. package/build/utils/transformPrivateKey.d.mts.map +1 -0
  98. package/build/utils/transformPrivateKey.mjs +73 -0
  99. package/build/utils/transformPrivateKey.mjs.map +1 -0
  100. package/package.json +21 -29
  101. package/build/AskarModule.d.ts +0 -9
  102. package/build/AskarModule.js +0 -58
  103. package/build/AskarModule.js.map +0 -1
  104. package/build/AskarModuleConfig.d.ts +0 -68
  105. package/build/AskarModuleConfig.js +0 -33
  106. package/build/AskarModuleConfig.js.map +0 -1
  107. package/build/index.d.ts +0 -4
  108. package/build/index.js +0 -16
  109. package/build/index.js.map +0 -1
  110. package/build/secureEnvironment/index.d.ts +0 -1
  111. package/build/secureEnvironment/index.js +0 -18
  112. package/build/secureEnvironment/index.js.map +0 -1
  113. package/build/secureEnvironment/secureEnvironment.d.ts +0 -5
  114. package/build/secureEnvironment/secureEnvironment.js +0 -7
  115. package/build/secureEnvironment/secureEnvironment.js.map +0 -1
  116. package/build/secureEnvironment/secureEnvironment.native.d.ts +0 -1
  117. package/build/secureEnvironment/secureEnvironment.native.js +0 -14
  118. package/build/secureEnvironment/secureEnvironment.native.js.map +0 -1
  119. package/build/storage/AskarStorageService.d.ts +0 -17
  120. package/build/storage/AskarStorageService.js +0 -141
  121. package/build/storage/AskarStorageService.js.map +0 -1
  122. package/build/storage/index.d.ts +0 -1
  123. package/build/storage/index.js +0 -18
  124. package/build/storage/index.js.map +0 -1
  125. package/build/storage/utils.d.ts +0 -15
  126. package/build/storage/utils.js +0 -109
  127. package/build/storage/utils.js.map +0 -1
  128. package/build/utils/askarError.d.ts +0 -14
  129. package/build/utils/askarError.js +0 -20
  130. package/build/utils/askarError.js.map +0 -1
  131. package/build/utils/askarKeyBackend.d.ts +0 -3
  132. package/build/utils/askarKeyBackend.js +0 -15
  133. package/build/utils/askarKeyBackend.js.map +0 -1
  134. package/build/utils/askarKeyTypes.d.ts +0 -8
  135. package/build/utils/askarKeyTypes.js +0 -46
  136. package/build/utils/askarKeyTypes.js.map +0 -1
  137. package/build/utils/askarWalletConfig.d.ts +0 -14
  138. package/build/utils/askarWalletConfig.js +0 -75
  139. package/build/utils/askarWalletConfig.js.map +0 -1
  140. package/build/utils/assertAskarWallet.d.ts +0 -3
  141. package/build/utils/assertAskarWallet.js +0 -14
  142. package/build/utils/assertAskarWallet.js.map +0 -1
  143. package/build/utils/index.d.ts +0 -3
  144. package/build/utils/index.js +0 -20
  145. package/build/utils/index.js.map +0 -1
  146. package/build/wallet/AskarBaseWallet.d.ts +0 -112
  147. package/build/wallet/AskarBaseWallet.js +0 -540
  148. package/build/wallet/AskarBaseWallet.js.map +0 -1
  149. package/build/wallet/AskarProfileWallet.d.ts +0 -24
  150. package/build/wallet/AskarProfileWallet.js +0 -150
  151. package/build/wallet/AskarProfileWallet.js.map +0 -1
  152. package/build/wallet/AskarWallet.d.ts +0 -58
  153. package/build/wallet/AskarWallet.js +0 -342
  154. package/build/wallet/AskarWallet.js.map +0 -1
  155. package/build/wallet/AskarWalletStorageConfig.d.ts +0 -31
  156. package/build/wallet/AskarWalletStorageConfig.js +0 -11
  157. package/build/wallet/AskarWalletStorageConfig.js.map +0 -1
  158. package/build/wallet/JweEnvelope.d.ts +0 -32
  159. package/build/wallet/JweEnvelope.js +0 -55
  160. package/build/wallet/JweEnvelope.js.map +0 -1
  161. package/build/wallet/didcommV1.d.ts +0 -8
  162. package/build/wallet/didcommV1.js +0 -155
  163. package/build/wallet/didcommV1.js.map +0 -1
  164. package/build/wallet/index.d.ts +0 -3
  165. package/build/wallet/index.js +0 -23
  166. package/build/wallet/index.js.map +0 -1
@@ -0,0 +1,13 @@
1
+ import { AskarStoreError } from "./AskarStoreError.mjs";
2
+
3
+ //#region src/error/AskarStoreImportPathExistsError.d.ts
4
+ declare class AskarStoreImportPathExistsError extends AskarStoreError {
5
+ constructor(message: string, {
6
+ cause
7
+ }?: {
8
+ cause?: Error;
9
+ });
10
+ }
11
+ //#endregion
12
+ export { AskarStoreImportPathExistsError };
13
+ //# sourceMappingURL=AskarStoreImportPathExistsError.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AskarStoreImportPathExistsError.d.mts","names":[],"sources":["../../src/error/AskarStoreImportPathExistsError.ts"],"sourcesContent":[],"mappings":";;;cAEa,+BAAA,SAAwC,eAAA;;;EACb,CAAA;IAD3B,KAAA,CAAA,EAC8C,KAD9C;EAC2B,CAAA"}
@@ -0,0 +1,12 @@
1
+ import { AskarStoreError } from "./AskarStoreError.mjs";
2
+
3
+ //#region src/error/AskarStoreImportPathExistsError.ts
4
+ var AskarStoreImportPathExistsError = class extends AskarStoreError {
5
+ constructor(message, { cause } = {}) {
6
+ super(message, { cause });
7
+ }
8
+ };
9
+
10
+ //#endregion
11
+ export { AskarStoreImportPathExistsError };
12
+ //# sourceMappingURL=AskarStoreImportPathExistsError.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AskarStoreImportPathExistsError.mjs","names":[],"sources":["../../src/error/AskarStoreImportPathExistsError.ts"],"sourcesContent":["import { AskarStoreError } from './AskarStoreError'\n\nexport class AskarStoreImportPathExistsError extends AskarStoreError {\n public constructor(message: string, { cause }: { cause?: Error } = {}) {\n super(message, { cause })\n }\n}\n"],"mappings":";;;AAEA,IAAa,kCAAb,cAAqD,gBAAgB;CACnE,AAAO,YAAY,SAAiB,EAAE,UAA6B,EAAE,EAAE;AACrE,QAAM,SAAS,EAAE,OAAO,CAAC"}
@@ -0,0 +1,13 @@
1
+ import { AskarStoreError } from "./AskarStoreError.mjs";
2
+
3
+ //#region src/error/AskarStoreInvalidKeyError.d.ts
4
+ declare class AskarStoreInvalidKeyError extends AskarStoreError {
5
+ constructor(message: string, {
6
+ cause
7
+ }?: {
8
+ cause?: Error;
9
+ });
10
+ }
11
+ //#endregion
12
+ export { AskarStoreInvalidKeyError };
13
+ //# sourceMappingURL=AskarStoreInvalidKeyError.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AskarStoreInvalidKeyError.d.mts","names":[],"sources":["../../src/error/AskarStoreInvalidKeyError.ts"],"sourcesContent":[],"mappings":";;;cAEa,yBAAA,SAAkC,eAAA;;;EACP,CAAA;IAD3B,KAAA,CAAA,EAC8C,KAD9C;EAC2B,CAAA"}
@@ -0,0 +1,12 @@
1
+ import { AskarStoreError } from "./AskarStoreError.mjs";
2
+
3
+ //#region src/error/AskarStoreInvalidKeyError.ts
4
+ var AskarStoreInvalidKeyError = class extends AskarStoreError {
5
+ constructor(message, { cause } = {}) {
6
+ super(message, { cause });
7
+ }
8
+ };
9
+
10
+ //#endregion
11
+ export { AskarStoreInvalidKeyError };
12
+ //# sourceMappingURL=AskarStoreInvalidKeyError.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AskarStoreInvalidKeyError.mjs","names":[],"sources":["../../src/error/AskarStoreInvalidKeyError.ts"],"sourcesContent":["import { AskarStoreError } from './AskarStoreError'\n\nexport class AskarStoreInvalidKeyError extends AskarStoreError {\n public constructor(message: string, { cause }: { cause?: Error } = {}) {\n super(message, { cause })\n }\n}\n"],"mappings":";;;AAEA,IAAa,4BAAb,cAA+C,gBAAgB;CAC7D,AAAO,YAAY,SAAiB,EAAE,UAA6B,EAAE,EAAE;AACrE,QAAM,SAAS,EAAE,OAAO,CAAC"}
@@ -0,0 +1,13 @@
1
+ import { AskarStoreError } from "./AskarStoreError.mjs";
2
+
3
+ //#region src/error/AskarStoreNotFoundError.d.ts
4
+ declare class AskarStoreNotFoundError extends AskarStoreError {
5
+ constructor(message: string, {
6
+ cause
7
+ }?: {
8
+ cause?: Error;
9
+ });
10
+ }
11
+ //#endregion
12
+ export { AskarStoreNotFoundError };
13
+ //# sourceMappingURL=AskarStoreNotFoundError.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AskarStoreNotFoundError.d.mts","names":[],"sources":["../../src/error/AskarStoreNotFoundError.ts"],"sourcesContent":[],"mappings":";;;cAEa,uBAAA,SAAgC,eAAA;;;EACL,CAAA;IAD3B,KAAA,CAAA,EAC8C,KAD9C;EAC2B,CAAA"}
@@ -0,0 +1,12 @@
1
+ import { AskarStoreError } from "./AskarStoreError.mjs";
2
+
3
+ //#region src/error/AskarStoreNotFoundError.ts
4
+ var AskarStoreNotFoundError = class extends AskarStoreError {
5
+ constructor(message, { cause } = {}) {
6
+ super(message, { cause });
7
+ }
8
+ };
9
+
10
+ //#endregion
11
+ export { AskarStoreNotFoundError };
12
+ //# sourceMappingURL=AskarStoreNotFoundError.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AskarStoreNotFoundError.mjs","names":[],"sources":["../../src/error/AskarStoreNotFoundError.ts"],"sourcesContent":["import { AskarStoreError } from './AskarStoreError'\n\nexport class AskarStoreNotFoundError extends AskarStoreError {\n public constructor(message: string, { cause }: { cause?: Error } = {}) {\n super(message, { cause })\n }\n}\n"],"mappings":";;;AAEA,IAAa,0BAAb,cAA6C,gBAAgB;CAC3D,AAAO,YAAY,SAAiB,EAAE,UAA6B,EAAE,EAAE;AACrE,QAAM,SAAS,EAAE,OAAO,CAAC"}
@@ -0,0 +1,8 @@
1
+ import "./AskarError.mjs";
2
+ import { AskarStoreError } from "./AskarStoreError.mjs";
3
+ import { AskarStoreDuplicateError } from "./AskarStoreDuplicateError.mjs";
4
+ import { AskarStoreExportPathExistsError } from "./AskarStoreExportPathExistsError.mjs";
5
+ import { AskarStoreExportUnsupportedError } from "./AskarStoreExportUnsupportedError.mjs";
6
+ import { AskarStoreImportPathExistsError } from "./AskarStoreImportPathExistsError.mjs";
7
+ import { AskarStoreInvalidKeyError } from "./AskarStoreInvalidKeyError.mjs";
8
+ import { AskarStoreNotFoundError } from "./AskarStoreNotFoundError.mjs";
@@ -0,0 +1,8 @@
1
+ import { AskarError } from "./AskarError.mjs";
2
+ import { AskarStoreError } from "./AskarStoreError.mjs";
3
+ import { AskarStoreDuplicateError } from "./AskarStoreDuplicateError.mjs";
4
+ import { AskarStoreExportPathExistsError } from "./AskarStoreExportPathExistsError.mjs";
5
+ import { AskarStoreExportUnsupportedError } from "./AskarStoreExportUnsupportedError.mjs";
6
+ import { AskarStoreImportPathExistsError } from "./AskarStoreImportPathExistsError.mjs";
7
+ import { AskarStoreInvalidKeyError } from "./AskarStoreInvalidKeyError.mjs";
8
+ import { AskarStoreNotFoundError } from "./AskarStoreNotFoundError.mjs";
@@ -0,0 +1,19 @@
1
+ import { AskarPostgresConfig, AskarPostgresCredentials, AskarPostgresStorageConfig, AskarSqliteConfig, AskarSqliteStorageConfig } from "./AskarStorageConfig.mjs";
2
+ import { AskarModuleConfig, AskarModuleConfigOptions, AskarModuleConfigStoreOptions, AskarMultiWalletDatabaseScheme } from "./AskarModuleConfig.mjs";
3
+ import { AskarStoreManager } from "./AskarStoreManager.mjs";
4
+ import { AskarModule } from "./AskarModule.mjs";
5
+ import { AskarStoreError } from "./error/AskarStoreError.mjs";
6
+ import { AskarStoreDuplicateError } from "./error/AskarStoreDuplicateError.mjs";
7
+ import { AskarStoreExportPathExistsError } from "./error/AskarStoreExportPathExistsError.mjs";
8
+ import { AskarStoreExportUnsupportedError } from "./error/AskarStoreExportUnsupportedError.mjs";
9
+ import { AskarStoreImportPathExistsError } from "./error/AskarStoreImportPathExistsError.mjs";
10
+ import { AskarStoreInvalidKeyError } from "./error/AskarStoreInvalidKeyError.mjs";
11
+ import { AskarStoreNotFoundError } from "./error/AskarStoreNotFoundError.mjs";
12
+ import "./error/index.mjs";
13
+ import { AskarKeyManagementService } from "./kms/AskarKeyManagementService.mjs";
14
+ import { AskarStorageService } from "./storage/AskarStorageService.mjs";
15
+ import "./storage/index.mjs";
16
+ import { recordToInstance } from "./storage/utils.mjs";
17
+ import { transformPrivateKeyToPrivateJwk, transformSeedToPrivateJwk } from "./utils/transformPrivateKey.mjs";
18
+ import "./utils/index.mjs";
19
+ export { AskarKeyManagementService, AskarModule, AskarModuleConfig, type AskarModuleConfigOptions, type AskarModuleConfigStoreOptions, AskarMultiWalletDatabaseScheme, type AskarPostgresConfig, type AskarPostgresCredentials, type AskarPostgresStorageConfig, type AskarSqliteConfig, type AskarSqliteStorageConfig, AskarStorageService, AskarStoreDuplicateError, AskarStoreError, AskarStoreExportPathExistsError, AskarStoreExportUnsupportedError, AskarStoreImportPathExistsError, AskarStoreInvalidKeyError, AskarStoreManager, AskarStoreNotFoundError, recordToInstance, transformPrivateKeyToPrivateJwk, transformSeedToPrivateJwk };
@@ -0,0 +1,19 @@
1
+ import { AskarModuleConfig, AskarMultiWalletDatabaseScheme } from "./AskarModuleConfig.mjs";
2
+ import { AskarStoreError } from "./error/AskarStoreError.mjs";
3
+ import { AskarStoreDuplicateError } from "./error/AskarStoreDuplicateError.mjs";
4
+ import { AskarStoreExportPathExistsError } from "./error/AskarStoreExportPathExistsError.mjs";
5
+ import { AskarStoreExportUnsupportedError } from "./error/AskarStoreExportUnsupportedError.mjs";
6
+ import { AskarStoreImportPathExistsError } from "./error/AskarStoreImportPathExistsError.mjs";
7
+ import { AskarStoreInvalidKeyError } from "./error/AskarStoreInvalidKeyError.mjs";
8
+ import { AskarStoreNotFoundError } from "./error/AskarStoreNotFoundError.mjs";
9
+ import "./error/index.mjs";
10
+ import { recordToInstance } from "./storage/utils.mjs";
11
+ import { transformPrivateKeyToPrivateJwk, transformSeedToPrivateJwk } from "./utils/transformPrivateKey.mjs";
12
+ import "./utils/index.mjs";
13
+ import { AskarStoreManager } from "./AskarStoreManager.mjs";
14
+ import { AskarKeyManagementService } from "./kms/AskarKeyManagementService.mjs";
15
+ import { AskarStorageService } from "./storage/AskarStorageService.mjs";
16
+ import "./storage/index.mjs";
17
+ import { AskarModule } from "./AskarModule.mjs";
18
+
19
+ export { AskarKeyManagementService, AskarModule, AskarModuleConfig, AskarMultiWalletDatabaseScheme, AskarStorageService, AskarStoreDuplicateError, AskarStoreError, AskarStoreExportPathExistsError, AskarStoreExportUnsupportedError, AskarStoreImportPathExistsError, AskarStoreInvalidKeyError, AskarStoreManager, AskarStoreNotFoundError, recordToInstance, transformPrivateKeyToPrivateJwk, transformSeedToPrivateJwk };
@@ -0,0 +1,30 @@
1
+ import { AgentContext, Kms } from "@credo-ts/core";
2
+
3
+ //#region src/kms/AskarKeyManagementService.d.ts
4
+ declare class AskarKeyManagementService implements Kms.KeyManagementService {
5
+ static readonly backend = "askar";
6
+ readonly backend = "askar";
7
+ private static algToSigType;
8
+ private withSession;
9
+ isOperationSupported(_agentContext: AgentContext, operation: Kms.KmsOperation): boolean;
10
+ randomBytes(_agentContext: AgentContext, options: Kms.KmsRandomBytesOptions): Kms.KmsRandomBytesReturn;
11
+ getPublicKey(agentContext: AgentContext, keyId: string): Promise<Kms.KmsJwkPublic | null>;
12
+ importKey<Jwk extends Kms.KmsJwkPrivate>(agentContext: AgentContext, options: Kms.KmsImportKeyOptions<Jwk>): Promise<Kms.KmsImportKeyReturn<Jwk>>;
13
+ deleteKey(agentContext: AgentContext, options: Kms.KmsDeleteKeyOptions): Promise<boolean>;
14
+ createKey<Type extends Kms.KmsCreateKeyType>(agentContext: AgentContext, options: Kms.KmsCreateKeyOptions<Type>): Promise<Kms.KmsCreateKeyReturn<Type>>;
15
+ sign(agentContext: AgentContext, options: Kms.KmsSignOptions): Promise<Kms.KmsSignReturn>;
16
+ verify(agentContext: AgentContext, options: Kms.KmsVerifyOptions): Promise<Kms.KmsVerifyReturn>;
17
+ encrypt(agentContext: AgentContext, options: Kms.KmsEncryptOptions): Promise<Kms.KmsEncryptReturn>;
18
+ decrypt(agentContext: AgentContext, options: Kms.KmsDecryptOptions): Promise<Kms.KmsDecryptReturn>;
19
+ private assertedSigTypeForAlg;
20
+ private assertAskarAlgForJwkCrv;
21
+ private keyFromJwk;
22
+ private keyFromSecretBytesAndEncryptionAlgorithm;
23
+ private publicJwkFromKey;
24
+ private privateJwkFromKey;
25
+ private fetchAskarKey;
26
+ private getKeyAsserted;
27
+ }
28
+ //#endregion
29
+ export { AskarKeyManagementService };
30
+ //# sourceMappingURL=AskarKeyManagementService.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AskarKeyManagementService.d.mts","names":[],"sources":["../../src/kms/AskarKeyManagementService.ts"],"sourcesContent":[],"mappings":";;;cAwBa,yBAAA,YAAqC,GAAA,CAAI;;EAAzC,SAAA,OAAA,GAAA,OAAA;EAgBgC,eAAA,YAAA;EAAyB,QAAI,WAAA;EA6DtC,oBAAA,CAAA,aAAA,EA7DS,YA6DT,EAAA,SAAA,EA7DkC,GAAA,CAAI,YA6DtC,CAAA,EAAA,OAAA;EAAuB,WAAI,CAAA,aAAA,EAA3B,YAA2B,EAAA,OAAA,EAAJ,GAAA,CAAI,qBAAA,CAAA,EAAwB,GAAA,CAAI,oBAA5B;EAAwB,YAAI,CAAA,YAAA,EAIjD,YAJiD,EAAA,KAAA,EAAA,MAAA,CAAA,EAInB,OAJmB,CAIX,GAAA,CAAI,YAJO,GAAA,IAAA,CAAA;EAIjD,SAAA,CAAA,YAOL,GAAA,CAAI,aAPC,CAAA,CAAA,YAAA,EAQxB,YARwB,EAAA,OAAA,EAS7B,GAAA,CAAI,mBATyB,CASL,GATK,CAAA,CAAA,EAUrC,OAVqC,CAU7B,GAAA,CAAI,kBAVyB,CAUN,GAVM,CAAA,CAAA;EAAsC,SAAI,CAAA,YAAA,EAgE7C,YAhE6C,EAAA,OAAA,EAgEtB,GAAA,CAAI,mBAhEkB,CAAA,EAgEI,OAhEJ,CAAA,OAAA,CAAA;EAAZ,SAAA,CAAA,aA8ElC,GAAA,CAAI,gBA9E8B,CAAA,CAAA,YAAA,EA+EtD,YA/EsD,EAAA,OAAA,EAgF3D,GAAA,CAAI,mBAhFuD,CAgFnC,IAhFmC,CAAA,CAAA,EAiFnE,OAjFmE,CAiF3D,GAAA,CAAI,kBAjFuD,CAiFpC,IAjFoC,CAAA,CAAA;EAOnC,IAAI,CAAA,YAAA,EA+IP,YA/IO,EAAA,OAAA,EA+IgB,GAAA,CAAI,cA/IpB,CAAA,EA+IqC,OA/IrC,CA+I6C,GAAA,CAAI,aA/IjD,CAAA;EACvB,MAAA,CAAA,YAAA,EAoLkB,YApLlB,EAAA,OAAA,EAoLyC,GAAA,CAAI,gBApL7C,CAAA,EAoLgE,OApLhE,CAoLwE,GAAA,CAAI,eApL5E,CAAA;EACmB,OAAA,CAAA,YAAA,EAwPA,YAxPA,EAAA,OAAA,EAwPuB,GAAA,CAAI,iBAxP3B,CAAA,EAwP+C,OAxP/C,CAwPuD,GAAA,CAAI,gBAxP3D,CAAA;EAAxB,OAAI,CAAA,YAAA,EA6YoB,YA7YpB,EAAA,OAAA,EA6Y2C,GAAA,CAAI,iBA7Y/C,CAAA,EA6YmE,OA7YnE,CA6Y2E,GAAA,CAAI,gBA7Y/E,CAAA;EACmB,QAAA,qBAAA;EAAvB,QAAI,uBAAA;EAAZ,QAAA,UAAA;EAsDkC,QAAA,wCAAA;EAAuB,QAAI,gBAAA;EAAsB,QAAA,iBAAA;EAclD,QAAI,aAAA;EACxB,QAAA,cAAA"}
@@ -0,0 +1,415 @@
1
+ import { AskarErrorCode, isAskarError } from "../utils/askarError.mjs";
2
+ import { jwkCrvToAskarAlg, jwkEncToAskarAlg } from "../utils/askarKeyTypes.mjs";
3
+ import "../utils/index.mjs";
4
+ import { AskarStoreManager } from "../AskarStoreManager.mjs";
5
+ import { aeadDecrypt } from "./crypto/decrypt.mjs";
6
+ import { askarSupportedKeyAgreementAlgorithms, deriveDecryptionKey, deriveEncryptionKey } from "./crypto/deriveKey.mjs";
7
+ import { aeadEncrypt } from "./crypto/encrypt.mjs";
8
+ import { randomBytes } from "./crypto/randomBytes.mjs";
9
+ import { JsonEncoder, Kms, TypedArrayEncoder, utils } from "@credo-ts/core";
10
+ import { CryptoBox, Jwk, Key, KeyAlgorithm, KeyEntryList, SignatureAlgorithm, askar } from "@openwallet-foundation/askar-shared";
11
+
12
+ //#region src/kms/AskarKeyManagementService.ts
13
+ const askarSupportedEncryptionAlgorithms = [...Object.keys(jwkEncToAskarAlg), "XSALSA20-POLY1305"];
14
+ var AskarKeyManagementService = class AskarKeyManagementService {
15
+ constructor() {
16
+ this.backend = AskarKeyManagementService.backend;
17
+ }
18
+ withSession(agentContext, callback) {
19
+ return agentContext.dependencyManager.resolve(AskarStoreManager).withSession(agentContext, callback);
20
+ }
21
+ isOperationSupported(_agentContext, operation) {
22
+ if (operation.operation === "deleteKey") return true;
23
+ if (operation.operation === "randomBytes") return true;
24
+ if (operation.operation === "importKey") {
25
+ if (operation.privateJwk.kty === "EC" || operation.privateJwk.kty === "OKP") return jwkCrvToAskarAlg[operation.privateJwk.crv] !== void 0;
26
+ return false;
27
+ }
28
+ if (operation.operation === "createKey") {
29
+ if (operation.type.kty === "EC" || operation.type.kty === "OKP") return jwkCrvToAskarAlg[operation.type.crv] !== void 0;
30
+ if (operation.type.kty === "oct") {
31
+ if (operation.type.algorithm === "C20P") return true;
32
+ if (operation.type.algorithm === "aes") return [128, 256].includes(operation.type.length);
33
+ }
34
+ return false;
35
+ }
36
+ if (operation.operation === "sign" || operation.operation === "verify") return AskarKeyManagementService.algToSigType[operation.algorithm] !== void 0;
37
+ if (operation.operation === "encrypt") {
38
+ if (!askarSupportedEncryptionAlgorithms.includes(operation.encryption.algorithm)) return false;
39
+ if (!operation.keyAgreement) return true;
40
+ return askarSupportedKeyAgreementAlgorithms.includes(operation.keyAgreement.algorithm);
41
+ }
42
+ if (operation.operation === "decrypt") {
43
+ if (!askarSupportedEncryptionAlgorithms.includes(operation.decryption.algorithm)) return false;
44
+ if (!operation.keyAgreement) return true;
45
+ return askarSupportedKeyAgreementAlgorithms.includes(operation.keyAgreement.algorithm);
46
+ }
47
+ return false;
48
+ }
49
+ randomBytes(_agentContext, options) {
50
+ return randomBytes(options.length);
51
+ }
52
+ async getPublicKey(agentContext, keyId) {
53
+ const key = await this.fetchAskarKey(agentContext, keyId);
54
+ if (!key) return null;
55
+ return this.publicJwkFromKey(key.key, { kid: keyId });
56
+ }
57
+ async importKey(agentContext, options) {
58
+ const { kid } = options.privateJwk;
59
+ const privateJwk = {
60
+ ...options.privateJwk,
61
+ kid: kid ?? utils.uuid()
62
+ };
63
+ let key;
64
+ try {
65
+ if (privateJwk.kty === "oct") throw new Kms.KeyManagementAlgorithmNotSupportedError(`importing keys with kty '${privateJwk.kty}'`, this.backend);
66
+ if (privateJwk.kty === "EC" || privateJwk.kty === "OKP") {
67
+ this.assertAskarAlgForJwkCrv(privateJwk.kty, privateJwk.crv);
68
+ key = Key.fromJwk({ jwk: Jwk.fromJson(privateJwk) });
69
+ }
70
+ const _key = key;
71
+ if (!_key) throw new Kms.KeyManagementAlgorithmNotSupportedError(`kty '${privateJwk.kty}'`, this.backend);
72
+ await this.withSession(agentContext, (session) => session.insertKey({
73
+ name: privateJwk.kid,
74
+ key: _key
75
+ }));
76
+ const publicJwk = Kms.publicJwkFromPrivateJwk(privateJwk);
77
+ return {
78
+ keyId: privateJwk.kid,
79
+ publicJwk: {
80
+ ...publicJwk,
81
+ kid: privateJwk.kid
82
+ }
83
+ };
84
+ } catch (error) {
85
+ if (error instanceof Kms.KeyManagementError) throw error;
86
+ if (isAskarError(error, AskarErrorCode.Duplicate)) throw new Kms.KeyManagementKeyExistsError(privateJwk.kid, this.backend);
87
+ throw new Kms.KeyManagementError("Error importing key", { cause: error });
88
+ } finally {
89
+ key?.handle.free();
90
+ }
91
+ }
92
+ async deleteKey(agentContext, options) {
93
+ try {
94
+ await this.withSession(agentContext, (session) => session.removeKey({ name: options.keyId }));
95
+ return true;
96
+ } catch (error) {
97
+ if (isAskarError(error, AskarErrorCode.NotFound)) return false;
98
+ throw new Kms.KeyManagementError(`Error deleting key with id '${options.keyId}'`, { cause: error });
99
+ }
100
+ }
101
+ async createKey(agentContext, options) {
102
+ const { type, keyId } = options;
103
+ const kid = keyId ?? utils.uuid();
104
+ let askarKey;
105
+ try {
106
+ if (type.kty === "EC" || type.kty === "OKP") {
107
+ const keyAlg = this.assertAskarAlgForJwkCrv(type.kty, type.crv);
108
+ askarKey = Key.generate(keyAlg);
109
+ } else if (type.kty === "oct") if (type.algorithm === "aes") {
110
+ const lengthToKeyAlg = {
111
+ 128: KeyAlgorithm.AesA128Gcm,
112
+ 256: KeyAlgorithm.AesA256Gcm,
113
+ 512: KeyAlgorithm.AesA256CbcHs512
114
+ };
115
+ const keyAlg = lengthToKeyAlg[type.length];
116
+ if (!keyAlg) throw new Kms.KeyManagementAlgorithmNotSupportedError(`length '${type.length}' for kty '${type.kty}' with algorithm '${type.algorithm}'. Supported length values are ${Object.keys(lengthToKeyAlg).join(", ")}`, this.backend);
117
+ askarKey = Key.generate(keyAlg);
118
+ } else if (type.algorithm === "C20P") askarKey = Key.generate(KeyAlgorithm.Chacha20C20P);
119
+ else throw new Kms.KeyManagementAlgorithmNotSupportedError(`algorithm '${type.algorithm}' for kty '${type.kty}'`, this.backend);
120
+ const _key = askarKey;
121
+ if (!_key) throw new Kms.KeyManagementAlgorithmNotSupportedError(`kty '${type.kty}'`, this.backend);
122
+ const publicJwk = this.publicJwkFromKey(_key, { kid });
123
+ await this.withSession(agentContext, (session) => session.insertKey({
124
+ name: kid,
125
+ key: _key
126
+ }));
127
+ return {
128
+ publicJwk,
129
+ keyId: kid
130
+ };
131
+ } catch (error) {
132
+ if (error instanceof Kms.KeyManagementError) throw error;
133
+ if (isAskarError(error, AskarErrorCode.Duplicate)) throw new Kms.KeyManagementKeyExistsError(kid, this.backend);
134
+ throw new Kms.KeyManagementError("Error creating key", { cause: error });
135
+ } finally {
136
+ askarKey?.handle.free();
137
+ }
138
+ }
139
+ async sign(agentContext, options) {
140
+ const { keyId, algorithm, data } = options;
141
+ const key = await this.getKeyAsserted(agentContext, keyId);
142
+ try {
143
+ const sigType = this.assertedSigTypeForAlg(algorithm);
144
+ if (!key.key) throw new Kms.KeyManagementAlgorithmNotSupportedError(`algorithm ${algorithm}`, this.backend);
145
+ const publicJwk = this.publicJwkFromKey(key.key, { kid: keyId });
146
+ const privateJwk = this.privateJwkFromKey(key.key, { kid: keyId });
147
+ Kms.assertAllowedSigningAlgForKey(privateJwk, algorithm);
148
+ Kms.assertKeyAllowsSign(publicJwk);
149
+ const signature = key.key.signMessage({
150
+ message: new Uint8Array(data),
151
+ sigType
152
+ });
153
+ return { signature: new Uint8Array(signature) };
154
+ } catch (error) {
155
+ if (error instanceof Kms.KeyManagementError) throw error;
156
+ throw new Kms.KeyManagementError("Error signing with key", { cause: error });
157
+ } finally {
158
+ key.key?.handle.free();
159
+ }
160
+ }
161
+ async verify(agentContext, options) {
162
+ const { algorithm, data, signature, key: keyInput } = options;
163
+ const sigType = this.assertedSigTypeForAlg(algorithm);
164
+ let askarKey;
165
+ try {
166
+ if (keyInput.keyId) askarKey = (await this.getKeyAsserted(agentContext, keyInput.keyId)).key;
167
+ else if (keyInput.publicJwk?.kty === "EC" || keyInput.publicJwk?.kty === "OKP") {
168
+ this.assertAskarAlgForJwkCrv(keyInput.publicJwk.kty, keyInput.publicJwk.crv);
169
+ askarKey = Key.fromJwk({ jwk: Jwk.fromJson(keyInput.publicJwk) });
170
+ } else throw new Kms.KeyManagementAlgorithmNotSupportedError(`kty ${keyInput.publicJwk?.kty}`, this.backend);
171
+ if (!askarKey) throw new Kms.KeyManagementAlgorithmNotSupportedError(`algorithm ${algorithm}`, this.backend);
172
+ const keyId = keyInput.keyId ?? keyInput.publicJwk?.kid;
173
+ const publicJwk = this.publicJwkFromKey(askarKey, { kid: keyId });
174
+ if (publicJwk.kty === "oct") {
175
+ const privateJwk = this.privateJwkFromKey(askarKey, { kid: keyId });
176
+ Kms.assertAllowedSigningAlgForKey(privateJwk, algorithm);
177
+ Kms.assertKeyAllowsVerify(publicJwk);
178
+ } else {
179
+ Kms.assertAllowedSigningAlgForKey(publicJwk, algorithm);
180
+ Kms.assertKeyAllowsVerify(publicJwk);
181
+ }
182
+ if (askarKey.verifySignature({
183
+ message: new Uint8Array(data),
184
+ signature: new Uint8Array(signature),
185
+ sigType
186
+ })) return {
187
+ verified: true,
188
+ publicJwk: keyInput.keyId ? this.publicJwkFromKey(askarKey, { kid: keyId }) : keyInput.publicJwk
189
+ };
190
+ return { verified: false };
191
+ } catch (error) {
192
+ if (error instanceof Kms.KeyManagementError) throw error;
193
+ throw new Kms.KeyManagementError("Error verifying with key", { cause: error });
194
+ } finally {
195
+ if (askarKey) askarKey.handle.free();
196
+ }
197
+ }
198
+ async encrypt(agentContext, options) {
199
+ const { data, encryption, key } = options;
200
+ Kms.assertSupportedEncryptionAlgorithm(encryption, askarSupportedEncryptionAlgorithms, this.backend);
201
+ const keysToFree = [];
202
+ try {
203
+ let encryptionKey;
204
+ let encryptedKey;
205
+ if (key.keyId) {
206
+ encryptionKey = (await this.getKeyAsserted(agentContext, key.keyId)).key;
207
+ keysToFree.push(encryptionKey);
208
+ } else if (key.privateJwk) {
209
+ if (encryption.algorithm === "XSALSA20-POLY1305") throw new Kms.KeyManagementAlgorithmNotSupportedError(`encryption algorithm '${encryption.algorithm}' is only supported in combination with key agreement algorithm '${Kms.KnownJwaKeyAgreementAlgorithms.ECDH_HSALSA20}'`, this.backend);
210
+ encryptionKey = this.keyFromSecretBytesAndEncryptionAlgorithm(TypedArrayEncoder.fromBase64(key.privateJwk.k), encryption.algorithm);
211
+ keysToFree.push(encryptionKey);
212
+ } else if (key.keyAgreement) {
213
+ Kms.assertAllowedKeyDerivationAlgForKey(key.keyAgreement.externalPublicJwk, key.keyAgreement.algorithm);
214
+ Kms.assertKeyAllowsDerive(key.keyAgreement.externalPublicJwk);
215
+ Kms.assertSupportedKeyAgreementAlgorithm(key.keyAgreement, askarSupportedKeyAgreementAlgorithms, this.backend);
216
+ let privateKey = key.keyAgreement.keyId ? (await this.getKeyAsserted(agentContext, key.keyAgreement.keyId)).key : void 0;
217
+ if (privateKey) keysToFree.push(privateKey);
218
+ const privateJwk$1 = privateKey ? this.privateJwkFromKey(privateKey) : void 0;
219
+ if (privateJwk$1) {
220
+ Kms.assertJwkAsymmetric(privateJwk$1, key.keyAgreement.keyId);
221
+ Kms.assertAllowedKeyDerivationAlgForKey(privateJwk$1, key.keyAgreement.algorithm);
222
+ Kms.assertKeyAllowsDerive(privateJwk$1);
223
+ if (key.keyAgreement.algorithm !== "ECDH-HSALSA20") Kms.assertAsymmetricJwkKeyTypeMatches(privateJwk$1, key.keyAgreement.externalPublicJwk);
224
+ }
225
+ const recipientKey = this.keyFromJwk(key.keyAgreement.externalPublicJwk);
226
+ keysToFree.push(recipientKey);
227
+ if (key.keyAgreement.algorithm === "ECDH-HSALSA20" || encryption.algorithm === "XSALSA20-POLY1305") {
228
+ if (encryption.algorithm !== "XSALSA20-POLY1305" || key.keyAgreement.algorithm !== "ECDH-HSALSA20") throw new Kms.KeyManagementAlgorithmNotSupportedError(`key agreement algorithm '${key.keyAgreement.algorithm}' with encryption algorithm '${encryption.algorithm}'`, this.backend);
229
+ if (!privateKey) return { encrypted: new Uint8Array(CryptoBox.seal({
230
+ recipientKey,
231
+ message: new Uint8Array(data)
232
+ })) };
233
+ if (privateKey.algorithm === KeyAlgorithm.Ed25519) {
234
+ privateKey = privateKey.convertkey({ algorithm: KeyAlgorithm.X25519 });
235
+ keysToFree.push(privateKey);
236
+ }
237
+ const nonce = new Uint8Array(CryptoBox.randomNonce());
238
+ return {
239
+ encrypted: new Uint8Array(CryptoBox.cryptoBox({
240
+ recipientKey,
241
+ senderKey: privateKey,
242
+ message: new Uint8Array(data),
243
+ nonce
244
+ })),
245
+ iv: nonce
246
+ };
247
+ }
248
+ if (!privateKey) throw new Kms.KeyManagementError("sender key is required for ECDH-ES key derivation.");
249
+ const { contentEncryptionKey, encryptedContentEncryptionKey } = deriveEncryptionKey({
250
+ encryption,
251
+ keyAgreement: key.keyAgreement,
252
+ recipientKey,
253
+ senderKey: privateKey
254
+ });
255
+ encryptionKey = contentEncryptionKey;
256
+ keysToFree.push(contentEncryptionKey);
257
+ encryptedKey = encryptedContentEncryptionKey;
258
+ } else throw new Kms.KeyManagementError("Unexpected key parameter for encrypt");
259
+ if (encryption.algorithm === "XSALSA20-POLY1305") throw new Kms.KeyManagementAlgorithmNotSupportedError(`encryption algorithm '${encryption.algorithm}' can only be used with key agreement algorithm ECDH-HSALSA20`, this.backend);
260
+ const privateJwk = this.privateJwkFromKey(encryptionKey);
261
+ Kms.assertKeyAllowsDerive(privateJwk);
262
+ Kms.assertAllowedEncryptionAlgForKey(privateJwk, encryption.algorithm);
263
+ Kms.assertKeyAllowsEncrypt(privateJwk);
264
+ return {
265
+ ...aeadEncrypt({
266
+ key: encryptionKey,
267
+ data,
268
+ encryption
269
+ }),
270
+ encryptedKey
271
+ };
272
+ } catch (error) {
273
+ if (error instanceof Kms.KeyManagementError) throw error;
274
+ throw new Kms.KeyManagementError("Error encrypting with key", { cause: error });
275
+ } finally {
276
+ for (const key$1 of keysToFree) key$1.handle.free();
277
+ }
278
+ }
279
+ async decrypt(agentContext, options) {
280
+ const { encrypted, decryption, key } = options;
281
+ Kms.assertSupportedEncryptionAlgorithm(decryption, askarSupportedEncryptionAlgorithms, this.backend);
282
+ const keysToFree = [];
283
+ try {
284
+ let decryptionKey;
285
+ if (key.keyId) {
286
+ decryptionKey = (await this.getKeyAsserted(agentContext, key.keyId)).key;
287
+ keysToFree.push(decryptionKey);
288
+ } else if (key.privateJwk) {
289
+ if (decryption.algorithm === "XSALSA20-POLY1305") throw new Kms.KeyManagementAlgorithmNotSupportedError(`decryption algorithm '${decryption.algorithm}' is only supported in combination with key agreement algorithm '${Kms.KnownJwaKeyAgreementAlgorithms.ECDH_HSALSA20}'`, this.backend);
290
+ decryptionKey = this.keyFromSecretBytesAndEncryptionAlgorithm(TypedArrayEncoder.fromBase64(key.privateJwk.k), decryption.algorithm);
291
+ keysToFree.push(decryptionKey);
292
+ } else if (key.keyAgreement) {
293
+ if (key.keyAgreement.externalPublicJwk) {
294
+ Kms.assertAllowedKeyDerivationAlgForKey(key.keyAgreement.externalPublicJwk, key.keyAgreement.algorithm);
295
+ Kms.assertKeyAllowsDerive(key.keyAgreement.externalPublicJwk);
296
+ }
297
+ Kms.assertSupportedKeyAgreementAlgorithm(key.keyAgreement, askarSupportedKeyAgreementAlgorithms, this.backend);
298
+ let privateKey = (await this.getKeyAsserted(agentContext, key.keyAgreement.keyId)).key;
299
+ keysToFree.push(privateKey);
300
+ const privateJwk$1 = this.privateJwkFromKey(privateKey);
301
+ Kms.assertJwkAsymmetric(privateJwk$1, key.keyAgreement.keyId);
302
+ Kms.assertAllowedKeyDerivationAlgForKey(privateJwk$1, key.keyAgreement.algorithm);
303
+ Kms.assertKeyAllowsDerive(privateJwk$1);
304
+ if (key.keyAgreement.externalPublicJwk && key.keyAgreement.algorithm !== "ECDH-HSALSA20") Kms.assertAsymmetricJwkKeyTypeMatches(privateJwk$1, key.keyAgreement.externalPublicJwk);
305
+ const senderKey = key.keyAgreement.externalPublicJwk ? this.keyFromJwk(key.keyAgreement.externalPublicJwk) : void 0;
306
+ if (senderKey) keysToFree.push(senderKey);
307
+ if (key.keyAgreement.algorithm === "ECDH-HSALSA20" || decryption.algorithm === "XSALSA20-POLY1305") {
308
+ if (decryption.algorithm !== "XSALSA20-POLY1305" || key.keyAgreement.algorithm !== "ECDH-HSALSA20") throw new Kms.KeyManagementAlgorithmNotSupportedError(`key agreement algorithm '${key.keyAgreement.algorithm}' with encryption algorithm '${decryption.algorithm}'`, this.backend);
309
+ if (privateKey.algorithm === KeyAlgorithm.Ed25519) {
310
+ privateKey = privateKey.convertkey({ algorithm: KeyAlgorithm.X25519 });
311
+ keysToFree.push(privateKey);
312
+ }
313
+ if (!senderKey) return { data: new Uint8Array(CryptoBox.sealOpen({
314
+ recipientKey: privateKey,
315
+ ciphertext: new Uint8Array(encrypted)
316
+ })) };
317
+ if (!decryption.iv) throw new Kms.KeyManagementError(`Missing required 'iv' for key agreement algorithm ${key.keyAgreement.algorithm} and encryption algorithm ${decryption.algorithm} with sender key defined.`);
318
+ return { data: new Uint8Array(CryptoBox.open({
319
+ recipientKey: privateKey,
320
+ senderKey,
321
+ message: new Uint8Array(encrypted),
322
+ nonce: new Uint8Array(decryption.iv)
323
+ })) };
324
+ }
325
+ if (!senderKey) throw new Kms.KeyManagementError("sender key is required for ECDH-ES key derivation.");
326
+ const { contentEncryptionKey } = deriveDecryptionKey({
327
+ decryption,
328
+ keyAgreement: key.keyAgreement,
329
+ recipientKey: privateKey,
330
+ senderKey
331
+ });
332
+ decryptionKey = contentEncryptionKey;
333
+ keysToFree.push(contentEncryptionKey);
334
+ } else throw new Kms.KeyManagementError("Unexpected key parameter for decrypt");
335
+ if (decryption.algorithm === "XSALSA20-POLY1305") throw new Kms.KeyManagementAlgorithmNotSupportedError(`encryption algorithm '${decryption.algorithm}' can only be used with key agreement algorithm ECDH-HSALSA20`, this.backend);
336
+ const privateJwk = this.privateJwkFromKey(decryptionKey);
337
+ Kms.assertKeyAllowsDerive(privateJwk);
338
+ Kms.assertAllowedEncryptionAlgForKey(privateJwk, decryption.algorithm);
339
+ Kms.assertKeyAllowsEncrypt(privateJwk);
340
+ return { data: aeadDecrypt({
341
+ key: decryptionKey,
342
+ encrypted,
343
+ decryption
344
+ }) };
345
+ } catch (error) {
346
+ if (error instanceof Kms.KeyManagementError) throw error;
347
+ throw new Kms.KeyManagementError("Error decrypting with key", { cause: error });
348
+ } finally {
349
+ for (const key$1 of keysToFree) key$1.handle.free();
350
+ }
351
+ }
352
+ assertedSigTypeForAlg(algorithm) {
353
+ const sigType = AskarKeyManagementService.algToSigType[algorithm];
354
+ if (!sigType) throw new Kms.KeyManagementAlgorithmNotSupportedError(`signing and verification with algorithm '${algorithm}'`, this.backend);
355
+ return sigType;
356
+ }
357
+ assertAskarAlgForJwkCrv(kty, crv) {
358
+ const keyAlg = jwkCrvToAskarAlg[crv];
359
+ if (!keyAlg) throw new Kms.KeyManagementAlgorithmNotSupportedError(`crv '${crv}' for kty '${kty}'`, this.backend);
360
+ return keyAlg;
361
+ }
362
+ keyFromJwk(jwk) {
363
+ return new Key(askar.keyFromJwk({ jwk: new Uint8Array(JsonEncoder.toBuffer(jwk)) }));
364
+ }
365
+ keyFromSecretBytesAndEncryptionAlgorithm(secretBytes, algorithm) {
366
+ const askarEncryptionAlgorithm = jwkEncToAskarAlg[algorithm];
367
+ if (!askarEncryptionAlgorithm) throw new Kms.KeyManagementAlgorithmNotSupportedError(`JWA encryption algorithm '${algorithm}'`, "askar");
368
+ return Key.fromSecretBytes({
369
+ algorithm: askarEncryptionAlgorithm,
370
+ secretKey: new Uint8Array(secretBytes)
371
+ });
372
+ }
373
+ publicJwkFromKey(key, partialJwkPublic) {
374
+ return Kms.publicJwkFromPrivateJwk(this.privateJwkFromKey(key, partialJwkPublic));
375
+ }
376
+ privateJwkFromKey(key, partialJwkPrivate) {
377
+ const { alg, ...jwkSecret } = JsonEncoder.fromBuffer(askar.keyGetJwkSecret({ localKeyHandle: key.handle }));
378
+ return {
379
+ ...partialJwkPrivate,
380
+ ...jwkSecret
381
+ };
382
+ }
383
+ async fetchAskarKey(agentContext, keyId) {
384
+ return await this.withSession(agentContext, async (session) => {
385
+ if (!session.handle) throw Error("Cannot fetch a key with a closed session");
386
+ const handle = await askar.sessionFetchKey({
387
+ forUpdate: false,
388
+ name: keyId,
389
+ sessionHandle: session.handle
390
+ });
391
+ if (!handle) return null;
392
+ const keyEntryList = new KeyEntryList({ handle });
393
+ const keyEntryObject = keyEntryList.getEntryByIndex(0).toJson();
394
+ keyEntryList.handle.free();
395
+ return keyEntryObject;
396
+ });
397
+ }
398
+ async getKeyAsserted(agentContext, keyId) {
399
+ const storageKey = await this.fetchAskarKey(agentContext, keyId);
400
+ if (!storageKey) throw new Kms.KeyManagementKeyNotFoundError(keyId, [this.backend]);
401
+ return storageKey;
402
+ }
403
+ };
404
+ AskarKeyManagementService.backend = "askar";
405
+ AskarKeyManagementService.algToSigType = {
406
+ EdDSA: SignatureAlgorithm.EdDSA,
407
+ Ed25519: SignatureAlgorithm.EdDSA,
408
+ ES256K: SignatureAlgorithm.ES256K,
409
+ ES256: SignatureAlgorithm.ES256,
410
+ ES384: SignatureAlgorithm.ES384
411
+ };
412
+
413
+ //#endregion
414
+ export { AskarKeyManagementService };
415
+ //# sourceMappingURL=AskarKeyManagementService.mjs.map