converters.js 6.9 KB

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