@sphereon/ssi-sdk-ext.key-manager 0.24.1-unstable.53 → 0.24.1-unstable.54

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.
@@ -1,5 +1,5 @@
1
1
  import { KeyManager as VeramoKeyManager, AbstractKeyManagementSystem, AbstractKeyStore } from '@veramo/key-manager';
2
- import { ManagedKeyInfo } from '@veramo/core';
2
+ import { IKey, IKeyManagerGetArgs, ManagedKeyInfo } from '@veramo/core';
3
3
  import { ISphereonKeyManager, ISphereonKeyManagerSignArgs, ISphereonKeyManagerVerifyArgs } from '../types/ISphereonKeyManager';
4
4
  export declare const sphereonKeyManagerMethods: Array<string>;
5
5
  export declare class SphereonKeyManager extends VeramoKeyManager {
@@ -14,5 +14,6 @@ export declare class SphereonKeyManager extends VeramoKeyManager {
14
14
  keyManagerSign(args: ISphereonKeyManagerSignArgs): Promise<string>;
15
15
  keyManagerVerify(args: ISphereonKeyManagerVerifyArgs): Promise<boolean>;
16
16
  keyManagerListKeys(): Promise<ManagedKeyInfo[]>;
17
+ keyManagerGet({ kid }: IKeyManagerGetArgs): Promise<IKey>;
17
18
  }
18
19
  //# sourceMappingURL=SphereonKeyManager.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"SphereonKeyManager.d.ts","sourceRoot":"","sources":["../../src/agent/SphereonKeyManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,IAAI,gBAAgB,EAAE,2BAA2B,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AAEnH,OAAO,EAAQ,cAAc,EAAY,MAAM,cAAc,CAAA;AAE7D,OAAO,EAAE,mBAAmB,EAAE,2BAA2B,EAAE,6BAA6B,EAAE,MAAM,8BAA8B,CAAA;AAE9H,eAAO,MAAM,yBAAyB,EAAE,KAAK,CAAC,MAAM,CAMnD,CAAA;AAED,qBAAa,kBAAmB,SAAQ,gBAAgB;IACtD,OAAO,CAAC,UAAU,CAAkB;IACpC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA6C;IAC5E,QAAQ,CAAC,YAAY,EAAE,mBAAmB,CAAA;gBAE9B,OAAO,EAAE;QAAE,KAAK,EAAE,gBAAgB,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,2BAA2B,CAAC,CAAA;KAAE;IAUlG,OAAO,CAAC,eAAe;IASjB,cAAc,CAAC,IAAI,EAAE,2BAA2B,GAAG,OAAO,CAAC,MAAM,CAAC;IAUlE,gBAAgB,CAAC,IAAI,EAAE,6BAA6B,GAAG,OAAO,CAAC,OAAO,CAAC;IASvE,kBAAkB,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;CAGtD"}
1
+ {"version":3,"file":"SphereonKeyManager.d.ts","sourceRoot":"","sources":["../../src/agent/SphereonKeyManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,IAAI,gBAAgB,EAAE,2BAA2B,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AAEnH,OAAO,EAAE,IAAI,EAAE,kBAAkB,EAAE,cAAc,EAAY,MAAM,cAAc,CAAA;AAEjF,OAAO,EAAE,mBAAmB,EAAE,2BAA2B,EAAE,6BAA6B,EAAE,MAAM,8BAA8B,CAAA;AAG9H,eAAO,MAAM,yBAAyB,EAAE,KAAK,CAAC,MAAM,CAMnD,CAAA;AAED,qBAAa,kBAAmB,SAAQ,gBAAgB;IACtD,OAAO,CAAC,UAAU,CAAkB;IACpC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA6C;IAC5E,QAAQ,CAAC,YAAY,EAAE,mBAAmB,CAAA;gBAE9B,OAAO,EAAE;QAAE,KAAK,EAAE,gBAAgB,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,2BAA2B,CAAC,CAAA;KAAE;IAUlG,OAAO,CAAC,eAAe;IASjB,cAAc,CAAC,IAAI,EAAE,2BAA2B,GAAG,OAAO,CAAC,MAAM,CAAC;IAUlE,gBAAgB,CAAC,IAAI,EAAE,6BAA6B,GAAG,OAAO,CAAC,OAAO,CAAC;IASvE,kBAAkB,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;IAI/C,aAAa,CAAC,EAAE,GAAG,EAAE,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;CAmBhE"}
@@ -12,6 +12,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.SphereonKeyManager = exports.sphereonKeyManagerMethods = void 0;
13
13
  const key_manager_1 = require("@veramo/key-manager");
14
14
  const ssi_sdk_ext_kms_local_1 = require("@sphereon/ssi-sdk-ext.kms-local");
15
+ const ssi_sdk_ext_key_utils_1 = require("@sphereon/ssi-sdk-ext.key-utils");
15
16
  exports.sphereonKeyManagerMethods = [
16
17
  'keyManagerCreate',
17
18
  'keyManagerImport',
@@ -66,6 +67,29 @@ class SphereonKeyManager extends key_manager_1.KeyManager {
66
67
  return this.localStore.list({}); // FIXME there are no args it seems
67
68
  });
68
69
  }
70
+ keyManagerGet(_a) {
71
+ return __awaiter(this, arguments, void 0, function* ({ kid }) {
72
+ try {
73
+ const key = yield this.localStore.get({ kid });
74
+ return key;
75
+ }
76
+ catch (e) {
77
+ const keys = yield this.keyManagerListKeys();
78
+ const foundKey = keys.find((key) => {
79
+ var _a, _b;
80
+ return key.publicKeyHex === kid ||
81
+ ((_a = key.meta) === null || _a === void 0 ? void 0 : _a.jwkThumbprint) === kid ||
82
+ (((_b = key.meta) === null || _b === void 0 ? void 0 : _b.jwkThumbprint) == null && (0, ssi_sdk_ext_key_utils_1.calculateJwkThumbprintForKey)({ key }) === kid);
83
+ });
84
+ if (foundKey) {
85
+ return foundKey;
86
+ }
87
+ else {
88
+ throw new Error(`Key with kid ${kid} not found`);
89
+ }
90
+ }
91
+ });
92
+ }
69
93
  }
