QGroundControl
Ground Control Station for MAVLink Drones
Loading...
Searching...
No Matches
MAVLinkSigningKeys.h
Go to the documentation of this file.
1#pragma once
2
3#include <QtCore/QByteArray>
4#include <QtCore/QObject>
5#include <QtQmlIntegration/QtQmlIntegration>
6
8class Vehicle;
9
11class MAVLinkSigningKey : public QObject
12{
13 Q_OBJECT
14 QML_ELEMENT
15 QML_UNCREATABLE("")
16
17 Q_PROPERTY(QString name READ name CONSTANT)
18
19public:
20 explicit MAVLinkSigningKey(const QString& name, const QByteArray& keyBytes, QObject* parent = nullptr);
21
22 QString name() const { return _name; }
23 QByteArray keyBytes() const { return _keyBytes; }
24
25private:
26 QString _name;
27 QByteArray _keyBytes; // 32-byte SHA-256 hash
28};
29
33class MAVLinkSigningKeys : public QObject
34{
35 Q_OBJECT
36 QML_ANONYMOUS
37
38 Q_PROPERTY(QmlObjectListModel* keys READ keys CONSTANT)
39
40public:
41 static MAVLinkSigningKeys* instance();
42
43 explicit MAVLinkSigningKeys(QObject* parent = nullptr);
44 ~MAVLinkSigningKeys() override;
45
46 QmlObjectListModel* keys() const { return _keys; }
47
49 Q_INVOKABLE void addKey(const QString& name, const QString& passphrase);
50
52 Q_INVOKABLE void removeKey(int index);
53
55 Q_INVOKABLE bool isKeyInUse(const QString& name) const;
56
58 QByteArray keyBytesAt(int index) const;
59
61 QByteArray keyBytesByName(const QString& name) const;
62
64 QString keyNameAt(int index) const;
65
66signals:
69
70private:
71 friend class SigningTest;
72
73 void _save();
74 void _load();
75 bool _keyExists(const QString& name) const;
76 void _connectVehicle(Vehicle* vehicle);
77 void _disconnectVehicle(Vehicle* vehicle);
78
79 QmlObjectListModel* _keys = nullptr;
80
81 static constexpr const char* kSettingsGroup = "MAVLinkSigningKeys";
82 static constexpr const char* kKeysArrayKey = "keys";
83 static constexpr const char* kNameKey = "name";
84 static constexpr const char* kKeyBytesKey = "keyBytes";
85
86 // Old Fact-based signing key (pre-named-keys system)
87 static constexpr const char* kOldSigningKeySettingsKey = "mavlink2SigningKey";
88};
89
A single named signing key entry.