# Odbiór wiadomości
import hashlib, random, os, time
from binascii import hexlify
from socket import *
import r09_telnet as ct


def get_dh_sharedsecret():
    return

def get_dh_sharedkey():
    return  

def decrypt(ciphertext, usePKI, useDH, serverSecret):
    # msg = ct.decrypt(ciphertext, usePKI, useDH, serverSecret)
    try:
        msg = ct.decrypt(ciphertext, usePKI, useDH, serverSecret)
    except:
        msg = ciphertext
    return msg

def main(): 
    # Zmienne pozwalające wybrać schemat szyfrowania
    useClientPKI = False
    useDHKey = False
    serverSecret = 0

    # Zmienne związane z pracą serwera
    key = ""
    host = ""
    port = 8080
    buf = 1024 * 2
    addr = (host, port)
    UDPSock = socket(AF_INET, SOCK_DGRAM)
    UDPSock.bind(addr)

    # Wiadomość powitalna
    print()
    print()
    print("Oczekuję na wiadomość...")

    # Pętla nasłuchująca
    while True:
        # Wczytanie danych otrzymanych od klienta
        (data, addr) = UDPSock.recvfrom(buf)
        
        # Przesłanie danych do odszyfrowania
        plaintext = decrypt(data, useClientPKI, useDHKey, serverSecret)

        # Sprawdzenie, czy klient nie użył polecenia, np. addPKI lub addDH, jeżeli użył to wiadomość jest zastępowana komunikatem
        result = ct.check_server_command(plaintext)
        
        msg = str(plaintext, 'utf-8')
        
        # Przetwarzanie poleceń
        if result == 0:
            # Brak szyfrowania
            break
            
        # Jeżeli szyfrowanie jest aktywne, otrzymana wiadomość była zaszyfrowana
        if useClientPKI == True or useDHKey == True:
            print("Otrzymałem zaszyfrowaną wiadomość: " + msg)
        else:
            print("Otrzymałem wiadomość: " + msg)
        


    UDPSock.close()
    os._exit(0) 

if __name__ == '__main__': 
    main() 


