def fitxer_100_blocs_valids_fins_XX_DNI(): """ Un fitxer amb una cadena de 100 blocs que només sigui vàlida fins al bloc XX on XX són les dues darreres xifres del vostre DNI. """ XX_DNI = 81 # ara mateix NO INCLÒS EN ELS VÀLIDS rsa_0 = blockchain.rsa_key() size_message = 256 m_0 = random.randint(2**(size_message // 2 - 1), 2**(size_message // 2) - 1) t_0 = blockchain.transaction(m_0, rsa_0) cadena_de_blocs = blockchain.block_chain(t_0) for i in range(1, XX_DNI): print(i) rsa = blockchain.rsa_key() m = random.randint(2**(size_message // 2 - 1), 2**(size_message // 2) - 1) t = blockchain.transaction(m, rsa) cadena_de_blocs.add_block(t) print(cadena_de_blocs.verify()) for i in range(XX_DNI, 100): print(i) rsa = blockchain.rsa_key() m = random.randint(2**(size_message // 2 - 1), 2**(size_message // 2) - 1) t = blockchain.transaction(m, rsa) t.signature = random.randint( 0, sys.maxsize ) # fem que sigui invàlida la transacció, també podríem alterar el hash etc # Nota: en tindríem prou amb alterar-ne un de sol (el 81) perquè els següents també fossin invàlids, es trenca la cadena cadena_de_blocs.add_block(t) print(cadena_de_blocs.verify()) fitxer_de_sortida = '81_blocks_valids.block' with open(fitxer_de_sortida, 'wb') as file: pickle.dump(cadena_de_blocs, file)
def create_wrong_blockchain_100(): DNI = 19 RSA = rsa_key() num_blocks = 100 now = time() transactions = map( lambda i: transaction( int(hashlib.sha256(f"Transaction #{i}".encode()).hexdigest(), 16), RSA), range(100)) blockChain = block_chain(next(transactions)) for _ in range(1, DNI): blockChain.add_block(next(transactions)) print(f'New block from transaction #{_ + 1} added!') print(f"Pre-verification: {blockChain.verify()}") for _ in range(DNI, num_blocks): print(f'Wrong block from transaction #{_ + 1} added!') blockChain.add_wrong_block(next(transactions)) with open(f'100_blocks_{DNI}_wrong.pickle', 'wb') as f: pickle.dump(blockChain, f) print(f"Verification: {blockChain.verify()}\nTime elapsed: {time() - now}")
def fitxer_100_blocs_valids(): """Un fitxer amb una cadena vàlida de 100 blocs""" rsa_0 = blockchain.rsa_key() m_0 = random.randint(0,sys.maxsize) t_0 = blockchain.transaction(m_0,rsa_0) cadena_de_blocs = blockchain.block_chain(t_0) for i in range (1,100): print(i) rsa = blockchain.rsa_key() m = random.randint(0,sys.maxsize) t = blockchain.transaction(m,rsa) cadena_de_blocs.add_block(t) print(cadena_de_blocs.verify()) fitxer_de_sortida = '100_blocks_valids.block' with open(fitxer_de_sortida, 'wb') as file: pickle.dump(cadena_de_blocs, file)
def test_TXR(): uri = "https://en.wikipedia.org/wiki/Blockchain" site = requests.get(uri) soup = bs.BeautifulSoup(site.content, 'html.parser') i = 0 words = [] for x in soup.find_all('span'): if i < 100: words.append(x.text) i += 1 else: print('Found 100 texts') break assert (len(words) == 100) messages = [ int(hashlib.sha256(words[i].encode()).hexdigest(), 16) for i in range(100) ] keys = [512, 1024, 2048, 4096] output = "Key,Time without TXR,Time with TXR\n" for modulo in keys: RSA = rsa_key(bits_modulo=modulo) now = time() for message in messages: RSA.sign_slow(message) slow_time_signatures = time() - now now = time() for message in messages: RSA.sign(message) time_signatures = time() - now output += f"{modulo},{slow_time_signatures},{time_signatures}\n" print( f'key: {modulo} slow: {slow_time_signatures} fast: {time_signatures}' ) with open("table.csv", "w") as f: f.write(output)