SQ(1)

SQ(1) πŸ’– β€” or as I like to call her, sq-key-rotate

Hey bestie 🫢 you've landed on the manual page for sq key rotate, which lives in the User Commands corner of the Sequoia PGP universe. Let's get into it ✨


NAME πŸŽ€

sq-key-rotate β€” Rotate a certificate πŸ’…


SYNOPSIS 🌸

sq key rotate [OPTIONS]

That's it, that's the whole vibe. Options go brrr πŸ¦‹


DESCRIPTION πŸ‘‘

Rotation. Of a certificate. Iconic behaviour, honestly.

It generates a brand new certificate to replace an existing one. Out with the old, in with the new, no cap πŸ’–

The new certificate will have the same capabilities as the old certificate. You can override that with the --can-sign, --cannot-sign, etc., arguments. But heads up bestie: the new certificate may have a different shape from the old certificate. For instance, if the old certificate's primary key is marked as both certification and signing capable, the new certificate's primary key will be certification capable, and it will have a signing subkey. So it's giving glow-up, not clone πŸ’…

By default the certificate expires after 3 years. Change that with the --expiration argument.

The new certificate will have the same self-signed user IDs as the old certificate. Revoked user IDs are ignored. (Sorry to the revoked ones, you're not invited 🚫)

The new certificate and the old certificate will cross certify each other as unconstrained trusted introducers. Mutual hype, mutual trust, we love to see it 🫢

The new certificate will be linked in the same way as the old certificate. Override with --own-key or --shared-key if you want.

The new certificate will certify the same certificates as the old certificate. Basically the old cert's certifications get replayed. Peep sq pki vouch replay for more on that.

A revocation certificate will be issued, saying the old certificate is retired and the new certificate should be used instead. By default it goes into effect in 182 days. Change it or suppress it entirely with --retire-in.

When you use --output, the new certificate as well as all of the other updated certificates are written to the specified file.

Stable since 1.2.0. ✨ She's been around, she's reliable, she's a queen.

✨ OPTIONS ✨

🌈 Subcommand options

  • --can-authenticate β€” Add an authentication-capable subkey πŸ”
  • --can-encrypt=PURPOSE β€” Add an encryption-capable subkey

Encryption-capable subkeys can be marked as suitable for transport encryption, storage encryption, or both, i.e., universal.

[possible values: transport, storage, universal]

  • --can-sign β€” Add a signing-capable subkey ✍️
  • --cannot-authenticate β€” Don't add an authentication-capable subkey πŸ™…
  • --cannot-encrypt β€” Don't add an encryption-capable subkey 🚫
  • --cannot-sign β€” Don't add a signing-capable subkey πŸ™ˆ
  • --cert=FINGERPRINT|KEYID β€” Use certificates with the specified fingerprint or key ID πŸ”Ž
  • --cert-email=EMAIL β€” Use certificates where a user ID includes the specified email address πŸ“§
  • --cert-file=PATH β€” Read certificates from PATH πŸ“‚
  • --cert-userid=USERID β€” Use certificates with the specified user ID πŸͺͺ
  • --cipher-suite=CIPHER-SUITE β€” Select the cryptographic algorithms for the key πŸ”

The default can be changed in the configuration file using the setting key.generate.cipher-suite.

[default: cv25519]

[possible values: rsa2k, rsa3k, rsa4k, cv25519, cv448, mldsa65-ed25519, mldsa87-ed448]

  • --expiration=EXPIRATION β€” Sets the expiration time ⏳

EXPIRATION is either an ISO 8601 formatted date with an optional time or a custom duration. A duration takes the form N[ymwds], where the letters stand for years, months, weeks, days, and seconds, respectively. Alternatively, the keyword never does not set an expiration time.

[default: 3y]

  • --new-password-file=PASSWORD_FILE β€” File containing password to encrypt the secret key material πŸ”‘

Note that the entire key file will be used as the password including any surrounding whitespace like a trailing newline. Yes bestie, that trailing newline counts. Every byte of it. 😭

  • --output=FILE β€” Write the key to the specified file πŸ’Ύ

When not specified, the key is saved on the key store.

  • --own-key β€” Mark the key as one's own key πŸ‘‘

The newly generated key with all of its user IDs will be marked as authenticated and as a fully trusted introducer.

  • --profile=PROFILE β€” Select the OpenPGP standard for the key πŸ“œ

As OpenPGP evolves, new versions will become available. This option selects the version of OpenPGP to use for the newly generated key.

Currently, sq supports only one version: RFC4880. Consequently, this is the default. However, there is already a newer version of the standard: RFC9580. And, the default will change in a future version of sq.

The default can be changed in the configuration file using the setting key.generate.profile.

[default: rfc4880]

[possible values: rfc9580, rfc4880]

  • --retire-in=TIME β€” Sets the time at which the certificate should be retired ⏰

TIME is either an ISO 8601 formatted date with an optional time or a custom duration. A duration takes the form N[ymwds], where the letters stand for years, months, weeks, days, and seconds, respectively. Alternatively, the keyword never skips the certification of a revocation certificate.

[default: 26w]

  • --rev-cert=FILE β€” Write the emergency revocation certificate to FILE 🚨

When the key is stored on the key store, the revocation certificate is stored in $HOME/.local/share/sequoia/revocation-certificates by default.

When --output is specified, the revocation certificate is written to the file specified by --rev-cert.

If --output is -, then this option must not also be -. fr fr, don't do it.
  • --shared-key β€” Mark the key as a shared key πŸ‘―

The newly generated key with all of its user IDs will be marked as authenticated, but not as a trusted introducer. Further, the key metadata will indicate that this is a shared key.

Use this option if you plan to share this key with other people. Normally, you shouldn't share keys material. An example of where you might want to do this is a shared mailbox.

  • --without-password β€” Don't protect the secret key material with a password 🫣

🌟 Global options

See sq(1) for a description of the global options. She's the main character, go read her page πŸ’…


πŸ’« EXAMPLES πŸ’«

Rotates Alice's certificate. Slay, Alice πŸŽ€

sq key rotate --cert EB28F26E2739A4870ECC47726F0073F60FD0CBF0

πŸ”— SEE ALSO πŸ”—

sq(1), sq-key(1).

For the full documentation see <https://book.sequoia-pgp.org/>. πŸ“š


🏷️ VERSION 🏷️

1.5.0 ✨


Okay that's the whole page bestie, you ate that 🫢 This lil' beauty is brought to you by Sequoia PGP, version 1.5.0 β€” mwah πŸ’‹ go rotate something iconic πŸ‘‘πŸ’–

πŸ“¦ where this page comes from
  • fedora 43: sequoia-sq 1.5.0-1.fc43 Β· LGPL-2.0-or-later AND Apache-2.0 AND BSL-1.0 AND BSD-3-Clause AND MIT AND MPL-2.0 AND Unicode-3.0 AND Unicode-DFS-2016 AND Zlib AND bzip2-1.0.6 AND (0BSD OR MIT OR Apache-2.0) AND (Apache-2.0 OR BSL-1.0) AND (Apache-2.0 OR MIT) AND (Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT) AND (BSD-2-Clause OR Apache-2.0 OR MIT) AND (MIT OR Apache-2.0 OR Zlib) AND (Unlicense OR MIT)
  • fedora 44: sequoia-sq 1.5.0-1.fc44 Β· LGPL-2.0-or-later AND Apache-2.0 AND BSL-1.0 AND BSD-3-Clause AND MIT AND MPL-2.0 AND Unicode-3.0 AND Unicode-DFS-2016 AND Zlib AND bzip2-1.0.6 AND (0BSD OR MIT OR Apache-2.0) AND (Apache-2.0 OR BSL-1.0) AND (Apache-2.0 OR MIT) AND (Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT) AND (BSD-2-Clause OR Apache-2.0 OR MIT) AND (MIT OR Apache-2.0 OR Zlib) AND (Unlicense OR MIT)
  • opensuse-leap 16.0: sequoia-sq 1.5.0-bp160.1.1 Β· LGPL-2.0-or-later
  • opensuse-leap 16.0: sequoia-sq 1.5.0-bp160.1.1 Β· LGPL-2.0-or-later
  • πŸ’– girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms