コード例 #1
0
def request_authentication(username, sock, sip, sport, password):
  a = util.get_random_number()
  A = util.get_public_ephemeral(a)
  message = {}
  message.update({'username': username})
  message.update({'A': A})
  try:
    msg = util.encrypt_message_PSK(message, SERVER_KEY)
  except Exception as e:
    print "An error occured while encrypting the text message - ", message, "! %s" %e
  try:
    #start_new_thread(receiveMessages, (sock,)) 
    sock.connect((sip, int(sport)))
    send_message(sock, msg, sip, sport)
    progress[username] = 1
    t1 = Thread(target=receiveMessages, args=(sock, username, sip, sport, A, password, a))
    t1.start()
    t1.join()
    if(EXIT_IN_ERROR):
      sys.exit()
  except ServerConnectionBroken:
    print 'Connection broken !!'
    sys.exit()
コード例 #2
0
def receiveMessages(sock, username, sip, sport, A, password, a):
  while(1):
    try:
      # try to receive messages from the server
      msg = sock.recv(40960)  # changed here akshay
      if msg != '':
        msg1 = pickle.loads(msg)
        #print("Received message:%s" %(msg1))
        status = progress[username]
        if(status == 1):
          if(msg1 == 'ERROR'):
            global EXIT_IN_ERROR
            EXIT_IN_ERROR = True
            sys.exit()
          value = find_value_from_hash(msg1)
          send_message(sock, value, sip, sport)
          progress[username] = 2
      
        if(status == 2):
          challenge_pk_data = {}
          data_for_kas = {}
          final_to_server = {}
          global shared_key
          shared_key = compute_shared_key(A, msg1, username, password, a)
          final_kas = util.MD5_HASH(shared_key)
          challenge = util.get_random_number()
          global NONCE_SENT
          NONCE_SENT = challenge
          data_for_kas.update({'CHALLENGE': challenge , 'PK_CLIENT': CLIENT_PUBLIC_KEY_STR})
          Kas_encrypted_data = util.encrypt_message_KAS(data_for_kas, final_kas, GENERATED_IV)
          # add IV here 
          challenge_pk_data.update({'CHALLENGE_PK': Kas_encrypted_data, 'CHALLENGE': challenge, 'IV': GENERATED_IV})
          data_to_server = util.encrypt_message_PSK(challenge_pk_data, SERVER_KEY)
          send_message(sock, data_to_server, sip, sport)
          progress[username] = 3

        if(status == 3):
          hash_shared_key = util.MD5_HASH(shared_key)
          nonce = util.decrypt_using_Kas(msg1, hash_shared_key, GENERATED_IV)
          incremented_nonce = long(nonce) + 1
          if incremented_nonce == NONCE_SENT:
            print ("Login Success !")
            return True
          else:
            print("Authentication pending!")
            return False

      else:
        print("Connection with server is broken...")
        sys.exit()
    except KeyboardInterrupt:
      sock.close()
    # handling socket errors
    except socket.error, s_error:
      sock.close()
      error_code = s_error[0]
      error_message = s_error[1]
      print('Error in reading messages: ', error_code, ' - ', error_message)
    except Exception as e:
      print('Error occured:', e)
      sock.close()
      sys.exit()