Commit Graph

1343 Commits

Author SHA1 Message Date
Neal H. Walfield
9b46f2e239
Add new macro wwrintln.
- Add a new macro `wwriteln`, which is like `writeln`, but wraps the
    output.

  - Rewrite `weprintln` to use it.

  - See #342.
2024-12-03 18:59:36 +01:00
Neal H. Walfield
68e3ddf0b9
Generalize weprintln and iweprintln to write to any stream.
- `weprintln` and `iweprintln` unconditionally write to `stderr`.

  - Change the functions to take an additional parameter, the stream
    to write to.

  - Rename the functions to `wwriteln` and `iwwriteln` to reflect that
    the don't just write to `stderr` anymore, and are now closer to
    `writeln`.

  - This change is in preparation for using these functions to write
    to `stdout`.

  - See #342.
2024-12-03 18:59:35 +01:00
Neal H. Walfield
8902710333
Rename wprintln to weprintln.
- This change is in preparation for a `stdout` variant.

  - See #342.
2024-12-03 18:59:23 +01:00
Neal H. Walfield
fc617dee6b
Clean up sq key list's output. 2024-12-03 18:56:59 +01:00
Justus Winter
f6e7efa371
Implement sq config inspect network.
- Fixes #431.
2024-12-03 18:39:08 +01:00
Justus Winter
ac0044a677
Implement sq config inspect paths.
- Fixes #275.
2024-12-03 17:43:35 +01:00
Justus Winter
3bde91aeb4
Implement sq config inspect policy.
- Fixes #276.
2024-12-03 16:34:20 +01:00
Justus Winter
68522f7bf1
Make sq key list fail without key store, align error messages.
- Fixes #479.
2024-12-03 16:11:51 +01:00
Justus Winter
f0df37d13f
Align error messages when listing certs.
- Previously, `sq key list` showed a different error for a certificate
    in the certificate store from a certificate that is not in the
    certificate store.  Align these.

  - Fixes #462.
2024-12-03 15:06:27 +01:00
Justus Winter
32bdb2598d
Import the secret key so that the example has something to list.
- Otherwise, `--cert-domain=example.org` matches no key.
2024-12-03 14:54:39 +01:00
Neal H. Walfield
3263a5e2d5
Change sq inspect to show the cert associated with a recipient.
- When `sq inspect` displays a PKESK, it displays the recipient key
    ID.  For a user of `sq`, this information is nearly useless.  The
    recipient is normally a subkey, and `sq` doesn't support looking
    up certificates by subkey.

  - Extend `sq inpsect` to look up the recipient, and display
    information about the the associated certificate, if it is
    available.
2024-12-03 11:42:27 +01:00
Neal H. Walfield
a69b8f4921
policy: Update certificates. 2024-03-30 10:00:00 +01:00
Justus Winter
9085ef8638
Simplify code.
- The policy and time were only used to reason over subkeys.  Since
    we don't match on subkeys,  we no longer need the specialized
    functions.
2024-12-03 10:45:51 +01:00
Justus Winter
ee29f3c8f8
Remove unreachable code.
- We no longer resolve certs by subkey fingerprint.

  - Fixes 8c47caaee9.
2024-12-03 10:43:16 +01:00
Justus Winter
84928e39d0
Fix resolving --signer-self.
- Fixes 25e99e5afb.

  - Fixes #475.
2024-12-03 10:39:52 +01:00
Justus Winter
169da29c09
Improve formatting of message.
- We don't emit anything for a backend with devices, so it doesn't
    make sense to indent this more.
2024-12-03 09:53:43 +01:00
Justus Winter
25e99e5afb
Implement sq sign --signer-self and sq encrypt --signer-self.
- This selects the default set of signing keys controlled by the
    `sign.signer-self` setting.

  - Fixes #475.
