Skip to content

Commit 3ded56e

Browse files
committed
add --verify-digest flag
Signed-off-by: Brian DeHamer <[email protected]>
1 parent 0d94227 commit 3ded56e

File tree

6 files changed

+125
-0
lines changed

6 files changed

+125
-0
lines changed

packages/cli/att.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
{"mediaType":"application/vnd.dev.sigstore.bundle+json;version=0.2","verificationMaterial":{"x509CertificateChain":{"certificates":[{"rawBytes":"MIIC0DCCAlagAwIBAgIUX2vg/1EgATbtMEaf/YbyaHz1HKQwCgYIKoZIzj0EAwMwNzEVMBMGA1UEChMMc2lnc3RvcmUuZGV2MR4wHAYDVQQDExVzaWdzdG9yZS1pbnRlcm1lZGlhdGUwHhcNMjQwMzA3MjA0MjQ0WhcNMjQwMzA3MjA1MjQ0WjAAMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEeqJuFoMyljW+GGB5SRBrR/YTv4+6Mfdr5YK/Yo+hTn45vQCAuEPWkmuoH0LI4AyWYKhoWtBmX9rZOCNSAwVPBaOCAXUwggFxMA4GA1UdDwEB/wQEAwIHgDATBgNVHSUEDDAKBggrBgEFBQcDAzAdBgNVHQ4EFgQUil8Vd48c2ZIMTWQxREQhilZdYZswHwYDVR0jBBgwFoAU39Ppz1YkEZb5qNjpKFWixi4YZD8wHwYDVR0RAQH/BBUwE4ERYnJpYW5AZGVoYW1lci5jb20wLAYKKwYBBAGDvzABAQQeaHR0cHM6Ly9naXRodWIuY29tL2xvZ2luL29hdXRoMC4GCisGAQQBg78wAQgEIAweaHR0cHM6Ly9naXRodWIuY29tL2xvZ2luL29hdXRoMIGKBgorBgEEAdZ5AgQCBHwEegB4AHYA3T0wasbHETJjGR4cmWc3AqJKXrjePK3/h4pygC8p7o4AAAGOGqdxDwAABAMARzBFAiEAp4xcs8rhxkPFseCfj95qMHmPCd0CUYkFGkO0XP1pX20CIHMPqlwdzAQhdkBsqWMfjH8Vvj80h27IMtprlTq6c40KMAoGCCqGSM49BAMDA2gAMGUCMQDQ2YqX/MuTTwYCR560eWIhJxQd6zdEVBxAwEStNOYa34CrIcXiA4SCYWqC72XU6XYCMDVt911+n5Xo2t2pkFXnnuFHn7WeBAlOczO2pZ0mqt1Il2FpY/8uElY7554xDWJd0Q=="}]},"tlogEntries":[{"logIndex":"76417136","logId":{"keyId":"wNI9atQGlz+VWfO6LRygH4QUfY/8W4RFwiT5i5WRgB0="},"kindVersion":{"kind":"intoto","version":"0.0.2"},"integratedTime":"1709844165","inclusionPromise":{"signedEntryTimestamp":"MEUCIEHUFPQDCZp35CVvJ/oR9uj84HQ/WCNHrqRRRtpzNQ4oAiEA7mGsa6Td3A86hZpIOhKpjoeB2JL7irmbM/SZRp9zD+U="},"inclusionProof":{"logIndex":"72253705","rootHash":"V0uoTOpbERdFo6kmsNJYDF14ZCI6HA30fJwFNK82D1k=","treeSize":"72253706","hashes":["6zxGGIIsJy6IJZ0GOgPZVVYeF2gK9MJKBRJshKRFBEA=","lnAhXzdIz9hzwWwwdGw4VwlfdxCKHDcgFvz4lhjIhms=","BmAfvdsJnshW8WM0GhVAnnLZeQbbQ7Ic+AWtbaLokGs=","juoHKu2JXCXK05wS7JCE+dt4T0xEhCO3uZOwQgDnpLk=","BCtyCVAyart6p0F9UhUXKvvjrDzTG2HM8zmynPWhEpU=","hGL2U0kv4o7ALM+KI6bbQHMholGa0NI0Y5gz7hPRTNk=","XE7+Pykrktsdsy1ru6V4IsFAOKTJosu3KUa0//TCa0w=","7Z18YLBAvejEV4nJHIKoks/xlijnhR005qTW2w4QtHg=","98enzMaC+x5oCMvIZQA5z8vu2apDMCFvE/935NfuPw8="],"checkpoint":{"envelope":"rekor.sigstore.dev - 2605736670972794746\n72253706\nV0uoTOpbERdFo6kmsNJYDF14ZCI6HA30fJwFNK82D1k=\n\n— rekor.sigstore.dev wNI9ajBFAiB+fajbz1Cc2uMLBvlVi8OS4xtcu8O4AwXX3YANgwL/ggIhANtS4C31RRZI+FudKP75Pq0LkbGMN2PVD2yLfT6ivyI0\n"}},"canonicalizedBody":"eyJhcGlWZXJzaW9uIjoiMC4wLjIiLCJraW5kIjoiaW50b3RvIiwic3BlYyI6eyJjb250ZW50Ijp7ImVudmVsb3BlIjp7InBheWxvYWRUeXBlIjoiYXBwbGljYXRpb24vdm5kLmluLXRvdG8ranNvbiIsInNpZ25hdHVyZXMiOlt7InB1YmxpY0tleSI6IkxTMHRMUzFDUlVkSlRpQkRSVkpVU1VaSlEwRlVSUzB0TFMwdENrMUpTVU13UkVORFFXeGhaMEYzU1VKQlowbFZXREoyWnk4eFJXZEJWR0owVFVWaFppOVpZbmxoU0hveFNFdFJkME5uV1VsTGIxcEplbW93UlVGM1RYY0tUbnBGVmsxQ1RVZEJNVlZGUTJoTlRXTXliRzVqTTFKMlkyMVZkVnBIVmpKTlVqUjNTRUZaUkZaUlVVUkZlRlo2WVZka2VtUkhPWGxhVXpGd1ltNVNiQXBqYlRGc1drZHNhR1JIVlhkSWFHTk9UV3BSZDAxNlFUTk5ha0V3VFdwUk1GZG9ZMDVOYWxGM1RYcEJNMDFxUVRGTmFsRXdWMnBCUVUxR2EzZEZkMWxJQ2t0dldrbDZhakJEUVZGWlNVdHZXa2w2YWpCRVFWRmpSRkZuUVVWbGNVcDFSbTlOZVd4cVZ5dEhSMEkxVTFKQ2NsSXZXVlIyTkNzMlRXWmtjalZaU3k4S1dXOHJhRlJ1TkRWMlVVTkJkVVZRVjJ0dGRXOUlNRXhKTkVGNVYxbExhRzlYZEVKdFdEbHlXazlEVGxOQmQxWlFRbUZQUTBGWVZYZG5aMFo0VFVFMFJ3cEJNVlZrUkhkRlFpOTNVVVZCZDBsSVowUkJWRUpuVGxaSVUxVkZSRVJCUzBKblozSkNaMFZHUWxGalJFRjZRV1JDWjA1V1NGRTBSVVpuVVZWcGJEaFdDbVEwT0dNeVdrbE5WRmRSZUZKRlVXaHBiRnBrV1ZwemQwaDNXVVJXVWpCcVFrSm5kMFp2UVZVek9WQndlakZaYTBWYVlqVnhUbXB3UzBaWGFYaHBORmtLV2tRNGQwaDNXVVJXVWpCU1FWRklMMEpDVlhkRk5FVlNXVzVLY0ZsWE5VRmFSMVp2V1ZjeGJHTnBOV3BpTWpCM1RFRlpTMHQzV1VKQ1FVZEVkbnBCUWdwQlVWRmxZVWhTTUdOSVRUWk1lVGx1WVZoU2IyUlhTWFZaTWpsMFRESjRkbG95YkhWTU1qbG9aRmhTYjAxRE5FZERhWE5IUVZGUlFtYzNPSGRCVVdkRkNrbEJkMlZoU0ZJd1kwaE5Oa3g1T1c1aFdGSnZaRmRKZFZreU9YUk1NbmgyV2pKc2RVd3lPV2hrV0ZKdlRVbEhTMEpuYjNKQ1owVkZRV1JhTlVGblVVTUtRa2gzUldWblFqUkJTRmxCTTFRd2QyRnpZa2hGVkVwcVIxSTBZMjFYWXpOQmNVcExXSEpxWlZCTE15OW9OSEI1WjBNNGNEZHZORUZCUVVkUFIzRmtlQXBFZDBGQlFrRk5RVko2UWtaQmFVVkJjRFI0WTNNNGNtaDRhMUJHYzJWRFptbzVOWEZOU0cxUVEyUXdRMVZaYTBaSGEwOHdXRkF4Y0ZneU1FTkpTRTFRQ25Gc2QyUjZRVkZvWkd0Q2MzRlhUV1pxU0RoV2RtbzRNR2d5TjBsTmRIQnliRlJ4Tm1NME1FdE5RVzlIUTBOeFIxTk5ORGxDUVUxRVFUSm5RVTFIVlVNS1RWRkVVVEpaY1ZndlRYVlVWSGRaUTFJMU5qQmxWMGxvU25oUlpEWjZaRVZXUW5oQmQwVlRkRTVQV1dFek5FTnlTV05ZYVVFMFUwTlpWM0ZETnpKWVZRbzJXRmxEVFVSV2REa3hNU3R1TlZodk1uUXljR3RHV0c1dWRVWkliamRYWlVKQmJFOWplazh5Y0Zvd2JYRjBNVWxzTWtad1dTODRkVVZzV1RjMU5UUjRDa1JYU21Rd1VUMDlDaTB0TFMwdFJVNUVJRU5GVWxSSlJrbERRVlJGTFMwdExTMD0iLCJzaWciOiJUVVZWUTBsUlF6WjZkakJxY0hreVZrUlBTbWxXVVhNd1R6aDViV0ZaU2t4YVV5dEJaWFphYTJ0R05FSnJaVTFhVm1kSloyUktkbnB3TkV0UGVUYzBhamR5TmpWMWNFRm9XVTUyVlROUVVXMVJNRGQwTjFsYWRYWlBkVmN2T0RROSJ9XX0sImhhc2giOnsiYWxnb3JpdGhtIjoic2hhMjU2IiwidmFsdWUiOiIxYTcxYzYxYjE4YzExYTgwOGVjZjViY2IyNzRmZjFmNjZmM2UwMzIwMWI3ODM4YjY0MmExNmJmZDJhMzcxOWFlIn0sInBheWxvYWRIYXNoIjp7ImFsZ29yaXRobSI6InNoYTI1NiIsInZhbHVlIjoiZWMwNWU0ZWQ2MTljZWFhNjU0YjIyNzAwNmIyMWM4ZGQyMTc1NjM1NDFjYTJhOTAwZDkyNTU1ZmYzOWI1MzFhNyJ9fX19"}],"timestampVerificationData":{"rfc3161Timestamps":[]}},"dsseEnvelope":{"payload":"ewogICJfdHlwZSI6ICJodHRwczovL2luLXRvdG8uaW8vU3RhdGVtZW50L3YxIiwKICAic3ViamVjdCI6IFsKICAgIHsKICAgICAgIm5hbWUiOiAiZGVoYW1lci5henVyZWNyLmlvL2dpdGh1Yi90cnVzdC1tZXRhZGF0YS1kZW1vIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogIjIxOTMyMDdhMjJkOGQ4ZDk3MzUxMmI0NmIxYzkyNWNmYmQyMDdmNmY0OTlhOGExZDZkNTJiNjY1MTkwZDc1YTgiCiAgICAgIH0KICAgIH0KICBdLAogICJwcmVkaWNhdGVUeXBlIjogImh0dHBzOi8vaW4tdG90by5pby9hdHRlc3RhdGlvbi9yZWxlYXNlL3YwLjEiLAogICJwcmVkaWNhdGUiOiB7CiAgICAicHVybCI6ICJwa2c6b2NpL3RydXN0LW1ldGFkYXRhLWRlbW9Ac2hhMjU2JTNBMjE5MzIwN2EyMmQ4ZDhkOTczNTEyYjQ2YjFjOTI1Y2ZiZDIwN2Y2ZjQ5OWE4YTFkNmQ1MmI2NjUxOTBkNzVhOD9yZXBvc2l0b3J5X3VybD1kZWhhbWVyLmF6dXJlY3IuaW8vZ2l0aHViL3RydXN0LW1ldGFkYXRhLWRlbW8iCiAgfQp9Cg==","payloadType":"application/vnd.in-toto+json","signatures":[{"sig":"MEUCIQC6zv0jpy2VDOJiVQs0O8ymaYJLZS+AevZkkF4BkeMZVgIgdJvzp4KOy74j7r65upAhYNvU3PQmQ07t7YZuvOuW/84=","keyid":""}]}}

