summaryrefslogtreecommitdiffstats
path: root/sqv/src/sqv.rs
AgeCommit message (Collapse)Author
2020-05-07openpgp: Use a builder to construct DetachedVerifier.Justus Winter
- See #498.
2020-04-16sqv: Improve error reporting when reading keyrings.Justus Winter
2020-04-06openpgp: Rename VerificationHelper::get_public_keys to get_certs.Justus Winter
2020-03-27sqv: Improve error reporting.Justus Winter
2020-03-25openpgp: Improve performance of detached signature verification.Justus Winter
- Previously, we transformed data and detached signatures into signed messages on the fly, then used the streaming Verifier to verify the message. However, this introduces a nontrivial overhead, even if unnecessary copies are carefully avoided. - Instead, specialize the streaming Decryptor to handle detached signatures. use crypto::hash_buffered_reader to compute the hashes over the data, then attach the computed signatures to the signature packets, and use Decryptor's verification machinery. - While this is arguably less elegant, it is much simpler, and a lot faster. Notably, if we operate on files and can mmap them into memory, we can compute the hash in one call to the compression function. Verification of detached signatures is an important use case, so this speedup outweighs the loss of elegance. - Fixes #457.
2020-03-20openpgp: Remove `to_hex` in KeyHandle, KeyID and Fingerprint.Wiktor Kwapisiewicz
- Replace all usages of `to_hex` with formatting string with :X specifier. - Fixes #456.
2020-03-09Switch from failure to anyhow.Justus Winter
- Use the anyhow crate instead of failure to implement the dynamic side of our error handling. anyhow::Error derefs to dyn std::error::Error, allowing better interoperability with other stdlib-based error handling libraries. - Fixes #444.
2020-03-09Reduce use of explicit failure::Fallible.Justus Winter
2020-02-26openpgp: Add a prelude file to import things related to certificatesNeal H. Walfield
- Add `openpgp/src/cert/prelude.rs` to import most types and traits related to certificates. - Use it instead of using the types and traits individually.
2020-02-20openpgp: Split the ValidAmalgamation trait.Neal H. Walfield
- Split the ValidAmalgamation trait into two traits, Amalgamation and ValidAmalgamation, so that the functionality made available by the Amalgamation trait can be provided by a ComponentAmalgamation, which doesn't have a policy.
2020-02-19openpgp: Split VerificationResult.Justus Winter
- Split VerificationResult into Result<GoodChecksum, VerificationError>. - Fixes #416.
2020-02-06sqv: Rename flag --trace to --verbose.Justus Winter
- All the trace messages are gone except for the summary.
2020-02-06sqv: Print fingerprints and keyids without whitespace.Justus Winter
- This improves usability, e.g. when copy&pasting. - Fixes #422.
2020-01-31openpgp: Add a policy object.Neal H. Walfield
- Change all functions that need to evaluate the validity of a signature (either directly or indirectly to take a policy object. - Use the policy object to allow the user to place additional constraints on a signature's validity. - This addresses the first half of #274 (it introduces the policy object, but does not yet implement any policy).
2020-01-18sqv: Drop data more idiomatically.Neal H. Walfield
2020-01-18sqv: Rewrite to use the streaming verifier.Neal H. Walfield
- sqv implements the same functionality as streaming verifier. Use that instead of reimplementing it.
2020-01-17tool: Add an option to specify the signing time.Neal H. Walfield
- Add the option `--time` to the `sign` and `encrypt` subcommands to allow the user to set the signature's creation time. - Use the value of this option to select the signing keys.
2020-01-16openpgp: Return Result<()> from Signature::verify*.Justus Winter
2020-01-13openpgp: Change KeyHandle's PartialOrd and PartialEq implementations.Neal H. Walfield
- The current PartialOrd and PartialEq implementations for KeyHandles considers KeyIDs and Fingerprints to not be equal. Since most users of this interface expect key identifiers to be interchangeable, this means that they have to pull KeyHandles apart when comparing them, like this: match (a, b) { (KeyHandle::Fingerprint(a), KeyHandle::Fingerprint(b)) => a == b, (KeyHandle::Fingerprint(a), KeyHandle::KeyID(b)) => a.keyid() == b, ... } This is unergonomic, and easy to forget to do. - The obvious fix would be to change the PartialOrd and PartialEq implementations to do this for the user. Unfortunately, this is not possible, because they must be transitive and two fingerprints (a and b) maybe different but have the same keyid. That is, the following is possible: a == keyid, b == keyid, but a != b That makes this comparison function non-transitive and inappropriate for the PartialOrd and PartialEq traits. - Nevertheless, we can implement PartialOrd and PartialEq and return None when a keyid and a fingerprint match. (A consequence of this is that KeyHandle can no longer implement Eq or Ord.) This prevents users of this interface from naively comparing KeyHandles. - Using this interface, we provide the desired, non-transitive, comparison function via a method (KeyHandle::aliases). - This change means that a `KeyHandle` can no longer be used as a Key in a HashMap. In these cases, we instead use a vector. - Fixes #412.
2020-01-08openpgp: Include a reference time in KeyAmalgamation.Neal H. Walfield
- Including the reference time in the KeyAmalgamation structure rather than having the user supply it to the individual methods (like `KeyAmalgamation::alive`) helps ensure that the key is used consistent. For instance, this makes it harder to mistakenly query key's liveness at time t, but then use the current time to determine the key's capabilities.
2020-01-06openpgp: Pass a timestamp to the KeyIter instead of each filter.Neal H. Walfield
- KeyIter::revoked and KeyIter::key_flags (and its variants) didn't take a time stamp so they could only be used for filtering keys based on their current state, not their state at some time in the past. Adding a time stamp to each of the filters would have fixed the problem, but it would have made the interface ugly: callers always want the same time stamp for all filters. - Split KeyIter into two structures: a KeyIter and a ValidKeyIter. - Add KeyIter::policy. It takes a time stamp, which is then used for filters like `alive` and `revoked`, and it returns a ValidKeyIter, which exposes filters that require a time stamp.
2020-01-03openpgp: Rename hash_file to hash_reader, improve documentation.Justus Winter
2020-01-03openpgp: Simplify crypto::hash_file.Justus Winter
- The context knows the algorithm now.
2019-12-20openpgp: Simplify key iteration interface.Neal H. Walfield
- Cert::keys_valid() is just a short-cut for Cert::keys_all().alive().revoked(false). - Remove Cert::keys_valid() and rename Cert::keys_all() to Cert::keys().
2019-12-19openpgp: Change KeyIter to return a struct instead of a tuple.Neal H. Walfield
- A tuple is just an unnamed, inflexible struct. Use a struct instead. - Fixes #400.
2019-12-17openpgp: Make Subpacket own the data.Justus Winter
- The subpacket areas now have a vector of subpackets. Change some accessors here and there to accommodate this. - This requires bit-perfect roundtripping of subpackets so that signatures are not invalidated. - First step towards fixing #200.
2019-12-16sqv: Support more variants of ISO 6801 timestamps.Justus Winter
- Fixes #403.
2019-12-13sqv: Check that subkeys are live at the sig's creation time.Justus Winter
- Fixes #44.
2019-12-13openpgp: Make Signature4::set_computed_hash private.Justus Winter
2019-12-13openpgp: Remove hash algorithm from computed hash.Justus Winter
- The signature knows the hash algorithm.
2019-12-11sqv: Improve certificate handling.Justus Winter
- Put all relevant certificates into a hash table indexed by all keyhandles. Merge certificates once.
2019-12-11sqv: Use expect.Justus Winter
2019-12-11sqv: Ignore marker packets.Justus Winter
2019-12-04openpgp: Rename KeyFlag's accessors.Justus Winter
- Fixes #359.
2019-11-28Call TPKs Certificates, update identifiers, documentation.Justus Winter
- Fixes #387.
2019-11-26openpgp: Implement From<Fingerprint> for KeyID.Justus Winter
- Remove Fingerprint::to_keyid, use From instead.
2019-11-25openpgp: Rename openpgp::constants to openpgp::types.Justus Winter
- Fixes #381.
2019-11-21openpgp: Replace time crate with std::time.Justus Winter
- In sq and sqv, use chrono to interface with the user. - Fixes #341.
2019-09-18openpgp: Change TPK::primary to return the key and not the bindingNeal H. Walfield
- The primary key is not a binding; it is a single component. Thus, returning a ComponentBinding is misleading. - Add methods to the TPK structure to return the direct signatures, certifications, self revocations, and other revocations.
2019-09-17openpgp: Rename TPK::revocation_status to TPK::revoked.Neal H. Walfield
- Combine TPK::revocation_status and TPK::revocation_status_at; only keep the version with the optional time parameter. - Rename TPK::revocation_status to TPK::revoked to match KeyBinding::revoked, UserIDBinding::revoked, and UserAttributeBinding::revoked. - Do the same for the C API.
2019-08-23openpgp: Use a KeyBinding to store the primary key binding in a TPKNeal H. Walfield
2019-08-23openpgp: Rename SubkeyBinding to KeyBinding.Neal H. Walfield
- Also rename the `subkey` method to `key`.
2019-07-15Prepare for Rust 2018.Justus Winter
- This is the result of running `cargo fix --edition`, with some manual adjustments. - The vast majority of changes merely qualify module paths with 'crate::'. - Two instances of adding an anonymous pattern to a trait's function. - `async` is a keyword in Rust 2018, and hence it needs to be escaped (e.g. in the case of the net::r#async module). - The manual adjustments were needed due to various shortcomings of the analysis employed by `cargo fix`, e.g. unexpanded macros, procedural macros, lalrpop grammars.
2019-07-02openpgp: Make the crypto::hash module public, remove re-export.Justus Winter
2019-05-14openpgp, openpgp-ffi: Normalize TPK::revoked()Neal H. Walfield
- `TPK::revoked` returns a revocation status, not a boolean. Rename it to `TPK::revocation_status()`, like it is called in the FFI. - Like other methods, provide a `foo_at()` method and a `foo()` method.
2019-03-14openpgp: Replace TPK::select_keys with an iterator.Neal H. Walfield
- TPK::select_keys mixes iterating and filtering. - Make KeyIter an implicit builder, which supports convenient filtering. - Provide a convenience function to key an iterator with a reasonable filter default.
2019-02-13openpgp: Introduce crypto::Hash.Justus Winter
- This trait formalizes the hashing of OpenPGP packets and related types. - Fixes #183.
2019-01-18sqv: ensure keys are signing capable before verifying sigsKai Michaelis
Closes #164
2019-01-17sqv: check if a key wasn't revoked at signature ctime.Kai Michaelis
Closes #44
2018-12-17openpgp: Change KeyIter to also return the RevocationStatus.Neal H. Walfield
- A Key's revocation status is a property of its binding, but the binding is not exposed by KeyIter. Expose it.