/* * Copyright (C) 2017 Toni Spets * Copyright (C) 2017 KeePassXC Team * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 2 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef KEEPASSXC_SSHAGENT_H #define KEEPASSXC_SSHAGENT_H #include #include #include #include "crypto/ssh/OpenSSHKey.h" #include "gui/DatabaseWidget.h" #include "sshagent/KeeAgentSettings.h" class SSHAgent : public QObject { Q_OBJECT public: ~SSHAgent() override; static SSHAgent* instance(); bool isEnabled() const; void setEnabled(bool enabled); QString socketPath(bool allowOverride = true) const; QString authSockOverride() const; void setAuthSockOverride(QString& authSockOverride); #ifdef Q_OS_WIN bool useOpenSSH() const; void setUseOpenSSH(bool useOpenSSH); #endif const QString errorString() const; bool isAgentRunning() const; bool addIdentity(OpenSSHKey& key, KeeAgentSettings& settings); bool listIdentities(QList>& list); bool checkIdentity(OpenSSHKey& key, bool& loaded); bool removeIdentity(OpenSSHKey& key); void removeAllIdentities(); void setAutoRemoveOnLock(const OpenSSHKey& key, bool autoRemove); signals: void error(const QString& message); public slots: void databaseModeChanged(); private: const quint8 SSH_AGENT_FAILURE = 5; const quint8 SSH_AGENT_SUCCESS = 6; const quint8 SSH_AGENTC_REQUEST_IDENTITIES = 11; const quint8 SSH_AGENT_IDENTITIES_ANSWER = 12; const quint8 SSH_AGENTC_ADD_IDENTITY = 17; const quint8 SSH_AGENTC_REMOVE_IDENTITY = 18; const quint8 SSH_AGENTC_ADD_ID_CONSTRAINED = 25; const quint8 SSH_AGENT_CONSTRAIN_LIFETIME = 1; const quint8 SSH_AGENT_CONSTRAIN_CONFIRM = 2; bool sendMessage(const QByteArray& in, QByteArray& out); #ifdef Q_OS_WIN bool sendMessagePageant(const QByteArray& in, QByteArray& out); const quint32 AGENT_MAX_MSGLEN = 8192; const quint32 AGENT_COPYDATA_ID = 0x804e50ba; #endif QHash m_addedKeys; QString m_error; }; static inline SSHAgent* sshAgent() { return SSHAgent::instance(); } #endif // KEEPASSXC_SSHAGENT_H