static gnutls_x509_privkey_t
infinoted_startup_load_key(InfinotedLog* log,
                           gboolean create_key,
                           const gchar* key_file,
                           GError** error)
{
  gnutls_x509_privkey_t key;

  if(create_key == TRUE)
  {
    if(infinoted_util_create_dirname(key_file, error) == FALSE)
      return NULL;

    /* TODO: Open the key file beforehand */

    infinoted_log_info(log, _("Generating 4096 bit RSA private key..."));
    key = inf_cert_util_create_private_key(GNUTLS_PK_RSA, 4096, error);

    if(key == NULL)
      return NULL;

    if(inf_cert_util_write_private_key(key, key_file, error) == FALSE)
    {
      gnutls_x509_privkey_deinit(key);
      return NULL;
    }
  }
  else
  {
    key = inf_cert_util_read_private_key(key_file, error);
  }

  return key;
}
Beispiel #2
0
void Gobby::CertificateManager::set_private_key(gnutls_x509_privkey_t key,
                                                const char* filename,
                                                const GError* error)
{
	if(error != NULL)
	{
		g_assert(key == NULL);

		set_private_key(NULL, error);
	}
	else
	{
		GError* local_error = NULL;
		if(filename != NULL)
		{
			m_conn_key_file.block();
			m_preferences.security.key_file = filename;
			m_conn_key_file.unblock();

			if(key != NULL)
			{
				inf_cert_util_write_private_key(
					key, filename, &local_error);
			}
		}

		if(local_error != NULL)
		{
			set_private_key(NULL, local_error);
			if(key != NULL) gnutls_x509_privkey_deinit(key);
			g_error_free(local_error);
		}
		else
		{
			set_private_key(key, NULL);
		}
	}
}