Exemple #1
0
int main(int argc, const char *argv[])
{
    
    // monty pythons!
    string text = "Are you suggesting coconuts migrate?";
    AutoSeededRandomPool rng;

    InvertibleRSAFunction keys;
    keys.GenerateRandomWithKeySize(rng, 384);

    RSASS<PKCS1v15, SHA>::Signer signer(keys);

    byte* signature = new byte[signer.MaxSignatureLength()];
    if(NULL == signature) { return -1; }

    // Sign...
    size_t length = signer.SignMessage(rng, (const byte*) text.c_str(),
                                       text.length(), signature);

    RSASS<PKCS1v15, SHA>::Verifier verifier(signer);

    bool result = verifier.VerifyMessage((const byte*)text.c_str(),
                                         text.length(), signature, length);

    return 0;
}
Exemple #2
0
    unsigned char* CreatePrivateKey(size_t* len, size_t* pubLen) {
        AutoSeededRandomPool rand;

        InvertibleRSAFunction params;
        params.GenerateRandomWithKeySize(rand,4096);
        const Integer& modulus = params.GetModulus();
        const Integer& exponent = params.GetPublicExponent();
        const Integer& private_exponent = params.GetPrivateExponent();
        size_t dlen = 4+modulus.MinEncodedSize()+4+exponent.MinEncodedSize()+4+private_exponent.MinEncodedSize();
        unsigned char* izard = new unsigned char[dlen];
        unsigned char* str = izard;
        uint32_t cval = modulus.MinEncodedSize();
        memcpy(str,&cval,4);
        str+=4;
        modulus.Encode(str,modulus.MinEncodedSize());
        str+=modulus.MinEncodedSize();
        cval = exponent.MinEncodedSize();
        memcpy(str,&cval,4);
        str+=4;
        exponent.Encode(str,exponent.MinEncodedSize());
        str+=exponent.MinEncodedSize();
        cval = private_exponent.MinEncodedSize();
        memcpy(str,&cval,4);
        str+=4;
        *pubLen = ((size_t)str-(size_t)izard);
        private_exponent.Encode(str,private_exponent.MinEncodedSize());
        str+=private_exponent.MinEncodedSize();
        *len = dlen;
        return izard;
    }
