12 Tests::Tests(uint keySizeBits
, uint rsaPublicExponent
) :
13 KEY_SIZE_BITS(keySizeBits
),
14 RSA_PUBLIC_EXPONENT(rsaPublicExponent
)
18 void Tests::runTests()
20 if (this->rsaStandard())
21 cout
<< "RSA standard OK" << endl
;
23 cout
<< "RSA standard failed!" << endl
;
26 cout
<< "RSA CRT OK" << endl
;
28 cout
<< "RSA CRT failed!" << endl
;
31 void Tests::runTimeMeasures()
34 const int nbKeys
= 20; // Number of different generated key.
39 for (int k
= 0; k
< nbKeys
; ++k
)
41 timeRsaStd
+= timeSignRsaStd(N
);
42 timeRsaCRT
+= timeSignRsaCRT(N
);
45 cout
<< N
* nbKeys
<< " x RSA standard: " << timeRsaStd
<< " ms" << endl
;
46 cout
<< N
* nbKeys
<< " x RSA CRT: " << timeRsaCRT
<< " ms" << endl
;
47 cout
<< "Speedup: " << (double(timeRsaStd
) / double(timeRsaCRT
)) << endl
;
50 bool Tests::rsaStandard()
52 const auto& keys
= RsaStd::generateRSAKeys(RSA_PUBLIC_EXPONENT
, KEY_SIZE_BITS
);
53 const auto& kPub
= keys
.first
;
54 const auto& kPriv
= keys
.second
;
57 mpz_class message
= kPriv
.n
;
58 mpz_class signature
= RsaStd::sign(message
, kPriv
);
59 if (Rsa::verifySignature(message
, signature
, kPub
)) // Must not be able to signe message greater than kPriv.n.
64 mpz_class message
= kPriv
.n
- 1;
65 mpz_class signature
= RsaStd::sign(message
, kPriv
);
66 if (!Rsa::verifySignature(message
, signature
, kPub
) || Rsa::verifySignature(message
+ 1, signature
, kPub
))
71 mpz_class message
= kPriv
.n
/ 2;
72 mpz_class signature
= RsaStd::sign(message
, kPriv
);
73 if (!Rsa::verifySignature(message
, signature
, kPub
) || Rsa::verifySignature(message
+ 1, signature
, kPub
))
82 const auto& keys
= RsaCrt::generateRSAKeys(RSA_PUBLIC_EXPONENT
, KEY_SIZE_BITS
);
83 const auto& kPub
= keys
.first
;
84 const auto& kPriv
= keys
.second
;
87 mpz_class message
= kPub
.n
;
88 mpz_class signature
= RsaCrt::sign(message
, kPriv
);
89 if (Rsa::verifySignature(message
, signature
, kPub
)) // Must not be able to signe message greater than kPub.n.
94 mpz_class message
= kPub
.n
- 1;
95 mpz_class signature
= RsaCrt::sign(message
, kPriv
);
96 if (!Rsa::verifySignature(message
, signature
, kPub
) || Rsa::verifySignature(message
+ 1, signature
, kPub
))
101 mpz_class message
= kPub
.n
/ 2;
102 mpz_class signature
= RsaCrt::sign(message
, kPriv
);
103 if (!Rsa::verifySignature(message
, signature
, kPub
) || Rsa::verifySignature(message
+ 1, signature
, kPub
))
110 int Tests::timeSignRsaStd(int N
)
113 const auto& keys
= RsaStd::generateRSAKeys(RSA_PUBLIC_EXPONENT
, KEY_SIZE_BITS
);
115 mpz_class message
= Rand::randSize(KEY_SIZE_BITS
/ 2);
116 for (int i
= 0; i
< N
; i
++)
117 RsaStd::sign(message
, keys
.second
);
122 int Tests::timeSignRsaCRT(int N
)
125 const auto& keys
= RsaCrt::generateRSAKeys(RSA_PUBLIC_EXPONENT
, KEY_SIZE_BITS
);
127 mpz_class message
= Rand::randSize(KEY_SIZE_BITS
/ 2);
128 for (int i
= 0; i
< N
; i
++)
129 RsaCrt::sign(message
, keys
.second
);