return raw
return b"".join((self._expl, len_encode(len(raw)), raw))
+ def hexencode(self):
+ """Do hexadecimal encoded :py:meth:`pyderasn.Obj.encode`
+ """
+ return hexenc(self.encode())
+
def decode(
self,
data,
raise ExceedingData(len(tail))
return obj
+ def hexdecode(self, data, *args, **kwargs):
+ """Do :py:meth:`pyderasn.Obj.decode` with hexadecimal decoded data
+ """
+ return self.decode(hexdec(data), *args, **kwargs)
+
+ def hexdecod(self, data, *args, **kwargs):
+ """Do :py:meth:`pyderasn.Obj.decod` with hexadecimal decoded data
+ """
+ return self.decod(hexdec(data), *args, **kwargs)
+
@property
def expled(self):
"""See :ref:`decoding`
"""Pretty print object
:param Obj obj: object you want to pretty print
- :param oid_maps: list of ``OID <-> humand readable string`` dictionary.
- When OID from it is met, then its humand readable form
- is printed
+ :param oid_maps: list of ``str(OID) <-> human readable string`` dictionary.
+ Its human readable form is printed when OID is met
:param big_blobs: if large binary objects are met (like OctetString
values), do we need to print them too, on separate
lines
>>> PrintableString().allowable_chars
frozenset([' ', "'", ..., 'z'])
+ >>> obj = PrintableString("foo*bar", allow_asterisk=True)
+ PrintableString PrintableString foo*bar
+ >>> obj.allow_asterisk, obj.allow_ampersand
+ (True, False)
"""
__slots__ = ()
tag_default = tag_encode(19)
value, bounds, impl, expl, default, optional, _decoded,
)
+ @property
+ def allow_asterisk(self):
+ """Is asterisk character allowed?
+ """
+ return self._asterisk <= self._allowable_chars
+
+ @property
+ def allow_ampersand(self):
+ """Is ampersand character allowed?
+ """
+ return self._ampersand <= self._allowable_chars
+
def _value_sanitize(self, value):
value = super(PrintableString, self)._value_sanitize(value)
if not frozenset(value) <= self._allowable_chars:
expl=self._expl if expl is None else expl,
default=self.default if default is None else default,
optional=self.optional if optional is None else optional,
- allow_asterisk=self._asterisk <= self._allowable_chars,
- allow_ampersand=self._ampersand <= self._allowable_chars,
+ allow_asterisk=self.allow_asterisk,
+ allow_ampersand=self.allow_ampersand,
)
Only microsecond fractions are supported.
:py:exc:`pyderasn.DecodeError` will be raised during decoding of
higher precision values.
+
+ .. warning::
+
+ Zero year is unsupported.
"""
__slots__ = ()
tag_default = tag_encode(24)
def _strptime(self, value):
l = len(value)
if l == LEN_YYYYMMDDHHMMSSZ:
- # datetime.strptime's format: %y%m%d%H%M%SZ
+ # datetime.strptime's format: %Y%m%d%H%M%SZ
if value[-1] != "Z":
raise ValueError("non UTC timezone")
return datetime(