diff options
author | Rob Austein <sra@hactrn.net> | 2007-10-01 03:58:51 +0000 |
---|---|---|
committer | Rob Austein <sra@hactrn.net> | 2007-10-01 03:58:51 +0000 |
commit | dfc3bcac1519b0e83a876548332a958b46c2a009 (patch) | |
tree | 9f67f3db7c4e2977ba52aa8c78ab301f996bb2a5 /scripts/rpki/resource_set.py | |
parent | b9169dc2335409b934ee800248e3907c656abe4d (diff) |
Checkpoint
svn path=/scripts/rpki/resource_set.py; revision=1061
Diffstat (limited to 'scripts/rpki/resource_set.py')
-rw-r--r-- | scripts/rpki/resource_set.py | 19 |
1 files changed, 19 insertions, 0 deletions
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 |