def power(a, b, p):
    if (b == 1):
        return a
    else:
        return pow(a,b,p)


def main():

    print("Algorytm Diffiego-Hellmana, rozdział 8")
    print()

    P = 0; G = 0; x = 0; a = x;
    y = 0; b = 0;
    ka = 0; kb = 0;
  
    # Obie strony wykorzystają te same wartości P i G
    P = 23 # Ustalenie wartości P (liczba pierwsza)
    print("P:", P)  
  
    G = 9 # Pierwiastek pierwotny z P
    print("G:", G)  
  
    # Alicja wybiera swój klucz prywatny
    a = 4 # a to klucz prywatny Alicji
    print("Klucz prywatny Alicji:", a) 
    x = power(G, a, P) # Generowanie klucza
      
    # Bob wybiera swój klucz prywatny
    b = 3 # b to klucz prywatny Boba
    print("Klucz prywatny Boba:", b) 
    y = power(G, b, P) # Generowanie klucza
  
    # Generowanie tajnego klucza po wymianie wartości x i y
    ka = power(y, a, P) # Tajny klucz Alicji 
    kb = power(x, b, P) # Tajny klucz Boba
      
    print("Tajny klucz Alicji:", ka) 
    print("Tajny klucz Boba:", kb) 

    print()
      


if __name__ == '__main__':
    main()
    
