#include "RsaStd.h"
+#include <iostream>
using namespace std;
#include "Rand.h"
kPriv.n = kPub.n = p * q;
phi = (p - 1) * (q - 1);
+ // d = e^-1 (mode phi).
} while (mpz_invert(kPriv.d.get_mpz_t(), kPub.e.get_mpz_t(), phi.get_mpz_t()) == 0); // If 'd' is not invertible we try another primes.
-// For debugging purpose.
-// Utils::print("p", p);
-// Utils::print("q", q);
-// Utils::print("n", kPub.n);
-// Utils::print("phi", phi);
-// Utils::print("d", kPriv.d);
-
return make_pair(kPub, kPriv);
}
mpz_class RsaStd::sign(const mpz_class& m, const KeyPriv& kPriv)
{
mpz_class result;
+
+ // m^d (mod n).
mpz_powm_sec(result.get_mpz_t(), m.get_mpz_t(), kPriv.d.get_mpz_t(), kPriv.n.get_mpz_t());
return result;
}