2024-12-02 18:05:53 +01:00
Justus Winter
61210f856d
Make the number of iterations configurable for sq network search.
- See #336.
2024-12-02 16:44:07 +01:00
Justus Winter
0d5fbb0cb6
Make use of DANE configurable when doing sq network search.
- See #336.
2024-12-02 16:31:40 +01:00
Justus Winter
a81a1a7689
Make use of WKD configurable when doing sq network search.
- See #336.
2024-12-02 16:28:58 +01:00
Justus Winter
1fe498db4e
Make the path to the backend servers configurable.
- See #336.
2024-12-02 16:00:21 +01:00
Justus Winter
e58f47e434
Fix displaying effective configuration. 2024-12-02 15:56:55 +01:00
Justus Winter
dcc3db167d
Make hints configurable.
- See #336.
2024-12-02 14:58:18 +01:00
Justus Winter
092ba48e5a
Generalize function. 2024-12-02 14:57:49 +01:00
Justus Winter
7d2fab14f9
Make verbosity configurable.
- See #336.
2024-12-02 14:42:04 +01:00
Justus Winter
24ce3aa2e9
Introduce accessors for sq.quiet and sq.verbose. 2024-12-02 14:35:25 +01:00
Justus Winter
099e9c8737
Use platform-specific prompt in hints. 2024-12-02 12:52:01 +01:00
Justus Winter
f5fff14661
Indent hints so that they look different from shell prompts.
- Fixes #473.
2024-12-02 12:47:54 +01:00
Justus Winter
b565f7ec90
Improve the --for-self encryption hint.
- Mention the configuration file, if any.

  - Fixes #472.
2024-12-02 12:15:23 +01:00
Justus Winter
04615bc768
Don't show hint if a recipient is listed in encrypt.for-self.
- Fixes #471.
2024-12-02 12:02:59 +01:00
Justus Winter
dfc36e38d8
Don't explicitly create Recipients. 2024-12-02 12:02:59 +01:00
Neal H. Walfield
84a8807173
Show the configuration file's location in sq config --help.
- Include the location of the configuration file in `sq config
    --help`.

  - See #470.
2024-11-30 10:00:32 +01:00
Neal H. Walfield
de9c5f48b0
Fix message.
- Always parenthesize the message.
2024-11-30 09:56:21 +01:00
Justus Winter
d6992416f4
Display a hint if encrypting a message that one can not decrypt.
- This is a heuristic, of course, as we cannot know which keys the
    user controls, but we can try to be helpful and display a hint.
2024-11-29 19:03:09 +01:00
Justus Winter
b88367ce36
Implement sq encrypt --for-self.
- This adds a mechanism to add a list of certificates presumably
    owned by the user to the recipients using the `--for-self` flag.
    This makes sure the encrypted message can be decrypted again.

  - Fixes #461.
2024-11-29 19:03:09 +01:00
Justus Winter
abafa552f0
When encrypting a message, list signers.
- This makes the process more transparent.  Also see #459.
2024-11-29 18:57:50 +01:00
Justus Winter
0df3b9676e
When encrypting a message, list recipients and passwords.
- See #461.
2024-11-29 18:57:49 +01:00
Justus Winter
879b619dae
Use BufferedReader::copy to avoid an extra copy.
- In contrast, std::io::copy has to copy the data into an
    intermediate buffer.
2024-11-29 18:57:34 +01:00
Justus Winter
8d7650def7
Rework encryption subkey selection. 2024-11-29 18:57:33 +01:00
Justus Winter
0d9fae1820
Fix handling of --home=default and --home=none.
- Fixes 4b3f2c97ad which predates the
    introduction of `--home=default` and `--home=none`.
2024-11-29 13:55:42 +01:00
Justus Winter
ea593feb02
Drop superfluous mut. 2024-11-28 19:16:32 +01:00
Justus Winter
012e762d38
Align user ID designators in sq pki link retract.
- User IDs have to be explicitly given, or `--all` has to be used to
    select them all (this was previously the default).

  - This aligns the retract subcommand with the other link and vouch
    management commands.

  - Fixes #442.
2024-11-28 18:07:30 +01:00
Neal H. Walfield
c9bde7fe47
Add support for addressing shadow CAs by symbolic names.
- Add a new paramter to `sq pki link add`, `sq pki link authorize`,
    and `sq pki link retract`, `--cert-special`, which allows addressing
    shadow CAs by symbolic names.

  - If the shadow CA doesn't exist yet, we create it.

  - This means `sq pki link authorize --cert-special keys.openpgp.org
    --all --unconstrained` can be used to fully trust the
    `keys.openpgp.org` key server, for instance.  This is more
    convenient, and especially useful for documentation.

  - Fixes #337.
