From 57cf347a430ce0c6ab665985d1e07d4960236c0c Mon Sep 17 00:00:00 2001 From: Sergey Matveev Date: Sat, 19 May 2018 17:46:11 +0300 Subject: [PATCH] BER Boolean support --- pyderasn.py | 7 +++++++ tests/test_pyderasn.py | 12 +++++++++++- 2 files changed, 18 insertions(+), 1 deletion(-) 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 -- 2.44.0