Exemple #3
0
void GenerateKeyPair()
{
	// Generate keys
    AutoSeededRandomPool rng;

    InvertibleRSAFunction parameters;
    parameters.GenerateRandomWithKeySize( rng, 1024 );

    RSA::PrivateKey privateKey( parameters );
    RSA::PublicKey publicKey( parameters );
	
	SaveKey(privateKey, "priv.key");
	SaveKey(publicKey, "pub.key");
}
Exemple #4
0
pair<string /*privKey*/, string /*pubKey*/> GenerateKeys() {
    AutoSeededRandomPool rng;
    InvertibleRSAFunction params;
    params.GenerateRandomWithKeySize(rng, DEFAULT_ASSYMETRICAL_KEY_LENGTH);

    RSA::PrivateKey privateKey(params);
    RSA::PublicKey publicKey(params);


    string privKey;
    string pubKey;
    privateKey.Save(StringSink(privKey).Ref());
    publicKey.Save(StringSink(pubKey).Ref());

    return pair<string, string>(privKey, pubKey);
}
void BCipher::generateRSAkeys(){
	std::cout<<"Generating RSA keys for receiver..."<<std::endl;
	// Generate keys
	AutoSeededRandomPool rng;

	InvertibleRSAFunction params;
	params.GenerateRandomWithKeySize(rng, 3072);

	RSA::PrivateKey privateKey(params);
	RSA::PublicKey publicKey(params);
{
        FileSink output("receiver_private.dat");
        privateKey.DEREncode(output);
}
{
        FileSink output("receiver_public.dat");
        publicKey.DEREncode(output);
}
        std::cout<<"Produce receiver_private.dat and receiver_public.dat" <<std::endl;
}
int
main(int argc, char ** argv)
{
	if (argc != 2) {
		cout << "Usage: keygen <outputname>" << endl;
		return -1;
	}
	AutoSeededRandomPool rng;
	InvertibleRSAFunction params;
	params.GenerateRandomWithKeySize(rng, 3072);
	RSA::PublicKey pubkey(params);
	RSA::PrivateKey privkey(params);

	Integer m = params.GetModulus();
	Integer p = params.GetModulus();
	Integer q = params.GetModulus();
	Integer priv = params.GetPrivateExponent();
	Integer pub = params.GetPublicExponent();

	string privname = string(argv[1]).append(".priv");
	string pubname = string(argv[1]).append(".pub");

	CryptoEngine::pubkeyToFile(pubkey, pubname);
	CryptoEngine::privkeyToFile(privkey, privname);

	cout << "Loading and verifying..." << endl;

	RSA::PrivateKey newpriv = CryptoEngine::privkeyFromFile(privname);
	RSA::PublicKey newpub = CryptoEngine::pubkeyFromFile(pubname);

	cout << (m == newpriv.GetModulus() ? "TRUE" : "FALSE") << endl;
	cout << (priv == newpriv.GetPrivateExponent() ? "TRUE" : "FALSE") << endl;
	cout << (pub == newpriv.GetPublicExponent() ? "TRUE" : "FALSE") << endl;

	cout << (m == newpub.GetModulus() ? "TRUE" : "FALSE") << endl;
	cout << (pub == newpub.GetPublicExponent() ? "TRUE" : "FALSE") << endl;

	return 0;
}
Exemple #7
0
void cKeysStorage::GenerateRSAKey(unsigned int keyLength, std::string fileName)
{
	using namespace CryptoPP;
	AutoSeededRandomPool rng;
	// Generate Parameters
	InvertibleRSAFunction params;
	params.GenerateRandomWithKeySize(rng, keyLength);
	
	// Create Keys
	CryptoPP::RSA::PrivateKey privateKey(params);
	CryptoPP::RSA::PublicKey publicKey(params);
	
	//mPrvKeys.push_back(privateKey);
	mPrvKeys[mCurrentKey] = privateKey;
	std::cout << "start saving pub file" << std::endl;
	std::cout << "generated file: " << fileName << std::endl;
	savePubFile(mCurrentKey, publicKey, fileName);
	
	mCurrentKey++;
	
	std::cout << "end of GenerateRSAKey" << std::endl;
}
RSAKeys genRSAKeys(){
  AutoSeededRandomPool rnd;
  InvertibleRSAFunction params;
  params.GenerateRandomWithKeySize(rnd, 16000);

  RSAKeys keys;
  keys.privateKey = new RSA::PrivateKey(params);
  keys.publicKey = new RSA::PublicKey(params);

  /*
  //Test code
  saveRSAPriKey(*(keys.privateKey), "private");
  saveRSAPubKey(*(keys.publicKey), "public");

  
  ifstream ipub("private");
  string pubKey;
  getline(ipub, pubKey, (char)ipub.eof());
  ipub.close();
  ofstream opub("private1");
  opub << pubKey;
  opub.close();

  RSA::PublicKey pubK;
  RSA::PrivateKey privK;
  loadRSAPubKey(pubK, "public");
  loadRSAPriKey(privK, "private1");

  string plain = "RSA Encryption";

  string cipher = RSAEncrypt(pubK, plain);
  cout << cipher << endl;
  string recovered = RSADecrypt(privK, cipher);
  cout << recovered << endl;
  */

  return keys;
}
Exemple #9
0
int main(int argc, char** argv) {
  using namespace CryptoPP;
  namespace po = boost::program_options;

  std::string publicKeyName, privateKeyName;
  size_t keyLength;


  po::options_description desc("Allowed Options");
  desc.add_options()
    ("help", "produce help message")
    ("length,l", po::value<size_t>(&keyLength)->default_value(1024), "set key length")
    ("pubKey,r", po::value<std::string>(&publicKeyName)->default_value("key.pub"), "set public key name")
    ("privKey,u", po::value<std::string>(&privateKeyName)->default_value("key.pem"), "set private key name")
    ;

  po::variables_map vm;
  po::store(po::parse_command_line(argc, argv, desc), vm);
  po::notify(vm);    
  
  if (vm.count("help")) {
    std::cout << desc << "\n";
    return 1;
  }
  
  AutoSeededRandomPool prng;

  InvertibleRSAFunction parameters;
  parameters.GenerateRandomWithKeySize(prng, keyLength);

  RSA::PrivateKey privateKey(parameters);
  RSA::PublicKey publicKey(parameters);

  SaveKey(publicKeyName, publicKey);
  SaveKey(privateKeyName, privateKey);
}