70
94
  exports.SphereonKeyManager = SphereonKeyManager;
71
95
  //# sourceMappingURL=SphereonKeyManager.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SphereonKeyManager.js","sourceRoot":"","sources":["../../src/agent/SphereonKeyManager.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,qDAAmH;AAGnH,2EAAsF;AAGzE,QAAA,yBAAyB,GAAkB;IACtD,kBAAkB;IAClB,kBAAkB;IAClB,gBAAgB;IAChB,kBAAkB;IAClB,oBAAoB;CACrB,CAAA;AAED,MAAa,kBAAmB,SAAQ,wBAAgB;IAKtD,YAAY,OAAsF;QAChG,KAAK,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC,CAAA;QACjD,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,KAAK,CAAA;QAC/B,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC,GAAG,CAAA;QACjC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAA;QAC5B,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAC3D,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAC/D,IAAI,CAAC,YAAY,GAAkC,OAAQ,CAAA;IAC7D,CAAC;IAEO,eAAe,CAAC,IAAY;QAClC,MAAM,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAA;QACrC,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,MAAM,KAAK,CAAC,iFAAiF,IAAI,GAAG,CAAC,CAAA;QACvG,CAAC;QACD,OAAO,GAAG,CAAA;IACZ,CAAC;IAED,8EAA8E;IACxE,cAAc,CAAC,IAAiC;;;;;YACpD,MAAM,OAAO,GAAS,CAAC,MAAM,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAS,CAAA;YAC/E,MAAM,GAAG,GAAG,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;YAC7C,IAAI,OAAO,CAAC,IAAI,KAAe,+BAAO,CAAC,UAAU,EAAE,CAAC;gBAClD,OAAO,MAAM,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAA;YAC3F,CAAC;YACD,aAAa;YACb,OAAO,MAAM,OAAM,cAAc,YAAC,IAAI,CAAC,CAAA;QACzC,CAAC;KAAA;IAEK,gBAAgB,CAAC,IAAmC;;YACxD,MAAM,GAAG,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;YAC1C,IAAI,CAAC,QAAQ,IAAI,GAAG,IAAI,OAAO,GAAG,CAAC,MAAM,KAAK,UAAU,CAAC,IAAI,GAAG,YAAY,mDAA2B,EAAE,CAAC;gBACxG,aAAa;gBACb,OAAO,MAAM,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;YAC/B,CAAC;YACD,MAAM,KAAK,CAAC,OAAO,GAAG,gCAAgC,CAAC,CAAA;QACzD,CAAC;KAAA;IAEK,kBAAkB;;YACtB,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA,CAAC,mCAAmC;QACrE,CAAC;KAAA;CACF;AA9CD,gDA8CC"}
