[tor-commits] [metrics-lib/master] Don't compute bridge descriptor digests.

karsten at torproject.org karsten at torproject.org
Tue Jun 6 13:12:31 UTC 2017


commit 6052e22b08f65d34a8cdea466482c5294b6c6d11
Author: Karsten Loesing <karsten.loesing at gmx.net>
Date:   Sun Jun 4 22:58:31 2017 +0200

    Don't compute bridge descriptor digests.
    
    These calls will fail for computing bridge descriptor digests, because
    there are no `-----END SIGNATURE-----` lines in sanitized bridge
    descriptors.
---
 .../descriptor/impl/ExtraInfoDescriptorImpl.java   |  4 ---
 .../impl/RelayExtraInfoDescriptorImpl.java         |  4 +++
 .../descriptor/impl/RelayServerDescriptorImpl.java |  4 +++
 .../descriptor/impl/ServerDescriptorImpl.java      |  4 ---
 .../impl/ExtraInfoDescriptorImplTest.java          | 22 +++++++++++++++
 .../descriptor/impl/ServerDescriptorImplTest.java  | 31 ++++++++++++++++++++++
 6 files changed, 61 insertions(+), 8 deletions(-)

diff --git a/src/main/java/org/torproject/descriptor/impl/ExtraInfoDescriptorImpl.java b/src/main/java/org/torproject/descriptor/impl/ExtraInfoDescriptorImpl.java
index b4c3a0b..0d67af9 100644
--- a/src/main/java/org/torproject/descriptor/impl/ExtraInfoDescriptorImpl.java
+++ b/src/main/java/org/torproject/descriptor/impl/ExtraInfoDescriptorImpl.java
@@ -39,10 +39,6 @@ public abstract class ExtraInfoDescriptorImpl extends DescriptorImpl
     super(descriptorBytes, offsetAndLimit, failUnrecognizedDescriptorLines,
         false);
     this.parseDescriptorBytes();
-    this.calculateDigestSha1Hex(Key.EXTRA_INFO.keyword + SP,
-        NL + Key.ROUTER_SIGNATURE.keyword + NL);
-    this.calculateDigestSha256Base64(Key.EXTRA_INFO.keyword + SP,
-        NL + "-----END SIGNATURE-----" + NL);
     this.checkExactlyOnceKeys(exactlyOnceKeys);
     Set<Key> dirreqStatsKeys = EnumSet.of(
         Key.DIRREQ_STATS_END, Key.DIRREQ_V2_IPS, Key.DIRREQ_V3_IPS,
diff --git a/src/main/java/org/torproject/descriptor/impl/RelayExtraInfoDescriptorImpl.java b/src/main/java/org/torproject/descriptor/impl/RelayExtraInfoDescriptorImpl.java
index 37bdc21..92cff65 100644
--- a/src/main/java/org/torproject/descriptor/impl/RelayExtraInfoDescriptorImpl.java
+++ b/src/main/java/org/torproject/descriptor/impl/RelayExtraInfoDescriptorImpl.java
@@ -13,6 +13,10 @@ public class RelayExtraInfoDescriptorImpl
       int[] offsetAndLimit, boolean failUnrecognizedDescriptorLines)
       throws DescriptorParseException {
     super(descriptorBytes, offsetAndLimit, failUnrecognizedDescriptorLines);
+    this.calculateDigestSha1Hex(Key.EXTRA_INFO.keyword + SP,
+        NL + Key.ROUTER_SIGNATURE.keyword + NL);
+    this.calculateDigestSha256Base64(Key.EXTRA_INFO.keyword + SP,
+        NL + "-----END SIGNATURE-----" + NL);
   }
 }
 
diff --git a/src/main/java/org/torproject/descriptor/impl/RelayServerDescriptorImpl.java b/src/main/java/org/torproject/descriptor/impl/RelayServerDescriptorImpl.java
index b1d3f47..4ccb35a 100644
--- a/src/main/java/org/torproject/descriptor/impl/RelayServerDescriptorImpl.java
+++ b/src/main/java/org/torproject/descriptor/impl/RelayServerDescriptorImpl.java
@@ -13,6 +13,10 @@ public class RelayServerDescriptorImpl extends ServerDescriptorImpl
       int[] offsetAndLength, boolean failUnrecognizedDescriptorLines)
       throws DescriptorParseException {
     super(descriptorBytes, offsetAndLength, failUnrecognizedDescriptorLines);
+    this.calculateDigestSha1Hex(Key.ROUTER.keyword + SP,
+        NL + Key.ROUTER_SIGNATURE.keyword + NL);
+    this.calculateDigestSha256Base64(Key.ROUTER.keyword + SP,
+        NL + "-----END SIGNATURE-----" + NL);
   }
 }
 
diff --git a/src/main/java/org/torproject/descriptor/impl/ServerDescriptorImpl.java b/src/main/java/org/torproject/descriptor/impl/ServerDescriptorImpl.java
index a4cf25e..428b2f0 100644
--- a/src/main/java/org/torproject/descriptor/impl/ServerDescriptorImpl.java
+++ b/src/main/java/org/torproject/descriptor/impl/ServerDescriptorImpl.java
@@ -40,10 +40,6 @@ public abstract class ServerDescriptorImpl extends DescriptorImpl
     super(descriptorBytes, offsetAndLength, failUnrecognizedDescriptorLines,
         false);
     this.parseDescriptorBytes();
