1. Go to this page and download the library: Download k2gl/sigstore-verify library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
k2gl / sigstore-verify example snippets
use K2gl\Sigstore\TrustedRoot;
// Fetches and verifies the trusted root over TUF (opt-in network):
$trustedRoot = TrustedRoot::fromSigstorePublicGood();
use K2gl\Sigstore\Bundle;
use K2gl\Sigstore\TrustedRoot;
use K2gl\Sigstore\IdentityPolicy;
use K2gl\Sigstore\SigstoreVerifier;
use K2gl\Sigstore\Exception\SigstoreException;
$bundle = Bundle::fromJson(file_get_contents('artifact.sigstore.json'));
$trustedRoot = TrustedRoot::fromJson(file_get_contents('trusted_root.json'));
$policy = new IdentityPolicy(
san: 'https://github.com/acme/app/.github/workflows/release.yml@refs/heads/main',
issuer: 'https://token.actions.githubusercontent.com',
);
try {
// Returns the verified DSSE envelope (K2gl\Dsse\Envelope).
$envelope = (new SigstoreVerifier())->verify($bundle, $trustedRoot, $policy);
} catch (SigstoreException $e) {
// Not trustworthy — fail closed.
throw $e;
}
// The payload is the authenticated in-toto Statement. Read it as you wish:
$statement = json_decode($envelope->payload, true);
$statement['predicateType']; // e.g. 'https://slsa.dev/provenance/v1'
$statement['subject']; // the attested artifacts
$envelope = (new SigstoreVerifier())->verifyFromJson($bundleJson, $trustedRootJson, $policy);
use K2gl\Sigstore\IdentityPolicy;
// Any workflow, any ref, in one repository (GitHub Actions OIDC):
$policy = IdentityPolicy::githubActions('acme/app');
// A specific workflow, on tag pushes only:
$policy = IdentityPolicy::githubActions('acme/app', 'release.yml', 'refs/tags/v1.2.3');
// GitLab CI (gitlab.com, or pass host: for a self-managed instance):
$policy = IdentityPolicy::gitlabCi('my-group/my-project', ref: 'refs/heads/main');
// Anything else, by PCRE pattern over the SAN:
$policy = IdentityPolicy::sanRegex(
'#^https://github\.com/acme/app/.+@refs/tags/.+$#',
'https://token.actions.githubusercontent.com',
);
use K2gl\Sigstore\SubjectPolicy;
$envelope = (new SigstoreVerifier())->verify(
bundle: $bundle,
trustedRoot: $trustedRoot,
identityPolicy: $policy,
subjectPolicy: new SubjectPolicy('sha256', hash_file('sha256', 'artifact.bin')),
);
use K2gl\InToto\Statement;
use K2gl\Slsa\Provenance;
$statement = Statement::fromEnvelope($envelope); // throws unless it is a v1 Statement
$provenance = Provenance::fromStatement($statement);
$provenance->buildDefinition->buildType; // how it was built
$provenance->runDetails->builder->id; // who built it
use K2gl\Sigstore\Bundle;
use K2gl\Sigstore\TrustedRoot;
use K2gl\Sigstore\IdentityPolicy;
use K2gl\Sigstore\SigstoreVerifier;
(new SigstoreVerifier())->verifyArtifact(
bundle: Bundle::fromJson($bundleJson),
artifact: file_get_contents('artifact.bin'),
trustedRoot: TrustedRoot::fromJson($trustedRootJson),
identityPolicy: $policy,
);
// reached here => the artifact was signed by the expected identity