1
+ {"version":3,"file":"SphereonKeyManager.js","sourceRoot":"","sources":["../../src/agent/SphereonKeyManager.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,8 @@
1
1
  import { AbstractKeyManagementSystem } from '@veramo/key-manager';
2
2
  import { AbstractKeyStore } from '@veramo/key-manager';
3
+ import { IKey } from '@veramo/core';
3
4
  import { IKeyManager } from '@veramo/core';
5
+ import { IKeyManagerGetArgs as IKeyManagerGetArgs_2 } from '@veramo/core';
4
6
  import { IKeyManagerSignArgs } from '@veramo/core';
5
7
  import { IPluginMethodMap } from '@veramo/core';
6
8
  import { KeyManager } from '@veramo/key-manager';
@@ -102,6 +104,7 @@ export declare class SphereonKeyManager extends KeyManager {
102
104
  keyManagerSign(args: ISphereonKeyManagerSignArgs): Promise<string>;
103
105
  keyManagerVerify(args: ISphereonKeyManagerVerifyArgs): Promise<boolean>;
104
106
  keyManagerListKeys(): Promise<ManagedKeyInfo[]>;
107
+ keyManagerGet({ kid }: IKeyManagerGetArgs_2): Promise<IKey>;
105
108
  }
106
109
 
107
110
  export declare const sphereonKeyManagerMethods: Array<string>;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@sphereon/ssi-sdk-ext.key-manager",
3
3
  "description": "Sphereon Key Manager plugin with BLS support",
4
- "version": "0.24.1-unstable.53+1ce3951",
4
+ "version": "0.24.1-unstable.54+5ce83cc",
5
5
  "source": "src/index.ts",
6
6
  "main": "dist/index.js",
7
7
  "types": "dist/index.d.ts",
@@ -15,13 +15,13 @@
15
15
  "generate-plugin-schema": "sphereon dev generate-plugin-schema"
16
16
  },
17
17
  "dependencies": {
18
- "@sphereon/ssi-sdk-ext.kms-local": "0.24.1-unstable.53+1ce3951",
18
+ "@sphereon/ssi-sdk-ext.kms-local": "0.24.1-unstable.54+5ce83cc",
19
19
  "@veramo/core": "4.2.0",
20
20
  "@veramo/key-manager": "4.2.0"
21
21
  },
22
22
  "devDependencies": {
23
23
  "@mattrglobal/bbs-signatures": "^1.3.1",
24
- "@sphereon/ssi-sdk-ext.key-utils": "0.24.1-unstable.53+1ce3951",
24
+ "@sphereon/ssi-sdk-ext.key-utils": "0.24.1-unstable.54+5ce83cc",
25
25
  "@sphereon/ssi-sdk.dev": "0.28.0"
26
26
  },
27
27
  "resolutions": {
@@ -46,5 +46,5 @@
46
46
  "kms",
47
47
  "Veramo"
48
48
  ],
49
- "gitHead": "1ce395105f4b880461034f7fc910b21e20cba47a"
49
+ "gitHead": "5ce83cca64d55b664a2b0e6eb04660d299e2655c"
50
50
  }