-    this.calculateDigestSha1Hex(Key.ROUTER.keyword + SP,
-        NL + Key.ROUTER_SIGNATURE.keyword + NL);
-    this.calculateDigestSha256Base64(Key.ROUTER.keyword + SP,
-        NL + "-----END SIGNATURE-----" + NL);
     this.checkExactlyOnceKeys(exactlyOnce);
     this.checkAtMostOnceKeys(atMostOnce);
     this.checkFirstKey(Key.ROUTER);
diff --git a/src/test/java/org/torproject/descriptor/impl/ExtraInfoDescriptorImplTest.java b/src/test/java/org/torproject/descriptor/impl/ExtraInfoDescriptorImplTest.java
index c47c873..b745b07 100644
--- a/src/test/java/org/torproject/descriptor/impl/ExtraInfoDescriptorImplTest.java
+++ b/src/test/java/org/torproject/descriptor/impl/ExtraInfoDescriptorImplTest.java
@@ -2166,5 +2166,27 @@ public class ExtraInfoDescriptorImplTest {
     assertEquals("TvrqpjI7OmCtwGwair/NHUxg5ROVVQYz6/EDyXsDHR4",
         descriptor.getDigestSha256Base64());
   }
+
+  @Test()
+  public void testExtraInfoDigestsNoRouterDigestLines()
+      throws DescriptorParseException {
+    byte[] descriptorBytes = ("extra-info idideditheconfig "
+        + "DC28749EC9E26E61DE492E46CD830379E9931B09\n"
+        + "master-key-ed25519 "
+        + "38FzmOIE6Mm85Ytx0MhFM6X9EuxWRUgb6HjyMGuO2AU\n"
+        + "published 2015-12-03 13:23:19\n"
+        + "write-history 2015-12-03 09:59:32 (14400 s) 53913600,52992000,"
+        + "53222400,53222400,53452800,53222400\n"
+        + "read-history 2015-12-03 09:59:32 (14400 s) 61056000,60364800,"
+        + "60364800,60134400,60595200,60364800\n"
+        + "geoip-db-digest 5BF366AD4A0572D82A1A0F6628AF8EF7725E3AB9\n"
+        + "geoip6-db-digest 212DE17D5A368DCAFA19B95F168BFFA101145A93\n")
+        .getBytes();
+    BridgeExtraInfoDescriptor descriptor =
+        new BridgeExtraInfoDescriptorImpl(descriptorBytes,
+            new int[] { 0, descriptorBytes.length }, true);
+    assertNull(descriptor.getDigestSha1Hex());
+    assertNull(descriptor.getDigestSha256Base64());
+  }
 }
 
diff --git a/src/test/java/org/torproject/descriptor/impl/ServerDescriptorImplTest.java b/src/test/java/org/torproject/descriptor/impl/ServerDescriptorImplTest.java
index 71ce810..7a765d4 100644
--- a/src/test/java/org/torproject/descriptor/impl/ServerDescriptorImplTest.java
+++ b/src/test/java/org/torproject/descriptor/impl/ServerDescriptorImplTest.java
@@ -10,6 +10,7 @@ import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
 
 import org.torproject.descriptor.BandwidthHistory;
+import org.torproject.descriptor.BridgeServerDescriptor;
 import org.torproject.descriptor.DescriptorParseException;
 import org.torproject.descriptor.ServerDescriptor;
 
@@ -493,6 +494,10 @@ public class ServerDescriptorImplTest {
     assertFalse(descriptor.getCachesExtraInfo());
     assertFalse(descriptor.getAllowSingleHopExits());
     assertTrue(descriptor.getUnrecognizedLines().isEmpty());
+    assertEquals("a9635dd801ad98dac43aff49baa2dbbaf050222d",
+        descriptor.getDigestSha1Hex());
+    assertEquals("kvdJKQ6R9i8x1nDqJZ34JFWsu6TquLqQy54nheSWrOY",
+        descriptor.getDigestSha256Base64());
   }
 
   @Test(expected = DescriptorParseException.class)
@@ -1718,5 +1723,31 @@ public class ServerDescriptorImplTest {
         NTOR_ONION_KEY_CROSSCERT_LINES + "\n"
         + NTOR_ONION_KEY_CROSSCERT_LINES);
   }
+
+  @Test()
+  public void testBridgeDescriptorDigestsRouterDigestLines()
+      throws DescriptorParseException {
+    DescriptorBuilder db = new DescriptorBuilder();
+    String digestSha1Hex = "A9635DD801AD98DAC43AFF49BAA2DBBAF050222D";
+    String digestSha256Base64 = "kvdJKQ6R9i8x1nDqJZ34JFWsu6TquLqQy54nheSWrOY";
+    db.routerSignatureLines = "router-digest-sha256 " + digestSha256Base64
+        + "\nrouter-digest " + digestSha1Hex;
+    byte[] descriptorBytes = db.buildDescriptorBytes();
+    BridgeServerDescriptor descriptor = new BridgeServerDescriptorImpl(
+        descriptorBytes, new int[] { 0, descriptorBytes.length }, true);
+    assertEquals(digestSha1Hex, descriptor.getDigestSha1Hex());
+    assertEquals(digestSha256Base64, descriptor.getDigestSha256Base64());
+  }
+
+  @Test()
+  public void testBridgeDescriptorDigestsNoRouterDigestLines()
+      throws DescriptorParseException {
+    DescriptorBuilder db = new DescriptorBuilder();
+    byte[] descriptorBytes = db.buildDescriptorBytes();
+    BridgeServerDescriptor descriptor = new BridgeServerDescriptorImpl(
+        descriptorBytes, new int[] { 0, descriptorBytes.length }, true);
+    assertNull(descriptor.getDigestSha1Hex());
+    assertNull(descriptor.getDigestSha256Base64());
+  }
 }
 





More information about the tor-commits mailing list