converters.js 7.2 KB

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