@sphereon/ssi-sdk-ext.kms-musap-rn 0.28.1-feature.esm.cjs.8 → 0.28.1-feature.esm.cjs.9
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/dist/index.cjs +47 -68
- package/dist/index.cjs.map +1 -1
- package/package.json +4 -4
package/dist/index.cjs
CHANGED
|
@@ -1,60 +1,36 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __defProp = Object.defineProperty;
|
|
3
|
-
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
-
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
-
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; } var _class;var __defProp = Object.defineProperty;
|
|
6
2
|
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
7
|
-
var __export = (target, all) => {
|
|
8
|
-
for (var name in all)
|
|
9
|
-
__defProp(target, name, { get: all[name], enumerable: true });
|
|
10
|
-
};
|
|
11
|
-
var __copyProps = (to, from, except, desc) => {
|
|
12
|
-
if (from && typeof from === "object" || typeof from === "function") {
|
|
13
|
-
for (let key of __getOwnPropNames(from))
|
|
14
|
-
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
15
|
-
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
16
|
-
}
|
|
17
|
-
return to;
|
|
18
|
-
};
|
|
19
|
-
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
20
|
-
|
|
21
|
-
// src/index.ts
|
|
22
|
-
var index_exports = {};
|
|
23
|
-
__export(index_exports, {
|
|
24
|
-
MusapKeyManagementSystem: () => MusapKeyManagementSystem
|
|
25
|
-
});
|
|
26
|
-
module.exports = __toCommonJS(index_exports);
|
|
27
3
|
|
|
28
4
|
// src/MusapKeyManagerSystem.ts
|
|
29
|
-
var
|
|
30
|
-
var
|
|
31
|
-
var
|
|
32
|
-
var
|
|
33
|
-
var
|
|
34
|
-
var
|
|
35
|
-
var
|
|
36
|
-
var
|
|
37
|
-
var logger =
|
|
38
|
-
var MusapKeyManagementSystem = class extends
|
|
5
|
+
var _ssisdkextx509utils = require('@sphereon/ssi-sdk-ext.x509-utils');
|
|
6
|
+
var _musapreactnative = require('@sphereon/musap-react-native');
|
|
7
|
+
var _keymanager = require('@veramo/key-manager');
|
|
8
|
+
var _textencoding = require('text-encoding');
|
|
9
|
+
var _ssitypes = require('@sphereon/ssi-types');
|
|
10
|
+
var _ssisdkextkeyutils = require('@sphereon/ssi-sdk-ext.key-utils');
|
|
11
|
+
var _fromstring = require('uint8arrays/from-string');
|
|
12
|
+
var _tostring = require('uint8arrays/to-string');
|
|
13
|
+
var logger = _ssitypes.Loggers.DEFAULT.get("sphereon:musap-rn-kms");
|
|
14
|
+
var MusapKeyManagementSystem = (_class = class extends _keymanager.AbstractKeyManagementSystem {
|
|
39
15
|
static {
|
|
40
16
|
__name(this, "MusapKeyManagementSystem");
|
|
41
17
|
}
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
|
|
47
23
|
constructor(sscdType, sscdId, opts) {
|
|
48
|
-
super();
|
|
24
|
+
super();_class.prototype.__init.call(this);_class.prototype.__init2.call(this);_class.prototype.__init3.call(this);;
|
|
49
25
|
try {
|
|
50
|
-
this.musapClient =
|
|
26
|
+
this.musapClient = _musapreactnative.MusapClient;
|
|
51
27
|
this.sscdType = sscdType ? sscdType : "TEE";
|
|
52
|
-
this.sscdId = sscdId
|
|
53
|
-
this.defaultKeyAttributes = opts
|
|
54
|
-
this.defaultSignAttributes = opts
|
|
28
|
+
this.sscdId = _nullishCoalesce(sscdId, () => ( this.sscdType));
|
|
29
|
+
this.defaultKeyAttributes = _optionalChain([opts, 'optionalAccess', _ => _.defaultKeyAttributes]);
|
|
30
|
+
this.defaultSignAttributes = _optionalChain([opts, 'optionalAccess', _2 => _2.defaultSignAttributes]);
|
|
55
31
|
const enabledSscds = this.musapClient.listEnabledSscds();
|
|
56
32
|
if (!enabledSscds.some((value) => value.sscdId == sscdId)) {
|
|
57
|
-
this.musapClient.enableSscd(this.sscdType, this.sscdId, opts
|
|
33
|
+
this.musapClient.enableSscd(this.sscdType, this.sscdId, _optionalChain([opts, 'optionalAccess', _3 => _3.externalSscdSettings]));
|
|
58
34
|
}
|
|
59
35
|
} catch (e) {
|
|
60
36
|
console.error("enableSscd", e);
|
|
@@ -103,7 +79,7 @@ var MusapKeyManagementSystem = class extends import_key_manager.AbstractKeyManag
|
|
|
103
79
|
throw error;
|
|
104
80
|
}
|
|
105
81
|
}
|
|
106
|
-
mapKeyTypeToAlgorithmType = /* @__PURE__ */ __name((type) => {
|
|
82
|
+
__init() {this.mapKeyTypeToAlgorithmType = /* @__PURE__ */ __name((type) => {
|
|
107
83
|
switch (type) {
|
|
108
84
|
case "Secp256k1":
|
|
109
85
|
return "ECCP256K1";
|
|
@@ -114,8 +90,8 @@ var MusapKeyManagementSystem = class extends import_key_manager.AbstractKeyManag
|
|
|
114
90
|
default:
|
|
115
91
|
throw new Error(`Key type ${type} is not supported by MUSAP`);
|
|
116
92
|
}
|
|
117
|
-
}, "mapKeyTypeToAlgorithmType")
|
|
118
|
-
mapAlgorithmTypeToKeyType = /* @__PURE__ */ __name((type) => {
|
|
93
|
+
}, "mapKeyTypeToAlgorithmType")}
|
|
94
|
+
__init2() {this.mapAlgorithmTypeToKeyType = /* @__PURE__ */ __name((type) => {
|
|
119
95
|
switch (type) {
|
|
120
96
|
case "eccp256k1":
|
|
121
97
|
return "Secp256k1";
|
|
@@ -129,7 +105,7 @@ var MusapKeyManagementSystem = class extends import_key_manager.AbstractKeyManag
|
|
|
129
105
|
default:
|
|
130
106
|
throw new Error(`Key type ${type} is not supported.`);
|
|
131
107
|
}
|
|
132
|
-
}, "mapAlgorithmTypeToKeyType")
|
|
108
|
+
}, "mapAlgorithmTypeToKeyType")}
|
|
133
109
|
async deleteKey({ kid }) {
|
|
134
110
|
try {
|
|
135
111
|
const key = this.musapClient.getKeyById(kid);
|
|
@@ -145,18 +121,18 @@ var MusapKeyManagementSystem = class extends import_key_manager.AbstractKeyManag
|
|
|
145
121
|
}
|
|
146
122
|
determineAlgorithm(providedAlgorithm, keyAlgorithm) {
|
|
147
123
|
if (providedAlgorithm === void 0) {
|
|
148
|
-
return (0,
|
|
124
|
+
return _musapreactnative.signatureAlgorithmFromKeyAlgorithm.call(void 0, keyAlgorithm);
|
|
149
125
|
}
|
|
150
|
-
if ((0,
|
|
126
|
+
if (_musapreactnative.isSignatureAlgorithmType.call(void 0, providedAlgorithm)) {
|
|
151
127
|
return providedAlgorithm;
|
|
152
128
|
}
|
|
153
|
-
return (0,
|
|
129
|
+
return _musapreactnative.signatureAlgorithmFromKeyAlgorithm.call(void 0, providedAlgorithm);
|
|
154
130
|
}
|
|
155
131
|
async sign(args) {
|
|
156
132
|
if (!args.keyRef) {
|
|
157
133
|
throw new Error("key_not_found: No key ref provided");
|
|
158
134
|
}
|
|
159
|
-
const data = new
|
|
135
|
+
const data = new (0, _textencoding.TextDecoder)().decode(args.data);
|
|
160
136
|
const key = this.musapClient.getKeyById(args.keyRef.kid);
|
|
161
137
|
if (key.sscdType === "External Signature") {
|
|
162
138
|
key.algorithm = "eccp256r1";
|
|
@@ -167,7 +143,7 @@ var MusapKeyManagementSystem = class extends import_key_manager.AbstractKeyManag
|
|
|
167
143
|
algorithm: this.determineAlgorithm(args.algorithm, key.algorithm),
|
|
168
144
|
displayText: args.displayText,
|
|
169
145
|
transId: args.transId,
|
|
170
|
-
format: args.format
|
|
146
|
+
format: _nullishCoalesce(args.format, () => ( "RAW")),
|
|
171
147
|
attributes: this.recordToSignatureAttributes({
|
|
172
148
|
...this.defaultSignAttributes,
|
|
173
149
|
...args.attributes
|
|
@@ -178,16 +154,16 @@ var MusapKeyManagementSystem = class extends import_key_manager.AbstractKeyManag
|
|
|
178
154
|
async importKey(args) {
|
|
179
155
|
throw new Error("importKey is not implemented for MusapKeyManagementSystem.");
|
|
180
156
|
}
|
|
181
|
-
decodeMusapPublicKey = /* @__PURE__ */ __name((args) => {
|
|
157
|
+
__init3() {this.decodeMusapPublicKey = /* @__PURE__ */ __name((args) => {
|
|
182
158
|
const { publicKey, keyType } = args;
|
|
183
|
-
const pemBinary = (0,
|
|
184
|
-
const pemString = (0,
|
|
159
|
+
const pemBinary = _ssisdkextx509utils.PEMToBinary.call(void 0, publicKey.pem);
|
|
160
|
+
const pemString = _tostring.toString.call(void 0, pemBinary, "utf8");
|
|
185
161
|
const isDoubleEncoded = pemBinary.length > 0 && typeof pemString === "string" && pemString.startsWith("MF");
|
|
186
162
|
if (isDoubleEncoded) {
|
|
187
|
-
const actualDerBytes = (0,
|
|
163
|
+
const actualDerBytes = _fromstring.fromString.call(void 0, pemString, "base64");
|
|
188
164
|
const keyDataStart = 24;
|
|
189
165
|
const keyData = actualDerBytes.slice(keyDataStart);
|
|
190
|
-
let publicKeyHex = (0,
|
|
166
|
+
let publicKeyHex = _tostring.toString.call(void 0, keyData, "hex");
|
|
191
167
|
if (publicKeyHex.length <= 128 && !publicKeyHex.startsWith("04")) {
|
|
192
168
|
publicKeyHex = "04" + publicKeyHex;
|
|
193
169
|
}
|
|
@@ -195,21 +171,21 @@ var MusapKeyManagementSystem = class extends import_key_manager.AbstractKeyManag
|
|
|
195
171
|
publicKeyHex = publicKeyHex + "0";
|
|
196
172
|
}
|
|
197
173
|
if (publicKeyHex.startsWith("04") && publicKeyHex.length === 130) {
|
|
198
|
-
const xCoord = (0,
|
|
199
|
-
const yCoord = (0,
|
|
174
|
+
const xCoord = _fromstring.fromString.call(void 0, publicKeyHex.slice(2, 66), "hex");
|
|
175
|
+
const yCoord = _fromstring.fromString.call(void 0, publicKeyHex.slice(66, 130), "hex");
|
|
200
176
|
const prefix = new Uint8Array([
|
|
201
177
|
yCoord[31] % 2 === 0 ? 2 : 3
|
|
202
178
|
]);
|
|
203
179
|
const compressedKey = new Uint8Array(33);
|
|
204
180
|
compressedKey.set(prefix, 0);
|
|
205
181
|
compressedKey.set(xCoord, 1);
|
|
206
|
-
return (0,
|
|
182
|
+
return _tostring.toString.call(void 0, compressedKey, "hex");
|
|
207
183
|
}
|
|
208
184
|
return publicKeyHex;
|
|
209
185
|
}
|
|
210
|
-
const publicKeyBinary = (0,
|
|
211
|
-
return (0,
|
|
212
|
-
}, "decodeMusapPublicKey")
|
|
186
|
+
const publicKeyBinary = _ssisdkextkeyutils.isAsn1Der.call(void 0, pemBinary) ? _ssisdkextkeyutils.asn1DerToRawPublicKey.call(void 0, pemBinary, keyType) : pemBinary;
|
|
187
|
+
return _ssisdkextkeyutils.isRawCompressedPublicKey.call(void 0, publicKeyBinary) ? _ssisdkextkeyutils.hexStringFromUint8Array.call(void 0, publicKeyBinary) : _ssisdkextkeyutils.toRawCompressedHexPublicKey.call(void 0, publicKeyBinary, keyType);
|
|
188
|
+
}, "decodeMusapPublicKey")}
|
|
213
189
|
asMusapKeyInfo(args) {
|
|
214
190
|
const { keyId, publicKey, ...metadata } = {
|
|
215
191
|
...args
|
|
@@ -225,7 +201,7 @@ var MusapKeyManagementSystem = class extends import_key_manager.AbstractKeyManag
|
|
|
225
201
|
publicKeyHex,
|
|
226
202
|
meta: metadata
|
|
227
203
|
};
|
|
228
|
-
const jwkThumbprint = (0,
|
|
204
|
+
const jwkThumbprint = _ssisdkextkeyutils.calculateJwkThumbprintForKey.call(void 0, {
|
|
229
205
|
key: keyInfo
|
|
230
206
|
});
|
|
231
207
|
keyInfo.meta = {
|
|
@@ -255,5 +231,8 @@ var MusapKeyManagementSystem = class extends import_key_manager.AbstractKeyManag
|
|
|
255
231
|
value
|
|
256
232
|
}));
|
|
257
233
|
}
|
|
258
|
-
};
|
|
234
|
+
}, _class);
|
|
235
|
+
|
|
236
|
+
|
|
237
|
+
exports.MusapKeyManagementSystem = MusapKeyManagementSystem;
|
|
259
238
|
//# sourceMappingURL=index.cjs.map
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/MusapKeyManagerSystem.ts"],"sourcesContent":["export { MusapKeyManagementSystem } from './MusapKeyManagerSystem'\n\nexport interface KeyMetadata {\n algorithms?: string[]\n\n [x: string]: any\n}\n","import { PEMToBinary } from '@sphereon/ssi-sdk-ext.x509-utils'\nimport { IKey, ManagedKeyInfo, MinimalImportableKey, TKeyType } from '@veramo/core'\nimport {\n ExternalSscdSettings,\n IMusapClient,\n isSignatureAlgorithmType,\n JWSAlgorithm,\n KeyAlgorithm,\n KeyAlgorithmType,\n KeyAttribute,\n KeyGenReq,\n MusapClient,\n MusapKey,\n signatureAlgorithmFromKeyAlgorithm,\n SignatureAlgorithmType,\n SignatureAttribute,\n SignatureFormat,\n SignatureReq,\n SscdType,\n} from '@sphereon/musap-react-native'\nimport { AbstractKeyManagementSystem } from '@veramo/key-manager'\nimport { TextDecoder } from 'text-encoding'\nimport { Loggers } from '@sphereon/ssi-types'\nimport { KeyMetadata } from './index'\nimport {\n asn1DerToRawPublicKey,\n calculateJwkThumbprintForKey,\n hexStringFromUint8Array,\n isAsn1Der,\n isRawCompressedPublicKey,\n toRawCompressedHexPublicKey,\n} from '@sphereon/ssi-sdk-ext.key-utils'\n// @ts-ignore\nimport { fromString } from 'uint8arrays/from-string'\n// @ts-ignore\nimport { toString } from 'uint8arrays/to-string'\n\nexport const logger = Loggers.DEFAULT.get('sphereon:musap-rn-kms')\n\nexport class MusapKeyManagementSystem extends AbstractKeyManagementSystem {\n private musapClient: IMusapClient\n private readonly sscdType: SscdType\n private readonly sscdId: string\n private readonly defaultKeyAttributes: Record<string, string> | undefined\n private readonly defaultSignAttributes: Record<string, string> | undefined\n\n constructor(\n sscdType?: SscdType,\n sscdId?: string,\n opts?: {\n externalSscdSettings?: ExternalSscdSettings\n defaultKeyAttributes?: Record<string, string>\n defaultSignAttributes?: Record<string, string>\n }\n ) {\n super()\n try {\n this.musapClient = MusapClient\n this.sscdType = sscdType ? sscdType : 'TEE'\n this.sscdId = sscdId ?? this.sscdType\n this.defaultKeyAttributes = opts?.defaultKeyAttributes\n this.defaultSignAttributes = opts?.defaultSignAttributes\n\n const enabledSscds = this.musapClient.listEnabledSscds()\n if (!enabledSscds.some((value) => value.sscdId == sscdId)) {\n this.musapClient.enableSscd(this.sscdType, this.sscdId, opts?.externalSscdSettings)\n }\n } catch (e) {\n console.error('enableSscd', e)\n throw Error('enableSscd failed')\n }\n }\n\n async listKeys(): Promise<ManagedKeyInfo[]> {\n const keysJson: MusapKey[] = this.musapClient.listKeys() as MusapKey[]\n return keysJson.map((key) => this.asMusapKeyInfo(key))\n }\n\n async createKey(args: { type: TKeyType; meta?: KeyMetadata }): Promise<ManagedKeyInfo> {\n const { type, meta } = args\n if (meta === undefined || !('keyAlias' in meta)) {\n return Promise.reject(Error('a unique keyAlias field is required for MUSAP'))\n }\n\n if (this.sscdType == 'EXTERNAL') {\n const existingKeys: MusapKey[] = this.musapClient.listKeys() as MusapKey[]\n const extKey = existingKeys.find((musapKey) => (musapKey.sscdType as string) === 'External Signature') // FIXME returning does not match SscdType enum\n if (extKey) {\n extKey.algorithm = 'eccp256r1' // FIXME MUSAP announces key as rsa2k, but it's actually EC\n return this.asMusapKeyInfo(extKey)\n }\n return Promise.reject(Error(`No external key was bound yet for sscd ${this.sscdId}`))\n }\n\n const keyGenReq = {\n keyAlgorithm: this.mapKeyTypeToAlgorithmType(type),\n keyUsage: 'keyUsage' in meta ? (meta.keyUsage as string) : 'sign',\n keyAlias: meta.keyAlias as string,\n attributes: this.recordToKeyAttributes({ ...this.defaultKeyAttributes, ...('attributes' in meta ? meta.attributes : {}) }),\n role: 'role' in meta ? (meta.role as string) : 'administrator',\n } satisfies KeyGenReq\n\n try {\n const generatedKeyUri = await this.musapClient.generateKey(this.sscdType, keyGenReq)\n if (generatedKeyUri) {\n logger.debug('Generated key:', generatedKeyUri)\n const key = this.musapClient.getKeyByUri(generatedKeyUri)\n return this.asMusapKeyInfo(key)\n } else {\n return Promise.reject(new Error('Failed to generate key. No key URI'))\n }\n } catch (error) {\n logger.error('An error occurred:', error)\n throw error\n }\n }\n\n private mapKeyTypeToAlgorithmType = (type: TKeyType): KeyAlgorithmType => {\n switch (type) {\n case 'Secp256k1':\n return 'ECCP256K1'\n case 'Secp256r1':\n return 'ECCP256R1'\n case 'RSA':\n return 'RSA2K'\n default:\n throw new Error(`Key type ${type} is not supported by MUSAP`)\n }\n }\n\n private mapAlgorithmTypeToKeyType = (type: KeyAlgorithm): TKeyType => {\n switch (type) {\n case 'eccp256k1':\n return 'Secp256k1'\n case 'eccp256r1':\n return 'Secp256r1'\n case 'ecc_ed25519':\n return 'Ed25519'\n case 'rsa2k':\n case 'rsa4k':\n return 'RSA'\n default:\n throw new Error(`Key type ${type} is not supported.`)\n }\n }\n\n async deleteKey({ kid }: { kid: string }): Promise<boolean> {\n try {\n const key: MusapKey = this.musapClient.getKeyById(kid) as MusapKey\n if ((key.sscdType as string) === 'External Signature') {\n return true // FIXME we can't remove a eSim key for now because this would mean onboarding again\n }\n void this.musapClient.removeKey(kid)\n return true\n } catch (error) {\n console.warn('Failed to delete key:', error)\n return false\n }\n }\n\n private determineAlgorithm(providedAlgorithm: string | undefined, keyAlgorithm: KeyAlgorithm): SignatureAlgorithmType {\n if (providedAlgorithm === undefined) {\n return signatureAlgorithmFromKeyAlgorithm(keyAlgorithm)\n }\n\n if (isSignatureAlgorithmType(providedAlgorithm)) {\n return providedAlgorithm\n }\n\n // Veramo translates TKeyType to JWSAlgorithm\n return signatureAlgorithmFromKeyAlgorithm(providedAlgorithm as JWSAlgorithm)\n }\n\n async sign(args: { keyRef: Pick<IKey, 'kid'>; algorithm?: string; data: Uint8Array; [x: string]: any }): Promise<string> {\n if (!args.keyRef) {\n throw new Error('key_not_found: No key ref provided')\n }\n\n const data = new TextDecoder().decode(args.data as Uint8Array)\n\n const key: MusapKey = this.musapClient.getKeyById(args.keyRef.kid) as MusapKey\n if ((key.sscdType as string) === 'External Signature') {\n key.algorithm = 'eccp256r1' // FIXME MUSAP announces key as rsa2k, but it's actually EC\n }\n const signatureReq: SignatureReq = {\n keyUri: key.keyUri,\n data,\n algorithm: this.determineAlgorithm(args.algorithm, key.algorithm),\n displayText: args.displayText,\n transId: args.transId,\n format: (args.format as SignatureFormat) ?? 'RAW',\n attributes: this.recordToSignatureAttributes({ ...this.defaultSignAttributes, ...args.attributes }),\n }\n return this.musapClient.sign(signatureReq)\n }\n\n async importKey(args: Omit<MinimalImportableKey, 'kms'> & { privateKeyPEM?: string }): Promise<ManagedKeyInfo> {\n throw new Error('importKey is not implemented for MusapKeyManagementSystem.')\n }\n\n private decodeMusapPublicKey = (args: { publicKey: { pem: string }; keyType: TKeyType }): string => {\n const { publicKey, keyType } = args\n\n // First try the normal PEM decoding path\n const pemBinary = PEMToBinary(publicKey.pem)\n\n // Check if we got a string that looks like base64 (might be double encoded)\n // Convert Uint8Array to string safely\n const pemString = toString(pemBinary, 'utf8')\n const isDoubleEncoded = pemBinary.length > 0 && typeof pemString === 'string' && pemString.startsWith('MF')\n\n if (isDoubleEncoded) {\n // Handle double-encoded case\n const actualDerBytes = fromString(pemString, 'base64')\n\n // For double-encoded case, we know the key data starts after the header\n const keyDataStart = 24\n const keyData = actualDerBytes.slice(keyDataStart)\n\n // Convert to public key hex\n let publicKeyHex = toString(keyData, 'hex')\n\n // If it's not compressed yet and doesn't start with 0x04 (uncompressed point marker), add it\n if (publicKeyHex.length <= 128 && !publicKeyHex.startsWith('04')) {\n publicKeyHex = '04' + publicKeyHex\n }\n\n // Ensure we have full 65 bytes for uncompressed keys\n while (publicKeyHex.startsWith('04') && publicKeyHex.length < 130) {\n publicKeyHex = publicKeyHex + '0'\n }\n\n // Now convert to compressed format if needed\n if (publicKeyHex.startsWith('04') && publicKeyHex.length === 130) {\n const xCoord = fromString(publicKeyHex.slice(2, 66), 'hex')\n const yCoord = fromString(publicKeyHex.slice(66, 130), 'hex')\n const prefix = new Uint8Array([yCoord[31] % 2 === 0 ? 0x02 : 0x03])\n const compressedKey = new Uint8Array(33) // 1 byte prefix + 32 bytes x coordinate\n compressedKey.set(prefix, 0)\n compressedKey.set(xCoord, 1)\n return toString(compressedKey, 'hex')\n }\n\n return publicKeyHex\n }\n\n // Not double encoded, proceed with normal path\n const publicKeyBinary = isAsn1Der(pemBinary) ? asn1DerToRawPublicKey(pemBinary, keyType) : pemBinary\n return isRawCompressedPublicKey(publicKeyBinary)\n ? hexStringFromUint8Array(publicKeyBinary)\n : toRawCompressedHexPublicKey(publicKeyBinary, keyType)\n }\n\n private asMusapKeyInfo(args: MusapKey): ManagedKeyInfo {\n const { keyId, publicKey, ...metadata }: KeyMetadata = { ...args }\n const keyType = this.mapAlgorithmTypeToKeyType(args.algorithm)\n\n const publicKeyHex = this.decodeMusapPublicKey({\n publicKey: publicKey,\n keyType: keyType,\n })\n\n const keyInfo: Partial<ManagedKeyInfo> = {\n kid: keyId,\n type: keyType,\n publicKeyHex,\n meta: metadata,\n }\n\n const jwkThumbprint = calculateJwkThumbprintForKey({ key: keyInfo as ManagedKeyInfo })\n keyInfo.meta = { ...keyInfo.meta, jwkThumbprint }\n return keyInfo as ManagedKeyInfo\n }\n\n sharedSecret(args: { myKeyRef: Pick<IKey, 'kid'>; theirKey: Pick<IKey, 'publicKeyHex' | 'type'> }): Promise<string> {\n throw new Error('Not supported.')\n }\n\n private recordToKeyAttributes(record?: Record<string, string>): KeyAttribute[] {\n if (!record) {\n return []\n }\n return Object.entries(record).map(([key, value]) => ({\n name: key,\n value,\n }))\n }\n\n private recordToSignatureAttributes(record?: Record<string, string>): SignatureAttribute[] {\n if (!record) {\n return []\n }\n return Object.entries(record).map(([key, value]) => ({\n name: key,\n value,\n }))\n }\n}\n"],"mappings":"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","names":["import_ssi_sdk_ext","logger","Loggers","DEFAULT","get","MusapKeyManagementSystem","AbstractKeyManagementSystem","musapClient","sscdType","sscdId","defaultKeyAttributes","defaultSignAttributes","constructor","opts","MusapClient","enabledSscds","listEnabledSscds","some","value","enableSscd","externalSscdSettings","e","console","error","Error","listKeys","keysJson","map","key","asMusapKeyInfo","createKey","args","type","meta","undefined","Promise","reject","existingKeys","extKey","find","musapKey","algorithm","keyGenReq","keyAlgorithm","mapKeyTypeToAlgorithmType","keyUsage","keyAlias","attributes","recordToKeyAttributes","role","generatedKeyUri","generateKey","debug","getKeyByUri","mapAlgorithmTypeToKeyType","deleteKey","kid","getKeyById","removeKey","warn","determineAlgorithm","providedAlgorithm","signatureAlgorithmFromKeyAlgorithm","isSignatureAlgorithmType","sign","keyRef","data","TextDecoder","decode","signatureReq","keyUri","displayText","transId","format","recordToSignatureAttributes","importKey","decodeMusapPublicKey","publicKey","keyType","pemBinary","PEMToBinary","pem","pemString","toString","isDoubleEncoded","length","startsWith","actualDerBytes","fromString","keyDataStart","keyData","slice","publicKeyHex","xCoord","yCoord","prefix","Uint8Array","compressedKey","set","publicKeyBinary","isAsn1Der","asn1DerToRawPublicKey","isRawCompressedPublicKey","hexStringFromUint8Array","toRawCompressedHexPublicKey","keyId","metadata","keyInfo","jwkThumbprint","calculateJwkThumbprintForKey","sharedSecret","record","Object","entries","name"]}
|
|
1
|
+
{"version":3,"sources":["/home/runner/work/SSI-SDK-crypto-extensions/SSI-SDK-crypto-extensions/packages/kms-musap-rn/dist/index.cjs","../src/MusapKeyManagerSystem.ts"],"names":["logger","Loggers","DEFAULT","get","MusapKeyManagementSystem","AbstractKeyManagementSystem","musapClient","sscdType","sscdId","defaultKeyAttributes","defaultSignAttributes","constructor","opts","MusapClient","enabledSscds","listEnabledSscds","some","value","enableSscd","externalSscdSettings","e","console","error","Error","listKeys","keysJson","map","key","asMusapKeyInfo","createKey","args","type","meta","undefined","Promise","reject","existingKeys","extKey","find","musapKey","algorithm","keyAlias","keyGenReq","generatedKeyUri","kid","keyAlgorithm","providedAlgorithm","keyUri","data","displayText","transId","attributes","signatureReq","pemString","keyDataStart","publicKeyHex","keyType","publicKeyBinary","publicKey","keyId","metadata","keyInfo","jwkThumbprint"],"mappings":"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","file":"/home/runner/work/SSI-SDK-crypto-extensions/SSI-SDK-crypto-extensions/packages/kms-musap-rn/dist/index.cjs","sourcesContent":[null,"import { PEMToBinary } from '@sphereon/ssi-sdk-ext.x509-utils'\nimport { IKey, ManagedKeyInfo, MinimalImportableKey, TKeyType } from '@veramo/core'\nimport {\n ExternalSscdSettings,\n IMusapClient,\n isSignatureAlgorithmType,\n JWSAlgorithm,\n KeyAlgorithm,\n KeyAlgorithmType,\n KeyAttribute,\n KeyGenReq,\n MusapClient,\n MusapKey,\n signatureAlgorithmFromKeyAlgorithm,\n SignatureAlgorithmType,\n SignatureAttribute,\n SignatureFormat,\n SignatureReq,\n SscdType,\n} from '@sphereon/musap-react-native'\nimport { AbstractKeyManagementSystem } from '@veramo/key-manager'\nimport { TextDecoder } from 'text-encoding'\nimport { Loggers } from '@sphereon/ssi-types'\nimport { KeyMetadata } from './index'\nimport {\n asn1DerToRawPublicKey,\n calculateJwkThumbprintForKey,\n hexStringFromUint8Array,\n isAsn1Der,\n isRawCompressedPublicKey,\n toRawCompressedHexPublicKey,\n} from '@sphereon/ssi-sdk-ext.key-utils'\n// @ts-ignore\nimport { fromString } from 'uint8arrays/from-string'\n// @ts-ignore\nimport { toString } from 'uint8arrays/to-string'\n\nexport const logger = Loggers.DEFAULT.get('sphereon:musap-rn-kms')\n\nexport class MusapKeyManagementSystem extends AbstractKeyManagementSystem {\n private musapClient: IMusapClient\n private readonly sscdType: SscdType\n private readonly sscdId: string\n private readonly defaultKeyAttributes: Record<string, string> | undefined\n private readonly defaultSignAttributes: Record<string, string> | undefined\n\n constructor(\n sscdType?: SscdType,\n sscdId?: string,\n opts?: {\n externalSscdSettings?: ExternalSscdSettings\n defaultKeyAttributes?: Record<string, string>\n defaultSignAttributes?: Record<string, string>\n }\n ) {\n super()\n try {\n this.musapClient = MusapClient\n this.sscdType = sscdType ? sscdType : 'TEE'\n this.sscdId = sscdId ?? this.sscdType\n this.defaultKeyAttributes = opts?.defaultKeyAttributes\n this.defaultSignAttributes = opts?.defaultSignAttributes\n\n const enabledSscds = this.musapClient.listEnabledSscds()\n if (!enabledSscds.some((value) => value.sscdId == sscdId)) {\n this.musapClient.enableSscd(this.sscdType, this.sscdId, opts?.externalSscdSettings)\n }\n } catch (e) {\n console.error('enableSscd', e)\n throw Error('enableSscd failed')\n }\n }\n\n async listKeys(): Promise<ManagedKeyInfo[]> {\n const keysJson: MusapKey[] = this.musapClient.listKeys() as MusapKey[]\n return keysJson.map((key) => this.asMusapKeyInfo(key))\n }\n\n async createKey(args: { type: TKeyType; meta?: KeyMetadata }): Promise<ManagedKeyInfo> {\n const { type, meta } = args\n if (meta === undefined || !('keyAlias' in meta)) {\n return Promise.reject(Error('a unique keyAlias field is required for MUSAP'))\n }\n\n if (this.sscdType == 'EXTERNAL') {\n const existingKeys: MusapKey[] = this.musapClient.listKeys() as MusapKey[]\n const extKey = existingKeys.find((musapKey) => (musapKey.sscdType as string) === 'External Signature') // FIXME returning does not match SscdType enum\n if (extKey) {\n extKey.algorithm = 'eccp256r1' // FIXME MUSAP announces key as rsa2k, but it's actually EC\n return this.asMusapKeyInfo(extKey)\n }\n return Promise.reject(Error(`No external key was bound yet for sscd ${this.sscdId}`))\n }\n\n const keyGenReq = {\n keyAlgorithm: this.mapKeyTypeToAlgorithmType(type),\n keyUsage: 'keyUsage' in meta ? (meta.keyUsage as string) : 'sign',\n keyAlias: meta.keyAlias as string,\n attributes: this.recordToKeyAttributes({ ...this.defaultKeyAttributes, ...('attributes' in meta ? meta.attributes : {}) }),\n role: 'role' in meta ? (meta.role as string) : 'administrator',\n } satisfies KeyGenReq\n\n try {\n const generatedKeyUri = await this.musapClient.generateKey(this.sscdType, keyGenReq)\n if (generatedKeyUri) {\n logger.debug('Generated key:', generatedKeyUri)\n const key = this.musapClient.getKeyByUri(generatedKeyUri)\n return this.asMusapKeyInfo(key)\n } else {\n return Promise.reject(new Error('Failed to generate key. No key URI'))\n }\n } catch (error) {\n logger.error('An error occurred:', error)\n throw error\n }\n }\n\n private mapKeyTypeToAlgorithmType = (type: TKeyType): KeyAlgorithmType => {\n switch (type) {\n case 'Secp256k1':\n return 'ECCP256K1'\n case 'Secp256r1':\n return 'ECCP256R1'\n case 'RSA':\n return 'RSA2K'\n default:\n throw new Error(`Key type ${type} is not supported by MUSAP`)\n }\n }\n\n private mapAlgorithmTypeToKeyType = (type: KeyAlgorithm): TKeyType => {\n switch (type) {\n case 'eccp256k1':\n return 'Secp256k1'\n case 'eccp256r1':\n return 'Secp256r1'\n case 'ecc_ed25519':\n return 'Ed25519'\n case 'rsa2k':\n case 'rsa4k':\n return 'RSA'\n default:\n throw new Error(`Key type ${type} is not supported.`)\n }\n }\n\n async deleteKey({ kid }: { kid: string }): Promise<boolean> {\n try {\n const key: MusapKey = this.musapClient.getKeyById(kid) as MusapKey\n if ((key.sscdType as string) === 'External Signature') {\n return true // FIXME we can't remove a eSim key for now because this would mean onboarding again\n }\n void this.musapClient.removeKey(kid)\n return true\n } catch (error) {\n console.warn('Failed to delete key:', error)\n return false\n }\n }\n\n private determineAlgorithm(providedAlgorithm: string | undefined, keyAlgorithm: KeyAlgorithm): SignatureAlgorithmType {\n if (providedAlgorithm === undefined) {\n return signatureAlgorithmFromKeyAlgorithm(keyAlgorithm)\n }\n\n if (isSignatureAlgorithmType(providedAlgorithm)) {\n return providedAlgorithm\n }\n\n // Veramo translates TKeyType to JWSAlgorithm\n return signatureAlgorithmFromKeyAlgorithm(providedAlgorithm as JWSAlgorithm)\n }\n\n async sign(args: { keyRef: Pick<IKey, 'kid'>; algorithm?: string; data: Uint8Array; [x: string]: any }): Promise<string> {\n if (!args.keyRef) {\n throw new Error('key_not_found: No key ref provided')\n }\n\n const data = new TextDecoder().decode(args.data as Uint8Array)\n\n const key: MusapKey = this.musapClient.getKeyById(args.keyRef.kid) as MusapKey\n if ((key.sscdType as string) === 'External Signature') {\n key.algorithm = 'eccp256r1' // FIXME MUSAP announces key as rsa2k, but it's actually EC\n }\n const signatureReq: SignatureReq = {\n keyUri: key.keyUri,\n data,\n algorithm: this.determineAlgorithm(args.algorithm, key.algorithm),\n displayText: args.displayText,\n transId: args.transId,\n format: (args.format as SignatureFormat) ?? 'RAW',\n attributes: this.recordToSignatureAttributes({ ...this.defaultSignAttributes, ...args.attributes }),\n }\n return this.musapClient.sign(signatureReq)\n }\n\n async importKey(args: Omit<MinimalImportableKey, 'kms'> & { privateKeyPEM?: string }): Promise<ManagedKeyInfo> {\n throw new Error('importKey is not implemented for MusapKeyManagementSystem.')\n }\n\n private decodeMusapPublicKey = (args: { publicKey: { pem: string }; keyType: TKeyType }): string => {\n const { publicKey, keyType } = args\n\n // First try the normal PEM decoding path\n const pemBinary = PEMToBinary(publicKey.pem)\n\n // Check if we got a string that looks like base64 (might be double encoded)\n // Convert Uint8Array to string safely\n const pemString = toString(pemBinary, 'utf8')\n const isDoubleEncoded = pemBinary.length > 0 && typeof pemString === 'string' && pemString.startsWith('MF')\n\n if (isDoubleEncoded) {\n // Handle double-encoded case\n const actualDerBytes = fromString(pemString, 'base64')\n\n // For double-encoded case, we know the key data starts after the header\n const keyDataStart = 24\n const keyData = actualDerBytes.slice(keyDataStart)\n\n // Convert to public key hex\n let publicKeyHex = toString(keyData, 'hex')\n\n // If it's not compressed yet and doesn't start with 0x04 (uncompressed point marker), add it\n if (publicKeyHex.length <= 128 && !publicKeyHex.startsWith('04')) {\n publicKeyHex = '04' + publicKeyHex\n }\n\n // Ensure we have full 65 bytes for uncompressed keys\n while (publicKeyHex.startsWith('04') && publicKeyHex.length < 130) {\n publicKeyHex = publicKeyHex + '0'\n }\n\n // Now convert to compressed format if needed\n if (publicKeyHex.startsWith('04') && publicKeyHex.length === 130) {\n const xCoord = fromString(publicKeyHex.slice(2, 66), 'hex')\n const yCoord = fromString(publicKeyHex.slice(66, 130), 'hex')\n const prefix = new Uint8Array([yCoord[31] % 2 === 0 ? 0x02 : 0x03])\n const compressedKey = new Uint8Array(33) // 1 byte prefix + 32 bytes x coordinate\n compressedKey.set(prefix, 0)\n compressedKey.set(xCoord, 1)\n return toString(compressedKey, 'hex')\n }\n\n return publicKeyHex\n }\n\n // Not double encoded, proceed with normal path\n const publicKeyBinary = isAsn1Der(pemBinary) ? asn1DerToRawPublicKey(pemBinary, keyType) : pemBinary\n return isRawCompressedPublicKey(publicKeyBinary)\n ? hexStringFromUint8Array(publicKeyBinary)\n : toRawCompressedHexPublicKey(publicKeyBinary, keyType)\n }\n\n private asMusapKeyInfo(args: MusapKey): ManagedKeyInfo {\n const { keyId, publicKey, ...metadata }: KeyMetadata = { ...args }\n const keyType = this.mapAlgorithmTypeToKeyType(args.algorithm)\n\n const publicKeyHex = this.decodeMusapPublicKey({\n publicKey: publicKey,\n keyType: keyType,\n })\n\n const keyInfo: Partial<ManagedKeyInfo> = {\n kid: keyId,\n type: keyType,\n publicKeyHex,\n meta: metadata,\n }\n\n const jwkThumbprint = calculateJwkThumbprintForKey({ key: keyInfo as ManagedKeyInfo })\n keyInfo.meta = { ...keyInfo.meta, jwkThumbprint }\n return keyInfo as ManagedKeyInfo\n }\n\n sharedSecret(args: { myKeyRef: Pick<IKey, 'kid'>; theirKey: Pick<IKey, 'publicKeyHex' | 'type'> }): Promise<string> {\n throw new Error('Not supported.')\n }\n\n private recordToKeyAttributes(record?: Record<string, string>): KeyAttribute[] {\n if (!record) {\n return []\n }\n return Object.entries(record).map(([key, value]) => ({\n name: key,\n value,\n }))\n }\n\n private recordToSignatureAttributes(record?: Record<string, string>): SignatureAttribute[] {\n if (!record) {\n return []\n }\n return Object.entries(record).map(([key, value]) => ({\n name: key,\n value,\n }))\n }\n}\n"]}
|
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.28.1-feature.esm.cjs.
|
|
4
|
+
"version": "0.28.1-feature.esm.cjs.9+71682ea",
|
|
5
5
|
"source": "./src/index.ts",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"main": "./dist/index.cjs",
|
|
@@ -22,8 +22,8 @@
|
|
|
22
22
|
},
|
|
23
23
|
"dependencies": {
|
|
24
24
|
"@sphereon/musap-react-native": "0.2.1-next.170",
|
|
25
|
-
"@sphereon/ssi-sdk-ext.key-utils": "^0.28.1-feature.esm.cjs.
|
|
26
|
-
"@sphereon/ssi-sdk-ext.x509-utils": "^0.28.1-feature.esm.cjs.
|
|
25
|
+
"@sphereon/ssi-sdk-ext.key-utils": "^0.28.1-feature.esm.cjs.9+71682ea",
|
|
26
|
+
"@sphereon/ssi-sdk-ext.x509-utils": "^0.28.1-feature.esm.cjs.9+71682ea",
|
|
27
27
|
"@sphereon/ssi-types": " ^0.33",
|
|
28
28
|
"@veramo/core": "4.2.0",
|
|
29
29
|
"@veramo/key-manager": "4.2.0",
|
|
@@ -53,5 +53,5 @@
|
|
|
53
53
|
"react-native",
|
|
54
54
|
"Veramo"
|
|
55
55
|
],
|
|
56
|
-
"gitHead": "
|
|
56
|
+
"gitHead": "71682ea0c528f5b32c421245c253b3bc9d6296a0"
|
|
57
57
|
}
|