@sphereon/ssi-sdk-ext.kms-musap-rn 0.26.1-next.9 → 0.27.1-feature.SPRIND.113.interop.6

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,12 +1,19 @@
1
1
  import { IKey, ManagedKeyInfo, MinimalImportableKey, TKeyType } from '@veramo/core';
2
- import { SscdType } from '@sphereon/musap-react-native';
2
+ import { ExternalSscdSettings, SscdType } from '@sphereon/musap-react-native';
3
3
  import { AbstractKeyManagementSystem } from '@veramo/key-manager';
4
4
  import { KeyMetadata } from './index';
5
5
  export declare const logger: import("@sphereon/ssi-types").ISimpleLogger<unknown>;
6
6
  export declare class MusapKeyManagementSystem extends AbstractKeyManagementSystem {
7
- private musapKeyStore;
8
- private sscdType;
9
- constructor(sscdType?: SscdType);
7
+ private musapClient;
8
+ private readonly sscdType;
9
+ private readonly sscdId;
10
+ private readonly defaultKeyAttributes;
11
+ private readonly defaultSignAttributes;
12
+ constructor(sscdType?: SscdType, sscdId?: string, opts?: {
13
+ externalSscdSettings?: ExternalSscdSettings;
14
+ defaultKeyAttributes?: Record<string, string>;
15
+ defaultSignAttributes?: Record<string, string>;
16
+ });
10
17
  listKeys(): Promise<ManagedKeyInfo[]>;
11
18
  createKey(args: {
12
19
  type: TKeyType;
@@ -32,5 +39,7 @@ export declare class MusapKeyManagementSystem extends AbstractKeyManagementSyste
32
39
  myKeyRef: Pick<IKey, 'kid'>;
33
40
  theirKey: Pick<IKey, 'publicKeyHex' | 'type'>;
34
41
  }): Promise<string>;
42
+ private recordToKeyAttributes;
43
+ private recordToSignatureAttributes;
35
44
  }
36
45
  //# sourceMappingURL=MusapKeyManagerSystem.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"MusapKeyManagerSystem.d.ts","sourceRoot":"","sources":["../src/MusapKeyManagerSystem.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,oBAAoB,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAA;AAenF,OAAO,EAAgB,QAAQ,EAAE,MAAM,8BAA8B,CAAA;AACrE,OAAO,EAAE,2BAA2B,EAAE,MAAM,qBAAqB,CAAA;AAGjE,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAUrC,eAAO,MAAM,MAAM,sDAA+C,CAAA;AAElE,qBAAa,wBAAyB,SAAQ,2BAA2B;IACvE,OAAO,CAAC,aAAa,CAAiB;IACtC,OAAO,CAAC,QAAQ,CAAU;gBAEd,QAAQ,CAAC,EAAE,QAAQ;IAYzB,QAAQ,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;IAKrC,SAAS,CAAC,IAAI,EAAE;QAAE,IAAI,EAAE,QAAQ,CAAC;QAAC,IAAI,CAAC,EAAE,WAAW,CAAA;KAAE,GAAG,OAAO,CAAC,cAAc,CAAC;IA6BtF,OAAO,CAAC,yBAAyB,CAWhC;IAED,OAAO,CAAC,yBAAyB,CAWhC;IAEK,SAAS,CAAC,EAAE,GAAG,EAAE,EAAE;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,OAAO,CAAC;IAU3D,OAAO,CAAC,kBAAkB;IAapB,IAAI,CAAC,IAAI,EAAE;QAAE,MAAM,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,UAAU,CAAC;QAAC,CAAC,CAAC,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IAoBlH,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,oBAAoB,EAAE,KAAK,CAAC,GAAG;QAAE,aAAa,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,cAAc,CAAC;IAI9G,OAAO,CAAC,cAAc;IAoBtB,YAAY,CAAC,IAAI,EAAE;QAAE,QAAQ,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,EAAE,cAAc,GAAG,MAAM,CAAC,CAAA;KAAE,GAAG,OAAO,CAAC,MAAM,CAAC;CAGpH"}
