converters.js 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", { value: true });
  3. exports.AsnNullConverter = exports.AsnGeneralizedTimeConverter = exports.AsnUTCTimeConverter = exports.AsnCharacterStringConverter = exports.AsnGeneralStringConverter = exports.AsnVisibleStringConverter = exports.AsnGraphicStringConverter = exports.AsnIA5StringConverter = exports.AsnVideotexStringConverter = exports.AsnTeletexStringConverter = exports.AsnPrintableStringConverter = exports.AsnNumericStringConverter = exports.AsnUniversalStringConverter = exports.AsnBmpStringConverter = exports.AsnUtf8StringConverter = exports.AsnConstructedOctetStringConverter = exports.AsnOctetStringConverter = exports.AsnBooleanConverter = exports.AsnObjectIdentifierConverter = exports.AsnBitStringConverter = exports.AsnIntegerBigIntConverter = exports.AsnIntegerArrayBufferConverter = exports.AsnEnumeratedConverter = exports.AsnIntegerConverter = exports.AsnAnyConverter = void 0;
  4. exports.defaultConverter = defaultConverter;
  5. const asn1js = require("asn1js");
  6. const enums_1 = require("./enums");
  7. const index_1 = require("./types/index");
  8. exports.AsnAnyConverter = {
  9. fromASN: (value) => value instanceof asn1js.Null ? null : value.valueBeforeDecodeView,
  10. toASN: (value) => {
  11. if (value === null) {
  12. return new asn1js.Null();
  13. }
  14. const schema = asn1js.fromBER(value);
  15. if (schema.result.error) {
  16. throw new Error(schema.result.error);
  17. }
  18. return schema.result;
  19. },
  20. };
  21. exports.AsnIntegerConverter = {
  22. fromASN: (value) => value.valueBlock.valueHexView.byteLength >= 4
  23. ? value.valueBlock.toString()
  24. : value.valueBlock.valueDec,
  25. toASN: (value) => new asn1js.Integer({ value: +value }),
  26. };
  27. exports.AsnEnumeratedConverter = {
  28. fromASN: (value) => value.valueBlock.valueDec,
  29. toASN: (value) => new asn1js.Enumerated({ value }),
  30. };
  31. exports.AsnIntegerArrayBufferConverter = {
  32. fromASN: (value) => value.valueBlock.valueHexView,
  33. toASN: (value) => new asn1js.Integer({ valueHex: value }),
  34. };
  35. exports.AsnIntegerBigIntConverter = {
  36. fromASN: (value) => value.toBigInt(),
  37. toASN: (value) => asn1js.Integer.fromBigInt(value),
  38. };
  39. exports.AsnBitStringConverter = {
  40. fromASN: (value) => value.valueBlock.valueHexView,
  41. toASN: (value) => new asn1js.BitString({ valueHex: value }),
  42. };
  43. exports.AsnObjectIdentifierConverter = {
  44. fromASN: (value) => value.valueBlock.toString(),
  45. toASN: (value) => new asn1js.ObjectIdentifier({ value }),
  46. };
  47. exports.AsnBooleanConverter = {
  48. fromASN: (value) => value.valueBlock.value,
  49. toASN: (value) => new asn1js.Boolean({ value }),
  50. };
  51. exports.AsnOctetStringConverter = {
  52. fromASN: (value) => value.valueBlock.valueHexView,
  53. toASN: (value) => new asn1js.OctetString({ valueHex: value }),
  54. };
  55. exports.AsnConstructedOctetStringConverter = {
  56. fromASN: (value) => new index_1.OctetString(value.getValue()),
  57. toASN: (value) => value.toASN(),
  58. };
  59. function createStringConverter(Asn1Type) {
  60. return {
  61. fromASN: (value) => value.valueBlock.value,
  62. toASN: (value) => new Asn1Type({ value }),
  63. };
  64. }
  65. exports.AsnUtf8StringConverter = createStringConverter(asn1js.Utf8String);
  66. exports.AsnBmpStringConverter = createStringConverter(asn1js.BmpString);
  67. exports.AsnUniversalStringConverter = createStringConverter(asn1js.UniversalString);
  68. exports.AsnNumericStringConverter = createStringConverter(asn1js.NumericString);
  69. exports.AsnPrintableStringConverter = createStringConverter(asn1js.PrintableString);
  70. exports.AsnTeletexStringConverter = createStringConverter(asn1js.TeletexString);
  71. exports.AsnVideotexStringConverter = createStringConverter(asn1js.VideotexString);
  72. exports.AsnIA5StringConverter = createStringConverter(asn1js.IA5String);
  73. exports.AsnGraphicStringConverter = createStringConverter(asn1js.GraphicString);
  74. exports.AsnVisibleStringConverter = createStringConverter(asn1js.VisibleString);
  75. exports.AsnGeneralStringConverter = createStringConverter(asn1js.GeneralString);
  76. exports.AsnCharacterStringConverter = createStringConverter(asn1js.CharacterString);
  77. exports.AsnUTCTimeConverter = {
  78. fromASN: (value) => value.toDate(),
  79. toASN: (value) => new asn1js.UTCTime({ valueDate: value }),
  80. };
  81. exports.AsnGeneralizedTimeConverter = {
  82. fromASN: (value) => value.toDate(),
  83. toASN: (value) => new asn1js.GeneralizedTime({ valueDate: value }),
  84. };
  85. exports.AsnNullConverter = {
  86. fromASN: () => null,
  87. toASN: () => {
  88. return new asn1js.Null();
  89. },
  90. };
  91. function defaultConverter(type) {
  92. switch (type) {
  93. case enums_1.AsnPropTypes.Any:
  94. return exports.AsnAnyConverter;
  95. case enums_1.AsnPropTypes.BitString:
  96. return exports.AsnBitStringConverter;
  97. case enums_1.AsnPropTypes.BmpString:
  98. return exports.AsnBmpStringConverter;
  99. case enums_1.AsnPropTypes.Boolean:
  100. return exports.AsnBooleanConverter;
  101. case enums_1.AsnPropTypes.CharacterString:
  102. return exports.AsnCharacterStringConverter;
  103. case enums_1.AsnPropTypes.Enumerated:
  104. return exports.AsnEnumeratedConverter;
  105. case enums_1.AsnPropTypes.GeneralString:
  106. return exports.AsnGeneralStringConverter;
  107. case enums_1.AsnPropTypes.GeneralizedTime:
  108. return exports.AsnGeneralizedTimeConverter;
  109. case enums_1.AsnPropTypes.GraphicString:
  110. return exports.AsnGraphicStringConverter;
  111. case enums_1.AsnPropTypes.IA5String:
  112. return exports.AsnIA5StringConverter;
  113. case enums_1.AsnPropTypes.Integer:
  114. return exports.AsnIntegerConverter;
  115. case enums_1.AsnPropTypes.Null:
  116. return exports.AsnNullConverter;
  117. case enums_1.AsnPropTypes.NumericString:
  118. return exports.AsnNumericStringConverter;
  119. case enums_1.AsnPropTypes.ObjectIdentifier:
  120. return exports.AsnObjectIdentifierConverter;
  121. case enums_1.AsnPropTypes.OctetString:
  122. return exports.AsnOctetStringConverter;
  123. case enums_1.AsnPropTypes.PrintableString:
  124. return exports.AsnPrintableStringConverter;
  125. case enums_1.AsnPropTypes.TeletexString:
  126. return exports.AsnTeletexStringConverter;
  127. case enums_1.AsnPropTypes.UTCTime:
  128. return exports.AsnUTCTimeConverter;
  129. case enums_1.AsnPropTypes.UniversalString:
  130. return exports.AsnUniversalStringConverter;
  131. case enums_1.AsnPropTypes.Utf8String:
  132. return exports.AsnUtf8StringConverter;
  133. case enums_1.AsnPropTypes.VideotexString:
  134. return exports.AsnVideotexStringConverter;
  135. case enums_1.AsnPropTypes.VisibleString:
  136. return exports.AsnVisibleStringConverter;
  137. default:
  138. return null;
  139. }
  140. }