From e24aa2b95c867038f7f8012ce43504f0ba149651 Mon Sep 17 00:00:00 2001 From: Mikhail Swift Date: Thu, 21 Sep 2023 17:12:14 -0400 Subject: [PATCH] feat: add support for postgresql This allows users to connect to a postgresql backend for our ent library. The ent client creation was broken into it's own function so we can use the enttest library to pass in the test client for unit testing in the future. --- cmd/archivista/main.go | 9 ++- compose.psql.yml | 26 +++++++ go.mod | 1 + go.sum | 2 + internal/config/config.go | 1 + internal/metadatastorage/sqlstore/client.go | 72 +++++++++++++++++++ .../mysql.go => sqlstore/store.go} | 34 +-------- test/build.attestation.json | 1 + test/fail.attestation.json | 1 + test/package.attestation.json | 1 + test/test.sh | 52 ++++++++++++++ 11 files changed, 166 insertions(+), 34 deletions(-) create mode 100644 compose.psql.yml create mode 100644 internal/metadatastorage/sqlstore/client.go rename internal/metadatastorage/{mysqlstore/mysql.go => sqlstore/store.go} (88%) create mode 100644 test/build.attestation.json create mode 100644 test/fail.attestation.json create mode 100644 test/package.attestation.json create mode 100755 test/test.sh diff --git a/cmd/archivista/main.go b/cmd/archivista/main.go index 0c13cd98..e6aed61b 100644 --- a/cmd/archivista/main.go +++ b/cmd/archivista/main.go @@ -39,7 +39,7 @@ import ( "github.com/sirupsen/logrus" "github.com/testifysec/archivista" "github.com/testifysec/archivista/internal/config" - "github.com/testifysec/archivista/internal/metadatastorage/mysqlstore" + "github.com/testifysec/archivista/internal/metadatastorage/sqlstore" "github.com/testifysec/archivista/internal/objectstorage/blobstore" "github.com/testifysec/archivista/internal/objectstorage/filestore" "github.com/testifysec/archivista/internal/server" @@ -86,7 +86,12 @@ func main() { logrus.Fatalf("error initializing storage clients: %+v", err) } - mysqlStore, mysqlStoreCh, err := mysqlstore.New(ctx, cfg.SQLStoreConnectionString) + entClient, err := sqlstore.NewEntClient(cfg.SQLStoreBackend, cfg.SQLStoreConnectionString) + if err != nil { + logrus.Fatalf("could not create ent client: %+v", err) + } + + mysqlStore, mysqlStoreCh, err := sqlstore.New(ctx, entClient) if err != nil { logrus.Fatalf("error initializing mysql client: %+v", err) } diff --git a/compose.psql.yml b/compose.psql.yml new file mode 100644 index 00000000..1fa5121e --- /dev/null +++ b/compose.psql.yml @@ -0,0 +1,26 @@ +# Copyright 2023 The Archivista Contributors +# +# 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. + +services: + psql: + image: postgres:16 + restart: always + environment: + POSTGRES_USER: testify + POSTGRES_PASSWORD: example + + archivista: + environment: + ARCHIVISTA_SQL_STORE_BACKEND: PSQL + ARCHIVISTA_SQL_STORE_CONNECTION_STRING: postgresql://testify:example@psql?sslmode=disable diff --git a/go.mod b/go.mod index bc53a589..03a354e8 100644 --- a/go.mod +++ b/go.mod @@ -15,6 +15,7 @@ require ( github.com/gorilla/mux v1.8.0 github.com/hashicorp/go-multierror v1.1.1 github.com/kelseyhightower/envconfig v1.4.0 + github.com/lib/pq v1.10.7 github.com/minio/minio-go v6.0.14+incompatible github.com/sirupsen/logrus v1.9.0 github.com/spf13/cobra v1.5.0 diff --git a/go.sum b/go.sum index af4e97d5..d19794c1 100644 --- a/go.sum +++ b/go.sum @@ -116,6 +116,8 @@ github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc= github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= +github.com/lib/pq v1.10.7 h1:p7ZhMD+KsSRozJr34udlUrhboJwWAgCg34+/ZZNvZZw= +github.com/lib/pq v1.10.7/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= github.com/logrusorgru/aurora/v3 v3.0.0/go.mod h1:vsR12bk5grlLvLXAYrBsb5Oc/N+LxAlxggSjiwMnCUc= github.com/matryer/moq v0.2.7/go.mod h1:kITsx543GOENm48TUAQyJ9+SAvFSr7iGQXPoth/VUBk= github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= diff --git a/internal/config/config.go b/internal/config/config.go index 7e0763d9..92d29892 100644 --- a/internal/config/config.go +++ b/internal/config/config.go @@ -32,6 +32,7 @@ type Config struct { SPIFFEAddress string `default:"unix:///tmp/spire-agent/public/api.sock" desc:"SPIFFE server address" split_words:"true"` SPIFFETrustedServerId string `default:"" desc:"Trusted SPIFFE server ID; defaults to any" split_words:"true"` SQLStoreConnectionString string `default:"root:example@tcp(db)/testify" desc:"SQL store connection string" split_words:"true"` + SQLStoreBackend string `default:"MYSQL" desc:"SQL backend to use. Options are MYSQL, PSQL" split_words:"true"` StorageBackend string `default:"" desc:"Backend to use for attestation storage. Options are FILE, BLOB, or empty string for disabled." split_words:"true"` FileServeOn string `default:"" desc:"What address to serve files on. Only valid when using FILE storage backend." split_words:"true"` diff --git a/internal/metadatastorage/sqlstore/client.go b/internal/metadatastorage/sqlstore/client.go new file mode 100644 index 00000000..45a81d91 --- /dev/null +++ b/internal/metadatastorage/sqlstore/client.go @@ -0,0 +1,72 @@ +// Copyright 2023 The Archivista Contributors +// +// 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 sqlstore + +import ( + "fmt" + "strings" + "time" + + "ariga.io/sqlcomment" + "entgo.io/ent/dialect" + "entgo.io/ent/dialect/sql" + "github.com/go-sql-driver/mysql" + "github.com/testifysec/archivista/ent" + + _ "github.com/lib/pq" +) + +// NewEntClient creates an ent client for use in the sqlmetadata store. +// Valid backends are MYSQL and PSQL. +func NewEntClient(sqlBackend string, connectionString string) (*ent.Client, error) { + var entDialect string + switch strings.ToUpper(sqlBackend) { + case "MYSQL": + dbConfig, err := mysql.ParseDSN(connectionString) + if err != nil { + return nil, fmt.Errorf("could not parse mysql connection string: %w", err) + } + + // this tells the go-sql-driver to parse times from mysql to go's time.Time + // see https://github.com/go-sql-driver/mysql#timetime-support for details + dbConfig.ParseTime = true + entDialect = dialect.MySQL + connectionString = dbConfig.FormatDSN() + case "PSQL": + entDialect = dialect.Postgres + default: + return nil, fmt.Errorf("unknown sql backend: %s", sqlBackend) + } + + drv, err := sql.Open(entDialect, connectionString) + if err != nil { + return nil, fmt.Errorf("could not open sql connection: %w", err) + } + + db := drv.DB() + db.SetMaxIdleConns(10) + db.SetMaxOpenConns(100) + db.SetConnMaxLifetime(3 * time.Minute) + sqlcommentDrv := sqlcomment.NewDriver(drv, + sqlcomment.WithDriverVerTag(), + sqlcomment.WithTags(sqlcomment.Tags{ + sqlcomment.KeyApplication: "archivista", + sqlcomment.KeyFramework: "net/http", + }), + ) + + client := ent.NewClient(ent.Driver(sqlcommentDrv)) + return client, nil +} diff --git a/internal/metadatastorage/mysqlstore/mysql.go b/internal/metadatastorage/sqlstore/store.go similarity index 88% rename from internal/metadatastorage/mysqlstore/mysql.go rename to internal/metadatastorage/sqlstore/store.go index bb52cb8e..3fc0d34c 100644 --- a/internal/metadatastorage/mysqlstore/mysql.go +++ b/internal/metadatastorage/sqlstore/store.go @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -package mysqlstore +package sqlstore import ( "context" @@ -22,10 +22,7 @@ import ( "fmt" "time" - "ariga.io/sqlcomment" - "entgo.io/ent/dialect/sql" "github.com/digitorus/timestamp" - "github.com/go-sql-driver/mysql" "github.com/sirupsen/logrus" "github.com/testifysec/archivista/ent" "github.com/testifysec/archivista/internal/metadatastorage" @@ -47,34 +44,7 @@ type Store struct { client *ent.Client } -func New(ctx context.Context, connectionstring string) (*Store, <-chan error, error) { - dbConfig, err := mysql.ParseDSN(connectionstring) - if err != nil { - return nil, nil, err - } - - dbConfig.ParseTime = true - connectionstring = dbConfig.FormatDSN() - drv, err := sql.Open("mysql", connectionstring) - if err != nil { - return nil, nil, err - } - sqlcommentDrv := sqlcomment.NewDriver(drv, - sqlcomment.WithDriverVerTag(), - sqlcomment.WithTags(sqlcomment.Tags{ - sqlcomment.KeyApplication: "archivista", - sqlcomment.KeyFramework: "net/http", - }), - ) - - // TODO make sure these take affect in sqlcommentDrv - db := drv.DB() - db.SetMaxIdleConns(10) - db.SetMaxOpenConns(100) - db.SetConnMaxLifetime(3 * time.Minute) - - client := ent.NewClient(ent.Driver(sqlcommentDrv)) - +func New(ctx context.Context, client *ent.Client) (*Store, <-chan error, error) { errCh := make(chan error) go func() { diff --git a/test/build.attestation.json b/test/build.attestation.json new file mode 100644 index 00000000..77657655 --- /dev/null +++ b/test/build.attestation.json @@ -0,0 +1 @@ +{"payload":"eyJfdHlwZSI6Imh0dHBzOi8vaW4tdG90by5pby9TdGF0ZW1lbnQvdjAuMSIsInN1YmplY3QiOlt7Im5hbWUiOiJodHRwczovL3dpdG5lc3MuZGV2L2F0dGVzdGF0aW9ucy9wcm9kdWN0L3YwLjEvZmlsZTp0ZXN0YXBwIiwiZGlnZXN0Ijp7ImdpdG9pZDpzaGExIjoiZ2l0b2lkOmJsb2I6c2hhMTo4NWUzYTAyM2M5N2M4YWFkYWNlMmQ4Yzk1OTUzNWFiZmZiZjRlMTc1IiwiZ2l0b2lkOnNoYTI1NiI6ImdpdG9pZDpibG9iOnNoYTI1Njo0NzNhMGY0YzNiZThhOTM2ODFhMjY3ZTNiMWU5YTdkY2RhMTE4NTQzNmZlMTQxZjc3NDkxMjBhMzAzNzIxODEzIiwic2hhMjU2IjoiNDIzZGE0Y2ZmMTk4YmJmZmJlMzIyMGVkOTUxMGQzMmJhOTY2OThlNGIxZjY1NDU1MjUyMWQxZjU0MWFiYjZkYyJ9fSx7Im5hbWUiOiJodHRwczovL3dpdG5lc3MuZGV2L2F0dGVzdGF0aW9ucy9naXQvdjAuMS9jb21taXRoYXNoOmJlMjAxMDBhZjYwMmM3ODBkZWVlZjUwYzU0ZjUzMzg2NjJjZTkxN2MiLCJkaWdlc3QiOnsic2hhMSI6ImJlMjAxMDBhZjYwMmM3ODBkZWVlZjUwYzU0ZjUzMzg2NjJjZTkxN2MifX0seyJuYW1lIjoiaHR0cHM6Ly93aXRuZXNzLmRldi9hdHRlc3RhdGlvbnMvZ2l0L3YwLjEvYXV0aG9yZW1haWw6c255ay1ib3RAc255ay5pbyIsImRpZ2VzdCI6eyJzaGEyNTYiOiJlZTQ4MzY5YmU2MDcyYzFhNDliYTUxOWIyZWVmOTI3MjIzNWIwZDkyNWE2ZTdhMzM4ZjdmZmMxMmEyY2E1MzhlIn19LHsibmFtZSI6Imh0dHBzOi8vd2l0bmVzcy5kZXYvYXR0ZXN0YXRpb25zL2dpdC92MC4xL2NvbW1pdHRlcmVtYWlsOm1zd2lmdEBtc3dpZnQuZGV2IiwiZGlnZXN0Ijp7InNoYTI1NiI6IjQwODQwNGU3YTY2YjQ3MWU1NjMwZTgwMWM5M2FmNjZmYjljYjAxNzcxOTgyYWU5MGI2Zjc1NWUxMDQyODE4ODcifX0seyJuYW1lIjoiaHR0cHM6Ly93aXRuZXNzLmRldi9hdHRlc3RhdGlvbnMvZ2l0L3YwLjEvcGFyZW50aGFzaDphYTM1YzFmNGIxZDQxYzg3ZTEzOWMyZDMzM2YwOTExN2ZkMGRhZjRmIiwiZGlnZXN0Ijp7InNoYTI1NiI6IjBiYzEzNmY1NTA5ZTk2ZmM4YWEyOTBmMTc1NDI4ZDY0M2EwZTY1ZDhlNmI2MTU4NmFkNjBlOWVjOTgzYTMzNzAifX1dLCJwcmVkaWNhdGVUeXBlIjoiaHR0cHM6Ly93aXRuZXNzLnRlc3RpZnlzZWMuY29tL2F0dGVzdGF0aW9uLWNvbGxlY3Rpb24vdjAuMSIsInByZWRpY2F0ZSI6eyJuYW1lIjoiYnVpbGQiLCJhdHRlc3RhdGlvbnMiOlt7InR5cGUiOiJodHRwczovL3dpdG5lc3MuZGV2L2F0dGVzdGF0aW9ucy9lbnZpcm9ubWVudC92MC4xIiwiYXR0ZXN0YXRpb24iOnsib3MiOiJkYXJ3aW4iLCJob3N0bmFtZSI6Ik1pa2hhaWxzLU1hY0Jvb2stUHJvLTIubG9jYWwiLCJ1c2VybmFtZSI6Im1zd2lmdCIsInZhcmlhYmxlcyI6eyJDT0xPUlRFUk0iOiJ0cnVlY29sb3IiLCJDT01NQU5EX01PREUiOiJ1bml4MjAwMyIsIkdJVF9BU0tQQVNTIjoiL0FwcGxpY2F0aW9ucy9WaXN1YWwgU3R1ZGlvIENvZGUuYXBwL0NvbnRlbnRzL1Jlc291cmNlcy9hcHAvZXh0ZW5zaW9ucy9naXQvZGlzdC9hc2twYXNzLnNoIiwiR1BHX1RUWSI6Ii9kZXYvdHR5czAwOCIsIkhPTUUiOiIvVXNlcnMvbXN3aWZ0IiwiSE9NRUJSRVdfQ0VMTEFSIjoiL29wdC9ob21lYnJldy9DZWxsYXIiLCJIT01FQlJFV19QUkVGSVgiOiIvb3B0L2hvbWVicmV3IiwiSE9NRUJSRVdfUkVQT1NJVE9SWSI6Ii9vcHQvaG9tZWJyZXciLCJJTkZPUEFUSCI6Ii9vcHQvaG9tZWJyZXcvc2hhcmUvaW5mbzovb3B0L2hvbWVicmV3L3NoYXJlL2luZm86IiwiTEFORyI6ImVuX1VTLlVURi04IiwiTE9HTkFNRSI6Im1zd2lmdCIsIkxhdW5jaEluc3RhbmNlSUQiOiJFQjJBN0EwOC1GRjMwLTRBRkMtOTNCQy1GM0I0MjdDRjE4MTQiLCJNQU5QQVRIIjoiL29wdC9ob21lYnJldy9zaGFyZS9tYW46L3Vzci9zaGFyZS9tYW46L3Vzci9sb2NhbC9zaGFyZS9tYW46L29wdC9ob21lYnJldy9zaGFyZS9tYW46OiIsIk1hbGxvY05hbm9ab25lIjoiMCIsIk9SSUdJTkFMX1hER19DVVJSRU5UX0RFU0tUT1AiOiJ1bmRlZmluZWQiLCJQOUtfU1NIIjoiMCIsIlA5S19UVFkiOiJvbGQiLCJQQVRIIjoiL1VzZXJzL21zd2lmdC9nb29nbGUtY2xvdWQtc2RrL2Jpbjovb3B0L2hvbWVicmV3L2Jpbjovb3B0L2hvbWVicmV3L3NiaW46L3Vzci9sb2NhbC9iaW46L1N5c3RlbS9DcnlwdGV4ZXMvQXBwL3Vzci9iaW46L3Vzci9iaW46L2JpbjovdXNyL3NiaW46L3NiaW46L3Zhci9ydW4vY29tLmFwcGxlLnNlY3VyaXR5LmNyeXB0ZXhkL2NvZGV4LnN5c3RlbS9ib290c3RyYXAvdXNyL2xvY2FsL2JpbjovdmFyL3J1bi9jb20uYXBwbGUuc2VjdXJpdHkuY3J5cHRleGQvY29kZXguc3lzdGVtL2Jvb3RzdHJhcC91c3IvYmluOi92YXIvcnVuL2NvbS5hcHBsZS5zZWN1cml0eS5jcnlwdGV4ZC9jb2RleC5zeXN0ZW0vYm9vdHN0cmFwL3Vzci9hcHBsZWludGVybmFsL2JpbjovVXNlcnMvbXN3aWZ0L2dvb2dsZS1jbG91ZC1zZGsvYmluOi9vcHQvaG9tZWJyZXcvYmluOi9vcHQvaG9tZWJyZXcvc2JpbjovVXNlcnMvbXN3aWZ0L2dvL2JpbjovVXNlcnMvbXN3aWZ0L2dvL2JpbiIsIlBXRCI6Ii9Vc2Vycy9tc3dpZnQvV29ya3NwYWNlcy93aXRuZXNzL3Rlc3QiLCJTRUNVUklUWVNFU1NJT05JRCI6IjE4NmM5IiwiU0hFTEwiOiIvYmluL3pzaCIsIlNITFZMIjoiMiIsIlNTSF9BVVRIX1NPQ0siOiIvVXNlcnMvbXN3aWZ0Ly5nbnVwZy9TLmdwZy1hZ2VudC5zc2giLCJURVJNIjoieHRlcm0tMjU2Y29sb3IiLCJURVJNX1BST0dSQU0iOiJ2c2NvZGUiLCJURVJNX1BST0dSQU1fVkVSU0lPTiI6IjEuODIuMCIsIlRNUERJUiI6Ii92YXIvZm9sZGVycy82ay9mcnFsczI3bjJ6djR6NTFqNTVubmt4ZncwMDAwZ24vVC8iLCJVU0VSIjoibXN3aWZ0IiwiVVNFUl9aRE9URElSIjoiL1VzZXJzL21zd2lmdCIsIlVTRV9HS0VfR0NMT1VEX0FVVEhfUExVR0lOIjoiVHJ1ZSIsIlZTQ09ERV9HSVRfQVNLUEFTU19FWFRSQV9BUkdTIjoiLS1tcy1lbmFibGUtZWxlY3Ryb24tcnVuLWFzLW5vZGUiLCJWU0NPREVfR0lUX0FTS1BBU1NfTUFJTiI6Ii9BcHBsaWNhdGlvbnMvVmlzdWFsIFN0dWRpbyBDb2RlLmFwcC9Db250ZW50cy9SZXNvdXJjZXMvYXBwL2V4dGVuc2lvbnMvZ2l0L2Rpc3QvYXNrcGFzcy1tYWluLmpzIiwiVlNDT0RFX0dJVF9BU0tQQVNTX05PREUiOiIvQXBwbGljYXRpb25zL1Zpc3VhbCBTdHVkaW8gQ29kZS5hcHAvQ29udGVudHMvRnJhbWV3b3Jrcy9Db2RlIEhlbHBlciAoUGx1Z2luKS5hcHAvQ29udGVudHMvTWFjT1MvQ29kZSBIZWxwZXIgKFBsdWdpbikiLCJWU0NPREVfR0lUX0lQQ19IQU5ETEUiOiIvdmFyL2ZvbGRlcnMvNmsvZnJxbHMyN24yenY0ejUxajU1bm5reGZ3MDAwMGduL1QvdnNjb2RlLWdpdC0xMTg5NTBkNzIzLnNvY2siLCJWU0NPREVfSU5KRUNUSU9OIjoiMSIsIlhQQ19GTEFHUyI6IjB4MCIsIlhQQ19TRVJWSUNFX05BTUUiOiIwIiwiWkRPVERJUiI6Ii9Vc2Vycy9tc3dpZnQiLCJfIjoiLi4vYmluL3dpdG5lc3MiLCJfUDlLX1RUWSI6Ii9kZXYvdHR5czAwOCIsIl9fQ0ZCdW5kbGVJZGVudGlmaWVyIjoiY29tLm1pY3Jvc29mdC5WU0NvZGUiLCJfX0NGX1VTRVJfVEVYVF9FTkNPRElORyI6IjB4MUY1OjB4MDoweDAifX0sInN0YXJ0dGltZSI6IjIwMjMtMDktMjZUMTc6MjM6NDcuMzI2MjUtMDU6MDAiLCJlbmR0aW1lIjoiMjAyMy0wOS0yNlQxNzoyMzo0Ny4zMjc1NDEtMDU6MDAifSx7InR5cGUiOiJodHRwczovL3dpdG5lc3MuZGV2L2F0dGVzdGF0aW9ucy9naXQvdjAuMSIsImF0dGVzdGF0aW9uIjp7ImNvbW1pdGhhc2giOiJiZTIwMTAwYWY2MDJjNzgwZGVlZWY1MGM1NGY1MzM4NjYyY2U5MTdjIiwiYXV0aG9yIjoic255ay1ib3QiLCJhdXRob3JlbWFpbCI6InNueWstYm90QHNueWsuaW8iLCJjb21taXR0ZXJuYW1lIjoiTWlraGFpbCBTd2lmdCIsImNvbW1pdHRlcmVtYWlsIjoibXN3aWZ0QG1zd2lmdC5kZXYiLCJjb21taXRkYXRlIjoiMjAyMy0wNy0xOCAxNjoxMDowNiArMDAwMCArMDAwMCIsImNvbW1pdG1lc3NhZ2UiOiJmaXg6IGRldi9Eb2NrZXJmaWxlLmdvLWJ1aWxkZXIgdG8gcmVkdWNlIHZ1bG5lcmFiaWxpdGllc1xuXG5UaGUgZm9sbG93aW5nIHZ1bG5lcmFiaWxpdGllcyBhcmUgZml4ZWQgd2l0aCBhbiB1cGdyYWRlOlxuLSBodHRwczovL3NueWsuaW8vdnVsbi9TTllLLURFQklBTjExLUFQUi0zMjYxMTA1XG4tIGh0dHBzOi8vc255ay5pby92dWxuL1NOWUstREVCSUFOMTEtT1BFTlNTTC0zMzY4NzM1XG4tIGh0dHBzOi8vc255ay5pby92dWxuL1NOWUstREVCSUFOMTEtT1BFTlNTTC01MjkxNzczXG4tIGh0dHBzOi8vc255ay5pby92dWxuL1NOWUstREVCSUFOMTEtT1BFTlNTTC01MjkxNzc3XG4tIGh0dHBzOi8vc255ay5pby92dWxuL1NOWUstREVCSUFOMTEtT1BFTlNTTC01NjYxNTY2Iiwic3RhdHVzIjp7Ii52c2NvZGUvbGF1bmNoLmpzb24iOnsic3RhZ2luZyI6InVudHJhY2tlZCIsIndvcmt0cmVlIjoidW50cmFja2VkIn0sInRlc3QvdGVzdC55YW1sIjp7InN0YWdpbmciOiJ1bm1vZGlmaWVkIiwid29ya3RyZWUiOiJtb2RpZmllZCJ9fSwiY29tbWl0ZGlnZXN0Ijp7InNoYTEiOiJiZTIwMTAwYWY2MDJjNzgwZGVlZWY1MGM1NGY1MzM4NjYyY2U5MTdjIn0sInBhcmVudGhhc2hlcyI6WyJhYTM1YzFmNGIxZDQxYzg3ZTEzOWMyZDMzM2YwOTExN2ZkMGRhZjRmIl0sInRyZWVoYXNoIjoiOWUwNzY1YjY1NzlhYzdjMTRhNDA2MGFiZGJjYzFkMDliYTUwODA0ZCIsInJlZnMiOlsicmVmcy9oZWFkcy9tYWluIiwicmVmcy9yZW1vdGVzL29yaWdpbi9tYWluIl19LCJzdGFydHRpbWUiOiIyMDIzLTA5LTI2VDE3OjIzOjQ3LjMyNzU1NC0wNTowMCIsImVuZHRpbWUiOiIyMDIzLTA5LTI2VDE3OjIzOjQ3Ljg3NjQzMy0wNTowMCJ9LHsidHlwZSI6Imh0dHBzOi8vd2l0bmVzcy5kZXYvYXR0ZXN0YXRpb25zL21hdGVyaWFsL3YwLjEiLCJhdHRlc3RhdGlvbiI6eyIuZ2l0aWdub3JlIjp7ImdpdG9pZDpzaGExIjoiZ2l0b2lkOmJsb2I6c2hhMTplYTEyNmQ4Yjk0Y2YxYTZkZWE1ZDk1MmExNTgwYjlmMTQxY2RhYjdlIiwiZ2l0b2lkOnNoYTI1NiI6ImdpdG9pZDpibG9iOnNoYTI1Njo0NzNhMGY0YzNiZThhOTM2ODFhMjY3ZTNiMWU5YTdkY2RhMTE4NTQzNmZlMTQxZjc3NDkxMjBhMzAzNzIxODEzIiwic2hhMjU2IjoiZWJmM2E3M2E0MmVkMjAxMmRiMGJlMmI5ZTc3ZjllNTNkNzNhMGEwYWUyMjA4MWE1ZmM1ZGYyMzI2ZjlhZmJhYiJ9LCJidWlsZC5hdHRlc3RhdGlvbi5qc29uIjp7ImdpdG9pZDpzaGExIjoiZ2l0b2lkOmJsb2I6c2hhMTplNjlkZTI5YmIyZDFkNjQzNGI4YjI5YWU3NzVhZDhjMmU0OGM1MzkxIiwiZ2l0b2lkOnNoYTI1NiI6ImdpdG9pZDpibG9iOnNoYTI1Njo0NzNhMGY0YzNiZThhOTM2ODFhMjY3ZTNiMWU5YTdkY2RhMTE4NTQzNmZlMTQxZjc3NDkxMjBhMzAzNzIxODEzIiwic2hhMjU2IjoiZTNiMGM0NDI5OGZjMWMxNDlhZmJmNGM4OTk2ZmI5MjQyN2FlNDFlNDY0OWI5MzRjYTQ5NTk5MWI3ODUyYjg1NSJ9LCJjb21tb24uc2giOnsiZ2l0b2lkOnNoYTEiOiJnaXRvaWQ6YmxvYjpzaGExOjNjMzI4ZmI3ZjMxZDFjNDM0M2VmNzk3NTU2MTkyMDVhMTU2OTdhNjAiLCJnaXRvaWQ6c2hhMjU2IjoiZ2l0b2lkOmJsb2I6c2hhMjU2OjQ3M2EwZjRjM2JlOGE5MzY4MWEyNjdlM2IxZTlhN2RjZGExMTg1NDM2ZmUxNDFmNzc0OTEyMGEzMDM3MjE4MTMiLCJzaGEyNTYiOiI2OGY0OWI0NzVlNzA4ZjUxZmQ3ZjI3Njg3MTFmZWUyZTZjODU4ZTk0YTQ0ZmRmOGE2YzViZjMzYjZhOTc2MTYyIn0sImZhaWxrZXkucGVtIjp7ImdpdG9pZDpzaGExIjoiZ2l0b2lkOmJsb2I6c2hhMTo3YzVlYzQzYjc4YTM4ODI4ZDY5YTNhNTc3YzVlZTYzOGZlN2E0Mzc1IiwiZ2l0b2lkOnNoYTI1NiI6ImdpdG9pZDpibG9iOnNoYTI1Njo0NzNhMGY0YzNiZThhOTM2ODFhMjY3ZTNiMWU5YTdkY2RhMTE4NTQzNmZlMTQxZjc3NDkxMjBhMzAzNzIxODEzIiwic2hhMjU2IjoiMDkzZjBmOGM1OTIyYTJmNjZjZmI0NzM3YTUwMDdiMTk3YjM2ZjAxOWE0N2QxMWEwMGE5NTc3YWQ4ZmUyODhhOSJ9LCJtYWluLmdvIjp7ImdpdG9pZDpzaGExIjoiZ2l0b2lkOmJsb2I6c2hhMTpkZTMzMWY5ODk5MmY5MzI2YjYyZTJiZDcyZDdmNGVmODFkZjkxYjQ2IiwiZ2l0b2lkOnNoYTI1NiI6ImdpdG9pZDpibG9iOnNoYTI1Njo0NzNhMGY0YzNiZThhOTM2ODFhMjY3ZTNiMWU5YTdkY2RhMTE4NTQzNmZlMTQxZjc3NDkxMjBhMzAzNzIxODEzIiwic2hhMjU2IjoiMzEwZTVjZTI2N2E2NGRkMGNjYzYzNDFhNmYwNDNkNWE3ZDU5ZDU3YWNiMTBmMzFmYzExYzJmNTRjOTQ4NTRkMyJ9LCJwb2xpY3ktc2lnbmVkLmpzb24iOnsiZ2l0b2lkOnNoYTEiOiJnaXRvaWQ6YmxvYjpzaGExOjkxYjIyNWUxY2YwZDI4MzUyYWFiM2M4ZDU0MDBlYzQ2MzVhMTdiOGUiLCJnaXRvaWQ6c2hhMjU2IjoiZ2l0b2lkOmJsb2I6c2hhMjU2OjQ3M2EwZjRjM2JlOGE5MzY4MWEyNjdlM2IxZTlhN2RjZGExMTg1NDM2ZmUxNDFmNzc0OTEyMGEzMDM3MjE4MTMiLCJzaGEyNTYiOiJjYWZiNDgzZmUzNTg4YjllNzNjMzJmZDM4MmZiNDY3OTNhZjkwMjE5MGI2ZTljODIyODYyMTRkMmNjNmFjYjg0In0sInBvbGljeS5qc29uIjp7ImdpdG9pZDpzaGExIjoiZ2l0b2lkOmJsb2I6c2hhMToyNDMzNDQyMjAxMDQxZjQ2NmY5MjFmNWJhNzQyODUxZjVkMGRhY2E0IiwiZ2l0b2lkOnNoYTI1NiI6ImdpdG9pZDpibG9iOnNoYTI1Njo0NzNhMGY0YzNiZThhOTM2ODFhMjY3ZTNiMWU5YTdkY2RhMTE4NTQzNmZlMTQxZjc3NDkxMjBhMzAzNzIxODEzIiwic2hhMjU2IjoiY2M3ZDU1YzgzZDQ2YTY2YzlkNmI2MTJmZGQ2MTUxNmM5ZTJkYmQxMzMwMTE5NDEyZmFkNDFmOWNlZWE3ZTg0ZiJ9LCJ0ZXN0LW9jaS5zaCI6eyJnaXRvaWQ6c2hhMSI6ImdpdG9pZDpibG9iOnNoYTE6Zjg0OTM4ODJjNTA3NGU3ZGI4MWViMDYyZTRmOGFkNzdjNWFiOTZjNCIsImdpdG9pZDpzaGEyNTYiOiJnaXRvaWQ6YmxvYjpzaGEyNTY6NDczYTBmNGMzYmU4YTkzNjgxYTI2N2UzYjFlOWE3ZGNkYTExODU0MzZmZTE0MWY3NzQ5MTIwYTMwMzcyMTgxMyIsInNoYTI1NiI6IjFmYjA2ZjJmZGY2Mzc4ZmMxOWM3M2E2ZDA2ZDNjYWFlNzkwYjMyYmM4MjMxYmM2OWUzODUzZGI0ZjI3YmY1MDMifSwidGVzdC5zaCI6eyJnaXRvaWQ6c2hhMSI6ImdpdG9pZDpibG9iOnNoYTE6OGFhZmNkZWVkOGMyNzY4NGEzNmU0YmViNjNhMjBkMDk0M2MwZWM3MiIsImdpdG9pZDpzaGEyNTYiOiJnaXRvaWQ6YmxvYjpzaGEyNTY6NDczYTBmNGMzYmU4YTkzNjgxYTI2N2UzYjFlOWE3ZGNkYTExODU0MzZmZTE0MWY3NzQ5MTIwYTMwMzcyMTgxMyIsInNoYTI1NiI6IjkzNGYzNmYzYTliMzlhOWExMzY4NjQzNWMzNWMxMDkwY2QyZGI5YmJkMGZjOTYzNDg4MTUyOTIzMDU5MTBmZTMifSwidGVzdC55YW1sIjp7ImdpdG9pZDpzaGExIjoiZ2l0b2lkOmJsb2I6c2hhMTo4M2I3NjlmY2M3MDU1YWY2ZWVhZDg0MzI0M2E2YjExYTFhNzY1ZmQ1IiwiZ2l0b2lkOnNoYTI1NiI6ImdpdG9pZDpibG9iOnNoYTI1Njo0NzNhMGY0YzNiZThhOTM2ODFhMjY3ZTNiMWU5YTdkY2RhMTE4NTQzNmZlMTQxZjc3NDkxMjBhMzAzNzIxODEzIiwic2hhMjU2IjoiNDhjNzQ5MmE0OGM3YjhlYzhmMWFlYzUwODEwNzEzZTI0MzcxMzFkYTkzYjI5ZjkxYzdhZTFhYjk4YzVkNWE0MCJ9LCJ0ZXN0a2V5LnBlbSI6eyJnaXRvaWQ6c2hhMSI6ImdpdG9pZDpibG9iOnNoYTE6ZmFjZWRjZDc4MmY4MDY1MzQzZmQ5N2JjYzFkZjlkYWJhMGY5MGNjYSIsImdpdG9pZDpzaGEyNTYiOiJnaXRvaWQ6YmxvYjpzaGEyNTY6NDczYTBmNGMzYmU4YTkzNjgxYTI2N2UzYjFlOWE3ZGNkYTExODU0MzZmZTE0MWY3NzQ5MTIwYTMwMzcyMTgxMyIsInNoYTI1NiI6IjE3OTAyZDI5MjVhOWU5NDQ0MTVhZjczN2VhMGNkZmQ5NmEzZWZiYmVjYzMxZjU5YmRiODUzNTcyNGExMjU2ZmMifSwidGVzdGtleTIucGVtIjp7ImdpdG9pZDpzaGExIjoiZ2l0b2lkOmJsb2I6c2hhMTpkMmM5MTlmNDNjY2FjZWFiNzdlNWRiYzcxYzFiODU3OTRjODYyYzkwIiwiZ2l0b2lkOnNoYTI1NiI6ImdpdG9pZDpibG9iOnNoYTI1Njo0NzNhMGY0YzNiZThhOTM2ODFhMjY3ZTNiMWU5YTdkY2RhMTE4NTQzNmZlMTQxZjc3NDkxMjBhMzAzNzIxODEzIiwic2hhMjU2IjoiM2E2ZjM5ZDc2MWZkMGU5YWE0NDE3YzUwYTA3ZjlmNGQ3YjI5YjFhYzQzMGEwMTY4N2I2ODQwMGMyYjk2ODgwMyJ9LCJ0ZXN0cHViLnBlbSI6eyJnaXRvaWQ6c2hhMSI6ImdpdG9pZDpibG9iOnNoYTE6OWI0YmVhOTA4Y2Q3ZmMyMzFjNDllYzhkYjRlNWJkZGJjODE0MDMxZiIsImdpdG9pZDpzaGEyNTYiOiJnaXRvaWQ6YmxvYjpzaGEyNTY6NDczYTBmNGMzYmU4YTkzNjgxYTI2N2UzYjFlOWE3ZGNkYTExODU0MzZmZTE0MWY3NzQ5MTIwYTMwMzcyMTgxMyIsInNoYTI1NiI6ImI5N2YwZmI0MGJiNzQ5ZjVlNmE1NWU1ODhlODAwZmZlYTNmMWVjNjM2NjVhZjgxOTlhZWJhNDQ3MmFiNDUzMjcifSwidGVzdHB1YjIucGVtIjp7ImdpdG9pZDpzaGExIjoiZ2l0b2lkOmJsb2I6c2hhMToxZGMzZjhjODYyNGQ5OGE2OWJhNDc3Yzc5ZmEyZWI1Yzg3NDA4Y2I3IiwiZ2l0b2lkOnNoYTI1NiI6ImdpdG9pZDpibG9iOnNoYTI1Njo0NzNhMGY0YzNiZThhOTM2ODFhMjY3ZTNiMWU5YTdkY2RhMTE4NTQzNmZlMTQxZjc3NDkxMjBhMzAzNzIxODEzIiwic2hhMjU2IjoiNWU4YzU3ZGY4YWU1OGZlOWEyOWIyOWY5OTkzZTJmYzNiMjViZDc1ZWIyNzU0ZjM1Mzg4MGJhZDRiOWViZmRiMyJ9fSwic3RhcnR0aW1lIjoiMjAyMy0wOS0yNlQxNzoyMzo0Ny44NzY0NTUtMDU6MDAiLCJlbmR0aW1lIjoiMjAyMy0wOS0yNlQxNzoyMzo0Ny44NzY5MDMtMDU6MDAifSx7InR5cGUiOiJodHRwczovL3dpdG5lc3MuZGV2L2F0dGVzdGF0aW9ucy9jb21tYW5kLXJ1bi92MC4xIiwiYXR0ZXN0YXRpb24iOnsiY21kIjpbImdvIiwiYnVpbGQiLCItbz10ZXN0YXBwIiwiLiJdLCJleGl0Y29kZSI6MH0sInN0YXJ0dGltZSI6IjIwMjMtMDktMjZUMTc6MjM6NDcuODc2OTEyLTA1OjAwIiwiZW5kdGltZSI6IjIwMjMtMDktMjZUMTc6MjM6NDguMDczOTE3LTA1OjAwIn0seyJ0eXBlIjoiaHR0cHM6Ly93aXRuZXNzLmRldi9hdHRlc3RhdGlvbnMvcHJvZHVjdC92MC4xIiwiYXR0ZXN0YXRpb24iOnsidGVzdGFwcCI6eyJtaW1lX3R5cGUiOiJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0iLCJkaWdlc3QiOnsiZ2l0b2lkOnNoYTEiOiJnaXRvaWQ6YmxvYjpzaGExOjg1ZTNhMDIzYzk3YzhhYWRhY2UyZDhjOTU5NTM1YWJmZmJmNGUxNzUiLCJnaXRvaWQ6c2hhMjU2IjoiZ2l0b2lkOmJsb2I6c2hhMjU2OjQ3M2EwZjRjM2JlOGE5MzY4MWEyNjdlM2IxZTlhN2RjZGExMTg1NDM2ZmUxNDFmNzc0OTEyMGEzMDM3MjE4MTMiLCJzaGEyNTYiOiI0MjNkYTRjZmYxOThiYmZmYmUzMjIwZWQ5NTEwZDMyYmE5NjY5OGU0YjFmNjU0NTUyNTIxZDFmNTQxYWJiNmRjIn19fSwic3RhcnR0aW1lIjoiMjAyMy0wOS0yNlQxNzoyMzo0OC4wNzQwMTQtMDU6MDAiLCJlbmR0aW1lIjoiMjAyMy0wOS0yNlQxNzoyMzo0OC4wNzg0MzMtMDU6MDAifV19fQ==","payloadType":"application/vnd.in-toto+json","signatures":[{"keyid":"ae2dcc989ea9c109a36e8eba5c4bc16d8fafcfe8e1a614164670d50aedacd647","sig":"ahsjnNBEVNqo5/umfwQzWiVAvLx4yk3z6Xh+fsaWyxhmGD1syhOhMOkXapmVvEuscm6la9a/edQKNXXg02ghCw=="}]} \ No newline at end of file diff --git a/test/fail.attestation.json b/test/fail.attestation.json new file mode 100644 index 00000000..1e0adb78 --- /dev/null +++ b/test/fail.attestation.json @@ -0,0 +1 @@ +{"payload":"eyJfdHlwZSI6Imh0dHBzOi8vaW4tdG90by5pby9TdGF0ZW1lbnQvdjAuMSIsInN1YmplY3QiOlt7Im5hbWUiOiJodHRwczovL3dpdG5lc3MuZGV2L2F0dGVzdGF0aW9ucy9naXQvdjAuMS9wYXJlbnRoYXNoOmFhMzVjMWY0YjFkNDFjODdlMTM5YzJkMzMzZjA5MTE3ZmQwZGFmNGYiLCJkaWdlc3QiOnsic2hhMjU2IjoiMGJjMTM2ZjU1MDllOTZmYzhhYTI5MGYxNzU0MjhkNjQzYTBlNjVkOGU2YjYxNTg2YWQ2MGU5ZWM5ODNhMzM3MCJ9fSx7Im5hbWUiOiJodHRwczovL3dpdG5lc3MuZGV2L2F0dGVzdGF0aW9ucy9naXQvdjAuMS9jb21taXRoYXNoOmJlMjAxMDBhZjYwMmM3ODBkZWVlZjUwYzU0ZjUzMzg2NjJjZTkxN2MiLCJkaWdlc3QiOnsic2hhMSI6ImJlMjAxMDBhZjYwMmM3ODBkZWVlZjUwYzU0ZjUzMzg2NjJjZTkxN2MifX0seyJuYW1lIjoiaHR0cHM6Ly93aXRuZXNzLmRldi9hdHRlc3RhdGlvbnMvZ2l0L3YwLjEvYXV0aG9yZW1haWw6c255ay1ib3RAc255ay5pbyIsImRpZ2VzdCI6eyJzaGEyNTYiOiJlZTQ4MzY5YmU2MDcyYzFhNDliYTUxOWIyZWVmOTI3MjIzNWIwZDkyNWE2ZTdhMzM4ZjdmZmMxMmEyY2E1MzhlIn19LHsibmFtZSI6Imh0dHBzOi8vd2l0bmVzcy5kZXYvYXR0ZXN0YXRpb25zL2dpdC92MC4xL2NvbW1pdHRlcmVtYWlsOm1zd2lmdEBtc3dpZnQuZGV2IiwiZGlnZXN0Ijp7InNoYTI1NiI6IjQwODQwNGU3YTY2YjQ3MWU1NjMwZTgwMWM5M2FmNjZmYjljYjAxNzcxOTgyYWU5MGI2Zjc1NWUxMDQyODE4ODcifX1dLCJwcmVkaWNhdGVUeXBlIjoiaHR0cHM6Ly93aXRuZXNzLnRlc3RpZnlzZWMuY29tL2F0dGVzdGF0aW9uLWNvbGxlY3Rpb24vdjAuMSIsInByZWRpY2F0ZSI6eyJuYW1lIjoiYnVpbGQiLCJhdHRlc3RhdGlvbnMiOlt7InR5cGUiOiJodHRwczovL3dpdG5lc3MuZGV2L2F0dGVzdGF0aW9ucy9lbnZpcm9ubWVudC92MC4xIiwiYXR0ZXN0YXRpb24iOnsib3MiOiJkYXJ3aW4iLCJob3N0bmFtZSI6Ik1pa2hhaWxzLU1hY0Jvb2stUHJvLTIubG9jYWwiLCJ1c2VybmFtZSI6Im1zd2lmdCIsInZhcmlhYmxlcyI6eyJDT0xPUlRFUk0iOiJ0cnVlY29sb3IiLCJDT01NQU5EX01PREUiOiJ1bml4MjAwMyIsIkdJVF9BU0tQQVNTIjoiL0FwcGxpY2F0aW9ucy9WaXN1YWwgU3R1ZGlvIENvZGUuYXBwL0NvbnRlbnRzL1Jlc291cmNlcy9hcHAvZXh0ZW5zaW9ucy9naXQvZGlzdC9hc2twYXNzLnNoIiwiR1BHX1RUWSI6Ii9kZXYvdHR5czAwOCIsIkhPTUUiOiIvVXNlcnMvbXN3aWZ0IiwiSE9NRUJSRVdfQ0VMTEFSIjoiL29wdC9ob21lYnJldy9DZWxsYXIiLCJIT01FQlJFV19QUkVGSVgiOiIvb3B0L2hvbWVicmV3IiwiSE9NRUJSRVdfUkVQT1NJVE9SWSI6Ii9vcHQvaG9tZWJyZXciLCJJTkZPUEFUSCI6Ii9vcHQvaG9tZWJyZXcvc2hhcmUvaW5mbzovb3B0L2hvbWVicmV3L3NoYXJlL2luZm86IiwiTEFORyI6ImVuX1VTLlVURi04IiwiTE9HTkFNRSI6Im1zd2lmdCIsIkxhdW5jaEluc3RhbmNlSUQiOiJFQjJBN0EwOC1GRjMwLTRBRkMtOTNCQy1GM0I0MjdDRjE4MTQiLCJNQU5QQVRIIjoiL29wdC9ob21lYnJldy9zaGFyZS9tYW46L3Vzci9zaGFyZS9tYW46L3Vzci9sb2NhbC9zaGFyZS9tYW46L29wdC9ob21lYnJldy9zaGFyZS9tYW46OiIsIk1hbGxvY05hbm9ab25lIjoiMCIsIk9SSUdJTkFMX1hER19DVVJSRU5UX0RFU0tUT1AiOiJ1bmRlZmluZWQiLCJQOUtfU1NIIjoiMCIsIlA5S19UVFkiOiJvbGQiLCJQQVRIIjoiL1VzZXJzL21zd2lmdC9nb29nbGUtY2xvdWQtc2RrL2Jpbjovb3B0L2hvbWVicmV3L2Jpbjovb3B0L2hvbWVicmV3L3NiaW46L3Vzci9sb2NhbC9iaW46L1N5c3RlbS9DcnlwdGV4ZXMvQXBwL3Vzci9iaW46L3Vzci9iaW46L2JpbjovdXNyL3NiaW46L3NiaW46L3Zhci9ydW4vY29tLmFwcGxlLnNlY3VyaXR5LmNyeXB0ZXhkL2NvZGV4LnN5c3RlbS9ib290c3RyYXAvdXNyL2xvY2FsL2JpbjovdmFyL3J1bi9jb20uYXBwbGUuc2VjdXJpdHkuY3J5cHRleGQvY29kZXguc3lzdGVtL2Jvb3RzdHJhcC91c3IvYmluOi92YXIvcnVuL2NvbS5hcHBsZS5zZWN1cml0eS5jcnlwdGV4ZC9jb2RleC5zeXN0ZW0vYm9vdHN0cmFwL3Vzci9hcHBsZWludGVybmFsL2JpbjovVXNlcnMvbXN3aWZ0L2dvb2dsZS1jbG91ZC1zZGsvYmluOi9vcHQvaG9tZWJyZXcvYmluOi9vcHQvaG9tZWJyZXcvc2JpbjovVXNlcnMvbXN3aWZ0L2dvL2JpbjovVXNlcnMvbXN3aWZ0L2dvL2JpbiIsIlBXRCI6Ii9Vc2Vycy9tc3dpZnQvV29ya3NwYWNlcy93aXRuZXNzL3Rlc3QiLCJTRUNVUklUWVNFU1NJT05JRCI6IjE4NmM5IiwiU0hFTEwiOiIvYmluL3pzaCIsIlNITFZMIjoiMiIsIlNTSF9BVVRIX1NPQ0siOiIvVXNlcnMvbXN3aWZ0Ly5nbnVwZy9TLmdwZy1hZ2VudC5zc2giLCJURVJNIjoieHRlcm0tMjU2Y29sb3IiLCJURVJNX1BST0dSQU0iOiJ2c2NvZGUiLCJURVJNX1BST0dSQU1fVkVSU0lPTiI6IjEuODIuMCIsIlRNUERJUiI6Ii92YXIvZm9sZGVycy82ay9mcnFsczI3bjJ6djR6NTFqNTVubmt4ZncwMDAwZ24vVC8iLCJVU0VSIjoibXN3aWZ0IiwiVVNFUl9aRE9URElSIjoiL1VzZXJzL21zd2lmdCIsIlVTRV9HS0VfR0NMT1VEX0FVVEhfUExVR0lOIjoiVHJ1ZSIsIlZTQ09ERV9HSVRfQVNLUEFTU19FWFRSQV9BUkdTIjoiLS1tcy1lbmFibGUtZWxlY3Ryb24tcnVuLWFzLW5vZGUiLCJWU0NPREVfR0lUX0FTS1BBU1NfTUFJTiI6Ii9BcHBsaWNhdGlvbnMvVmlzdWFsIFN0dWRpbyBDb2RlLmFwcC9Db250ZW50cy9SZXNvdXJjZXMvYXBwL2V4dGVuc2lvbnMvZ2l0L2Rpc3QvYXNrcGFzcy1tYWluLmpzIiwiVlNDT0RFX0dJVF9BU0tQQVNTX05PREUiOiIvQXBwbGljYXRpb25zL1Zpc3VhbCBTdHVkaW8gQ29kZS5hcHAvQ29udGVudHMvRnJhbWV3b3Jrcy9Db2RlIEhlbHBlciAoUGx1Z2luKS5hcHAvQ29udGVudHMvTWFjT1MvQ29kZSBIZWxwZXIgKFBsdWdpbikiLCJWU0NPREVfR0lUX0lQQ19IQU5ETEUiOiIvdmFyL2ZvbGRlcnMvNmsvZnJxbHMyN24yenY0ejUxajU1bm5reGZ3MDAwMGduL1QvdnNjb2RlLWdpdC0xMTg5NTBkNzIzLnNvY2siLCJWU0NPREVfSU5KRUNUSU9OIjoiMSIsIlhQQ19GTEFHUyI6IjB4MCIsIlhQQ19TRVJWSUNFX05BTUUiOiIwIiwiWkRPVERJUiI6Ii9Vc2Vycy9tc3dpZnQiLCJfIjoiLi4vYmluL3dpdG5lc3MiLCJfUDlLX1RUWSI6Ii9kZXYvdHR5czAwOCIsIl9fQ0ZCdW5kbGVJZGVudGlmaWVyIjoiY29tLm1pY3Jvc29mdC5WU0NvZGUiLCJfX0NGX1VTRVJfVEVYVF9FTkNPRElORyI6IjB4MUY1OjB4MDoweDAifX0sInN0YXJ0dGltZSI6IjIwMjMtMDktMjZUMTc6MjM6NDguNzg1OTQxLTA1OjAwIiwiZW5kdGltZSI6IjIwMjMtMDktMjZUMTc6MjM6NDguNzg3MzQyLTA1OjAwIn0seyJ0eXBlIjoiaHR0cHM6Ly93aXRuZXNzLmRldi9hdHRlc3RhdGlvbnMvZ2l0L3YwLjEiLCJhdHRlc3RhdGlvbiI6eyJjb21taXRoYXNoIjoiYmUyMDEwMGFmNjAyYzc4MGRlZWVmNTBjNTRmNTMzODY2MmNlOTE3YyIsImF1dGhvciI6InNueWstYm90IiwiYXV0aG9yZW1haWwiOiJzbnlrLWJvdEBzbnlrLmlvIiwiY29tbWl0dGVybmFtZSI6Ik1pa2hhaWwgU3dpZnQiLCJjb21taXR0ZXJlbWFpbCI6Im1zd2lmdEBtc3dpZnQuZGV2IiwiY29tbWl0ZGF0ZSI6IjIwMjMtMDctMTggMTY6MTA6MDYgKzAwMDAgKzAwMDAiLCJjb21taXRtZXNzYWdlIjoiZml4OiBkZXYvRG9ja2VyZmlsZS5nby1idWlsZGVyIHRvIHJlZHVjZSB2dWxuZXJhYmlsaXRpZXNcblxuVGhlIGZvbGxvd2luZyB2dWxuZXJhYmlsaXRpZXMgYXJlIGZpeGVkIHdpdGggYW4gdXBncmFkZTpcbi0gaHR0cHM6Ly9zbnlrLmlvL3Z1bG4vU05ZSy1ERUJJQU4xMS1BUFItMzI2MTEwNVxuLSBodHRwczovL3NueWsuaW8vdnVsbi9TTllLLURFQklBTjExLU9QRU5TU0wtMzM2ODczNVxuLSBodHRwczovL3NueWsuaW8vdnVsbi9TTllLLURFQklBTjExLU9QRU5TU0wtNTI5MTc3M1xuLSBodHRwczovL3NueWsuaW8vdnVsbi9TTllLLURFQklBTjExLU9QRU5TU0wtNTI5MTc3N1xuLSBodHRwczovL3NueWsuaW8vdnVsbi9TTllLLURFQklBTjExLU9QRU5TU0wtNTY2MTU2NiIsInN0YXR1cyI6eyIudnNjb2RlL2xhdW5jaC5qc29uIjp7InN0YWdpbmciOiJ1bnRyYWNrZWQiLCJ3b3JrdHJlZSI6InVudHJhY2tlZCJ9LCJ0ZXN0L3Rlc3QueWFtbCI6eyJzdGFnaW5nIjoidW5tb2RpZmllZCIsIndvcmt0cmVlIjoibW9kaWZpZWQifX0sImNvbW1pdGRpZ2VzdCI6eyJzaGExIjoiYmUyMDEwMGFmNjAyYzc4MGRlZWVmNTBjNTRmNTMzODY2MmNlOTE3YyJ9LCJwYXJlbnRoYXNoZXMiOlsiYWEzNWMxZjRiMWQ0MWM4N2UxMzljMmQzMzNmMDkxMTdmZDBkYWY0ZiJdLCJ0cmVlaGFzaCI6IjllMDc2NWI2NTc5YWM3YzE0YTQwNjBhYmRiY2MxZDA5YmE1MDgwNGQiLCJyZWZzIjpbInJlZnMvaGVhZHMvbWFpbiIsInJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFpbiJdfSwic3RhcnR0aW1lIjoiMjAyMy0wOS0yNlQxNzoyMzo0OC43ODczNTctMDU6MDAiLCJlbmR0aW1lIjoiMjAyMy0wOS0yNlQxNzoyMzo0OS4zODI3OTYtMDU6MDAifSx7InR5cGUiOiJodHRwczovL3dpdG5lc3MuZGV2L2F0dGVzdGF0aW9ucy9tYXRlcmlhbC92MC4xIiwiYXR0ZXN0YXRpb24iOnsiLmdpdGlnbm9yZSI6eyJnaXRvaWQ6c2hhMSI6ImdpdG9pZDpibG9iOnNoYTE6ZWExMjZkOGI5NGNmMWE2ZGVhNWQ5NTJhMTU4MGI5ZjE0MWNkYWI3ZSIsImdpdG9pZDpzaGEyNTYiOiJnaXRvaWQ6YmxvYjpzaGEyNTY6NDczYTBmNGMzYmU4YTkzNjgxYTI2N2UzYjFlOWE3ZGNkYTExODU0MzZmZTE0MWY3NzQ5MTIwYTMwMzcyMTgxMyIsInNoYTI1NiI6ImViZjNhNzNhNDJlZDIwMTJkYjBiZTJiOWU3N2Y5ZTUzZDczYTBhMGFlMjIwODFhNWZjNWRmMjMyNmY5YWZiYWIifSwiYnVpbGQuYXR0ZXN0YXRpb24uanNvbiI6eyJnaXRvaWQ6c2hhMSI6ImdpdG9pZDpibG9iOnNoYTE6Nzc2NTc2NTVhNGVhYTEzNWMwOWY5MmY3MjNlMTI0MzZiNjM3ODFkMSIsImdpdG9pZDpzaGEyNTYiOiJnaXRvaWQ6YmxvYjpzaGEyNTY6NDczYTBmNGMzYmU4YTkzNjgxYTI2N2UzYjFlOWE3ZGNkYTExODU0MzZmZTE0MWY3NzQ5MTIwYTMwMzcyMTgxMyIsInNoYTI1NiI6ImVjMGNiZmMxMThiOTE1ZGQ2MWRjOGE5NGQ5YjQ4N2FjZDk1OTZkNjFlODcyZDZlZjM3NzA1Y2Y2N2MxYTBlODIifSwiY29tbW9uLnNoIjp7ImdpdG9pZDpzaGExIjoiZ2l0b2lkOmJsb2I6c2hhMTozYzMyOGZiN2YzMWQxYzQzNDNlZjc5NzU1NjE5MjA1YTE1Njk3YTYwIiwiZ2l0b2lkOnNoYTI1NiI6ImdpdG9pZDpibG9iOnNoYTI1Njo0NzNhMGY0YzNiZThhOTM2ODFhMjY3ZTNiMWU5YTdkY2RhMTE4NTQzNmZlMTQxZjc3NDkxMjBhMzAzNzIxODEzIiwic2hhMjU2IjoiNjhmNDliNDc1ZTcwOGY1MWZkN2YyNzY4NzExZmVlMmU2Yzg1OGU5NGE0NGZkZjhhNmM1YmYzM2I2YTk3NjE2MiJ9LCJmYWlsLmF0dGVzdGF0aW9uLmpzb24iOnsiZ2l0b2lkOnNoYTEiOiJnaXRvaWQ6YmxvYjpzaGExOmU2OWRlMjliYjJkMWQ2NDM0YjhiMjlhZTc3NWFkOGMyZTQ4YzUzOTEiLCJnaXRvaWQ6c2hhMjU2IjoiZ2l0b2lkOmJsb2I6c2hhMjU2OjQ3M2EwZjRjM2JlOGE5MzY4MWEyNjdlM2IxZTlhN2RjZGExMTg1NDM2ZmUxNDFmNzc0OTEyMGEzMDM3MjE4MTMiLCJzaGEyNTYiOiJlM2IwYzQ0Mjk4ZmMxYzE0OWFmYmY0Yzg5OTZmYjkyNDI3YWU0MWU0NjQ5YjkzNGNhNDk1OTkxYjc4NTJiODU1In0sImZhaWxrZXkucGVtIjp7ImdpdG9pZDpzaGExIjoiZ2l0b2lkOmJsb2I6c2hhMTo3YzVlYzQzYjc4YTM4ODI4ZDY5YTNhNTc3YzVlZTYzOGZlN2E0Mzc1IiwiZ2l0b2lkOnNoYTI1NiI6ImdpdG9pZDpibG9iOnNoYTI1Njo0NzNhMGY0YzNiZThhOTM2ODFhMjY3ZTNiMWU5YTdkY2RhMTE4NTQzNmZlMTQxZjc3NDkxMjBhMzAzNzIxODEzIiwic2hhMjU2IjoiMDkzZjBmOGM1OTIyYTJmNjZjZmI0NzM3YTUwMDdiMTk3YjM2ZjAxOWE0N2QxMWEwMGE5NTc3YWQ4ZmUyODhhOSJ9LCJtYWluLmdvIjp7ImdpdG9pZDpzaGExIjoiZ2l0b2lkOmJsb2I6c2hhMTpkZTMzMWY5ODk5MmY5MzI2YjYyZTJiZDcyZDdmNGVmODFkZjkxYjQ2IiwiZ2l0b2lkOnNoYTI1NiI6ImdpdG9pZDpibG9iOnNoYTI1Njo0NzNhMGY0YzNiZThhOTM2ODFhMjY3ZTNiMWU5YTdkY2RhMTE4NTQzNmZlMTQxZjc3NDkxMjBhMzAzNzIxODEzIiwic2hhMjU2IjoiMzEwZTVjZTI2N2E2NGRkMGNjYzYzNDFhNmYwNDNkNWE3ZDU5ZDU3YWNiMTBmMzFmYzExYzJmNTRjOTQ4NTRkMyJ9LCJwYWNrYWdlLmF0dGVzdGF0aW9uLmpzb24iOnsiZ2l0b2lkOnNoYTEiOiJnaXRvaWQ6YmxvYjpzaGExOmNiMmIyNzRmYTdhODE3OWExODcxODk1OWM0NzFhMTQwMzBjOTJlZjEiLCJnaXRvaWQ6c2hhMjU2IjoiZ2l0b2lkOmJsb2I6c2hhMjU2OjQ3M2EwZjRjM2JlOGE5MzY4MWEyNjdlM2IxZTlhN2RjZGExMTg1NDM2ZmUxNDFmNzc0OTEyMGEzMDM3MjE4MTMiLCJzaGEyNTYiOiI2MzAwZDAzMWRlZTM4NDQ5MjMxODhlYTcyOWYxMzlkZGRiNDU3Mzg1Nzc3NDNjOWJiY2E4OTJjNDM3NzkxMWY2In0sInBvbGljeS1zaWduZWQuanNvbiI6eyJnaXRvaWQ6c2hhMSI6ImdpdG9pZDpibG9iOnNoYTE6OTFiMjI1ZTFjZjBkMjgzNTJhYWIzYzhkNTQwMGVjNDYzNWExN2I4ZSIsImdpdG9pZDpzaGEyNTYiOiJnaXRvaWQ6YmxvYjpzaGEyNTY6NDczYTBmNGMzYmU4YTkzNjgxYTI2N2UzYjFlOWE3ZGNkYTExODU0MzZmZTE0MWY3NzQ5MTIwYTMwMzcyMTgxMyIsInNoYTI1NiI6ImNhZmI0ODNmZTM1ODhiOWU3M2MzMmZkMzgyZmI0Njc5M2FmOTAyMTkwYjZlOWM4MjI4NjIxNGQyY2M2YWNiODQifSwicG9saWN5Lmpzb24iOnsiZ2l0b2lkOnNoYTEiOiJnaXRvaWQ6YmxvYjpzaGExOjI0MzM0NDIyMDEwNDFmNDY2ZjkyMWY1YmE3NDI4NTFmNWQwZGFjYTQiLCJnaXRvaWQ6c2hhMjU2IjoiZ2l0b2lkOmJsb2I6c2hhMjU2OjQ3M2EwZjRjM2JlOGE5MzY4MWEyNjdlM2IxZTlhN2RjZGExMTg1NDM2ZmUxNDFmNzc0OTEyMGEzMDM3MjE4MTMiLCJzaGEyNTYiOiJjYzdkNTVjODNkNDZhNjZjOWQ2YjYxMmZkZDYxNTE2YzllMmRiZDEzMzAxMTk0MTJmYWQ0MWY5Y2VlYTdlODRmIn0sInRlc3Qtb2NpLnNoIjp7ImdpdG9pZDpzaGExIjoiZ2l0b2lkOmJsb2I6c2hhMTpmODQ5Mzg4MmM1MDc0ZTdkYjgxZWIwNjJlNGY4YWQ3N2M1YWI5NmM0IiwiZ2l0b2lkOnNoYTI1NiI6ImdpdG9pZDpibG9iOnNoYTI1Njo0NzNhMGY0YzNiZThhOTM2ODFhMjY3ZTNiMWU5YTdkY2RhMTE4NTQzNmZlMTQxZjc3NDkxMjBhMzAzNzIxODEzIiwic2hhMjU2IjoiMWZiMDZmMmZkZjYzNzhmYzE5YzczYTZkMDZkM2NhYWU3OTBiMzJiYzgyMzFiYzY5ZTM4NTNkYjRmMjdiZjUwMyJ9LCJ0ZXN0LnNoIjp7ImdpdG9pZDpzaGExIjoiZ2l0b2lkOmJsb2I6c2hhMTo4YWFmY2RlZWQ4YzI3Njg0YTM2ZTRiZWI2M2EyMGQwOTQzYzBlYzcyIiwiZ2l0b2lkOnNoYTI1NiI6ImdpdG9pZDpibG9iOnNoYTI1Njo0NzNhMGY0YzNiZThhOTM2ODFhMjY3ZTNiMWU5YTdkY2RhMTE4NTQzNmZlMTQxZjc3NDkxMjBhMzAzNzIxODEzIiwic2hhMjU2IjoiOTM0ZjM2ZjNhOWIzOWE5YTEzNjg2NDM1YzM1YzEwOTBjZDJkYjliYmQwZmM5NjM0ODgxNTI5MjMwNTkxMGZlMyJ9LCJ0ZXN0LnlhbWwiOnsiZ2l0b2lkOnNoYTEiOiJnaXRvaWQ6YmxvYjpzaGExOjgzYjc2OWZjYzcwNTVhZjZlZWFkODQzMjQzYTZiMTFhMWE3NjVmZDUiLCJnaXRvaWQ6c2hhMjU2IjoiZ2l0b2lkOmJsb2I6c2hhMjU2OjQ3M2EwZjRjM2JlOGE5MzY4MWEyNjdlM2IxZTlhN2RjZGExMTg1NDM2ZmUxNDFmNzc0OTEyMGEzMDM3MjE4MTMiLCJzaGEyNTYiOiI0OGM3NDkyYTQ4YzdiOGVjOGYxYWVjNTA4MTA3MTNlMjQzNzEzMWRhOTNiMjlmOTFjN2FlMWFiOThjNWQ1YTQwIn0sInRlc3RhcHAiOnsiZ2l0b2lkOnNoYTEiOiJnaXRvaWQ6YmxvYjpzaGExOjg1ZTNhMDIzYzk3YzhhYWRhY2UyZDhjOTU5NTM1YWJmZmJmNGUxNzUiLCJnaXRvaWQ6c2hhMjU2IjoiZ2l0b2lkOmJsb2I6c2hhMjU2OjQ3M2EwZjRjM2JlOGE5MzY4MWEyNjdlM2IxZTlhN2RjZGExMTg1NDM2ZmUxNDFmNzc0OTEyMGEzMDM3MjE4MTMiLCJzaGEyNTYiOiI0MjNkYTRjZmYxOThiYmZmYmUzMjIwZWQ5NTEwZDMyYmE5NjY5OGU0YjFmNjU0NTUyNTIxZDFmNTQxYWJiNmRjIn0sInRlc3RhcHAudGFyLnRneiI6eyJnaXRvaWQ6c2hhMSI6ImdpdG9pZDpibG9iOnNoYTE6MDI2NmMxMjQzZjFiMWQ0NmNlY2ZhNjcxZGEyYTRlOGQxZTRmOTdlNSIsImdpdG9pZDpzaGEyNTYiOiJnaXRvaWQ6YmxvYjpzaGEyNTY6NDczYTBmNGMzYmU4YTkzNjgxYTI2N2UzYjFlOWE3ZGNkYTExODU0MzZmZTE0MWY3NzQ5MTIwYTMwMzcyMTgxMyIsInNoYTI1NiI6ImQwM2RkODI3ZDcxZGZhYjc1NzhmYWYwNDkyOTRjNTVhZDE0MGE1OTZiZWNlNWU2OGJjNDA2YWM5MjY1YmUxZWUifSwidGVzdGtleS5wZW0iOnsiZ2l0b2lkOnNoYTEiOiJnaXRvaWQ6YmxvYjpzaGExOmZhY2VkY2Q3ODJmODA2NTM0M2ZkOTdiY2MxZGY5ZGFiYTBmOTBjY2EiLCJnaXRvaWQ6c2hhMjU2IjoiZ2l0b2lkOmJsb2I6c2hhMjU2OjQ3M2EwZjRjM2JlOGE5MzY4MWEyNjdlM2IxZTlhN2RjZGExMTg1NDM2ZmUxNDFmNzc0OTEyMGEzMDM3MjE4MTMiLCJzaGEyNTYiOiIxNzkwMmQyOTI1YTllOTQ0NDE1YWY3MzdlYTBjZGZkOTZhM2VmYmJlY2MzMWY1OWJkYjg1MzU3MjRhMTI1NmZjIn0sInRlc3RrZXkyLnBlbSI6eyJnaXRvaWQ6c2hhMSI6ImdpdG9pZDpibG9iOnNoYTE6ZDJjOTE5ZjQzY2NhY2VhYjc3ZTVkYmM3MWMxYjg1Nzk0Yzg2MmM5MCIsImdpdG9pZDpzaGEyNTYiOiJnaXRvaWQ6YmxvYjpzaGEyNTY6NDczYTBmNGMzYmU4YTkzNjgxYTI2N2UzYjFlOWE3ZGNkYTExODU0MzZmZTE0MWY3NzQ5MTIwYTMwMzcyMTgxMyIsInNoYTI1NiI6IjNhNmYzOWQ3NjFmZDBlOWFhNDQxN2M1MGEwN2Y5ZjRkN2IyOWIxYWM0MzBhMDE2ODdiNjg0MDBjMmI5Njg4MDMifSwidGVzdHB1Yi5wZW0iOnsiZ2l0b2lkOnNoYTEiOiJnaXRvaWQ6YmxvYjpzaGExOjliNGJlYTkwOGNkN2ZjMjMxYzQ5ZWM4ZGI0ZTViZGRiYzgxNDAzMWYiLCJnaXRvaWQ6c2hhMjU2IjoiZ2l0b2lkOmJsb2I6c2hhMjU2OjQ3M2EwZjRjM2JlOGE5MzY4MWEyNjdlM2IxZTlhN2RjZGExMTg1NDM2ZmUxNDFmNzc0OTEyMGEzMDM3MjE4MTMiLCJzaGEyNTYiOiJiOTdmMGZiNDBiYjc0OWY1ZTZhNTVlNTg4ZTgwMGZmZWEzZjFlYzYzNjY1YWY4MTk5YWViYTQ0NzJhYjQ1MzI3In0sInRlc3RwdWIyLnBlbSI6eyJnaXRvaWQ6c2hhMSI6ImdpdG9pZDpibG9iOnNoYTE6MWRjM2Y4Yzg2MjRkOThhNjliYTQ3N2M3OWZhMmViNWM4NzQwOGNiNyIsImdpdG9pZDpzaGEyNTYiOiJnaXRvaWQ6YmxvYjpzaGEyNTY6NDczYTBmNGMzYmU4YTkzNjgxYTI2N2UzYjFlOWE3ZGNkYTExODU0MzZmZTE0MWY3NzQ5MTIwYTMwMzcyMTgxMyIsInNoYTI1NiI6IjVlOGM1N2RmOGFlNThmZTlhMjliMjlmOTk5M2UyZmMzYjI1YmQ3NWViMjc1NGYzNTM4ODBiYWQ0YjllYmZkYjMifX0sInN0YXJ0dGltZSI6IjIwMjMtMDktMjZUMTc6MjM6NDkuMzgyODIxLTA1OjAwIiwiZW5kdGltZSI6IjIwMjMtMDktMjZUMTc6MjM6NDkuMzg4MjctMDU6MDAifSx7InR5cGUiOiJodHRwczovL3dpdG5lc3MuZGV2L2F0dGVzdGF0aW9ucy9jb21tYW5kLXJ1bi92MC4xIiwiYXR0ZXN0YXRpb24iOnsiY21kIjpbImdvIiwiYnVpbGQiLCItbz10ZXN0YXBwIiwiLiJdLCJleGl0Y29kZSI6MH0sInN0YXJ0dGltZSI6IjIwMjMtMDktMjZUMTc6MjM6NDkuMzg4MjkzLTA1OjAwIiwiZW5kdGltZSI6IjIwMjMtMDktMjZUMTc6MjM6NDkuNDUyNzk3LTA1OjAwIn0seyJ0eXBlIjoiaHR0cHM6Ly93aXRuZXNzLmRldi9hdHRlc3RhdGlvbnMvcHJvZHVjdC92MC4xIiwiYXR0ZXN0YXRpb24iOnt9LCJzdGFydHRpbWUiOiIyMDIzLTA5LTI2VDE3OjIzOjQ5LjQ1MjkwMi0wNTowMCIsImVuZHRpbWUiOiIyMDIzLTA5LTI2VDE3OjIzOjQ5LjQ1OTIwMy0wNTowMCJ9XX19","payloadType":"application/vnd.in-toto+json","signatures":[{"keyid":"6316cb923d1b8412880e49fb0245c0e5f5536674d1c2cc3e948476fdc9830453","sig":"MEUCIQDk6DSWysKt6vYZi66xoxNWJmJG+9M+t9mLGzjoVEp0xAIgSRjEKFaJzqYqVOq6TZE07gyobZVJH4RB8nqVdS8sQBU="}]} \ No newline at end of file diff --git a/test/package.attestation.json b/test/package.attestation.json new file mode 100644 index 00000000..3c60f6b9 --- /dev/null +++ b/test/package.attestation.json @@ -0,0 +1 @@ +{"payload":"eyJfdHlwZSI6Imh0dHBzOi8vaW4tdG90by5pby9TdGF0ZW1lbnQvdjAuMSIsInN1YmplY3QiOlt7Im5hbWUiOiJodHRwczovL3dpdG5lc3MuZGV2L2F0dGVzdGF0aW9ucy9naXQvdjAuMS9jb21taXR0ZXJlbWFpbDptc3dpZnRAbXN3aWZ0LmRldiIsImRpZ2VzdCI6eyJzaGEyNTYiOiI0MDg0MDRlN2E2NmI0NzFlNTYzMGU4MDFjOTNhZjY2ZmI5Y2IwMTc3MTk4MmFlOTBiNmY3NTVlMTA0MjgxODg3In19LHsibmFtZSI6Imh0dHBzOi8vd2l0bmVzcy5kZXYvYXR0ZXN0YXRpb25zL2dpdC92MC4xL3BhcmVudGhhc2g6YWEzNWMxZjRiMWQ0MWM4N2UxMzljMmQzMzNmMDkxMTdmZDBkYWY0ZiIsImRpZ2VzdCI6eyJzaGEyNTYiOiIwYmMxMzZmNTUwOWU5NmZjOGFhMjkwZjE3NTQyOGQ2NDNhMGU2NWQ4ZTZiNjE1ODZhZDYwZTllYzk4M2EzMzcwIn19LHsibmFtZSI6Imh0dHBzOi8vd2l0bmVzcy5kZXYvYXR0ZXN0YXRpb25zL3Byb2R1Y3QvdjAuMS9maWxlOnRlc3RhcHAudGFyLnRneiIsImRpZ2VzdCI6eyJnaXRvaWQ6c2hhMSI6ImdpdG9pZDpibG9iOnNoYTE6Mzk5NGY2NmYzN2UxNWNlODFlYzExZGY4NTJkNWVlOWQ1NWYwOGMwMSIsImdpdG9pZDpzaGEyNTYiOiJnaXRvaWQ6YmxvYjpzaGEyNTY6NDczYTBmNGMzYmU4YTkzNjgxYTI2N2UzYjFlOWE3ZGNkYTExODU0MzZmZTE0MWY3NzQ5MTIwYTMwMzcyMTgxMyIsInNoYTI1NiI6IjEwY2JmMGYzZDg3MDkzNDkyMTI3NmY2NjlhYjcwNzk4MzExM2Y5Mjk3ODRkODc3ZjExOTJmNDNjNTgxZjIwNzAifX0seyJuYW1lIjoiaHR0cHM6Ly93aXRuZXNzLmRldi9hdHRlc3RhdGlvbnMvZ2l0L3YwLjEvY29tbWl0aGFzaDpiZTIwMTAwYWY2MDJjNzgwZGVlZWY1MGM1NGY1MzM4NjYyY2U5MTdjIiwiZGlnZXN0Ijp7InNoYTEiOiJiZTIwMTAwYWY2MDJjNzgwZGVlZWY1MGM1NGY1MzM4NjYyY2U5MTdjIn19LHsibmFtZSI6Imh0dHBzOi8vd2l0bmVzcy5kZXYvYXR0ZXN0YXRpb25zL2dpdC92MC4xL2F1dGhvcmVtYWlsOnNueWstYm90QHNueWsuaW8iLCJkaWdlc3QiOnsic2hhMjU2IjoiZWU0ODM2OWJlNjA3MmMxYTQ5YmE1MTliMmVlZjkyNzIyMzViMGQ5MjVhNmU3YTMzOGY3ZmZjMTJhMmNhNTM4ZSJ9fV0sInByZWRpY2F0ZVR5cGUiOiJodHRwczovL3dpdG5lc3MudGVzdGlmeXNlYy5jb20vYXR0ZXN0YXRpb24tY29sbGVjdGlvbi92MC4xIiwicHJlZGljYXRlIjp7Im5hbWUiOiJwYWNrYWdlIiwiYXR0ZXN0YXRpb25zIjpbeyJ0eXBlIjoiaHR0cHM6Ly93aXRuZXNzLmRldi9hdHRlc3RhdGlvbnMvZW52aXJvbm1lbnQvdjAuMSIsImF0dGVzdGF0aW9uIjp7Im9zIjoiZGFyd2luIiwiaG9zdG5hbWUiOiJNaWtoYWlscy1NYWNCb29rLVByby0yLmxvY2FsIiwidXNlcm5hbWUiOiJtc3dpZnQiLCJ2YXJpYWJsZXMiOnsiQ09MT1JURVJNIjoidHJ1ZWNvbG9yIiwiQ09NTUFORF9NT0RFIjoidW5peDIwMDMiLCJHSVRfQVNLUEFTUyI6Ii9BcHBsaWNhdGlvbnMvVmlzdWFsIFN0dWRpbyBDb2RlLmFwcC9Db250ZW50cy9SZXNvdXJjZXMvYXBwL2V4dGVuc2lvbnMvZ2l0L2Rpc3QvYXNrcGFzcy5zaCIsIkdQR19UVFkiOiIvZGV2L3R0eXMwMDgiLCJIT01FIjoiL1VzZXJzL21zd2lmdCIsIkhPTUVCUkVXX0NFTExBUiI6Ii9vcHQvaG9tZWJyZXcvQ2VsbGFyIiwiSE9NRUJSRVdfUFJFRklYIjoiL29wdC9ob21lYnJldyIsIkhPTUVCUkVXX1JFUE9TSVRPUlkiOiIvb3B0L2hvbWVicmV3IiwiSU5GT1BBVEgiOiIvb3B0L2hvbWVicmV3L3NoYXJlL2luZm86L29wdC9ob21lYnJldy9zaGFyZS9pbmZvOiIsIkxBTkciOiJlbl9VUy5VVEYtOCIsIkxPR05BTUUiOiJtc3dpZnQiLCJMYXVuY2hJbnN0YW5jZUlEIjoiRUIyQTdBMDgtRkYzMC00QUZDLTkzQkMtRjNCNDI3Q0YxODE0IiwiTUFOUEFUSCI6Ii9vcHQvaG9tZWJyZXcvc2hhcmUvbWFuOi91c3Ivc2hhcmUvbWFuOi91c3IvbG9jYWwvc2hhcmUvbWFuOi9vcHQvaG9tZWJyZXcvc2hhcmUvbWFuOjoiLCJNYWxsb2NOYW5vWm9uZSI6IjAiLCJPUklHSU5BTF9YREdfQ1VSUkVOVF9ERVNLVE9QIjoidW5kZWZpbmVkIiwiUDlLX1NTSCI6IjAiLCJQOUtfVFRZIjoib2xkIiwiUEFUSCI6Ii9Vc2Vycy9tc3dpZnQvZ29vZ2xlLWNsb3VkLXNkay9iaW46L29wdC9ob21lYnJldy9iaW46L29wdC9ob21lYnJldy9zYmluOi91c3IvbG9jYWwvYmluOi9TeXN0ZW0vQ3J5cHRleGVzL0FwcC91c3IvYmluOi91c3IvYmluOi9iaW46L3Vzci9zYmluOi9zYmluOi92YXIvcnVuL2NvbS5hcHBsZS5zZWN1cml0eS5jcnlwdGV4ZC9jb2RleC5zeXN0ZW0vYm9vdHN0cmFwL3Vzci9sb2NhbC9iaW46L3Zhci9ydW4vY29tLmFwcGxlLnNlY3VyaXR5LmNyeXB0ZXhkL2NvZGV4LnN5c3RlbS9ib290c3RyYXAvdXNyL2JpbjovdmFyL3J1bi9jb20uYXBwbGUuc2VjdXJpdHkuY3J5cHRleGQvY29kZXguc3lzdGVtL2Jvb3RzdHJhcC91c3IvYXBwbGVpbnRlcm5hbC9iaW46L1VzZXJzL21zd2lmdC9nb29nbGUtY2xvdWQtc2RrL2Jpbjovb3B0L2hvbWVicmV3L2Jpbjovb3B0L2hvbWVicmV3L3NiaW46L1VzZXJzL21zd2lmdC9nby9iaW46L1VzZXJzL21zd2lmdC9nby9iaW4iLCJQV0QiOiIvVXNlcnMvbXN3aWZ0L1dvcmtzcGFjZXMvd2l0bmVzcy90ZXN0IiwiU0VDVVJJVFlTRVNTSU9OSUQiOiIxODZjOSIsIlNIRUxMIjoiL2Jpbi96c2giLCJTSExWTCI6IjIiLCJTU0hfQVVUSF9TT0NLIjoiL1VzZXJzL21zd2lmdC8uZ251cGcvUy5ncGctYWdlbnQuc3NoIiwiVEVSTSI6Inh0ZXJtLTI1NmNvbG9yIiwiVEVSTV9QUk9HUkFNIjoidnNjb2RlIiwiVEVSTV9QUk9HUkFNX1ZFUlNJT04iOiIxLjgyLjAiLCJUTVBESVIiOiIvdmFyL2ZvbGRlcnMvNmsvZnJxbHMyN24yenY0ejUxajU1bm5reGZ3MDAwMGduL1QvIiwiVVNFUiI6Im1zd2lmdCIsIlVTRVJfWkRPVERJUiI6Ii9Vc2Vycy9tc3dpZnQiLCJVU0VfR0tFX0dDTE9VRF9BVVRIX1BMVUdJTiI6IlRydWUiLCJWU0NPREVfR0lUX0FTS1BBU1NfRVhUUkFfQVJHUyI6Ii0tbXMtZW5hYmxlLWVsZWN0cm9uLXJ1bi1hcy1ub2RlIiwiVlNDT0RFX0dJVF9BU0tQQVNTX01BSU4iOiIvQXBwbGljYXRpb25zL1Zpc3VhbCBTdHVkaW8gQ29kZS5hcHAvQ29udGVudHMvUmVzb3VyY2VzL2FwcC9leHRlbnNpb25zL2dpdC9kaXN0L2Fza3Bhc3MtbWFpbi5qcyIsIlZTQ09ERV9HSVRfQVNLUEFTU19OT0RFIjoiL0FwcGxpY2F0aW9ucy9WaXN1YWwgU3R1ZGlvIENvZGUuYXBwL0NvbnRlbnRzL0ZyYW1ld29ya3MvQ29kZSBIZWxwZXIgKFBsdWdpbikuYXBwL0NvbnRlbnRzL01hY09TL0NvZGUgSGVscGVyIChQbHVnaW4pIiwiVlNDT0RFX0dJVF9JUENfSEFORExFIjoiL3Zhci9mb2xkZXJzLzZrL2ZycWxzMjduMnp2NHo1MWo1NW5ua3hmdzAwMDBnbi9UL3ZzY29kZS1naXQtMTE4OTUwZDcyMy5zb2NrIiwiVlNDT0RFX0lOSkVDVElPTiI6IjEiLCJYUENfRkxBR1MiOiIweDAiLCJYUENfU0VSVklDRV9OQU1FIjoiMCIsIlpET1RESVIiOiIvVXNlcnMvbXN3aWZ0IiwiXyI6Ii4uL2Jpbi93aXRuZXNzIiwiX1A5S19UVFkiOiIvZGV2L3R0eXMwMDgiLCJfX0NGQnVuZGxlSWRlbnRpZmllciI6ImNvbS5taWNyb3NvZnQuVlNDb2RlIiwiX19DRl9VU0VSX1RFWFRfRU5DT0RJTkciOiIweDFGNToweDA6MHgwIn19LCJzdGFydHRpbWUiOiIyMDIzLTA5LTI2VDE3OjIzOjQ5LjQ3MTM1OS0wNTowMCIsImVuZHRpbWUiOiIyMDIzLTA5LTI2VDE3OjIzOjQ5LjQ3MzU4My0wNTowMCJ9LHsidHlwZSI6Imh0dHBzOi8vd2l0bmVzcy5kZXYvYXR0ZXN0YXRpb25zL2dpdC92MC4xIiwiYXR0ZXN0YXRpb24iOnsiY29tbWl0aGFzaCI6ImJlMjAxMDBhZjYwMmM3ODBkZWVlZjUwYzU0ZjUzMzg2NjJjZTkxN2MiLCJhdXRob3IiOiJzbnlrLWJvdCIsImF1dGhvcmVtYWlsIjoic255ay1ib3RAc255ay5pbyIsImNvbW1pdHRlcm5hbWUiOiJNaWtoYWlsIFN3aWZ0IiwiY29tbWl0dGVyZW1haWwiOiJtc3dpZnRAbXN3aWZ0LmRldiIsImNvbW1pdGRhdGUiOiIyMDIzLTA3LTE4IDE2OjEwOjA2ICswMDAwICswMDAwIiwiY29tbWl0bWVzc2FnZSI6ImZpeDogZGV2L0RvY2tlcmZpbGUuZ28tYnVpbGRlciB0byByZWR1Y2UgdnVsbmVyYWJpbGl0aWVzXG5cblRoZSBmb2xsb3dpbmcgdnVsbmVyYWJpbGl0aWVzIGFyZSBmaXhlZCB3aXRoIGFuIHVwZ3JhZGU6XG4tIGh0dHBzOi8vc255ay5pby92dWxuL1NOWUstREVCSUFOMTEtQVBSLTMyNjExMDVcbi0gaHR0cHM6Ly9zbnlrLmlvL3Z1bG4vU05ZSy1ERUJJQU4xMS1PUEVOU1NMLTMzNjg3MzVcbi0gaHR0cHM6Ly9zbnlrLmlvL3Z1bG4vU05ZSy1ERUJJQU4xMS1PUEVOU1NMLTUyOTE3NzNcbi0gaHR0cHM6Ly9zbnlrLmlvL3Z1bG4vU05ZSy1ERUJJQU4xMS1PUEVOU1NMLTUyOTE3Nzdcbi0gaHR0cHM6Ly9zbnlrLmlvL3Z1bG4vU05ZSy1ERUJJQU4xMS1PUEVOU1NMLTU2NjE1NjYiLCJzdGF0dXMiOnsiLnZzY29kZS9sYXVuY2guanNvbiI6eyJzdGFnaW5nIjoidW50cmFja2VkIiwid29ya3RyZWUiOiJ1bnRyYWNrZWQifSwidGVzdC90ZXN0LnlhbWwiOnsic3RhZ2luZyI6InVubW9kaWZpZWQiLCJ3b3JrdHJlZSI6Im1vZGlmaWVkIn19LCJjb21taXRkaWdlc3QiOnsic2hhMSI6ImJlMjAxMDBhZjYwMmM3ODBkZWVlZjUwYzU0ZjUzMzg2NjJjZTkxN2MifSwicGFyZW50aGFzaGVzIjpbImFhMzVjMWY0YjFkNDFjODdlMTM5YzJkMzMzZjA5MTE3ZmQwZGFmNGYiXSwidHJlZWhhc2giOiI5ZTA3NjViNjU3OWFjN2MxNGE0MDYwYWJkYmNjMWQwOWJhNTA4MDRkIiwicmVmcyI6WyJyZWZzL2hlYWRzL21haW4iLCJyZWZzL3JlbW90ZXMvb3JpZ2luL21haW4iXX0sInN0YXJ0dGltZSI6IjIwMjMtMDktMjZUMTc6MjM6NDkuNDczNTk1LTA1OjAwIiwiZW5kdGltZSI6IjIwMjMtMDktMjZUMTc6MjM6NTAuMDU1NTM1LTA1OjAwIn0seyJ0eXBlIjoiaHR0cHM6Ly93aXRuZXNzLmRldi9hdHRlc3RhdGlvbnMvbWF0ZXJpYWwvdjAuMSIsImF0dGVzdGF0aW9uIjp7Ii5naXRpZ25vcmUiOnsiZ2l0b2lkOnNoYTEiOiJnaXRvaWQ6YmxvYjpzaGExOmVhMTI2ZDhiOTRjZjFhNmRlYTVkOTUyYTE1ODBiOWYxNDFjZGFiN2UiLCJnaXRvaWQ6c2hhMjU2IjoiZ2l0b2lkOmJsb2I6c2hhMjU2OjQ3M2EwZjRjM2JlOGE5MzY4MWEyNjdlM2IxZTlhN2RjZGExMTg1NDM2ZmUxNDFmNzc0OTEyMGEzMDM3MjE4MTMiLCJzaGEyNTYiOiJlYmYzYTczYTQyZWQyMDEyZGIwYmUyYjllNzdmOWU1M2Q3M2EwYTBhZTIyMDgxYTVmYzVkZjIzMjZmOWFmYmFiIn0sImJ1aWxkLmF0dGVzdGF0aW9uLmpzb24iOnsiZ2l0b2lkOnNoYTEiOiJnaXRvaWQ6YmxvYjpzaGExOjc3NjU3NjU1YTRlYWExMzVjMDlmOTJmNzIzZTEyNDM2YjYzNzgxZDEiLCJnaXRvaWQ6c2hhMjU2IjoiZ2l0b2lkOmJsb2I6c2hhMjU2OjQ3M2EwZjRjM2JlOGE5MzY4MWEyNjdlM2IxZTlhN2RjZGExMTg1NDM2ZmUxNDFmNzc0OTEyMGEzMDM3MjE4MTMiLCJzaGEyNTYiOiJlYzBjYmZjMTE4YjkxNWRkNjFkYzhhOTRkOWI0ODdhY2Q5NTk2ZDYxZTg3MmQ2ZWYzNzcwNWNmNjdjMWEwZTgyIn0sImNvbW1vbi5zaCI6eyJnaXRvaWQ6c2hhMSI6ImdpdG9pZDpibG9iOnNoYTE6M2MzMjhmYjdmMzFkMWM0MzQzZWY3OTc1NTYxOTIwNWExNTY5N2E2MCIsImdpdG9pZDpzaGEyNTYiOiJnaXRvaWQ6YmxvYjpzaGEyNTY6NDczYTBmNGMzYmU4YTkzNjgxYTI2N2UzYjFlOWE3ZGNkYTExODU0MzZmZTE0MWY3NzQ5MTIwYTMwMzcyMTgxMyIsInNoYTI1NiI6IjY4ZjQ5YjQ3NWU3MDhmNTFmZDdmMjc2ODcxMWZlZTJlNmM4NThlOTRhNDRmZGY4YTZjNWJmMzNiNmE5NzYxNjIifSwiZmFpbC5hdHRlc3RhdGlvbi5qc29uIjp7ImdpdG9pZDpzaGExIjoiZ2l0b2lkOmJsb2I6c2hhMToxZTBhZGI3ODU0MDI3ZTljZTQ1OGI3YTVhYTc3ODgwYzQ2NjhjMTFkIiwiZ2l0b2lkOnNoYTI1NiI6ImdpdG9pZDpibG9iOnNoYTI1Njo0NzNhMGY0YzNiZThhOTM2ODFhMjY3ZTNiMWU5YTdkY2RhMTE4NTQzNmZlMTQxZjc3NDkxMjBhMzAzNzIxODEzIiwic2hhMjU2IjoiMDVkNGMxYjJkYTBhMjllYWMwZTM3NGNlYzU3MGRhMzNkY2YwMGUyNTkyMzQ4ZjllMGUwZTBjNjA2ZDE1MDk2MCJ9LCJmYWlsa2V5LnBlbSI6eyJnaXRvaWQ6c2hhMSI6ImdpdG9pZDpibG9iOnNoYTE6N2M1ZWM0M2I3OGEzODgyOGQ2OWEzYTU3N2M1ZWU2MzhmZTdhNDM3NSIsImdpdG9pZDpzaGEyNTYiOiJnaXRvaWQ6YmxvYjpzaGEyNTY6NDczYTBmNGMzYmU4YTkzNjgxYTI2N2UzYjFlOWE3ZGNkYTExODU0MzZmZTE0MWY3NzQ5MTIwYTMwMzcyMTgxMyIsInNoYTI1NiI6IjA5M2YwZjhjNTkyMmEyZjY2Y2ZiNDczN2E1MDA3YjE5N2IzNmYwMTlhNDdkMTFhMDBhOTU3N2FkOGZlMjg4YTkifSwibWFpbi5nbyI6eyJnaXRvaWQ6c2hhMSI6ImdpdG9pZDpibG9iOnNoYTE6ZGUzMzFmOTg5OTJmOTMyNmI2MmUyYmQ3MmQ3ZjRlZjgxZGY5MWI0NiIsImdpdG9pZDpzaGEyNTYiOiJnaXRvaWQ6YmxvYjpzaGEyNTY6NDczYTBmNGMzYmU4YTkzNjgxYTI2N2UzYjFlOWE3ZGNkYTExODU0MzZmZTE0MWY3NzQ5MTIwYTMwMzcyMTgxMyIsInNoYTI1NiI6IjMxMGU1Y2UyNjdhNjRkZDBjY2M2MzQxYTZmMDQzZDVhN2Q1OWQ1N2FjYjEwZjMxZmMxMWMyZjU0Yzk0ODU0ZDMifSwicGFja2FnZS5hdHRlc3RhdGlvbi5qc29uIjp7ImdpdG9pZDpzaGExIjoiZ2l0b2lkOmJsb2I6c2hhMTplNjlkZTI5YmIyZDFkNjQzNGI4YjI5YWU3NzVhZDhjMmU0OGM1MzkxIiwiZ2l0b2lkOnNoYTI1NiI6ImdpdG9pZDpibG9iOnNoYTI1Njo0NzNhMGY0YzNiZThhOTM2ODFhMjY3ZTNiMWU5YTdkY2RhMTE4NTQzNmZlMTQxZjc3NDkxMjBhMzAzNzIxODEzIiwic2hhMjU2IjoiZTNiMGM0NDI5OGZjMWMxNDlhZmJmNGM4OTk2ZmI5MjQyN2FlNDFlNDY0OWI5MzRjYTQ5NTk5MWI3ODUyYjg1NSJ9LCJwb2xpY3ktc2lnbmVkLmpzb24iOnsiZ2l0b2lkOnNoYTEiOiJnaXRvaWQ6YmxvYjpzaGExOjkxYjIyNWUxY2YwZDI4MzUyYWFiM2M4ZDU0MDBlYzQ2MzVhMTdiOGUiLCJnaXRvaWQ6c2hhMjU2IjoiZ2l0b2lkOmJsb2I6c2hhMjU2OjQ3M2EwZjRjM2JlOGE5MzY4MWEyNjdlM2IxZTlhN2RjZGExMTg1NDM2ZmUxNDFmNzc0OTEyMGEzMDM3MjE4MTMiLCJzaGEyNTYiOiJjYWZiNDgzZmUzNTg4YjllNzNjMzJmZDM4MmZiNDY3OTNhZjkwMjE5MGI2ZTljODIyODYyMTRkMmNjNmFjYjg0In0sInBvbGljeS5qc29uIjp7ImdpdG9pZDpzaGExIjoiZ2l0b2lkOmJsb2I6c2hhMToyNDMzNDQyMjAxMDQxZjQ2NmY5MjFmNWJhNzQyODUxZjVkMGRhY2E0IiwiZ2l0b2lkOnNoYTI1NiI6ImdpdG9pZDpibG9iOnNoYTI1Njo0NzNhMGY0YzNiZThhOTM2ODFhMjY3ZTNiMWU5YTdkY2RhMTE4NTQzNmZlMTQxZjc3NDkxMjBhMzAzNzIxODEzIiwic2hhMjU2IjoiY2M3ZDU1YzgzZDQ2YTY2YzlkNmI2MTJmZGQ2MTUxNmM5ZTJkYmQxMzMwMTE5NDEyZmFkNDFmOWNlZWE3ZTg0ZiJ9LCJ0ZXN0LW9jaS5zaCI6eyJnaXRvaWQ6c2hhMSI6ImdpdG9pZDpibG9iOnNoYTE6Zjg0OTM4ODJjNTA3NGU3ZGI4MWViMDYyZTRmOGFkNzdjNWFiOTZjNCIsImdpdG9pZDpzaGEyNTYiOiJnaXRvaWQ6YmxvYjpzaGEyNTY6NDczYTBmNGMzYmU4YTkzNjgxYTI2N2UzYjFlOWE3ZGNkYTExODU0MzZmZTE0MWY3NzQ5MTIwYTMwMzcyMTgxMyIsInNoYTI1NiI6IjFmYjA2ZjJmZGY2Mzc4ZmMxOWM3M2E2ZDA2ZDNjYWFlNzkwYjMyYmM4MjMxYmM2OWUzODUzZGI0ZjI3YmY1MDMifSwidGVzdC5zaCI6eyJnaXRvaWQ6c2hhMSI6ImdpdG9pZDpibG9iOnNoYTE6OGFhZmNkZWVkOGMyNzY4NGEzNmU0YmViNjNhMjBkMDk0M2MwZWM3MiIsImdpdG9pZDpzaGEyNTYiOiJnaXRvaWQ6YmxvYjpzaGEyNTY6NDczYTBmNGMzYmU4YTkzNjgxYTI2N2UzYjFlOWE3ZGNkYTExODU0MzZmZTE0MWY3NzQ5MTIwYTMwMzcyMTgxMyIsInNoYTI1NiI6IjkzNGYzNmYzYTliMzlhOWExMzY4NjQzNWMzNWMxMDkwY2QyZGI5YmJkMGZjOTYzNDg4MTUyOTIzMDU5MTBmZTMifSwidGVzdC55YW1sIjp7ImdpdG9pZDpzaGExIjoiZ2l0b2lkOmJsb2I6c2hhMTo4M2I3NjlmY2M3MDU1YWY2ZWVhZDg0MzI0M2E2YjExYTFhNzY1ZmQ1IiwiZ2l0b2lkOnNoYTI1NiI6ImdpdG9pZDpibG9iOnNoYTI1Njo0NzNhMGY0YzNiZThhOTM2ODFhMjY3ZTNiMWU5YTdkY2RhMTE4NTQzNmZlMTQxZjc3NDkxMjBhMzAzNzIxODEzIiwic2hhMjU2IjoiNDhjNzQ5MmE0OGM3YjhlYzhmMWFlYzUwODEwNzEzZTI0MzcxMzFkYTkzYjI5ZjkxYzdhZTFhYjk4YzVkNWE0MCJ9LCJ0ZXN0YXBwIjp7ImdpdG9pZDpzaGExIjoiZ2l0b2lkOmJsb2I6c2hhMTo4NWUzYTAyM2M5N2M4YWFkYWNlMmQ4Yzk1OTUzNWFiZmZiZjRlMTc1IiwiZ2l0b2lkOnNoYTI1NiI6ImdpdG9pZDpibG9iOnNoYTI1Njo0NzNhMGY0YzNiZThhOTM2ODFhMjY3ZTNiMWU5YTdkY2RhMTE4NTQzNmZlMTQxZjc3NDkxMjBhMzAzNzIxODEzIiwic2hhMjU2IjoiNDIzZGE0Y2ZmMTk4YmJmZmJlMzIyMGVkOTUxMGQzMmJhOTY2OThlNGIxZjY1NDU1MjUyMWQxZjU0MWFiYjZkYyJ9LCJ0ZXN0YXBwLnRhci50Z3oiOnsiZ2l0b2lkOnNoYTEiOiJnaXRvaWQ6YmxvYjpzaGExOjAyNjZjMTI0M2YxYjFkNDZjZWNmYTY3MWRhMmE0ZThkMWU0Zjk3ZTUiLCJnaXRvaWQ6c2hhMjU2IjoiZ2l0b2lkOmJsb2I6c2hhMjU2OjQ3M2EwZjRjM2JlOGE5MzY4MWEyNjdlM2IxZTlhN2RjZGExMTg1NDM2ZmUxNDFmNzc0OTEyMGEzMDM3MjE4MTMiLCJzaGEyNTYiOiJkMDNkZDgyN2Q3MWRmYWI3NTc4ZmFmMDQ5Mjk0YzU1YWQxNDBhNTk2YmVjZTVlNjhiYzQwNmFjOTI2NWJlMWVlIn0sInRlc3RrZXkucGVtIjp7ImdpdG9pZDpzaGExIjoiZ2l0b2lkOmJsb2I6c2hhMTpmYWNlZGNkNzgyZjgwNjUzNDNmZDk3YmNjMWRmOWRhYmEwZjkwY2NhIiwiZ2l0b2lkOnNoYTI1NiI6ImdpdG9pZDpibG9iOnNoYTI1Njo0NzNhMGY0YzNiZThhOTM2ODFhMjY3ZTNiMWU5YTdkY2RhMTE4NTQzNmZlMTQxZjc3NDkxMjBhMzAzNzIxODEzIiwic2hhMjU2IjoiMTc5MDJkMjkyNWE5ZTk0NDQxNWFmNzM3ZWEwY2RmZDk2YTNlZmJiZWNjMzFmNTliZGI4NTM1NzI0YTEyNTZmYyJ9LCJ0ZXN0a2V5Mi5wZW0iOnsiZ2l0b2lkOnNoYTEiOiJnaXRvaWQ6YmxvYjpzaGExOmQyYzkxOWY0M2NjYWNlYWI3N2U1ZGJjNzFjMWI4NTc5NGM4NjJjOTAiLCJnaXRvaWQ6c2hhMjU2IjoiZ2l0b2lkOmJsb2I6c2hhMjU2OjQ3M2EwZjRjM2JlOGE5MzY4MWEyNjdlM2IxZTlhN2RjZGExMTg1NDM2ZmUxNDFmNzc0OTEyMGEzMDM3MjE4MTMiLCJzaGEyNTYiOiIzYTZmMzlkNzYxZmQwZTlhYTQ0MTdjNTBhMDdmOWY0ZDdiMjliMWFjNDMwYTAxNjg3YjY4NDAwYzJiOTY4ODAzIn0sInRlc3RwdWIucGVtIjp7ImdpdG9pZDpzaGExIjoiZ2l0b2lkOmJsb2I6c2hhMTo5YjRiZWE5MDhjZDdmYzIzMWM0OWVjOGRiNGU1YmRkYmM4MTQwMzFmIiwiZ2l0b2lkOnNoYTI1NiI6ImdpdG9pZDpibG9iOnNoYTI1Njo0NzNhMGY0YzNiZThhOTM2ODFhMjY3ZTNiMWU5YTdkY2RhMTE4NTQzNmZlMTQxZjc3NDkxMjBhMzAzNzIxODEzIiwic2hhMjU2IjoiYjk3ZjBmYjQwYmI3NDlmNWU2YTU1ZTU4OGU4MDBmZmVhM2YxZWM2MzY2NWFmODE5OWFlYmE0NDcyYWI0NTMyNyJ9LCJ0ZXN0cHViMi5wZW0iOnsiZ2l0b2lkOnNoYTEiOiJnaXRvaWQ6YmxvYjpzaGExOjFkYzNmOGM4NjI0ZDk4YTY5YmE0NzdjNzlmYTJlYjVjODc0MDhjYjciLCJnaXRvaWQ6c2hhMjU2IjoiZ2l0b2lkOmJsb2I6c2hhMjU2OjQ3M2EwZjRjM2JlOGE5MzY4MWEyNjdlM2IxZTlhN2RjZGExMTg1NDM2ZmUxNDFmNzc0OTEyMGEzMDM3MjE4MTMiLCJzaGEyNTYiOiI1ZThjNTdkZjhhZTU4ZmU5YTI5YjI5Zjk5OTNlMmZjM2IyNWJkNzVlYjI3NTRmMzUzODgwYmFkNGI5ZWJmZGIzIn19LCJzdGFydHRpbWUiOiIyMDIzLTA5LTI2VDE3OjIzOjUwLjA1NTU2NC0wNTowMCIsImVuZHRpbWUiOiIyMDIzLTA5LTI2VDE3OjIzOjUwLjA2MTA5LTA1OjAwIn0seyJ0eXBlIjoiaHR0cHM6Ly93aXRuZXNzLmRldi9hdHRlc3RhdGlvbnMvY29tbWFuZC1ydW4vdjAuMSIsImF0dGVzdGF0aW9uIjp7ImNtZCI6WyJ0YXIiLCJjemYiLCIuL3Rlc3RhcHAudGFyLnRneiIsIi4vdGVzdGFwcCJdLCJleGl0Y29kZSI6MH0sInN0YXJ0dGltZSI6IjIwMjMtMDktMjZUMTc6MjM6NTAuMDYxMTExLTA1OjAwIiwiZW5kdGltZSI6IjIwMjMtMDktMjZUMTc6MjM6NTAuMTM0MzYzLTA1OjAwIn0seyJ0eXBlIjoiaHR0cHM6Ly93aXRuZXNzLmRldi9hdHRlc3RhdGlvbnMvcHJvZHVjdC92MC4xIiwiYXR0ZXN0YXRpb24iOnsidGVzdGFwcC50YXIudGd6Ijp7Im1pbWVfdHlwZSI6ImFwcGxpY2F0aW9uL3gtZ3ppcCIsImRpZ2VzdCI6eyJnaXRvaWQ6c2hhMSI6ImdpdG9pZDpibG9iOnNoYTE6Mzk5NGY2NmYzN2UxNWNlODFlYzExZGY4NTJkNWVlOWQ1NWYwOGMwMSIsImdpdG9pZDpzaGEyNTYiOiJnaXRvaWQ6YmxvYjpzaGEyNTY6NDczYTBmNGMzYmU4YTkzNjgxYTI2N2UzYjFlOWE3ZGNkYTExODU0MzZmZTE0MWY3NzQ5MTIwYTMwMzcyMTgxMyIsInNoYTI1NiI6IjEwY2JmMGYzZDg3MDkzNDkyMTI3NmY2NjlhYjcwNzk4MzExM2Y5Mjk3ODRkODc3ZjExOTJmNDNjNTgxZjIwNzAifX19LCJzdGFydHRpbWUiOiIyMDIzLTA5LTI2VDE3OjIzOjUwLjEzNDQzOC0wNTowMCIsImVuZHRpbWUiOiIyMDIzLTA5LTI2VDE3OjIzOjUwLjE0MjEzLTA1OjAwIn1dfX0=","payloadType":"application/vnd.in-toto+json","signatures":[{"keyid":"5e8c57df8ae58fe9a29b29f9993e2fc3b25bd75eb2754f353880bad4b9ebfdb3","sig":"G6gthh/6Z4pPpnz7CEgYNqCZh99LVYhQXgEdxk7bfvOaU14xXdv4zPmsCeufOwo1S+F/pxxptzTCN6d1sQwXhLNbhUXoa0Md/P+fUQ56i1WaqM57y7VQ2lOIaQBuLMaOnY07f52a/o8f40Rg29462+ccI+QFnf8/z63J/VgFu+DSlopDaa/3dPZ74oamENh34eWSThT+KjlU2v1XKYNDFVNt+S8hdINrkAFqeFdCNdpYH9hafaYutRH55Vx6ftm4o/aXTnnsjgS2moylzJN7CeIhaXoLS8oNHhYEss7UGSWlRrOZSgG/vepu4j6cdSXsoL7xoLPZB99RBNmRyfp/Fp1JfTFBeVQHBP5CaWIRgB1o/+aOYT32/Kt/FTlKetsr38Ft7Qx9P8pfXeUwn04+JcizjOoSMk1X/8TspUgHkcsa90FKx4Y+O0le9XR2AgtIo7qrgU4zKOjN0qm/PPfG0cudRdn5XA6RBvJRhJFa5uTrwpee54G2WvsrqZsuAI0hC/V8QMhZghDnpF9lYuxxEqenplJs/JfEcF/ih3n9S7N9gEter+g92DkaacV1VGqegHmmC9HIwelDoe/jVWv5byUghDPmzR7dRnAsCoK80d1gpmgcr/q0ELu/Wd/qlc7GFfbpNKeGFHL3WnqlF3nJgvx03574MIF5eCctIZNzF4o="}]} \ No newline at end of file diff --git a/test/test.sh b/test/test.sh new file mode 100755 index 00000000..ba9d6a27 --- /dev/null +++ b/test/test.sh @@ -0,0 +1,52 @@ +#!/usr/bin/env bash +set -e + +DIR="$( cd -- "$(dirname "$0")" >/dev/null 2>&1 ; pwd -P )" + +checkprograms() { + local result=0 + for prog in "$@" + do + if ! command -v $prog > /dev/null; then + printf "$prog is required to run this script. please ensure if is installed and in your PATH\n" + result=1 + fi + done + + return $result +} + +runtests() { + go run $DIR/../cmd/archivistactl/main.go store $DIR/*.attestation.json +} + +waitForArchivista() { + for attempt in $(seq 1 6); do + sleep 10 + archivistastate=$(docker compose -f "$DIR/../compose.yml" ps archivista --format json | jq -r '.State') + if [ "$archivistastate" == "running" ]; then + break + fi + + if [[ attempt -eq 6 ]]; then + echo "timed out waiting for archivista" + exit 1 + fi + done +} + +if ! checkprograms docker jq ; then + exit 1 +fi + +echo "Test mysql..." +docker compose -f "$DIR/../compose.yml" up --build -d +waitForArchivista +runtests +docker compose -f "$DIR/../compose.yml" down -v + +echo "Test psql..." +docker compose -f "$DIR/../compose.yml" -f "$DIR/../compose.psql.yml" up --build -d +waitForArchivista +runtests +docker compose -f "$DIR/../compose.yml" -f "$DIR/../compose.psql.yml" down -v \ No newline at end of file