You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Implement MAVLink 2 message signing with named key management, per-vehicle
auto-detection from incoming signed packets, and toolbar indicator.
Key features:
- Named signing key storage (SHA-256 hashed passphrases) via MAVLinkSigningKeys
- Auto-detect signing key from incoming signed packets (no manual setup needed)
- Send SETUP_SIGNING to enable/disable signing on vehicles
- Toolbar indicator showing signing status with full key management UI
- Shared SigningKeyManager QML component for settings and indicator
- Track active key name per vehicle with proper signal emission
Includes unit tests (SigningTest: 5 tests) and integration tests
(MockLinkSigningTest: 3 tests) with QSignalSpy verification.
Also renames docs/settings_view/mavlink.md to telemetry.md to match
current UI naming.
Fixes#14160
Copy file name to clipboardExpand all lines: docs/en/qgc-user-guide/fly_view/fly_view_toolbar.md
+11Lines changed: 11 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -101,6 +101,17 @@ The Gimbal indicator is shown when the vehicle supports the [MAVLink Gimbal Prot
101
101
102
102
For VTOL vehicles, a VTOL transition status indicator is shown when applicable. It indicates the current VTOL mode/state and provides transition-related status information.
The MAVLink Signing indicator appears when signing keys have been configured (see [MAVLink 2 Signing](../settings_view/telemetry.md#signing)).
107
+
It shows a lock icon that indicates whether MAVLink 2 message signing is active on the current vehicle connection:
108
+
109
+
-**Locked (green):** Signing is active — the vehicle's incoming packets matched a stored key, or a key was manually enabled.
110
+
-**Unlocked:** Signing is not active on the current connection.
111
+
112
+
The dropdown shows the signing status, the name of the active key (if any), and the number of saved keys.
113
+
Expanding the indicator provides full key management: you can enable a key on the vehicle, disable the active key, delete unused keys, or add new keys.
The _MAVLink 2 Signing_ section (under **App Settings > Telemetry**) allows you to manage signing keys used for [MAVLink 2 message signing](https://mavlink.io/en/guide/message_signing.html).
34
+
When signing is enabled, all messages between QGroundControl and the vehicle are cryptographically authenticated, preventing unauthorized command injection.
35
+
36
+
### Key Management
37
+
38
+
-**Add Key:** Enter a friendly name and a passphrase. The passphrase is SHA-256 hashed to produce the 32-byte signing key. Only the hash is stored — the passphrase is not saved.
39
+
-**Enable:** Sends the signing key to the active vehicle via `SETUP_SIGNING`. The vehicle and QGroundControl will both begin signing messages. Only available when no key is currently active.
40
+
-**Disable:** Disables signing on the active vehicle by sending an all-zero key. Only shown for the currently active key.
41
+
-**Delete:** Removes a key from QGroundControl's key store. Not available for keys that are in use by any connected vehicle. A warning is shown because the vehicle may still have the key configured — deleting it locally means you can no longer communicate with that vehicle over a signed connection.
42
+
43
+
### Auto-Detection
44
+
45
+
When QGroundControl receives signed packets from a vehicle, it automatically tries each stored key to find a match.
46
+
If a match is found, signing is automatically configured on the link — no manual action is needed.
47
+
The detected key name is shown in the Signing toolbar indicator.
48
+
49
+
::: warning
50
+
Signing keys should only be sent to the vehicle over secure (wired or encrypted) links.
51
+
Anyone who intercepts the key can sign messages and send commands to the vehicle.
52
+
:::
53
+
33
54
## MAVLink 2 Logging (PX4 only) {#logging}
34
55
35
56
The _MAVLink 2 Logging_ settings (PX4 only) configure real-time log streaming from PX4 to _QGroundControl_ and upload of logs to [Flight Review](https://logs.px4.io).
Copy file name to clipboardExpand all lines: docs/en/qgc-user-guide/troubleshooting/parameter_download.md
+2-2Lines changed: 2 additions & 2 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -7,9 +7,9 @@ At which point you will get an error stating that QGC was unable to retrieve the
7
7
Although you can still fly the vehicle in this state it is not recommended.
8
8
Also the vehicle setup pages will not be available.
9
9
10
-
You can see the loss rate for your link from the [Settings View > MAVLink](../settings_view/mavlink.md) page.
10
+
You can see the loss rate for your link from the [App Settings > Telemetry](../settings_view/telemetry.md) page.
11
11
Even a loss rate in the high single digits can lead to intermittent failures of the plan protocols.
12
-
Higher loss rates could leads to 100% failure.
12
+
Higher loss rates could lead to 100% failure.
13
13
14
14
There is also the more remote possibility of either firmware or QGC bugs.
15
15
To see the details of the back and forth message traffic of the protocol you can turn on [Console Logging](../settings_view/console_logging.md) for the Parameter Protocol.
if (MAVLinkSigning::initSigning(static_cast<mavlink_channel_t>(_mavlinkChannel), signingKeyBytes, MAVLinkSigning::insecureConnectionAccceptUnsignedCallback)) {
49
-
if (signingKeyBytes.isEmpty()) {
50
-
qCDebug(LinkInterfaceLog) << "Signing disabled on channel" << _mavlinkChannel;
51
-
} else {
52
-
qCDebug(LinkInterfaceLog) << "Signing enabled on channel" << _mavlinkChannel;
53
-
}
54
-
} else {
55
-
qCWarning(LinkInterfaceLog) << "Failed To enable Signing on channel" << _mavlinkChannel;
56
-
// FIXME: What should we do here?
57
-
returnfalse;
58
-
}
43
+
// Always clear any prior signing state on the channel to avoid stale
44
+
// mavlink_status_t::signing from a previous connection on this channel.
45
+
// For insecure connections the correct key will be auto-detected from
46
+
// incoming signed packets via MAVLinkSigning::tryDetectKey().
47
+
if (MAVLinkSigning::initSigning(static_cast<mavlink_channel_t>(_mavlinkChannel), QByteArrayView(), nullptr)) {
48
+
qCDebug(LinkInterfaceLog) << "Signing cleared on channel" << _mavlinkChannel
0 commit comments