Guest User

Untitled

a guest
May 30th, 2017
371
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.30 KB | None | 0 0
  1. #include <rsa.h>
  2. #include <osrng.h>
  3. #include <pssr.h>
  4. #include <iostream>
  5.  
  6. using namespace CryptoPP;
  7. using namespace std;
  8.  
  9. class MyPrivKey : public RSA::PrivateKey {
  10. public:
  11.     template<typename... Args>
  12.     MyPrivKey(Args&&... args) : RSA::PrivateKey(std::forward<Args>(args)...) {}
  13.    
  14.     Integer CalculateInverse(RandomNumberGenerator &rng, const Integer &x) const override {
  15.       // Never called :'(
  16.       return RSA::PrivateKey::CalculateInverse(rng, x);
  17.     }
  18. };
  19.  
  20.  
  21. int main() {
  22.  
  23.   ///////////////////////////////////////
  24.   // Pseudo Random Number Generator
  25.   AutoSeededRandomPool rng;
  26.  
  27.   ///////////////////////////////////////
  28.   // Generate Parameters
  29.   InvertibleRSAFunction params;
  30.   params.GenerateRandomWithKeySize(rng, 1536);
  31.  
  32.   ///////////////////////////////////////
  33.   // Generated Parameters
  34.   Integer n = params.GetModulus();
  35.   Integer p = params.GetPrime1();
  36.   Integer q = params.GetPrime2();
  37.   Integer d = params.GetPrivateExponent();
  38.   Integer e = params.GetPublicExponent();
  39.  
  40.   ///////////////////////////////////////
  41.   // Dump
  42.   cout << "RSA Parameters:" << endl;
  43.   cout << " n: " << n << endl;
  44.   cout << " p: " << p << endl;
  45.   cout << " q: " << q << endl;
  46.   cout << " d: " << d << endl;
  47.   cout << " e: " << e << endl;
  48.   cout << endl;
  49.  
  50.   ///////////////////////////////////////
  51.   // Create Keys
  52.   auto privateKey = new MyPrivKey(params);
  53.   RSA::PublicKey publicKey(params);
  54.  
  55.  
  56.   // Message
  57.   string message = "Yoda said, Do or Do Not. There is no try.";
  58.  
  59.   // Signer object
  60.   RSASS<PSS, SHA1>::Signer signer(*privateKey);
  61.     delete privateKey;
  62.  
  63.   // Create signature space
  64.   size_t length = signer.MaxSignatureLength();
  65.   SecByteBlock signature(length);
  66.  
  67.   // Sign message
  68.   length = signer.SignMessage(rng, (const byte*) message.c_str(),
  69.       message.length(), signature);
  70.  
  71.   // Resize now we know the true size of the signature
  72.   signature.resize(length);
  73.  
  74.   // Verifier object
  75.   RSASS<PSS, SHA1>::Verifier verifier(publicKey);
  76.  
  77.   // Verify
  78.   bool result = verifier.VerifyMessage((const byte*)message.c_str(),
  79.       message.length(), signature, signature.size());
  80.  
  81.   // Result
  82.   if(true == result) {
  83.       cout << "Signature on message verified" << endl;
  84.   } else {
  85.       cout << "Message verification failed" << endl;
  86.   }
  87.  
  88.   return 0;
  89. }
Advertisement
Add Comment
Please, Sign In to add comment