Skip to content

Commit 8f9f606

Browse files
authored
Add helper to verify release assets with sigstore (#229)
* Add helper to verify release assets with sigstore * rename * add all options to test
1 parent 07738f6 commit 8f9f606

File tree

4 files changed

+1241
-466
lines changed

4 files changed

+1241
-466
lines changed

aiogithubapi/helpers.py

+45
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,17 @@
11
"""Helpers for AIOGitHubAPI."""
22
from __future__ import annotations
33

4+
from io import BytesIO
45
from typing import Optional
56

67
import aiohttp
8+
from sigstore.verify import (
9+
VerificationMaterials,
10+
VerificationResult,
11+
Verifier,
12+
models,
13+
policy,
14+
)
715

816
from .const import HttpMethod, Repository, RepositoryType
917
from .legacy.helpers import (
@@ -37,3 +45,40 @@ async def async_call_api(
3745
return await legacy_async_call_api(
3846
session, method, url, headers, params, data, jsondata, returnjson
3947
)
48+
49+
50+
def sigstore_verify_release_asset(
51+
asset: bytes,
52+
signature_bundle: bytes,
53+
repository: str,
54+
workflow: str,
55+
tag: str,
56+
*,
57+
workflow_name: str | None = None,
58+
workflow_trigger: str | None = None,
59+
offline_verification: bool = False,
60+
**kwargs,
61+
) -> VerificationResult:
62+
"""Verify release asset."""
63+
verifier = Verifier.production()
64+
policies = [
65+
policy.Identity(
66+
identity=f"https://github.com/{repository}/.github/workflows/{workflow}@refs/tags/{tag}",
67+
issuer="https://token.actions.githubusercontent.com",
68+
),
69+
policy.GitHubWorkflowRepository(repository),
70+
policy.GitHubWorkflowRef(f"refs/tags/{tag}"),
71+
]
72+
if workflow_trigger:
73+
policies.append(policy.GitHubWorkflowTrigger(workflow_trigger))
74+
if workflow_name:
75+
policies.append(policy.GitHubWorkflowName(workflow_name))
76+
77+
return verifier.verify(
78+
VerificationMaterials.from_bundle(
79+
input_=BytesIO(asset),
80+
bundle=models.Bundle().from_json(signature_bundle),
81+
offline=offline_verification,
82+
),
83+
policy=policy.AllOf(policies),
84+
)

0 commit comments

Comments
 (0)