X-Git-Url: http://git.euphorik.ch/?p=crypto_lab3.git;a=blobdiff_plain;f=src%2FRsa.cpp;fp=src%2FRsa.cpp;h=23db34ccaa9186d667b771eff0b373a5a988cb4f;hp=be219980b16a86d96e12e99d5f1a6661ca8a100f;hb=91989c2627abc2cdf511f17169e4f862dc55e838;hpb=7975d02c6c1ee679a236087e86955c086f1a9a8e diff --git a/src/Rsa.cpp b/src/Rsa.cpp index be21998..23db34c 100644 --- a/src/Rsa.cpp +++ b/src/Rsa.cpp @@ -1,47 +1,11 @@ #include "Rsa.h" +#include using namespace std; -#include "Rand.h" -#include "Utils.h" - -pair 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; -} - bool Rsa::verifySignature(const mpz_class& m, const mpz_class& sig, const KeyPub& kPub) { - mpz_class mPrime; - mpz_powm_sec(mPrime.get_mpz_t(), sig.get_mpz_t(), kPub.e.get_mpz_t(), kPub.n.get_mpz_t()); - return m == mPrime; + mpz_class m2; + mpz_powm_sec(m2.get_mpz_t(), sig.get_mpz_t(), kPub.e.get_mpz_t(), kPub.n.get_mpz_t()); + return m == m2; }