[tor-commits] [chutney/master] Added function in TorNet.py to make chutney check for relay microdescriptors before verifying
nickm at torproject.org
nickm at torproject.org
Wed Jun 3 18:39:55 UTC 2020
commit 7d42052b903e04b77c2c3355955a78d32ed0e4c0
Author: ANURADHAJHA99 <anuradha750871 at gmail.com>
Date: Tue Mar 17 23:48:09 2020 +0530
Added function in TorNet.py to make chutney check for relay microdescriptors before verifying
---
lib/chutney/TorNet.py | 31 +++++++++++++++++++++++++++++--
1 file changed, 29 insertions(+), 2 deletions(-)
diff --git a/lib/chutney/TorNet.py b/lib/chutney/TorNet.py
index 697025e..1c24053 100644
--- a/lib/chutney/TorNet.py
+++ b/lib/chutney/TorNet.py
@@ -22,6 +22,7 @@ import signal
import subprocess
import sys
import time
+import base64
from chutney.Debug import debug_flag, debug
@@ -684,9 +685,10 @@ class LocalNodeBuilder(NodeBuilder):
self._genAuthorityKey()
if self._env['relay']:
self._genRouterKey()
+ self._setEd25519Id()
if self._env['hs']:
self._makeHiddenServiceDir()
-
+
def config(self, net):
"""Called to configure a node: creates a torrc file for it."""
self._createTorrcFile()
@@ -780,7 +782,32 @@ class LocalNodeBuilder(NodeBuilder):
.format(repr(" ".join(cmdline)), repr(stdouterr)))
sys.exit(1)
self._env['fingerprint'] = fingerprint
-
+
+ def _setEd25519Id(self):
+ """Read the ed25519 identity key for this router, and set up the 'ed25519-id' entry in the Environ"""
+ datadir = self._env['dir']
+ key_file = os.path.join(datadir, 'keys', "ed25519_master_id_public_key")
+ EXPECTED_ED25519_FILE_SIZE = 64
+ CURRENT_FILE_SIZE = os.stat(key_file).st_size
+ if not os.path.exists(key_file):
+ print("File {} does not exist. Are you running a very old tor version?".format(key_file))
+ return
+ elif CURRENT_FILE_SIZE != EXPECTED_ED25519_FILE_SIZE:
+ raise ValueError("The current size of the file is {} bytes, which is not matching the expected value of {} bytes".format(CURRENT_FILE_SIZE, EXPECTED_ED25519_FILE_SIZE))
+ else:
+ with open(key_file, 'rb') as f:
+ ED25519_KEY_POSITION = 32
+ f.seek(ED25519_KEY_POSITION)
+ rest_file = f.read()
+ encoded_value = base64.b64encode(rest_file)
+ ed25519_id = encoded_value.decode('utf-8').replace('=', '')
+ EXPECTED_ED25519_BASE64_KEY_SIZE = 43
+ CURRENT_ED25519_BASE64_KEY_SIZE = len(ed25519_id)
+ if CURRENT_ED25519_BASE64_KEY_SIZE != EXPECTED_ED25519_BASE64_KEY_SIZE:
+ raise ValueError("The current length of the key is {}, which is not matching the expected length of {}".format(CURRENT_ED25519_BASE64_KEY_SIZE, EXPECTED_ED25519_BASE64_KEY_SIZE))
+ else:
+ self._env['ed25519-id'] = ed25519_id
+
def _getAltAuthLines(self, hasbridgeauth=False):
"""Return a combination of AlternateDirAuthority,
and AlternateBridgeAuthority lines for
More information about the tor-commits
mailing list