pyderasn.py | 24 ++++++++++++++++-------- diff --git a/pyderasn.py b/pyderasn.py index 718c657ace759810195ae5632816b1d1725cde042f104d0d71dd80129dbb6588..1bfe68ff0ca2868621f9538bc46a279389a07d4eb0ee2c6cd4db3a334d9def76 100755 --- a/pyderasn.py +++ b/pyderasn.py @@ -1520,6 +1520,8 @@ raise DecodeError("long form instead of short one") return l, 1 + octets_num, data[1 + octets_num:] +LEN0 = len_encode(0) +LEN1 = len_encode(1) LEN1K = len_encode(1000) @@ -2460,11 +2462,7 @@ ) def _encode(self): self._assert_ready() - return b"".join(( - self.tag, - len_encode(1), - (b"\xFF" if self._value else b"\x00"), - )) + return b"".join((self.tag, LEN1, (b"\xFF" if self._value else b"\x00"))) def _decode(self, tlv, offset, decode_path, ctx, tag_only, evgen_mode): try: @@ -3987,7 +3985,7 @@ optional=self.optional if optional is None else optional, ) def _encode(self): - return self.tag + len_encode(0) + return self.tag + LEN0 def _decode(self, tlv, offset, decode_path, ctx, tag_only, evgen_mode): try: @@ -4783,8 +4781,11 @@ asn1_type_name = "IA5" LEN_YYMMDDHHMMSSZ = len("YYMMDDHHMMSSZ") +LEN_LEN_YYMMDDHHMMSSZ = len_encode(LEN_YYMMDDHHMMSSZ) +LEN_YYMMDDHHMMSSZ_WITH_LEN = len(LEN_LEN_YYMMDDHHMMSSZ) + LEN_YYMMDDHHMMSSZ LEN_YYYYMMDDHHMMSSDMZ = len("YYYYMMDDHHMMSSDMZ") LEN_YYYYMMDDHHMMSSZ = len("YYYYMMDDHHMMSSZ") +LEN_LEN_YYYYMMDDHHMMSSZ = len_encode(LEN_YYYYMMDDHHMMSSZ) class VisibleString(CommonString): @@ -5014,8 +5015,7 @@ return self._value.strftime("%y%m%d%H%M%SZ").encode("ascii") def _encode(self): self._assert_ready() - value = self._encode_time() - return b"".join((self.tag, len_encode(len(value)), value)) + return b"".join((self.tag, LEN_LEN_YYMMDDHHMMSSZ, self._encode_time())) def _encode_cer(self, writer): write_full(writer, self._encode()) @@ -5180,6 +5180,14 @@ encoded = value.strftime("%Y%m%d%H%M%S") if value.microsecond > 0: encoded += (".%06d" % value.microsecond).rstrip("0") return (encoded + "Z").encode("ascii") + + def _encode(self): + self._assert_ready() + value = self._value + if value.microsecond > 0: + encoded = self._encode_time() + return b"".join((self.tag, len_encode(len(encoded)), encoded)) + return b"".join((self.tag, LEN_LEN_YYYYMMDDHHMMSSZ, self._encode_time())) class GraphicString(CommonString):