commit 5fec5eb3e5f8901a08a741ab57cf48b9126e41ee
Author: Isis Lovecruft <i...@torproject.org>
Date:   Sat Apr 18 00:48:26 2015 +0000

    Add Bridge.identity property and replace all usage of getID().
---
 lib/bridgedb/Bridges.py |   25 ++++++++++---------------
 lib/bridgedb/Filters.py |    2 +-
 lib/bridgedb/bridges.py |   33 +++++++++++++++++++++++++++++++--
 3 files changed, 42 insertions(+), 18 deletions(-)

diff --git a/lib/bridgedb/Bridges.py b/lib/bridgedb/Bridges.py
index b8fdd2e..5742794 100644
--- a/lib/bridgedb/Bridges.py
+++ b/lib/bridgedb/Bridges.py
@@ -25,8 +25,6 @@ import bridgedb.Bucket
 from bridgedb.bridges import Bridge
 from bridgedb.crypto import getHMACFunc
 from bridgedb.parse import addr
-from bridgedb.parse.fingerprint import toHex
-from bridgedb.parse.fingerprint import fromHex
 from bridgedb.parse.fingerprint import isValidFingerprint
 from bridgedb.safelog import logSafely
 
@@ -221,13 +219,12 @@ class BridgeRing(BridgeHolder):
                 if val == 'stable' and bridge.flags.stable:
                     subring.insert(bridge)
 
-        ident = bridge.getID()
-        pos = self.hmac(ident)
-        if not self.bridges.has_key(pos):
+        pos = self.hmac(bridge.identity)
+        if not pos in self.bridges:
             self.sortedKeys.append(pos)
             self.isSorted = False
         self.bridges[pos] = bridge
-        self.bridgesByID[ident] = bridge
+        self.bridgesByID[bridge.identity] = bridge
         logging.debug("Adding %s to %s" % (bridge.address, self.name))
 
     def _sort(self):
@@ -330,11 +327,11 @@ class BridgeRing(BridgeHolder):
         logging.info("Dumping bridge assignments for %s..." % self.name)
         for b in self.bridges.itervalues():
             desc = [ description ]
-            ident = b.getID()
             for tp,val,_,subring in self.subrings:
-                if subring.getBridgeByID(ident):
+                if subring.getBridgeByID(b.identity):
                     desc.append("%s=%s"%(tp,val))
-            f.write("%s %s\n"%( toHex(ident), " ".join(desc).strip()))
+            f.write("%s %s\n" % (b.fingerprint, " ".join(desc).strip()))
+
 
 class FixedBridgeSplitter(BridgeHolder):
     """A bridgeholder that splits bridges up based on an hmac and assigns
@@ -348,7 +345,7 @@ class FixedBridgeSplitter(BridgeHolder):
 
     def insert(self, bridge):
         # Grab the first 4 bytes
-        digest = self.hmac(bridge.getID())
+        digest = self.hmac(bridge.identity)
         pos = long( digest[:8], 16 )
         which = pos % len(self.rings)
         self.rings[which].insert(bridge)
@@ -467,11 +464,9 @@ class BridgeSplitter(BridgeHolder):
         if not bridge.flags.running:
             return
 
-        bridgeID = bridge.fingerprint
-
         # Determine which ring to put this bridge in if we haven't seen it
         # before.
-        pos = self.hmac(bridgeID)
+        pos = self.hmac(bridge.identity)
         n = int(pos[:8], 16) % self.totalP
         pos = bisect.bisect_right(self.pValues, n) - 1
         assert 0 <= pos < len(self.rings)
@@ -668,7 +663,7 @@ class FilteredBridgeSplitter(BridgeHolder):
                 if g(b):
                     # ghetto. get subring flags, ports
                     for tp,val,_,subring in r.subrings:
-                        if subring.getBridgeByID(b.getID()):
+                        if subring.getBridgeByID(b.identity):
                             desc.append("%s=%s"%(tp,val))
                     try:
                         desc.extend(g.description.split())
@@ -693,4 +688,4 @@ class FilteredBridgeSplitter(BridgeHolder):
             # add to assignments
             desc = "%s %s" % (description.strip(),
                     " ".join([v for k,v in grouped.items()]).strip())
-            f.write("%s %s\n"%( toHex(b.getID()), desc))
+            f.write("%s %s\n" % (b.fingerprint, desc))
diff --git a/lib/bridgedb/Filters.py b/lib/bridgedb/Filters.py
index 41df297..fb0197b 100644
--- a/lib/bridgedb/Filters.py
+++ b/lib/bridgedb/Filters.py
@@ -17,7 +17,7 @@ def filterAssignBridgesToRing(hmac, numRings, assignedRing):
         return funcs[ruleset]
     except KeyError:
         def _assignBridgesToRing(bridge):
-            digest = hmac(bridge.getID())
+            digest = hmac(bridge.identity)
             pos = long( digest[:8], 16 )
             which = pos % numRings + 1
 
diff --git a/lib/bridgedb/bridges.py b/lib/bridgedb/bridges.py
index 541e735..c8c7a30 100644
--- a/lib/bridgedb/bridges.py
+++ b/lib/bridgedb/bridges.py
@@ -178,6 +178,36 @@ class BridgeAddressBase(object):
         self._fingerprint = None
 
     @property
+    def identity(self):
+        """Get this Bridge's identity digest.
+
+        :rtype: bytes
+        :returns: The binary-encoded SHA-1 hash digest of the public half of
+            this Bridge's identity key, if available; otherwise, returns
+            ``None``.
+        """
+        if self.fingerprint:
+            return fromHex(self.fingerprint)
+
+    @identity.setter
+    def identity(self, value):
+        """Set this Bridge's identity digest to **value**.
+
+        .. info: The purported identity digest will be checked for
+            specification conformity with
+            :func:`~bridgedb.parse.fingerprint.isValidFingerprint`.
+
+        :param str value: The binary-encoded SHA-1 hash digest of the public
+            half of this Bridge's identity key.
+        """
+        self.fingerprint = toHex(value)
+
+    @identity.deleter
+    def identity(self):
+        """Reset this Bridge's identity digest."""
+        del(self.fingerprint)
+
+    @property
     def address(self):
         """Get this bridge's address.
 
@@ -672,8 +702,7 @@ class BridgeBackwardsCompatibility(BridgeBase):
         This method is provided for backwards compatibility and should not
         be relied upon.
         """
-        if self.fingerprint:
-            return fromHex(self.fingerprint)
+        return self.identity
 
     def setDescriptorDigest(self, digest):
         """Set this ``Bridge``'s server-descriptor digest.



_______________________________________________
tor-commits mailing list
tor-commits@lists.torproject.org
https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-commits

Reply via email to