58 lines
1.9 KiB
Plaintext
58 lines
1.9 KiB
Plaintext
"use strict";
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.weakMap = void 0;
|
|
const node_crypto_1 = require("node:crypto");
|
|
const errors_js_1 = require("../util/errors.js");
|
|
const webcrypto_js_1 = require("./webcrypto.js");
|
|
const is_key_object_js_1 = require("./is_key_object.js");
|
|
const invalid_key_input_js_1 = require("../lib/invalid_key_input.js");
|
|
const is_key_like_js_1 = require("./is_key_like.js");
|
|
exports.weakMap = new WeakMap();
|
|
const namedCurveToJOSE = (namedCurve) => {
|
|
switch (namedCurve) {
|
|
case 'prime256v1':
|
|
return 'P-256';
|
|
case 'secp384r1':
|
|
return 'P-384';
|
|
case 'secp521r1':
|
|
return 'P-521';
|
|
case 'secp256k1':
|
|
return 'secp256k1';
|
|
default:
|
|
throw new errors_js_1.JOSENotSupported('Unsupported key curve for this operation');
|
|
}
|
|
};
|
|
const getNamedCurve = (kee, raw) => {
|
|
let key;
|
|
if ((0, webcrypto_js_1.isCryptoKey)(kee)) {
|
|
key = node_crypto_1.KeyObject.from(kee);
|
|
}
|
|
else if ((0, is_key_object_js_1.default)(kee)) {
|
|
key = kee;
|
|
}
|
|
else {
|
|
throw new TypeError((0, invalid_key_input_js_1.default)(kee, ...is_key_like_js_1.types));
|
|
}
|
|
if (key.type === 'secret') {
|
|
throw new TypeError('only "private" or "public" type keys can be used for this operation');
|
|
}
|
|
switch (key.asymmetricKeyType) {
|
|
case 'ed25519':
|
|
case 'ed448':
|
|
return `Ed${key.asymmetricKeyType.slice(2)}`;
|
|
case 'x25519':
|
|
case 'x448':
|
|
return `X${key.asymmetricKeyType.slice(1)}`;
|
|
case 'ec': {
|
|
let namedCurve = key.asymmetricKeyDetails.namedCurve;
|
|
if (raw) {
|
|
return namedCurve;
|
|
}
|
|
return namedCurveToJOSE(namedCurve);
|
|
}
|
|
default:
|
|
throw new TypeError('Invalid asymmetric key type for this operation');
|
|
}
|
|
};
|
|
exports.default = getNamedCurve;
|