aboutsummaryrefslogtreecommitdiff
path: root/scripts/rpki/resource_set.py
diff options
context:
space:
mode:
authorRob Austein <sra@hactrn.net>2007-10-01 03:58:51 +0000
committerRob Austein <sra@hactrn.net>2007-10-01 03:58:51 +0000
commitdfc3bcac1519b0e83a876548332a958b46c2a009 (patch)
tree9f67f3db7c4e2977ba52aa8c78ab301f996bb2a5 /scripts/rpki/resource_set.py
parentb9169dc2335409b934ee800248e3907c656abe4d (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.py19
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