@@ -0,0 +1,74 @@
1
+ import { SphereonKeyManager } from '../agent/SphereonKeyManager'
2
+ import { MemoryKeyStore, MemoryPrivateKeyStore } from '@veramo/key-manager'
3
+ import { SphereonKeyManagementSystem } from '@sphereon/ssi-sdk-ext.kms-local'
4
+
5
+ describe('@sphereon/ssi-sdk-ext.key-manager key functionalities', () => {
6
+ const kms = new SphereonKeyManager({
7
+ store: new MemoryKeyStore(),
8
+ kms: {
9
+ local: new SphereonKeyManagementSystem(new MemoryPrivateKeyStore()),
10
+ },
11
+ })
12
+
13
+ it('should create and fetch a RSA key', async () => {
14
+ const key = await kms.keyManagerCreate({ type: 'RSA', kms: 'local' })
15
+ const fetchByKid = await kms.keyManagerGet({ kid: key.kid })
16
+ expect(fetchByKid.kid).toEqual(key.kid)
17
+ expect(fetchByKid.publicKeyHex).toEqual(key.publicKeyHex)
18
+ expect(fetchByKid?.meta?.publicKeyJwk).toBeDefined()
19
+ expect(fetchByKid?.meta?.publicKeyPEM).toBeDefined()
20
+ expect(fetchByKid.type).toEqual('RSA')
21
+ const fetchByPublicKeyHex = await kms.keyManagerGet({ kid: key.publicKeyHex })
22
+ expect(fetchByPublicKeyHex.kid).toEqual(key.kid)
23
+ expect(fetchByPublicKeyHex?.meta?.publicKeyJwk).toBeDefined()
24
+ expect(fetchByPublicKeyHex?.meta?.publicKeyPEM).toBeDefined()
25
+ const deleteByPublicKeyHex = await kms.keyManagerDelete({ kid: key.publicKeyHex })
26
+ expect(deleteByPublicKeyHex).toBeTruthy()
27
+ })
28
+
29
+ it('should create and fetch a X25519 key', async () => {
30
+ const key = await kms.keyManagerCreate({ type: 'X25519', kms: 'local' })
31
+ const fetchByKid = await kms.keyManagerGet({ kid: key.kid })
32
+ expect(fetchByKid.type).toEqual('X25519')
33
+ expect(fetchByKid.kid).toEqual(key.kid)
34
+ expect(fetchByKid.publicKeyHex).toEqual(key.publicKeyHex)
35
+ expect(fetchByKid?.meta).toEqual({ algorithms: ['ECDH', 'ECDH-ES', 'ECDH-1PU'] })
36
+ })
37
+
38
+ it('should create and fetch a Ed25519 key', async () => {
39
+ const key = await kms.keyManagerCreate({ type: 'Ed25519', kms: 'local' })
40
+ const fetchByKid = await kms.keyManagerGet({ kid: key.kid })
41
+ expect(fetchByKid.type).toEqual('Ed25519')
42
+ expect(fetchByKid.kid).toEqual(key.kid)
43
+ expect(fetchByKid.publicKeyHex).toEqual(key.publicKeyHex)
44
+ expect(fetchByKid?.meta).toEqual({ algorithms: ['Ed25519', 'EdDSA'] })
45
+ const fetchByPublicKeyHex = await kms.keyManagerGet({ kid: key.publicKeyHex })
46
+ expect(fetchByPublicKeyHex.kid).toEqual(key.kid)
47
+ })
48
+
49
+ it('should create and fetch a Secp256k1 key', async () => {
50
+ const key = await kms.keyManagerCreate({ type: 'Secp256k1', kms: 'local' })
51
+ const fetchByKid = await kms.keyManagerGet({ kid: key.kid })
52
+ expect(fetchByKid.type).toEqual('Secp256k1')
53
+ expect(fetchByKid.kid).toEqual(key.kid)
54
+ expect(fetchByKid.publicKeyHex).toEqual(key.publicKeyHex)
55
+ expect(fetchByKid?.meta?.algorithms).toEqual(['ES256K', 'ES256K-R', 'eth_signTransaction', 'eth_signTypedData', 'eth_signMessage', 'eth_rawSign'])
56
+ const fetchByPublicKeyHex = await kms.keyManagerGet({ kid: key.publicKeyHex })
57
+ expect(fetchByPublicKeyHex.kid).toEqual(key.kid)
58
+ const fetchByThumbprint = await kms.keyManagerGet({ kid: key?.meta?.jwkThumbprint })
59
+ expect(fetchByThumbprint.kid).toEqual(fetchByThumbprint.kid)
60
+ })
61
+
62
+ it('should create and fetch a Secp256r1 key', async () => {
63
+ const key = await kms.keyManagerCreate({ type: 'Secp256r1', kms: 'local' })
64
+ const fetchByKid = await kms.keyManagerGet({ kid: key.kid })
65
+ expect(fetchByKid.kid).toEqual(key.kid)
66
+ expect(fetchByKid.type).toEqual('Secp256r1')
67
+ expect(fetchByKid.publicKeyHex).toEqual(key.publicKeyHex)
68
+ expect(fetchByKid?.meta?.algorithms).toEqual(['ES256'])
69
+ const fetchByPublicKeyHex = await kms.keyManagerGet({ kid: key.publicKeyHex })
70
+ expect(fetchByPublicKeyHex.kid).toEqual(key.kid)
71
+ const fetchByThumbprint = await kms.keyManagerGet({ kid: key?.meta?.jwkThumbprint })
72
+ expect(fetchByThumbprint.kid).toEqual(fetchByThumbprint.kid)
73
+ })
74
+ })
@@ -1,8 +1,9 @@
1
1
  import { KeyManager as VeramoKeyManager, AbstractKeyManagementSystem, AbstractKeyStore } from '@veramo/key-manager'
