- Notifications
You must be signed in to change notification settings - Fork0
A codesigning tool for Python packages
License
laurentsimon/sigstore-python
Folders and files
| Name | Name | Last commit message | Last commit date | |
|---|---|---|---|---|
Repository files navigation
sigstore is a Python tool for generating and verifying Sigstore signatures.You can use it to sign and verify Python package distributions, or anythingelse!
- Features
- Installation
- Usage
- Example uses
- Licensing
- Community
- Contributing
- Code of Conduct
- Security
- SLSA Provenance
- Support for keyless signature generation and verification withSigstore
- Support for signing with"ambient" OpenID Connect identities
- A comprehensiveCLI and correspondingimportable Python API
sigstore requires Python 3.8 or newer, and can be installed directly viapip:
python -m pip install sigstoreOptionally, to installsigstore and all its dependencies withhash-checking mode enabled, run the following:
python -m pip install -r https://raw.githubusercontent.com/sigstore/sigstore-python/main/install/requirements.txtThis installs the requirements file locatedhere, which is kept up-to-date.
sigstore-python hasan official GitHub Action!
You can install it from theGitHub Marketplace, oradd it to your CI manually:
jobs:sigstore-python:steps: -uses:sigstore/gh-action-sigstore-python@v0.2.0with:inputs:foo.txt
See theaction documentationfor more details and usage examples.
For Python API usage, see ourdocumentation.
You can runsigstore as a standalone program, or viapython -m:
sigstore --helppython -m sigstore --help
Top-level:
usage: sigstore [-h] [-v] [-V] [--staging] [--rekor-url URL] COMMAND ...a tool for signing and verifying Python package distributionspositional arguments: COMMAND the operation to perform sign sign one or more inputs verify verify one or more inputs get-identity-token retrieve and return a Sigstore-compatible OpenID Connect tokenoptional arguments: -h, --help show this help message and exit -v, --verbose run with additional debug logging; supply multiple times to increase verbosity (default: 0) -V, --version show program's version number and exitSigstore instance options: --staging Use sigstore's staging instances, instead of the default production instances (default: False) --rekor-url URL The Rekor instance to use (conflicts with --staging) (default: https://rekor.sigstore.dev)usage: sigstore sign [-h] [-v] [--identity-token TOKEN] [--oidc-client-id ID] [--oidc-client-secret SECRET] [--oidc-disable-ambient-providers] [--oidc-issuer URL] [--oauth-force-oob] [--no-default-files] [--signature FILE] [--certificate FILE] [--bundle FILE] [--output-directory DIR] [--overwrite] [--staging] [--rekor-url URL] [--fulcio-url URL] FILE [FILE ...]positional arguments: FILE The file to signoptional arguments: -h, --help show this help message and exit -v, --verbose run with additional debug logging; supply multiple times to increase verbosity (default: 0)OpenID Connect options: --identity-token TOKEN the OIDC identity token to use (default: None) --oidc-client-id ID The custom OpenID Connect client ID to use during OAuth2 (default: sigstore) --oidc-client-secret SECRET The custom OpenID Connect client secret to use during OAuth2 (default: None) --oidc-disable-ambient-providers Disable ambient OpenID Connect credential detection (e.g. on GitHub Actions) (default: False) --oidc-issuer URL The OpenID Connect issuer to use (conflicts with --staging) (default: https://oauth2.sigstore.dev/auth) --oauth-force-oob Force an out-of-band OAuth flow and do not automatically start the default web browser (default: False)Output options: --no-default-files Don't emit the default output files ({input}.sigstore) (default: False) --signature FILE, --output-signature FILE Write a single signature to the given file; does not work with multiple input files (default: None) --certificate FILE, --output-certificate FILE Write a single certificate to the given file; does not work with multiple input files (default: None) --bundle FILE Write a single Sigstore bundle to the given file; does not work with multiple input files (default: None) --output-directory DIR Write default outputs to the given directory (conflicts with --signature, --certificate, --bundle) (default: None) --overwrite Overwrite preexisting signature and certificate outputs, if present (default: False)Sigstore instance options: --staging Use sigstore's staging instances, instead of the default production instances. This option will be deprecated in favor of the global `--staging` option in a future release. (default: False) --rekor-url URL The Rekor instance to use (conflicts with --staging). This option will be deprecated in favor of the global `--rekor-url` option in a future release. (default: None) --fulcio-url URL The Fulcio instance to use (conflicts with --staging) (default: https://fulcio.sigstore.dev)This is the most common verification done withsigstore, and thereforethe one you probably want: you can use it to verify that a signature wasproduced by a particular identity (likehamilcar@example.com), as attestedto by a particular OIDC provider (likehttps://github.com/login/oauth).
usage: sigstore verify identity [-h] [-v] [--certificate FILE] [--signature FILE] [--bundle FILE] --cert-identity IDENTITY [--offline] --cert-oidc-issuer URL [--staging] [--rekor-url URL] FILE [FILE ...]optional arguments: -h, --help show this help message and exit -v, --verbose run with additional debug logging; supply multiple times to increase verbosity (default: 0)Verification inputs: --certificate FILE, --cert FILE The PEM-encoded certificate to verify against; not used with multiple inputs (default: None) --signature FILE The signature to verify against; not used with multiple inputs (default: None) --bundle FILE The Sigstore bundle to verify with; not used with multiple inputs (default: None) FILE The file to verifyVerification options: --cert-identity IDENTITY The identity to check for in the certificate's Subject Alternative Name (default: None) --offline Perform offline verification; requires a Sigstore bundle (default: False) --cert-oidc-issuer URL The OIDC issuer URL to check for in the certificate's OIDC issuer extension (default: None)Sigstore instance options: --staging Use sigstore's staging instances, instead of the default production instances. This option will be deprecated in favor of the global `--staging` option in a future release. (default: False) --rekor-url URL The Rekor instance to use (conflicts with --staging). This option will be deprecated in favor of the global `--rekor-url` option in a future release. (default: None)If your signatures are coming from GitHub Actions (e.g., a workflowthat uses itsambient credentials),then you can use thesigstore verify github subcommand to verifyclaims more precisely thansigstore verify identity allows:
usage: sigstore verify github [-h] [-v] [--certificate FILE] [--signature FILE] [--bundle FILE] --cert-identity IDENTITY [--offline] [--trigger EVENT] [--sha SHA] [--name NAME] [--repository REPO] [--ref REF] [--staging] [--rekor-url URL] FILE [FILE ...]optional arguments: -h, --help show this help message and exit -v, --verbose run with additional debug logging; supply multiple times to increase verbosity (default: 0)Verification inputs: --certificate FILE, --cert FILE The PEM-encoded certificate to verify against; not used with multiple inputs (default: None) --signature FILE The signature to verify against; not used with multiple inputs (default: None) --bundle FILE The Sigstore bundle to verify with; not used with multiple inputs (default: None) FILE The file to verifyVerification options: --cert-identity IDENTITY The identity to check for in the certificate's Subject Alternative Name (default: None) --offline Perform offline verification; requires a Sigstore bundle (default: False) --trigger EVENT The GitHub Actions event name that triggered the workflow (default: None) --sha SHA The `git` commit SHA that the workflow run was invoked with (default: None) --name NAME The name of the workflow that was triggered (default: None) --repository REPO The repository slug that the workflow was triggered under (default: None) --ref REF The `git` ref that the workflow was invoked with (default: None)Sigstore instance options: --staging Use sigstore's staging instances, instead of the default production instances. This option will be deprecated in favor of the global `--staging` option in a future release. (default: False) --rekor-url URL The Rekor instance to use (conflicts with --staging). This option will be deprecated in favor of the global `--rekor-url` option in a future release. (default: None)sigstore supports a wide variety of workflows and usages. Some common ones areprovided below.
For environments that support OpenID Connect, nativelysigstore supports ambient credentialdetection. This includes many popular CI platforms and cloud providers. See the full list ofsupported environmentshere.
Sign a single file (foo.txt) using an ambient OpenID Connect credential,saving the bundle tofoo.txt.sigstore:
$python -m sigstore sign foo.txtsigstore can use an OAuth2 + OpenID flow to establish an email identity,allowing you to request signing certificates that attest to control overthat email.
Sign a single file (foo.txt) using the OAuth2 flow, saving thebundle tofoo.txt.sigstore:
$python -m sigstore sign foo.txtBy default,sigstore attempts to doambient credential detection, which may preemptthe OAuth2 flow. To force the OAuth2 flow, you can explicitly disable ambient detection:
$python -m sigstore sign --oidc-disable-ambient-providers foo.txtIf you can't use an ambient credential or the OAuth2 flow, you can pass a pre-createdidentity token directly intosigstore sign:
$python -m sigstore sign --identity-token YOUR-LONG-JWT-HERE foo.txtNote that passing a custom identity token does not circumvent Fulcio's requirements,namely the Fulcio's supported identity providers and the claims expected within the token.
By default,sigstore verify identity will attempt to find a<filename>.sigstore in thesame directory as the file being verified:
#looksfor foo.txt.sigstore$python -m sigstore verify identity foo.txt \ --cert-identity 'hamilcar@example.com' \ --cert-oidc-issuer 'https://github.com/login/oauth'
Multiple files can be verified at once:
#looksfor {foo,bar}.txt.sigstore$python -m sigstore verify identity foo.txt bar.txt \ --cert-identity 'hamilcar@example.com' \ --cert-oidc-issuer 'https://github.com/login/oauth'
sigstore verify github can be used to verify claims specific to signatures coming from GitHubActions.sigstore-python signs releases via GitHub Actions, so the examples below are workingexamples of how you can verify a givensigstore-python release.
As withsigstore verify identity, the--cert-identity flag is required. However, since we knowthat the signature was generated with an GitHub Actions ambient credential, the OIDC issuer isinferred.
$python -m sigstore verify github sigstore-0.10.0-py3-none-any.whl \ --bundle sigstore-0.10.0-py3-none-any.whl.bundle \ --cert-identity https://github.com/sigstore/sigstore-python/.github/workflows/release.yml@refs/tags/v0.10.0
Additionally, GitHub Actions specific claims can be verified like so:
$python -m sigstore verify github sigstore-0.10.0-py3-none-any.whl \ --bundle sigstore-0.10.0-py3-none-any.whl.bundle \ --cert-identity https://github.com/sigstore/sigstore-python/.github/workflows/release.yml@refs/tags/v0.10.0 \ --trigger release \ --sha 66581529803929c3ccc45334632ccd90f06e0de4 \ --name Release \ --repository sigstore/sigstore-python \ --ref refs/tags/v0.10.0
sigstore is licensed under the Apache 2.0 License.
sigstore-python is developed as part of theSigstore project.
We also use aSlack channel!Clickhere for the invite link.
Seethe contributing docs for details.
Everyone interacting with this project is expected to follow thesigstore Code of Conduct.
Should you discover any security issues, please refer to sigstore'ssecurityprocess.
This project emits a SLSA provenance on its release! This enables you to verify the integrityof the downloaded artifacts and ensured that the binary's code really comes from this source code.
To do so, please follow the instructionshere.
About
A codesigning tool for Python packages
Resources
License
Contributing
Uh oh!
There was an error while loading.Please reload this page.
Stars
Watchers
Forks
Releases
Packages0
Languages
- Python98.2%
- Makefile1.5%
- Standard ML0.3%