work on flood fill network
This commit is contained in:
		
							parent
							
								
									b5fe4453ed
								
							
						
					
					
						commit
						299980f126
					
				
					 4 changed files with 90 additions and 0 deletions
				
			
		
							
								
								
									
										1
									
								
								src/streamfill/__init__.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								src/streamfill/__init__.py
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1 @@ | ||||||
|  | from .extracted25519 import extract_ed25519_from_onion_address | ||||||
							
								
								
									
										14
									
								
								src/streamfill/extracted25519.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								src/streamfill/extracted25519.py
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,14 @@ | ||||||
|  | from base64 import b32decode | ||||||
|  | from typing import TYPE_CHECKING | ||||||
|  | 
 | ||||||
|  | from onionrutils.bytesconverter import str_to_bytes | ||||||
|  | 
 | ||||||
|  | if TYPE_CHECKING: | ||||||
|  |     from onionrtypes import Ed25519PublicKeyBytes, OnionAddressString | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | def extract_ed25519_from_onion_address( | ||||||
|  |         address: OnionAddressString) -> Ed25519PublicKeyBytes: | ||||||
|  |     address = str_to_bytes(address).replace(b'.onion', b'').upper() | ||||||
|  |     ed25519 = b32decode(address)[:-3] | ||||||
|  |     return ed25519 | ||||||
							
								
								
									
										22
									
								
								src/streamfill/neighbors.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								src/streamfill/neighbors.py
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,22 @@ | ||||||
|  | from onionrtypes import OnionAddressString | ||||||
|  | from typing import Iterable | ||||||
|  | from .extracted25519 import extract_ed25519_from_onion_address | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | def identify_neighbors( | ||||||
|  |         address: OnionAddressString, | ||||||
|  |         peers: Iterable[OnionAddressString], | ||||||
|  |         closest_n: int) -> OnionAddressString: | ||||||
|  | 
 | ||||||
|  |     address = extract_ed25519_from_onion_address(address) | ||||||
|  |     address_int = int.from_bytes(address, "big") | ||||||
|  | 
 | ||||||
|  |     def _calc_closeness(y): | ||||||
|  |         return abs(address_int - int.from_bytes(y, "big")) | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |     peer_ed_keys = list(map(extract_ed25519_from_onion_address, peers)) | ||||||
|  |     differences = list(map(_calc_closeness, peer_ed_keys)) | ||||||
|  | 
 | ||||||
|  |     return sorted(differences)[:closest_n] | ||||||
|  | 
 | ||||||
							
								
								
									
										53
									
								
								tests/test_streamfill_extract_ed25519.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										53
									
								
								tests/test_streamfill_extract_ed25519.py
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,53 @@ | ||||||
|  | #!/usr/bin/env python3 | ||||||
|  | import sys, os | ||||||
|  | sys.path.append(".") | ||||||
|  | sys.path.append("src/") | ||||||
|  | import uuid | ||||||
|  | import binascii | ||||||
|  | from base64 import b32decode | ||||||
|  | TEST_DIR = 'testdata/%s-%s' % (uuid.uuid4(), os.path.basename(__file__)) + '/' | ||||||
|  | print("Test directory:", TEST_DIR) | ||||||
|  | os.environ["ONIONR_HOME"] = TEST_DIR | ||||||
|  | import unittest | ||||||
|  | 
 | ||||||
|  | from streamfill import extract_ed25519_from_onion_address | ||||||
|  | 
 | ||||||