2024-11-28 15:38:34 +01:00
Justus Winter
477f255f84
Make sq config get policy.path reflect SEQUOIA_CONFIG_POLICY.
- This is cosmetic, but makes the output more consistent.

  - Fixes #467.
2024-11-28 13:20:18 +01:00
Neal H. Walfield
3b45a6bb63
Release 0.40.0.
* Changes in 0.40.0
** New functionality
   - New subcommand `sq download`, which downloads a file and a
     signature file, and then authenticates the file.
** Notable changes
   - `sq toolbox keyring merge` now supports merging bare revocation
     certificates.
   - `sq verify` now deletes the output file on failure.
   - `sq decrypt` now deletes the output file on failure.
   - Add a global option, `--policy-as-of`, that selects the
     cryptographic policy as of the specified time.
   - `sq key subkey export` takes an additional argument, `--cert`,
     which is required.  The specified keys must be attached to that
     certificate.  This ensures that if a key is attached to multiple
     certificates, the correct certificate is exported.
   - Add a new argument, `--cli-version`, which requests a particular
     semver-compatible version of the CLI.  This enables breaking
     changes to the CLI in the future.
   - The `help` subcommand has been removed everywhere except at the
     top-level (`--help` still works).
   - If designated signers are specified for `sq verify`, `sq
     decrypt`, and `sq download`, they are now the only certificates
     that are considered when verifying signatures.  If no signers are
     specified, the certificate store is consulted.
   - The argument `sq cert lint --list-keys` has been removed.
   - `sq key list` now has a DWIM search parameter.
   - The flag `sq sign --detached` is now called `sq sign
     --signature-file`.
   - The flag `sq sign --clearsign` is now called `sq sign
     --cleartext`.
   - Both `sq sign` and `sq verify` now require an explicit mode,
     one of `--signature-file`, `--message`, or `--cleartext`.
   - The flag `sq --no-cert-store` has been replaced with `sq
     --cert-store=none`.
   - The flag `sq --no-key-store` has been replaced with `sq
     --key-store=none`.
   - Similarly, `sq --home=none` disables all state, unless explicitly
     re-enabled using `--cert-store` or `--key-store`.
   - `sq pki link add`, `sq pki link authorize`, `sq pki vouch
     certify`, and `sq pki vouch authorize` have a `--userid-or-add`
     flag.  Replace it with an `--userid-or-add` argument, and an
     `--email-or-add` argument.
   - The `--email` and `--email-or-add` arguments to `sq pki link add`,
     etc. cannot be used to designate a self-signed user ID, if
     multiple self-signed user IDs include the specified email
     address.  Previously, the arguments would designate all
     self-signed user IDs with the specified email address.
   - The new argument `sq sign --mode` can be used to create text
     signatures in addition to binary signatures.
   - The argument `sq network wkd publish --create` has been split
     into two arguments, `--create` and `--method`, avoiding an
     ambiguity when parsing the arguments.
   - `sq key userid revoke` no longer accepts the `--userid-or-add` flag
     to indicate that a user ID specified using `--userid`, an email
     specified using `--email`, or a name specified using `--name`
     should be used even if there is no corresponding self-signed user
     ID.  This functionality is replaced by the `--userid-or-add`,
     `--email-or-add` and `--name-or-add` arguments.
   - `sq pki path` previously interpreted the last positional argument
     as the user ID to authenticate.  Make it a named argument
     instead, `--userid`.
   - Add `sq pki path --email` and `sq pki path --name` as additional
     ways to specify the user ID to authenticate.
   - The argument `sq encrypt --set-metadata-time` has been removed.
   - The argument `sq encrypt --set-metadata-filename` now takes a
     string that specifies the file name to be set.
   - `sq pki authenticate`'s positional argument for specifying the
     certificate to authenticate must now be specified using a named
     argument, `--cert`.
   - `sq pki identify`'s positional argument for specifying the
     certificate to identify must now be specified using a named
     argument, `--cert`.
   - Drop `sq cert list --email`'s flag, and replace it with the
     `--userid` and `--email` positional arguments, which match on
     user IDs.
   - Drop `sq pki authenticate --email`'s flag, and replace it with
     the `--userid` and `--email` positional arguments, which match on
     user IDs.
   - Drop `sq pki lookup --email`'s flag, and replace it with the
     `--userid` and `--email` positional arguments, which match on
     user IDs.
   - `sq toolbox keyring` is now just `sq keyring`.
   - `sq toolbox packet` is now just `sq packet`.
   - `sq toolbox armor` is now `sq packet armor`.
   - `sq toolbox dearmor` is now `sq packet dearmor`.
   - `sq key userid revoke`, `sq pki link add`, `sq pki link
     authorize`, `sq pki vouch certify`, and `sq pki vouch authorize`
     now check that user IDs that are not self-signed are in canonical
     form.  Add a flag, `--allow-non-canonical-userids`, to disable
     this check.
   - `sq key approvals update` now requires an action, like
     `--add-authenticated`.
   - `sq key approvals --add-authenticated` is now a simple flag, and
     we always require full authentication.
   - `sq toolbox strip-userid` has been removed.
   - All cert designators now use the `--cert-` prefix, e.g.  `sq key
     export --email` has been changed to `sq key export --cert-email`
     for consistency reasons, and to free `--name`, `--email`, and
     `--userid` for user ID designators.
   - The `--binary` argument has been removed from all commands but
     those that emit signed and or encrypted messages.
   - The command `sq toolbox extract-cert` has been removed in favor
     of `sq key delete` and `sq key subkey delete`.
   - The command `sq packet split` now writes to stdout by default.
   - The argument `sq packets split --prefix` is now called
     `--output-prefix`.
   - `sq pki vouch certify` is now called `sq pki vouch add`.
   - We now certify newly generated keys with a per-host shadow CA.
   - The argument `sq encrypt --signature-notation` has been added.
   - All arguments to add signature notations have been renamed from
     `--notation` to `--signature-notation`.
   - When generating keys, either `--own-key` or `--shared-key` has to
     be given.  The former marks the key's user IDs as authenticated
     and makes it a trusted introducer.  The latter marks the key's
     user IDs as authenticated, and marks the key as a group key.
   - The argument `sq cert lint --export-secret-keys` has been
     removed: if a secret key is provided as file input, it will be
     emitted.
   - The argument `sq key subkey export --cert-file` has been removed.
   - `sq` now reads a configuration file that can be used to tweak a
     number of defaults, like the cipher suite to generate new keys,
     the set of key servers to query, and the cryptographic policy.
   - The command `sq keyring filter` is now considered experimental
     and may change in the future.  To acknowledge this, it has to be
     invoked with the `--experimental` flag.
