X-Git-Url: http://git.euphorik.ch/?a=blobdiff_plain;f=src%2FRsaCrt.h;h=6e93e6bd25269d646e69bc4eb0b0905a6a09c929;hb=5b2785dd710151d81e6f6af4fd6ae48521068e41;hp=29bc4b91d34a6e2b183700f429d3aa80d4a672ca;hpb=7975d02c6c1ee679a236087e86955c086f1a9a8e;p=crypto_lab3.git diff --git a/src/RsaCrt.h b/src/RsaCrt.h index 29bc4b9..6e93e6b 100644 --- a/src/RsaCrt.h +++ b/src/RsaCrt.h @@ -1,20 +1,43 @@ #ifndef RSACRT_H #define RSACRT_H +#include +#include + #include +#include "Rsa.h" + class RsaCrt { public: - RsaCrt(); - - struct KeyPrivCRT { + struct KeyPriv { mpz_class p; mpz_class q; mpz_class dp; mpz_class dq; mpz_class qInv; }; + + /** + * Generate a pair of keys (public, private). + */ + static std::pair generateRSAKeys(uint exponent, uint keySizeBits); + + /** + * m must not be greater or equal than kPriv.n. + * @param m the message to sign. No padding is used. + */ + static mpz_class sign(const mpz_class& m, const KeyPriv& kPriv); + + /** + * Sp is altered by flipping its 42nd bit. + * @param m the message to sign. No padding is used. + */ + static mpz_class signWithFaultySp(const mpz_class& m, const KeyPriv& kPriv); + +private: + static mpz_class sign(const mpz_class& m, const KeyPriv& kPriv, bool withError); }; #endif