Exemple #1
0
def runClient(port, dest):
    print("Trying " + str(dest) + ":" + str(port) + " ...")

    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    server_address = (dest, port)

    try:
        sock.connect(server_address)
    except socket.error as e:
        WriteErrorLog(str(e))
    try:
        modulo = recv_msg(sock)
        print ("Reception du modulo " + modulo)
        base = recv_msg(sock)
        print("Reception de la base " + base)
        b = entierAleatoire(int(modulo))
        print("Generation de la cle privee " + str(b))
        B = exponentiationModulaire(int(base), b, int(modulo))
        A = recv_msg(sock)
        print("Reception de la cle publique serveur " + A)
        send_msg(sock, str(B))
        print("Envoi de la cle publique " + str(B))
        k = exponentiationModulaire(int(A), b, int(modulo))
        print("Obtention de la cle partagee " + str(k))
    finally:
        sock.close()
Exemple #2
0
def runServer(port):
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    server_address = ("0.0.0.0", port)
    print('starting up on {} port {}'.format(*server_address))
    try:
        sock.bind(server_address)
        sock.listen(1)
    except socket.error as e:
        WriteErrorLog(str(e))
    while True:
        print('waiting for a connection')
        m = trouverNombrePremier()
        n = entierAleatoire(m)
        a = entierAleatoire(m)
        connection, client_address = sock.accept()
        try:
            print('connection from', client_address)

            while True:
                print ("Envoi du modulo " + str(m))
                print ("Envoi de la base " + str(n))
                send_msg(connection, str(m))
                send_msg(connection, str(n))
                print("Generation de la cle privee " + str(a))
                A = exponentiationModulaire(n, a, m)
                send_msg(connection, str(A))
                print("Envoi de la cle publique " + str(A))
                B = recv_msg(connection)
                print("Reception de la cle publique client " + B)
                k = exponentiationModulaire(int(B), a, m)
                print("Obtention de la cle partagee " + str(k))
                data = connection.recv(1024)
                print (data)
                if not data:
                    break
        finally:
            connection.close()
Exemple #3
0
        while True:
            (s, address) = serversocket.accept()
            i += 1
            print(str(i) + "e connexion au serveur")

            print("----------")
            m = trouverNombrePremier()
            n = entierAleatoire(m)
            print("Envoi du modulo: " + str(m))
            print("Envoi de la base: " + str(n))
            print("----------")
            send_msg(s, str(m))
            send_msg(s, str(n))

            serSecretKey = entierAleatoire(m)
            serPublicKey = exponentiationModulaire(n, serSecretKey, m)
            print("Cle privée: " + str(serSecretKey))
            print("Cle publique a envoyer: " + str(serPublicKey))
            send_msg(s, str(serPublicKey))
            pubKeyCli = int(recv_msg(s))
            print("Cle publique recu: " + str(pubKeyCli))
            servSharedKey = exponentiationModulaire(pubKeyCli, serSecretKey, m)
            print("Cle partagee: " + str(servSharedKey))
            print("----------")
            s.close()

    else:  #mode client
        destination = (opts.dest, opts.port)
        s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        s.connect(destination)
Exemple #4
0
    i = 0
    while True:
        (s, address) = serversocket.accept()
        i += 1
        print(str(i) + " connexion to server")

        modulo = trouverNombrePremier()
        base = entierAleatoire(modulo)
        send_msg(s, str(modulo))
        print("Send modulo: " + str(modulo))

        send_msg(s, str(base))
        print("Send base: " + str(base))

        privateKey = entierAleatoire(modulo)
        publicKey = exponentiationModulaire(base, privateKey, modulo)

        send_msg(s, str(publicKey))
        publicKeyRcv = int(recv_msg(s))

        sharedKey = exponentiationModulaire(publicKeyRcv, privateKey, modulo)

        print("Private key: " + str(privateKey))
        print("Public key: " + str(publicKey))
        print("Public key received: " + str(publicKeyRcv))
        print("Shared key: " + str(sharedKey))

        s.close()

else:
    adress_destination = "localhost"
