be219980b16a86d96e12e99d5f1a6661ca8a100f
8 pair
<Rsa::KeyPub
, Rsa::KeyPriv
> Rsa::generateRSAKeys(uint exponent
, uint keySizeBits
)
17 p
= Rand::randPrime(keySizeBits
/ 2);
18 q
= Rand::randPrime(keySizeBits
/ 2);
20 kPriv
.n
= kPub
.n
= p
* q
;
21 phi
= (p
- 1) * (q
- 1);
23 } while (mpz_invert(kPriv
.d
.get_mpz_t(), kPub
.e
.get_mpz_t(), phi
.get_mpz_t()) == 0);
25 // For debugging purpose.
28 // print("n", kPub.n);
30 // print("d", kPriv.d);
32 return make_pair(kPub
, kPriv
);
35 mpz_class
Rsa::sign(const mpz_class
& m
, const KeyPriv
& kPriv
)
38 mpz_powm_sec(result
.get_mpz_t(), m
.get_mpz_t(), kPriv
.d
.get_mpz_t(), kPriv
.n
.get_mpz_t());
42 bool Rsa::verifySignature(const mpz_class
& m
, const mpz_class
& sig
, const KeyPub
& kPub
)
45 mpz_powm_sec(mPrime
.get_mpz_t(), sig
.get_mpz_t(), kPub
.e
.get_mpz_t(), kPub
.n
.get_mpz_t());