From: Sergey Matveev Date: Sat, 19 May 2018 14:46:11 +0000 (+0300) Subject: BER Boolean support X-Git-Tag: 3.7~27 X-Git-Url: http://www.git.cypherpunks.ru/?p=pyderasn.git;a=commitdiff_plain;h=57cf347a430ce0c6ab665985d1e07d4960236c0c BER Boolean support --- diff --git a/pyderasn.py b/pyderasn.py index 68d67d0..a560eda 100755 --- a/pyderasn.py +++ b/pyderasn.py @@ -843,6 +843,7 @@ class Obj(object): "offset", "llen", "vlen", + "bered", ) def __init__( @@ -864,6 +865,7 @@ class Obj(object): self.optional = optional self.offset, self.llen, self.vlen = _decoded self.default = None + self.bered = False @property def ready(self): # pragma: no cover @@ -1398,10 +1400,14 @@ class Boolean(Obj): offset=offset, ) first_octet = byte2int(v) + bered = False if first_octet == 0: value = False elif first_octet == 0xFF: value = True + elif ctx.get("bered", False): + value = True + bered = True else: raise DecodeError( "unacceptable Boolean value", @@ -1417,6 +1423,7 @@ class Boolean(Obj): optional=self.optional, _decoded=(offset, 1, 1), ) + obj.bered = bered return obj, v[1:] def __repr__(self): diff --git a/tests/test_pyderasn.py b/tests/test_pyderasn.py index 8fe0502..a449068 100644 --- a/tests/test_pyderasn.py +++ b/tests/test_pyderasn.py @@ -587,13 +587,23 @@ class TestBoolean(CommonMixin, TestCase): ))) @given(integers(min_value=0 + 1, max_value=255 - 1)) - def test_invalid_value(self, value): + def test_ber_value(self, value): with assertRaisesRegex(self, DecodeError, "unacceptable Boolean value"): Boolean().decode(b"".join(( Boolean.tag_default, len_encode(1), int2byte(value), ))) + obj, _ = Boolean().decode( + b"".join(( + Boolean.tag_default, + len_encode(1), + int2byte(value), + )), + ctx={"bered": True}, + ) + self.assertTrue(bool(obj)) + self.assertTrue(obj.bered) @composite