kdeconnect-kde/core/kdeconnectconfig.h
Albert Vaca Cintora 9a39eaa237 Use EC keys instead of RSA
Use smaller and safer EC keys, replacing 2048 bit RSA.

NID_X9_62_prime256v1 is roughly as secure as a 3072 bit RSA key, but way shorter. 
Since we have to embed the key in the identity packet that is sent over UDP and
some stacks aren't happy with large UDP messages (notably: macos), I switched to
EC instead of to a longer RSA key.

This seems to be compatible with other clients even on older systems like Android 5.0.

I did stick with NID_X9_62_prime256v1 because stronger EC like NID_secp384r1 failed
the handshake (I didn't investigate why).

We now store the kind of key in the config, so we can know which kind of key we are loading.
2024-05-19 10:04:43 +00:00

83 lines
2.3 KiB
C++

/**
* SPDX-FileCopyrightText: 2015 Albert Vaca <albertvaka@gmail.com>
*
* SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
*/
#ifndef KDECONNECTCONFIG_H
#define KDECONNECTCONFIG_H
#include <QDir>
#include <QSslKey>
#include "deviceinfo.h"
#include "kdeconnectcore_export.h"
class QSslCertificate;
class KDECONNECTCORE_EXPORT KdeConnectConfig
{
public:
static KdeConnectConfig &instance();
/*
* Our own info
*/
QString deviceId();
QString name();
DeviceType deviceType();
QSslKey privateKey();
QSslCertificate certificate();
DeviceInfo deviceInfo();
QSsl::KeyAlgorithm privateKeyAlgorithm();
QString privateKeyPath();
QString certificatePath();
void setName(const QString &name);
/*
* Trusted devices
*/
QStringList trustedDevices(); // list of ids
void removeTrustedDevice(const QString &id);
void addTrustedDevice(const DeviceInfo &deviceInfo);
void updateTrustedDeviceInfo(const DeviceInfo &deviceInfo);
DeviceInfo getTrustedDevice(const QString &id);
QSslCertificate getTrustedDeviceCertificate(const QString &id);
void setDeviceProperty(const QString &deviceId, const QString &name, const QString &value);
QString getDeviceProperty(const QString &deviceId, const QString &name, const QString &defaultValue = QString());
// Custom devices
void setCustomDevices(const QStringList &addresses);
QStringList customDevices() const;
/*
* Paths for config files, there is no guarantee the directories already exist
*/
QDir baseConfigDir();
QDir deviceConfigDir(const QString &deviceId);
QDir pluginConfigDir(const QString &deviceId, const QString &pluginName); // Used by KdeConnectPluginConfig
#ifdef Q_OS_MAC
/*
* Get private DBus Address when use private DBus
*/
QString privateDBusAddressPath();
QString privateDBusAddress();
#endif
private:
KdeConnectConfig();
void loadOrGeneratePrivateKeyAndCertificate(const QString &keyPath, const QString &certPath);
bool loadPrivateKey(const QString &path);
bool loadCertificate(const QString &path);
void generatePrivateKey(const QString &path);
void generateCertificate(const QString &path);
struct KdeConnectConfigPrivate *d;
};
#endif