Exemple #5
0
            # Le serveur prépare et envoie le modulo et la base encodé en UTF-8
            a = trouverNombrePremier()
            b = entierAleatoire(a)
            print(f'Envoi du modulo: {a}')
            print(f'Envoi de la base: {b}')
            print("--------------------------------------------------------")

            send_msg(clientSocket, str(a))
            send_msg(clientSocket, str(b))

            # Le serveur génère une clé privée
            cle_privee_serveur = entierAleatoire(a)
            print(f'Clé privée : {cle_privee_serveur}')

            # Le serveur calcule la clé publique
            cle_publique_serveur = exponentiationModulaire(
                b, cle_privee_serveur, a)
            print(f'Clé publique à envoyer : {cle_publique_serveur}')

            # Le serveur envoie la clé publique au client
            send_msg(clientSocket, str(cle_publique_serveur))

            # Le serveur recoit la clé publique du client
            cle_publique_recue = int(recv_msg(clientSocket))
            print(f'Clé publique recue: {cle_publique_recue}')

            # Le serveur calcule la clé partagée
            cle_partagee_serveur = exponentiationModulaire(
                cle_publique_recue, cle_privee_serveur, a)
            print(f'Clé partagée: {cle_partagee_serveur}')

            clientSocket.close()
Exemple #6
0
def main():
    if opts.destination and opts.serveur:
        write_exception(
            Exception(
                "L'application ne peut pas utiliser -d et -s simultanément."))

    if opts.port == -1:
        write_exception(Exception("L'option -p est obligatoire."))

    #TODO: retourner un message d'erreur significatif s'il y a une erreur
    #TODO: chaque message d'erreur (et sa date et heure) doit être écrit dans le fichier Error.log
    try:
        if opts.serveur:  # mode serveur
            print(
                "###############################################################"
            )
            print("Demarrage du serveur ...")
            serversocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
            serversocket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
            serversocket.bind(("localhost", opts.port))
            serversocket.listen(5)
            print(f"Ecoute sur le port : {opts.port}")

            while True:
                (s, address) = serversocket.accept()
                print('1e connexion au serveur')
                print(
                    '----------------------------------------------------------'
                )

                #create a,b p
                a = trouverNombrePremier()
                b = entierAleatoire(a)
                p = entierAleatoire(a)

                #create public key
                server_public_key = exponentiationModulaire(b, p, a)

                print(f"Envoi du modulo : {a}")
                print(f"Envoi de la base : {b}")
                print(
                    '----------------------------------------------------------'
                )
                print(f'Cle privee : {p}')
                print(f'Cle publique a envoyer : {server_public_key}')

                send_msg(s, str(a))  # send a
                send_msg(s, str(b))  # send b
                send_msg(s, str(server_public_key))  # send public key

                # receive client public key
                client_public_key = int(recv_msg(s))

                print(f'Cle publique recue : {client_public_key}')

                #calculate shared key
                shared_key = exponentiationModulaire(client_public_key, p, a)
                print(f"Cle partagee : {shared_key}")
                print("au serveur")

                print(
                    "###############################################################"
                )
                s.close()

        else:  # mode client
            if not opts.destination:
                write_exception(
                    Exception(
                        "Le client doit spécifier une destination en utilisant -d."
                    ))

            print(
                "###############################################################"
            )
            destination = (opts.destination, opts.port)

            s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
            s.connect(destination)

            a = int(recv_msg(s))  # receive a
            print(f"Reception du modulo : {a}")
            b = int(recv_msg(s))  # receive b
            print(f'Reception de la base : {b}')

            print('----------------------------------------------------------')
            #create q
            q = entierAleatoire(a)

            print(f'Cle privee : {q}')
            #Create public key
            client_public_key = exponentiationModulaire(b, q, a)

            print(f'Cle publique a envoyer : {client_public_key}')

            # receive server public key
            server_public_key = int(recv_msg(s))
            print(f'Cle publique recue : {server_public_key}')

            #send public key
            send_msg(s, str(client_public_key))

            #calculate shared key
            shared_key = exponentiationModulaire(server_public_key, q, a)
            print(f"Cle partagee : {shared_key}")

            print(
                "###############################################################"
            )
            s.close()
    except Exception as e:
        write_exception(e)