packages/cli/multistmt

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
{
2+
"_type": "https://in-toto.io/Statement/v1",
3+
"subject": [
4+
{
5+
"name": "dehamer.azurecr.io/github/trust-metadata-demo",
6+
"digest": {
7+
"sha256": "2193207a22d8d8d973512b46b1c925cfbd207f6f499a8a1d6d52b665190d75a8"
8+
}
9+
},
10+
{
11+
"name": "dehamer.azurecr.io/github/trust-metadata-demo2",
12+
"digest": {
13+
"sha256": "3193207a22d8d8d973512b46b1c925cfbd207f6f499a8a1d6d52b665190d75a8"
14+
}
15+
}
16+
],
17+
"predicateType": "https://in-toto.io/attestation/release/v0.1",
18+
"predicate": {
19+
"purl": "pkg:oci/trust-metadata-demo@sha256%3A2193207a22d8d8d973512b46b1c925cfbd207f6f499a8a1d6d52b665190d75a8?repository_url=dehamer.azurecr.io/github/trust-metadata-demo"
20+
}
21+
}

packages/cli/src/oauth/client.mts

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
import { BaseClient, Issuer, generators } from 'openid-client';
2+
3+
interface OAuthClientOptions {
4+
issuer: string;
5+
redirectURL: string;
6+
clientID: string;
7+
clientSecret?: string;
8+
}
9+
10+
// Returns an openid Client instance configured by looking up
11+
// the issuer's configuration from the well-known endpoint.
12+
export async function initializeOAuthClient(
13+
options: OAuthClientOptions
14+
): Promise<OAuthClient> {
15+
const authMethod = options.clientSecret ? 'client_secret_basic' : 'none';
16+
const client = await Issuer.discover(options.issuer).then(
17+
(issuer) =>
18+
new issuer.Client({
19+
client_id: options.clientID,
20+
client_secret: options.clientSecret,
21+
token_endpoint_auth_method: authMethod,
22+
})
23+
);
24+
25+
return new OAuthClient(client, options.redirectURL);
26+
}
27+
28+
// Wrapper around an openid-client Client instance to maintain
29+
// state for the authorization flow.
30+
class OAuthClient {
31+
private client: BaseClient;
32+
private redirectURL: string;
33+
private verifier: string;
34+
private nonce: string;
35+
private state: string;
36+
37+
constructor(client: BaseClient, redirectURL: string) {
38+
this.client = client;
39+
this.redirectURL = redirectURL;
40+
this.verifier = generators.codeVerifier(32);
41+
this.nonce = generators.nonce(32);
42+
this.state = generators.state(16);
43+
}
44+
45+
get authorizationUrl(): string {
46+
return this.client.authorizationUrl({
47+
scope: 'openid email',
48+
redirect_uri: this.redirectURL,
49+
code_challenge: generators.codeChallenge(this.verifier),
50+
code_challenge_method: 'S256',
51+
state: this.state,
52+
nonce: this.nonce,
53+
});
54+
}
55+
56+
public async getIDToken(callbackURL: string): Promise<string> {
57+
const params = this.client.callbackParams(callbackURL);
58+
return (
59+
this.client
60+
.callback(this.redirectURL, params, {
61+
response_type: 'code',
62+
code_verifier: this.verifier,
63+
state: this.state,
64+
nonce: this.nonce,
65+
})
66+
.then((tokenSet) => tokenSet.id_token!)
67+
);
68+
}
69+
}

