Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import os
- import socket
- import threading
- import select
- import sys
- import re
- from comms import send, receive
- from Crypto.PublicKey import RSA
- from Crypto.Signature import PKCS1_PSS
- from Crypto.Hash import SHA
- exiting = False
- def recv_loop(connection):
- while True:
- if exiting:
- print "Ending receive loop"
- return
- (readable, writable, errored) = select.select([connection], [], [connection], 0.1)
- if readable or errored:
- #message = connection.recv(1024)
- message = receive(connection)
- if not message:
- print "*** Disconnected from server ***"
- break
- else:
- if 'PLAIN' in message:
- message = message.strip('PLAIN').strip()
- else:
- message = decryptor.decrypt(message)
- print message
- sckt = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
- host = '127.0.0.1'
- port = '5000'
- #host = raw_input('Entra la IP del servidor >')
- while not re.match(r"^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$",host):
- print ("Error! Segur que has escrit be la IP?")
- host = raw_input('Entra la IP del servidor >')
- #port = raw_input('Entra el port del servidor >')
- while not re.match(r"^[0-9]+$",port):
- print ("Error! Segur que has escrit be el port?")
- port = raw_input('Entra el port del servidor >')
- try:
- print "Connecting to server..."
- client_privkey = RSA.generate(1024, os.urandom)
- client_pubkey = client_privkey.publickey()
- decryptor = client_privkey
- sckt.connect( (host, int(port)) )
- # sckt.send(client_pubkey.exportKey())
- send(sckt, client_pubkey.exportKey())
- # server_pubkey = sckt.recv(1024)
- server_pubkey = receive(sckt)
- encryptor = RSA.importKey(server_pubkey)
- except socket.error:
- print 'No hem pogut establir connexio amb el servidor @ %s' % ('%s:%s' % sckt.getsockname())
- sys.exit(1)
- print "Connectat! Tecleja l'ordre /help per veure la llista d'ordres"
- print "== Introdueix el nom d'usuari: "
- threading.Thread(target=recv_loop, args=[sckt]).start()
- while True:
- message = raw_input()
- if message.lower() == '/exit':
- exiting = True
- sys.exit(0)
- else:
- try:
- #encrypt
- message = encryptor.encrypt(message, 0)
- message = message[0]
- #append client signature
- signkey = decryptor
- message_hash = SHA.new()
- message_hash.update(message)
- signer = PKCS1_PSS.new(signkey)
- signature = signer.sign(message_hash)
- message = '%s#^[[%s' % (message, signature)
- except ValueError:
- print 'Massa text, no s\'ha pogut encriptar ni enviar'
- message = None
- if message:
- #sckt.send(message)
- send(sckt, message)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement