asn1-ts 7.0.2 → 7.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/node/ConstructedElementSpecification.d.ts +11 -11
- package/dist/node/ConstructedElementSpecification.js +2 -2
- package/dist/node/asn1.d.ts +155 -155
- package/dist/node/asn1.js +438 -438
- package/dist/node/asn1.js.map +1 -1
- package/dist/node/classes/ABSTRACT-SYNTAX.d.ts +14 -14
- package/dist/node/classes/ABSTRACT-SYNTAX.js +2 -2
- package/dist/node/classes/TYPE-IDENTIFIER.d.ts +13 -13
- package/dist/node/classes/TYPE-IDENTIFIER.js +2 -2
- package/dist/node/classes/index.d.ts +2 -2
- package/dist/node/classes/index.js +2 -2
- package/dist/node/codecs/ber/decoders/decodeBitString.d.ts +2 -2
- package/dist/node/codecs/ber/decoders/decodeBitString.js +23 -32
- package/dist/node/codecs/ber/decoders/decodeBitString.js.map +1 -1
- package/dist/node/codecs/ber/decoders/decodeBoolean.d.ts +2 -2
- package/dist/node/codecs/ber/decoders/decodeBoolean.js +11 -11
- package/dist/node/codecs/ber/decoders/decodeBoolean.js.map +1 -1
- package/dist/node/codecs/ber/decoders/decodeDuration.d.ts +2 -2
- package/dist/node/codecs/ber/decoders/decodeDuration.js +68 -68
- package/dist/node/codecs/ber/decoders/decodeDuration.js.map +1 -1
- package/dist/node/codecs/ber/decoders/decodeGeneralizedTime.d.ts +2 -2
- package/dist/node/codecs/ber/decoders/decodeGeneralizedTime.js +30 -30
- package/dist/node/codecs/ber/decoders/decodeGeneralizedTime.js.map +1 -1
- package/dist/node/codecs/ber/decoders/decodeReal.d.ts +2 -2
- package/dist/node/codecs/ber/decoders/decodeReal.js +112 -112
- package/dist/node/codecs/ber/decoders/decodeReal.js.map +1 -1
- package/dist/node/codecs/ber/decoders/decodeSequence.d.ts +3 -3
- package/dist/node/codecs/ber/decoders/decodeSequence.js +18 -18
- package/dist/node/codecs/ber/decoders/decodeSequence.js.map +1 -1
- package/dist/node/codecs/ber/decoders/decodeUTCTime.d.ts +2 -2
- package/dist/node/codecs/ber/decoders/decodeUTCTime.js +31 -31
- package/dist/node/codecs/ber/decoders/decodeUTCTime.js.map +1 -1
- package/dist/node/codecs/ber/encoders/encodeGeneralString.d.ts +2 -2
- package/dist/node/codecs/ber/encoders/encodeGeneralString.js +17 -17
- package/dist/node/codecs/ber/encoders/encodeGeneralString.js.map +1 -1
- package/dist/node/codecs/ber/encoders/encodeGraphicString.d.ts +2 -2
- package/dist/node/codecs/ber/encoders/encodeGraphicString.js +17 -17
- package/dist/node/codecs/ber/encoders/encodeGraphicString.js.map +1 -1
- package/dist/node/codecs/ber/encoders/encodeNumericString.d.ts +2 -2
- package/dist/node/codecs/ber/encoders/encodeNumericString.js +17 -17
- package/dist/node/codecs/ber/encoders/encodeNumericString.js.map +1 -1
- package/dist/node/codecs/ber/encoders/encodeObjectDescriptor.d.ts +2 -2
- package/dist/node/codecs/ber/encoders/encodeObjectDescriptor.js +17 -17
- package/dist/node/codecs/ber/encoders/encodeObjectDescriptor.js.map +1 -1
- package/dist/node/codecs/ber/encoders/encodePrintableString.d.ts +2 -2
- package/dist/node/codecs/ber/encoders/encodePrintableString.js +18 -18
- package/dist/node/codecs/ber/encoders/encodePrintableString.js.map +1 -1
- package/dist/node/codecs/ber/encoders/encodeVisibleString.d.ts +2 -2
- package/dist/node/codecs/ber/encoders/encodeVisibleString.js +17 -17
- package/dist/node/codecs/ber/encoders/encodeVisibleString.js.map +1 -1
- package/dist/node/codecs/ber.d.ts +66 -66
- package/dist/node/codecs/ber.d.ts.map +1 -1
- package/dist/node/codecs/ber.js +593 -602
- package/dist/node/codecs/ber.js.map +1 -1
- package/dist/node/codecs/cer/decoders/decodeSequence.d.ts +3 -3
- package/dist/node/codecs/cer/decoders/decodeSequence.js +18 -18
- package/dist/node/codecs/cer/decoders/decodeSequence.js.map +1 -1
- package/dist/node/codecs/cer.d.ts +67 -67
- package/dist/node/codecs/cer.d.ts.map +1 -1
- package/dist/node/codecs/cer.js +608 -617
- package/dist/node/codecs/cer.js.map +1 -1
- package/dist/node/codecs/coer/decoders/decodeBoolean.d.ts +2 -2
- package/dist/node/codecs/coer/decoders/decodeBoolean.js +14 -14
- package/dist/node/codecs/coer/decoders/decodeBoolean.js.map +1 -1
- package/dist/node/codecs/der/decoders/decodeBitString.d.ts +2 -2
- package/dist/node/codecs/der/decoders/decodeBitString.js +27 -36
- package/dist/node/codecs/der/decoders/decodeBitString.js.map +1 -1
- package/dist/node/codecs/der/decoders/decodeBoolean.d.ts +2 -2
- package/dist/node/codecs/der/decoders/decodeBoolean.js +14 -14
- package/dist/node/codecs/der/decoders/decodeBoolean.js.map +1 -1
- package/dist/node/codecs/der/decoders/decodeDuration.d.ts +2 -2
- package/dist/node/codecs/der/decoders/decodeDuration.js +71 -71
- package/dist/node/codecs/der/decoders/decodeDuration.js.map +1 -1
- package/dist/node/codecs/der/decoders/decodeGeneralizedTime.d.ts +2 -2
- package/dist/node/codecs/der/decoders/decodeGeneralizedTime.js +30 -30
- package/dist/node/codecs/der/decoders/decodeGeneralizedTime.js.map +1 -1
- package/dist/node/codecs/der/decoders/decodeReal.d.ts +2 -2
- package/dist/node/codecs/der/decoders/decodeReal.js +99 -99
- package/dist/node/codecs/der/decoders/decodeReal.js.map +1 -1
- package/dist/node/codecs/der/decoders/decodeSequence.d.ts +3 -3
- package/dist/node/codecs/der/decoders/decodeSequence.js +18 -18
- package/dist/node/codecs/der/decoders/decodeSequence.js.map +1 -1
- package/dist/node/codecs/der/decoders/decodeUTCTime.d.ts +2 -2
- package/dist/node/codecs/der/decoders/decodeUTCTime.js +31 -31
- package/dist/node/codecs/der/decoders/decodeUTCTime.js.map +1 -1
- package/dist/node/codecs/der.d.ts +65 -65
- package/dist/node/codecs/der.js +561 -561
- package/dist/node/codecs/der.js.map +1 -1
- package/dist/node/codecs/oer/decoders/decodeBoolean.d.ts +2 -2
- package/dist/node/codecs/oer/decoders/decodeBoolean.js +11 -11
- package/dist/node/codecs/oer/decoders/decodeBoolean.js.map +1 -1
- package/dist/node/codecs/x690/decoders/decodeCharacterString.d.ts +2 -2
- package/dist/node/codecs/x690/decoders/decodeCharacterString.js +33 -33
- package/dist/node/codecs/x690/decoders/decodeCharacterString.js.map +1 -1
- package/dist/node/codecs/x690/decoders/decodeDate.d.ts +2 -2
- package/dist/node/codecs/x690/decoders/decodeDate.js +14 -14
- package/dist/node/codecs/x690/decoders/decodeDate.js.map +1 -1
- package/dist/node/codecs/x690/decoders/decodeDateTime.d.ts +2 -2
- package/dist/node/codecs/x690/decoders/decodeDateTime.js +17 -17
- package/dist/node/codecs/x690/decoders/decodeDateTime.js.map +1 -1
- package/dist/node/codecs/x690/decoders/decodeEmbeddedPDV.d.ts +2 -2
- package/dist/node/codecs/x690/decoders/decodeEmbeddedPDV.js +33 -33
- package/dist/node/codecs/x690/decoders/decodeEmbeddedPDV.js.map +1 -1
- package/dist/node/codecs/x690/decoders/decodeExternal.d.ts +2 -2
- package/dist/node/codecs/x690/decoders/decodeExternal.js +71 -71
- package/dist/node/codecs/x690/decoders/decodeExternal.js.map +1 -1
- package/dist/node/codecs/x690/decoders/decodeGeneralString.d.ts +2 -2
- package/dist/node/codecs/x690/decoders/decodeGeneralString.js +16 -16
- package/dist/node/codecs/x690/decoders/decodeGeneralString.js.map +1 -1
- package/dist/node/codecs/x690/decoders/decodeGraphicString.d.ts +2 -2
- package/dist/node/codecs/x690/decoders/decodeGraphicString.js +16 -16
- package/dist/node/codecs/x690/decoders/decodeGraphicString.js.map +1 -1
- package/dist/node/codecs/x690/decoders/decodeInteger.d.ts +2 -2
- package/dist/node/codecs/x690/decoders/decodeInteger.js +17 -17
- package/dist/node/codecs/x690/decoders/decodeInteger.js.map +1 -1
- package/dist/node/codecs/x690/decoders/decodeNumericString.d.ts +2 -2
- package/dist/node/codecs/x690/decoders/decodeNumericString.js +16 -16
- package/dist/node/codecs/x690/decoders/decodeNumericString.js.map +1 -1
- package/dist/node/codecs/x690/decoders/decodeOIDIRI.d.ts +2 -2
- package/dist/node/codecs/x690/decoders/decodeOIDIRI.js +8 -8
- package/dist/node/codecs/x690/decoders/decodeOIDIRI.js.map +1 -1
- package/dist/node/codecs/x690/decoders/decodeObjectDescriptor.d.ts +2 -2
- package/dist/node/codecs/x690/decoders/decodeObjectDescriptor.js +16 -16
- package/dist/node/codecs/x690/decoders/decodeObjectDescriptor.js.map +1 -1
- package/dist/node/codecs/x690/decoders/decodeObjectIdentifier.d.ts +2 -2
- package/dist/node/codecs/x690/decoders/decodeObjectIdentifier.js +44 -44
- package/dist/node/codecs/x690/decoders/decodeObjectIdentifier.js.map +1 -1
- package/dist/node/codecs/x690/decoders/decodePrintableString.d.ts +2 -2
- package/dist/node/codecs/x690/decoders/decodePrintableString.js +17 -17
- package/dist/node/codecs/x690/decoders/decodePrintableString.js.map +1 -1
- package/dist/node/codecs/x690/decoders/decodeRelativeOIDIRI.d.ts +2 -2
- package/dist/node/codecs/x690/decoders/decodeRelativeOIDIRI.js +8 -8
- package/dist/node/codecs/x690/decoders/decodeRelativeOIDIRI.js.map +1 -1
- package/dist/node/codecs/x690/decoders/decodeRelativeObjectIdentifier.d.ts +2 -2
- package/dist/node/codecs/x690/decoders/decodeRelativeObjectIdentifier.d.ts.map +1 -1
- package/dist/node/codecs/x690/decoders/decodeRelativeObjectIdentifier.js +25 -26
- package/dist/node/codecs/x690/decoders/decodeRelativeObjectIdentifier.js.map +1 -1
- package/dist/node/codecs/x690/decoders/decodeTime.d.ts +2 -2
- package/dist/node/codecs/x690/decoders/decodeTime.js +8 -8
- package/dist/node/codecs/x690/decoders/decodeTime.js.map +1 -1
- package/dist/node/codecs/x690/decoders/decodeTimeOfDay.d.ts +2 -2
- package/dist/node/codecs/x690/decoders/decodeTimeOfDay.js +18 -18
- package/dist/node/codecs/x690/decoders/decodeTimeOfDay.js.map +1 -1
- package/dist/node/codecs/x690/decoders/decodeVisibleString.d.ts +2 -2
- package/dist/node/codecs/x690/decoders/decodeVisibleString.js +16 -16
- package/dist/node/codecs/x690/decoders/decodeVisibleString.js.map +1 -1
- package/dist/node/codecs/x690/encoders/encodeBitString.d.ts +2 -2
- package/dist/node/codecs/x690/encoders/encodeBitString.js +17 -17
- package/dist/node/codecs/x690/encoders/encodeBitString.js.map +1 -1
- package/dist/node/codecs/x690/encoders/encodeBoolean.d.ts +2 -2
- package/dist/node/codecs/x690/encoders/encodeBoolean.js +6 -6
- package/dist/node/codecs/x690/encoders/encodeCharacterString.d.ts +2 -2
- package/dist/node/codecs/x690/encoders/encodeCharacterString.js +13 -13
- package/dist/node/codecs/x690/encoders/encodeCharacterString.js.map +1 -1
- package/dist/node/codecs/x690/encoders/encodeDate.d.ts +2 -2
- package/dist/node/codecs/x690/encoders/encodeDate.js +15 -15
- package/dist/node/codecs/x690/encoders/encodeDate.js.map +1 -1
- package/dist/node/codecs/x690/encoders/encodeDateTime.d.ts +2 -2
- package/dist/node/codecs/x690/encoders/encodeDateTime.js +18 -18
- package/dist/node/codecs/x690/encoders/encodeDateTime.js.map +1 -1
- package/dist/node/codecs/x690/encoders/encodeDuration.d.ts +2 -2
- package/dist/node/codecs/x690/encoders/encodeDuration.js +77 -77
- package/dist/node/codecs/x690/encoders/encodeDuration.js.map +1 -1
- package/dist/node/codecs/x690/encoders/encodeEmbeddedPDV.d.ts +2 -2
- package/dist/node/codecs/x690/encoders/encodeEmbeddedPDV.js +13 -13
- package/dist/node/codecs/x690/encoders/encodeEmbeddedPDV.js.map +1 -1
- package/dist/node/codecs/x690/encoders/encodeExternal.d.ts +2 -2
- package/dist/node/codecs/x690/encoders/encodeExternal.js +40 -40
- package/dist/node/codecs/x690/encoders/encodeExternal.js.map +1 -1
- package/dist/node/codecs/x690/encoders/encodeGeneralizedTime.d.ts +2 -2
- package/dist/node/codecs/x690/encoders/encodeGeneralizedTime.js +15 -15
- package/dist/node/codecs/x690/encoders/encodeGeneralizedTime.js.map +1 -1
- package/dist/node/codecs/x690/encoders/encodeInteger.d.ts +2 -2
- package/dist/node/codecs/x690/encoders/encodeInteger.js +7 -7
- package/dist/node/codecs/x690/encoders/encodeOIDIRI.d.ts +2 -2
- package/dist/node/codecs/x690/encoders/encodeOIDIRI.js +8 -8
- package/dist/node/codecs/x690/encoders/encodeOIDIRI.js.map +1 -1
- package/dist/node/codecs/x690/encoders/encodeObjectIdentifier.d.ts +2 -2
- package/dist/node/codecs/x690/encoders/encodeObjectIdentifier.d.ts.map +1 -1
- package/dist/node/codecs/x690/encoders/encodeObjectIdentifier.js +16 -17
- package/dist/node/codecs/x690/encoders/encodeObjectIdentifier.js.map +1 -1
- package/dist/node/codecs/x690/encoders/encodeReal.d.ts +2 -2
- package/dist/node/codecs/x690/encoders/encodeReal.js +8 -8
- package/dist/node/codecs/x690/encoders/encodeReal.js.map +1 -1
- package/dist/node/codecs/x690/encoders/encodeRelativeOIDIRI.d.ts +2 -2
- package/dist/node/codecs/x690/encoders/encodeRelativeOIDIRI.js +8 -8
- package/dist/node/codecs/x690/encoders/encodeRelativeOIDIRI.js.map +1 -1
- package/dist/node/codecs/x690/encoders/encodeRelativeObjectIdentifier.d.ts +2 -2
- package/dist/node/codecs/x690/encoders/encodeRelativeObjectIdentifier.d.ts.map +1 -1
- package/dist/node/codecs/x690/encoders/encodeRelativeObjectIdentifier.js +12 -13
- package/dist/node/codecs/x690/encoders/encodeRelativeObjectIdentifier.js.map +1 -1
- package/dist/node/codecs/x690/encoders/encodeSequence.d.ts +3 -3
- package/dist/node/codecs/x690/encoders/encodeSequence.d.ts.map +1 -1
- package/dist/node/codecs/x690/encoders/encodeSequence.js +6 -8
- package/dist/node/codecs/x690/encoders/encodeSequence.js.map +1 -1
- package/dist/node/codecs/x690/encoders/encodeTime.d.ts +2 -2
- package/dist/node/codecs/x690/encoders/encodeTime.js +8 -8
- package/dist/node/codecs/x690/encoders/encodeTime.js.map +1 -1
- package/dist/node/codecs/x690/encoders/encodeTimeOfDay.d.ts +2 -2
- package/dist/node/codecs/x690/encoders/encodeTimeOfDay.js +8 -8
- package/dist/node/codecs/x690/encoders/encodeTimeOfDay.js.map +1 -1
- package/dist/node/codecs/x690/encoders/encodeUTCTime.d.ts +2 -2
- package/dist/node/codecs/x690/encoders/encodeUTCTime.js +16 -16
- package/dist/node/codecs/x690/encoders/encodeUTCTime.js.map +1 -1
- package/dist/node/codecs/x696/encoders/encodeBoolean.d.ts +2 -2
- package/dist/node/codecs/x696/encoders/encodeBoolean.js +6 -6
- package/dist/node/errors.d.ts +47 -47
- package/dist/node/errors.js +89 -89
- package/dist/node/errors.js.map +1 -1
- package/dist/node/functional.d.ts +148 -148
- package/dist/node/functional.d.ts.map +1 -1
- package/dist/node/functional.js +883 -886
- package/dist/node/functional.js.map +1 -1
- package/dist/node/index.d.ts +16 -17
- package/dist/node/index.d.ts.map +1 -1
- package/dist/node/index.js +26 -28
- package/dist/node/index.js.map +1 -1
- package/dist/node/interfaces/Byteable.d.ts +4 -4
- package/dist/node/interfaces/Byteable.js +2 -2
- package/dist/node/interfaces/CharacterValidationFunction.d.ts +3 -3
- package/dist/node/interfaces/CharacterValidationFunction.js +2 -2
- package/dist/node/interfaces/Debyteable.d.ts +3 -3
- package/dist/node/interfaces/Debyteable.js +2 -2
- package/dist/node/interfaces/Deelementable.d.ts +4 -4
- package/dist/node/interfaces/Deelementable.js +2 -2
- package/dist/node/interfaces/Destringable.d.ts +3 -3
- package/dist/node/interfaces/Destringable.js +2 -2
- package/dist/node/interfaces/Elementable.d.ts +4 -4
- package/dist/node/interfaces/Elementable.js +2 -2
- package/dist/node/interfaces/Enbyteable.d.ts +3 -3
- package/dist/node/interfaces/Enbyteable.js +2 -2
- package/dist/node/interfaces/Enelementable.d.ts +4 -4
- package/dist/node/interfaces/Enelementable.js +2 -2
- package/dist/node/interfaces/Enstringable.d.ts +3 -3
- package/dist/node/interfaces/Enstringable.js +2 -2
- package/dist/node/interfaces/Identified.d.ts +4 -4
- package/dist/node/interfaces/Identified.js +2 -2
- package/dist/node/interfaces/Long.d.ts +3 -3
- package/dist/node/interfaces/Long.js +2 -2
- package/dist/node/interfaces/Named.d.ts +3 -3
- package/dist/node/interfaces/Named.js +2 -2
- package/dist/node/interfaces/Stringable.d.ts +4 -4
- package/dist/node/interfaces/Stringable.js +2 -2
- package/dist/node/interfaces/index.d.ts +12 -12
- package/dist/node/interfaces/index.js +2 -2
- package/dist/node/macros.d.ts +59 -59
- package/dist/node/macros.js +21 -21
- package/dist/node/types/CharacterString.d.ts +8 -8
- package/dist/node/types/CharacterString.js +21 -21
- package/dist/node/types/EmbeddedPDV.d.ts +8 -8
- package/dist/node/types/EmbeddedPDV.js +21 -21
- package/dist/node/types/External.d.ts +11 -11
- package/dist/node/types/External.js +58 -58
- package/dist/node/types/External.js.map +1 -1
- package/dist/node/types/ObjectIdentifier.d.ts +12 -12
- package/dist/node/types/ObjectIdentifier.js +70 -70
- package/dist/node/types/ObjectIdentifier.js.map +1 -1
- package/dist/node/types/TypeIdentifier.d.ts +7 -7
- package/dist/node/types/TypeIdentifier.js +9 -9
- package/dist/node/types/index.d.ts +18 -18
- package/dist/node/types/index.js +42 -42
- package/dist/node/types/time/DATE-ENCODING.d.ts +7 -7
- package/dist/node/types/time/DATE-ENCODING.js +14 -14
- package/dist/node/types/time/DATE-ENCODING.js.map +1 -1
- package/dist/node/types/time/DURATION-EQUIVALENT.d.ts +20 -20
- package/dist/node/types/time/DURATION-EQUIVALENT.js +89 -89
- package/dist/node/types/time/DURATION-EQUIVALENT.js.map +1 -1
- package/dist/node/types/time/DURATION-INTERVAL-ENCODING.d.ts +18 -18
- package/dist/node/types/time/DURATION-INTERVAL-ENCODING.js +46 -46
- package/dist/node/types/time/DURATION-INTERVAL-ENCODING.js.map +1 -1
- package/dist/node/types/time/HOURS-DIFF-ENCODING.d.ts +6 -6
- package/dist/node/types/time/HOURS-DIFF-ENCODING.js +13 -13
- package/dist/node/types/time/HOURS-DIFF-ENCODING.js.map +1 -1
- package/dist/node/types/time/HOURS-ENCODING.d.ts +5 -5
- package/dist/node/types/time/HOURS-ENCODING.js +11 -11
- package/dist/node/types/time/HOURS-ENCODING.js.map +1 -1
- package/dist/node/types/time/HOURS-MINUTES-DIFF-ENCODING.d.ts +7 -7
- package/dist/node/types/time/HOURS-MINUTES-DIFF-ENCODING.js +15 -15
- package/dist/node/types/time/HOURS-MINUTES-DIFF-ENCODING.js.map +1 -1
- package/dist/node/types/time/HOURS-MINUTES-ENCODING.d.ts +6 -6
- package/dist/node/types/time/HOURS-MINUTES-ENCODING.js +13 -13
- package/dist/node/types/time/HOURS-MINUTES-ENCODING.js.map +1 -1
- package/dist/node/types/time/TIME-OF-DAY-DIFF-ENCODING.d.ts +8 -8
- package/dist/node/types/time/TIME-OF-DAY-DIFF-ENCODING.js +17 -17
- package/dist/node/types/time/TIME-OF-DAY-DIFF-ENCODING.js.map +1 -1
- package/dist/node/types/time/TIME-OF-DAY-ENCODING.d.ts +7 -7
- package/dist/node/types/time/TIME-OF-DAY-ENCODING.js +15 -15
- package/dist/node/types/time/TIME-OF-DAY-ENCODING.js.map +1 -1
- package/dist/node/types/time/TIME-OF-DAY-FRACTION-DIFF-ENCODING.d.ts +9 -9
- package/dist/node/types/time/TIME-OF-DAY-FRACTION-DIFF-ENCODING.js +19 -19
- package/dist/node/types/time/TIME-OF-DAY-FRACTION-DIFF-ENCODING.js.map +1 -1
- package/dist/node/types/time/TIME-OF-DAY-FRACTION-ENCODING.d.ts +8 -8
- package/dist/node/types/time/TIME-OF-DAY-FRACTION-ENCODING.js +17 -17
- package/dist/node/types/time/TIME-OF-DAY-FRACTION-ENCODING.js.map +1 -1
- package/dist/node/types/time/YEAR-ENCODING.d.ts +5 -5
- package/dist/node/types/time/YEAR-ENCODING.js +8 -8
- package/dist/node/types/time/YEAR-MONTH-ENCODING.d.ts +6 -6
- package/dist/node/types/time/YEAR-MONTH-ENCODING.js +12 -12
- package/dist/node/types/time/YEAR-MONTH-ENCODING.js.map +1 -1
- package/dist/node/utils/base128Length.d.ts +1 -1
- package/dist/node/utils/base128Length.js +6 -6
- package/dist/node/utils/base256Length.d.ts +1 -1
- package/dist/node/utils/base256Length.js +6 -6
- package/dist/node/utils/bigint.d.ts +4 -4
- package/dist/node/utils/bigint.js +125 -125
- package/dist/node/utils/bigint.js.map +1 -1
- package/dist/node/utils/compareSetOfElementsCanonically.d.ts +2 -2
- package/dist/node/utils/compareSetOfElementsCanonically.js +16 -16
- package/dist/node/utils/convertBytesToText.d.ts +1 -1
- package/dist/node/utils/convertBytesToText.d.ts.map +1 -1
- package/dist/node/utils/convertBytesToText.js +16 -13
- package/dist/node/utils/convertBytesToText.js.map +1 -1
- package/dist/node/utils/convertTextToBytes.d.ts +1 -1
- package/dist/node/utils/convertTextToBytes.js +13 -13
- package/dist/node/utils/decodeBase128.d.ts +1 -1
- package/dist/node/utils/decodeBase128.js +23 -23
- package/dist/node/utils/decodeBase128.js.map +1 -1
- package/dist/node/utils/decodeIEEE754DoublePrecisionFloat.d.ts +1 -1
- package/dist/node/utils/decodeIEEE754DoublePrecisionFloat.js +6 -6
- package/dist/node/utils/decodeIEEE754SinglePrecisionFloat.d.ts +1 -1
- package/dist/node/utils/decodeIEEE754SinglePrecisionFloat.js +6 -6
- package/dist/node/utils/decodeSignedBigEndianInteger.d.ts +1 -1
- package/dist/node/utils/decodeSignedBigEndianInteger.d.ts.map +1 -1
- package/dist/node/utils/decodeSignedBigEndianInteger.js +16 -19
- package/dist/node/utils/decodeSignedBigEndianInteger.js.map +1 -1
- package/dist/node/utils/decodeUnsignedBigEndianInteger.d.ts +1 -1
- package/dist/node/utils/decodeUnsignedBigEndianInteger.js +16 -16
- package/dist/node/utils/decodeUnsignedBigEndianInteger.js.map +1 -1
- package/dist/node/utils/decodeX690RealNumber.d.ts +1 -1
- package/dist/node/utils/decodeX690RealNumber.js +112 -112
- package/dist/node/utils/decodeX690RealNumber.js.map +1 -1
- package/dist/node/utils/dissectFloat.d.ts +5 -5
- package/dist/node/utils/dissectFloat.js +16 -16
- package/dist/node/utils/encodeBase128.d.ts +1 -1
- package/dist/node/utils/encodeBase128.js +26 -26
- package/dist/node/utils/encodeBase128.js.map +1 -1
- package/dist/node/utils/encodeIEEE754DoublePrecisionFloat.d.ts +1 -1
- package/dist/node/utils/encodeIEEE754DoublePrecisionFloat.js +6 -6
- package/dist/node/utils/encodeIEEE754SinglePrecisionFloat.d.ts +1 -1
- package/dist/node/utils/encodeIEEE754SinglePrecisionFloat.js +6 -6
- package/dist/node/utils/encodeSignedBigEndianInteger.d.ts +1 -1
- package/dist/node/utils/encodeSignedBigEndianInteger.js +40 -40
- package/dist/node/utils/encodeSignedBigEndianInteger.js.map +1 -1
- package/dist/node/utils/encodeUnsignedBigEndianInteger.d.ts +1 -1
- package/dist/node/utils/encodeUnsignedBigEndianInteger.d.ts.map +1 -1
- package/dist/node/utils/encodeUnsignedBigEndianInteger.js +26 -25
- package/dist/node/utils/encodeUnsignedBigEndianInteger.js.map +1 -1
- package/dist/node/utils/encodeX690Base10RealNumber.d.ts +1 -1
- package/dist/node/utils/encodeX690Base10RealNumber.js +25 -25
- package/dist/node/utils/encodeX690Base10RealNumber.js.map +1 -1
- package/dist/node/utils/encodeX690BinaryRealNumber.d.ts +1 -1
- package/dist/node/utils/encodeX690BinaryRealNumber.js +47 -47
- package/dist/node/utils/encodeX690BinaryRealNumber.js.map +1 -1
- package/dist/node/utils/getBitFromBase128.d.ts +1 -1
- package/dist/node/utils/getBitFromBase128.js +7 -7
- package/dist/node/utils/getBitFromBase256.d.ts +1 -1
- package/dist/node/utils/getBitFromBase256.js +6 -6
- package/dist/node/utils/index.d.ts +25 -25
- package/dist/node/utils/index.js +56 -56
- package/dist/node/utils/isInCanonicalOrder.d.ts +2 -2
- package/dist/node/utils/isInCanonicalOrder.js +22 -22
- package/dist/node/utils/isUniquelyTagged.d.ts +2 -2
- package/dist/node/utils/isUniquelyTagged.js +14 -14
- package/dist/node/utils/packBits.d.ts +2 -2
- package/dist/node/utils/packBits.js +15 -15
- package/dist/node/utils/setBitInBase128.d.ts +1 -1
- package/dist/node/utils/setBitInBase128.js +12 -12
- package/dist/node/utils/setBitInBase256.d.ts +1 -1
- package/dist/node/utils/setBitInBase256.js +12 -12
- package/dist/node/utils/sortCanonically.d.ts +2 -2
- package/dist/node/utils/sortCanonically.d.ts.map +1 -1
- package/dist/node/utils/sortCanonically.js +13 -18
- package/dist/node/utils/sortCanonically.js.map +1 -1
- package/dist/node/utils/splitBytesByContinuationBit.d.ts +1 -1
- package/dist/node/utils/splitBytesByContinuationBit.js +13 -13
- package/dist/node/utils/splitOctetsCanonically.d.ts +1 -1
- package/dist/node/utils/splitOctetsCanonically.js +8 -8
- package/dist/node/utils/trimLeadingPaddingBytes.d.ts +1 -1
- package/dist/node/utils/trimLeadingPaddingBytes.js +18 -18
- package/dist/node/utils/unpackBits.d.ts +2 -2
- package/dist/node/utils/unpackBits.js +15 -15
- package/dist/node/validators/datetimeComponentValidator.d.ts +2 -2
- package/dist/node/validators/datetimeComponentValidator.js +18 -18
- package/dist/node/validators/datetimeComponentValidator.js.map +1 -1
- package/dist/node/validators/index.d.ts +6 -6
- package/dist/node/validators/index.js +18 -18
- package/dist/node/validators/isGeneralCharacter.d.ts +1 -1
- package/dist/node/validators/isGeneralCharacter.js +6 -6
- package/dist/node/validators/isGraphicCharacter.d.ts +1 -1
- package/dist/node/validators/isGraphicCharacter.js +6 -6
- package/dist/node/validators/isNumericCharacter.d.ts +1 -1
- package/dist/node/validators/isNumericCharacter.js +6 -6
- package/dist/node/validators/isObjectDescriptorCharacter.d.ts +1 -1
- package/dist/node/validators/isObjectDescriptorCharacter.js +8 -8
- package/dist/node/validators/isObjectDescriptorCharacter.js.map +1 -1
- package/dist/node/validators/isPrintableCharacter.d.ts +1 -1
- package/dist/node/validators/isPrintableCharacter.js +12 -12
- package/dist/node/validators/isVisibleCharacter.d.ts +1 -1
- package/dist/node/validators/isVisibleCharacter.js +8 -8
- package/dist/node/validators/isVisibleCharacter.js.map +1 -1
- package/dist/node/validators/validateConstruction.d.ts +3 -3
- package/dist/node/validators/validateConstruction.js +41 -41
- package/dist/node/validators/validateConstruction.js.map +1 -1
- package/dist/node/validators/validateDate.d.ts +1 -1
- package/dist/node/validators/validateDate.js +44 -44
- package/dist/node/validators/validateDate.js.map +1 -1
- package/dist/node/validators/validateDateTime.d.ts +1 -1
- package/dist/node/validators/validateDateTime.js +10 -10
- package/dist/node/validators/validateDateTime.js.map +1 -1
- package/dist/node/validators/validateTime.d.ts +1 -1
- package/dist/node/validators/validateTime.js +16 -16
- package/dist/node/validators/validateTime.js.map +1 -1
- package/dist/node/values.d.ts +88 -88
- package/dist/node/values.js +110 -110
- package/dist/node/x690.d.ts +24 -24
- package/dist/node/x690.js +99 -99
- package/dist/node/x690.js.map +1 -1
- package/package.json +16 -16
- package/dist/node/utils/concatenateBytes.d.ts +0 -2
- package/dist/node/utils/concatenateBytes.d.ts.map +0 -1
- package/dist/node/utils/concatenateBytes.js +0 -19
- package/dist/node/utils/concatenateBytes.js.map +0 -1
package/dist/node/codecs/ber.js
CHANGED
|
@@ -1,603 +1,594 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const tslib_1 = require("tslib");
|
|
4
|
-
const asn1_1 =
|
|
5
|
-
const errors =
|
|
6
|
-
const values_1 = require("../values");
|
|
7
|
-
const x690_1 =
|
|
8
|
-
const convertBytesToText_1 =
|
|
9
|
-
const convertTextToBytes_1 =
|
|
10
|
-
const ObjectIdentifier_1 =
|
|
11
|
-
const encodeBoolean_1 =
|
|
12
|
-
const decodeBoolean_1 =
|
|
13
|
-
const encodeBitString_1 =
|
|
14
|
-
const decodeBitString_1 =
|
|
15
|
-
const encodeReal_1 =
|
|
16
|
-
const decodeReal_1 =
|
|
17
|
-
const encodeSequence_1 =
|
|
18
|
-
const decodeSequence_1 =
|
|
19
|
-
const encodeUTCTime_1 =
|
|
20
|
-
const decodeUTCTime_1 =
|
|
21
|
-
const encodeGeneralizedTime_1 =
|
|
22
|
-
const decodeGeneralizedTime_1 =
|
|
23
|
-
const encodeExternal_1 =
|
|
24
|
-
const encodeEmbeddedPDV_1 =
|
|
25
|
-
const encodeCharacterString_1 =
|
|
26
|
-
const decodeExternal_1 =
|
|
27
|
-
const decodeEmbeddedPDV_1 =
|
|
28
|
-
const decodeCharacterString_1 =
|
|
29
|
-
const encodeGraphicString_1 =
|
|
30
|
-
const encodeNumericString_1 =
|
|
31
|
-
const encodeObjectDescriptor_1 =
|
|
32
|
-
const encodePrintableString_1 =
|
|
33
|
-
const encodeVisibleString_1 =
|
|
34
|
-
const encodeGeneralString_1 =
|
|
35
|
-
const decodeGraphicString_1 =
|
|
36
|
-
const decodeNumericString_1 =
|
|
37
|
-
const decodeObjectDescriptor_1 =
|
|
38
|
-
const decodePrintableString_1 =
|
|
39
|
-
const decodeVisibleString_1 =
|
|
40
|
-
const decodeGeneralString_1 =
|
|
41
|
-
const encodeDuration_1 =
|
|
42
|
-
const decodeDuration_1 =
|
|
43
|
-
const macros_1 = require("../macros");
|
|
44
|
-
class BERElement extends x690_1.default {
|
|
45
|
-
constructor(tagClass = values_1.ASN1TagClass.universal, construction = values_1.ASN1Construction.primitive, tagNumber = values_1.ASN1UniversalType.endOfContent, value = undefined) {
|
|
46
|
-
super();
|
|
47
|
-
this.encode(value);
|
|
48
|
-
this.tagClass = tagClass;
|
|
49
|
-
this.construction = construction;
|
|
50
|
-
this.tagNumber = tagNumber;
|
|
51
|
-
}
|
|
52
|
-
set boolean(value) {
|
|
53
|
-
this.value = (0, encodeBoolean_1.default)(value);
|
|
54
|
-
}
|
|
55
|
-
get boolean() {
|
|
56
|
-
if (this.construction !== values_1.ASN1Construction.primitive) {
|
|
57
|
-
throw new errors.ASN1ConstructionError("BOOLEAN cannot be constructed.", this);
|
|
58
|
-
}
|
|
59
|
-
return (0, decodeBoolean_1.default)(this.value);
|
|
60
|
-
}
|
|
61
|
-
set bitString(value) {
|
|
62
|
-
this.value = (0, encodeBitString_1.default)(value);
|
|
63
|
-
}
|
|
64
|
-
get bitString() {
|
|
65
|
-
if (this.construction === values_1.ASN1Construction.primitive) {
|
|
66
|
-
return (0, decodeBitString_1.default)(this.value);
|
|
67
|
-
}
|
|
68
|
-
if ((this.recursionCount + 1) > BERElement.nestingRecursionLimit) {
|
|
69
|
-
throw new errors.ASN1RecursionError();
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
const substrings = this.sequence;
|
|
73
|
-
substrings.slice(0, (substrings.length - 1))
|
|
74
|
-
if (substring.construction === values_1.ASN1Construction.primitive
|
|
75
|
-
&& substring.value.length > 0
|
|
76
|
-
&& substring.value[0] !== 0x00) {
|
|
77
|
-
throw new errors.ASN1Error("Only the last subelement of a constructed BIT STRING may have a non-zero first value byte.", this);
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
if (substring.tagClass !== this.tagClass) {
|
|
82
|
-
throw new errors.ASN1ConstructionError("Invalid tag class in recursively-encoded BIT STRING.", this);
|
|
83
|
-
}
|
|
84
|
-
if (substring.tagNumber !== this.tagNumber) {
|
|
85
|
-
throw new errors.ASN1ConstructionError("Invalid tag class in recursively-encoded BIT STRING.", this);
|
|
86
|
-
}
|
|
87
|
-
substring.recursionCount = (this.recursionCount + 1);
|
|
88
|
-
appendy
|
|
89
|
-
}
|
|
90
|
-
return new Uint8ClampedArray(appendy.map((b) => (b ? 1 : 0)));
|
|
91
|
-
}
|
|
92
|
-
set octetString(value) {
|
|
93
|
-
this.value = new Uint8Array(value);
|
|
94
|
-
}
|
|
95
|
-
get octetString() {
|
|
96
|
-
return this.deconstruct("OCTET STRING");
|
|
97
|
-
}
|
|
98
|
-
set objectDescriptor(value) {
|
|
99
|
-
this.value = (0, encodeObjectDescriptor_1.default)(value);
|
|
100
|
-
}
|
|
101
|
-
get objectDescriptor() {
|
|
102
|
-
const bytes = this.deconstruct("ObjectDescriptor");
|
|
103
|
-
return (0, decodeObjectDescriptor_1.default)(bytes);
|
|
104
|
-
}
|
|
105
|
-
set external(value) {
|
|
106
|
-
this.value = (0, encodeExternal_1.default)(value);
|
|
107
|
-
}
|
|
108
|
-
get external() {
|
|
109
|
-
return (0, decodeExternal_1.default)(this.value);
|
|
110
|
-
}
|
|
111
|
-
set real(value) {
|
|
112
|
-
this.value = (0, encodeReal_1.default)(value);
|
|
113
|
-
}
|
|
114
|
-
get real() {
|
|
115
|
-
if (this.construction !== values_1.ASN1Construction.primitive) {
|
|
116
|
-
throw new errors.ASN1ConstructionError("REAL cannot be constructed.");
|
|
117
|
-
}
|
|
118
|
-
return (0, decodeReal_1.default)(this.value);
|
|
119
|
-
}
|
|
120
|
-
set embeddedPDV(value) {
|
|
121
|
-
this.value = (0, encodeEmbeddedPDV_1.default)(value);
|
|
122
|
-
}
|
|
123
|
-
get embeddedPDV() {
|
|
124
|
-
return (0, decodeEmbeddedPDV_1.default)(this.value);
|
|
125
|
-
}
|
|
126
|
-
set utf8String(value) {
|
|
127
|
-
this.value = (0, convertTextToBytes_1.default)(value);
|
|
128
|
-
}
|
|
129
|
-
get utf8String() {
|
|
130
|
-
return (0, convertBytesToText_1.default)(this.deconstruct("UTF8String"));
|
|
131
|
-
}
|
|
132
|
-
set sequence(value) {
|
|
133
|
-
this.value = (0, encodeSequence_1.default)(value);
|
|
134
|
-
this.construction = values_1.ASN1Construction.constructed;
|
|
135
|
-
}
|
|
136
|
-
get sequence() {
|
|
137
|
-
if (this.construction !== values_1.ASN1Construction.constructed) {
|
|
138
|
-
throw new errors.ASN1ConstructionError("SET or SEQUENCE cannot be primitively constructed.", this);
|
|
139
|
-
}
|
|
140
|
-
return (0, decodeSequence_1.default)(this.value);
|
|
141
|
-
}
|
|
142
|
-
set set(value) {
|
|
143
|
-
this.sequence = value;
|
|
144
|
-
}
|
|
145
|
-
get set() {
|
|
146
|
-
return this.sequence;
|
|
147
|
-
}
|
|
148
|
-
set numericString(value) {
|
|
149
|
-
this.value = (0, encodeNumericString_1.default)(value);
|
|
150
|
-
}
|
|
151
|
-
get numericString() {
|
|
152
|
-
const bytes = this.deconstruct("NumericString");
|
|
153
|
-
return (0, decodeNumericString_1.default)(bytes);
|
|
154
|
-
}
|
|
155
|
-
set printableString(value) {
|
|
156
|
-
this.value = (0, encodePrintableString_1.default)(value);
|
|
157
|
-
}
|
|
158
|
-
get printableString() {
|
|
159
|
-
const bytes = this.deconstruct("PrintableString");
|
|
160
|
-
return (0, decodePrintableString_1.default)(bytes);
|
|
161
|
-
}
|
|
162
|
-
set teletexString(value) {
|
|
163
|
-
this.value = new Uint8Array(value);
|
|
164
|
-
}
|
|
165
|
-
get teletexString() {
|
|
166
|
-
return this.deconstruct("TeletexString");
|
|
167
|
-
}
|
|
168
|
-
set videotexString(value) {
|
|
169
|
-
this.value = new Uint8Array(value);
|
|
170
|
-
}
|
|
171
|
-
get videotexString() {
|
|
172
|
-
return this.deconstruct("VideotexString");
|
|
173
|
-
}
|
|
174
|
-
set ia5String(value) {
|
|
175
|
-
this.value = (0, convertTextToBytes_1.default)(value);
|
|
176
|
-
}
|
|
177
|
-
get ia5String() {
|
|
178
|
-
return (0, convertBytesToText_1.default)(this.deconstruct("IA5String"));
|
|
179
|
-
}
|
|
180
|
-
set utcTime(value) {
|
|
181
|
-
this.value = (0, encodeUTCTime_1.default)(value);
|
|
182
|
-
}
|
|
183
|
-
get utcTime() {
|
|
184
|
-
return (0, decodeUTCTime_1.default)(this.deconstruct("UTCTime"));
|
|
185
|
-
}
|
|
186
|
-
set generalizedTime(value) {
|
|
187
|
-
this.value = (0, encodeGeneralizedTime_1.default)(value);
|
|
188
|
-
}
|
|
189
|
-
get generalizedTime() {
|
|
190
|
-
return (0, decodeGeneralizedTime_1.default)(this.deconstruct("GeneralizedTime"));
|
|
191
|
-
}
|
|
192
|
-
set graphicString(value) {
|
|
193
|
-
this.value = (0, encodeGraphicString_1.default)(value);
|
|
194
|
-
}
|
|
195
|
-
get graphicString() {
|
|
196
|
-
const bytes = this.deconstruct("GraphicString");
|
|
197
|
-
return (0, decodeGraphicString_1.default)(bytes);
|
|
198
|
-
}
|
|
199
|
-
set visibleString(value) {
|
|
200
|
-
this.value = (0, encodeVisibleString_1.default)(value);
|
|
201
|
-
}
|
|
202
|
-
get visibleString() {
|
|
203
|
-
return (0, decodeVisibleString_1.default)(this.value);
|
|
204
|
-
}
|
|
205
|
-
set generalString(value) {
|
|
206
|
-
this.value = (0, encodeGeneralString_1.default)(value);
|
|
207
|
-
}
|
|
208
|
-
get generalString() {
|
|
209
|
-
const bytes = this.deconstruct("GeneralString");
|
|
210
|
-
return (0, decodeGeneralString_1.default)(bytes);
|
|
211
|
-
}
|
|
212
|
-
set characterString(value) {
|
|
213
|
-
this.value = (0, encodeCharacterString_1.default)(value);
|
|
214
|
-
}
|
|
215
|
-
get characterString() {
|
|
216
|
-
return (0, decodeCharacterString_1.default)(this.value);
|
|
217
|
-
}
|
|
218
|
-
set universalString(value) {
|
|
219
|
-
const buf = new Uint8Array(value.length << 2);
|
|
220
|
-
for (let i = 0; i < value.length; i++) {
|
|
221
|
-
buf[(i << 2)] = value.charCodeAt(i) >>> 24;
|
|
222
|
-
buf[(i << 2) + 1] = value.charCodeAt(i) >>> 16;
|
|
223
|
-
buf[(i << 2) + 2] = value.charCodeAt(i) >>> 8;
|
|
224
|
-
buf[(i << 2) + 3] = value.charCodeAt(i);
|
|
225
|
-
}
|
|
226
|
-
this.value = buf;
|
|
227
|
-
}
|
|
228
|
-
get universalString() {
|
|
229
|
-
const valueBytes = this.deconstruct("UniversalString");
|
|
230
|
-
if (valueBytes.length % 4) {
|
|
231
|
-
throw new errors.ASN1Error("UniversalString encoded on non-mulitple of four bytes.", this);
|
|
232
|
-
}
|
|
233
|
-
let ret = "";
|
|
234
|
-
for (let i = 0; i < valueBytes.length; i += 4) {
|
|
235
|
-
ret += String.fromCharCode((valueBytes[i + 0] << 24)
|
|
236
|
-
+ (valueBytes[i + 1] << 16)
|
|
237
|
-
+ (valueBytes[i + 2] << 8)
|
|
238
|
-
+ (valueBytes[i + 3] << 0));
|
|
239
|
-
}
|
|
240
|
-
return ret;
|
|
241
|
-
}
|
|
242
|
-
set bmpString(value) {
|
|
243
|
-
const buf = new Uint8Array(value.length << 1);
|
|
244
|
-
for (let i = 0, strLen = value.length; i < strLen; i++) {
|
|
245
|
-
buf[(i << 1)] = value.charCodeAt(i) >>> 8;
|
|
246
|
-
buf[(i << 1) + 1] = value.charCodeAt(i);
|
|
247
|
-
}
|
|
248
|
-
this.value = buf;
|
|
249
|
-
}
|
|
250
|
-
get bmpString() {
|
|
251
|
-
const valueBytes = this.deconstruct("BMPString");
|
|
252
|
-
if (valueBytes.length % 2)
|
|
253
|
-
throw new errors.ASN1Error("BMPString encoded on non-mulitple of two bytes.", this);
|
|
254
|
-
if (typeof
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
return (
|
|
264
|
-
}
|
|
265
|
-
else {
|
|
266
|
-
throw new errors.ASN1Error("Neither TextDecoder nor Buffer are defined to decode bytes into text.", this);
|
|
267
|
-
}
|
|
268
|
-
}
|
|
269
|
-
set duration(value) {
|
|
270
|
-
this.value = (0, encodeDuration_1.default)(value);
|
|
271
|
-
}
|
|
272
|
-
get duration() {
|
|
273
|
-
return (0, decodeDuration_1.default)(this.value);
|
|
274
|
-
}
|
|
275
|
-
encode(value) {
|
|
276
|
-
switch (typeof value) {
|
|
277
|
-
case ("undefined"): {
|
|
278
|
-
this.value = new Uint8Array(0);
|
|
279
|
-
break;
|
|
280
|
-
}
|
|
281
|
-
case ("boolean"): {
|
|
282
|
-
this.tagNumber = values_1.ASN1UniversalType.boolean;
|
|
283
|
-
this.boolean = value;
|
|
284
|
-
break;
|
|
285
|
-
}
|
|
286
|
-
case ("number"): {
|
|
287
|
-
if (Number.isInteger(value)) {
|
|
288
|
-
this.tagNumber = values_1.ASN1UniversalType.integer;
|
|
289
|
-
this.integer = value;
|
|
290
|
-
}
|
|
291
|
-
else {
|
|
292
|
-
this.tagNumber = values_1.ASN1UniversalType.realNumber;
|
|
293
|
-
this.real = value;
|
|
294
|
-
}
|
|
295
|
-
break;
|
|
296
|
-
}
|
|
297
|
-
case ("string"): {
|
|
298
|
-
this.tagNumber = values_1.ASN1UniversalType.utf8String;
|
|
299
|
-
this.utf8String = value;
|
|
300
|
-
break;
|
|
301
|
-
}
|
|
302
|
-
case ("object"): {
|
|
303
|
-
if (!value) {
|
|
304
|
-
this.tagNumber = values_1.ASN1UniversalType.nill;
|
|
305
|
-
this.value = new Uint8Array(0);
|
|
306
|
-
}
|
|
307
|
-
else if (value instanceof Uint8Array) {
|
|
308
|
-
this.tagNumber = values_1.ASN1UniversalType.octetString;
|
|
309
|
-
this.octetString = value;
|
|
310
|
-
}
|
|
311
|
-
else if (value instanceof Uint8ClampedArray) {
|
|
312
|
-
this.tagNumber = values_1.ASN1UniversalType.bitString;
|
|
313
|
-
this.bitString = value;
|
|
314
|
-
}
|
|
315
|
-
else if (value instanceof asn1_1.default) {
|
|
316
|
-
this.construction = values_1.ASN1Construction.constructed;
|
|
317
|
-
this.sequence = [value];
|
|
318
|
-
}
|
|
319
|
-
else if (value instanceof Set) {
|
|
320
|
-
this.construction = values_1.ASN1Construction.constructed;
|
|
321
|
-
this.set = Array.from(value).map((v) => {
|
|
322
|
-
if (typeof v === "object" && v instanceof asn1_1.default) {
|
|
323
|
-
return v;
|
|
324
|
-
}
|
|
325
|
-
else {
|
|
326
|
-
const e = new BERElement();
|
|
327
|
-
e.encode(v);
|
|
328
|
-
return e;
|
|
329
|
-
}
|
|
330
|
-
});
|
|
331
|
-
}
|
|
332
|
-
else if ((value instanceof ObjectIdentifier_1.default) || (value.constructor?.name === "ObjectIdentifier")) {
|
|
333
|
-
this.tagNumber = values_1.ASN1UniversalType.objectIdentifier;
|
|
334
|
-
this.objectIdentifier = value;
|
|
335
|
-
}
|
|
336
|
-
else if (Array.isArray(value)) {
|
|
337
|
-
this.construction = values_1.ASN1Construction.constructed;
|
|
338
|
-
this.tagNumber = values_1.ASN1UniversalType.sequence;
|
|
339
|
-
this.sequence = value.map((sub) => {
|
|
340
|
-
const ret = new BERElement();
|
|
341
|
-
ret.encode(sub);
|
|
342
|
-
return ret;
|
|
343
|
-
});
|
|
344
|
-
}
|
|
345
|
-
else if (value instanceof Date) {
|
|
346
|
-
this.generalizedTime = value;
|
|
347
|
-
}
|
|
348
|
-
else {
|
|
349
|
-
throw new errors.ASN1Error(`Cannot encode value of type ${value.constructor.name}.`, this);
|
|
350
|
-
}
|
|
351
|
-
break;
|
|
352
|
-
}
|
|
353
|
-
default: {
|
|
354
|
-
throw new errors.ASN1Error(`Cannot encode value of type ${typeof value}.`, this);
|
|
355
|
-
}
|
|
356
|
-
}
|
|
357
|
-
}
|
|
358
|
-
static fromSequence(sequence) {
|
|
359
|
-
const ret = new BERElement(values_1.ASN1TagClass.universal, values_1.ASN1Construction.constructed, values_1.ASN1UniversalType.sequence);
|
|
360
|
-
ret.sequence = sequence.filter((element) => Boolean(element));
|
|
361
|
-
return ret;
|
|
362
|
-
}
|
|
363
|
-
static fromSet(set) {
|
|
364
|
-
const ret = new BERElement(values_1.ASN1TagClass.universal, values_1.ASN1Construction.constructed, values_1.ASN1UniversalType.set);
|
|
365
|
-
ret.set = set.filter((element) => Boolean(element));
|
|
366
|
-
return ret;
|
|
367
|
-
}
|
|
368
|
-
get inner() {
|
|
369
|
-
if (this.construction !== values_1.ASN1Construction.constructed) {
|
|
370
|
-
throw new errors.ASN1ConstructionError("An explicitly-encoded element cannot be encoded using "
|
|
371
|
-
+ "primitive construction.", this);
|
|
372
|
-
}
|
|
373
|
-
const ret = new BERElement();
|
|
374
|
-
const readBytes = ret.fromBytes(this.value);
|
|
375
|
-
if (readBytes !== this.value.length) {
|
|
376
|
-
throw new errors.ASN1ConstructionError("An explicitly-encoding element contained more than one single "
|
|
377
|
-
+ "encoded element. The tag number of the first decoded "
|
|
378
|
-
+ `element was ${ret.tagNumber}, and it was encoded on `
|
|
379
|
-
+ `${readBytes} bytes.`, this);
|
|
380
|
-
}
|
|
381
|
-
return ret;
|
|
382
|
-
}
|
|
383
|
-
set inner(value) {
|
|
384
|
-
this.construction = values_1.ASN1Construction.constructed;
|
|
385
|
-
this.value = value.toBytes();
|
|
386
|
-
}
|
|
387
|
-
fromBytes(bytes) {
|
|
388
|
-
if (bytes.length < 2) {
|
|
389
|
-
throw new errors.ASN1TruncationError("Tried to decode a BER element that is less than two bytes.", this);
|
|
390
|
-
}
|
|
391
|
-
if ((this.recursionCount + 1) > BERElement.nestingRecursionLimit) {
|
|
392
|
-
throw new errors.ASN1RecursionError();
|
|
393
|
-
}
|
|
394
|
-
let cursor = 0;
|
|
395
|
-
switch (bytes[cursor] & 0b11000000) {
|
|
396
|
-
case (0b00000000):
|
|
397
|
-
this.tagClass = values_1.ASN1TagClass.universal;
|
|
398
|
-
break;
|
|
399
|
-
case (0b01000000):
|
|
400
|
-
this.tagClass = values_1.ASN1TagClass.application;
|
|
401
|
-
break;
|
|
402
|
-
case (0b10000000):
|
|
403
|
-
this.tagClass = values_1.ASN1TagClass.context;
|
|
404
|
-
break;
|
|
405
|
-
case (0b11000000):
|
|
406
|
-
this.tagClass = values_1.ASN1TagClass.private;
|
|
407
|
-
break;
|
|
408
|
-
default: this.tagClass = values_1.ASN1TagClass.universal;
|
|
409
|
-
}
|
|
410
|
-
this.construction = ((bytes[cursor] & 0b00100000)
|
|
411
|
-
? values_1.ASN1Construction.constructed : values_1.ASN1Construction.primitive);
|
|
412
|
-
this.tagNumber = (bytes[cursor] & 0b00011111);
|
|
413
|
-
cursor++;
|
|
414
|
-
if (this.tagNumber >= 31) {
|
|
415
|
-
if (bytes[cursor] === 0b10000000) {
|
|
416
|
-
throw new errors.ASN1PaddingError("Leading padding byte on long tag number encoding.", this);
|
|
417
|
-
}
|
|
418
|
-
this.tagNumber = 0;
|
|
419
|
-
const limit = (((bytes.length - 1) >= 4) ? 4 : (bytes.length - 1));
|
|
420
|
-
while (cursor < limit) {
|
|
421
|
-
if (!(bytes[cursor++] & 0b10000000))
|
|
422
|
-
break;
|
|
423
|
-
}
|
|
424
|
-
if (bytes[cursor - 1] & 0b10000000) {
|
|
425
|
-
if (limit === (bytes.length - 1)) {
|
|
426
|
-
throw new errors.ASN1TruncationError("ASN.1 tag number appears to have been truncated.", this);
|
|
427
|
-
}
|
|
428
|
-
else {
|
|
429
|
-
throw new errors.ASN1OverflowError("ASN.1 tag number too large.", this);
|
|
430
|
-
}
|
|
431
|
-
}
|
|
432
|
-
for (let i = 1; i < cursor; i++) {
|
|
433
|
-
this.tagNumber <<= 7;
|
|
434
|
-
this.tagNumber |= (bytes[i] & 0x7F);
|
|
435
|
-
}
|
|
436
|
-
}
|
|
437
|
-
if ((bytes[cursor] & 0b10000000) === 0b10000000) {
|
|
438
|
-
const numberOfLengthOctets = (bytes[cursor] & 0x7F);
|
|
439
|
-
if (numberOfLengthOctets) {
|
|
440
|
-
if (numberOfLengthOctets === 0b01111111) {
|
|
441
|
-
throw new errors.ASN1UndefinedError("Length byte with undefined meaning encountered.", this);
|
|
442
|
-
}
|
|
443
|
-
if (numberOfLengthOctets > 4) {
|
|
444
|
-
throw new errors.ASN1OverflowError("Element length too long to decode to an integer.", this);
|
|
445
|
-
}
|
|
446
|
-
if (cursor + numberOfLengthOctets >= bytes.length) {
|
|
447
|
-
throw new errors.ASN1TruncationError("Element length bytes appear to have been truncated.", this);
|
|
448
|
-
}
|
|
449
|
-
cursor++;
|
|
450
|
-
const lengthNumberOctets = new Uint8Array(4);
|
|
451
|
-
for (let i = numberOfLengthOctets; i > 0; i--) {
|
|
452
|
-
lengthNumberOctets[(4 - i)] = bytes[(cursor + numberOfLengthOctets - i)];
|
|
453
|
-
}
|
|
454
|
-
let length = 0;
|
|
455
|
-
|
|
456
|
-
length <<= 8;
|
|
457
|
-
length += octet;
|
|
458
|
-
}
|
|
459
|
-
if ((cursor + length) < cursor) {
|
|
460
|
-
throw new errors.ASN1OverflowError("ASN.1 element too large.", this);
|
|
461
|
-
}
|
|
462
|
-
cursor += (numberOfLengthOctets);
|
|
463
|
-
if ((cursor + length) > bytes.length) {
|
|
464
|
-
throw new errors.ASN1TruncationError("ASN.1 element truncated.", this);
|
|
465
|
-
}
|
|
466
|
-
this.value = bytes.slice(cursor, (cursor + length));
|
|
467
|
-
return (cursor + length);
|
|
468
|
-
}
|
|
469
|
-
else {
|
|
470
|
-
if (this.construction !== values_1.ASN1Construction.constructed) {
|
|
471
|
-
throw new errors.ASN1ConstructionError("Indefinite length ASN.1 element was not of constructed construction.", this);
|
|
472
|
-
}
|
|
473
|
-
const startOfValue = ++cursor;
|
|
474
|
-
let sentinel = cursor;
|
|
475
|
-
while (sentinel < bytes.length) {
|
|
476
|
-
const child = new BERElement();
|
|
477
|
-
child.recursionCount = (this.recursionCount + 1);
|
|
478
|
-
sentinel += child.fromBytes(bytes.slice(sentinel));
|
|
479
|
-
if (child.tagClass === values_1.ASN1TagClass.universal
|
|
480
|
-
&& child.construction === values_1.ASN1Construction.primitive
|
|
481
|
-
&& child.tagNumber === values_1.ASN1UniversalType.endOfContent
|
|
482
|
-
&& child.value.length === 0)
|
|
483
|
-
break;
|
|
484
|
-
}
|
|
485
|
-
if (sentinel === bytes.length && (bytes[sentinel - 1] !== 0x00 || bytes[sentinel - 2] !== 0x00)) {
|
|
486
|
-
throw new errors.ASN1TruncationError("No END OF CONTENT element found at the end of indefinite length ASN.1 element.", this);
|
|
487
|
-
}
|
|
488
|
-
this.value = bytes.slice(startOfValue, (sentinel - 2));
|
|
489
|
-
return sentinel;
|
|
490
|
-
}
|
|
491
|
-
}
|
|
492
|
-
else {
|
|
493
|
-
const length = (bytes[cursor++] & 0x7F);
|
|
494
|
-
if ((cursor + length) > bytes.length) {
|
|
495
|
-
throw new errors.ASN1TruncationError("ASN.1 element was truncated.", this);
|
|
496
|
-
}
|
|
497
|
-
this.value = bytes.slice(cursor, (cursor + length));
|
|
498
|
-
return (cursor + length);
|
|
499
|
-
}
|
|
500
|
-
}
|
|
501
|
-
toBytes() {
|
|
502
|
-
|
|
503
|
-
tagBytes[0] |= (this.tagClass << 6);
|
|
504
|
-
tagBytes[0] |= (this.construction << 5);
|
|
505
|
-
if (this.tagNumber < 31) {
|
|
506
|
-
tagBytes[0] |= this.tagNumber;
|
|
507
|
-
}
|
|
508
|
-
else {
|
|
509
|
-
tagBytes[0] |= 0b00011111;
|
|
510
|
-
let number = this.tagNumber;
|
|
511
|
-
const encodedNumber = [];
|
|
512
|
-
while (number !== 0) {
|
|
513
|
-
encodedNumber.unshift(number & 0x7F);
|
|
514
|
-
number >>>= 7;
|
|
515
|
-
encodedNumber[0] |= 0b10000000;
|
|
516
|
-
}
|
|
517
|
-
encodedNumber[encodedNumber.length - 1] &= 0b01111111;
|
|
518
|
-
tagBytes
|
|
519
|
-
}
|
|
520
|
-
let lengthOctets = [0x00];
|
|
521
|
-
switch (BERElement.lengthEncodingPreference) {
|
|
522
|
-
case (values_1.LengthEncodingPreference.definite): {
|
|
523
|
-
if (this.value.length < 127) {
|
|
524
|
-
lengthOctets[0] = this.value.length;
|
|
525
|
-
}
|
|
526
|
-
else {
|
|
527
|
-
const length = this.value.length;
|
|
528
|
-
lengthOctets = [0, 0, 0, 0];
|
|
529
|
-
for (let i = 0; i < 4; i++) {
|
|
530
|
-
lengthOctets[i] = ((length >>> ((3 - i) << 3)) & 0xFF);
|
|
531
|
-
}
|
|
532
|
-
let startOfNonPadding = 0;
|
|
533
|
-
for (let i = 0; i < (lengthOctets.length - 1); i++) {
|
|
534
|
-
if (lengthOctets[i] === 0x00)
|
|
535
|
-
startOfNonPadding++;
|
|
536
|
-
}
|
|
537
|
-
lengthOctets = lengthOctets.slice(startOfNonPadding);
|
|
538
|
-
lengthOctets.unshift(0b10000000 | lengthOctets.length);
|
|
539
|
-
}
|
|
540
|
-
break;
|
|
541
|
-
}
|
|
542
|
-
case (values_1.LengthEncodingPreference.indefinite): {
|
|
543
|
-
lengthOctets = [0b10000000];
|
|
544
|
-
break;
|
|
545
|
-
}
|
|
546
|
-
default:
|
|
547
|
-
throw new errors.ASN1UndefinedError("Invalid LengthEncodingPreference encountered!", this);
|
|
548
|
-
}
|
|
549
|
-
const ret = new Uint8Array(tagBytes.length
|
|
550
|
-
+ lengthOctets.length
|
|
551
|
-
+ this.value.length
|
|
552
|
-
+ (BERElement.lengthEncodingPreference === values_1.LengthEncodingPreference.indefinite ? 2 : 0));
|
|
553
|
-
ret.set(tagBytes, 0);
|
|
554
|
-
ret.set(lengthOctets, tagBytes.length);
|
|
555
|
-
ret.set(this.value, (tagBytes.length + lengthOctets.length));
|
|
556
|
-
return ret;
|
|
557
|
-
}
|
|
558
|
-
deconstruct(dataType) {
|
|
559
|
-
if (this.construction === values_1.ASN1Construction.primitive) {
|
|
560
|
-
return new Uint8Array(this.value);
|
|
561
|
-
}
|
|
562
|
-
else {
|
|
563
|
-
if ((this.recursionCount + 1) > BERElement.nestingRecursionLimit)
|
|
564
|
-
throw new errors.ASN1RecursionError();
|
|
565
|
-
|
|
566
|
-
const substrings = this.sequence;
|
|
567
|
-
|
|
568
|
-
if (substring.tagClass !== this.tagClass) {
|
|
569
|
-
throw new errors.ASN1ConstructionError(`Invalid tag class in recursively-encoded ${dataType}.`, this);
|
|
570
|
-
}
|
|
571
|
-
if (substring.tagNumber !== this.tagNumber) {
|
|
572
|
-
throw new errors.ASN1ConstructionError(`Invalid tag class in recursively-encoded ${dataType}.`, this);
|
|
573
|
-
}
|
|
574
|
-
substring.recursionCount = (this.recursionCount + 1);
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
}
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
const next = new BERElement();
|
|
595
|
-
i += next.fromBytes(this.value.slice(i));
|
|
596
|
-
encodedElements.push(next);
|
|
597
|
-
}
|
|
598
|
-
return encodedElements;
|
|
599
|
-
}
|
|
600
|
-
}
|
|
601
|
-
exports.default = BERElement;
|
|
602
|
-
BERElement.lengthEncodingPreference = values_1.LengthEncodingPreference.definite;
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const tslib_1 = require("tslib");
|
|
4
|
+
const asn1_1 = tslib_1.__importDefault(require("../asn1"));
|
|
5
|
+
const errors = tslib_1.__importStar(require("../errors"));
|
|
6
|
+
const values_1 = require("../values");
|
|
7
|
+
const x690_1 = tslib_1.__importDefault(require("../x690"));
|
|
8
|
+
const convertBytesToText_1 = tslib_1.__importDefault(require("../utils/convertBytesToText"));
|
|
9
|
+
const convertTextToBytes_1 = tslib_1.__importDefault(require("../utils/convertTextToBytes"));
|
|
10
|
+
const ObjectIdentifier_1 = tslib_1.__importDefault(require("../types/ObjectIdentifier"));
|
|
11
|
+
const encodeBoolean_1 = tslib_1.__importDefault(require("./x690/encoders/encodeBoolean"));
|
|
12
|
+
const decodeBoolean_1 = tslib_1.__importDefault(require("./ber/decoders/decodeBoolean"));
|
|
13
|
+
const encodeBitString_1 = tslib_1.__importDefault(require("./x690/encoders/encodeBitString"));
|
|
14
|
+
const decodeBitString_1 = tslib_1.__importDefault(require("./ber/decoders/decodeBitString"));
|
|
15
|
+
const encodeReal_1 = tslib_1.__importDefault(require("./x690/encoders/encodeReal"));
|
|
16
|
+
const decodeReal_1 = tslib_1.__importDefault(require("./ber/decoders/decodeReal"));
|
|
17
|
+
const encodeSequence_1 = tslib_1.__importDefault(require("./x690/encoders/encodeSequence"));
|
|
18
|
+
const decodeSequence_1 = tslib_1.__importDefault(require("./ber/decoders/decodeSequence"));
|
|
19
|
+
const encodeUTCTime_1 = tslib_1.__importDefault(require("./x690/encoders/encodeUTCTime"));
|
|
20
|
+
const decodeUTCTime_1 = tslib_1.__importDefault(require("./ber/decoders/decodeUTCTime"));
|
|
21
|
+
const encodeGeneralizedTime_1 = tslib_1.__importDefault(require("./x690/encoders/encodeGeneralizedTime"));
|
|
22
|
+
const decodeGeneralizedTime_1 = tslib_1.__importDefault(require("./ber/decoders/decodeGeneralizedTime"));
|
|
23
|
+
const encodeExternal_1 = tslib_1.__importDefault(require("../codecs/x690/encoders/encodeExternal"));
|
|
24
|
+
const encodeEmbeddedPDV_1 = tslib_1.__importDefault(require("../codecs/x690/encoders/encodeEmbeddedPDV"));
|
|
25
|
+
const encodeCharacterString_1 = tslib_1.__importDefault(require("../codecs/x690/encoders/encodeCharacterString"));
|
|
26
|
+
const decodeExternal_1 = tslib_1.__importDefault(require("../codecs/x690/decoders/decodeExternal"));
|
|
27
|
+
const decodeEmbeddedPDV_1 = tslib_1.__importDefault(require("../codecs/x690/decoders/decodeEmbeddedPDV"));
|
|
28
|
+
const decodeCharacterString_1 = tslib_1.__importDefault(require("../codecs/x690/decoders/decodeCharacterString"));
|
|
29
|
+
const encodeGraphicString_1 = tslib_1.__importDefault(require("../codecs/ber/encoders/encodeGraphicString"));
|
|
30
|
+
const encodeNumericString_1 = tslib_1.__importDefault(require("../codecs/ber/encoders/encodeNumericString"));
|
|
31
|
+
const encodeObjectDescriptor_1 = tslib_1.__importDefault(require("../codecs/ber/encoders/encodeObjectDescriptor"));
|
|
32
|
+
const encodePrintableString_1 = tslib_1.__importDefault(require("../codecs/ber/encoders/encodePrintableString"));
|
|
33
|
+
const encodeVisibleString_1 = tslib_1.__importDefault(require("../codecs/ber/encoders/encodeVisibleString"));
|
|
34
|
+
const encodeGeneralString_1 = tslib_1.__importDefault(require("../codecs/ber/encoders/encodeGeneralString"));
|
|
35
|
+
const decodeGraphicString_1 = tslib_1.__importDefault(require("../codecs/x690/decoders/decodeGraphicString"));
|
|
36
|
+
const decodeNumericString_1 = tslib_1.__importDefault(require("../codecs/x690/decoders/decodeNumericString"));
|
|
37
|
+
const decodeObjectDescriptor_1 = tslib_1.__importDefault(require("../codecs/x690/decoders/decodeObjectDescriptor"));
|
|
38
|
+
const decodePrintableString_1 = tslib_1.__importDefault(require("../codecs/x690/decoders/decodePrintableString"));
|
|
39
|
+
const decodeVisibleString_1 = tslib_1.__importDefault(require("../codecs/x690/decoders/decodeVisibleString"));
|
|
40
|
+
const decodeGeneralString_1 = tslib_1.__importDefault(require("../codecs/x690/decoders/decodeGeneralString"));
|
|
41
|
+
const encodeDuration_1 = tslib_1.__importDefault(require("../codecs/x690/encoders/encodeDuration"));
|
|
42
|
+
const decodeDuration_1 = tslib_1.__importDefault(require("../codecs/ber/decoders/decodeDuration"));
|
|
43
|
+
const macros_1 = require("../macros");
|
|
44
|
+
class BERElement extends x690_1.default {
|
|
45
|
+
constructor(tagClass = values_1.ASN1TagClass.universal, construction = values_1.ASN1Construction.primitive, tagNumber = values_1.ASN1UniversalType.endOfContent, value = undefined) {
|
|
46
|
+
super();
|
|
47
|
+
this.encode(value);
|
|
48
|
+
this.tagClass = tagClass;
|
|
49
|
+
this.construction = construction;
|
|
50
|
+
this.tagNumber = tagNumber;
|
|
51
|
+
}
|
|
52
|
+
set boolean(value) {
|
|
53
|
+
this.value = (0, encodeBoolean_1.default)(value);
|
|
54
|
+
}
|
|
55
|
+
get boolean() {
|
|
56
|
+
if (this.construction !== values_1.ASN1Construction.primitive) {
|
|
57
|
+
throw new errors.ASN1ConstructionError("BOOLEAN cannot be constructed.", this);
|
|
58
|
+
}
|
|
59
|
+
return (0, decodeBoolean_1.default)(this.value);
|
|
60
|
+
}
|
|
61
|
+
set bitString(value) {
|
|
62
|
+
this.value = (0, encodeBitString_1.default)(value);
|
|
63
|
+
}
|
|
64
|
+
get bitString() {
|
|
65
|
+
if (this.construction === values_1.ASN1Construction.primitive) {
|
|
66
|
+
return (0, decodeBitString_1.default)(this.value);
|
|
67
|
+
}
|
|
68
|
+
if ((this.recursionCount + 1) > BERElement.nestingRecursionLimit) {
|
|
69
|
+
throw new errors.ASN1RecursionError();
|
|
70
|
+
}
|
|
71
|
+
const appendy = [];
|
|
72
|
+
const substrings = this.sequence;
|
|
73
|
+
for (const substring of substrings.slice(0, (substrings.length - 1))) {
|
|
74
|
+
if (substring.construction === values_1.ASN1Construction.primitive
|
|
75
|
+
&& substring.value.length > 0
|
|
76
|
+
&& substring.value[0] !== 0x00) {
|
|
77
|
+
throw new errors.ASN1Error("Only the last subelement of a constructed BIT STRING may have a non-zero first value byte.", this);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
for (const substring of substrings) {
|
|
81
|
+
if (substring.tagClass !== this.tagClass) {
|
|
82
|
+
throw new errors.ASN1ConstructionError("Invalid tag class in recursively-encoded BIT STRING.", this);
|
|
83
|
+
}
|
|
84
|
+
if (substring.tagNumber !== this.tagNumber) {
|
|
85
|
+
throw new errors.ASN1ConstructionError("Invalid tag class in recursively-encoded BIT STRING.", this);
|
|
86
|
+
}
|
|
87
|
+
substring.recursionCount = (this.recursionCount + 1);
|
|
88
|
+
appendy.push(...Array.from(substring.bitString).map((b) => b !== macros_1.FALSE_BIT));
|
|
89
|
+
}
|
|
90
|
+
return new Uint8ClampedArray(appendy.map((b) => (b ? 1 : 0)));
|
|
91
|
+
}
|
|
92
|
+
set octetString(value) {
|
|
93
|
+
this.value = new Uint8Array(value);
|
|
94
|
+
}
|
|
95
|
+
get octetString() {
|
|
96
|
+
return this.deconstruct("OCTET STRING");
|
|
97
|
+
}
|
|
98
|
+
set objectDescriptor(value) {
|
|
99
|
+
this.value = (0, encodeObjectDescriptor_1.default)(value);
|
|
100
|
+
}
|
|
101
|
+
get objectDescriptor() {
|
|
102
|
+
const bytes = this.deconstruct("ObjectDescriptor");
|
|
103
|
+
return (0, decodeObjectDescriptor_1.default)(bytes);
|
|
104
|
+
}
|
|
105
|
+
set external(value) {
|
|
106
|
+
this.value = (0, encodeExternal_1.default)(value);
|
|
107
|
+
}
|
|
108
|
+
get external() {
|
|
109
|
+
return (0, decodeExternal_1.default)(this.value);
|
|
110
|
+
}
|
|
111
|
+
set real(value) {
|
|
112
|
+
this.value = (0, encodeReal_1.default)(value);
|
|
113
|
+
}
|
|
114
|
+
get real() {
|
|
115
|
+
if (this.construction !== values_1.ASN1Construction.primitive) {
|
|
116
|
+
throw new errors.ASN1ConstructionError("REAL cannot be constructed.");
|
|
117
|
+
}
|
|
118
|
+
return (0, decodeReal_1.default)(this.value);
|
|
119
|
+
}
|
|
120
|
+
set embeddedPDV(value) {
|
|
121
|
+
this.value = (0, encodeEmbeddedPDV_1.default)(value);
|
|
122
|
+
}
|
|
123
|
+
get embeddedPDV() {
|
|
124
|
+
return (0, decodeEmbeddedPDV_1.default)(this.value);
|
|
125
|
+
}
|
|
126
|
+
set utf8String(value) {
|
|
127
|
+
this.value = (0, convertTextToBytes_1.default)(value);
|
|
128
|
+
}
|
|
129
|
+
get utf8String() {
|
|
130
|
+
return (0, convertBytesToText_1.default)(this.deconstruct("UTF8String"));
|
|
131
|
+
}
|
|
132
|
+
set sequence(value) {
|
|
133
|
+
this.value = (0, encodeSequence_1.default)(value);
|
|
134
|
+
this.construction = values_1.ASN1Construction.constructed;
|
|
135
|
+
}
|
|
136
|
+
get sequence() {
|
|
137
|
+
if (this.construction !== values_1.ASN1Construction.constructed) {
|
|
138
|
+
throw new errors.ASN1ConstructionError("SET or SEQUENCE cannot be primitively constructed.", this);
|
|
139
|
+
}
|
|
140
|
+
return (0, decodeSequence_1.default)(this.value);
|
|
141
|
+
}
|
|
142
|
+
set set(value) {
|
|
143
|
+
this.sequence = value;
|
|
144
|
+
}
|
|
145
|
+
get set() {
|
|
146
|
+
return this.sequence;
|
|
147
|
+
}
|
|
148
|
+
set numericString(value) {
|
|
149
|
+
this.value = (0, encodeNumericString_1.default)(value);
|
|
150
|
+
}
|
|
151
|
+
get numericString() {
|
|
152
|
+
const bytes = this.deconstruct("NumericString");
|
|
153
|
+
return (0, decodeNumericString_1.default)(bytes);
|
|
154
|
+
}
|
|
155
|
+
set printableString(value) {
|
|
156
|
+
this.value = (0, encodePrintableString_1.default)(value);
|
|
157
|
+
}
|
|
158
|
+
get printableString() {
|
|
159
|
+
const bytes = this.deconstruct("PrintableString");
|
|
160
|
+
return (0, decodePrintableString_1.default)(bytes);
|
|
161
|
+
}
|
|
162
|
+
set teletexString(value) {
|
|
163
|
+
this.value = new Uint8Array(value);
|
|
164
|
+
}
|
|
165
|
+
get teletexString() {
|
|
166
|
+
return this.deconstruct("TeletexString");
|
|
167
|
+
}
|
|
168
|
+
set videotexString(value) {
|
|
169
|
+
this.value = new Uint8Array(value);
|
|
170
|
+
}
|
|
171
|
+
get videotexString() {
|
|
172
|
+
return this.deconstruct("VideotexString");
|
|
173
|
+
}
|
|
174
|
+
set ia5String(value) {
|
|
175
|
+
this.value = (0, convertTextToBytes_1.default)(value);
|
|
176
|
+
}
|
|
177
|
+
get ia5String() {
|
|
178
|
+
return (0, convertBytesToText_1.default)(this.deconstruct("IA5String"));
|
|
179
|
+
}
|
|
180
|
+
set utcTime(value) {
|
|
181
|
+
this.value = (0, encodeUTCTime_1.default)(value);
|
|
182
|
+
}
|
|
183
|
+
get utcTime() {
|
|
184
|
+
return (0, decodeUTCTime_1.default)(this.deconstruct("UTCTime"));
|
|
185
|
+
}
|
|
186
|
+
set generalizedTime(value) {
|
|
187
|
+
this.value = (0, encodeGeneralizedTime_1.default)(value);
|
|
188
|
+
}
|
|
189
|
+
get generalizedTime() {
|
|
190
|
+
return (0, decodeGeneralizedTime_1.default)(this.deconstruct("GeneralizedTime"));
|
|
191
|
+
}
|
|
192
|
+
set graphicString(value) {
|
|
193
|
+
this.value = (0, encodeGraphicString_1.default)(value);
|
|
194
|
+
}
|
|
195
|
+
get graphicString() {
|
|
196
|
+
const bytes = this.deconstruct("GraphicString");
|
|
197
|
+
return (0, decodeGraphicString_1.default)(bytes);
|
|
198
|
+
}
|
|
199
|
+
set visibleString(value) {
|
|
200
|
+
this.value = (0, encodeVisibleString_1.default)(value);
|
|
201
|
+
}
|
|
202
|
+
get visibleString() {
|
|
203
|
+
return (0, decodeVisibleString_1.default)(this.value);
|
|
204
|
+
}
|
|
205
|
+
set generalString(value) {
|
|
206
|
+
this.value = (0, encodeGeneralString_1.default)(value);
|
|
207
|
+
}
|
|
208
|
+
get generalString() {
|
|
209
|
+
const bytes = this.deconstruct("GeneralString");
|
|
210
|
+
return (0, decodeGeneralString_1.default)(bytes);
|
|
211
|
+
}
|
|
212
|
+
set characterString(value) {
|
|
213
|
+
this.value = (0, encodeCharacterString_1.default)(value);
|
|
214
|
+
}
|
|
215
|
+
get characterString() {
|
|
216
|
+
return (0, decodeCharacterString_1.default)(this.value);
|
|
217
|
+
}
|
|
218
|
+
set universalString(value) {
|
|
219
|
+
const buf = new Uint8Array(value.length << 2);
|
|
220
|
+
for (let i = 0; i < value.length; i++) {
|
|
221
|
+
buf[(i << 2)] = value.charCodeAt(i) >>> 24;
|
|
222
|
+
buf[(i << 2) + 1] = value.charCodeAt(i) >>> 16;
|
|
223
|
+
buf[(i << 2) + 2] = value.charCodeAt(i) >>> 8;
|
|
224
|
+
buf[(i << 2) + 3] = value.charCodeAt(i);
|
|
225
|
+
}
|
|
226
|
+
this.value = buf;
|
|
227
|
+
}
|
|
228
|
+
get universalString() {
|
|
229
|
+
const valueBytes = this.deconstruct("UniversalString");
|
|
230
|
+
if (valueBytes.length % 4) {
|
|
231
|
+
throw new errors.ASN1Error("UniversalString encoded on non-mulitple of four bytes.", this);
|
|
232
|
+
}
|
|
233
|
+
let ret = "";
|
|
234
|
+
for (let i = 0; i < valueBytes.length; i += 4) {
|
|
235
|
+
ret += String.fromCharCode((valueBytes[i + 0] << 24)
|
|
236
|
+
+ (valueBytes[i + 1] << 16)
|
|
237
|
+
+ (valueBytes[i + 2] << 8)
|
|
238
|
+
+ (valueBytes[i + 3] << 0));
|
|
239
|
+
}
|
|
240
|
+
return ret;
|
|
241
|
+
}
|
|
242
|
+
set bmpString(value) {
|
|
243
|
+
const buf = new Uint8Array(value.length << 1);
|
|
244
|
+
for (let i = 0, strLen = value.length; i < strLen; i++) {
|
|
245
|
+
buf[(i << 1)] = value.charCodeAt(i) >>> 8;
|
|
246
|
+
buf[(i << 1) + 1] = value.charCodeAt(i);
|
|
247
|
+
}
|
|
248
|
+
this.value = buf;
|
|
249
|
+
}
|
|
250
|
+
get bmpString() {
|
|
251
|
+
const valueBytes = this.deconstruct("BMPString");
|
|
252
|
+
if (valueBytes.length % 2)
|
|
253
|
+
throw new errors.ASN1Error("BMPString encoded on non-mulitple of two bytes.", this);
|
|
254
|
+
if (typeof Buffer !== "undefined") {
|
|
255
|
+
const swappedEndianness = Buffer.allocUnsafe(valueBytes.length);
|
|
256
|
+
for (let i = 0; i < valueBytes.length; i += 2) {
|
|
257
|
+
swappedEndianness[i] = valueBytes[i + 1];
|
|
258
|
+
swappedEndianness[i + 1] = valueBytes[i];
|
|
259
|
+
}
|
|
260
|
+
return swappedEndianness.toString("utf16le");
|
|
261
|
+
}
|
|
262
|
+
else if (typeof TextEncoder !== "undefined") {
|
|
263
|
+
return (new TextDecoder("utf-16be")).decode(valueBytes.buffer);
|
|
264
|
+
}
|
|
265
|
+
else {
|
|
266
|
+
throw new errors.ASN1Error("Neither TextDecoder nor Buffer are defined to decode bytes into text.", this);
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
set duration(value) {
|
|
270
|
+
this.value = (0, encodeDuration_1.default)(value);
|
|
271
|
+
}
|
|
272
|
+
get duration() {
|
|
273
|
+
return (0, decodeDuration_1.default)(this.value);
|
|
274
|
+
}
|
|
275
|
+
encode(value) {
|
|
276
|
+
switch (typeof value) {
|
|
277
|
+
case ("undefined"): {
|
|
278
|
+
this.value = new Uint8Array(0);
|
|
279
|
+
break;
|
|
280
|
+
}
|
|
281
|
+
case ("boolean"): {
|
|
282
|
+
this.tagNumber = values_1.ASN1UniversalType.boolean;
|
|
283
|
+
this.boolean = value;
|
|
284
|
+
break;
|
|
285
|
+
}
|
|
286
|
+
case ("number"): {
|
|
287
|
+
if (Number.isInteger(value)) {
|
|
288
|
+
this.tagNumber = values_1.ASN1UniversalType.integer;
|
|
289
|
+
this.integer = value;
|
|
290
|
+
}
|
|
291
|
+
else {
|
|
292
|
+
this.tagNumber = values_1.ASN1UniversalType.realNumber;
|
|
293
|
+
this.real = value;
|
|
294
|
+
}
|
|
295
|
+
break;
|
|
296
|
+
}
|
|
297
|
+
case ("string"): {
|
|
298
|
+
this.tagNumber = values_1.ASN1UniversalType.utf8String;
|
|
299
|
+
this.utf8String = value;
|
|
300
|
+
break;
|
|
301
|
+
}
|
|
302
|
+
case ("object"): {
|
|
303
|
+
if (!value) {
|
|
304
|
+
this.tagNumber = values_1.ASN1UniversalType.nill;
|
|
305
|
+
this.value = new Uint8Array(0);
|
|
306
|
+
}
|
|
307
|
+
else if (value instanceof Uint8Array) {
|
|
308
|
+
this.tagNumber = values_1.ASN1UniversalType.octetString;
|
|
309
|
+
this.octetString = value;
|
|
310
|
+
}
|
|
311
|
+
else if (value instanceof Uint8ClampedArray) {
|
|
312
|
+
this.tagNumber = values_1.ASN1UniversalType.bitString;
|
|
313
|
+
this.bitString = value;
|
|
314
|
+
}
|
|
315
|
+
else if (value instanceof asn1_1.default) {
|
|
316
|
+
this.construction = values_1.ASN1Construction.constructed;
|
|
317
|
+
this.sequence = [value];
|
|
318
|
+
}
|
|
319
|
+
else if (value instanceof Set) {
|
|
320
|
+
this.construction = values_1.ASN1Construction.constructed;
|
|
321
|
+
this.set = Array.from(value).map((v) => {
|
|
322
|
+
if (typeof v === "object" && v instanceof asn1_1.default) {
|
|
323
|
+
return v;
|
|
324
|
+
}
|
|
325
|
+
else {
|
|
326
|
+
const e = new BERElement();
|
|
327
|
+
e.encode(v);
|
|
328
|
+
return e;
|
|
329
|
+
}
|
|
330
|
+
});
|
|
331
|
+
}
|
|
332
|
+
else if ((value instanceof ObjectIdentifier_1.default) || (value.constructor?.name === "ObjectIdentifier")) {
|
|
333
|
+
this.tagNumber = values_1.ASN1UniversalType.objectIdentifier;
|
|
334
|
+
this.objectIdentifier = value;
|
|
335
|
+
}
|
|
336
|
+
else if (Array.isArray(value)) {
|
|
337
|
+
this.construction = values_1.ASN1Construction.constructed;
|
|
338
|
+
this.tagNumber = values_1.ASN1UniversalType.sequence;
|
|
339
|
+
this.sequence = value.map((sub) => {
|
|
340
|
+
const ret = new BERElement();
|
|
341
|
+
ret.encode(sub);
|
|
342
|
+
return ret;
|
|
343
|
+
});
|
|
344
|
+
}
|
|
345
|
+
else if (value instanceof Date) {
|
|
346
|
+
this.generalizedTime = value;
|
|
347
|
+
}
|
|
348
|
+
else {
|
|
349
|
+
throw new errors.ASN1Error(`Cannot encode value of type ${value.constructor.name}.`, this);
|
|
350
|
+
}
|
|
351
|
+
break;
|
|
352
|
+
}
|
|
353
|
+
default: {
|
|
354
|
+
throw new errors.ASN1Error(`Cannot encode value of type ${typeof value}.`, this);
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
static fromSequence(sequence) {
|
|
359
|
+
const ret = new BERElement(values_1.ASN1TagClass.universal, values_1.ASN1Construction.constructed, values_1.ASN1UniversalType.sequence);
|
|
360
|
+
ret.sequence = sequence.filter((element) => Boolean(element));
|
|
361
|
+
return ret;
|
|
362
|
+
}
|
|
363
|
+
static fromSet(set) {
|
|
364
|
+
const ret = new BERElement(values_1.ASN1TagClass.universal, values_1.ASN1Construction.constructed, values_1.ASN1UniversalType.set);
|
|
365
|
+
ret.set = set.filter((element) => Boolean(element));
|
|
366
|
+
return ret;
|
|
367
|
+
}
|
|
368
|
+
get inner() {
|
|
369
|
+
if (this.construction !== values_1.ASN1Construction.constructed) {
|
|
370
|
+
throw new errors.ASN1ConstructionError("An explicitly-encoded element cannot be encoded using "
|
|
371
|
+
+ "primitive construction.", this);
|
|
372
|
+
}
|
|
373
|
+
const ret = new BERElement();
|
|
374
|
+
const readBytes = ret.fromBytes(this.value);
|
|
375
|
+
if (readBytes !== this.value.length) {
|
|
376
|
+
throw new errors.ASN1ConstructionError("An explicitly-encoding element contained more than one single "
|
|
377
|
+
+ "encoded element. The tag number of the first decoded "
|
|
378
|
+
+ `element was ${ret.tagNumber}, and it was encoded on `
|
|
379
|
+
+ `${readBytes} bytes.`, this);
|
|
380
|
+
}
|
|
381
|
+
return ret;
|
|
382
|
+
}
|
|
383
|
+
set inner(value) {
|
|
384
|
+
this.construction = values_1.ASN1Construction.constructed;
|
|
385
|
+
this.value = value.toBytes();
|
|
386
|
+
}
|
|
387
|
+
fromBytes(bytes) {
|
|
388
|
+
if (bytes.length < 2) {
|
|
389
|
+
throw new errors.ASN1TruncationError("Tried to decode a BER element that is less than two bytes.", this);
|
|
390
|
+
}
|
|
391
|
+
if ((this.recursionCount + 1) > BERElement.nestingRecursionLimit) {
|
|
392
|
+
throw new errors.ASN1RecursionError();
|
|
393
|
+
}
|
|
394
|
+
let cursor = 0;
|
|
395
|
+
switch (bytes[cursor] & 0b11000000) {
|
|
396
|
+
case (0b00000000):
|
|
397
|
+
this.tagClass = values_1.ASN1TagClass.universal;
|
|
398
|
+
break;
|
|
399
|
+
case (0b01000000):
|
|
400
|
+
this.tagClass = values_1.ASN1TagClass.application;
|
|
401
|
+
break;
|
|
402
|
+
case (0b10000000):
|
|
403
|
+
this.tagClass = values_1.ASN1TagClass.context;
|
|
404
|
+
break;
|
|
405
|
+
case (0b11000000):
|
|
406
|
+
this.tagClass = values_1.ASN1TagClass.private;
|
|
407
|
+
break;
|
|
408
|
+
default: this.tagClass = values_1.ASN1TagClass.universal;
|
|
409
|
+
}
|
|
410
|
+
this.construction = ((bytes[cursor] & 0b00100000)
|
|
411
|
+
? values_1.ASN1Construction.constructed : values_1.ASN1Construction.primitive);
|
|
412
|
+
this.tagNumber = (bytes[cursor] & 0b00011111);
|
|
413
|
+
cursor++;
|
|
414
|
+
if (this.tagNumber >= 31) {
|
|
415
|
+
if (bytes[cursor] === 0b10000000) {
|
|
416
|
+
throw new errors.ASN1PaddingError("Leading padding byte on long tag number encoding.", this);
|
|
417
|
+
}
|
|
418
|
+
this.tagNumber = 0;
|
|
419
|
+
const limit = (((bytes.length - 1) >= 4) ? 4 : (bytes.length - 1));
|
|
420
|
+
while (cursor < limit) {
|
|
421
|
+
if (!(bytes[cursor++] & 0b10000000))
|
|
422
|
+
break;
|
|
423
|
+
}
|
|
424
|
+
if (bytes[cursor - 1] & 0b10000000) {
|
|
425
|
+
if (limit === (bytes.length - 1)) {
|
|
426
|
+
throw new errors.ASN1TruncationError("ASN.1 tag number appears to have been truncated.", this);
|
|
427
|
+
}
|
|
428
|
+
else {
|
|
429
|
+
throw new errors.ASN1OverflowError("ASN.1 tag number too large.", this);
|
|
430
|
+
}
|
|
431
|
+
}
|
|
432
|
+
for (let i = 1; i < cursor; i++) {
|
|
433
|
+
this.tagNumber <<= 7;
|
|
434
|
+
this.tagNumber |= (bytes[i] & 0x7F);
|
|
435
|
+
}
|
|
436
|
+
}
|
|
437
|
+
if ((bytes[cursor] & 0b10000000) === 0b10000000) {
|
|
438
|
+
const numberOfLengthOctets = (bytes[cursor] & 0x7F);
|
|
439
|
+
if (numberOfLengthOctets) {
|
|
440
|
+
if (numberOfLengthOctets === 0b01111111) {
|
|
441
|
+
throw new errors.ASN1UndefinedError("Length byte with undefined meaning encountered.", this);
|
|
442
|
+
}
|
|
443
|
+
if (numberOfLengthOctets > 4) {
|
|
444
|
+
throw new errors.ASN1OverflowError("Element length too long to decode to an integer.", this);
|
|
445
|
+
}
|
|
446
|
+
if (cursor + numberOfLengthOctets >= bytes.length) {
|
|
447
|
+
throw new errors.ASN1TruncationError("Element length bytes appear to have been truncated.", this);
|
|
448
|
+
}
|
|
449
|
+
cursor++;
|
|
450
|
+
const lengthNumberOctets = new Uint8Array(4);
|
|
451
|
+
for (let i = numberOfLengthOctets; i > 0; i--) {
|
|
452
|
+
lengthNumberOctets[(4 - i)] = bytes[(cursor + numberOfLengthOctets - i)];
|
|
453
|
+
}
|
|
454
|
+
let length = 0;
|
|
455
|
+
for (const octet of lengthNumberOctets) {
|
|
456
|
+
length <<= 8;
|
|
457
|
+
length += octet;
|
|
458
|
+
}
|
|
459
|
+
if ((cursor + length) < cursor) {
|
|
460
|
+
throw new errors.ASN1OverflowError("ASN.1 element too large.", this);
|
|
461
|
+
}
|
|
462
|
+
cursor += (numberOfLengthOctets);
|
|
463
|
+
if ((cursor + length) > bytes.length) {
|
|
464
|
+
throw new errors.ASN1TruncationError("ASN.1 element truncated.", this);
|
|
465
|
+
}
|
|
466
|
+
this.value = bytes.slice(cursor, (cursor + length));
|
|
467
|
+
return (cursor + length);
|
|
468
|
+
}
|
|
469
|
+
else {
|
|
470
|
+
if (this.construction !== values_1.ASN1Construction.constructed) {
|
|
471
|
+
throw new errors.ASN1ConstructionError("Indefinite length ASN.1 element was not of constructed construction.", this);
|
|
472
|
+
}
|
|
473
|
+
const startOfValue = ++cursor;
|
|
474
|
+
let sentinel = cursor;
|
|
475
|
+
while (sentinel < bytes.length) {
|
|
476
|
+
const child = new BERElement();
|
|
477
|
+
child.recursionCount = (this.recursionCount + 1);
|
|
478
|
+
sentinel += child.fromBytes(bytes.slice(sentinel));
|
|
479
|
+
if (child.tagClass === values_1.ASN1TagClass.universal
|
|
480
|
+
&& child.construction === values_1.ASN1Construction.primitive
|
|
481
|
+
&& child.tagNumber === values_1.ASN1UniversalType.endOfContent
|
|
482
|
+
&& child.value.length === 0)
|
|
483
|
+
break;
|
|
484
|
+
}
|
|
485
|
+
if (sentinel === bytes.length && (bytes[sentinel - 1] !== 0x00 || bytes[sentinel - 2] !== 0x00)) {
|
|
486
|
+
throw new errors.ASN1TruncationError("No END OF CONTENT element found at the end of indefinite length ASN.1 element.", this);
|
|
487
|
+
}
|
|
488
|
+
this.value = bytes.slice(startOfValue, (sentinel - 2));
|
|
489
|
+
return sentinel;
|
|
490
|
+
}
|
|
491
|
+
}
|
|
492
|
+
else {
|
|
493
|
+
const length = (bytes[cursor++] & 0x7F);
|
|
494
|
+
if ((cursor + length) > bytes.length) {
|
|
495
|
+
throw new errors.ASN1TruncationError("ASN.1 element was truncated.", this);
|
|
496
|
+
}
|
|
497
|
+
this.value = bytes.slice(cursor, (cursor + length));
|
|
498
|
+
return (cursor + length);
|
|
499
|
+
}
|
|
500
|
+
}
|
|
501
|
+
toBytes() {
|
|
502
|
+
const tagBytes = [0x00];
|
|
503
|
+
tagBytes[0] |= (this.tagClass << 6);
|
|
504
|
+
tagBytes[0] |= (this.construction << 5);
|
|
505
|
+
if (this.tagNumber < 31) {
|
|
506
|
+
tagBytes[0] |= this.tagNumber;
|
|
507
|
+
}
|
|
508
|
+
else {
|
|
509
|
+
tagBytes[0] |= 0b00011111;
|
|
510
|
+
let number = this.tagNumber;
|
|
511
|
+
const encodedNumber = [];
|
|
512
|
+
while (number !== 0) {
|
|
513
|
+
encodedNumber.unshift(number & 0x7F);
|
|
514
|
+
number >>>= 7;
|
|
515
|
+
encodedNumber[0] |= 0b10000000;
|
|
516
|
+
}
|
|
517
|
+
encodedNumber[encodedNumber.length - 1] &= 0b01111111;
|
|
518
|
+
tagBytes.push(...encodedNumber);
|
|
519
|
+
}
|
|
520
|
+
let lengthOctets = [0x00];
|
|
521
|
+
switch (BERElement.lengthEncodingPreference) {
|
|
522
|
+
case (values_1.LengthEncodingPreference.definite): {
|
|
523
|
+
if (this.value.length < 127) {
|
|
524
|
+
lengthOctets[0] = this.value.length;
|
|
525
|
+
}
|
|
526
|
+
else {
|
|
527
|
+
const length = this.value.length;
|
|
528
|
+
lengthOctets = [0, 0, 0, 0];
|
|
529
|
+
for (let i = 0; i < 4; i++) {
|
|
530
|
+
lengthOctets[i] = ((length >>> ((3 - i) << 3)) & 0xFF);
|
|
531
|
+
}
|
|
532
|
+
let startOfNonPadding = 0;
|
|
533
|
+
for (let i = 0; i < (lengthOctets.length - 1); i++) {
|
|
534
|
+
if (lengthOctets[i] === 0x00)
|
|
535
|
+
startOfNonPadding++;
|
|
536
|
+
}
|
|
537
|
+
lengthOctets = lengthOctets.slice(startOfNonPadding);
|
|
538
|
+
lengthOctets.unshift(0b10000000 | lengthOctets.length);
|
|
539
|
+
}
|
|
540
|
+
break;
|
|
541
|
+
}
|
|
542
|
+
case (values_1.LengthEncodingPreference.indefinite): {
|
|
543
|
+
lengthOctets = [0b10000000];
|
|
544
|
+
break;
|
|
545
|
+
}
|
|
546
|
+
default:
|
|
547
|
+
throw new errors.ASN1UndefinedError("Invalid LengthEncodingPreference encountered!", this);
|
|
548
|
+
}
|
|
549
|
+
const ret = new Uint8Array(tagBytes.length
|
|
550
|
+
+ lengthOctets.length
|
|
551
|
+
+ this.value.length
|
|
552
|
+
+ (BERElement.lengthEncodingPreference === values_1.LengthEncodingPreference.indefinite ? 2 : 0));
|
|
553
|
+
ret.set(tagBytes, 0);
|
|
554
|
+
ret.set(lengthOctets, tagBytes.length);
|
|
555
|
+
ret.set(this.value, (tagBytes.length + lengthOctets.length));
|
|
556
|
+
return ret;
|
|
557
|
+
}
|
|
558
|
+
deconstruct(dataType) {
|
|
559
|
+
if (this.construction === values_1.ASN1Construction.primitive) {
|
|
560
|
+
return new Uint8Array(this.value);
|
|
561
|
+
}
|
|
562
|
+
else {
|
|
563
|
+
if ((this.recursionCount + 1) > BERElement.nestingRecursionLimit)
|
|
564
|
+
throw new errors.ASN1RecursionError();
|
|
565
|
+
const appendy = [];
|
|
566
|
+
const substrings = this.sequence;
|
|
567
|
+
for (const substring of substrings) {
|
|
568
|
+
if (substring.tagClass !== this.tagClass) {
|
|
569
|
+
throw new errors.ASN1ConstructionError(`Invalid tag class in recursively-encoded ${dataType}.`, this);
|
|
570
|
+
}
|
|
571
|
+
if (substring.tagNumber !== this.tagNumber) {
|
|
572
|
+
throw new errors.ASN1ConstructionError(`Invalid tag class in recursively-encoded ${dataType}.`, this);
|
|
573
|
+
}
|
|
574
|
+
substring.recursionCount = (this.recursionCount + 1);
|
|
575
|
+
const deconstructed = substring.deconstruct(dataType);
|
|
576
|
+
appendy.push(deconstructed);
|
|
577
|
+
}
|
|
578
|
+
return Buffer.concat(appendy);
|
|
579
|
+
}
|
|
580
|
+
}
|
|
581
|
+
get components() {
|
|
582
|
+
const encodedElements = [];
|
|
583
|
+
let i = 0;
|
|
584
|
+
while (i < this.value.length) {
|
|
585
|
+
const next = new BERElement();
|
|
586
|
+
i += next.fromBytes(this.value.slice(i));
|
|
587
|
+
encodedElements.push(next);
|
|
588
|
+
}
|
|
589
|
+
return encodedElements;
|
|
590
|
+
}
|
|
591
|
+
}
|
|
592
|
+
exports.default = BERElement;
|
|
593
|
+
BERElement.lengthEncodingPreference = values_1.LengthEncodingPreference.definite;
|
|
603
594
|
//# sourceMappingURL=ber.js.map
|