def loop_handler(connection, address, _pk, _sk): while True: try: res = ElGamal.decrypt(pickle.loads(connection.recv(4096)), pk, sk) # デシリアライズ -> 復号 for value in clients: if value[1][0] == address[0] and value[1][1] == address[1]: print('Client({}, {}) : {}'.format(value[1][0], value[1][1], res)) else: value[0].send('Client({}, {}) : {}'.format( value[1][0], value[1][1], res).encode()) pass except Exception as e: print(e) break
def test_ElGamal(num_bit, message): print("\n------------------------------------------------------") # Generate random prime numbers p = BlumBlumShub.generate_prime(num_bit) # Test generate_keypair which returns public key ( g, p, h) and the private key (g, p, x) public, private = ElGamal.generate_keypair(p) print("\n------------------------------------------------------") encrypted_msg = ElGamal.encrypt(public, message) print("\n------------------------------------------------------") decrypted_msg = ElGamal.decrypt(private, encrypted_msg) print("\n------------------------------------------------------") eve_decrypted_msg = ElGamal.eve(public, encrypted_msg) return decrypted_msg, eve_decrypted_msg
connection, address = socket.accept() print('Client connected: ', address) print('Key bits ?') bits = int(input('> ')) print('OK, Your', str(bits)+'-bit keys are:') pk, sk = ElGamal.gen_key(bits=bits) print('public:', pk) # 公開鍵 print('secret:', sk) # 秘密鍵 line = str(pk[0])+' '+str(pk[1])+' '+str(pk[2]) connection.send(line.encode("UTF-8")) # 公開鍵を送る print('Given the client the public key ...') data = connection.recv(4096).decode() # クライアントからの応答を確認 print('Client:', data) # 無限ループ byeの入力でループを抜ける while True: # クライアントからデータを受信 recvline = ElGamal.decrypt(pickle.loads(connection.recv(4096)), pk, sk) # デシリアライズ -> 復号 if recvline == 'bye': break else: print('Client:', recvline) # クローズ connection.close() socket.close() print('Server side closed.')
def ElGamalDecryption(p, q, x, r, t): return ElGamal.decrypt(p, q, x, r, t)
# If encryption algorithm is RSA if type_encryption == "1": result = [int(x.strip()) for x in private.split(',')] private_key = (result[0], result[1]) # Decrypt with RSA Algorithm RSA.decrypt(private_key, encrypted_msg) # If encryption algorithm is El-Gamal elif type_encryption == "2": result = [int(x.strip()) for x in private.split(',')] # Decrypt with El-Gamal Algorithm ElGamal.decrypt((result[0], result[1], result[2]), encrypted_msg) # Otherwise, function 4 - Eavesdrop and decrypt the message elif function == "4": # Get the encrypted message from user encrypted_msg = input("Please enter encrypted message : ") # Get the public key from user public = input( "Please enter the public key ((g, p, h) for El-Gamal / (e,n) for RSA ): " ) print( "\n------------------------------------------------------" )