Skip to content

Add Sequoia (sq) backend support to add-signing-service - #7946

Draft
dralley wants to merge 1 commit into
pulp:mainfrom
dralley:pqc-signing-service
Draft

Add Sequoia (sq) backend support to add-signing-service#7946
dralley wants to merge 1 commit into
pulp:mainfrom
dralley:pqc-signing-service

Conversation

@dralley

@dralley dralley commented Aug 5, 2026

Copy link
Copy Markdown
Contributor

The add-signing-service management command previously hardcoded GPG for key metadata extraction, preventing use with key types GPG cannot handle (OpenPGP v6, ML-DSA/post-quantum). This adds a --backend option that accepts "gpg" (default, existing behavior) or "sq" (Sequoia). Both backends reuse --gnupghome and --keyring, mapped to the equivalent sq CLI flags. The sq backend uses sq cert export to retrieve the public key and pysequoia to parse the fingerprint.

Test infrastructure gains parallel Sequoia fixtures and helpers (import_signing_key_sq, make_sq_signing_script, create_signing_service_sq) and both signing service tests are parametrized to run with both backends.

Assisted-By: Claude Opus 4.6
closes #7479

help=_("A default GnuPG home directory to use during the initialization."),
help=_(
"Home directory for the key management backend. "
"For GPG, defaults to $GNUPGHOME. For sq, defaults to $SEQUOIA_HOME."

@dralley dralley Aug 6, 2026

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We're re-using this, which I think is fine, but should we also have a more generically named alias and deprecate --gnupghome?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Concur - can we get a --home switch? If you use --gnupghome and --backend sq we will do The Right Thing, but long term, that adds some user-confusion - so yeah, let's deprecate --gnupghome (maybe 130, or possibly even further?)

@dralley
dralley force-pushed the pqc-signing-service branch from d195d4d to 8663b89 Compare August 6, 2026 03:37
@dralley
dralley force-pushed the pqc-signing-service branch from 8663b89 to 7d63a0b Compare August 6, 2026 03:38
Comment thread CHANGES/plugin_api/+pqc.feature Outdated
@dralley
dralley force-pushed the pqc-signing-service branch from 7d63a0b to af0b384 Compare August 6, 2026 03:41
Comment thread pyproject.toml Outdated
@dralley
dralley force-pushed the pqc-signing-service branch from af0b384 to 2ed5b68 Compare August 6, 2026 03:44
The add-signing-service management command previously hardcoded GPG for
key metadata extraction, preventing use with key types GPG cannot handle
(OpenPGP v6, ML-DSA/post-quantum). This adds a --backend option that
accepts "gpg" (default, existing behavior) or "sq" (Sequoia). Both
backends reuse --gnupghome and --keyring, mapped to the equivalent sq
CLI flags. The sq backend uses `sq cert export` to retrieve the public
key and pysequoia to parse the fingerprint.

Test infrastructure gains parallel Sequoia fixtures and helpers
(import_signing_key_sq, make_sq_signing_script, create_signing_service_sq)
and both signing service tests are parametrized to run with both backends.

Assisted-By: Claude Opus 4.6
closes pulp#7479
@dralley
dralley force-pushed the pqc-signing-service branch from 2ed5b68 to 47e1292 Compare August 6, 2026 13:30
)
parser.add_argument(
"--gnupghome",
default=os.getenv("GNUPGHOME", ""),

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

TODO: This should be None, default selection should happen only in the handler code, based on a branch on backend.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Remove dependence on GPG (or ensure we are agnostic to a specific GPG implementation)

2 participants