|  | class TestStreamfillExtractEd25519(unittest.TestCase): | ||||||
|  |     def test_extract_normal_onion(self): | ||||||
|  |         hardcodedCorrect = b'y\xbc\xc6%\x18K\x05\x19Iu\xc2\x8bf\xb6k\x04i\xf7\xf6Uo\xb1\xac1\x89\xa7\x9b@\xdd\xa3/\x1f' | ||||||
|  |         correct = b32decode(b'pg6mmjiyjmcrsslvykfwnntlaru7p5svn6y2ymmju6nubxndf4pscryd'.upper())[:-3] | ||||||
|  |         self.assertEqual(correct, hardcodedCorrect) | ||||||
|  |         self.assertEqual(correct, extract_ed25519_from_onion_address('pg6mmjiyjmcrsslvykfwnntlaru7p5svn6y2ymmju6nubxndf4pscryd.onion')) | ||||||
|  |     def test_extract_normal_onion_bytes(self): | ||||||
|  |         hardcodedCorrect = b'y\xbc\xc6%\x18K\x05\x19Iu\xc2\x8bf\xb6k\x04i\xf7\xf6Uo\xb1\xac1\x89\xa7\x9b@\xdd\xa3/\x1f' | ||||||
|  |         correct = b32decode(b'pg6mmjiyjmcrsslvykfwnntlaru7p5svn6y2ymmju6nubxndf4pscryd'.upper())[:-3] | ||||||
|  |         self.assertEqual(correct, hardcodedCorrect) | ||||||
|  |         self.assertEqual(correct, extract_ed25519_from_onion_address(b'pg6mmjiyjmcrsslvykfwnntlaru7p5svn6y2ymmju6nubxndf4pscryd.onion')) | ||||||
|  |     def test_extract_no_ext(self): | ||||||
|  |         hardcodedCorrect = b'y\xbc\xc6%\x18K\x05\x19Iu\xc2\x8bf\xb6k\x04i\xf7\xf6Uo\xb1\xac1\x89\xa7\x9b@\xdd\xa3/\x1f' | ||||||
|  |         correct = b32decode(b'pg6mmjiyjmcrsslvykfwnntlaru7p5svn6y2ymmju6nubxndf4pscryd'.upper())[:-3] | ||||||
|  |         self.assertEqual(correct, hardcodedCorrect) | ||||||
|  |         self.assertEqual(correct, extract_ed25519_from_onion_address('pg6mmjiyjmcrsslvykfwnntlaru7p5svn6y2ymmju6nubxndf4pscryd')) | ||||||
|  |     def test_extract_no_ext_bytes(self): | ||||||
|  |         hardcodedCorrect = b'y\xbc\xc6%\x18K\x05\x19Iu\xc2\x8bf\xb6k\x04i\xf7\xf6Uo\xb1\xac1\x89\xa7\x9b@\xdd\xa3/\x1f' | ||||||
|  |         correct = b32decode(b'pg6mmjiyjmcrsslvykfwnntlaru7p5svn6y2ymmju6nubxndf4pscryd'.upper())[:-3] | ||||||
|  |         self.assertEqual(correct, hardcodedCorrect) | ||||||
|  |         self.assertEqual(correct, extract_ed25519_from_onion_address(b'pg6mmjiyjmcrsslvykfwnntlaru7p5svn6y2ymmju6nubxndf4pscryd')) | ||||||
|  |     def test_fail_length(self): | ||||||
|  |         hardcodedCorrect = b'y\xbc\xc6%\x18K\x05\x19Iu\xc2\x8bf\xb6k\x04i\xf7\xf6Uo\xb1\xac1\x89\xa7\x9b@\xdd\xa3/\x1f' | ||||||
|  |         correct = b32decode(b'pg6mmjiyjmcrsslvykfwnntlaru7p5svn6y2ymmju6nubxndf4pscryd'.upper())[:-3] | ||||||
|  |         self.assertEqual(correct, hardcodedCorrect) | ||||||
|  |         try: | ||||||
|  |             extract_ed25519_from_onion_address(b'pg6mmjiyjmcrsslvykfwnntlaru7p5svn6y2ymmju6nubxndf4pscry') | ||||||
|  |         except binascii.Error: | ||||||
|  |             pass | ||||||
|  |     def test_fail_length_onion(self): | ||||||
|  |         hardcodedCorrect = b'y\xbc\xc6%\x18K\x05\x19Iu\xc2\x8bf\xb6k\x04i\xf7\xf6Uo\xb1\xac1\x89\xa7\x9b@\xdd\xa3/\x1f' | ||||||
|  |         correct = b32decode(b'pg6mmjiyjmcrsslvykfwnntlaru7p5svn6y2ymmju6nubxndf4pscryd'.upper())[:-3] | ||||||
|  |         self.assertEqual(correct, hardcodedCorrect) | ||||||
|  |         try: | ||||||
|  |             extract_ed25519_from_onion_address(b'pg6mmjiyjmcrsslvykfwnntlaru7p5svn6y2ymmju6nubxndf4pscry.onion') | ||||||
|  |         except binascii.Error: | ||||||
|  |             pass | ||||||
|  | 
 | ||||||
|  | unittest.main() | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue