asn1.js 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", { value: true });
  3. exports.fromX509 = exports.fromSPKI = exports.fromPKCS8 = exports.toPKCS8 = exports.toSPKI = void 0;
  4. const crypto_1 = require("crypto");
  5. const buffer_1 = require("buffer");
  6. const webcrypto_js_1 = require("./webcrypto.js");
  7. const is_key_object_js_1 = require("./is_key_object.js");
  8. const invalid_key_input_js_1 = require("../lib/invalid_key_input.js");
  9. const is_key_like_js_1 = require("./is_key_like.js");
  10. const genericExport = (keyType, keyFormat, key) => {
  11. let keyObject;
  12. if ((0, webcrypto_js_1.isCryptoKey)(key)) {
  13. if (!key.extractable) {
  14. throw new TypeError('CryptoKey is not extractable');
  15. }
  16. keyObject = crypto_1.KeyObject.from(key);
  17. }
  18. else if ((0, is_key_object_js_1.default)(key)) {
  19. keyObject = key;
  20. }
  21. else {
  22. throw new TypeError((0, invalid_key_input_js_1.default)(key, ...is_key_like_js_1.types));
  23. }
  24. if (keyObject.type !== keyType) {
  25. throw new TypeError(`key is not a ${keyType} key`);
  26. }
  27. return keyObject.export({ format: 'pem', type: keyFormat });
  28. };
  29. const toSPKI = (key) => {
  30. return genericExport('public', 'spki', key);
  31. };
  32. exports.toSPKI = toSPKI;
  33. const toPKCS8 = (key) => {
  34. return genericExport('private', 'pkcs8', key);
  35. };
  36. exports.toPKCS8 = toPKCS8;
  37. const fromPKCS8 = (pem) => (0, crypto_1.createPrivateKey)({
  38. key: buffer_1.Buffer.from(pem.replace(/(?:-----(?:BEGIN|END) PRIVATE KEY-----|\s)/g, ''), 'base64'),
  39. type: 'pkcs8',
  40. format: 'der',
  41. });
  42. exports.fromPKCS8 = fromPKCS8;
  43. const fromSPKI = (pem) => (0, crypto_1.createPublicKey)({
  44. key: buffer_1.Buffer.from(pem.replace(/(?:-----(?:BEGIN|END) PUBLIC KEY-----|\s)/g, ''), 'base64'),
  45. type: 'spki',
  46. format: 'der',
  47. });
  48. exports.fromSPKI = fromSPKI;
  49. const fromX509 = (pem) => (0, crypto_1.createPublicKey)({
  50. key: pem,
  51. type: 'spki',
  52. format: 'pem',
  53. });
  54. exports.fromX509 = fromX509;