From dfc3bcac1519b0e83a876548332a958b46c2a009 Mon Sep 17 00:00:00 2001 From: Rob Austein Date: Mon, 1 Oct 2007 03:58:51 +0000 Subject: Checkpoint svn path=/scripts/rpki/resource_set.py; revision=1061 --- scripts/rpki/resource_set.py | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) (limited to 'scripts/rpki/resource_set.py') diff --git a/scripts/rpki/resource_set.py b/scripts/rpki/resource_set.py index ff43ac6b..5d81ee90 100644 --- a/scripts/rpki/resource_set.py +++ b/scripts/rpki/resource_set.py @@ -272,6 +272,25 @@ def _bs2long(bs): """Convert a bitstring (tuple representation) into a long.""" return reduce(lambda x, y: (x << 1) | y, bs, 0L) +def _long2bs(number, addrlen, prefixlen = None, strip = None): + """Convert a long into a tuple bitstring. This is a bit complicated + because it supports the fiendishly compact encoding used in RFC 3779. + """ + assert prefixlen is None or strip is None + bs = [] + while number: + bs.append(number & 1) + number >>= 1 + if addrlen > len(bs): + bs.extend((0 for i in xrange(addrlen - len(bs)))) + bs.reverse() + if prefixlen is not None: + return tuple(bs[0:prefixlen]) + if strip is not None: + while bs and bs[-1] == strip: + bs.pop() + return tuple(bs) + def parse_extensions(exts): """Parse RFC 3779 extensions from intermediate form returned by ASN.1 decoder.""" as = None -- cgit v1.2.3