
(*
Mathematica import-file, welches die Funktionen 

NextPrime, GoodPrime, MakeKey

zur Verfuegung stellt. 

NextPrime[n] liefert die kleinste Primzahl p, welche p >= m erfuellt.

GoodPrime[e, n] liefert (im Hinblick auf Schluesselerzeugung fuer RSA)
                die kleinste Primzahl p, welche p >= n erfuellt,
                und fuer welche n-1 und e teilerfremd sind.

MakeKey[e, p, q] liefert eine Liste {e, n, d} bestehend aus dem oeffentlichen
                 Schluessel e, n   (e wird einfach uebernommen, n = p*q),
                 und dem privaten Schluessel d. Es wird ungeprueft angenommen,
                 das das Tripel {e,p,q} fuer die Schluesselerzeugung geeignet 
                 ist.
*) 

Clear[NextPrime, GoodPrime, MakeKey];

NextPrime[n_] := n /; PrimeQ[n];
NextPrime[n_] := NextPrime[n + 1];

GoodPrime[e_, n_] := n /; ((GCD[n - 1, e] === 1) && PrimeQ[n]);
GoodPrime[e_, n_] := GoodPrime[3,NextPrime[n+1]];

MakeKey[e_, p_, q_] := 
{ 
	e, p*q , 
	Mod[ ExtendedGCD[e, (p-1)(q-1)][[2,1]], (p-1)(q-1) ]
};


