legacy-converters.js 3.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. import * as asn1js from "asn1js";
  2. import { OctetString } from "./types/index";
  3. import { asnNodeToLegacyType } from "./legacy-adapter";
  4. export const AsnAnyConverter = {
  5. fromASN: (value) => value instanceof asn1js.Null ? null : value.valueBeforeDecodeView,
  6. toASN: (value) => {
  7. if (value === null) {
  8. return new asn1js.Null();
  9. }
  10. const schema = asn1js.fromBER(value);
  11. if (schema.result.error) {
  12. throw new Error(schema.result.error);
  13. }
  14. return schema.result;
  15. },
  16. };
  17. export const AsnIntegerConverter = {
  18. fromASN: (value) => value.valueBlock.valueHexView.byteLength >= 4
  19. ? value.valueBlock.toString()
  20. : value.valueBlock.valueDec,
  21. toASN: (value) => new asn1js.Integer({ value: +value }),
  22. };
  23. export const AsnEnumeratedConverter = {
  24. fromASN: (value) => value.valueBlock.valueDec,
  25. toASN: (value) => new asn1js.Enumerated({ value }),
  26. };
  27. export const AsnIntegerArrayBufferConverter = {
  28. fromASN: (value) => value.valueBlock.valueHexView,
  29. toASN: (value) => new asn1js.Integer({ valueHex: value }),
  30. };
  31. export const AsnIntegerBigIntConverter = {
  32. fromASN: (value) => value.toBigInt(),
  33. toASN: (value) => asn1js.Integer.fromBigInt(value),
  34. };
  35. export const AsnBitStringConverter = {
  36. fromASN: (value) => value.valueBlock.valueHexView,
  37. toASN: (value) => new asn1js.BitString({ valueHex: value }),
  38. };
  39. export const AsnObjectIdentifierConverter = {
  40. fromASN: (value) => value.valueBlock.toString(),
  41. toASN: (value) => new asn1js.ObjectIdentifier({ value }),
  42. };
  43. export const AsnBooleanConverter = {
  44. fromASN: (value) => value.valueBlock.value,
  45. toASN: (value) => new asn1js.Boolean({ value }),
  46. };
  47. export const AsnOctetStringConverter = {
  48. fromASN: (value) => value.valueBlock.valueHexView,
  49. toASN: (value) => new asn1js.OctetString({ valueHex: value }),
  50. };
  51. export const AsnConstructedOctetStringConverter = {
  52. fromASN: (value) => new OctetString(value.getValue()),
  53. toASN: (value) => {
  54. const asnNode = value.toASN();
  55. return asnNodeToLegacyType(asnNode);
  56. },
  57. };
  58. function createStringConverter(Asn1Type) {
  59. return {
  60. fromASN: (value) => value.valueBlock.value,
  61. toASN: (value) => new Asn1Type({ value }),
  62. };
  63. }
  64. export const AsnUtf8StringConverter = createStringConverter(asn1js.Utf8String);
  65. export const AsnBmpStringConverter = createStringConverter(asn1js.BmpString);
  66. export const AsnUniversalStringConverter = createStringConverter(asn1js.UniversalString);
  67. export const AsnNumericStringConverter = createStringConverter(asn1js.NumericString);
  68. export const AsnPrintableStringConverter = createStringConverter(asn1js.PrintableString);
  69. export const AsnTeletexStringConverter = createStringConverter(asn1js.TeletexString);
  70. export const AsnVideotexStringConverter = createStringConverter(asn1js.VideotexString);
  71. export const AsnIA5StringConverter = createStringConverter(asn1js.IA5String);
  72. export const AsnGraphicStringConverter = createStringConverter(asn1js.GraphicString);
  73. export const AsnVisibleStringConverter = createStringConverter(asn1js.VisibleString);
  74. export const AsnGeneralStringConverter = createStringConverter(asn1js.GeneralString);
  75. export const AsnCharacterStringConverter = createStringConverter(asn1js.CharacterString);
  76. export const AsnUTCTimeConverter = {
  77. fromASN: (value) => value.toDate(),
  78. toASN: (value) => new asn1js.UTCTime({ valueDate: value }),
  79. };
  80. export const AsnGeneralizedTimeConverter = {
  81. fromASN: (value) => value.toDate(),
  82. toASN: (value) => new asn1js.GeneralizedTime({ valueDate: value }),
  83. };
  84. export const AsnNullConverter = {
  85. fromASN: () => null,
  86. toASN: () => {
  87. return new asn1js.Null();
  88. },
  89. };