Gajim (FLOSS; available for GNU/Linux, FreeBSD, Microsoft Windows) supports OpenPGP by default.
Your own key:
- Open the accounts menu (Ctrl+Shift+a).
- Select an account.
- Go to the tab about personal information.
- Under the "OpenPGP" section, press the button for selecting a key.
- Select your key from the list.
Now when you go online with this account, you have to enter your passphrase. (You could also let your GPG agent manage this; just enable the corresponding section in your account’s "OpenPGP" tab).
Key of your contact:
- For a contact, select Manage Contact → Assign OpenPGP Key
- Select the key of your contact from the list.
Now when you are chatting with this contact (works also when the contact is offline), you can enable OpenPGP encryption in the chat window’s toolbar (Alt+d).
A little shield icon as well as status messages indicate that the encryption is active.
In case you are going online without entering your OpenPGP passphrase, and someone sent/sends you encrypted messages, they are displayed as
([This message is *encrypted* (See :XEP:`27`])
which is fine. However, if you reconnect and enter the passphrase correctly, your chatlog still shows this notice although you would now be able to decrypt it (probably because only this notice and not the full stream is logged). But I didn’t find any other way to decrypt theses message later on.
Old ticket about this: Provide OpenPGP ciphertext if unable to decrypt
When receiving encrypted offline messages, the status message sometimes says that these messages were transmitted unencrypted, however, according to my local tests they were in fact encrypted.