packages/cli/stmt

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
{
2+
"_type": "https://in-toto.io/Statement/v1",
3+
"subject": [
4+
{
5+
"name": "dehamer.azurecr.io/github/trust-metadata-demo",
6+
"digest": {
7+
"sha256": "2193207a22d8d8d973512b46b1c925cfbd207f6f499a8a1d6d52b665190d75a8"
8+
}
9+
}
10+
],
11+
"predicateType": "https://in-toto.io/attestation/release/v0.1",
12+
"predicate": {
13+
"purl": "pkg:oci/trust-metadata-demo@sha256%3A2193207a22d8d8d973512b46b1c925cfbd207f6f499a8a1d6d52b665190d75a8?repository_url=dehamer.azurecr.io/github/trust-metadata-demo"
14+
}
15+
}

packages/cli/stmt2

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
{
2+
"_type": "https://in-toto.io/Statement/v1",
3+
"subject": [
4+
{
5+
"name": "art",
6+
"digest": {
7+
"sha256": "9b3b4549d391e31f4ef57b65c436db64683ab09090a54c77a64c1cd22a2f7a92"
8+
}
9+
}
10+
],
11+
"predicateType": "https://in-toto.io/attestation/release/v0.1",
12+
"predicate": {
13+
"purl": "pkg:oci/trust-metadata-demo@sha256%3A2193207a22d8d8d973512b46b1c925cfbd207f6f499a8a1d6d52b665190d75a8?repository_url=dehamer.azurecr.io/github/trust-metadata-demo"
14+
}
15+
}

packages/conformance/src/commands/verify-bundle.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,10 @@ export default class VerifyBundle extends Command {
4444
description: 'whether to use the staging environment',
4545
default: false,
4646
}),
47+
'verify-digest': Flags.boolean({
48+
description: 'whether to use the staging environment',
49+
default: false,
50+
}),
4751
};
4852

4953
static override args = {

0 commit comments

Comments
 (0)