sigstore / sigstore-python

A Sigstore client written in Python
https://pypi.org/p/sigstore
Other
232 stars 49 forks source link

CLI: Full DSSE support #1111

Closed woodruffw closed 2 months ago

woodruffw commented 2 months ago

Right now, the sigstore CLI only has limited support for DSSE bundles: we support verifying them in sigstore verify, but not signing/generating via the CLI.

Some things we'll want to do:

CC @facutuesca

facutuesca commented 2 months ago

I see that DSSE supports multiple artifacts (“subjects”) inside the envelope, each with a name and digest. But the current sigstore sign (non-DSSE) command will, given multiple input files, generate multiple bundle files, one for each input file.

Do we want the same behavior when using DSSE? That is, multiple input files -> multiple output bundles, even if a single DSSE envelope supports having multiple subjects? Or do we want to output a single sigstore bundle, that contains the DSSE envelope with multiple subjects?

woodruffw commented 2 months ago

Do we want the same behavior when using DSSE? That is, multiple input files -> multiple output bundles, even if a single DSSE envelope supports having multiple subjects? Or do we want to output a single sigstore bundle, that contains the DSSE envelope with multiple subjects?

The former -- I think we want to maintain the 1:1 relationship between input and output files for now, even though DSSE bundles technically allow a 1:N relationship. My rationale for that is that fewer clients support that 1:N pattern, and the 1:1 pattern is more immediately applicable to use cases like Python packaging 🙂

facutuesca commented 2 months ago

Do we want to use the same default predicate type for the in-toto statement as cosign? i.e: https://cosign.sigstore.dev/attestation/v1.

edit: I see that predicate is defined here, and it contains two fields: Data and Timestamp, where Data contains the contents of the file passed via the --predicate argument. Do we want to have the same behavior as cosign? By default using that predicate type (with Data and Timestamp fields), and then adding support for other predicateTypes?

woodruffw commented 2 months ago

Do we want to use the same default predicate type for the in-toto statement as cosign? i.e: https://cosign.sigstore.dev/attestation/v1.

IIRC our DSSE signing API already uses a different predicate type (one that's not cosign specific) by default, so I think we should probably default to that. If I'm remembering right, I picked the current predicate default based on the GitHub Attestations' feature's default.

Edit: whoops, I was thinking of the statement not the predicate type. IMO we should default to whatever GitHub's attestations use for their default predicate type, but also think about how we'll expose appropriate CLI flags for customizing the predicate during DSSE signing.

woodruffw commented 2 months ago

This is complete!