aboutsummaryrefslogtreecommitdiff
path: root/rpkid
diff options
context:
space:
mode:
authorRob Austein <sra@hactrn.net>2008-07-08 08:00:36 +0000
committerRob Austein <sra@hactrn.net>2008-07-08 08:00:36 +0000
commit6d7a566a5f941a51b5e57e779bcb8aff4557198f (patch)
treeef1c60bc4ffd5505af14f7a8961a45fb94f64146 /rpkid
parent202b69b6ffb360e7b28867460206f9b874d03223 (diff)
Clean up unreadable bitstring code
svn path=/rpkid/rpki/resource_set.py; revision=1984
Diffstat (limited to 'rpkid')
-rw-r--r--rpkid/rpki/resource_set.py21
1 files changed, 11 insertions, 10 deletions
diff --git a/rpkid/rpki/resource_set.py b/rpkid/rpki/resource_set.py
index dc9b37ee..c8f180e6 100644
--- a/rpkid/rpki/resource_set.py
+++ b/rpkid/rpki/resource_set.py
@@ -371,15 +371,11 @@ class resource_set_ip(resource_set):
if x[0] == "addressesOrRanges":
for aor in x[1]:
if aor[0] == "addressRange":
- mask = (1L << (self.range_type.datum_type.bits - len(aor[1][1]))) - 1
- min = _bs2long(aor[1][0]) << (self.range_type.datum_type.bits - len(aor[1][0]))
- max = _bs2long(aor[1][1]) << (self.range_type.datum_type.bits - len(aor[1][1]))
- max = max | mask
+ min = _bs2long(aor[1][0], self.range_type.datum_type.bits, 0)
+ max = _bs2long(aor[1][1], self.range_type.datum_type.bits, 1)
else:
- mask = (1L << (self.range_type.datum_type.bits - len(aor[1]))) - 1
- min = _bs2long(aor[1]) << (self.range_type.datum_type.bits - len(aor[1]))
- max = min | mask
- assert (min & mask) == 0, "Resource not in canonical form: %s" % (str(x))
+ min = _bs2long(aor[1], self.range_type.datum_type.bits, 0)
+ max = _bs2long(aor[1], self.range_type.datum_type.bits, 1)
self.append(self.range_type(self.range_type.datum_type(min), self.range_type.datum_type(max)))
else:
assert x[0] == "inherit"
@@ -420,11 +416,16 @@ class resource_set_ipv6(resource_set_ip):
afi = "\x00\x02"
-def _bs2long(bs):
+def _bs2long(bs, addrlen, fill):
"""Utility function to convert a bitstring (POW.pkix tuple
representation) into a Python long.
"""
- return reduce(lambda x, y: (x << 1) | y, bs, 0L)
+ x = 0L
+ for y in bs:
+ x = (x << 1) | y
+ for y in xrange(addrlen - len(bs)):
+ x = (x << 1) | fill
+ return x
def _long2bs(number, addrlen, prefixlen = None, strip = None):
"""Utility function to convert a Python long into a POW.pkix tuple