diff --git a/pkg/downloader/downloader.go b/pkg/downloader/downloader.go index 289f47c9629..bfb73776020 100644 --- a/pkg/downloader/downloader.go +++ b/pkg/downloader/downloader.go @@ -122,9 +122,6 @@ func WithDecompress(decompress bool) Opt { func WithExpectedDigest(expectedDigest digest.Digest) Opt { return func(o *options) error { if expectedDigest != "" { - if !expectedDigest.Algorithm().Available() { - return fmt.Errorf("expected digest algorithm %q is not available", expectedDigest.Algorithm()) - } if err := expectedDigest.Validate(); err != nil { return err } diff --git a/pkg/downloader/downloader_test.go b/pkg/downloader/downloader_test.go index 1173df50a63..7e471811849 100644 --- a/pkg/downloader/downloader_test.go +++ b/pkg/downloader/downloader_test.go @@ -59,6 +59,10 @@ func TestDownloadRemote(t *testing.T) { _, err := Download(context.Background(), localPath, dummyRemoteFileURL, WithExpectedDigest(wrongDigest)) assert.ErrorContains(t, err, "expected digest") + wrongDigest2 := digest.Digest("8313944efb4f38570c689813f288058b674ea6c487017a5a4738dc674b65f9d9") + _, err = Download(context.Background(), localPath, dummyRemoteFileURL, WithExpectedDigest(wrongDigest2)) + assert.ErrorContains(t, err, "invalid checksum digest format") + r, err := Download(context.Background(), localPath, dummyRemoteFileURL, WithExpectedDigest(dummyRemoteFileDigest)) assert.NilError(t, err) assert.Equal(t, StatusDownloaded, r.Status) diff --git a/pkg/limayaml/validate.go b/pkg/limayaml/validate.go index 2043aa19e1e..e09f56b3a1b 100644 --- a/pkg/limayaml/validate.go +++ b/pkg/limayaml/validate.go @@ -425,9 +425,6 @@ func validateFileObject(f File, fieldName string) error { errs = errors.Join(errs, fmt.Errorf("field `arch` must be one of %v; got %q", ArchTypes, f.Arch)) } if f.Digest != "" { - if !f.Digest.Algorithm().Available() { - errs = errors.Join(errs, fmt.Errorf("field `%s.digest` refers to an unavailable digest algorithm", fieldName)) - } if err := f.Digest.Validate(); err != nil { errs = errors.Join(errs, fmt.Errorf("field `%s.digest` is invalid: %s: %w", fieldName, f.Digest.String(), err)) } diff --git a/pkg/limayaml/validate_test.go b/pkg/limayaml/validate_test.go index 4d89d47c7eb..5c9d696a0de 100644 --- a/pkg/limayaml/validate_test.go +++ b/pkg/limayaml/validate_test.go @@ -73,6 +73,21 @@ func TestValidateMinimumLimaVersion(t *testing.T) { } } +func TestValidateDigest(t *testing.T) { + images := `images: [{"location": "https://cloud-images.ubuntu.com/releases/oracular/release-20250701/ubuntu-24.10-server-cloudimg-amd64.img",digest: "69f31d3208895e5f646e345fbc95190e5e311ecd1359a4d6ee2c0b6483ceca03"}]` + validProbe := `probes: [{"script": "#!foo"}]` + y, err := Load([]byte(validProbe+"\n"+images), "lima.yaml") + assert.NilError(t, err) + err = Validate(y, false) + assert.Error(t, err, "field `images[0].digest` is invalid: 69f31d3208895e5f646e345fbc95190e5e311ecd1359a4d6ee2c0b6483ceca03: invalid checksum digest format") + + images2 := `images: [{"location": "https://cloud-images.ubuntu.com/releases/oracular/release-20250701/ubuntu-24.10-server-cloudimg-amd64.img",digest: "sha001:69f31d3208895e5f646e345fbc95190e5e311ecd1359a4d6ee2c0b6483ceca03"}]` + y2, err := Load([]byte(validProbe+"\n"+images2), "lima.yaml") + assert.NilError(t, err) + err = Validate(y2, false) + assert.Error(t, err, "field `images[0].digest` is invalid: sha001:69f31d3208895e5f646e345fbc95190e5e311ecd1359a4d6ee2c0b6483ceca03: unsupported digest algorithm") +} + func TestValidateProbes(t *testing.T) { images := `images: [{"location": "/"}]` validProbe := `probes: [{"script": "#!foo"}]`