# Verifying the signature of the GUI

Verifying downloads is a good habit. The signature files that accompany our GUI binaries are wrapped in an additional `base64` layer. This guide shows how to decode that wrapper and then verify the Minisign file.

## Prerequisites

| Tool | Purpose | Install (cmd examples) |
| --- | --- | --- |
| **minisign** | Signature verification | `brew install minisign` or `apt install minisign` |
| **base64** | Decode a double-encoded sig | Comes with most Unix systems |

## Files involved

```text
UnstoppableSwap_2.0.0-beta.2_amd64.AppImage        # the binary you will verify
UnstoppableSwap_2.0.0-beta.2_amd64.AppImage.sig    # contains a base64 encoded signature
```

## Step-by-step

1. **Decode base64**:

   ```bash
   base64 -D -i UnstoppableSwap_2.0.0-beta.2_amd64.AppImage.sig \
     > UnstoppableSwap_2.0.0-beta.2_amd64.AppImage.minisig
   ```

   The new file will start with the classic two-line Minisign header:

   ```
   untrusted comment: signature from tauri secret key
   RURc8dYGEB0I…
   trusted comment: timestamp:1749671728    file:UnstoppableSwap_2.0.0-beta.2_amd64.AppImage
   4LKsm8VRcErR…
   ```

2. **Grab the public key** (two options):

   *From code:* `tauri.conf.json → plugins.updater.pubkey`

   ```bash
   # prints raw 56-byte key
   jq -r '.plugins.updater.pubkey' src-tauri/tauri.conf.json | base64 -D
   ```

   *or* copy the key from below:

   ```text
   RWRc8dYGEB0Ipl37n2fWnO3gtVgUoPkY6XUS0C1ppRsgRUYsmSGtcECA
   ```

4. **Verify the signature**:

   ```bash
   minisign -Vm UnstoppableSwap_2.0.0-beta.2_amd64.AppImage \
            -x  UnstoppableSwap_2.0.0-beta.2_amd64.AppImage.minisig \
            -P  RWRc8dYGEB0Ipl37n2fWnO3gtVgUoPkY6XUS0C1ppRsgRUYsmSGtcECA
   ```

   Expected output:

   ```
   Signature and comment signature verified
   Trusted comment: timestamp:1749671728    file:UnstoppableSwap_2.0.0-beta.2_amd64.AppImage
   ```

## Troubleshooting cheatsheet

| Symptom | Likely cause | Fix |
| --- | --- | --- |
| `Untrusted signature comment too long` | Fed Minisign the *outer* base64 file | Decode the `.sig` first (Step 1) |
| `Signature mismatch` | Wrong public key | Re-extract the key from `tauri.conf.json` and make sure there’s no extra whitespace |