2
2
 
3
- import { IKey, ManagedKeyInfo, TKeyType } from '@veramo/core'
3
+ import { IKey, IKeyManagerGetArgs, ManagedKeyInfo, TKeyType } from '@veramo/core'
4
4
  import { KeyType, SphereonKeyManagementSystem } from '@sphereon/ssi-sdk-ext.kms-local'
5
5
  import { ISphereonKeyManager, ISphereonKeyManagerSignArgs, ISphereonKeyManagerVerifyArgs } from '../types/ISphereonKeyManager'
6
+ import { calculateJwkThumbprintForKey } from '@sphereon/ssi-sdk-ext.key-utils'
6
7
 
7
8
  export const sphereonKeyManagerMethods: Array<string> = [
8
9
  'keyManagerCreate',
@@ -58,4 +59,24 @@ export class SphereonKeyManager extends VeramoKeyManager {
58
59
  async keyManagerListKeys(): Promise<ManagedKeyInfo[]> {
59
60
  return this.localStore.list({}) // FIXME there are no args it seems
60
61
  }
62
+
63
+ async keyManagerGet({ kid }: IKeyManagerGetArgs): Promise<IKey> {
64
+ try {
65
+ const key = await this.localStore.get({ kid })
66
+ return key
67
+ } catch (e) {
68
+ const keys: ManagedKeyInfo[] = await this.keyManagerListKeys()
69
+ const foundKey = keys.find(
70
+ (key) =>
71
+ key.publicKeyHex === kid ||
72
+ key.meta?.jwkThumbprint === kid ||
73
+ (key.meta?.jwkThumbprint == null && calculateJwkThumbprintForKey({ key }) === kid)
74
+ )
75
+ if (foundKey) {
76
+ return foundKey as IKey
77
+ } else {
78
+ throw new Error(`Key with kid ${kid} not found`)
79
+ }
80
+ }
81
+ }
61
82
  }