Advertisement
pmontp19

client

Jun 5th, 2017
153
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.90 KB | None | 0 0
  1. import os
  2. import socket
  3. import threading
  4. import select
  5. import sys
  6. import re
  7.  
  8. from comms import send, receive
  9.  
  10. from Crypto.PublicKey import RSA
  11. from Crypto.Signature import PKCS1_PSS
  12. from Crypto.Hash import SHA
  13.  
  14. exiting = False
  15.  
  16.  
  17. def recv_loop(connection):
  18.     while True:
  19.         if exiting:
  20.             print "Ending receive loop"
  21.             return
  22.         (readable, writable, errored) = select.select([connection], [], [connection], 0.1)
  23.         if readable or errored:
  24.             #message = connection.recv(1024)
  25.             message = receive(connection)
  26.             if not message:
  27.                 print "*** Disconnected from server ***"
  28.                 break
  29.             else:
  30.                 if 'PLAIN' in message:
  31.                     message = message.strip('PLAIN').strip()
  32.                 else:
  33.                     message = decryptor.decrypt(message)
  34.                 print message
  35.  
  36.  
  37. sckt = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  38. host = '127.0.0.1'
  39. port = '5000'
  40.  
  41. #host = raw_input('Entra la IP del servidor >')
  42. while not re.match(r"^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$",host):
  43.     print ("Error! Segur que has escrit be la IP?")
  44.     host = raw_input('Entra la IP del servidor >')
  45. #port = raw_input('Entra el port del servidor >')
  46. while not re.match(r"^[0-9]+$",port):
  47.     print ("Error! Segur que has escrit be el port?")
  48.     port = raw_input('Entra el port del servidor >')
  49.  
  50. try:
  51.     print "Connecting to server..."
  52.  
  53.     client_privkey = RSA.generate(1024, os.urandom)
  54.     client_pubkey = client_privkey.publickey()
  55.  
  56.     decryptor = client_privkey
  57.  
  58.     sckt.connect( (host, int(port)) )
  59. #    sckt.send(client_pubkey.exportKey())
  60.     send(sckt, client_pubkey.exportKey())
  61. #    server_pubkey = sckt.recv(1024)
  62.     server_pubkey = receive(sckt)
  63.     encryptor = RSA.importKey(server_pubkey)
  64. except socket.error:
  65.     print 'No hem pogut establir connexio amb el servidor @ %s' % ('%s:%s' % sckt.getsockname())
  66.     sys.exit(1)
  67.  
  68.  
  69.  
  70. print "Connectat! Tecleja l'ordre /help per veure la llista d'ordres"
  71. print "== Introdueix el nom d'usuari: "
  72.  
  73.  
  74. threading.Thread(target=recv_loop, args=[sckt]).start()
  75.  
  76. while True:
  77.     message = raw_input()
  78.     if message.lower() == '/exit':
  79.         exiting = True
  80.         sys.exit(0)
  81.     else:
  82.         try:
  83.             #encrypt
  84.             message = encryptor.encrypt(message, 0)
  85.             message = message[0]
  86.  
  87.             #append client signature
  88.             signkey = decryptor
  89.             message_hash = SHA.new()
  90.             message_hash.update(message)
  91.  
  92.             signer = PKCS1_PSS.new(signkey)
  93.             signature = signer.sign(message_hash)
  94.             message = '%s#^[[%s' % (message, signature)
  95.  
  96.         except ValueError:
  97.             print 'Massa text, no s\'ha pogut encriptar ni enviar'
  98.             message = None
  99.  
  100.         if message:
  101.             #sckt.send(message)
  102.             send(sckt, message)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement