-#include "Rand.h"
-#include "Utils.h"
-
-pair<Rsa::KeyPub, Rsa::KeyPriv> Rsa::generateRSAKeys(uint exponent, uint keySizeBits)
-{
- mpz_class p, q, phi;
- KeyPub kPub;
- KeyPriv kPriv;
-
- do
- {
- kPub.e = exponent;
- p = Rand::randPrime(keySizeBits / 2);
- q = Rand::randPrime(keySizeBits / 2);
-
- kPriv.n = kPub.n = p * q;
- phi = (p - 1) * (q - 1);
-
- } while (mpz_invert(kPriv.d.get_mpz_t(), kPub.e.get_mpz_t(), phi.get_mpz_t()) == 0);
-
-// For debugging purpose.
-// print("p", p);
-// print("q", q);
-// print("n", kPub.n);
-// print("phi", phi);
-// print("d", kPriv.d);
-
- return make_pair(kPub, kPriv);
-}
-
-mpz_class Rsa::sign(const mpz_class& m, const KeyPriv& kPriv)
-{
- mpz_class result;
- mpz_powm_sec(result.get_mpz_t(), m.get_mpz_t(), kPriv.d.get_mpz_t(), kPriv.n.get_mpz_t());
- return result;
-}
-