1
+ {"version":3,"file":"MusapKeyManagerSystem.d.ts","sourceRoot":"","sources":["../src/MusapKeyManagerSystem.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,oBAAoB,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAA;AACnF,OAAO,EACL,oBAAoB,EAepB,QAAQ,EACT,MAAM,8BAA8B,CAAA;AACrC,OAAO,EAAE,2BAA2B,EAAE,MAAM,qBAAqB,CAAA;AAGjE,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAUrC,eAAO,MAAM,MAAM,sDAA+C,CAAA;AAElE,qBAAa,wBAAyB,SAAQ,2BAA2B;IACvE,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAU;IACnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAQ;IAC/B,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAoC;IACzE,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAoC;gBAE9D,QAAQ,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;QACvD,oBAAoB,CAAC,EAAE,oBAAoB,CAAC;QAC5C,oBAAoB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC9C,qBAAqB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAC/C;IAmBK,QAAQ,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;IAKrC,SAAS,CAAC,IAAI,EAAE;QAAE,IAAI,EAAE,QAAQ,CAAC;QAAC,IAAI,CAAC,EAAE,WAAW,CAAA;KAAE,GAAG,OAAO,CAAC,cAAc,CAAC;IAuCtF,OAAO,CAAC,yBAAyB,CAWhC;IAED,OAAO,CAAC,yBAAyB,CAchC;IAEK,SAAS,CAAC,EAAE,GAAG,EAAE,EAAE;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,OAAO,CAAC;IAc3D,OAAO,CAAC,kBAAkB;IAapB,IAAI,CAAC,IAAI,EAAE;QACf,MAAM,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,IAAI,EAAE,UAAU,CAAC;QACjB,CAAC,CAAC,EAAE,MAAM,GAAG,GAAG,CAAA;KACjB,GAAG,OAAO,CAAC,MAAM,CAAC;IAuBb,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,oBAAoB,EAAE,KAAK,CAAC,GAAG;QAAE,aAAa,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,cAAc,CAAC;IAI9G,OAAO,CAAC,cAAc;IAqBtB,YAAY,CAAC,IAAI,EAAE;QAAE,QAAQ,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,EAAE,cAAc,GAAG,MAAM,CAAC,CAAA;KAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IAInH,OAAO,CAAC,qBAAqB;IAU7B,OAAO,CAAC,2BAA2B;CASpC"}
@@ -29,7 +29,7 @@ const ssi_types_1 = require("@sphereon/ssi-types");
29
29
  const ssi_sdk_ext_key_utils_1 = require("@sphereon/ssi-sdk-ext.key-utils");
30
30
  exports.logger = ssi_types_1.Loggers.DEFAULT.get('sphereon:musap-rn-kms');
31
31
  class MusapKeyManagementSystem extends key_manager_1.AbstractKeyManagementSystem {
32
- constructor(sscdType) {
32
+ constructor(sscdType, sscdId, opts) {
33
33
  super();
34
34
  this.mapKeyTypeToAlgorithmType = (type) => {
35
35
  switch (type) {
@@ -49,6 +49,9 @@ class MusapKeyManagementSystem extends key_manager_1.AbstractKeyManagementSystem
49
49
  return 'Secp256k1';
50
50
  case 'eccp256r1':
51
51
  return 'Secp256r1';
52
+ case 'ecc_ed25519':
53
+ return 'Ed25519';
54
+ case 'rsa2k':
52
55
  case 'rsa4k':
53
56
  return 'RSA';
54
57
  default:
@@ -56,9 +59,15 @@ class MusapKeyManagementSystem extends key_manager_1.AbstractKeyManagementSystem
56
59
  }
57
60
  };
58
61
  try {
59
- this.musapKeyStore = musap_react_native_1.MusapModule;
62
+ this.musapClient = musap_react_native_1.MusapClient;
60
63
  this.sscdType = sscdType ? sscdType : 'TEE';
61
- this.musapKeyStore.enableSscd(this.sscdType);
64
+ this.sscdId = sscdId !== null && sscdId !== void 0 ? sscdId : this.sscdType;
65
+ this.defaultKeyAttributes = opts === null || opts === void 0 ? void 0 : opts.defaultKeyAttributes;
66
+ this.defaultSignAttributes = opts === null || opts === void 0 ? void 0 : opts.defaultSignAttributes;
67
+ const enabledSscds = this.musapClient.listEnabledSscds();
68
+ if (!enabledSscds.some(value => value.sscdId == sscdId)) {
69
+ this.musapClient.enableSscd(this.sscdType, this.sscdId, opts === null || opts === void 0 ? void 0 : opts.externalSscdSettings);
70
+ }
62
71
  }
63
72
  catch (e) {
64
73
  console.error('enableSscd', e);
@@ -67,7 +76,7 @@ class MusapKeyManagementSystem extends key_manager_1.AbstractKeyManagementSystem
67
76
  }
68
77
  listKeys() {
69
78
  return __awaiter(this, void 0, void 0, function* () {
70
- const keysJson = (yield this.musapKeyStore.listKeys());
79
+ const keysJson = (this.musapClient.listKeys());
71
80
  return keysJson.map((key) => this.asMusapKeyInfo(key));
72
81
  });
73
82
  }
@@ -77,18 +86,27 @@ class MusapKeyManagementSystem extends key_manager_1.AbstractKeyManagementSystem
77
86
  if (meta === undefined || !('keyAlias' in meta)) {
78
87
  return Promise.reject(Error('a unique keyAlias field is required for MUSAP'));
79
88
  }
89
+ if (this.sscdType == 'EXTERNAL') {
90
+ const existingKeys = (this.musapClient.listKeys());
91
+ const extKey = existingKeys.find(musapKey => musapKey.sscdType === 'External Signature'); // FIXME returning does not match SscdType enum
92
+ if (extKey) {
93
+ extKey.algorithm = 'eccp256r1'; // FIXME MUSAP announces key as rsa2k, but it's actually EC
94
+ return this.asMusapKeyInfo(extKey);
95
+ }
96
+ return Promise.reject(Error(`No external key was bound yet for sscd ${this.sscdId}`));
97
+ }
80
98
  const keyGenReq = {
81
99
  keyAlgorithm: this.mapKeyTypeToAlgorithmType(type),
82
100
  keyUsage: 'keyUsage' in meta ? meta.keyUsage : 'sign',
83
101
  keyAlias: meta.keyAlias,
84
- attributes: 'attributes' in meta ? meta.attributes : [],
102
+ attributes: this.recordToKeyAttributes(Object.assign(Object.assign({}, this.defaultKeyAttributes), ('attributes' in meta ? meta.attributes : {}))),
85
103
  role: 'role' in meta ? meta.role : 'administrator',
86
104
  };
87
105
  try {
88
- const generatedKeyUri = yield this.musapKeyStore.generateKey(this.sscdType, keyGenReq);
106
+ const generatedKeyUri = yield this.musapClient.generateKey(this.sscdType, keyGenReq);
89
107
  if (generatedKeyUri) {
90
108
  exports.logger.debug('Generated key:', generatedKeyUri);
91
- const key = yield this.musapKeyStore.getKeyByUri(generatedKeyUri);
109
+ const key = this.musapClient.getKeyByUri(generatedKeyUri);
92
110
  return this.asMusapKeyInfo(key);
93
111
  }
94
112
  else {
@@ -104,7 +122,11 @@ class MusapKeyManagementSystem extends key_manager_1.AbstractKeyManagementSystem
104
122
  deleteKey(_a) {
105
123
  return __awaiter(this, arguments, void 0, function* ({ kid }) {
106
124
  try {
107
- this.musapKeyStore.removeKey(kid);
125
+ const key = this.musapClient.getKeyById(kid);
126
+ if (key.sscdType === 'External Signature') {
127
+ return true; // FIXME we can't remove a eSim key for now because this would mean onboarding again
128
+ }
129
+ void this.musapClient.removeKey(kid);
108
130
  return true;
109
131
  }
110
132
  catch (error) {
@@ -130,7 +152,10 @@ class MusapKeyManagementSystem extends key_manager_1.AbstractKeyManagementSystem
130
152
  throw new Error('key_not_found: No key ref provided');
131
153
  }
132
154
  const data = new text_encoding_1.TextDecoder().decode(args.data);
133
- const key = this.musapKeyStore.getKeyById(args.keyRef.kid);
155
+ const key = this.musapClient.getKeyById(args.keyRef.kid);
156
+ if (key.sscdType === 'External Signature') {
157
+ key.algorithm = 'eccp256r1'; // FIXME MUSAP announces key as rsa2k, but it's actually EC
158
+ }
134
159
  const signatureReq = {
135
160
  keyUri: key.keyUri,
136
161
  data,
@@ -138,9 +163,9 @@ class MusapKeyManagementSystem extends key_manager_1.AbstractKeyManagementSystem
138
163
  displayText: args.displayText,
139
164
  transId: args.transId,
140
165
  format: (_a = args.format) !== null && _a !== void 0 ? _a : 'RAW',
141
- attributes: args.attributes,
166
+ attributes: this.recordToSignatureAttributes(Object.assign(Object.assign({}, this.defaultSignAttributes), args.attributes)),
142
167
  };
143
- return this.musapKeyStore.sign(signatureReq);
168
+ return this.musapClient.sign(signatureReq);
144
169
  });
145
170
  }
146
171
  importKey(args) {
@@ -169,6 +194,24 @@ class MusapKeyManagementSystem extends key_manager_1.AbstractKeyManagementSystem
169
194
  sharedSecret(args) {
170
195
  throw new Error('Not supported.');
171
196
  }
197
+ recordToKeyAttributes(record) {
198
+ if (!record) {
199
+ return [];
200
+ }
201
+ return Object.entries(record).map(([key, value]) => ({
202
+ name: key,
203
+ value,
204
+ }));
205
+ }
206
+ recordToSignatureAttributes(record) {
207
+ if (!record) {
208
+ return [];
209
+ }
210
+ return Object.entries(record).map(([key, value]) => ({
211
+ name: key,
212
+ value,
213
+ }));
214
+ }
172
215
  }
173
216
  exports.MusapKeyManagementSystem = MusapKeyManagementSystem;
174
217
  //# sourceMappingURL=MusapKeyManagerSystem.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"MusapKeyManagerSystem.js","sourceRoot":"","sources":["../src/MusapKeyManagerSystem.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"MusapKeyManagerSystem.js","sourceRoot":"","sources":["../src/MusapKeyManagerSystem.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@sphereon/ssi-sdk-ext.kms-musap-rn",
3
3
  "description": "Sphereon SSI-SDK react-native plugin for management of keys with musap.",
4
- "version": "0.26.1-next.9+a173106",
4
+ "version": "0.27.1-feature.SPRIND.113.interop.6+d377985",
5
5
  "source": "src/index.ts",
6
6
  "main": "dist/index.js",
7
7
  "types": "dist/index.d.ts",
@@ -10,9 +10,9 @@
10
10
  "build:clean": "tsc --build --clean && tsc --build"
11
11
  },
12
12
  "dependencies": {
13
- "@sphereon/musap-react-native": "0.0.1-next.154",
14
- "@sphereon/ssi-sdk-ext.key-utils": "0.26.1-next.9+a173106",
15
- "@sphereon/ssi-sdk-ext.x509-utils": "0.26.1-next.9+a173106",
13
+ "@sphereon/musap-react-native": "0.2.1-next.170",
14
+ "@sphereon/ssi-sdk-ext.key-utils": "0.27.1-feature.SPRIND.113.interop.6+d377985",
15
+ "@sphereon/ssi-sdk-ext.x509-utils": "0.27.1-feature.SPRIND.113.interop.6+d377985",
16
16
  "@sphereon/ssi-types": "0.30.2-feature.SDK.41.oidf.support.286",
17
17
  "@veramo/core": "4.2.0",
18
18
  "@veramo/key-manager": "4.2.0",
@@ -41,5 +41,5 @@
41
41
  "react-native",
42
42
  "Veramo"
43
43
  ],
44
- "gitHead": "a173106e58c2e78b94a35f02be00aee1fea14b74"
44
+ "gitHead": "d3779859a9284e02d831c74e4abd177788ecb66c"
45
45
  }
@@ -1,20 +1,23 @@
1
1
  import { PEMToBinary } from '@sphereon/ssi-sdk-ext.x509-utils'
2
2
  import { IKey, ManagedKeyInfo, MinimalImportableKey, TKeyType } from '@veramo/core'
3
3
  import {
4
+ ExternalSscdSettings,
5
+ IMusapClient,
4
6
  isSignatureAlgorithmType,
5
7
  JWSAlgorithm,
6
8
  KeyAlgorithm,
7
9
  KeyAlgorithmType,
10
+ KeyAttribute,
8
11
  KeyGenReq,
12
+ MusapClient,
9
13
  MusapKey,
10
- MusapModule,
11
- MusapModuleType,
12
14
  signatureAlgorithmFromKeyAlgorithm,
13
15
  SignatureAlgorithmType,
16
+ SignatureAttribute,
14
17
  SignatureFormat,
15
18
  SignatureReq,
19
+ SscdType,
16
20
  } from '@sphereon/musap-react-native'
17
- import { KeyAttribute, SscdType } from '@sphereon/musap-react-native'
18
21
  import { AbstractKeyManagementSystem } from '@veramo/key-manager'
19
22
  import { TextDecoder } from 'text-encoding'
20
23
  import { Loggers } from '@sphereon/ssi-types'
@@ -31,15 +34,29 @@ import {
31
34
  export const logger = Loggers.DEFAULT.get('sphereon:musap-rn-kms')
32
35
 
33
36
  export class MusapKeyManagementSystem extends AbstractKeyManagementSystem {
34
- private musapKeyStore: MusapModuleType
35
- private sscdType: SscdType
36
-
37
- constructor(sscdType?: SscdType) {
37
+ private musapClient: IMusapClient
38
+ private readonly sscdType: SscdType
39
+ private readonly sscdId: string
40
+ private readonly defaultKeyAttributes: Record<string, string> | undefined
41
+ private readonly defaultSignAttributes: Record<string, string> | undefined
42
+
43
+ constructor(sscdType?: SscdType, sscdId?: string, opts?: {
44
+ externalSscdSettings?: ExternalSscdSettings,
45
+ defaultKeyAttributes?: Record<string, string>,
46
+ defaultSignAttributes?: Record<string, string>
47
+ }) {
38
48
  super()
39
49
  try {
40
- this.musapKeyStore = MusapModule
50
+ this.musapClient = MusapClient
41
51
  this.sscdType = sscdType ? sscdType : 'TEE'
42
- this.musapKeyStore.enableSscd(this.sscdType)
52
+ this.sscdId = sscdId ?? this.sscdType
53
+ this.defaultKeyAttributes = opts?.defaultKeyAttributes
54
+ this.defaultSignAttributes = opts?.defaultSignAttributes
55
+
56
+ const enabledSscds = this.musapClient.listEnabledSscds()
57
+ if (!enabledSscds.some(value => value.sscdId == sscdId)) {
58
+ this.musapClient.enableSscd(this.sscdType, this.sscdId, opts?.externalSscdSettings)
59
+ }
43
60
  } catch (e) {
44
61
  console.error('enableSscd', e)
45
62
  throw Error('enableSscd failed')
@@ -47,7 +64,7 @@ export class MusapKeyManagementSystem extends AbstractKeyManagementSystem {
47
64
  }
48
65
 
49
66
  async listKeys(): Promise<ManagedKeyInfo[]> {
50
- const keysJson: MusapKey[] = (await this.musapKeyStore.listKeys()) as MusapKey[]
67
+ const keysJson: MusapKey[] = (this.musapClient.listKeys()) as MusapKey[]
51
68
  return keysJson.map((key) => this.asMusapKeyInfo(key))
52
69
  }
53
70
 
@@ -57,19 +74,29 @@ export class MusapKeyManagementSystem extends AbstractKeyManagementSystem {
57
74
  return Promise.reject(Error('a unique keyAlias field is required for MUSAP'))
58
75
  }
59
76
 
77
+ if (this.sscdType == 'EXTERNAL') {
78
+ const existingKeys: MusapKey[] = (this.musapClient.listKeys()) as MusapKey[]
79
+ const extKey = existingKeys.find(musapKey => musapKey.sscdType as string === 'External Signature') // FIXME returning does not match SscdType enum
80
+ if (extKey) {
81
+ extKey.algorithm = 'eccp256r1' // FIXME MUSAP announces key as rsa2k, but it's actually EC
82
+ return this.asMusapKeyInfo(extKey)
83
+ }
84
+ return Promise.reject(Error(`No external key was bound yet for sscd ${this.sscdId}`))
85
+ }
86
+
60
87
  const keyGenReq = {
61
88
  keyAlgorithm: this.mapKeyTypeToAlgorithmType(type),
62
89
  keyUsage: 'keyUsage' in meta ? (meta.keyUsage as string) : 'sign',
63
90
  keyAlias: meta.keyAlias as string,
64
- attributes: 'attributes' in meta ? (meta.attributes as KeyAttribute[]) : [],
91
+ attributes: this.recordToKeyAttributes({ ...this.defaultKeyAttributes, ...('attributes' in meta ? meta.attributes : {}) }),
65
92
  role: 'role' in meta ? (meta.role as string) : 'administrator',
66
93
  } satisfies KeyGenReq
67
94
 
68
95
  try {
69
- const generatedKeyUri = await this.musapKeyStore.generateKey(this.sscdType, keyGenReq)
96
+ const generatedKeyUri = await this.musapClient.generateKey(this.sscdType, keyGenReq)
70
97
  if (generatedKeyUri) {
71
98
  logger.debug('Generated key:', generatedKeyUri)
72
- const key = await this.musapKeyStore.getKeyByUri(generatedKeyUri)
99
+ const key = this.musapClient.getKeyByUri(generatedKeyUri)
73
100
  return this.asMusapKeyInfo(key)
74
101
  } else {
75
102
  return Promise.reject(new Error('Failed to generate key. No key URI'))
@@ -99,6 +126,9 @@ export class MusapKeyManagementSystem extends AbstractKeyManagementSystem {
99
126
  return 'Secp256k1'
100
127
  case 'eccp256r1':
101
128
  return 'Secp256r1'
129
+ case 'ecc_ed25519':
130
+ return 'Ed25519'
131
+ case 'rsa2k':
102
132
  case 'rsa4k':
103
133
  return 'RSA'
104
134
  default:
@@ -107,8 +137,12 @@ export class MusapKeyManagementSystem extends AbstractKeyManagementSystem {
107
137
  }
108
138
 
109
139
  async deleteKey({ kid }: { kid: string }): Promise<boolean> {
110
- try {
111
- this.musapKeyStore.removeKey(kid)
140
+ try {
141
+ const key: MusapKey = this.musapClient.getKeyById(kid) as MusapKey
142
+ if (key.sscdType as string === 'External Signature') {
143
+ return true // FIXME we can't remove a eSim key for now because this would mean onboarding again
144
+ }
145
+ void this.musapClient.removeKey(kid)
112
146
  return true
113
147
  } catch (error) {
114
148
  console.warn('Failed to delete key:', error)
@@ -129,14 +163,22 @@ export class MusapKeyManagementSystem extends AbstractKeyManagementSystem {
129
163
  return signatureAlgorithmFromKeyAlgorithm(providedAlgorithm as JWSAlgorithm)
130
164
  }
131
165
 
132
- async sign(args: { keyRef: Pick<IKey, 'kid'>; algorithm?: string; data: Uint8Array; [x: string]: any }): Promise<string> {
166
+ async sign(args: {
167
+ keyRef: Pick<IKey, 'kid'>;
168
+ algorithm?: string;
169
+ data: Uint8Array;
170
+ [x: string]: any
171
+ }): Promise<string> {
133
172
  if (!args.keyRef) {
134
173
  throw new Error('key_not_found: No key ref provided')
135
174
  }
136
175
 
137
176
  const data = new TextDecoder().decode(args.data as Uint8Array)
138
177
 
139
- const key: MusapKey = this.musapKeyStore.getKeyById(args.keyRef.kid) as MusapKey
178
+ const key: MusapKey = this.musapClient.getKeyById(args.keyRef.kid) as MusapKey
179
+ if (key.sscdType as string === 'External Signature') {
180
+ key.algorithm = 'eccp256r1' // FIXME MUSAP announces key as rsa2k, but it's actually EC
181
+ }
140
182
  const signatureReq: SignatureReq = {
141
183
  keyUri: key.keyUri,
142
184
  data,
@@ -144,9 +186,9 @@ export class MusapKeyManagementSystem extends AbstractKeyManagementSystem {
144
186
  displayText: args.displayText,
145
187
  transId: args.transId,
146
188
  format: (args.format as SignatureFormat) ?? 'RAW',
147
- attributes: args.attributes,
189
+ attributes: this.recordToSignatureAttributes({ ...this.defaultSignAttributes, ...args.attributes }),
148
190
  }
149
- return this.musapKeyStore.sign(signatureReq)
191
+ return this.musapClient.sign(signatureReq)
150
192
  }
151
193
 
152
194
  async importKey(args: Omit<MinimalImportableKey, 'kms'> & { privateKeyPEM?: string }): Promise<ManagedKeyInfo> {
@@ -156,6 +198,7 @@ export class MusapKeyManagementSystem extends AbstractKeyManagementSystem {
156
198
  private asMusapKeyInfo(args: MusapKey): ManagedKeyInfo {
157
199
  const { keyId, publicKey, ...metadata }: KeyMetadata = { ...args }
158
200
  const keyType = this.mapAlgorithmTypeToKeyType(args.algorithm)
201
+
159
202
  const pemBinary = PEMToBinary(args.publicKey.pem) // The der is flawed, it's not binary but a string [123, 4567]
160
203
  const publicKeyBinary = isAsn1Der(pemBinary) ? asn1DerToRawPublicKey(pemBinary, keyType) : pemBinary
161
204
  const publicKeyHex = isRawCompressedPublicKey(publicKeyBinary) // TODO In the future I think it's better to have an option in KeyGenReq to specify which public key format we want back. Now it's different in iOS vs Android and we need to handle that inconsistency afterwards
@@ -176,4 +219,24 @@ export class MusapKeyManagementSystem extends AbstractKeyManagementSystem {
176
219
  sharedSecret(args: { myKeyRef: Pick<IKey, 'kid'>; theirKey: Pick<IKey, 'publicKeyHex' | 'type'> }): Promise<string> {
177
220
  throw new Error('Not supported.')
178
221
  }
222
+
223
+ private recordToKeyAttributes(record?: Record<string, string>): KeyAttribute[] {
224
+ if (!record) {
225
+ return []
226
+ }
227
+ return Object.entries(record).map(([key, value]) => ({
228
+ name: key,
229
+ value,
230
+ }))
231
+ }
232
+
233
+ private recordToSignatureAttributes(record?: Record<string, string>): SignatureAttribute[] {
234
+ if (!record) {
235
+ return []
236
+ }
237
+ return Object.entries(record).map(([key, value]) => ({
238
+ name: key,
239
+ value,
240
+ }))
241
+ }
179
242
  }