@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.
- package/build/AskarApi.d.mts +68 -0
- package/build/AskarApi.d.mts.map +1 -0
- package/build/AskarApi.mjs +94 -0
- package/build/AskarApi.mjs.map +1 -0
- package/build/AskarApiOptions.d.mts +29 -0
- package/build/AskarApiOptions.d.mts.map +1 -0
- package/build/AskarModule.d.mts +18 -0
- package/build/AskarModule.d.mts.map +1 -0
- package/build/AskarModule.mjs +61 -0
- package/build/AskarModule.mjs.map +1 -0
- package/build/AskarModuleConfig.d.mts +125 -0
- package/build/AskarModuleConfig.d.mts.map +1 -0
- package/build/AskarModuleConfig.mjs +41 -0
- package/build/AskarModuleConfig.mjs.map +1 -0
- package/build/AskarStorageConfig.d.mts +32 -0
- package/build/AskarStorageConfig.d.mts.map +1 -0
- package/build/AskarStorageConfig.mjs +11 -0
- package/build/AskarStorageConfig.mjs.map +1 -0
- package/build/AskarStoreManager.d.mts +109 -0
- package/build/AskarStoreManager.d.mts.map +1 -0
- package/build/AskarStoreManager.mjs +386 -0
- package/build/AskarStoreManager.mjs.map +1 -0
- package/build/_virtual/_@oxc-project_runtime@0.99.0/helpers/decorate.mjs +10 -0
- package/build/_virtual/_@oxc-project_runtime@0.99.0/helpers/decorateMetadata.mjs +7 -0
- package/build/_virtual/_@oxc-project_runtime@0.99.0/helpers/decorateParam.mjs +9 -0
- package/build/error/AskarError.d.mts +1 -0
- package/build/error/AskarError.mjs +12 -0
- package/build/error/AskarError.mjs.map +1 -0
- package/build/error/AskarStoreDuplicateError.d.mts +13 -0
- package/build/error/AskarStoreDuplicateError.d.mts.map +1 -0
- package/build/error/AskarStoreDuplicateError.mjs +12 -0
- package/build/error/AskarStoreDuplicateError.mjs.map +1 -0
- package/build/error/AskarStoreError.d.mts +13 -0
- package/build/error/AskarStoreError.d.mts.map +1 -0
- package/build/error/AskarStoreError.mjs +12 -0
- package/build/error/AskarStoreError.mjs.map +1 -0
- package/build/error/AskarStoreExportPathExistsError.d.mts +13 -0
- package/build/error/AskarStoreExportPathExistsError.d.mts.map +1 -0
- package/build/error/AskarStoreExportPathExistsError.mjs +12 -0
- package/build/error/AskarStoreExportPathExistsError.mjs.map +1 -0
- package/build/error/AskarStoreExportUnsupportedError.d.mts +13 -0
- package/build/error/AskarStoreExportUnsupportedError.d.mts.map +1 -0
- package/build/error/AskarStoreExportUnsupportedError.mjs +12 -0
- package/build/error/AskarStoreExportUnsupportedError.mjs.map +1 -0
- package/build/error/AskarStoreImportPathExistsError.d.mts +13 -0
- package/build/error/AskarStoreImportPathExistsError.d.mts.map +1 -0
- package/build/error/AskarStoreImportPathExistsError.mjs +12 -0
- package/build/error/AskarStoreImportPathExistsError.mjs.map +1 -0
- package/build/error/AskarStoreInvalidKeyError.d.mts +13 -0
- package/build/error/AskarStoreInvalidKeyError.d.mts.map +1 -0
- package/build/error/AskarStoreInvalidKeyError.mjs +12 -0
- package/build/error/AskarStoreInvalidKeyError.mjs.map +1 -0
- package/build/error/AskarStoreNotFoundError.d.mts +13 -0
- package/build/error/AskarStoreNotFoundError.d.mts.map +1 -0
- package/build/error/AskarStoreNotFoundError.mjs +12 -0
- package/build/error/AskarStoreNotFoundError.mjs.map +1 -0
- package/build/error/index.d.mts +8 -0
- package/build/error/index.mjs +8 -0
- package/build/index.d.mts +19 -0
- package/build/index.mjs +19 -0
- package/build/kms/AskarKeyManagementService.d.mts +30 -0
- package/build/kms/AskarKeyManagementService.d.mts.map +1 -0
- package/build/kms/AskarKeyManagementService.mjs +415 -0
- package/build/kms/AskarKeyManagementService.mjs.map +1 -0
- package/build/kms/crypto/decrypt.mjs +21 -0
- package/build/kms/crypto/decrypt.mjs.map +1 -0
- package/build/kms/crypto/deriveKey.mjs +87 -0
- package/build/kms/crypto/deriveKey.mjs.map +1 -0
- package/build/kms/crypto/encrypt.mjs +24 -0
- package/build/kms/crypto/encrypt.mjs.map +1 -0
- package/build/kms/crypto/randomBytes.mjs +19 -0
- package/build/kms/crypto/randomBytes.mjs.map +1 -0
- package/build/storage/AskarStorageService.d.mts +34 -0
- package/build/storage/AskarStorageService.d.mts.map +1 -0
- package/build/storage/AskarStorageService.mjs +169 -0
- package/build/storage/AskarStorageService.mjs.map +1 -0
- package/build/storage/index.d.mts +1 -0
- package/build/storage/index.mjs +1 -0
- package/build/storage/utils.d.mts +8 -0
- package/build/storage/utils.d.mts.map +1 -0
- package/build/storage/utils.mjs +58 -0
- package/build/storage/utils.mjs.map +1 -0
- package/build/tenants.mjs +42 -0
- package/build/tenants.mjs.map +1 -0
- package/build/utils/askarError.d.mts +1 -0
- package/build/utils/askarError.mjs +21 -0
- package/build/utils/askarError.mjs.map +1 -0
- package/build/utils/askarKeyTypes.d.mts +2 -0
- package/build/utils/askarKeyTypes.mjs +25 -0
- package/build/utils/askarKeyTypes.mjs.map +1 -0
- package/build/utils/askarStoreConfig.d.mts +2 -0
- package/build/utils/askarStoreConfig.mjs +47 -0
- package/build/utils/askarStoreConfig.mjs.map +1 -0
- package/build/utils/index.d.mts +4 -0
- package/build/utils/index.mjs +4 -0
- package/build/utils/transformPrivateKey.d.mts +73 -0
- package/build/utils/transformPrivateKey.d.mts.map +1 -0
- package/build/utils/transformPrivateKey.mjs +73 -0
- package/build/utils/transformPrivateKey.mjs.map +1 -0
- package/package.json +21 -29
- package/build/AskarModule.d.ts +0 -9
- package/build/AskarModule.js +0 -58
- package/build/AskarModule.js.map +0 -1
- package/build/AskarModuleConfig.d.ts +0 -68
- package/build/AskarModuleConfig.js +0 -33
- package/build/AskarModuleConfig.js.map +0 -1
- package/build/index.d.ts +0 -4
- package/build/index.js +0 -16
- package/build/index.js.map +0 -1
- package/build/secureEnvironment/index.d.ts +0 -1
- package/build/secureEnvironment/index.js +0 -18
- package/build/secureEnvironment/index.js.map +0 -1
- package/build/secureEnvironment/secureEnvironment.d.ts +0 -5
- package/build/secureEnvironment/secureEnvironment.js +0 -7
- package/build/secureEnvironment/secureEnvironment.js.map +0 -1
- package/build/secureEnvironment/secureEnvironment.native.d.ts +0 -1
- package/build/secureEnvironment/secureEnvironment.native.js +0 -14
- package/build/secureEnvironment/secureEnvironment.native.js.map +0 -1
- package/build/storage/AskarStorageService.d.ts +0 -17
- package/build/storage/AskarStorageService.js +0 -141
- package/build/storage/AskarStorageService.js.map +0 -1
- package/build/storage/index.d.ts +0 -1
- package/build/storage/index.js +0 -18
- package/build/storage/index.js.map +0 -1
- package/build/storage/utils.d.ts +0 -15
- package/build/storage/utils.js +0 -109
- package/build/storage/utils.js.map +0 -1
- package/build/utils/askarError.d.ts +0 -14
- package/build/utils/askarError.js +0 -20
- package/build/utils/askarError.js.map +0 -1
- package/build/utils/askarKeyBackend.d.ts +0 -3
- package/build/utils/askarKeyBackend.js +0 -15
- package/build/utils/askarKeyBackend.js.map +0 -1
- package/build/utils/askarKeyTypes.d.ts +0 -8
- package/build/utils/askarKeyTypes.js +0 -46
- package/build/utils/askarKeyTypes.js.map +0 -1
- package/build/utils/askarWalletConfig.d.ts +0 -14
- package/build/utils/askarWalletConfig.js +0 -75
- package/build/utils/askarWalletConfig.js.map +0 -1
- package/build/utils/assertAskarWallet.d.ts +0 -3
- package/build/utils/assertAskarWallet.js +0 -14
- package/build/utils/assertAskarWallet.js.map +0 -1
- package/build/utils/index.d.ts +0 -3
- package/build/utils/index.js +0 -20
- package/build/utils/index.js.map +0 -1
- package/build/wallet/AskarBaseWallet.d.ts +0 -112
- package/build/wallet/AskarBaseWallet.js +0 -540
- package/build/wallet/AskarBaseWallet.js.map +0 -1
- package/build/wallet/AskarProfileWallet.d.ts +0 -24
- package/build/wallet/AskarProfileWallet.js +0 -150
- package/build/wallet/AskarProfileWallet.js.map +0 -1
- package/build/wallet/AskarWallet.d.ts +0 -58
- package/build/wallet/AskarWallet.js +0 -342
- package/build/wallet/AskarWallet.js.map +0 -1
- package/build/wallet/AskarWalletStorageConfig.d.ts +0 -31
- package/build/wallet/AskarWalletStorageConfig.js +0 -11
- package/build/wallet/AskarWalletStorageConfig.js.map +0 -1
- package/build/wallet/JweEnvelope.d.ts +0 -32
- package/build/wallet/JweEnvelope.js +0 -55
- package/build/wallet/JweEnvelope.js.map +0 -1
- package/build/wallet/didcommV1.d.ts +0 -8
- package/build/wallet/didcommV1.js +0 -155
- package/build/wallet/didcommV1.js.map +0 -1
- package/build/wallet/index.d.ts +0 -3
- package/build/wallet/index.js +0 -23
- 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 };
|
package/build/index.mjs
ADDED
|
@@ -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
|