crypto: allow to set generated RSA key size

This commit is contained in:
Adrien Béraud committed 2014-12-05 11:28:16 -05:00
1 parent b5884c079d
commit 09cfd86a09
2 files changed
+7 -4

No files matched your search

+3 -1
View File
@@ -102,8 +102,10 @@ struct PrivateKey
/**
* Generate a new RSA key pair
* @param key_length : size of the modulus in bits
* Recommended values: 2048, 4096, 8192
*/
static PrivateKey generate();
static PrivateKey generate(unsigned key_length = 2048);
private:
PrivateKey(const PrivateKey&) = delete;
+4 -3
View File
@@ -376,16 +376,17 @@ Certificate::getPublicKey() const
}
PrivateKey
PrivateKey::generate()
PrivateKey::generate(unsigned key_length)
{
if (gnutls_global_init() != GNUTLS_E_SUCCESS)
throw std::runtime_error("Can't initialize GnuTLS.");
gnutls_x509_privkey_t key;
if (gnutls_x509_privkey_init(&key) != GNUTLS_E_SUCCESS)
throw std::runtime_error("Can't initialize private key.");
if (gnutls_x509_privkey_generate(key, GNUTLS_PK_RSA, 2048, 0) != GNUTLS_E_SUCCESS) {
int err = gnutls_x509_privkey_generate(key, GNUTLS_PK_RSA, key_length, 0);
if (err != GNUTLS_E_SUCCESS) {
gnutls_x509_privkey_deinit(key);
throw std::runtime_error("Can't initialize RSA key pair.");
throw std::runtime_error(std::string("Can't generate RSA key pair: ") + gnutls_strerror(err));
}
return PrivateKey{key};
}