diff --git a/pkg/anago/anago.go b/pkg/anago/anago.go index 34ee8d8f19d..3deabdef976 100644 --- a/pkg/anago/anago.go +++ b/pkg/anago/anago.go @@ -403,6 +403,13 @@ func (r *Release) Run() error { return errors.Wrap(err, "prepare workspace") } + logger.WithStep().Info("Checking artifacts provenance") + if err := r.client.CheckProvenance(); err != nil { + // For now, we ony notify provenance errors as not to treat + // them as fatal while we finish testing SLSA compliance. + logrus.Warn(errors.Wrap(err, "checking provenance attestation")) + } + logger.WithStep().Info("Pushing artifacts") if err := r.client.PushArtifacts(); err != nil { return errors.Wrap(err, "push artifacts") diff --git a/pkg/anago/anagofakes/fake_release_client.go b/pkg/anago/anagofakes/fake_release_client.go index 86408af736b..baa82db44b2 100644 --- a/pkg/anago/anagofakes/fake_release_client.go +++ b/pkg/anago/anagofakes/fake_release_client.go @@ -42,6 +42,16 @@ type FakeReleaseClient struct { checkPrerequisitesReturnsOnCall map[int]struct { result1 error } + CheckProvenanceStub func() error + checkProvenanceMutex sync.RWMutex + checkProvenanceArgsForCall []struct { + } + checkProvenanceReturns struct { + result1 error + } + checkProvenanceReturnsOnCall map[int]struct { + result1 error + } CheckReleaseBranchStateStub func() error checkReleaseBranchStateMutex sync.RWMutex checkReleaseBranchStateArgsForCall []struct { @@ -257,6 +267,59 @@ func (fake *FakeReleaseClient) CheckPrerequisitesReturnsOnCall(i int, result1 er }{result1} } +func (fake *FakeReleaseClient) CheckProvenance() error { + fake.checkProvenanceMutex.Lock() + ret, specificReturn := fake.checkProvenanceReturnsOnCall[len(fake.checkProvenanceArgsForCall)] + fake.checkProvenanceArgsForCall = append(fake.checkProvenanceArgsForCall, struct { + }{}) + stub := fake.CheckProvenanceStub + fakeReturns := fake.checkProvenanceReturns + fake.recordInvocation("CheckProvenance", []interface{}{}) + fake.checkProvenanceMutex.Unlock() + if stub != nil { + return stub() + } + if specificReturn { + return ret.result1 + } + return fakeReturns.result1 +} + +func (fake *FakeReleaseClient) CheckProvenanceCallCount() int { + fake.checkProvenanceMutex.RLock() + defer fake.checkProvenanceMutex.RUnlock() + return len(fake.checkProvenanceArgsForCall) +} + +func (fake *FakeReleaseClient) CheckProvenanceCalls(stub func() error) { + fake.checkProvenanceMutex.Lock() + defer fake.checkProvenanceMutex.Unlock() + fake.CheckProvenanceStub = stub +} + +func (fake *FakeReleaseClient) CheckProvenanceReturns(result1 error) { + fake.checkProvenanceMutex.Lock() + defer fake.checkProvenanceMutex.Unlock() + fake.CheckProvenanceStub = nil + fake.checkProvenanceReturns = struct { + result1 error + }{result1} +} + +func (fake *FakeReleaseClient) CheckProvenanceReturnsOnCall(i int, result1 error) { + fake.checkProvenanceMutex.Lock() + defer fake.checkProvenanceMutex.Unlock() + fake.CheckProvenanceStub = nil + if fake.checkProvenanceReturnsOnCall == nil { + fake.checkProvenanceReturnsOnCall = make(map[int]struct { + result1 error + }) + } + fake.checkProvenanceReturnsOnCall[i] = struct { + result1 error + }{result1} +} + func (fake *FakeReleaseClient) CheckReleaseBranchState() error { fake.checkReleaseBranchStateMutex.Lock() ret, specificReturn := fake.checkReleaseBranchStateReturnsOnCall[len(fake.checkReleaseBranchStateArgsForCall)] @@ -826,6 +889,8 @@ func (fake *FakeReleaseClient) Invocations() map[string][][]interface{} { defer fake.archiveMutex.RUnlock() fake.checkPrerequisitesMutex.RLock() defer fake.checkPrerequisitesMutex.RUnlock() + fake.checkProvenanceMutex.RLock() + defer fake.checkProvenanceMutex.RUnlock() fake.checkReleaseBranchStateMutex.RLock() defer fake.checkReleaseBranchStateMutex.RUnlock() fake.createAnnouncementMutex.RLock() diff --git a/pkg/anago/anagofakes/fake_release_impl.go b/pkg/anago/anagofakes/fake_release_impl.go index 0b06b0e670c..edd4d1da99c 100644 --- a/pkg/anago/anagofakes/fake_release_impl.go +++ b/pkg/anago/anagofakes/fake_release_impl.go @@ -76,6 +76,18 @@ type FakeReleaseImpl struct { checkReleaseBucketReturnsOnCall map[int]struct { result1 error } + CheckStageProvenanceStub func(string, string) error + checkStageProvenanceMutex sync.RWMutex + checkStageProvenanceArgsForCall []struct { + arg1 string + arg2 string + } + checkStageProvenanceReturns struct { + result1 error + } + checkStageProvenanceReturnsOnCall map[int]struct { + result1 error + } CopyStagedFromGCSStub func(*build.Options, string, string) error copyStagedFromGCSMutex sync.RWMutex copyStagedFromGCSArgsForCall []struct { @@ -536,6 +548,68 @@ func (fake *FakeReleaseImpl) CheckReleaseBucketReturnsOnCall(i int, result1 erro }{result1} } +func (fake *FakeReleaseImpl) CheckStageProvenance(arg1 string, arg2 string) error { + fake.checkStageProvenanceMutex.Lock() + ret, specificReturn := fake.checkStageProvenanceReturnsOnCall[len(fake.checkStageProvenanceArgsForCall)] + fake.checkStageProvenanceArgsForCall = append(fake.checkStageProvenanceArgsForCall, struct { + arg1 string + arg2 string + }{arg1, arg2}) + stub := fake.CheckStageProvenanceStub + fakeReturns := fake.checkStageProvenanceReturns + fake.recordInvocation("CheckStageProvenance", []interface{}{arg1, arg2}) + fake.checkStageProvenanceMutex.Unlock() + if stub != nil { + return stub(arg1, arg2) + } + if specificReturn { + return ret.result1 + } + return fakeReturns.result1 +} + +func (fake *FakeReleaseImpl) CheckStageProvenanceCallCount() int { + fake.checkStageProvenanceMutex.RLock() + defer fake.checkStageProvenanceMutex.RUnlock() + return len(fake.checkStageProvenanceArgsForCall) +} + +func (fake *FakeReleaseImpl) CheckStageProvenanceCalls(stub func(string, string) error) { + fake.checkStageProvenanceMutex.Lock() + defer fake.checkStageProvenanceMutex.Unlock() + fake.CheckStageProvenanceStub = stub +} + +func (fake *FakeReleaseImpl) CheckStageProvenanceArgsForCall(i int) (string, string) { + fake.checkStageProvenanceMutex.RLock() + defer fake.checkStageProvenanceMutex.RUnlock() + argsForCall := fake.checkStageProvenanceArgsForCall[i] + return argsForCall.arg1, argsForCall.arg2 +} + +func (fake *FakeReleaseImpl) CheckStageProvenanceReturns(result1 error) { + fake.checkStageProvenanceMutex.Lock() + defer fake.checkStageProvenanceMutex.Unlock() + fake.CheckStageProvenanceStub = nil + fake.checkStageProvenanceReturns = struct { + result1 error + }{result1} +} + +func (fake *FakeReleaseImpl) CheckStageProvenanceReturnsOnCall(i int, result1 error) { + fake.checkStageProvenanceMutex.Lock() + defer fake.checkStageProvenanceMutex.Unlock() + fake.CheckStageProvenanceStub = nil + if fake.checkStageProvenanceReturnsOnCall == nil { + fake.checkStageProvenanceReturnsOnCall = make(map[int]struct { + result1 error + }) + } + fake.checkStageProvenanceReturnsOnCall[i] = struct { + result1 error + }{result1} +} + func (fake *FakeReleaseImpl) CopyStagedFromGCS(arg1 *build.Options, arg2 string, arg3 string) error { fake.copyStagedFromGCSMutex.Lock() ret, specificReturn := fake.copyStagedFromGCSReturnsOnCall[len(fake.copyStagedFromGCSArgsForCall)] @@ -1630,6 +1704,8 @@ func (fake *FakeReleaseImpl) Invocations() map[string][][]interface{} { defer fake.checkPrerequisitesMutex.RUnlock() fake.checkReleaseBucketMutex.RLock() defer fake.checkReleaseBucketMutex.RUnlock() + fake.checkStageProvenanceMutex.RLock() + defer fake.checkStageProvenanceMutex.RUnlock() fake.copyStagedFromGCSMutex.RLock() defer fake.copyStagedFromGCSMutex.RUnlock() fake.copyToRemoteMutex.RLock() diff --git a/pkg/anago/release.go b/pkg/anago/release.go index 293ce4fbf58..da53ab20d31 100644 --- a/pkg/anago/release.go +++ b/pkg/anago/release.go @@ -69,6 +69,10 @@ type releaseClient interface { // bucket which should contain a copy of the repository. PrepareWorkspace() error + // CheckProvenance downloads the artifacts from the staging bucket + // and verifies them against the provenance metadata. + CheckProvenance() error + // PushArtifacts pushes the generated artifacts to the release bucket and // Google Container Registry for the specified release `versions`. PushArtifacts() error @@ -154,6 +158,7 @@ type releaseImpl interface { gcsIndexRootPath, gcsReleaseNotesPath, version string, ) error CreatePubBotBranchIssue(string) error + CheckStageProvenance(string, string) error } func (d *defaultReleaseImpl) Submit(options *gcb.Options) error { @@ -621,3 +626,17 @@ func (d *DefaultRelease) Archive() error { return nil } + +// CheckProvenance verifies the artifacts staged in the release bucket +// by verifying the provenance metadata generated during the stage run. +func (d *DefaultRelease) CheckProvenance() error { + return d.impl.CheckStageProvenance(d.options.Bucket(), d.options.BuildVersion) +} + +func (d *defaultReleaseImpl) CheckStageProvenance(bucket, buildVersion string) error { + checker := release.NewProvenanceChecker(&release.ProvenanceCheckerOptions{ + StageBucket: bucket, + }) + + return checker.CheckStageProvenance(buildVersion) +} diff --git a/pkg/anago/release_test.go b/pkg/anago/release_test.go index 9b67d28a11d..fc428b558f3 100644 --- a/pkg/anago/release_test.go +++ b/pkg/anago/release_test.go @@ -436,3 +436,33 @@ func TestUpdateGitHubPage(t *testing.T) { } } } + +func TestCheckProvenance(t *testing.T) { + for _, tc := range []struct { + prepare func(*anagofakes.FakeReleaseImpl) + shouldError bool + }{ + { // success + prepare: func(*anagofakes.FakeReleaseImpl) {}, + shouldError: false, + }, + { // Provenance does not check + prepare: func(mock *anagofakes.FakeReleaseImpl) { + mock.CheckStageProvenanceReturns(err) + }, + shouldError: true, + }, + } { + opts := anago.DefaultReleaseOptions() + sut := anago.NewDefaultRelease(opts) + mock := &anagofakes.FakeReleaseImpl{} + tc.prepare(mock) + sut.SetImpl(mock) + err := sut.CheckProvenance() + if tc.shouldError { + require.NotNil(t, err) + } else { + require.Nil(t, err) + } + } +} diff --git a/pkg/provenance/provenance.go b/pkg/provenance/provenance.go index 4df8c697a06..84947809c94 100644 --- a/pkg/provenance/provenance.go +++ b/pkg/provenance/provenance.go @@ -19,10 +19,30 @@ limitations under the License. package provenance import ( + "encoding/json" + "os" + intoto "github.com/in-toto/in-toto-golang/in_toto" + "github.com/pkg/errors" ) -// NewStatement creates a new attestation +// LoadStatement loads a statement from a json file +func LoadStatement(path string) (s *Statement, err error) { + statement := NewSLSAStatement() + + jsonData, err := os.ReadFile(path) + if err != nil { + return nil, errors.Wrap(err, "opening stament JSON file") + } + + if err := json.Unmarshal(jsonData, &statement); err != nil { + return nil, errors.Wrap(err, "decoding attestation JSON data") + } + + return statement, nil +} + +// NewSLSAStatement creates a new attestation func NewSLSAStatement() *Statement { return &Statement{ diff --git a/pkg/provenance/provenance_unit_test.go b/pkg/provenance/provenance_unit_test.go new file mode 100644 index 00000000000..2327788d614 --- /dev/null +++ b/pkg/provenance/provenance_unit_test.go @@ -0,0 +1,40 @@ +/* +Copyright 2021 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package provenance + +import ( + "testing" + + "github.com/stretchr/testify/require" +) + +const testProvenanceFile1 = "testdata/k8s-1.23.0-alpha.4-provenance.json" + +func TestReadStatment(t *testing.T) { + s, err := LoadStatement(testProvenanceFile1) + require.Nil(t, err) + require.NotNil(t, s) + + require.NotNil(t, s.Predicate) + require.NotNil(t, s.Predicate.Recipe) + require.Equal(t, 461, len(s.Subject)) + require.Equal(t, s.Predicate.Builder.ID, "pkg:github/puerco/release@provenance") + require.Equal(t, s.Predicate.Recipe.Type, "https://cloudbuild.googleapis.com/CloudBuildYaml@v1") + require.Equal(t, 3, len(s.Predicate.Recipe.Arguments.(map[string]interface{}))) + require.Equal(t, "94db9bed6b7c56420e722d1b15db4610c9cacd3f", s.Predicate.Materials[0].Digest["sha1"]) + require.Equal(t, "git+https://github.com/kubernetes/kubernetes", s.Predicate.Materials[0].URI) +} diff --git a/pkg/provenance/provenancefakes/fake_predicate_implementation.go b/pkg/provenance/provenancefakes/fake_predicate_implementation.go index 495e99d7f58..f1b10198384 100644 --- a/pkg/provenance/provenancefakes/fake_predicate_implementation.go +++ b/pkg/provenance/provenancefakes/fake_predicate_implementation.go @@ -1,3 +1,19 @@ +/* +Copyright 2021 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + // Code generated by counterfeiter. DO NOT EDIT. package provenancefakes diff --git a/pkg/provenance/provenancefakes/fake_statement_implementation.go b/pkg/provenance/provenancefakes/fake_statement_implementation.go index 76bfb3b7683..358d310bbc2 100644 --- a/pkg/provenance/provenancefakes/fake_statement_implementation.go +++ b/pkg/provenance/provenancefakes/fake_statement_implementation.go @@ -16,6 +16,18 @@ type FakeStatementImplementation struct { arg2 string arg3 in_toto.DigestSet } + ClonePredicateStub func(*provenance.Statement, string) error + clonePredicateMutex sync.RWMutex + clonePredicateArgsForCall []struct { + arg1 *provenance.Statement + arg2 string + } + clonePredicateReturns struct { + result1 error + } + clonePredicateReturnsOnCall map[int]struct { + result1 error + } ReadSubjectsFromDirStub func(*provenance.Statement, string) error readSubjectsFromDirMutex sync.RWMutex readSubjectsFromDirArgsForCall []struct { @@ -41,6 +53,18 @@ type FakeStatementImplementation struct { result1 in_toto.Subject result2 error } + VerifySubjectsStub func(string, *[]in_toto.Subject) error + verifySubjectsMutex sync.RWMutex + verifySubjectsArgsForCall []struct { + arg1 string + arg2 *[]in_toto.Subject + } + verifySubjectsReturns struct { + result1 error + } + verifySubjectsReturnsOnCall map[int]struct { + result1 error + } WriteStub func(*provenance.Statement, string) error writeMutex sync.RWMutex writeArgsForCall []struct { @@ -91,6 +115,68 @@ func (fake *FakeStatementImplementation) AddSubjectArgsForCall(i int) (*provenan return argsForCall.arg1, argsForCall.arg2, argsForCall.arg3 } +func (fake *FakeStatementImplementation) ClonePredicate(arg1 *provenance.Statement, arg2 string) error { + fake.clonePredicateMutex.Lock() + ret, specificReturn := fake.clonePredicateReturnsOnCall[len(fake.clonePredicateArgsForCall)] + fake.clonePredicateArgsForCall = append(fake.clonePredicateArgsForCall, struct { + arg1 *provenance.Statement + arg2 string + }{arg1, arg2}) + stub := fake.ClonePredicateStub + fakeReturns := fake.clonePredicateReturns + fake.recordInvocation("ClonePredicate", []interface{}{arg1, arg2}) + fake.clonePredicateMutex.Unlock() + if stub != nil { + return stub(arg1, arg2) + } + if specificReturn { + return ret.result1 + } + return fakeReturns.result1 +} + +func (fake *FakeStatementImplementation) ClonePredicateCallCount() int { + fake.clonePredicateMutex.RLock() + defer fake.clonePredicateMutex.RUnlock() + return len(fake.clonePredicateArgsForCall) +} + +func (fake *FakeStatementImplementation) ClonePredicateCalls(stub func(*provenance.Statement, string) error) { + fake.clonePredicateMutex.Lock() + defer fake.clonePredicateMutex.Unlock() + fake.ClonePredicateStub = stub +} + +func (fake *FakeStatementImplementation) ClonePredicateArgsForCall(i int) (*provenance.Statement, string) { + fake.clonePredicateMutex.RLock() + defer fake.clonePredicateMutex.RUnlock() + argsForCall := fake.clonePredicateArgsForCall[i] + return argsForCall.arg1, argsForCall.arg2 +} + +func (fake *FakeStatementImplementation) ClonePredicateReturns(result1 error) { + fake.clonePredicateMutex.Lock() + defer fake.clonePredicateMutex.Unlock() + fake.ClonePredicateStub = nil + fake.clonePredicateReturns = struct { + result1 error + }{result1} +} + +func (fake *FakeStatementImplementation) ClonePredicateReturnsOnCall(i int, result1 error) { + fake.clonePredicateMutex.Lock() + defer fake.clonePredicateMutex.Unlock() + fake.ClonePredicateStub = nil + if fake.clonePredicateReturnsOnCall == nil { + fake.clonePredicateReturnsOnCall = make(map[int]struct { + result1 error + }) + } + fake.clonePredicateReturnsOnCall[i] = struct { + result1 error + }{result1} +} + func (fake *FakeStatementImplementation) ReadSubjectsFromDir(arg1 *provenance.Statement, arg2 string) error { fake.readSubjectsFromDirMutex.Lock() ret, specificReturn := fake.readSubjectsFromDirReturnsOnCall[len(fake.readSubjectsFromDirArgsForCall)] @@ -217,6 +303,68 @@ func (fake *FakeStatementImplementation) SubjectFromFileReturnsOnCall(i int, res }{result1, result2} } +func (fake *FakeStatementImplementation) VerifySubjects(arg1 string, arg2 *[]in_toto.Subject) error { + fake.verifySubjectsMutex.Lock() + ret, specificReturn := fake.verifySubjectsReturnsOnCall[len(fake.verifySubjectsArgsForCall)] + fake.verifySubjectsArgsForCall = append(fake.verifySubjectsArgsForCall, struct { + arg1 string + arg2 *[]in_toto.Subject + }{arg1, arg2}) + stub := fake.VerifySubjectsStub + fakeReturns := fake.verifySubjectsReturns + fake.recordInvocation("VerifySubjects", []interface{}{arg1, arg2}) + fake.verifySubjectsMutex.Unlock() + if stub != nil { + return stub(arg1, arg2) + } + if specificReturn { + return ret.result1 + } + return fakeReturns.result1 +} + +func (fake *FakeStatementImplementation) VerifySubjectsCallCount() int { + fake.verifySubjectsMutex.RLock() + defer fake.verifySubjectsMutex.RUnlock() + return len(fake.verifySubjectsArgsForCall) +} + +func (fake *FakeStatementImplementation) VerifySubjectsCalls(stub func(string, *[]in_toto.Subject) error) { + fake.verifySubjectsMutex.Lock() + defer fake.verifySubjectsMutex.Unlock() + fake.VerifySubjectsStub = stub +} + +func (fake *FakeStatementImplementation) VerifySubjectsArgsForCall(i int) (string, *[]in_toto.Subject) { + fake.verifySubjectsMutex.RLock() + defer fake.verifySubjectsMutex.RUnlock() + argsForCall := fake.verifySubjectsArgsForCall[i] + return argsForCall.arg1, argsForCall.arg2 +} + +func (fake *FakeStatementImplementation) VerifySubjectsReturns(result1 error) { + fake.verifySubjectsMutex.Lock() + defer fake.verifySubjectsMutex.Unlock() + fake.VerifySubjectsStub = nil + fake.verifySubjectsReturns = struct { + result1 error + }{result1} +} + +func (fake *FakeStatementImplementation) VerifySubjectsReturnsOnCall(i int, result1 error) { + fake.verifySubjectsMutex.Lock() + defer fake.verifySubjectsMutex.Unlock() + fake.VerifySubjectsStub = nil + if fake.verifySubjectsReturnsOnCall == nil { + fake.verifySubjectsReturnsOnCall = make(map[int]struct { + result1 error + }) + } + fake.verifySubjectsReturnsOnCall[i] = struct { + result1 error + }{result1} +} + func (fake *FakeStatementImplementation) Write(arg1 *provenance.Statement, arg2 string) error { fake.writeMutex.Lock() ret, specificReturn := fake.writeReturnsOnCall[len(fake.writeArgsForCall)] @@ -284,10 +432,14 @@ func (fake *FakeStatementImplementation) Invocations() map[string][][]interface{ defer fake.invocationsMutex.RUnlock() fake.addSubjectMutex.RLock() defer fake.addSubjectMutex.RUnlock() + fake.clonePredicateMutex.RLock() + defer fake.clonePredicateMutex.RUnlock() fake.readSubjectsFromDirMutex.RLock() defer fake.readSubjectsFromDirMutex.RUnlock() fake.subjectFromFileMutex.RLock() defer fake.subjectFromFileMutex.RUnlock() + fake.verifySubjectsMutex.RLock() + defer fake.verifySubjectsMutex.RUnlock() fake.writeMutex.RLock() defer fake.writeMutex.RUnlock() copiedInvocations := map[string][][]interface{}{} diff --git a/pkg/provenance/statement.go b/pkg/provenance/statement.go index ed1eddf740f..6f5e93a5a89 100644 --- a/pkg/provenance/statement.go +++ b/pkg/provenance/statement.go @@ -29,6 +29,7 @@ import ( "path/filepath" "github.com/pkg/errors" + "github.com/sirupsen/logrus" "sigs.k8s.io/release-utils/hash" intoto "github.com/in-toto/in-toto-golang/in_toto" @@ -87,12 +88,26 @@ func (s *Statement) LoadPredicate(path string) error { return nil } +// ClonePredicate reads a provenance metadata file from `manifestPath` and +// clones the predicate data to the current object. +func (s *Statement) ClonePredicate(manifestPath string) error { + return s.impl.ClonePredicate(s, manifestPath) +} + +// VerifySubjects checks the provenance metadata of the attestation +// subjects by reading them from `path`. +func (s *Statement) VerifySubjects(path string) (err error) { + return s.impl.VerifySubjects(path, &s.Subject) +} + //counterfeiter:generate . StatementImplementation type StatementImplementation interface { AddSubject(*Statement, string, intoto.DigestSet) ReadSubjectsFromDir(*Statement, string) error SubjectFromFile(string) (intoto.Subject, error) Write(*Statement, string) error + ClonePredicate(*Statement, string) error + VerifySubjects(path string, subjects *[]intoto.Subject) (err error) } type defaultStatementImplementation struct{} @@ -170,3 +185,59 @@ func (si *defaultStatementImplementation) Write(s *Statement, path string) error "writing predicate file", ) } + +// ClonePredicate clonea the predicate from the file in manifestPath +// to Statement s +func (si *defaultStatementImplementation) ClonePredicate(s *Statement, manifestPath string) error { + otherStatment, err := LoadStatement(manifestPath) + if err != nil { + return errors.Wrap(err, "loading other manifest to clone data") + } + + s.Predicate = otherStatment.Predicate + return nil +} + +// VerifySubjects checks the subjects registered in the manifest to make +// sure the attesttion data matches the artifacts +func (si *defaultStatementImplementation) VerifySubjects(path string, subjects *[]intoto.Subject) (err error) { + errs := 0 + for _, sub := range *subjects { + computed := "" + if sub.Name == "" { + logrus.Error("found empty subject in provenance data") + errs++ + continue + } + if len(sub.Digest) == 0 { + logrus.Errorf("%s has no hash information", sub.Name) + errs++ + continue + } + for algo, val := range sub.Digest { + computed = "" + + switch algo { + case "sha256": + computed, err = hash.SHA256ForFile(filepath.Join(path, sub.Name)) + case "sha512": + computed, err = hash.SHA512ForFile(filepath.Join(path, sub.Name)) + } + + if err != nil { + logrus.Errorf("Error validating %s: %v", sub.Name, err) + errs++ + continue + } + + if val != computed { + errs++ + logrus.Errorf("Invalid hash in %s", sub.Name) + } + } + } + if errs > 0 { + return errors.Errorf("%d errors validating subjects in provenance metadata", errs) + } + return nil +} diff --git a/pkg/provenance/statement_unit_test.go b/pkg/provenance/statement_unit_test.go index 21d37297bb1..1a0c316803a 100644 --- a/pkg/provenance/statement_unit_test.go +++ b/pkg/provenance/statement_unit_test.go @@ -139,3 +139,43 @@ func TestWriteStatement(t *testing.T) { require.Nil(t, err) require.Greater(t, st.Size(), int64(0)) } + +func TestClonePredicate(t *testing.T) { + s1 := NewSLSAStatement() + require.Nil(t, s1.ClonePredicate(testProvenanceFile1), "cloning predicate") + require.Equal(t, s1.Predicate.Builder.ID, "pkg:github/puerco/release@provenance") +} + +func TestVerifySubjects(t *testing.T) { + s := NewSLSAStatement() + + dir, err := os.MkdirTemp("", "provenance-subjects-") + require.Nil(t, err) + defer os.RemoveAll(dir) + + strs := []struct { + Letter string + Sha string + Data string + }{ + {"alpha", "a2be58c40358d08fa15cb5065a487f14e20dacc43d57ba0ee58dc247159d5ddf", "63bf294fdc9acafb474469457d8d6f1d08bbfd85b39f0259ccb92bccf2ef9fe8"}, + {"beta", "27059170711e52bf00591cf5f076b782ccb5311a57bb493f928646c8be03dd59", "a5456b3c74f34644abf12796b5eb00a43922f8699f02820b3ebef983dd013cfc"}, + {"gamma", "6a7e0dabf73072ef0812c16c040bf5cb3873fb0410417c75d33d1f5175a707b7", "3dbd86398d3a976b430d285d2bc245c494003c21e84b908e837b4f0596aa05ff"}, + } + + path := "" + for _, data := range strs { + path = filepath.Join(path, data.Letter) + require.Nil(t, os.Mkdir(filepath.Join(dir, path), os.FileMode(0o755))) + require.Nil( + t, os.WriteFile( + filepath.Join(dir, path, data.Letter+".txt"), []byte(data.Data), os.FileMode(0o644), + ), + ) + s.Subject = append(s.Subject, intoto.Subject{ + Name: filepath.Join(path, data.Letter+".txt"), + Digest: map[string]string{"sha256": data.Sha}, + }) + } + require.Nil(t, s.VerifySubjects(dir)) +} diff --git a/pkg/provenance/testdata/k8s-1.23.0-alpha.4-provenance.json b/pkg/provenance/testdata/k8s-1.23.0-alpha.4-provenance.json new file mode 100644 index 00000000000..3da8592afc0 --- /dev/null +++ b/pkg/provenance/testdata/k8s-1.23.0-alpha.4-provenance.json @@ -0,0 +1 @@ +{"_type":"https://in-toto.io/Statement/v0.1","predicateType":"https://slsa.dev/provenance/v0.1","subject":[{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/src.tar.gz","digest":{"sha256":"a9ac55b2fe04c940d1755bd63e0be95565930046a9f79207ac2a6b7a375788a5","sha512":"d99203a4480697e5e6f5624d77a296ca8686065b6669dd25d05a6e6e389ad49b2a374fbed0697e267bf81b5fe1a3d318460186e5818ab3707204d5e86445aaa5"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/SHA256SUMS","digest":{"sha256":"71d47a3948d18f3fdee6c88ee3b254663f40be9f5598aa8841b9ab0fb78d7c60"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/SHA256SUMS.sha256","digest":{"sha256":"8916ddb966fc26ee68597be52fc6655cad619301c764291747f37db73fac74e0"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/SHA256SUMS.sha512","digest":{"sha256":"c8eccf14d150b76e69e172821d0e8eb4e52fd1ebc70afe8cfd9130f06c3bb3cb"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/SHA512SUMS","digest":{"sha256":"ad985c5accd8dd661b444a08f7b460f80ed3000b3ce0bd11c513f6d9ab8a2f66"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/SHA512SUMS.sha256","digest":{"sha256":"5d4924c0205cc25e5fa7ee9baa9508ca553fff26f50fc72a111f2e99a455d7f0"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/SHA512SUMS.sha512","digest":{"sha256":"cd9679b1a42a95a8d226245970feaba058dcd4082ff06146d19f6bf3ab3362bb"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/darwin/amd64/kubectl","digest":{"sha256":"9f12568bb452c42f71ec0230b582d78fd9b33aef60bb61eae5e52b4a8cc5f340"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/darwin/amd64/kubectl-convert","digest":{"sha256":"a23b1e4c4d08adb62ed6d018364103c7a58c7bf5e25482783b1a1a640824dfff"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/darwin/amd64/kubectl-convert.sha256","digest":{"sha256":"094a833630688b739df8cf2a03a42f7ea180c01bd3ffb7fb7e5722fdffb03889"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/darwin/amd64/kubectl-convert.sha512","digest":{"sha256":"57573318ceb968d4f2bc89e650ebe32bda52c2ca415c4c2afd56e19e30321aec"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/darwin/amd64/kubectl.sha256","digest":{"sha256":"9df99137fea3a6570d62bf0d239e907429297dc23e539147ff8c4b966ab44183"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/darwin/amd64/kubectl.sha512","digest":{"sha256":"74e59f51325decd1d1688946285ae6bd9c48a34b69057b6f832e9e78289b97ab"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/darwin/arm64/kubectl","digest":{"sha256":"82b13e4da645312bc71a3f56c8a7959b085a23154235d580c2aab11f1ecfa4d4"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/darwin/arm64/kubectl-convert","digest":{"sha256":"6084747b5e091ce7b0d88887f12489da93944c15a3ca4d0a2d41b4e6797f7100"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/darwin/arm64/kubectl-convert.sha256","digest":{"sha256":"edefb88b4c314eb936a60dc7e1e88375210baf418375f479301c8fa3f239f9fc"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/darwin/arm64/kubectl-convert.sha512","digest":{"sha256":"3a6d22c22f861b4431a3405c1525a7ae5d5f1cbe4efb993e259cd72401514fa0"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/darwin/arm64/kubectl.sha256","digest":{"sha256":"7e87e082e685766ed73d2393b25033db31f83d70abd8ccfc6b6d5f379870297b"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/darwin/arm64/kubectl.sha512","digest":{"sha256":"3667852d9b8e713a60da4bb2e2659ba560cea05e162526444087dc10186e679f"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/386/kubectl","digest":{"sha256":"d3529c993e362d9fa05b3fbb0c6b4d264a586f74ec6911290315920bbee5fa56"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/386/kubectl-convert","digest":{"sha256":"a1b4822eaad20b16f3de299744b7db203a5464011016e8cb19a0e61caf2cc2c3"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/386/kubectl-convert.sha256","digest":{"sha256":"be604b5fdc982c5db3d155db3db88a3afdf3316144be5820e53895b684f5be90"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/386/kubectl-convert.sha512","digest":{"sha256":"4cee3205a7513b96acb3799730f0d55ee50d3f4821290f60a92c3b8846578943"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/386/kubectl.sha256","digest":{"sha256":"15fe793eaf863cf91f706fb490241b64d2c499a4eb6f2a23610270dbe22aafef"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/386/kubectl.sha512","digest":{"sha256":"b644fbb8b1f99580decc58ddad56813f0bea04c72330325dbffd2a8c6e50d5a4"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/amd64/apiextensions-apiserver","digest":{"sha256":"10447f2b8faf68b314599e301fc1ebd3c8da43343e68716e790015414b3a2c87"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/amd64/apiextensions-apiserver.sha256","digest":{"sha256":"eb131ccc2e8955a886429972bbe5d89bb75a5fea9b1c5d6c1bb1cb9b9dda646b"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/amd64/apiextensions-apiserver.sha512","digest":{"sha256":"fa16921499e93856317321215c0e28ff69b6df8fce09a5687bde3bab594695fe"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/amd64/kube-aggregator","digest":{"sha256":"821cee31bb9d5a7b4cd987414684b9c2baf6d650773aa8521e4ff81c08ae2b26"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/amd64/kube-aggregator.sha256","digest":{"sha256":"105a29b0ecd710238bac444364f691aafc747fb1493fa63962c89ea5f9d59c09"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/amd64/kube-aggregator.sha512","digest":{"sha256":"2f87d9f983fb6e725bf58e4cbea1a140d9bfc58757039ffd4b08381950ae6410"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/amd64/kube-apiserver","digest":{"sha256":"a6a60b60294ff018651c25410f7bd5969daae94bd247d4545396e6985ccab714"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/amd64/kube-apiserver.docker_tag","digest":{"sha256":"30f725d6b77a552b80d955c643ac9c8a060ff38192d2fd3cbf5e0b409aa763c9"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/amd64/kube-apiserver.docker_tag.sha256","digest":{"sha256":"68679b2bfa253327f4f28d9cd37175d65e001fb136f4c1353d6b8c6d37fb67d0"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/amd64/kube-apiserver.docker_tag.sha512","digest":{"sha256":"8af43225e27a27526fe322acaf6c3b5ca681b37ad77ed7639a6d657901bc9772"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/amd64/kube-apiserver.sha256","digest":{"sha256":"593f4d3213180165925687fffec5d514951d3a1ccbc2d3a57d83591ed1603a86"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/amd64/kube-apiserver.sha512","digest":{"sha256":"9083d69253862e6fd2c4cf274ee10fdd2f39890094969b4d6d8dfb85f0e54d2d"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/amd64/kube-apiserver.tar","digest":{"sha256":"96a4905192c6be98d10571bcec4b79e892656041b42e69ac48c2525cb6f6e5b9"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/amd64/kube-apiserver.tar.sha256","digest":{"sha256":"12ad9b6a941ede85cd778e6f3910189170a0da5d8b0ba7645cb3fb8c76016c6b"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/amd64/kube-apiserver.tar.sha512","digest":{"sha256":"4bbe75b53ce12b49b2f4ea41ba64ce249f56ebacb41af4b2724de9aaf1def801"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/amd64/kube-controller-manager","digest":{"sha256":"7887973d97cd046bd4a83d05d845d205ec69cf173206f36fcbc90bdd78ea2a41"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/amd64/kube-controller-manager.docker_tag","digest":{"sha256":"30f725d6b77a552b80d955c643ac9c8a060ff38192d2fd3cbf5e0b409aa763c9"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/amd64/kube-controller-manager.docker_tag.sha256","digest":{"sha256":"68679b2bfa253327f4f28d9cd37175d65e001fb136f4c1353d6b8c6d37fb67d0"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/amd64/kube-controller-manager.docker_tag.sha512","digest":{"sha256":"8af43225e27a27526fe322acaf6c3b5ca681b37ad77ed7639a6d657901bc9772"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/amd64/kube-controller-manager.sha256","digest":{"sha256":"40034d0f788468b5ac003a94718ecd33a23a1574433c81358c0eee83ac35ebcd"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/amd64/kube-controller-manager.sha512","digest":{"sha256":"b2928ed384d2d476cd9e95ea9e37cf384430043a9319a4c470b1f7bf76c3361c"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/amd64/kube-controller-manager.tar","digest":{"sha256":"edd8b14df45547db9ee05a2ae60d2ce026ff3f0393cc0c02402f3ca9d71e50ed"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/amd64/kube-controller-manager.tar.sha256","digest":{"sha256":"76d142506900c63d75905b5ed8fa0009c6bd6ef7f154fbd1435673f6ef3f85a2"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/amd64/kube-controller-manager.tar.sha512","digest":{"sha256":"d2041af1e41fa642ce0f217bcc7d08bb9dfd7d9a2421ea9e18e44d9f0593b9c8"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/amd64/kube-proxy","digest":{"sha256":"d246d3391b7e27a36aa866e29969f0ccd8c181a736c7d369dd8a2b4547bb1f01"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/amd64/kube-proxy.docker_tag","digest":{"sha256":"30f725d6b77a552b80d955c643ac9c8a060ff38192d2fd3cbf5e0b409aa763c9"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/amd64/kube-proxy.docker_tag.sha256","digest":{"sha256":"68679b2bfa253327f4f28d9cd37175d65e001fb136f4c1353d6b8c6d37fb67d0"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/amd64/kube-proxy.docker_tag.sha512","digest":{"sha256":"8af43225e27a27526fe322acaf6c3b5ca681b37ad77ed7639a6d657901bc9772"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/amd64/kube-proxy.sha256","digest":{"sha256":"270463813cc3fff34432e6a392a379359049f58c41ec536daab33bfa1ea5fbbe"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/amd64/kube-proxy.sha512","digest":{"sha256":"d764fcf5a5fa48ba7c3c8612ac868215b0bee676ae4ba0ba3ab626823f5cc646"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/amd64/kube-proxy.tar","digest":{"sha256":"391f93c2c5cee176607ff98d0912975db217e8be8496fc3c7b56abe25b866eb5"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/amd64/kube-proxy.tar.sha256","digest":{"sha256":"8719eaf980610038abe9091f8adc1a549a12b498ac9d637e132b0bb1821b140a"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/amd64/kube-proxy.tar.sha512","digest":{"sha256":"c07e90c4c7aea1fc933a481bb2b7dcbb8531e62676ea10a98dd91eb8f3c1039a"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/amd64/kube-scheduler","digest":{"sha256":"f957ec569b01953ec0271c417c384f2b2f1fd5676bbff9f3344519dae6cf8c16"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/amd64/kube-scheduler.docker_tag","digest":{"sha256":"30f725d6b77a552b80d955c643ac9c8a060ff38192d2fd3cbf5e0b409aa763c9"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/amd64/kube-scheduler.docker_tag.sha256","digest":{"sha256":"68679b2bfa253327f4f28d9cd37175d65e001fb136f4c1353d6b8c6d37fb67d0"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/amd64/kube-scheduler.docker_tag.sha512","digest":{"sha256":"8af43225e27a27526fe322acaf6c3b5ca681b37ad77ed7639a6d657901bc9772"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/amd64/kube-scheduler.sha256","digest":{"sha256":"433feecc059405daf69da9d61e90f7a9ed2b05488595c2a97af9cbb18137f85b"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/amd64/kube-scheduler.sha512","digest":{"sha256":"9aeddfd3faf792c65aaa8c6c28f5c7bf7ad7c86b410bca68e50deaf47a58933d"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/amd64/kube-scheduler.tar","digest":{"sha256":"ef497c20b50820df7059bbe86dfd86e9cd7f6682fc45a479e7ce6b97e2f08bc4"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/amd64/kube-scheduler.tar.sha256","digest":{"sha256":"e3711991407aeebbe60b63c93aee22e8f85a7f833eab3135c326ca0ef301cbba"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/amd64/kube-scheduler.tar.sha512","digest":{"sha256":"c4697cd9c37cf6cf046cdbc0b1684314099741c11f155a2d2f21751281dd7564"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/amd64/kubeadm","digest":{"sha256":"1829ede53671a8fa175a111568d1aaafe90009105f2a2e148273288ffb91a243"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/amd64/kubeadm.sha256","digest":{"sha256":"9fe94a6b5ecd36249656a2e4c5b31aea42e13a0afebfe8e64c953e46dc8fb343"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/amd64/kubeadm.sha512","digest":{"sha256":"5836e2e5d1d0db0005993969c242c6b9cf481c05d05adb0e9c53e581c2d75277"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/amd64/kubectl","digest":{"sha256":"51f713d615fe7811b13888f110da9fb2592b7611c6ea8652174f775db33ae876"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/amd64/kubectl-convert","digest":{"sha256":"e0f99c9f59618d56eacf8bc7d225214bdb76550418e9778314c777383589e575"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/amd64/kubectl-convert.sha256","digest":{"sha256":"473b99b72c22197392ef9abe5c1c0e3cefd8a7fdf57309fc99451a0112a63e77"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/amd64/kubectl-convert.sha512","digest":{"sha256":"64be159213003762fdb885e96495c557565bdf3c73b18722a7750f95e2279116"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/amd64/kubectl.sha256","digest":{"sha256":"fd36668a41dbac99bfac0c2a80ce4239d49aa88dc210158e7cc6e20390185ca4"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/amd64/kubectl.sha512","digest":{"sha256":"4f6cf6f178564104d606229045acd4530ca670d5907d8f68bf2098b878d153e4"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/amd64/kubelet","digest":{"sha256":"09367cc82f2e7a0143627707f4cf4fc0af45a4d573a204b3dd589dda4fa07744"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/amd64/kubelet.sha256","digest":{"sha256":"780a0f095fab2e325f98e7a822b6c8cc0e4c1e5b41857910c67f5338f6195bab"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/amd64/kubelet.sha512","digest":{"sha256":"760e6874d1688fa0be55fe5670be92626c39a31a5df0e54ddc874672dae16dce"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/amd64/mounter","digest":{"sha256":"0d1f39fae3e003092b8fc5b8875f8ebd70cc873fba586c989fa2bc6f78eab80d"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/amd64/mounter.sha256","digest":{"sha256":"50ea62aaf2de3714acd009a8f6c4f0276bec1eb35c32895c9cb8f847424a75a9"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/amd64/mounter.sha512","digest":{"sha256":"24957e910677b840dd768e224c79e7b0fbdd520cd99af2ecc84f8bc3c84abcae"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/arm/apiextensions-apiserver","digest":{"sha256":"e9dc197f06c9a9782a3a049451cb5a4f2b2fc7664bbe837d2fa3f76998c5b02e"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/arm/apiextensions-apiserver.sha256","digest":{"sha256":"0029758176f762a1ad1b834c9e935ffd62861bc963e177adc700126e164a07f9"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/arm/apiextensions-apiserver.sha512","digest":{"sha256":"d74abb7b182cce8225d9c2da2d1d22a4b1ead96d8ac4cf6590da86d77e592e23"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/arm/kube-aggregator","digest":{"sha256":"b6de1b987c7eb9bacf0d16cf8df1ec28c2a45dc53e7d3b53cd74cd79db309ae6"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/arm/kube-aggregator.sha256","digest":{"sha256":"4006e02ec8feed57307e3592fad6d7aff4d8783017024c291c6d037b345fb9c2"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/arm/kube-aggregator.sha512","digest":{"sha256":"e2fbda289fcbb7ea79f719eceff4fc7150a3076f701adb4e925724877fca3ec4"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/arm/kube-apiserver","digest":{"sha256":"a03defdd86858b5fbd6b58e40ee178a658eacce6762b526b243de1f02fc2e309"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/arm/kube-apiserver.docker_tag","digest":{"sha256":"30f725d6b77a552b80d955c643ac9c8a060ff38192d2fd3cbf5e0b409aa763c9"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/arm/kube-apiserver.docker_tag.sha256","digest":{"sha256":"68679b2bfa253327f4f28d9cd37175d65e001fb136f4c1353d6b8c6d37fb67d0"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/arm/kube-apiserver.docker_tag.sha512","digest":{"sha256":"8af43225e27a27526fe322acaf6c3b5ca681b37ad77ed7639a6d657901bc9772"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/arm/kube-apiserver.sha256","digest":{"sha256":"3290400086cd219bcf580092da5690995fa9b8ca0c827aae40b86213e6dce707"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/arm/kube-apiserver.sha512","digest":{"sha256":"a6eccf376ddaf35fbb55a4f3a72d6b072c8ac700e1b26996104730901de2384b"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/arm/kube-apiserver.tar","digest":{"sha256":"c9a190f04ac99df5054a47d2cf3d2db502099e146eeb6523534ba45ab0479ef5"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/arm/kube-apiserver.tar.sha256","digest":{"sha256":"b5dc2f810f37106efeea5559dafb0ad14ff98c71408175a6b46c9bb3f88633f9"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/arm/kube-apiserver.tar.sha512","digest":{"sha256":"41d3052d1ed5fa390b25f1994d4b056377bc10a00d723f748e6f4cf75659687b"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/arm/kube-controller-manager","digest":{"sha256":"3e5f89894789efaaba00be435e8e11a56a19a4884c05f6caa781d2ec88af02f0"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/arm/kube-controller-manager.docker_tag","digest":{"sha256":"30f725d6b77a552b80d955c643ac9c8a060ff38192d2fd3cbf5e0b409aa763c9"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/arm/kube-controller-manager.docker_tag.sha256","digest":{"sha256":"68679b2bfa253327f4f28d9cd37175d65e001fb136f4c1353d6b8c6d37fb67d0"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/arm/kube-controller-manager.docker_tag.sha512","digest":{"sha256":"8af43225e27a27526fe322acaf6c3b5ca681b37ad77ed7639a6d657901bc9772"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/arm/kube-controller-manager.sha256","digest":{"sha256":"af176c181571a40d55e2ad9315ba7438c1f43ace5beb0ba3fd797a6163e18011"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/arm/kube-controller-manager.sha512","digest":{"sha256":"f82505de56d01508e0c41f8d97b1e14cf198d506c82f7c471107599e3fe63bee"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/arm/kube-controller-manager.tar","digest":{"sha256":"cff525b4d4cf2910b28cbd40adea414e09ab2298ee3d0fc1a9cfbfbf9d6f23ac"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/arm/kube-controller-manager.tar.sha256","digest":{"sha256":"9891e0824f8094c73cd6c64f56a591a2eb1fa663ad73a99f225f6cf86dd59d38"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/arm/kube-controller-manager.tar.sha512","digest":{"sha256":"746e234db6e595af35a58866e636c5037d2035b03ea5c67cdbcc7b73d118c65f"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/arm/kube-proxy","digest":{"sha256":"dcc0df6be2dda2a4ad5f0b8706aaaedf48bef6e8b3852bc7a0bb8664627da701"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/arm/kube-proxy.docker_tag","digest":{"sha256":"30f725d6b77a552b80d955c643ac9c8a060ff38192d2fd3cbf5e0b409aa763c9"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/arm/kube-proxy.docker_tag.sha256","digest":{"sha256":"68679b2bfa253327f4f28d9cd37175d65e001fb136f4c1353d6b8c6d37fb67d0"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/arm/kube-proxy.docker_tag.sha512","digest":{"sha256":"8af43225e27a27526fe322acaf6c3b5ca681b37ad77ed7639a6d657901bc9772"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/arm/kube-proxy.sha256","digest":{"sha256":"b295f4c7d8ca83888a5fec730b7ab6ccd163f3f67c4009cd94fb6a0a65d27851"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/arm/kube-proxy.sha512","digest":{"sha256":"dba3640b93f66b785e934928cecfd47ded061d4a379247c37508ec5d02543c03"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/arm/kube-proxy.tar","digest":{"sha256":"b71dfe23d6ed630142ac4b3ee90d83cda6450e01fbdf054edfd2fb57bdb9dc3a"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/arm/kube-proxy.tar.sha256","digest":{"sha256":"8df92ab455072cd72d750fd29e2ce0ac4d248fbc23f59e6f76529bba4bd51149"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/arm/kube-proxy.tar.sha512","digest":{"sha256":"e70fc08d2e996544aaa889c4883896f255d40fa0dc800004cf1c64f37789229d"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/arm/kube-scheduler","digest":{"sha256":"703b0fed2b98eaac1a0e67e8b8d6b612caca743d4e70d5072a329af41c2573e1"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/arm/kube-scheduler.docker_tag","digest":{"sha256":"30f725d6b77a552b80d955c643ac9c8a060ff38192d2fd3cbf5e0b409aa763c9"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/arm/kube-scheduler.docker_tag.sha256","digest":{"sha256":"68679b2bfa253327f4f28d9cd37175d65e001fb136f4c1353d6b8c6d37fb67d0"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/arm/kube-scheduler.docker_tag.sha512","digest":{"sha256":"8af43225e27a27526fe322acaf6c3b5ca681b37ad77ed7639a6d657901bc9772"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/arm/kube-scheduler.sha256","digest":{"sha256":"b088764028714aad8c255a30967f4ab56625f5f51f02ef209952d301a486baec"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/arm/kube-scheduler.sha512","digest":{"sha256":"2c9c345e456c76c4bf4f540f44c5af9b7b53a0345a6b4ca095ac9104b329bfeb"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/arm/kube-scheduler.tar","digest":{"sha256":"21958218c0eaa579e82e8404a33a55c512d7dd954da08f6734ed27ff7427dffd"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/arm/kube-scheduler.tar.sha256","digest":{"sha256":"bbfba5d2cd654101d934fbf63fde4b93e21bb929808ce76e1e1d6d26fa3632de"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/arm/kube-scheduler.tar.sha512","digest":{"sha256":"e3617af5b2220e1cf2ac92ea77db22a21f41d980f4020bb7da10e79ecf60b2d4"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/arm/kubeadm","digest":{"sha256":"b595ce8913199183e48cd697b1303938bb88e0cb2e623cb9107dfc2277713491"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/arm/kubeadm.sha256","digest":{"sha256":"aa5dddf2f5f0b11bfa3acbb8115e8b881b096a2abf9cfa0d582b86c6f829ff8c"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/arm/kubeadm.sha512","digest":{"sha256":"64c847fcf33089af8dadd66a44b73591128fd6cf9c79f26f167d1353d37abd79"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/arm/kubectl","digest":{"sha256":"45d46ba1e0fe493353b946d8d87396dd7feeca8aece9c347532c62c4691d0ae6"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/arm/kubectl-convert","digest":{"sha256":"f6e2ef8b81f2f32b85a48b2f7710d99b10f57dbcdbf68cd4158806d4fcfda26a"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/arm/kubectl-convert.sha256","digest":{"sha256":"caa2883701c828af9ceb82e8eb8d55cf768400b3b9bae39cfb1ccb7a31d18848"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/arm/kubectl-convert.sha512","digest":{"sha256":"d9ee87ee21b5444e30c74c2e46324d75f87d17cca6453533b3b5b52d1d14cd40"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/arm/kubectl.sha256","digest":{"sha256":"3322c803255875ee3ee9c5a8992fe870e842952a5bf62c5ddf5a3ca1228dd873"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/arm/kubectl.sha512","digest":{"sha256":"78590cb475601c3130b2864088e0fa51b28fb576028ceeaa97a2ec2ef6d27139"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/arm/kubelet","digest":{"sha256":"6f81938ddb7f4206d958480221127aec458859fde2a3ea671cb20ed7cb178d1f"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/arm/kubelet.sha256","digest":{"sha256":"037f275f66c4d886cc85984a45efccb48f97a5275d4aca9de78b5f757c8aca37"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/arm/kubelet.sha512","digest":{"sha256":"ca54c56191c1fd1d4a846906c07d1ea7015bc8bd74af124e4f47c7344d8a4107"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/arm/mounter","digest":{"sha256":"e2b4755dbd8cc99138cf9dd4dbdf0046b424c99686886ff9acf4ae9f144ddb9d"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/arm/mounter.sha256","digest":{"sha256":"19aa95ab84dc0d4b5c1785d8f1ac35ce346ae96bb1ff499fb6f7ecfc7a20e14f"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/arm/mounter.sha512","digest":{"sha256":"7b1f2fdb1efe8bd9ff1dd2e051842e09d7972c4e21e1026b8c43a9b7abfc8ae9"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/arm64/apiextensions-apiserver","digest":{"sha256":"d0aea15885b05b27e2fa0ab167fe0f8a90fe0b5e7e8388b598e8538d735be5f5"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/arm64/apiextensions-apiserver.sha256","digest":{"sha256":"a64c1cc56dd9479191e5771dbe8a1f275b1d41591aa85f7c9ba0f6ec637ea1ba"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/arm64/apiextensions-apiserver.sha512","digest":{"sha256":"02ba37f0ed9f969bcb06ac0500984316a6fd9fa0fff481d07762827286bab480"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/arm64/kube-aggregator","digest":{"sha256":"9da41139ee9b87eb783bf0a6b877392cf47753619f89c2731dbf4d8a1671b7d7"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/arm64/kube-aggregator.sha256","digest":{"sha256":"2f30df73b1980039a43a51f0f9104d398f597ab2e1145b877229aea6a70bc4ef"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/arm64/kube-aggregator.sha512","digest":{"sha256":"64e2447716f52ce366baf68d8399f64ee1de2982b2a7e71c477f4fcea617000e"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/arm64/kube-apiserver","digest":{"sha256":"a43ca79bdc3a5d4caf187870deedd56281b1c1d56887c0ffb900b9cb90eeab0d"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/arm64/kube-apiserver.docker_tag","digest":{"sha256":"30f725d6b77a552b80d955c643ac9c8a060ff38192d2fd3cbf5e0b409aa763c9"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/arm64/kube-apiserver.docker_tag.sha256","digest":{"sha256":"68679b2bfa253327f4f28d9cd37175d65e001fb136f4c1353d6b8c6d37fb67d0"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/arm64/kube-apiserver.docker_tag.sha512","digest":{"sha256":"8af43225e27a27526fe322acaf6c3b5ca681b37ad77ed7639a6d657901bc9772"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/arm64/kube-apiserver.sha256","digest":{"sha256":"7d44d0600e34b193ae436bc9c7400a9e52bda55cd98e8a5726899ba62e4e8e56"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/arm64/kube-apiserver.sha512","digest":{"sha256":"17484ca3180e7f006ff63bacdcb499dceced58da7cf833af350c079671375af6"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/arm64/kube-apiserver.tar","digest":{"sha256":"e4b7eb904ed7a4917cfd3d3d8df83b82051746b9c25607ae939bfd301b4109cc"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/arm64/kube-apiserver.tar.sha256","digest":{"sha256":"af9310d3f3fc615b19ee5c5a1488044417c4c6148344f8157ebcdb34eba43519"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/arm64/kube-apiserver.tar.sha512","digest":{"sha256":"3e237286b4fba3547530366e30985843199439039ac48132aaa5d5d23070e25b"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/arm64/kube-controller-manager","digest":{"sha256":"a4de92b9221c331af95b74adf393cb64460b7ba6b84fa7559dda69609886ba87"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/arm64/kube-controller-manager.docker_tag","digest":{"sha256":"30f725d6b77a552b80d955c643ac9c8a060ff38192d2fd3cbf5e0b409aa763c9"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/arm64/kube-controller-manager.docker_tag.sha256","digest":{"sha256":"68679b2bfa253327f4f28d9cd37175d65e001fb136f4c1353d6b8c6d37fb67d0"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/arm64/kube-controller-manager.docker_tag.sha512","digest":{"sha256":"8af43225e27a27526fe322acaf6c3b5ca681b37ad77ed7639a6d657901bc9772"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/arm64/kube-controller-manager.sha256","digest":{"sha256":"40e64f2c845f8ee648d89b5f5a4b6355d2e1405f5909b70c94e258152bd44a25"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/arm64/kube-controller-manager.sha512","digest":{"sha256":"c6a26bdbd877d9e56e0e99d3285f22d17e79e159eacf9b7f02a913e5e9960e23"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/arm64/kube-controller-manager.tar","digest":{"sha256":"d329110bf47d06c6531a22a1026e74c98384f87ec967612f628333a2e73344e3"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/arm64/kube-controller-manager.tar.sha256","digest":{"sha256":"93b13355fd35c0c0180f1d08656605779eda75b8dd88d8f33bd281334bf1ad73"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/arm64/kube-controller-manager.tar.sha512","digest":{"sha256":"468185735ef626c84db211c54377a041765cfc9b6e5d98a0850c8eee12ad7872"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/arm64/kube-proxy","digest":{"sha256":"961dda4e7d0b3f84a783fc2d72263c62b680d8426facdc3bba50bebf6c1899f9"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/arm64/kube-proxy.docker_tag","digest":{"sha256":"30f725d6b77a552b80d955c643ac9c8a060ff38192d2fd3cbf5e0b409aa763c9"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/arm64/kube-proxy.docker_tag.sha256","digest":{"sha256":"68679b2bfa253327f4f28d9cd37175d65e001fb136f4c1353d6b8c6d37fb67d0"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/arm64/kube-proxy.docker_tag.sha512","digest":{"sha256":"8af43225e27a27526fe322acaf6c3b5ca681b37ad77ed7639a6d657901bc9772"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/arm64/kube-proxy.sha256","digest":{"sha256":"1c01e7c5670501191ac6b0266d66beba3df747f9ef2ac0f6ba88aa099e764258"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/arm64/kube-proxy.sha512","digest":{"sha256":"627011e92597b83926f89eb45349d64eb34e6e4f2c3453503426d9d820741844"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/arm64/kube-proxy.tar","digest":{"sha256":"63e024bb97d683ca646a3d27b12f732378a7c516c6e1dcdf6eb7d04bcb223e26"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/arm64/kube-proxy.tar.sha256","digest":{"sha256":"61c52e1a11b0216fa86938557d5cf712719c30b4fda209ba2f21dfe196391644"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/arm64/kube-proxy.tar.sha512","digest":{"sha256":"5e5efd767119f7ca47004d99f83dbf869a66f30af9627170a2f3459b2abcffcb"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/arm64/kube-scheduler","digest":{"sha256":"146f0458e75c4ca01589c8fb492589e7b2d4d45e8f89a88be36ab4113e850fc5"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/arm64/kube-scheduler.docker_tag","digest":{"sha256":"30f725d6b77a552b80d955c643ac9c8a060ff38192d2fd3cbf5e0b409aa763c9"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/arm64/kube-scheduler.docker_tag.sha256","digest":{"sha256":"68679b2bfa253327f4f28d9cd37175d65e001fb136f4c1353d6b8c6d37fb67d0"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/arm64/kube-scheduler.docker_tag.sha512","digest":{"sha256":"8af43225e27a27526fe322acaf6c3b5ca681b37ad77ed7639a6d657901bc9772"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/arm64/kube-scheduler.sha256","digest":{"sha256":"bebddeb54f182a7cbe7570f2b40903e69d0b0dd390ffca40b3590ae9c23b15c1"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/arm64/kube-scheduler.sha512","digest":{"sha256":"511072980a91e2e04372deeb6870ed7d2897bbe631339caaf5d5d65e607fb864"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/arm64/kube-scheduler.tar","digest":{"sha256":"31b7cb10aa1e0e1f87528565ff91e1d0c60b035adfebbfc6e42609b6e2befa34"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/arm64/kube-scheduler.tar.sha256","digest":{"sha256":"500a94657a010c216013877555effa98b99a1e8f2bed8527c2f37ecaaba1399a"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/arm64/kube-scheduler.tar.sha512","digest":{"sha256":"27a425800a703599781d62261e136a6ffe30c004e9f2c5242d11187cd9f7c044"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/arm64/kubeadm","digest":{"sha256":"b0baf0420e2c5ceb2d4bc5b74a338db4a969679b05021579c8185c3f809769e8"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/arm64/kubeadm.sha256","digest":{"sha256":"53f9dfa6cfe4fbf309d4edef309c5fb2180ee120e0be043029eb7e135511b7a5"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/arm64/kubeadm.sha512","digest":{"sha256":"80971e687b5612e9193a6e3cbeebea58ed887f9d5d99173cfd7c7178d23f1e59"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/arm64/kubectl","digest":{"sha256":"c079f64ac1223ff3df39f64186c08b24cc9e36e2696d22c6095e7a5924a720a7"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/arm64/kubectl-convert","digest":{"sha256":"ae577d8f1877b21a804b3ec16165c219b95d9a89697492d51d3f4dc97d7abb84"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/arm64/kubectl-convert.sha256","digest":{"sha256":"2859b64035b3ad252e15d5ea0a00ebbd0fe6b6ab2f257c0a8f80a0da538c6627"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/arm64/kubectl-convert.sha512","digest":{"sha256":"8ec8601052cb41a1e61e113c330e850ee2be8c9cbbcfc99897563f252c669f75"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/arm64/kubectl.sha256","digest":{"sha256":"3cb8c4def76d4eba1adfc51d73285479820668812ed354d3dbfe76eb89ff2e6a"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/arm64/kubectl.sha512","digest":{"sha256":"28a9705da748efd30f4acbf0b1e494dbd279f5c4cb5cf68632b3a9bd0ffebbdc"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/arm64/kubelet","digest":{"sha256":"a023ae5d99103fd93665ba8e45590ff712dde587dd030804065a8b91eb19f670"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/arm64/kubelet.sha256","digest":{"sha256":"f638b9a5897a2a8099097bafc1e1d949b5867520fc29d3f8cf5cdae2a9b23c45"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/arm64/kubelet.sha512","digest":{"sha256":"2ba4c99e5546be2144f98d37c9376d1c20e48a249e54e8503d636aed980f0cc2"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/arm64/mounter","digest":{"sha256":"87f3ae608d0d04b30dc24d95d35828e4a0d357233fc2773aa1cf75c6b8049b1b"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/arm64/mounter.sha256","digest":{"sha256":"145023f5febc51c6b667abd78633518fb9e107d348b751b9e3cce163c9d195ef"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/arm64/mounter.sha512","digest":{"sha256":"a7053f951539e3f2090833d991147e0811fc8ac8babbc46d0d21d26034bb0344"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/ppc64le/apiextensions-apiserver","digest":{"sha256":"0ccd9df48d692cf3ef9a4968298bd27646a2ea6446af1af0c3bfd8725556cea8"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/ppc64le/apiextensions-apiserver.sha256","digest":{"sha256":"66cb0901ce849b93ba79de6855d08123470474abed103d28a1671451b2f05c22"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/ppc64le/apiextensions-apiserver.sha512","digest":{"sha256":"62625aecabf52c4daffe06d5e2375d08848c4fc16d335cc2ca56e541b138b7fe"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/ppc64le/kube-aggregator","digest":{"sha256":"18cad4afc609834d2d6f2fe4c39943cf24f9dfbd4b2c8f70db3de61063d6b72a"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/ppc64le/kube-aggregator.sha256","digest":{"sha256":"fcc6202061736c3f8aeb6d90829cb27bb74f3d2a83560905a011ff226eda2156"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/ppc64le/kube-aggregator.sha512","digest":{"sha256":"b7ec2f1c0bd7459ecd58d2bec2b803c7f46f06d26dff6545713ac1bfe75bf003"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/ppc64le/kube-apiserver","digest":{"sha256":"0fe4447cacb5f0ebefe8b4657d196cea3de5a650c64e028933bce5b2017ff483"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/ppc64le/kube-apiserver.docker_tag","digest":{"sha256":"30f725d6b77a552b80d955c643ac9c8a060ff38192d2fd3cbf5e0b409aa763c9"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/ppc64le/kube-apiserver.docker_tag.sha256","digest":{"sha256":"68679b2bfa253327f4f28d9cd37175d65e001fb136f4c1353d6b8c6d37fb67d0"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/ppc64le/kube-apiserver.docker_tag.sha512","digest":{"sha256":"8af43225e27a27526fe322acaf6c3b5ca681b37ad77ed7639a6d657901bc9772"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/ppc64le/kube-apiserver.sha256","digest":{"sha256":"56e00a030a08128b96f20f5f0c54a13649bde7c9d37793ae90c58d92bb3f8db6"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/ppc64le/kube-apiserver.sha512","digest":{"sha256":"a6e486f71d3b3e676f88c4cc35df20c337987c058e20d5bf8a22b7e0441e4815"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/ppc64le/kube-apiserver.tar","digest":{"sha256":"9cdf7827f08ae577e01d1b7a76c6665389a64c4a2995f34f6f55326bcc66e243"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/ppc64le/kube-apiserver.tar.sha256","digest":{"sha256":"652fe896b1830876e38202a78ada286a97153cc99eed1e3cc1b441ed5b654f38"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/ppc64le/kube-apiserver.tar.sha512","digest":{"sha256":"cdaaceb96ee857826474dcef76e30e9efc93d0b5c7a4a8dd2c6fa2e1997e622e"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/ppc64le/kube-controller-manager","digest":{"sha256":"edf1d06f04a9dc0a7be8bd16fd816e643a718a91b6dcf773defd066fa433b943"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/ppc64le/kube-controller-manager.docker_tag","digest":{"sha256":"30f725d6b77a552b80d955c643ac9c8a060ff38192d2fd3cbf5e0b409aa763c9"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/ppc64le/kube-controller-manager.docker_tag.sha256","digest":{"sha256":"68679b2bfa253327f4f28d9cd37175d65e001fb136f4c1353d6b8c6d37fb67d0"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/ppc64le/kube-controller-manager.docker_tag.sha512","digest":{"sha256":"8af43225e27a27526fe322acaf6c3b5ca681b37ad77ed7639a6d657901bc9772"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/ppc64le/kube-controller-manager.sha256","digest":{"sha256":"0885652b4ad97ca271093f717eba560a0cd37c1a55529752cfc13d7aea68988a"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/ppc64le/kube-controller-manager.sha512","digest":{"sha256":"ac5fc47fd80e4c94391c3aa1c8622f60082db6a0533d3960ffb365d368479a9b"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/ppc64le/kube-controller-manager.tar","digest":{"sha256":"668f7792a2543542503aeef4a0354067b14176b9e196fcc8068f546bb6695912"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/ppc64le/kube-controller-manager.tar.sha256","digest":{"sha256":"54c71afaa7879380a37a93e550f96d4980d474cac6b2bdcdf2163e58fd053452"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/ppc64le/kube-controller-manager.tar.sha512","digest":{"sha256":"ddcaa7130ba85a6952adcb3730bfef8a23343161f781e66247e8866cf7a0bfc3"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/ppc64le/kube-proxy","digest":{"sha256":"64b146bf770fb663075a7f990a8d9b48886f0981c19402a350087bb60fffb753"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/ppc64le/kube-proxy.docker_tag","digest":{"sha256":"30f725d6b77a552b80d955c643ac9c8a060ff38192d2fd3cbf5e0b409aa763c9"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/ppc64le/kube-proxy.docker_tag.sha256","digest":{"sha256":"68679b2bfa253327f4f28d9cd37175d65e001fb136f4c1353d6b8c6d37fb67d0"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/ppc64le/kube-proxy.docker_tag.sha512","digest":{"sha256":"8af43225e27a27526fe322acaf6c3b5ca681b37ad77ed7639a6d657901bc9772"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/ppc64le/kube-proxy.sha256","digest":{"sha256":"634a6253a69c076c1dc723f67bc8376a2a8191164555833d9b6cc17fd131d656"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/ppc64le/kube-proxy.sha512","digest":{"sha256":"95ea02907103998ba58009414f90fb73ba025af5fa1fbd300ae8a5584501517d"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/ppc64le/kube-proxy.tar","digest":{"sha256":"6f3cce4db81ab3763474d46d0cfb68d3351945d7f089d96b12504901c6e35c52"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/ppc64le/kube-proxy.tar.sha256","digest":{"sha256":"0ad3e76937bdeb27771913fe8648e5b4c7eff70e7ede787d812d3a2f4773ca36"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/ppc64le/kube-proxy.tar.sha512","digest":{"sha256":"79fb11385bc190a94a7b66794b7dc925f99727600694c30248b86fb916850fbe"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/ppc64le/kube-scheduler","digest":{"sha256":"e2b2c0245024591820eda496728ff3d091916e1f01018faa19d0eeb44b68b9fd"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/ppc64le/kube-scheduler.docker_tag","digest":{"sha256":"30f725d6b77a552b80d955c643ac9c8a060ff38192d2fd3cbf5e0b409aa763c9"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/ppc64le/kube-scheduler.docker_tag.sha256","digest":{"sha256":"68679b2bfa253327f4f28d9cd37175d65e001fb136f4c1353d6b8c6d37fb67d0"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/ppc64le/kube-scheduler.docker_tag.sha512","digest":{"sha256":"8af43225e27a27526fe322acaf6c3b5ca681b37ad77ed7639a6d657901bc9772"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/ppc64le/kube-scheduler.sha256","digest":{"sha256":"d83c49cd9cd71aa51ee41979ddba4d41ee6b74886ad0d286de325cb08e1a38e4"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/ppc64le/kube-scheduler.sha512","digest":{"sha256":"fffc415edbbb621115b98742b14c18fedf2c4c677b3ecdc42bdcbde675c74f95"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/ppc64le/kube-scheduler.tar","digest":{"sha256":"ce20f45ff8c87a17a17f460eb3e43defa3539d52a99ee688ebb649ef159d2d3c"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/ppc64le/kube-scheduler.tar.sha256","digest":{"sha256":"8a672900da6d721e95d2bf723a48a85b1c697ef54736ee84e7083eca4029e05b"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/ppc64le/kube-scheduler.tar.sha512","digest":{"sha256":"c86fa08bf4566187f703856ff008c371ccb9fbef48764a0f8eb3cbf0fff1d3f6"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/ppc64le/kubeadm","digest":{"sha256":"b1305fa9180369ce21973f8db0063be26573a42d9fdd4662bd8450e22f5b4cd0"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/ppc64le/kubeadm.sha256","digest":{"sha256":"075a13c41aabc7f5a27f85bf8c04f4a1c4cf98306f76c957f53e918e24b93937"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/ppc64le/kubeadm.sha512","digest":{"sha256":"4a768cb8445e0de90434798e3c04e9c3d1c0b34f0256f0c2db4bb9e8e5881c85"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/ppc64le/kubectl","digest":{"sha256":"0642323e5760f507187a1ef102d400c31507ad082d6f6c5e53047c51825b4218"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/ppc64le/kubectl-convert","digest":{"sha256":"ba3f85211d241628b7fd2076b451cb0c6c77268c66f57597a7b25fd162374ccb"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/ppc64le/kubectl-convert.sha256","digest":{"sha256":"dd064dad80f0d951868008b013744dace9db31bf784dab3a7b0f93109bb7c5e6"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/ppc64le/kubectl-convert.sha512","digest":{"sha256":"0eb5487d1174d9b5df7ea85cb90896803190870063b0f29737ce81be99e4b530"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/ppc64le/kubectl.sha256","digest":{"sha256":"2ade2ac7d09458580f008667aad5990e28d03c39d315fa7c20988d201794f5bb"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/ppc64le/kubectl.sha512","digest":{"sha256":"1c735501bcaa3fdcf4679b2c606c2352b169b7bb93bbe6bd1f283b32441694ce"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/ppc64le/kubelet","digest":{"sha256":"ec079726b3db961cd921c830c7d9f81040df79eb2d1c6f00d78ad763921abb79"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/ppc64le/kubelet.sha256","digest":{"sha256":"940b6380e6fbd97615290b5960c30fef45be9bcc6ef3cad70a64774c15aa2de1"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/ppc64le/kubelet.sha512","digest":{"sha256":"75acad8bcce57cef04e9134deb730b3658664b74642ba5641c812390bdcabf57"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/ppc64le/mounter","digest":{"sha256":"8db206ec204728c472abe322a8f7a9f166a28af61c47c7020892ca5adda29f4e"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/ppc64le/mounter.sha256","digest":{"sha256":"4dab1d400239c5d4cc8df764f16d061bab3d0f989f3e09eb6e57b83fa91bd642"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/ppc64le/mounter.sha512","digest":{"sha256":"a51c5a833afee91327b1a16ea403a4949b6f27f2c2eecf9681ad8fa9934cec69"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/s390x/apiextensions-apiserver","digest":{"sha256":"40d4f11b85668758e6be49a17654a4abdb0d022cd55474aa27b8a17a8a676404"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/s390x/apiextensions-apiserver.sha256","digest":{"sha256":"0934a4a3d54762df48b80be10c8f6574df30f450b23c3536d57901b2757ffd88"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/s390x/apiextensions-apiserver.sha512","digest":{"sha256":"95142346b3b0132e2f3b4b04a3eec638830ba1a1e79a0dac342b9c32d58e2b98"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/s390x/kube-aggregator","digest":{"sha256":"2d462d58e55d164bf2f6f5f70d2f316f854e27c4ff9feb76580aaf1f7083dee3"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/s390x/kube-aggregator.sha256","digest":{"sha256":"7ac81e6d01063f594f1af413efa7cf68f01a80d9ac0a6720b2f70df0b01e0774"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/s390x/kube-aggregator.sha512","digest":{"sha256":"f18299b6e54f8cd2d7a299c4a4aaa9b94399402a4c2dc10977e6eb705c887c78"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/s390x/kube-apiserver","digest":{"sha256":"119685a96b4e4c3a301b6feec550ed439eaabbf816972c0219facabbc3179622"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/s390x/kube-apiserver.docker_tag","digest":{"sha256":"30f725d6b77a552b80d955c643ac9c8a060ff38192d2fd3cbf5e0b409aa763c9"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/s390x/kube-apiserver.docker_tag.sha256","digest":{"sha256":"68679b2bfa253327f4f28d9cd37175d65e001fb136f4c1353d6b8c6d37fb67d0"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/s390x/kube-apiserver.docker_tag.sha512","digest":{"sha256":"8af43225e27a27526fe322acaf6c3b5ca681b37ad77ed7639a6d657901bc9772"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/s390x/kube-apiserver.sha256","digest":{"sha256":"7b4c7a6b3979f6efde6e7e6c7706f94bbca2b733268db5fec0898551e6d3c05f"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/s390x/kube-apiserver.sha512","digest":{"sha256":"456d0ecf89991326d5ec0cb9531eec38920f7086c86cdf39364bdc1c2ff395e5"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/s390x/kube-apiserver.tar","digest":{"sha256":"7925645bde1c9b3124b3d8985af808a3fd61b50f524ae1dc1bfa12b24d31cfc4"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/s390x/kube-apiserver.tar.sha256","digest":{"sha256":"9907572c7b998c27c027627519b79d67b9af5decec23e5544c0c2d4d0ae215f2"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/s390x/kube-apiserver.tar.sha512","digest":{"sha256":"e1661e4cd0b9868e98f14366ee5cc676c635d2e934381f7d0d34963eb1d8bd73"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/s390x/kube-controller-manager","digest":{"sha256":"a915a86e8f1140e75782fcb12c9478224939a05631539cf8135e5c7812d2e146"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/s390x/kube-controller-manager.docker_tag","digest":{"sha256":"30f725d6b77a552b80d955c643ac9c8a060ff38192d2fd3cbf5e0b409aa763c9"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/s390x/kube-controller-manager.docker_tag.sha256","digest":{"sha256":"68679b2bfa253327f4f28d9cd37175d65e001fb136f4c1353d6b8c6d37fb67d0"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/s390x/kube-controller-manager.docker_tag.sha512","digest":{"sha256":"8af43225e27a27526fe322acaf6c3b5ca681b37ad77ed7639a6d657901bc9772"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/s390x/kube-controller-manager.sha256","digest":{"sha256":"59f83a9f9a6e4a9ffb4914e9bbdba823ae819034e1e06e298db35c9f2b377cd5"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/s390x/kube-controller-manager.sha512","digest":{"sha256":"6d2a7587fe69731ebb0e388ec15865be724271c63771e15ffa31a3cd3d6afec1"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/s390x/kube-controller-manager.tar","digest":{"sha256":"6ffece61c828875c60fb3c69a32e6bfc6ea54b86dcf3a542968053fe26bc990b"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/s390x/kube-controller-manager.tar.sha256","digest":{"sha256":"c476b532a0f62ad144b846a02f3147b98db0dc90b664f9884a0107548e1e51f5"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/s390x/kube-controller-manager.tar.sha512","digest":{"sha256":"70185d71351c9d6a73121d8b7e26ea62e7c4e1d6e25d97bdc9c33df3ad39ff7b"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/s390x/kube-proxy","digest":{"sha256":"f12b0f3542b0791c010a1745b990da019cff721d8425714344e1456643830676"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/s390x/kube-proxy.docker_tag","digest":{"sha256":"30f725d6b77a552b80d955c643ac9c8a060ff38192d2fd3cbf5e0b409aa763c9"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/s390x/kube-proxy.docker_tag.sha256","digest":{"sha256":"68679b2bfa253327f4f28d9cd37175d65e001fb136f4c1353d6b8c6d37fb67d0"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/s390x/kube-proxy.docker_tag.sha512","digest":{"sha256":"8af43225e27a27526fe322acaf6c3b5ca681b37ad77ed7639a6d657901bc9772"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/s390x/kube-proxy.sha256","digest":{"sha256":"0b284b6e425d571898a585c4be98b55209ccf80f3d99b54be0e7dfb33b7503a2"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/s390x/kube-proxy.sha512","digest":{"sha256":"80006113761c539064aabf3c4cd32464adaf73ff127dff105370651c2f56e485"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/s390x/kube-proxy.tar","digest":{"sha256":"00f0c4becb291d6d5ea3b0b4f39aa5d3b4736d9fd985201a1622ace43f271429"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/s390x/kube-proxy.tar.sha256","digest":{"sha256":"8be40c17eaf88bd4a3b8b0f85b1bb80131901803ee99112d811d2a01b80c1337"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/s390x/kube-proxy.tar.sha512","digest":{"sha256":"7eb8fc50edfc780f4cf5bd481592c3df517c69325037779bf4273f6387ccfec8"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/s390x/kube-scheduler","digest":{"sha256":"431287e089f9e5d6230f9fa1185b19eb8535d2af3611ba7db366b106181d5c00"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/s390x/kube-scheduler.docker_tag","digest":{"sha256":"30f725d6b77a552b80d955c643ac9c8a060ff38192d2fd3cbf5e0b409aa763c9"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/s390x/kube-scheduler.docker_tag.sha256","digest":{"sha256":"68679b2bfa253327f4f28d9cd37175d65e001fb136f4c1353d6b8c6d37fb67d0"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/s390x/kube-scheduler.docker_tag.sha512","digest":{"sha256":"8af43225e27a27526fe322acaf6c3b5ca681b37ad77ed7639a6d657901bc9772"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/s390x/kube-scheduler.sha256","digest":{"sha256":"dfefe5faa35849459bf8bc7282275a1628072ab396983b08f88ab8bd9398bd70"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/s390x/kube-scheduler.sha512","digest":{"sha256":"0536f8493889756d7995c1fb37cf068245d9db0f75e9fa53f4810cb31b87fcc1"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/s390x/kube-scheduler.tar","digest":{"sha256":"0b8db1bef40196d17a230f1d16e1bc534b26f991110df834372b552939781cc9"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/s390x/kube-scheduler.tar.sha256","digest":{"sha256":"39e51142d9f0d4759bb82d9b810caff8e30e05d4454de9bbf5f0c3ac3dab2e92"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/s390x/kube-scheduler.tar.sha512","digest":{"sha256":"1d590acceb686fb7a0018b51087004929987874c30bfb1408bf671546d13e31b"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/s390x/kubeadm","digest":{"sha256":"b0b2e257a62dfe743ad68bda062820262e94dfe100a930d9bf75ec3d360184a3"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/s390x/kubeadm.sha256","digest":{"sha256":"59542ff81afe3c90e62ce4fb96f0175fbd0072ed9d41bc406edb3ecf59927ed1"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/s390x/kubeadm.sha512","digest":{"sha256":"4607401ea1fa57af578b15cdb5272a245347c190e42346d7c2a9f86829cdeded"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/s390x/kubectl","digest":{"sha256":"1d5c381bea791d1eee55eba361beffab462ab986e95de363d3a66a904dc8f5a7"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/s390x/kubectl-convert","digest":{"sha256":"8fffcce6c28c0355aa5412a43b38f17c2ce5bcc9be2f3d63c17942faec5c22d6"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/s390x/kubectl-convert.sha256","digest":{"sha256":"ba91afe04b57c55b9f628357fbcc336aad58dace2a1ccf0ce9df0f4a07715176"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/s390x/kubectl-convert.sha512","digest":{"sha256":"c86007f399dc99fd69ebc5cba2d6d54296faf0c26050a15e33b260b18c09bb7f"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/s390x/kubectl.sha256","digest":{"sha256":"1e4fdb4fe8de189df98cad2e6d520381f4abd24f058f03e91d9acc33d218b77d"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/s390x/kubectl.sha512","digest":{"sha256":"90e07bd1e5f2f72b0c24fc4907648cab8f1adf719b5c834e0351091000730958"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/s390x/kubelet","digest":{"sha256":"fc06c0b66508aefcf25a41668fe63f1cc8ff0028f7256d09c0012a37f1022e2d"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/s390x/kubelet.sha256","digest":{"sha256":"6f1914d15d1f76e1a24beff8ed94545dfe4429ef489aa95bef99e5e5971b0637"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/s390x/kubelet.sha512","digest":{"sha256":"054475e7c63f93f7fa66a39eba548d397127dfc49c1959daa16bac9d0a713e4b"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/s390x/mounter","digest":{"sha256":"5594feb18a7aefa360d351b16f2f351682583581d10b232ef578356cb395c57c"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/s390x/mounter.sha256","digest":{"sha256":"456e52897042ef4462474547154ce793fd99c533e8e3a41bc62d911b691fa9fe"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/linux/s390x/mounter.sha512","digest":{"sha256":"041e2f799ac32bd88cda4003482b65811ddcfc3b0f43a453f20682d0f4972f75"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/windows/386/kubectl-convert.exe","digest":{"sha256":"0fb14ed6aa070b8ed9b54504b30af5cd8a1cd58e43d652c360e138e4c4f4b155"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/windows/386/kubectl-convert.exe.sha256","digest":{"sha256":"8a78c9ed4a4f030483a620af23923f5f74575786d74bc64e5bbcaa53830cacfe"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/windows/386/kubectl-convert.exe.sha512","digest":{"sha256":"671afbf1c3a6d2d210e49050f4ce41ea4ef37df4e26353a99ee893f57208dff2"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/windows/386/kubectl.exe","digest":{"sha256":"db62263146d7d1ac536eecb8b98d4fb61dbd038a4ae24295938a4e3ebceda013"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/windows/386/kubectl.exe.sha256","digest":{"sha256":"945927099698f98a035a953adcfe673b2487dfc678b1de9566877abeb050f6f0"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/windows/386/kubectl.exe.sha512","digest":{"sha256":"cfc90cf7705ebc9e2d8b2f3c3e7de189c089e067944d780fe5f7decf916a403b"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/windows/amd64/kube-proxy.exe","digest":{"sha256":"8dc1fb6fbd4038f4f8753bde825e8349144a48d329d1ca313b0b0ec6637ef191"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/windows/amd64/kube-proxy.exe.sha256","digest":{"sha256":"f1cdae3b53d0637afe6a7878f87f78bdb7855ff0de0aaf8d1702180bc43e4a53"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/windows/amd64/kube-proxy.exe.sha512","digest":{"sha256":"e257099058b4253e19558256cc7a75cc1b37b2eac39a0501c209805949ec4362"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/windows/amd64/kubeadm.exe","digest":{"sha256":"c80dbd6f871d1806c6f8a66d37cbb73a867287f3d3005efdbcee3bf5d50d858c"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/windows/amd64/kubeadm.exe.sha256","digest":{"sha256":"2550336bee19a7a21ac4c50baa954204cbde64b2ec87ec344d24f5d46eaf4b35"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/windows/amd64/kubeadm.exe.sha512","digest":{"sha256":"77f2ab0baf729ac20d925b68c34d97ff96a6208027e32f57c39a0396cab4d3ca"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/windows/amd64/kubectl-convert.exe","digest":{"sha256":"a07185dc3fc55115fe260450bee1fda8081c5e7ed6b36a1e1f19db64f3df76a7"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/windows/amd64/kubectl-convert.exe.sha256","digest":{"sha256":"89baa2c4d8665ef297a91956e725e0abbae1ef14be86fa3d92e9ae58bf66f4b4"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/windows/amd64/kubectl-convert.exe.sha512","digest":{"sha256":"6824e8d17d4f12d52ca018fcbc74df87ab282268930a81c820416393df4f1cad"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/windows/amd64/kubectl.exe","digest":{"sha256":"d6242638958c2b28371ce0a01458d8b95f98011660a6f167de8739be8b33987c"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/windows/amd64/kubectl.exe.sha256","digest":{"sha256":"037d6b2d8230fb267faf3e6acc041b5c59696e5849e134e00145ada679f67fa0"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/windows/amd64/kubectl.exe.sha512","digest":{"sha256":"bc39d18f833af34d7beb08e5a9d7ad3ba1532601476dbfd33c99efbd20a1a0e5"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/windows/amd64/kubelet.exe","digest":{"sha256":"29128e7e01faa3a7623d1ed658ffceddcf1e85bd19ea528f8915db2cf1d68328"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/windows/amd64/kubelet.exe.sha256","digest":{"sha256":"2e5a995f7694713217ec3b9cf41adaa07b09c0d1f17204ae11638d6ac6cbbf1b"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/bin/windows/amd64/kubelet.exe.sha512","digest":{"sha256":"4fb796a2105de27c1a1ec543b14ede0b46a54c01af4513f7a50a936b42c7d471"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/kubernetes-client-darwin-amd64.tar.gz","digest":{"sha256":"675ec49b9a46029acb0421caeaa42f054672391c3385aa644afbf8697cfe2e1d"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/kubernetes-client-darwin-amd64.tar.gz.sha256","digest":{"sha256":"bc339af6f3cd08d0a64f1a101c2f89420933c41c3e784e215cb047753bc39d9d"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/kubernetes-client-darwin-amd64.tar.gz.sha512","digest":{"sha256":"f79f8232798743d7ebe899301d751e659461c7806560b0975cfeec55c9975e16"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/kubernetes-client-darwin-arm64.tar.gz","digest":{"sha256":"eb23f82f7a21528f4b556644f9e42359bde1bcc15e0a7226b0a0ed7909cb30a8"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/kubernetes-client-darwin-arm64.tar.gz.sha256","digest":{"sha256":"a3d79396aa093dc9ebf905b46235858dc2e64ef04b011f46cb07b2dbda14c865"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/kubernetes-client-darwin-arm64.tar.gz.sha512","digest":{"sha256":"5cc77bd31d51549cfe2c4f074f265504b31041447a473e7075dfb2ba6abef801"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/kubernetes-client-linux-386.tar.gz","digest":{"sha256":"547ff6e204008ffe890deecce18d13c14023d3681d7657218706dc15ab920cc5"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/kubernetes-client-linux-386.tar.gz.sha256","digest":{"sha256":"966912e075c112cc04c87a4f65bd2f46e07771ab12457f365152ecc39d4081fc"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/kubernetes-client-linux-386.tar.gz.sha512","digest":{"sha256":"d0d3e311973af2df8a4c34cbc49e60f3c7dd446495f376ad94903ccd5fb0b7db"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/kubernetes-client-linux-amd64.tar.gz","digest":{"sha256":"55b88bc7632672fe31b23e68f13341ac6124678ee8e4c9db92d925be43d86d3c"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/kubernetes-client-linux-amd64.tar.gz.sha256","digest":{"sha256":"7d063045f4e427704cb80748ea3f620600880e1ff4654739adfab9bd53b5f966"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/kubernetes-client-linux-amd64.tar.gz.sha512","digest":{"sha256":"874c6fcebb019d1914631fcb1b7a6132975f7e4af077d8d2eefa5f1641ae041f"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/kubernetes-client-linux-arm.tar.gz","digest":{"sha256":"7970b0f084a2030b17a99b26a144a2d35f4e9135e23af95eff600bfa56578814"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/kubernetes-client-linux-arm.tar.gz.sha256","digest":{"sha256":"a266ff8e3066065717a5b9214e361eab179a5e5619f4398142e9151dfb557537"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/kubernetes-client-linux-arm.tar.gz.sha512","digest":{"sha256":"394dd822c07ed1e83238df56f88598850bf3562977118ac1a3dad3b11da89546"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/kubernetes-client-linux-arm64.tar.gz","digest":{"sha256":"8ba44fd53a867d1bb7514c5a02b9cb78cc35b7cbe162b6106c18a9bd7a83b27a"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/kubernetes-client-linux-arm64.tar.gz.sha256","digest":{"sha256":"735a4782a3d4beba1426fba59daf88561c11952383105ddba0682fc26f3ea338"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/kubernetes-client-linux-arm64.tar.gz.sha512","digest":{"sha256":"5b5b6e12b39786948c3edbdeadfe25651dea1df00967bd3faf5a421cc922a6b1"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/kubernetes-client-linux-ppc64le.tar.gz","digest":{"sha256":"afd4d8f93f2620b1b7bb1f0de379113a611aaba42e0e8404047eae5c7bd8a35f"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/kubernetes-client-linux-ppc64le.tar.gz.sha256","digest":{"sha256":"699a22c54f3461537814857ed1996929767b5b08cad35d2ebc9b84de85251998"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/kubernetes-client-linux-ppc64le.tar.gz.sha512","digest":{"sha256":"a8fbcd9bfe9ecac84e03e9fd714bc529efc97c8c25e296cbcc637511de8cd4ff"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/kubernetes-client-linux-s390x.tar.gz","digest":{"sha256":"7bf38e225e64b9ca484ede81ceac91eda6971c25a693fb71eca85babcfc7b977"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/kubernetes-client-linux-s390x.tar.gz.sha256","digest":{"sha256":"8f56e82bce5fdb025655becaa65cd803da9b82aa806e8fa9e48693e441005d6f"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/kubernetes-client-linux-s390x.tar.gz.sha512","digest":{"sha256":"4ad74fac12955c64e64810b66c0bcd1b00eac6f251f68811be382578d84e2be7"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/kubernetes-client-windows-386.tar.gz","digest":{"sha256":"9af2776bbf40496111e21745e934f919c9bd08982cd15874667331bdbf1d459b"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/kubernetes-client-windows-386.tar.gz.sha256","digest":{"sha256":"0c4f65765463b5f388fd61ef71a392dbd304459ef721fafbcec529b7ad9b4c6f"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/kubernetes-client-windows-386.tar.gz.sha512","digest":{"sha256":"269830653efabb0a93d6f473379cacf50eae632c7c2c0ca53e24135bace6ed29"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/kubernetes-client-windows-amd64.tar.gz","digest":{"sha256":"9c2e22730b53468de61a2b3c4943575ed2c61560478eb4335a7ac4ec0b02b957"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/kubernetes-client-windows-amd64.tar.gz.sha256","digest":{"sha256":"3d82d18e4f3324cc66977f4ce73b2f48c239d62ade67dccd29ace0a7779c5f2f"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/kubernetes-client-windows-amd64.tar.gz.sha512","digest":{"sha256":"c035ec1baf0585dd3ae757c9037bd0aa8dcdafa4f04ef8ccb83582305b781330"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/kubernetes-manifests.tar.gz","digest":{"sha256":"30e4a1b3ecb4d0c163462a00c4f98ec508c0c80fdf71e09bda08cbcbac26f8b2"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/kubernetes-manifests.tar.gz.sha256","digest":{"sha256":"c62112673a1b8ee38674f019dc5ddd5b36c7c91ce2eacec04c34cc3c29090479"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/kubernetes-manifests.tar.gz.sha512","digest":{"sha256":"44635596cf33e8395e441f4eb0f0cb19904f28e13ecafe248829c6e66cf43939"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/kubernetes-node-linux-amd64.tar.gz","digest":{"sha256":"e3f5c789d1d4b0f2aaf87d136c81ce225d970ee56c3d363a8bf120221c46d4c5"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/kubernetes-node-linux-amd64.tar.gz.sha256","digest":{"sha256":"31276ea7325f0267592addca9624e038a559c6b5acc082250e83b045a9f15a5c"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/kubernetes-node-linux-amd64.tar.gz.sha512","digest":{"sha256":"828c5be800782f76e5f5921f572256e1b3a9917a10016cf9ee66e85ccbc1c54f"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/kubernetes-node-linux-arm.tar.gz","digest":{"sha256":"dc88975115370ba459e894b4008c85408f15833f75b048b820d98e8758b33c99"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/kubernetes-node-linux-arm.tar.gz.sha256","digest":{"sha256":"ffa854daa425cb4c17f7adddff422df7f62d114777989bd5ce1c6f42edc9fa0a"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/kubernetes-node-linux-arm.tar.gz.sha512","digest":{"sha256":"59646434d5610effe2fc30ef4c48f500b2c530da9833f05b241d4448a26a41f0"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/kubernetes-node-linux-arm64.tar.gz","digest":{"sha256":"7b33289e7358ff7666c9550d89b19a634e877464207883b48d6895de01e6f462"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/kubernetes-node-linux-arm64.tar.gz.sha256","digest":{"sha256":"94ebf8ddc146cba3f7929334f41229f2d1e932049b4a5ca2f52f18121f61b685"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/kubernetes-node-linux-arm64.tar.gz.sha512","digest":{"sha256":"8d92b0352d45cff5788d77ec208b85b67f8a1600a24246899e7bfb4cd0cc7111"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/kubernetes-node-linux-ppc64le.tar.gz","digest":{"sha256":"6299f5cd362c3dde8d8b751599ef5e015b40481ce9a719f4bea5947651e732fa"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/kubernetes-node-linux-ppc64le.tar.gz.sha256","digest":{"sha256":"9fef902a586f3ce2a87341da229a5801301ec68807c8df9922771b88911334c4"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/kubernetes-node-linux-ppc64le.tar.gz.sha512","digest":{"sha256":"ab830615c111a0b159c090ff9a128d2b1b158c82654936b6e4247b97aa63cd3e"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/kubernetes-node-linux-s390x.tar.gz","digest":{"sha256":"5cea1d7670c191f3f5a34989905ae9285581b767ee3defcb13f50cd98bd34dd3"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/kubernetes-node-linux-s390x.tar.gz.sha256","digest":{"sha256":"df6d9493386b8f69eda0ecf6626c3ffa0f3feebe69ba933b44668924389c96ff"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/kubernetes-node-linux-s390x.tar.gz.sha512","digest":{"sha256":"9fb01abd1465960f5717e9ab3fdc86468490c2073e62dace8189a3267aef8251"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/kubernetes-node-windows-amd64.tar.gz","digest":{"sha256":"5317c181bb2b2ebf1737699204ac407fc204a382c15431e38a88688161ab7a68"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/kubernetes-node-windows-amd64.tar.gz.sha256","digest":{"sha256":"383a33415279537c5b247a931f320789e2df0faf2103068db5795aa7ca9a1364"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/kubernetes-node-windows-amd64.tar.gz.sha512","digest":{"sha256":"b2cfda45e0df57650f93ec7eedd04b763c39d7934aafe732485e45b48a4f4317"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/kubernetes-release.spdx","digest":{"sha256":"7fc39508a548d8e5a1331c17cbc1ec40f991fb32b0d77bd4ba31fb1433bf0604"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/kubernetes-release.spdx.sha256","digest":{"sha256":"97d38264241a81d58e639e2bd63ece6e0fb9eed39cc1e1fe06573ab58d85d25e"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/kubernetes-release.spdx.sha512","digest":{"sha256":"90434e0e1a5075e93ec2e3b7b2b6b45d82e44da0fe32730b4bbcd336df9f08fb"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/kubernetes-server-linux-amd64.tar.gz","digest":{"sha256":"eae4267b2126ed707aee090dda762ee4bbb01d2628c2effa2ac8f02d964f074b"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/kubernetes-server-linux-amd64.tar.gz.sha256","digest":{"sha256":"20ee69c23e5265f7ef91b625b99f8f31f3be166c3e7408d83cbd41beb95068bd"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/kubernetes-server-linux-amd64.tar.gz.sha512","digest":{"sha256":"29976afdb21afcf5a135d33ede1875179fad6c11be6567d97cc324036b0cf3e0"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/kubernetes-server-linux-arm.tar.gz","digest":{"sha256":"a789a1160180ba205ff64e7552253e2a7b5d101634656999f46cf8b0506b7be7"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/kubernetes-server-linux-arm.tar.gz.sha256","digest":{"sha256":"4471e9d8b45137dea9555f15307ea64fa1ce308ac235b2fad71d5f99a0e4ae69"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/kubernetes-server-linux-arm.tar.gz.sha512","digest":{"sha256":"9110091487277a0079781c0669cb86197750916ba599e1df7e42433127993e87"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/kubernetes-server-linux-arm64.tar.gz","digest":{"sha256":"e1d627d128f928bf8184d7a187dba487aad2d2fa5dbcb4e133b8443c00097a14"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/kubernetes-server-linux-arm64.tar.gz.sha256","digest":{"sha256":"4a9fcd06f07d4c7bde5ae7acb67c41b9023463f03be7660688adc620ceec3624"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/kubernetes-server-linux-arm64.tar.gz.sha512","digest":{"sha256":"b0a1216a350d9eacf210a23ab4435a46f08bfb514b32bf8c1816be643e768a1f"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/kubernetes-server-linux-ppc64le.tar.gz","digest":{"sha256":"55398f9a1e998cf256bbba5435fe1d0ed61635c00d0bf125d85dbd1866b16ba4"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/kubernetes-server-linux-ppc64le.tar.gz.sha256","digest":{"sha256":"08d935218ef82a83c71a14fac313040842b1a6bc44913fcf040b50bd9df1efd3"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/kubernetes-server-linux-ppc64le.tar.gz.sha512","digest":{"sha256":"cc52ceb513b1b19f453df6017631e0565299372e782c8fa15db5ec9cfc7f525f"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/kubernetes-server-linux-s390x.tar.gz","digest":{"sha256":"dec652691e9e83f392b35238c02b3a28d6d39673f09cae455dcbf6f1394bd865"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/kubernetes-server-linux-s390x.tar.gz.sha256","digest":{"sha256":"c809a069ec717edd44039a1eb866c88538fecf9acb4fc56120b7ea3c0648553a"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/kubernetes-server-linux-s390x.tar.gz.sha512","digest":{"sha256":"815f7ce01c0f71da65dbcae4764c59ceb81dbb0bd89525ffe0486432f30baa8b"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/kubernetes-source.spdx","digest":{"sha256":"37ac78cf4395033d94c81586ec5b9180d5a01b163559cdb9b600d26828bc78e5"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/kubernetes-source.spdx.sha256","digest":{"sha256":"d14803c732005a72d5ef0ffafc0e2c951854313c438da117eeeec0d75ee57aa6"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/kubernetes-source.spdx.sha512","digest":{"sha256":"2185236b918970d8903d16605675a3701c5a340e5a9ef5c128380112cb2710a6"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/kubernetes-src.tar.gz","digest":{"sha256":"aa4bfb971d09894efeb1f2935fcf7d9e66a3387c35a92e693c0b7c70ba77c9d8"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/kubernetes-src.tar.gz.sha256","digest":{"sha256":"eaff4d5c4903f70fd0834e9a8567a33804fada9d403d38ace71d252eb7167ced"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/kubernetes-src.tar.gz.sha512","digest":{"sha256":"ab36014f159b460a60e4e0b1496cd68c2473efd7184e007e72184bc04319410d"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/kubernetes-test-darwin-amd64.tar.gz","digest":{"sha256":"edfdebfc1042b1e300f14e4ae1e285deb2d12c7a42dc6a6646c4808833ac5c49"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/kubernetes-test-darwin-amd64.tar.gz.sha256","digest":{"sha256":"18c2d5f407cefda2b17fafceb1f4f8d222332e35476a86b15e54db65bb75f0b5"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/kubernetes-test-darwin-amd64.tar.gz.sha512","digest":{"sha256":"c14c9e5fae0ec956d53381b73d1a7b54ce07922e20f23ab87cc64afa24ae8b2d"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/kubernetes-test-darwin-arm64.tar.gz","digest":{"sha256":"1f72e78b85ac78405ffea86004b1009f83815ed382c0403affbb06464c5875b8"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/kubernetes-test-darwin-arm64.tar.gz.sha256","digest":{"sha256":"b6bd6517487783efb8b9414170844b9492250d9dc1ecf7e0bbcf1c399c00ad57"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/kubernetes-test-darwin-arm64.tar.gz.sha512","digest":{"sha256":"4fb4ec469bf78a051f4cb47645521e97d850561b2f204f8572e583c638d285e1"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/kubernetes-test-linux-amd64.tar.gz","digest":{"sha256":"42806298c23a84ceacdd2697ff37043ad1f27c2e07476441534780eb90327668"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/kubernetes-test-linux-amd64.tar.gz.sha256","digest":{"sha256":"b33605942ffb38832aec369dd29accbb54404c5c240823c0a08c8da1832f2180"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/kubernetes-test-linux-amd64.tar.gz.sha512","digest":{"sha256":"5e3503c04b0fa73b90e730c5d8299eca583db115b6ef2db5ac1fda6883c7b94f"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/kubernetes-test-linux-arm.tar.gz","digest":{"sha256":"98b523c4622b00ede954967253bfe175015ea619fa46b5dbe632c01d0d218ee5"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/kubernetes-test-linux-arm.tar.gz.sha256","digest":{"sha256":"050bb6dda902383774e219d1eff6e9c668fb5774b3750c2fbcd0f3c2d7e7d93e"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/kubernetes-test-linux-arm.tar.gz.sha512","digest":{"sha256":"0cc047da8f0ce7d6a48091203be1809023564e9a1c086dac62c05196965da7db"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/kubernetes-test-linux-arm64.tar.gz","digest":{"sha256":"04804d882fda1e15ddf2c91d19a3e3d2b032c8ccd9acfa881620dbda474a65cc"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/kubernetes-test-linux-arm64.tar.gz.sha256","digest":{"sha256":"4b61a1fb17564d5ce8c82fb975007ac055daa069346fcbace662e457f23455bf"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/kubernetes-test-linux-arm64.tar.gz.sha512","digest":{"sha256":"31a6fbcb83d9b4101545582278fd68235e1e1bdb457a535d4e2de35870940e58"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/kubernetes-test-linux-ppc64le.tar.gz","digest":{"sha256":"f66ae390a58f8882e724bc4cb86bd7b8d77b3268afb6a56b785c9c8b26f65c8b"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/kubernetes-test-linux-ppc64le.tar.gz.sha256","digest":{"sha256":"19b22d7b9f02460f73c7c4222d6e5a8a04193004ac8302fcafa8f6611b74f72b"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/kubernetes-test-linux-ppc64le.tar.gz.sha512","digest":{"sha256":"378ae6c778be2c4e23412c90b00142ef44ea03be34d8053cbf13f7861f2e6eec"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/kubernetes-test-linux-s390x.tar.gz","digest":{"sha256":"773fb01037ac5500a1b82a2f9532825f4e4a0092682824a87929463d49a833e2"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/kubernetes-test-linux-s390x.tar.gz.sha256","digest":{"sha256":"64d4243ced1f44aeb77d05fcf32ccb8fa9172e6bba7e39e0629539a503c7e08c"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/kubernetes-test-linux-s390x.tar.gz.sha512","digest":{"sha256":"86b4486e78e6efe1f4c2ea333be9e9afa351655058f1375da975c46186b83b7c"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/kubernetes-test-portable.tar.gz","digest":{"sha256":"e236b127ef368f3292f0b614f4aadf156c4360415f22c68cb33418d37c8a51e5"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/kubernetes-test-portable.tar.gz.sha256","digest":{"sha256":"013155290699e5c7aef718022b92678ddcd808a291e7ee9edf72fb1bb6698255"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/kubernetes-test-portable.tar.gz.sha512","digest":{"sha256":"378e4e1c5c12b032930be47d810f5b3cc1c89cdd760ddfc0e35daaa0f9562c04"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/kubernetes-test-windows-amd64.tar.gz","digest":{"sha256":"88480b5ce25223305d91e13b7107a4881416cc56ee3ac31a22a5ec2484195a1e"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/kubernetes-test-windows-amd64.tar.gz.sha256","digest":{"sha256":"0a6ebc5b979a5f5f916a7a34e4efa4ad1ec1961a611cf660465277fbe6e55603"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/kubernetes-test-windows-amd64.tar.gz.sha512","digest":{"sha256":"c2868ee2024321a297f7a30cb878530be14de05ae1fdd77db05960c03a7833d3"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/kubernetes.tar.gz","digest":{"sha256":"d5c3c11e3a738887f8719abc5a315aa5515eae5d561c4a783b1cff5a437e02f8"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/kubernetes.tar.gz.sha256","digest":{"sha256":"dd09bd81328aec5790015a064f0a2e2e35b26689fd3771d8b8618e972b59dd98"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/v1.23.0-alpha.4/gcs-stage/v1.23.0-alpha.4/kubernetes.tar.gz.sha512","digest":{"sha256":"119f618c79545547574b45333408c6d8d3f43d419b21b924ca2be9b53297b7c7"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/amd64/release-images/amd64/conformance-amd64.tar","digest":{"sha256":"72069d1fdf38016ce65808e10b7f784823910ba8a923aa3e5888a869e28e3e97"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/amd64/release-images/amd64/kube-apiserver.tar","digest":{"sha256":"96a4905192c6be98d10571bcec4b79e892656041b42e69ac48c2525cb6f6e5b9"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/amd64/release-images/amd64/kube-controller-manager.tar","digest":{"sha256":"edd8b14df45547db9ee05a2ae60d2ce026ff3f0393cc0c02402f3ca9d71e50ed"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/amd64/release-images/amd64/kube-proxy.tar","digest":{"sha256":"391f93c2c5cee176607ff98d0912975db217e8be8496fc3c7b56abe25b866eb5"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/amd64/release-images/amd64/kube-scheduler.tar","digest":{"sha256":"ef497c20b50820df7059bbe86dfd86e9cd7f6682fc45a479e7ce6b97e2f08bc4"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/arm/release-images/arm/conformance-arm.tar","digest":{"sha256":"6ff6da5fca74ed727827ac423bc4f7515ce30d2e8fc43164e3f4879cfa41a227"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/arm/release-images/arm/kube-apiserver.tar","digest":{"sha256":"c9a190f04ac99df5054a47d2cf3d2db502099e146eeb6523534ba45ab0479ef5"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/arm/release-images/arm/kube-controller-manager.tar","digest":{"sha256":"cff525b4d4cf2910b28cbd40adea414e09ab2298ee3d0fc1a9cfbfbf9d6f23ac"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/arm/release-images/arm/kube-proxy.tar","digest":{"sha256":"b71dfe23d6ed630142ac4b3ee90d83cda6450e01fbdf054edfd2fb57bdb9dc3a"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/arm/release-images/arm/kube-scheduler.tar","digest":{"sha256":"21958218c0eaa579e82e8404a33a55c512d7dd954da08f6734ed27ff7427dffd"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/arm64/release-images/arm64/conformance-arm64.tar","digest":{"sha256":"52abae37505830d56819684874153af46d2e4070a9cb77ec4881c0669372cd17"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/arm64/release-images/arm64/kube-apiserver.tar","digest":{"sha256":"e4b7eb904ed7a4917cfd3d3d8df83b82051746b9c25607ae939bfd301b4109cc"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/arm64/release-images/arm64/kube-controller-manager.tar","digest":{"sha256":"d329110bf47d06c6531a22a1026e74c98384f87ec967612f628333a2e73344e3"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/arm64/release-images/arm64/kube-proxy.tar","digest":{"sha256":"63e024bb97d683ca646a3d27b12f732378a7c516c6e1dcdf6eb7d04bcb223e26"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/arm64/release-images/arm64/kube-scheduler.tar","digest":{"sha256":"31b7cb10aa1e0e1f87528565ff91e1d0c60b035adfebbfc6e42609b6e2befa34"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/ppc64le/release-images/ppc64le/conformance-ppc64le.tar","digest":{"sha256":"a47a26738f5626a150cfb3e500835ffad642e579d246f7796e5e77b6e1e081bf"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/ppc64le/release-images/ppc64le/kube-apiserver.tar","digest":{"sha256":"9cdf7827f08ae577e01d1b7a76c6665389a64c4a2995f34f6f55326bcc66e243"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/ppc64le/release-images/ppc64le/kube-controller-manager.tar","digest":{"sha256":"668f7792a2543542503aeef4a0354067b14176b9e196fcc8068f546bb6695912"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/ppc64le/release-images/ppc64le/kube-proxy.tar","digest":{"sha256":"6f3cce4db81ab3763474d46d0cfb68d3351945d7f089d96b12504901c6e35c52"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/ppc64le/release-images/ppc64le/kube-scheduler.tar","digest":{"sha256":"ce20f45ff8c87a17a17f460eb3e43defa3539d52a99ee688ebb649ef159d2d3c"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/s390x/release-images/s390x/conformance-s390x.tar","digest":{"sha256":"0bf4568a4dab4e4f2c0c806e4fb6fd1baf047af976bfb05ec8c6c5f33c246832"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/s390x/release-images/s390x/kube-apiserver.tar","digest":{"sha256":"7925645bde1c9b3124b3d8985af808a3fd61b50f524ae1dc1bfa12b24d31cfc4"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/s390x/release-images/s390x/kube-controller-manager.tar","digest":{"sha256":"6ffece61c828875c60fb3c69a32e6bfc6ea54b86dcf3a542968053fe26bc990b"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/s390x/release-images/s390x/kube-proxy.tar","digest":{"sha256":"00f0c4becb291d6d5ea3b0b4f39aa5d3b4736d9fd985201a1622ace43f271429"}},{"name":"gs://kubernetes-release-gcb/stage/v1.23.0-alpha.3.105+0ac956ff2bef9c/s390x/release-images/s390x/kube-scheduler.tar","digest":{"sha256":"0b8db1bef40196d17a230f1d16e1bc534b26f991110df834372b552939781cc9"}}],"predicate":{"builder":{"id":"pkg:github/puerco/release@provenance"},"recipe":{"type":"https://cloudbuild.googleapis.com/CloudBuildYaml@v1","definedInMaterial":0,"entryPoint":"https://github.com/kubernetes/release/blob/master/gcb/stage/cloudbuild.yaml","arguments":{"--branch=":"master","--build-version=":"v1.23.0-alpha.3.105+0ac956ff2bef9c","--type=":"alpha"}},"metadata":{"buildStartedOn":"2021-10-04T06:01:20.524861061Z","buildFinishedOn":"2021-10-04T06:35:26.333662009Z","completeness":{"arguments":true,"environment":false,"materials":true},"reproducible":false},"materials":[{"uri":"git+https://github.com/kubernetes/kubernetes","digest":{"sha1":"94db9bed6b7c56420e722d1b15db4610c9cacd3f"}}]}} \ No newline at end of file diff --git a/pkg/release/provenance.go b/pkg/release/provenance.go new file mode 100644 index 00000000000..c1ca201ea32 --- /dev/null +++ b/pkg/release/provenance.go @@ -0,0 +1,144 @@ +/* +Copyright 2021 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package release + +import ( + "crypto/sha1" + "fmt" + "os" + "path/filepath" + "strings" + + intoto "github.com/in-toto/in-toto-golang/in_toto" + "github.com/pkg/errors" + "github.com/sirupsen/logrus" + "k8s.io/release/pkg/provenance" + "sigs.k8s.io/release-sdk/object" + "sigs.k8s.io/release-utils/util" +) + +func NewProvenanceChecker(opts *ProvenanceCheckerOptions) *ProvenanceChecker { + p := &ProvenanceChecker{ + objStore: object.NewGCS(), + options: opts, + } + p.objStore.WithConcurrent(true) + p.objStore.WithRecursive(true) + p.impl = &defaultProvenanceCheckerImpl{} + return p +} + +// ProvenanceChecker +type ProvenanceChecker struct { + objStore *object.GCS + options *ProvenanceCheckerOptions + impl provenanceCheckerImplementation +} + +// CheckStageProvenance +func (pc *ProvenanceChecker) CheckStageProvenance(buildVersion string) error { + // Init the local dir + h := sha1.New() + if _, err := h.Write([]byte(buildVersion)); err != nil { + return errors.Wrap(err, "creating dir") + } + pc.options.StageDirectory = filepath.Join(pc.options.ScratchDirectory, fmt.Sprintf("%x", h.Sum(nil))) + + gcsPath, err := pc.objStore.NormalizePath( + object.GcsPrefix + filepath.Join( + pc.options.StageBucket, StagePath, buildVersion, + ) + string(filepath.Separator), + ) + if err != nil { + return errors.Wrap(err, "normalizing GCS stage path") + } + // Download all the artifacts from the bucket + if err := pc.impl.downloadStagedArtifacts(pc.options, pc.objStore, gcsPath); err != nil { + return errors.Wrap(err, "downloading staged artifacts") + } + + // Preprocess the attestation file. We have to rewrite the paths + // to strip the GCS prefix + statement, err := pc.impl.processAttestation(pc.options, buildVersion) + if err != nil { + return errors.Wrap(err, "processing provenance attestation") + } + + // Run the check of the artifacts + return pc.impl.checkProvenance(pc.options, statement) +} + +type ProvenanceCheckerOptions struct { + StageBucket string // Bucket where the artifacts are stored + StageDirectory string // Directory where artifacts will be downloaded + ScratchDirectory string // Directory where StageDirectory will be created +} + +type provenanceCheckerImplementation interface { + downloadStagedArtifacts(*ProvenanceCheckerOptions, *object.GCS, string) error + processAttestation(*ProvenanceCheckerOptions, string) (*provenance.Statement, error) + checkProvenance(*ProvenanceCheckerOptions, *provenance.Statement) error +} + +type defaultProvenanceCheckerImpl struct{} + +// downloadReleaseArtifacts sybc +func (di *defaultProvenanceCheckerImpl) downloadStagedArtifacts( + opts *ProvenanceCheckerOptions, objStore *object.GCS, path string, +) error { + logrus.Infof("Synching stage from %s to %s", path, opts.StageDirectory) + if !util.Exists(opts.StageDirectory) { + if err := os.Mkdir(opts.StageDirectory, os.FileMode(0o755)); err != nil { + return errors.Wrap(err, "creating local working directory") + } + } + return errors.Wrap( + objStore.CopyToLocal(path, opts.StageDirectory), + "synching staged sources", + ) +} + +// processAttestation +func (di *defaultProvenanceCheckerImpl) processAttestation( + opts *ProvenanceCheckerOptions, buildVersion string) (s *provenance.Statement, err error) { + // Load the downloaded statement + s, err = provenance.LoadStatement(filepath.Join(opts.StageDirectory, buildVersion, ProvenanceFilename)) + if err != nil { + return nil, errors.Wrap(err, "loading staging provenance file") + } + + // We've downloaded all artifacts, so to check we need to strip + // the gcs bucket prefix from the subjects to read from the local copy + gcsPath := object.GcsPrefix + filepath.Join(opts.StageBucket, StagePath) + + newSubjects := []intoto.Subject{} + + for i, sub := range s.Subject { + newSubjects = append(newSubjects, intoto.Subject{ + Name: strings.TrimPrefix(sub.Name, gcsPath), + Digest: sub.Digest, + }) + s.Subject[i].Name = strings.TrimPrefix(sub.Name, gcsPath) + } + s.Subject = newSubjects + return s, nil +} + +func (di *defaultProvenanceCheckerImpl) checkProvenance( + opts *ProvenanceCheckerOptions, s *provenance.Statement) error { + return errors.Wrap(s.VerifySubjects(opts.StageDirectory), "checking subjects in attestation") +}