legacy-adapter.js 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", { value: true });
  3. exports.asnNodeToLegacyType = asnNodeToLegacyType;
  4. exports.createLegacyConverterAdapter = createLegacyConverterAdapter;
  5. const asn1_codec_1 = require("@peculiar/asn1-codec");
  6. const asn1js = require("asn1js");
  7. function asnNodeToLegacyType(node) {
  8. if (node.ctx && node.start !== undefined && node.end !== undefined) {
  9. const contextData = node.ctx.data.slice(node.start, node.end);
  10. const parsed = asn1js.fromBER(contextData.buffer);
  11. if (parsed.offset === -1) {
  12. throw new Error("Error parsing ASN.1 with asn1js: " + parsed.result.error);
  13. }
  14. return parsed.result;
  15. }
  16. const derBytes = asn1_codec_1.AsnSerializer.nodeToBytes(node);
  17. const parsed = asn1js.fromBER(derBytes.buffer);
  18. if (parsed.offset === -1) {
  19. throw new Error("Error parsing ASN.1 with asn1js: " + parsed.result.error);
  20. }
  21. return parsed.result;
  22. }
  23. function legacyTypeToAsnNode(value) {
  24. const derBytes = value.toBER();
  25. const parseResult = asn1_codec_1.AsnParser.parse(new Uint8Array(derBytes), { captureRaw: true });
  26. if (parseResult.errors?.length) {
  27. throw new Error(`Failed to parse serialized ASN.1: ${parseResult.errors[0].message}`);
  28. }
  29. return parseResult.root;
  30. }
  31. function createLegacyConverterAdapter(legacyConverter) {
  32. return {
  33. fromASN: (value) => {
  34. const legacyValue = asnNodeToLegacyType(value);
  35. return legacyConverter.fromASN(legacyValue);
  36. },
  37. toASN: (value) => {
  38. const legacyResult = legacyConverter.toASN(value);
  39. return legacyTypeToAsnNode(legacyResult);
  40. },
  41. };
  42. }