Page MenuHome GnuPG

GPGME (++/qt): Add support for --quick-add-adsk
Open, NormalPublic

Description

AFAIK we don't have support for this yet in GPGME.

Event Timeline

aheinecke triaged this task as Normal priority.Dec 12 2023, 9:16 AM
aheinecke created this task.
TobiasFella moved this task from Restricted Project Column to Restricted Project Column on the Restricted Project board.Dec 21 2023, 12:19 PM

Before adding code please first come up with a description of the planned API extension.

For the similar task to add an existing subkey to a key we have GpgAddExistingSubkeyEditInteractor. This uses the much more complicated gpg --edit-key interface. Maybe we want to avoid this.

--quick-addkey is used by one of the modes of gpg_genkey. One option would be to extend gpg_genkey with another mode for --quick-add-adsk. And then using either gpgme_op_createsubkey or gpgme_op_createkey from the existing API by finding a creative way to pass the adskfpr to these functions, e.g. via another context variable. The internal _gpgme_engine_op_genkey can easily be extended to pass the fpr directly.

My concept would be to:

  • add a GENKEY_EXTRAFLAG_ADDADSK for _gpgme_engine_op_genkey and gpg_genkey (or do that more implicitely, e.g., by detecting !USERID && KEY && PUBKEY) and pass the subkey fingerprint in pubkey
  • use gpgme_op_createsubkey; pass the adsk fingerprint in a new variable in context

In the C++/Qt parts:

I think we then don't really *need* anything, since we can just set the fingerprint in the context for the job, but it would make sense to introduce a function that wraps this into a nice API.

In the C++/Qt parts:
I think we then don't really *need* anything, since we can just set the fingerprint in the context for the job, but it would make sense to introduce a function that wraps this into a nice API.

Yes, just a new start function for QuickJob (as in your patch) should do I think.

I would use ALGO of gpgme_createsubkey to pass the fingerprint of the ADSK. This can be justified because the algorithm is an implict property of the fingerprint. Obviously we also nee a new flag to do switch to this behaviour. A new GPGME_CREATE_ADSK comes to mind.

gpg 2.4 now returns ERROR status lines for failed --quick-add-subkey and --quick-add-adsk.