2024-11-28 06:45:13 +01:00
Neal H. Walfield
99d97c0cc3
Support thiserror 2.0.
- Adjust one bit of syntax to be compatible with `thiserror` 1.0 and
    `thiserror` 2.0, and loosen the dependency requirements to accept
    either version.
2024-11-28 06:37:07 +01:00
Neal H. Walfield
841ce9d0b5
Update Cargo.lock. 2024-11-28 06:06:55 +01:00
Justus Winter
9f5c5ce930
Mark sq keyring filter experimental.
- Invoking it now requires the `--experimental` flag.  This is a
    template that we may use to introduce features into sq with a bit
    of a chance to stabilize it over time.

  - Fixes #455.
2024-11-27 17:27:04 +01:00
Justus Winter
1d23ae8a5b
Update MSRV to 1.79, which is subplot's current MSRV.
- Fixes #460.
2024-11-27 16:39:13 +01:00
Justus Winter
4b3f2c97ad
Add a configuration file and associated management commands.
- Add a configuration file for sq, and sq config get to
    programmatically query configuration values, and sq config template
    to create a template as a starting point for a custom configuration
    file.

  - As a first step, the following things have been made configurable:

    - The cipher suite for key generation.
    - The set of keyservers.
    - The cryptographic policy, which can be sourced from an external
      file as well as modified inline.

  - If there is no configuration file, sq config template can be used to
    create a template for the user to modify.

  - If a default has been overridden using the configuration file,
    sq's --help output is augmented with the configured value.
2024-11-27 15:26:36 +01:00