@sphereon/ssi-sdk-ext.key-utils 0.13.1-unstable.3 → 0.14.0
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/digest-methods.js +33 -6
- package/dist/digest-methods.js.map +1 -1
- package/dist/functions.d.ts.map +1 -1
- package/dist/functions.js +106 -84
- package/dist/functions.js.map +1 -1
- package/dist/index.js +22 -6
- package/dist/index.js.map +1 -1
- package/dist/jwk-jcs.js +17 -8
- package/dist/jwk-jcs.js.map +1 -1
- package/dist/types/index.js +17 -1
- package/dist/types/index.js.map +1 -1
- package/dist/types/key-util-types.d.ts +1 -5
- package/dist/types/key-util-types.d.ts.map +1 -1
- package/dist/types/key-util-types.js +20 -12
- package/dist/types/key-util-types.js.map +1 -1
- package/dist/x509/index.js +19 -3
- package/dist/x509/index.js.map +1 -1
- package/dist/x509/rsa-key.js +53 -12
- package/dist/x509/rsa-key.js.map +1 -1
- package/dist/x509/rsa-signer.d.ts +4 -3
- package/dist/x509/rsa-signer.d.ts.map +1 -1
- package/dist/x509/rsa-signer.js +73 -32
- package/dist/x509/rsa-signer.js.map +1 -1
- package/dist/x509/x509-utils.js +70 -29
- package/dist/x509/x509-utils.js.map +1 -1
- package/package.json +3 -4
- package/src/functions.ts +6 -2
- package/src/types/key-util-types.ts +3 -3
- package/src/x509/rsa-signer.ts +10 -8
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"key-util-types.js","sourceRoot":"","sources":["../../src/types/key-util-types.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"key-util-types.js","sourceRoot":"","sources":["../../src/types/key-util-types.ts"],"names":[],"mappings":";;;AAEa,QAAA,gBAAgB,GAAG,aAAa,CAAA;AAChC,QAAA,kBAAkB,GAAG,MAAM,CAAA;AAIxC,IAAY,GAIX;AAJD,WAAY,GAAG;IACb,0BAAmB,CAAA;IACnB,8BAAuB,CAAA;IACvB,8BAAuB,CAAA;AACzB,CAAC,EAJW,GAAG,GAAH,WAAG,KAAH,WAAG,QAId;AAED,IAAY,SAGX;AAHD,WAAY,SAAS;IACnB,+BAAkB,CAAA;IAClB,8BAAiB,CAAA;AACnB,CAAC,EAHW,SAAS,GAAT,iBAAS,KAAT,iBAAS,QAGpB;AAED,IAAY,QAKX;AALD,WAAY,QAAQ;IAClB,mCAAuB,CAAA;IACvB,2BAAe,CAAA;IACf,+BAAmB,CAAA;IACnB,6BAAiB,CAAA;AACnB,CAAC,EALW,QAAQ,GAAR,gBAAQ,KAAR,gBAAQ,QAKnB;AAED,IAAY,OAIX;AAJD,WAAY,OAAO;IACjB,oBAAS,CAAA;IACT,sBAAW,CAAA;IACX,sBAAW,CAAA;AACb,CAAC,EAJW,OAAO,GAAP,eAAO,KAAP,eAAO,QAIlB;AAEY,QAAA,YAAY,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,WAAW,EAAE,YAAY,EAAE,YAAY,CAAC,CAAA;AAC9H,QAAA,YAAY,GAAG,CAAC,QAAQ,EAAE,gBAAgB,EAAE,cAAc,CAAC,CAAA;AA2BxE;;;;GAIG"}
|
package/dist/x509/index.js
CHANGED
|
@@ -1,4 +1,20 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./rsa-key"), exports);
|
|
18
|
+
__exportStar(require("./rsa-signer"), exports);
|
|
19
|
+
__exportStar(require("./x509-utils"), exports);
|
|
4
20
|
//# sourceMappingURL=index.js.map
|
package/dist/x509/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/x509/index.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/x509/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,4CAAyB;AACzB,+CAA4B;AAC5B,+CAA4B"}
|
package/dist/x509/rsa-key.js
CHANGED
|
@@ -1,11 +1,49 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
26
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
27
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
28
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
29
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
30
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
31
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
32
|
+
});
|
|
33
|
+
};
|
|
34
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
35
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
36
|
+
};
|
|
37
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
38
|
+
exports.generateRSAKeyAsPEM = exports.cryptoSubtleImportRSAKey = exports.signAlgorithmToSchemeAndHashAlg = void 0;
|
|
39
|
+
const isomorphic_webcrypto_1 = __importDefault(require("@sphereon/isomorphic-webcrypto"));
|
|
40
|
+
const u8a = __importStar(require("uint8arrays"));
|
|
41
|
+
const x509_utils_1 = require("./x509-utils");
|
|
4
42
|
const usage = (jwk) => {
|
|
5
43
|
// "decrypt" | "deriveBits" | "deriveKey" | "encrypt" | "sign" | "unwrapKey" | "verify" | "wrapKey";
|
|
6
44
|
return jwk.d ? ['sign', 'decrypt', 'verify', 'encrypt'] : ['verify', 'encrypt'];
|
|
7
45
|
};
|
|
8
|
-
|
|
46
|
+
const signAlgorithmToSchemeAndHashAlg = (signingAlg) => {
|
|
9
47
|
const alg = signingAlg.toUpperCase();
|
|
10
48
|
let scheme;
|
|
11
49
|
if (alg.startsWith('RS')) {
|
|
@@ -20,12 +58,14 @@ export const signAlgorithmToSchemeAndHashAlg = (signingAlg) => {
|
|
|
20
58
|
const hashAlgorithm = `SHA-${alg.substring(2)}`;
|
|
21
59
|
return { scheme, hashAlgorithm };
|
|
22
60
|
};
|
|
23
|
-
|
|
61
|
+
exports.signAlgorithmToSchemeAndHashAlg = signAlgorithmToSchemeAndHashAlg;
|
|
62
|
+
const cryptoSubtleImportRSAKey = (jwk, scheme, hashAlgorithm) => __awaiter(void 0, void 0, void 0, function* () {
|
|
24
63
|
const hashName = hashAlgorithm ? hashAlgorithm : jwk.alg ? `SHA-${jwk.alg.substring(2)}` : 'SHA-256';
|
|
25
64
|
const importParams = { name: scheme, hash: hashName };
|
|
26
|
-
return
|
|
27
|
-
};
|
|
28
|
-
|
|
65
|
+
return yield isomorphic_webcrypto_1.default.subtle.importKey('jwk', jwk, importParams, false, usage(jwk));
|
|
66
|
+
});
|
|
67
|
+
exports.cryptoSubtleImportRSAKey = cryptoSubtleImportRSAKey;
|
|
68
|
+
const generateRSAKeyAsPEM = (scheme, hashAlgorithm, modulusLength) => __awaiter(void 0, void 0, void 0, function* () {
|
|
29
69
|
const hashName = hashAlgorithm ? hashAlgorithm : 'SHA-256';
|
|
30
70
|
const params = {
|
|
31
71
|
name: scheme,
|
|
@@ -34,9 +74,10 @@ export const generateRSAKeyAsPEM = async (scheme, hashAlgorithm, modulusLength)
|
|
|
34
74
|
publicExponent: new Uint8Array([1, 0, 1]),
|
|
35
75
|
};
|
|
36
76
|
const keyUsage = scheme === 'RSA-PSS' || scheme === 'RSASSA-PKCS1-V1_5' ? ['sign', 'verify'] : ['encrypt', 'decrypt'];
|
|
37
|
-
const keypair =
|
|
38
|
-
const pkcs8 =
|
|
77
|
+
const keypair = yield isomorphic_webcrypto_1.default.subtle.generateKey(params, true, keyUsage);
|
|
78
|
+
const pkcs8 = yield isomorphic_webcrypto_1.default.subtle.exportKey('pkcs8', keypair.privateKey);
|
|
39
79
|
const uint8Array = new Uint8Array(pkcs8);
|
|
40
|
-
return base64ToPEM(u8a.toString(uint8Array, 'base64pad'), 'RSA PRIVATE KEY');
|
|
41
|
-
};
|
|
80
|
+
return (0, x509_utils_1.base64ToPEM)(u8a.toString(uint8Array, 'base64pad'), 'RSA PRIVATE KEY');
|
|
81
|
+
});
|
|
82
|
+
exports.generateRSAKeyAsPEM = generateRSAKeyAsPEM;
|
|
42
83
|
//# sourceMappingURL=rsa-key.js.map
|
package/dist/x509/rsa-key.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rsa-key.js","sourceRoot":"","sources":["../../src/x509/rsa-key.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"rsa-key.js","sourceRoot":"","sources":["../../src/x509/rsa-key.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { HashAlgorithm } from '../digest-methods';
|
|
2
|
-
import { JWK } from '../types';
|
|
2
|
+
import { JWK, KeyVisibility } from '../types';
|
|
3
3
|
import { RSAEncryptionSchemes, RSASignatureSchemes } from './rsa-key';
|
|
4
4
|
export declare class RSASigner {
|
|
5
5
|
private readonly hashAlgorithm;
|
|
@@ -14,11 +14,12 @@ export declare class RSASigner {
|
|
|
14
14
|
constructor(key: string | JWK, opts?: {
|
|
15
15
|
hashAlgorithm?: HashAlgorithm;
|
|
16
16
|
scheme?: RSAEncryptionSchemes | RSASignatureSchemes;
|
|
17
|
+
visibility?: KeyVisibility;
|
|
17
18
|
});
|
|
18
19
|
private getImportParams;
|
|
19
20
|
private getKey;
|
|
20
21
|
private bufferToString;
|
|
21
|
-
sign(data:
|
|
22
|
-
verify(data: string | Uint8Array, signature: string
|
|
22
|
+
sign(data: Uint8Array): Promise<string>;
|
|
23
|
+
verify(data: string | Uint8Array, signature: string): Promise<boolean>;
|
|
23
24
|
}
|
|
24
25
|
//# sourceMappingURL=rsa-signer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rsa-signer.d.ts","sourceRoot":"","sources":["../../src/x509/rsa-signer.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACjD,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAA;
|
|
1
|
+
{"version":3,"file":"rsa-signer.d.ts","sourceRoot":"","sources":["../../src/x509/rsa-signer.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACjD,OAAO,EAAE,GAAG,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAC7C,OAAO,EAA4B,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAA;AAG/F,qBAAa,SAAS;IACpB,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAe;IAC7C,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAK;IAEzB,OAAO,CAAC,GAAG,CAAuB;IAClC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA4C;IAEnE;;;;OAIG;gBAED,GAAG,EAAE,MAAM,GAAG,GAAG,EACjB,IAAI,CAAC,EAAE;QAAE,aAAa,CAAC,EAAE,aAAa,CAAC;QAAC,MAAM,CAAC,EAAE,oBAAoB,GAAG,mBAAmB,CAAC;QAAC,UAAU,CAAC,EAAE,aAAa,CAAA;KAAE;IAY3H,OAAO,CAAC,eAAe;YAQT,MAAM;IAOpB,OAAO,CAAC,cAAc;IAKT,IAAI,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC;IAYvC,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;CAOpF"}
|
package/dist/x509/rsa-signer.js
CHANGED
|
@@ -1,26 +1,61 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
26
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
27
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
28
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
29
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
30
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
31
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
32
|
+
});
|
|
33
|
+
};
|
|
34
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
35
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
36
|
+
};
|
|
37
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
38
|
+
exports.RSASigner = void 0;
|
|
39
|
+
const u8a = __importStar(require("uint8arrays"));
|
|
40
|
+
const isomorphic_webcrypto_1 = __importDefault(require("@sphereon/isomorphic-webcrypto"));
|
|
41
|
+
const rsa_key_1 = require("./rsa-key");
|
|
42
|
+
const x509_utils_1 = require("./x509-utils");
|
|
43
|
+
class RSASigner {
|
|
10
44
|
/**
|
|
11
45
|
*
|
|
12
46
|
* @param key Either in PEM or JWK format (no raw hex keys here!)
|
|
13
47
|
* @param opts The algorithm and signature/encryption schemes
|
|
14
48
|
*/
|
|
15
49
|
constructor(key, opts) {
|
|
50
|
+
var _a, _b;
|
|
16
51
|
if (typeof key === 'string') {
|
|
17
|
-
this.jwk = PEMToJwk(key);
|
|
52
|
+
this.jwk = (0, x509_utils_1.PEMToJwk)(key, opts === null || opts === void 0 ? void 0 : opts.visibility);
|
|
18
53
|
}
|
|
19
54
|
else {
|
|
20
55
|
this.jwk = key;
|
|
21
56
|
}
|
|
22
|
-
this.hashAlgorithm = opts
|
|
23
|
-
this.scheme = opts
|
|
57
|
+
this.hashAlgorithm = (_a = opts === null || opts === void 0 ? void 0 : opts.hashAlgorithm) !== null && _a !== void 0 ? _a : 'SHA-256';
|
|
58
|
+
this.scheme = (_b = opts === null || opts === void 0 ? void 0 : opts.scheme) !== null && _b !== void 0 ? _b : 'RSA-PSS';
|
|
24
59
|
}
|
|
25
60
|
getImportParams() {
|
|
26
61
|
if (this.scheme === 'RSA-PSS') {
|
|
@@ -29,32 +64,38 @@ export class RSASigner {
|
|
|
29
64
|
// console.log({ name: this.scheme /*, hash: this.hashAlgorithm*/ })
|
|
30
65
|
return { name: this.scheme /*, hash: this.hashAlgorithm*/ };
|
|
31
66
|
}
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
67
|
+
getKey() {
|
|
68
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
69
|
+
if (!this.key) {
|
|
70
|
+
this.key = yield (0, rsa_key_1.cryptoSubtleImportRSAKey)(this.jwk, this.scheme, this.hashAlgorithm);
|
|
71
|
+
}
|
|
72
|
+
return this.key;
|
|
73
|
+
});
|
|
37
74
|
}
|
|
38
75
|
bufferToString(buf) {
|
|
39
76
|
const uint8Array = new Uint8Array(buf);
|
|
40
77
|
return u8a.toString(uint8Array, 'base64url'); // Needs to be base64url for JsonWebSignature2020. Don't change!
|
|
41
78
|
}
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
79
|
+
sign(data) {
|
|
80
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
81
|
+
const input = data;
|
|
82
|
+
const key = yield this.getKey();
|
|
83
|
+
const signature = this.bufferToString(yield isomorphic_webcrypto_1.default.subtle.sign(this.getImportParams(), key, input));
|
|
84
|
+
if (!signature) {
|
|
85
|
+
throw Error('Could not sign input data');
|
|
86
|
+
}
|
|
87
|
+
// base64url signature
|
|
88
|
+
return signature;
|
|
89
|
+
});
|
|
51
90
|
}
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
91
|
+
verify(data, signature) {
|
|
92
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
93
|
+
const jws = signature.includes('.') ? signature.split('.')[2] : signature;
|
|
94
|
+
const input = typeof data == 'string' ? u8a.fromString(data, 'utf-8') : data;
|
|
95
|
+
const verificationResult = yield isomorphic_webcrypto_1.default.subtle.verify(this.getImportParams(), yield this.getKey(), u8a.fromString(jws, 'base64url'), input);
|
|
96
|
+
return verificationResult;
|
|
97
|
+
});
|
|
58
98
|
}
|
|
59
99
|
}
|
|
100
|
+
exports.RSASigner = RSASigner;
|
|
60
101
|
//# sourceMappingURL=rsa-signer.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rsa-signer.js","sourceRoot":"","sources":["../../src/x509/rsa-signer.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"rsa-signer.js","sourceRoot":"","sources":["../../src/x509/rsa-signer.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iDAAkC;AAClC,0FAAmD;AAGnD,uCAA+F;AAC/F,6CAAuC;AAEvC,MAAa,SAAS;IAOpB;;;;OAIG;IACH,YACE,GAAiB,EACjB,IAAyH;;QAEzH,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;YAC3B,IAAI,CAAC,GAAG,GAAG,IAAA,qBAAQ,EAAC,GAAG,EAAE,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,UAAU,CAAC,CAAA;SAC3C;aAAM;YACL,IAAI,CAAC,GAAG,GAAG,GAAG,CAAA;SACf;QAED,IAAI,CAAC,aAAa,GAAG,MAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,aAAa,mCAAI,SAAS,CAAA;QACrD,IAAI,CAAC,MAAM,GAAG,MAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,MAAM,mCAAI,SAAS,CAAA;IACzC,CAAC;IAEO,eAAe;QACrB,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE;YAC7B,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,UAAU,EAAE,EAAE,EAAE,CAAA;SAC7C;QACD,oEAAoE;QACpE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,8BAA8B,EAAE,CAAA;IAC7D,CAAC;IAEa,MAAM;;YAClB,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE;gBACb,IAAI,CAAC,GAAG,GAAG,MAAM,IAAA,kCAAwB,EAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,aAAa,CAAC,CAAA;aACrF;YACD,OAAO,IAAI,CAAC,GAAG,CAAA;QACjB,CAAC;KAAA;IAEO,cAAc,CAAC,GAAgB;QACrC,MAAM,UAAU,GAAG,IAAI,UAAU,CAAC,GAAG,CAAC,CAAA;QACtC,OAAO,GAAG,CAAC,QAAQ,CAAC,UAAU,EAAE,WAAW,CAAC,CAAA,CAAC,gEAAgE;IAC/G,CAAC;IAEY,IAAI,CAAC,IAAgB;;YAChC,MAAM,KAAK,GAAG,IAAI,CAAA;YAClB,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,MAAM,EAAE,CAAA;YAC/B,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,8BAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC,CAAA;YACnG,IAAI,CAAC,SAAS,EAAE;gBACd,MAAM,KAAK,CAAC,2BAA2B,CAAC,CAAA;aACzC;YAED,uBAAuB;YACvB,OAAO,SAAS,CAAA;QAClB,CAAC;KAAA;IAEY,MAAM,CAAC,IAAyB,EAAE,SAAiB;;YAC9D,MAAM,GAAG,GAAG,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;YAEzE,MAAM,KAAK,GAAG,OAAO,IAAI,IAAI,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;YAC5E,MAAM,kBAAkB,GAAG,MAAM,8BAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,MAAM,IAAI,CAAC,MAAM,EAAE,EAAE,GAAG,CAAC,UAAU,CAAC,GAAG,EAAE,WAAW,CAAC,EAAE,KAAK,CAAC,CAAA;YAC3I,OAAO,kBAAkB,CAAA;QAC3B,CAAC;KAAA;CACF;AAjED,8BAiEC"}
|
package/dist/x509/x509-utils.js
CHANGED
|
@@ -1,9 +1,38 @@
|
|
|
1
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
26
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
27
|
+
};
|
|
28
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
+
exports.base64ToPEM = exports.hexToPEM = exports.base64ToHex = exports.PEMToHex = exports.publicKeyHexFromPEM = exports.hexKeyFromPEMBasedJwk = exports.privateKeyHexFromPEM = exports.PEMToJwk = exports.jwkToPEM = exports.toKeyObject = exports.x5cToPemCertChain = exports.pemCertChainTox5c = void 0;
|
|
30
|
+
const u8a = __importStar(require("uint8arrays"));
|
|
2
31
|
// @ts-ignore
|
|
3
|
-
|
|
32
|
+
const keyto_1 = __importDefault(require("@trust/keyto"));
|
|
4
33
|
// Based on (MIT licensed):
|
|
5
34
|
// https://github.com/hildjj/node-posh/blob/master/lib/index.js
|
|
6
|
-
|
|
35
|
+
function pemCertChainTox5c(cert, maxDepth) {
|
|
7
36
|
if (!maxDepth) {
|
|
8
37
|
maxDepth = 0;
|
|
9
38
|
}
|
|
@@ -26,7 +55,8 @@ export function pemCertChainTox5c(cert, maxDepth) {
|
|
|
26
55
|
}
|
|
27
56
|
return x5c;
|
|
28
57
|
}
|
|
29
|
-
|
|
58
|
+
exports.pemCertChainTox5c = pemCertChainTox5c;
|
|
59
|
+
function x5cToPemCertChain(x5c, maxDepth) {
|
|
30
60
|
if (!maxDepth) {
|
|
31
61
|
maxDepth = 0;
|
|
32
62
|
}
|
|
@@ -37,47 +67,54 @@ export function x5cToPemCertChain(x5c, maxDepth) {
|
|
|
37
67
|
}
|
|
38
68
|
return pem;
|
|
39
69
|
}
|
|
40
|
-
|
|
41
|
-
|
|
70
|
+
exports.x5cToPemCertChain = x5cToPemCertChain;
|
|
71
|
+
const toKeyObject = (PEM, visibility = 'public') => {
|
|
72
|
+
const jwk = (0, exports.PEMToJwk)(PEM, visibility);
|
|
42
73
|
const keyVisibility = jwk.d ? 'private' : 'public';
|
|
43
|
-
const keyHex = keyVisibility === 'private' ? privateKeyHexFromPEM(PEM) : publicKeyHexFromPEM(PEM);
|
|
74
|
+
const keyHex = keyVisibility === 'private' ? (0, exports.privateKeyHexFromPEM)(PEM) : (0, exports.publicKeyHexFromPEM)(PEM);
|
|
44
75
|
return {
|
|
45
|
-
pem: hexToPEM(keyHex, visibility),
|
|
76
|
+
pem: (0, exports.hexToPEM)(keyHex, visibility),
|
|
46
77
|
jwk,
|
|
47
78
|
keyHex,
|
|
48
79
|
keyType: keyVisibility,
|
|
49
80
|
};
|
|
50
81
|
};
|
|
51
|
-
|
|
52
|
-
|
|
82
|
+
exports.toKeyObject = toKeyObject;
|
|
83
|
+
const jwkToPEM = (jwk, visibility = 'public') => {
|
|
84
|
+
return keyto_1.default.from(jwk, 'jwk').toString('pem', visibility === 'public' ? 'public_pkcs8' : 'private_pkcs8');
|
|
53
85
|
};
|
|
54
|
-
|
|
55
|
-
|
|
86
|
+
exports.jwkToPEM = jwkToPEM;
|
|
87
|
+
const PEMToJwk = (pem, visibility = 'public') => {
|
|
88
|
+
return keyto_1.default.from(pem, 'pem').toJwk(visibility);
|
|
56
89
|
};
|
|
57
|
-
|
|
58
|
-
|
|
90
|
+
exports.PEMToJwk = PEMToJwk;
|
|
91
|
+
const privateKeyHexFromPEM = (PEM) => {
|
|
92
|
+
return (0, exports.PEMToHex)(PEM);
|
|
59
93
|
};
|
|
60
|
-
|
|
94
|
+
exports.privateKeyHexFromPEM = privateKeyHexFromPEM;
|
|
95
|
+
const hexKeyFromPEMBasedJwk = (jwk, visibility = 'public') => {
|
|
61
96
|
if (visibility === 'private') {
|
|
62
|
-
return privateKeyHexFromPEM(jwkToPEM(jwk, 'private'));
|
|
97
|
+
return (0, exports.privateKeyHexFromPEM)((0, exports.jwkToPEM)(jwk, 'private'));
|
|
63
98
|
}
|
|
64
99
|
else {
|
|
65
|
-
return publicKeyHexFromPEM(jwkToPEM(jwk, 'public'));
|
|
100
|
+
return (0, exports.publicKeyHexFromPEM)((0, exports.jwkToPEM)(jwk, 'public'));
|
|
66
101
|
}
|
|
67
102
|
};
|
|
68
|
-
|
|
69
|
-
|
|
103
|
+
exports.hexKeyFromPEMBasedJwk = hexKeyFromPEMBasedJwk;
|
|
104
|
+
const publicKeyHexFromPEM = (PEM) => {
|
|
105
|
+
const hex = (0, exports.PEMToHex)(PEM);
|
|
70
106
|
if (PEM.includes('CERTIFICATE')) {
|
|
71
107
|
throw Error('Cannot directly deduce public Key from PEM Certificate yet');
|
|
72
108
|
}
|
|
73
109
|
else if (!PEM.includes('PRIVATE')) {
|
|
74
110
|
return hex;
|
|
75
111
|
}
|
|
76
|
-
const publicJwk = PEMToJwk(PEM, 'public');
|
|
77
|
-
const publicPEM = jwkToPEM(publicJwk, 'public');
|
|
78
|
-
return PEMToHex(publicPEM);
|
|
112
|
+
const publicJwk = (0, exports.PEMToJwk)(PEM, 'public');
|
|
113
|
+
const publicPEM = (0, exports.jwkToPEM)(publicJwk, 'public');
|
|
114
|
+
return (0, exports.PEMToHex)(publicPEM);
|
|
79
115
|
};
|
|
80
|
-
|
|
116
|
+
exports.publicKeyHexFromPEM = publicKeyHexFromPEM;
|
|
117
|
+
const PEMToHex = (PEM, headerKey) => {
|
|
81
118
|
if (PEM.indexOf('-----BEGIN ') == -1) {
|
|
82
119
|
throw Error(`PEM header not found: ${headerKey}`);
|
|
83
120
|
}
|
|
@@ -90,17 +127,19 @@ export const PEMToHex = (PEM, headerKey) => {
|
|
|
90
127
|
strippedPem = PEM.replace(/^[^]*-----BEGIN [^-]+-----/, '');
|
|
91
128
|
strippedPem = strippedPem.replace(/-----END [^-]+-----[^]*$/, '');
|
|
92
129
|
}
|
|
93
|
-
return base64ToHex(strippedPem, 'base64pad');
|
|
130
|
+
return (0, exports.base64ToHex)(strippedPem, 'base64pad');
|
|
94
131
|
};
|
|
132
|
+
exports.PEMToHex = PEMToHex;
|
|
95
133
|
/**
|
|
96
134
|
* Converts a base64 encoded string to hex string, removing any non-base64 characters, including newlines
|
|
97
135
|
* @param input The input in base64, with optional newlines
|
|
98
136
|
* @param inputEncoding
|
|
99
137
|
*/
|
|
100
|
-
|
|
138
|
+
const base64ToHex = (input, inputEncoding) => {
|
|
101
139
|
const base64NoNewlines = input.replace(/[^0-9A-Za-z\/+=]*/g, '');
|
|
102
140
|
return u8a.toString(u8a.fromString(base64NoNewlines, inputEncoding ? inputEncoding : 'base64pad'), 'base16');
|
|
103
141
|
};
|
|
142
|
+
exports.base64ToHex = base64ToHex;
|
|
104
143
|
const hexToBase64 = (input, targetEncoding) => {
|
|
105
144
|
let hex = typeof input === 'string' ? input : input.toString(16);
|
|
106
145
|
if (hex.length % 2 === 1) {
|
|
@@ -108,13 +147,13 @@ const hexToBase64 = (input, targetEncoding) => {
|
|
|
108
147
|
}
|
|
109
148
|
return u8a.toString(u8a.fromString(hex, 'base16'), targetEncoding ? targetEncoding : 'base64pad');
|
|
110
149
|
};
|
|
111
|
-
|
|
150
|
+
const hexToPEM = (hex, type) => {
|
|
112
151
|
const base64 = hexToBase64(hex, 'base64pad');
|
|
113
152
|
const headerKey = type === 'private' ? 'RSA PRIVATE KEY' : 'PUBLIC KEY';
|
|
114
153
|
if (type === 'private') {
|
|
115
154
|
const pem = base64ToPEM(base64, headerKey);
|
|
116
155
|
try {
|
|
117
|
-
PEMToJwk(pem); // We only use it to test the private key
|
|
156
|
+
(0, exports.PEMToJwk)(pem); // We only use it to test the private key
|
|
118
157
|
return pem;
|
|
119
158
|
}
|
|
120
159
|
catch (error) {
|
|
@@ -123,12 +162,14 @@ export const hexToPEM = (hex, type) => {
|
|
|
123
162
|
}
|
|
124
163
|
return base64ToPEM(base64, headerKey);
|
|
125
164
|
};
|
|
126
|
-
|
|
127
|
-
|
|
165
|
+
exports.hexToPEM = hexToPEM;
|
|
166
|
+
function base64ToPEM(cert, headerKey) {
|
|
167
|
+
const key = headerKey !== null && headerKey !== void 0 ? headerKey : 'CERTIFICATE';
|
|
128
168
|
const matches = cert.match(/.{1,64}/g);
|
|
129
169
|
if (!matches) {
|
|
130
170
|
throw Error('Invalid cert input value supplied');
|
|
131
171
|
}
|
|
132
172
|
return `-----BEGIN ${key}-----\n${matches.join('\n')}\n-----END ${key}-----\n`;
|
|
133
173
|
}
|
|
174
|
+
exports.base64ToPEM = base64ToPEM;
|
|
134
175
|
//# sourceMappingURL=x509-utils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"x509-utils.js","sourceRoot":"","sources":["../../src/x509/x509-utils.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"x509-utils.js","sourceRoot":"","sources":["../../src/x509/x509-utils.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sphereon/ssi-sdk-ext.key-utils",
|
|
3
3
|
"description": "Sphereon SSI-SDK plugin for key creation.",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.14.0",
|
|
5
5
|
"source": "src/index.ts",
|
|
6
6
|
"main": "dist/index.js",
|
|
7
7
|
"types": "dist/index.d.ts",
|
|
8
|
-
"type": "module",
|
|
9
8
|
"scripts": {
|
|
10
9
|
"build": "tsc --build",
|
|
11
10
|
"build:clean": "tsc --build --clean && tsc --build"
|
|
@@ -16,7 +15,7 @@
|
|
|
16
15
|
"@stablelib/ed25519": "^1.0.2",
|
|
17
16
|
"@stablelib/sha256": "^1.0.1",
|
|
18
17
|
"@stablelib/sha512": "^1.0.1",
|
|
19
|
-
"@veramo/core": "
|
|
18
|
+
"@veramo/core": "4.2.0",
|
|
20
19
|
"base64url": "^3.0.1",
|
|
21
20
|
"debug": "^4.3.4",
|
|
22
21
|
"did-resolver": "^4.1.0",
|
|
@@ -48,5 +47,5 @@
|
|
|
48
47
|
"DID",
|
|
49
48
|
"Veramo"
|
|
50
49
|
],
|
|
51
|
-
"gitHead": "
|
|
50
|
+
"gitHead": "ac08f428579800ce176cab76741100b532a1471e"
|
|
52
51
|
}
|
package/src/functions.ts
CHANGED
|
@@ -51,12 +51,12 @@ export async function importProvidedOrGeneratedKey(
|
|
|
51
51
|
const type = args.options?.type ?? args.options?.key?.type ?? args.options?.keyType ?? 'Secp256r1'
|
|
52
52
|
const key = args?.options?.key
|
|
53
53
|
// Make sure x509 options are also set on the metadata as that is what the kms will look for
|
|
54
|
-
if (args.options?.x509 && key
|
|
54
|
+
if (args.options?.x509 && key) {
|
|
55
55
|
key.meta = {
|
|
56
56
|
...key.meta,
|
|
57
57
|
x509: {
|
|
58
|
-
...key.meta?.x509,
|
|
59
58
|
...args.options.x509,
|
|
59
|
+
...key.meta?.x509,
|
|
60
60
|
},
|
|
61
61
|
}
|
|
62
62
|
}
|
|
@@ -68,6 +68,10 @@ export async function importProvidedOrGeneratedKey(
|
|
|
68
68
|
let privateKeyHex: string
|
|
69
69
|
if (key) {
|
|
70
70
|
privateKeyHex = key.privateKeyHex ?? key.meta?.x509?.privateKeyHex
|
|
71
|
+
if ((!privateKeyHex || privateKeyHex.trim() === '') && key?.meta?.x509?.privateKeyPEM) {
|
|
72
|
+
// If we do not have a privateKeyHex but do have a PEM
|
|
73
|
+
privateKeyHex = privateKeyHexFromPEM(key.meta.x509.privateKeyPEM)
|
|
74
|
+
}
|
|
71
75
|
if (!privateKeyHex && !key.meta?.x509?.privateKeyPEM) {
|
|
72
76
|
throw new Error(`We need to have a private key in Hex or PEM when importing a key`)
|
|
73
77
|
}
|
|
@@ -52,13 +52,13 @@ export interface IImportProvidedOrGeneratedKeyArgs {
|
|
|
52
52
|
options?: IKeyOpts
|
|
53
53
|
}
|
|
54
54
|
export interface IKeyOpts {
|
|
55
|
-
key?:
|
|
55
|
+
key?: Partial<MinimalImportableKey> // Optional key to import with only privateKeyHex mandatory. If not specified a key with random kid will be created
|
|
56
56
|
type?: TKeyType // The key type. Defaults to Secp256k1
|
|
57
57
|
use?: JwkKeyUse // The key use
|
|
58
58
|
x509?: X509Opts
|
|
59
59
|
}
|
|
60
|
-
|
|
60
|
+
/*
|
|
61
61
|
// Needed to make a single property required
|
|
62
62
|
type WithRequiredProperty<Type, Key extends keyof Type> = Type & {
|
|
63
63
|
[Property in Key]-?: Type[Property]
|
|
64
|
-
}
|
|
64
|
+
}*/
|