Skip to content

Commit c74b966

Browse files
committed
feat: inference demo
1 parent 93fde07 commit c74b966

File tree

5 files changed

+26
-8
lines changed

5 files changed

+26
-8
lines changed

README.md

+14
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
# Tinfoil Verifier
2+
3+
## Online In-Browser Verification
4+
5+
https://tinfoilanalytics.github.io/verifier/
6+
7+
## Local Verification
8+
9+
```bash
10+
go run cmd/main.go \
11+
-attestation https://inference-demo.tinfoil.sh/.well-known/nitro-attestation \
12+
-repo tinfoilanalytics/nitro-private-inference-image \
13+
-digest c6a7de8bd85b58d958a64ee244453fa49165fa35864c8a5af333ee65b922cc8d
14+
```

cmd/main.go

+2-1
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ import (
2020
var (
2121
attestationDoc = flag.String("attestation", "", "Path to the attestation document or URL")
2222
digest = flag.String("digest", "", "Artifact digest")
23-
repo = flag.String("repo", "", "Attested repo (e.g. tinfoilanalytics/nitro-pipeline-test)")
23+
repo = flag.String("repo", "", "Attested repo (e.g. tinfoilanalytics/nitro-private-inference-image)")
2424
)
2525

2626
func gitHubAttestation(digest string) ([]byte, error) {
@@ -73,6 +73,7 @@ func main() {
7373
sigstoreRootBytes,
7474
bundleBytes,
7575
*digest,
76+
*repo,
7677
)
7778
if err != nil {
7879
panic(err)

pkg/sigstore/sigstore.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,11 @@ import (
1616

1717
const (
1818
OidcIssuer = "https://token.actions.githubusercontent.com"
19-
SanRegex = "^https://github.com/tinfoilanalytics/nitro-enclave-pipeline-test/.github/workflows/release.yml@refs/tags/*"
2019
)
2120

2221
// VerifyAttestedMeasurements verifies the attested measurements of an EIF measurement
2322
// against a trusted root (Sigstore) and returns the measurement payload contained in the DSSE.
24-
func VerifyAttestedMeasurements(trustedRootJSON, bundleJSON []byte, hexDigest string) (*models.Measurements, error) {
23+
func VerifyAttestedMeasurements(trustedRootJSON, bundleJSON []byte, hexDigest, repo string) (*models.Measurements, error) {
2524
trustedMaterial, err := root.NewTrustedRootFromJSON(trustedRootJSON)
2625
if err != nil {
2726
return nil, fmt.Errorf("parsing trusted root: %w", err)
@@ -47,7 +46,8 @@ func VerifyAttestedMeasurements(trustedRootJSON, bundleJSON []byte, hexDigest st
4746
OidcIssuer,
4847
"",
4948
"",
50-
SanRegex)
49+
"^https://github.com/"+repo+"/.github/workflows/release.yml@refs/tags/*",
50+
)
5151
if err != nil {
5252
return nil, fmt.Errorf("creating certificate identity: %w", err)
5353
}

wasm/index.html

+5-4
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
<script src="wasm_exec.js"></script>
1111
<script>
1212
function verify() {
13+
let repo = "tinfoilanalytics/nitro-private-inference-image"
1314
let digest = document.getElementById("digest").value;
1415
let domain = document.getElementById("domain").value;
1516
let log = document.getElementById("log");
@@ -27,7 +28,7 @@
2728
go.run(result.instance);
2829
addLog("WASM verifier loaded");
2930

30-
let bundleURL = "https://api.github.com/repos/tinfoilanalytics/nitro-enclave-pipeline-test/attestations/sha256:" + digest;
31+
let bundleURL = "https://api.github.com/repos/"+repo+"/attestations/sha256:" + digest;
3132
addLog("Fetching attestation bundle from " + bundleURL);
3233
let sigstorePromise = fetch(bundleURL)
3334
.catch(error => {
@@ -46,7 +47,7 @@
4647
.then(data => {
4748
let bundle = data.attestations[0].bundle;
4849
addLog("Verifying sigstore signature");
49-
let sigstoreMeasurements = JSON.parse(verifySigstore(digest, JSON.stringify(bundle)));
50+
let sigstoreMeasurements = JSON.parse(verifySigstore(digest, JSON.stringify(bundle), repo));
5051
addLog("Sigstore PCR0: " + sigstoreMeasurements.PCR0);
5152
addLog("Sigstore PCR1: " + sigstoreMeasurements.PCR1);
5253
addLog("Sigstore PCR2: " + sigstoreMeasurements.PCR2);
@@ -129,15 +130,15 @@ <h1 class="text-2xl font-bold">Tinfoil Verifier</h1>
129130
id="digest"
130131
class="border border-gray-200 p-2 w-full"
131132
type="text"
132-
value="cabdc1385f1f69e2a19215b4cdc153d6843b26e0e570ccf423408a8b7598e935">
133+
value="c6a7de8bd85b58d958a64ee244453fa49165fa35864c8a5af333ee65b922cc8d">
133134
</div>
134135
<div class="w-[30%]">
135136
<p class="text-gray-600 mb-2">URL:</p>
136137
<input
137138
id="domain"
138139
class="border border-gray-200 p-2 w-full"
139140
type="text"
140-
value="attestation-demo.tinfoil.sh">
141+
value="inference-demo.tinfoil.sh">
141142
</div>
142143
<div class="w-[10%] flex items-end">
143144
<button class="bg-emerald-500 text-white px-4 py-2 w-full" onclick="verify()">Verify</button>

wasm/main.go

+2
Original file line numberDiff line numberDiff line change
@@ -21,11 +21,13 @@ func verifySigstore() js.Func {
2121
return js.FuncOf(func(this js.Value, args []js.Value) any {
2222
digest := args[0].String()
2323
bundleBytes := []byte(args[1].String())
24+
repo := args[2].String()
2425

2526
sigstoreMeasurements, err := sigstore.VerifyAttestedMeasurements(
2627
trustedRootBytes,
2728
bundleBytes,
2829
digest,
30+
repo,
2931
)
3032
if err != nil {
3133
panic(err)

0 commit comments

Comments
 (0)