pax_global_header00006660000000000000000000000064145314000450014506gustar00rootroot0000000000000052 comment=6ad7fe593e4042db3544c4b0fedbe66bac371c42 .gitattributes000066400000000000000000000001411453140004500137410ustar00rootroot00000000000000# go enforces lf line endings *.go eol=lf # testdata should not be mangled by git *.json binary .github/000077500000000000000000000000001453140004500124125ustar00rootroot00000000000000.github/PULL_REQUEST_TEMPLATE.md000066400000000000000000000017761453140004500162260ustar00rootroot00000000000000Please fill in the fields below to submit a pull request. The more information that is provided, the better. Fixes # Release Notes: **Types of changes**: - [ ] Bug fix (non-breaking change which fixes an issue) - [ ] New feature (non-breaking change which adds functionality) - [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected). **Please ensure that your PR title** is a [Conventional Commit](https://www.conventionalcommits.org/en/v1.0.0/) breaking change (with a `!`, as in `feat!: change foo`). **Description of the changes being introduced by the pull request**: **Please verify and check that the pull request fulfills the following requirements**: - [ ] Tests have been added for the bug fix or new feature - [ ] Docs have been added for the bug fix or new feature .github/dependabot.yml000066400000000000000000000013441453140004500152440ustar00rootroot00000000000000version: 2 updates: # Monitor Go dependencies - package-ecosystem: "gomod" directory: "/" schedule: interval: "weekly" time: "10:00" commit-message: prefix: "chore" include: "scope" open-pull-requests-limit: 10 # Monitor Github Actions - package-ecosystem: "github-actions" directory: "/" schedule: interval: "weekly" time: "10:00" commit-message: prefix: "chore" include: "scope" open-pull-requests-limit: 10 # Monitor Python test dependencies - package-ecosystem: "pip" directory: "/" schedule: interval: "weekly" time: "10:00" commit-message: prefix: "chore" include: "scope" open-pull-requests-limit: 10 .github/workflows/000077500000000000000000000000001453140004500144475ustar00rootroot00000000000000.github/workflows/changelog.yml000066400000000000000000000006101453140004500171160ustar00rootroot00000000000000name: "Changelog checks" on: pull_request_target: types: - opened - edited - synchronize jobs: conventional-commits-lint-check: name: "Lint PR title" runs-on: "ubuntu-latest" steps: - name: uses: amannn/action-semantic-pull-request@e9fabac35e210fea40ca5b14c0da95a099eff26f env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} .github/workflows/ci.yml000066400000000000000000000010231453140004500155610ustar00rootroot00000000000000on: pull_request: push: branches: - "master" tags: - "v*" name: CI permissions: contents: write jobs: tests: uses: ./.github/workflows/tests.yml tuf: needs: tests if: github.event_name == 'push' && contains(github.ref, 'refs/tags/') uses: ./.github/workflows/release.yml with: cli-name: tuf tuf-client: needs: tests if: github.event_name == 'push' && contains(github.ref, 'refs/tags/') uses: ./.github/workflows/release.yml with: cli-name: tuf-client .github/workflows/codeql-analysis.yml000066400000000000000000000044361453140004500202710ustar00rootroot00000000000000# For most projects, this workflow file will not need changing; you simply need # to commit it to your repository. # # You may wish to alter this file to override the set of languages analyzed, # or to provide custom queries or build logic. # # ******** NOTE ******** # We have attempted to detect the languages in your repository. Please check # the `language` matrix defined below to confirm you have the correct set of # supported CodeQL languages. # name: "CodeQL" on: push: branches: [ master ] pull_request: # The branches below must be a subset of the branches above branches: [ master ] schedule: - cron: '25 14 * * 6' jobs: analyze: name: Analyze runs-on: ubuntu-latest permissions: actions: read contents: read security-events: write strategy: fail-fast: false matrix: language: [ 'go' ] # CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python', 'ruby' ] # Learn more about CodeQL language support at https://git.io/codeql-language-support steps: - name: Checkout repository uses: actions/checkout@v4 # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL uses: github/codeql-action/init@v2 with: languages: ${{ matrix.language }} # If you wish to specify custom queries, you can do so here or in a config file. # By default, queries listed here will override any specified in a config file. # Prefix the list here with "+" to use these queries and those in the config file. # queries: ./path/to/local/query, your-org/your-repo/queries@main # Autobuild attempts to build any compiled languages (C/C++, C#, or Java). # If this step fails, then you should remove it and run the build manually (see below) - name: Autobuild uses: github/codeql-action/autobuild@v2 # โ„น๏ธ Command-line programs to run using the OS shell. # ๐Ÿ“š https://git.io/JvXDl # โœ๏ธ If the Autobuild fails above, remove it and uncomment the following three lines # and modify them (or add more) to build your code if your project # uses a compiled language #- run: | # make bootstrap # make release - name: Perform CodeQL Analysis uses: github/codeql-action/analyze@v2 .github/workflows/release.yml000066400000000000000000000016561453140004500166220ustar00rootroot00000000000000on: workflow_call: inputs: cli-name: required: true type: string name: Release jobs: release: permissions: contents: write runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v4 with: fetch-depth: 0 - name: Get Go version uses: arnested/go-version-action@f3c61952b5f4cc7c74fb216df044634f6a59770f id: go-version - name: Set up Go uses: actions/setup-go@93397bea11091df50f3d7e59dc26a7711a8bcfbe with: go-version: ${{ steps.go-version.outputs.minimal }} - name: Run GoReleaser uses: goreleaser/goreleaser-action@7ec5c2b0c6cdda6e8bbb49444bc797dd33d74dd8 with: distribution: goreleaser version: "v1.7.0" args: release --config ./.goreleaser/${{ inputs.cli-name }}.yml --rm-dist env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} .github/workflows/specification-version-check.yml000066400000000000000000000010071453140004500225460ustar00rootroot00000000000000on: schedule: - cron: "0 13 * * *" workflow_dispatch: name: Specification version check jobs: # Get the latest TUF specification release and open an issue (if needed) specification-bump-check: permissions: contents: read issues: write uses: theupdateframework/specification/.github/workflows/check-latest-spec-version.yml@master with: tuf-version: "v1.0.32" # Should be updated to the according version either manually or extracted automatically as how it's done in python-tuf .github/workflows/tests.yml000066400000000000000000000047051453140004500163420ustar00rootroot00000000000000on: workflow_call: name: Tests jobs: get-go-versions: name: Collect available Go versions runs-on: ubuntu-latest outputs: matrix: ${{ steps.versions.outputs.matrix }} steps: - uses: actions/checkout@v4 - uses: arnested/go-version-action@f3c61952b5f4cc7c74fb216df044634f6a59770f id: versions run: strategy: fail-fast: false # Keep running if one leg fails. matrix: os: [ubuntu-latest, macos-latest, windows-latest] go-version: ${{ fromJSON(needs.get-go-versions.outputs.matrix) }} runs-on: ${{ matrix.os }} needs: get-go-versions steps: - name: Checkout code uses: actions/checkout@v4 - name: Setup - Go ${{ matrix.go-version }} uses: actions/setup-go@93397bea11091df50f3d7e59dc26a7711a8bcfbe with: go-version: ${{ matrix.go-version }} - name: Setup - Python uses: actions/setup-python@65d7f2d534ac1bc67fcd62888c5f4f3d2cb2b236 with: python-version: "3.10" cache: "pip" cache-dependency-path: "requirements-test.txt" - name: Install Python dependencies run: | python3 -m pip install --upgrade pip python3 -m pip install --upgrade -r requirements-test.txt - name: Run tests run: go test -race -covermode atomic -coverprofile='profile.cov' ./... - name: Send coverage uses: shogo82148/actions-goveralls@7b1bd2871942af030d707d6574e5f684f9891fb2 with: path-to-profile: profile.cov flag-name: Go-${{ matrix.go-version }} parallel: true checks: strategy: matrix: go-version: ${{ fromJSON(needs.get-go-versions.outputs.matrix) }} runs-on: ubuntu-latest needs: get-go-versions steps: - uses: actions/setup-go@93397bea11091df50f3d7e59dc26a7711a8bcfbe with: go-version: ${{ matrix.go-version }} - uses: actions/checkout@v4 - name: golangci-lint uses: golangci/golangci-lint-action@3a919529898de77ec3da873e3063ca4b10e7f5cc with: version: v1.51 # has to be pinned and thus manually updated due to https://github.com/golangci/golangci-lint-action/blob/6a290f7d5d488e1e423b0b37fe802c822ca2c08c/README.md?plain=1#L108 args: --timeout 5m --verbose - name: govulncheck uses: golang/govulncheck-action@v1 with: go-version-input: ${{ matrix.go-version }} go-package: -json ./... .gitignore000066400000000000000000000000731453140004500130420ustar00rootroot00000000000000.DS_Store cmd/tuf/tuf cmd/tuf-client/tuf-client .vscode *~ .gitpod.yml000066400000000000000000000005301453140004500131370ustar00rootroot00000000000000# This configuration file was automatically generated by Gitpod. # and adjusted to meet the needs of this project # Learn more from ready-to-use templates: https://www.gitpod.io/docs/introduction/getting-started/quickstart tasks: - init: python -m pip install --upgrade -r requirements-test.txt && go get && go build ./... && go test ./... .golangci.yml000066400000000000000000000002151453140004500134340ustar00rootroot00000000000000linters: disable-all: true enable: - staticcheck - gofmt - govet - gosimple - unused - typecheck - forbidigo .goreleaser/000077500000000000000000000000001453140004500132605ustar00rootroot00000000000000.goreleaser/tuf-client.yml000066400000000000000000000015351453140004500160610ustar00rootroot00000000000000project_name: tuf-client builds: - ldflags: - "-s -w" - "-extldflags=-zrelro" - "-extldflags=-znow" env: - "CGO_ENABLED=0" - "GO111MODULE=on" flags: - -mod=readonly - -trimpath goos: - linux - darwin - windows goarch: - amd64 - arm64 main: ./cmd/tuf-client/ source: enabled: true changelog: use: github groups: - title: "Breaking changes" regexp: "^.*BREAKING CHANGE[(\\w)]*:+.*$" order: 0 - title: Features regexp: "^.*feat[(\\w)]*:+.*$" order: 1 - title: "Bug fixes" regexp: "^.*fix[(\\w)]*:+.*$" order: 2 - title: Others order: 999 release: # If set to auto, will mark the release as not ready for production # in case there is an indicator for this in the tag e.g. v1.0.0-rc1 prerelease: auto .goreleaser/tuf.yml000066400000000000000000000015251453140004500146040ustar00rootroot00000000000000project_name: tuf builds: - ldflags: - "-s -w" - "-extldflags=-zrelro" - "-extldflags=-znow" env: - "CGO_ENABLED=0" - "GO111MODULE=on" flags: - -mod=readonly - -trimpath goos: - linux - darwin - windows goarch: - amd64 - arm64 main: ./cmd/tuf/ source: enabled: true changelog: use: github groups: - title: "Breaking changes" regexp: "^.*(?:BREAKING CHANGE)|![(\\w)]*:+.*$" order: 0 - title: Features regexp: "^.*feat[(\\w)]*:+.*$" order: 1 - title: "Bug fixes" regexp: "^.*fix[(\\w)]*:+.*$" order: 2 - title: Others order: 999 release: # If set to auto, will mark the release as not ready for production # in case there is an indicator for this in the tag e.g. v1.0.0-rc1 prerelease: auto LICENSE000066400000000000000000000027341453140004500120650ustar00rootroot00000000000000Copyright (c) 2014-2020 Prime Directive, Inc. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of Prime Directive, Inc. nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. README.md000066400000000000000000000442271453140004500123420ustar00rootroot00000000000000# go-tuf [![build](https://github.com/theupdateframework/go-tuf/workflows/build/badge.svg)](https://github.com/theupdateframework/go-tuf/actions?query=workflow%3Abuild) [![Coverage Status](https://coveralls.io/repos/github/theupdateframework/go-tuf/badge.svg)](https://coveralls.io/github/theupdateframework/go-tuf) [![PkgGoDev](https://pkg.go.dev/badge/github.com/theupdateframework/go-tuf)](https://pkg.go.dev/github.com/theupdateframework/go-tuf) [![Go Report Card](https://goreportcard.com/badge/github.com/theupdateframework/go-tuf)](https://goreportcard.com/report/github.com/theupdateframework/go-tuf) This is a Go implementation of [The Update Framework (TUF)](http://theupdateframework.com/), a framework for securing software update systems. ## Directory layout A TUF repository has the following directory layout: ```bash . โ”œโ”€โ”€ keys โ”œโ”€โ”€ repository โ”‚ย ย  โ””โ”€โ”€ targets โ””โ”€โ”€ staged ย ย  โ””โ”€โ”€ targets ``` The directories contain the following files: - `keys/` - signing keys (optionally encrypted) with filename pattern `ROLE.json` - `repository/` - signed metadata files - `repository/targets/` - hashed target files - `staged/` - either signed, unsigned or partially signed metadata files - `staged/targets/` - unhashed target files ## CLI `go-tuf` provides a CLI for managing a local TUF repository. ### Install `go-tuf` is tested on Go versions 1.18. ```bash go install github.com/theupdateframework/go-tuf/cmd/tuf@latest ``` ### Commands #### `tuf init [--consistent-snapshot=false]` Initializes a new repository. This is only required if the repository should not generate consistent snapshots (i.e. by passing `--consistent-snapshot=false`). If consistent snapshots should be generated, the repository will be implicitly initialized to do so when generating keys. #### `tuf add-key [--scheme=] [--expires=] [--public-key=] ` Adds a new signing key for the given role. The root metadata file will be staged with the addition of the key's ID to the role's list of key IDs. The public value can be specified as a path or passed in via stdin. #### `tuf gen-key [--expires=] ` Prompts the user for an encryption passphrase (unless the `--insecure-plaintext` flag is set), then generates a new signing key and writes it to the relevant key file in the `keys` directory. It also stages the addition of the new key to the `root` metadata file. Alternatively, passphrases can be set via environment variables in the form of `TUF_{{ROLE}}_PASSPHRASE` #### `tuf revoke-key [--expires=] ` Revoke a signing key The key will be removed from the root metadata file, but the key will remain in the "keys" directory if present. #### `tuf add [...]` Hashes files in the `staged/targets` directory at the given path(s), then updates and stages the `targets` metadata file. Specifying no paths hashes all files in the `staged/targets` directory. #### `tuf remove [...]` Stages the removal of files with the given path(s) from the `targets` metadata file (they get removed from the filesystem when the change is committed). Specifying no paths removes all files from the `targets` metadata file. #### `tuf snapshot [--expires=]` Expects a staged, fully signed `targets` metadata file and stages an appropriate `snapshot` metadata file. Optionally one can set number of days after which the `snapshot` metadata will expire. #### `tuf timestamp [--expires=]` Stages an appropriate `timestamp` metadata file. If a `snapshot` metadata file is staged, it must be fully signed. Optionally one can set number of days after which the timestamp metadata will expire. #### `tuf sign ` Signs the given role's staged metadata file with all keys present in the `keys` directory for that role. #### `tuf commit` Verifies that all staged changes contain the correct information and are signed to the correct threshold, then moves the staged files into the `repository` directory. It also removes any target files which are not in the `targets` metadata file. #### `tuf regenerate [--consistent-snapshot=false]` Note: Not supported yet Recreates the `targets` metadata file based on the files in `repository/targets`. #### `tuf clean` Removes all staged metadata files and targets. #### `tuf root-keys` Outputs a JSON serialized array of root keys to STDOUT. The resulting JSON should be distributed to clients for performing initial updates. #### `tuf set-threshold ` Sets `role`'s threshold (required number of keys for signing) to `threshold`. #### `tuf get-threshold ` Outputs `role`'s threshold (required number of keys for signing). #### `tuf change-passphrase ` Changes the passphrase for given role keys file. The CLI supports reading both the existing and the new passphrase via the following environment variables - `TUF_{{ROLE}}_PASSPHRASE` and respectively `TUF_NEW_{{ROLE}}_PASSPHRASE` #### `tuf payload ` Outputs the metadata file for a role in a ready-to-sign (canonicalized) format. See also `tuf sign-payload` and `tuf add-signatures`. #### `tuf sign-payload --role= ` Sign a file (outside of the TUF repo) using keys (in the TUF keys database, typically produced by `tuf gen-key`) for the given `role` (from the TUF repo). Typically, `path` will be a file containing the output of `tuf payload`. See also `tuf add-signatures`. #### `tuf add-signatures [--signatures ] [--format=] [--key-id=] ` Adds signatures (the output of `tuf sign-payload`) to the given role metadata file. If the signature does not verify, it will not be added. Signature can be a json file or json passed in via `stdin`. #### `tuf status --valid-at ` Check if the role's metadata will be expired on the given date. #### Usage of environment variables The `tuf` CLI supports receiving passphrases via environment variables in the form of `TUF_{{ROLE}}_PASSPHRASE` for existing ones and `TUF_NEW_{{ROLE}}_PASSPHRASE` for setting new ones. For a list of supported commands, run `tuf help` from the command line. ### Examples The following are example workflows for managing a TUF repository with the CLI. The `tree` commands do not need to be run, but their output serve as an illustration of what files should exist after performing certain commands. Although only two machines are referenced (i.e. the "root" and "repo" boxes), the workflows can be trivially extended to many signing machines by copying staged changes and signing on each machine in turn before finally committing. Some key IDs are truncated for illustrative purposes. #### Create signed root metadata file Generate a root key on the root box: ```bash $ tuf gen-key root Enter root keys passphrase: Repeat root keys passphrase: Generated root key with ID 184b133f $ tree . . โ”œโ”€โ”€ keys โ”‚ย ย  โ””โ”€โ”€ root.json โ”œโ”€โ”€ repository โ””โ”€โ”€ staged โ”œโ”€โ”€ root.json โ””โ”€โ”€ targets ``` Copy `staged/root.json` from the root box to the repo box and generate targets, snapshot and timestamp keys: ```bash $ tree . . โ”œโ”€โ”€ keys โ”œโ”€โ”€ repository โ””โ”€โ”€ staged โ”œโ”€โ”€ root.json โ””โ”€โ”€ targets $ tuf gen-key targets Enter targets keys passphrase: Repeat targets keys passphrase: Generated targets key with ID 8cf4810c $ tuf gen-key snapshot Enter snapshot keys passphrase: Repeat snapshot keys passphrase: Generated snapshot key with ID 3e070e53 $ tuf gen-key timestamp Enter timestamp keys passphrase: Repeat timestamp keys passphrase: Generated timestamp key with ID a3768063 $ tree . . โ”œโ”€โ”€ keys โ”‚ย ย  โ”œโ”€โ”€ snapshot.json โ”‚ย ย  โ”œโ”€โ”€ targets.json โ”‚ย ย  โ””โ”€โ”€ timestamp.json โ”œโ”€โ”€ repository โ””โ”€โ”€ staged โ”œโ”€โ”€ root.json โ””โ”€โ”€ targets ``` Copy `staged/root.json` from the repo box back to the root box and sign it: ```bash $ tree . . โ”œโ”€โ”€ keys โ”‚ย ย  โ”œโ”€โ”€ root.json โ”œโ”€โ”€ repository โ””โ”€โ”€ staged โ”œโ”€โ”€ root.json โ””โ”€โ”€ targets $ tuf sign root.json Enter root keys passphrase: ``` The staged `root.json` can now be copied back to the repo box ready to be committed alongside other metadata files. #### Alternate signing flow Instead of manually copying `root.json` into the TUF repository on the root box, you can use the `tuf payload`, `tuf sign-payload`, `tuf add-signatures` flow. On the repo box, get the `root.json` payload in a canonical format: ``` bash $ tuf payload root.json > root.json.payload ``` Copy `root.json.payload` to the root box and sign it: ``` bash $ tuf sign-payload --role=root root.json.payload > root.json.sigs Enter root keys passphrase: ``` Copy `root.json.sigs` back to the repo box and import the signatures: ``` bash $ tuf add-signatures --signatures root.json.sigs root.json ``` This achieves the same state as the above flow for the repo box: ```bash $ tree . . โ”œโ”€โ”€ keys โ”‚ย ย  โ”œโ”€โ”€ snapshot.json โ”‚ย ย  โ”œโ”€โ”€ targets.json โ”‚ย ย  โ””โ”€โ”€ timestamp.json โ”œโ”€โ”€ repository โ””โ”€โ”€ staged โ”œโ”€โ”€ root.json โ””โ”€โ”€ targets ``` #### Add a target file Assuming a staged, signed `root` metadata file and the file to add exists at `staged/targets/foo/bar/baz.txt`: ```bash $ tree . . โ”œโ”€โ”€ keys โ”‚ย ย  โ”œโ”€โ”€ snapshot.json โ”‚ย ย  โ”œโ”€โ”€ targets.json โ”‚ย ย  โ””โ”€โ”€ timestamp.json โ”œโ”€โ”€ repository โ””โ”€โ”€ staged ย ย  โ”œโ”€โ”€ root.json โ””โ”€โ”€ targets โ””โ”€โ”€ foo โ””โ”€โ”€ bar โ””โ”€โ”€ baz.txt $ tuf add foo/bar/baz.txt Enter targets keys passphrase: $ tree . . โ”œโ”€โ”€ keys โ”‚ย ย  โ”œโ”€โ”€ snapshot.json โ”‚ย ย  โ”œโ”€โ”€ targets.json โ”‚ย ย  โ””โ”€โ”€ timestamp.json โ”œโ”€โ”€ repository โ””โ”€โ”€ staged ย ย  โ”œโ”€โ”€ root.json โ”œโ”€โ”€ targets โ”‚ย ย  โ””โ”€โ”€ foo โ”‚ย ย  โ””โ”€โ”€ bar โ”‚ย ย  โ””โ”€โ”€ baz.txt โ””โ”€โ”€ targets.json $ tuf snapshot Enter snapshot keys passphrase: $ tuf timestamp Enter timestamp keys passphrase: $ tree . . โ”œโ”€โ”€ keys โ”‚ย ย  โ”œโ”€โ”€ snapshot.json โ”‚ย ย  โ”œโ”€โ”€ targets.json โ”‚ย ย  โ””โ”€โ”€ timestamp.json โ”œโ”€โ”€ repository โ””โ”€โ”€ staged ย ย  โ”œโ”€โ”€ root.json ย ย  โ”œโ”€โ”€ snapshot.json โ”œโ”€โ”€ targets โ”‚ย ย  โ””โ”€โ”€ foo โ”‚ย ย  โ””โ”€โ”€ bar โ”‚ย ย  โ””โ”€โ”€ baz.txt ย ย  โ”œโ”€โ”€ targets.json ย ย  โ””โ”€โ”€ timestamp.json $ tuf commit $ tree . . โ”œโ”€โ”€ keys โ”‚ย ย  โ”œโ”€โ”€ snapshot.json โ”‚ย ย  โ”œโ”€โ”€ targets.json โ”‚ย ย  โ””โ”€โ”€ timestamp.json โ”œโ”€โ”€ repository โ”‚ย ย  โ”œโ”€โ”€ root.json โ”‚ย ย  โ”œโ”€โ”€ snapshot.json โ”‚ย ย  โ”œโ”€โ”€ targets โ”‚ย ย  โ”‚ย ย  โ””โ”€โ”€ foo โ”‚ย ย  โ”‚ย ย  โ””โ”€โ”€ bar โ”‚ย ย  โ”‚ย ย  โ””โ”€โ”€ baz.txt โ”‚ย ย  โ”œโ”€โ”€ targets.json โ”‚ย ย  โ””โ”€โ”€ timestamp.json โ””โ”€โ”€ staged ``` #### Remove a target file Assuming the file to remove is at `repository/targets/foo/bar/baz.txt`: ```bash $ tree . . โ”œโ”€โ”€ keys โ”‚ย ย  โ”œโ”€โ”€ snapshot.json โ”‚ย ย  โ”œโ”€โ”€ targets.json โ”‚ย ย  โ””โ”€โ”€ timestamp.json โ”œโ”€โ”€ repository โ”‚ย ย  โ”œโ”€โ”€ root.json โ”‚ย ย  โ”œโ”€โ”€ snapshot.json โ”‚ย ย  โ”œโ”€โ”€ targets โ”‚ย ย  โ”‚ย ย  โ””โ”€โ”€ foo โ”‚ย ย  โ”‚ย ย  โ””โ”€โ”€ bar โ”‚ย ย  โ”‚ย ย  โ””โ”€โ”€ baz.txt โ”‚ย ย  โ”œโ”€โ”€ targets.json โ”‚ย ย  โ””โ”€โ”€ timestamp.json โ””โ”€โ”€ staged $ tuf remove foo/bar/baz.txt Enter targets keys passphrase: $ tree . . โ”œโ”€โ”€ keys โ”‚ย ย  โ”œโ”€โ”€ snapshot.json โ”‚ย ย  โ”œโ”€โ”€ targets.json โ”‚ย ย  โ””โ”€โ”€ timestamp.json โ”œโ”€โ”€ repository โ”‚ย ย  โ”œโ”€โ”€ root.json โ”‚ย ย  โ”œโ”€โ”€ snapshot.json โ”‚ย ย  โ”œโ”€โ”€ targets โ”‚ย ย  โ”‚ย ย  โ””โ”€โ”€ foo โ”‚ย ย  โ”‚ย ย  โ””โ”€โ”€ bar โ”‚ย ย  โ”‚ย ย  โ””โ”€โ”€ baz.txt โ”‚ย ย  โ”œโ”€โ”€ targets.json โ”‚ย ย  โ””โ”€โ”€ timestamp.json โ””โ”€โ”€ staged โ””โ”€โ”€ targets.json $ tuf snapshot Enter snapshot keys passphrase: $ tuf timestamp Enter timestamp keys passphrase: $ tree . . โ”œโ”€โ”€ keys โ”‚ย ย  โ”œโ”€โ”€ snapshot.json โ”‚ย ย  โ”œโ”€โ”€ targets.json โ”‚ย ย  โ””โ”€โ”€ timestamp.json โ”œโ”€โ”€ repository โ”‚ย ย  โ”œโ”€โ”€ root.json โ”‚ย ย  โ”œโ”€โ”€ snapshot.json โ”‚ย ย  โ”œโ”€โ”€ targets โ”‚ย ย  โ”‚ย ย  โ””โ”€โ”€ foo โ”‚ย ย  โ”‚ย ย  โ””โ”€โ”€ bar โ”‚ย ย  โ”‚ย ย  โ””โ”€โ”€ baz.txt โ”‚ย ย  โ”œโ”€โ”€ targets.json โ”‚ย ย  โ””โ”€โ”€ timestamp.json โ””โ”€โ”€ staged ย ย  โ”œโ”€โ”€ snapshot.json ย ย  โ”œโ”€โ”€ targets.json ย ย  โ””โ”€โ”€ timestamp.json $ tuf commit $ tree . . โ”œโ”€โ”€ keys โ”‚ย ย  โ”œโ”€โ”€ snapshot.json โ”‚ย ย  โ”œโ”€โ”€ targets.json โ”‚ย ย  โ””โ”€โ”€ timestamp.json โ”œโ”€โ”€ repository โ”‚ย ย  โ”œโ”€โ”€ root.json โ”‚ย ย  โ”œโ”€โ”€ snapshot.json โ”‚ย ย  โ”œโ”€โ”€ targets.json โ”‚ย ย  โ””โ”€โ”€ timestamp.json โ””โ”€โ”€ staged ``` #### Regenerate metadata files based on targets tree (Note: Not supported yet) ```bash $ tree . . โ”œโ”€โ”€ keys โ”‚ย ย  โ”œโ”€โ”€ snapshot.json โ”‚ย ย  โ”œโ”€โ”€ targets.json โ”‚ย ย  โ””โ”€โ”€ timestamp.json โ”œโ”€โ”€ repository โ”‚ย ย  โ”œโ”€โ”€ root.json โ”‚ย ย  โ”œโ”€โ”€ snapshot.json โ”‚ย ย  โ”œโ”€โ”€ targets โ”‚ย ย  โ”‚ย ย  โ””โ”€โ”€ foo โ”‚ย ย  โ”‚ย ย  โ””โ”€โ”€ bar โ”‚ย ย  โ”‚ย ย  โ””โ”€โ”€ baz.txt โ”‚ย ย  โ”œโ”€โ”€ targets.json โ”‚ย ย  โ””โ”€โ”€ timestamp.json โ””โ”€โ”€ staged $ tuf regenerate Enter targets keys passphrase: $ tree . . โ”œโ”€โ”€ keys โ”‚ย ย  โ”œโ”€โ”€ snapshot.json โ”‚ย ย  โ”œโ”€โ”€ targets.json โ”‚ย ย  โ””โ”€โ”€ timestamp.json โ”œโ”€โ”€ repository โ”‚ย ย  โ”œโ”€โ”€ root.json โ”‚ย ย  โ”œโ”€โ”€ snapshot.json โ”‚ย ย  โ”œโ”€โ”€ targets โ”‚ย ย  โ”‚ย ย  โ””โ”€โ”€ foo โ”‚ย ย  โ”‚ย ย  โ””โ”€โ”€ bar โ”‚ย ย  โ”‚ย ย  โ””โ”€โ”€ baz.txt โ”‚ย ย  โ”œโ”€โ”€ targets.json โ”‚ย ย  โ””โ”€โ”€ timestamp.json โ””โ”€โ”€ staged โ””โ”€โ”€ targets.json $ tuf snapshot Enter snapshot keys passphrase: $ tuf timestamp Enter timestamp keys passphrase: $ tree . . โ”œโ”€โ”€ keys โ”‚ย ย  โ”œโ”€โ”€ snapshot.json โ”‚ย ย  โ”œโ”€โ”€ targets.json โ”‚ย ย  โ””โ”€โ”€ timestamp.json โ”œโ”€โ”€ repository โ”‚ย ย  โ”œโ”€โ”€ root.json โ”‚ย ย  โ”œโ”€โ”€ snapshot.json โ”‚ย ย  โ”œโ”€โ”€ targets โ”‚ย ย  โ”‚ย ย  โ””โ”€โ”€ foo โ”‚ย ย  โ”‚ย ย  โ””โ”€โ”€ bar โ”‚ย ย  โ”‚ย ย  โ””โ”€โ”€ baz.txt โ”‚ย ย  โ”œโ”€โ”€ targets.json โ”‚ย ย  โ””โ”€โ”€ timestamp.json โ””โ”€โ”€ staged ย ย  โ”œโ”€โ”€ snapshot.json ย ย  โ”œโ”€โ”€ targets.json ย ย  โ””โ”€โ”€ timestamp.json $ tuf commit $ tree . . โ”œโ”€โ”€ keys โ”‚ย ย  โ”œโ”€โ”€ snapshot.json โ”‚ย ย  โ”œโ”€โ”€ targets.json โ”‚ย ย  โ””โ”€โ”€ timestamp.json โ”œโ”€โ”€ repository โ”‚ย ย  โ”œโ”€โ”€ root.json โ”‚ย ย  โ”œโ”€โ”€ snapshot.json โ”‚ย ย  โ”œโ”€โ”€ targets โ”‚ย ย  โ”‚ย ย  โ””โ”€โ”€ foo โ”‚ย ย  โ”‚ย ย  โ””โ”€โ”€ bar โ”‚ย ย  โ”‚ย ย  โ””โ”€โ”€ baz.txt โ”‚ย ย  โ”œโ”€โ”€ targets.json โ”‚ย ย  โ””โ”€โ”€ timestamp.json โ””โ”€โ”€ staged ``` #### Update timestamp.json ```bash $ tree . . โ”œโ”€โ”€ keys โ”‚ย ย  โ””โ”€โ”€ timestamp.json โ”œโ”€โ”€ repository โ”‚ย ย  โ”œโ”€โ”€ root.json โ”‚ย ย  โ”œโ”€โ”€ snapshot.json โ”‚ย ย  โ”œโ”€โ”€ targets โ”‚ย ย  โ”‚ย ย  โ””โ”€โ”€ foo โ”‚ย ย  โ”‚ย ย  โ””โ”€โ”€ bar โ”‚ย ย  โ”‚ย ย  โ””โ”€โ”€ baz.txt โ”‚ย ย  โ”œโ”€โ”€ targets.json โ”‚ย ย  โ””โ”€โ”€ timestamp.json โ””โ”€โ”€ staged $ tuf timestamp Enter timestamp keys passphrase: $ tree . . โ”œโ”€โ”€ keys โ”‚ย ย  โ””โ”€โ”€ timestamp.json โ”œโ”€โ”€ repository โ”‚ย ย  โ”œโ”€โ”€ root.json โ”‚ย ย  โ”œโ”€โ”€ snapshot.json โ”‚ย ย  โ”œโ”€โ”€ targets โ”‚ย ย  โ”‚ย ย  โ””โ”€โ”€ foo โ”‚ย ย  โ”‚ย ย  โ””โ”€โ”€ bar โ”‚ย ย  โ”‚ย ย  โ””โ”€โ”€ baz.txt โ”‚ย ย  โ”œโ”€โ”€ targets.json โ”‚ย ย  โ””โ”€โ”€ timestamp.json โ””โ”€โ”€ staged โ””โ”€โ”€ timestamp.json $ tuf commit $ tree . . โ”œโ”€โ”€ keys โ”‚ย ย  โ””โ”€โ”€ timestamp.json โ”œโ”€โ”€ repository โ”‚ย ย  โ”œโ”€โ”€ root.json โ”‚ย ย  โ”œโ”€โ”€ snapshot.json โ”‚ย ย  โ”œโ”€โ”€ targets โ”‚ย ย  โ”‚ย ย  โ””โ”€โ”€ foo โ”‚ย ย  โ”‚ย ย  โ””โ”€โ”€ bar โ”‚ย ย  โ”‚ย ย  โ””โ”€โ”€ baz.txt โ”‚ย ย  โ”œโ”€โ”€ targets.json โ”‚ย ย  โ””โ”€โ”€ timestamp.json โ””โ”€โ”€ staged ``` #### Adding a new root key Copy `staged/root.json` to the root box and generate a new root key on the root box: ```bash $ tuf gen-key root $ tuf sign root.json ``` Copy `staged/root.json` from the root box and commit: ```bash $ tuf commit ``` #### Rotating root key(s) Copy `staged/root.json` to the root box to do the rotation, where `abcd` is the keyid of the key that is being replaced: ```bash $ tuf gen-key root $ tuf revoke-key root abcd $ tuf sign root.json ``` Note that `revoke-key` removes the old key from `root.json`, but the key remains in the `keys/` directory on the root box as it is needed to sign the next `root.json`. After this signing is done, the old key may be removed from `keys/`. Any number of keys may be added or revoked during this step, but ensure that at least a threshold of valid keys remain. Copy `staged/root.json` from the root box to commit: ```bash $ tuf commit ``` ## Client For the client package, see https://godoc.org/github.com/theupdateframework/go-tuf/client. For the client CLI, see https://github.com/theupdateframework/go-tuf/tree/master/cmd/tuf-client. ## Contributing and Development For local development, `go-tuf` requires Go version 1.18. The [Python interoperability tests](client/python_interop/) require Python 3 (available as `python` on the `$PATH`) and the [`python-tuf` package](https://github.com/theupdateframework/python-tuf) installed (`pip install tuf`). To update the data for these tests requires Docker and make (see test data [README.md](client/python_interop/testdata/README.md) for details). Please see [CONTRIBUTING.md](docs/CONTRIBUTING.md) for contribution guidelines before making your first contribution! [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/#https://github.com/...) Users wishing to use remote IDEs can also make use of [Gitpod](https://www.gitpod.io/) to make changes to this project. ## Comparison to other implementations There are TUF implementations in a variety of programming languages. Some other Go implementations of TUF include: * [Notary](https://github.com/notaryproject/notary): A version of TUF designed specifically for publishing and managing trusted collections of content. It was used by Docker Content Trust, and has since been superseded by the [Notation](https://github.com/notaryproject/notation) project. In contrast, go-tuf is a direct implementation of TUF and has been updated to conform to 1.0.0 of the TUF specification. client/000077500000000000000000000000001453140004500123305ustar00rootroot00000000000000client/client.go000066400000000000000000001044701453140004500141430ustar00rootroot00000000000000package client import ( "bytes" "encoding/hex" "encoding/json" "errors" "fmt" "io" "github.com/theupdateframework/go-tuf/data" "github.com/theupdateframework/go-tuf/internal/roles" "github.com/theupdateframework/go-tuf/util" "github.com/theupdateframework/go-tuf/verify" ) const ( // This is the upper limit in bytes we will use to limit the download // size of the root/timestamp roles, since we might not don't know how // big it is. defaultRootDownloadLimit = 512000 defaultTimestampDownloadLimit = 16384 defaultMaxDelegations = 32 defaultMaxRootRotations = 1e3 ) // LocalStore is local storage for downloaded top-level metadata. type LocalStore interface { io.Closer // GetMeta returns top-level metadata from local storage. The keys are // in the form `ROLE.json`, with ROLE being a valid top-level role. GetMeta() (map[string]json.RawMessage, error) // SetMeta persists the given top-level metadata in local storage, the // name taking the same format as the keys returned by GetMeta. SetMeta(name string, meta json.RawMessage) error // DeleteMeta deletes a given metadata. DeleteMeta(name string) error } // RemoteStore downloads top-level metadata and target files from a remote // repository. type RemoteStore interface { // GetMeta downloads the given metadata from remote storage. // // `name` is the filename of the metadata (e.g. "root.json") // // `err` is ErrNotFound if the given file does not exist. // // `size` is the size of the stream, -1 indicating an unknown length. GetMeta(name string) (stream io.ReadCloser, size int64, err error) // GetTarget downloads the given target file from remote storage. // // `path` is the path of the file relative to the root of the remote // targets directory (e.g. "/path/to/file.txt"). // // `err` is ErrNotFound if the given file does not exist. // // `size` is the size of the stream, -1 indicating an unknown length. GetTarget(path string) (stream io.ReadCloser, size int64, err error) } // Client provides methods for fetching updates from a remote repository and // downloading remote target files. type Client struct { local LocalStore remote RemoteStore // The following four fields represent the versions of metatdata either // from local storage or from recently downloaded metadata rootVer int64 targetsVer int64 snapshotVer int64 timestampVer int64 // targets is the list of available targets, either from local storage // or from recently downloaded targets metadata targets data.TargetFiles // localMeta is the raw metadata from local storage and is used to // check whether remote metadata is present locally localMeta map[string]json.RawMessage // db is a key DB used for verifying metadata db *verify.DB // consistentSnapshot indicates whether the remote storage is using // consistent snapshots (as specified in root.json) consistentSnapshot bool // MaxDelegations limits by default the number of delegations visited for any // target MaxDelegations int // MaxRootRotations limits the number of downloaded roots in 1.0.19 root updater MaxRootRotations int } func NewClient(local LocalStore, remote RemoteStore) *Client { return &Client{ local: local, remote: remote, MaxDelegations: defaultMaxDelegations, MaxRootRotations: defaultMaxRootRotations, } } // Init initializes a local repository from root metadata. // // The root's keys are extracted from the root and saved in local storage. // Root expiration is not checked. // It is expected that rootJSON was securely distributed with the software // being updated. func (c *Client) Init(rootJSON []byte) error { err := c.loadAndVerifyRootMeta(rootJSON, true /*ignoreExpiredCheck*/) if err != nil { return err } return c.local.SetMeta("root.json", rootJSON) } // Update downloads and verifies remote metadata and returns updated targets. // It always performs root update (5.2 and 5.3) section of the v1.0.19 spec. // // https://theupdateframework.github.io/specification/v1.0.19/index.html#load-trusted-root func (c *Client) Update() (data.TargetFiles, error) { if err := c.UpdateRoots(); err != nil { if _, ok := err.(verify.ErrExpired); ok { // For backward compatibility, we wrap the ErrExpired inside // ErrDecodeFailed. return nil, ErrDecodeFailed{"root.json", err} } return nil, err } // Load trusted metadata files, if any, and verify them against the latest root c.getLocalMeta() // 5.4.1 - Download the timestamp metadata timestampJSON, err := c.downloadMetaUnsafe("timestamp.json", defaultTimestampDownloadLimit) if err != nil { return nil, err } // 5.4.(2,3 and 4) - Verify timestamp against various attacks // Returns the extracted snapshot metadata snapshotMeta, sameTimestampVersion, err := c.decodeTimestamp(timestampJSON) if sameTimestampVersion { // The new timestamp.json file had the same version; we don't need to // update, so bail early. return c.targets, nil } if err != nil { return nil, err } // 5.4.5 - Persist the timestamp metadata if err := c.local.SetMeta("timestamp.json", timestampJSON); err != nil { return nil, err } // 5.5.1 - Download snapshot metadata // 5.5.2 and 5.5.4 - Check against timestamp role's snapshot hash and version snapshotJSON, err := c.downloadMetaFromTimestamp("snapshot.json", snapshotMeta) if err != nil { return nil, err } // 5.5.(3,5 and 6) - Verify snapshot against various attacks // Returns the extracted metadata files snapshotMetas, err := c.decodeSnapshot(snapshotJSON) if err != nil { return nil, err } // 5.5.7 - Persist snapshot metadata if err := c.local.SetMeta("snapshot.json", snapshotJSON); err != nil { return nil, err } // If we don't have the targets.json, download it, determine updated // targets and save targets.json in local storage var updatedTargets data.TargetFiles targetsMeta := snapshotMetas["targets.json"] if !c.hasMetaFromSnapshot("targets.json", targetsMeta) { // 5.6.1 - Download the top-level targets metadata file // 5.6.2 and 5.6.4 - Check against snapshot role's targets hash and version targetsJSON, err := c.downloadMetaFromSnapshot("targets.json", targetsMeta) if err != nil { return nil, err } // 5.6.(3 and 5) - Verify signatures and check against freeze attack updatedTargets, err = c.decodeTargets(targetsJSON) if err != nil { return nil, err } // 5.6.6 - Persist targets metadata if err := c.local.SetMeta("targets.json", targetsJSON); err != nil { return nil, err } } return updatedTargets, nil } func (c *Client) UpdateRoots() error { // https://theupdateframework.github.io/specification/v1.0.19/index.html#load-trusted-root // 5.2 Load the trusted root metadata file. We assume that a good, // trusted copy of this file was shipped with the package manager // or software updater using an out-of-band process. if err := c.loadAndVerifyLocalRootMeta( /*ignoreExpiredCheck=*/ true); err != nil { return err } m, err := c.local.GetMeta() if err != nil { return err } type KeyInfo struct { KeyIDs map[string]bool Threshold int } // Prepare for 5.3.11: If the timestamp and / or snapshot keys have been rotated, // then delete the trusted timestamp and snapshot metadata files. getKeyInfo := func(role string) KeyInfo { keyIDs := make(map[string]bool) for k := range c.db.GetRole(role).KeyIDs { keyIDs[k] = true } return KeyInfo{keyIDs, c.db.GetRole(role).Threshold} } // The nonRootKeyInfo looks like this: // { // "timestamp": {KeyIDs={"KEYID1": true, "KEYID2": true}, Threshold=2}, // "snapshot": {KeyIDs={"KEYID3": true}, Threshold=1}, // "targets": {KeyIDs={"KEYID4": true, "KEYID5": true, "KEYID6": true}, Threshold=1} // } nonRootKeyInfo := map[string]KeyInfo{"timestamp": {}, "snapshot": {}, "targets": {}} for k := range nonRootKeyInfo { nonRootKeyInfo[k] = getKeyInfo(k) } // 5.3.1 Temorarily turn on the consistent snapshots in order to download // versioned root metadata files as described next. consistentSnapshot := c.consistentSnapshot c.consistentSnapshot = true nRootMetadata := m["root.json"] // https://theupdateframework.github.io/specification/v1.0.19/index.html#update-root // 5.3.1 Since it may now be signed using entirely different keys, // the client MUST somehow be able to establish a trusted line of // continuity to the latest set of keys (see ยงโ€ฏ6.1 Key // management and migration). To do so, the client MUST // download intermediate root metadata files, until the // latest available one is reached. Therefore, it MUST // temporarily turn on consistent snapshots in order to // download versioned root metadata files as described next. // This loop returns on error or breaks after downloading the lastest root metadata. // 5.3.2 Let N denote the version number of the trusted root metadata file. for i := 0; i < c.MaxRootRotations; i++ { // 5.3.3 Try downloading version nPlusOne of the root metadata file. // NOTE: as a side effect, we do update c.rootVer to nPlusOne between iterations. nPlusOne := c.rootVer + 1 nPlusOneRootPath := util.VersionedPath("root.json", nPlusOne) nPlusOneRootMetadata, err := c.downloadMetaUnsafe(nPlusOneRootPath, defaultRootDownloadLimit) if err != nil { if _, ok := err.(ErrMissingRemoteMetadata); ok { // stop when the next root can't be downloaded break } return err } // 5.3.4 Check for an arbitrary software attack. // 5.3.4.1 Check that N signed N+1 nPlusOneRootMetadataSigned, err := c.verifyRoot(nRootMetadata, nPlusOneRootMetadata) if err != nil { return err } // 5.3.4.2 check that N+1 signed itself. if _, err := c.verifyRoot(nPlusOneRootMetadata, nPlusOneRootMetadata); err != nil { // 5.3.6 Note that the expiration of the new (intermediate) root // metadata file does not matter yet, because we will check for // it in step 5.3.10. return err } // 5.3.5 Check for a rollback attack. Here, we check that nPlusOneRootMetadataSigned.version == nPlusOne. if nPlusOneRootMetadataSigned.Version != nPlusOne { return verify.ErrWrongVersion{ Given: nPlusOneRootMetadataSigned.Version, Expected: nPlusOne, } } // 5.3.7 Set the trusted root metadata file to the new root metadata file. c.rootVer = nPlusOneRootMetadataSigned.Version // NOTE: following up on 5.3.1, we want to always have consistent snapshots on for the duration // of root rotation. AFTER the rotation is over, we will set it to the value of the last root. consistentSnapshot = nPlusOneRootMetadataSigned.ConsistentSnapshot // 5.3.8 Persist root metadata. The client MUST write the file to non-volatile storage as FILENAME.EXT (e.g. root.json). // NOTE: Internally, setMeta stores metadata in LevelDB in a persistent manner. if err := c.local.SetMeta("root.json", nPlusOneRootMetadata); err != nil { return err } nRootMetadata = nPlusOneRootMetadata // 5.3.9 Repeat steps 5.3.2 to 5.3.9 } // End of the for loop. // 5.3.10 Check for a freeze attack. // NOTE: This will check for any, including freeze, attack. if err := c.loadAndVerifyLocalRootMeta( /*ignoreExpiredCheck=*/ false); err != nil { return err } countDeleted := func(s1 map[string]bool, s2 map[string]bool) int { c := 0 for k := range s1 { if _, ok := s2[k]; !ok { c++ } } return c } // 5.3.11 To recover from fast-forward attack, certain metadata files need // to be deleted if a threshold of keys are revoked. // List of metadata that should be deleted per role if a threshold of keys // are revoked: // (based on the ongoing PR: https://github.com/mnm678/specification/tree/e50151d9df632299ddea364c4f44fe8ca9c10184) // timestamp -> delete timestamp.json // snapshot -> delete timestamp.json and snapshot.json // targets -> delete snapshot.json and targets.json // // nonRootKeyInfo contains the keys and thresholds from root.json // that were on disk before the root update process begins. for topLevelRolename := range nonRootKeyInfo { // ki contains the keys and thresholds from the latest downloaded root.json. ki := getKeyInfo(topLevelRolename) if countDeleted(nonRootKeyInfo[topLevelRolename].KeyIDs, ki.KeyIDs) >= nonRootKeyInfo[topLevelRolename].Threshold { deleteMeta := map[string][]string{ "timestamp": {"timestamp.json"}, "snapshot": {"timestamp.json", "snapshot.json"}, "targets": {"snapshot.json", "targets.json"}, } for _, r := range deleteMeta[topLevelRolename] { c.local.DeleteMeta(r) } } } // 5.3.12 Set whether consistent snapshots are used as per the trusted root metadata file. c.consistentSnapshot = consistentSnapshot return nil } // getLocalMeta decodes and verifies metadata from local storage. // The verification of local files is purely for consistency, if an attacker // has compromised the local storage, there is no guarantee it can be trusted. // Before trying to load the metadata files, it clears the in-memory copy of the local metadata. // This is to insure that all of the loaded metadata files at the end are indeed verified by the latest root. // If some of the metadata files fail to load it will proceed with trying to load the rest, // but still return an error at the end, if such occurred. Otherwise returns nil. func (c *Client) getLocalMeta() error { var retErr error loadFailed := false // Clear the in-memory copy of the local metadata. The goal is to reload and take into account // only the metadata files that are verified by the latest root. Otherwise, their content should // be ignored. c.localMeta = make(map[string]json.RawMessage) // Load the latest root meta if err := c.loadAndVerifyLocalRootMeta( /*ignoreExpiredCheck=*/ false); err != nil { return err } // Load into memory the existing meta, if any, from the local storage meta, err := c.local.GetMeta() if err != nil { return nil } // Verify the top-level metadata (timestamp, snapshot and targets) against the latest root and load it, if okay if timestampJSON, ok := meta["timestamp.json"]; ok { timestamp := &data.Timestamp{} if err := c.db.UnmarshalTrusted(timestampJSON, timestamp, "timestamp"); err != nil { loadFailed = true retErr = err } else { c.localMeta["timestamp.json"] = meta["timestamp.json"] c.timestampVer = timestamp.Version } } snapshot := &data.Snapshot{} if snapshotJSON, ok := meta["snapshot.json"]; ok { if err := c.db.UnmarshalTrusted(snapshotJSON, snapshot, "snapshot"); err != nil { loadFailed = true retErr = err } else { c.localMeta["snapshot.json"] = meta["snapshot.json"] c.snapshotVer = snapshot.Version } } if targetsJSON, ok := meta["targets.json"]; ok { targets := &data.Targets{} if err := c.db.UnmarshalTrusted(targetsJSON, targets, "targets"); err != nil { loadFailed = true retErr = err } else { c.localMeta["targets.json"] = meta["targets.json"] c.targetsVer = targets.Version // FIXME(TUF-0.9) temporarily support files with leading path separators. // c.targets = targets.Targets c.loadTargets(targets.Targets) } } if loadFailed { // If any of the metadata failed to be verified, return the reason for that failure // and fail fast before delegated targets return retErr } // verifiedDelegatedTargets is a set of verified delegated targets verifiedDelegatedTargets := make(map[string]bool) for fileName := range meta { if !verifiedDelegatedTargets[fileName] && roles.IsDelegatedTargetsManifest(fileName) { if delegationPath, err := c.getDelegationPathFromRaw(snapshot, meta[fileName]); err != nil { loadFailed = true retErr = err } else { // Every delegated targets in the path has been verified // as a side effect of getDelegationPathFromRaw for _, key := range delegationPath { fileName := fmt.Sprintf("%s.json", key) verifiedDelegatedTargets[fileName] = true } } } } for fileName := range verifiedDelegatedTargets { c.localMeta[fileName] = meta[fileName] } if loadFailed { // If any of the metadata failed to be verified, return the reason for that failure return retErr } return nil } // getDelegationPathFromRaw verifies a delegated targets against // a given snapshot and returns an error if it's invalid // // Delegation must have targets to get a path, else an empty list // will be returned: this is because the delegation iterator is leveraged. // // Concrete example: // targets // โ””โ”€โ”€ a.json // ย ย โ””โ”€โ”€ b.json // ย ย ย ย ย โ””โ”€โ”€ c.json // ย ย ย ย ย ย ย โ””โ”€โ”€ target_file.txt // // If you try to use that function on "a.json" or "b.json", it'll return an empty list // with no error, as neither of them declare a target file // On the other hand, if you use that function on "c.json", it'll return & verify // [c.json, b.json, a.json]. Running that function on every delegated targets // guarantees that if a delegated targets is in the path of a target file, then it will // appear at least once in the result func (c *Client) getDelegationPathFromRaw(snapshot *data.Snapshot, delegatedTargetsJSON json.RawMessage) ([]string, error) { // unmarshal the delegated targets first without verifying as // we need at least one targets file name to leverage the // getTargetFileMetaDelegationPath method s := &data.Signed{} if err := json.Unmarshal(delegatedTargetsJSON, s); err != nil { return nil, err } targets := &data.Targets{} if err := json.Unmarshal(s.Signed, targets); err != nil { return nil, err } for targetPath := range targets.Targets { // Gets target file from remote store _, resp, err := c.getTargetFileMetaDelegationPath(targetPath, snapshot) // We only need to test one targets file: // - If it is valid, it means the delegated targets has been validated // - If it is not, the delegated targets isn't valid if errors.As(err, &ErrMissingRemoteMetadata{}) { // As this function is used to fill the local store cache, the targets // will be downloaded from the remote store as the local store cache is // empty, meaning that the delegated targets may not exist anymore. In // that case, we can't get the delegation path. Ignore the delegated targets. return nil, nil } if errors.As(err, &ErrUnknownTarget{}) { // As this function is used to fill the local store cache, the target file // will be downloaded from the remote store as the local store cache is // empty, meaning that the target file may not exist anymore. In // that case, ignore the file and try another. continue } return resp, err } return nil, nil } // loadAndVerifyLocalRootMeta decodes and verifies root metadata from // local storage and loads the top-level keys. This method first clears // the DB for top-level keys and then loads the new keys. func (c *Client) loadAndVerifyLocalRootMeta(ignoreExpiredCheck bool) error { meta, err := c.local.GetMeta() if err != nil { return err } rootJSON, ok := meta["root.json"] if !ok { return ErrNoRootKeys } return c.loadAndVerifyRootMeta(rootJSON, ignoreExpiredCheck) } // loadAndVerifyRootMeta decodes and verifies root metadata and loads the top-level keys. // This method first clears the DB for top-level keys and then loads the new keys. func (c *Client) loadAndVerifyRootMeta(rootJSON []byte, ignoreExpiredCheck bool) error { // unmarshal root.json without verifying as we need the root // keys first s := &data.Signed{} if err := json.Unmarshal(rootJSON, s); err != nil { return err } root := &data.Root{} if err := json.Unmarshal(s.Signed, root); err != nil { return err } ndb := verify.NewDB() for id, k := range root.Keys { if err := ndb.AddKey(id, k); err != nil { return err } } for name, role := range root.Roles { if err := ndb.AddRole(name, role); err != nil { return err } } // Any trusted local root metadata version must be greater than 0. if ignoreExpiredCheck { if err := ndb.VerifyIgnoreExpiredCheck(s, "root", 0); err != nil { return err } } else { if err := ndb.Verify(s, "root", 0); err != nil { return err } } c.consistentSnapshot = root.ConsistentSnapshot c.rootVer = root.Version c.db = ndb return nil } // verifyRoot verifies Signed section of the bJSON // using verification keys in aJSON. func (c *Client) verifyRoot(aJSON []byte, bJSON []byte) (*data.Root, error) { aSigned := &data.Signed{} if err := json.Unmarshal(aJSON, aSigned); err != nil { return nil, err } aRoot := &data.Root{} if err := json.Unmarshal(aSigned.Signed, aRoot); err != nil { return nil, err } bSigned := &data.Signed{} if err := json.Unmarshal(bJSON, bSigned); err != nil { return nil, err } bRoot := &data.Root{} if err := json.Unmarshal(bSigned.Signed, bRoot); err != nil { return nil, err } ndb := verify.NewDB() for id, k := range aRoot.Keys { if err := ndb.AddKey(id, k); err != nil { return nil, err } } for name, role := range aRoot.Roles { if err := ndb.AddRole(name, role); err != nil { return nil, err } } if err := ndb.VerifySignatures(bSigned, "root"); err != nil { return nil, err } return bRoot, nil } // FIXME(TUF-0.9) TUF is considering removing support for target files starting // with a leading path separator. In order to be backwards compatible, we'll // just remove leading separators for now. func (c *Client) loadTargets(targets data.TargetFiles) { c.targets = make(data.TargetFiles) for name, meta := range targets { c.targets[name] = meta c.targets[util.NormalizeTarget(name)] = meta } } // downloadMetaUnsafe downloads top-level metadata from remote storage without // verifying it's length and hashes (used for example to download timestamp.json // which has unknown size). It will download at most maxMetaSize bytes. func (c *Client) downloadMetaUnsafe(name string, maxMetaSize int64) ([]byte, error) { r, size, err := c.remote.GetMeta(name) if err != nil { if IsNotFound(err) { return nil, ErrMissingRemoteMetadata{name} } return nil, ErrDownloadFailed{name, err} } defer r.Close() // return ErrMetaTooLarge if the reported size is greater than maxMetaSize if size > maxMetaSize { return nil, ErrMetaTooLarge{name, size, maxMetaSize} } // although the size has been checked above, use a LimitReader in case // the reported size is inaccurate, or size is -1 which indicates an // unknown length return io.ReadAll(io.LimitReader(r, maxMetaSize)) } // remoteGetFunc is the type of function the download method uses to download // remote files type remoteGetFunc func(string) (io.ReadCloser, int64, error) // downloadHashed tries to download the hashed prefixed version of the file. func (c *Client) downloadHashed(file string, get remoteGetFunc, hashes data.Hashes) (io.ReadCloser, int64, error) { // try each hashed path in turn, and either return the contents, // try the next one if a 404 is returned, or return an error for _, path := range util.HashedPaths(file, hashes) { r, size, err := get(path) if err != nil { if IsNotFound(err) { continue } return nil, 0, err } return r, size, nil } return nil, 0, ErrNotFound{file} } // download downloads the given target file from remote storage using the get // function, adding hashes to the path if consistent snapshots are in use func (c *Client) downloadTarget(file string, get remoteGetFunc, hashes data.Hashes) (io.ReadCloser, int64, error) { if c.consistentSnapshot { return c.downloadHashed(file, get, hashes) } else { return get(file) } } // downloadVersionedMeta downloads top-level metadata from remote storage and // verifies it using the given file metadata. func (c *Client) downloadMeta(name string, version int64, m data.FileMeta) ([]byte, error) { r, size, err := func() (io.ReadCloser, int64, error) { if c.consistentSnapshot { path := util.VersionedPath(name, version) r, size, err := c.remote.GetMeta(path) if err == nil { return r, size, nil } return nil, 0, err } else { return c.remote.GetMeta(name) } }() if err != nil { if IsNotFound(err) { return nil, ErrMissingRemoteMetadata{name} } return nil, err } defer r.Close() // return ErrWrongSize if the reported size is known and incorrect var stream io.Reader if m.Length != 0 { if size >= 0 && size != m.Length { return nil, ErrWrongSize{name, size, m.Length} } // wrap the data in a LimitReader so we download at most m.Length bytes stream = io.LimitReader(r, m.Length) } else { stream = r } return io.ReadAll(stream) } func (c *Client) downloadMetaFromSnapshot(name string, m data.SnapshotFileMeta) ([]byte, error) { b, err := c.downloadMeta(name, m.Version, data.FileMeta{Length: m.Length, Hashes: m.Hashes}) if err != nil { return nil, err } // 5.6.2 โ€“ Check length and hashes of fetched bytes *before* parsing metadata if err := util.BytesMatchLenAndHashes(b, m.Length, m.Hashes); err != nil { return nil, ErrDownloadFailed{name, err} } meta, err := util.GenerateSnapshotFileMeta(bytes.NewReader(b), m.Hashes.HashAlgorithms()...) if err != nil { return nil, err } // 5.6.4 - Check against snapshot role's version if err := util.VersionEqual(meta.Version, m.Version); err != nil { return nil, ErrDownloadFailed{name, err} } return b, nil } func (c *Client) downloadMetaFromTimestamp(name string, m data.TimestampFileMeta) ([]byte, error) { b, err := c.downloadMeta(name, m.Version, data.FileMeta{Length: m.Length, Hashes: m.Hashes}) if err != nil { return nil, err } // 5.2.2. โ€“ Check length and hashes of fetched bytes *before* parsing metadata if err := util.BytesMatchLenAndHashes(b, m.Length, m.Hashes); err != nil { return nil, ErrDownloadFailed{name, err} } meta, err := util.GenerateTimestampFileMeta(bytes.NewReader(b), m.Hashes.HashAlgorithms()...) if err != nil { return nil, err } // 5.5.4 - Check against timestamp role's version if err := util.VersionEqual(meta.Version, m.Version); err != nil { return nil, ErrDownloadFailed{name, err} } return b, nil } // decodeSnapshot decodes and verifies snapshot metadata, and returns the new // root and targets file meta. func (c *Client) decodeSnapshot(b json.RawMessage) (data.SnapshotFiles, error) { snapshot := &data.Snapshot{} // 5.5.(3 and 6) - Verify it's signed correctly and it's not expired if err := c.db.Unmarshal(b, snapshot, "snapshot", c.snapshotVer); err != nil { return data.SnapshotFiles{}, ErrDecodeFailed{"snapshot.json", err} } // 5.5.5 - Check for top-level targets rollback attack // Verify explicitly that current targets meta version is less than or equal to the new one if snapshot.Meta["targets.json"].Version < c.targetsVer { return data.SnapshotFiles{}, verify.ErrLowVersion{Actual: snapshot.Meta["targets.json"].Version, Current: c.targetsVer} } // 5.5.5 - Get the local/trusted snapshot metadata, if any, and check all target metafiles against rollback attack // In case the local snapshot metadata was not verified by the keys in the latest root during getLocalMeta(), // snapshot.json won't be present in c.localMeta and thus this check will not be processed. if snapshotJSON, ok := c.localMeta["snapshot.json"]; ok { currentSnapshot := &data.Snapshot{} if err := c.db.UnmarshalTrusted(snapshotJSON, currentSnapshot, "snapshot"); err != nil { return data.SnapshotFiles{}, err } // 5.5.5 - Check for rollback attacks in both top-level and delegated targets roles (note that the Meta object includes both) for path, local := range currentSnapshot.Meta { if newMeta, ok := snapshot.Meta[path]; ok { // 5.5.5 - Check for rollback attack if newMeta.Version < local.Version { return data.SnapshotFiles{}, verify.ErrLowVersion{Actual: newMeta.Version, Current: local.Version} } } else { // 5.5.5 - Abort the update if a target file has been removed from the new snapshot file return data.SnapshotFiles{}, verify.ErrMissingTargetFile } } } // At this point we can trust the new snapshot, the top-level targets, and any delegated targets versions it refers to // so we can update the client's trusted versions and proceed with persisting the new snapshot metadata // c.snapshotVer was already set when we verified the timestamp metadata c.targetsVer = snapshot.Meta["targets.json"].Version return snapshot.Meta, nil } // decodeTargets decodes and verifies targets metadata, sets c.targets and // returns updated targets. func (c *Client) decodeTargets(b json.RawMessage) (data.TargetFiles, error) { targets := &data.Targets{} // 5.6.(3 and 5) - Verify signatures and check against freeze attack if err := c.db.Unmarshal(b, targets, "targets", c.targetsVer); err != nil { return nil, ErrDecodeFailed{"targets.json", err} } // Generate a list with the updated targets updatedTargets := make(data.TargetFiles) for path, meta := range targets.Targets { if local, ok := c.targets[path]; ok { if err := util.TargetFileMetaEqual(local, meta); err == nil { continue } } updatedTargets[path] = meta } // c.targetsVer was already updated when we verified the snapshot metadata // FIXME(TUF-0.9) temporarily support files with leading path separators. // c.targets = targets.Targets c.loadTargets(targets.Targets) return updatedTargets, nil } // decodeTimestamp decodes and verifies timestamp metadata, and returns the // new snapshot file meta and signals whether the update should be aborted early // (the new timestamp has the same version as the old one, so there's no need to // complete the update). func (c *Client) decodeTimestamp(b json.RawMessage) (data.TimestampFileMeta, bool, error) { timestamp := &data.Timestamp{} if err := c.db.Unmarshal(b, timestamp, "timestamp", c.timestampVer); err != nil { return data.TimestampFileMeta{}, false, ErrDecodeFailed{"timestamp.json", err} } // 5.4.3.1 - Check for timestamp rollback attack // We already checked for timestamp.Version < c.timestampVer in the Unmarshal call above. // Here, we're checking for version equality, which indicates that we can abandon this update. if timestamp.Version == c.timestampVer { return data.TimestampFileMeta{}, true, nil } // 5.4.3.2 - Check for snapshot rollback attack // Verify that the current snapshot meta version is less than or equal to the new one if timestamp.Meta["snapshot.json"].Version < c.snapshotVer { return data.TimestampFileMeta{}, false, verify.ErrLowVersion{Actual: timestamp.Meta["snapshot.json"].Version, Current: c.snapshotVer} } // At this point we can trust the new timestamp and the snapshot version it refers to // so we can update the client's trusted versions and proceed with persisting the new timestamp c.timestampVer = timestamp.Version c.snapshotVer = timestamp.Meta["snapshot.json"].Version return timestamp.Meta["snapshot.json"], false, nil } // hasMetaFromSnapshot checks whether local metadata has the given meta func (c *Client) hasMetaFromSnapshot(name string, m data.SnapshotFileMeta) bool { _, ok := c.localMetaFromSnapshot(name, m) return ok } // localMetaFromSnapshot returns localmetadata if it matches the snapshot func (c *Client) localMetaFromSnapshot(name string, m data.SnapshotFileMeta) (json.RawMessage, bool) { b, ok := c.localMeta[name] if !ok { return nil, false } meta, err := util.GenerateSnapshotFileMeta(bytes.NewReader(b), m.Hashes.HashAlgorithms()...) if err != nil { return nil, false } err = util.SnapshotFileMetaEqual(meta, m) return b, err == nil } type Destination interface { io.Writer Delete() error } // Download downloads the given target file from remote storage into dest. // // dest will be deleted and an error returned in the following situations: // // - The target does not exist in the local targets.json // - Failed to fetch the chain of delegations accessible from local snapshot.json // - The target does not exist in any targets // - Metadata cannot be generated for the downloaded data // - Generated metadata does not match local metadata for the given file // - Size of the download does not match if the reported size is known and // incorrect func (c *Client) Download(name string, dest Destination) (err error) { // delete dest if there is an error defer func() { if err != nil { dest.Delete() } }() // populate c.targets from local storage if not set if c.targets == nil { if err := c.getLocalMeta(); err != nil { return err } } normalizedName := util.NormalizeTarget(name) localMeta, ok := c.targets[normalizedName] if !ok { // search in delegations localMeta, err = c.getTargetFileMeta(normalizedName) if err != nil { return err } } // get the data from remote storage r, size, err := c.downloadTarget(normalizedName, c.remote.GetTarget, localMeta.Hashes) if err != nil { return err } defer r.Close() // return ErrWrongSize if the reported size is known and incorrect if size >= 0 && size != localMeta.Length { return ErrWrongSize{name, size, localMeta.Length} } // wrap the data in a LimitReader so we download at most localMeta.Length bytes stream := io.LimitReader(r, localMeta.Length) // read the data, simultaneously writing it to dest and generating metadata actual, err := util.GenerateTargetFileMeta(io.TeeReader(stream, dest), localMeta.HashAlgorithms()...) if err != nil { return ErrDownloadFailed{name, err} } // check the data has the correct length and hashes if err := util.TargetFileMetaEqual(actual, localMeta); err != nil { if e, ok := err.(util.ErrWrongLength); ok { return ErrWrongSize{name, e.Actual, e.Expected} } return ErrDownloadFailed{name, err} } return nil } func (c *Client) VerifyDigest(digest string, digestAlg string, length int64, path string) error { localMeta, ok := c.targets[path] if !ok { return ErrUnknownTarget{Name: path, SnapshotVersion: c.snapshotVer} } actual := data.FileMeta{Length: length, Hashes: make(data.Hashes, 1)} var err error actual.Hashes[digestAlg], err = hex.DecodeString(digest) if err != nil { return err } if err := util.TargetFileMetaEqual(data.TargetFileMeta{FileMeta: actual}, localMeta); err != nil { if e, ok := err.(util.ErrWrongLength); ok { return ErrWrongSize{path, e.Actual, e.Expected} } return ErrDownloadFailed{path, err} } return nil } // Target returns the target metadata for a specific target if it // exists, searching from top-level level targets then through // all delegations. If it does not, ErrNotFound will be returned. func (c *Client) Target(name string) (data.TargetFileMeta, error) { target, err := c.getTargetFileMeta(util.NormalizeTarget(name)) if err == nil { return target, nil } if _, ok := err.(ErrUnknownTarget); ok { return data.TargetFileMeta{}, ErrNotFound{name} } return data.TargetFileMeta{}, err } // Targets returns the complete list of available top-level targets. func (c *Client) Targets() (data.TargetFiles, error) { // populate c.targets from local storage if not set if c.targets == nil { if err := c.getLocalMeta(); err != nil { return nil, err } } return c.targets, nil } client/client_test.go000066400000000000000000001501741453140004500152040ustar00rootroot00000000000000package client import ( "bytes" "crypto/ed25519" "crypto/sha256" "encoding/hex" "encoding/json" "errors" "fmt" "io" "net" "net/http" "os" "path/filepath" "testing" "time" "github.com/secure-systems-lab/go-securesystemslib/cjson" "github.com/stretchr/testify/assert" tuf "github.com/theupdateframework/go-tuf" "github.com/theupdateframework/go-tuf/data" "github.com/theupdateframework/go-tuf/internal/sets" "github.com/theupdateframework/go-tuf/pkg/keys" "github.com/theupdateframework/go-tuf/sign" "github.com/theupdateframework/go-tuf/util" "github.com/theupdateframework/go-tuf/verify" . "gopkg.in/check.v1" ) // Hook up gocheck into the "go test" runner. func Test(t *testing.T) { TestingT(t) } type ClientSuite struct { store tuf.LocalStore repo *tuf.Repo local LocalStore remote RemoteStore expiredTime time.Time keyIDs map[string][]string useFileStore bool // Only used with FileStore tmpDir string } var _ = Suite(&ClientSuite{useFileStore: false}) var _ = Suite(&ClientSuite{useFileStore: true}) func newFakeRemoteStore() *fakeRemoteStore { return &fakeRemoteStore{ meta: make(map[string]*fakeFile), targets: make(map[string]*fakeFile), } } type fakeRemoteStore struct { meta map[string]*fakeFile targets map[string]*fakeFile } func (f *fakeRemoteStore) GetMeta(name string) (io.ReadCloser, int64, error) { return f.get(name, f.meta) } func (f *fakeRemoteStore) GetTarget(path string) (io.ReadCloser, int64, error) { return f.get(path, f.targets) } func (f *fakeRemoteStore) get(name string, store map[string]*fakeFile) (io.ReadCloser, int64, error) { file, ok := store[name] if !ok { return nil, 0, ErrNotFound{name} } return file, file.size, nil } // These are helper methods for manipulating the internals of the Stores // because the set/delete methods are not part of the Interface, we need to // switch on the underlying implementation. // Also readMeta method is convenience for ease of testing. func (s *ClientSuite) setRemoteMeta(path string, data []byte) error { switch impl := s.remote.(type) { case *fakeRemoteStore: impl.meta[path] = newFakeFile(data) return nil case *FileRemoteStore: return impl.addMeta(path, data) default: return fmt.Errorf("non-supoprted RemoteStore, got %+v", impl) } } func (s *ClientSuite) setRemoteTarget(path string, data []byte) error { switch impl := s.remote.(type) { case *fakeRemoteStore: impl.targets[path] = newFakeFile(data) return nil case *FileRemoteStore: return impl.addTarget(path, data) default: return fmt.Errorf("non-supoprted RemoteStore, got %+v", impl) } } func (s *ClientSuite) deleteMeta(path string) error { switch impl := s.remote.(type) { case *fakeRemoteStore: delete(impl.meta, path) return nil case *FileRemoteStore: return impl.deleteMeta(path) default: return fmt.Errorf("non-supported RemoteStore, got %+v", impl) } } func (s *ClientSuite) deleteTarget(path string) error { switch impl := s.remote.(type) { case *fakeRemoteStore: delete(impl.targets, path) return nil case *FileRemoteStore: return impl.deleteTarget(path) default: return fmt.Errorf("non-supported RemoteStore, got %+v", impl) } } func (s *ClientSuite) readMeta(name string) ([]byte, error) { stream, _, err := s.remote.GetMeta(name) if err != nil { return nil, err } return io.ReadAll(stream) } func newFakeFile(b []byte) *fakeFile { return &fakeFile{buf: bytes.NewReader(b), size: int64(len(b))} } type fakeFile struct { buf *bytes.Reader bytesRead int size int64 } func (f *fakeFile) Read(p []byte) (int, error) { n, err := f.buf.Read(p) f.bytesRead += n return n, err } func (f *fakeFile) Close() error { f.buf.Seek(0, io.SeekStart) return nil } var targetFiles = map[string][]byte{ "foo.txt": []byte("foo"), "bar.txt": []byte("bar"), "baz.txt": []byte("baz"), } func (s *ClientSuite) SetUpTest(c *C) { s.store = tuf.MemoryStore(nil, targetFiles) // create a valid repo containing foo.txt var err error s.repo, err = tuf.NewRepo(s.store) c.Assert(err, IsNil) // don't use consistent snapshots to make testing easier (consistent // snapshots are tested explicitly elsewhere) c.Assert(s.repo.Init(false), IsNil) s.keyIDs = map[string][]string{ "root": s.genKey(c, "root"), "targets": s.genKey(c, "targets"), "snapshot": s.genKey(c, "snapshot"), "timestamp": s.genKey(c, "timestamp"), } c.Assert(s.repo.AddTarget("foo.txt", nil), IsNil) c.Assert(s.repo.Snapshot(), IsNil) c.Assert(s.repo.Timestamp(), IsNil) c.Assert(s.repo.Commit(), IsNil) // create a remote store containing valid repo files if s.useFileStore { s.remote, s.tmpDir, err = newTestFileStoreFS() if err != nil { c.Fatalf("failed to create new FileStore: %v", err) } } else { s.remote = newFakeRemoteStore() } s.syncRemote(c) for path, data := range targetFiles { s.setRemoteTarget(path, data) } s.expiredTime = time.Now().Add(time.Hour) } func (s *ClientSuite) TearDownTest(c *C) { if s.tmpDir != "" { rmrf(s.tmpDir, c.Logf) } } func (s *ClientSuite) genKey(c *C, role string) []string { ids, err := s.repo.GenKey(role) c.Assert(err, IsNil) return ids } func (s *ClientSuite) genKeyExpired(c *C, role string) []string { ids, err := s.repo.GenKeyWithExpires(role, s.expiredTime) c.Assert(err, IsNil) return ids } // withMetaExpired sets signed.IsExpired throughout the invocation of f so that // any metadata marked to expire at s.expiredTime will be expired (this avoids // the need to sleep in the tests). func (s *ClientSuite) withMetaExpired(f func()) { e := verify.IsExpired defer func() { verify.IsExpired = e }() verify.IsExpired = func(t time.Time) bool { return t.Unix() == s.expiredTime.Round(time.Second).Unix() } f() } func (s *ClientSuite) syncLocal(c *C) { meta, err := s.store.GetMeta() c.Assert(err, IsNil) for k, v := range meta { c.Assert(s.local.SetMeta(k, v), IsNil) } } func (s *ClientSuite) syncRemote(c *C) { meta, err := s.store.GetMeta() c.Assert(err, IsNil) for name, data := range meta { if err := s.setRemoteMeta(name, data); err != nil { panic(fmt.Sprintf("setMetadata failed: %v", err)) } } } func (s *ClientSuite) addRemoteTarget(c *C, name string) { c.Assert(s.repo.AddTarget(name, nil), IsNil) c.Assert(s.repo.Snapshot(), IsNil) c.Assert(s.repo.Timestamp(), IsNil) c.Assert(s.repo.Commit(), IsNil) s.syncRemote(c) } func (s *ClientSuite) rootMeta(c *C) []byte { meta, err := s.repo.GetMeta() c.Assert(err, IsNil) rootMeta, ok := meta["root.json"] c.Assert(ok, Equals, true) return rootMeta } func (s *ClientSuite) newClient(c *C) *Client { s.local = MemoryLocalStore() client := NewClient(s.local, s.remote) c.Assert(client.Init(s.rootMeta(c)), IsNil) return client } func (s *ClientSuite) updatedClient(c *C) *Client { client := s.newClient(c) _, err := client.Update() c.Assert(err, IsNil) return client } func assertFile(c *C, file data.TargetFileMeta, name string) { target, ok := targetFiles[name] if !ok { c.Fatalf("unknown target %s", name) } meta, err := util.GenerateTargetFileMeta(bytes.NewReader(target), file.HashAlgorithms()...) c.Assert(err, IsNil) c.Assert(util.TargetFileMetaEqual(file, meta), IsNil) } func assertFiles(c *C, files data.TargetFiles, names []string) { c.Assert(files, HasLen, len(names)) for _, name := range names { file, ok := files[name] if !ok { c.Fatalf("expected files to contain %s", name) } assertFile(c, file, name) } } func assertWrongHash(c *C, err error) { // just test the type of err rather using DeepEquals as it contains // hashes we don't necessarily need to check. e, ok := err.(ErrDownloadFailed) if !ok { c.Fatalf("expected err to have type ErrDownloadFailed, got %T", err) } if _, ok := e.Err.(util.ErrWrongHash); !ok { c.Fatalf("expected err.Err to have type util.ErrWrongHash, got %T", err) } } func (s *ClientSuite) assertErrExpired(c *C, err error, file string) { decodeErr, ok := err.(ErrDecodeFailed) if !ok { c.Fatalf("expected err to have type ErrDecodeFailed, got %T", err) } c.Assert(decodeErr.File, Equals, file) expiredErr, ok := decodeErr.Err.(verify.ErrExpired) if !ok { c.Fatalf("expected err.Err to have type signed.ErrExpired, got %T", err) } c.Assert(expiredErr.Expired.Unix(), Equals, s.expiredTime.Round(time.Second).Unix()) } func (s *ClientSuite) TestInitAllowsExpired(c *C) { s.genKeyExpired(c, "targets") c.Assert(s.repo.Snapshot(), IsNil) c.Assert(s.repo.Timestamp(), IsNil) c.Assert(s.repo.Commit(), IsNil) s.syncRemote(c) client := NewClient(MemoryLocalStore(), s.remote) bytes, err := s.readMeta("root.json") c.Assert(err, IsNil) s.withMetaExpired(func() { c.Assert(client.Init(bytes), IsNil) }) } func (s *ClientSuite) TestInit(c *C) { client := NewClient(MemoryLocalStore(), s.remote) bytes, err := s.readMeta("root.json") c.Assert(err, IsNil) dataSigned := &data.Signed{} c.Assert(json.Unmarshal(bytes, dataSigned), IsNil) root := &data.Root{} c.Assert(json.Unmarshal(dataSigned.Signed, root), IsNil) // check Update() returns ErrNoRootKeys when uninitialized _, err = client.Update() c.Assert(err, Equals, ErrNoRootKeys) // check Init() returns ErrRoleThreshold when the root's signature is // invalid // modify root and marshal without regenerating signatures root.Version = root.Version + 1 rootBytes, err := json.Marshal(root) c.Assert(err, IsNil) dataSigned.Signed = rootBytes dataBytes, err := json.Marshal(dataSigned) c.Assert(err, IsNil) c.Assert(client.Init(dataBytes), Equals, verify.ErrRoleThreshold{ Expected: 1, Actual: 0}) // check Update() does not return ErrNoRootKeys after initialization c.Assert(client.Init(bytes), IsNil) _, err = client.Update() c.Assert(err, IsNil) } // This is a regression test for https://github.com/theupdateframework/go-tuf/issues/370 // where a single invalid signature resulted in an early return. // Instead, the client should have continued and counted the number // of valid signatures, ignoring the incorrect one. func (s *ClientSuite) TestExtraRootSignaturesOnInit(c *C) { client := NewClient(MemoryLocalStore(), s.remote) bytes, err := s.readMeta("root.json") c.Assert(err, IsNil) dataSigned := &data.Signed{} c.Assert(json.Unmarshal(bytes, dataSigned), IsNil) // check Init() succeeds when an extra invalid signature was // added to the root. dataSigned.Signatures = append(dataSigned.Signatures, data.Signature{ KeyID: dataSigned.Signatures[0].KeyID, Signature: make([]byte, ed25519.SignatureSize), }) dataBytes, err := json.Marshal(dataSigned) c.Assert(err, IsNil) c.Assert(client.Init(dataBytes), IsNil) } func (s *ClientSuite) TestFirstUpdate(c *C) { files, err := s.newClient(c).Update() c.Assert(err, IsNil) c.Assert(files, HasLen, 1) assertFiles(c, files, []string{"foo.txt"}) } func (s *ClientSuite) TestMissingRemoteMetadata(c *C) { client := s.newClient(c) s.deleteMeta("targets.json") _, err := client.Update() c.Assert(err, Equals, ErrMissingRemoteMetadata{"targets.json"}) s.deleteMeta("timestamp.json") _, err = client.Update() c.Assert(err, Equals, ErrMissingRemoteMetadata{"timestamp.json"}) } func (s *ClientSuite) TestNoChangeUpdate(c *C) { client := s.newClient(c) _, err := client.Update() c.Assert(err, IsNil) _, err = client.Update() c.Assert(err, IsNil) } func (s *ClientSuite) TestNewTimestamp(c *C) { client := s.updatedClient(c) version := client.timestampVer c.Assert(version > 0, Equals, true) c.Assert(s.repo.Timestamp(), IsNil) s.syncRemote(c) _, err := client.Update() c.Assert(err, IsNil) c.Assert(client.timestampVer > version, Equals, true) } func (s *ClientSuite) TestNewRoot(c *C) { client := s.newClient(c) // replace all keys newKeyIDs := make(map[string][]string) for role, ids := range s.keyIDs { c.Assert(len(ids) > 0, Equals, true) c.Assert(s.repo.RevokeKey(role, ids[0]), IsNil) newKeyIDs[role] = s.genKey(c, role) } // update metadata c.Assert(s.repo.Sign("targets.json"), IsNil) c.Assert(s.repo.Snapshot(), IsNil) c.Assert(s.repo.Timestamp(), IsNil) c.Assert(s.repo.Commit(), IsNil) s.syncRemote(c) // check update gets new root version c.Assert(client.getLocalMeta(), IsNil) version := client.rootVer c.Assert(version > 0, Equals, true) _, err := client.Update() c.Assert(err, IsNil) c.Assert(client.rootVer > version, Equals, true) // check old keys are not in db for _, ids := range s.keyIDs { c.Assert(len(ids) > 0, Equals, true) for _, id := range ids { _, err := client.db.GetVerifier(id) c.Assert(err, NotNil) } } // check new keys are in db for name, ids := range newKeyIDs { c.Assert(len(ids) > 0, Equals, true) for _, id := range ids { verifier, err := client.db.GetVerifier(id) c.Assert(err, IsNil) c.Assert(verifier.MarshalPublicKey().IDs(), DeepEquals, ids) } role := client.db.GetRole(name) c.Assert(role, NotNil) c.Assert(role.KeyIDs, DeepEquals, sets.StringSliceToSet(ids)) } } // This is a regression test for https://github.com/theupdateframework/go-tuf/issues/370 // where a single invalid signature resulted in an early return. // Instead, the client should have continued and counted the number // of valid signatures, ignoring the incorrect one. func (s *ClientSuite) TestExtraSignaturesOnRootUpdate(c *C) { client := s.newClient(c) // Add an extra root key to update the root to a new version. s.genKey(c, "root") // update metadata c.Assert(s.repo.Sign("targets.json"), IsNil) c.Assert(s.repo.Snapshot(), IsNil) c.Assert(s.repo.Timestamp(), IsNil) c.Assert(s.repo.Commit(), IsNil) s.syncRemote(c) // Add an extra signature to the new remote root. bytes, err := s.readMeta("root.json") c.Assert(err, IsNil) dataSigned := &data.Signed{} c.Assert(json.Unmarshal(bytes, dataSigned), IsNil) dataSigned.Signatures = append(dataSigned.Signatures, data.Signature{ KeyID: dataSigned.Signatures[0].KeyID, Signature: make([]byte, ed25519.SignatureSize), }) dataBytes, err := json.Marshal(dataSigned) c.Assert(err, IsNil) s.setRemoteMeta("root.json", dataBytes) s.setRemoteMeta("2.root.json", dataBytes) // check Update() succeeds when an extra invalid signature was // added to the root. _, err = client.Update() c.Assert(err, IsNil) c.Assert(client.rootVer, Equals, int64(2)) } // startTUFRepoServer starts a HTTP server to serve a TUF Repo. func startTUFRepoServer(baseDir string, relPath string) (net.Listener, error) { serverDir := filepath.Join(baseDir, relPath) l, err := net.Listen("tcp", "127.0.0.1:0") go http.Serve(l, http.FileServer(http.Dir(serverDir))) return l, err } // newClientWithMeta creates new client and sets the root metadata for it. func newClientWithMeta(baseDir string, relPath string, serverAddr string) (*Client, error) { initialStateDir := filepath.Join(baseDir, relPath) opts := &HTTPRemoteOptions{ MetadataPath: "metadata", TargetsPath: "targets", } remote, err := HTTPRemoteStore(fmt.Sprintf("http://%s/", serverAddr), opts, nil) if err != nil { return nil, err } c := NewClient(MemoryLocalStore(), remote) for _, m := range []string{"root.json", "snapshot.json", "timestamp.json", "targets.json"} { if _, err := os.Stat(initialStateDir + "/" + m); err == nil { metadataJSON, err := os.ReadFile(initialStateDir + "/" + m) if err != nil { return nil, err } c.local.SetMeta(m, metadataJSON) } } return c, nil } func initRootTest(c *C, baseDir string) (*Client, func() error) { l, err := startTUFRepoServer(baseDir, "server") c.Assert(err, IsNil) tufClient, err := newClientWithMeta(baseDir, "client/metadata/current", l.Addr().String()) c.Assert(err, IsNil) return tufClient, l.Close } func (s *ClientSuite) TestUpdateRoots(c *C) { var tests = []struct { fixturePath string expectedError error expectedVersions map[string]int64 }{ // Succeeds when there is no root update. {"testdata/Published1Time", nil, map[string]int64{"root": 1, "timestamp": 1, "snapshot": 1, "targets": 1}}, // Succeeds when client only has root.json {"testdata/Published1Time_client_root_only", nil, map[string]int64{"root": 1, "timestamp": 1, "snapshot": 1, "targets": 1}}, // Succeeds updating root from version 1 to version 2. {"testdata/Published2Times_keyrotated", nil, map[string]int64{"root": 2, "timestamp": 1, "snapshot": 1, "targets": 1}}, // Succeeds updating root from version 1 to version 2 when the client's initial root version is expired. {"testdata/Published2Times_keyrotated_initialrootexpired", nil, map[string]int64{"root": 2, "timestamp": 1, "snapshot": 1, "targets": 1}}, // Succeeds updating root from version 1 to version 3 when versions 1 and 2 are expired. {"testdata/Published3Times_keyrotated_initialrootsexpired", nil, map[string]int64{"root": 3, "timestamp": 1, "snapshot": 1, "targets": 1}}, // Succeeds updating root from version 2 to version 3. {"testdata/Published3Times_keyrotated_initialrootsexpired_clientversionis2", nil, map[string]int64{"root": 3, "timestamp": 1, "snapshot": 1, "targets": 1}}, // Fails updating root from version 1 to version 3 when versions 1 and 3 are expired but version 2 is not expired. {"testdata/Published3Times_keyrotated_latestrootexpired", ErrDecodeFailed{File: "root.json", Err: verify.ErrExpired{}}, map[string]int64{"root": 2, "timestamp": 1, "snapshot": 1, "targets": 1}}, // Fails updating root from version 1 to version 2 when old root 1 did not sign off on it (nth root didn't sign off n+1). // TODO(asraa): This testcase should have revoked the old key! // https://github.com/theupdateframework/go-tuf/issues/417 {"testdata/Published2Times_keyrotated_invalidOldRootSignature", nil, map[string]int64{}}, // Fails updating root from version 1 to version 2 when the new root 2 did not sign itself (n+1th root didn't sign off n+1) {"testdata/Published2Times_keyrotated_invalidNewRootSignature", verify.ErrRoleThreshold{Expected: 1, Actual: 0}, map[string]int64{}}, // Fails updating root to 2.root.json when the value of the version field inside it is 1 (rollback attack prevention). {"testdata/Published1Time_backwardRootVersion", verify.ErrWrongVersion(verify.ErrWrongVersion{Given: 1, Expected: 2}), map[string]int64{}}, // Fails updating root to 2.root.json when the value of the version field inside it is 3 (rollforward attack prevention). {"testdata/Published3Times_keyrotated_forwardRootVersion", verify.ErrWrongVersion(verify.ErrWrongVersion{Given: 3, Expected: 2}), map[string]int64{}}, // Fails updating when there is no local trusted root. {"testdata/Published1Time_client_no_root", errors.New("tuf: no root keys found in local meta store"), map[string]int64{}}, // snapshot role key rotation increase the snapshot and timestamp. {"testdata/Published2Times_snapshot_keyrotated", nil, map[string]int64{"root": 2, "timestamp": 2, "snapshot": 2, "targets": 1}}, // targets role key rotation increase the snapshot, timestamp, and targets. {"testdata/Published2Times_targets_keyrotated", nil, map[string]int64{"root": 2, "timestamp": 2, "snapshot": 2, "targets": 2}}, // timestamp role key rotation increase the timestamp. {"testdata/Published2Times_timestamp_keyrotated", nil, map[string]int64{"root": 2, "timestamp": 2, "snapshot": 1, "targets": 1}}, //root file size > defaultRootDownloadLimit {"testdata/Published2Times_roottoolarge", ErrMetaTooLarge{Name: "2.root.json", Size: defaultRootDownloadLimit + 1, MaxSize: defaultRootDownloadLimit}, map[string]int64{}}, } for _, test := range tests { tufClient, closer := initRootTest(c, test.fixturePath) _, err := tufClient.Update() if test.expectedError == nil { c.Assert(err, IsNil) // Check if the root.json is being saved in non-volatile storage. tufClient.getLocalMeta() versionMethods := map[string]int64{"root": tufClient.rootVer, "timestamp": tufClient.timestampVer, "snapshot": tufClient.snapshotVer, "targets": tufClient.targetsVer} for m, v := range test.expectedVersions { assert.Equal(c, v, versionMethods[m]) } } else { // For backward compatibility, the update root returns // ErrDecodeFailed that wraps the verify.ErrExpired. if _, ok := test.expectedError.(ErrDecodeFailed); ok { decodeErr, ok := err.(ErrDecodeFailed) c.Assert(ok, Equals, true) c.Assert(decodeErr.File, Equals, "root.json") _, ok = decodeErr.Err.(verify.ErrExpired) c.Assert(ok, Equals, true) } else { assert.Equal(c, test.expectedError, err) } } closer() } } func (s *ClientSuite) TestFastForwardAttackRecovery(c *C) { var tests = []struct { fixturePath string expectMetaDeleted map[string]bool }{ // Each of the following test cases each has a two sets of TUF metadata: // (1) client's initial, and (2) server's current. // The naming format is PublishedTwiceMultiKeysadd_X_revoke_Y_threshold_Z_ROLE // The client includes TUF metadata before key rotation for TUF ROLE with X keys. // The server includes updated TUF metadata after key rotation. The // rotation involves revoking Y keys from the initial keys. // For each test, the TUF client's will be initialized to the client files. // The test checks whether the client is able to update itself properly. // Fast-forward recovery is not needed if less than threshold keys are revoked. {"testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_root", map[string]bool{"root.json": false, "timestamp.json": false, "snapshot.json": false, "targets.json": false}}, {"testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_snapshot", map[string]bool{"root.json": false, "timestamp.json": false, "snapshot.json": false, "targets.json": false}}, {"testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_targets", map[string]bool{"root.json": false, "timestamp.json": false, "snapshot.json": false, "targets.json": false}}, {"testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_timestamp", map[string]bool{"root.json": false, "timestamp.json": false, "snapshot.json": false, "targets.json": false}}, // Fast-forward recovery not needed if root keys are revoked, even when the threshold number of root keys are revoked. {"testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_root", map[string]bool{"root.json": false, "timestamp.json": false, "snapshot.json": false, "targets.json": false}}, // Delete snapshot and timestamp metadata if a threshold number of snapshot keys are revoked. {"testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_snapshot", map[string]bool{"root.json": false, "timestamp.json": true, "snapshot.json": true, "targets.json": false}}, // Delete targets and snapshot metadata if a threshold number of targets keys are revoked. {"testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_targets", map[string]bool{"root.json": false, "timestamp.json": false, "snapshot.json": true, "targets.json": true}}, // Delete timestamp metadata if a threshold number of timestamp keys are revoked. {"testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_timestamp", map[string]bool{"root.json": false, "timestamp.json": true, "snapshot.json": false, "targets.json": false}}, } for _, test := range tests { tufClient, closer := initRootTest(c, test.fixturePath) c.Assert(tufClient.UpdateRoots(), IsNil) m, err := tufClient.local.GetMeta() c.Assert(err, IsNil) for md, deleted := range test.expectMetaDeleted { if deleted { if _, ok := m[md]; ok { c.Fatalf("Metadata %s is not deleted!", md) } } else { if _, ok := m[md]; !ok { c.Fatalf("Metadata %s deleted!", md) } } } closer() } } func (s *ClientSuite) TestUpdateRace(c *C) { // Tests race condition for the client update. You need to run the test with -race flag: // go test -race for i := 0; i < 2; i++ { go func() { c := NewClient(MemoryLocalStore(), newFakeRemoteStore()) c.Update() }() } } func (s *ClientSuite) TestNewTargets(c *C) { client := s.newClient(c) files, err := client.Update() c.Assert(err, IsNil) assertFiles(c, files, []string{"foo.txt"}) s.addRemoteTarget(c, "bar.txt") s.addRemoteTarget(c, "baz.txt") files, err = client.Update() c.Assert(err, IsNil) assertFiles(c, files, []string{"bar.txt", "baz.txt"}) // Adding the same exact file should not lead to an update s.addRemoteTarget(c, "bar.txt") files, err = client.Update() c.Assert(err, IsNil) c.Assert(files, HasLen, 0) } func (s *ClientSuite) TestNewTimestampKey(c *C) { client := s.newClient(c) // replace key oldIDs := s.keyIDs["timestamp"] c.Assert(s.repo.RevokeKey("timestamp", oldIDs[0]), IsNil) newIDs := s.genKey(c, "timestamp") // generate new snapshot (because root has changed) and timestamp c.Assert(s.repo.Snapshot(), IsNil) c.Assert(s.repo.Timestamp(), IsNil) c.Assert(s.repo.Commit(), IsNil) s.syncRemote(c) // check update gets new root and timestamp c.Assert(client.getLocalMeta(), IsNil) rootVer := client.rootVer timestampVer := client.timestampVer _, err := client.Update() c.Assert(err, IsNil) c.Assert(client.rootVer > rootVer, Equals, true) c.Assert(client.timestampVer > timestampVer, Equals, true) // check key has been replaced in db for _, oldID := range oldIDs { _, err := client.db.GetVerifier(oldID) c.Assert(err, NotNil) } for _, newID := range newIDs { verifier, err := client.db.GetVerifier(newID) c.Assert(err, IsNil) c.Assert(verifier.MarshalPublicKey().IDs(), DeepEquals, newIDs) } role := client.db.GetRole("timestamp") c.Assert(role, NotNil) c.Assert(role.KeyIDs, DeepEquals, sets.StringSliceToSet(newIDs)) } func (s *ClientSuite) TestNewSnapshotKey(c *C) { client := s.newClient(c) // replace key oldIDs := s.keyIDs["snapshot"] c.Assert(s.repo.RevokeKey("snapshot", oldIDs[0]), IsNil) newIDs := s.genKey(c, "snapshot") // generate new snapshot and timestamp c.Assert(s.repo.Snapshot(), IsNil) c.Assert(s.repo.Timestamp(), IsNil) c.Assert(s.repo.Commit(), IsNil) s.syncRemote(c) // check update gets new root, snapshot and timestamp c.Assert(client.getLocalMeta(), IsNil) rootVer := client.rootVer snapshotVer := client.snapshotVer timestampVer := client.timestampVer _, err := client.Update() c.Assert(err, IsNil) c.Assert(client.rootVer > rootVer, Equals, true) c.Assert(client.snapshotVer > snapshotVer, Equals, true) c.Assert(client.timestampVer > timestampVer, Equals, true) // check key has been replaced in db for _, oldID := range oldIDs { _, err := client.db.GetVerifier(oldID) c.Assert(err, NotNil) } for _, newID := range newIDs { verifier, err := client.db.GetVerifier(newID) c.Assert(err, IsNil) c.Assert(verifier.MarshalPublicKey().IDs(), DeepEquals, newIDs) } role := client.db.GetRole("snapshot") c.Assert(role, NotNil) c.Assert(role.KeyIDs, DeepEquals, sets.StringSliceToSet(newIDs)) } func (s *ClientSuite) TestNewTargetsKey(c *C) { client := s.newClient(c) // replace key oldIDs := s.keyIDs["targets"] c.Assert(s.repo.RevokeKey("targets", oldIDs[0]), IsNil) newIDs := s.genKey(c, "targets") // re-sign targets and generate new snapshot and timestamp c.Assert(s.repo.Sign("targets.json"), IsNil) c.Assert(s.repo.Snapshot(), IsNil) c.Assert(s.repo.Timestamp(), IsNil) c.Assert(s.repo.Commit(), IsNil) s.syncRemote(c) // check update gets new metadata c.Assert(client.getLocalMeta(), IsNil) rootVer := client.rootVer targetsVer := client.targetsVer snapshotVer := client.snapshotVer timestampVer := client.timestampVer _, err := client.Update() c.Assert(err, IsNil) c.Assert(client.rootVer > rootVer, Equals, true) c.Assert(client.targetsVer > targetsVer, Equals, true) c.Assert(client.snapshotVer > snapshotVer, Equals, true) c.Assert(client.timestampVer > timestampVer, Equals, true) // check key has been replaced in db for _, oldID := range oldIDs { _, err := client.db.GetVerifier(oldID) c.Assert(err, NotNil) } for _, newID := range newIDs { verifier, err := client.db.GetVerifier(newID) c.Assert(err, IsNil) c.Assert(verifier.MarshalPublicKey().IDs(), DeepEquals, newIDs) } role := client.db.GetRole("targets") c.Assert(role, NotNil) c.Assert(role.KeyIDs, DeepEquals, sets.StringSliceToSet(newIDs)) } func (s *ClientSuite) TestOfflineSignatureFlow(c *C) { client := s.newClient(c) // replace key oldIDs := s.keyIDs["targets"] c.Assert(s.repo.RevokeKey("targets", oldIDs[0]), IsNil) _ = s.genKey(c, "targets") // re-sign targets using offline flow and generate new snapshot and timestamp payload, err := s.repo.Payload("targets.json") c.Assert(err, IsNil) signed := data.Signed{Signed: payload} _, err = s.repo.SignPayload("targets", &signed) c.Assert(err, IsNil) for _, sig := range signed.Signatures { // This method checks that the signature verifies! err = s.repo.AddOrUpdateSignature("targets.json", sig) c.Assert(err, IsNil) } c.Assert(s.repo.Snapshot(), IsNil) c.Assert(s.repo.Timestamp(), IsNil) c.Assert(s.repo.Commit(), IsNil) s.syncRemote(c) // check update gets new metadata c.Assert(client.getLocalMeta(), IsNil) _, err = client.Update() c.Assert(err, IsNil) } func (s *ClientSuite) TestLocalExpired(c *C) { client := s.newClient(c) // locally expired timestamp.json is ok version := client.timestampVer c.Assert(s.repo.TimestampWithExpires(s.expiredTime), IsNil) s.syncLocal(c) s.withMetaExpired(func() { c.Assert(client.getLocalMeta(), IsNil) c.Assert(client.timestampVer > version, Equals, true) }) // locally expired snapshot.json is ok version = client.snapshotVer c.Assert(s.repo.SnapshotWithExpires(s.expiredTime), IsNil) s.syncLocal(c) s.withMetaExpired(func() { c.Assert(client.getLocalMeta(), IsNil) c.Assert(client.snapshotVer > version, Equals, true) }) // locally expired targets.json is ok version = client.targetsVer c.Assert(s.repo.AddTargetWithExpires("foo.txt", nil, s.expiredTime), IsNil) s.syncLocal(c) s.withMetaExpired(func() { c.Assert(client.getLocalMeta(), IsNil) c.Assert(client.targetsVer > version, Equals, true) }) // locally expired root.json is not ok version = client.rootVer s.genKeyExpired(c, "targets") s.syncLocal(c) s.withMetaExpired(func() { err := client.getLocalMeta() if _, ok := err.(verify.ErrExpired); !ok { c.Fatalf("expected err to have type signed.ErrExpired, got %T", err) } c.Assert(client.rootVer, Equals, version) }) } func (s *ClientSuite) TestTimestampTooLarge(c *C) { s.setRemoteMeta("timestamp.json", make([]byte, defaultTimestampDownloadLimit+1)) _, err := s.newClient(c).Update() c.Assert(err, Equals, ErrMetaTooLarge{"timestamp.json", defaultTimestampDownloadLimit + 1, defaultTimestampDownloadLimit}) } func (s *ClientSuite) TestUpdateLocalRootExpired(c *C) { client := s.newClient(c) // add soon to expire root.json to local storage s.genKeyExpired(c, "timestamp") c.Assert(s.repo.Snapshot(), IsNil) c.Assert(s.repo.Timestamp(), IsNil) c.Assert(s.repo.Commit(), IsNil) s.syncLocal(c) // add far expiring root.json to remote storage s.genKey(c, "timestamp") s.addRemoteTarget(c, "bar.txt") c.Assert(s.repo.Snapshot(), IsNil) c.Assert(s.repo.Timestamp(), IsNil) c.Assert(s.repo.Commit(), IsNil) s.syncRemote(c) const expectedRootVersion = int64(3) // check the update downloads the non expired remote root.json and // restarts itself, thus successfully updating s.withMetaExpired(func() { err := client.getLocalMeta() if _, ok := err.(verify.ErrExpired); !ok { c.Fatalf("expected err to have type signed.ErrExpired, got %T", err) } _, err = client.Update() c.Assert(err, IsNil) c.Assert(client.rootVer, Equals, expectedRootVersion) }) } func (s *ClientSuite) TestUpdateRemoteExpired(c *C) { client := s.updatedClient(c) // expired remote metadata should always be rejected c.Assert(s.repo.TimestampWithExpires(s.expiredTime), IsNil) s.syncRemote(c) s.withMetaExpired(func() { _, err := client.Update() s.assertErrExpired(c, err, "timestamp.json") }) c.Assert(s.repo.SnapshotWithExpires(s.expiredTime), IsNil) c.Assert(s.repo.Timestamp(), IsNil) c.Assert(s.repo.Commit(), IsNil) s.syncRemote(c) s.withMetaExpired(func() { _, err := client.Update() s.assertErrExpired(c, err, "snapshot.json") }) c.Assert(s.repo.AddTargetWithExpires("bar.txt", nil, s.expiredTime), IsNil) c.Assert(s.repo.Snapshot(), IsNil) c.Assert(s.repo.Timestamp(), IsNil) s.syncRemote(c) s.withMetaExpired(func() { _, err := client.Update() s.assertErrExpired(c, err, "targets.json") }) s.genKeyExpired(c, "timestamp") c.Assert(s.repo.RemoveTarget("bar.txt"), IsNil) c.Assert(s.repo.Snapshot(), IsNil) c.Assert(s.repo.Timestamp(), IsNil) c.Assert(s.repo.Commit(), IsNil) s.syncRemote(c) s.withMetaExpired(func() { _, err := client.Update() s.assertErrExpired(c, err, "root.json") }) } func (s *ClientSuite) TestUpdateLocalRootExpiredKeyChange(c *C) { client := s.newClient(c) // add soon to expire root.json to local storage s.genKeyExpired(c, "timestamp") c.Assert(s.repo.Snapshot(), IsNil) c.Assert(s.repo.Timestamp(), IsNil) c.Assert(s.repo.Commit(), IsNil) s.syncLocal(c) // replace all keys newKeyIDs := make(map[string][]string) for role, ids := range s.keyIDs { if role != "snapshot" && role != "timestamp" && role != "targets" { c.Assert(s.repo.RevokeKey(role, ids[0]), IsNil) newKeyIDs[role] = s.genKey(c, role) } } // update metadata c.Assert(s.repo.Sign("targets.json"), IsNil) c.Assert(s.repo.Snapshot(), IsNil) c.Assert(s.repo.Timestamp(), IsNil) c.Assert(s.repo.Commit(), IsNil) s.syncRemote(c) // check the update downloads the non expired remote root.json and // restarts itself, thus successfully updating s.withMetaExpired(func() { err := client.getLocalMeta() c.Assert(err, FitsTypeOf, verify.ErrExpired{}) _, err = client.Update() c.Assert(err, IsNil) }) } func (s *ClientSuite) TestUpdateMixAndMatchAttack(c *C) { // generate metadata with an explicit expires so we can make predictable changes expires := time.Now().Add(time.Hour) c.Assert(s.repo.AddTargetWithExpires("foo.txt", nil, expires), IsNil) c.Assert(s.repo.Snapshot(), IsNil) c.Assert(s.repo.Timestamp(), IsNil) c.Assert(s.repo.Commit(), IsNil) s.syncRemote(c) client := s.updatedClient(c) // grab the remote targets.json oldTargets, err := s.readMeta("targets.json") if err != nil { c.Fatal("missing remote targets.json") } // generate new remote metadata, but replace targets.json with the old one c.Assert(s.repo.AddTargetWithExpires("bar.txt", nil, expires), IsNil) c.Assert(s.repo.Snapshot(), IsNil) c.Assert(s.repo.Timestamp(), IsNil) c.Assert(s.repo.Commit(), IsNil) s.syncRemote(c) newTargets, err := s.readMeta("targets.json") if err != nil { c.Fatal("missing remote targets.json") } s.setRemoteMeta("targets.json", oldTargets) // check update returns ErrWrongSize for targets.json _, err = client.Update() c.Assert(err, DeepEquals, ErrWrongSize{"targets.json", int64(len(oldTargets)), int64(len(newTargets))}) // do the same but keep the size the same c.Assert(s.repo.RemoveTargetWithExpires("foo.txt", expires), IsNil) c.Assert(s.repo.Snapshot(), IsNil) c.Assert(s.repo.Timestamp(), IsNil) s.syncRemote(c) s.setRemoteMeta("targets.json", oldTargets) // check update returns ErrWrongHash _, err = client.Update() assertWrongHash(c, err) } func (s *ClientSuite) TestUpdateReplayAttack(c *C) { client := s.updatedClient(c) // grab the remote timestamp.json oldTimestamp, err := s.readMeta("timestamp.json") if err != nil { c.Fatal("missing remote timestamp.json") } // generate a new timestamp and sync with the client version := client.timestampVer c.Assert(version > 0, Equals, true) c.Assert(s.repo.Timestamp(), IsNil) s.syncRemote(c) _, err = client.Update() c.Assert(err, IsNil) c.Assert(client.timestampVer > version, Equals, true) // replace remote timestamp.json with the old one s.setRemoteMeta("timestamp.json", oldTimestamp) // check update returns ErrLowVersion _, err = client.Update() c.Assert(err, DeepEquals, ErrDecodeFailed{ File: "timestamp.json", Err: verify.ErrLowVersion{ Actual: version, Current: client.timestampVer, }, }) } func (s *ClientSuite) TestUpdateForkTimestamp(c *C) { client := s.updatedClient(c) // grab the remote timestamp.json oldTimestamp, err := s.readMeta("timestamp.json") if err != nil { c.Fatal("missing remote timestamp.json") } // generate a new timestamp and sync with the client version := client.timestampVer c.Assert(version > 0, Equals, true) c.Assert(s.repo.Timestamp(), IsNil) s.syncRemote(c) _, err = client.Update() c.Assert(err, IsNil) newVersion := client.timestampVer c.Assert(newVersion > version, Equals, true) // generate a new, different timestamp with the *same version* s.setRemoteMeta("timestamp.json", oldTimestamp) c.Assert(s.repo.Timestamp(), IsNil) c.Assert(client.timestampVer, Equals, newVersion) // double-check: same version? s.syncRemote(c) oldMeta, err := client.local.GetMeta() c.Assert(err, IsNil) _, err = client.Update() c.Assert(err, IsNil) // no error: the targets.json version didn't change, so there was no update! // Client shouldn't update! newMeta, err := client.local.GetMeta() c.Assert(err, IsNil) c.Assert(oldMeta, DeepEquals, newMeta) } func (s *ClientSuite) TestUpdateTamperedTargets(c *C) { client := s.newClient(c) // get local targets.json meta, err := s.store.GetMeta() c.Assert(err, IsNil) targetsJSON, ok := meta["targets.json"] if !ok { c.Fatal("missing targets.json") } type signedTargets struct { Signed data.Targets `json:"signed"` Signatures []data.Signature `json:"signatures"` } targets := &signedTargets{} c.Assert(json.Unmarshal(targetsJSON, targets), IsNil) // update remote targets.json to have different content but same size targets.Signed.Type = "xxxxxxx" tamperedJSON, err := json.Marshal(targets) c.Assert(err, IsNil) s.store.SetMeta("targets.json", tamperedJSON) s.store.Commit(false, nil, nil) s.syncRemote(c) _, err = client.Update() assertWrongHash(c, err) // update remote targets.json to have the wrong size targets.Signed.Type = "xxx" tamperedJSON, err = json.Marshal(targets) c.Assert(err, IsNil) s.store.SetMeta("targets.json", tamperedJSON) s.store.Commit(false, nil, nil) c.Assert(s.repo.Timestamp(), IsNil) // unless timestamp changes, the client doesn't even look at "targets.json" s.syncRemote(c) _, err = client.Update() c.Assert(err, DeepEquals, ErrWrongSize{"targets.json", int64(len(tamperedJSON)), int64(len(targetsJSON))}) } func (s *ClientSuite) TestUpdateHTTP(c *C) { tmp := c.MkDir() // start file server addr, cleanup := startFileServer(c, tmp) defer cleanup() for _, consistentSnapshot := range []bool{false, true} { dir := fmt.Sprintf("consistent-snapshot-%t", consistentSnapshot) // generate repository repo := generateRepoFS(c, filepath.Join(tmp, dir), targetFiles, consistentSnapshot) // initialize a client remote, err := HTTPRemoteStore(fmt.Sprintf("http://%s/%s/repository", addr, dir), nil, nil) c.Assert(err, IsNil) client := NewClient(MemoryLocalStore(), remote) rootMeta, err := repo.SignedMeta("root.json") c.Assert(err, IsNil) rootJsonBytes, err := json.Marshal(rootMeta) c.Assert(err, IsNil) c.Assert(client.Init(rootJsonBytes), IsNil) // check update is ok targets, err := client.Update() c.Assert(err, IsNil) assertFiles(c, targets, []string{"foo.txt", "bar.txt", "baz.txt"}) // check can download files for name, data := range targetFiles { var dest testDestination c.Assert(client.Download(name, &dest), IsNil) c.Assert(dest.deleted, Equals, false) c.Assert(dest.String(), Equals, string(data)) } } } // TestRollbackSnapshot tests a rollback version of snapshot. func (s *ClientSuite) TestRollbackSnapshot(c *C) { client := s.updatedClient(c) // generate a new snapshot & timestamp v2 and sync with the client version := client.snapshotVer c.Assert(version > 0, Equals, true) c.Assert(s.repo.Snapshot(), IsNil) c.Assert(s.repo.Timestamp(), IsNil) c.Assert(s.repo.Commit(), IsNil) s.syncRemote(c) _, err := client.Update() c.Assert(err, IsNil) c.Assert(client.snapshotVer > version, Equals, true) // replace remote snapshot.json with old version and timestamp again. s.repo.SetSnapshotVersion(version) c.Assert(s.repo.Snapshot(), IsNil) c.Assert(s.repo.Timestamp(), IsNil) c.Assert(s.repo.Commit(), IsNil) s.syncRemote(c) // check update returns ErrLowVersion _, err = client.Update() c.Assert(err, DeepEquals, verify.ErrLowVersion{ Actual: version, Current: client.snapshotVer, }) } func (s *ClientSuite) TestRollbackTopLevelTargets(c *C) { client := s.updatedClient(c) // generate a new targets and sync with the client version := client.targetsVer c.Assert(version > 0, Equals, true) s.addRemoteTarget(c, "bar.txt") _, err := client.Update() c.Assert(err, IsNil) c.Assert(client.targetsVer > version, Equals, true) // replace remote snapshot.json with old version and timestamp again. s.repo.SetTargetsVersion(version) c.Assert(s.repo.Snapshot(), IsNil) c.Assert(s.repo.Timestamp(), IsNil) c.Assert(s.repo.Commit(), IsNil) s.syncRemote(c) // check update returns ErrLowVersion _, err = client.Update() c.Assert(err, DeepEquals, verify.ErrLowVersion{ Actual: version, Current: client.targetsVer, }) } func (s *ClientSuite) TestRollbackDelegatedTargets(c *C) { client := s.updatedClient(c) // add a delegation signer, err := keys.GenerateEd25519Key() c.Assert(err, IsNil) role := data.DelegatedRole{ Name: "role", KeyIDs: signer.PublicData().IDs(), Paths: []string{"bar.txt", "baz.txt"}, Threshold: 1, } s.store.SaveSigner("role", signer) s.repo.AddDelegatedRole("targets", role, []*data.PublicKey{signer.PublicData()}) s.repo.AddTargetToPreferredRole("bar.txt", nil, "role") c.Assert(s.repo.Snapshot(), IsNil) c.Assert(s.repo.Timestamp(), IsNil) c.Assert(s.repo.Commit(), IsNil) s.syncRemote(c) // save v1 delegation meta, err := s.store.GetMeta() c.Assert(err, IsNil) oldRole, ok := meta["role.json"] if !ok { c.Fatal("missing role.json") } // update client and verify download delegated target _, err = client.Update() c.Assert(err, IsNil) var dest testDestination c.Assert(client.Download("bar.txt", &dest), IsNil) // update delegation to v2 s.repo.AddTargetToPreferredRole("baz.txt", nil, "role") c.Assert(s.repo.Snapshot(), IsNil) c.Assert(s.repo.Timestamp(), IsNil) c.Assert(s.repo.Commit(), IsNil) s.syncRemote(c) // update client and verify download v2 delegated target _, err = client.Update() c.Assert(err, IsNil) c.Assert(dest.Delete(), IsNil) c.Assert(client.Download("baz.txt", &dest), IsNil) // rollback role.json version. c.Assert(s.store.SetMeta("role.json", oldRole), IsNil) repo, err := tuf.NewRepo(s.store) c.Assert(err, IsNil) c.Assert(repo.Snapshot(), IsNil) c.Assert(repo.Timestamp(), IsNil) c.Assert(repo.Commit(), IsNil) s.syncRemote(c) // check update returns ErrLowVersion _, err = client.Update() c.Assert(err, DeepEquals, verify.ErrLowVersion{ Actual: 1, Current: 2, }) } type testDestination struct { bytes.Buffer deleted bool } func (t *testDestination) Delete() error { t.deleted = true return nil } func (s *ClientSuite) TestDownloadUnknownTarget(c *C) { client := s.updatedClient(c) var dest testDestination c.Assert(client.Download("nonexistent", &dest), Equals, ErrUnknownTarget{Name: "nonexistent", SnapshotVersion: 1}) c.Assert(dest.deleted, Equals, true) } func (s *ClientSuite) TestDownloadNoExist(c *C) { client := s.updatedClient(c) s.deleteTarget("foo.txt") var dest testDestination c.Assert(client.Download("foo.txt", &dest), Equals, ErrNotFound{"foo.txt"}) c.Assert(dest.deleted, Equals, true) } func (s *ClientSuite) TestDownloadOK(c *C) { client := s.updatedClient(c) // the filename is normalized if necessary for _, name := range []string{"/foo.txt", "foo.txt"} { var dest testDestination c.Assert(client.Download(name, &dest), IsNil) c.Assert(dest.deleted, Equals, false) c.Assert(dest.String(), Equals, "foo") } } func (s *ClientSuite) TestDownloadWrongSize(c *C) { client := s.updatedClient(c) // Update with a file that's incorrect size. s.setRemoteTarget("foo.txt", []byte("wrong-size")) var dest testDestination c.Assert(client.Download("foo.txt", &dest), DeepEquals, ErrWrongSize{"foo.txt", 10, 3}) c.Assert(dest.deleted, Equals, true) } func (s *ClientSuite) TestDownloadTargetTooLong(c *C) { client := s.updatedClient(c) s.setRemoteTarget("foo.txt", []byte("foo-ooo")) var dest testDestination c.Assert(client.Download("foo.txt", &dest), DeepEquals, ErrWrongSize{"foo.txt", 7, 3}) c.Assert(dest.deleted, Equals, true) } func (s *ClientSuite) TestDownloadTargetTooShort(c *C) { client := s.updatedClient(c) s.setRemoteTarget("foo.txt", []byte("fo")) var dest testDestination c.Assert(client.Download("foo.txt", &dest), DeepEquals, ErrWrongSize{"foo.txt", 2, 3}) c.Assert(dest.deleted, Equals, true) } func (s *ClientSuite) TestDownloadTargetCorruptData(c *C) { client := s.updatedClient(c) s.setRemoteTarget("foo.txt", []byte("ooo")) var dest testDestination assertWrongHash(c, client.Download("foo.txt", &dest)) c.Assert(dest.deleted, Equals, true) } func (s *ClientSuite) TestAvailableTargets(c *C) { client := s.updatedClient(c) files, err := client.Targets() c.Assert(err, IsNil) assertFiles(c, files, []string{"foo.txt"}) s.addRemoteTarget(c, "bar.txt") s.addRemoteTarget(c, "baz.txt") _, err = client.Update() c.Assert(err, IsNil) files, err = client.Targets() c.Assert(err, IsNil) assertFiles(c, files, []string{"foo.txt", "bar.txt", "baz.txt"}) } func (s *ClientSuite) TestAvailableTarget(c *C) { client := s.updatedClient(c) target, err := client.Target("foo.txt") c.Assert(err, IsNil) assertFile(c, target, "foo.txt") target, err = client.Target("/foo.txt") c.Assert(err, IsNil) assertFile(c, target, "foo.txt") _, err = client.Target("bar.txt") c.Assert(err, Equals, ErrNotFound{"bar.txt"}) _, err = client.Target("/bar.txt") c.Assert(err, Equals, ErrNotFound{"/bar.txt"}) } func (s *ClientSuite) TestUnknownKeyIDs(c *C) { // get local root.json meta, err := s.store.GetMeta() c.Assert(err, IsNil) rootJSON, ok := meta["root.json"] c.Assert(ok, Equals, true) var root struct { Signed data.Root `json:"signed"` Signatures []data.Signature `json:"signatures"` } c.Assert(json.Unmarshal(rootJSON, &root), IsNil) // update remote root.json to add a new key with an unknown id signer, err := keys.GenerateEd25519Key() c.Assert(err, IsNil) root.Signed.Keys["unknown-key-id"] = signer.PublicData() // re-sign the root metadata, then commit it back into the store. signingKeys, err := s.store.GetSigners("root") c.Assert(err, IsNil) signedRoot, err := sign.Marshal(root.Signed, signingKeys...) c.Assert(err, IsNil) rootJSON, err = cjson.EncodeCanonical(signedRoot) c.Assert(err, IsNil) s.store.SetMeta("root.json", rootJSON) s.store.Commit(false, nil, nil) s.syncRemote(c) // FIXME(TUF-0.9) We need this for now because the client still uses // the TUF-0.9 update workflow, where we decide to update the root // metadata when we observe a new root through the snapshot. repo, err := tuf.NewRepo(s.store) c.Assert(err, IsNil) c.Assert(repo.Snapshot(), IsNil) c.Assert(repo.Timestamp(), IsNil) c.Assert(repo.Commit(), IsNil) s.syncRemote(c) // Make sure the client can update with the unknown keyid. client := s.newClient(c) _, err = client.Update() c.Assert(err, IsNil) } func generateRepoFS(c *C, dir string, files map[string][]byte, consistentSnapshot bool) *tuf.Repo { repo, err := tuf.NewRepo(tuf.FileSystemStore(dir, nil)) c.Assert(err, IsNil) if !consistentSnapshot { c.Assert(repo.Init(false), IsNil) } for _, role := range []string{"root", "snapshot", "targets", "timestamp"} { _, err := repo.GenKey(role) c.Assert(err, IsNil) } for file, data := range files { path := filepath.Join(dir, "staged", "targets", file) c.Assert(os.MkdirAll(filepath.Dir(path), 0755), IsNil) c.Assert(os.WriteFile(path, data, 0644), IsNil) c.Assert(repo.AddTarget(file, nil), IsNil) } c.Assert(repo.Snapshot(), IsNil) c.Assert(repo.Timestamp(), IsNil) c.Assert(repo.Commit(), IsNil) return repo } func (s *ClientSuite) TestVerifyDigest(c *C) { digest := "sha256:bc11b176a293bb341a0f2d0d226f52e7fcebd186a7c4dfca5fc64f305f06b94c" hash := "bc11b176a293bb341a0f2d0d226f52e7fcebd186a7c4dfca5fc64f305f06b94c" size := int64(42) c.Assert(s.repo.AddTargetsWithDigest(hash, "sha256", size, digest, nil), IsNil) c.Assert(s.repo.Snapshot(), IsNil) c.Assert(s.repo.Timestamp(), IsNil) c.Assert(s.repo.Commit(), IsNil) s.syncRemote(c) client := s.newClient(c) _, err := client.Update() c.Assert(err, IsNil) c.Assert(client.VerifyDigest(hash, "sha256", size, digest), IsNil) } type StateLessSuite struct{} var _ = Suite(&StateLessSuite{}) func (s *StateLessSuite) TestRejectsMultiSignaturesSameKeyDifferentIDs(c *C) { // In this test Alice and Bob want to create a TUF repo // where a root key rotation would require both their signatures. // Alice uses an old version of Go-TUF where each key gets assigned several IDs. // Bob uses a modern version of Go-TUF that does not produce the same list of IDs for a same key. // This test checks that the TUF client // will not accept a root rotation // signed twice with Alice's key with different key IDs each time. // This test was failing with https://github.com/theupdateframework/go-tuf/tree/ac7b5d7bce18cca5a84a28b021bd6372f450b35b // because the signature verification code was assuming that the key IDs used in the metadata // were the same as the one the TUF library of the client would generate, // breaking the security of threshold signatures. // The attack works just the same if Alice is malicious from the beginning // and convinces Bob to sign an initial "root.json" // with additional key IDs for her only key, // but this scenario show that the vulnerability can even impact situations // where Alice is not malicious at all, // she was simply using an old client and an attacker stole her key. // The purpose of threshold signatures in TUF is precisely // to make sure that an attacker cannot forge signatures // if they did not steal a large enough number of keys. alice, err := keys.GenerateEd25519Key() if err != nil { panic(err) } root := data.NewRoot() root.Version = 1 root.Roles["root"] = &data.Role{ KeyIDs: []string{}, Threshold: 2, // Note the threshold } // reproduces how IDs were computed in // https://github.com/theupdateframework/go-tuf/blob/8e84384bebe3/data/types.go#L50 oldTUFIDs := func(k *data.PublicKey) []string { bytes, _ := cjson.EncodeCanonical(k) digest := sha256.Sum256(bytes) ids := []string{hex.EncodeToString(digest[:])} if k.Scheme != "" || len(k.Algorithms) != 0 { bytes, _ = cjson.EncodeCanonical(&data.PublicKey{ Type: k.Type, Value: k.Value, }) digest = sha256.Sum256(bytes) ids = append(ids, hex.EncodeToString(digest[:])) } return ids } // Alice adds her key using an old version of go-tuf // which will use several IDs for _, keyID := range oldTUFIDs(alice.PublicData()) { root.Keys[keyID] = alice.PublicData() root.Roles["root"].KeyIDs = append(root.Roles["root"].KeyIDs, keyID) } bob, err := keys.GenerateEd25519Key() if err != nil { panic(err) } root.AddKey(bob.PublicData()) root.Roles["root"].KeyIDs = append( root.Roles["root"].KeyIDs, bob.PublicData().IDs()..., ) // signer for the other roles, not important delegatedSigner, _ := keys.GenerateEd25519Key() root.AddKey(delegatedSigner.PublicData()) for _, role := range []string{"targets", "snapshot", "timestamp"} { root.Roles[role] = &data.Role{ KeyIDs: delegatedSigner.PublicData().IDs(), Threshold: 1, } } signedRoot, err := sign.Marshal(root, alice, bob) c.Assert(err, IsNil) rootJSON, err := json.Marshal(signedRoot) c.Assert(err, IsNil) // producing evil root using only Alice's key evilRoot := root evilRoot.Version = 2 canonical, err := cjson.EncodeCanonical(evilRoot) c.Assert(err, IsNil) sig, err := alice.SignMessage(canonical) c.Assert(err, IsNil) signedEvilRoot := &data.Signed{ Signed: canonical, Signatures: make([]data.Signature, 0), } for _, keyID := range oldTUFIDs(alice.PublicData()) { signedEvilRoot.Signatures = append(signedEvilRoot.Signatures, data.Signature{ Signature: sig, KeyID: keyID, }) } evilRootJSON, err := json.Marshal(signedEvilRoot) c.Assert(err, IsNil) // checking that client does not accept root rotation // to evil root localStore := MemoryLocalStore() err = localStore.SetMeta("root.json", rootJSON) c.Assert(err, IsNil) remoteStore := newFakeRemoteStore() remoteStore.meta["2.root.json"] = newFakeFile(evilRootJSON) client := NewClient(localStore, remoteStore) err = client.UpdateRoots() if err != nil { c.Assert(err, DeepEquals, verify.ErrRoleThreshold{Expected: 2, Actual: 1}) } else { c.Fatalf("client returned no error when updating with evil root") } } client/delegations.go000066400000000000000000000105351453140004500151610ustar00rootroot00000000000000package client import ( "github.com/theupdateframework/go-tuf/data" "github.com/theupdateframework/go-tuf/pkg/targets" "github.com/theupdateframework/go-tuf/verify" ) // getTargetFileMeta searches for a verified TargetFileMeta matching a target // Requires a local snapshot to be loaded and is locked to the snapshot versions. func (c *Client) getTargetFileMeta(target string) (data.TargetFileMeta, error) { snapshot, err := c.loadLocalSnapshot() if err != nil { return data.TargetFileMeta{}, err } targetFileMeta, _, err := c.getTargetFileMetaDelegationPath(target, snapshot) if err != nil { return data.TargetFileMeta{}, err } return targetFileMeta, nil } // getTargetFileMetaDelegationPath searches for a verified TargetFileMeta matching a target // Requires snapshot to be passed and is locked to that specific snapshot versions. // Searches through delegated targets following TUF spec 1.0.19 section 5.6. func (c *Client) getTargetFileMetaDelegationPath(target string, snapshot *data.Snapshot) (data.TargetFileMeta, []string, error) { // delegationsIterator covers 5.6.7 // - pre-order depth-first search starting with the top targets // - filter delegations with paths or path_hash_prefixes matching searched target // - 5.6.7.1 cycles protection // - 5.6.7.2 terminations delegations, err := targets.NewDelegationsIterator(target, c.db) if err != nil { return data.TargetFileMeta{}, nil, err } targetFileMeta := data.TargetFileMeta{} delegationRole := "" for i := 0; i < c.MaxDelegations; i++ { d, ok := delegations.Next() if !ok { return data.TargetFileMeta{}, nil, ErrUnknownTarget{target, snapshot.Version} } // covers 5.6.{1,2,3,4,5,6} targets, err := c.loadDelegatedTargets(snapshot, d.Delegatee.Name, d.DB) if err != nil { return data.TargetFileMeta{}, nil, err } // stop when the searched TargetFileMeta is found if m, ok := targets.Targets[target]; ok { delegationRole = d.Delegatee.Name targetFileMeta = m break } if targets.Delegations != nil { delegationsDB, err := verify.NewDBFromDelegations(targets.Delegations) if err != nil { return data.TargetFileMeta{}, nil, err } err = delegations.Add(targets.Delegations.Roles, d.Delegatee.Name, delegationsDB) if err != nil { return data.TargetFileMeta{}, nil, err } } } if len(delegationRole) > 0 { return targetFileMeta, buildPath(delegations.Parent, delegationRole, ""), nil } return data.TargetFileMeta{}, nil, ErrMaxDelegations{ Target: target, MaxDelegations: c.MaxDelegations, SnapshotVersion: snapshot.Version, } } func buildPath(parent func(string) string, start string, end string) []string { if start == end { return nil } path := []string{start} current := start for { current = parent(current) if current == end { break } path = append(path, current) } return path } func (c *Client) loadLocalSnapshot() (*data.Snapshot, error) { if err := c.getLocalMeta(); err != nil { return nil, err } rawS, ok := c.localMeta["snapshot.json"] if !ok { return nil, ErrNoLocalSnapshot } snapshot := &data.Snapshot{} if err := c.db.Unmarshal(rawS, snapshot, "snapshot", c.snapshotVer); err != nil { return nil, ErrDecodeFailed{"snapshot.json", err} } return snapshot, nil } // loadDelegatedTargets downloads, decodes, verifies and stores targets func (c *Client) loadDelegatedTargets(snapshot *data.Snapshot, role string, db *verify.DB) (*data.Targets, error) { var err error fileName := role + ".json" fileMeta, ok := snapshot.Meta[fileName] if !ok { return nil, ErrRoleNotInSnapshot{role, snapshot.Version} } // 5.6.1 download target if not in the local store // 5.6.2 check against snapshot hash // 5.6.4 check against snapshot version raw, alreadyStored := c.localMetaFromSnapshot(fileName, fileMeta) if !alreadyStored { raw, err = c.downloadMetaFromSnapshot(fileName, fileMeta) if err != nil { return nil, err } } targets := &data.Targets{} // 5.6.3 verify signature with parent public keys // 5.6.5 verify that the targets is not expired // role "targets" is a top role verified by root keys loaded in the client db err = db.Unmarshal(raw, targets, role, fileMeta.Version) if err != nil { return nil, ErrDecodeFailed{fileName, err} } // 5.6.6 persist if !alreadyStored { if err := c.local.SetMeta(fileName, raw); err != nil { return nil, err } } return targets, nil } client/delegations_test.go000066400000000000000000000221621453140004500162170ustar00rootroot00000000000000package client import ( "crypto/sha256" "encoding/json" "fmt" "io" "net" "net/http" "os" "strings" "testing" "time" "github.com/stretchr/testify/assert" "github.com/theupdateframework/go-tuf/data" "github.com/theupdateframework/go-tuf/util" "github.com/theupdateframework/go-tuf/verify" ) func TestGetTargetMeta(t *testing.T) { verify.IsExpired = func(t time.Time) bool { return false } c, closer := initTestDelegationClient(t, "testdata/php-tuf-fixtures/TUFTestFixture3LevelDelegation") defer func() { assert.Nil(t, closer()) }() _, err := c.Update() assert.Nil(t, err) f, err := c.getTargetFileMeta("f.txt") assert.Nil(t, err) hash := sha256.Sum256([]byte("Contents: f.txt")) assert.Equal(t, data.HexBytes(hash[:]), f.Hashes["sha256"]) f, err = c.getTargetFileMeta("targets.txt") assert.Nil(t, err) hash = sha256.Sum256([]byte("Contents: targets.txt")) assert.Equal(t, data.HexBytes(hash[:]), f.Hashes["sha256"]) } func TestMaxDelegations(t *testing.T) { verify.IsExpired = func(t time.Time) bool { return false } c, closer := initTestDelegationClient(t, "testdata/php-tuf-fixtures/TUFTestFixture3LevelDelegation") defer func() { assert.Nil(t, closer()) }() _, err := c.Update() assert.Nil(t, err) c.MaxDelegations = 2 _, err = c.getTargetFileMeta("c.txt") assert.Equal(t, ErrMaxDelegations{Target: "c.txt", MaxDelegations: 2, SnapshotVersion: 2}, err) } func TestMetaNotFound(t *testing.T) { verify.IsExpired = func(t time.Time) bool { return false } c, closer := initTestDelegationClient(t, "testdata/php-tuf-fixtures/TUFTestFixture3LevelDelegation") defer func() { assert.Nil(t, closer()) }() _, err := c.Update() assert.Nil(t, err) _, err = c.getTargetFileMeta("unknown.txt") assert.Equal(t, ErrUnknownTarget{Name: "unknown.txt", SnapshotVersion: 2}, err) } type fakeRemote struct { getMeta func(name string) (stream io.ReadCloser, size int64, err error) getTarget func(path string) (stream io.ReadCloser, size int64, err error) } func (f fakeRemote) GetMeta(name string) (stream io.ReadCloser, size int64, err error) { return f.getMeta(name) } func (f fakeRemote) GetTarget(name string) (stream io.ReadCloser, size int64, err error) { return f.getTarget(name) } func TestTargetsNotFound(t *testing.T) { verify.IsExpired = func(t time.Time) bool { return false } c, closer := initTestDelegationClient(t, "testdata/php-tuf-fixtures/TUFTestFixture3LevelDelegation") defer func() { assert.Nil(t, closer()) }() _, err := c.Update() assert.Nil(t, err) previousRemote := c.remote newRemote := fakeRemote{ getMeta: func(path string) (stream io.ReadCloser, size int64, err error) { if path == "1.c.json" { return nil, 0, ErrNotFound{} } return previousRemote.GetMeta(path) }, getTarget: previousRemote.GetTarget, } c.remote = newRemote _, err = c.getTargetFileMeta("c.txt") assert.Equal(t, ErrMissingRemoteMetadata{Name: "c.json"}, err) } func TestUnverifiedTargets(t *testing.T) { verify.IsExpired = func(t time.Time) bool { return false } c, closer := initTestDelegationClient(t, "testdata/php-tuf-fixtures/TUFTestFixture3LevelDelegation") defer closer() _, err := c.Update() assert.Nil(t, err) previousRemote := c.remote newRemote := fakeRemote{ getMeta: func(path string) (stream io.ReadCloser, size int64, err error) { if path == "1.c.json" { // returns a snapshot that does not match return previousRemote.GetMeta("1.d.json") } return previousRemote.GetMeta(path) }, getTarget: previousRemote.GetTarget, } c.remote = newRemote _, err = c.getTargetFileMeta("c.txt") assert.Equal(t, ErrDecodeFailed{File: "c.json", Err: verify.ErrRoleThreshold{Expected: 1, Actual: 0}}, err) } func TestPersistedMeta(t *testing.T) { verify.IsExpired = func(t time.Time) bool { return false } c, closer := initTestDelegationClient(t, "testdata/php-tuf-fixtures/TUFTestFixture3LevelDelegation") defer closer() _, err := c.Update() assert.Nil(t, err) _, err = c.local.GetMeta() assert.Nil(t, err) type expectedTargets struct { name string version int64 } var persistedTests = []struct { file string targets []expectedTargets downloadError error targetError error fileContent string }{ { file: "unknown", targets: []expectedTargets{ { name: "targets.json", version: 2, }, }, downloadError: ErrUnknownTarget{Name: "unknown", SnapshotVersion: 2}, targetError: ErrNotFound{File: "unknown"}, fileContent: "", }, { file: "b.txt", targets: []expectedTargets{ { name: "targets.json", version: 2, }, { name: "a.json", version: 1, }, { name: "b.json", version: 1, }, }, downloadError: nil, targetError: nil, fileContent: "Contents: b.txt", }, { file: "f.txt", targets: []expectedTargets{ { name: "targets.json", version: 2, }, { name: "a.json", version: 1, }, { name: "b.json", version: 1, }, { name: "c.json", version: 1, }, { name: "d.json", version: 1, }, { name: "e.json", version: 1, }, { name: "f.json", version: 1, }, }, downloadError: nil, targetError: nil, fileContent: "Contents: f.txt", }, } for _, tt := range persistedTests { t.Run("search "+tt.file, func(t *testing.T) { var dest testDestination err = c.Download(tt.file, &dest) assert.Equal(t, tt.downloadError, err) assert.Equal(t, tt.fileContent, dest.String()) target, err := c.Target(tt.file) assert.Equal(t, tt.targetError, err) if tt.targetError == nil { meta, err := util.GenerateTargetFileMeta(strings.NewReader(tt.fileContent), target.HashAlgorithms()...) assert.Nil(t, err) assert.Nil(t, util.TargetFileMetaEqual(target, meta)) } p, err := c.local.GetMeta() assert.Nil(t, err) persisted := copyStore(p) persistedLocal := copyStore(c.localMeta) // trim non targets metas for _, notTargets := range []string{"root.json", "snapshot.json", "timestamp.json"} { delete(persisted, notTargets) delete(persistedLocal, notTargets) } for _, targets := range tt.targets { // Test local store storedVersion, err := versionOfStoredTargets(targets.name, persisted) assert.Equal(t, targets.version, storedVersion) assert.Nil(t, err) delete(persisted, targets.name) // Test localMeta storedVersion, err = versionOfStoredTargets(targets.name, persistedLocal) assert.Equal(t, targets.version, storedVersion) assert.Nil(t, err) delete(persistedLocal, targets.name) } assert.Empty(t, persisted) assert.Empty(t, persistedLocal) }) } } func TestGetDelegationPathWithNoTargetFile(t *testing.T) { // In this test, we have created a target file c.txt for a delegation // c.json, then we remove that target file and check if c.json is loaded // in the localMeta. It shouldn't as it has no target file at all and shouldn't // be used. verify.IsExpired = func(t time.Time) bool { return false } client, closer := initTestDelegationClient(t, "testdata/php-tuf-fixtures/TUFTestFixture2LevelDelegation") defer closer() _, err := client.Update() assert.Nil(t, err) err = client.getLocalMeta() assert.Nil(t, err) _, ok := client.localMeta["a.json"] assert.True(t, ok) _, ok = client.localMeta["b.json"] assert.True(t, ok) _, ok = client.localMeta["c.json"] assert.False(t, ok) } func versionOfStoredTargets(name string, store map[string]json.RawMessage) (int64, error) { rawTargets, ok := store[name] if !ok { return 0, nil } s := &data.Signed{} if err := json.Unmarshal(rawTargets, s); err != nil { return 0, err } targets := &data.Targets{} if err := json.Unmarshal(s.Signed, targets); err != nil { return 0, err } return targets.Version, nil } func initTestDelegationClient(t *testing.T, dirPrefix string) (*Client, func() error) { serverDir := dirPrefix + "/server" initialStateDir := dirPrefix + "/client/metadata/current" l, err := net.Listen("tcp", "127.0.0.1:0") assert.Nil(t, err) addr := l.Addr().String() go http.Serve(l, http.FileServer(http.Dir(serverDir))) opts := &HTTPRemoteOptions{ MetadataPath: "metadata", TargetsPath: "targets", } remote, err := HTTPRemoteStore(fmt.Sprintf("http://%s/", addr), opts, nil) assert.Nil(t, err) c := NewClient(MemoryLocalStore(), remote) rawFile, err := os.ReadFile(initialStateDir + "/" + "root.json") assert.Nil(t, err) assert.Nil(t, c.Init(rawFile)) files, err := os.ReadDir(initialStateDir) assert.Nil(t, err) // load local files for _, f := range files { if f.IsDir() { continue } name := f.Name() // ignoring consistent snapshot when loading initial state if len(strings.Split(name, ".")) < 3 && strings.HasSuffix(name, ".json") { rawFile, err := os.ReadFile(initialStateDir + "/" + name) assert.Nil(t, err) assert.Nil(t, c.local.SetMeta(name, rawFile)) } } return c, l.Close } func copyStore(store map[string]json.RawMessage) map[string]json.RawMessage { new := make(map[string]json.RawMessage, len(store)) for k, raw := range store { newRaw := make([]byte, len(raw)) copy(newRaw, []byte(raw)) new[k] = json.RawMessage(newRaw) } return new } client/errors.go000066400000000000000000000045101453140004500141730ustar00rootroot00000000000000package client import ( "errors" "fmt" ) var ( ErrNoRootKeys = errors.New("tuf: no root keys found in local meta store") ErrInsufficientKeys = errors.New("tuf: insufficient keys to meet threshold") ErrNoLocalSnapshot = errors.New("tuf: no snapshot stored locally") ) type ErrMissingRemoteMetadata struct { Name string } func (e ErrMissingRemoteMetadata) Error() string { return fmt.Sprintf("tuf: missing remote metadata %s", e.Name) } type ErrDownloadFailed struct { File string Err error } func (e ErrDownloadFailed) Error() string { return fmt.Sprintf("tuf: failed to download %s: %s", e.File, e.Err) } type ErrDecodeFailed struct { File string Err error } func (e ErrDecodeFailed) Error() string { return fmt.Sprintf("tuf: failed to decode %s: %s", e.File, e.Err) } type ErrMaxDelegations struct { Target string MaxDelegations int SnapshotVersion int64 } func (e ErrMaxDelegations) Error() string { return fmt.Sprintf("tuf: max delegation of %d reached searching for %s with snapshot version %d", e.MaxDelegations, e.Target, e.SnapshotVersion) } type ErrNotFound struct { File string } func (e ErrNotFound) Error() string { return fmt.Sprintf("tuf: file not found: %s", e.File) } func IsNotFound(err error) bool { _, ok := err.(ErrNotFound) return ok } type ErrWrongSize struct { File string Actual int64 Expected int64 } func (e ErrWrongSize) Error() string { return fmt.Sprintf("tuf: unexpected file size: %s (expected %d bytes, got %d bytes)", e.File, e.Expected, e.Actual) } type ErrUnknownTarget struct { Name string SnapshotVersion int64 } func (e ErrUnknownTarget) Error() string { return fmt.Sprintf("tuf: unknown target file: %s with snapshot version %d", e.Name, e.SnapshotVersion) } type ErrMetaTooLarge struct { Name string Size int64 MaxSize int64 } func (e ErrMetaTooLarge) Error() string { return fmt.Sprintf("tuf: %s size %d bytes greater than maximum %d bytes", e.Name, e.Size, e.MaxSize) } type ErrInvalidURL struct { URL string } func (e ErrInvalidURL) Error() string { return fmt.Sprintf("tuf: invalid repository URL %s", e.URL) } type ErrRoleNotInSnapshot struct { Role string SnapshotVersion int64 } func (e ErrRoleNotInSnapshot) Error() string { return fmt.Sprintf("tuf: role %s not in snapshot version %d", e.Role, e.SnapshotVersion) } client/file_store.go000066400000000000000000000051021453140004500150100ustar00rootroot00000000000000package client import ( "bytes" "errors" "fmt" "io" "io/fs" ) // FileRemoteStore provides a RemoteStore interface compatible // implementation that can be used where the RemoteStore is backed by a // fs.FS. This is useful for example in air-gapped environments where there's no // possibility to make outbound network connections. // By having this be a fs.FS instead of directories allows the repository to // be backed by something that's not persisted to disk. func NewFileRemoteStore(fsys fs.FS, targetDir string) (*FileRemoteStore, error) { if fsys == nil { return nil, errors.New("nil fs.FS") } t := targetDir if t == "" { t = "targets" } // Make sure directory exists d, err := fsys.Open(t) if err != nil { return nil, fmt.Errorf("failed to open targets directory %s: %w", t, err) } fi, err := d.Stat() if err != nil { return nil, fmt.Errorf("failed to stat targets directory %s: %w", t, err) } if !fi.IsDir() { return nil, fmt.Errorf("targets directory not a directory %s", t) } fsysT, err := fs.Sub(fsys, t) if err != nil { return nil, fmt.Errorf("failed to open targets directory %s: %w", t, err) } return &FileRemoteStore{fsys: fsys, targetDir: fsysT}, nil } type FileRemoteStore struct { // Meta directory fs fsys fs.FS // Target directory fs. targetDir fs.FS // In order to be able to make write operations (create, delete) we can't // use fs.FS for it (it's read only), so we have to know the underlying // directory that add/delete test methods can use. This is only necessary // for testing purposes. testDir string } func (f *FileRemoteStore) GetMeta(name string) (io.ReadCloser, int64, error) { rc, b, err := f.get(f.fsys, name) return handleErrors(name, rc, b, err) } func (f *FileRemoteStore) GetTarget(name string) (io.ReadCloser, int64, error) { rc, b, err := f.get(f.targetDir, name) return handleErrors(name, rc, b, err) } func (f *FileRemoteStore) get(fsys fs.FS, s string) (io.ReadCloser, int64, error) { if !fs.ValidPath(s) { return nil, 0, fmt.Errorf("invalid path %s", s) } b, err := fs.ReadFile(fsys, s) if err != nil { return nil, -1, err } return io.NopCloser(bytes.NewReader(b)), int64(len(b)), nil } // handleErrors converts NotFound errors to something that TUF knows how to // handle properly. For example, when looking for n+1 root files, this is a // signal that it will stop looking. func handleErrors(name string, rc io.ReadCloser, b int64, err error) (io.ReadCloser, int64, error) { if err == nil { return rc, b, err } if errors.Is(err, fs.ErrNotExist) { return rc, b, ErrNotFound{name} } return rc, b, err } client/file_store_test.go000066400000000000000000000126251453140004500160570ustar00rootroot00000000000000package client import ( "bytes" "io" "io/fs" "os" "path/filepath" "runtime" "strings" "testing" ) const targetsDir = "targets" func TestCreates(t *testing.T) { runningWindows := false if runtime.GOOS == "windows" { runningWindows = true } tmpDir := t.TempDir() defer os.RemoveAll(tmpDir) dir := filepath.Join(tmpDir, "repository") os.Mkdir(dir, os.ModePerm) os.Mkdir(filepath.Join(dir, "targets"), os.ModePerm) if !runningWindows { targetDirThatIsFile := filepath.Join(dir, "targets-that-isfile") f, err := os.Create(targetDirThatIsFile) if err != nil { t.Fatalf("failed to create file: %s: %v", targetDirThatIsFile, err) } defer f.Close() } t.Cleanup(func() { rmrf(dir, t.Logf) }) t.Cleanup(func() { rmrf(tmpDir, t.Logf) }) tests := []struct { name string fsys fs.FS td string wantErr string doNotRunOnWindows bool }{{ name: "nil, error", wantErr: "nil fs.FS", }, { name: "missing targets directory", fsys: os.DirFS(dir), td: "targets-not-there", wantErr: "failed to open targets directory targets-not-there", }, { name: "targets directory is not a file", fsys: os.DirFS(dir), td: "targets-that-isfile", wantErr: "targets directory not a directory targets-that-isfile", doNotRunOnWindows: true, }, { name: "works, explicit targets", fsys: os.DirFS(dir), td: "targets", }, { name: "works, explicit targets", fsys: os.DirFS(dir), td: "targets", }} for _, tc := range tests { if tc.doNotRunOnWindows { t.Skip("Can't figure out how to make this work on windows") } _, err := NewFileRemoteStore(tc.fsys, tc.td) if tc.wantErr != "" && err == nil { t.Errorf("%q wanted error %s, got none", tc.name, tc.wantErr) } else if tc.wantErr == "" && err != nil { t.Errorf("%q did not want error, got: %v", tc.name, err) } else if err != nil && !strings.Contains(err.Error(), tc.wantErr) { t.Errorf("%q wanted error %s but got: %s", tc.name, tc.wantErr, err) } } } func TestBasicOps(t *testing.T) { metas := map[string][]byte{ "root.json": []byte("root"), "snapshot.json": []byte("snapshot"), "timestamp": []byte("timestamp"), } fsys, dir, err := newTestFileStoreFS() if err != nil { t.Fatalf("Failed to create test FileStore") } t.Cleanup(func() { rmrf(dir, t.Logf) }) defer os.RemoveAll(dir) // Add targets and metas and check them. for k, v := range targetFiles { if err := fsys.addTarget(k, v); err != nil { t.Errorf("failed to add target %s: %v", k, err) } rc, size, err := fsys.GetTarget(k) if err != nil { t.Errorf("failed to GetTarget %s: %v", k, err) } if size != int64(len(v)) { t.Errorf("unexpected size returned for GetTarget: %s want %d got %d", k, len(v), size) } got, err := io.ReadAll(rc) if err != nil { t.Errorf("failed to ReadAll returned ReacCloser %s: %v", k, err) } if !bytes.Equal(v, got) { t.Errorf("Read unexpected bytes, want: %s got: %s", string(k), string(got)) } } for k, v := range metas { if err := fsys.addMeta(k, v); err != nil { t.Errorf("failed to add meta %s %v", k, err) } rc, size, err := fsys.GetMeta(k) if err != nil { t.Errorf("failed to GetMeta %s: %v", k, err) } if size != int64(len(v)) { t.Errorf("unexpected size returned for GetMeta: %s want %d got %d", k, len(v), size) } got, err := io.ReadAll(rc) if err != nil { t.Errorf("failed to ReadAll returned ReacCloser %s: %v", k, err) } if !bytes.Equal(v, got) { t.Errorf("Read unexpected bytes, want: %s got: %s", string(k), string(got)) } } } // Test helper methods func (f *FileRemoteStore) addMeta(name string, data []byte) error { return os.WriteFile(filepath.Join(f.testDir, name), data, os.ModePerm) } func (f *FileRemoteStore) addTarget(name string, data []byte) error { fname := filepath.Join(f.testDir, targetsDir, name) err := os.WriteFile(fname, data, os.ModePerm) return err } func (f *FileRemoteStore) deleteMeta(name string) error { return os.Remove(filepath.Join(f.testDir, name)) } func (f *FileRemoteStore) deleteTarget(name string) error { return os.Remove(filepath.Join(f.testDir, targetsDir, name)) } func newTestFileStoreFS() (*FileRemoteStore, string, error) { tmpDir := os.TempDir() tufDir := filepath.Join(tmpDir, "tuf-file-store-test") // Clean it in case there is cruft left around os.RemoveAll(tufDir) os.Mkdir(tufDir, os.ModePerm) os.Mkdir(filepath.Join(tufDir, targetsDir), os.ModePerm) fs, err := NewFileRemoteStore(os.DirFS(tufDir), targetsDir) fs.testDir = tufDir return fs, tufDir, err } // goes through a dir and removes everything. This is to work around: // https://github.com/golang/go/issues/51442 func rmrf(dir string, logger func(string, ...interface{})) { if dir == "" { logger("cowardly refusing to remove a not fully specified fir") return } logger("Removing %s", dir) d, err := os.Open(dir) if err != nil { logger("Failed to open %s: %v", dir, err) return } defer d.Close() // -1 means give me everything, we don't have that many entries, so // fine here. names, err := d.Readdirnames(-1) if err != nil { logger("Failed to ReaddirNames %s: %v", dir, err) return } for _, name := range names { toRemove := filepath.Join(dir, name) err = os.RemoveAll(toRemove) if err != nil { logger("Failed to RemoveAll %s: %v", toRemove, err) // Do not want to fail here, just keep doing the best we can } } } client/filejsonstore/000077500000000000000000000000001453140004500152165ustar00rootroot00000000000000client/filejsonstore/filejsonstore.go000066400000000000000000000071201453140004500204330ustar00rootroot00000000000000package client import ( "encoding/json" "errors" "fmt" "io/fs" "os" "path/filepath" "sync" "github.com/theupdateframework/go-tuf/client" "github.com/theupdateframework/go-tuf/internal/fsutil" "github.com/theupdateframework/go-tuf/util" ) const ( // user: rwx // group: r-x // other: --- dirCreateMode = os.FileMode(0750) // user: rw- // group: r-- // other: --- fileCreateMode = os.FileMode(0640) ) // FileJSONStore represents a local metadata cache relying on raw JSON files // as retrieved from the remote repository. type FileJSONStore struct { mtx sync.RWMutex baseDir string } var _ client.LocalStore = (*FileJSONStore)(nil) // NewFileJSONStore returns a new metadata cache, implemented using raw JSON // files, stored in a directory provided by the client. // If the provided directory does not exist on disk, it will be created. // The provided metadata cache is safe for concurrent access. func NewFileJSONStore(baseDir string) (*FileJSONStore, error) { f := &FileJSONStore{ baseDir: baseDir, } // Does the directory exist? fi, err := os.Stat(baseDir) if err != nil { if errors.Is(err, fs.ErrNotExist) { // Create the directory if err = os.MkdirAll(baseDir, dirCreateMode); err != nil { return nil, fmt.Errorf("error creating directory for metadata cache: %w", err) } } else { return nil, fmt.Errorf("error getting FileInfo for %s: %w", baseDir, err) } } else { // Verify that it is a directory if !fi.IsDir() { return nil, fmt.Errorf("can not open %s, not a directory", baseDir) } // Verify file mode is not too permissive. if err = fsutil.EnsureMaxPermissions(fi, dirCreateMode); err != nil { return nil, err } } return f, nil } // GetMeta returns the currently cached set of metadata files. func (f *FileJSONStore) GetMeta() (map[string]json.RawMessage, error) { f.mtx.RLock() defer f.mtx.RUnlock() names, err := os.ReadDir(f.baseDir) if err != nil { return nil, fmt.Errorf("error reading directory %s: %w", f.baseDir, err) } meta := map[string]json.RawMessage{} for _, name := range names { ok, err := fsutil.IsMetaFile(name) if err != nil { return nil, err } if !ok { continue } // Verify permissions info, err := name.Info() if err != nil { return nil, fmt.Errorf("error retrieving FileInfo for %s: %w", name.Name(), err) } if err = fsutil.EnsureMaxPermissions(info, fileCreateMode); err != nil { return nil, err } p := filepath.Join(f.baseDir, name.Name()) b, err := os.ReadFile(p) if err != nil { return nil, fmt.Errorf("error reading file %s: %w", name.Name(), err) } meta[name.Name()] = b } return meta, nil } // SetMeta stores a metadata file in the cache. If the metadata file exist, // it will be overwritten. func (f *FileJSONStore) SetMeta(name string, meta json.RawMessage) error { f.mtx.Lock() defer f.mtx.Unlock() if filepath.Ext(name) != ".json" { return fmt.Errorf("file %s is not a JSON file", name) } p := filepath.Join(f.baseDir, name) err := util.AtomicallyWriteFile(p, meta, fileCreateMode) return err } // DeleteMeta deletes a metadata file from the cache. // If the file does not exist, an *os.PathError is returned. func (f *FileJSONStore) DeleteMeta(name string) error { f.mtx.Lock() defer f.mtx.Unlock() if filepath.Ext(name) != ".json" { return fmt.Errorf("file %s is not a JSON file", name) } p := filepath.Join(f.baseDir, name) err := os.Remove(p) if err == nil { return nil } return fmt.Errorf("error deleting file %s: %w", name, err) } // Close closes the metadata cache. This is a no-op. func (f *FileJSONStore) Close() error { return nil } client/filejsonstore/filejsonstore_test.go000066400000000000000000000105331453140004500214740ustar00rootroot00000000000000package client import ( "encoding/json" "errors" "os" "path/filepath" "strings" "testing" "gopkg.in/check.v1" ) type FileJSONStoreSuite struct{} var _ = check.Suite(&FileJSONStoreSuite{}) // Hook up gocheck into the "go test" runner func Test(t *testing.T) { check.TestingT(t) } func (FileJSONStoreSuite) TestNewOk(c *check.C) { tmp := c.MkDir() p := filepath.Join(tmp, "tuf_raw.db") // Assert path does not exist fi, err := os.Stat(p) c.Assert(fi, check.IsNil) c.Assert(errors.Is(err, os.ErrNotExist), check.Equals, true) // Create implementation s, err := NewFileJSONStore(p) c.Assert(err, check.IsNil) c.Assert(s, check.NotNil) // Assert path does exist and is a directory fi, err = os.Stat(p) c.Assert(fi, check.NotNil) c.Assert(err, check.IsNil) c.Assert(fi.IsDir(), check.Equals, true) } func (FileJSONStoreSuite) TestNewFileExists(c *check.C) { tmp := c.MkDir() p := filepath.Join(tmp, "tuf_raw.db") // Create an empty file f, err := os.Create(p) c.Assert(err, check.IsNil) f.Close() // Create implementation s, err := NewFileJSONStore(p) c.Assert(s, check.IsNil) c.Assert(err, check.NotNil) found := strings.Contains(err.Error(), ", not a directory") c.Assert(found, check.Equals, true) } func (FileJSONStoreSuite) TestNewDirectoryExists(c *check.C) { tmp := c.MkDir() p := filepath.Join(tmp, "tuf_raw.db") err := os.Mkdir(p, 0750) c.Assert(err, check.IsNil) // Create implementation s, err := NewFileJSONStore(p) c.Assert(s, check.NotNil) c.Assert(err, check.IsNil) } func (FileJSONStoreSuite) TestGetMetaEmpty(c *check.C) { tmp := c.MkDir() p := filepath.Join(tmp, "tuf_raw.db") s, err := NewFileJSONStore(p) c.Assert(err, check.IsNil) md, err := s.GetMeta() c.Assert(err, check.IsNil) c.Assert(md, check.HasLen, 0) } func (FileJSONStoreSuite) TestGetNoDirectory(c *check.C) { tmp := c.MkDir() p := filepath.Join(tmp, "tuf_raw.db") s, err := NewFileJSONStore(p) c.Assert(err, check.IsNil) err = os.Remove(p) c.Assert(err, check.IsNil) md, err := s.GetMeta() c.Assert(md, check.IsNil) c.Assert(err, check.NotNil) } func (FileJSONStoreSuite) TestMetadataOperations(c *check.C) { tmp := c.MkDir() p := filepath.Join(tmp, "tuf_raw.db") s, err := NewFileJSONStore(p) c.Assert(err, check.IsNil) expected := map[string]json.RawMessage{ "file1.json": []byte{0xf1, 0xe1, 0xd1}, "file2.json": []byte{0xf2, 0xe2, 0xd2}, "file3.json": []byte{0xf3, 0xe3, 0xd3}, } for k, v := range expected { err := s.SetMeta(k, v) c.Assert(err, check.IsNil) } md, err := s.GetMeta() c.Assert(err, check.IsNil) c.Assert(md, check.HasLen, 3) c.Assert(md, check.DeepEquals, expected) // Delete all items count := 3 for k := range expected { err = s.DeleteMeta(k) c.Assert(err, check.IsNil) md, err := s.GetMeta() c.Assert(err, check.IsNil) count-- c.Assert(md, check.HasLen, count) } md, err = s.GetMeta() c.Assert(err, check.IsNil) c.Assert(md, check.HasLen, 0) } func (FileJSONStoreSuite) TestGetNoJSON(c *check.C) { tmp := c.MkDir() p := filepath.Join(tmp, "tuf_raw.db") s, err := NewFileJSONStore(p) c.Assert(s, check.NotNil) c.Assert(err, check.IsNil) // Create a file which does not end with '.json' fp := filepath.Join(p, "meta.xml") err = os.WriteFile(fp, []byte{}, 0644) c.Assert(err, check.IsNil) md, err := s.GetMeta() c.Assert(err, check.IsNil) c.Assert(md, check.HasLen, 0) } func (FileJSONStoreSuite) TestNoJSON(c *check.C) { tmp := c.MkDir() p := filepath.Join(tmp, "tuf_raw.db") s, err := NewFileJSONStore(p) c.Assert(s, check.NotNil) c.Assert(err, check.IsNil) files := []string{ "file.xml", "file", "", } for _, f := range files { err := s.SetMeta(f, []byte{}) c.Assert(err, check.ErrorMatches, "file.*is not a JSON file") } } func (FileJSONStoreSuite) TestClose(c *check.C) { tmp := c.MkDir() p := filepath.Join(tmp, "tuf_raw.db") s, err := NewFileJSONStore(p) c.Assert(s, check.NotNil) c.Assert(err, check.IsNil) err = s.Close() c.Assert(err, check.IsNil) } func (FileJSONStoreSuite) TestDelete(c *check.C) { tmp := c.MkDir() p := filepath.Join(tmp, "tuf_raw.db") s, err := NewFileJSONStore(p) c.Assert(s, check.NotNil) c.Assert(err, check.IsNil) err = s.DeleteMeta("not_json.yml") c.Assert(err, check.ErrorMatches, "file not_json\\.yml is not a JSON file") err = s.DeleteMeta("non_existing.json") c.Assert(errors.Is(err, os.ErrNotExist), check.Equals, true) } client/filejsonstore/perm_test.go000066400000000000000000000024061453140004500175510ustar00rootroot00000000000000//go:build !windows // +build !windows package client import ( "os" "path/filepath" "gopkg.in/check.v1" ) func (FileJSONStoreSuite) TestNewDirectoryExistsWrongPerm(c *check.C) { tmp := c.MkDir() p := filepath.Join(tmp, "tuf_raw.db") err := os.Mkdir(p, 0750) c.Assert(err, check.IsNil) // Modify the directory permission and try again err = os.Chmod(p, 0751) c.Assert(err, check.IsNil) s, err := NewFileJSONStore(p) c.Assert(s, check.IsNil) c.Assert(err, check.ErrorMatches, "permission bits for file tuf_raw.db failed.*") } func (FileJSONStoreSuite) TestNewNoCreate(c *check.C) { tmp := c.MkDir() p := filepath.Join(tmp, "tuf_raw.db") // Clear the write bit for the user err := os.Chmod(tmp, 0551) c.Assert(err, check.IsNil) s, err := NewFileJSONStore(p) c.Assert(s, check.IsNil) c.Assert(err, check.NotNil) } func (FileJSONStoreSuite) TestGetTooPermissive(c *check.C) { tmp := c.MkDir() p := filepath.Join(tmp, "tuf_raw.db") s, err := NewFileJSONStore(p) c.Assert(s, check.NotNil) c.Assert(err, check.IsNil) fp := filepath.Join(p, "meta.json") err = os.WriteFile(fp, []byte{}, 0644) c.Assert(err, check.IsNil) md, err := s.GetMeta() c.Assert(md, check.IsNil) c.Assert(err, check.ErrorMatches, "permission bits for file meta.json failed.*") } client/interop_test.go000066400000000000000000000126711453140004500154050ustar00rootroot00000000000000package client import ( "bytes" "fmt" "io" "net" "net/http" "os" "path/filepath" "github.com/theupdateframework/go-tuf/util" . "gopkg.in/check.v1" goTufGenerator "github.com/theupdateframework/go-tuf/client/testdata/go-tuf/generator" ) type InteropSuite struct{} var _ = Suite(&InteropSuite{}) func (InteropSuite) TestGoClientIdentityConsistentSnapshotFalse(c *C) { checkGoIdentity(c, false) } func (InteropSuite) TestGoClientIdentityConsistentSnapshotTrue(c *C) { checkGoIdentity(c, true) } func checkGoIdentity(c *C, consistentSnapshot bool) { cwd, err := os.Getwd() c.Assert(err, IsNil) testDataDir := filepath.Join(cwd, "testdata") tempDir, err := os.MkdirTemp("", "") c.Assert(err, IsNil) defer os.RemoveAll(tempDir) // Generate the metadata and compute hashes for all the files. goTufGenerator.Generate(tempDir, filepath.Join(testDataDir, "keys.json"), consistentSnapshot) hashes := computeHashes(c, tempDir) snapshotDir := filepath.Join(testDataDir, "go-tuf", fmt.Sprintf("consistent-snapshot-%t", consistentSnapshot)) snapshotHashes := computeHashes(c, snapshotDir) c.Assert(hashes, DeepEquals, snapshotHashes, Commentf("metadata out of date, regenerate by running client/testdata/go-tuf/regenerate-metadata.sh")) } func computeHashes(c *C, dir string) map[string]string { hashes := make(map[string]string) err := filepath.Walk(dir, func(path string, info os.FileInfo, err error) error { if err != nil { return err } if info.IsDir() { return nil } bytes, err := os.ReadFile(path) if err != nil { return err } path, err = filepath.Rel(dir, path) if err != nil { return err } hashes[path] = string(bytes) return nil }) c.Assert(err, IsNil) return hashes } func (InteropSuite) TestGoClientCompatibility(c *C) { names := []string{ "go-tuf", "go-tuf-transition-M3", "go-tuf-transition-M4", } options := &HTTPRemoteOptions{MetadataPath: "", TargetsPath: "targets"} for _, name := range names { for _, consistentSnapshot := range []bool{false, true} { t := newTestCase(c, name, consistentSnapshot, options) t.run(c) } } } type testCase struct { name string consistentSnapshot bool options *HTTPRemoteOptions local LocalStore targets map[string][]byte testDir string testSteps []string } func newTestCase(c *C, name string, consistentSnapshot bool, options *HTTPRemoteOptions) testCase { cwd, err := os.Getwd() c.Assert(err, IsNil) testDir := filepath.Join(cwd, "testdata", name, fmt.Sprintf("consistent-snapshot-%t", consistentSnapshot)) dirEntries, err := os.ReadDir(testDir) c.Assert(err, IsNil) c.Assert(dirEntries, Not(HasLen), 0) testSteps := []string{} for _, dirEntry := range dirEntries { if dirEntry.IsDir() { testSteps = append(testSteps, dirEntry.Name()) } } return testCase{ name: name, consistentSnapshot: consistentSnapshot, options: options, local: MemoryLocalStore(), targets: make(map[string][]byte), testDir: testDir, testSteps: testSteps, } } func (t *testCase) run(c *C) { c.Logf("test case: %s consistent-snapshot: %t", t.name, t.consistentSnapshot) for _, stepName := range t.testSteps { t.runStep(c, stepName) } } func (t *testCase) runStep(c *C, stepName string) { c.Logf("step: %s", stepName) addr, cleanup := startFileServer(c, t.testDir) defer cleanup() remote, err := HTTPRemoteStore(fmt.Sprintf("http://%s/%s/repository", addr, stepName), t.options, nil) c.Assert(err, IsNil) client := NewClient(t.local, remote) // initiate a client with the root metadata ioReader, _, err := remote.GetMeta("root.json") c.Assert(err, IsNil) rootJsonBytes, err := io.ReadAll(ioReader) c.Assert(err, IsNil) c.Assert(client.Init(rootJsonBytes), IsNil) // check update returns the correct updated targets files, err := client.Update() c.Assert(err, IsNil) if stepName != "2" { // The rest of the test cases add one target file at a time for each cycle, so this is why we expect that // the number of updated targets returned by Update() should equals to 1 c.Assert(files, HasLen, 1) } else { // The following test case (#2) verifies that when a targets key has been rotated in the latest 3.root.json, // the local targets.json meta is indeed ignored since it's signed with a key that has been now changed. // The reason we check for 3 here is that the updated targets corresponds to all target files listed in the // targets.json for test case #2 c.Assert(files, HasLen, 3) } targetName := stepName t.targets[targetName] = []byte(targetName) file, ok := files[targetName] if !ok { c.Fatalf("expected updated targets to contain %s", targetName) } data := t.targets[targetName] meta, err := util.GenerateTargetFileMeta(bytes.NewReader(data), file.HashAlgorithms()...) c.Assert(err, IsNil) c.Assert(util.TargetFileMetaEqual(file, meta), IsNil) // download the files and check they have the correct content for name, data := range t.targets { for _, prefix := range []string{"", "/"} { var dest testDestination c.Assert(client.Download(prefix+name, &dest), IsNil) c.Assert(dest.deleted, Equals, false) c.Assert(dest.String(), Equals, string(data)) } } } func startFileServer(c *C, dir string) (string, func() error) { l, err := net.Listen("tcp", "127.0.0.1:0") c.Assert(err, IsNil) addr := l.Addr().String() go http.Serve(l, http.FileServer(http.Dir(dir))) return addr, l.Close } client/leveldbstore/000077500000000000000000000000001453140004500150225ustar00rootroot00000000000000client/leveldbstore/leveldbstore.go000066400000000000000000000025711453140004500200500ustar00rootroot00000000000000package client import ( "encoding/json" "github.com/syndtr/goleveldb/leveldb" "github.com/syndtr/goleveldb/leveldb/errors" "github.com/syndtr/goleveldb/leveldb/storage" tuf_client "github.com/theupdateframework/go-tuf/client" ) func FileLocalStore(path string) (tuf_client.LocalStore, error) { fd, err := storage.OpenFile(path, false) if err != nil { return nil, err } db, err := leveldb.Open(fd, nil) if err != nil && errors.IsCorrupted(err) { db, err = leveldb.Recover(fd, nil) } return &fileLocalStore{fd: fd, db: db}, err } type fileLocalStore struct { fd storage.Storage db *leveldb.DB } func (f *fileLocalStore) GetMeta() (map[string]json.RawMessage, error) { meta := make(map[string]json.RawMessage) db_itr := f.db.NewIterator(nil, nil) for db_itr.Next() { vcopy := make([]byte, len(db_itr.Value())) copy(vcopy, db_itr.Value()) meta[string(db_itr.Key())] = vcopy } db_itr.Release() return meta, db_itr.Error() } func (f *fileLocalStore) SetMeta(name string, meta json.RawMessage) error { return f.db.Put([]byte(name), []byte(meta), nil) } func (f *fileLocalStore) DeleteMeta(name string) error { return f.db.Delete([]byte(name), nil) } func (f *fileLocalStore) Close() error { // Always close both before returning any errors dbCloseErr := f.db.Close() fdCloseErr := f.fd.Close() if dbCloseErr != nil { return dbCloseErr } return fdCloseErr } client/leveldbstore/leveldbstore_test.go000066400000000000000000000056171453140004500211130ustar00rootroot00000000000000package client import ( "encoding/json" "path/filepath" "testing" . "gopkg.in/check.v1" "os" ) type LocalStoreSuite struct{} var _ = Suite(&LocalStoreSuite{}) // Hook up gocheck into the "go test" runner. func Test(t *testing.T) { TestingT(t) } func (LocalStoreSuite) TestFileLocalStore(c *C) { tmp := c.MkDir() path := filepath.Join(tmp, "tuf.db") store, err := FileLocalStore(path) c.Assert(err, IsNil) defer store.Close() type meta map[string]json.RawMessage assertGet := func(expected meta) { actual, err := store.GetMeta() c.Assert(err, IsNil) c.Assert(meta(actual), DeepEquals, expected) } // initial GetMeta should return empty meta assertGet(meta{}) // SetMeta should persist rootJSON := []byte(`{"_type":"Root"}`) c.Assert(store.SetMeta("root.json", rootJSON), IsNil) assertGet(meta{"root.json": rootJSON}) // SetMeta should add to existing meta targetsJSON := []byte(`{"_type":"Target"}`) c.Assert(store.SetMeta("targets.json", targetsJSON), IsNil) assertGet(meta{"root.json": rootJSON, "targets.json": targetsJSON}) // a new store should get the same meta c.Assert(store.Close(), IsNil) store, err = FileLocalStore(path) c.Assert(err, IsNil) defer func() { c.Assert(store.Close(), IsNil) }() assertGet(meta{"root.json": rootJSON, "targets.json": targetsJSON}) } func (LocalStoreSuite) TestDeleteMeta(c *C) { tmp := c.MkDir() path := filepath.Join(tmp, "tuf.db") store, err := FileLocalStore(path) c.Assert(err, IsNil) type meta map[string]json.RawMessage assertGet := func(expected meta) { actual, err := store.GetMeta() c.Assert(err, IsNil) c.Assert(meta(actual), DeepEquals, expected) } // initial GetMeta should return empty meta assertGet(meta{}) // SetMeta should persist rootJSON := []byte(`{"_type":"Root"}`) c.Assert(store.SetMeta("root.json", rootJSON), IsNil) assertGet(meta{"root.json": rootJSON}) store.DeleteMeta("root.json") m, _ := store.GetMeta() if _, ok := m["root.json"]; ok { c.Fatalf("Metadata is not deleted!") } } func (LocalStoreSuite) TestCorruptManifest(c *C) { tmp := c.MkDir() path := filepath.Join(tmp, "tuf.db") store, err := FileLocalStore(path) c.Assert(err, IsNil) // now break the manifest file err = os.Truncate(filepath.Join(path, "MANIFEST-000000"), 1) c.Assert(err, IsNil) err = store.Close() c.Assert(err, IsNil) store, err = FileLocalStore(path) c.Assert(err, IsNil) type meta map[string]json.RawMessage assertGet := func(expected meta) { actual, err := store.GetMeta() c.Assert(err, IsNil) c.Assert(meta(actual), DeepEquals, expected) } // initial GetMeta should return empty meta assertGet(meta{}) // SetMeta should persist rootJSON := []byte(`{"_type":"Root"}`) c.Assert(store.SetMeta("root.json", rootJSON), IsNil) assertGet(meta{"root.json": rootJSON}) store.DeleteMeta("root.json") m, _ := store.GetMeta() if _, ok := m["root.json"]; ok { c.Fatalf("Metadata is not deleted!") } } client/local_store.go000066400000000000000000000010001453140004500151540ustar00rootroot00000000000000package client import ( "encoding/json" ) func MemoryLocalStore() LocalStore { return make(memoryLocalStore) } type memoryLocalStore map[string]json.RawMessage func (m memoryLocalStore) GetMeta() (map[string]json.RawMessage, error) { return m, nil } func (m memoryLocalStore) SetMeta(name string, meta json.RawMessage) error { m[name] = meta return nil } func (m memoryLocalStore) DeleteMeta(name string) error { delete(m, name) return nil } func (m memoryLocalStore) Close() error { return nil } client/local_store_test.go000066400000000000000000000010311453140004500162170ustar00rootroot00000000000000package client import ( "testing" "github.com/stretchr/testify/assert" ) func TestDeleteMeta(t *testing.T) { l := MemoryLocalStore() defer func() { assert.Equal(t, nil, l.Close()) }() assert.Equal(t, l.SetMeta("root.json", []byte(` { "signed": {}, "signatures": {}, } `)), nil) m, err := l.GetMeta() assert.Equal(t, err, nil) if _, ok := m["root.json"]; !ok { t.Fatalf("Expected metadata not found!") } l.DeleteMeta("root.json") if _, ok := m["root.json"]; ok { t.Fatalf("Metadata is not deleted!") } } client/python_interop/000077500000000000000000000000001453140004500154115ustar00rootroot00000000000000client/python_interop/python_interop_test.go000066400000000000000000000157071453140004500220720ustar00rootroot00000000000000package client import ( "bytes" "fmt" "net" "net/http" "net/url" "os" "os/exec" "path/filepath" "testing" tuf "github.com/theupdateframework/go-tuf" client "github.com/theupdateframework/go-tuf/client" "github.com/theupdateframework/go-tuf/util" . "gopkg.in/check.v1" ) type InteropSuite struct{} var _ = Suite(&InteropSuite{}) var pythonTargets = map[string][]byte{ "file1.txt": []byte("file1.txt"), "dir/file2.txt": []byte("file2.txt"), } // Hook up gocheck into the "go test" runner. func Test(t *testing.T) { TestingT(t) } type testDestination struct { bytes.Buffer deleted bool } func (t *testDestination) Delete() error { t.deleted = true return nil } func (InteropSuite) TestGoClientPythonGenerated(c *C) { // start file server cwd, err := os.Getwd() c.Assert(err, IsNil) testDataDir := filepath.Join(cwd, "testdata", "python-tuf-v3.0.0") addr, cleanup := startFileServer(c, testDataDir) defer cleanup() for _, dir := range []string{"without-consistent-snapshot", "with-consistent-snapshot"} { remote, err := client.HTTPRemoteStore( fmt.Sprintf("http://%s/%s/repository", addr, dir), &client.HTTPRemoteOptions{MetadataPath: "metadata", TargetsPath: "targets"}, nil, ) c.Assert(err, IsNil) // initiate a client with the root metadata client := client.NewClient(client.MemoryLocalStore(), remote) rootJSON, err := os.ReadFile(filepath.Join(testDataDir, dir, "repository", "metadata", "1.root.json")) c.Assert(err, IsNil) c.Assert(client.Init(rootJSON), IsNil) // check update returns the correct updated targets files, err := client.Update() c.Assert(err, IsNil) c.Assert(files, HasLen, len(pythonTargets)) for name, data := range pythonTargets { file, ok := files[name] if !ok { c.Fatalf("expected updated targets to contain %s", name) } meta, err := util.GenerateTargetFileMeta(bytes.NewReader(data), file.HashAlgorithms()...) c.Assert(err, IsNil) c.Assert(util.TargetFileMetaEqual(file, meta), IsNil) } // download the files and check they have the correct content for name, data := range pythonTargets { var dest testDestination c.Assert(client.Download(name, &dest), IsNil) c.Assert(dest.deleted, Equals, false) c.Assert(dest.String(), Equals, string(data)) } } } func generateRepoFS(c *C, dir string, files map[string][]byte, consistentSnapshot bool) *tuf.Repo { repo, err := tuf.NewRepo(tuf.FileSystemStore(dir, nil)) c.Assert(err, IsNil) if !consistentSnapshot { c.Assert(repo.Init(false), IsNil) } for _, role := range []string{"root", "snapshot", "targets", "timestamp"} { _, err := repo.GenKey(role) c.Assert(err, IsNil) } for file, data := range files { path := filepath.Join(dir, "staged", "targets", file) c.Assert(os.MkdirAll(filepath.Dir(path), 0755), IsNil) c.Assert(os.WriteFile(path, data, 0644), IsNil) c.Assert(repo.AddTarget(file, nil), IsNil) } c.Assert(repo.Snapshot(), IsNil) c.Assert(repo.Timestamp(), IsNil) c.Assert(repo.Commit(), IsNil) return repo } func refreshRepo(c *C, repo *tuf.Repo) { c.Assert(repo.Snapshot(), IsNil) c.Assert(repo.Timestamp(), IsNil) c.Assert(repo.Commit(), IsNil) } func (InteropSuite) TestPythonClientGoGenerated(c *C) { // clone the Python client if necessary cwd, err := os.Getwd() c.Assert(err, IsNil) files := map[string][]byte{ "foo.txt": []byte("foo"), "bar/baz.txt": []byte("baz"), } for _, consistentSnapshot := range []bool{false, true} { // generate repository tmp := c.MkDir() // start file server addr, cleanup := startFileServer(c, tmp) defer cleanup() name := fmt.Sprintf("consistent-snapshot-%t", consistentSnapshot) dir := filepath.Join(tmp, name) generateRepoFS(c, dir, files, consistentSnapshot) // create initial files for Python client clientDir := filepath.Join(dir, "client") currDir := filepath.Join(clientDir, "tufrepo", "metadata", "current") prevDir := filepath.Join(clientDir, "tufrepo", "metadata", "previous") c.Assert(os.MkdirAll(currDir, 0755), IsNil) c.Assert(os.MkdirAll(prevDir, 0755), IsNil) rootJSON, err := os.ReadFile(filepath.Join(dir, "repository", "1.root.json")) c.Assert(err, IsNil) c.Assert(os.WriteFile(filepath.Join(currDir, "root.json"), rootJSON, 0644), IsNil) args := []string{ filepath.Join(cwd, "testdata", "python-tuf-v3.0.0", "client.py"), "--repo=http://" + addr + "/" + name, } for path := range files { args = append(args, path) } // run Python client update cmd := exec.Command("python", args...) cmd.Dir = clientDir cmd.Stdout = os.Stdout cmd.Stderr = os.Stderr c.Assert(cmd.Run(), IsNil) // check the target files got downloaded for path, expected := range files { actual, err := os.ReadFile(filepath.Join(clientDir, "tuftargets", url.QueryEscape(path))) c.Assert(err, IsNil) c.Assert(actual, DeepEquals, expected) } } } // This is a regression test for issue // https://github.com/theupdateframework/go-tuf/issues/402 func (InteropSuite) TestPythonClientGoGeneratedNullDelegations(c *C) { // clone the Python client if necessary cwd, err := os.Getwd() c.Assert(err, IsNil) files := map[string][]byte{ "foo.txt": []byte("foo"), "bar/baz.txt": []byte("baz"), } for _, consistentSnapshot := range []bool{false, true} { // generate repository tmp := c.MkDir() // start file server addr, cleanup := startFileServer(c, tmp) defer cleanup() name := fmt.Sprintf("consistent-snapshot-delegations-%t", consistentSnapshot) dir := filepath.Join(tmp, name) repo := generateRepoFS(c, dir, files, consistentSnapshot) // "Reset" top-level targets delegations and re-sign c.Assert(repo.ResetTargetsDelegations("targets"), IsNil) refreshRepo(c, repo) // create initial files for Python client clientDir := filepath.Join(dir, "client") currDir := filepath.Join(clientDir, "tufrepo", "metadata", "current") prevDir := filepath.Join(clientDir, "tufrepo", "metadata", "previous") c.Assert(os.MkdirAll(currDir, 0755), IsNil) c.Assert(os.MkdirAll(prevDir, 0755), IsNil) rootJSON, err := os.ReadFile(filepath.Join(dir, "repository", "1.root.json")) c.Assert(err, IsNil) c.Assert(os.WriteFile(filepath.Join(currDir, "root.json"), rootJSON, 0644), IsNil) args := []string{ filepath.Join(cwd, "testdata", "python-tuf-v3.0.0", "client.py"), "--repo=http://" + addr + "/" + name, } for path := range files { args = append(args, path) } // run Python client update cmd := exec.Command("python", args...) cmd.Dir = clientDir cmd.Stdout = os.Stdout cmd.Stderr = os.Stderr c.Assert(cmd.Run(), IsNil) // check the target files got downloaded for path, expected := range files { actual, err := os.ReadFile(filepath.Join(clientDir, "tuftargets", url.QueryEscape(path))) c.Assert(err, IsNil) c.Assert(actual, DeepEquals, expected) } } } func startFileServer(c *C, dir string) (string, func() error) { l, err := net.Listen("tcp", "127.0.0.1:0") c.Assert(err, IsNil) addr := l.Addr().String() go http.Serve(l, http.FileServer(http.Dir(dir))) return addr, l.Close } client/python_interop/testdata/000077500000000000000000000000001453140004500172225ustar00rootroot00000000000000client/python_interop/testdata/LICENSE.txt000066400000000000000000000063261453140004500210540ustar00rootroot00000000000000 This file contains the license for TUF: The Update Framework. It also lists license information for components and source code used by TUF: The Update Framework. If you got this file as a part of a larger bundle, there may be other license terms that you should be aware of. =============================================================================== TUF: The Update Framework is distributed under this license: Copyright (c) 2010, Justin Samuel and Justin Cappos. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and/or hardware specification (the โ€œWorkโ€) to deal in the Work without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Work, and to permit persons to whom the Work is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Work. THE WORK IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE WORK OR THE USE OR OTHER DEALINGS IN THE WORK. =============================================================================== Many files are modified from Thandy and are licensed under the following license: Thandy is distributed under this license: Copyright (c) 2008, The Tor Project, Inc. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the names of the copyright owners nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. =============================================================================== client/python_interop/testdata/Makefile000066400000000000000000000003111453140004500206550ustar00rootroot00000000000000PYTHON_TUF=python-tuf-v3.0.0 all: docker build -t tuf-gen ./$(PYTHON_TUF) docker run tuf-gen | tar x -C $(PYTHON_TUF) clean: rm -rf $(PYTHON_TUF)/with{,out}-consistent-snapshot .PHONY: all clean client/python_interop/testdata/README.md000066400000000000000000000017061453140004500205050ustar00rootroot00000000000000# TUF testdata TUF testdata generated by the Python implementation which is used to test that the Go client is compatible with files generated by the Python repository tool. ## Generate The `generate` directory contains scripts and a Dockerfile for generating the test data files. Run `make` to regenerate the test files: ``` $ make clean rm -rf keystore repository $ make docker build -t tuf-gen ./generate ... Successfully built ac1fba1d0b3b docker run tuf-gen | tar x Files generated: . |-- keystore | |-- root_key | |-- root_key.pub | |-- snapshot_key | |-- snapshot_key.pub | |-- targets_key | |-- targets_key.pub | |-- timestamp_key | `-- timestamp_key.pub |-- repository | |-- metadata | | |-- root.json | | |-- snapshot.json | | |-- targets.json | | |-- targets.json.gz | | `-- timestamp.json | `-- targets | |-- dir | | `-- file2.txt | `-- file1.txt `-- tuf.log 5 directories, 16 files ``` client/python_interop/testdata/python-tuf-v3.0.0/000077500000000000000000000000001453140004500221615ustar00rootroot00000000000000client/python_interop/testdata/python-tuf-v3.0.0/Dockerfile000066400000000000000000000003341453140004500241530ustar00rootroot00000000000000FROM python:3.10 RUN apt-get update && apt-get install -y libsodium-dev tree RUN pip install -U pip && pip install 'securesystemslib[crypto,pynacl]==0.28.0' 'tuf==v3.0.0' ADD generate.py generate.sh / CMD /generate.sh client/python_interop/testdata/python-tuf-v3.0.0/client.py000066400000000000000000000034311453140004500240120ustar00rootroot00000000000000#!/usr/bin/env python # Copyright 2012 - 2023, New York University and the TUF contributors # SPDX-License-Identifier: MIT OR Apache-2.0 # # A simplified version of client_exmample.py from the Python implementation: # https://github.com/theupdateframework/python-tuf/blob/v1.0.0/examples/client_example/client_example.py import argparse from typing import List from pathlib import Path from tuf.ngclient import Updater def update_client(repo: str, targets: List[str]): metadata_dir = Path("tufrepo/metadata/current") targets_dir = Path("tuftargets") targets_dir.mkdir() updater = Updater( metadata_dir=str(metadata_dir), metadata_base_url=f"{repo}/repository/", target_base_url=f"{repo}/repository/targets/", target_dir=str(targets_dir), ) updater.refresh() for target in targets: info = updater.get_targetinfo(target) assert not updater.find_cached_target(info) updater.download_target(info) def parse_arguments(): parser = argparse.ArgumentParser( description="Retrieve file from TUF repository.") parser.add_argument( "-r", "--repo", type=str, required=True, metavar="", help="Specify the remote repository's URI" " (e.g., http://www.example.com:8001/tuf/). The client retrieves" " updates from the remote repository.", ) parser.add_argument( "targets", nargs="+", metavar="", help="Specify" " the target files to retrieve from the specified TUF repository.", ) parsed_arguments = parser.parse_args() return parsed_arguments def main(): arguments = parse_arguments() update_client(arguments.repo, arguments.targets) if __name__ == "__main__": main() client/python_interop/testdata/python-tuf-v3.0.0/generate.py000077500000000000000000000101711453140004500243300ustar00rootroot00000000000000#!/usr/bin/env python # # A script to generate TUF repository files. # # A modification of generate.py from the Python implementation: # https://github.com/theupdateframework/tuf/blob/v0.9.9/tests/repository_data/generate.py # Updated a bit for the v1.0.0 version: # https://github.com/theupdateframework/python-tuf/blob/v1.0.0/examples/repo_example/basic_repo.py import datetime import optparse import shutil from pathlib import Path from typing import Dict from securesystemslib.keys import generate_ed25519_key from securesystemslib.signer import SSlibSigner, SSlibKey from tuf.api.metadata import ( Metadata, MetaFile, Role, Root, Snapshot, TargetFile, Targets, Timestamp, ) from tuf.api.serialization.json import JSONSerializer SPEC_VERSION = "1.0.19" PRETTY = JSONSerializer(compact=False) EXPIRY = datetime.datetime(2030, 1, 1, 0, 0) # Far enough in the future ROLES = set(("targets", "snapshot", "timestamp", "root")) def make_targets(target_dir: Path, consistent_snapshot: bool) -> Dict[str, TargetFile]: targets = {} for target in (Path("file1.txt"), Path("dir/file2.txt")): target_fspath = target_dir / target target_fspath.parent.mkdir(parents=True, exist_ok=True) # file contents are the file name target_fspath.write_text(target.name) target_file_info = TargetFile.from_file( str(target), str(target_fspath)) if consistent_snapshot: digest = next(iter(target_file_info.hashes.values())) shutil.move(target_fspath, target_fspath.parent / f"{digest}.{target.name}") targets[str(target)] = target_file_info return targets def make_test_repo(repo_dir: Path, consistent_snapshot: bool): """Create a test repository in `repo_dir`. Two targets: - `file1.txt` - `dir/file2.txt` """ roles: Dict[str, Metadata] = {} targets: Dict[str, TargetFile] = {} target_dir = repo_dir / "targets" target_dir.mkdir() targets = make_targets(target_dir, consistent_snapshot) target_metadata = Targets( version=1, spec_version=SPEC_VERSION, expires=EXPIRY, targets=targets ) roles["targets"] = Metadata[Targets](target_metadata, {}) snapshot_metadata = Snapshot( version=1, spec_version=SPEC_VERSION, expires=EXPIRY, meta={"targets.json": MetaFile(version=1)}, ) roles["snapshot"] = Metadata[Snapshot](snapshot_metadata, {}) timestamp_metadata = Timestamp( version=1, spec_version=SPEC_VERSION, expires=EXPIRY, snapshot_meta=MetaFile(version=1), ) roles["timestamp"] = Metadata[Timestamp](timestamp_metadata, {}) keys = {name: generate_ed25519_key() for name in ROLES} root_metadata = Root( version=1, spec_version=SPEC_VERSION, expires=EXPIRY, keys={ key["keyid"]: SSlibKey.from_securesystemslib_key(key) for key in keys.values() }, roles={role: Role([key["keyid"]], threshold=1) for role, key in keys.items()}, consistent_snapshot=consistent_snapshot, ) roles["root"] = Metadata[Root](root_metadata, {}) # Write the metadata files metadata_dir = repo_dir / "metadata" metadata_dir.mkdir() for name in ["root", "targets", "snapshot", "timestamp"]: role = roles[name] key = keys[role.signed.type] signer = SSlibSigner(key) role.sign(signer) if name == "root" or (consistent_snapshot and name != "timestamp"): filename = f"{role.signed.version}.{name}.json" else: filename = f"{name}.json" role.to_file(str(metadata_dir / filename), serializer=PRETTY) def main(): parser = optparse.OptionParser() parser.add_option( "-c", "--consistent-snapshot", action="store_true", dest="consistent_snapshot", help="Generate consistent snapshot", default=False, ) (options, args) = parser.parse_args() repo_dir = Path("repository") repo_dir.mkdir() make_test_repo(repo_dir, options.consistent_snapshot) if __name__ == "__main__": main() client/python_interop/testdata/python-tuf-v3.0.0/generate.sh000077500000000000000000000013731453140004500243160ustar00rootroot00000000000000#!/bin/bash # # A script to generate TUF repository files using the Python implementation. # # A list of generated files is printed to STDERR and a tar of the files to STDOUT. set -e main() { local dir="$(mktemp -d)" trap "rm -rf ${dir}" EXIT pushd "${dir}" >/dev/null generate_consistent generate_non_consistent list_files >&2 tar c . popd >/dev/null } generate_consistent() { mkdir "with-consistent-snapshot" pushd "with-consistent-snapshot" >/dev/null python3 /generate.py --consistent-snapshot popd >/dev/null } generate_non_consistent() { mkdir "without-consistent-snapshot" pushd "without-consistent-snapshot" >/dev/null python3 /generate.py popd >/dev/null } list_files() { echo "Files generated:" tree } main $@ client/python_interop/testdata/python-tuf-v3.0.0/with-consistent-snapshot/000077500000000000000000000000001453140004500271605ustar00rootroot00000000000000client/python_interop/testdata/python-tuf-v3.0.0/with-consistent-snapshot/repository/000077500000000000000000000000001453140004500313775ustar00rootroot00000000000000client/python_interop/testdata/python-tuf-v3.0.0/with-consistent-snapshot/repository/metadata/000077500000000000000000000000001453140004500331575ustar00rootroot000000000000001.root.json000077500000000000000000000035701453140004500351250ustar00rootroot00000000000000client/python_interop/testdata/python-tuf-v3.0.0/with-consistent-snapshot/repository/metadata{ "signatures": [ { "keyid": "c3fcd2035fd2d29b36a29c9e9a52b199f85492b7cf8f9730b865dfa989eb47c8", "sig": "1c02cfc95564dcce804f2c48de3048881e89be6b49ad3db208a870a5bd69bc7749c809613f44edadd744a01b0ead25753853dbacb955e6b29b59672f654c1809" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2030-01-01T00:00:00Z", "keys": { "1d98f2950591737d5f49f0a00d00890ee385ed272285fba1cb89553a37813fcf": { "keytype": "ed25519", "keyval": { "public": "4b937cac5c77ce5ebd18b4ce252f92b1da3e8640a033c34726fe7a821c3acd45" }, "scheme": "ed25519" }, "c3fcd2035fd2d29b36a29c9e9a52b199f85492b7cf8f9730b865dfa989eb47c8": { "keytype": "ed25519", "keyval": { "public": "0cb442e869c9aead667909ba27ce7ed2c87d396fb92a180ec02b37c64f0f0404" }, "scheme": "ed25519" }, "e45cfc40f8cae2e4d760b4ecec0b59238fd2fd769391998920927eec825e7829": { "keytype": "ed25519", "keyval": { "public": "ce00487915590a5748b9c08ca720c26cd233424a05f72105ccaa49411b662e83" }, "scheme": "ed25519" }, "f7662dc3e9eebfb74d0e53f56941c6cf5668967110d2af28b41f9371544ccd0b": { "keytype": "ed25519", "keyval": { "public": "64017bbf887018ecb927029b7524ea9b50d201e232274843384204c5e6e25c06" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "c3fcd2035fd2d29b36a29c9e9a52b199f85492b7cf8f9730b865dfa989eb47c8" ], "threshold": 1 }, "snapshot": { "keyids": [ "e45cfc40f8cae2e4d760b4ecec0b59238fd2fd769391998920927eec825e7829" ], "threshold": 1 }, "targets": { "keyids": [ "f7662dc3e9eebfb74d0e53f56941c6cf5668967110d2af28b41f9371544ccd0b" ], "threshold": 1 }, "timestamp": { "keyids": [ "1d98f2950591737d5f49f0a00d00890ee385ed272285fba1cb89553a37813fcf" ], "threshold": 1 } }, "spec_version": "1.0.19", "version": 1 } }1.snapshot.json000077500000000000000000000006601453140004500357760ustar00rootroot00000000000000client/python_interop/testdata/python-tuf-v3.0.0/with-consistent-snapshot/repository/metadata{ "signatures": [ { "keyid": "e45cfc40f8cae2e4d760b4ecec0b59238fd2fd769391998920927eec825e7829", "sig": "f86a214877f8009aee97b2fc0f96131714f07fa8e2e65b153f08be6d3eba1533b82fb2b774cb82d0b7969f2d5d94071c387f4891276484ba6f5e7a0e11b58f09" } ], "signed": { "_type": "snapshot", "expires": "2030-01-01T00:00:00Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.19", "version": 1 } }1.targets.json000077500000000000000000000012541453140004500356100ustar00rootroot00000000000000client/python_interop/testdata/python-tuf-v3.0.0/with-consistent-snapshot/repository/metadata{ "signatures": [ { "keyid": "f7662dc3e9eebfb74d0e53f56941c6cf5668967110d2af28b41f9371544ccd0b", "sig": "708400f70b965991928ea89f925227c97886f673a4e6a32e57062fc533580812fd1b65989fd751a4c3959ff716d8f0e7a09da0d971fa726553f5cc3ea7ff600e" } ], "signed": { "_type": "targets", "expires": "2030-01-01T00:00:00Z", "spec_version": "1.0.19", "targets": { "dir/file2.txt": { "hashes": { "sha256": "04e2f59431a9d219321baf7d21b8cc797d7615dc3e9515c782c49d2075658701" }, "length": 9 }, "file1.txt": { "hashes": { "sha256": "55ae75d991c770d8f3ef07cbfde124ffce9c420da5db6203afab700b27e10cf9" }, "length": 9 } }, "version": 1 } }timestamp.json000077500000000000000000000006621453140004500360050ustar00rootroot00000000000000client/python_interop/testdata/python-tuf-v3.0.0/with-consistent-snapshot/repository/metadata{ "signatures": [ { "keyid": "1d98f2950591737d5f49f0a00d00890ee385ed272285fba1cb89553a37813fcf", "sig": "4453d37f5105ba74f203c72e241c2f3a61df82f37f66e80ba43523534c8bbe30eb06b675133662a38544c87e1087a013d2a786a718ce2f1f338f4177bedccf0e" } ], "signed": { "_type": "timestamp", "expires": "2030-01-01T00:00:00Z", "meta": { "snapshot.json": { "version": 1 } }, "spec_version": "1.0.19", "version": 1 } }client/python_interop/testdata/python-tuf-v3.0.0/with-consistent-snapshot/repository/targets/000077500000000000000000000000001453140004500330505ustar00rootroot0000000000000055ae75d991c770d8f3ef07cbfde124ffce9c420da5db6203afab700b27e10cf9.file1.txt000066400000000000000000000000111453140004500460330ustar00rootroot00000000000000client/python_interop/testdata/python-tuf-v3.0.0/with-consistent-snapshot/repository/targetsfile1.txtclient/python_interop/testdata/python-tuf-v3.0.0/with-consistent-snapshot/repository/targets/dir/000077500000000000000000000000001453140004500336265ustar00rootroot0000000000000004e2f59431a9d219321baf7d21b8cc797d7615dc3e9515c782c49d2075658701.file2.txt000066400000000000000000000000111453140004500455370ustar00rootroot00000000000000client/python_interop/testdata/python-tuf-v3.0.0/with-consistent-snapshot/repository/targets/dirfile2.txtclient/python_interop/testdata/python-tuf-v3.0.0/without-consistent-snapshot/000077500000000000000000000000001453140004500277105ustar00rootroot00000000000000client/python_interop/testdata/python-tuf-v3.0.0/without-consistent-snapshot/repository/000077500000000000000000000000001453140004500321275ustar00rootroot00000000000000client/python_interop/testdata/python-tuf-v3.0.0/without-consistent-snapshot/repository/metadata/000077500000000000000000000000001453140004500337075ustar00rootroot000000000000001.root.json000077500000000000000000000035711453140004500356560ustar00rootroot00000000000000client/python_interop/testdata/python-tuf-v3.0.0/without-consistent-snapshot/repository/metadata{ "signatures": [ { "keyid": "6a6777bdb8d607b2ca394fab722440c9b82557d4c3d694b69ed37f880d0bb359", "sig": "32a8f36d461328175f3f48852c8c3f5c0b2202e263e66b40171b3aeca4b485e2d21e29b949da816f1f899f537450fa989a2e7356f7469b9d59b9c37eb0388b06" } ], "signed": { "_type": "root", "consistent_snapshot": false, "expires": "2030-01-01T00:00:00Z", "keys": { "6a6777bdb8d607b2ca394fab722440c9b82557d4c3d694b69ed37f880d0bb359": { "keytype": "ed25519", "keyval": { "public": "16b7d48bb6bf00dd8d3bcbea04c5937f85334dcc4e5be73b62ec551778962def" }, "scheme": "ed25519" }, "94995c1ecba97e06fc8c65fb881504c62c5906000cbf0fc39bf2ed910690ce91": { "keytype": "ed25519", "keyval": { "public": "e8a65a4317ab8a37a8db8ce3785b8745516282425d9b3d3533605a62c729fc9c" }, "scheme": "ed25519" }, "b2100105c1dcea16a93bc583fa0a3a6936b5375b1f944eaf6bc8e806c0f43046": { "keytype": "ed25519", "keyval": { "public": "34beb06ede086112f38aef9131eee9e480e0d3670e801b97d2e99add6ac0856f" }, "scheme": "ed25519" }, "c74276233340a505633ab55237d3ff7c0e2fedb938806d0226d2331e8c5f98f4": { "keytype": "ed25519", "keyval": { "public": "b4135ebeaf0850dad533cdc0a2721af9941503ea2009eace713685a47b15be32" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "6a6777bdb8d607b2ca394fab722440c9b82557d4c3d694b69ed37f880d0bb359" ], "threshold": 1 }, "snapshot": { "keyids": [ "94995c1ecba97e06fc8c65fb881504c62c5906000cbf0fc39bf2ed910690ce91" ], "threshold": 1 }, "targets": { "keyids": [ "b2100105c1dcea16a93bc583fa0a3a6936b5375b1f944eaf6bc8e806c0f43046" ], "threshold": 1 }, "timestamp": { "keyids": [ "c74276233340a505633ab55237d3ff7c0e2fedb938806d0226d2331e8c5f98f4" ], "threshold": 1 } }, "spec_version": "1.0.19", "version": 1 } }snapshot.json000077500000000000000000000006601453140004500363670ustar00rootroot00000000000000client/python_interop/testdata/python-tuf-v3.0.0/without-consistent-snapshot/repository/metadata{ "signatures": [ { "keyid": "94995c1ecba97e06fc8c65fb881504c62c5906000cbf0fc39bf2ed910690ce91", "sig": "618e99e47678fa0ccc5b664e5b4230de9f529d6456f376ef8ee55a8d94cf4e592e5b1ab5d6789838cbc1e7724af544866be48cd49cb32d3ac9485bb02ec06a0d" } ], "signed": { "_type": "snapshot", "expires": "2030-01-01T00:00:00Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.19", "version": 1 } }targets.json000077500000000000000000000012541453140004500362010ustar00rootroot00000000000000client/python_interop/testdata/python-tuf-v3.0.0/without-consistent-snapshot/repository/metadata{ "signatures": [ { "keyid": "b2100105c1dcea16a93bc583fa0a3a6936b5375b1f944eaf6bc8e806c0f43046", "sig": "c4ad17cbc0bc54410c135dc74b638c51e1cafbb64f991b0a3e90a526eb63a162c33a73d6fde01ba84775522eb5c724f43c9f3efd7afd5bc469a5814399e31a0f" } ], "signed": { "_type": "targets", "expires": "2030-01-01T00:00:00Z", "spec_version": "1.0.19", "targets": { "dir/file2.txt": { "hashes": { "sha256": "04e2f59431a9d219321baf7d21b8cc797d7615dc3e9515c782c49d2075658701" }, "length": 9 }, "file1.txt": { "hashes": { "sha256": "55ae75d991c770d8f3ef07cbfde124ffce9c420da5db6203afab700b27e10cf9" }, "length": 9 } }, "version": 1 } }timestamp.json000077500000000000000000000006621453140004500365350ustar00rootroot00000000000000client/python_interop/testdata/python-tuf-v3.0.0/without-consistent-snapshot/repository/metadata{ "signatures": [ { "keyid": "c74276233340a505633ab55237d3ff7c0e2fedb938806d0226d2331e8c5f98f4", "sig": "f1191748bc8b74751c7e6c3bb0a85a02d54f92214bda78cd3230edf826a9bbf0af15dbf214424e7fb6c7b1a84054ed7a6bb57b05169c52ac0e63da099b9fdd02" } ], "signed": { "_type": "timestamp", "expires": "2030-01-01T00:00:00Z", "meta": { "snapshot.json": { "version": 1 } }, "spec_version": "1.0.19", "version": 1 } }client/python_interop/testdata/python-tuf-v3.0.0/without-consistent-snapshot/repository/targets/000077500000000000000000000000001453140004500336005ustar00rootroot00000000000000client/python_interop/testdata/python-tuf-v3.0.0/without-consistent-snapshot/repository/targets/dir/000077500000000000000000000000001453140004500343565ustar00rootroot00000000000000file2.txt000066400000000000000000000000111453140004500360310ustar00rootroot00000000000000client/python_interop/testdata/python-tuf-v3.0.0/without-consistent-snapshot/repository/targets/dirfile2.txtfile1.txt000066400000000000000000000000111453140004500352520ustar00rootroot00000000000000client/python_interop/testdata/python-tuf-v3.0.0/without-consistent-snapshot/repository/targetsfile1.txtclient/remote_store.go000066400000000000000000000044541453140004500153750ustar00rootroot00000000000000package client import ( "fmt" "io" "net/http" "net/url" "path" "strconv" "strings" "time" ) type HTTPRemoteOptions struct { MetadataPath string TargetsPath string UserAgent string Retries *HTTPRemoteRetries } type HTTPRemoteRetries struct { Delay time.Duration Total time.Duration } var DefaultHTTPRetries = &HTTPRemoteRetries{ Delay: time.Second, Total: 10 * time.Second, } func HTTPRemoteStore(baseURL string, opts *HTTPRemoteOptions, client *http.Client) (RemoteStore, error) { if !strings.HasPrefix(baseURL, "http") { return nil, ErrInvalidURL{baseURL} } if opts == nil { opts = &HTTPRemoteOptions{} } if opts.TargetsPath == "" { opts.TargetsPath = "targets" } if client == nil { client = http.DefaultClient } return &httpRemoteStore{baseURL, opts, client}, nil } type httpRemoteStore struct { baseURL string opts *HTTPRemoteOptions cli *http.Client } func (h *httpRemoteStore) GetMeta(name string) (io.ReadCloser, int64, error) { return h.get(path.Join(h.opts.MetadataPath, name)) } func (h *httpRemoteStore) GetTarget(name string) (io.ReadCloser, int64, error) { return h.get(path.Join(h.opts.TargetsPath, name)) } func (h *httpRemoteStore) get(s string) (io.ReadCloser, int64, error) { u := h.url(s) req, err := http.NewRequest("GET", u, nil) if err != nil { return nil, 0, err } if h.opts.UserAgent != "" { req.Header.Set("User-Agent", h.opts.UserAgent) } var res *http.Response if r := h.opts.Retries; r != nil { for start := time.Now(); time.Since(start) < r.Total; time.Sleep(r.Delay) { res, err = h.cli.Do(req) if err == nil && (res.StatusCode < 500 || res.StatusCode > 599) { break } } } else { res, err = h.cli.Do(req) } if err != nil { return nil, 0, err } if res.StatusCode == http.StatusNotFound { res.Body.Close() return nil, 0, ErrNotFound{s} } else if res.StatusCode != http.StatusOK { res.Body.Close() return nil, 0, &url.Error{ Op: "GET", URL: u, Err: fmt.Errorf("unexpected HTTP status %d", res.StatusCode), } } size, err := strconv.ParseInt(res.Header.Get("Content-Length"), 10, 0) if err != nil { return res.Body, -1, nil } return res.Body, size, nil } func (h *httpRemoteStore) url(path string) string { if !strings.HasPrefix(path, "/") { path = "/" + path } return h.baseURL + path } client/testdata/000077500000000000000000000000001453140004500141415ustar00rootroot00000000000000client/testdata/Published1Time/000077500000000000000000000000001453140004500167605ustar00rootroot00000000000000client/testdata/Published1Time/client/000077500000000000000000000000001453140004500202365ustar00rootroot00000000000000client/testdata/Published1Time/client/metadata/000077500000000000000000000000001453140004500220165ustar00rootroot00000000000000client/testdata/Published1Time/client/metadata/current/000077500000000000000000000000001453140004500235005ustar00rootroot00000000000000client/testdata/Published1Time/client/metadata/current/1.root.json000066400000000000000000000042031453140004500255140ustar00rootroot00000000000000{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "fc18813db531963ba283e63056be9f5e303e6e4f3d4cdc06301ff2c7fdf67e6850881439eb6e5479a4c874f7e5837972cb1debe02e0613a0ef229a9545a0f60d" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:13:36Z", "keys": { "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published1Time/client/metadata/current/1.snapshot.json000066400000000000000000000006571453140004500264010ustar00rootroot00000000000000{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "bff908e74d135b9877db003f078a863701f64ee477f2f9521628396ce14a460d7cbd0b5f81682c7dd082512f18d0dedb5c593b012856f496012445cfd16d6706" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:13:36Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published1Time/client/metadata/current/1.targets.json000066400000000000000000000006711453140004500262070ustar00rootroot00000000000000{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "bc7c651efcc8939b9e8dedaa8655ddb95b4f0e6a9336502dffe82e569e035c1274415c4075eef318f964bceb834d85a763f58e5c34d8e3e88cd603e6aec5ec05" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:13:36Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }client/testdata/Published1Time/client/metadata/current/1.timestamp.json000066400000000000000000000013001453140004500265270ustar00rootroot00000000000000{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "e4e6dc4a5e6effa5e9a85a2cb22e29847ee91dec8e5f2f57bd50c573a47e9cc95566f703ef0f9ecf4e0ee82804ad92412a226524924f4fb99724c949fffd1e05" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:13:36Z", "meta": { "snapshot.json": { "hashes": { "sha256": "2bf3861b5e3be6cb82dc3820cbb128874d18f88e2f08ef81f6b385f3e3c7900b", "sha512": "c178334cff4dbb2dec4eea043b135a6339661a3c189dc0a689c6f92f150bd15474de5189c513a8c68bf831ea15656142c4ce8de0ae54ab23806fa6af4683783d" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published1Time/client/metadata/current/root.json000066400000000000000000000042031453140004500253550ustar00rootroot00000000000000{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "fc18813db531963ba283e63056be9f5e303e6e4f3d4cdc06301ff2c7fdf67e6850881439eb6e5479a4c874f7e5837972cb1debe02e0613a0ef229a9545a0f60d" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:13:36Z", "keys": { "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published1Time/client/metadata/current/snapshot.json000066400000000000000000000006571453140004500262420ustar00rootroot00000000000000{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "bff908e74d135b9877db003f078a863701f64ee477f2f9521628396ce14a460d7cbd0b5f81682c7dd082512f18d0dedb5c593b012856f496012445cfd16d6706" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:13:36Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published1Time/client/metadata/current/targets.json000066400000000000000000000006711453140004500260500ustar00rootroot00000000000000{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "bc7c651efcc8939b9e8dedaa8655ddb95b4f0e6a9336502dffe82e569e035c1274415c4075eef318f964bceb834d85a763f58e5c34d8e3e88cd603e6aec5ec05" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:13:36Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }client/testdata/Published1Time/client/metadata/current/timestamp.json000066400000000000000000000013001453140004500263700ustar00rootroot00000000000000{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "e4e6dc4a5e6effa5e9a85a2cb22e29847ee91dec8e5f2f57bd50c573a47e9cc95566f703ef0f9ecf4e0ee82804ad92412a226524924f4fb99724c949fffd1e05" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:13:36Z", "meta": { "snapshot.json": { "hashes": { "sha256": "2bf3861b5e3be6cb82dc3820cbb128874d18f88e2f08ef81f6b385f3e3c7900b", "sha512": "c178334cff4dbb2dec4eea043b135a6339661a3c189dc0a689c6f92f150bd15474de5189c513a8c68bf831ea15656142c4ce8de0ae54ab23806fa6af4683783d" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published1Time/client/metadata/previous/000077500000000000000000000000001453140004500236725ustar00rootroot00000000000000client/testdata/Published1Time/client/metadata/previous/1.root.json000066400000000000000000000042031453140004500257060ustar00rootroot00000000000000{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "fc18813db531963ba283e63056be9f5e303e6e4f3d4cdc06301ff2c7fdf67e6850881439eb6e5479a4c874f7e5837972cb1debe02e0613a0ef229a9545a0f60d" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:13:36Z", "keys": { "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published1Time/client/metadata/previous/1.snapshot.json000066400000000000000000000006571453140004500265730ustar00rootroot00000000000000{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "bff908e74d135b9877db003f078a863701f64ee477f2f9521628396ce14a460d7cbd0b5f81682c7dd082512f18d0dedb5c593b012856f496012445cfd16d6706" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:13:36Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published1Time/client/metadata/previous/1.targets.json000066400000000000000000000006711453140004500264010ustar00rootroot00000000000000{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "bc7c651efcc8939b9e8dedaa8655ddb95b4f0e6a9336502dffe82e569e035c1274415c4075eef318f964bceb834d85a763f58e5c34d8e3e88cd603e6aec5ec05" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:13:36Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }client/testdata/Published1Time/client/metadata/previous/1.timestamp.json000066400000000000000000000013001453140004500267210ustar00rootroot00000000000000{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "e4e6dc4a5e6effa5e9a85a2cb22e29847ee91dec8e5f2f57bd50c573a47e9cc95566f703ef0f9ecf4e0ee82804ad92412a226524924f4fb99724c949fffd1e05" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:13:36Z", "meta": { "snapshot.json": { "hashes": { "sha256": "2bf3861b5e3be6cb82dc3820cbb128874d18f88e2f08ef81f6b385f3e3c7900b", "sha512": "c178334cff4dbb2dec4eea043b135a6339661a3c189dc0a689c6f92f150bd15474de5189c513a8c68bf831ea15656142c4ce8de0ae54ab23806fa6af4683783d" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published1Time/client/metadata/previous/root.json000066400000000000000000000042031453140004500255470ustar00rootroot00000000000000{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "fc18813db531963ba283e63056be9f5e303e6e4f3d4cdc06301ff2c7fdf67e6850881439eb6e5479a4c874f7e5837972cb1debe02e0613a0ef229a9545a0f60d" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:13:36Z", "keys": { "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published1Time/client/metadata/previous/snapshot.json000066400000000000000000000006571453140004500264340ustar00rootroot00000000000000{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "bff908e74d135b9877db003f078a863701f64ee477f2f9521628396ce14a460d7cbd0b5f81682c7dd082512f18d0dedb5c593b012856f496012445cfd16d6706" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:13:36Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published1Time/client/metadata/previous/targets.json000066400000000000000000000006711453140004500262420ustar00rootroot00000000000000{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "bc7c651efcc8939b9e8dedaa8655ddb95b4f0e6a9336502dffe82e569e035c1274415c4075eef318f964bceb834d85a763f58e5c34d8e3e88cd603e6aec5ec05" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:13:36Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }client/testdata/Published1Time/client/metadata/previous/timestamp.json000066400000000000000000000013001453140004500265620ustar00rootroot00000000000000{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "e4e6dc4a5e6effa5e9a85a2cb22e29847ee91dec8e5f2f57bd50c573a47e9cc95566f703ef0f9ecf4e0ee82804ad92412a226524924f4fb99724c949fffd1e05" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:13:36Z", "meta": { "snapshot.json": { "hashes": { "sha256": "2bf3861b5e3be6cb82dc3820cbb128874d18f88e2f08ef81f6b385f3e3c7900b", "sha512": "c178334cff4dbb2dec4eea043b135a6339661a3c189dc0a689c6f92f150bd15474de5189c513a8c68bf831ea15656142c4ce8de0ae54ab23806fa6af4683783d" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published1Time/hash.txt000066400000000000000000000001001453140004500204330ustar00rootroot000000000000004b336d13d5ef371c39a574265b9c8f5dcf7a6031962a8f2ef9238e8b45d8019bclient/testdata/Published1Time/server/000077500000000000000000000000001453140004500202665ustar00rootroot00000000000000client/testdata/Published1Time/server/metadata.staged/000077500000000000000000000000001453140004500233145ustar00rootroot00000000000000client/testdata/Published1Time/server/metadata.staged/1.root.json000066400000000000000000000042031453140004500253300ustar00rootroot00000000000000{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "fc18813db531963ba283e63056be9f5e303e6e4f3d4cdc06301ff2c7fdf67e6850881439eb6e5479a4c874f7e5837972cb1debe02e0613a0ef229a9545a0f60d" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:13:36Z", "keys": { "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published1Time/server/metadata.staged/1.snapshot.json000066400000000000000000000006571453140004500262150ustar00rootroot00000000000000{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "bff908e74d135b9877db003f078a863701f64ee477f2f9521628396ce14a460d7cbd0b5f81682c7dd082512f18d0dedb5c593b012856f496012445cfd16d6706" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:13:36Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published1Time/server/metadata.staged/1.targets.json000066400000000000000000000006711453140004500260230ustar00rootroot00000000000000{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "bc7c651efcc8939b9e8dedaa8655ddb95b4f0e6a9336502dffe82e569e035c1274415c4075eef318f964bceb834d85a763f58e5c34d8e3e88cd603e6aec5ec05" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:13:36Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }client/testdata/Published1Time/server/metadata.staged/1.timestamp.json000066400000000000000000000013001453140004500263430ustar00rootroot00000000000000{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "e4e6dc4a5e6effa5e9a85a2cb22e29847ee91dec8e5f2f57bd50c573a47e9cc95566f703ef0f9ecf4e0ee82804ad92412a226524924f4fb99724c949fffd1e05" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:13:36Z", "meta": { "snapshot.json": { "hashes": { "sha256": "2bf3861b5e3be6cb82dc3820cbb128874d18f88e2f08ef81f6b385f3e3c7900b", "sha512": "c178334cff4dbb2dec4eea043b135a6339661a3c189dc0a689c6f92f150bd15474de5189c513a8c68bf831ea15656142c4ce8de0ae54ab23806fa6af4683783d" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published1Time/server/metadata.staged/root.json000066400000000000000000000042031453140004500251710ustar00rootroot00000000000000{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "fc18813db531963ba283e63056be9f5e303e6e4f3d4cdc06301ff2c7fdf67e6850881439eb6e5479a4c874f7e5837972cb1debe02e0613a0ef229a9545a0f60d" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:13:36Z", "keys": { "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published1Time/server/metadata.staged/snapshot.json000066400000000000000000000006571453140004500260560ustar00rootroot00000000000000{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "bff908e74d135b9877db003f078a863701f64ee477f2f9521628396ce14a460d7cbd0b5f81682c7dd082512f18d0dedb5c593b012856f496012445cfd16d6706" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:13:36Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published1Time/server/metadata.staged/targets.json000066400000000000000000000006711453140004500256640ustar00rootroot00000000000000{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "bc7c651efcc8939b9e8dedaa8655ddb95b4f0e6a9336502dffe82e569e035c1274415c4075eef318f964bceb834d85a763f58e5c34d8e3e88cd603e6aec5ec05" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:13:36Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }client/testdata/Published1Time/server/metadata.staged/timestamp.json000066400000000000000000000013001453140004500262040ustar00rootroot00000000000000{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "e4e6dc4a5e6effa5e9a85a2cb22e29847ee91dec8e5f2f57bd50c573a47e9cc95566f703ef0f9ecf4e0ee82804ad92412a226524924f4fb99724c949fffd1e05" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:13:36Z", "meta": { "snapshot.json": { "hashes": { "sha256": "2bf3861b5e3be6cb82dc3820cbb128874d18f88e2f08ef81f6b385f3e3c7900b", "sha512": "c178334cff4dbb2dec4eea043b135a6339661a3c189dc0a689c6f92f150bd15474de5189c513a8c68bf831ea15656142c4ce8de0ae54ab23806fa6af4683783d" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published1Time/server/metadata/000077500000000000000000000000001453140004500220465ustar00rootroot00000000000000client/testdata/Published1Time/server/metadata/1.root.json000066400000000000000000000042031453140004500240620ustar00rootroot00000000000000{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "fc18813db531963ba283e63056be9f5e303e6e4f3d4cdc06301ff2c7fdf67e6850881439eb6e5479a4c874f7e5837972cb1debe02e0613a0ef229a9545a0f60d" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:13:36Z", "keys": { "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published1Time/server/metadata/1.snapshot.json000066400000000000000000000006571453140004500247470ustar00rootroot00000000000000{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "bff908e74d135b9877db003f078a863701f64ee477f2f9521628396ce14a460d7cbd0b5f81682c7dd082512f18d0dedb5c593b012856f496012445cfd16d6706" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:13:36Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published1Time/server/metadata/1.targets.json000066400000000000000000000006711453140004500245550ustar00rootroot00000000000000{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "bc7c651efcc8939b9e8dedaa8655ddb95b4f0e6a9336502dffe82e569e035c1274415c4075eef318f964bceb834d85a763f58e5c34d8e3e88cd603e6aec5ec05" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:13:36Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }client/testdata/Published1Time/server/metadata/1.timestamp.json000066400000000000000000000013001453140004500250750ustar00rootroot00000000000000{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "e4e6dc4a5e6effa5e9a85a2cb22e29847ee91dec8e5f2f57bd50c573a47e9cc95566f703ef0f9ecf4e0ee82804ad92412a226524924f4fb99724c949fffd1e05" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:13:36Z", "meta": { "snapshot.json": { "hashes": { "sha256": "2bf3861b5e3be6cb82dc3820cbb128874d18f88e2f08ef81f6b385f3e3c7900b", "sha512": "c178334cff4dbb2dec4eea043b135a6339661a3c189dc0a689c6f92f150bd15474de5189c513a8c68bf831ea15656142c4ce8de0ae54ab23806fa6af4683783d" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published1Time/server/metadata/root.json000066400000000000000000000042031453140004500237230ustar00rootroot00000000000000{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "fc18813db531963ba283e63056be9f5e303e6e4f3d4cdc06301ff2c7fdf67e6850881439eb6e5479a4c874f7e5837972cb1debe02e0613a0ef229a9545a0f60d" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:13:36Z", "keys": { "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published1Time/server/metadata/snapshot.json000066400000000000000000000006571453140004500246100ustar00rootroot00000000000000{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "bff908e74d135b9877db003f078a863701f64ee477f2f9521628396ce14a460d7cbd0b5f81682c7dd082512f18d0dedb5c593b012856f496012445cfd16d6706" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:13:36Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published1Time/server/metadata/targets.json000066400000000000000000000006711453140004500244160ustar00rootroot00000000000000{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "bc7c651efcc8939b9e8dedaa8655ddb95b4f0e6a9336502dffe82e569e035c1274415c4075eef318f964bceb834d85a763f58e5c34d8e3e88cd603e6aec5ec05" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:13:36Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }client/testdata/Published1Time/server/metadata/timestamp.json000066400000000000000000000013001453140004500247360ustar00rootroot00000000000000{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "e4e6dc4a5e6effa5e9a85a2cb22e29847ee91dec8e5f2f57bd50c573a47e9cc95566f703ef0f9ecf4e0ee82804ad92412a226524924f4fb99724c949fffd1e05" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:13:36Z", "meta": { "snapshot.json": { "hashes": { "sha256": "2bf3861b5e3be6cb82dc3820cbb128874d18f88e2f08ef81f6b385f3e3c7900b", "sha512": "c178334cff4dbb2dec4eea043b135a6339661a3c189dc0a689c6f92f150bd15474de5189c513a8c68bf831ea15656142c4ce8de0ae54ab23806fa6af4683783d" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published1Time_backwardRootVersion/000077500000000000000000000000001453140004500230305ustar00rootroot00000000000000client/testdata/Published1Time_backwardRootVersion/client/000077500000000000000000000000001453140004500243065ustar00rootroot00000000000000client/testdata/Published1Time_backwardRootVersion/client/metadata/000077500000000000000000000000001453140004500260665ustar00rootroot00000000000000client/testdata/Published1Time_backwardRootVersion/client/metadata/current/000077500000000000000000000000001453140004500275505ustar00rootroot00000000000000client/testdata/Published1Time_backwardRootVersion/client/metadata/current/1.root.json000066400000000000000000000042031453140004500315640ustar00rootroot00000000000000{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "7e2a5844a166b2873c86ee92fc2c07319424ddb66a0372797633f9dd5bcb869409eb00384095fd3e8f4fe5ca451da5ef6b3b864fc8c1b3bd1946743f30411205" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:13:39Z", "keys": { "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published1Time_backwardRootVersion/client/metadata/current/1.snapshot.json000066400000000000000000000006571453140004500324510ustar00rootroot00000000000000{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "98ca9f817a41745409386dd26a433907349df18d1153b660e8d3cfa01d7dabc35aa06947e9cfac1d93edd7d9276246432fdf647a3357c2185d250d9ddc2be90f" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:13:39Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published1Time_backwardRootVersion/client/metadata/current/1.targets.json000066400000000000000000000006711453140004500322570ustar00rootroot00000000000000{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "70a93be0db6e7180088029c94283f47e60bfae3001982303e4060d952fe8e2db92e861f66bfcf32a4eb10e5a00900eaa719858945a314259c29b14cf39e73f03" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:13:39Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }client/testdata/Published1Time_backwardRootVersion/client/metadata/current/1.timestamp.json000066400000000000000000000013001453140004500325770ustar00rootroot00000000000000{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "05e65cc7a4ebf2dce8472f64c2a69dcee977d5bf8dddc36f4547882782e0d1161a5a03102155b29c41cff10b2f31ff947f6c604d07da1a9ff7eb423477a39c08" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:13:39Z", "meta": { "snapshot.json": { "hashes": { "sha256": "1ce608f9525f5581f719ed696f6d445ec61ce9a0f97b0c3250bcebb687eb70fe", "sha512": "22c79c8cb721c21e28cf4ae4e0c31bece6d4f55ed9234f4b538dbbff0c99eb733b2d6e73eaf66e3d9ed955c57a054470d8bfa740487aff0c470a463b7bd967f3" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published1Time_backwardRootVersion/client/metadata/current/root.json000066400000000000000000000042031453140004500314250ustar00rootroot00000000000000{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "7e2a5844a166b2873c86ee92fc2c07319424ddb66a0372797633f9dd5bcb869409eb00384095fd3e8f4fe5ca451da5ef6b3b864fc8c1b3bd1946743f30411205" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:13:39Z", "keys": { "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published1Time_backwardRootVersion/client/metadata/current/snapshot.json000066400000000000000000000006571453140004500323120ustar00rootroot00000000000000{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "98ca9f817a41745409386dd26a433907349df18d1153b660e8d3cfa01d7dabc35aa06947e9cfac1d93edd7d9276246432fdf647a3357c2185d250d9ddc2be90f" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:13:39Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published1Time_backwardRootVersion/client/metadata/current/targets.json000066400000000000000000000006711453140004500321200ustar00rootroot00000000000000{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "70a93be0db6e7180088029c94283f47e60bfae3001982303e4060d952fe8e2db92e861f66bfcf32a4eb10e5a00900eaa719858945a314259c29b14cf39e73f03" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:13:39Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }client/testdata/Published1Time_backwardRootVersion/client/metadata/current/timestamp.json000066400000000000000000000013001453140004500324400ustar00rootroot00000000000000{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "05e65cc7a4ebf2dce8472f64c2a69dcee977d5bf8dddc36f4547882782e0d1161a5a03102155b29c41cff10b2f31ff947f6c604d07da1a9ff7eb423477a39c08" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:13:39Z", "meta": { "snapshot.json": { "hashes": { "sha256": "1ce608f9525f5581f719ed696f6d445ec61ce9a0f97b0c3250bcebb687eb70fe", "sha512": "22c79c8cb721c21e28cf4ae4e0c31bece6d4f55ed9234f4b538dbbff0c99eb733b2d6e73eaf66e3d9ed955c57a054470d8bfa740487aff0c470a463b7bd967f3" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published1Time_backwardRootVersion/client/metadata/previous/000077500000000000000000000000001453140004500277425ustar00rootroot00000000000000client/testdata/Published1Time_backwardRootVersion/client/metadata/previous/1.root.json000066400000000000000000000042031453140004500317560ustar00rootroot00000000000000{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "7e2a5844a166b2873c86ee92fc2c07319424ddb66a0372797633f9dd5bcb869409eb00384095fd3e8f4fe5ca451da5ef6b3b864fc8c1b3bd1946743f30411205" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:13:39Z", "keys": { "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published1Time_backwardRootVersion/client/metadata/previous/1.snapshot.json000066400000000000000000000006571453140004500326430ustar00rootroot00000000000000{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "98ca9f817a41745409386dd26a433907349df18d1153b660e8d3cfa01d7dabc35aa06947e9cfac1d93edd7d9276246432fdf647a3357c2185d250d9ddc2be90f" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:13:39Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published1Time_backwardRootVersion/client/metadata/previous/1.targets.json000066400000000000000000000006711453140004500324510ustar00rootroot00000000000000{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "70a93be0db6e7180088029c94283f47e60bfae3001982303e4060d952fe8e2db92e861f66bfcf32a4eb10e5a00900eaa719858945a314259c29b14cf39e73f03" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:13:39Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }client/testdata/Published1Time_backwardRootVersion/client/metadata/previous/1.timestamp.json000066400000000000000000000013001453140004500327710ustar00rootroot00000000000000{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "05e65cc7a4ebf2dce8472f64c2a69dcee977d5bf8dddc36f4547882782e0d1161a5a03102155b29c41cff10b2f31ff947f6c604d07da1a9ff7eb423477a39c08" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:13:39Z", "meta": { "snapshot.json": { "hashes": { "sha256": "1ce608f9525f5581f719ed696f6d445ec61ce9a0f97b0c3250bcebb687eb70fe", "sha512": "22c79c8cb721c21e28cf4ae4e0c31bece6d4f55ed9234f4b538dbbff0c99eb733b2d6e73eaf66e3d9ed955c57a054470d8bfa740487aff0c470a463b7bd967f3" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published1Time_backwardRootVersion/client/metadata/previous/root.json000066400000000000000000000042031453140004500316170ustar00rootroot00000000000000{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "7e2a5844a166b2873c86ee92fc2c07319424ddb66a0372797633f9dd5bcb869409eb00384095fd3e8f4fe5ca451da5ef6b3b864fc8c1b3bd1946743f30411205" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:13:39Z", "keys": { "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published1Time_backwardRootVersion/client/metadata/previous/snapshot.json000066400000000000000000000006571453140004500325040ustar00rootroot00000000000000{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "98ca9f817a41745409386dd26a433907349df18d1153b660e8d3cfa01d7dabc35aa06947e9cfac1d93edd7d9276246432fdf647a3357c2185d250d9ddc2be90f" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:13:39Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published1Time_backwardRootVersion/client/metadata/previous/targets.json000066400000000000000000000006711453140004500323120ustar00rootroot00000000000000{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "70a93be0db6e7180088029c94283f47e60bfae3001982303e4060d952fe8e2db92e861f66bfcf32a4eb10e5a00900eaa719858945a314259c29b14cf39e73f03" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:13:39Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }client/testdata/Published1Time_backwardRootVersion/client/metadata/previous/timestamp.json000066400000000000000000000013001453140004500326320ustar00rootroot00000000000000{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "05e65cc7a4ebf2dce8472f64c2a69dcee977d5bf8dddc36f4547882782e0d1161a5a03102155b29c41cff10b2f31ff947f6c604d07da1a9ff7eb423477a39c08" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:13:39Z", "meta": { "snapshot.json": { "hashes": { "sha256": "1ce608f9525f5581f719ed696f6d445ec61ce9a0f97b0c3250bcebb687eb70fe", "sha512": "22c79c8cb721c21e28cf4ae4e0c31bece6d4f55ed9234f4b538dbbff0c99eb733b2d6e73eaf66e3d9ed955c57a054470d8bfa740487aff0c470a463b7bd967f3" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published1Time_backwardRootVersion/hash.txt000066400000000000000000000001001453140004500245030ustar00rootroot00000000000000d8e9b9784ec1037e1c2724ae98cf9b8ef3e940e4d61e9f437d003d9f9e2d8d5bclient/testdata/Published1Time_backwardRootVersion/server/000077500000000000000000000000001453140004500243365ustar00rootroot00000000000000client/testdata/Published1Time_backwardRootVersion/server/metadata.staged/000077500000000000000000000000001453140004500273645ustar00rootroot00000000000000client/testdata/Published1Time_backwardRootVersion/server/metadata.staged/1.root.json000066400000000000000000000042031453140004500314000ustar00rootroot00000000000000{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "7e2a5844a166b2873c86ee92fc2c07319424ddb66a0372797633f9dd5bcb869409eb00384095fd3e8f4fe5ca451da5ef6b3b864fc8c1b3bd1946743f30411205" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:13:39Z", "keys": { "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published1Time_backwardRootVersion/server/metadata.staged/1.snapshot.json000066400000000000000000000006571453140004500322650ustar00rootroot00000000000000{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "98ca9f817a41745409386dd26a433907349df18d1153b660e8d3cfa01d7dabc35aa06947e9cfac1d93edd7d9276246432fdf647a3357c2185d250d9ddc2be90f" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:13:39Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published1Time_backwardRootVersion/server/metadata.staged/1.targets.json000066400000000000000000000006711453140004500320730ustar00rootroot00000000000000{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "70a93be0db6e7180088029c94283f47e60bfae3001982303e4060d952fe8e2db92e861f66bfcf32a4eb10e5a00900eaa719858945a314259c29b14cf39e73f03" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:13:39Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }client/testdata/Published1Time_backwardRootVersion/server/metadata.staged/1.timestamp.json000066400000000000000000000013001453140004500324130ustar00rootroot00000000000000{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "05e65cc7a4ebf2dce8472f64c2a69dcee977d5bf8dddc36f4547882782e0d1161a5a03102155b29c41cff10b2f31ff947f6c604d07da1a9ff7eb423477a39c08" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:13:39Z", "meta": { "snapshot.json": { "hashes": { "sha256": "1ce608f9525f5581f719ed696f6d445ec61ce9a0f97b0c3250bcebb687eb70fe", "sha512": "22c79c8cb721c21e28cf4ae4e0c31bece6d4f55ed9234f4b538dbbff0c99eb733b2d6e73eaf66e3d9ed955c57a054470d8bfa740487aff0c470a463b7bd967f3" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published1Time_backwardRootVersion/server/metadata.staged/root.json000066400000000000000000000042031453140004500312410ustar00rootroot00000000000000{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "7e2a5844a166b2873c86ee92fc2c07319424ddb66a0372797633f9dd5bcb869409eb00384095fd3e8f4fe5ca451da5ef6b3b864fc8c1b3bd1946743f30411205" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:13:39Z", "keys": { "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published1Time_backwardRootVersion/server/metadata.staged/snapshot.json000066400000000000000000000006571453140004500321260ustar00rootroot00000000000000{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "98ca9f817a41745409386dd26a433907349df18d1153b660e8d3cfa01d7dabc35aa06947e9cfac1d93edd7d9276246432fdf647a3357c2185d250d9ddc2be90f" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:13:39Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published1Time_backwardRootVersion/server/metadata.staged/targets.json000066400000000000000000000006711453140004500317340ustar00rootroot00000000000000{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "70a93be0db6e7180088029c94283f47e60bfae3001982303e4060d952fe8e2db92e861f66bfcf32a4eb10e5a00900eaa719858945a314259c29b14cf39e73f03" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:13:39Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }client/testdata/Published1Time_backwardRootVersion/server/metadata.staged/timestamp.json000066400000000000000000000013001453140004500322540ustar00rootroot00000000000000{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "05e65cc7a4ebf2dce8472f64c2a69dcee977d5bf8dddc36f4547882782e0d1161a5a03102155b29c41cff10b2f31ff947f6c604d07da1a9ff7eb423477a39c08" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:13:39Z", "meta": { "snapshot.json": { "hashes": { "sha256": "1ce608f9525f5581f719ed696f6d445ec61ce9a0f97b0c3250bcebb687eb70fe", "sha512": "22c79c8cb721c21e28cf4ae4e0c31bece6d4f55ed9234f4b538dbbff0c99eb733b2d6e73eaf66e3d9ed955c57a054470d8bfa740487aff0c470a463b7bd967f3" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published1Time_backwardRootVersion/server/metadata/000077500000000000000000000000001453140004500261165ustar00rootroot00000000000000client/testdata/Published1Time_backwardRootVersion/server/metadata/1.snapshot.json000066400000000000000000000006571453140004500310170ustar00rootroot00000000000000{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "98ca9f817a41745409386dd26a433907349df18d1153b660e8d3cfa01d7dabc35aa06947e9cfac1d93edd7d9276246432fdf647a3357c2185d250d9ddc2be90f" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:13:39Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published1Time_backwardRootVersion/server/metadata/1.targets.json000066400000000000000000000006711453140004500306250ustar00rootroot00000000000000{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "70a93be0db6e7180088029c94283f47e60bfae3001982303e4060d952fe8e2db92e861f66bfcf32a4eb10e5a00900eaa719858945a314259c29b14cf39e73f03" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:13:39Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }client/testdata/Published1Time_backwardRootVersion/server/metadata/1.timestamp.json000066400000000000000000000013001453140004500311450ustar00rootroot00000000000000{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "05e65cc7a4ebf2dce8472f64c2a69dcee977d5bf8dddc36f4547882782e0d1161a5a03102155b29c41cff10b2f31ff947f6c604d07da1a9ff7eb423477a39c08" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:13:39Z", "meta": { "snapshot.json": { "hashes": { "sha256": "1ce608f9525f5581f719ed696f6d445ec61ce9a0f97b0c3250bcebb687eb70fe", "sha512": "22c79c8cb721c21e28cf4ae4e0c31bece6d4f55ed9234f4b538dbbff0c99eb733b2d6e73eaf66e3d9ed955c57a054470d8bfa740487aff0c470a463b7bd967f3" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published1Time_backwardRootVersion/server/metadata/2.root.json000066400000000000000000000042031453140004500301330ustar00rootroot00000000000000{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "7e2a5844a166b2873c86ee92fc2c07319424ddb66a0372797633f9dd5bcb869409eb00384095fd3e8f4fe5ca451da5ef6b3b864fc8c1b3bd1946743f30411205" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:13:39Z", "keys": { "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published1Time_backwardRootVersion/server/metadata/root.json000066400000000000000000000042031453140004500277730ustar00rootroot00000000000000{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "7e2a5844a166b2873c86ee92fc2c07319424ddb66a0372797633f9dd5bcb869409eb00384095fd3e8f4fe5ca451da5ef6b3b864fc8c1b3bd1946743f30411205" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:13:39Z", "keys": { "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published1Time_backwardRootVersion/server/metadata/snapshot.json000066400000000000000000000006571453140004500306600ustar00rootroot00000000000000{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "98ca9f817a41745409386dd26a433907349df18d1153b660e8d3cfa01d7dabc35aa06947e9cfac1d93edd7d9276246432fdf647a3357c2185d250d9ddc2be90f" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:13:39Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published1Time_backwardRootVersion/server/metadata/targets.json000066400000000000000000000006711453140004500304660ustar00rootroot00000000000000{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "70a93be0db6e7180088029c94283f47e60bfae3001982303e4060d952fe8e2db92e861f66bfcf32a4eb10e5a00900eaa719858945a314259c29b14cf39e73f03" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:13:39Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }client/testdata/Published1Time_backwardRootVersion/server/metadata/timestamp.json000066400000000000000000000013001453140004500310060ustar00rootroot00000000000000{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "05e65cc7a4ebf2dce8472f64c2a69dcee977d5bf8dddc36f4547882782e0d1161a5a03102155b29c41cff10b2f31ff947f6c604d07da1a9ff7eb423477a39c08" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:13:39Z", "meta": { "snapshot.json": { "hashes": { "sha256": "1ce608f9525f5581f719ed696f6d445ec61ce9a0f97b0c3250bcebb687eb70fe", "sha512": "22c79c8cb721c21e28cf4ae4e0c31bece6d4f55ed9234f4b538dbbff0c99eb733b2d6e73eaf66e3d9ed955c57a054470d8bfa740487aff0c470a463b7bd967f3" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published1Time_client_no_root/000077500000000000000000000000001453140004500220555ustar00rootroot00000000000000client/testdata/Published1Time_client_no_root/client/000077500000000000000000000000001453140004500233335ustar00rootroot00000000000000client/testdata/Published1Time_client_no_root/client/metadata/000077500000000000000000000000001453140004500251135ustar00rootroot00000000000000client/testdata/Published1Time_client_no_root/client/metadata/current/000077500000000000000000000000001453140004500265755ustar00rootroot00000000000000client/testdata/Published1Time_client_no_root/client/metadata/current/1.snapshot.json000066400000000000000000000006571453140004500314760ustar00rootroot00000000000000{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "f4684f93d49f3e20c837ff97557fa46e86dc6267973e21baa770de4a9829677e2d54d24b931062077e6ec6920c61507cb9859d06d6b6dcaf33fb7b5706226d03" } ], "signed": { "_type": "snapshot", "expires": "2031-09-14T12:40:00Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published1Time_client_no_root/client/metadata/current/1.targets.json000066400000000000000000000006711453140004500313040ustar00rootroot00000000000000{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "69ba74524d033175541495432ecb792395d1980b7218eaca5938a1be90fffbad9e84a64a96dc2029b1341e907187c6cc006be177022791925b04f062f6f2570b" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-14T12:40:00Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }client/testdata/Published1Time_client_no_root/client/metadata/current/1.timestamp.json000066400000000000000000000013001453140004500316240ustar00rootroot00000000000000{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "0a88915a0566feaa4df4a7f7a51e167ab4f8de8002de66046a6f6698ac2be2acfec915b87cb8b20cdff6e4e9a7c2a01dbb72bb6cc2906873de85c108dace8f02" } ], "signed": { "_type": "timestamp", "expires": "2031-09-14T12:40:00Z", "meta": { "snapshot.json": { "hashes": { "sha256": "dd1aa8bd502e5bdf982dcd41bfc6e8d3783b0cfa33be4bb60aff6da9a4491a5f", "sha512": "338f427ab68a92c435e6c4e41a858b5e3481d57dd038eb35dbe1d2613d62f9aa1082187091d6f330e6c81de67fabac58e0d60c2bc2cbf2361932ae9f37c75705" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published1Time_client_no_root/client/metadata/current/snapshot.json000066400000000000000000000006571453140004500313370ustar00rootroot00000000000000{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "f4684f93d49f3e20c837ff97557fa46e86dc6267973e21baa770de4a9829677e2d54d24b931062077e6ec6920c61507cb9859d06d6b6dcaf33fb7b5706226d03" } ], "signed": { "_type": "snapshot", "expires": "2031-09-14T12:40:00Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published1Time_client_no_root/client/metadata/current/targets.json000066400000000000000000000006711453140004500311450ustar00rootroot00000000000000{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "69ba74524d033175541495432ecb792395d1980b7218eaca5938a1be90fffbad9e84a64a96dc2029b1341e907187c6cc006be177022791925b04f062f6f2570b" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-14T12:40:00Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }client/testdata/Published1Time_client_no_root/client/metadata/current/timestamp.json000066400000000000000000000013001453140004500314650ustar00rootroot00000000000000{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "0a88915a0566feaa4df4a7f7a51e167ab4f8de8002de66046a6f6698ac2be2acfec915b87cb8b20cdff6e4e9a7c2a01dbb72bb6cc2906873de85c108dace8f02" } ], "signed": { "_type": "timestamp", "expires": "2031-09-14T12:40:00Z", "meta": { "snapshot.json": { "hashes": { "sha256": "dd1aa8bd502e5bdf982dcd41bfc6e8d3783b0cfa33be4bb60aff6da9a4491a5f", "sha512": "338f427ab68a92c435e6c4e41a858b5e3481d57dd038eb35dbe1d2613d62f9aa1082187091d6f330e6c81de67fabac58e0d60c2bc2cbf2361932ae9f37c75705" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published1Time_client_no_root/client/metadata/previous/000077500000000000000000000000001453140004500267675ustar00rootroot00000000000000client/testdata/Published1Time_client_no_root/client/metadata/previous/1.root.json000066400000000000000000000042031453140004500310030ustar00rootroot00000000000000{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "257396e371baf489e38653fef8cf0c98d1915a1f61f5bfbb0e3a03bad7c863795b738cdddc6b6899354447cfed0de0f79f8eaeec7acd509322009ee90c49b20d" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-14T02:30:57Z", "keys": { "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published1Time_client_no_root/client/metadata/previous/1.snapshot.json000066400000000000000000000006571453140004500316700ustar00rootroot00000000000000{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "f4684f93d49f3e20c837ff97557fa46e86dc6267973e21baa770de4a9829677e2d54d24b931062077e6ec6920c61507cb9859d06d6b6dcaf33fb7b5706226d03" } ], "signed": { "_type": "snapshot", "expires": "2031-09-14T12:40:00Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published1Time_client_no_root/client/metadata/previous/1.targets.json000066400000000000000000000006711453140004500314760ustar00rootroot00000000000000{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "69ba74524d033175541495432ecb792395d1980b7218eaca5938a1be90fffbad9e84a64a96dc2029b1341e907187c6cc006be177022791925b04f062f6f2570b" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-14T12:40:00Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }client/testdata/Published1Time_client_no_root/client/metadata/previous/1.timestamp.json000066400000000000000000000013001453140004500320160ustar00rootroot00000000000000{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "0a88915a0566feaa4df4a7f7a51e167ab4f8de8002de66046a6f6698ac2be2acfec915b87cb8b20cdff6e4e9a7c2a01dbb72bb6cc2906873de85c108dace8f02" } ], "signed": { "_type": "timestamp", "expires": "2031-09-14T12:40:00Z", "meta": { "snapshot.json": { "hashes": { "sha256": "dd1aa8bd502e5bdf982dcd41bfc6e8d3783b0cfa33be4bb60aff6da9a4491a5f", "sha512": "338f427ab68a92c435e6c4e41a858b5e3481d57dd038eb35dbe1d2613d62f9aa1082187091d6f330e6c81de67fabac58e0d60c2bc2cbf2361932ae9f37c75705" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published1Time_client_no_root/client/metadata/previous/root.json000066400000000000000000000042031453140004500306440ustar00rootroot00000000000000{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "257396e371baf489e38653fef8cf0c98d1915a1f61f5bfbb0e3a03bad7c863795b738cdddc6b6899354447cfed0de0f79f8eaeec7acd509322009ee90c49b20d" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-14T02:30:57Z", "keys": { "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published1Time_client_no_root/client/metadata/previous/snapshot.json000066400000000000000000000006571453140004500315310ustar00rootroot00000000000000{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "f4684f93d49f3e20c837ff97557fa46e86dc6267973e21baa770de4a9829677e2d54d24b931062077e6ec6920c61507cb9859d06d6b6dcaf33fb7b5706226d03" } ], "signed": { "_type": "snapshot", "expires": "2031-09-14T12:40:00Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published1Time_client_no_root/client/metadata/previous/targets.json000066400000000000000000000006711453140004500313370ustar00rootroot00000000000000{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "69ba74524d033175541495432ecb792395d1980b7218eaca5938a1be90fffbad9e84a64a96dc2029b1341e907187c6cc006be177022791925b04f062f6f2570b" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-14T12:40:00Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }client/testdata/Published1Time_client_no_root/client/metadata/previous/timestamp.json000066400000000000000000000013001453140004500316570ustar00rootroot00000000000000{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "0a88915a0566feaa4df4a7f7a51e167ab4f8de8002de66046a6f6698ac2be2acfec915b87cb8b20cdff6e4e9a7c2a01dbb72bb6cc2906873de85c108dace8f02" } ], "signed": { "_type": "timestamp", "expires": "2031-09-14T12:40:00Z", "meta": { "snapshot.json": { "hashes": { "sha256": "dd1aa8bd502e5bdf982dcd41bfc6e8d3783b0cfa33be4bb60aff6da9a4491a5f", "sha512": "338f427ab68a92c435e6c4e41a858b5e3481d57dd038eb35dbe1d2613d62f9aa1082187091d6f330e6c81de67fabac58e0d60c2bc2cbf2361932ae9f37c75705" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published1Time_client_no_root/hash.txt000066400000000000000000000001001453140004500235300ustar00rootroot00000000000000fccdb5eadd5e09460c9ec806e051785d855da2c4862cf9cec2f63401c866bc34client/testdata/Published1Time_client_no_root/server/000077500000000000000000000000001453140004500233635ustar00rootroot00000000000000client/testdata/Published1Time_client_no_root/server/metadata.staged/000077500000000000000000000000001453140004500264115ustar00rootroot00000000000000client/testdata/Published1Time_client_no_root/server/metadata.staged/1.root.json000066400000000000000000000042031453140004500304250ustar00rootroot00000000000000{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "05353c8d3ec99bf81adec84a3d825a93d0a2e2afde92cfd83397451cd3def63dbcbeca4b4c9873c46ec8f509351ca6f9413d3da6bf166f285be6865a05135709" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-14T12:40:00Z", "keys": { "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published1Time_client_no_root/server/metadata.staged/1.snapshot.json000066400000000000000000000006571453140004500313120ustar00rootroot00000000000000{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "f4684f93d49f3e20c837ff97557fa46e86dc6267973e21baa770de4a9829677e2d54d24b931062077e6ec6920c61507cb9859d06d6b6dcaf33fb7b5706226d03" } ], "signed": { "_type": "snapshot", "expires": "2031-09-14T12:40:00Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published1Time_client_no_root/server/metadata.staged/1.targets.json000066400000000000000000000006711453140004500311200ustar00rootroot00000000000000{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "69ba74524d033175541495432ecb792395d1980b7218eaca5938a1be90fffbad9e84a64a96dc2029b1341e907187c6cc006be177022791925b04f062f6f2570b" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-14T12:40:00Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }client/testdata/Published1Time_client_no_root/server/metadata.staged/1.timestamp.json000066400000000000000000000013001453140004500314400ustar00rootroot00000000000000{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "0a88915a0566feaa4df4a7f7a51e167ab4f8de8002de66046a6f6698ac2be2acfec915b87cb8b20cdff6e4e9a7c2a01dbb72bb6cc2906873de85c108dace8f02" } ], "signed": { "_type": "timestamp", "expires": "2031-09-14T12:40:00Z", "meta": { "snapshot.json": { "hashes": { "sha256": "dd1aa8bd502e5bdf982dcd41bfc6e8d3783b0cfa33be4bb60aff6da9a4491a5f", "sha512": "338f427ab68a92c435e6c4e41a858b5e3481d57dd038eb35dbe1d2613d62f9aa1082187091d6f330e6c81de67fabac58e0d60c2bc2cbf2361932ae9f37c75705" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published1Time_client_no_root/server/metadata.staged/root.json000066400000000000000000000042031453140004500302660ustar00rootroot00000000000000{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "05353c8d3ec99bf81adec84a3d825a93d0a2e2afde92cfd83397451cd3def63dbcbeca4b4c9873c46ec8f509351ca6f9413d3da6bf166f285be6865a05135709" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-14T12:40:00Z", "keys": { "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published1Time_client_no_root/server/metadata.staged/snapshot.json000066400000000000000000000006571453140004500311530ustar00rootroot00000000000000{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "f4684f93d49f3e20c837ff97557fa46e86dc6267973e21baa770de4a9829677e2d54d24b931062077e6ec6920c61507cb9859d06d6b6dcaf33fb7b5706226d03" } ], "signed": { "_type": "snapshot", "expires": "2031-09-14T12:40:00Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published1Time_client_no_root/server/metadata.staged/targets.json000066400000000000000000000006711453140004500307610ustar00rootroot00000000000000{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "69ba74524d033175541495432ecb792395d1980b7218eaca5938a1be90fffbad9e84a64a96dc2029b1341e907187c6cc006be177022791925b04f062f6f2570b" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-14T12:40:00Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }client/testdata/Published1Time_client_no_root/server/metadata.staged/timestamp.json000066400000000000000000000013001453140004500313010ustar00rootroot00000000000000{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "0a88915a0566feaa4df4a7f7a51e167ab4f8de8002de66046a6f6698ac2be2acfec915b87cb8b20cdff6e4e9a7c2a01dbb72bb6cc2906873de85c108dace8f02" } ], "signed": { "_type": "timestamp", "expires": "2031-09-14T12:40:00Z", "meta": { "snapshot.json": { "hashes": { "sha256": "dd1aa8bd502e5bdf982dcd41bfc6e8d3783b0cfa33be4bb60aff6da9a4491a5f", "sha512": "338f427ab68a92c435e6c4e41a858b5e3481d57dd038eb35dbe1d2613d62f9aa1082187091d6f330e6c81de67fabac58e0d60c2bc2cbf2361932ae9f37c75705" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published1Time_client_no_root/server/metadata/000077500000000000000000000000001453140004500251435ustar00rootroot00000000000000client/testdata/Published1Time_client_no_root/server/metadata/1.root.json000066400000000000000000000042031453140004500271570ustar00rootroot00000000000000{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "05353c8d3ec99bf81adec84a3d825a93d0a2e2afde92cfd83397451cd3def63dbcbeca4b4c9873c46ec8f509351ca6f9413d3da6bf166f285be6865a05135709" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-14T12:40:00Z", "keys": { "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published1Time_client_no_root/server/metadata/1.snapshot.json000066400000000000000000000006571453140004500300440ustar00rootroot00000000000000{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "f4684f93d49f3e20c837ff97557fa46e86dc6267973e21baa770de4a9829677e2d54d24b931062077e6ec6920c61507cb9859d06d6b6dcaf33fb7b5706226d03" } ], "signed": { "_type": "snapshot", "expires": "2031-09-14T12:40:00Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published1Time_client_no_root/server/metadata/1.targets.json000066400000000000000000000006711453140004500276520ustar00rootroot00000000000000{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "69ba74524d033175541495432ecb792395d1980b7218eaca5938a1be90fffbad9e84a64a96dc2029b1341e907187c6cc006be177022791925b04f062f6f2570b" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-14T12:40:00Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }client/testdata/Published1Time_client_no_root/server/metadata/1.timestamp.json000066400000000000000000000013001453140004500301720ustar00rootroot00000000000000{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "0a88915a0566feaa4df4a7f7a51e167ab4f8de8002de66046a6f6698ac2be2acfec915b87cb8b20cdff6e4e9a7c2a01dbb72bb6cc2906873de85c108dace8f02" } ], "signed": { "_type": "timestamp", "expires": "2031-09-14T12:40:00Z", "meta": { "snapshot.json": { "hashes": { "sha256": "dd1aa8bd502e5bdf982dcd41bfc6e8d3783b0cfa33be4bb60aff6da9a4491a5f", "sha512": "338f427ab68a92c435e6c4e41a858b5e3481d57dd038eb35dbe1d2613d62f9aa1082187091d6f330e6c81de67fabac58e0d60c2bc2cbf2361932ae9f37c75705" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published1Time_client_no_root/server/metadata/root.json000066400000000000000000000042031453140004500270200ustar00rootroot00000000000000{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "05353c8d3ec99bf81adec84a3d825a93d0a2e2afde92cfd83397451cd3def63dbcbeca4b4c9873c46ec8f509351ca6f9413d3da6bf166f285be6865a05135709" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-14T12:40:00Z", "keys": { "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published1Time_client_no_root/server/metadata/snapshot.json000066400000000000000000000006571453140004500277050ustar00rootroot00000000000000{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "f4684f93d49f3e20c837ff97557fa46e86dc6267973e21baa770de4a9829677e2d54d24b931062077e6ec6920c61507cb9859d06d6b6dcaf33fb7b5706226d03" } ], "signed": { "_type": "snapshot", "expires": "2031-09-14T12:40:00Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published1Time_client_no_root/server/metadata/targets.json000066400000000000000000000006711453140004500275130ustar00rootroot00000000000000{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "69ba74524d033175541495432ecb792395d1980b7218eaca5938a1be90fffbad9e84a64a96dc2029b1341e907187c6cc006be177022791925b04f062f6f2570b" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-14T12:40:00Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }client/testdata/Published1Time_client_no_root/server/metadata/timestamp.json000066400000000000000000000013001453140004500300330ustar00rootroot00000000000000{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "0a88915a0566feaa4df4a7f7a51e167ab4f8de8002de66046a6f6698ac2be2acfec915b87cb8b20cdff6e4e9a7c2a01dbb72bb6cc2906873de85c108dace8f02" } ], "signed": { "_type": "timestamp", "expires": "2031-09-14T12:40:00Z", "meta": { "snapshot.json": { "hashes": { "sha256": "dd1aa8bd502e5bdf982dcd41bfc6e8d3783b0cfa33be4bb60aff6da9a4491a5f", "sha512": "338f427ab68a92c435e6c4e41a858b5e3481d57dd038eb35dbe1d2613d62f9aa1082187091d6f330e6c81de67fabac58e0d60c2bc2cbf2361932ae9f37c75705" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published1Time_client_root_only/000077500000000000000000000000001453140004500224225ustar00rootroot00000000000000client/testdata/Published1Time_client_root_only/client/000077500000000000000000000000001453140004500237005ustar00rootroot00000000000000client/testdata/Published1Time_client_root_only/client/metadata/000077500000000000000000000000001453140004500254605ustar00rootroot00000000000000client/testdata/Published1Time_client_root_only/client/metadata/current/000077500000000000000000000000001453140004500271425ustar00rootroot00000000000000client/testdata/Published1Time_client_root_only/client/metadata/current/root.json000066400000000000000000000042031453140004500310170ustar00rootroot00000000000000{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "05353c8d3ec99bf81adec84a3d825a93d0a2e2afde92cfd83397451cd3def63dbcbeca4b4c9873c46ec8f509351ca6f9413d3da6bf166f285be6865a05135709" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-14T12:40:00Z", "keys": { "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published1Time_client_root_only/client/metadata/previous/000077500000000000000000000000001453140004500273345ustar00rootroot00000000000000client/testdata/Published1Time_client_root_only/client/metadata/previous/1.root.json000066400000000000000000000042031453140004500313500ustar00rootroot00000000000000{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "257396e371baf489e38653fef8cf0c98d1915a1f61f5bfbb0e3a03bad7c863795b738cdddc6b6899354447cfed0de0f79f8eaeec7acd509322009ee90c49b20d" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-14T02:30:57Z", "keys": { "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published1Time_client_root_only/client/metadata/previous/1.snapshot.json000066400000000000000000000006571453140004500322350ustar00rootroot00000000000000{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "60a5724ac31af58ece866b723ab121a168b9e93f0033a98dd8449e6550f4d897db0329cdb135fd3a016c8c375e4177c16f1f4d3ada550eb6d06a52b5c84fbb07" } ], "signed": { "_type": "snapshot", "expires": "2031-09-14T02:30:57Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published1Time_client_root_only/client/metadata/previous/1.targets.json000066400000000000000000000006711453140004500320430ustar00rootroot00000000000000{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "ecb8da4380f992d0d80cbcb78c31c91baf171dad346725fcbf6b1487f52653fc9a2f1ab46a28d32a733a48badbbd316814dcda52cc49cf3bf6fb415403ce7a0a" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-14T02:30:57Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }client/testdata/Published1Time_client_root_only/client/metadata/previous/1.timestamp.json000066400000000000000000000013001453140004500323630ustar00rootroot00000000000000{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "4e4f72264b522cf8e2867fcaf1a6b1463d43bdf58027fb5770b6d611ae68a9f36b93ce5a50f874744ef1d7b72a11ad685f24081511c306fd7118dc60c90bdf08" } ], "signed": { "_type": "timestamp", "expires": "2031-09-14T02:30:57Z", "meta": { "snapshot.json": { "hashes": { "sha256": "195c327842ae9601900016a50d0536a05136bfbf55ddb70657427ae12ed52181", "sha512": "8deed35dcd9d634fcce94c42049829078c15a57d35ee83b15c201b6a0c80111fefba49cca522dedb1d79bc000393bf6c45b72d485f9d027f7c5a3f8922734a5c" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published1Time_client_root_only/client/metadata/previous/root.json000066400000000000000000000042031453140004500312110ustar00rootroot00000000000000{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "257396e371baf489e38653fef8cf0c98d1915a1f61f5bfbb0e3a03bad7c863795b738cdddc6b6899354447cfed0de0f79f8eaeec7acd509322009ee90c49b20d" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-14T02:30:57Z", "keys": { "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published1Time_client_root_only/client/metadata/previous/snapshot.json000066400000000000000000000006571453140004500320760ustar00rootroot00000000000000{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "60a5724ac31af58ece866b723ab121a168b9e93f0033a98dd8449e6550f4d897db0329cdb135fd3a016c8c375e4177c16f1f4d3ada550eb6d06a52b5c84fbb07" } ], "signed": { "_type": "snapshot", "expires": "2031-09-14T02:30:57Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published1Time_client_root_only/client/metadata/previous/targets.json000066400000000000000000000006711453140004500317040ustar00rootroot00000000000000{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "ecb8da4380f992d0d80cbcb78c31c91baf171dad346725fcbf6b1487f52653fc9a2f1ab46a28d32a733a48badbbd316814dcda52cc49cf3bf6fb415403ce7a0a" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-14T02:30:57Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }client/testdata/Published1Time_client_root_only/client/metadata/previous/timestamp.json000066400000000000000000000013001453140004500322240ustar00rootroot00000000000000{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "4e4f72264b522cf8e2867fcaf1a6b1463d43bdf58027fb5770b6d611ae68a9f36b93ce5a50f874744ef1d7b72a11ad685f24081511c306fd7118dc60c90bdf08" } ], "signed": { "_type": "timestamp", "expires": "2031-09-14T02:30:57Z", "meta": { "snapshot.json": { "hashes": { "sha256": "195c327842ae9601900016a50d0536a05136bfbf55ddb70657427ae12ed52181", "sha512": "8deed35dcd9d634fcce94c42049829078c15a57d35ee83b15c201b6a0c80111fefba49cca522dedb1d79bc000393bf6c45b72d485f9d027f7c5a3f8922734a5c" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published1Time_client_root_only/hash.txt000066400000000000000000000001001453140004500240750ustar00rootroot0000000000000066b8896b5d1120fa684474d4d4d1a5438539b708c7a8d7a93682ce2fe0f739a4client/testdata/Published1Time_client_root_only/server/000077500000000000000000000000001453140004500237305ustar00rootroot00000000000000client/testdata/Published1Time_client_root_only/server/metadata.staged/000077500000000000000000000000001453140004500267565ustar00rootroot00000000000000client/testdata/Published1Time_client_root_only/server/metadata.staged/1.root.json000066400000000000000000000042031453140004500307720ustar00rootroot00000000000000{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "05353c8d3ec99bf81adec84a3d825a93d0a2e2afde92cfd83397451cd3def63dbcbeca4b4c9873c46ec8f509351ca6f9413d3da6bf166f285be6865a05135709" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-14T12:40:00Z", "keys": { "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published1Time_client_root_only/server/metadata.staged/1.snapshot.json000066400000000000000000000006571453140004500316570ustar00rootroot00000000000000{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "f4684f93d49f3e20c837ff97557fa46e86dc6267973e21baa770de4a9829677e2d54d24b931062077e6ec6920c61507cb9859d06d6b6dcaf33fb7b5706226d03" } ], "signed": { "_type": "snapshot", "expires": "2031-09-14T12:40:00Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published1Time_client_root_only/server/metadata.staged/1.targets.json000066400000000000000000000006711453140004500314650ustar00rootroot00000000000000{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "69ba74524d033175541495432ecb792395d1980b7218eaca5938a1be90fffbad9e84a64a96dc2029b1341e907187c6cc006be177022791925b04f062f6f2570b" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-14T12:40:00Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }client/testdata/Published1Time_client_root_only/server/metadata.staged/1.timestamp.json000066400000000000000000000013001453140004500320050ustar00rootroot00000000000000{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "0a88915a0566feaa4df4a7f7a51e167ab4f8de8002de66046a6f6698ac2be2acfec915b87cb8b20cdff6e4e9a7c2a01dbb72bb6cc2906873de85c108dace8f02" } ], "signed": { "_type": "timestamp", "expires": "2031-09-14T12:40:00Z", "meta": { "snapshot.json": { "hashes": { "sha256": "dd1aa8bd502e5bdf982dcd41bfc6e8d3783b0cfa33be4bb60aff6da9a4491a5f", "sha512": "338f427ab68a92c435e6c4e41a858b5e3481d57dd038eb35dbe1d2613d62f9aa1082187091d6f330e6c81de67fabac58e0d60c2bc2cbf2361932ae9f37c75705" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published1Time_client_root_only/server/metadata.staged/root.json000066400000000000000000000042031453140004500306330ustar00rootroot00000000000000{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "05353c8d3ec99bf81adec84a3d825a93d0a2e2afde92cfd83397451cd3def63dbcbeca4b4c9873c46ec8f509351ca6f9413d3da6bf166f285be6865a05135709" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-14T12:40:00Z", "keys": { "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published1Time_client_root_only/server/metadata.staged/snapshot.json000066400000000000000000000006571453140004500315200ustar00rootroot00000000000000{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "f4684f93d49f3e20c837ff97557fa46e86dc6267973e21baa770de4a9829677e2d54d24b931062077e6ec6920c61507cb9859d06d6b6dcaf33fb7b5706226d03" } ], "signed": { "_type": "snapshot", "expires": "2031-09-14T12:40:00Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published1Time_client_root_only/server/metadata.staged/targets.json000066400000000000000000000006711453140004500313260ustar00rootroot00000000000000{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "69ba74524d033175541495432ecb792395d1980b7218eaca5938a1be90fffbad9e84a64a96dc2029b1341e907187c6cc006be177022791925b04f062f6f2570b" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-14T12:40:00Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }client/testdata/Published1Time_client_root_only/server/metadata.staged/timestamp.json000066400000000000000000000013001453140004500316460ustar00rootroot00000000000000{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "0a88915a0566feaa4df4a7f7a51e167ab4f8de8002de66046a6f6698ac2be2acfec915b87cb8b20cdff6e4e9a7c2a01dbb72bb6cc2906873de85c108dace8f02" } ], "signed": { "_type": "timestamp", "expires": "2031-09-14T12:40:00Z", "meta": { "snapshot.json": { "hashes": { "sha256": "dd1aa8bd502e5bdf982dcd41bfc6e8d3783b0cfa33be4bb60aff6da9a4491a5f", "sha512": "338f427ab68a92c435e6c4e41a858b5e3481d57dd038eb35dbe1d2613d62f9aa1082187091d6f330e6c81de67fabac58e0d60c2bc2cbf2361932ae9f37c75705" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published1Time_client_root_only/server/metadata/000077500000000000000000000000001453140004500255105ustar00rootroot00000000000000client/testdata/Published1Time_client_root_only/server/metadata/1.root.json000066400000000000000000000042031453140004500275240ustar00rootroot00000000000000{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "05353c8d3ec99bf81adec84a3d825a93d0a2e2afde92cfd83397451cd3def63dbcbeca4b4c9873c46ec8f509351ca6f9413d3da6bf166f285be6865a05135709" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-14T12:40:00Z", "keys": { "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published1Time_client_root_only/server/metadata/1.snapshot.json000066400000000000000000000006571453140004500304110ustar00rootroot00000000000000{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "f4684f93d49f3e20c837ff97557fa46e86dc6267973e21baa770de4a9829677e2d54d24b931062077e6ec6920c61507cb9859d06d6b6dcaf33fb7b5706226d03" } ], "signed": { "_type": "snapshot", "expires": "2031-09-14T12:40:00Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published1Time_client_root_only/server/metadata/1.targets.json000066400000000000000000000006711453140004500302170ustar00rootroot00000000000000{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "69ba74524d033175541495432ecb792395d1980b7218eaca5938a1be90fffbad9e84a64a96dc2029b1341e907187c6cc006be177022791925b04f062f6f2570b" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-14T12:40:00Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }client/testdata/Published1Time_client_root_only/server/metadata/1.timestamp.json000066400000000000000000000013001453140004500305370ustar00rootroot00000000000000{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "0a88915a0566feaa4df4a7f7a51e167ab4f8de8002de66046a6f6698ac2be2acfec915b87cb8b20cdff6e4e9a7c2a01dbb72bb6cc2906873de85c108dace8f02" } ], "signed": { "_type": "timestamp", "expires": "2031-09-14T12:40:00Z", "meta": { "snapshot.json": { "hashes": { "sha256": "dd1aa8bd502e5bdf982dcd41bfc6e8d3783b0cfa33be4bb60aff6da9a4491a5f", "sha512": "338f427ab68a92c435e6c4e41a858b5e3481d57dd038eb35dbe1d2613d62f9aa1082187091d6f330e6c81de67fabac58e0d60c2bc2cbf2361932ae9f37c75705" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published1Time_client_root_only/server/metadata/root.json000066400000000000000000000042031453140004500273650ustar00rootroot00000000000000{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "05353c8d3ec99bf81adec84a3d825a93d0a2e2afde92cfd83397451cd3def63dbcbeca4b4c9873c46ec8f509351ca6f9413d3da6bf166f285be6865a05135709" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-14T12:40:00Z", "keys": { "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published1Time_client_root_only/server/metadata/snapshot.json000066400000000000000000000006571453140004500302520ustar00rootroot00000000000000{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "f4684f93d49f3e20c837ff97557fa46e86dc6267973e21baa770de4a9829677e2d54d24b931062077e6ec6920c61507cb9859d06d6b6dcaf33fb7b5706226d03" } ], "signed": { "_type": "snapshot", "expires": "2031-09-14T12:40:00Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published1Time_client_root_only/server/metadata/targets.json000066400000000000000000000006711453140004500300600ustar00rootroot00000000000000{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "69ba74524d033175541495432ecb792395d1980b7218eaca5938a1be90fffbad9e84a64a96dc2029b1341e907187c6cc006be177022791925b04f062f6f2570b" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-14T12:40:00Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }client/testdata/Published1Time_client_root_only/server/metadata/timestamp.json000066400000000000000000000013001453140004500304000ustar00rootroot00000000000000{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "0a88915a0566feaa4df4a7f7a51e167ab4f8de8002de66046a6f6698ac2be2acfec915b87cb8b20cdff6e4e9a7c2a01dbb72bb6cc2906873de85c108dace8f02" } ], "signed": { "_type": "timestamp", "expires": "2031-09-14T12:40:00Z", "meta": { "snapshot.json": { "hashes": { "sha256": "dd1aa8bd502e5bdf982dcd41bfc6e8d3783b0cfa33be4bb60aff6da9a4491a5f", "sha512": "338f427ab68a92c435e6c4e41a858b5e3481d57dd038eb35dbe1d2613d62f9aa1082187091d6f330e6c81de67fabac58e0d60c2bc2cbf2361932ae9f37c75705" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published2Times_keyrotated/000077500000000000000000000000001453140004500213775ustar00rootroot00000000000000client/testdata/Published2Times_keyrotated/client/000077500000000000000000000000001453140004500226555ustar00rootroot00000000000000client/testdata/Published2Times_keyrotated/client/metadata/000077500000000000000000000000001453140004500244355ustar00rootroot00000000000000client/testdata/Published2Times_keyrotated/client/metadata/current/000077500000000000000000000000001453140004500261175ustar00rootroot00000000000000client/testdata/Published2Times_keyrotated/client/metadata/current/1.root.json000066400000000000000000000042031453140004500301330ustar00rootroot00000000000000{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "481a1bd10fedbe33e88e5f586a8726f558a5ec426bf65d2ba1c449fd1f69148da6af40f1ae18a5be63539dfbf076019db8b28f3f644f7fd4f003b7d06a4c2e09" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:13:37Z", "keys": { "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published2Times_keyrotated/client/metadata/current/1.snapshot.json000066400000000000000000000006571453140004500310200ustar00rootroot00000000000000{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "ecf4d79a88873efb223361e550b8fc35813ad7bf31d9769908d9495cfb930e03db889dc7419897031cadf39437c9f49b085f384fe1c18be3961704062365db0c" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:13:37Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published2Times_keyrotated/client/metadata/current/1.targets.json000066400000000000000000000006711453140004500306260ustar00rootroot00000000000000{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "f2cee9e31bda3f88b25b0153bb48a6cb21237e4c41a34bbae95f152b56975085bc04c4978eed6be76a3ead23ff76a1259ff07e7b45b04fb51865c9601713c905" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:13:37Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }client/testdata/Published2Times_keyrotated/client/metadata/current/1.timestamp.json000066400000000000000000000013001453140004500311460ustar00rootroot00000000000000{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "35d1087c4874221bc772c8276bd77415d9366833aad4efc3926a8eda1de053843d2c114ac7448f08e3cfd802857c2ab2569d8be186b3cc36e65e458905f0e10e" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:13:37Z", "meta": { "snapshot.json": { "hashes": { "sha256": "d62f650c8097fd4de9e3c8874ef15f7e10fdcc4c32f7a1818e972e8984b8da8a", "sha512": "d9d0c38df27bc2ccc9523cb8d27623cb40b264053233e5e3261d83e2921c790b21accf9d427e36aa4c1939ddbccaaa5e006267f1cdd451606c514135d178dca5" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published2Times_keyrotated/client/metadata/current/root.json000066400000000000000000000042031453140004500277740ustar00rootroot00000000000000{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "481a1bd10fedbe33e88e5f586a8726f558a5ec426bf65d2ba1c449fd1f69148da6af40f1ae18a5be63539dfbf076019db8b28f3f644f7fd4f003b7d06a4c2e09" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:13:37Z", "keys": { "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published2Times_keyrotated/client/metadata/current/snapshot.json000066400000000000000000000006571453140004500306610ustar00rootroot00000000000000{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "ecf4d79a88873efb223361e550b8fc35813ad7bf31d9769908d9495cfb930e03db889dc7419897031cadf39437c9f49b085f384fe1c18be3961704062365db0c" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:13:37Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published2Times_keyrotated/client/metadata/current/targets.json000066400000000000000000000006711453140004500304670ustar00rootroot00000000000000{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "f2cee9e31bda3f88b25b0153bb48a6cb21237e4c41a34bbae95f152b56975085bc04c4978eed6be76a3ead23ff76a1259ff07e7b45b04fb51865c9601713c905" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:13:37Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }client/testdata/Published2Times_keyrotated/client/metadata/current/timestamp.json000066400000000000000000000013001453140004500310070ustar00rootroot00000000000000{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "35d1087c4874221bc772c8276bd77415d9366833aad4efc3926a8eda1de053843d2c114ac7448f08e3cfd802857c2ab2569d8be186b3cc36e65e458905f0e10e" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:13:37Z", "meta": { "snapshot.json": { "hashes": { "sha256": "d62f650c8097fd4de9e3c8874ef15f7e10fdcc4c32f7a1818e972e8984b8da8a", "sha512": "d9d0c38df27bc2ccc9523cb8d27623cb40b264053233e5e3261d83e2921c790b21accf9d427e36aa4c1939ddbccaaa5e006267f1cdd451606c514135d178dca5" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published2Times_keyrotated/client/metadata/previous/000077500000000000000000000000001453140004500263115ustar00rootroot00000000000000client/testdata/Published2Times_keyrotated/client/metadata/previous/1.root.json000066400000000000000000000042031453140004500303250ustar00rootroot00000000000000{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "481a1bd10fedbe33e88e5f586a8726f558a5ec426bf65d2ba1c449fd1f69148da6af40f1ae18a5be63539dfbf076019db8b28f3f644f7fd4f003b7d06a4c2e09" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:13:37Z", "keys": { "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published2Times_keyrotated/client/metadata/previous/1.snapshot.json000066400000000000000000000006571453140004500312120ustar00rootroot00000000000000{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "ecf4d79a88873efb223361e550b8fc35813ad7bf31d9769908d9495cfb930e03db889dc7419897031cadf39437c9f49b085f384fe1c18be3961704062365db0c" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:13:37Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published2Times_keyrotated/client/metadata/previous/1.targets.json000066400000000000000000000006711453140004500310200ustar00rootroot00000000000000{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "f2cee9e31bda3f88b25b0153bb48a6cb21237e4c41a34bbae95f152b56975085bc04c4978eed6be76a3ead23ff76a1259ff07e7b45b04fb51865c9601713c905" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:13:37Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }client/testdata/Published2Times_keyrotated/client/metadata/previous/1.timestamp.json000066400000000000000000000013001453140004500313400ustar00rootroot00000000000000{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "35d1087c4874221bc772c8276bd77415d9366833aad4efc3926a8eda1de053843d2c114ac7448f08e3cfd802857c2ab2569d8be186b3cc36e65e458905f0e10e" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:13:37Z", "meta": { "snapshot.json": { "hashes": { "sha256": "d62f650c8097fd4de9e3c8874ef15f7e10fdcc4c32f7a1818e972e8984b8da8a", "sha512": "d9d0c38df27bc2ccc9523cb8d27623cb40b264053233e5e3261d83e2921c790b21accf9d427e36aa4c1939ddbccaaa5e006267f1cdd451606c514135d178dca5" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published2Times_keyrotated/client/metadata/previous/root.json000066400000000000000000000042031453140004500301660ustar00rootroot00000000000000{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "481a1bd10fedbe33e88e5f586a8726f558a5ec426bf65d2ba1c449fd1f69148da6af40f1ae18a5be63539dfbf076019db8b28f3f644f7fd4f003b7d06a4c2e09" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:13:37Z", "keys": { "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published2Times_keyrotated/client/metadata/previous/snapshot.json000066400000000000000000000006571453140004500310530ustar00rootroot00000000000000{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "ecf4d79a88873efb223361e550b8fc35813ad7bf31d9769908d9495cfb930e03db889dc7419897031cadf39437c9f49b085f384fe1c18be3961704062365db0c" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:13:37Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published2Times_keyrotated/client/metadata/previous/targets.json000066400000000000000000000006711453140004500306610ustar00rootroot00000000000000{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "f2cee9e31bda3f88b25b0153bb48a6cb21237e4c41a34bbae95f152b56975085bc04c4978eed6be76a3ead23ff76a1259ff07e7b45b04fb51865c9601713c905" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:13:37Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }client/testdata/Published2Times_keyrotated/client/metadata/previous/timestamp.json000066400000000000000000000013001453140004500312010ustar00rootroot00000000000000{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "35d1087c4874221bc772c8276bd77415d9366833aad4efc3926a8eda1de053843d2c114ac7448f08e3cfd802857c2ab2569d8be186b3cc36e65e458905f0e10e" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:13:37Z", "meta": { "snapshot.json": { "hashes": { "sha256": "d62f650c8097fd4de9e3c8874ef15f7e10fdcc4c32f7a1818e972e8984b8da8a", "sha512": "d9d0c38df27bc2ccc9523cb8d27623cb40b264053233e5e3261d83e2921c790b21accf9d427e36aa4c1939ddbccaaa5e006267f1cdd451606c514135d178dca5" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published2Times_keyrotated/hash.txt000066400000000000000000000001001453140004500230520ustar00rootroot0000000000000046183e42ee757c6704e7a122ab225ca633157738809243e8bc3cd92c67699dabclient/testdata/Published2Times_keyrotated/server/000077500000000000000000000000001453140004500227055ustar00rootroot00000000000000client/testdata/Published2Times_keyrotated/server/metadata.staged/000077500000000000000000000000001453140004500257335ustar00rootroot00000000000000client/testdata/Published2Times_keyrotated/server/metadata.staged/1.root.json000066400000000000000000000042031453140004500277470ustar00rootroot00000000000000{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "481a1bd10fedbe33e88e5f586a8726f558a5ec426bf65d2ba1c449fd1f69148da6af40f1ae18a5be63539dfbf076019db8b28f3f644f7fd4f003b7d06a4c2e09" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:13:37Z", "keys": { "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published2Times_keyrotated/server/metadata.staged/1.snapshot.json000066400000000000000000000006571453140004500306340ustar00rootroot00000000000000{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "ecf4d79a88873efb223361e550b8fc35813ad7bf31d9769908d9495cfb930e03db889dc7419897031cadf39437c9f49b085f384fe1c18be3961704062365db0c" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:13:37Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published2Times_keyrotated/server/metadata.staged/1.targets.json000066400000000000000000000006711453140004500304420ustar00rootroot00000000000000{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "f2cee9e31bda3f88b25b0153bb48a6cb21237e4c41a34bbae95f152b56975085bc04c4978eed6be76a3ead23ff76a1259ff07e7b45b04fb51865c9601713c905" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:13:37Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }client/testdata/Published2Times_keyrotated/server/metadata.staged/1.timestamp.json000066400000000000000000000013001453140004500307620ustar00rootroot00000000000000{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "35d1087c4874221bc772c8276bd77415d9366833aad4efc3926a8eda1de053843d2c114ac7448f08e3cfd802857c2ab2569d8be186b3cc36e65e458905f0e10e" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:13:37Z", "meta": { "snapshot.json": { "hashes": { "sha256": "d62f650c8097fd4de9e3c8874ef15f7e10fdcc4c32f7a1818e972e8984b8da8a", "sha512": "d9d0c38df27bc2ccc9523cb8d27623cb40b264053233e5e3261d83e2921c790b21accf9d427e36aa4c1939ddbccaaa5e006267f1cdd451606c514135d178dca5" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published2Times_keyrotated/server/metadata.staged/2.root.json000066400000000000000000000053371453140004500277610ustar00rootroot00000000000000{ "signatures": [ { "keyid": "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "sig": "122b322d6f212fcc22ec9062e6948baf694ec4ecf366e4a3cd5cf4c738aa39706b3420aeacd6d8e0e54f0af0168644e905696b397974dadfd3d2a578be06fd08" }, { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "c5e5a542c368d32a8bb1884ffcc850f8902c96537b2b827be3608c44dbdd24ff0cd3b0c326e03869474091e21073f87a57237f2909300a2c43a41ca90c22020c" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:13:37Z", "keys": { "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f758af464295e62a1da4d3267be6d13f4aba9c7d52166d01b6bd5b4559496c9d" }, "scheme": "ed25519" }, "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 2 } }client/testdata/Published2Times_keyrotated/server/metadata.staged/root.json000066400000000000000000000053371453140004500276210ustar00rootroot00000000000000{ "signatures": [ { "keyid": "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "sig": "122b322d6f212fcc22ec9062e6948baf694ec4ecf366e4a3cd5cf4c738aa39706b3420aeacd6d8e0e54f0af0168644e905696b397974dadfd3d2a578be06fd08" }, { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "c5e5a542c368d32a8bb1884ffcc850f8902c96537b2b827be3608c44dbdd24ff0cd3b0c326e03869474091e21073f87a57237f2909300a2c43a41ca90c22020c" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:13:37Z", "keys": { "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f758af464295e62a1da4d3267be6d13f4aba9c7d52166d01b6bd5b4559496c9d" }, "scheme": "ed25519" }, "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 2 } }client/testdata/Published2Times_keyrotated/server/metadata.staged/snapshot.json000066400000000000000000000006571453140004500304750ustar00rootroot00000000000000{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "ecf4d79a88873efb223361e550b8fc35813ad7bf31d9769908d9495cfb930e03db889dc7419897031cadf39437c9f49b085f384fe1c18be3961704062365db0c" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:13:37Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published2Times_keyrotated/server/metadata.staged/targets.json000066400000000000000000000006711453140004500303030ustar00rootroot00000000000000{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "f2cee9e31bda3f88b25b0153bb48a6cb21237e4c41a34bbae95f152b56975085bc04c4978eed6be76a3ead23ff76a1259ff07e7b45b04fb51865c9601713c905" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:13:37Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }client/testdata/Published2Times_keyrotated/server/metadata.staged/timestamp.json000066400000000000000000000013001453140004500306230ustar00rootroot00000000000000{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "35d1087c4874221bc772c8276bd77415d9366833aad4efc3926a8eda1de053843d2c114ac7448f08e3cfd802857c2ab2569d8be186b3cc36e65e458905f0e10e" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:13:37Z", "meta": { "snapshot.json": { "hashes": { "sha256": "d62f650c8097fd4de9e3c8874ef15f7e10fdcc4c32f7a1818e972e8984b8da8a", "sha512": "d9d0c38df27bc2ccc9523cb8d27623cb40b264053233e5e3261d83e2921c790b21accf9d427e36aa4c1939ddbccaaa5e006267f1cdd451606c514135d178dca5" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published2Times_keyrotated/server/metadata/000077500000000000000000000000001453140004500244655ustar00rootroot00000000000000client/testdata/Published2Times_keyrotated/server/metadata/1.root.json000066400000000000000000000042031453140004500265010ustar00rootroot00000000000000{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "481a1bd10fedbe33e88e5f586a8726f558a5ec426bf65d2ba1c449fd1f69148da6af40f1ae18a5be63539dfbf076019db8b28f3f644f7fd4f003b7d06a4c2e09" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:13:37Z", "keys": { "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published2Times_keyrotated/server/metadata/1.snapshot.json000066400000000000000000000006571453140004500273660ustar00rootroot00000000000000{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "ecf4d79a88873efb223361e550b8fc35813ad7bf31d9769908d9495cfb930e03db889dc7419897031cadf39437c9f49b085f384fe1c18be3961704062365db0c" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:13:37Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published2Times_keyrotated/server/metadata/1.targets.json000066400000000000000000000006711453140004500271740ustar00rootroot00000000000000{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "f2cee9e31bda3f88b25b0153bb48a6cb21237e4c41a34bbae95f152b56975085bc04c4978eed6be76a3ead23ff76a1259ff07e7b45b04fb51865c9601713c905" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:13:37Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }client/testdata/Published2Times_keyrotated/server/metadata/1.timestamp.json000066400000000000000000000013001453140004500275140ustar00rootroot00000000000000{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "35d1087c4874221bc772c8276bd77415d9366833aad4efc3926a8eda1de053843d2c114ac7448f08e3cfd802857c2ab2569d8be186b3cc36e65e458905f0e10e" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:13:37Z", "meta": { "snapshot.json": { "hashes": { "sha256": "d62f650c8097fd4de9e3c8874ef15f7e10fdcc4c32f7a1818e972e8984b8da8a", "sha512": "d9d0c38df27bc2ccc9523cb8d27623cb40b264053233e5e3261d83e2921c790b21accf9d427e36aa4c1939ddbccaaa5e006267f1cdd451606c514135d178dca5" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published2Times_keyrotated/server/metadata/2.root.json000066400000000000000000000053371453140004500265130ustar00rootroot00000000000000{ "signatures": [ { "keyid": "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "sig": "122b322d6f212fcc22ec9062e6948baf694ec4ecf366e4a3cd5cf4c738aa39706b3420aeacd6d8e0e54f0af0168644e905696b397974dadfd3d2a578be06fd08" }, { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "c5e5a542c368d32a8bb1884ffcc850f8902c96537b2b827be3608c44dbdd24ff0cd3b0c326e03869474091e21073f87a57237f2909300a2c43a41ca90c22020c" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:13:37Z", "keys": { "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f758af464295e62a1da4d3267be6d13f4aba9c7d52166d01b6bd5b4559496c9d" }, "scheme": "ed25519" }, "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 2 } }client/testdata/Published2Times_keyrotated/server/metadata/root.json000066400000000000000000000053371453140004500263530ustar00rootroot00000000000000{ "signatures": [ { "keyid": "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "sig": "122b322d6f212fcc22ec9062e6948baf694ec4ecf366e4a3cd5cf4c738aa39706b3420aeacd6d8e0e54f0af0168644e905696b397974dadfd3d2a578be06fd08" }, { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "c5e5a542c368d32a8bb1884ffcc850f8902c96537b2b827be3608c44dbdd24ff0cd3b0c326e03869474091e21073f87a57237f2909300a2c43a41ca90c22020c" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:13:37Z", "keys": { "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f758af464295e62a1da4d3267be6d13f4aba9c7d52166d01b6bd5b4559496c9d" }, "scheme": "ed25519" }, "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 2 } }client/testdata/Published2Times_keyrotated/server/metadata/snapshot.json000066400000000000000000000006571453140004500272270ustar00rootroot00000000000000{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "ecf4d79a88873efb223361e550b8fc35813ad7bf31d9769908d9495cfb930e03db889dc7419897031cadf39437c9f49b085f384fe1c18be3961704062365db0c" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:13:37Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published2Times_keyrotated/server/metadata/targets.json000066400000000000000000000006711453140004500270350ustar00rootroot00000000000000{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "f2cee9e31bda3f88b25b0153bb48a6cb21237e4c41a34bbae95f152b56975085bc04c4978eed6be76a3ead23ff76a1259ff07e7b45b04fb51865c9601713c905" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:13:37Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }client/testdata/Published2Times_keyrotated/server/metadata/timestamp.json000066400000000000000000000013001453140004500273550ustar00rootroot00000000000000{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "35d1087c4874221bc772c8276bd77415d9366833aad4efc3926a8eda1de053843d2c114ac7448f08e3cfd802857c2ab2569d8be186b3cc36e65e458905f0e10e" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:13:37Z", "meta": { "snapshot.json": { "hashes": { "sha256": "d62f650c8097fd4de9e3c8874ef15f7e10fdcc4c32f7a1818e972e8984b8da8a", "sha512": "d9d0c38df27bc2ccc9523cb8d27623cb40b264053233e5e3261d83e2921c790b21accf9d427e36aa4c1939ddbccaaa5e006267f1cdd451606c514135d178dca5" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published2Times_keyrotated_initialrootexpired/000077500000000000000000000000001453140004500253755ustar00rootroot00000000000000client/testdata/Published2Times_keyrotated_initialrootexpired/client/000077500000000000000000000000001453140004500266535ustar00rootroot00000000000000client/testdata/Published2Times_keyrotated_initialrootexpired/client/metadata/000077500000000000000000000000001453140004500304335ustar00rootroot00000000000000client/testdata/Published2Times_keyrotated_initialrootexpired/client/metadata/current/000077500000000000000000000000001453140004500321155ustar00rootroot00000000000000client/testdata/Published2Times_keyrotated_initialrootexpired/client/metadata/current/1.root.json000066400000000000000000000042031453140004500341310ustar00rootroot00000000000000{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "c981b331d9fd0adec189ec55593735f05ded1d73d7999d67b882f56d2d2a201525d39c20a99cc9c1f03e9425ec607b1f57c7e24b540c0b0c671992cab26e4d07" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2021-09-12T03:13:47Z", "keys": { "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 1 } }1.snapshot.json000066400000000000000000000006571453140004500347370ustar00rootroot00000000000000client/testdata/Published2Times_keyrotated_initialrootexpired/client/metadata/current{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "ecf4d79a88873efb223361e550b8fc35813ad7bf31d9769908d9495cfb930e03db889dc7419897031cadf39437c9f49b085f384fe1c18be3961704062365db0c" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:13:37Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published2Times_keyrotated_initialrootexpired/client/metadata/current/1.targets.json000066400000000000000000000006711453140004500346240ustar00rootroot00000000000000{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "f2cee9e31bda3f88b25b0153bb48a6cb21237e4c41a34bbae95f152b56975085bc04c4978eed6be76a3ead23ff76a1259ff07e7b45b04fb51865c9601713c905" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:13:37Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }1.timestamp.json000066400000000000000000000013001453140004500350650ustar00rootroot00000000000000client/testdata/Published2Times_keyrotated_initialrootexpired/client/metadata/current{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "35d1087c4874221bc772c8276bd77415d9366833aad4efc3926a8eda1de053843d2c114ac7448f08e3cfd802857c2ab2569d8be186b3cc36e65e458905f0e10e" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:13:37Z", "meta": { "snapshot.json": { "hashes": { "sha256": "d62f650c8097fd4de9e3c8874ef15f7e10fdcc4c32f7a1818e972e8984b8da8a", "sha512": "d9d0c38df27bc2ccc9523cb8d27623cb40b264053233e5e3261d83e2921c790b21accf9d427e36aa4c1939ddbccaaa5e006267f1cdd451606c514135d178dca5" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published2Times_keyrotated_initialrootexpired/client/metadata/current/root.json000066400000000000000000000042031453140004500337720ustar00rootroot00000000000000{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "c981b331d9fd0adec189ec55593735f05ded1d73d7999d67b882f56d2d2a201525d39c20a99cc9c1f03e9425ec607b1f57c7e24b540c0b0c671992cab26e4d07" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2021-09-12T03:13:47Z", "keys": { "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published2Times_keyrotated_initialrootexpired/client/metadata/current/snapshot.json000066400000000000000000000006571453140004500346570ustar00rootroot00000000000000{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "ecf4d79a88873efb223361e550b8fc35813ad7bf31d9769908d9495cfb930e03db889dc7419897031cadf39437c9f49b085f384fe1c18be3961704062365db0c" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:13:37Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published2Times_keyrotated_initialrootexpired/client/metadata/current/targets.json000066400000000000000000000006711453140004500344650ustar00rootroot00000000000000{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "f2cee9e31bda3f88b25b0153bb48a6cb21237e4c41a34bbae95f152b56975085bc04c4978eed6be76a3ead23ff76a1259ff07e7b45b04fb51865c9601713c905" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:13:37Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }client/testdata/Published2Times_keyrotated_initialrootexpired/client/metadata/current/timestamp.json000066400000000000000000000013001453140004500350050ustar00rootroot00000000000000{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "35d1087c4874221bc772c8276bd77415d9366833aad4efc3926a8eda1de053843d2c114ac7448f08e3cfd802857c2ab2569d8be186b3cc36e65e458905f0e10e" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:13:37Z", "meta": { "snapshot.json": { "hashes": { "sha256": "d62f650c8097fd4de9e3c8874ef15f7e10fdcc4c32f7a1818e972e8984b8da8a", "sha512": "d9d0c38df27bc2ccc9523cb8d27623cb40b264053233e5e3261d83e2921c790b21accf9d427e36aa4c1939ddbccaaa5e006267f1cdd451606c514135d178dca5" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published2Times_keyrotated_initialrootexpired/client/metadata/previous/000077500000000000000000000000001453140004500323075ustar00rootroot00000000000000client/testdata/Published2Times_keyrotated_initialrootexpired/client/metadata/previous/1.root.json000066400000000000000000000042031453140004500343230ustar00rootroot00000000000000{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "c981b331d9fd0adec189ec55593735f05ded1d73d7999d67b882f56d2d2a201525d39c20a99cc9c1f03e9425ec607b1f57c7e24b540c0b0c671992cab26e4d07" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2021-09-12T03:13:47Z", "keys": { "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 1 } }1.snapshot.json000066400000000000000000000006571453140004500351310ustar00rootroot00000000000000client/testdata/Published2Times_keyrotated_initialrootexpired/client/metadata/previous{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "ecf4d79a88873efb223361e550b8fc35813ad7bf31d9769908d9495cfb930e03db889dc7419897031cadf39437c9f49b085f384fe1c18be3961704062365db0c" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:13:37Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }1.targets.json000066400000000000000000000006711453140004500347370ustar00rootroot00000000000000client/testdata/Published2Times_keyrotated_initialrootexpired/client/metadata/previous{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "f2cee9e31bda3f88b25b0153bb48a6cb21237e4c41a34bbae95f152b56975085bc04c4978eed6be76a3ead23ff76a1259ff07e7b45b04fb51865c9601713c905" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:13:37Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }1.timestamp.json000066400000000000000000000013001453140004500352570ustar00rootroot00000000000000client/testdata/Published2Times_keyrotated_initialrootexpired/client/metadata/previous{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "35d1087c4874221bc772c8276bd77415d9366833aad4efc3926a8eda1de053843d2c114ac7448f08e3cfd802857c2ab2569d8be186b3cc36e65e458905f0e10e" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:13:37Z", "meta": { "snapshot.json": { "hashes": { "sha256": "d62f650c8097fd4de9e3c8874ef15f7e10fdcc4c32f7a1818e972e8984b8da8a", "sha512": "d9d0c38df27bc2ccc9523cb8d27623cb40b264053233e5e3261d83e2921c790b21accf9d427e36aa4c1939ddbccaaa5e006267f1cdd451606c514135d178dca5" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published2Times_keyrotated_initialrootexpired/client/metadata/previous/root.json000066400000000000000000000042031453140004500341640ustar00rootroot00000000000000{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "c981b331d9fd0adec189ec55593735f05ded1d73d7999d67b882f56d2d2a201525d39c20a99cc9c1f03e9425ec607b1f57c7e24b540c0b0c671992cab26e4d07" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2021-09-12T03:13:47Z", "keys": { "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published2Times_keyrotated_initialrootexpired/client/metadata/previous/snapshot.json000066400000000000000000000006571453140004500350510ustar00rootroot00000000000000{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "ecf4d79a88873efb223361e550b8fc35813ad7bf31d9769908d9495cfb930e03db889dc7419897031cadf39437c9f49b085f384fe1c18be3961704062365db0c" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:13:37Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published2Times_keyrotated_initialrootexpired/client/metadata/previous/targets.json000066400000000000000000000006711453140004500346570ustar00rootroot00000000000000{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "f2cee9e31bda3f88b25b0153bb48a6cb21237e4c41a34bbae95f152b56975085bc04c4978eed6be76a3ead23ff76a1259ff07e7b45b04fb51865c9601713c905" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:13:37Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }timestamp.json000066400000000000000000000013001453140004500351200ustar00rootroot00000000000000client/testdata/Published2Times_keyrotated_initialrootexpired/client/metadata/previous{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "35d1087c4874221bc772c8276bd77415d9366833aad4efc3926a8eda1de053843d2c114ac7448f08e3cfd802857c2ab2569d8be186b3cc36e65e458905f0e10e" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:13:37Z", "meta": { "snapshot.json": { "hashes": { "sha256": "d62f650c8097fd4de9e3c8874ef15f7e10fdcc4c32f7a1818e972e8984b8da8a", "sha512": "d9d0c38df27bc2ccc9523cb8d27623cb40b264053233e5e3261d83e2921c790b21accf9d427e36aa4c1939ddbccaaa5e006267f1cdd451606c514135d178dca5" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published2Times_keyrotated_initialrootexpired/hash.txt000066400000000000000000000001001453140004500270500ustar00rootroot0000000000000076108cb5fdef506ef1fb58b75b44008193d7368938b090f82deae5dc88dca7dfclient/testdata/Published2Times_keyrotated_initialrootexpired/server/000077500000000000000000000000001453140004500267035ustar00rootroot00000000000000client/testdata/Published2Times_keyrotated_initialrootexpired/server/metadata.staged/000077500000000000000000000000001453140004500317315ustar00rootroot00000000000000client/testdata/Published2Times_keyrotated_initialrootexpired/server/metadata.staged/1.root.json000066400000000000000000000042031453140004500337450ustar00rootroot00000000000000{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "c981b331d9fd0adec189ec55593735f05ded1d73d7999d67b882f56d2d2a201525d39c20a99cc9c1f03e9425ec607b1f57c7e24b540c0b0c671992cab26e4d07" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2021-09-12T03:13:47Z", "keys": { "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published2Times_keyrotated_initialrootexpired/server/metadata.staged/1.snapshot.json000066400000000000000000000006571453140004500346320ustar00rootroot00000000000000{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "ecf4d79a88873efb223361e550b8fc35813ad7bf31d9769908d9495cfb930e03db889dc7419897031cadf39437c9f49b085f384fe1c18be3961704062365db0c" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:13:37Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published2Times_keyrotated_initialrootexpired/server/metadata.staged/1.targets.json000066400000000000000000000006711453140004500344400ustar00rootroot00000000000000{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "f2cee9e31bda3f88b25b0153bb48a6cb21237e4c41a34bbae95f152b56975085bc04c4978eed6be76a3ead23ff76a1259ff07e7b45b04fb51865c9601713c905" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:13:37Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }1.timestamp.json000066400000000000000000000013001453140004500347010ustar00rootroot00000000000000client/testdata/Published2Times_keyrotated_initialrootexpired/server/metadata.staged{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "35d1087c4874221bc772c8276bd77415d9366833aad4efc3926a8eda1de053843d2c114ac7448f08e3cfd802857c2ab2569d8be186b3cc36e65e458905f0e10e" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:13:37Z", "meta": { "snapshot.json": { "hashes": { "sha256": "d62f650c8097fd4de9e3c8874ef15f7e10fdcc4c32f7a1818e972e8984b8da8a", "sha512": "d9d0c38df27bc2ccc9523cb8d27623cb40b264053233e5e3261d83e2921c790b21accf9d427e36aa4c1939ddbccaaa5e006267f1cdd451606c514135d178dca5" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published2Times_keyrotated_initialrootexpired/server/metadata.staged/2.root.json000066400000000000000000000053371453140004500337570ustar00rootroot00000000000000{ "signatures": [ { "keyid": "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "sig": "122b322d6f212fcc22ec9062e6948baf694ec4ecf366e4a3cd5cf4c738aa39706b3420aeacd6d8e0e54f0af0168644e905696b397974dadfd3d2a578be06fd08" }, { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "c5e5a542c368d32a8bb1884ffcc850f8902c96537b2b827be3608c44dbdd24ff0cd3b0c326e03869474091e21073f87a57237f2909300a2c43a41ca90c22020c" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:13:37Z", "keys": { "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f758af464295e62a1da4d3267be6d13f4aba9c7d52166d01b6bd5b4559496c9d" }, "scheme": "ed25519" }, "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 2 } }client/testdata/Published2Times_keyrotated_initialrootexpired/server/metadata.staged/root.json000066400000000000000000000053371453140004500336170ustar00rootroot00000000000000{ "signatures": [ { "keyid": "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "sig": "122b322d6f212fcc22ec9062e6948baf694ec4ecf366e4a3cd5cf4c738aa39706b3420aeacd6d8e0e54f0af0168644e905696b397974dadfd3d2a578be06fd08" }, { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "c5e5a542c368d32a8bb1884ffcc850f8902c96537b2b827be3608c44dbdd24ff0cd3b0c326e03869474091e21073f87a57237f2909300a2c43a41ca90c22020c" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:13:37Z", "keys": { "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f758af464295e62a1da4d3267be6d13f4aba9c7d52166d01b6bd5b4559496c9d" }, "scheme": "ed25519" }, "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 2 } }client/testdata/Published2Times_keyrotated_initialrootexpired/server/metadata.staged/snapshot.json000066400000000000000000000006571453140004500344730ustar00rootroot00000000000000{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "ecf4d79a88873efb223361e550b8fc35813ad7bf31d9769908d9495cfb930e03db889dc7419897031cadf39437c9f49b085f384fe1c18be3961704062365db0c" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:13:37Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published2Times_keyrotated_initialrootexpired/server/metadata.staged/targets.json000066400000000000000000000006711453140004500343010ustar00rootroot00000000000000{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "f2cee9e31bda3f88b25b0153bb48a6cb21237e4c41a34bbae95f152b56975085bc04c4978eed6be76a3ead23ff76a1259ff07e7b45b04fb51865c9601713c905" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:13:37Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }client/testdata/Published2Times_keyrotated_initialrootexpired/server/metadata.staged/timestamp.json000066400000000000000000000013001453140004500346210ustar00rootroot00000000000000{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "35d1087c4874221bc772c8276bd77415d9366833aad4efc3926a8eda1de053843d2c114ac7448f08e3cfd802857c2ab2569d8be186b3cc36e65e458905f0e10e" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:13:37Z", "meta": { "snapshot.json": { "hashes": { "sha256": "d62f650c8097fd4de9e3c8874ef15f7e10fdcc4c32f7a1818e972e8984b8da8a", "sha512": "d9d0c38df27bc2ccc9523cb8d27623cb40b264053233e5e3261d83e2921c790b21accf9d427e36aa4c1939ddbccaaa5e006267f1cdd451606c514135d178dca5" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published2Times_keyrotated_initialrootexpired/server/metadata/000077500000000000000000000000001453140004500304635ustar00rootroot00000000000000client/testdata/Published2Times_keyrotated_initialrootexpired/server/metadata/1.root.json000066400000000000000000000042031453140004500324770ustar00rootroot00000000000000{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "c981b331d9fd0adec189ec55593735f05ded1d73d7999d67b882f56d2d2a201525d39c20a99cc9c1f03e9425ec607b1f57c7e24b540c0b0c671992cab26e4d07" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2021-09-12T03:13:47Z", "keys": { "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published2Times_keyrotated_initialrootexpired/server/metadata/1.snapshot.json000066400000000000000000000006571453140004500333640ustar00rootroot00000000000000{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "ecf4d79a88873efb223361e550b8fc35813ad7bf31d9769908d9495cfb930e03db889dc7419897031cadf39437c9f49b085f384fe1c18be3961704062365db0c" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:13:37Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published2Times_keyrotated_initialrootexpired/server/metadata/1.targets.json000066400000000000000000000006711453140004500331720ustar00rootroot00000000000000{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "f2cee9e31bda3f88b25b0153bb48a6cb21237e4c41a34bbae95f152b56975085bc04c4978eed6be76a3ead23ff76a1259ff07e7b45b04fb51865c9601713c905" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:13:37Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }client/testdata/Published2Times_keyrotated_initialrootexpired/server/metadata/1.timestamp.json000066400000000000000000000013001453140004500335120ustar00rootroot00000000000000{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "35d1087c4874221bc772c8276bd77415d9366833aad4efc3926a8eda1de053843d2c114ac7448f08e3cfd802857c2ab2569d8be186b3cc36e65e458905f0e10e" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:13:37Z", "meta": { "snapshot.json": { "hashes": { "sha256": "d62f650c8097fd4de9e3c8874ef15f7e10fdcc4c32f7a1818e972e8984b8da8a", "sha512": "d9d0c38df27bc2ccc9523cb8d27623cb40b264053233e5e3261d83e2921c790b21accf9d427e36aa4c1939ddbccaaa5e006267f1cdd451606c514135d178dca5" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published2Times_keyrotated_initialrootexpired/server/metadata/2.root.json000066400000000000000000000053371453140004500325110ustar00rootroot00000000000000{ "signatures": [ { "keyid": "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "sig": "122b322d6f212fcc22ec9062e6948baf694ec4ecf366e4a3cd5cf4c738aa39706b3420aeacd6d8e0e54f0af0168644e905696b397974dadfd3d2a578be06fd08" }, { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "c5e5a542c368d32a8bb1884ffcc850f8902c96537b2b827be3608c44dbdd24ff0cd3b0c326e03869474091e21073f87a57237f2909300a2c43a41ca90c22020c" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:13:37Z", "keys": { "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f758af464295e62a1da4d3267be6d13f4aba9c7d52166d01b6bd5b4559496c9d" }, "scheme": "ed25519" }, "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 2 } }client/testdata/Published2Times_keyrotated_initialrootexpired/server/metadata/root.json000066400000000000000000000053371453140004500323510ustar00rootroot00000000000000{ "signatures": [ { "keyid": "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "sig": "122b322d6f212fcc22ec9062e6948baf694ec4ecf366e4a3cd5cf4c738aa39706b3420aeacd6d8e0e54f0af0168644e905696b397974dadfd3d2a578be06fd08" }, { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "c5e5a542c368d32a8bb1884ffcc850f8902c96537b2b827be3608c44dbdd24ff0cd3b0c326e03869474091e21073f87a57237f2909300a2c43a41ca90c22020c" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:13:37Z", "keys": { "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f758af464295e62a1da4d3267be6d13f4aba9c7d52166d01b6bd5b4559496c9d" }, "scheme": "ed25519" }, "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 2 } }client/testdata/Published2Times_keyrotated_initialrootexpired/server/metadata/snapshot.json000066400000000000000000000006571453140004500332250ustar00rootroot00000000000000{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "ecf4d79a88873efb223361e550b8fc35813ad7bf31d9769908d9495cfb930e03db889dc7419897031cadf39437c9f49b085f384fe1c18be3961704062365db0c" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:13:37Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published2Times_keyrotated_initialrootexpired/server/metadata/targets.json000066400000000000000000000006711453140004500330330ustar00rootroot00000000000000{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "f2cee9e31bda3f88b25b0153bb48a6cb21237e4c41a34bbae95f152b56975085bc04c4978eed6be76a3ead23ff76a1259ff07e7b45b04fb51865c9601713c905" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:13:37Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }client/testdata/Published2Times_keyrotated_initialrootexpired/server/metadata/timestamp.json000066400000000000000000000013001453140004500333530ustar00rootroot00000000000000{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "35d1087c4874221bc772c8276bd77415d9366833aad4efc3926a8eda1de053843d2c114ac7448f08e3cfd802857c2ab2569d8be186b3cc36e65e458905f0e10e" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:13:37Z", "meta": { "snapshot.json": { "hashes": { "sha256": "d62f650c8097fd4de9e3c8874ef15f7e10fdcc4c32f7a1818e972e8984b8da8a", "sha512": "d9d0c38df27bc2ccc9523cb8d27623cb40b264053233e5e3261d83e2921c790b21accf9d427e36aa4c1939ddbccaaa5e006267f1cdd451606c514135d178dca5" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published2Times_keyrotated_invalidNewRootSignature/000077500000000000000000000000001453140004500263055ustar00rootroot00000000000000client/testdata/Published2Times_keyrotated_invalidNewRootSignature/client/000077500000000000000000000000001453140004500275635ustar00rootroot00000000000000client/testdata/Published2Times_keyrotated_invalidNewRootSignature/client/metadata/000077500000000000000000000000001453140004500313435ustar00rootroot00000000000000client/testdata/Published2Times_keyrotated_invalidNewRootSignature/client/metadata/current/000077500000000000000000000000001453140004500330255ustar00rootroot000000000000001.root.json000066400000000000000000000042031453140004500347620ustar00rootroot00000000000000client/testdata/Published2Times_keyrotated_invalidNewRootSignature/client/metadata/current{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "eb855bd4b5abba2553aeeedf6aa7df3a9823486e5ebdd5e584e465db4772872ba07e5d246260249853b8c5c5a057b59bb5f169b944691ec4d898293f3d1fb10e" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2022-09-10T09:49:07Z", "keys": { "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 1 } }1.snapshot.json000066400000000000000000000006571453140004500356470ustar00rootroot00000000000000client/testdata/Published2Times_keyrotated_invalidNewRootSignature/client/metadata/current{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "7283800e4ad40d7461b03bf6cd8a37218d7a233341cd9fe803398902274b1647213567ee0287c852b33d1c157461cb999ff399e4dc293a07141afd6abea25a03" } ], "signed": { "_type": "snapshot", "expires": "2021-09-17T04:00:47Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }1.targets.json000066400000000000000000000006711453140004500354550ustar00rootroot00000000000000client/testdata/Published2Times_keyrotated_invalidNewRootSignature/client/metadata/current{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "6202bb047ad7e5a13b514be1b8c128621374a70c17dba57b29ed58691b0badfe4827e47b6de8ee6fa35b731d1be994a492aa60ba872ed7e9a332a1fbb1cf910c" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2021-12-10T11:27:57Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }1.timestamp.json000066400000000000000000000013001453140004500357750ustar00rootroot00000000000000client/testdata/Published2Times_keyrotated_invalidNewRootSignature/client/metadata/current{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "f95d84c5d292a024dffc394b842fef1634d00491762841715083c167eb8be1cb5b34604c13d27a6b27a2b73e0188df5e89b219022038b22c8b6d493fdd13a906" } ], "signed": { "_type": "timestamp", "expires": "2021-09-11T04:00:47Z", "meta": { "snapshot.json": { "hashes": { "sha256": "a9591bd41f7ce1b3ce8a13c4266d7ad5ea91ad51279955d1965259aa7fd32394", "sha512": "191cd66f1e3ebc512b186e3de6f15a1f36cb6a91a7a229f2df67161dd1e75d005a05cf2017512903525160f1c867e6a06b1bacc1ba8d3cdd7521bc9f46a998b3" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published2Times_keyrotated_invalidNewRootSignature/client/metadata/current/root.json000066400000000000000000000042031453140004500347020ustar00rootroot00000000000000{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "eb855bd4b5abba2553aeeedf6aa7df3a9823486e5ebdd5e584e465db4772872ba07e5d246260249853b8c5c5a057b59bb5f169b944691ec4d898293f3d1fb10e" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2022-09-10T09:49:07Z", "keys": { "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 1 } }snapshot.json000066400000000000000000000006571453140004500355100ustar00rootroot00000000000000client/testdata/Published2Times_keyrotated_invalidNewRootSignature/client/metadata/current{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "7283800e4ad40d7461b03bf6cd8a37218d7a233341cd9fe803398902274b1647213567ee0287c852b33d1c157461cb999ff399e4dc293a07141afd6abea25a03" } ], "signed": { "_type": "snapshot", "expires": "2021-09-17T04:00:47Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }targets.json000066400000000000000000000006711453140004500353160ustar00rootroot00000000000000client/testdata/Published2Times_keyrotated_invalidNewRootSignature/client/metadata/current{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "6202bb047ad7e5a13b514be1b8c128621374a70c17dba57b29ed58691b0badfe4827e47b6de8ee6fa35b731d1be994a492aa60ba872ed7e9a332a1fbb1cf910c" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2021-12-10T11:27:57Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }timestamp.json000066400000000000000000000013001453140004500356360ustar00rootroot00000000000000client/testdata/Published2Times_keyrotated_invalidNewRootSignature/client/metadata/current{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "f95d84c5d292a024dffc394b842fef1634d00491762841715083c167eb8be1cb5b34604c13d27a6b27a2b73e0188df5e89b219022038b22c8b6d493fdd13a906" } ], "signed": { "_type": "timestamp", "expires": "2021-09-11T04:00:47Z", "meta": { "snapshot.json": { "hashes": { "sha256": "a9591bd41f7ce1b3ce8a13c4266d7ad5ea91ad51279955d1965259aa7fd32394", "sha512": "191cd66f1e3ebc512b186e3de6f15a1f36cb6a91a7a229f2df67161dd1e75d005a05cf2017512903525160f1c867e6a06b1bacc1ba8d3cdd7521bc9f46a998b3" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published2Times_keyrotated_invalidNewRootSignature/client/metadata/previous/000077500000000000000000000000001453140004500332175ustar00rootroot000000000000001.root.json000066400000000000000000000042031453140004500351540ustar00rootroot00000000000000client/testdata/Published2Times_keyrotated_invalidNewRootSignature/client/metadata/previous{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "eb855bd4b5abba2553aeeedf6aa7df3a9823486e5ebdd5e584e465db4772872ba07e5d246260249853b8c5c5a057b59bb5f169b944691ec4d898293f3d1fb10e" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2022-09-10T09:49:07Z", "keys": { "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 1 } }1.snapshot.json000066400000000000000000000006571453140004500360410ustar00rootroot00000000000000client/testdata/Published2Times_keyrotated_invalidNewRootSignature/client/metadata/previous{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "7283800e4ad40d7461b03bf6cd8a37218d7a233341cd9fe803398902274b1647213567ee0287c852b33d1c157461cb999ff399e4dc293a07141afd6abea25a03" } ], "signed": { "_type": "snapshot", "expires": "2021-09-17T04:00:47Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }1.targets.json000066400000000000000000000006711453140004500356470ustar00rootroot00000000000000client/testdata/Published2Times_keyrotated_invalidNewRootSignature/client/metadata/previous{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "6202bb047ad7e5a13b514be1b8c128621374a70c17dba57b29ed58691b0badfe4827e47b6de8ee6fa35b731d1be994a492aa60ba872ed7e9a332a1fbb1cf910c" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2021-12-10T11:27:57Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }1.timestamp.json000066400000000000000000000013001453140004500361670ustar00rootroot00000000000000client/testdata/Published2Times_keyrotated_invalidNewRootSignature/client/metadata/previous{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "f95d84c5d292a024dffc394b842fef1634d00491762841715083c167eb8be1cb5b34604c13d27a6b27a2b73e0188df5e89b219022038b22c8b6d493fdd13a906" } ], "signed": { "_type": "timestamp", "expires": "2021-09-11T04:00:47Z", "meta": { "snapshot.json": { "hashes": { "sha256": "a9591bd41f7ce1b3ce8a13c4266d7ad5ea91ad51279955d1965259aa7fd32394", "sha512": "191cd66f1e3ebc512b186e3de6f15a1f36cb6a91a7a229f2df67161dd1e75d005a05cf2017512903525160f1c867e6a06b1bacc1ba8d3cdd7521bc9f46a998b3" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }root.json000066400000000000000000000042031453140004500350150ustar00rootroot00000000000000client/testdata/Published2Times_keyrotated_invalidNewRootSignature/client/metadata/previous{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "eb855bd4b5abba2553aeeedf6aa7df3a9823486e5ebdd5e584e465db4772872ba07e5d246260249853b8c5c5a057b59bb5f169b944691ec4d898293f3d1fb10e" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2022-09-10T09:49:07Z", "keys": { "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 1 } }snapshot.json000066400000000000000000000006571453140004500357020ustar00rootroot00000000000000client/testdata/Published2Times_keyrotated_invalidNewRootSignature/client/metadata/previous{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "7283800e4ad40d7461b03bf6cd8a37218d7a233341cd9fe803398902274b1647213567ee0287c852b33d1c157461cb999ff399e4dc293a07141afd6abea25a03" } ], "signed": { "_type": "snapshot", "expires": "2021-09-17T04:00:47Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }targets.json000066400000000000000000000006711453140004500355100ustar00rootroot00000000000000client/testdata/Published2Times_keyrotated_invalidNewRootSignature/client/metadata/previous{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "6202bb047ad7e5a13b514be1b8c128621374a70c17dba57b29ed58691b0badfe4827e47b6de8ee6fa35b731d1be994a492aa60ba872ed7e9a332a1fbb1cf910c" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2021-12-10T11:27:57Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }timestamp.json000066400000000000000000000013001453140004500360300ustar00rootroot00000000000000client/testdata/Published2Times_keyrotated_invalidNewRootSignature/client/metadata/previous{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "f95d84c5d292a024dffc394b842fef1634d00491762841715083c167eb8be1cb5b34604c13d27a6b27a2b73e0188df5e89b219022038b22c8b6d493fdd13a906" } ], "signed": { "_type": "timestamp", "expires": "2021-09-11T04:00:47Z", "meta": { "snapshot.json": { "hashes": { "sha256": "a9591bd41f7ce1b3ce8a13c4266d7ad5ea91ad51279955d1965259aa7fd32394", "sha512": "191cd66f1e3ebc512b186e3de6f15a1f36cb6a91a7a229f2df67161dd1e75d005a05cf2017512903525160f1c867e6a06b1bacc1ba8d3cdd7521bc9f46a998b3" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published2Times_keyrotated_invalidNewRootSignature/hash.txt000066400000000000000000000001001453140004500277600ustar00rootroot0000000000000001bad68cbfe77f8d25005708a5ae983304afd54ef92062b4c75cedaf905ec102client/testdata/Published2Times_keyrotated_invalidNewRootSignature/server/000077500000000000000000000000001453140004500276135ustar00rootroot00000000000000client/testdata/Published2Times_keyrotated_invalidNewRootSignature/server/metadata.staged/000077500000000000000000000000001453140004500326415ustar00rootroot000000000000001.root.json000066400000000000000000000042031453140004500345760ustar00rootroot00000000000000client/testdata/Published2Times_keyrotated_invalidNewRootSignature/server/metadata.staged{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "eb855bd4b5abba2553aeeedf6aa7df3a9823486e5ebdd5e584e465db4772872ba07e5d246260249853b8c5c5a057b59bb5f169b944691ec4d898293f3d1fb10e" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2022-09-10T09:49:07Z", "keys": { "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 1 } }1.snapshot.json000066400000000000000000000006571453140004500354630ustar00rootroot00000000000000client/testdata/Published2Times_keyrotated_invalidNewRootSignature/server/metadata.staged{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "7283800e4ad40d7461b03bf6cd8a37218d7a233341cd9fe803398902274b1647213567ee0287c852b33d1c157461cb999ff399e4dc293a07141afd6abea25a03" } ], "signed": { "_type": "snapshot", "expires": "2021-09-17T04:00:47Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }1.targets.json000066400000000000000000000006711453140004500352710ustar00rootroot00000000000000client/testdata/Published2Times_keyrotated_invalidNewRootSignature/server/metadata.staged{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "6202bb047ad7e5a13b514be1b8c128621374a70c17dba57b29ed58691b0badfe4827e47b6de8ee6fa35b731d1be994a492aa60ba872ed7e9a332a1fbb1cf910c" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2021-12-10T11:27:57Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }1.timestamp.json000066400000000000000000000013001453140004500356110ustar00rootroot00000000000000client/testdata/Published2Times_keyrotated_invalidNewRootSignature/server/metadata.staged{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "f95d84c5d292a024dffc394b842fef1634d00491762841715083c167eb8be1cb5b34604c13d27a6b27a2b73e0188df5e89b219022038b22c8b6d493fdd13a906" } ], "signed": { "_type": "timestamp", "expires": "2021-09-11T04:00:47Z", "meta": { "snapshot.json": { "hashes": { "sha256": "a9591bd41f7ce1b3ce8a13c4266d7ad5ea91ad51279955d1965259aa7fd32394", "sha512": "191cd66f1e3ebc512b186e3de6f15a1f36cb6a91a7a229f2df67161dd1e75d005a05cf2017512903525160f1c867e6a06b1bacc1ba8d3cdd7521bc9f46a998b3" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }2.root.json000066400000000000000000000053371453140004500346100ustar00rootroot00000000000000client/testdata/Published2Times_keyrotated_invalidNewRootSignature/server/metadata.staged{ "signatures": [ { "keyid": "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "sig": "da7ef701db2051465c600eae99a3664653d298e6c6ce230b10414b7044ce18b98f17f15f05ecf5678ce776b4bab058db6aa0d920a832bd5d3c167e81d9d1160d" }, { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "d1c36ce282376aeec81a74229e8d0927f87d0044aace710b93c11088e49a6889f6135dc18fafc23ea2caead0a9164bfec2c0f825d6979fb459ec6bf3471cdb0b" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2022-09-10T09:49:07Z", "keys": { "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f758af464295e62a1da4d3267be6d13f4aba9c7d52166d01b6bd5b4559496c9d" }, "scheme": "ed25519" }, "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 2 } }client/testdata/Published2Times_keyrotated_invalidNewRootSignature/server/metadata.staged/root.json000066400000000000000000000053371453140004500345270ustar00rootroot00000000000000{ "signatures": [ { "keyid": "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "sig": "da7ef701db2051465c600eae99a3664653d298e6c6ce230b10414b7044ce18b98f17f15f05ecf5678ce776b4bab058db6aa0d920a832bd5d3c167e81d9d1160d" }, { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "d1c36ce282376aeec81a74229e8d0927f87d0044aace710b93c11088e49a6889f6135dc18fafc23ea2caead0a9164bfec2c0f825d6979fb459ec6bf3471cdb0b" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2022-09-10T09:49:07Z", "keys": { "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f758af464295e62a1da4d3267be6d13f4aba9c7d52166d01b6bd5b4559496c9d" }, "scheme": "ed25519" }, "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 2 } }snapshot.json000066400000000000000000000006571453140004500353240ustar00rootroot00000000000000client/testdata/Published2Times_keyrotated_invalidNewRootSignature/server/metadata.staged{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "7283800e4ad40d7461b03bf6cd8a37218d7a233341cd9fe803398902274b1647213567ee0287c852b33d1c157461cb999ff399e4dc293a07141afd6abea25a03" } ], "signed": { "_type": "snapshot", "expires": "2021-09-17T04:00:47Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }targets.json000066400000000000000000000006711453140004500351320ustar00rootroot00000000000000client/testdata/Published2Times_keyrotated_invalidNewRootSignature/server/metadata.staged{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "6202bb047ad7e5a13b514be1b8c128621374a70c17dba57b29ed58691b0badfe4827e47b6de8ee6fa35b731d1be994a492aa60ba872ed7e9a332a1fbb1cf910c" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2021-12-10T11:27:57Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }timestamp.json000066400000000000000000000013001453140004500354520ustar00rootroot00000000000000client/testdata/Published2Times_keyrotated_invalidNewRootSignature/server/metadata.staged{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "f95d84c5d292a024dffc394b842fef1634d00491762841715083c167eb8be1cb5b34604c13d27a6b27a2b73e0188df5e89b219022038b22c8b6d493fdd13a906" } ], "signed": { "_type": "timestamp", "expires": "2021-09-11T04:00:47Z", "meta": { "snapshot.json": { "hashes": { "sha256": "a9591bd41f7ce1b3ce8a13c4266d7ad5ea91ad51279955d1965259aa7fd32394", "sha512": "191cd66f1e3ebc512b186e3de6f15a1f36cb6a91a7a229f2df67161dd1e75d005a05cf2017512903525160f1c867e6a06b1bacc1ba8d3cdd7521bc9f46a998b3" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published2Times_keyrotated_invalidNewRootSignature/server/metadata/000077500000000000000000000000001453140004500313735ustar00rootroot00000000000000client/testdata/Published2Times_keyrotated_invalidNewRootSignature/server/metadata/1.root.json000066400000000000000000000042031453140004500334070ustar00rootroot00000000000000{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "eb855bd4b5abba2553aeeedf6aa7df3a9823486e5ebdd5e584e465db4772872ba07e5d246260249853b8c5c5a057b59bb5f169b944691ec4d898293f3d1fb10e" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2022-09-10T09:49:07Z", "keys": { "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published2Times_keyrotated_invalidNewRootSignature/server/metadata/1.snapshot.json000066400000000000000000000006571453140004500342740ustar00rootroot00000000000000{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "7283800e4ad40d7461b03bf6cd8a37218d7a233341cd9fe803398902274b1647213567ee0287c852b33d1c157461cb999ff399e4dc293a07141afd6abea25a03" } ], "signed": { "_type": "snapshot", "expires": "2021-09-17T04:00:47Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published2Times_keyrotated_invalidNewRootSignature/server/metadata/1.targets.json000066400000000000000000000006711453140004500341020ustar00rootroot00000000000000{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "6202bb047ad7e5a13b514be1b8c128621374a70c17dba57b29ed58691b0badfe4827e47b6de8ee6fa35b731d1be994a492aa60ba872ed7e9a332a1fbb1cf910c" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2021-12-10T11:27:57Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }client/testdata/Published2Times_keyrotated_invalidNewRootSignature/server/metadata/1.timestamp.json000066400000000000000000000013001453140004500344220ustar00rootroot00000000000000{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "f95d84c5d292a024dffc394b842fef1634d00491762841715083c167eb8be1cb5b34604c13d27a6b27a2b73e0188df5e89b219022038b22c8b6d493fdd13a906" } ], "signed": { "_type": "timestamp", "expires": "2021-09-11T04:00:47Z", "meta": { "snapshot.json": { "hashes": { "sha256": "a9591bd41f7ce1b3ce8a13c4266d7ad5ea91ad51279955d1965259aa7fd32394", "sha512": "191cd66f1e3ebc512b186e3de6f15a1f36cb6a91a7a229f2df67161dd1e75d005a05cf2017512903525160f1c867e6a06b1bacc1ba8d3cdd7521bc9f46a998b3" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published2Times_keyrotated_invalidNewRootSignature/server/metadata/2.root.json000066400000000000000000000051451453140004500334160ustar00rootroot00000000000000{ "signatures": [ { "keyid": "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "sig": "da7ef701db2051465c600eae99a3664653d298e6c6ce230b10414b7044ce18b98f17f15f05ecf5678ce776b4bab058db6aa0d920a832bd5d3c167e81d9d1160d" }, { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "000000" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2022-09-10T09:49:07Z", "keys": { "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f758af464295e62a1da4d3267be6d13f4aba9c7d52166d01b6bd5b4559496c9d" }, "scheme": "ed25519" }, "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 2 } }client/testdata/Published2Times_keyrotated_invalidNewRootSignature/server/metadata/root.json000066400000000000000000000053371453140004500332610ustar00rootroot00000000000000{ "signatures": [ { "keyid": "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "sig": "da7ef701db2051465c600eae99a3664653d298e6c6ce230b10414b7044ce18b98f17f15f05ecf5678ce776b4bab058db6aa0d920a832bd5d3c167e81d9d1160d" }, { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "d1c36ce282376aeec81a74229e8d0927f87d0044aace710b93c11088e49a6889f6135dc18fafc23ea2caead0a9164bfec2c0f825d6979fb459ec6bf3471cdb0b" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2022-09-10T09:49:07Z", "keys": { "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f758af464295e62a1da4d3267be6d13f4aba9c7d52166d01b6bd5b4559496c9d" }, "scheme": "ed25519" }, "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 2 } }client/testdata/Published2Times_keyrotated_invalidNewRootSignature/server/metadata/snapshot.json000066400000000000000000000006571453140004500341350ustar00rootroot00000000000000{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "7283800e4ad40d7461b03bf6cd8a37218d7a233341cd9fe803398902274b1647213567ee0287c852b33d1c157461cb999ff399e4dc293a07141afd6abea25a03" } ], "signed": { "_type": "snapshot", "expires": "2021-09-17T04:00:47Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published2Times_keyrotated_invalidNewRootSignature/server/metadata/targets.json000066400000000000000000000006711453140004500337430ustar00rootroot00000000000000{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "6202bb047ad7e5a13b514be1b8c128621374a70c17dba57b29ed58691b0badfe4827e47b6de8ee6fa35b731d1be994a492aa60ba872ed7e9a332a1fbb1cf910c" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2021-12-10T11:27:57Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }client/testdata/Published2Times_keyrotated_invalidNewRootSignature/server/metadata/timestamp.json000066400000000000000000000013001453140004500342630ustar00rootroot00000000000000{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "f95d84c5d292a024dffc394b842fef1634d00491762841715083c167eb8be1cb5b34604c13d27a6b27a2b73e0188df5e89b219022038b22c8b6d493fdd13a906" } ], "signed": { "_type": "timestamp", "expires": "2021-09-11T04:00:47Z", "meta": { "snapshot.json": { "hashes": { "sha256": "a9591bd41f7ce1b3ce8a13c4266d7ad5ea91ad51279955d1965259aa7fd32394", "sha512": "191cd66f1e3ebc512b186e3de6f15a1f36cb6a91a7a229f2df67161dd1e75d005a05cf2017512903525160f1c867e6a06b1bacc1ba8d3cdd7521bc9f46a998b3" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published2Times_keyrotated_invalidOldRootSignature/000077500000000000000000000000001453140004500262725ustar00rootroot00000000000000client/testdata/Published2Times_keyrotated_invalidOldRootSignature/client/000077500000000000000000000000001453140004500275505ustar00rootroot00000000000000client/testdata/Published2Times_keyrotated_invalidOldRootSignature/client/metadata/000077500000000000000000000000001453140004500313305ustar00rootroot00000000000000client/testdata/Published2Times_keyrotated_invalidOldRootSignature/client/metadata/current/000077500000000000000000000000001453140004500330125ustar00rootroot000000000000001.root.json000066400000000000000000000042031453140004500347470ustar00rootroot00000000000000client/testdata/Published2Times_keyrotated_invalidOldRootSignature/client/metadata/current{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "e3b2b8cbc279c332ef1f74f940235d7ab98e49cbbf09f78a4445285dc45bab991ecf98e714487f8e43bbd715efcbbff1d5ba91c190ba6a1826f0d6564aee6d05" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:13:38Z", "keys": { "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 1 } }1.snapshot.json000066400000000000000000000006571453140004500356340ustar00rootroot00000000000000client/testdata/Published2Times_keyrotated_invalidOldRootSignature/client/metadata/current{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "03f7436d986edb991e9812b64fa7a93229e2e73ab419e29feab828a311a5aace9b385ed48d44f602af25b8e3070eaf948c89bc59ab75fb8a1231882df1ef4a05" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:13:38Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }1.targets.json000066400000000000000000000006711453140004500354420ustar00rootroot00000000000000client/testdata/Published2Times_keyrotated_invalidOldRootSignature/client/metadata/current{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "c5d60d0018367fda4bbaa0ebb3b0ee0c2cdbac3bdb233369590f3055ad9d4299fde6a8a8824ed3f38129ca6ee3fa67075b6591169aa1819a6238ea1821dbaa03" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:13:38Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }1.timestamp.json000066400000000000000000000013001453140004500357620ustar00rootroot00000000000000client/testdata/Published2Times_keyrotated_invalidOldRootSignature/client/metadata/current{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "c5a41119ccf10925e7c065c10c14d3690b6c4071fa4f2f7e3bc5944e375ee28ccf81721c9f506d788e0cc9b3d335791a4553f3f1e39873903f00a449a3de5004" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:13:38Z", "meta": { "snapshot.json": { "hashes": { "sha256": "700c180d3a3d6e2fa86f4bb072d7f81f39f1cc1dc0df32bb6b5e89a715f743d2", "sha512": "5b21d7bda6e29381e7f095204eddd78137cc14416585c3e9f8915ce21ff1b17b646932b37d7a1147cc0f1d6b7f6ea75d91f6b63d7e229fe73c0b4f1845c40f41" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published2Times_keyrotated_invalidOldRootSignature/client/metadata/current/root.json000066400000000000000000000042031453140004500346670ustar00rootroot00000000000000{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "e3b2b8cbc279c332ef1f74f940235d7ab98e49cbbf09f78a4445285dc45bab991ecf98e714487f8e43bbd715efcbbff1d5ba91c190ba6a1826f0d6564aee6d05" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:13:38Z", "keys": { "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 1 } }snapshot.json000066400000000000000000000006571453140004500354750ustar00rootroot00000000000000client/testdata/Published2Times_keyrotated_invalidOldRootSignature/client/metadata/current{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "03f7436d986edb991e9812b64fa7a93229e2e73ab419e29feab828a311a5aace9b385ed48d44f602af25b8e3070eaf948c89bc59ab75fb8a1231882df1ef4a05" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:13:38Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }targets.json000066400000000000000000000006711453140004500353030ustar00rootroot00000000000000client/testdata/Published2Times_keyrotated_invalidOldRootSignature/client/metadata/current{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "c5d60d0018367fda4bbaa0ebb3b0ee0c2cdbac3bdb233369590f3055ad9d4299fde6a8a8824ed3f38129ca6ee3fa67075b6591169aa1819a6238ea1821dbaa03" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:13:38Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }timestamp.json000066400000000000000000000013001453140004500356230ustar00rootroot00000000000000client/testdata/Published2Times_keyrotated_invalidOldRootSignature/client/metadata/current{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "c5a41119ccf10925e7c065c10c14d3690b6c4071fa4f2f7e3bc5944e375ee28ccf81721c9f506d788e0cc9b3d335791a4553f3f1e39873903f00a449a3de5004" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:13:38Z", "meta": { "snapshot.json": { "hashes": { "sha256": "700c180d3a3d6e2fa86f4bb072d7f81f39f1cc1dc0df32bb6b5e89a715f743d2", "sha512": "5b21d7bda6e29381e7f095204eddd78137cc14416585c3e9f8915ce21ff1b17b646932b37d7a1147cc0f1d6b7f6ea75d91f6b63d7e229fe73c0b4f1845c40f41" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published2Times_keyrotated_invalidOldRootSignature/client/metadata/previous/000077500000000000000000000000001453140004500332045ustar00rootroot000000000000001.root.json000066400000000000000000000042031453140004500351410ustar00rootroot00000000000000client/testdata/Published2Times_keyrotated_invalidOldRootSignature/client/metadata/previous{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "e3b2b8cbc279c332ef1f74f940235d7ab98e49cbbf09f78a4445285dc45bab991ecf98e714487f8e43bbd715efcbbff1d5ba91c190ba6a1826f0d6564aee6d05" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:13:38Z", "keys": { "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 1 } }1.snapshot.json000066400000000000000000000006571453140004500360260ustar00rootroot00000000000000client/testdata/Published2Times_keyrotated_invalidOldRootSignature/client/metadata/previous{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "03f7436d986edb991e9812b64fa7a93229e2e73ab419e29feab828a311a5aace9b385ed48d44f602af25b8e3070eaf948c89bc59ab75fb8a1231882df1ef4a05" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:13:38Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }1.targets.json000066400000000000000000000006711453140004500356340ustar00rootroot00000000000000client/testdata/Published2Times_keyrotated_invalidOldRootSignature/client/metadata/previous{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "c5d60d0018367fda4bbaa0ebb3b0ee0c2cdbac3bdb233369590f3055ad9d4299fde6a8a8824ed3f38129ca6ee3fa67075b6591169aa1819a6238ea1821dbaa03" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:13:38Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }1.timestamp.json000066400000000000000000000013001453140004500361540ustar00rootroot00000000000000client/testdata/Published2Times_keyrotated_invalidOldRootSignature/client/metadata/previous{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "c5a41119ccf10925e7c065c10c14d3690b6c4071fa4f2f7e3bc5944e375ee28ccf81721c9f506d788e0cc9b3d335791a4553f3f1e39873903f00a449a3de5004" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:13:38Z", "meta": { "snapshot.json": { "hashes": { "sha256": "700c180d3a3d6e2fa86f4bb072d7f81f39f1cc1dc0df32bb6b5e89a715f743d2", "sha512": "5b21d7bda6e29381e7f095204eddd78137cc14416585c3e9f8915ce21ff1b17b646932b37d7a1147cc0f1d6b7f6ea75d91f6b63d7e229fe73c0b4f1845c40f41" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }root.json000066400000000000000000000042031453140004500350020ustar00rootroot00000000000000client/testdata/Published2Times_keyrotated_invalidOldRootSignature/client/metadata/previous{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "e3b2b8cbc279c332ef1f74f940235d7ab98e49cbbf09f78a4445285dc45bab991ecf98e714487f8e43bbd715efcbbff1d5ba91c190ba6a1826f0d6564aee6d05" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:13:38Z", "keys": { "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 1 } }snapshot.json000066400000000000000000000006571453140004500356670ustar00rootroot00000000000000client/testdata/Published2Times_keyrotated_invalidOldRootSignature/client/metadata/previous{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "03f7436d986edb991e9812b64fa7a93229e2e73ab419e29feab828a311a5aace9b385ed48d44f602af25b8e3070eaf948c89bc59ab75fb8a1231882df1ef4a05" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:13:38Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }targets.json000066400000000000000000000006711453140004500354750ustar00rootroot00000000000000client/testdata/Published2Times_keyrotated_invalidOldRootSignature/client/metadata/previous{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "c5d60d0018367fda4bbaa0ebb3b0ee0c2cdbac3bdb233369590f3055ad9d4299fde6a8a8824ed3f38129ca6ee3fa67075b6591169aa1819a6238ea1821dbaa03" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:13:38Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }timestamp.json000066400000000000000000000013001453140004500360150ustar00rootroot00000000000000client/testdata/Published2Times_keyrotated_invalidOldRootSignature/client/metadata/previous{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "c5a41119ccf10925e7c065c10c14d3690b6c4071fa4f2f7e3bc5944e375ee28ccf81721c9f506d788e0cc9b3d335791a4553f3f1e39873903f00a449a3de5004" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:13:38Z", "meta": { "snapshot.json": { "hashes": { "sha256": "700c180d3a3d6e2fa86f4bb072d7f81f39f1cc1dc0df32bb6b5e89a715f743d2", "sha512": "5b21d7bda6e29381e7f095204eddd78137cc14416585c3e9f8915ce21ff1b17b646932b37d7a1147cc0f1d6b7f6ea75d91f6b63d7e229fe73c0b4f1845c40f41" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published2Times_keyrotated_invalidOldRootSignature/hash.txt000066400000000000000000000001001453140004500277450ustar00rootroot0000000000000022e59be74a4c783467e0adc5a888fb7222ea10473baad417dbf64bd8fa220e5bclient/testdata/Published2Times_keyrotated_invalidOldRootSignature/server/000077500000000000000000000000001453140004500276005ustar00rootroot00000000000000client/testdata/Published2Times_keyrotated_invalidOldRootSignature/server/metadata.staged/000077500000000000000000000000001453140004500326265ustar00rootroot000000000000001.root.json000066400000000000000000000042031453140004500345630ustar00rootroot00000000000000client/testdata/Published2Times_keyrotated_invalidOldRootSignature/server/metadata.staged{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "e3b2b8cbc279c332ef1f74f940235d7ab98e49cbbf09f78a4445285dc45bab991ecf98e714487f8e43bbd715efcbbff1d5ba91c190ba6a1826f0d6564aee6d05" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:13:38Z", "keys": { "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 1 } }1.snapshot.json000066400000000000000000000006571453140004500354500ustar00rootroot00000000000000client/testdata/Published2Times_keyrotated_invalidOldRootSignature/server/metadata.staged{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "03f7436d986edb991e9812b64fa7a93229e2e73ab419e29feab828a311a5aace9b385ed48d44f602af25b8e3070eaf948c89bc59ab75fb8a1231882df1ef4a05" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:13:38Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }1.targets.json000066400000000000000000000006711453140004500352560ustar00rootroot00000000000000client/testdata/Published2Times_keyrotated_invalidOldRootSignature/server/metadata.staged{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "c5d60d0018367fda4bbaa0ebb3b0ee0c2cdbac3bdb233369590f3055ad9d4299fde6a8a8824ed3f38129ca6ee3fa67075b6591169aa1819a6238ea1821dbaa03" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:13:38Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }1.timestamp.json000066400000000000000000000013001453140004500355760ustar00rootroot00000000000000client/testdata/Published2Times_keyrotated_invalidOldRootSignature/server/metadata.staged{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "c5a41119ccf10925e7c065c10c14d3690b6c4071fa4f2f7e3bc5944e375ee28ccf81721c9f506d788e0cc9b3d335791a4553f3f1e39873903f00a449a3de5004" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:13:38Z", "meta": { "snapshot.json": { "hashes": { "sha256": "700c180d3a3d6e2fa86f4bb072d7f81f39f1cc1dc0df32bb6b5e89a715f743d2", "sha512": "5b21d7bda6e29381e7f095204eddd78137cc14416585c3e9f8915ce21ff1b17b646932b37d7a1147cc0f1d6b7f6ea75d91f6b63d7e229fe73c0b4f1845c40f41" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }2.root.json000066400000000000000000000053371453140004500345750ustar00rootroot00000000000000client/testdata/Published2Times_keyrotated_invalidOldRootSignature/server/metadata.staged{ "signatures": [ { "keyid": "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "sig": "a730b0d31a67712f4bcda4406dd26d515717ce214c7768556a5ebbd9d4f0b8507eb6754421c7d46cabe469ab3db81a774055dfdee88457203bb1148576854e0a" }, { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "4ba4216f3f0fcb14a39ff0690b48200a0b9b4bb3505433a1eaf8269e9eb73c78f36fa8b777fe69b3543b86845739ced2efe13f4d669724f6d6d2111b7dfe5c05" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:13:38Z", "keys": { "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f758af464295e62a1da4d3267be6d13f4aba9c7d52166d01b6bd5b4559496c9d" }, "scheme": "ed25519" }, "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 2 } }client/testdata/Published2Times_keyrotated_invalidOldRootSignature/server/metadata.staged/root.json000066400000000000000000000053371453140004500345140ustar00rootroot00000000000000{ "signatures": [ { "keyid": "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "sig": "a730b0d31a67712f4bcda4406dd26d515717ce214c7768556a5ebbd9d4f0b8507eb6754421c7d46cabe469ab3db81a774055dfdee88457203bb1148576854e0a" }, { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "4ba4216f3f0fcb14a39ff0690b48200a0b9b4bb3505433a1eaf8269e9eb73c78f36fa8b777fe69b3543b86845739ced2efe13f4d669724f6d6d2111b7dfe5c05" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:13:38Z", "keys": { "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f758af464295e62a1da4d3267be6d13f4aba9c7d52166d01b6bd5b4559496c9d" }, "scheme": "ed25519" }, "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 2 } }snapshot.json000066400000000000000000000006571453140004500353110ustar00rootroot00000000000000client/testdata/Published2Times_keyrotated_invalidOldRootSignature/server/metadata.staged{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "03f7436d986edb991e9812b64fa7a93229e2e73ab419e29feab828a311a5aace9b385ed48d44f602af25b8e3070eaf948c89bc59ab75fb8a1231882df1ef4a05" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:13:38Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }targets.json000066400000000000000000000006711453140004500351170ustar00rootroot00000000000000client/testdata/Published2Times_keyrotated_invalidOldRootSignature/server/metadata.staged{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "c5d60d0018367fda4bbaa0ebb3b0ee0c2cdbac3bdb233369590f3055ad9d4299fde6a8a8824ed3f38129ca6ee3fa67075b6591169aa1819a6238ea1821dbaa03" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:13:38Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }timestamp.json000066400000000000000000000013001453140004500354370ustar00rootroot00000000000000client/testdata/Published2Times_keyrotated_invalidOldRootSignature/server/metadata.staged{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "c5a41119ccf10925e7c065c10c14d3690b6c4071fa4f2f7e3bc5944e375ee28ccf81721c9f506d788e0cc9b3d335791a4553f3f1e39873903f00a449a3de5004" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:13:38Z", "meta": { "snapshot.json": { "hashes": { "sha256": "700c180d3a3d6e2fa86f4bb072d7f81f39f1cc1dc0df32bb6b5e89a715f743d2", "sha512": "5b21d7bda6e29381e7f095204eddd78137cc14416585c3e9f8915ce21ff1b17b646932b37d7a1147cc0f1d6b7f6ea75d91f6b63d7e229fe73c0b4f1845c40f41" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published2Times_keyrotated_invalidOldRootSignature/server/metadata/000077500000000000000000000000001453140004500313605ustar00rootroot00000000000000client/testdata/Published2Times_keyrotated_invalidOldRootSignature/server/metadata/1.root.json000066400000000000000000000042031453140004500333740ustar00rootroot00000000000000{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "e3b2b8cbc279c332ef1f74f940235d7ab98e49cbbf09f78a4445285dc45bab991ecf98e714487f8e43bbd715efcbbff1d5ba91c190ba6a1826f0d6564aee6d05" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:13:38Z", "keys": { "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published2Times_keyrotated_invalidOldRootSignature/server/metadata/1.snapshot.json000066400000000000000000000006571453140004500342610ustar00rootroot00000000000000{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "03f7436d986edb991e9812b64fa7a93229e2e73ab419e29feab828a311a5aace9b385ed48d44f602af25b8e3070eaf948c89bc59ab75fb8a1231882df1ef4a05" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:13:38Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published2Times_keyrotated_invalidOldRootSignature/server/metadata/1.targets.json000066400000000000000000000006711453140004500340670ustar00rootroot00000000000000{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "c5d60d0018367fda4bbaa0ebb3b0ee0c2cdbac3bdb233369590f3055ad9d4299fde6a8a8824ed3f38129ca6ee3fa67075b6591169aa1819a6238ea1821dbaa03" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:13:38Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }client/testdata/Published2Times_keyrotated_invalidOldRootSignature/server/metadata/1.timestamp.json000066400000000000000000000013001453140004500344070ustar00rootroot00000000000000{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "c5a41119ccf10925e7c065c10c14d3690b6c4071fa4f2f7e3bc5944e375ee28ccf81721c9f506d788e0cc9b3d335791a4553f3f1e39873903f00a449a3de5004" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:13:38Z", "meta": { "snapshot.json": { "hashes": { "sha256": "700c180d3a3d6e2fa86f4bb072d7f81f39f1cc1dc0df32bb6b5e89a715f743d2", "sha512": "5b21d7bda6e29381e7f095204eddd78137cc14416585c3e9f8915ce21ff1b17b646932b37d7a1147cc0f1d6b7f6ea75d91f6b63d7e229fe73c0b4f1845c40f41" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published2Times_keyrotated_invalidOldRootSignature/server/metadata/2.root.json000066400000000000000000000051451453140004500334030ustar00rootroot00000000000000{ "signatures": [ { "keyid": "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "sig": "000000" }, { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "4ba4216f3f0fcb14a39ff0690b48200a0b9b4bb3505433a1eaf8269e9eb73c78f36fa8b777fe69b3543b86845739ced2efe13f4d669724f6d6d2111b7dfe5c05" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:13:38Z", "keys": { "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f758af464295e62a1da4d3267be6d13f4aba9c7d52166d01b6bd5b4559496c9d" }, "scheme": "ed25519" }, "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 2 } }client/testdata/Published2Times_keyrotated_invalidOldRootSignature/server/metadata/root.json000066400000000000000000000053371453140004500332460ustar00rootroot00000000000000{ "signatures": [ { "keyid": "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "sig": "a730b0d31a67712f4bcda4406dd26d515717ce214c7768556a5ebbd9d4f0b8507eb6754421c7d46cabe469ab3db81a774055dfdee88457203bb1148576854e0a" }, { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "4ba4216f3f0fcb14a39ff0690b48200a0b9b4bb3505433a1eaf8269e9eb73c78f36fa8b777fe69b3543b86845739ced2efe13f4d669724f6d6d2111b7dfe5c05" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:13:38Z", "keys": { "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f758af464295e62a1da4d3267be6d13f4aba9c7d52166d01b6bd5b4559496c9d" }, "scheme": "ed25519" }, "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 2 } }client/testdata/Published2Times_keyrotated_invalidOldRootSignature/server/metadata/snapshot.json000066400000000000000000000006571453140004500341220ustar00rootroot00000000000000{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "03f7436d986edb991e9812b64fa7a93229e2e73ab419e29feab828a311a5aace9b385ed48d44f602af25b8e3070eaf948c89bc59ab75fb8a1231882df1ef4a05" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:13:38Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published2Times_keyrotated_invalidOldRootSignature/server/metadata/targets.json000066400000000000000000000006711453140004500337300ustar00rootroot00000000000000{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "c5d60d0018367fda4bbaa0ebb3b0ee0c2cdbac3bdb233369590f3055ad9d4299fde6a8a8824ed3f38129ca6ee3fa67075b6591169aa1819a6238ea1821dbaa03" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:13:38Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }client/testdata/Published2Times_keyrotated_invalidOldRootSignature/server/metadata/timestamp.json000066400000000000000000000013001453140004500342500ustar00rootroot00000000000000{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "c5a41119ccf10925e7c065c10c14d3690b6c4071fa4f2f7e3bc5944e375ee28ccf81721c9f506d788e0cc9b3d335791a4553f3f1e39873903f00a449a3de5004" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:13:38Z", "meta": { "snapshot.json": { "hashes": { "sha256": "700c180d3a3d6e2fa86f4bb072d7f81f39f1cc1dc0df32bb6b5e89a715f743d2", "sha512": "5b21d7bda6e29381e7f095204eddd78137cc14416585c3e9f8915ce21ff1b17b646932b37d7a1147cc0f1d6b7f6ea75d91f6b63d7e229fe73c0b4f1845c40f41" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published2Times_roottoolarge/000077500000000000000000000000001453140004500217445ustar00rootroot00000000000000client/testdata/Published2Times_roottoolarge/client/000077500000000000000000000000001453140004500232225ustar00rootroot00000000000000client/testdata/Published2Times_roottoolarge/client/metadata/000077500000000000000000000000001453140004500250025ustar00rootroot00000000000000client/testdata/Published2Times_roottoolarge/client/metadata/current/000077500000000000000000000000001453140004500264645ustar00rootroot00000000000000client/testdata/Published2Times_roottoolarge/client/metadata/current/1.root.json000066400000000000000000000042031453140004500305000ustar00rootroot00000000000000{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "481a1bd10fedbe33e88e5f586a8726f558a5ec426bf65d2ba1c449fd1f69148da6af40f1ae18a5be63539dfbf076019db8b28f3f644f7fd4f003b7d06a4c2e09" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:13:37Z", "keys": { "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published2Times_roottoolarge/client/metadata/current/1.snapshot.json000066400000000000000000000006571453140004500313650ustar00rootroot00000000000000{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "ecf4d79a88873efb223361e550b8fc35813ad7bf31d9769908d9495cfb930e03db889dc7419897031cadf39437c9f49b085f384fe1c18be3961704062365db0c" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:13:37Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published2Times_roottoolarge/client/metadata/current/1.targets.json000066400000000000000000000006711453140004500311730ustar00rootroot00000000000000{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "f2cee9e31bda3f88b25b0153bb48a6cb21237e4c41a34bbae95f152b56975085bc04c4978eed6be76a3ead23ff76a1259ff07e7b45b04fb51865c9601713c905" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:13:37Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }client/testdata/Published2Times_roottoolarge/client/metadata/current/1.timestamp.json000066400000000000000000000013001453140004500315130ustar00rootroot00000000000000{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "35d1087c4874221bc772c8276bd77415d9366833aad4efc3926a8eda1de053843d2c114ac7448f08e3cfd802857c2ab2569d8be186b3cc36e65e458905f0e10e" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:13:37Z", "meta": { "snapshot.json": { "hashes": { "sha256": "d62f650c8097fd4de9e3c8874ef15f7e10fdcc4c32f7a1818e972e8984b8da8a", "sha512": "d9d0c38df27bc2ccc9523cb8d27623cb40b264053233e5e3261d83e2921c790b21accf9d427e36aa4c1939ddbccaaa5e006267f1cdd451606c514135d178dca5" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published2Times_roottoolarge/client/metadata/current/root.json000066400000000000000000000042031453140004500303410ustar00rootroot00000000000000{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "481a1bd10fedbe33e88e5f586a8726f558a5ec426bf65d2ba1c449fd1f69148da6af40f1ae18a5be63539dfbf076019db8b28f3f644f7fd4f003b7d06a4c2e09" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:13:37Z", "keys": { "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published2Times_roottoolarge/client/metadata/current/snapshot.json000066400000000000000000000006571453140004500312260ustar00rootroot00000000000000{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "ecf4d79a88873efb223361e550b8fc35813ad7bf31d9769908d9495cfb930e03db889dc7419897031cadf39437c9f49b085f384fe1c18be3961704062365db0c" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:13:37Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published2Times_roottoolarge/client/metadata/current/targets.json000066400000000000000000000006711453140004500310340ustar00rootroot00000000000000{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "f2cee9e31bda3f88b25b0153bb48a6cb21237e4c41a34bbae95f152b56975085bc04c4978eed6be76a3ead23ff76a1259ff07e7b45b04fb51865c9601713c905" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:13:37Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }client/testdata/Published2Times_roottoolarge/client/metadata/current/timestamp.json000066400000000000000000000013001453140004500313540ustar00rootroot00000000000000{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "35d1087c4874221bc772c8276bd77415d9366833aad4efc3926a8eda1de053843d2c114ac7448f08e3cfd802857c2ab2569d8be186b3cc36e65e458905f0e10e" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:13:37Z", "meta": { "snapshot.json": { "hashes": { "sha256": "d62f650c8097fd4de9e3c8874ef15f7e10fdcc4c32f7a1818e972e8984b8da8a", "sha512": "d9d0c38df27bc2ccc9523cb8d27623cb40b264053233e5e3261d83e2921c790b21accf9d427e36aa4c1939ddbccaaa5e006267f1cdd451606c514135d178dca5" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published2Times_roottoolarge/client/metadata/previous/000077500000000000000000000000001453140004500266565ustar00rootroot00000000000000client/testdata/Published2Times_roottoolarge/client/metadata/previous/1.root.json000066400000000000000000000042031453140004500306720ustar00rootroot00000000000000{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "481a1bd10fedbe33e88e5f586a8726f558a5ec426bf65d2ba1c449fd1f69148da6af40f1ae18a5be63539dfbf076019db8b28f3f644f7fd4f003b7d06a4c2e09" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:13:37Z", "keys": { "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published2Times_roottoolarge/client/metadata/previous/1.snapshot.json000066400000000000000000000006571453140004500315570ustar00rootroot00000000000000{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "ecf4d79a88873efb223361e550b8fc35813ad7bf31d9769908d9495cfb930e03db889dc7419897031cadf39437c9f49b085f384fe1c18be3961704062365db0c" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:13:37Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published2Times_roottoolarge/client/metadata/previous/1.targets.json000066400000000000000000000006711453140004500313650ustar00rootroot00000000000000{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "f2cee9e31bda3f88b25b0153bb48a6cb21237e4c41a34bbae95f152b56975085bc04c4978eed6be76a3ead23ff76a1259ff07e7b45b04fb51865c9601713c905" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:13:37Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }client/testdata/Published2Times_roottoolarge/client/metadata/previous/1.timestamp.json000066400000000000000000000013001453140004500317050ustar00rootroot00000000000000{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "35d1087c4874221bc772c8276bd77415d9366833aad4efc3926a8eda1de053843d2c114ac7448f08e3cfd802857c2ab2569d8be186b3cc36e65e458905f0e10e" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:13:37Z", "meta": { "snapshot.json": { "hashes": { "sha256": "d62f650c8097fd4de9e3c8874ef15f7e10fdcc4c32f7a1818e972e8984b8da8a", "sha512": "d9d0c38df27bc2ccc9523cb8d27623cb40b264053233e5e3261d83e2921c790b21accf9d427e36aa4c1939ddbccaaa5e006267f1cdd451606c514135d178dca5" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published2Times_roottoolarge/client/metadata/previous/root.json000066400000000000000000000042031453140004500305330ustar00rootroot00000000000000{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "481a1bd10fedbe33e88e5f586a8726f558a5ec426bf65d2ba1c449fd1f69148da6af40f1ae18a5be63539dfbf076019db8b28f3f644f7fd4f003b7d06a4c2e09" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:13:37Z", "keys": { "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published2Times_roottoolarge/client/metadata/previous/snapshot.json000066400000000000000000000006571453140004500314200ustar00rootroot00000000000000{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "ecf4d79a88873efb223361e550b8fc35813ad7bf31d9769908d9495cfb930e03db889dc7419897031cadf39437c9f49b085f384fe1c18be3961704062365db0c" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:13:37Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published2Times_roottoolarge/client/metadata/previous/targets.json000066400000000000000000000006711453140004500312260ustar00rootroot00000000000000{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "f2cee9e31bda3f88b25b0153bb48a6cb21237e4c41a34bbae95f152b56975085bc04c4978eed6be76a3ead23ff76a1259ff07e7b45b04fb51865c9601713c905" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:13:37Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }client/testdata/Published2Times_roottoolarge/client/metadata/previous/timestamp.json000066400000000000000000000013001453140004500315460ustar00rootroot00000000000000{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "35d1087c4874221bc772c8276bd77415d9366833aad4efc3926a8eda1de053843d2c114ac7448f08e3cfd802857c2ab2569d8be186b3cc36e65e458905f0e10e" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:13:37Z", "meta": { "snapshot.json": { "hashes": { "sha256": "d62f650c8097fd4de9e3c8874ef15f7e10fdcc4c32f7a1818e972e8984b8da8a", "sha512": "d9d0c38df27bc2ccc9523cb8d27623cb40b264053233e5e3261d83e2921c790b21accf9d427e36aa4c1939ddbccaaa5e006267f1cdd451606c514135d178dca5" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published2Times_roottoolarge/hash.txt000066400000000000000000000001001453140004500234170ustar00rootroot0000000000000046183e42ee757c6704e7a122ab225ca633157738809243e8bc3cd92c67699dabclient/testdata/Published2Times_roottoolarge/server/000077500000000000000000000000001453140004500232525ustar00rootroot00000000000000client/testdata/Published2Times_roottoolarge/server/metadata.staged/000077500000000000000000000000001453140004500263005ustar00rootroot00000000000000client/testdata/Published2Times_roottoolarge/server/metadata.staged/1.root.json000066400000000000000000000042031453140004500303140ustar00rootroot00000000000000{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "481a1bd10fedbe33e88e5f586a8726f558a5ec426bf65d2ba1c449fd1f69148da6af40f1ae18a5be63539dfbf076019db8b28f3f644f7fd4f003b7d06a4c2e09" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:13:37Z", "keys": { "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published2Times_roottoolarge/server/metadata.staged/1.snapshot.json000066400000000000000000000006571453140004500312010ustar00rootroot00000000000000{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "ecf4d79a88873efb223361e550b8fc35813ad7bf31d9769908d9495cfb930e03db889dc7419897031cadf39437c9f49b085f384fe1c18be3961704062365db0c" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:13:37Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published2Times_roottoolarge/server/metadata.staged/1.targets.json000066400000000000000000000006711453140004500310070ustar00rootroot00000000000000{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "f2cee9e31bda3f88b25b0153bb48a6cb21237e4c41a34bbae95f152b56975085bc04c4978eed6be76a3ead23ff76a1259ff07e7b45b04fb51865c9601713c905" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:13:37Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }client/testdata/Published2Times_roottoolarge/server/metadata.staged/1.timestamp.json000066400000000000000000000013001453140004500313270ustar00rootroot00000000000000{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "35d1087c4874221bc772c8276bd77415d9366833aad4efc3926a8eda1de053843d2c114ac7448f08e3cfd802857c2ab2569d8be186b3cc36e65e458905f0e10e" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:13:37Z", "meta": { "snapshot.json": { "hashes": { "sha256": "d62f650c8097fd4de9e3c8874ef15f7e10fdcc4c32f7a1818e972e8984b8da8a", "sha512": "d9d0c38df27bc2ccc9523cb8d27623cb40b264053233e5e3261d83e2921c790b21accf9d427e36aa4c1939ddbccaaa5e006267f1cdd451606c514135d178dca5" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published2Times_roottoolarge/server/metadata.staged/2.root.json000066400000000000000000000053371453140004500303260ustar00rootroot00000000000000{ "signatures": [ { "keyid": "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "sig": "122b322d6f212fcc22ec9062e6948baf694ec4ecf366e4a3cd5cf4c738aa39706b3420aeacd6d8e0e54f0af0168644e905696b397974dadfd3d2a578be06fd08" }, { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "c5e5a542c368d32a8bb1884ffcc850f8902c96537b2b827be3608c44dbdd24ff0cd3b0c326e03869474091e21073f87a57237f2909300a2c43a41ca90c22020c" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:13:37Z", "keys": { "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f758af464295e62a1da4d3267be6d13f4aba9c7d52166d01b6bd5b4559496c9d" }, "scheme": "ed25519" }, "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 2 } }client/testdata/Published2Times_roottoolarge/server/metadata.staged/root.json000066400000000000000000000053371453140004500301660ustar00rootroot00000000000000{ "signatures": [ { "keyid": "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "sig": "122b322d6f212fcc22ec9062e6948baf694ec4ecf366e4a3cd5cf4c738aa39706b3420aeacd6d8e0e54f0af0168644e905696b397974dadfd3d2a578be06fd08" }, { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "c5e5a542c368d32a8bb1884ffcc850f8902c96537b2b827be3608c44dbdd24ff0cd3b0c326e03869474091e21073f87a57237f2909300a2c43a41ca90c22020c" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:13:37Z", "keys": { "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f758af464295e62a1da4d3267be6d13f4aba9c7d52166d01b6bd5b4559496c9d" }, "scheme": "ed25519" }, "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 2 } }client/testdata/Published2Times_roottoolarge/server/metadata.staged/snapshot.json000066400000000000000000000006571453140004500310420ustar00rootroot00000000000000{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "ecf4d79a88873efb223361e550b8fc35813ad7bf31d9769908d9495cfb930e03db889dc7419897031cadf39437c9f49b085f384fe1c18be3961704062365db0c" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:13:37Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published2Times_roottoolarge/server/metadata.staged/targets.json000066400000000000000000000006711453140004500306500ustar00rootroot00000000000000{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "f2cee9e31bda3f88b25b0153bb48a6cb21237e4c41a34bbae95f152b56975085bc04c4978eed6be76a3ead23ff76a1259ff07e7b45b04fb51865c9601713c905" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:13:37Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }client/testdata/Published2Times_roottoolarge/server/metadata.staged/timestamp.json000066400000000000000000000013001453140004500311700ustar00rootroot00000000000000{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "35d1087c4874221bc772c8276bd77415d9366833aad4efc3926a8eda1de053843d2c114ac7448f08e3cfd802857c2ab2569d8be186b3cc36e65e458905f0e10e" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:13:37Z", "meta": { "snapshot.json": { "hashes": { "sha256": "d62f650c8097fd4de9e3c8874ef15f7e10fdcc4c32f7a1818e972e8984b8da8a", "sha512": "d9d0c38df27bc2ccc9523cb8d27623cb40b264053233e5e3261d83e2921c790b21accf9d427e36aa4c1939ddbccaaa5e006267f1cdd451606c514135d178dca5" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published2Times_roottoolarge/server/metadata/000077500000000000000000000000001453140004500250325ustar00rootroot00000000000000client/testdata/Published2Times_roottoolarge/server/metadata/1.root.json000066400000000000000000000042031453140004500270460ustar00rootroot00000000000000{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "481a1bd10fedbe33e88e5f586a8726f558a5ec426bf65d2ba1c449fd1f69148da6af40f1ae18a5be63539dfbf076019db8b28f3f644f7fd4f003b7d06a4c2e09" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:13:37Z", "keys": { "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published2Times_roottoolarge/server/metadata/1.snapshot.json000066400000000000000000000006571453140004500277330ustar00rootroot00000000000000{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "ecf4d79a88873efb223361e550b8fc35813ad7bf31d9769908d9495cfb930e03db889dc7419897031cadf39437c9f49b085f384fe1c18be3961704062365db0c" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:13:37Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published2Times_roottoolarge/server/metadata/1.targets.json000066400000000000000000000006711453140004500275410ustar00rootroot00000000000000{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "f2cee9e31bda3f88b25b0153bb48a6cb21237e4c41a34bbae95f152b56975085bc04c4978eed6be76a3ead23ff76a1259ff07e7b45b04fb51865c9601713c905" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:13:37Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }client/testdata/Published2Times_roottoolarge/server/metadata/1.timestamp.json000066400000000000000000000013001453140004500300610ustar00rootroot00000000000000{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "35d1087c4874221bc772c8276bd77415d9366833aad4efc3926a8eda1de053843d2c114ac7448f08e3cfd802857c2ab2569d8be186b3cc36e65e458905f0e10e" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:13:37Z", "meta": { "snapshot.json": { "hashes": { "sha256": "d62f650c8097fd4de9e3c8874ef15f7e10fdcc4c32f7a1818e972e8984b8da8a", "sha512": "d9d0c38df27bc2ccc9523cb8d27623cb40b264053233e5e3261d83e2921c790b21accf9d427e36aa4c1939ddbccaaa5e006267f1cdd451606c514135d178dca5" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published2Times_roottoolarge/server/metadata/2.root.json000066400000000000000000017500011453140004500270540ustar00rootroot00000000000000client/testdata/Published2Times_roottoolarge/server/metadata/root.json000066400000000000000000000053371453140004500267200ustar00rootroot00000000000000{ "signatures": [ { "keyid": "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "sig": "122b322d6f212fcc22ec9062e6948baf694ec4ecf366e4a3cd5cf4c738aa39706b3420aeacd6d8e0e54f0af0168644e905696b397974dadfd3d2a578be06fd08" }, { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "c5e5a542c368d32a8bb1884ffcc850f8902c96537b2b827be3608c44dbdd24ff0cd3b0c326e03869474091e21073f87a57237f2909300a2c43a41ca90c22020c" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:13:37Z", "keys": { "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f758af464295e62a1da4d3267be6d13f4aba9c7d52166d01b6bd5b4559496c9d" }, "scheme": "ed25519" }, "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 2 } }client/testdata/Published2Times_roottoolarge/server/metadata/snapshot.json000066400000000000000000000006571453140004500275740ustar00rootroot00000000000000{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "ecf4d79a88873efb223361e550b8fc35813ad7bf31d9769908d9495cfb930e03db889dc7419897031cadf39437c9f49b085f384fe1c18be3961704062365db0c" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:13:37Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published2Times_roottoolarge/server/metadata/targets.json000066400000000000000000000006711453140004500274020ustar00rootroot00000000000000{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "f2cee9e31bda3f88b25b0153bb48a6cb21237e4c41a34bbae95f152b56975085bc04c4978eed6be76a3ead23ff76a1259ff07e7b45b04fb51865c9601713c905" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:13:37Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }client/testdata/Published2Times_roottoolarge/server/metadata/timestamp.json000066400000000000000000000013001453140004500277220ustar00rootroot00000000000000{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "35d1087c4874221bc772c8276bd77415d9366833aad4efc3926a8eda1de053843d2c114ac7448f08e3cfd802857c2ab2569d8be186b3cc36e65e458905f0e10e" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:13:37Z", "meta": { "snapshot.json": { "hashes": { "sha256": "d62f650c8097fd4de9e3c8874ef15f7e10fdcc4c32f7a1818e972e8984b8da8a", "sha512": "d9d0c38df27bc2ccc9523cb8d27623cb40b264053233e5e3261d83e2921c790b21accf9d427e36aa4c1939ddbccaaa5e006267f1cdd451606c514135d178dca5" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published2Times_snapshot_keyrotated/000077500000000000000000000000001453140004500233165ustar00rootroot00000000000000client/testdata/Published2Times_snapshot_keyrotated/client/000077500000000000000000000000001453140004500245745ustar00rootroot00000000000000client/testdata/Published2Times_snapshot_keyrotated/client/metadata/000077500000000000000000000000001453140004500263545ustar00rootroot00000000000000client/testdata/Published2Times_snapshot_keyrotated/client/metadata/current/000077500000000000000000000000001453140004500300365ustar00rootroot00000000000000client/testdata/Published2Times_snapshot_keyrotated/client/metadata/current/1.root.json000066400000000000000000000042031453140004500320520ustar00rootroot00000000000000{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "7e2a5844a166b2873c86ee92fc2c07319424ddb66a0372797633f9dd5bcb869409eb00384095fd3e8f4fe5ca451da5ef6b3b864fc8c1b3bd1946743f30411205" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:13:39Z", "keys": { "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published2Times_snapshot_keyrotated/client/metadata/current/1.snapshot.json000066400000000000000000000006571453140004500327370ustar00rootroot00000000000000{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "98ca9f817a41745409386dd26a433907349df18d1153b660e8d3cfa01d7dabc35aa06947e9cfac1d93edd7d9276246432fdf647a3357c2185d250d9ddc2be90f" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:13:39Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published2Times_snapshot_keyrotated/client/metadata/current/1.targets.json000066400000000000000000000006711453140004500325450ustar00rootroot00000000000000{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "70a93be0db6e7180088029c94283f47e60bfae3001982303e4060d952fe8e2db92e861f66bfcf32a4eb10e5a00900eaa719858945a314259c29b14cf39e73f03" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:13:39Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }client/testdata/Published2Times_snapshot_keyrotated/client/metadata/current/1.timestamp.json000066400000000000000000000013001453140004500330650ustar00rootroot00000000000000{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "05e65cc7a4ebf2dce8472f64c2a69dcee977d5bf8dddc36f4547882782e0d1161a5a03102155b29c41cff10b2f31ff947f6c604d07da1a9ff7eb423477a39c08" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:13:39Z", "meta": { "snapshot.json": { "hashes": { "sha256": "1ce608f9525f5581f719ed696f6d445ec61ce9a0f97b0c3250bcebb687eb70fe", "sha512": "22c79c8cb721c21e28cf4ae4e0c31bece6d4f55ed9234f4b538dbbff0c99eb733b2d6e73eaf66e3d9ed955c57a054470d8bfa740487aff0c470a463b7bd967f3" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published2Times_snapshot_keyrotated/client/metadata/current/root.json000066400000000000000000000042031453140004500317130ustar00rootroot00000000000000{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "7e2a5844a166b2873c86ee92fc2c07319424ddb66a0372797633f9dd5bcb869409eb00384095fd3e8f4fe5ca451da5ef6b3b864fc8c1b3bd1946743f30411205" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:13:39Z", "keys": { "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published2Times_snapshot_keyrotated/client/metadata/current/snapshot.json000066400000000000000000000006571453140004500326000ustar00rootroot00000000000000{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "98ca9f817a41745409386dd26a433907349df18d1153b660e8d3cfa01d7dabc35aa06947e9cfac1d93edd7d9276246432fdf647a3357c2185d250d9ddc2be90f" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:13:39Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published2Times_snapshot_keyrotated/client/metadata/current/targets.json000066400000000000000000000006711453140004500324060ustar00rootroot00000000000000{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "70a93be0db6e7180088029c94283f47e60bfae3001982303e4060d952fe8e2db92e861f66bfcf32a4eb10e5a00900eaa719858945a314259c29b14cf39e73f03" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:13:39Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }client/testdata/Published2Times_snapshot_keyrotated/client/metadata/current/timestamp.json000066400000000000000000000013001453140004500327260ustar00rootroot00000000000000{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "05e65cc7a4ebf2dce8472f64c2a69dcee977d5bf8dddc36f4547882782e0d1161a5a03102155b29c41cff10b2f31ff947f6c604d07da1a9ff7eb423477a39c08" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:13:39Z", "meta": { "snapshot.json": { "hashes": { "sha256": "1ce608f9525f5581f719ed696f6d445ec61ce9a0f97b0c3250bcebb687eb70fe", "sha512": "22c79c8cb721c21e28cf4ae4e0c31bece6d4f55ed9234f4b538dbbff0c99eb733b2d6e73eaf66e3d9ed955c57a054470d8bfa740487aff0c470a463b7bd967f3" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published2Times_snapshot_keyrotated/client/metadata/previous/000077500000000000000000000000001453140004500302305ustar00rootroot00000000000000client/testdata/Published2Times_snapshot_keyrotated/client/metadata/previous/1.root.json000066400000000000000000000042031453140004500322440ustar00rootroot00000000000000{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "7e2a5844a166b2873c86ee92fc2c07319424ddb66a0372797633f9dd5bcb869409eb00384095fd3e8f4fe5ca451da5ef6b3b864fc8c1b3bd1946743f30411205" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:13:39Z", "keys": { "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published2Times_snapshot_keyrotated/client/metadata/previous/1.snapshot.json000066400000000000000000000006571453140004500331310ustar00rootroot00000000000000{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "98ca9f817a41745409386dd26a433907349df18d1153b660e8d3cfa01d7dabc35aa06947e9cfac1d93edd7d9276246432fdf647a3357c2185d250d9ddc2be90f" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:13:39Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published2Times_snapshot_keyrotated/client/metadata/previous/1.targets.json000066400000000000000000000006711453140004500327370ustar00rootroot00000000000000{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "70a93be0db6e7180088029c94283f47e60bfae3001982303e4060d952fe8e2db92e861f66bfcf32a4eb10e5a00900eaa719858945a314259c29b14cf39e73f03" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:13:39Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }client/testdata/Published2Times_snapshot_keyrotated/client/metadata/previous/1.timestamp.json000066400000000000000000000013001453140004500332570ustar00rootroot00000000000000{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "05e65cc7a4ebf2dce8472f64c2a69dcee977d5bf8dddc36f4547882782e0d1161a5a03102155b29c41cff10b2f31ff947f6c604d07da1a9ff7eb423477a39c08" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:13:39Z", "meta": { "snapshot.json": { "hashes": { "sha256": "1ce608f9525f5581f719ed696f6d445ec61ce9a0f97b0c3250bcebb687eb70fe", "sha512": "22c79c8cb721c21e28cf4ae4e0c31bece6d4f55ed9234f4b538dbbff0c99eb733b2d6e73eaf66e3d9ed955c57a054470d8bfa740487aff0c470a463b7bd967f3" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published2Times_snapshot_keyrotated/client/metadata/previous/root.json000066400000000000000000000042031453140004500321050ustar00rootroot00000000000000{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "7e2a5844a166b2873c86ee92fc2c07319424ddb66a0372797633f9dd5bcb869409eb00384095fd3e8f4fe5ca451da5ef6b3b864fc8c1b3bd1946743f30411205" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:13:39Z", "keys": { "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published2Times_snapshot_keyrotated/client/metadata/previous/snapshot.json000066400000000000000000000006571453140004500327720ustar00rootroot00000000000000{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "98ca9f817a41745409386dd26a433907349df18d1153b660e8d3cfa01d7dabc35aa06947e9cfac1d93edd7d9276246432fdf647a3357c2185d250d9ddc2be90f" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:13:39Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published2Times_snapshot_keyrotated/client/metadata/previous/targets.json000066400000000000000000000006711453140004500326000ustar00rootroot00000000000000{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "70a93be0db6e7180088029c94283f47e60bfae3001982303e4060d952fe8e2db92e861f66bfcf32a4eb10e5a00900eaa719858945a314259c29b14cf39e73f03" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:13:39Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }client/testdata/Published2Times_snapshot_keyrotated/client/metadata/previous/timestamp.json000066400000000000000000000013001453140004500331200ustar00rootroot00000000000000{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "05e65cc7a4ebf2dce8472f64c2a69dcee977d5bf8dddc36f4547882782e0d1161a5a03102155b29c41cff10b2f31ff947f6c604d07da1a9ff7eb423477a39c08" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:13:39Z", "meta": { "snapshot.json": { "hashes": { "sha256": "1ce608f9525f5581f719ed696f6d445ec61ce9a0f97b0c3250bcebb687eb70fe", "sha512": "22c79c8cb721c21e28cf4ae4e0c31bece6d4f55ed9234f4b538dbbff0c99eb733b2d6e73eaf66e3d9ed955c57a054470d8bfa740487aff0c470a463b7bd967f3" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published2Times_snapshot_keyrotated/hash.txt000066400000000000000000000001001453140004500247710ustar00rootroot00000000000000c8b65c989faaae06e6962fd58f0d2d84ae5b3786caa60b80514e23877a0ec1a4client/testdata/Published2Times_snapshot_keyrotated/server/000077500000000000000000000000001453140004500246245ustar00rootroot00000000000000client/testdata/Published2Times_snapshot_keyrotated/server/metadata.staged/000077500000000000000000000000001453140004500276525ustar00rootroot00000000000000client/testdata/Published2Times_snapshot_keyrotated/server/metadata.staged/1.root.json000066400000000000000000000042031453140004500316660ustar00rootroot00000000000000{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "7e2a5844a166b2873c86ee92fc2c07319424ddb66a0372797633f9dd5bcb869409eb00384095fd3e8f4fe5ca451da5ef6b3b864fc8c1b3bd1946743f30411205" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:13:39Z", "keys": { "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published2Times_snapshot_keyrotated/server/metadata.staged/1.snapshot.json000066400000000000000000000006571453140004500325530ustar00rootroot00000000000000{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "98ca9f817a41745409386dd26a433907349df18d1153b660e8d3cfa01d7dabc35aa06947e9cfac1d93edd7d9276246432fdf647a3357c2185d250d9ddc2be90f" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:13:39Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published2Times_snapshot_keyrotated/server/metadata.staged/1.targets.json000066400000000000000000000006711453140004500323610ustar00rootroot00000000000000{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "70a93be0db6e7180088029c94283f47e60bfae3001982303e4060d952fe8e2db92e861f66bfcf32a4eb10e5a00900eaa719858945a314259c29b14cf39e73f03" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:13:39Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }client/testdata/Published2Times_snapshot_keyrotated/server/metadata.staged/1.timestamp.json000066400000000000000000000013001453140004500327010ustar00rootroot00000000000000{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "05e65cc7a4ebf2dce8472f64c2a69dcee977d5bf8dddc36f4547882782e0d1161a5a03102155b29c41cff10b2f31ff947f6c604d07da1a9ff7eb423477a39c08" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:13:39Z", "meta": { "snapshot.json": { "hashes": { "sha256": "1ce608f9525f5581f719ed696f6d445ec61ce9a0f97b0c3250bcebb687eb70fe", "sha512": "22c79c8cb721c21e28cf4ae4e0c31bece6d4f55ed9234f4b538dbbff0c99eb733b2d6e73eaf66e3d9ed955c57a054470d8bfa740487aff0c470a463b7bd967f3" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published2Times_snapshot_keyrotated/server/metadata.staged/2.root.json000066400000000000000000000047711453140004500317010ustar00rootroot00000000000000{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "b5ee398bcfdeffec3bc84420a9f21282543e7a45cbd8ffa896b0e3d99d614551fa72e387fd809306ddc1454e16fe8edb01b5808d16f186b664a538353bd38802" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:13:39Z", "keys": { "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f758af464295e62a1da4d3267be6d13f4aba9c7d52166d01b6bd5b4559496c9d" }, "scheme": "ed25519" }, "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 2 } }client/testdata/Published2Times_snapshot_keyrotated/server/metadata.staged/2.snapshot.json000066400000000000000000000012251453140004500325440ustar00rootroot00000000000000{ "signatures": [ { "keyid": "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "sig": "ba835d8c4556c0d490e81a0aae287dd7359ffa2378160161979756b8c7e04d492eb370c50447c746064e38b318323059168fa319de2399da8387aeb7f951f401" }, { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "d9617e7899227aa417a59db0ecd64775fc651cbb3c4196fb45c36885d8bce0af9e19f2e9b0ce1e2f089b72a8bf7d120fdafe649c1ce79b1e0c95845b541c6805" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:13:39Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 2 } }client/testdata/Published2Times_snapshot_keyrotated/server/metadata.staged/2.timestamp.json000066400000000000000000000013001453140004500327020ustar00rootroot00000000000000{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "57e25d5c42c25aeda1cfa5e6144567661867d15ef35746fedb685ea077e2dc803091ab26b3e50dfeedf405454f38159e453541a518c80a9c10923eff240fee07" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:13:39Z", "meta": { "snapshot.json": { "hashes": { "sha256": "70122787e9fa61099a44d5bc04b4b52c95a6eb553ba7e60b7b778b5d1539913c", "sha512": "2290f310345240bcba820722f09d70a0a463032c8c807122e30385a7e6a9fbd3ff044dce5d0994d182853ba1651057920ebbf0447c470d85370fb57afef9034e" }, "length": 661, "version": 2 } }, "spec_version": "1.0.0", "version": 2 } }client/testdata/Published2Times_snapshot_keyrotated/server/metadata.staged/root.json000066400000000000000000000047711453140004500315410ustar00rootroot00000000000000{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "b5ee398bcfdeffec3bc84420a9f21282543e7a45cbd8ffa896b0e3d99d614551fa72e387fd809306ddc1454e16fe8edb01b5808d16f186b664a538353bd38802" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:13:39Z", "keys": { "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f758af464295e62a1da4d3267be6d13f4aba9c7d52166d01b6bd5b4559496c9d" }, "scheme": "ed25519" }, "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 2 } }client/testdata/Published2Times_snapshot_keyrotated/server/metadata.staged/snapshot.json000066400000000000000000000012251453140004500324040ustar00rootroot00000000000000{ "signatures": [ { "keyid": "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "sig": "ba835d8c4556c0d490e81a0aae287dd7359ffa2378160161979756b8c7e04d492eb370c50447c746064e38b318323059168fa319de2399da8387aeb7f951f401" }, { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "d9617e7899227aa417a59db0ecd64775fc651cbb3c4196fb45c36885d8bce0af9e19f2e9b0ce1e2f089b72a8bf7d120fdafe649c1ce79b1e0c95845b541c6805" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:13:39Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 2 } }client/testdata/Published2Times_snapshot_keyrotated/server/metadata.staged/targets.json000066400000000000000000000006711453140004500322220ustar00rootroot00000000000000{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "70a93be0db6e7180088029c94283f47e60bfae3001982303e4060d952fe8e2db92e861f66bfcf32a4eb10e5a00900eaa719858945a314259c29b14cf39e73f03" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:13:39Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }client/testdata/Published2Times_snapshot_keyrotated/server/metadata.staged/timestamp.json000066400000000000000000000013001453140004500325420ustar00rootroot00000000000000{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "57e25d5c42c25aeda1cfa5e6144567661867d15ef35746fedb685ea077e2dc803091ab26b3e50dfeedf405454f38159e453541a518c80a9c10923eff240fee07" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:13:39Z", "meta": { "snapshot.json": { "hashes": { "sha256": "70122787e9fa61099a44d5bc04b4b52c95a6eb553ba7e60b7b778b5d1539913c", "sha512": "2290f310345240bcba820722f09d70a0a463032c8c807122e30385a7e6a9fbd3ff044dce5d0994d182853ba1651057920ebbf0447c470d85370fb57afef9034e" }, "length": 661, "version": 2 } }, "spec_version": "1.0.0", "version": 2 } }client/testdata/Published2Times_snapshot_keyrotated/server/metadata/000077500000000000000000000000001453140004500264045ustar00rootroot00000000000000client/testdata/Published2Times_snapshot_keyrotated/server/metadata/1.root.json000066400000000000000000000042031453140004500304200ustar00rootroot00000000000000{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "7e2a5844a166b2873c86ee92fc2c07319424ddb66a0372797633f9dd5bcb869409eb00384095fd3e8f4fe5ca451da5ef6b3b864fc8c1b3bd1946743f30411205" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:13:39Z", "keys": { "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published2Times_snapshot_keyrotated/server/metadata/1.snapshot.json000066400000000000000000000006571453140004500313050ustar00rootroot00000000000000{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "98ca9f817a41745409386dd26a433907349df18d1153b660e8d3cfa01d7dabc35aa06947e9cfac1d93edd7d9276246432fdf647a3357c2185d250d9ddc2be90f" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:13:39Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published2Times_snapshot_keyrotated/server/metadata/1.targets.json000066400000000000000000000006711453140004500311130ustar00rootroot00000000000000{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "70a93be0db6e7180088029c94283f47e60bfae3001982303e4060d952fe8e2db92e861f66bfcf32a4eb10e5a00900eaa719858945a314259c29b14cf39e73f03" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:13:39Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }client/testdata/Published2Times_snapshot_keyrotated/server/metadata/1.timestamp.json000066400000000000000000000013001453140004500314330ustar00rootroot00000000000000{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "05e65cc7a4ebf2dce8472f64c2a69dcee977d5bf8dddc36f4547882782e0d1161a5a03102155b29c41cff10b2f31ff947f6c604d07da1a9ff7eb423477a39c08" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:13:39Z", "meta": { "snapshot.json": { "hashes": { "sha256": "1ce608f9525f5581f719ed696f6d445ec61ce9a0f97b0c3250bcebb687eb70fe", "sha512": "22c79c8cb721c21e28cf4ae4e0c31bece6d4f55ed9234f4b538dbbff0c99eb733b2d6e73eaf66e3d9ed955c57a054470d8bfa740487aff0c470a463b7bd967f3" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published2Times_snapshot_keyrotated/server/metadata/2.root.json000066400000000000000000000047711453140004500304330ustar00rootroot00000000000000{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "b5ee398bcfdeffec3bc84420a9f21282543e7a45cbd8ffa896b0e3d99d614551fa72e387fd809306ddc1454e16fe8edb01b5808d16f186b664a538353bd38802" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:13:39Z", "keys": { "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f758af464295e62a1da4d3267be6d13f4aba9c7d52166d01b6bd5b4559496c9d" }, "scheme": "ed25519" }, "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 2 } }client/testdata/Published2Times_snapshot_keyrotated/server/metadata/2.snapshot.json000066400000000000000000000012251453140004500312760ustar00rootroot00000000000000{ "signatures": [ { "keyid": "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "sig": "ba835d8c4556c0d490e81a0aae287dd7359ffa2378160161979756b8c7e04d492eb370c50447c746064e38b318323059168fa319de2399da8387aeb7f951f401" }, { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "d9617e7899227aa417a59db0ecd64775fc651cbb3c4196fb45c36885d8bce0af9e19f2e9b0ce1e2f089b72a8bf7d120fdafe649c1ce79b1e0c95845b541c6805" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:13:39Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 2 } }client/testdata/Published2Times_snapshot_keyrotated/server/metadata/2.timestamp.json000066400000000000000000000013001453140004500314340ustar00rootroot00000000000000{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "57e25d5c42c25aeda1cfa5e6144567661867d15ef35746fedb685ea077e2dc803091ab26b3e50dfeedf405454f38159e453541a518c80a9c10923eff240fee07" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:13:39Z", "meta": { "snapshot.json": { "hashes": { "sha256": "70122787e9fa61099a44d5bc04b4b52c95a6eb553ba7e60b7b778b5d1539913c", "sha512": "2290f310345240bcba820722f09d70a0a463032c8c807122e30385a7e6a9fbd3ff044dce5d0994d182853ba1651057920ebbf0447c470d85370fb57afef9034e" }, "length": 661, "version": 2 } }, "spec_version": "1.0.0", "version": 2 } }client/testdata/Published2Times_snapshot_keyrotated/server/metadata/root.json000066400000000000000000000047711453140004500302730ustar00rootroot00000000000000{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "b5ee398bcfdeffec3bc84420a9f21282543e7a45cbd8ffa896b0e3d99d614551fa72e387fd809306ddc1454e16fe8edb01b5808d16f186b664a538353bd38802" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:13:39Z", "keys": { "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f758af464295e62a1da4d3267be6d13f4aba9c7d52166d01b6bd5b4559496c9d" }, "scheme": "ed25519" }, "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 2 } }client/testdata/Published2Times_snapshot_keyrotated/server/metadata/snapshot.json000066400000000000000000000012251453140004500311360ustar00rootroot00000000000000{ "signatures": [ { "keyid": "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "sig": "ba835d8c4556c0d490e81a0aae287dd7359ffa2378160161979756b8c7e04d492eb370c50447c746064e38b318323059168fa319de2399da8387aeb7f951f401" }, { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "d9617e7899227aa417a59db0ecd64775fc651cbb3c4196fb45c36885d8bce0af9e19f2e9b0ce1e2f089b72a8bf7d120fdafe649c1ce79b1e0c95845b541c6805" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:13:39Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 2 } }client/testdata/Published2Times_snapshot_keyrotated/server/metadata/targets.json000066400000000000000000000006711453140004500307540ustar00rootroot00000000000000{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "70a93be0db6e7180088029c94283f47e60bfae3001982303e4060d952fe8e2db92e861f66bfcf32a4eb10e5a00900eaa719858945a314259c29b14cf39e73f03" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:13:39Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }client/testdata/Published2Times_snapshot_keyrotated/server/metadata/timestamp.json000066400000000000000000000013001453140004500312740ustar00rootroot00000000000000{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "57e25d5c42c25aeda1cfa5e6144567661867d15ef35746fedb685ea077e2dc803091ab26b3e50dfeedf405454f38159e453541a518c80a9c10923eff240fee07" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:13:39Z", "meta": { "snapshot.json": { "hashes": { "sha256": "70122787e9fa61099a44d5bc04b4b52c95a6eb553ba7e60b7b778b5d1539913c", "sha512": "2290f310345240bcba820722f09d70a0a463032c8c807122e30385a7e6a9fbd3ff044dce5d0994d182853ba1651057920ebbf0447c470d85370fb57afef9034e" }, "length": 661, "version": 2 } }, "spec_version": "1.0.0", "version": 2 } }client/testdata/Published2Times_targets_keyrotated/000077500000000000000000000000001453140004500231305ustar00rootroot00000000000000client/testdata/Published2Times_targets_keyrotated/client/000077500000000000000000000000001453140004500244065ustar00rootroot00000000000000client/testdata/Published2Times_targets_keyrotated/client/metadata/000077500000000000000000000000001453140004500261665ustar00rootroot00000000000000client/testdata/Published2Times_targets_keyrotated/client/metadata/current/000077500000000000000000000000001453140004500276505ustar00rootroot00000000000000client/testdata/Published2Times_targets_keyrotated/client/metadata/current/1.root.json000066400000000000000000000042031453140004500316640ustar00rootroot00000000000000{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "178b16c8bfeefe6b9d2296be36a09ec8d0ec5e2ddcf7db851c1157c2da9ac78623736ddd0e145ef791c00370a261c47ff09eb29817d21a3bd02057b32ad93603" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:13:40Z", "keys": { "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published2Times_targets_keyrotated/client/metadata/current/1.snapshot.json000066400000000000000000000006571453140004500325510ustar00rootroot00000000000000{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "aecb0a813124c7a42c125d94fa8dfd0bd6083acc30a1e8e2d85956d61cdd296f8adb561f8035826f9ad0480c5f3fd8581e0595ddf719a6b839acd9549667ad0d" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:13:40Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published2Times_targets_keyrotated/client/metadata/current/1.targets.json000066400000000000000000000006711453140004500323570ustar00rootroot00000000000000{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "923e033c7952d24cb509f62d8dfed00fb554b9dd3578567ddd2205377038044a5dd45c132755fed5b3e5f5ff8e4204fa0d219b47bc0f39c1b48fad2fdbc94805" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:13:40Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }client/testdata/Published2Times_targets_keyrotated/client/metadata/current/1.timestamp.json000066400000000000000000000013001453140004500326770ustar00rootroot00000000000000{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "d284bf6f5dc45828cd3d3cc771657ade69731d815df34bb0eec14dd645aa235eb67c32bb5cb7ad1d4e56e69fc1df002bf48c7264c6f9105e05cbb9a2c6c36b0d" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:13:40Z", "meta": { "snapshot.json": { "hashes": { "sha256": "8c30184e206b001443cc8c5ab74a45fbb80e3b6f7937fd42917635b64970442e", "sha512": "22f32f8178f842277f0e2e3dc24c03ccdf310be97533ddf41dffafa40be3448d9b22a1ac596c2b04b2357475823501156e52a2e9c39b730603f3c7ed3c8769d1" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published2Times_targets_keyrotated/client/metadata/current/root.json000066400000000000000000000042031453140004500315250ustar00rootroot00000000000000{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "178b16c8bfeefe6b9d2296be36a09ec8d0ec5e2ddcf7db851c1157c2da9ac78623736ddd0e145ef791c00370a261c47ff09eb29817d21a3bd02057b32ad93603" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:13:40Z", "keys": { "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published2Times_targets_keyrotated/client/metadata/current/snapshot.json000066400000000000000000000006571453140004500324120ustar00rootroot00000000000000{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "aecb0a813124c7a42c125d94fa8dfd0bd6083acc30a1e8e2d85956d61cdd296f8adb561f8035826f9ad0480c5f3fd8581e0595ddf719a6b839acd9549667ad0d" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:13:40Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published2Times_targets_keyrotated/client/metadata/current/targets.json000066400000000000000000000006711453140004500322200ustar00rootroot00000000000000{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "923e033c7952d24cb509f62d8dfed00fb554b9dd3578567ddd2205377038044a5dd45c132755fed5b3e5f5ff8e4204fa0d219b47bc0f39c1b48fad2fdbc94805" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:13:40Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }client/testdata/Published2Times_targets_keyrotated/client/metadata/current/timestamp.json000066400000000000000000000013001453140004500325400ustar00rootroot00000000000000{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "d284bf6f5dc45828cd3d3cc771657ade69731d815df34bb0eec14dd645aa235eb67c32bb5cb7ad1d4e56e69fc1df002bf48c7264c6f9105e05cbb9a2c6c36b0d" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:13:40Z", "meta": { "snapshot.json": { "hashes": { "sha256": "8c30184e206b001443cc8c5ab74a45fbb80e3b6f7937fd42917635b64970442e", "sha512": "22f32f8178f842277f0e2e3dc24c03ccdf310be97533ddf41dffafa40be3448d9b22a1ac596c2b04b2357475823501156e52a2e9c39b730603f3c7ed3c8769d1" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published2Times_targets_keyrotated/client/metadata/previous/000077500000000000000000000000001453140004500300425ustar00rootroot00000000000000client/testdata/Published2Times_targets_keyrotated/client/metadata/previous/1.root.json000066400000000000000000000042031453140004500320560ustar00rootroot00000000000000{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "178b16c8bfeefe6b9d2296be36a09ec8d0ec5e2ddcf7db851c1157c2da9ac78623736ddd0e145ef791c00370a261c47ff09eb29817d21a3bd02057b32ad93603" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:13:40Z", "keys": { "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published2Times_targets_keyrotated/client/metadata/previous/1.snapshot.json000066400000000000000000000006571453140004500327430ustar00rootroot00000000000000{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "aecb0a813124c7a42c125d94fa8dfd0bd6083acc30a1e8e2d85956d61cdd296f8adb561f8035826f9ad0480c5f3fd8581e0595ddf719a6b839acd9549667ad0d" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:13:40Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published2Times_targets_keyrotated/client/metadata/previous/1.targets.json000066400000000000000000000006711453140004500325510ustar00rootroot00000000000000{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "923e033c7952d24cb509f62d8dfed00fb554b9dd3578567ddd2205377038044a5dd45c132755fed5b3e5f5ff8e4204fa0d219b47bc0f39c1b48fad2fdbc94805" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:13:40Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }client/testdata/Published2Times_targets_keyrotated/client/metadata/previous/1.timestamp.json000066400000000000000000000013001453140004500330710ustar00rootroot00000000000000{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "d284bf6f5dc45828cd3d3cc771657ade69731d815df34bb0eec14dd645aa235eb67c32bb5cb7ad1d4e56e69fc1df002bf48c7264c6f9105e05cbb9a2c6c36b0d" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:13:40Z", "meta": { "snapshot.json": { "hashes": { "sha256": "8c30184e206b001443cc8c5ab74a45fbb80e3b6f7937fd42917635b64970442e", "sha512": "22f32f8178f842277f0e2e3dc24c03ccdf310be97533ddf41dffafa40be3448d9b22a1ac596c2b04b2357475823501156e52a2e9c39b730603f3c7ed3c8769d1" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published2Times_targets_keyrotated/client/metadata/previous/root.json000066400000000000000000000042031453140004500317170ustar00rootroot00000000000000{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "178b16c8bfeefe6b9d2296be36a09ec8d0ec5e2ddcf7db851c1157c2da9ac78623736ddd0e145ef791c00370a261c47ff09eb29817d21a3bd02057b32ad93603" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:13:40Z", "keys": { "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published2Times_targets_keyrotated/client/metadata/previous/snapshot.json000066400000000000000000000006571453140004500326040ustar00rootroot00000000000000{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "aecb0a813124c7a42c125d94fa8dfd0bd6083acc30a1e8e2d85956d61cdd296f8adb561f8035826f9ad0480c5f3fd8581e0595ddf719a6b839acd9549667ad0d" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:13:40Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published2Times_targets_keyrotated/client/metadata/previous/targets.json000066400000000000000000000006711453140004500324120ustar00rootroot00000000000000{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "923e033c7952d24cb509f62d8dfed00fb554b9dd3578567ddd2205377038044a5dd45c132755fed5b3e5f5ff8e4204fa0d219b47bc0f39c1b48fad2fdbc94805" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:13:40Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }client/testdata/Published2Times_targets_keyrotated/client/metadata/previous/timestamp.json000066400000000000000000000013001453140004500327320ustar00rootroot00000000000000{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "d284bf6f5dc45828cd3d3cc771657ade69731d815df34bb0eec14dd645aa235eb67c32bb5cb7ad1d4e56e69fc1df002bf48c7264c6f9105e05cbb9a2c6c36b0d" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:13:40Z", "meta": { "snapshot.json": { "hashes": { "sha256": "8c30184e206b001443cc8c5ab74a45fbb80e3b6f7937fd42917635b64970442e", "sha512": "22f32f8178f842277f0e2e3dc24c03ccdf310be97533ddf41dffafa40be3448d9b22a1ac596c2b04b2357475823501156e52a2e9c39b730603f3c7ed3c8769d1" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published2Times_targets_keyrotated/hash.txt000066400000000000000000000001001453140004500246030ustar00rootroot00000000000000da386545caf1b4bc294d8be949b3bd1a81de1d72cbeb9389c678e5ded14de472client/testdata/Published2Times_targets_keyrotated/server/000077500000000000000000000000001453140004500244365ustar00rootroot00000000000000client/testdata/Published2Times_targets_keyrotated/server/metadata.staged/000077500000000000000000000000001453140004500274645ustar00rootroot00000000000000client/testdata/Published2Times_targets_keyrotated/server/metadata.staged/1.root.json000066400000000000000000000042031453140004500315000ustar00rootroot00000000000000{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "178b16c8bfeefe6b9d2296be36a09ec8d0ec5e2ddcf7db851c1157c2da9ac78623736ddd0e145ef791c00370a261c47ff09eb29817d21a3bd02057b32ad93603" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:13:40Z", "keys": { "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published2Times_targets_keyrotated/server/metadata.staged/1.snapshot.json000066400000000000000000000006571453140004500323650ustar00rootroot00000000000000{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "aecb0a813124c7a42c125d94fa8dfd0bd6083acc30a1e8e2d85956d61cdd296f8adb561f8035826f9ad0480c5f3fd8581e0595ddf719a6b839acd9549667ad0d" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:13:40Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published2Times_targets_keyrotated/server/metadata.staged/1.targets.json000066400000000000000000000006711453140004500321730ustar00rootroot00000000000000{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "923e033c7952d24cb509f62d8dfed00fb554b9dd3578567ddd2205377038044a5dd45c132755fed5b3e5f5ff8e4204fa0d219b47bc0f39c1b48fad2fdbc94805" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:13:40Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }client/testdata/Published2Times_targets_keyrotated/server/metadata.staged/1.timestamp.json000066400000000000000000000013001453140004500325130ustar00rootroot00000000000000{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "d284bf6f5dc45828cd3d3cc771657ade69731d815df34bb0eec14dd645aa235eb67c32bb5cb7ad1d4e56e69fc1df002bf48c7264c6f9105e05cbb9a2c6c36b0d" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:13:40Z", "meta": { "snapshot.json": { "hashes": { "sha256": "8c30184e206b001443cc8c5ab74a45fbb80e3b6f7937fd42917635b64970442e", "sha512": "22f32f8178f842277f0e2e3dc24c03ccdf310be97533ddf41dffafa40be3448d9b22a1ac596c2b04b2357475823501156e52a2e9c39b730603f3c7ed3c8769d1" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published2Times_targets_keyrotated/server/metadata.staged/2.root.json000066400000000000000000000047711453140004500315130ustar00rootroot00000000000000{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "11c2da5dc46bcf9e2aa41ce633778480a5f74160c2547085dd85b802e67b71c10e2a3fd2b1fcf800364408a555ca2e1f309cf09137b1225bc015f9535e2c5a01" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:13:40Z", "keys": { "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f758af464295e62a1da4d3267be6d13f4aba9c7d52166d01b6bd5b4559496c9d" }, "scheme": "ed25519" }, "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 2 } }client/testdata/Published2Times_targets_keyrotated/server/metadata.staged/2.snapshot.json000066400000000000000000000006571453140004500323660ustar00rootroot00000000000000{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "faa00b87121a1cefdaec6ea5fe1078465d989ac73b18220b594dc62302d8c661d6dea53f9baea9c8fc29fb988c889d5096a9914979ad53027cd281de1549f107" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:13:40Z", "meta": { "targets.json": { "version": 2 } }, "spec_version": "1.0.0", "version": 2 } }client/testdata/Published2Times_targets_keyrotated/server/metadata.staged/2.targets.json000066400000000000000000000012371453140004500321730ustar00rootroot00000000000000{ "signatures": [ { "keyid": "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "sig": "9d7c09bf862a443be7a1cf14c1d2bf2f812dea9ab33567f14a3b33ff52af70865fd11c17ed92d187bb319fd984709a6ed59cc3d216ee9f3151af0764eafa460d" }, { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "94541820374b4a4a7d92a8d7fbf22ab5e203c1da0559c21e1168f2ebcbcf19a939bf46f4c96cf678480708ff5549f14fec56e3163cce60f4e753f173ebbc6706" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:13:40Z", "spec_version": "1.0.0", "targets": {}, "version": 2 } }client/testdata/Published2Times_targets_keyrotated/server/metadata.staged/2.timestamp.json000066400000000000000000000013001453140004500325140ustar00rootroot00000000000000{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "56e9600e8db24012f69219ecb7d27edb0c4e3da64dabccd6948c4c12e42be4360854941ced0f6b11544166306c225ed9cd7b2e979de11340246890ed664a3707" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:13:40Z", "meta": { "snapshot.json": { "hashes": { "sha256": "26e36995257b9d61a9e7d06fe5c7ce43c1f01db1d078509ac1ca91c7a3ea6b97", "sha512": "ba915258f9b6f711809e657aef8c37f76009be392fe560da3af6ee49e9027101d9d27c8d6cc74502947445fe59864502c992374c5c68dfe5f91a35c72a49d6df" }, "length": 431, "version": 2 } }, "spec_version": "1.0.0", "version": 2 } }client/testdata/Published2Times_targets_keyrotated/server/metadata.staged/root.json000066400000000000000000000047711453140004500313530ustar00rootroot00000000000000{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "11c2da5dc46bcf9e2aa41ce633778480a5f74160c2547085dd85b802e67b71c10e2a3fd2b1fcf800364408a555ca2e1f309cf09137b1225bc015f9535e2c5a01" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:13:40Z", "keys": { "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f758af464295e62a1da4d3267be6d13f4aba9c7d52166d01b6bd5b4559496c9d" }, "scheme": "ed25519" }, "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 2 } }client/testdata/Published2Times_targets_keyrotated/server/metadata.staged/snapshot.json000066400000000000000000000006571453140004500322260ustar00rootroot00000000000000{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "faa00b87121a1cefdaec6ea5fe1078465d989ac73b18220b594dc62302d8c661d6dea53f9baea9c8fc29fb988c889d5096a9914979ad53027cd281de1549f107" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:13:40Z", "meta": { "targets.json": { "version": 2 } }, "spec_version": "1.0.0", "version": 2 } }client/testdata/Published2Times_targets_keyrotated/server/metadata.staged/targets.json000066400000000000000000000012371453140004500320330ustar00rootroot00000000000000{ "signatures": [ { "keyid": "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "sig": "9d7c09bf862a443be7a1cf14c1d2bf2f812dea9ab33567f14a3b33ff52af70865fd11c17ed92d187bb319fd984709a6ed59cc3d216ee9f3151af0764eafa460d" }, { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "94541820374b4a4a7d92a8d7fbf22ab5e203c1da0559c21e1168f2ebcbcf19a939bf46f4c96cf678480708ff5549f14fec56e3163cce60f4e753f173ebbc6706" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:13:40Z", "spec_version": "1.0.0", "targets": {}, "version": 2 } }client/testdata/Published2Times_targets_keyrotated/server/metadata.staged/timestamp.json000066400000000000000000000013001453140004500323540ustar00rootroot00000000000000{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "56e9600e8db24012f69219ecb7d27edb0c4e3da64dabccd6948c4c12e42be4360854941ced0f6b11544166306c225ed9cd7b2e979de11340246890ed664a3707" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:13:40Z", "meta": { "snapshot.json": { "hashes": { "sha256": "26e36995257b9d61a9e7d06fe5c7ce43c1f01db1d078509ac1ca91c7a3ea6b97", "sha512": "ba915258f9b6f711809e657aef8c37f76009be392fe560da3af6ee49e9027101d9d27c8d6cc74502947445fe59864502c992374c5c68dfe5f91a35c72a49d6df" }, "length": 431, "version": 2 } }, "spec_version": "1.0.0", "version": 2 } }client/testdata/Published2Times_targets_keyrotated/server/metadata/000077500000000000000000000000001453140004500262165ustar00rootroot00000000000000client/testdata/Published2Times_targets_keyrotated/server/metadata/1.root.json000066400000000000000000000042031453140004500302320ustar00rootroot00000000000000{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "178b16c8bfeefe6b9d2296be36a09ec8d0ec5e2ddcf7db851c1157c2da9ac78623736ddd0e145ef791c00370a261c47ff09eb29817d21a3bd02057b32ad93603" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:13:40Z", "keys": { "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published2Times_targets_keyrotated/server/metadata/1.snapshot.json000066400000000000000000000006571453140004500311170ustar00rootroot00000000000000{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "aecb0a813124c7a42c125d94fa8dfd0bd6083acc30a1e8e2d85956d61cdd296f8adb561f8035826f9ad0480c5f3fd8581e0595ddf719a6b839acd9549667ad0d" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:13:40Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published2Times_targets_keyrotated/server/metadata/1.targets.json000066400000000000000000000006711453140004500307250ustar00rootroot00000000000000{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "923e033c7952d24cb509f62d8dfed00fb554b9dd3578567ddd2205377038044a5dd45c132755fed5b3e5f5ff8e4204fa0d219b47bc0f39c1b48fad2fdbc94805" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:13:40Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }client/testdata/Published2Times_targets_keyrotated/server/metadata/1.timestamp.json000066400000000000000000000013001453140004500312450ustar00rootroot00000000000000{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "d284bf6f5dc45828cd3d3cc771657ade69731d815df34bb0eec14dd645aa235eb67c32bb5cb7ad1d4e56e69fc1df002bf48c7264c6f9105e05cbb9a2c6c36b0d" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:13:40Z", "meta": { "snapshot.json": { "hashes": { "sha256": "8c30184e206b001443cc8c5ab74a45fbb80e3b6f7937fd42917635b64970442e", "sha512": "22f32f8178f842277f0e2e3dc24c03ccdf310be97533ddf41dffafa40be3448d9b22a1ac596c2b04b2357475823501156e52a2e9c39b730603f3c7ed3c8769d1" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published2Times_targets_keyrotated/server/metadata/2.root.json000066400000000000000000000047711453140004500302450ustar00rootroot00000000000000{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "11c2da5dc46bcf9e2aa41ce633778480a5f74160c2547085dd85b802e67b71c10e2a3fd2b1fcf800364408a555ca2e1f309cf09137b1225bc015f9535e2c5a01" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:13:40Z", "keys": { "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f758af464295e62a1da4d3267be6d13f4aba9c7d52166d01b6bd5b4559496c9d" }, "scheme": "ed25519" }, "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 2 } }client/testdata/Published2Times_targets_keyrotated/server/metadata/2.snapshot.json000066400000000000000000000006571453140004500311200ustar00rootroot00000000000000{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "faa00b87121a1cefdaec6ea5fe1078465d989ac73b18220b594dc62302d8c661d6dea53f9baea9c8fc29fb988c889d5096a9914979ad53027cd281de1549f107" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:13:40Z", "meta": { "targets.json": { "version": 2 } }, "spec_version": "1.0.0", "version": 2 } }client/testdata/Published2Times_targets_keyrotated/server/metadata/2.targets.json000066400000000000000000000012371453140004500307250ustar00rootroot00000000000000{ "signatures": [ { "keyid": "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "sig": "9d7c09bf862a443be7a1cf14c1d2bf2f812dea9ab33567f14a3b33ff52af70865fd11c17ed92d187bb319fd984709a6ed59cc3d216ee9f3151af0764eafa460d" }, { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "94541820374b4a4a7d92a8d7fbf22ab5e203c1da0559c21e1168f2ebcbcf19a939bf46f4c96cf678480708ff5549f14fec56e3163cce60f4e753f173ebbc6706" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:13:40Z", "spec_version": "1.0.0", "targets": {}, "version": 2 } }client/testdata/Published2Times_targets_keyrotated/server/metadata/2.timestamp.json000066400000000000000000000013001453140004500312460ustar00rootroot00000000000000{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "56e9600e8db24012f69219ecb7d27edb0c4e3da64dabccd6948c4c12e42be4360854941ced0f6b11544166306c225ed9cd7b2e979de11340246890ed664a3707" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:13:40Z", "meta": { "snapshot.json": { "hashes": { "sha256": "26e36995257b9d61a9e7d06fe5c7ce43c1f01db1d078509ac1ca91c7a3ea6b97", "sha512": "ba915258f9b6f711809e657aef8c37f76009be392fe560da3af6ee49e9027101d9d27c8d6cc74502947445fe59864502c992374c5c68dfe5f91a35c72a49d6df" }, "length": 431, "version": 2 } }, "spec_version": "1.0.0", "version": 2 } }client/testdata/Published2Times_targets_keyrotated/server/metadata/root.json000066400000000000000000000047711453140004500301050ustar00rootroot00000000000000{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "11c2da5dc46bcf9e2aa41ce633778480a5f74160c2547085dd85b802e67b71c10e2a3fd2b1fcf800364408a555ca2e1f309cf09137b1225bc015f9535e2c5a01" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:13:40Z", "keys": { "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f758af464295e62a1da4d3267be6d13f4aba9c7d52166d01b6bd5b4559496c9d" }, "scheme": "ed25519" }, "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 2 } }client/testdata/Published2Times_targets_keyrotated/server/metadata/snapshot.json000066400000000000000000000006571453140004500307600ustar00rootroot00000000000000{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "faa00b87121a1cefdaec6ea5fe1078465d989ac73b18220b594dc62302d8c661d6dea53f9baea9c8fc29fb988c889d5096a9914979ad53027cd281de1549f107" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:13:40Z", "meta": { "targets.json": { "version": 2 } }, "spec_version": "1.0.0", "version": 2 } }client/testdata/Published2Times_targets_keyrotated/server/metadata/targets.json000066400000000000000000000012371453140004500305650ustar00rootroot00000000000000{ "signatures": [ { "keyid": "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "sig": "9d7c09bf862a443be7a1cf14c1d2bf2f812dea9ab33567f14a3b33ff52af70865fd11c17ed92d187bb319fd984709a6ed59cc3d216ee9f3151af0764eafa460d" }, { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "94541820374b4a4a7d92a8d7fbf22ab5e203c1da0559c21e1168f2ebcbcf19a939bf46f4c96cf678480708ff5549f14fec56e3163cce60f4e753f173ebbc6706" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:13:40Z", "spec_version": "1.0.0", "targets": {}, "version": 2 } }client/testdata/Published2Times_targets_keyrotated/server/metadata/timestamp.json000066400000000000000000000013001453140004500311060ustar00rootroot00000000000000{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "56e9600e8db24012f69219ecb7d27edb0c4e3da64dabccd6948c4c12e42be4360854941ced0f6b11544166306c225ed9cd7b2e979de11340246890ed664a3707" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:13:40Z", "meta": { "snapshot.json": { "hashes": { "sha256": "26e36995257b9d61a9e7d06fe5c7ce43c1f01db1d078509ac1ca91c7a3ea6b97", "sha512": "ba915258f9b6f711809e657aef8c37f76009be392fe560da3af6ee49e9027101d9d27c8d6cc74502947445fe59864502c992374c5c68dfe5f91a35c72a49d6df" }, "length": 431, "version": 2 } }, "spec_version": "1.0.0", "version": 2 } }client/testdata/Published2Times_timestamp_keyrotated/000077500000000000000000000000001453140004500234625ustar00rootroot00000000000000client/testdata/Published2Times_timestamp_keyrotated/client/000077500000000000000000000000001453140004500247405ustar00rootroot00000000000000client/testdata/Published2Times_timestamp_keyrotated/client/metadata/000077500000000000000000000000001453140004500265205ustar00rootroot00000000000000client/testdata/Published2Times_timestamp_keyrotated/client/metadata/current/000077500000000000000000000000001453140004500302025ustar00rootroot00000000000000client/testdata/Published2Times_timestamp_keyrotated/client/metadata/current/1.root.json000066400000000000000000000042031453140004500322160ustar00rootroot00000000000000{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "7e2a5844a166b2873c86ee92fc2c07319424ddb66a0372797633f9dd5bcb869409eb00384095fd3e8f4fe5ca451da5ef6b3b864fc8c1b3bd1946743f30411205" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:13:39Z", "keys": { "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published2Times_timestamp_keyrotated/client/metadata/current/1.snapshot.json000066400000000000000000000006571453140004500331030ustar00rootroot00000000000000{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "98ca9f817a41745409386dd26a433907349df18d1153b660e8d3cfa01d7dabc35aa06947e9cfac1d93edd7d9276246432fdf647a3357c2185d250d9ddc2be90f" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:13:39Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published2Times_timestamp_keyrotated/client/metadata/current/1.targets.json000066400000000000000000000006711453140004500327110ustar00rootroot00000000000000{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "70a93be0db6e7180088029c94283f47e60bfae3001982303e4060d952fe8e2db92e861f66bfcf32a4eb10e5a00900eaa719858945a314259c29b14cf39e73f03" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:13:39Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }client/testdata/Published2Times_timestamp_keyrotated/client/metadata/current/1.timestamp.json000066400000000000000000000013001453140004500332310ustar00rootroot00000000000000{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "05e65cc7a4ebf2dce8472f64c2a69dcee977d5bf8dddc36f4547882782e0d1161a5a03102155b29c41cff10b2f31ff947f6c604d07da1a9ff7eb423477a39c08" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:13:39Z", "meta": { "snapshot.json": { "hashes": { "sha256": "1ce608f9525f5581f719ed696f6d445ec61ce9a0f97b0c3250bcebb687eb70fe", "sha512": "22c79c8cb721c21e28cf4ae4e0c31bece6d4f55ed9234f4b538dbbff0c99eb733b2d6e73eaf66e3d9ed955c57a054470d8bfa740487aff0c470a463b7bd967f3" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published2Times_timestamp_keyrotated/client/metadata/current/root.json000066400000000000000000000042031453140004500320570ustar00rootroot00000000000000{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "7e2a5844a166b2873c86ee92fc2c07319424ddb66a0372797633f9dd5bcb869409eb00384095fd3e8f4fe5ca451da5ef6b3b864fc8c1b3bd1946743f30411205" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:13:39Z", "keys": { "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published2Times_timestamp_keyrotated/client/metadata/current/snapshot.json000066400000000000000000000006571453140004500327440ustar00rootroot00000000000000{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "98ca9f817a41745409386dd26a433907349df18d1153b660e8d3cfa01d7dabc35aa06947e9cfac1d93edd7d9276246432fdf647a3357c2185d250d9ddc2be90f" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:13:39Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published2Times_timestamp_keyrotated/client/metadata/current/targets.json000066400000000000000000000006711453140004500325520ustar00rootroot00000000000000{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "70a93be0db6e7180088029c94283f47e60bfae3001982303e4060d952fe8e2db92e861f66bfcf32a4eb10e5a00900eaa719858945a314259c29b14cf39e73f03" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:13:39Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }client/testdata/Published2Times_timestamp_keyrotated/client/metadata/current/timestamp.json000066400000000000000000000013001453140004500330720ustar00rootroot00000000000000{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "05e65cc7a4ebf2dce8472f64c2a69dcee977d5bf8dddc36f4547882782e0d1161a5a03102155b29c41cff10b2f31ff947f6c604d07da1a9ff7eb423477a39c08" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:13:39Z", "meta": { "snapshot.json": { "hashes": { "sha256": "1ce608f9525f5581f719ed696f6d445ec61ce9a0f97b0c3250bcebb687eb70fe", "sha512": "22c79c8cb721c21e28cf4ae4e0c31bece6d4f55ed9234f4b538dbbff0c99eb733b2d6e73eaf66e3d9ed955c57a054470d8bfa740487aff0c470a463b7bd967f3" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published2Times_timestamp_keyrotated/client/metadata/previous/000077500000000000000000000000001453140004500303745ustar00rootroot00000000000000client/testdata/Published2Times_timestamp_keyrotated/client/metadata/previous/1.root.json000066400000000000000000000042031453140004500324100ustar00rootroot00000000000000{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "7e2a5844a166b2873c86ee92fc2c07319424ddb66a0372797633f9dd5bcb869409eb00384095fd3e8f4fe5ca451da5ef6b3b864fc8c1b3bd1946743f30411205" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:13:39Z", "keys": { "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published2Times_timestamp_keyrotated/client/metadata/previous/1.snapshot.json000066400000000000000000000006571453140004500332750ustar00rootroot00000000000000{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "98ca9f817a41745409386dd26a433907349df18d1153b660e8d3cfa01d7dabc35aa06947e9cfac1d93edd7d9276246432fdf647a3357c2185d250d9ddc2be90f" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:13:39Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published2Times_timestamp_keyrotated/client/metadata/previous/1.targets.json000066400000000000000000000006711453140004500331030ustar00rootroot00000000000000{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "70a93be0db6e7180088029c94283f47e60bfae3001982303e4060d952fe8e2db92e861f66bfcf32a4eb10e5a00900eaa719858945a314259c29b14cf39e73f03" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:13:39Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }client/testdata/Published2Times_timestamp_keyrotated/client/metadata/previous/1.timestamp.json000066400000000000000000000013001453140004500334230ustar00rootroot00000000000000{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "05e65cc7a4ebf2dce8472f64c2a69dcee977d5bf8dddc36f4547882782e0d1161a5a03102155b29c41cff10b2f31ff947f6c604d07da1a9ff7eb423477a39c08" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:13:39Z", "meta": { "snapshot.json": { "hashes": { "sha256": "1ce608f9525f5581f719ed696f6d445ec61ce9a0f97b0c3250bcebb687eb70fe", "sha512": "22c79c8cb721c21e28cf4ae4e0c31bece6d4f55ed9234f4b538dbbff0c99eb733b2d6e73eaf66e3d9ed955c57a054470d8bfa740487aff0c470a463b7bd967f3" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published2Times_timestamp_keyrotated/client/metadata/previous/root.json000066400000000000000000000042031453140004500322510ustar00rootroot00000000000000{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "7e2a5844a166b2873c86ee92fc2c07319424ddb66a0372797633f9dd5bcb869409eb00384095fd3e8f4fe5ca451da5ef6b3b864fc8c1b3bd1946743f30411205" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:13:39Z", "keys": { "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published2Times_timestamp_keyrotated/client/metadata/previous/snapshot.json000066400000000000000000000006571453140004500331360ustar00rootroot00000000000000{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "98ca9f817a41745409386dd26a433907349df18d1153b660e8d3cfa01d7dabc35aa06947e9cfac1d93edd7d9276246432fdf647a3357c2185d250d9ddc2be90f" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:13:39Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published2Times_timestamp_keyrotated/client/metadata/previous/targets.json000066400000000000000000000006711453140004500327440ustar00rootroot00000000000000{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "70a93be0db6e7180088029c94283f47e60bfae3001982303e4060d952fe8e2db92e861f66bfcf32a4eb10e5a00900eaa719858945a314259c29b14cf39e73f03" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:13:39Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }client/testdata/Published2Times_timestamp_keyrotated/client/metadata/previous/timestamp.json000066400000000000000000000013001453140004500332640ustar00rootroot00000000000000{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "05e65cc7a4ebf2dce8472f64c2a69dcee977d5bf8dddc36f4547882782e0d1161a5a03102155b29c41cff10b2f31ff947f6c604d07da1a9ff7eb423477a39c08" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:13:39Z", "meta": { "snapshot.json": { "hashes": { "sha256": "1ce608f9525f5581f719ed696f6d445ec61ce9a0f97b0c3250bcebb687eb70fe", "sha512": "22c79c8cb721c21e28cf4ae4e0c31bece6d4f55ed9234f4b538dbbff0c99eb733b2d6e73eaf66e3d9ed955c57a054470d8bfa740487aff0c470a463b7bd967f3" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published2Times_timestamp_keyrotated/hash.txt000066400000000000000000000001001453140004500251350ustar00rootroot00000000000000cc8aeb813bb72f4057f56f8c89fc81548ad290592fb0023df691ce505e402a57client/testdata/Published2Times_timestamp_keyrotated/server/000077500000000000000000000000001453140004500247705ustar00rootroot00000000000000client/testdata/Published2Times_timestamp_keyrotated/server/metadata.staged/000077500000000000000000000000001453140004500300165ustar00rootroot00000000000000client/testdata/Published2Times_timestamp_keyrotated/server/metadata.staged/1.root.json000066400000000000000000000042031453140004500320320ustar00rootroot00000000000000{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "7e2a5844a166b2873c86ee92fc2c07319424ddb66a0372797633f9dd5bcb869409eb00384095fd3e8f4fe5ca451da5ef6b3b864fc8c1b3bd1946743f30411205" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:13:39Z", "keys": { "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published2Times_timestamp_keyrotated/server/metadata.staged/1.snapshot.json000066400000000000000000000006571453140004500327170ustar00rootroot00000000000000{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "98ca9f817a41745409386dd26a433907349df18d1153b660e8d3cfa01d7dabc35aa06947e9cfac1d93edd7d9276246432fdf647a3357c2185d250d9ddc2be90f" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:13:39Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published2Times_timestamp_keyrotated/server/metadata.staged/1.targets.json000066400000000000000000000006711453140004500325250ustar00rootroot00000000000000{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "70a93be0db6e7180088029c94283f47e60bfae3001982303e4060d952fe8e2db92e861f66bfcf32a4eb10e5a00900eaa719858945a314259c29b14cf39e73f03" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:13:39Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }client/testdata/Published2Times_timestamp_keyrotated/server/metadata.staged/1.timestamp.json000066400000000000000000000013001453140004500330450ustar00rootroot00000000000000{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "05e65cc7a4ebf2dce8472f64c2a69dcee977d5bf8dddc36f4547882782e0d1161a5a03102155b29c41cff10b2f31ff947f6c604d07da1a9ff7eb423477a39c08" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:13:39Z", "meta": { "snapshot.json": { "hashes": { "sha256": "1ce608f9525f5581f719ed696f6d445ec61ce9a0f97b0c3250bcebb687eb70fe", "sha512": "22c79c8cb721c21e28cf4ae4e0c31bece6d4f55ed9234f4b538dbbff0c99eb733b2d6e73eaf66e3d9ed955c57a054470d8bfa740487aff0c470a463b7bd967f3" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published2Times_timestamp_keyrotated/server/metadata.staged/2.root.json000066400000000000000000000047711453140004500320450ustar00rootroot00000000000000{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "751ae9cf8ef0167e182eae200b05a236041b1a2c4e5fa599c304bf7f99a6f1dcb1627dce10f792dbe85481921e548e4edae2567ec41a927affa3b25d0bb3b804" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:13:39Z", "keys": { "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f758af464295e62a1da4d3267be6d13f4aba9c7d52166d01b6bd5b4559496c9d" }, "scheme": "ed25519" }, "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 2 } }client/testdata/Published2Times_timestamp_keyrotated/server/metadata.staged/2.timestamp.json000066400000000000000000000016461453140004500330630ustar00rootroot00000000000000{ "signatures": [ { "keyid": "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "sig": "955181a388d83f9ce358bd5430379b66fa3e65412838e807ded2ef4ac0a9c191a0bdceb572b607b923d7ffbfda9c83c621bc8cc9644a8496730b436e7b332101" }, { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "388320f4ba609a57b74687f5c6ec7b64cfbceeac6040631a93515d4f15021cc033518dfc170b979259f227b250063a377d89be042aec0222ef739b2582200a03" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:13:39Z", "meta": { "snapshot.json": { "hashes": { "sha256": "1ce608f9525f5581f719ed696f6d445ec61ce9a0f97b0c3250bcebb687eb70fe", "sha512": "22c79c8cb721c21e28cf4ae4e0c31bece6d4f55ed9234f4b538dbbff0c99eb733b2d6e73eaf66e3d9ed955c57a054470d8bfa740487aff0c470a463b7bd967f3" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 2 } }client/testdata/Published2Times_timestamp_keyrotated/server/metadata.staged/root.json000066400000000000000000000047711453140004500317050ustar00rootroot00000000000000{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "751ae9cf8ef0167e182eae200b05a236041b1a2c4e5fa599c304bf7f99a6f1dcb1627dce10f792dbe85481921e548e4edae2567ec41a927affa3b25d0bb3b804" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:13:39Z", "keys": { "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f758af464295e62a1da4d3267be6d13f4aba9c7d52166d01b6bd5b4559496c9d" }, "scheme": "ed25519" }, "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 2 } }client/testdata/Published2Times_timestamp_keyrotated/server/metadata.staged/snapshot.json000066400000000000000000000006571453140004500325600ustar00rootroot00000000000000{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "98ca9f817a41745409386dd26a433907349df18d1153b660e8d3cfa01d7dabc35aa06947e9cfac1d93edd7d9276246432fdf647a3357c2185d250d9ddc2be90f" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:13:39Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published2Times_timestamp_keyrotated/server/metadata.staged/targets.json000066400000000000000000000006711453140004500323660ustar00rootroot00000000000000{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "70a93be0db6e7180088029c94283f47e60bfae3001982303e4060d952fe8e2db92e861f66bfcf32a4eb10e5a00900eaa719858945a314259c29b14cf39e73f03" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:13:39Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }client/testdata/Published2Times_timestamp_keyrotated/server/metadata.staged/timestamp.json000066400000000000000000000016461453140004500327230ustar00rootroot00000000000000{ "signatures": [ { "keyid": "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "sig": "955181a388d83f9ce358bd5430379b66fa3e65412838e807ded2ef4ac0a9c191a0bdceb572b607b923d7ffbfda9c83c621bc8cc9644a8496730b436e7b332101" }, { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "388320f4ba609a57b74687f5c6ec7b64cfbceeac6040631a93515d4f15021cc033518dfc170b979259f227b250063a377d89be042aec0222ef739b2582200a03" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:13:39Z", "meta": { "snapshot.json": { "hashes": { "sha256": "1ce608f9525f5581f719ed696f6d445ec61ce9a0f97b0c3250bcebb687eb70fe", "sha512": "22c79c8cb721c21e28cf4ae4e0c31bece6d4f55ed9234f4b538dbbff0c99eb733b2d6e73eaf66e3d9ed955c57a054470d8bfa740487aff0c470a463b7bd967f3" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 2 } }client/testdata/Published2Times_timestamp_keyrotated/server/metadata/000077500000000000000000000000001453140004500265505ustar00rootroot00000000000000client/testdata/Published2Times_timestamp_keyrotated/server/metadata/1.root.json000066400000000000000000000042031453140004500305640ustar00rootroot00000000000000{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "7e2a5844a166b2873c86ee92fc2c07319424ddb66a0372797633f9dd5bcb869409eb00384095fd3e8f4fe5ca451da5ef6b3b864fc8c1b3bd1946743f30411205" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:13:39Z", "keys": { "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published2Times_timestamp_keyrotated/server/metadata/1.snapshot.json000066400000000000000000000006571453140004500314510ustar00rootroot00000000000000{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "98ca9f817a41745409386dd26a433907349df18d1153b660e8d3cfa01d7dabc35aa06947e9cfac1d93edd7d9276246432fdf647a3357c2185d250d9ddc2be90f" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:13:39Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published2Times_timestamp_keyrotated/server/metadata/1.targets.json000066400000000000000000000006711453140004500312570ustar00rootroot00000000000000{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "70a93be0db6e7180088029c94283f47e60bfae3001982303e4060d952fe8e2db92e861f66bfcf32a4eb10e5a00900eaa719858945a314259c29b14cf39e73f03" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:13:39Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }client/testdata/Published2Times_timestamp_keyrotated/server/metadata/1.timestamp.json000066400000000000000000000013001453140004500315770ustar00rootroot00000000000000{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "05e65cc7a4ebf2dce8472f64c2a69dcee977d5bf8dddc36f4547882782e0d1161a5a03102155b29c41cff10b2f31ff947f6c604d07da1a9ff7eb423477a39c08" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:13:39Z", "meta": { "snapshot.json": { "hashes": { "sha256": "1ce608f9525f5581f719ed696f6d445ec61ce9a0f97b0c3250bcebb687eb70fe", "sha512": "22c79c8cb721c21e28cf4ae4e0c31bece6d4f55ed9234f4b538dbbff0c99eb733b2d6e73eaf66e3d9ed955c57a054470d8bfa740487aff0c470a463b7bd967f3" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published2Times_timestamp_keyrotated/server/metadata/2.root.json000066400000000000000000000047711453140004500305770ustar00rootroot00000000000000{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "751ae9cf8ef0167e182eae200b05a236041b1a2c4e5fa599c304bf7f99a6f1dcb1627dce10f792dbe85481921e548e4edae2567ec41a927affa3b25d0bb3b804" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:13:39Z", "keys": { "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f758af464295e62a1da4d3267be6d13f4aba9c7d52166d01b6bd5b4559496c9d" }, "scheme": "ed25519" }, "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 2 } }client/testdata/Published2Times_timestamp_keyrotated/server/metadata/2.timestamp.json000066400000000000000000000016461453140004500316150ustar00rootroot00000000000000{ "signatures": [ { "keyid": "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "sig": "955181a388d83f9ce358bd5430379b66fa3e65412838e807ded2ef4ac0a9c191a0bdceb572b607b923d7ffbfda9c83c621bc8cc9644a8496730b436e7b332101" }, { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "388320f4ba609a57b74687f5c6ec7b64cfbceeac6040631a93515d4f15021cc033518dfc170b979259f227b250063a377d89be042aec0222ef739b2582200a03" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:13:39Z", "meta": { "snapshot.json": { "hashes": { "sha256": "1ce608f9525f5581f719ed696f6d445ec61ce9a0f97b0c3250bcebb687eb70fe", "sha512": "22c79c8cb721c21e28cf4ae4e0c31bece6d4f55ed9234f4b538dbbff0c99eb733b2d6e73eaf66e3d9ed955c57a054470d8bfa740487aff0c470a463b7bd967f3" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 2 } }client/testdata/Published2Times_timestamp_keyrotated/server/metadata/root.json000066400000000000000000000047711453140004500304370ustar00rootroot00000000000000{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "751ae9cf8ef0167e182eae200b05a236041b1a2c4e5fa599c304bf7f99a6f1dcb1627dce10f792dbe85481921e548e4edae2567ec41a927affa3b25d0bb3b804" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:13:39Z", "keys": { "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f758af464295e62a1da4d3267be6d13f4aba9c7d52166d01b6bd5b4559496c9d" }, "scheme": "ed25519" }, "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 2 } }client/testdata/Published2Times_timestamp_keyrotated/server/metadata/snapshot.json000066400000000000000000000006571453140004500313120ustar00rootroot00000000000000{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "98ca9f817a41745409386dd26a433907349df18d1153b660e8d3cfa01d7dabc35aa06947e9cfac1d93edd7d9276246432fdf647a3357c2185d250d9ddc2be90f" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:13:39Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published2Times_timestamp_keyrotated/server/metadata/targets.json000066400000000000000000000006711453140004500311200ustar00rootroot00000000000000{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "70a93be0db6e7180088029c94283f47e60bfae3001982303e4060d952fe8e2db92e861f66bfcf32a4eb10e5a00900eaa719858945a314259c29b14cf39e73f03" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:13:39Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }client/testdata/Published2Times_timestamp_keyrotated/server/metadata/timestamp.json000066400000000000000000000016461453140004500314550ustar00rootroot00000000000000{ "signatures": [ { "keyid": "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "sig": "955181a388d83f9ce358bd5430379b66fa3e65412838e807ded2ef4ac0a9c191a0bdceb572b607b923d7ffbfda9c83c621bc8cc9644a8496730b436e7b332101" }, { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "388320f4ba609a57b74687f5c6ec7b64cfbceeac6040631a93515d4f15021cc033518dfc170b979259f227b250063a377d89be042aec0222ef739b2582200a03" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:13:39Z", "meta": { "snapshot.json": { "hashes": { "sha256": "1ce608f9525f5581f719ed696f6d445ec61ce9a0f97b0c3250bcebb687eb70fe", "sha512": "22c79c8cb721c21e28cf4ae4e0c31bece6d4f55ed9234f4b538dbbff0c99eb733b2d6e73eaf66e3d9ed955c57a054470d8bfa740487aff0c470a463b7bd967f3" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 2 } }client/testdata/Published3Times_keyrotated_forwardRootVersion/000077500000000000000000000000001453140004500253365ustar00rootroot00000000000000client/testdata/Published3Times_keyrotated_forwardRootVersion/client/000077500000000000000000000000001453140004500266145ustar00rootroot00000000000000client/testdata/Published3Times_keyrotated_forwardRootVersion/client/metadata/000077500000000000000000000000001453140004500303745ustar00rootroot00000000000000client/testdata/Published3Times_keyrotated_forwardRootVersion/client/metadata/current/000077500000000000000000000000001453140004500320565ustar00rootroot00000000000000client/testdata/Published3Times_keyrotated_forwardRootVersion/client/metadata/current/1.root.json000066400000000000000000000042031453140004500340720ustar00rootroot00000000000000{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "7e2a5844a166b2873c86ee92fc2c07319424ddb66a0372797633f9dd5bcb869409eb00384095fd3e8f4fe5ca451da5ef6b3b864fc8c1b3bd1946743f30411205" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:13:39Z", "keys": { "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 1 } }1.snapshot.json000066400000000000000000000006571453140004500347000ustar00rootroot00000000000000client/testdata/Published3Times_keyrotated_forwardRootVersion/client/metadata/current{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "98ca9f817a41745409386dd26a433907349df18d1153b660e8d3cfa01d7dabc35aa06947e9cfac1d93edd7d9276246432fdf647a3357c2185d250d9ddc2be90f" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:13:39Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published3Times_keyrotated_forwardRootVersion/client/metadata/current/1.targets.json000066400000000000000000000006711453140004500345650ustar00rootroot00000000000000{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "70a93be0db6e7180088029c94283f47e60bfae3001982303e4060d952fe8e2db92e861f66bfcf32a4eb10e5a00900eaa719858945a314259c29b14cf39e73f03" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:13:39Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }1.timestamp.json000066400000000000000000000013001453140004500350260ustar00rootroot00000000000000client/testdata/Published3Times_keyrotated_forwardRootVersion/client/metadata/current{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "05e65cc7a4ebf2dce8472f64c2a69dcee977d5bf8dddc36f4547882782e0d1161a5a03102155b29c41cff10b2f31ff947f6c604d07da1a9ff7eb423477a39c08" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:13:39Z", "meta": { "snapshot.json": { "hashes": { "sha256": "1ce608f9525f5581f719ed696f6d445ec61ce9a0f97b0c3250bcebb687eb70fe", "sha512": "22c79c8cb721c21e28cf4ae4e0c31bece6d4f55ed9234f4b538dbbff0c99eb733b2d6e73eaf66e3d9ed955c57a054470d8bfa740487aff0c470a463b7bd967f3" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published3Times_keyrotated_forwardRootVersion/client/metadata/current/root.json000066400000000000000000000042031453140004500337330ustar00rootroot00000000000000{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "7e2a5844a166b2873c86ee92fc2c07319424ddb66a0372797633f9dd5bcb869409eb00384095fd3e8f4fe5ca451da5ef6b3b864fc8c1b3bd1946743f30411205" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:13:39Z", "keys": { "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published3Times_keyrotated_forwardRootVersion/client/metadata/current/snapshot.json000066400000000000000000000006571453140004500346200ustar00rootroot00000000000000{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "98ca9f817a41745409386dd26a433907349df18d1153b660e8d3cfa01d7dabc35aa06947e9cfac1d93edd7d9276246432fdf647a3357c2185d250d9ddc2be90f" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:13:39Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published3Times_keyrotated_forwardRootVersion/client/metadata/current/targets.json000066400000000000000000000006711453140004500344260ustar00rootroot00000000000000{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "70a93be0db6e7180088029c94283f47e60bfae3001982303e4060d952fe8e2db92e861f66bfcf32a4eb10e5a00900eaa719858945a314259c29b14cf39e73f03" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:13:39Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }client/testdata/Published3Times_keyrotated_forwardRootVersion/client/metadata/current/timestamp.json000066400000000000000000000013001453140004500347460ustar00rootroot00000000000000{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "05e65cc7a4ebf2dce8472f64c2a69dcee977d5bf8dddc36f4547882782e0d1161a5a03102155b29c41cff10b2f31ff947f6c604d07da1a9ff7eb423477a39c08" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:13:39Z", "meta": { "snapshot.json": { "hashes": { "sha256": "1ce608f9525f5581f719ed696f6d445ec61ce9a0f97b0c3250bcebb687eb70fe", "sha512": "22c79c8cb721c21e28cf4ae4e0c31bece6d4f55ed9234f4b538dbbff0c99eb733b2d6e73eaf66e3d9ed955c57a054470d8bfa740487aff0c470a463b7bd967f3" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published3Times_keyrotated_forwardRootVersion/client/metadata/previous/000077500000000000000000000000001453140004500322505ustar00rootroot00000000000000client/testdata/Published3Times_keyrotated_forwardRootVersion/client/metadata/previous/1.root.json000066400000000000000000000042031453140004500342640ustar00rootroot00000000000000{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "7e2a5844a166b2873c86ee92fc2c07319424ddb66a0372797633f9dd5bcb869409eb00384095fd3e8f4fe5ca451da5ef6b3b864fc8c1b3bd1946743f30411205" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:13:39Z", "keys": { "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 1 } }1.snapshot.json000066400000000000000000000006571453140004500350720ustar00rootroot00000000000000client/testdata/Published3Times_keyrotated_forwardRootVersion/client/metadata/previous{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "98ca9f817a41745409386dd26a433907349df18d1153b660e8d3cfa01d7dabc35aa06947e9cfac1d93edd7d9276246432fdf647a3357c2185d250d9ddc2be90f" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:13:39Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }1.targets.json000066400000000000000000000006711453140004500347000ustar00rootroot00000000000000client/testdata/Published3Times_keyrotated_forwardRootVersion/client/metadata/previous{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "70a93be0db6e7180088029c94283f47e60bfae3001982303e4060d952fe8e2db92e861f66bfcf32a4eb10e5a00900eaa719858945a314259c29b14cf39e73f03" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:13:39Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }1.timestamp.json000066400000000000000000000013001453140004500352200ustar00rootroot00000000000000client/testdata/Published3Times_keyrotated_forwardRootVersion/client/metadata/previous{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "05e65cc7a4ebf2dce8472f64c2a69dcee977d5bf8dddc36f4547882782e0d1161a5a03102155b29c41cff10b2f31ff947f6c604d07da1a9ff7eb423477a39c08" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:13:39Z", "meta": { "snapshot.json": { "hashes": { "sha256": "1ce608f9525f5581f719ed696f6d445ec61ce9a0f97b0c3250bcebb687eb70fe", "sha512": "22c79c8cb721c21e28cf4ae4e0c31bece6d4f55ed9234f4b538dbbff0c99eb733b2d6e73eaf66e3d9ed955c57a054470d8bfa740487aff0c470a463b7bd967f3" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published3Times_keyrotated_forwardRootVersion/client/metadata/previous/root.json000066400000000000000000000042031453140004500341250ustar00rootroot00000000000000{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "7e2a5844a166b2873c86ee92fc2c07319424ddb66a0372797633f9dd5bcb869409eb00384095fd3e8f4fe5ca451da5ef6b3b864fc8c1b3bd1946743f30411205" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:13:39Z", "keys": { "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published3Times_keyrotated_forwardRootVersion/client/metadata/previous/snapshot.json000066400000000000000000000006571453140004500350120ustar00rootroot00000000000000{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "98ca9f817a41745409386dd26a433907349df18d1153b660e8d3cfa01d7dabc35aa06947e9cfac1d93edd7d9276246432fdf647a3357c2185d250d9ddc2be90f" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:13:39Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published3Times_keyrotated_forwardRootVersion/client/metadata/previous/targets.json000066400000000000000000000006711453140004500346200ustar00rootroot00000000000000{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "70a93be0db6e7180088029c94283f47e60bfae3001982303e4060d952fe8e2db92e861f66bfcf32a4eb10e5a00900eaa719858945a314259c29b14cf39e73f03" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:13:39Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }timestamp.json000066400000000000000000000013001453140004500350610ustar00rootroot00000000000000client/testdata/Published3Times_keyrotated_forwardRootVersion/client/metadata/previous{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "05e65cc7a4ebf2dce8472f64c2a69dcee977d5bf8dddc36f4547882782e0d1161a5a03102155b29c41cff10b2f31ff947f6c604d07da1a9ff7eb423477a39c08" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:13:39Z", "meta": { "snapshot.json": { "hashes": { "sha256": "1ce608f9525f5581f719ed696f6d445ec61ce9a0f97b0c3250bcebb687eb70fe", "sha512": "22c79c8cb721c21e28cf4ae4e0c31bece6d4f55ed9234f4b538dbbff0c99eb733b2d6e73eaf66e3d9ed955c57a054470d8bfa740487aff0c470a463b7bd967f3" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published3Times_keyrotated_forwardRootVersion/hash.txt000066400000000000000000000001001453140004500270110ustar00rootroot0000000000000031049291c7fd0a608a198abff1961a1c8ba43af52adc2db79c274959f2b985a0client/testdata/Published3Times_keyrotated_forwardRootVersion/server/000077500000000000000000000000001453140004500266445ustar00rootroot00000000000000client/testdata/Published3Times_keyrotated_forwardRootVersion/server/metadata.staged/000077500000000000000000000000001453140004500316725ustar00rootroot00000000000000client/testdata/Published3Times_keyrotated_forwardRootVersion/server/metadata.staged/1.root.json000066400000000000000000000042031453140004500337060ustar00rootroot00000000000000{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "7e2a5844a166b2873c86ee92fc2c07319424ddb66a0372797633f9dd5bcb869409eb00384095fd3e8f4fe5ca451da5ef6b3b864fc8c1b3bd1946743f30411205" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:13:39Z", "keys": { "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published3Times_keyrotated_forwardRootVersion/server/metadata.staged/1.snapshot.json000066400000000000000000000006571453140004500345730ustar00rootroot00000000000000{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "98ca9f817a41745409386dd26a433907349df18d1153b660e8d3cfa01d7dabc35aa06947e9cfac1d93edd7d9276246432fdf647a3357c2185d250d9ddc2be90f" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:13:39Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published3Times_keyrotated_forwardRootVersion/server/metadata.staged/1.targets.json000066400000000000000000000006711453140004500344010ustar00rootroot00000000000000{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "70a93be0db6e7180088029c94283f47e60bfae3001982303e4060d952fe8e2db92e861f66bfcf32a4eb10e5a00900eaa719858945a314259c29b14cf39e73f03" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:13:39Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }1.timestamp.json000066400000000000000000000013001453140004500346420ustar00rootroot00000000000000client/testdata/Published3Times_keyrotated_forwardRootVersion/server/metadata.staged{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "05e65cc7a4ebf2dce8472f64c2a69dcee977d5bf8dddc36f4547882782e0d1161a5a03102155b29c41cff10b2f31ff947f6c604d07da1a9ff7eb423477a39c08" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:13:39Z", "meta": { "snapshot.json": { "hashes": { "sha256": "1ce608f9525f5581f719ed696f6d445ec61ce9a0f97b0c3250bcebb687eb70fe", "sha512": "22c79c8cb721c21e28cf4ae4e0c31bece6d4f55ed9234f4b538dbbff0c99eb733b2d6e73eaf66e3d9ed955c57a054470d8bfa740487aff0c470a463b7bd967f3" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published3Times_keyrotated_forwardRootVersion/server/metadata.staged/2.root.json000066400000000000000000000053371453140004500337200ustar00rootroot00000000000000{ "signatures": [ { "keyid": "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "sig": "954ba1348157a7f20cc63d59c3049545d31eee1934eee6db9393b29ce7be5b4497863d6559564fe900f313f03ef27acfb49df1df0e45f6585c8209c561c62f01" }, { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "9a0818b253bd97827a036cde24325174ab93a7293e1326ab578ce8ca3c60c451f7a74757eb88796699e08a6247bbf73fe55a5e4f68d3ccf29bfd07703e905b07" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:13:39Z", "keys": { "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f758af464295e62a1da4d3267be6d13f4aba9c7d52166d01b6bd5b4559496c9d" }, "scheme": "ed25519" }, "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 2 } }client/testdata/Published3Times_keyrotated_forwardRootVersion/server/metadata.staged/3.root.json000066400000000000000000000064731453140004500337230ustar00rootroot00000000000000{ "signatures": [ { "keyid": "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "sig": "779ac2132b1e22ad3a5893ed1ccb72517743a4827bd37218f4b4c95710c3a9ed5a127b1a82ee8bfbc68e19d31574610eb47b290f43b8229fc820de6a98575706" }, { "keyid": "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "sig": "ba5ed25669dbd59354848e288e6fda23b9a86a9e350137a5e6c8beb7a78dad48b148b89cc5cb8c7754e74b47dc66c419957cfe68cb5b2213477cd8b5b5bfe304" }, { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "231490d1052f581842715786bf0692c61c75ef17f37b0dad9432d5464bf9e34f3740ddf103f7afc5bcaa8ade9c1fd310a6393a44de79be38d24e5bdd50190304" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:13:39Z", "keys": { "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f758af464295e62a1da4d3267be6d13f4aba9c7d52166d01b6bd5b4559496c9d" }, "scheme": "ed25519" }, "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "82f52e4503dbb364fabe8e5567f1cf909d4175d45468a021dfe75653db9ac98c" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 3 } }client/testdata/Published3Times_keyrotated_forwardRootVersion/server/metadata.staged/root.json000066400000000000000000000064731453140004500335620ustar00rootroot00000000000000{ "signatures": [ { "keyid": "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "sig": "779ac2132b1e22ad3a5893ed1ccb72517743a4827bd37218f4b4c95710c3a9ed5a127b1a82ee8bfbc68e19d31574610eb47b290f43b8229fc820de6a98575706" }, { "keyid": "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "sig": "ba5ed25669dbd59354848e288e6fda23b9a86a9e350137a5e6c8beb7a78dad48b148b89cc5cb8c7754e74b47dc66c419957cfe68cb5b2213477cd8b5b5bfe304" }, { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "231490d1052f581842715786bf0692c61c75ef17f37b0dad9432d5464bf9e34f3740ddf103f7afc5bcaa8ade9c1fd310a6393a44de79be38d24e5bdd50190304" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:13:39Z", "keys": { "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f758af464295e62a1da4d3267be6d13f4aba9c7d52166d01b6bd5b4559496c9d" }, "scheme": "ed25519" }, "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "82f52e4503dbb364fabe8e5567f1cf909d4175d45468a021dfe75653db9ac98c" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 3 } }client/testdata/Published3Times_keyrotated_forwardRootVersion/server/metadata.staged/snapshot.json000066400000000000000000000006571453140004500344340ustar00rootroot00000000000000{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "98ca9f817a41745409386dd26a433907349df18d1153b660e8d3cfa01d7dabc35aa06947e9cfac1d93edd7d9276246432fdf647a3357c2185d250d9ddc2be90f" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:13:39Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published3Times_keyrotated_forwardRootVersion/server/metadata.staged/targets.json000066400000000000000000000006711453140004500342420ustar00rootroot00000000000000{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "70a93be0db6e7180088029c94283f47e60bfae3001982303e4060d952fe8e2db92e861f66bfcf32a4eb10e5a00900eaa719858945a314259c29b14cf39e73f03" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:13:39Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }client/testdata/Published3Times_keyrotated_forwardRootVersion/server/metadata.staged/timestamp.json000066400000000000000000000013001453140004500345620ustar00rootroot00000000000000{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "05e65cc7a4ebf2dce8472f64c2a69dcee977d5bf8dddc36f4547882782e0d1161a5a03102155b29c41cff10b2f31ff947f6c604d07da1a9ff7eb423477a39c08" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:13:39Z", "meta": { "snapshot.json": { "hashes": { "sha256": "1ce608f9525f5581f719ed696f6d445ec61ce9a0f97b0c3250bcebb687eb70fe", "sha512": "22c79c8cb721c21e28cf4ae4e0c31bece6d4f55ed9234f4b538dbbff0c99eb733b2d6e73eaf66e3d9ed955c57a054470d8bfa740487aff0c470a463b7bd967f3" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published3Times_keyrotated_forwardRootVersion/server/metadata/000077500000000000000000000000001453140004500304245ustar00rootroot00000000000000client/testdata/Published3Times_keyrotated_forwardRootVersion/server/metadata/1.root.json000066400000000000000000000042031453140004500324400ustar00rootroot00000000000000{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "7e2a5844a166b2873c86ee92fc2c07319424ddb66a0372797633f9dd5bcb869409eb00384095fd3e8f4fe5ca451da5ef6b3b864fc8c1b3bd1946743f30411205" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:13:39Z", "keys": { "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published3Times_keyrotated_forwardRootVersion/server/metadata/1.snapshot.json000066400000000000000000000006571453140004500333250ustar00rootroot00000000000000{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "98ca9f817a41745409386dd26a433907349df18d1153b660e8d3cfa01d7dabc35aa06947e9cfac1d93edd7d9276246432fdf647a3357c2185d250d9ddc2be90f" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:13:39Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published3Times_keyrotated_forwardRootVersion/server/metadata/1.targets.json000066400000000000000000000006711453140004500331330ustar00rootroot00000000000000{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "70a93be0db6e7180088029c94283f47e60bfae3001982303e4060d952fe8e2db92e861f66bfcf32a4eb10e5a00900eaa719858945a314259c29b14cf39e73f03" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:13:39Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }client/testdata/Published3Times_keyrotated_forwardRootVersion/server/metadata/1.timestamp.json000066400000000000000000000013001453140004500334530ustar00rootroot00000000000000{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "05e65cc7a4ebf2dce8472f64c2a69dcee977d5bf8dddc36f4547882782e0d1161a5a03102155b29c41cff10b2f31ff947f6c604d07da1a9ff7eb423477a39c08" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:13:39Z", "meta": { "snapshot.json": { "hashes": { "sha256": "1ce608f9525f5581f719ed696f6d445ec61ce9a0f97b0c3250bcebb687eb70fe", "sha512": "22c79c8cb721c21e28cf4ae4e0c31bece6d4f55ed9234f4b538dbbff0c99eb733b2d6e73eaf66e3d9ed955c57a054470d8bfa740487aff0c470a463b7bd967f3" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published3Times_keyrotated_forwardRootVersion/server/metadata/2.root.json000066400000000000000000000064731453140004500324540ustar00rootroot00000000000000{ "signatures": [ { "keyid": "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "sig": "779ac2132b1e22ad3a5893ed1ccb72517743a4827bd37218f4b4c95710c3a9ed5a127b1a82ee8bfbc68e19d31574610eb47b290f43b8229fc820de6a98575706" }, { "keyid": "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "sig": "ba5ed25669dbd59354848e288e6fda23b9a86a9e350137a5e6c8beb7a78dad48b148b89cc5cb8c7754e74b47dc66c419957cfe68cb5b2213477cd8b5b5bfe304" }, { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "231490d1052f581842715786bf0692c61c75ef17f37b0dad9432d5464bf9e34f3740ddf103f7afc5bcaa8ade9c1fd310a6393a44de79be38d24e5bdd50190304" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:13:39Z", "keys": { "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f758af464295e62a1da4d3267be6d13f4aba9c7d52166d01b6bd5b4559496c9d" }, "scheme": "ed25519" }, "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "82f52e4503dbb364fabe8e5567f1cf909d4175d45468a021dfe75653db9ac98c" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 3 } }client/testdata/Published3Times_keyrotated_forwardRootVersion/server/metadata/root.json000066400000000000000000000064731453140004500323140ustar00rootroot00000000000000{ "signatures": [ { "keyid": "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "sig": "779ac2132b1e22ad3a5893ed1ccb72517743a4827bd37218f4b4c95710c3a9ed5a127b1a82ee8bfbc68e19d31574610eb47b290f43b8229fc820de6a98575706" }, { "keyid": "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "sig": "ba5ed25669dbd59354848e288e6fda23b9a86a9e350137a5e6c8beb7a78dad48b148b89cc5cb8c7754e74b47dc66c419957cfe68cb5b2213477cd8b5b5bfe304" }, { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "231490d1052f581842715786bf0692c61c75ef17f37b0dad9432d5464bf9e34f3740ddf103f7afc5bcaa8ade9c1fd310a6393a44de79be38d24e5bdd50190304" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:13:39Z", "keys": { "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f758af464295e62a1da4d3267be6d13f4aba9c7d52166d01b6bd5b4559496c9d" }, "scheme": "ed25519" }, "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "82f52e4503dbb364fabe8e5567f1cf909d4175d45468a021dfe75653db9ac98c" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 3 } }client/testdata/Published3Times_keyrotated_forwardRootVersion/server/metadata/snapshot.json000066400000000000000000000006571453140004500331660ustar00rootroot00000000000000{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "98ca9f817a41745409386dd26a433907349df18d1153b660e8d3cfa01d7dabc35aa06947e9cfac1d93edd7d9276246432fdf647a3357c2185d250d9ddc2be90f" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:13:39Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published3Times_keyrotated_forwardRootVersion/server/metadata/targets.json000066400000000000000000000006711453140004500327740ustar00rootroot00000000000000{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "70a93be0db6e7180088029c94283f47e60bfae3001982303e4060d952fe8e2db92e861f66bfcf32a4eb10e5a00900eaa719858945a314259c29b14cf39e73f03" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:13:39Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }client/testdata/Published3Times_keyrotated_forwardRootVersion/server/metadata/timestamp.json000066400000000000000000000013001453140004500333140ustar00rootroot00000000000000{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "05e65cc7a4ebf2dce8472f64c2a69dcee977d5bf8dddc36f4547882782e0d1161a5a03102155b29c41cff10b2f31ff947f6c604d07da1a9ff7eb423477a39c08" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:13:39Z", "meta": { "snapshot.json": { "hashes": { "sha256": "1ce608f9525f5581f719ed696f6d445ec61ce9a0f97b0c3250bcebb687eb70fe", "sha512": "22c79c8cb721c21e28cf4ae4e0c31bece6d4f55ed9234f4b538dbbff0c99eb733b2d6e73eaf66e3d9ed955c57a054470d8bfa740487aff0c470a463b7bd967f3" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published3Times_keyrotated_initialrootsexpired/000077500000000000000000000000001453140004500255615ustar00rootroot00000000000000client/testdata/Published3Times_keyrotated_initialrootsexpired/client/000077500000000000000000000000001453140004500270375ustar00rootroot00000000000000client/testdata/Published3Times_keyrotated_initialrootsexpired/client/metadata/000077500000000000000000000000001453140004500306175ustar00rootroot00000000000000client/testdata/Published3Times_keyrotated_initialrootsexpired/client/metadata/current/000077500000000000000000000000001453140004500323015ustar00rootroot00000000000000client/testdata/Published3Times_keyrotated_initialrootsexpired/client/metadata/current/1.root.json000066400000000000000000000042031453140004500343150ustar00rootroot00000000000000{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "c981b331d9fd0adec189ec55593735f05ded1d73d7999d67b882f56d2d2a201525d39c20a99cc9c1f03e9425ec607b1f57c7e24b540c0b0c671992cab26e4d07" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2021-09-12T03:13:47Z", "keys": { "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 1 } }1.snapshot.json000066400000000000000000000006571453140004500351230ustar00rootroot00000000000000client/testdata/Published3Times_keyrotated_initialrootsexpired/client/metadata/current{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "ecf4d79a88873efb223361e550b8fc35813ad7bf31d9769908d9495cfb930e03db889dc7419897031cadf39437c9f49b085f384fe1c18be3961704062365db0c" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:13:37Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }1.targets.json000066400000000000000000000006711453140004500347310ustar00rootroot00000000000000client/testdata/Published3Times_keyrotated_initialrootsexpired/client/metadata/current{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "f2cee9e31bda3f88b25b0153bb48a6cb21237e4c41a34bbae95f152b56975085bc04c4978eed6be76a3ead23ff76a1259ff07e7b45b04fb51865c9601713c905" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:13:37Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }1.timestamp.json000066400000000000000000000013001453140004500352510ustar00rootroot00000000000000client/testdata/Published3Times_keyrotated_initialrootsexpired/client/metadata/current{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "35d1087c4874221bc772c8276bd77415d9366833aad4efc3926a8eda1de053843d2c114ac7448f08e3cfd802857c2ab2569d8be186b3cc36e65e458905f0e10e" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:13:37Z", "meta": { "snapshot.json": { "hashes": { "sha256": "d62f650c8097fd4de9e3c8874ef15f7e10fdcc4c32f7a1818e972e8984b8da8a", "sha512": "d9d0c38df27bc2ccc9523cb8d27623cb40b264053233e5e3261d83e2921c790b21accf9d427e36aa4c1939ddbccaaa5e006267f1cdd451606c514135d178dca5" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published3Times_keyrotated_initialrootsexpired/client/metadata/current/root.json000066400000000000000000000042031453140004500341560ustar00rootroot00000000000000{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "c981b331d9fd0adec189ec55593735f05ded1d73d7999d67b882f56d2d2a201525d39c20a99cc9c1f03e9425ec607b1f57c7e24b540c0b0c671992cab26e4d07" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2021-09-12T03:13:47Z", "keys": { "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published3Times_keyrotated_initialrootsexpired/client/metadata/current/snapshot.json000066400000000000000000000006571453140004500350430ustar00rootroot00000000000000{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "ecf4d79a88873efb223361e550b8fc35813ad7bf31d9769908d9495cfb930e03db889dc7419897031cadf39437c9f49b085f384fe1c18be3961704062365db0c" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:13:37Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published3Times_keyrotated_initialrootsexpired/client/metadata/current/targets.json000066400000000000000000000006711453140004500346510ustar00rootroot00000000000000{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "f2cee9e31bda3f88b25b0153bb48a6cb21237e4c41a34bbae95f152b56975085bc04c4978eed6be76a3ead23ff76a1259ff07e7b45b04fb51865c9601713c905" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:13:37Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }timestamp.json000066400000000000000000000013001453140004500351120ustar00rootroot00000000000000client/testdata/Published3Times_keyrotated_initialrootsexpired/client/metadata/current{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "35d1087c4874221bc772c8276bd77415d9366833aad4efc3926a8eda1de053843d2c114ac7448f08e3cfd802857c2ab2569d8be186b3cc36e65e458905f0e10e" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:13:37Z", "meta": { "snapshot.json": { "hashes": { "sha256": "d62f650c8097fd4de9e3c8874ef15f7e10fdcc4c32f7a1818e972e8984b8da8a", "sha512": "d9d0c38df27bc2ccc9523cb8d27623cb40b264053233e5e3261d83e2921c790b21accf9d427e36aa4c1939ddbccaaa5e006267f1cdd451606c514135d178dca5" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published3Times_keyrotated_initialrootsexpired/client/metadata/previous/000077500000000000000000000000001453140004500324735ustar00rootroot00000000000000client/testdata/Published3Times_keyrotated_initialrootsexpired/client/metadata/previous/1.root.json000066400000000000000000000042031453140004500345070ustar00rootroot00000000000000{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "c981b331d9fd0adec189ec55593735f05ded1d73d7999d67b882f56d2d2a201525d39c20a99cc9c1f03e9425ec607b1f57c7e24b540c0b0c671992cab26e4d07" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2021-09-12T03:13:47Z", "keys": { "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 1 } }1.snapshot.json000066400000000000000000000006571453140004500353150ustar00rootroot00000000000000client/testdata/Published3Times_keyrotated_initialrootsexpired/client/metadata/previous{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "ecf4d79a88873efb223361e550b8fc35813ad7bf31d9769908d9495cfb930e03db889dc7419897031cadf39437c9f49b085f384fe1c18be3961704062365db0c" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:13:37Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }1.targets.json000066400000000000000000000006711453140004500351230ustar00rootroot00000000000000client/testdata/Published3Times_keyrotated_initialrootsexpired/client/metadata/previous{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "f2cee9e31bda3f88b25b0153bb48a6cb21237e4c41a34bbae95f152b56975085bc04c4978eed6be76a3ead23ff76a1259ff07e7b45b04fb51865c9601713c905" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:13:37Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }1.timestamp.json000066400000000000000000000013001453140004500354430ustar00rootroot00000000000000client/testdata/Published3Times_keyrotated_initialrootsexpired/client/metadata/previous{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "35d1087c4874221bc772c8276bd77415d9366833aad4efc3926a8eda1de053843d2c114ac7448f08e3cfd802857c2ab2569d8be186b3cc36e65e458905f0e10e" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:13:37Z", "meta": { "snapshot.json": { "hashes": { "sha256": "d62f650c8097fd4de9e3c8874ef15f7e10fdcc4c32f7a1818e972e8984b8da8a", "sha512": "d9d0c38df27bc2ccc9523cb8d27623cb40b264053233e5e3261d83e2921c790b21accf9d427e36aa4c1939ddbccaaa5e006267f1cdd451606c514135d178dca5" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published3Times_keyrotated_initialrootsexpired/client/metadata/previous/root.json000066400000000000000000000042031453140004500343500ustar00rootroot00000000000000{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "c981b331d9fd0adec189ec55593735f05ded1d73d7999d67b882f56d2d2a201525d39c20a99cc9c1f03e9425ec607b1f57c7e24b540c0b0c671992cab26e4d07" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2021-09-12T03:13:47Z", "keys": { "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 1 } }snapshot.json000066400000000000000000000006571453140004500351560ustar00rootroot00000000000000client/testdata/Published3Times_keyrotated_initialrootsexpired/client/metadata/previous{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "ecf4d79a88873efb223361e550b8fc35813ad7bf31d9769908d9495cfb930e03db889dc7419897031cadf39437c9f49b085f384fe1c18be3961704062365db0c" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:13:37Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published3Times_keyrotated_initialrootsexpired/client/metadata/previous/targets.json000066400000000000000000000006711453140004500350430ustar00rootroot00000000000000{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "f2cee9e31bda3f88b25b0153bb48a6cb21237e4c41a34bbae95f152b56975085bc04c4978eed6be76a3ead23ff76a1259ff07e7b45b04fb51865c9601713c905" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:13:37Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }timestamp.json000066400000000000000000000013001453140004500353040ustar00rootroot00000000000000client/testdata/Published3Times_keyrotated_initialrootsexpired/client/metadata/previous{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "35d1087c4874221bc772c8276bd77415d9366833aad4efc3926a8eda1de053843d2c114ac7448f08e3cfd802857c2ab2569d8be186b3cc36e65e458905f0e10e" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:13:37Z", "meta": { "snapshot.json": { "hashes": { "sha256": "d62f650c8097fd4de9e3c8874ef15f7e10fdcc4c32f7a1818e972e8984b8da8a", "sha512": "d9d0c38df27bc2ccc9523cb8d27623cb40b264053233e5e3261d83e2921c790b21accf9d427e36aa4c1939ddbccaaa5e006267f1cdd451606c514135d178dca5" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published3Times_keyrotated_initialrootsexpired/hash.txt000066400000000000000000000001001453140004500272340ustar00rootroot000000000000007dcc997b6faa38805ccb1c5ce6024f59712b26461b4954dfb3c241df735db994client/testdata/Published3Times_keyrotated_initialrootsexpired/server/000077500000000000000000000000001453140004500270675ustar00rootroot00000000000000client/testdata/Published3Times_keyrotated_initialrootsexpired/server/metadata.staged/000077500000000000000000000000001453140004500321155ustar00rootroot00000000000000client/testdata/Published3Times_keyrotated_initialrootsexpired/server/metadata.staged/1.root.json000066400000000000000000000042031453140004500341310ustar00rootroot00000000000000{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "c981b331d9fd0adec189ec55593735f05ded1d73d7999d67b882f56d2d2a201525d39c20a99cc9c1f03e9425ec607b1f57c7e24b540c0b0c671992cab26e4d07" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2021-09-12T03:13:47Z", "keys": { "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 1 } }1.snapshot.json000066400000000000000000000006571453140004500347370ustar00rootroot00000000000000client/testdata/Published3Times_keyrotated_initialrootsexpired/server/metadata.staged{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "ecf4d79a88873efb223361e550b8fc35813ad7bf31d9769908d9495cfb930e03db889dc7419897031cadf39437c9f49b085f384fe1c18be3961704062365db0c" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:13:37Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published3Times_keyrotated_initialrootsexpired/server/metadata.staged/1.targets.json000066400000000000000000000006711453140004500346240ustar00rootroot00000000000000{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "f2cee9e31bda3f88b25b0153bb48a6cb21237e4c41a34bbae95f152b56975085bc04c4978eed6be76a3ead23ff76a1259ff07e7b45b04fb51865c9601713c905" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:13:37Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }1.timestamp.json000066400000000000000000000013001453140004500350650ustar00rootroot00000000000000client/testdata/Published3Times_keyrotated_initialrootsexpired/server/metadata.staged{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "35d1087c4874221bc772c8276bd77415d9366833aad4efc3926a8eda1de053843d2c114ac7448f08e3cfd802857c2ab2569d8be186b3cc36e65e458905f0e10e" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:13:37Z", "meta": { "snapshot.json": { "hashes": { "sha256": "d62f650c8097fd4de9e3c8874ef15f7e10fdcc4c32f7a1818e972e8984b8da8a", "sha512": "d9d0c38df27bc2ccc9523cb8d27623cb40b264053233e5e3261d83e2921c790b21accf9d427e36aa4c1939ddbccaaa5e006267f1cdd451606c514135d178dca5" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published3Times_keyrotated_initialrootsexpired/server/metadata.staged/2.root.json000066400000000000000000000053371453140004500341430ustar00rootroot00000000000000{ "signatures": [ { "keyid": "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "sig": "8f6e2a5a714d0157ab60191cdd2cb6dcb101f00c95b985bfaafd85637e94978a6493ea89535c8e37c4ac5f236c4329ba63e7eac721def60f03d799ae9cbe8204" }, { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "2e6b955314910c3f3b91e9d7b6673afb6b6dcaef28b2a86172f4032228a96585b5f1cbb0182f64555329d724bde28980e9f72dfae019f777b256e9f9dabb620a" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2021-09-12T03:13:47Z", "keys": { "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f758af464295e62a1da4d3267be6d13f4aba9c7d52166d01b6bd5b4559496c9d" }, "scheme": "ed25519" }, "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 2 } }client/testdata/Published3Times_keyrotated_initialrootsexpired/server/metadata.staged/3.root.json000066400000000000000000000064731453140004500341460ustar00rootroot00000000000000{ "signatures": [ { "keyid": "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "sig": "72c33cb0f06b935b61441ab63da4d2e4b207c5051f70b962c546efb7ebcb60890e6a96a95f02f368524687296b09d34168f4b9b5ee2b49a2b693476cbafa530f" }, { "keyid": "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "sig": "8814eeb64bd2e7b88b6f4847085bb1b768d2ed33c0c53292d2a490074a6293be13fd5a03f35c685a17eccfe6f209e6cebf884cffcf706e9395793e23d56cdc0c" }, { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "cfae718a6ddda42bfb231fc7d6f5db98bbf80303c31a8ae38c303c61e001895cc6e433afe42c7343fb82eed7060f01dc9634829b4af39562b2c389b4d2c9c903" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:13:37Z", "keys": { "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f758af464295e62a1da4d3267be6d13f4aba9c7d52166d01b6bd5b4559496c9d" }, "scheme": "ed25519" }, "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "82f52e4503dbb364fabe8e5567f1cf909d4175d45468a021dfe75653db9ac98c" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 3 } }client/testdata/Published3Times_keyrotated_initialrootsexpired/server/metadata.staged/root.json000066400000000000000000000064731453140004500340050ustar00rootroot00000000000000{ "signatures": [ { "keyid": "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "sig": "72c33cb0f06b935b61441ab63da4d2e4b207c5051f70b962c546efb7ebcb60890e6a96a95f02f368524687296b09d34168f4b9b5ee2b49a2b693476cbafa530f" }, { "keyid": "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "sig": "8814eeb64bd2e7b88b6f4847085bb1b768d2ed33c0c53292d2a490074a6293be13fd5a03f35c685a17eccfe6f209e6cebf884cffcf706e9395793e23d56cdc0c" }, { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "cfae718a6ddda42bfb231fc7d6f5db98bbf80303c31a8ae38c303c61e001895cc6e433afe42c7343fb82eed7060f01dc9634829b4af39562b2c389b4d2c9c903" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:13:37Z", "keys": { "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f758af464295e62a1da4d3267be6d13f4aba9c7d52166d01b6bd5b4559496c9d" }, "scheme": "ed25519" }, "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "82f52e4503dbb364fabe8e5567f1cf909d4175d45468a021dfe75653db9ac98c" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 3 } }client/testdata/Published3Times_keyrotated_initialrootsexpired/server/metadata.staged/snapshot.json000066400000000000000000000006571453140004500346570ustar00rootroot00000000000000{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "ecf4d79a88873efb223361e550b8fc35813ad7bf31d9769908d9495cfb930e03db889dc7419897031cadf39437c9f49b085f384fe1c18be3961704062365db0c" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:13:37Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published3Times_keyrotated_initialrootsexpired/server/metadata.staged/targets.json000066400000000000000000000006711453140004500344650ustar00rootroot00000000000000{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "f2cee9e31bda3f88b25b0153bb48a6cb21237e4c41a34bbae95f152b56975085bc04c4978eed6be76a3ead23ff76a1259ff07e7b45b04fb51865c9601713c905" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:13:37Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }client/testdata/Published3Times_keyrotated_initialrootsexpired/server/metadata.staged/timestamp.json000066400000000000000000000013001453140004500350050ustar00rootroot00000000000000{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "35d1087c4874221bc772c8276bd77415d9366833aad4efc3926a8eda1de053843d2c114ac7448f08e3cfd802857c2ab2569d8be186b3cc36e65e458905f0e10e" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:13:37Z", "meta": { "snapshot.json": { "hashes": { "sha256": "d62f650c8097fd4de9e3c8874ef15f7e10fdcc4c32f7a1818e972e8984b8da8a", "sha512": "d9d0c38df27bc2ccc9523cb8d27623cb40b264053233e5e3261d83e2921c790b21accf9d427e36aa4c1939ddbccaaa5e006267f1cdd451606c514135d178dca5" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published3Times_keyrotated_initialrootsexpired/server/metadata/000077500000000000000000000000001453140004500306475ustar00rootroot00000000000000client/testdata/Published3Times_keyrotated_initialrootsexpired/server/metadata/1.root.json000066400000000000000000000042031453140004500326630ustar00rootroot00000000000000{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "c981b331d9fd0adec189ec55593735f05ded1d73d7999d67b882f56d2d2a201525d39c20a99cc9c1f03e9425ec607b1f57c7e24b540c0b0c671992cab26e4d07" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2021-09-12T03:13:47Z", "keys": { "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published3Times_keyrotated_initialrootsexpired/server/metadata/1.snapshot.json000066400000000000000000000006571453140004500335500ustar00rootroot00000000000000{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "ecf4d79a88873efb223361e550b8fc35813ad7bf31d9769908d9495cfb930e03db889dc7419897031cadf39437c9f49b085f384fe1c18be3961704062365db0c" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:13:37Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published3Times_keyrotated_initialrootsexpired/server/metadata/1.targets.json000066400000000000000000000006711453140004500333560ustar00rootroot00000000000000{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "f2cee9e31bda3f88b25b0153bb48a6cb21237e4c41a34bbae95f152b56975085bc04c4978eed6be76a3ead23ff76a1259ff07e7b45b04fb51865c9601713c905" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:13:37Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }client/testdata/Published3Times_keyrotated_initialrootsexpired/server/metadata/1.timestamp.json000066400000000000000000000013001453140004500336760ustar00rootroot00000000000000{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "35d1087c4874221bc772c8276bd77415d9366833aad4efc3926a8eda1de053843d2c114ac7448f08e3cfd802857c2ab2569d8be186b3cc36e65e458905f0e10e" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:13:37Z", "meta": { "snapshot.json": { "hashes": { "sha256": "d62f650c8097fd4de9e3c8874ef15f7e10fdcc4c32f7a1818e972e8984b8da8a", "sha512": "d9d0c38df27bc2ccc9523cb8d27623cb40b264053233e5e3261d83e2921c790b21accf9d427e36aa4c1939ddbccaaa5e006267f1cdd451606c514135d178dca5" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published3Times_keyrotated_initialrootsexpired/server/metadata/2.root.json000066400000000000000000000053371453140004500326750ustar00rootroot00000000000000{ "signatures": [ { "keyid": "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "sig": "8f6e2a5a714d0157ab60191cdd2cb6dcb101f00c95b985bfaafd85637e94978a6493ea89535c8e37c4ac5f236c4329ba63e7eac721def60f03d799ae9cbe8204" }, { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "2e6b955314910c3f3b91e9d7b6673afb6b6dcaef28b2a86172f4032228a96585b5f1cbb0182f64555329d724bde28980e9f72dfae019f777b256e9f9dabb620a" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2021-09-12T03:13:47Z", "keys": { "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f758af464295e62a1da4d3267be6d13f4aba9c7d52166d01b6bd5b4559496c9d" }, "scheme": "ed25519" }, "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 2 } }client/testdata/Published3Times_keyrotated_initialrootsexpired/server/metadata/3.root.json000066400000000000000000000064731453140004500327000ustar00rootroot00000000000000{ "signatures": [ { "keyid": "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "sig": "72c33cb0f06b935b61441ab63da4d2e4b207c5051f70b962c546efb7ebcb60890e6a96a95f02f368524687296b09d34168f4b9b5ee2b49a2b693476cbafa530f" }, { "keyid": "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "sig": "8814eeb64bd2e7b88b6f4847085bb1b768d2ed33c0c53292d2a490074a6293be13fd5a03f35c685a17eccfe6f209e6cebf884cffcf706e9395793e23d56cdc0c" }, { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "cfae718a6ddda42bfb231fc7d6f5db98bbf80303c31a8ae38c303c61e001895cc6e433afe42c7343fb82eed7060f01dc9634829b4af39562b2c389b4d2c9c903" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:13:37Z", "keys": { "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f758af464295e62a1da4d3267be6d13f4aba9c7d52166d01b6bd5b4559496c9d" }, "scheme": "ed25519" }, "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "82f52e4503dbb364fabe8e5567f1cf909d4175d45468a021dfe75653db9ac98c" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 3 } }client/testdata/Published3Times_keyrotated_initialrootsexpired/server/metadata/root.json000066400000000000000000000064731453140004500325370ustar00rootroot00000000000000{ "signatures": [ { "keyid": "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "sig": "72c33cb0f06b935b61441ab63da4d2e4b207c5051f70b962c546efb7ebcb60890e6a96a95f02f368524687296b09d34168f4b9b5ee2b49a2b693476cbafa530f" }, { "keyid": "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "sig": "8814eeb64bd2e7b88b6f4847085bb1b768d2ed33c0c53292d2a490074a6293be13fd5a03f35c685a17eccfe6f209e6cebf884cffcf706e9395793e23d56cdc0c" }, { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "cfae718a6ddda42bfb231fc7d6f5db98bbf80303c31a8ae38c303c61e001895cc6e433afe42c7343fb82eed7060f01dc9634829b4af39562b2c389b4d2c9c903" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:13:37Z", "keys": { "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f758af464295e62a1da4d3267be6d13f4aba9c7d52166d01b6bd5b4559496c9d" }, "scheme": "ed25519" }, "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "82f52e4503dbb364fabe8e5567f1cf909d4175d45468a021dfe75653db9ac98c" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 3 } }client/testdata/Published3Times_keyrotated_initialrootsexpired/server/metadata/snapshot.json000066400000000000000000000006571453140004500334110ustar00rootroot00000000000000{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "ecf4d79a88873efb223361e550b8fc35813ad7bf31d9769908d9495cfb930e03db889dc7419897031cadf39437c9f49b085f384fe1c18be3961704062365db0c" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:13:37Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published3Times_keyrotated_initialrootsexpired/server/metadata/targets.json000066400000000000000000000006711453140004500332170ustar00rootroot00000000000000{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "f2cee9e31bda3f88b25b0153bb48a6cb21237e4c41a34bbae95f152b56975085bc04c4978eed6be76a3ead23ff76a1259ff07e7b45b04fb51865c9601713c905" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:13:37Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }client/testdata/Published3Times_keyrotated_initialrootsexpired/server/metadata/timestamp.json000066400000000000000000000013001453140004500335370ustar00rootroot00000000000000{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "35d1087c4874221bc772c8276bd77415d9366833aad4efc3926a8eda1de053843d2c114ac7448f08e3cfd802857c2ab2569d8be186b3cc36e65e458905f0e10e" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:13:37Z", "meta": { "snapshot.json": { "hashes": { "sha256": "d62f650c8097fd4de9e3c8874ef15f7e10fdcc4c32f7a1818e972e8984b8da8a", "sha512": "d9d0c38df27bc2ccc9523cb8d27623cb40b264053233e5e3261d83e2921c790b21accf9d427e36aa4c1939ddbccaaa5e006267f1cdd451606c514135d178dca5" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published3Times_keyrotated_initialrootsexpired_clientversionis2/000077500000000000000000000000001453140004500311435ustar00rootroot00000000000000client/testdata/Published3Times_keyrotated_initialrootsexpired_clientversionis2/client/000077500000000000000000000000001453140004500324215ustar00rootroot00000000000000client/testdata/Published3Times_keyrotated_initialrootsexpired_clientversionis2/client/metadata/000077500000000000000000000000001453140004500342015ustar00rootroot00000000000000current/000077500000000000000000000000001453140004500356045ustar00rootroot00000000000000client/testdata/Published3Times_keyrotated_initialrootsexpired_clientversionis2/client/metadata1.root.json000066400000000000000000000042031453140004500376200ustar00rootroot00000000000000client/testdata/Published3Times_keyrotated_initialrootsexpired_clientversionis2/client/metadata/current{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "1a1565cf213002416129b7ff558fbe0b4b296984c756e5f67fe10e8b6dae5ccd372b17c9524fd2a92fe79df50c2845baa57a3447e2422bf5dc1c35e00e5e1003" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2021-09-12T03:13:48Z", "keys": { "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 1 } }1.snapshot.json000066400000000000000000000006571453140004500405050ustar00rootroot00000000000000client/testdata/Published3Times_keyrotated_initialrootsexpired_clientversionis2/client/metadata/current{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "03f7436d986edb991e9812b64fa7a93229e2e73ab419e29feab828a311a5aace9b385ed48d44f602af25b8e3070eaf948c89bc59ab75fb8a1231882df1ef4a05" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:13:38Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }1.targets.json000066400000000000000000000006711453140004500403130ustar00rootroot00000000000000client/testdata/Published3Times_keyrotated_initialrootsexpired_clientversionis2/client/metadata/current{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "c5d60d0018367fda4bbaa0ebb3b0ee0c2cdbac3bdb233369590f3055ad9d4299fde6a8a8824ed3f38129ca6ee3fa67075b6591169aa1819a6238ea1821dbaa03" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:13:38Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }1.timestamp.json000066400000000000000000000013001453140004500406330ustar00rootroot00000000000000client/testdata/Published3Times_keyrotated_initialrootsexpired_clientversionis2/client/metadata/current{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "c5a41119ccf10925e7c065c10c14d3690b6c4071fa4f2f7e3bc5944e375ee28ccf81721c9f506d788e0cc9b3d335791a4553f3f1e39873903f00a449a3de5004" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:13:38Z", "meta": { "snapshot.json": { "hashes": { "sha256": "700c180d3a3d6e2fa86f4bb072d7f81f39f1cc1dc0df32bb6b5e89a715f743d2", "sha512": "5b21d7bda6e29381e7f095204eddd78137cc14416585c3e9f8915ce21ff1b17b646932b37d7a1147cc0f1d6b7f6ea75d91f6b63d7e229fe73c0b4f1845c40f41" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }2.root.json000066400000000000000000000053371453140004500376320ustar00rootroot00000000000000client/testdata/Published3Times_keyrotated_initialrootsexpired_clientversionis2/client/metadata/current{ "signatures": [ { "keyid": "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "sig": "0e22c864c9537c692cf66467310173896c3416d9b48a8c33f33c6f6b0117cd77c194f5d4695fe0f81efd77d3ebfe70d33421f4859374c133de8a247b51625906" }, { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "a40c02d3ea080e4a46a09796926040127a7d8ed5f91ac2acee3a995b8eca403cc787b33f56840983f6975e886d3d5ceb157e1fa999b4ed699d70031a470fc508" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2021-09-12T03:13:48Z", "keys": { "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f758af464295e62a1da4d3267be6d13f4aba9c7d52166d01b6bd5b4559496c9d" }, "scheme": "ed25519" }, "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 2 } }root.json000066400000000000000000000053371453140004500374720ustar00rootroot00000000000000client/testdata/Published3Times_keyrotated_initialrootsexpired_clientversionis2/client/metadata/current{ "signatures": [ { "keyid": "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "sig": "0e22c864c9537c692cf66467310173896c3416d9b48a8c33f33c6f6b0117cd77c194f5d4695fe0f81efd77d3ebfe70d33421f4859374c133de8a247b51625906" }, { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "a40c02d3ea080e4a46a09796926040127a7d8ed5f91ac2acee3a995b8eca403cc787b33f56840983f6975e886d3d5ceb157e1fa999b4ed699d70031a470fc508" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2021-09-12T03:13:48Z", "keys": { "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f758af464295e62a1da4d3267be6d13f4aba9c7d52166d01b6bd5b4559496c9d" }, "scheme": "ed25519" }, "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 2 } }snapshot.json000066400000000000000000000006571453140004500403460ustar00rootroot00000000000000client/testdata/Published3Times_keyrotated_initialrootsexpired_clientversionis2/client/metadata/current{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "03f7436d986edb991e9812b64fa7a93229e2e73ab419e29feab828a311a5aace9b385ed48d44f602af25b8e3070eaf948c89bc59ab75fb8a1231882df1ef4a05" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:13:38Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }targets.json000066400000000000000000000006711453140004500401540ustar00rootroot00000000000000client/testdata/Published3Times_keyrotated_initialrootsexpired_clientversionis2/client/metadata/current{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "c5d60d0018367fda4bbaa0ebb3b0ee0c2cdbac3bdb233369590f3055ad9d4299fde6a8a8824ed3f38129ca6ee3fa67075b6591169aa1819a6238ea1821dbaa03" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:13:38Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }timestamp.json000066400000000000000000000013001453140004500404740ustar00rootroot00000000000000client/testdata/Published3Times_keyrotated_initialrootsexpired_clientversionis2/client/metadata/current{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "c5a41119ccf10925e7c065c10c14d3690b6c4071fa4f2f7e3bc5944e375ee28ccf81721c9f506d788e0cc9b3d335791a4553f3f1e39873903f00a449a3de5004" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:13:38Z", "meta": { "snapshot.json": { "hashes": { "sha256": "700c180d3a3d6e2fa86f4bb072d7f81f39f1cc1dc0df32bb6b5e89a715f743d2", "sha512": "5b21d7bda6e29381e7f095204eddd78137cc14416585c3e9f8915ce21ff1b17b646932b37d7a1147cc0f1d6b7f6ea75d91f6b63d7e229fe73c0b4f1845c40f41" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }previous/000077500000000000000000000000001453140004500357765ustar00rootroot00000000000000client/testdata/Published3Times_keyrotated_initialrootsexpired_clientversionis2/client/metadata1.root.json000066400000000000000000000042031453140004500400120ustar00rootroot00000000000000client/testdata/Published3Times_keyrotated_initialrootsexpired_clientversionis2/client/metadata/previous{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "1a1565cf213002416129b7ff558fbe0b4b296984c756e5f67fe10e8b6dae5ccd372b17c9524fd2a92fe79df50c2845baa57a3447e2422bf5dc1c35e00e5e1003" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2021-09-12T03:13:48Z", "keys": { "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 1 } }1.snapshot.json000066400000000000000000000006571453140004500406770ustar00rootroot00000000000000client/testdata/Published3Times_keyrotated_initialrootsexpired_clientversionis2/client/metadata/previous{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "03f7436d986edb991e9812b64fa7a93229e2e73ab419e29feab828a311a5aace9b385ed48d44f602af25b8e3070eaf948c89bc59ab75fb8a1231882df1ef4a05" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:13:38Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }1.targets.json000066400000000000000000000006711453140004500405050ustar00rootroot00000000000000client/testdata/Published3Times_keyrotated_initialrootsexpired_clientversionis2/client/metadata/previous{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "c5d60d0018367fda4bbaa0ebb3b0ee0c2cdbac3bdb233369590f3055ad9d4299fde6a8a8824ed3f38129ca6ee3fa67075b6591169aa1819a6238ea1821dbaa03" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:13:38Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }1.timestamp.json000066400000000000000000000013001453140004500410250ustar00rootroot00000000000000client/testdata/Published3Times_keyrotated_initialrootsexpired_clientversionis2/client/metadata/previous{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "c5a41119ccf10925e7c065c10c14d3690b6c4071fa4f2f7e3bc5944e375ee28ccf81721c9f506d788e0cc9b3d335791a4553f3f1e39873903f00a449a3de5004" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:13:38Z", "meta": { "snapshot.json": { "hashes": { "sha256": "700c180d3a3d6e2fa86f4bb072d7f81f39f1cc1dc0df32bb6b5e89a715f743d2", "sha512": "5b21d7bda6e29381e7f095204eddd78137cc14416585c3e9f8915ce21ff1b17b646932b37d7a1147cc0f1d6b7f6ea75d91f6b63d7e229fe73c0b4f1845c40f41" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }2.root.json000066400000000000000000000053371453140004500400240ustar00rootroot00000000000000client/testdata/Published3Times_keyrotated_initialrootsexpired_clientversionis2/client/metadata/previous{ "signatures": [ { "keyid": "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "sig": "0e22c864c9537c692cf66467310173896c3416d9b48a8c33f33c6f6b0117cd77c194f5d4695fe0f81efd77d3ebfe70d33421f4859374c133de8a247b51625906" }, { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "a40c02d3ea080e4a46a09796926040127a7d8ed5f91ac2acee3a995b8eca403cc787b33f56840983f6975e886d3d5ceb157e1fa999b4ed699d70031a470fc508" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2021-09-12T03:13:48Z", "keys": { "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f758af464295e62a1da4d3267be6d13f4aba9c7d52166d01b6bd5b4559496c9d" }, "scheme": "ed25519" }, "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 2 } }root.json000066400000000000000000000053371453140004500376640ustar00rootroot00000000000000client/testdata/Published3Times_keyrotated_initialrootsexpired_clientversionis2/client/metadata/previous{ "signatures": [ { "keyid": "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "sig": "0e22c864c9537c692cf66467310173896c3416d9b48a8c33f33c6f6b0117cd77c194f5d4695fe0f81efd77d3ebfe70d33421f4859374c133de8a247b51625906" }, { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "a40c02d3ea080e4a46a09796926040127a7d8ed5f91ac2acee3a995b8eca403cc787b33f56840983f6975e886d3d5ceb157e1fa999b4ed699d70031a470fc508" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2021-09-12T03:13:48Z", "keys": { "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f758af464295e62a1da4d3267be6d13f4aba9c7d52166d01b6bd5b4559496c9d" }, "scheme": "ed25519" }, "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 2 } }snapshot.json000066400000000000000000000006571453140004500405400ustar00rootroot00000000000000client/testdata/Published3Times_keyrotated_initialrootsexpired_clientversionis2/client/metadata/previous{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "03f7436d986edb991e9812b64fa7a93229e2e73ab419e29feab828a311a5aace9b385ed48d44f602af25b8e3070eaf948c89bc59ab75fb8a1231882df1ef4a05" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:13:38Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }targets.json000066400000000000000000000006711453140004500403460ustar00rootroot00000000000000client/testdata/Published3Times_keyrotated_initialrootsexpired_clientversionis2/client/metadata/previous{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "c5d60d0018367fda4bbaa0ebb3b0ee0c2cdbac3bdb233369590f3055ad9d4299fde6a8a8824ed3f38129ca6ee3fa67075b6591169aa1819a6238ea1821dbaa03" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:13:38Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }timestamp.json000066400000000000000000000013001453140004500406660ustar00rootroot00000000000000client/testdata/Published3Times_keyrotated_initialrootsexpired_clientversionis2/client/metadata/previous{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "c5a41119ccf10925e7c065c10c14d3690b6c4071fa4f2f7e3bc5944e375ee28ccf81721c9f506d788e0cc9b3d335791a4553f3f1e39873903f00a449a3de5004" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:13:38Z", "meta": { "snapshot.json": { "hashes": { "sha256": "700c180d3a3d6e2fa86f4bb072d7f81f39f1cc1dc0df32bb6b5e89a715f743d2", "sha512": "5b21d7bda6e29381e7f095204eddd78137cc14416585c3e9f8915ce21ff1b17b646932b37d7a1147cc0f1d6b7f6ea75d91f6b63d7e229fe73c0b4f1845c40f41" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published3Times_keyrotated_initialrootsexpired_clientversionis2/hash.txt000066400000000000000000000001001453140004500326160ustar00rootroot00000000000000f8e3fe50a810a933f4895e479fc7352d60762276a99b6554073a0f68316dbd6aclient/testdata/Published3Times_keyrotated_initialrootsexpired_clientversionis2/server/000077500000000000000000000000001453140004500324515ustar00rootroot00000000000000metadata.staged/000077500000000000000000000000001453140004500354205ustar00rootroot00000000000000client/testdata/Published3Times_keyrotated_initialrootsexpired_clientversionis2/server1.root.json000066400000000000000000000042031453140004500374340ustar00rootroot00000000000000client/testdata/Published3Times_keyrotated_initialrootsexpired_clientversionis2/server/metadata.staged{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "1a1565cf213002416129b7ff558fbe0b4b296984c756e5f67fe10e8b6dae5ccd372b17c9524fd2a92fe79df50c2845baa57a3447e2422bf5dc1c35e00e5e1003" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2021-09-12T03:13:48Z", "keys": { "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 1 } }1.snapshot.json000066400000000000000000000006571453140004500403210ustar00rootroot00000000000000client/testdata/Published3Times_keyrotated_initialrootsexpired_clientversionis2/server/metadata.staged{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "03f7436d986edb991e9812b64fa7a93229e2e73ab419e29feab828a311a5aace9b385ed48d44f602af25b8e3070eaf948c89bc59ab75fb8a1231882df1ef4a05" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:13:38Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }1.targets.json000066400000000000000000000006711453140004500401270ustar00rootroot00000000000000client/testdata/Published3Times_keyrotated_initialrootsexpired_clientversionis2/server/metadata.staged{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "c5d60d0018367fda4bbaa0ebb3b0ee0c2cdbac3bdb233369590f3055ad9d4299fde6a8a8824ed3f38129ca6ee3fa67075b6591169aa1819a6238ea1821dbaa03" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:13:38Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }1.timestamp.json000066400000000000000000000013001453140004500404470ustar00rootroot00000000000000client/testdata/Published3Times_keyrotated_initialrootsexpired_clientversionis2/server/metadata.staged{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "c5a41119ccf10925e7c065c10c14d3690b6c4071fa4f2f7e3bc5944e375ee28ccf81721c9f506d788e0cc9b3d335791a4553f3f1e39873903f00a449a3de5004" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:13:38Z", "meta": { "snapshot.json": { "hashes": { "sha256": "700c180d3a3d6e2fa86f4bb072d7f81f39f1cc1dc0df32bb6b5e89a715f743d2", "sha512": "5b21d7bda6e29381e7f095204eddd78137cc14416585c3e9f8915ce21ff1b17b646932b37d7a1147cc0f1d6b7f6ea75d91f6b63d7e229fe73c0b4f1845c40f41" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }2.root.json000066400000000000000000000053371453140004500374460ustar00rootroot00000000000000client/testdata/Published3Times_keyrotated_initialrootsexpired_clientversionis2/server/metadata.staged{ "signatures": [ { "keyid": "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "sig": "0e22c864c9537c692cf66467310173896c3416d9b48a8c33f33c6f6b0117cd77c194f5d4695fe0f81efd77d3ebfe70d33421f4859374c133de8a247b51625906" }, { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "a40c02d3ea080e4a46a09796926040127a7d8ed5f91ac2acee3a995b8eca403cc787b33f56840983f6975e886d3d5ceb157e1fa999b4ed699d70031a470fc508" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2021-09-12T03:13:48Z", "keys": { "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f758af464295e62a1da4d3267be6d13f4aba9c7d52166d01b6bd5b4559496c9d" }, "scheme": "ed25519" }, "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 2 } }3.root.json000066400000000000000000000064731453140004500374510ustar00rootroot00000000000000client/testdata/Published3Times_keyrotated_initialrootsexpired_clientversionis2/server/metadata.staged{ "signatures": [ { "keyid": "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "sig": "3c7663e43e6eedc42d62a2c2ea9ccc76186f105f6adab425245ea0610fdedd030685f7b707b4d88df2d80a942e13276da8330ae4160dabcedc46e1408d1dd803" }, { "keyid": "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "sig": "9d8e34d3a8c6cf665657d07053d0c77d8d4da801e3049af04b60a98b252523ad691e84c56af4efcadd83da981939d85cb22dbb7304fb5f88be044fbb8ecad408" }, { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "138b6d748491e80c1108a2916dcb3033a0029db01d82539972cb10c5ba22366391ece7d97483494815d758ae08514eab3edd58b1f84ff603b67c28855d5bee0e" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:13:38Z", "keys": { "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f758af464295e62a1da4d3267be6d13f4aba9c7d52166d01b6bd5b4559496c9d" }, "scheme": "ed25519" }, "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "82f52e4503dbb364fabe8e5567f1cf909d4175d45468a021dfe75653db9ac98c" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 3 } }root.json000066400000000000000000000064731453140004500373100ustar00rootroot00000000000000client/testdata/Published3Times_keyrotated_initialrootsexpired_clientversionis2/server/metadata.staged{ "signatures": [ { "keyid": "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "sig": "3c7663e43e6eedc42d62a2c2ea9ccc76186f105f6adab425245ea0610fdedd030685f7b707b4d88df2d80a942e13276da8330ae4160dabcedc46e1408d1dd803" }, { "keyid": "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "sig": "9d8e34d3a8c6cf665657d07053d0c77d8d4da801e3049af04b60a98b252523ad691e84c56af4efcadd83da981939d85cb22dbb7304fb5f88be044fbb8ecad408" }, { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "138b6d748491e80c1108a2916dcb3033a0029db01d82539972cb10c5ba22366391ece7d97483494815d758ae08514eab3edd58b1f84ff603b67c28855d5bee0e" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:13:38Z", "keys": { "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f758af464295e62a1da4d3267be6d13f4aba9c7d52166d01b6bd5b4559496c9d" }, "scheme": "ed25519" }, "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "82f52e4503dbb364fabe8e5567f1cf909d4175d45468a021dfe75653db9ac98c" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 3 } }snapshot.json000066400000000000000000000006571453140004500401620ustar00rootroot00000000000000client/testdata/Published3Times_keyrotated_initialrootsexpired_clientversionis2/server/metadata.staged{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "03f7436d986edb991e9812b64fa7a93229e2e73ab419e29feab828a311a5aace9b385ed48d44f602af25b8e3070eaf948c89bc59ab75fb8a1231882df1ef4a05" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:13:38Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }targets.json000066400000000000000000000006711453140004500377700ustar00rootroot00000000000000client/testdata/Published3Times_keyrotated_initialrootsexpired_clientversionis2/server/metadata.staged{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "c5d60d0018367fda4bbaa0ebb3b0ee0c2cdbac3bdb233369590f3055ad9d4299fde6a8a8824ed3f38129ca6ee3fa67075b6591169aa1819a6238ea1821dbaa03" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:13:38Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }timestamp.json000066400000000000000000000013001453140004500403100ustar00rootroot00000000000000client/testdata/Published3Times_keyrotated_initialrootsexpired_clientversionis2/server/metadata.staged{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "c5a41119ccf10925e7c065c10c14d3690b6c4071fa4f2f7e3bc5944e375ee28ccf81721c9f506d788e0cc9b3d335791a4553f3f1e39873903f00a449a3de5004" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:13:38Z", "meta": { "snapshot.json": { "hashes": { "sha256": "700c180d3a3d6e2fa86f4bb072d7f81f39f1cc1dc0df32bb6b5e89a715f743d2", "sha512": "5b21d7bda6e29381e7f095204eddd78137cc14416585c3e9f8915ce21ff1b17b646932b37d7a1147cc0f1d6b7f6ea75d91f6b63d7e229fe73c0b4f1845c40f41" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published3Times_keyrotated_initialrootsexpired_clientversionis2/server/metadata/000077500000000000000000000000001453140004500342315ustar00rootroot000000000000001.root.json000066400000000000000000000042031453140004500361660ustar00rootroot00000000000000client/testdata/Published3Times_keyrotated_initialrootsexpired_clientversionis2/server/metadata{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "1a1565cf213002416129b7ff558fbe0b4b296984c756e5f67fe10e8b6dae5ccd372b17c9524fd2a92fe79df50c2845baa57a3447e2422bf5dc1c35e00e5e1003" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2021-09-12T03:13:48Z", "keys": { "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 1 } }1.snapshot.json000066400000000000000000000006571453140004500370530ustar00rootroot00000000000000client/testdata/Published3Times_keyrotated_initialrootsexpired_clientversionis2/server/metadata{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "03f7436d986edb991e9812b64fa7a93229e2e73ab419e29feab828a311a5aace9b385ed48d44f602af25b8e3070eaf948c89bc59ab75fb8a1231882df1ef4a05" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:13:38Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }1.targets.json000066400000000000000000000006711453140004500366610ustar00rootroot00000000000000client/testdata/Published3Times_keyrotated_initialrootsexpired_clientversionis2/server/metadata{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "c5d60d0018367fda4bbaa0ebb3b0ee0c2cdbac3bdb233369590f3055ad9d4299fde6a8a8824ed3f38129ca6ee3fa67075b6591169aa1819a6238ea1821dbaa03" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:13:38Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }1.timestamp.json000066400000000000000000000013001453140004500372010ustar00rootroot00000000000000client/testdata/Published3Times_keyrotated_initialrootsexpired_clientversionis2/server/metadata{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "c5a41119ccf10925e7c065c10c14d3690b6c4071fa4f2f7e3bc5944e375ee28ccf81721c9f506d788e0cc9b3d335791a4553f3f1e39873903f00a449a3de5004" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:13:38Z", "meta": { "snapshot.json": { "hashes": { "sha256": "700c180d3a3d6e2fa86f4bb072d7f81f39f1cc1dc0df32bb6b5e89a715f743d2", "sha512": "5b21d7bda6e29381e7f095204eddd78137cc14416585c3e9f8915ce21ff1b17b646932b37d7a1147cc0f1d6b7f6ea75d91f6b63d7e229fe73c0b4f1845c40f41" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }2.root.json000066400000000000000000000053371453140004500362000ustar00rootroot00000000000000client/testdata/Published3Times_keyrotated_initialrootsexpired_clientversionis2/server/metadata{ "signatures": [ { "keyid": "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "sig": "0e22c864c9537c692cf66467310173896c3416d9b48a8c33f33c6f6b0117cd77c194f5d4695fe0f81efd77d3ebfe70d33421f4859374c133de8a247b51625906" }, { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "a40c02d3ea080e4a46a09796926040127a7d8ed5f91ac2acee3a995b8eca403cc787b33f56840983f6975e886d3d5ceb157e1fa999b4ed699d70031a470fc508" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2021-09-12T03:13:48Z", "keys": { "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f758af464295e62a1da4d3267be6d13f4aba9c7d52166d01b6bd5b4559496c9d" }, "scheme": "ed25519" }, "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 2 } }3.root.json000066400000000000000000000064731453140004500362030ustar00rootroot00000000000000client/testdata/Published3Times_keyrotated_initialrootsexpired_clientversionis2/server/metadata{ "signatures": [ { "keyid": "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "sig": "3c7663e43e6eedc42d62a2c2ea9ccc76186f105f6adab425245ea0610fdedd030685f7b707b4d88df2d80a942e13276da8330ae4160dabcedc46e1408d1dd803" }, { "keyid": "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "sig": "9d8e34d3a8c6cf665657d07053d0c77d8d4da801e3049af04b60a98b252523ad691e84c56af4efcadd83da981939d85cb22dbb7304fb5f88be044fbb8ecad408" }, { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "138b6d748491e80c1108a2916dcb3033a0029db01d82539972cb10c5ba22366391ece7d97483494815d758ae08514eab3edd58b1f84ff603b67c28855d5bee0e" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:13:38Z", "keys": { "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f758af464295e62a1da4d3267be6d13f4aba9c7d52166d01b6bd5b4559496c9d" }, "scheme": "ed25519" }, "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "82f52e4503dbb364fabe8e5567f1cf909d4175d45468a021dfe75653db9ac98c" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 3 } }root.json000066400000000000000000000064731453140004500360420ustar00rootroot00000000000000client/testdata/Published3Times_keyrotated_initialrootsexpired_clientversionis2/server/metadata{ "signatures": [ { "keyid": "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "sig": "3c7663e43e6eedc42d62a2c2ea9ccc76186f105f6adab425245ea0610fdedd030685f7b707b4d88df2d80a942e13276da8330ae4160dabcedc46e1408d1dd803" }, { "keyid": "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "sig": "9d8e34d3a8c6cf665657d07053d0c77d8d4da801e3049af04b60a98b252523ad691e84c56af4efcadd83da981939d85cb22dbb7304fb5f88be044fbb8ecad408" }, { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "138b6d748491e80c1108a2916dcb3033a0029db01d82539972cb10c5ba22366391ece7d97483494815d758ae08514eab3edd58b1f84ff603b67c28855d5bee0e" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:13:38Z", "keys": { "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f758af464295e62a1da4d3267be6d13f4aba9c7d52166d01b6bd5b4559496c9d" }, "scheme": "ed25519" }, "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "82f52e4503dbb364fabe8e5567f1cf909d4175d45468a021dfe75653db9ac98c" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 3 } }snapshot.json000066400000000000000000000006571453140004500367140ustar00rootroot00000000000000client/testdata/Published3Times_keyrotated_initialrootsexpired_clientversionis2/server/metadata{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "03f7436d986edb991e9812b64fa7a93229e2e73ab419e29feab828a311a5aace9b385ed48d44f602af25b8e3070eaf948c89bc59ab75fb8a1231882df1ef4a05" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:13:38Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }targets.json000066400000000000000000000006711453140004500365220ustar00rootroot00000000000000client/testdata/Published3Times_keyrotated_initialrootsexpired_clientversionis2/server/metadata{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "c5d60d0018367fda4bbaa0ebb3b0ee0c2cdbac3bdb233369590f3055ad9d4299fde6a8a8824ed3f38129ca6ee3fa67075b6591169aa1819a6238ea1821dbaa03" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:13:38Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }timestamp.json000066400000000000000000000013001453140004500370420ustar00rootroot00000000000000client/testdata/Published3Times_keyrotated_initialrootsexpired_clientversionis2/server/metadata{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "c5a41119ccf10925e7c065c10c14d3690b6c4071fa4f2f7e3bc5944e375ee28ccf81721c9f506d788e0cc9b3d335791a4553f3f1e39873903f00a449a3de5004" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:13:38Z", "meta": { "snapshot.json": { "hashes": { "sha256": "700c180d3a3d6e2fa86f4bb072d7f81f39f1cc1dc0df32bb6b5e89a715f743d2", "sha512": "5b21d7bda6e29381e7f095204eddd78137cc14416585c3e9f8915ce21ff1b17b646932b37d7a1147cc0f1d6b7f6ea75d91f6b63d7e229fe73c0b4f1845c40f41" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published3Times_keyrotated_latestrootexpired/000077500000000000000000000000001453140004500252415ustar00rootroot00000000000000client/testdata/Published3Times_keyrotated_latestrootexpired/client/000077500000000000000000000000001453140004500265175ustar00rootroot00000000000000client/testdata/Published3Times_keyrotated_latestrootexpired/client/metadata/000077500000000000000000000000001453140004500302775ustar00rootroot00000000000000client/testdata/Published3Times_keyrotated_latestrootexpired/client/metadata/current/000077500000000000000000000000001453140004500317615ustar00rootroot00000000000000client/testdata/Published3Times_keyrotated_latestrootexpired/client/metadata/current/1.root.json000066400000000000000000000042031453140004500337750ustar00rootroot00000000000000{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "1a1565cf213002416129b7ff558fbe0b4b296984c756e5f67fe10e8b6dae5ccd372b17c9524fd2a92fe79df50c2845baa57a3447e2422bf5dc1c35e00e5e1003" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2021-09-12T03:13:48Z", "keys": { "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published3Times_keyrotated_latestrootexpired/client/metadata/current/1.snapshot.json000066400000000000000000000006571453140004500346620ustar00rootroot00000000000000{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "03f7436d986edb991e9812b64fa7a93229e2e73ab419e29feab828a311a5aace9b385ed48d44f602af25b8e3070eaf948c89bc59ab75fb8a1231882df1ef4a05" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:13:38Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published3Times_keyrotated_latestrootexpired/client/metadata/current/1.targets.json000066400000000000000000000006711453140004500344700ustar00rootroot00000000000000{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "c5d60d0018367fda4bbaa0ebb3b0ee0c2cdbac3bdb233369590f3055ad9d4299fde6a8a8824ed3f38129ca6ee3fa67075b6591169aa1819a6238ea1821dbaa03" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:13:38Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }1.timestamp.json000066400000000000000000000013001453140004500347310ustar00rootroot00000000000000client/testdata/Published3Times_keyrotated_latestrootexpired/client/metadata/current{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "c5a41119ccf10925e7c065c10c14d3690b6c4071fa4f2f7e3bc5944e375ee28ccf81721c9f506d788e0cc9b3d335791a4553f3f1e39873903f00a449a3de5004" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:13:38Z", "meta": { "snapshot.json": { "hashes": { "sha256": "700c180d3a3d6e2fa86f4bb072d7f81f39f1cc1dc0df32bb6b5e89a715f743d2", "sha512": "5b21d7bda6e29381e7f095204eddd78137cc14416585c3e9f8915ce21ff1b17b646932b37d7a1147cc0f1d6b7f6ea75d91f6b63d7e229fe73c0b4f1845c40f41" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published3Times_keyrotated_latestrootexpired/client/metadata/current/root.json000066400000000000000000000042031453140004500336360ustar00rootroot00000000000000{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "1a1565cf213002416129b7ff558fbe0b4b296984c756e5f67fe10e8b6dae5ccd372b17c9524fd2a92fe79df50c2845baa57a3447e2422bf5dc1c35e00e5e1003" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2021-09-12T03:13:48Z", "keys": { "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published3Times_keyrotated_latestrootexpired/client/metadata/current/snapshot.json000066400000000000000000000006571453140004500345230ustar00rootroot00000000000000{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "03f7436d986edb991e9812b64fa7a93229e2e73ab419e29feab828a311a5aace9b385ed48d44f602af25b8e3070eaf948c89bc59ab75fb8a1231882df1ef4a05" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:13:38Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published3Times_keyrotated_latestrootexpired/client/metadata/current/targets.json000066400000000000000000000006711453140004500343310ustar00rootroot00000000000000{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "c5d60d0018367fda4bbaa0ebb3b0ee0c2cdbac3bdb233369590f3055ad9d4299fde6a8a8824ed3f38129ca6ee3fa67075b6591169aa1819a6238ea1821dbaa03" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:13:38Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }client/testdata/Published3Times_keyrotated_latestrootexpired/client/metadata/current/timestamp.json000066400000000000000000000013001453140004500346510ustar00rootroot00000000000000{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "c5a41119ccf10925e7c065c10c14d3690b6c4071fa4f2f7e3bc5944e375ee28ccf81721c9f506d788e0cc9b3d335791a4553f3f1e39873903f00a449a3de5004" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:13:38Z", "meta": { "snapshot.json": { "hashes": { "sha256": "700c180d3a3d6e2fa86f4bb072d7f81f39f1cc1dc0df32bb6b5e89a715f743d2", "sha512": "5b21d7bda6e29381e7f095204eddd78137cc14416585c3e9f8915ce21ff1b17b646932b37d7a1147cc0f1d6b7f6ea75d91f6b63d7e229fe73c0b4f1845c40f41" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published3Times_keyrotated_latestrootexpired/client/metadata/previous/000077500000000000000000000000001453140004500321535ustar00rootroot00000000000000client/testdata/Published3Times_keyrotated_latestrootexpired/client/metadata/previous/1.root.json000066400000000000000000000042031453140004500341670ustar00rootroot00000000000000{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "1a1565cf213002416129b7ff558fbe0b4b296984c756e5f67fe10e8b6dae5ccd372b17c9524fd2a92fe79df50c2845baa57a3447e2422bf5dc1c35e00e5e1003" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2021-09-12T03:13:48Z", "keys": { "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 1 } }1.snapshot.json000066400000000000000000000006571453140004500347750ustar00rootroot00000000000000client/testdata/Published3Times_keyrotated_latestrootexpired/client/metadata/previous{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "03f7436d986edb991e9812b64fa7a93229e2e73ab419e29feab828a311a5aace9b385ed48d44f602af25b8e3070eaf948c89bc59ab75fb8a1231882df1ef4a05" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:13:38Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published3Times_keyrotated_latestrootexpired/client/metadata/previous/1.targets.json000066400000000000000000000006711453140004500346620ustar00rootroot00000000000000{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "c5d60d0018367fda4bbaa0ebb3b0ee0c2cdbac3bdb233369590f3055ad9d4299fde6a8a8824ed3f38129ca6ee3fa67075b6591169aa1819a6238ea1821dbaa03" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:13:38Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }1.timestamp.json000066400000000000000000000013001453140004500351230ustar00rootroot00000000000000client/testdata/Published3Times_keyrotated_latestrootexpired/client/metadata/previous{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "c5a41119ccf10925e7c065c10c14d3690b6c4071fa4f2f7e3bc5944e375ee28ccf81721c9f506d788e0cc9b3d335791a4553f3f1e39873903f00a449a3de5004" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:13:38Z", "meta": { "snapshot.json": { "hashes": { "sha256": "700c180d3a3d6e2fa86f4bb072d7f81f39f1cc1dc0df32bb6b5e89a715f743d2", "sha512": "5b21d7bda6e29381e7f095204eddd78137cc14416585c3e9f8915ce21ff1b17b646932b37d7a1147cc0f1d6b7f6ea75d91f6b63d7e229fe73c0b4f1845c40f41" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published3Times_keyrotated_latestrootexpired/client/metadata/previous/root.json000066400000000000000000000042031453140004500340300ustar00rootroot00000000000000{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "1a1565cf213002416129b7ff558fbe0b4b296984c756e5f67fe10e8b6dae5ccd372b17c9524fd2a92fe79df50c2845baa57a3447e2422bf5dc1c35e00e5e1003" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2021-09-12T03:13:48Z", "keys": { "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published3Times_keyrotated_latestrootexpired/client/metadata/previous/snapshot.json000066400000000000000000000006571453140004500347150ustar00rootroot00000000000000{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "03f7436d986edb991e9812b64fa7a93229e2e73ab419e29feab828a311a5aace9b385ed48d44f602af25b8e3070eaf948c89bc59ab75fb8a1231882df1ef4a05" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:13:38Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published3Times_keyrotated_latestrootexpired/client/metadata/previous/targets.json000066400000000000000000000006711453140004500345230ustar00rootroot00000000000000{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "c5d60d0018367fda4bbaa0ebb3b0ee0c2cdbac3bdb233369590f3055ad9d4299fde6a8a8824ed3f38129ca6ee3fa67075b6591169aa1819a6238ea1821dbaa03" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:13:38Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }client/testdata/Published3Times_keyrotated_latestrootexpired/client/metadata/previous/timestamp.json000066400000000000000000000013001453140004500350430ustar00rootroot00000000000000{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "c5a41119ccf10925e7c065c10c14d3690b6c4071fa4f2f7e3bc5944e375ee28ccf81721c9f506d788e0cc9b3d335791a4553f3f1e39873903f00a449a3de5004" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:13:38Z", "meta": { "snapshot.json": { "hashes": { "sha256": "700c180d3a3d6e2fa86f4bb072d7f81f39f1cc1dc0df32bb6b5e89a715f743d2", "sha512": "5b21d7bda6e29381e7f095204eddd78137cc14416585c3e9f8915ce21ff1b17b646932b37d7a1147cc0f1d6b7f6ea75d91f6b63d7e229fe73c0b4f1845c40f41" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published3Times_keyrotated_latestrootexpired/hash.txt000066400000000000000000000001001453140004500267140ustar00rootroot0000000000000053afeac61b95af3060968d5bf4acdc71d4eded57ded489974ce47223708532ffclient/testdata/Published3Times_keyrotated_latestrootexpired/server/000077500000000000000000000000001453140004500265475ustar00rootroot00000000000000client/testdata/Published3Times_keyrotated_latestrootexpired/server/metadata.staged/000077500000000000000000000000001453140004500315755ustar00rootroot00000000000000client/testdata/Published3Times_keyrotated_latestrootexpired/server/metadata.staged/1.root.json000066400000000000000000000042031453140004500336110ustar00rootroot00000000000000{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "1a1565cf213002416129b7ff558fbe0b4b296984c756e5f67fe10e8b6dae5ccd372b17c9524fd2a92fe79df50c2845baa57a3447e2422bf5dc1c35e00e5e1003" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2021-09-12T03:13:48Z", "keys": { "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published3Times_keyrotated_latestrootexpired/server/metadata.staged/1.snapshot.json000066400000000000000000000006571453140004500344760ustar00rootroot00000000000000{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "03f7436d986edb991e9812b64fa7a93229e2e73ab419e29feab828a311a5aace9b385ed48d44f602af25b8e3070eaf948c89bc59ab75fb8a1231882df1ef4a05" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:13:38Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published3Times_keyrotated_latestrootexpired/server/metadata.staged/1.targets.json000066400000000000000000000006711453140004500343040ustar00rootroot00000000000000{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "c5d60d0018367fda4bbaa0ebb3b0ee0c2cdbac3bdb233369590f3055ad9d4299fde6a8a8824ed3f38129ca6ee3fa67075b6591169aa1819a6238ea1821dbaa03" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:13:38Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }client/testdata/Published3Times_keyrotated_latestrootexpired/server/metadata.staged/1.timestamp.json000066400000000000000000000013001453140004500346240ustar00rootroot00000000000000{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "c5a41119ccf10925e7c065c10c14d3690b6c4071fa4f2f7e3bc5944e375ee28ccf81721c9f506d788e0cc9b3d335791a4553f3f1e39873903f00a449a3de5004" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:13:38Z", "meta": { "snapshot.json": { "hashes": { "sha256": "700c180d3a3d6e2fa86f4bb072d7f81f39f1cc1dc0df32bb6b5e89a715f743d2", "sha512": "5b21d7bda6e29381e7f095204eddd78137cc14416585c3e9f8915ce21ff1b17b646932b37d7a1147cc0f1d6b7f6ea75d91f6b63d7e229fe73c0b4f1845c40f41" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published3Times_keyrotated_latestrootexpired/server/metadata.staged/2.root.json000066400000000000000000000053371453140004500336230ustar00rootroot00000000000000{ "signatures": [ { "keyid": "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "sig": "0e22c864c9537c692cf66467310173896c3416d9b48a8c33f33c6f6b0117cd77c194f5d4695fe0f81efd77d3ebfe70d33421f4859374c133de8a247b51625906" }, { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "a40c02d3ea080e4a46a09796926040127a7d8ed5f91ac2acee3a995b8eca403cc787b33f56840983f6975e886d3d5ceb157e1fa999b4ed699d70031a470fc508" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2021-09-12T03:13:48Z", "keys": { "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f758af464295e62a1da4d3267be6d13f4aba9c7d52166d01b6bd5b4559496c9d" }, "scheme": "ed25519" }, "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 2 } }client/testdata/Published3Times_keyrotated_latestrootexpired/server/metadata.staged/3.root.json000066400000000000000000000064731453140004500336260ustar00rootroot00000000000000{ "signatures": [ { "keyid": "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "sig": "5f39777693b8c95b3f1a76172cc147ca6c20acec65c4cd932fda605d6457b10d90e37985197bd6ace2266ea336c16d1669cf2b4b3c1d8502d1b2b1f30fe82c02" }, { "keyid": "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "sig": "07dde55a3e8182d37b05b3edcf8d559fd088100827d5a697cc3dcafb875da2afa657cc635cbbe2c464c936c336408f31063b0dd9821b56e64d83eedbe7397f01" }, { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "e62976570275736532867c395345568051d3f01d5f8c723afb1d6d44b7e901f3b98a5ae4e21406914f1ca46cee40c9ea5d7854d574694d8dc63da499b2746006" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2021-09-12T03:13:48Z", "keys": { "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f758af464295e62a1da4d3267be6d13f4aba9c7d52166d01b6bd5b4559496c9d" }, "scheme": "ed25519" }, "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "82f52e4503dbb364fabe8e5567f1cf909d4175d45468a021dfe75653db9ac98c" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 3 } }client/testdata/Published3Times_keyrotated_latestrootexpired/server/metadata.staged/root.json000066400000000000000000000064731453140004500334650ustar00rootroot00000000000000{ "signatures": [ { "keyid": "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "sig": "5f39777693b8c95b3f1a76172cc147ca6c20acec65c4cd932fda605d6457b10d90e37985197bd6ace2266ea336c16d1669cf2b4b3c1d8502d1b2b1f30fe82c02" }, { "keyid": "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "sig": "07dde55a3e8182d37b05b3edcf8d559fd088100827d5a697cc3dcafb875da2afa657cc635cbbe2c464c936c336408f31063b0dd9821b56e64d83eedbe7397f01" }, { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "e62976570275736532867c395345568051d3f01d5f8c723afb1d6d44b7e901f3b98a5ae4e21406914f1ca46cee40c9ea5d7854d574694d8dc63da499b2746006" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2021-09-12T03:13:48Z", "keys": { "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f758af464295e62a1da4d3267be6d13f4aba9c7d52166d01b6bd5b4559496c9d" }, "scheme": "ed25519" }, "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "82f52e4503dbb364fabe8e5567f1cf909d4175d45468a021dfe75653db9ac98c" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 3 } }client/testdata/Published3Times_keyrotated_latestrootexpired/server/metadata.staged/snapshot.json000066400000000000000000000006571453140004500343370ustar00rootroot00000000000000{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "03f7436d986edb991e9812b64fa7a93229e2e73ab419e29feab828a311a5aace9b385ed48d44f602af25b8e3070eaf948c89bc59ab75fb8a1231882df1ef4a05" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:13:38Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published3Times_keyrotated_latestrootexpired/server/metadata.staged/targets.json000066400000000000000000000006711453140004500341450ustar00rootroot00000000000000{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "c5d60d0018367fda4bbaa0ebb3b0ee0c2cdbac3bdb233369590f3055ad9d4299fde6a8a8824ed3f38129ca6ee3fa67075b6591169aa1819a6238ea1821dbaa03" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:13:38Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }client/testdata/Published3Times_keyrotated_latestrootexpired/server/metadata.staged/timestamp.json000066400000000000000000000013001453140004500344650ustar00rootroot00000000000000{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "c5a41119ccf10925e7c065c10c14d3690b6c4071fa4f2f7e3bc5944e375ee28ccf81721c9f506d788e0cc9b3d335791a4553f3f1e39873903f00a449a3de5004" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:13:38Z", "meta": { "snapshot.json": { "hashes": { "sha256": "700c180d3a3d6e2fa86f4bb072d7f81f39f1cc1dc0df32bb6b5e89a715f743d2", "sha512": "5b21d7bda6e29381e7f095204eddd78137cc14416585c3e9f8915ce21ff1b17b646932b37d7a1147cc0f1d6b7f6ea75d91f6b63d7e229fe73c0b4f1845c40f41" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published3Times_keyrotated_latestrootexpired/server/metadata/000077500000000000000000000000001453140004500303275ustar00rootroot00000000000000client/testdata/Published3Times_keyrotated_latestrootexpired/server/metadata/1.root.json000066400000000000000000000042031453140004500323430ustar00rootroot00000000000000{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "1a1565cf213002416129b7ff558fbe0b4b296984c756e5f67fe10e8b6dae5ccd372b17c9524fd2a92fe79df50c2845baa57a3447e2422bf5dc1c35e00e5e1003" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2021-09-12T03:13:48Z", "keys": { "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published3Times_keyrotated_latestrootexpired/server/metadata/1.snapshot.json000066400000000000000000000006571453140004500332300ustar00rootroot00000000000000{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "03f7436d986edb991e9812b64fa7a93229e2e73ab419e29feab828a311a5aace9b385ed48d44f602af25b8e3070eaf948c89bc59ab75fb8a1231882df1ef4a05" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:13:38Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published3Times_keyrotated_latestrootexpired/server/metadata/1.targets.json000066400000000000000000000006711453140004500330360ustar00rootroot00000000000000{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "c5d60d0018367fda4bbaa0ebb3b0ee0c2cdbac3bdb233369590f3055ad9d4299fde6a8a8824ed3f38129ca6ee3fa67075b6591169aa1819a6238ea1821dbaa03" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:13:38Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }client/testdata/Published3Times_keyrotated_latestrootexpired/server/metadata/1.timestamp.json000066400000000000000000000013001453140004500333560ustar00rootroot00000000000000{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "c5a41119ccf10925e7c065c10c14d3690b6c4071fa4f2f7e3bc5944e375ee28ccf81721c9f506d788e0cc9b3d335791a4553f3f1e39873903f00a449a3de5004" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:13:38Z", "meta": { "snapshot.json": { "hashes": { "sha256": "700c180d3a3d6e2fa86f4bb072d7f81f39f1cc1dc0df32bb6b5e89a715f743d2", "sha512": "5b21d7bda6e29381e7f095204eddd78137cc14416585c3e9f8915ce21ff1b17b646932b37d7a1147cc0f1d6b7f6ea75d91f6b63d7e229fe73c0b4f1845c40f41" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published3Times_keyrotated_latestrootexpired/server/metadata/2.root.json000066400000000000000000000053371453140004500323550ustar00rootroot00000000000000{ "signatures": [ { "keyid": "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "sig": "0e22c864c9537c692cf66467310173896c3416d9b48a8c33f33c6f6b0117cd77c194f5d4695fe0f81efd77d3ebfe70d33421f4859374c133de8a247b51625906" }, { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "a40c02d3ea080e4a46a09796926040127a7d8ed5f91ac2acee3a995b8eca403cc787b33f56840983f6975e886d3d5ceb157e1fa999b4ed699d70031a470fc508" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2021-09-12T03:13:48Z", "keys": { "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f758af464295e62a1da4d3267be6d13f4aba9c7d52166d01b6bd5b4559496c9d" }, "scheme": "ed25519" }, "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 2 } }client/testdata/Published3Times_keyrotated_latestrootexpired/server/metadata/3.root.json000066400000000000000000000064731453140004500323600ustar00rootroot00000000000000{ "signatures": [ { "keyid": "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "sig": "5f39777693b8c95b3f1a76172cc147ca6c20acec65c4cd932fda605d6457b10d90e37985197bd6ace2266ea336c16d1669cf2b4b3c1d8502d1b2b1f30fe82c02" }, { "keyid": "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "sig": "07dde55a3e8182d37b05b3edcf8d559fd088100827d5a697cc3dcafb875da2afa657cc635cbbe2c464c936c336408f31063b0dd9821b56e64d83eedbe7397f01" }, { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "e62976570275736532867c395345568051d3f01d5f8c723afb1d6d44b7e901f3b98a5ae4e21406914f1ca46cee40c9ea5d7854d574694d8dc63da499b2746006" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2021-09-12T03:13:48Z", "keys": { "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f758af464295e62a1da4d3267be6d13f4aba9c7d52166d01b6bd5b4559496c9d" }, "scheme": "ed25519" }, "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "82f52e4503dbb364fabe8e5567f1cf909d4175d45468a021dfe75653db9ac98c" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 3 } }client/testdata/Published3Times_keyrotated_latestrootexpired/server/metadata/root.json000066400000000000000000000064731453140004500322170ustar00rootroot00000000000000{ "signatures": [ { "keyid": "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "sig": "5f39777693b8c95b3f1a76172cc147ca6c20acec65c4cd932fda605d6457b10d90e37985197bd6ace2266ea336c16d1669cf2b4b3c1d8502d1b2b1f30fe82c02" }, { "keyid": "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "sig": "07dde55a3e8182d37b05b3edcf8d559fd088100827d5a697cc3dcafb875da2afa657cc635cbbe2c464c936c336408f31063b0dd9821b56e64d83eedbe7397f01" }, { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "e62976570275736532867c395345568051d3f01d5f8c723afb1d6d44b7e901f3b98a5ae4e21406914f1ca46cee40c9ea5d7854d574694d8dc63da499b2746006" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2021-09-12T03:13:48Z", "keys": { "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f758af464295e62a1da4d3267be6d13f4aba9c7d52166d01b6bd5b4559496c9d" }, "scheme": "ed25519" }, "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "82f52e4503dbb364fabe8e5567f1cf909d4175d45468a021dfe75653db9ac98c" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 3 } }client/testdata/Published3Times_keyrotated_latestrootexpired/server/metadata/snapshot.json000066400000000000000000000006571453140004500330710ustar00rootroot00000000000000{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "03f7436d986edb991e9812b64fa7a93229e2e73ab419e29feab828a311a5aace9b385ed48d44f602af25b8e3070eaf948c89bc59ab75fb8a1231882df1ef4a05" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:13:38Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/Published3Times_keyrotated_latestrootexpired/server/metadata/targets.json000066400000000000000000000006711453140004500326770ustar00rootroot00000000000000{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "c5d60d0018367fda4bbaa0ebb3b0ee0c2cdbac3bdb233369590f3055ad9d4299fde6a8a8824ed3f38129ca6ee3fa67075b6591169aa1819a6238ea1821dbaa03" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:13:38Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }client/testdata/Published3Times_keyrotated_latestrootexpired/server/metadata/timestamp.json000066400000000000000000000013001453140004500332170ustar00rootroot00000000000000{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "c5a41119ccf10925e7c065c10c14d3690b6c4071fa4f2f7e3bc5944e375ee28ccf81721c9f506d788e0cc9b3d335791a4553f3f1e39873903f00a449a3de5004" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:13:38Z", "meta": { "snapshot.json": { "hashes": { "sha256": "700c180d3a3d6e2fa86f4bb072d7f81f39f1cc1dc0df32bb6b5e89a715f743d2", "sha512": "5b21d7bda6e29381e7f095204eddd78137cc14416585c3e9f8915ce21ff1b17b646932b37d7a1147cc0f1d6b7f6ea75d91f6b63d7e229fe73c0b4f1845c40f41" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_root/000077500000000000000000000000001453140004500267625ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_root/client/000077500000000000000000000000001453140004500302405ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_root/client/metadata/000077500000000000000000000000001453140004500320205ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_root/client/metadata/current/000077500000000000000000000000001453140004500335025ustar00rootroot000000000000001.root.json000066400000000000000000000155431453140004500354500ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_root/client/metadata/current{ "signatures": [ { "keyid": "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "sig": "876195f83e8dbb1b00f70188fc7f405d05d321da97a9b98781f331d2dea6be1415d0a0b4e23697f2e30235e98c3503a2ec3aade3bd4c1bac8109f368d9ed5005" }, { "keyid": "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb", "sig": "ff3e54a7492085d33ebf25158ce673fdd7d871a49cdccbe31b35c9ba1c28b91fd22b161b8a226248b3ef3e81378cdaa1ef3e37c2100363ec1be6d87d19a2aa0c" }, { "keyid": "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "sig": "59da18183f6729135b74539865f55e5c6e3d837209b724922cd56dd79f46c7150016930f477707c78ee9e39ee0f1a8e18304ab4cdaf1c11f81f147cbf5c57904" }, { "keyid": "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "sig": "c0b98cba687cdab0628872207026501c9b3c289af113c0be83176a908e58a647b2be9716b37ae4acc78327bbcd715d97d200953681646f3bc918e6c0f409dc0d" }, { "keyid": "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8", "sig": "7fa4506b7e9c6aac34b6c9b5e1099e8fa995fb1af7804cb9245b0132edf41739b7049277de11577c1ff72c1cf8fe41ba3ec32bf802cf16cb19e42765f53d3f0e" }, { "keyid": "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b", "sig": "8c5af6fd1930026a1a9d9816e18205dc4e6bbf0e4b9dd7385d9cc10ca6bf3609cce7c62d5ea5432e0a67e3c395531cf1c67f874f0ba1acb27bf161423b34500c" }, { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "ef03e8b766ffe280b1486460ee1b8cd92e6605d4d4af32696a0345b940767f7e3ae66f217b97eae12aa704fa5ee03073079046efe4c76c14989c4784d2d1fa0d" }, { "keyid": "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "sig": "0a536f66722b82fa8da8ef6837cdae1d719abe72dd27fe36a4fcb2d21302989bb897275825bfef3a5f93fd487f947c75c703da69ad67988c1be46a975a8a6602" }, { "keyid": "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "sig": "caf6083cc4ab3fc5a39cc243d08faf0724435b9189b4a3349cb8955b321d9c644697c9d96698e09a5c47f5d032a562c97b08a3e840dbb60f4224afeb438a3a0b" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:20:18Z", "keys": { "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f758af464295e62a1da4d3267be6d13f4aba9c7d52166d01b6bd5b4559496c9d" }, "scheme": "ed25519" }, "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f6b299bcfb4e15ef652c80e9e3dda995acbb4bf71dce889a82ba70228e45a8bf" }, "scheme": "ed25519" }, "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e104199cda6e018d7d9044fa6225aa5dc9c2af5ee4e1c0fe6d16ad002220390d" }, "scheme": "ed25519" }, "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "82f52e4503dbb364fabe8e5567f1cf909d4175d45468a021dfe75653db9ac98c" }, "scheme": "ed25519" }, "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "9b1db36a5cad80284b5f40b040621e0e444f25ee09efa5c1fd6da4499c711bd5" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "06e4dee0de7826c8d539a6112940b7459892b4ecaf696e67dc064aea0923f95c" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" }, "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "fa386632ae9cc358ad0b56565edef362ad10d7fadb05bc8dc8995627372b990e" }, "scheme": "ed25519" }, "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "683d345a948a9baa343be4e44c076ca115da3838e72c28a06340c8ec1b3ef6be" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b", "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb", "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8" ], "threshold": 4 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 1 } }1.snapshot.json000066400000000000000000000006571453140004500363240ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_root/client/metadata/current{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "7945d5bbebfd0f077a6f8bcac4eed402709f07307663b935835712ff4fb4eebbc51146039d0a1ecb3bc7726c526f12e0b063cc3d9dae1c422179db99d4409b0c" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:20:18Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }1.targets.json000066400000000000000000000006711453140004500361320ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_root/client/metadata/current{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "1c07f726a8988b2bbb150cd91c36fa2e0716eb904a89002e24f2382641d5f7680e04cbedbecf89034c8b6416b7a31d5c4bdcc20f0aa2cd976353828cda0e3e0e" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:20:18Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }1.timestamp.json000066400000000000000000000013001453140004500364520ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_root/client/metadata/current{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "18e08cd54878e2af5838ed4445230e687ce0007c1b886b3c1446ee639365b0053e294c930b176fdb1258af9f957e4c4927beaccbbffb354cc27b9d5745257808" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:20:18Z", "meta": { "snapshot.json": { "hashes": { "sha256": "765e1bc98ad6235b9a6e1c200e8576c262ed924ba81a9960268a65b7fc1bba91", "sha512": "b245cd1eb39623b7d6d9d07765bae5e7a373471c4bfc66862042e50f0ced2fbe564dfd23565ce7746e926492d6543c700b22ce48bbe19f5e4128698d243cea49" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }root.json000066400000000000000000000155431453140004500353110ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_root/client/metadata/current{ "signatures": [ { "keyid": "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "sig": "876195f83e8dbb1b00f70188fc7f405d05d321da97a9b98781f331d2dea6be1415d0a0b4e23697f2e30235e98c3503a2ec3aade3bd4c1bac8109f368d9ed5005" }, { "keyid": "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb", "sig": "ff3e54a7492085d33ebf25158ce673fdd7d871a49cdccbe31b35c9ba1c28b91fd22b161b8a226248b3ef3e81378cdaa1ef3e37c2100363ec1be6d87d19a2aa0c" }, { "keyid": "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "sig": "59da18183f6729135b74539865f55e5c6e3d837209b724922cd56dd79f46c7150016930f477707c78ee9e39ee0f1a8e18304ab4cdaf1c11f81f147cbf5c57904" }, { "keyid": "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "sig": "c0b98cba687cdab0628872207026501c9b3c289af113c0be83176a908e58a647b2be9716b37ae4acc78327bbcd715d97d200953681646f3bc918e6c0f409dc0d" }, { "keyid": "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8", "sig": "7fa4506b7e9c6aac34b6c9b5e1099e8fa995fb1af7804cb9245b0132edf41739b7049277de11577c1ff72c1cf8fe41ba3ec32bf802cf16cb19e42765f53d3f0e" }, { "keyid": "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b", "sig": "8c5af6fd1930026a1a9d9816e18205dc4e6bbf0e4b9dd7385d9cc10ca6bf3609cce7c62d5ea5432e0a67e3c395531cf1c67f874f0ba1acb27bf161423b34500c" }, { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "ef03e8b766ffe280b1486460ee1b8cd92e6605d4d4af32696a0345b940767f7e3ae66f217b97eae12aa704fa5ee03073079046efe4c76c14989c4784d2d1fa0d" }, { "keyid": "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "sig": "0a536f66722b82fa8da8ef6837cdae1d719abe72dd27fe36a4fcb2d21302989bb897275825bfef3a5f93fd487f947c75c703da69ad67988c1be46a975a8a6602" }, { "keyid": "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "sig": "caf6083cc4ab3fc5a39cc243d08faf0724435b9189b4a3349cb8955b321d9c644697c9d96698e09a5c47f5d032a562c97b08a3e840dbb60f4224afeb438a3a0b" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:20:18Z", "keys": { "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f758af464295e62a1da4d3267be6d13f4aba9c7d52166d01b6bd5b4559496c9d" }, "scheme": "ed25519" }, "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f6b299bcfb4e15ef652c80e9e3dda995acbb4bf71dce889a82ba70228e45a8bf" }, "scheme": "ed25519" }, "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e104199cda6e018d7d9044fa6225aa5dc9c2af5ee4e1c0fe6d16ad002220390d" }, "scheme": "ed25519" }, "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "82f52e4503dbb364fabe8e5567f1cf909d4175d45468a021dfe75653db9ac98c" }, "scheme": "ed25519" }, "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "9b1db36a5cad80284b5f40b040621e0e444f25ee09efa5c1fd6da4499c711bd5" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "06e4dee0de7826c8d539a6112940b7459892b4ecaf696e67dc064aea0923f95c" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" }, "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "fa386632ae9cc358ad0b56565edef362ad10d7fadb05bc8dc8995627372b990e" }, "scheme": "ed25519" }, "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "683d345a948a9baa343be4e44c076ca115da3838e72c28a06340c8ec1b3ef6be" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b", "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb", "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8" ], "threshold": 4 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 1 } }snapshot.json000066400000000000000000000006571453140004500361650ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_root/client/metadata/current{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "7945d5bbebfd0f077a6f8bcac4eed402709f07307663b935835712ff4fb4eebbc51146039d0a1ecb3bc7726c526f12e0b063cc3d9dae1c422179db99d4409b0c" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:20:18Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }targets.json000066400000000000000000000006711453140004500357730ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_root/client/metadata/current{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "1c07f726a8988b2bbb150cd91c36fa2e0716eb904a89002e24f2382641d5f7680e04cbedbecf89034c8b6416b7a31d5c4bdcc20f0aa2cd976353828cda0e3e0e" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:20:18Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }timestamp.json000066400000000000000000000013001453140004500363130ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_root/client/metadata/current{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "18e08cd54878e2af5838ed4445230e687ce0007c1b886b3c1446ee639365b0053e294c930b176fdb1258af9f957e4c4927beaccbbffb354cc27b9d5745257808" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:20:18Z", "meta": { "snapshot.json": { "hashes": { "sha256": "765e1bc98ad6235b9a6e1c200e8576c262ed924ba81a9960268a65b7fc1bba91", "sha512": "b245cd1eb39623b7d6d9d07765bae5e7a373471c4bfc66862042e50f0ced2fbe564dfd23565ce7746e926492d6543c700b22ce48bbe19f5e4128698d243cea49" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_root/client/metadata/previous/000077500000000000000000000000001453140004500336745ustar00rootroot000000000000001.root.json000066400000000000000000000155431453140004500356420ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_root/client/metadata/previous{ "signatures": [ { "keyid": "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "sig": "876195f83e8dbb1b00f70188fc7f405d05d321da97a9b98781f331d2dea6be1415d0a0b4e23697f2e30235e98c3503a2ec3aade3bd4c1bac8109f368d9ed5005" }, { "keyid": "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb", "sig": "ff3e54a7492085d33ebf25158ce673fdd7d871a49cdccbe31b35c9ba1c28b91fd22b161b8a226248b3ef3e81378cdaa1ef3e37c2100363ec1be6d87d19a2aa0c" }, { "keyid": "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "sig": "59da18183f6729135b74539865f55e5c6e3d837209b724922cd56dd79f46c7150016930f477707c78ee9e39ee0f1a8e18304ab4cdaf1c11f81f147cbf5c57904" }, { "keyid": "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "sig": "c0b98cba687cdab0628872207026501c9b3c289af113c0be83176a908e58a647b2be9716b37ae4acc78327bbcd715d97d200953681646f3bc918e6c0f409dc0d" }, { "keyid": "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8", "sig": "7fa4506b7e9c6aac34b6c9b5e1099e8fa995fb1af7804cb9245b0132edf41739b7049277de11577c1ff72c1cf8fe41ba3ec32bf802cf16cb19e42765f53d3f0e" }, { "keyid": "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b", "sig": "8c5af6fd1930026a1a9d9816e18205dc4e6bbf0e4b9dd7385d9cc10ca6bf3609cce7c62d5ea5432e0a67e3c395531cf1c67f874f0ba1acb27bf161423b34500c" }, { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "ef03e8b766ffe280b1486460ee1b8cd92e6605d4d4af32696a0345b940767f7e3ae66f217b97eae12aa704fa5ee03073079046efe4c76c14989c4784d2d1fa0d" }, { "keyid": "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "sig": "0a536f66722b82fa8da8ef6837cdae1d719abe72dd27fe36a4fcb2d21302989bb897275825bfef3a5f93fd487f947c75c703da69ad67988c1be46a975a8a6602" }, { "keyid": "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "sig": "caf6083cc4ab3fc5a39cc243d08faf0724435b9189b4a3349cb8955b321d9c644697c9d96698e09a5c47f5d032a562c97b08a3e840dbb60f4224afeb438a3a0b" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:20:18Z", "keys": { "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f758af464295e62a1da4d3267be6d13f4aba9c7d52166d01b6bd5b4559496c9d" }, "scheme": "ed25519" }, "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f6b299bcfb4e15ef652c80e9e3dda995acbb4bf71dce889a82ba70228e45a8bf" }, "scheme": "ed25519" }, "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e104199cda6e018d7d9044fa6225aa5dc9c2af5ee4e1c0fe6d16ad002220390d" }, "scheme": "ed25519" }, "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "82f52e4503dbb364fabe8e5567f1cf909d4175d45468a021dfe75653db9ac98c" }, "scheme": "ed25519" }, "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "9b1db36a5cad80284b5f40b040621e0e444f25ee09efa5c1fd6da4499c711bd5" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "06e4dee0de7826c8d539a6112940b7459892b4ecaf696e67dc064aea0923f95c" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" }, "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "fa386632ae9cc358ad0b56565edef362ad10d7fadb05bc8dc8995627372b990e" }, "scheme": "ed25519" }, "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "683d345a948a9baa343be4e44c076ca115da3838e72c28a06340c8ec1b3ef6be" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b", "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb", "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8" ], "threshold": 4 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 1 } }1.snapshot.json000066400000000000000000000006571453140004500365160ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_root/client/metadata/previous{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "7945d5bbebfd0f077a6f8bcac4eed402709f07307663b935835712ff4fb4eebbc51146039d0a1ecb3bc7726c526f12e0b063cc3d9dae1c422179db99d4409b0c" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:20:18Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }1.targets.json000066400000000000000000000006711453140004500363240ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_root/client/metadata/previous{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "1c07f726a8988b2bbb150cd91c36fa2e0716eb904a89002e24f2382641d5f7680e04cbedbecf89034c8b6416b7a31d5c4bdcc20f0aa2cd976353828cda0e3e0e" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:20:18Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }1.timestamp.json000066400000000000000000000013001453140004500366440ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_root/client/metadata/previous{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "18e08cd54878e2af5838ed4445230e687ce0007c1b886b3c1446ee639365b0053e294c930b176fdb1258af9f957e4c4927beaccbbffb354cc27b9d5745257808" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:20:18Z", "meta": { "snapshot.json": { "hashes": { "sha256": "765e1bc98ad6235b9a6e1c200e8576c262ed924ba81a9960268a65b7fc1bba91", "sha512": "b245cd1eb39623b7d6d9d07765bae5e7a373471c4bfc66862042e50f0ced2fbe564dfd23565ce7746e926492d6543c700b22ce48bbe19f5e4128698d243cea49" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }root.json000066400000000000000000000155431453140004500355030ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_root/client/metadata/previous{ "signatures": [ { "keyid": "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "sig": "876195f83e8dbb1b00f70188fc7f405d05d321da97a9b98781f331d2dea6be1415d0a0b4e23697f2e30235e98c3503a2ec3aade3bd4c1bac8109f368d9ed5005" }, { "keyid": "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb", "sig": "ff3e54a7492085d33ebf25158ce673fdd7d871a49cdccbe31b35c9ba1c28b91fd22b161b8a226248b3ef3e81378cdaa1ef3e37c2100363ec1be6d87d19a2aa0c" }, { "keyid": "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "sig": "59da18183f6729135b74539865f55e5c6e3d837209b724922cd56dd79f46c7150016930f477707c78ee9e39ee0f1a8e18304ab4cdaf1c11f81f147cbf5c57904" }, { "keyid": "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "sig": "c0b98cba687cdab0628872207026501c9b3c289af113c0be83176a908e58a647b2be9716b37ae4acc78327bbcd715d97d200953681646f3bc918e6c0f409dc0d" }, { "keyid": "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8", "sig": "7fa4506b7e9c6aac34b6c9b5e1099e8fa995fb1af7804cb9245b0132edf41739b7049277de11577c1ff72c1cf8fe41ba3ec32bf802cf16cb19e42765f53d3f0e" }, { "keyid": "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b", "sig": "8c5af6fd1930026a1a9d9816e18205dc4e6bbf0e4b9dd7385d9cc10ca6bf3609cce7c62d5ea5432e0a67e3c395531cf1c67f874f0ba1acb27bf161423b34500c" }, { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "ef03e8b766ffe280b1486460ee1b8cd92e6605d4d4af32696a0345b940767f7e3ae66f217b97eae12aa704fa5ee03073079046efe4c76c14989c4784d2d1fa0d" }, { "keyid": "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "sig": "0a536f66722b82fa8da8ef6837cdae1d719abe72dd27fe36a4fcb2d21302989bb897275825bfef3a5f93fd487f947c75c703da69ad67988c1be46a975a8a6602" }, { "keyid": "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "sig": "caf6083cc4ab3fc5a39cc243d08faf0724435b9189b4a3349cb8955b321d9c644697c9d96698e09a5c47f5d032a562c97b08a3e840dbb60f4224afeb438a3a0b" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:20:18Z", "keys": { "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f758af464295e62a1da4d3267be6d13f4aba9c7d52166d01b6bd5b4559496c9d" }, "scheme": "ed25519" }, "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f6b299bcfb4e15ef652c80e9e3dda995acbb4bf71dce889a82ba70228e45a8bf" }, "scheme": "ed25519" }, "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e104199cda6e018d7d9044fa6225aa5dc9c2af5ee4e1c0fe6d16ad002220390d" }, "scheme": "ed25519" }, "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "82f52e4503dbb364fabe8e5567f1cf909d4175d45468a021dfe75653db9ac98c" }, "scheme": "ed25519" }, "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "9b1db36a5cad80284b5f40b040621e0e444f25ee09efa5c1fd6da4499c711bd5" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "06e4dee0de7826c8d539a6112940b7459892b4ecaf696e67dc064aea0923f95c" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" }, "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "fa386632ae9cc358ad0b56565edef362ad10d7fadb05bc8dc8995627372b990e" }, "scheme": "ed25519" }, "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "683d345a948a9baa343be4e44c076ca115da3838e72c28a06340c8ec1b3ef6be" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b", "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb", "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8" ], "threshold": 4 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 1 } }snapshot.json000066400000000000000000000006571453140004500363570ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_root/client/metadata/previous{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "7945d5bbebfd0f077a6f8bcac4eed402709f07307663b935835712ff4fb4eebbc51146039d0a1ecb3bc7726c526f12e0b063cc3d9dae1c422179db99d4409b0c" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:20:18Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }targets.json000066400000000000000000000006711453140004500361650ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_root/client/metadata/previous{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "1c07f726a8988b2bbb150cd91c36fa2e0716eb904a89002e24f2382641d5f7680e04cbedbecf89034c8b6416b7a31d5c4bdcc20f0aa2cd976353828cda0e3e0e" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:20:18Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }timestamp.json000066400000000000000000000013001453140004500365050ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_root/client/metadata/previous{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "18e08cd54878e2af5838ed4445230e687ce0007c1b886b3c1446ee639365b0053e294c930b176fdb1258af9f957e4c4927beaccbbffb354cc27b9d5745257808" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:20:18Z", "meta": { "snapshot.json": { "hashes": { "sha256": "765e1bc98ad6235b9a6e1c200e8576c262ed924ba81a9960268a65b7fc1bba91", "sha512": "b245cd1eb39623b7d6d9d07765bae5e7a373471c4bfc66862042e50f0ced2fbe564dfd23565ce7746e926492d6543c700b22ce48bbe19f5e4128698d243cea49" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_root/hash.txt000066400000000000000000000001001453140004500304350ustar00rootroot000000000000001b82d8de8e29a4cff4fa146b19aefdc45d3016b8b580c84d1252d0b38d008343client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_root/server/000077500000000000000000000000001453140004500302705ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_root/server/metadata.staged/000077500000000000000000000000001453140004500333165ustar00rootroot000000000000001.root.json000066400000000000000000000155431453140004500352640ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_root/server/metadata.staged{ "signatures": [ { "keyid": "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "sig": "876195f83e8dbb1b00f70188fc7f405d05d321da97a9b98781f331d2dea6be1415d0a0b4e23697f2e30235e98c3503a2ec3aade3bd4c1bac8109f368d9ed5005" }, { "keyid": "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb", "sig": "ff3e54a7492085d33ebf25158ce673fdd7d871a49cdccbe31b35c9ba1c28b91fd22b161b8a226248b3ef3e81378cdaa1ef3e37c2100363ec1be6d87d19a2aa0c" }, { "keyid": "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "sig": "59da18183f6729135b74539865f55e5c6e3d837209b724922cd56dd79f46c7150016930f477707c78ee9e39ee0f1a8e18304ab4cdaf1c11f81f147cbf5c57904" }, { "keyid": "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "sig": "c0b98cba687cdab0628872207026501c9b3c289af113c0be83176a908e58a647b2be9716b37ae4acc78327bbcd715d97d200953681646f3bc918e6c0f409dc0d" }, { "keyid": "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8", "sig": "7fa4506b7e9c6aac34b6c9b5e1099e8fa995fb1af7804cb9245b0132edf41739b7049277de11577c1ff72c1cf8fe41ba3ec32bf802cf16cb19e42765f53d3f0e" }, { "keyid": "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b", "sig": "8c5af6fd1930026a1a9d9816e18205dc4e6bbf0e4b9dd7385d9cc10ca6bf3609cce7c62d5ea5432e0a67e3c395531cf1c67f874f0ba1acb27bf161423b34500c" }, { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "ef03e8b766ffe280b1486460ee1b8cd92e6605d4d4af32696a0345b940767f7e3ae66f217b97eae12aa704fa5ee03073079046efe4c76c14989c4784d2d1fa0d" }, { "keyid": "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "sig": "0a536f66722b82fa8da8ef6837cdae1d719abe72dd27fe36a4fcb2d21302989bb897275825bfef3a5f93fd487f947c75c703da69ad67988c1be46a975a8a6602" }, { "keyid": "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "sig": "caf6083cc4ab3fc5a39cc243d08faf0724435b9189b4a3349cb8955b321d9c644697c9d96698e09a5c47f5d032a562c97b08a3e840dbb60f4224afeb438a3a0b" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:20:18Z", "keys": { "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f758af464295e62a1da4d3267be6d13f4aba9c7d52166d01b6bd5b4559496c9d" }, "scheme": "ed25519" }, "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f6b299bcfb4e15ef652c80e9e3dda995acbb4bf71dce889a82ba70228e45a8bf" }, "scheme": "ed25519" }, "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e104199cda6e018d7d9044fa6225aa5dc9c2af5ee4e1c0fe6d16ad002220390d" }, "scheme": "ed25519" }, "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "82f52e4503dbb364fabe8e5567f1cf909d4175d45468a021dfe75653db9ac98c" }, "scheme": "ed25519" }, "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "9b1db36a5cad80284b5f40b040621e0e444f25ee09efa5c1fd6da4499c711bd5" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "06e4dee0de7826c8d539a6112940b7459892b4ecaf696e67dc064aea0923f95c" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" }, "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "fa386632ae9cc358ad0b56565edef362ad10d7fadb05bc8dc8995627372b990e" }, "scheme": "ed25519" }, "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "683d345a948a9baa343be4e44c076ca115da3838e72c28a06340c8ec1b3ef6be" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b", "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb", "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8" ], "threshold": 4 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 1 } }1.snapshot.json000066400000000000000000000006571453140004500361400ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_root/server/metadata.staged{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "7945d5bbebfd0f077a6f8bcac4eed402709f07307663b935835712ff4fb4eebbc51146039d0a1ecb3bc7726c526f12e0b063cc3d9dae1c422179db99d4409b0c" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:20:18Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }1.targets.json000066400000000000000000000006711453140004500357460ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_root/server/metadata.staged{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "1c07f726a8988b2bbb150cd91c36fa2e0716eb904a89002e24f2382641d5f7680e04cbedbecf89034c8b6416b7a31d5c4bdcc20f0aa2cd976353828cda0e3e0e" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:20:18Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }1.timestamp.json000066400000000000000000000013001453140004500362660ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_root/server/metadata.staged{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "18e08cd54878e2af5838ed4445230e687ce0007c1b886b3c1446ee639365b0053e294c930b176fdb1258af9f957e4c4927beaccbbffb354cc27b9d5745257808" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:20:18Z", "meta": { "snapshot.json": { "hashes": { "sha256": "765e1bc98ad6235b9a6e1c200e8576c262ed924ba81a9960268a65b7fc1bba91", "sha512": "b245cd1eb39623b7d6d9d07765bae5e7a373471c4bfc66862042e50f0ced2fbe564dfd23565ce7746e926492d6543c700b22ce48bbe19f5e4128698d243cea49" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }2.root.json000066400000000000000000000141671453140004500352660ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_root/server/metadata.staged{ "signatures": [ { "keyid": "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "sig": "496695b909566a8c2c4649e334c1776b010116e7d1860d855bd53f0f0466c41f733b914828bd4134cdf3d1b2bff1961482f3aaf1dcb848c8dbe63c2c0c4cea0a" }, { "keyid": "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb", "sig": "52a32e1b2f680c803c2c79b2083be98abf05a8528a5155cff728578b21fce4b7b75a186875ff8e5b387feb6a6badc2b4bf86497a1e82830cc62636ffcc10850f" }, { "keyid": "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "sig": "1543bcd29a9ba609f50ce9cce682ceadba8df939b84dd06851f71bcea767f305580c69253179608b3fe8d3fe179158e4ee272f0e04bcc7a9aabf845dfccbcb02" }, { "keyid": "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "sig": "9a6c51a85bc11289755a7f4f61e6a8b21749d70bc1ee26b8ea77ddad49871e052aef72066ebd390632db4f4a88d093ec9c96bb073d63d535f7dbd4122be05a0b" }, { "keyid": "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8", "sig": "361ee22a20fe33cec10fc2fd807c542d3e981739b83fbb5346d94268cfa5bb5c47bfff94a8a48de0011e7dc789eaca880df3474deb8e5a6fb0147fe19d99570e" }, { "keyid": "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b", "sig": "c1ad1c1192587704f6aa3dd8f26b1fef81145676014ca3507d734eb1b1c5f07541573ae1e0641bb9a1d176f6459d34e8668fe3227f6eb85deb325309bce8d80f" }, { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "c7ec24a2dd742793056036bb2ce233b9750d633af21dcba4e7a33a9bb1879dc2664670ae7d15f482bfba54ac2a1844bc14a0859e22331657ac948880f543a70d" }, { "keyid": "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "sig": "4f693edf9fef84b4fded4107d5958a7578bf589422920d016155d189f09d415a0511055f723746840a1402eb80c7b693dd2dc8496a250308b8a4477172ec1104" }, { "keyid": "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "sig": "d88a622ae383cc75dd2f96629dd408483285afd450bdad37f1ade6a105a2367ea35200e8f74e9f29a4843308d59d1d29dbc12536e12a5eb00c4570a04606f300" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:20:18Z", "keys": { "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f6b299bcfb4e15ef652c80e9e3dda995acbb4bf71dce889a82ba70228e45a8bf" }, "scheme": "ed25519" }, "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e104199cda6e018d7d9044fa6225aa5dc9c2af5ee4e1c0fe6d16ad002220390d" }, "scheme": "ed25519" }, "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "82f52e4503dbb364fabe8e5567f1cf909d4175d45468a021dfe75653db9ac98c" }, "scheme": "ed25519" }, "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "9b1db36a5cad80284b5f40b040621e0e444f25ee09efa5c1fd6da4499c711bd5" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "06e4dee0de7826c8d539a6112940b7459892b4ecaf696e67dc064aea0923f95c" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" }, "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "fa386632ae9cc358ad0b56565edef362ad10d7fadb05bc8dc8995627372b990e" }, "scheme": "ed25519" }, "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "683d345a948a9baa343be4e44c076ca115da3838e72c28a06340c8ec1b3ef6be" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b", "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb", "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8" ], "threshold": 4 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 2 } }root.json000066400000000000000000000141671453140004500351260ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_root/server/metadata.staged{ "signatures": [ { "keyid": "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "sig": "496695b909566a8c2c4649e334c1776b010116e7d1860d855bd53f0f0466c41f733b914828bd4134cdf3d1b2bff1961482f3aaf1dcb848c8dbe63c2c0c4cea0a" }, { "keyid": "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb", "sig": "52a32e1b2f680c803c2c79b2083be98abf05a8528a5155cff728578b21fce4b7b75a186875ff8e5b387feb6a6badc2b4bf86497a1e82830cc62636ffcc10850f" }, { "keyid": "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "sig": "1543bcd29a9ba609f50ce9cce682ceadba8df939b84dd06851f71bcea767f305580c69253179608b3fe8d3fe179158e4ee272f0e04bcc7a9aabf845dfccbcb02" }, { "keyid": "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "sig": "9a6c51a85bc11289755a7f4f61e6a8b21749d70bc1ee26b8ea77ddad49871e052aef72066ebd390632db4f4a88d093ec9c96bb073d63d535f7dbd4122be05a0b" }, { "keyid": "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8", "sig": "361ee22a20fe33cec10fc2fd807c542d3e981739b83fbb5346d94268cfa5bb5c47bfff94a8a48de0011e7dc789eaca880df3474deb8e5a6fb0147fe19d99570e" }, { "keyid": "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b", "sig": "c1ad1c1192587704f6aa3dd8f26b1fef81145676014ca3507d734eb1b1c5f07541573ae1e0641bb9a1d176f6459d34e8668fe3227f6eb85deb325309bce8d80f" }, { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "c7ec24a2dd742793056036bb2ce233b9750d633af21dcba4e7a33a9bb1879dc2664670ae7d15f482bfba54ac2a1844bc14a0859e22331657ac948880f543a70d" }, { "keyid": "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "sig": "4f693edf9fef84b4fded4107d5958a7578bf589422920d016155d189f09d415a0511055f723746840a1402eb80c7b693dd2dc8496a250308b8a4477172ec1104" }, { "keyid": "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "sig": "d88a622ae383cc75dd2f96629dd408483285afd450bdad37f1ade6a105a2367ea35200e8f74e9f29a4843308d59d1d29dbc12536e12a5eb00c4570a04606f300" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:20:18Z", "keys": { "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f6b299bcfb4e15ef652c80e9e3dda995acbb4bf71dce889a82ba70228e45a8bf" }, "scheme": "ed25519" }, "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e104199cda6e018d7d9044fa6225aa5dc9c2af5ee4e1c0fe6d16ad002220390d" }, "scheme": "ed25519" }, "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "82f52e4503dbb364fabe8e5567f1cf909d4175d45468a021dfe75653db9ac98c" }, "scheme": "ed25519" }, "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "9b1db36a5cad80284b5f40b040621e0e444f25ee09efa5c1fd6da4499c711bd5" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "06e4dee0de7826c8d539a6112940b7459892b4ecaf696e67dc064aea0923f95c" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" }, "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "fa386632ae9cc358ad0b56565edef362ad10d7fadb05bc8dc8995627372b990e" }, "scheme": "ed25519" }, "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "683d345a948a9baa343be4e44c076ca115da3838e72c28a06340c8ec1b3ef6be" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b", "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb", "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8" ], "threshold": 4 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 2 } }snapshot.json000066400000000000000000000006571453140004500360010ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_root/server/metadata.staged{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "7945d5bbebfd0f077a6f8bcac4eed402709f07307663b935835712ff4fb4eebbc51146039d0a1ecb3bc7726c526f12e0b063cc3d9dae1c422179db99d4409b0c" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:20:18Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }targets.json000066400000000000000000000006711453140004500356070ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_root/server/metadata.staged{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "1c07f726a8988b2bbb150cd91c36fa2e0716eb904a89002e24f2382641d5f7680e04cbedbecf89034c8b6416b7a31d5c4bdcc20f0aa2cd976353828cda0e3e0e" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:20:18Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }timestamp.json000066400000000000000000000013001453140004500361270ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_root/server/metadata.staged{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "18e08cd54878e2af5838ed4445230e687ce0007c1b886b3c1446ee639365b0053e294c930b176fdb1258af9f957e4c4927beaccbbffb354cc27b9d5745257808" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:20:18Z", "meta": { "snapshot.json": { "hashes": { "sha256": "765e1bc98ad6235b9a6e1c200e8576c262ed924ba81a9960268a65b7fc1bba91", "sha512": "b245cd1eb39623b7d6d9d07765bae5e7a373471c4bfc66862042e50f0ced2fbe564dfd23565ce7746e926492d6543c700b22ce48bbe19f5e4128698d243cea49" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_root/server/metadata/000077500000000000000000000000001453140004500320505ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_root/server/metadata/1.root.json000066400000000000000000000155431453140004500340750ustar00rootroot00000000000000{ "signatures": [ { "keyid": "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "sig": "876195f83e8dbb1b00f70188fc7f405d05d321da97a9b98781f331d2dea6be1415d0a0b4e23697f2e30235e98c3503a2ec3aade3bd4c1bac8109f368d9ed5005" }, { "keyid": "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb", "sig": "ff3e54a7492085d33ebf25158ce673fdd7d871a49cdccbe31b35c9ba1c28b91fd22b161b8a226248b3ef3e81378cdaa1ef3e37c2100363ec1be6d87d19a2aa0c" }, { "keyid": "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "sig": "59da18183f6729135b74539865f55e5c6e3d837209b724922cd56dd79f46c7150016930f477707c78ee9e39ee0f1a8e18304ab4cdaf1c11f81f147cbf5c57904" }, { "keyid": "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "sig": "c0b98cba687cdab0628872207026501c9b3c289af113c0be83176a908e58a647b2be9716b37ae4acc78327bbcd715d97d200953681646f3bc918e6c0f409dc0d" }, { "keyid": "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8", "sig": "7fa4506b7e9c6aac34b6c9b5e1099e8fa995fb1af7804cb9245b0132edf41739b7049277de11577c1ff72c1cf8fe41ba3ec32bf802cf16cb19e42765f53d3f0e" }, { "keyid": "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b", "sig": "8c5af6fd1930026a1a9d9816e18205dc4e6bbf0e4b9dd7385d9cc10ca6bf3609cce7c62d5ea5432e0a67e3c395531cf1c67f874f0ba1acb27bf161423b34500c" }, { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "ef03e8b766ffe280b1486460ee1b8cd92e6605d4d4af32696a0345b940767f7e3ae66f217b97eae12aa704fa5ee03073079046efe4c76c14989c4784d2d1fa0d" }, { "keyid": "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "sig": "0a536f66722b82fa8da8ef6837cdae1d719abe72dd27fe36a4fcb2d21302989bb897275825bfef3a5f93fd487f947c75c703da69ad67988c1be46a975a8a6602" }, { "keyid": "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "sig": "caf6083cc4ab3fc5a39cc243d08faf0724435b9189b4a3349cb8955b321d9c644697c9d96698e09a5c47f5d032a562c97b08a3e840dbb60f4224afeb438a3a0b" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:20:18Z", "keys": { "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f758af464295e62a1da4d3267be6d13f4aba9c7d52166d01b6bd5b4559496c9d" }, "scheme": "ed25519" }, "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f6b299bcfb4e15ef652c80e9e3dda995acbb4bf71dce889a82ba70228e45a8bf" }, "scheme": "ed25519" }, "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e104199cda6e018d7d9044fa6225aa5dc9c2af5ee4e1c0fe6d16ad002220390d" }, "scheme": "ed25519" }, "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "82f52e4503dbb364fabe8e5567f1cf909d4175d45468a021dfe75653db9ac98c" }, "scheme": "ed25519" }, "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "9b1db36a5cad80284b5f40b040621e0e444f25ee09efa5c1fd6da4499c711bd5" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "06e4dee0de7826c8d539a6112940b7459892b4ecaf696e67dc064aea0923f95c" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" }, "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "fa386632ae9cc358ad0b56565edef362ad10d7fadb05bc8dc8995627372b990e" }, "scheme": "ed25519" }, "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "683d345a948a9baa343be4e44c076ca115da3838e72c28a06340c8ec1b3ef6be" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b", "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb", "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8" ], "threshold": 4 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 1 } }1.snapshot.json000066400000000000000000000006571453140004500346720ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_root/server/metadata{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "7945d5bbebfd0f077a6f8bcac4eed402709f07307663b935835712ff4fb4eebbc51146039d0a1ecb3bc7726c526f12e0b063cc3d9dae1c422179db99d4409b0c" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:20:18Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }1.targets.json000066400000000000000000000006711453140004500345000ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_root/server/metadata{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "1c07f726a8988b2bbb150cd91c36fa2e0716eb904a89002e24f2382641d5f7680e04cbedbecf89034c8b6416b7a31d5c4bdcc20f0aa2cd976353828cda0e3e0e" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:20:18Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }1.timestamp.json000066400000000000000000000013001453140004500350200ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_root/server/metadata{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "18e08cd54878e2af5838ed4445230e687ce0007c1b886b3c1446ee639365b0053e294c930b176fdb1258af9f957e4c4927beaccbbffb354cc27b9d5745257808" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:20:18Z", "meta": { "snapshot.json": { "hashes": { "sha256": "765e1bc98ad6235b9a6e1c200e8576c262ed924ba81a9960268a65b7fc1bba91", "sha512": "b245cd1eb39623b7d6d9d07765bae5e7a373471c4bfc66862042e50f0ced2fbe564dfd23565ce7746e926492d6543c700b22ce48bbe19f5e4128698d243cea49" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_root/server/metadata/2.root.json000066400000000000000000000141671453140004500340770ustar00rootroot00000000000000{ "signatures": [ { "keyid": "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "sig": "496695b909566a8c2c4649e334c1776b010116e7d1860d855bd53f0f0466c41f733b914828bd4134cdf3d1b2bff1961482f3aaf1dcb848c8dbe63c2c0c4cea0a" }, { "keyid": "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb", "sig": "52a32e1b2f680c803c2c79b2083be98abf05a8528a5155cff728578b21fce4b7b75a186875ff8e5b387feb6a6badc2b4bf86497a1e82830cc62636ffcc10850f" }, { "keyid": "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "sig": "1543bcd29a9ba609f50ce9cce682ceadba8df939b84dd06851f71bcea767f305580c69253179608b3fe8d3fe179158e4ee272f0e04bcc7a9aabf845dfccbcb02" }, { "keyid": "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "sig": "9a6c51a85bc11289755a7f4f61e6a8b21749d70bc1ee26b8ea77ddad49871e052aef72066ebd390632db4f4a88d093ec9c96bb073d63d535f7dbd4122be05a0b" }, { "keyid": "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8", "sig": "361ee22a20fe33cec10fc2fd807c542d3e981739b83fbb5346d94268cfa5bb5c47bfff94a8a48de0011e7dc789eaca880df3474deb8e5a6fb0147fe19d99570e" }, { "keyid": "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b", "sig": "c1ad1c1192587704f6aa3dd8f26b1fef81145676014ca3507d734eb1b1c5f07541573ae1e0641bb9a1d176f6459d34e8668fe3227f6eb85deb325309bce8d80f" }, { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "c7ec24a2dd742793056036bb2ce233b9750d633af21dcba4e7a33a9bb1879dc2664670ae7d15f482bfba54ac2a1844bc14a0859e22331657ac948880f543a70d" }, { "keyid": "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "sig": "4f693edf9fef84b4fded4107d5958a7578bf589422920d016155d189f09d415a0511055f723746840a1402eb80c7b693dd2dc8496a250308b8a4477172ec1104" }, { "keyid": "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "sig": "d88a622ae383cc75dd2f96629dd408483285afd450bdad37f1ade6a105a2367ea35200e8f74e9f29a4843308d59d1d29dbc12536e12a5eb00c4570a04606f300" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:20:18Z", "keys": { "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f6b299bcfb4e15ef652c80e9e3dda995acbb4bf71dce889a82ba70228e45a8bf" }, "scheme": "ed25519" }, "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e104199cda6e018d7d9044fa6225aa5dc9c2af5ee4e1c0fe6d16ad002220390d" }, "scheme": "ed25519" }, "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "82f52e4503dbb364fabe8e5567f1cf909d4175d45468a021dfe75653db9ac98c" }, "scheme": "ed25519" }, "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "9b1db36a5cad80284b5f40b040621e0e444f25ee09efa5c1fd6da4499c711bd5" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "06e4dee0de7826c8d539a6112940b7459892b4ecaf696e67dc064aea0923f95c" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" }, "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "fa386632ae9cc358ad0b56565edef362ad10d7fadb05bc8dc8995627372b990e" }, "scheme": "ed25519" }, "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "683d345a948a9baa343be4e44c076ca115da3838e72c28a06340c8ec1b3ef6be" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b", "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb", "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8" ], "threshold": 4 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 2 } }client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_root/server/metadata/root.json000066400000000000000000000141671453140004500337370ustar00rootroot00000000000000{ "signatures": [ { "keyid": "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "sig": "496695b909566a8c2c4649e334c1776b010116e7d1860d855bd53f0f0466c41f733b914828bd4134cdf3d1b2bff1961482f3aaf1dcb848c8dbe63c2c0c4cea0a" }, { "keyid": "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb", "sig": "52a32e1b2f680c803c2c79b2083be98abf05a8528a5155cff728578b21fce4b7b75a186875ff8e5b387feb6a6badc2b4bf86497a1e82830cc62636ffcc10850f" }, { "keyid": "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "sig": "1543bcd29a9ba609f50ce9cce682ceadba8df939b84dd06851f71bcea767f305580c69253179608b3fe8d3fe179158e4ee272f0e04bcc7a9aabf845dfccbcb02" }, { "keyid": "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "sig": "9a6c51a85bc11289755a7f4f61e6a8b21749d70bc1ee26b8ea77ddad49871e052aef72066ebd390632db4f4a88d093ec9c96bb073d63d535f7dbd4122be05a0b" }, { "keyid": "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8", "sig": "361ee22a20fe33cec10fc2fd807c542d3e981739b83fbb5346d94268cfa5bb5c47bfff94a8a48de0011e7dc789eaca880df3474deb8e5a6fb0147fe19d99570e" }, { "keyid": "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b", "sig": "c1ad1c1192587704f6aa3dd8f26b1fef81145676014ca3507d734eb1b1c5f07541573ae1e0641bb9a1d176f6459d34e8668fe3227f6eb85deb325309bce8d80f" }, { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "c7ec24a2dd742793056036bb2ce233b9750d633af21dcba4e7a33a9bb1879dc2664670ae7d15f482bfba54ac2a1844bc14a0859e22331657ac948880f543a70d" }, { "keyid": "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "sig": "4f693edf9fef84b4fded4107d5958a7578bf589422920d016155d189f09d415a0511055f723746840a1402eb80c7b693dd2dc8496a250308b8a4477172ec1104" }, { "keyid": "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "sig": "d88a622ae383cc75dd2f96629dd408483285afd450bdad37f1ade6a105a2367ea35200e8f74e9f29a4843308d59d1d29dbc12536e12a5eb00c4570a04606f300" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:20:18Z", "keys": { "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f6b299bcfb4e15ef652c80e9e3dda995acbb4bf71dce889a82ba70228e45a8bf" }, "scheme": "ed25519" }, "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e104199cda6e018d7d9044fa6225aa5dc9c2af5ee4e1c0fe6d16ad002220390d" }, "scheme": "ed25519" }, "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "82f52e4503dbb364fabe8e5567f1cf909d4175d45468a021dfe75653db9ac98c" }, "scheme": "ed25519" }, "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "9b1db36a5cad80284b5f40b040621e0e444f25ee09efa5c1fd6da4499c711bd5" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "06e4dee0de7826c8d539a6112940b7459892b4ecaf696e67dc064aea0923f95c" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" }, "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "fa386632ae9cc358ad0b56565edef362ad10d7fadb05bc8dc8995627372b990e" }, "scheme": "ed25519" }, "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "683d345a948a9baa343be4e44c076ca115da3838e72c28a06340c8ec1b3ef6be" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b", "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb", "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8" ], "threshold": 4 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 2 } }client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_root/server/metadata/snapshot.json000066400000000000000000000006571453140004500346120ustar00rootroot00000000000000{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "7945d5bbebfd0f077a6f8bcac4eed402709f07307663b935835712ff4fb4eebbc51146039d0a1ecb3bc7726c526f12e0b063cc3d9dae1c422179db99d4409b0c" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:20:18Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_root/server/metadata/targets.json000066400000000000000000000006711453140004500344200ustar00rootroot00000000000000{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "1c07f726a8988b2bbb150cd91c36fa2e0716eb904a89002e24f2382641d5f7680e04cbedbecf89034c8b6416b7a31d5c4bdcc20f0aa2cd976353828cda0e3e0e" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:20:18Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }timestamp.json000066400000000000000000000013001453140004500346610ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_root/server/metadata{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "18e08cd54878e2af5838ed4445230e687ce0007c1b886b3c1446ee639365b0053e294c930b176fdb1258af9f957e4c4927beaccbbffb354cc27b9d5745257808" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:20:18Z", "meta": { "snapshot.json": { "hashes": { "sha256": "765e1bc98ad6235b9a6e1c200e8576c262ed924ba81a9960268a65b7fc1bba91", "sha512": "b245cd1eb39623b7d6d9d07765bae5e7a373471c4bfc66862042e50f0ced2fbe564dfd23565ce7746e926492d6543c700b22ce48bbe19f5e4128698d243cea49" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_snapshot/000077500000000000000000000000001453140004500276365ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_snapshot/client/000077500000000000000000000000001453140004500311145ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_snapshot/client/metadata/000077500000000000000000000000001453140004500326745ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_snapshot/client/metadata/current/000077500000000000000000000000001453140004500343565ustar00rootroot000000000000001.root.json000066400000000000000000000120631453140004500363160ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_snapshot/client/metadata/current{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "6fcc711c61ce5cebe08cc4f3ed4ccfbee0d33a223cea1258d8a10af6be18627129d2ab2b063283eadcd36e67dd8713af00390aa44733ce9889e2aee2e2e1c600" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:20:19Z", "keys": { "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f758af464295e62a1da4d3267be6d13f4aba9c7d52166d01b6bd5b4559496c9d" }, "scheme": "ed25519" }, "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f6b299bcfb4e15ef652c80e9e3dda995acbb4bf71dce889a82ba70228e45a8bf" }, "scheme": "ed25519" }, "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e104199cda6e018d7d9044fa6225aa5dc9c2af5ee4e1c0fe6d16ad002220390d" }, "scheme": "ed25519" }, "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "82f52e4503dbb364fabe8e5567f1cf909d4175d45468a021dfe75653db9ac98c" }, "scheme": "ed25519" }, "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "9b1db36a5cad80284b5f40b040621e0e444f25ee09efa5c1fd6da4499c711bd5" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "06e4dee0de7826c8d539a6112940b7459892b4ecaf696e67dc064aea0923f95c" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" }, "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "fa386632ae9cc358ad0b56565edef362ad10d7fadb05bc8dc8995627372b990e" }, "scheme": "ed25519" }, "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "683d345a948a9baa343be4e44c076ca115da3838e72c28a06340c8ec1b3ef6be" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b", "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb", "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8" ], "threshold": 4 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 1 } }1.snapshot.json000066400000000000000000000043371453140004500371770ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_snapshot/client/metadata/current{ "signatures": [ { "keyid": "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "sig": "9b7a3b750e08dfc308b46c3671df8385f782507498c03d2f9f7ecd08045e1112ae034e176f5afea79008aa6bc6dd514fc86aaeec598521d2b5e3247d28e56f0b" }, { "keyid": "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb", "sig": "65b00baea2495c7c2093e65b249597160020ec400ec993979ac07acfc99aab4ea8a2a5ed30bde8ac6c9e7d762d2a6f508ba2aefe47b3615d7eb3d3807d6ebe08" }, { "keyid": "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "sig": "02926e5f258062cad02f5246701737146bd84ce82a3641d172e0534204604be437aea4842a55964a368416679255308c0db6f7980c885d9afaeae92fc779a40d" }, { "keyid": "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "sig": "9efc64982359e93211f05350e1399c1953579807ace961423cdc5c2406df96180b56f94ddac14511bc8430625f230235f51a98e9c546c262f9b444e08c31c50d" }, { "keyid": "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8", "sig": "3105c9e05fb0a536586a9f241c40ffd0696bb11be43bc50ad18fb63799764139a839bee36c58e509d725b4350658c3d3c2a3e60050de66eda65a87be36b6cc03" }, { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "7b4fd39d2babaead15732edf5cadd72b77e3e3cc8b46a5462fe9eadf4ef79cffe15d7b95d56b94d2e4776a2892c5c9ca7895ec6fabaaa563071be633375b3c03" }, { "keyid": "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b", "sig": "24b9b1f3730d6cc8293d83ebae86e3ea3a9bbb4d0a8907b2c71001cc1b0d257814f037f5aa06f8425e871c66f7c377ab197bfceb4402144924dbbe0422103607" }, { "keyid": "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "sig": "5bc6f5738109fe3be3e02c8558a241d61d7494fd76a0274774485ff6b010f41f718b184a3a743a2ceb16324e5bcd57daa6fb87cf32c85bf6c01d8a3098238308" }, { "keyid": "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "sig": "3e3a376641fce12b3df639293cf52c29fbf6a04398ab6e69d2bf12cfae264ace4c984816440536e870cc50816fb2b94e9b9824ce873c7237561afa9bbb649304" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:20:19Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }1.targets.json000066400000000000000000000006711453140004500370060ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_snapshot/client/metadata/current{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "51fff9a858517278b811fc9b8dc4fee5e10c5f444a87bc259cb0241ea54f1da693cf844412693d6ea24bed5302a508d08879e0a32a961f1132a646ef9f370a07" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:20:19Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }1.timestamp.json000066400000000000000000000013011453140004500373270ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_snapshot/client/metadata/current{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "de078d3c5438334ab51ed4e433cab94b53f883dad9519505ebe64088f13077f725d96b54c10afbf7909c95ddfd829d0bcca82e09612b91d63dbc9a34e830270c" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:20:19Z", "meta": { "snapshot.json": { "hashes": { "sha256": "16459413316a5b9a617e84c06840164beaa4d7ef0b67c0c720acefc89cb15be3", "sha512": "c118a299f2be396ef21097a0803166b1d796256a3c68e3590e1addd656e804dd28d32e67664e460066af4b956f50fcd1abd8b614e2535fb7e175d8e2819d1d87" }, "length": 2271, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }root.json000066400000000000000000000120631453140004500361570ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_snapshot/client/metadata/current{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "6fcc711c61ce5cebe08cc4f3ed4ccfbee0d33a223cea1258d8a10af6be18627129d2ab2b063283eadcd36e67dd8713af00390aa44733ce9889e2aee2e2e1c600" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:20:19Z", "keys": { "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f758af464295e62a1da4d3267be6d13f4aba9c7d52166d01b6bd5b4559496c9d" }, "scheme": "ed25519" }, "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f6b299bcfb4e15ef652c80e9e3dda995acbb4bf71dce889a82ba70228e45a8bf" }, "scheme": "ed25519" }, "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e104199cda6e018d7d9044fa6225aa5dc9c2af5ee4e1c0fe6d16ad002220390d" }, "scheme": "ed25519" }, "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "82f52e4503dbb364fabe8e5567f1cf909d4175d45468a021dfe75653db9ac98c" }, "scheme": "ed25519" }, "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "9b1db36a5cad80284b5f40b040621e0e444f25ee09efa5c1fd6da4499c711bd5" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "06e4dee0de7826c8d539a6112940b7459892b4ecaf696e67dc064aea0923f95c" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" }, "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "fa386632ae9cc358ad0b56565edef362ad10d7fadb05bc8dc8995627372b990e" }, "scheme": "ed25519" }, "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "683d345a948a9baa343be4e44c076ca115da3838e72c28a06340c8ec1b3ef6be" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b", "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb", "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8" ], "threshold": 4 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 1 } }snapshot.json000066400000000000000000000043371453140004500370400ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_snapshot/client/metadata/current{ "signatures": [ { "keyid": "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "sig": "9b7a3b750e08dfc308b46c3671df8385f782507498c03d2f9f7ecd08045e1112ae034e176f5afea79008aa6bc6dd514fc86aaeec598521d2b5e3247d28e56f0b" }, { "keyid": "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb", "sig": "65b00baea2495c7c2093e65b249597160020ec400ec993979ac07acfc99aab4ea8a2a5ed30bde8ac6c9e7d762d2a6f508ba2aefe47b3615d7eb3d3807d6ebe08" }, { "keyid": "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "sig": "02926e5f258062cad02f5246701737146bd84ce82a3641d172e0534204604be437aea4842a55964a368416679255308c0db6f7980c885d9afaeae92fc779a40d" }, { "keyid": "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "sig": "9efc64982359e93211f05350e1399c1953579807ace961423cdc5c2406df96180b56f94ddac14511bc8430625f230235f51a98e9c546c262f9b444e08c31c50d" }, { "keyid": "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8", "sig": "3105c9e05fb0a536586a9f241c40ffd0696bb11be43bc50ad18fb63799764139a839bee36c58e509d725b4350658c3d3c2a3e60050de66eda65a87be36b6cc03" }, { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "7b4fd39d2babaead15732edf5cadd72b77e3e3cc8b46a5462fe9eadf4ef79cffe15d7b95d56b94d2e4776a2892c5c9ca7895ec6fabaaa563071be633375b3c03" }, { "keyid": "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b", "sig": "24b9b1f3730d6cc8293d83ebae86e3ea3a9bbb4d0a8907b2c71001cc1b0d257814f037f5aa06f8425e871c66f7c377ab197bfceb4402144924dbbe0422103607" }, { "keyid": "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "sig": "5bc6f5738109fe3be3e02c8558a241d61d7494fd76a0274774485ff6b010f41f718b184a3a743a2ceb16324e5bcd57daa6fb87cf32c85bf6c01d8a3098238308" }, { "keyid": "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "sig": "3e3a376641fce12b3df639293cf52c29fbf6a04398ab6e69d2bf12cfae264ace4c984816440536e870cc50816fb2b94e9b9824ce873c7237561afa9bbb649304" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:20:19Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }targets.json000066400000000000000000000006711453140004500366470ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_snapshot/client/metadata/current{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "51fff9a858517278b811fc9b8dc4fee5e10c5f444a87bc259cb0241ea54f1da693cf844412693d6ea24bed5302a508d08879e0a32a961f1132a646ef9f370a07" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:20:19Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }timestamp.json000066400000000000000000000013011453140004500371700ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_snapshot/client/metadata/current{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "de078d3c5438334ab51ed4e433cab94b53f883dad9519505ebe64088f13077f725d96b54c10afbf7909c95ddfd829d0bcca82e09612b91d63dbc9a34e830270c" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:20:19Z", "meta": { "snapshot.json": { "hashes": { "sha256": "16459413316a5b9a617e84c06840164beaa4d7ef0b67c0c720acefc89cb15be3", "sha512": "c118a299f2be396ef21097a0803166b1d796256a3c68e3590e1addd656e804dd28d32e67664e460066af4b956f50fcd1abd8b614e2535fb7e175d8e2819d1d87" }, "length": 2271, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_snapshot/client/metadata/previous/000077500000000000000000000000001453140004500345505ustar00rootroot000000000000001.root.json000066400000000000000000000120631453140004500365100ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_snapshot/client/metadata/previous{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "6fcc711c61ce5cebe08cc4f3ed4ccfbee0d33a223cea1258d8a10af6be18627129d2ab2b063283eadcd36e67dd8713af00390aa44733ce9889e2aee2e2e1c600" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:20:19Z", "keys": { "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f758af464295e62a1da4d3267be6d13f4aba9c7d52166d01b6bd5b4559496c9d" }, "scheme": "ed25519" }, "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f6b299bcfb4e15ef652c80e9e3dda995acbb4bf71dce889a82ba70228e45a8bf" }, "scheme": "ed25519" }, "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e104199cda6e018d7d9044fa6225aa5dc9c2af5ee4e1c0fe6d16ad002220390d" }, "scheme": "ed25519" }, "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "82f52e4503dbb364fabe8e5567f1cf909d4175d45468a021dfe75653db9ac98c" }, "scheme": "ed25519" }, "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "9b1db36a5cad80284b5f40b040621e0e444f25ee09efa5c1fd6da4499c711bd5" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "06e4dee0de7826c8d539a6112940b7459892b4ecaf696e67dc064aea0923f95c" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" }, "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "fa386632ae9cc358ad0b56565edef362ad10d7fadb05bc8dc8995627372b990e" }, "scheme": "ed25519" }, "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "683d345a948a9baa343be4e44c076ca115da3838e72c28a06340c8ec1b3ef6be" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b", "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb", "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8" ], "threshold": 4 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 1 } }1.snapshot.json000066400000000000000000000043371453140004500373710ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_snapshot/client/metadata/previous{ "signatures": [ { "keyid": "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "sig": "9b7a3b750e08dfc308b46c3671df8385f782507498c03d2f9f7ecd08045e1112ae034e176f5afea79008aa6bc6dd514fc86aaeec598521d2b5e3247d28e56f0b" }, { "keyid": "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb", "sig": "65b00baea2495c7c2093e65b249597160020ec400ec993979ac07acfc99aab4ea8a2a5ed30bde8ac6c9e7d762d2a6f508ba2aefe47b3615d7eb3d3807d6ebe08" }, { "keyid": "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "sig": "02926e5f258062cad02f5246701737146bd84ce82a3641d172e0534204604be437aea4842a55964a368416679255308c0db6f7980c885d9afaeae92fc779a40d" }, { "keyid": "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "sig": "9efc64982359e93211f05350e1399c1953579807ace961423cdc5c2406df96180b56f94ddac14511bc8430625f230235f51a98e9c546c262f9b444e08c31c50d" }, { "keyid": "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8", "sig": "3105c9e05fb0a536586a9f241c40ffd0696bb11be43bc50ad18fb63799764139a839bee36c58e509d725b4350658c3d3c2a3e60050de66eda65a87be36b6cc03" }, { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "7b4fd39d2babaead15732edf5cadd72b77e3e3cc8b46a5462fe9eadf4ef79cffe15d7b95d56b94d2e4776a2892c5c9ca7895ec6fabaaa563071be633375b3c03" }, { "keyid": "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b", "sig": "24b9b1f3730d6cc8293d83ebae86e3ea3a9bbb4d0a8907b2c71001cc1b0d257814f037f5aa06f8425e871c66f7c377ab197bfceb4402144924dbbe0422103607" }, { "keyid": "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "sig": "5bc6f5738109fe3be3e02c8558a241d61d7494fd76a0274774485ff6b010f41f718b184a3a743a2ceb16324e5bcd57daa6fb87cf32c85bf6c01d8a3098238308" }, { "keyid": "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "sig": "3e3a376641fce12b3df639293cf52c29fbf6a04398ab6e69d2bf12cfae264ace4c984816440536e870cc50816fb2b94e9b9824ce873c7237561afa9bbb649304" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:20:19Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }1.targets.json000066400000000000000000000006711453140004500372000ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_snapshot/client/metadata/previous{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "51fff9a858517278b811fc9b8dc4fee5e10c5f444a87bc259cb0241ea54f1da693cf844412693d6ea24bed5302a508d08879e0a32a961f1132a646ef9f370a07" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:20:19Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }1.timestamp.json000066400000000000000000000013011453140004500375210ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_snapshot/client/metadata/previous{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "de078d3c5438334ab51ed4e433cab94b53f883dad9519505ebe64088f13077f725d96b54c10afbf7909c95ddfd829d0bcca82e09612b91d63dbc9a34e830270c" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:20:19Z", "meta": { "snapshot.json": { "hashes": { "sha256": "16459413316a5b9a617e84c06840164beaa4d7ef0b67c0c720acefc89cb15be3", "sha512": "c118a299f2be396ef21097a0803166b1d796256a3c68e3590e1addd656e804dd28d32e67664e460066af4b956f50fcd1abd8b614e2535fb7e175d8e2819d1d87" }, "length": 2271, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }root.json000066400000000000000000000120631453140004500363510ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_snapshot/client/metadata/previous{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "6fcc711c61ce5cebe08cc4f3ed4ccfbee0d33a223cea1258d8a10af6be18627129d2ab2b063283eadcd36e67dd8713af00390aa44733ce9889e2aee2e2e1c600" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:20:19Z", "keys": { "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f758af464295e62a1da4d3267be6d13f4aba9c7d52166d01b6bd5b4559496c9d" }, "scheme": "ed25519" }, "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f6b299bcfb4e15ef652c80e9e3dda995acbb4bf71dce889a82ba70228e45a8bf" }, "scheme": "ed25519" }, "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e104199cda6e018d7d9044fa6225aa5dc9c2af5ee4e1c0fe6d16ad002220390d" }, "scheme": "ed25519" }, "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "82f52e4503dbb364fabe8e5567f1cf909d4175d45468a021dfe75653db9ac98c" }, "scheme": "ed25519" }, "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "9b1db36a5cad80284b5f40b040621e0e444f25ee09efa5c1fd6da4499c711bd5" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "06e4dee0de7826c8d539a6112940b7459892b4ecaf696e67dc064aea0923f95c" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" }, "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "fa386632ae9cc358ad0b56565edef362ad10d7fadb05bc8dc8995627372b990e" }, "scheme": "ed25519" }, "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "683d345a948a9baa343be4e44c076ca115da3838e72c28a06340c8ec1b3ef6be" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b", "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb", "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8" ], "threshold": 4 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 1 } }snapshot.json000066400000000000000000000043371453140004500372320ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_snapshot/client/metadata/previous{ "signatures": [ { "keyid": "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "sig": "9b7a3b750e08dfc308b46c3671df8385f782507498c03d2f9f7ecd08045e1112ae034e176f5afea79008aa6bc6dd514fc86aaeec598521d2b5e3247d28e56f0b" }, { "keyid": "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb", "sig": "65b00baea2495c7c2093e65b249597160020ec400ec993979ac07acfc99aab4ea8a2a5ed30bde8ac6c9e7d762d2a6f508ba2aefe47b3615d7eb3d3807d6ebe08" }, { "keyid": "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "sig": "02926e5f258062cad02f5246701737146bd84ce82a3641d172e0534204604be437aea4842a55964a368416679255308c0db6f7980c885d9afaeae92fc779a40d" }, { "keyid": "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "sig": "9efc64982359e93211f05350e1399c1953579807ace961423cdc5c2406df96180b56f94ddac14511bc8430625f230235f51a98e9c546c262f9b444e08c31c50d" }, { "keyid": "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8", "sig": "3105c9e05fb0a536586a9f241c40ffd0696bb11be43bc50ad18fb63799764139a839bee36c58e509d725b4350658c3d3c2a3e60050de66eda65a87be36b6cc03" }, { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "7b4fd39d2babaead15732edf5cadd72b77e3e3cc8b46a5462fe9eadf4ef79cffe15d7b95d56b94d2e4776a2892c5c9ca7895ec6fabaaa563071be633375b3c03" }, { "keyid": "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b", "sig": "24b9b1f3730d6cc8293d83ebae86e3ea3a9bbb4d0a8907b2c71001cc1b0d257814f037f5aa06f8425e871c66f7c377ab197bfceb4402144924dbbe0422103607" }, { "keyid": "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "sig": "5bc6f5738109fe3be3e02c8558a241d61d7494fd76a0274774485ff6b010f41f718b184a3a743a2ceb16324e5bcd57daa6fb87cf32c85bf6c01d8a3098238308" }, { "keyid": "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "sig": "3e3a376641fce12b3df639293cf52c29fbf6a04398ab6e69d2bf12cfae264ace4c984816440536e870cc50816fb2b94e9b9824ce873c7237561afa9bbb649304" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:20:19Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }targets.json000066400000000000000000000006711453140004500370410ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_snapshot/client/metadata/previous{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "51fff9a858517278b811fc9b8dc4fee5e10c5f444a87bc259cb0241ea54f1da693cf844412693d6ea24bed5302a508d08879e0a32a961f1132a646ef9f370a07" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:20:19Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }timestamp.json000066400000000000000000000013011453140004500373620ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_snapshot/client/metadata/previous{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "de078d3c5438334ab51ed4e433cab94b53f883dad9519505ebe64088f13077f725d96b54c10afbf7909c95ddfd829d0bcca82e09612b91d63dbc9a34e830270c" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:20:19Z", "meta": { "snapshot.json": { "hashes": { "sha256": "16459413316a5b9a617e84c06840164beaa4d7ef0b67c0c720acefc89cb15be3", "sha512": "c118a299f2be396ef21097a0803166b1d796256a3c68e3590e1addd656e804dd28d32e67664e460066af4b956f50fcd1abd8b614e2535fb7e175d8e2819d1d87" }, "length": 2271, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_snapshot/hash.txt000066400000000000000000000001001453140004500313110ustar00rootroot000000000000002818c21e8ecee671a52421bedf8cbe7df0e4b7ed45cdf9fa17a10f26bd90989eclient/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_snapshot/server/000077500000000000000000000000001453140004500311445ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_snapshot/server/metadata.staged/000077500000000000000000000000001453140004500341725ustar00rootroot000000000000001.root.json000066400000000000000000000120631453140004500361320ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_snapshot/server/metadata.staged{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "6fcc711c61ce5cebe08cc4f3ed4ccfbee0d33a223cea1258d8a10af6be18627129d2ab2b063283eadcd36e67dd8713af00390aa44733ce9889e2aee2e2e1c600" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:20:19Z", "keys": { "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f758af464295e62a1da4d3267be6d13f4aba9c7d52166d01b6bd5b4559496c9d" }, "scheme": "ed25519" }, "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f6b299bcfb4e15ef652c80e9e3dda995acbb4bf71dce889a82ba70228e45a8bf" }, "scheme": "ed25519" }, "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e104199cda6e018d7d9044fa6225aa5dc9c2af5ee4e1c0fe6d16ad002220390d" }, "scheme": "ed25519" }, "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "82f52e4503dbb364fabe8e5567f1cf909d4175d45468a021dfe75653db9ac98c" }, "scheme": "ed25519" }, "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "9b1db36a5cad80284b5f40b040621e0e444f25ee09efa5c1fd6da4499c711bd5" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "06e4dee0de7826c8d539a6112940b7459892b4ecaf696e67dc064aea0923f95c" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" }, "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "fa386632ae9cc358ad0b56565edef362ad10d7fadb05bc8dc8995627372b990e" }, "scheme": "ed25519" }, "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "683d345a948a9baa343be4e44c076ca115da3838e72c28a06340c8ec1b3ef6be" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b", "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb", "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8" ], "threshold": 4 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 1 } }1.snapshot.json000066400000000000000000000043371453140004500370130ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_snapshot/server/metadata.staged{ "signatures": [ { "keyid": "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "sig": "9b7a3b750e08dfc308b46c3671df8385f782507498c03d2f9f7ecd08045e1112ae034e176f5afea79008aa6bc6dd514fc86aaeec598521d2b5e3247d28e56f0b" }, { "keyid": "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb", "sig": "65b00baea2495c7c2093e65b249597160020ec400ec993979ac07acfc99aab4ea8a2a5ed30bde8ac6c9e7d762d2a6f508ba2aefe47b3615d7eb3d3807d6ebe08" }, { "keyid": "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "sig": "02926e5f258062cad02f5246701737146bd84ce82a3641d172e0534204604be437aea4842a55964a368416679255308c0db6f7980c885d9afaeae92fc779a40d" }, { "keyid": "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "sig": "9efc64982359e93211f05350e1399c1953579807ace961423cdc5c2406df96180b56f94ddac14511bc8430625f230235f51a98e9c546c262f9b444e08c31c50d" }, { "keyid": "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8", "sig": "3105c9e05fb0a536586a9f241c40ffd0696bb11be43bc50ad18fb63799764139a839bee36c58e509d725b4350658c3d3c2a3e60050de66eda65a87be36b6cc03" }, { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "7b4fd39d2babaead15732edf5cadd72b77e3e3cc8b46a5462fe9eadf4ef79cffe15d7b95d56b94d2e4776a2892c5c9ca7895ec6fabaaa563071be633375b3c03" }, { "keyid": "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b", "sig": "24b9b1f3730d6cc8293d83ebae86e3ea3a9bbb4d0a8907b2c71001cc1b0d257814f037f5aa06f8425e871c66f7c377ab197bfceb4402144924dbbe0422103607" }, { "keyid": "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "sig": "5bc6f5738109fe3be3e02c8558a241d61d7494fd76a0274774485ff6b010f41f718b184a3a743a2ceb16324e5bcd57daa6fb87cf32c85bf6c01d8a3098238308" }, { "keyid": "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "sig": "3e3a376641fce12b3df639293cf52c29fbf6a04398ab6e69d2bf12cfae264ace4c984816440536e870cc50816fb2b94e9b9824ce873c7237561afa9bbb649304" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:20:19Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }1.targets.json000066400000000000000000000006711453140004500366220ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_snapshot/server/metadata.staged{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "51fff9a858517278b811fc9b8dc4fee5e10c5f444a87bc259cb0241ea54f1da693cf844412693d6ea24bed5302a508d08879e0a32a961f1132a646ef9f370a07" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:20:19Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }1.timestamp.json000066400000000000000000000013011453140004500371430ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_snapshot/server/metadata.staged{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "de078d3c5438334ab51ed4e433cab94b53f883dad9519505ebe64088f13077f725d96b54c10afbf7909c95ddfd829d0bcca82e09612b91d63dbc9a34e830270c" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:20:19Z", "meta": { "snapshot.json": { "hashes": { "sha256": "16459413316a5b9a617e84c06840164beaa4d7ef0b67c0c720acefc89cb15be3", "sha512": "c118a299f2be396ef21097a0803166b1d796256a3c68e3590e1addd656e804dd28d32e67664e460066af4b956f50fcd1abd8b614e2535fb7e175d8e2819d1d87" }, "length": 2271, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }2.root.json000066400000000000000000000105071453140004500361340ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_snapshot/server/metadata.staged{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "06aa273601715be06bd54ca5f74d7e8e5e5130646a2a7e21fbcef3d30167bf001805f3df25b06b8c0de5e1d17dba8562c454011262c6523a4e64ce24390b4d0c" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:20:19Z", "keys": { "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f6b299bcfb4e15ef652c80e9e3dda995acbb4bf71dce889a82ba70228e45a8bf" }, "scheme": "ed25519" }, "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e104199cda6e018d7d9044fa6225aa5dc9c2af5ee4e1c0fe6d16ad002220390d" }, "scheme": "ed25519" }, "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "82f52e4503dbb364fabe8e5567f1cf909d4175d45468a021dfe75653db9ac98c" }, "scheme": "ed25519" }, "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "9b1db36a5cad80284b5f40b040621e0e444f25ee09efa5c1fd6da4499c711bd5" }, "scheme": "ed25519" }, "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "06e4dee0de7826c8d539a6112940b7459892b4ecaf696e67dc064aea0923f95c" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" }, "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "fa386632ae9cc358ad0b56565edef362ad10d7fadb05bc8dc8995627372b990e" }, "scheme": "ed25519" }, "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "683d345a948a9baa343be4e44c076ca115da3838e72c28a06340c8ec1b3ef6be" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b", "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb", "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8" ], "threshold": 4 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 2 } }2.snapshot.json000066400000000000000000000043371453140004500370140ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_snapshot/server/metadata.staged{ "signatures": [ { "keyid": "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "sig": "25cd6eee4f580fed660330de02cb9ab34b9e7495d3f4c57babf225c3c2c39a0937afe633a7760c19681c6b05d89f2c3907a7eef32822992624223cfbcb872d00" }, { "keyid": "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb", "sig": "2011938c47cf0990172acc5a418b9758d124655200b6874fb6646bd6025de6c5a48a3c30ced83b1f955b242c1c3f4d2d346b71861fccdc45c945418aa2511d0e" }, { "keyid": "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "sig": "303b7b1062a09644bd18804b6b1af6818c25abd212b6539cab0fab0e729a4eb14621396fde4d809649c37b82db5278e878b21b52052ac4fecbcff471c8f64408" }, { "keyid": "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "sig": "85961c73d21ab17e5892681198479700a995920cd02001818979fe35122e5776fcc3fd499811b1f995f922ad737d61c5b72229ab1e4d7aab63d9ea1642795c0d" }, { "keyid": "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8", "sig": "4aed1e9ef8d1ac785d15df386470df92ff484f71c35a37ecd1e83e0fd66e67206172f6a2f277bdebae17372e75d253b45143adf3f9d8b6d23a4690d482e2180b" }, { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "26ed17502d130ab4c7b26a1ef78730d9f15847cc3aa6623f692003e588554761b6f6c3b60da304933b3e012478466ce634970562504fdab9b6d2c8e818f3220e" }, { "keyid": "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b", "sig": "0b498cf7cd3a926007f158d9b72002283d67f4f0c2e4a61d5bb3d3afe09d0e9dcd41a4bc67d5cc87a2d072028904d2e022ca4d2abc84137433cdd6812f613505" }, { "keyid": "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "sig": "1f9aea75e9b632f06769ac0aa611ce3116faa14a3736cddc4cdbcae5f7084a0cd44c4a44a8c78a4200f34b097c0176c8c686b352c79105ffcfd764473f9d3206" }, { "keyid": "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "sig": "3f315ca76675299894f1ad111dcce7450e1e2f06400e64a86db5d42c67a14fc7a8f92b1063ae547229544d046bcbb038027e0e0abab05bfb6600f7349a9bf90a" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:20:19Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 2 } }root.json000066400000000000000000000105071453140004500357740ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_snapshot/server/metadata.staged{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "06aa273601715be06bd54ca5f74d7e8e5e5130646a2a7e21fbcef3d30167bf001805f3df25b06b8c0de5e1d17dba8562c454011262c6523a4e64ce24390b4d0c" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:20:19Z", "keys": { "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f6b299bcfb4e15ef652c80e9e3dda995acbb4bf71dce889a82ba70228e45a8bf" }, "scheme": "ed25519" }, "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e104199cda6e018d7d9044fa6225aa5dc9c2af5ee4e1c0fe6d16ad002220390d" }, "scheme": "ed25519" }, "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "82f52e4503dbb364fabe8e5567f1cf909d4175d45468a021dfe75653db9ac98c" }, "scheme": "ed25519" }, "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "9b1db36a5cad80284b5f40b040621e0e444f25ee09efa5c1fd6da4499c711bd5" }, "scheme": "ed25519" }, "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "06e4dee0de7826c8d539a6112940b7459892b4ecaf696e67dc064aea0923f95c" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" }, "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "fa386632ae9cc358ad0b56565edef362ad10d7fadb05bc8dc8995627372b990e" }, "scheme": "ed25519" }, "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "683d345a948a9baa343be4e44c076ca115da3838e72c28a06340c8ec1b3ef6be" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b", "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb", "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8" ], "threshold": 4 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 2 } }snapshot.json000066400000000000000000000043371453140004500366540ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_snapshot/server/metadata.staged{ "signatures": [ { "keyid": "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "sig": "25cd6eee4f580fed660330de02cb9ab34b9e7495d3f4c57babf225c3c2c39a0937afe633a7760c19681c6b05d89f2c3907a7eef32822992624223cfbcb872d00" }, { "keyid": "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb", "sig": "2011938c47cf0990172acc5a418b9758d124655200b6874fb6646bd6025de6c5a48a3c30ced83b1f955b242c1c3f4d2d346b71861fccdc45c945418aa2511d0e" }, { "keyid": "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "sig": "303b7b1062a09644bd18804b6b1af6818c25abd212b6539cab0fab0e729a4eb14621396fde4d809649c37b82db5278e878b21b52052ac4fecbcff471c8f64408" }, { "keyid": "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "sig": "85961c73d21ab17e5892681198479700a995920cd02001818979fe35122e5776fcc3fd499811b1f995f922ad737d61c5b72229ab1e4d7aab63d9ea1642795c0d" }, { "keyid": "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8", "sig": "4aed1e9ef8d1ac785d15df386470df92ff484f71c35a37ecd1e83e0fd66e67206172f6a2f277bdebae17372e75d253b45143adf3f9d8b6d23a4690d482e2180b" }, { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "26ed17502d130ab4c7b26a1ef78730d9f15847cc3aa6623f692003e588554761b6f6c3b60da304933b3e012478466ce634970562504fdab9b6d2c8e818f3220e" }, { "keyid": "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b", "sig": "0b498cf7cd3a926007f158d9b72002283d67f4f0c2e4a61d5bb3d3afe09d0e9dcd41a4bc67d5cc87a2d072028904d2e022ca4d2abc84137433cdd6812f613505" }, { "keyid": "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "sig": "1f9aea75e9b632f06769ac0aa611ce3116faa14a3736cddc4cdbcae5f7084a0cd44c4a44a8c78a4200f34b097c0176c8c686b352c79105ffcfd764473f9d3206" }, { "keyid": "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "sig": "3f315ca76675299894f1ad111dcce7450e1e2f06400e64a86db5d42c67a14fc7a8f92b1063ae547229544d046bcbb038027e0e0abab05bfb6600f7349a9bf90a" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:20:19Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 2 } }targets.json000066400000000000000000000006711453140004500364630ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_snapshot/server/metadata.staged{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "51fff9a858517278b811fc9b8dc4fee5e10c5f444a87bc259cb0241ea54f1da693cf844412693d6ea24bed5302a508d08879e0a32a961f1132a646ef9f370a07" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:20:19Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }timestamp.json000066400000000000000000000013011453140004500370040ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_snapshot/server/metadata.staged{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "de078d3c5438334ab51ed4e433cab94b53f883dad9519505ebe64088f13077f725d96b54c10afbf7909c95ddfd829d0bcca82e09612b91d63dbc9a34e830270c" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:20:19Z", "meta": { "snapshot.json": { "hashes": { "sha256": "16459413316a5b9a617e84c06840164beaa4d7ef0b67c0c720acefc89cb15be3", "sha512": "c118a299f2be396ef21097a0803166b1d796256a3c68e3590e1addd656e804dd28d32e67664e460066af4b956f50fcd1abd8b614e2535fb7e175d8e2819d1d87" }, "length": 2271, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_snapshot/server/metadata/000077500000000000000000000000001453140004500327245ustar00rootroot000000000000001.root.json000066400000000000000000000120631453140004500346640ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_snapshot/server/metadata{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "6fcc711c61ce5cebe08cc4f3ed4ccfbee0d33a223cea1258d8a10af6be18627129d2ab2b063283eadcd36e67dd8713af00390aa44733ce9889e2aee2e2e1c600" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:20:19Z", "keys": { "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f758af464295e62a1da4d3267be6d13f4aba9c7d52166d01b6bd5b4559496c9d" }, "scheme": "ed25519" }, "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f6b299bcfb4e15ef652c80e9e3dda995acbb4bf71dce889a82ba70228e45a8bf" }, "scheme": "ed25519" }, "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e104199cda6e018d7d9044fa6225aa5dc9c2af5ee4e1c0fe6d16ad002220390d" }, "scheme": "ed25519" }, "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "82f52e4503dbb364fabe8e5567f1cf909d4175d45468a021dfe75653db9ac98c" }, "scheme": "ed25519" }, "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "9b1db36a5cad80284b5f40b040621e0e444f25ee09efa5c1fd6da4499c711bd5" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "06e4dee0de7826c8d539a6112940b7459892b4ecaf696e67dc064aea0923f95c" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" }, "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "fa386632ae9cc358ad0b56565edef362ad10d7fadb05bc8dc8995627372b990e" }, "scheme": "ed25519" }, "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "683d345a948a9baa343be4e44c076ca115da3838e72c28a06340c8ec1b3ef6be" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b", "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb", "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8" ], "threshold": 4 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 1 } }1.snapshot.json000066400000000000000000000043371453140004500355450ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_snapshot/server/metadata{ "signatures": [ { "keyid": "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "sig": "9b7a3b750e08dfc308b46c3671df8385f782507498c03d2f9f7ecd08045e1112ae034e176f5afea79008aa6bc6dd514fc86aaeec598521d2b5e3247d28e56f0b" }, { "keyid": "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb", "sig": "65b00baea2495c7c2093e65b249597160020ec400ec993979ac07acfc99aab4ea8a2a5ed30bde8ac6c9e7d762d2a6f508ba2aefe47b3615d7eb3d3807d6ebe08" }, { "keyid": "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "sig": "02926e5f258062cad02f5246701737146bd84ce82a3641d172e0534204604be437aea4842a55964a368416679255308c0db6f7980c885d9afaeae92fc779a40d" }, { "keyid": "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "sig": "9efc64982359e93211f05350e1399c1953579807ace961423cdc5c2406df96180b56f94ddac14511bc8430625f230235f51a98e9c546c262f9b444e08c31c50d" }, { "keyid": "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8", "sig": "3105c9e05fb0a536586a9f241c40ffd0696bb11be43bc50ad18fb63799764139a839bee36c58e509d725b4350658c3d3c2a3e60050de66eda65a87be36b6cc03" }, { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "7b4fd39d2babaead15732edf5cadd72b77e3e3cc8b46a5462fe9eadf4ef79cffe15d7b95d56b94d2e4776a2892c5c9ca7895ec6fabaaa563071be633375b3c03" }, { "keyid": "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b", "sig": "24b9b1f3730d6cc8293d83ebae86e3ea3a9bbb4d0a8907b2c71001cc1b0d257814f037f5aa06f8425e871c66f7c377ab197bfceb4402144924dbbe0422103607" }, { "keyid": "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "sig": "5bc6f5738109fe3be3e02c8558a241d61d7494fd76a0274774485ff6b010f41f718b184a3a743a2ceb16324e5bcd57daa6fb87cf32c85bf6c01d8a3098238308" }, { "keyid": "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "sig": "3e3a376641fce12b3df639293cf52c29fbf6a04398ab6e69d2bf12cfae264ace4c984816440536e870cc50816fb2b94e9b9824ce873c7237561afa9bbb649304" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:20:19Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }1.targets.json000066400000000000000000000006711453140004500353540ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_snapshot/server/metadata{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "51fff9a858517278b811fc9b8dc4fee5e10c5f444a87bc259cb0241ea54f1da693cf844412693d6ea24bed5302a508d08879e0a32a961f1132a646ef9f370a07" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:20:19Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }1.timestamp.json000066400000000000000000000013011453140004500356750ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_snapshot/server/metadata{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "de078d3c5438334ab51ed4e433cab94b53f883dad9519505ebe64088f13077f725d96b54c10afbf7909c95ddfd829d0bcca82e09612b91d63dbc9a34e830270c" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:20:19Z", "meta": { "snapshot.json": { "hashes": { "sha256": "16459413316a5b9a617e84c06840164beaa4d7ef0b67c0c720acefc89cb15be3", "sha512": "c118a299f2be396ef21097a0803166b1d796256a3c68e3590e1addd656e804dd28d32e67664e460066af4b956f50fcd1abd8b614e2535fb7e175d8e2819d1d87" }, "length": 2271, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }2.root.json000066400000000000000000000105071453140004500346660ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_snapshot/server/metadata{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "06aa273601715be06bd54ca5f74d7e8e5e5130646a2a7e21fbcef3d30167bf001805f3df25b06b8c0de5e1d17dba8562c454011262c6523a4e64ce24390b4d0c" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:20:19Z", "keys": { "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f6b299bcfb4e15ef652c80e9e3dda995acbb4bf71dce889a82ba70228e45a8bf" }, "scheme": "ed25519" }, "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e104199cda6e018d7d9044fa6225aa5dc9c2af5ee4e1c0fe6d16ad002220390d" }, "scheme": "ed25519" }, "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "82f52e4503dbb364fabe8e5567f1cf909d4175d45468a021dfe75653db9ac98c" }, "scheme": "ed25519" }, "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "9b1db36a5cad80284b5f40b040621e0e444f25ee09efa5c1fd6da4499c711bd5" }, "scheme": "ed25519" }, "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "06e4dee0de7826c8d539a6112940b7459892b4ecaf696e67dc064aea0923f95c" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" }, "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "fa386632ae9cc358ad0b56565edef362ad10d7fadb05bc8dc8995627372b990e" }, "scheme": "ed25519" }, "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "683d345a948a9baa343be4e44c076ca115da3838e72c28a06340c8ec1b3ef6be" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b", "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb", "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8" ], "threshold": 4 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 2 } }2.snapshot.json000066400000000000000000000043371453140004500355460ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_snapshot/server/metadata{ "signatures": [ { "keyid": "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "sig": "25cd6eee4f580fed660330de02cb9ab34b9e7495d3f4c57babf225c3c2c39a0937afe633a7760c19681c6b05d89f2c3907a7eef32822992624223cfbcb872d00" }, { "keyid": "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb", "sig": "2011938c47cf0990172acc5a418b9758d124655200b6874fb6646bd6025de6c5a48a3c30ced83b1f955b242c1c3f4d2d346b71861fccdc45c945418aa2511d0e" }, { "keyid": "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "sig": "303b7b1062a09644bd18804b6b1af6818c25abd212b6539cab0fab0e729a4eb14621396fde4d809649c37b82db5278e878b21b52052ac4fecbcff471c8f64408" }, { "keyid": "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "sig": "85961c73d21ab17e5892681198479700a995920cd02001818979fe35122e5776fcc3fd499811b1f995f922ad737d61c5b72229ab1e4d7aab63d9ea1642795c0d" }, { "keyid": "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8", "sig": "4aed1e9ef8d1ac785d15df386470df92ff484f71c35a37ecd1e83e0fd66e67206172f6a2f277bdebae17372e75d253b45143adf3f9d8b6d23a4690d482e2180b" }, { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "26ed17502d130ab4c7b26a1ef78730d9f15847cc3aa6623f692003e588554761b6f6c3b60da304933b3e012478466ce634970562504fdab9b6d2c8e818f3220e" }, { "keyid": "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b", "sig": "0b498cf7cd3a926007f158d9b72002283d67f4f0c2e4a61d5bb3d3afe09d0e9dcd41a4bc67d5cc87a2d072028904d2e022ca4d2abc84137433cdd6812f613505" }, { "keyid": "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "sig": "1f9aea75e9b632f06769ac0aa611ce3116faa14a3736cddc4cdbcae5f7084a0cd44c4a44a8c78a4200f34b097c0176c8c686b352c79105ffcfd764473f9d3206" }, { "keyid": "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "sig": "3f315ca76675299894f1ad111dcce7450e1e2f06400e64a86db5d42c67a14fc7a8f92b1063ae547229544d046bcbb038027e0e0abab05bfb6600f7349a9bf90a" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:20:19Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 2 } }client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_snapshot/server/metadata/root.json000066400000000000000000000105071453140004500346050ustar00rootroot00000000000000{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "06aa273601715be06bd54ca5f74d7e8e5e5130646a2a7e21fbcef3d30167bf001805f3df25b06b8c0de5e1d17dba8562c454011262c6523a4e64ce24390b4d0c" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:20:19Z", "keys": { "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f6b299bcfb4e15ef652c80e9e3dda995acbb4bf71dce889a82ba70228e45a8bf" }, "scheme": "ed25519" }, "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e104199cda6e018d7d9044fa6225aa5dc9c2af5ee4e1c0fe6d16ad002220390d" }, "scheme": "ed25519" }, "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "82f52e4503dbb364fabe8e5567f1cf909d4175d45468a021dfe75653db9ac98c" }, "scheme": "ed25519" }, "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "9b1db36a5cad80284b5f40b040621e0e444f25ee09efa5c1fd6da4499c711bd5" }, "scheme": "ed25519" }, "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "06e4dee0de7826c8d539a6112940b7459892b4ecaf696e67dc064aea0923f95c" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" }, "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "fa386632ae9cc358ad0b56565edef362ad10d7fadb05bc8dc8995627372b990e" }, "scheme": "ed25519" }, "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "683d345a948a9baa343be4e44c076ca115da3838e72c28a06340c8ec1b3ef6be" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b", "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb", "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8" ], "threshold": 4 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 2 } }snapshot.json000066400000000000000000000043371453140004500354060ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_snapshot/server/metadata{ "signatures": [ { "keyid": "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "sig": "25cd6eee4f580fed660330de02cb9ab34b9e7495d3f4c57babf225c3c2c39a0937afe633a7760c19681c6b05d89f2c3907a7eef32822992624223cfbcb872d00" }, { "keyid": "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb", "sig": "2011938c47cf0990172acc5a418b9758d124655200b6874fb6646bd6025de6c5a48a3c30ced83b1f955b242c1c3f4d2d346b71861fccdc45c945418aa2511d0e" }, { "keyid": "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "sig": "303b7b1062a09644bd18804b6b1af6818c25abd212b6539cab0fab0e729a4eb14621396fde4d809649c37b82db5278e878b21b52052ac4fecbcff471c8f64408" }, { "keyid": "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "sig": "85961c73d21ab17e5892681198479700a995920cd02001818979fe35122e5776fcc3fd499811b1f995f922ad737d61c5b72229ab1e4d7aab63d9ea1642795c0d" }, { "keyid": "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8", "sig": "4aed1e9ef8d1ac785d15df386470df92ff484f71c35a37ecd1e83e0fd66e67206172f6a2f277bdebae17372e75d253b45143adf3f9d8b6d23a4690d482e2180b" }, { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "26ed17502d130ab4c7b26a1ef78730d9f15847cc3aa6623f692003e588554761b6f6c3b60da304933b3e012478466ce634970562504fdab9b6d2c8e818f3220e" }, { "keyid": "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b", "sig": "0b498cf7cd3a926007f158d9b72002283d67f4f0c2e4a61d5bb3d3afe09d0e9dcd41a4bc67d5cc87a2d072028904d2e022ca4d2abc84137433cdd6812f613505" }, { "keyid": "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "sig": "1f9aea75e9b632f06769ac0aa611ce3116faa14a3736cddc4cdbcae5f7084a0cd44c4a44a8c78a4200f34b097c0176c8c686b352c79105ffcfd764473f9d3206" }, { "keyid": "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "sig": "3f315ca76675299894f1ad111dcce7450e1e2f06400e64a86db5d42c67a14fc7a8f92b1063ae547229544d046bcbb038027e0e0abab05bfb6600f7349a9bf90a" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:20:19Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 2 } }targets.json000066400000000000000000000006711453140004500352150ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_snapshot/server/metadata{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "51fff9a858517278b811fc9b8dc4fee5e10c5f444a87bc259cb0241ea54f1da693cf844412693d6ea24bed5302a508d08879e0a32a961f1132a646ef9f370a07" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:20:19Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }timestamp.json000066400000000000000000000013011453140004500355360ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_snapshot/server/metadata{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "de078d3c5438334ab51ed4e433cab94b53f883dad9519505ebe64088f13077f725d96b54c10afbf7909c95ddfd829d0bcca82e09612b91d63dbc9a34e830270c" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:20:19Z", "meta": { "snapshot.json": { "hashes": { "sha256": "16459413316a5b9a617e84c06840164beaa4d7ef0b67c0c720acefc89cb15be3", "sha512": "c118a299f2be396ef21097a0803166b1d796256a3c68e3590e1addd656e804dd28d32e67664e460066af4b956f50fcd1abd8b614e2535fb7e175d8e2819d1d87" }, "length": 2271, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_targets/000077500000000000000000000000001453140004500274505ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_targets/client/000077500000000000000000000000001453140004500307265ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_targets/client/metadata/000077500000000000000000000000001453140004500325065ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_targets/client/metadata/current/000077500000000000000000000000001453140004500341705ustar00rootroot000000000000001.root.json000066400000000000000000000120631453140004500361300ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_targets/client/metadata/current{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "e007d7f8d4013496a546585fa7a1bc6c793391bd119f84f213b70f70d177a2a48186b4f4892879d65e412c37256406eb0b7bc0467e29e6ae5e86da3addda6407" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:20:21Z", "keys": { "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f758af464295e62a1da4d3267be6d13f4aba9c7d52166d01b6bd5b4559496c9d" }, "scheme": "ed25519" }, "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f6b299bcfb4e15ef652c80e9e3dda995acbb4bf71dce889a82ba70228e45a8bf" }, "scheme": "ed25519" }, "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e104199cda6e018d7d9044fa6225aa5dc9c2af5ee4e1c0fe6d16ad002220390d" }, "scheme": "ed25519" }, "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "82f52e4503dbb364fabe8e5567f1cf909d4175d45468a021dfe75653db9ac98c" }, "scheme": "ed25519" }, "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "9b1db36a5cad80284b5f40b040621e0e444f25ee09efa5c1fd6da4499c711bd5" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "06e4dee0de7826c8d539a6112940b7459892b4ecaf696e67dc064aea0923f95c" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" }, "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "fa386632ae9cc358ad0b56565edef362ad10d7fadb05bc8dc8995627372b990e" }, "scheme": "ed25519" }, "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "683d345a948a9baa343be4e44c076ca115da3838e72c28a06340c8ec1b3ef6be" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b", "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb", "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8" ], "threshold": 4 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 1 } }1.snapshot.json000066400000000000000000000006571453140004500370120ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_targets/client/metadata/current{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "5939785ca69e19f3dd0e1c9a6fe36179625528fb36e30173a88dbdf139eb1ed7f9f3e0f4e0db075ff51a74141e70669cb329a042938369faa3ca1d5605c0980a" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:20:21Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }1.targets.json000066400000000000000000000043511453140004500366170ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_targets/client/metadata/current{ "signatures": [ { "keyid": "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "sig": "cbf785791cb07f08524bf07f064cd3dd2aa59d4df683817511186efcf66dc477e775f55669685b0ede916ab8715efab88b6fefb62da052eba03faded53406e0b" }, { "keyid": "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb", "sig": "8940c7a6d7892be68c9830d339c709b5105d2fcccc0624e43c4f5444e25f7ec578ec4899398692edf0e7b91e1194b8cd2ab7c2fb120e1681cbfeca9066b50d01" }, { "keyid": "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "sig": "3d4f10ef870798ec71187ef703fc134a148160a66db0478cef893b0a91487cb90e1e59e7b6b8880def22cd928472421c8ab6ada95d515080b5f483aa17e63b06" }, { "keyid": "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "sig": "09c192fb46e99f6aa5b4e12a7a5c6239c509cc30926e2cceefdf09166621e1c7e945a40e0c12c19f62a5cd78e4627673c5b1da0f55af54f4bc8bec43728b6d0d" }, { "keyid": "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8", "sig": "3bbf88e8cac7256a72f7b681dec4b26cd83cc7c72ad048235a5bf16bbe9519a3c9990f404f61f3f8833d7235633cb821062738c863097aa3a0e25e36f371ef0f" }, { "keyid": "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b", "sig": "bf6e9cd2defa1ae0020e27a91d36910a9a665e127d09f77b698a59d47e70913aa6ebf958057bdc68c2ce8e9d344fffd7e892af66fda424079c732900f3c5590a" }, { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "6745efba317ff34aea61685be997d9ee18d02fee2445cfd9cef32da940d2497b12986b95edbc9be38302bbca90ade299697ad2506ce354b8a3ea9528898fab09" }, { "keyid": "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "sig": "1089b0a143419b02067af4ad353ea03c8adce43370485ff257ff8b6e7006fcddfce8db023844aea960f09520a07f86500bf3be11c3cc71479b4fc2953a0a3d0f" }, { "keyid": "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "sig": "e3673a85e84a24c12fb654e114d3702e5fa98ac73f11bcd72aa5304afa1cc8a30d53c0cacbd1d65bcb7ae7a2d34c7e46b58f8cb784765f15b1b4e6730aa1cb00" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:20:21Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }1.timestamp.json000066400000000000000000000013001453140004500371400ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_targets/client/metadata/current{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "af71d15c2434dbd9ed4e2eb05628227e9ce9ced8eb9546153544e928f35f18e9093c5ba3a5ee30d71d2000065e0a94a729e5db90e519839b3255c627922d5706" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:20:21Z", "meta": { "snapshot.json": { "hashes": { "sha256": "47ceec303641a009684536b381ee11129a338e4f8a0ea30f99efa205a78265de", "sha512": "6d1e34a684483108365554f3c6996fba96f1f64892920436d2c4e27a399bb7b0cdd4fac07d1df250554ab2164e417be7391281b422a12ae26fb1dd619dc8a1c7" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }root.json000066400000000000000000000120631453140004500357710ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_targets/client/metadata/current{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "e007d7f8d4013496a546585fa7a1bc6c793391bd119f84f213b70f70d177a2a48186b4f4892879d65e412c37256406eb0b7bc0467e29e6ae5e86da3addda6407" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:20:21Z", "keys": { "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f758af464295e62a1da4d3267be6d13f4aba9c7d52166d01b6bd5b4559496c9d" }, "scheme": "ed25519" }, "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f6b299bcfb4e15ef652c80e9e3dda995acbb4bf71dce889a82ba70228e45a8bf" }, "scheme": "ed25519" }, "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e104199cda6e018d7d9044fa6225aa5dc9c2af5ee4e1c0fe6d16ad002220390d" }, "scheme": "ed25519" }, "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "82f52e4503dbb364fabe8e5567f1cf909d4175d45468a021dfe75653db9ac98c" }, "scheme": "ed25519" }, "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "9b1db36a5cad80284b5f40b040621e0e444f25ee09efa5c1fd6da4499c711bd5" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "06e4dee0de7826c8d539a6112940b7459892b4ecaf696e67dc064aea0923f95c" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" }, "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "fa386632ae9cc358ad0b56565edef362ad10d7fadb05bc8dc8995627372b990e" }, "scheme": "ed25519" }, "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "683d345a948a9baa343be4e44c076ca115da3838e72c28a06340c8ec1b3ef6be" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b", "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb", "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8" ], "threshold": 4 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 1 } }snapshot.json000066400000000000000000000006571453140004500366530ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_targets/client/metadata/current{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "5939785ca69e19f3dd0e1c9a6fe36179625528fb36e30173a88dbdf139eb1ed7f9f3e0f4e0db075ff51a74141e70669cb329a042938369faa3ca1d5605c0980a" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:20:21Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }targets.json000066400000000000000000000043511453140004500364600ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_targets/client/metadata/current{ "signatures": [ { "keyid": "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "sig": "cbf785791cb07f08524bf07f064cd3dd2aa59d4df683817511186efcf66dc477e775f55669685b0ede916ab8715efab88b6fefb62da052eba03faded53406e0b" }, { "keyid": "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb", "sig": "8940c7a6d7892be68c9830d339c709b5105d2fcccc0624e43c4f5444e25f7ec578ec4899398692edf0e7b91e1194b8cd2ab7c2fb120e1681cbfeca9066b50d01" }, { "keyid": "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "sig": "3d4f10ef870798ec71187ef703fc134a148160a66db0478cef893b0a91487cb90e1e59e7b6b8880def22cd928472421c8ab6ada95d515080b5f483aa17e63b06" }, { "keyid": "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "sig": "09c192fb46e99f6aa5b4e12a7a5c6239c509cc30926e2cceefdf09166621e1c7e945a40e0c12c19f62a5cd78e4627673c5b1da0f55af54f4bc8bec43728b6d0d" }, { "keyid": "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8", "sig": "3bbf88e8cac7256a72f7b681dec4b26cd83cc7c72ad048235a5bf16bbe9519a3c9990f404f61f3f8833d7235633cb821062738c863097aa3a0e25e36f371ef0f" }, { "keyid": "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b", "sig": "bf6e9cd2defa1ae0020e27a91d36910a9a665e127d09f77b698a59d47e70913aa6ebf958057bdc68c2ce8e9d344fffd7e892af66fda424079c732900f3c5590a" }, { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "6745efba317ff34aea61685be997d9ee18d02fee2445cfd9cef32da940d2497b12986b95edbc9be38302bbca90ade299697ad2506ce354b8a3ea9528898fab09" }, { "keyid": "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "sig": "1089b0a143419b02067af4ad353ea03c8adce43370485ff257ff8b6e7006fcddfce8db023844aea960f09520a07f86500bf3be11c3cc71479b4fc2953a0a3d0f" }, { "keyid": "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "sig": "e3673a85e84a24c12fb654e114d3702e5fa98ac73f11bcd72aa5304afa1cc8a30d53c0cacbd1d65bcb7ae7a2d34c7e46b58f8cb784765f15b1b4e6730aa1cb00" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:20:21Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }timestamp.json000066400000000000000000000013001453140004500370010ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_targets/client/metadata/current{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "af71d15c2434dbd9ed4e2eb05628227e9ce9ced8eb9546153544e928f35f18e9093c5ba3a5ee30d71d2000065e0a94a729e5db90e519839b3255c627922d5706" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:20:21Z", "meta": { "snapshot.json": { "hashes": { "sha256": "47ceec303641a009684536b381ee11129a338e4f8a0ea30f99efa205a78265de", "sha512": "6d1e34a684483108365554f3c6996fba96f1f64892920436d2c4e27a399bb7b0cdd4fac07d1df250554ab2164e417be7391281b422a12ae26fb1dd619dc8a1c7" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_targets/client/metadata/previous/000077500000000000000000000000001453140004500343625ustar00rootroot000000000000001.root.json000066400000000000000000000120631453140004500363220ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_targets/client/metadata/previous{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "e007d7f8d4013496a546585fa7a1bc6c793391bd119f84f213b70f70d177a2a48186b4f4892879d65e412c37256406eb0b7bc0467e29e6ae5e86da3addda6407" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:20:21Z", "keys": { "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f758af464295e62a1da4d3267be6d13f4aba9c7d52166d01b6bd5b4559496c9d" }, "scheme": "ed25519" }, "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f6b299bcfb4e15ef652c80e9e3dda995acbb4bf71dce889a82ba70228e45a8bf" }, "scheme": "ed25519" }, "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e104199cda6e018d7d9044fa6225aa5dc9c2af5ee4e1c0fe6d16ad002220390d" }, "scheme": "ed25519" }, "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "82f52e4503dbb364fabe8e5567f1cf909d4175d45468a021dfe75653db9ac98c" }, "scheme": "ed25519" }, "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "9b1db36a5cad80284b5f40b040621e0e444f25ee09efa5c1fd6da4499c711bd5" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "06e4dee0de7826c8d539a6112940b7459892b4ecaf696e67dc064aea0923f95c" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" }, "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "fa386632ae9cc358ad0b56565edef362ad10d7fadb05bc8dc8995627372b990e" }, "scheme": "ed25519" }, "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "683d345a948a9baa343be4e44c076ca115da3838e72c28a06340c8ec1b3ef6be" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b", "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb", "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8" ], "threshold": 4 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 1 } }1.snapshot.json000066400000000000000000000006571453140004500372040ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_targets/client/metadata/previous{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "5939785ca69e19f3dd0e1c9a6fe36179625528fb36e30173a88dbdf139eb1ed7f9f3e0f4e0db075ff51a74141e70669cb329a042938369faa3ca1d5605c0980a" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:20:21Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }1.targets.json000066400000000000000000000043511453140004500370110ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_targets/client/metadata/previous{ "signatures": [ { "keyid": "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "sig": "cbf785791cb07f08524bf07f064cd3dd2aa59d4df683817511186efcf66dc477e775f55669685b0ede916ab8715efab88b6fefb62da052eba03faded53406e0b" }, { "keyid": "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb", "sig": "8940c7a6d7892be68c9830d339c709b5105d2fcccc0624e43c4f5444e25f7ec578ec4899398692edf0e7b91e1194b8cd2ab7c2fb120e1681cbfeca9066b50d01" }, { "keyid": "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "sig": "3d4f10ef870798ec71187ef703fc134a148160a66db0478cef893b0a91487cb90e1e59e7b6b8880def22cd928472421c8ab6ada95d515080b5f483aa17e63b06" }, { "keyid": "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "sig": "09c192fb46e99f6aa5b4e12a7a5c6239c509cc30926e2cceefdf09166621e1c7e945a40e0c12c19f62a5cd78e4627673c5b1da0f55af54f4bc8bec43728b6d0d" }, { "keyid": "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8", "sig": "3bbf88e8cac7256a72f7b681dec4b26cd83cc7c72ad048235a5bf16bbe9519a3c9990f404f61f3f8833d7235633cb821062738c863097aa3a0e25e36f371ef0f" }, { "keyid": "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b", "sig": "bf6e9cd2defa1ae0020e27a91d36910a9a665e127d09f77b698a59d47e70913aa6ebf958057bdc68c2ce8e9d344fffd7e892af66fda424079c732900f3c5590a" }, { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "6745efba317ff34aea61685be997d9ee18d02fee2445cfd9cef32da940d2497b12986b95edbc9be38302bbca90ade299697ad2506ce354b8a3ea9528898fab09" }, { "keyid": "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "sig": "1089b0a143419b02067af4ad353ea03c8adce43370485ff257ff8b6e7006fcddfce8db023844aea960f09520a07f86500bf3be11c3cc71479b4fc2953a0a3d0f" }, { "keyid": "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "sig": "e3673a85e84a24c12fb654e114d3702e5fa98ac73f11bcd72aa5304afa1cc8a30d53c0cacbd1d65bcb7ae7a2d34c7e46b58f8cb784765f15b1b4e6730aa1cb00" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:20:21Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }1.timestamp.json000066400000000000000000000013001453140004500373320ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_targets/client/metadata/previous{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "af71d15c2434dbd9ed4e2eb05628227e9ce9ced8eb9546153544e928f35f18e9093c5ba3a5ee30d71d2000065e0a94a729e5db90e519839b3255c627922d5706" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:20:21Z", "meta": { "snapshot.json": { "hashes": { "sha256": "47ceec303641a009684536b381ee11129a338e4f8a0ea30f99efa205a78265de", "sha512": "6d1e34a684483108365554f3c6996fba96f1f64892920436d2c4e27a399bb7b0cdd4fac07d1df250554ab2164e417be7391281b422a12ae26fb1dd619dc8a1c7" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }root.json000066400000000000000000000120631453140004500361630ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_targets/client/metadata/previous{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "e007d7f8d4013496a546585fa7a1bc6c793391bd119f84f213b70f70d177a2a48186b4f4892879d65e412c37256406eb0b7bc0467e29e6ae5e86da3addda6407" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:20:21Z", "keys": { "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f758af464295e62a1da4d3267be6d13f4aba9c7d52166d01b6bd5b4559496c9d" }, "scheme": "ed25519" }, "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f6b299bcfb4e15ef652c80e9e3dda995acbb4bf71dce889a82ba70228e45a8bf" }, "scheme": "ed25519" }, "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e104199cda6e018d7d9044fa6225aa5dc9c2af5ee4e1c0fe6d16ad002220390d" }, "scheme": "ed25519" }, "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "82f52e4503dbb364fabe8e5567f1cf909d4175d45468a021dfe75653db9ac98c" }, "scheme": "ed25519" }, "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "9b1db36a5cad80284b5f40b040621e0e444f25ee09efa5c1fd6da4499c711bd5" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "06e4dee0de7826c8d539a6112940b7459892b4ecaf696e67dc064aea0923f95c" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" }, "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "fa386632ae9cc358ad0b56565edef362ad10d7fadb05bc8dc8995627372b990e" }, "scheme": "ed25519" }, "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "683d345a948a9baa343be4e44c076ca115da3838e72c28a06340c8ec1b3ef6be" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b", "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb", "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8" ], "threshold": 4 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 1 } }snapshot.json000066400000000000000000000006571453140004500370450ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_targets/client/metadata/previous{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "5939785ca69e19f3dd0e1c9a6fe36179625528fb36e30173a88dbdf139eb1ed7f9f3e0f4e0db075ff51a74141e70669cb329a042938369faa3ca1d5605c0980a" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:20:21Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }targets.json000066400000000000000000000043511453140004500366520ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_targets/client/metadata/previous{ "signatures": [ { "keyid": "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "sig": "cbf785791cb07f08524bf07f064cd3dd2aa59d4df683817511186efcf66dc477e775f55669685b0ede916ab8715efab88b6fefb62da052eba03faded53406e0b" }, { "keyid": "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb", "sig": "8940c7a6d7892be68c9830d339c709b5105d2fcccc0624e43c4f5444e25f7ec578ec4899398692edf0e7b91e1194b8cd2ab7c2fb120e1681cbfeca9066b50d01" }, { "keyid": "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "sig": "3d4f10ef870798ec71187ef703fc134a148160a66db0478cef893b0a91487cb90e1e59e7b6b8880def22cd928472421c8ab6ada95d515080b5f483aa17e63b06" }, { "keyid": "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "sig": "09c192fb46e99f6aa5b4e12a7a5c6239c509cc30926e2cceefdf09166621e1c7e945a40e0c12c19f62a5cd78e4627673c5b1da0f55af54f4bc8bec43728b6d0d" }, { "keyid": "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8", "sig": "3bbf88e8cac7256a72f7b681dec4b26cd83cc7c72ad048235a5bf16bbe9519a3c9990f404f61f3f8833d7235633cb821062738c863097aa3a0e25e36f371ef0f" }, { "keyid": "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b", "sig": "bf6e9cd2defa1ae0020e27a91d36910a9a665e127d09f77b698a59d47e70913aa6ebf958057bdc68c2ce8e9d344fffd7e892af66fda424079c732900f3c5590a" }, { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "6745efba317ff34aea61685be997d9ee18d02fee2445cfd9cef32da940d2497b12986b95edbc9be38302bbca90ade299697ad2506ce354b8a3ea9528898fab09" }, { "keyid": "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "sig": "1089b0a143419b02067af4ad353ea03c8adce43370485ff257ff8b6e7006fcddfce8db023844aea960f09520a07f86500bf3be11c3cc71479b4fc2953a0a3d0f" }, { "keyid": "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "sig": "e3673a85e84a24c12fb654e114d3702e5fa98ac73f11bcd72aa5304afa1cc8a30d53c0cacbd1d65bcb7ae7a2d34c7e46b58f8cb784765f15b1b4e6730aa1cb00" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:20:21Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }timestamp.json000066400000000000000000000013001453140004500371730ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_targets/client/metadata/previous{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "af71d15c2434dbd9ed4e2eb05628227e9ce9ced8eb9546153544e928f35f18e9093c5ba3a5ee30d71d2000065e0a94a729e5db90e519839b3255c627922d5706" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:20:21Z", "meta": { "snapshot.json": { "hashes": { "sha256": "47ceec303641a009684536b381ee11129a338e4f8a0ea30f99efa205a78265de", "sha512": "6d1e34a684483108365554f3c6996fba96f1f64892920436d2c4e27a399bb7b0cdd4fac07d1df250554ab2164e417be7391281b422a12ae26fb1dd619dc8a1c7" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_targets/hash.txt000066400000000000000000000001001453140004500311230ustar00rootroot0000000000000038d05f4a8fc9892deee2ab651bd61de98ed34393955851f1a9699d02d6c652a1client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_targets/server/000077500000000000000000000000001453140004500307565ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_targets/server/metadata.staged/000077500000000000000000000000001453140004500340045ustar00rootroot000000000000001.root.json000066400000000000000000000120631453140004500357440ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_targets/server/metadata.staged{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "e007d7f8d4013496a546585fa7a1bc6c793391bd119f84f213b70f70d177a2a48186b4f4892879d65e412c37256406eb0b7bc0467e29e6ae5e86da3addda6407" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:20:21Z", "keys": { "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f758af464295e62a1da4d3267be6d13f4aba9c7d52166d01b6bd5b4559496c9d" }, "scheme": "ed25519" }, "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f6b299bcfb4e15ef652c80e9e3dda995acbb4bf71dce889a82ba70228e45a8bf" }, "scheme": "ed25519" }, "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e104199cda6e018d7d9044fa6225aa5dc9c2af5ee4e1c0fe6d16ad002220390d" }, "scheme": "ed25519" }, "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "82f52e4503dbb364fabe8e5567f1cf909d4175d45468a021dfe75653db9ac98c" }, "scheme": "ed25519" }, "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "9b1db36a5cad80284b5f40b040621e0e444f25ee09efa5c1fd6da4499c711bd5" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "06e4dee0de7826c8d539a6112940b7459892b4ecaf696e67dc064aea0923f95c" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" }, "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "fa386632ae9cc358ad0b56565edef362ad10d7fadb05bc8dc8995627372b990e" }, "scheme": "ed25519" }, "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "683d345a948a9baa343be4e44c076ca115da3838e72c28a06340c8ec1b3ef6be" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b", "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb", "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8" ], "threshold": 4 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 1 } }1.snapshot.json000066400000000000000000000006571453140004500366260ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_targets/server/metadata.staged{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "5939785ca69e19f3dd0e1c9a6fe36179625528fb36e30173a88dbdf139eb1ed7f9f3e0f4e0db075ff51a74141e70669cb329a042938369faa3ca1d5605c0980a" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:20:21Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }1.targets.json000066400000000000000000000043511453140004500364330ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_targets/server/metadata.staged{ "signatures": [ { "keyid": "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "sig": "cbf785791cb07f08524bf07f064cd3dd2aa59d4df683817511186efcf66dc477e775f55669685b0ede916ab8715efab88b6fefb62da052eba03faded53406e0b" }, { "keyid": "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb", "sig": "8940c7a6d7892be68c9830d339c709b5105d2fcccc0624e43c4f5444e25f7ec578ec4899398692edf0e7b91e1194b8cd2ab7c2fb120e1681cbfeca9066b50d01" }, { "keyid": "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "sig": "3d4f10ef870798ec71187ef703fc134a148160a66db0478cef893b0a91487cb90e1e59e7b6b8880def22cd928472421c8ab6ada95d515080b5f483aa17e63b06" }, { "keyid": "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "sig": "09c192fb46e99f6aa5b4e12a7a5c6239c509cc30926e2cceefdf09166621e1c7e945a40e0c12c19f62a5cd78e4627673c5b1da0f55af54f4bc8bec43728b6d0d" }, { "keyid": "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8", "sig": "3bbf88e8cac7256a72f7b681dec4b26cd83cc7c72ad048235a5bf16bbe9519a3c9990f404f61f3f8833d7235633cb821062738c863097aa3a0e25e36f371ef0f" }, { "keyid": "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b", "sig": "bf6e9cd2defa1ae0020e27a91d36910a9a665e127d09f77b698a59d47e70913aa6ebf958057bdc68c2ce8e9d344fffd7e892af66fda424079c732900f3c5590a" }, { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "6745efba317ff34aea61685be997d9ee18d02fee2445cfd9cef32da940d2497b12986b95edbc9be38302bbca90ade299697ad2506ce354b8a3ea9528898fab09" }, { "keyid": "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "sig": "1089b0a143419b02067af4ad353ea03c8adce43370485ff257ff8b6e7006fcddfce8db023844aea960f09520a07f86500bf3be11c3cc71479b4fc2953a0a3d0f" }, { "keyid": "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "sig": "e3673a85e84a24c12fb654e114d3702e5fa98ac73f11bcd72aa5304afa1cc8a30d53c0cacbd1d65bcb7ae7a2d34c7e46b58f8cb784765f15b1b4e6730aa1cb00" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:20:21Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }1.timestamp.json000066400000000000000000000013001453140004500367540ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_targets/server/metadata.staged{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "af71d15c2434dbd9ed4e2eb05628227e9ce9ced8eb9546153544e928f35f18e9093c5ba3a5ee30d71d2000065e0a94a729e5db90e519839b3255c627922d5706" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:20:21Z", "meta": { "snapshot.json": { "hashes": { "sha256": "47ceec303641a009684536b381ee11129a338e4f8a0ea30f99efa205a78265de", "sha512": "6d1e34a684483108365554f3c6996fba96f1f64892920436d2c4e27a399bb7b0cdd4fac07d1df250554ab2164e417be7391281b422a12ae26fb1dd619dc8a1c7" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }2.root.json000066400000000000000000000105071453140004500357460ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_targets/server/metadata.staged{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "dbfb546e3f361f7b746cc076d6632e5fdfe18ec0268b383de317af45f5cb704c9145707144f1f540e91b256b418cf5753de7391fdc1f8ff27c0a6eb265904005" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:20:21Z", "keys": { "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f6b299bcfb4e15ef652c80e9e3dda995acbb4bf71dce889a82ba70228e45a8bf" }, "scheme": "ed25519" }, "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e104199cda6e018d7d9044fa6225aa5dc9c2af5ee4e1c0fe6d16ad002220390d" }, "scheme": "ed25519" }, "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "82f52e4503dbb364fabe8e5567f1cf909d4175d45468a021dfe75653db9ac98c" }, "scheme": "ed25519" }, "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "9b1db36a5cad80284b5f40b040621e0e444f25ee09efa5c1fd6da4499c711bd5" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "06e4dee0de7826c8d539a6112940b7459892b4ecaf696e67dc064aea0923f95c" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "fa386632ae9cc358ad0b56565edef362ad10d7fadb05bc8dc8995627372b990e" }, "scheme": "ed25519" }, "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "683d345a948a9baa343be4e44c076ca115da3838e72c28a06340c8ec1b3ef6be" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b", "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb", "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8" ], "threshold": 4 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 2 } }2.targets.json000066400000000000000000000043511453140004500364340ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_targets/server/metadata.staged{ "signatures": [ { "keyid": "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "sig": "8c3d6300986d5859cdbc3d4a3509f4ca3e3e9dda0b9ccfd51ffcae65757f221a478ed0be7dbae9f1c6c1d10063e5eeec1f05b538c282e4f7de1d8970b9fe210c" }, { "keyid": "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb", "sig": "2a257763ea72c8d547083ff87438747c4d0f240a24dba479cdddc1bda562a20d929d770262c915d2c5ae79cd3854abebf263cb56668d1d0a347d4f0033dd360c" }, { "keyid": "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "sig": "163ec38d14a35b364e3c9f3c57a7d6aa7f5a178f8ec23a33ce43aab9eed34a9fbb813d8aebb5f91b278dc03061eb9528a457f1e16a449ff0ffc3c7e279be6204" }, { "keyid": "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "sig": "bb4e58d3f96691280935c1f6e0b603739878ad6cacc2da6395d75c1e6fb9d2fb2e4de238634ec3bd417621485093e480490002c22114a321affb7b4994714c01" }, { "keyid": "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8", "sig": "c7e970795af37c2ec5e73a627daa2fd052d26764b47b70d84257b3607f2e9b4472da8eba5bd720dd4fc9801d9108a69d1bff78d8c0c6b50031bfe158ba1ca300" }, { "keyid": "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b", "sig": "ddb6f6aa044d7b64831b3321d3aa3e3a0c3c1ef5144e9257204d0d7b8e6ac616c9f210166f7f679d8e120d8bdcbc40cfa1fc1a2faf97dbe90b5897a49bd6fe0f" }, { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "7a5b9705304316df3edad16d934518b73a4ee29259e8d5accad5b9fb88c08ae0cd8a95b06f197d94b6ce09cfba528e63eec2464de56ecb5449bba4a2d110a705" }, { "keyid": "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "sig": "a5fb7d23197cb5856ba1524676bf4f6bd96181b8f3a992607167f86a4053c0280651894d37667fbdd3ff21ed16a9f61116e969db4532935e79a7723f2c9af101" }, { "keyid": "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "sig": "701c686cb7defb91040a58f94d9800f42a142d3efdcc53db84a2c1a89f372d134f631135ffeef676efa1cc8b90b4ebbb5040bfc513a7a2aa54cf087cf9770b06" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:20:21Z", "spec_version": "1.0.0", "targets": {}, "version": 2 } }root.json000066400000000000000000000105071453140004500356060ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_targets/server/metadata.staged{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "dbfb546e3f361f7b746cc076d6632e5fdfe18ec0268b383de317af45f5cb704c9145707144f1f540e91b256b418cf5753de7391fdc1f8ff27c0a6eb265904005" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:20:21Z", "keys": { "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f6b299bcfb4e15ef652c80e9e3dda995acbb4bf71dce889a82ba70228e45a8bf" }, "scheme": "ed25519" }, "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e104199cda6e018d7d9044fa6225aa5dc9c2af5ee4e1c0fe6d16ad002220390d" }, "scheme": "ed25519" }, "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "82f52e4503dbb364fabe8e5567f1cf909d4175d45468a021dfe75653db9ac98c" }, "scheme": "ed25519" }, "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "9b1db36a5cad80284b5f40b040621e0e444f25ee09efa5c1fd6da4499c711bd5" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "06e4dee0de7826c8d539a6112940b7459892b4ecaf696e67dc064aea0923f95c" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "fa386632ae9cc358ad0b56565edef362ad10d7fadb05bc8dc8995627372b990e" }, "scheme": "ed25519" }, "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "683d345a948a9baa343be4e44c076ca115da3838e72c28a06340c8ec1b3ef6be" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b", "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb", "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8" ], "threshold": 4 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 2 } }snapshot.json000066400000000000000000000006571453140004500364670ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_targets/server/metadata.staged{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "5939785ca69e19f3dd0e1c9a6fe36179625528fb36e30173a88dbdf139eb1ed7f9f3e0f4e0db075ff51a74141e70669cb329a042938369faa3ca1d5605c0980a" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:20:21Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }targets.json000066400000000000000000000043511453140004500362740ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_targets/server/metadata.staged{ "signatures": [ { "keyid": "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "sig": "8c3d6300986d5859cdbc3d4a3509f4ca3e3e9dda0b9ccfd51ffcae65757f221a478ed0be7dbae9f1c6c1d10063e5eeec1f05b538c282e4f7de1d8970b9fe210c" }, { "keyid": "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb", "sig": "2a257763ea72c8d547083ff87438747c4d0f240a24dba479cdddc1bda562a20d929d770262c915d2c5ae79cd3854abebf263cb56668d1d0a347d4f0033dd360c" }, { "keyid": "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "sig": "163ec38d14a35b364e3c9f3c57a7d6aa7f5a178f8ec23a33ce43aab9eed34a9fbb813d8aebb5f91b278dc03061eb9528a457f1e16a449ff0ffc3c7e279be6204" }, { "keyid": "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "sig": "bb4e58d3f96691280935c1f6e0b603739878ad6cacc2da6395d75c1e6fb9d2fb2e4de238634ec3bd417621485093e480490002c22114a321affb7b4994714c01" }, { "keyid": "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8", "sig": "c7e970795af37c2ec5e73a627daa2fd052d26764b47b70d84257b3607f2e9b4472da8eba5bd720dd4fc9801d9108a69d1bff78d8c0c6b50031bfe158ba1ca300" }, { "keyid": "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b", "sig": "ddb6f6aa044d7b64831b3321d3aa3e3a0c3c1ef5144e9257204d0d7b8e6ac616c9f210166f7f679d8e120d8bdcbc40cfa1fc1a2faf97dbe90b5897a49bd6fe0f" }, { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "7a5b9705304316df3edad16d934518b73a4ee29259e8d5accad5b9fb88c08ae0cd8a95b06f197d94b6ce09cfba528e63eec2464de56ecb5449bba4a2d110a705" }, { "keyid": "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "sig": "a5fb7d23197cb5856ba1524676bf4f6bd96181b8f3a992607167f86a4053c0280651894d37667fbdd3ff21ed16a9f61116e969db4532935e79a7723f2c9af101" }, { "keyid": "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "sig": "701c686cb7defb91040a58f94d9800f42a142d3efdcc53db84a2c1a89f372d134f631135ffeef676efa1cc8b90b4ebbb5040bfc513a7a2aa54cf087cf9770b06" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:20:21Z", "spec_version": "1.0.0", "targets": {}, "version": 2 } }timestamp.json000066400000000000000000000013001453140004500366150ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_targets/server/metadata.staged{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "af71d15c2434dbd9ed4e2eb05628227e9ce9ced8eb9546153544e928f35f18e9093c5ba3a5ee30d71d2000065e0a94a729e5db90e519839b3255c627922d5706" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:20:21Z", "meta": { "snapshot.json": { "hashes": { "sha256": "47ceec303641a009684536b381ee11129a338e4f8a0ea30f99efa205a78265de", "sha512": "6d1e34a684483108365554f3c6996fba96f1f64892920436d2c4e27a399bb7b0cdd4fac07d1df250554ab2164e417be7391281b422a12ae26fb1dd619dc8a1c7" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_targets/server/metadata/000077500000000000000000000000001453140004500325365ustar00rootroot000000000000001.root.json000066400000000000000000000120631453140004500344760ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_targets/server/metadata{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "e007d7f8d4013496a546585fa7a1bc6c793391bd119f84f213b70f70d177a2a48186b4f4892879d65e412c37256406eb0b7bc0467e29e6ae5e86da3addda6407" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:20:21Z", "keys": { "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f758af464295e62a1da4d3267be6d13f4aba9c7d52166d01b6bd5b4559496c9d" }, "scheme": "ed25519" }, "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f6b299bcfb4e15ef652c80e9e3dda995acbb4bf71dce889a82ba70228e45a8bf" }, "scheme": "ed25519" }, "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e104199cda6e018d7d9044fa6225aa5dc9c2af5ee4e1c0fe6d16ad002220390d" }, "scheme": "ed25519" }, "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "82f52e4503dbb364fabe8e5567f1cf909d4175d45468a021dfe75653db9ac98c" }, "scheme": "ed25519" }, "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "9b1db36a5cad80284b5f40b040621e0e444f25ee09efa5c1fd6da4499c711bd5" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "06e4dee0de7826c8d539a6112940b7459892b4ecaf696e67dc064aea0923f95c" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" }, "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "fa386632ae9cc358ad0b56565edef362ad10d7fadb05bc8dc8995627372b990e" }, "scheme": "ed25519" }, "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "683d345a948a9baa343be4e44c076ca115da3838e72c28a06340c8ec1b3ef6be" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b", "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb", "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8" ], "threshold": 4 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 1 } }1.snapshot.json000066400000000000000000000006571453140004500353600ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_targets/server/metadata{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "5939785ca69e19f3dd0e1c9a6fe36179625528fb36e30173a88dbdf139eb1ed7f9f3e0f4e0db075ff51a74141e70669cb329a042938369faa3ca1d5605c0980a" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:20:21Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }1.targets.json000066400000000000000000000043511453140004500351650ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_targets/server/metadata{ "signatures": [ { "keyid": "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "sig": "cbf785791cb07f08524bf07f064cd3dd2aa59d4df683817511186efcf66dc477e775f55669685b0ede916ab8715efab88b6fefb62da052eba03faded53406e0b" }, { "keyid": "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb", "sig": "8940c7a6d7892be68c9830d339c709b5105d2fcccc0624e43c4f5444e25f7ec578ec4899398692edf0e7b91e1194b8cd2ab7c2fb120e1681cbfeca9066b50d01" }, { "keyid": "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "sig": "3d4f10ef870798ec71187ef703fc134a148160a66db0478cef893b0a91487cb90e1e59e7b6b8880def22cd928472421c8ab6ada95d515080b5f483aa17e63b06" }, { "keyid": "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "sig": "09c192fb46e99f6aa5b4e12a7a5c6239c509cc30926e2cceefdf09166621e1c7e945a40e0c12c19f62a5cd78e4627673c5b1da0f55af54f4bc8bec43728b6d0d" }, { "keyid": "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8", "sig": "3bbf88e8cac7256a72f7b681dec4b26cd83cc7c72ad048235a5bf16bbe9519a3c9990f404f61f3f8833d7235633cb821062738c863097aa3a0e25e36f371ef0f" }, { "keyid": "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b", "sig": "bf6e9cd2defa1ae0020e27a91d36910a9a665e127d09f77b698a59d47e70913aa6ebf958057bdc68c2ce8e9d344fffd7e892af66fda424079c732900f3c5590a" }, { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "6745efba317ff34aea61685be997d9ee18d02fee2445cfd9cef32da940d2497b12986b95edbc9be38302bbca90ade299697ad2506ce354b8a3ea9528898fab09" }, { "keyid": "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "sig": "1089b0a143419b02067af4ad353ea03c8adce43370485ff257ff8b6e7006fcddfce8db023844aea960f09520a07f86500bf3be11c3cc71479b4fc2953a0a3d0f" }, { "keyid": "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "sig": "e3673a85e84a24c12fb654e114d3702e5fa98ac73f11bcd72aa5304afa1cc8a30d53c0cacbd1d65bcb7ae7a2d34c7e46b58f8cb784765f15b1b4e6730aa1cb00" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:20:21Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }1.timestamp.json000066400000000000000000000013001453140004500355060ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_targets/server/metadata{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "af71d15c2434dbd9ed4e2eb05628227e9ce9ced8eb9546153544e928f35f18e9093c5ba3a5ee30d71d2000065e0a94a729e5db90e519839b3255c627922d5706" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:20:21Z", "meta": { "snapshot.json": { "hashes": { "sha256": "47ceec303641a009684536b381ee11129a338e4f8a0ea30f99efa205a78265de", "sha512": "6d1e34a684483108365554f3c6996fba96f1f64892920436d2c4e27a399bb7b0cdd4fac07d1df250554ab2164e417be7391281b422a12ae26fb1dd619dc8a1c7" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }2.root.json000066400000000000000000000105071453140004500345000ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_targets/server/metadata{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "dbfb546e3f361f7b746cc076d6632e5fdfe18ec0268b383de317af45f5cb704c9145707144f1f540e91b256b418cf5753de7391fdc1f8ff27c0a6eb265904005" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:20:21Z", "keys": { "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f6b299bcfb4e15ef652c80e9e3dda995acbb4bf71dce889a82ba70228e45a8bf" }, "scheme": "ed25519" }, "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e104199cda6e018d7d9044fa6225aa5dc9c2af5ee4e1c0fe6d16ad002220390d" }, "scheme": "ed25519" }, "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "82f52e4503dbb364fabe8e5567f1cf909d4175d45468a021dfe75653db9ac98c" }, "scheme": "ed25519" }, "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "9b1db36a5cad80284b5f40b040621e0e444f25ee09efa5c1fd6da4499c711bd5" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "06e4dee0de7826c8d539a6112940b7459892b4ecaf696e67dc064aea0923f95c" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "fa386632ae9cc358ad0b56565edef362ad10d7fadb05bc8dc8995627372b990e" }, "scheme": "ed25519" }, "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "683d345a948a9baa343be4e44c076ca115da3838e72c28a06340c8ec1b3ef6be" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b", "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb", "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8" ], "threshold": 4 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 2 } }2.targets.json000066400000000000000000000043511453140004500351660ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_targets/server/metadata{ "signatures": [ { "keyid": "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "sig": "8c3d6300986d5859cdbc3d4a3509f4ca3e3e9dda0b9ccfd51ffcae65757f221a478ed0be7dbae9f1c6c1d10063e5eeec1f05b538c282e4f7de1d8970b9fe210c" }, { "keyid": "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb", "sig": "2a257763ea72c8d547083ff87438747c4d0f240a24dba479cdddc1bda562a20d929d770262c915d2c5ae79cd3854abebf263cb56668d1d0a347d4f0033dd360c" }, { "keyid": "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "sig": "163ec38d14a35b364e3c9f3c57a7d6aa7f5a178f8ec23a33ce43aab9eed34a9fbb813d8aebb5f91b278dc03061eb9528a457f1e16a449ff0ffc3c7e279be6204" }, { "keyid": "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "sig": "bb4e58d3f96691280935c1f6e0b603739878ad6cacc2da6395d75c1e6fb9d2fb2e4de238634ec3bd417621485093e480490002c22114a321affb7b4994714c01" }, { "keyid": "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8", "sig": "c7e970795af37c2ec5e73a627daa2fd052d26764b47b70d84257b3607f2e9b4472da8eba5bd720dd4fc9801d9108a69d1bff78d8c0c6b50031bfe158ba1ca300" }, { "keyid": "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b", "sig": "ddb6f6aa044d7b64831b3321d3aa3e3a0c3c1ef5144e9257204d0d7b8e6ac616c9f210166f7f679d8e120d8bdcbc40cfa1fc1a2faf97dbe90b5897a49bd6fe0f" }, { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "7a5b9705304316df3edad16d934518b73a4ee29259e8d5accad5b9fb88c08ae0cd8a95b06f197d94b6ce09cfba528e63eec2464de56ecb5449bba4a2d110a705" }, { "keyid": "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "sig": "a5fb7d23197cb5856ba1524676bf4f6bd96181b8f3a992607167f86a4053c0280651894d37667fbdd3ff21ed16a9f61116e969db4532935e79a7723f2c9af101" }, { "keyid": "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "sig": "701c686cb7defb91040a58f94d9800f42a142d3efdcc53db84a2c1a89f372d134f631135ffeef676efa1cc8b90b4ebbb5040bfc513a7a2aa54cf087cf9770b06" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:20:21Z", "spec_version": "1.0.0", "targets": {}, "version": 2 } }client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_targets/server/metadata/root.json000066400000000000000000000105071453140004500344170ustar00rootroot00000000000000{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "dbfb546e3f361f7b746cc076d6632e5fdfe18ec0268b383de317af45f5cb704c9145707144f1f540e91b256b418cf5753de7391fdc1f8ff27c0a6eb265904005" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:20:21Z", "keys": { "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f6b299bcfb4e15ef652c80e9e3dda995acbb4bf71dce889a82ba70228e45a8bf" }, "scheme": "ed25519" }, "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e104199cda6e018d7d9044fa6225aa5dc9c2af5ee4e1c0fe6d16ad002220390d" }, "scheme": "ed25519" }, "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "82f52e4503dbb364fabe8e5567f1cf909d4175d45468a021dfe75653db9ac98c" }, "scheme": "ed25519" }, "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "9b1db36a5cad80284b5f40b040621e0e444f25ee09efa5c1fd6da4499c711bd5" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "06e4dee0de7826c8d539a6112940b7459892b4ecaf696e67dc064aea0923f95c" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "fa386632ae9cc358ad0b56565edef362ad10d7fadb05bc8dc8995627372b990e" }, "scheme": "ed25519" }, "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "683d345a948a9baa343be4e44c076ca115da3838e72c28a06340c8ec1b3ef6be" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b", "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb", "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8" ], "threshold": 4 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 2 } }snapshot.json000066400000000000000000000006571453140004500352210ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_targets/server/metadata{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "5939785ca69e19f3dd0e1c9a6fe36179625528fb36e30173a88dbdf139eb1ed7f9f3e0f4e0db075ff51a74141e70669cb329a042938369faa3ca1d5605c0980a" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:20:21Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }targets.json000066400000000000000000000043511453140004500350260ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_targets/server/metadata{ "signatures": [ { "keyid": "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "sig": "8c3d6300986d5859cdbc3d4a3509f4ca3e3e9dda0b9ccfd51ffcae65757f221a478ed0be7dbae9f1c6c1d10063e5eeec1f05b538c282e4f7de1d8970b9fe210c" }, { "keyid": "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb", "sig": "2a257763ea72c8d547083ff87438747c4d0f240a24dba479cdddc1bda562a20d929d770262c915d2c5ae79cd3854abebf263cb56668d1d0a347d4f0033dd360c" }, { "keyid": "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "sig": "163ec38d14a35b364e3c9f3c57a7d6aa7f5a178f8ec23a33ce43aab9eed34a9fbb813d8aebb5f91b278dc03061eb9528a457f1e16a449ff0ffc3c7e279be6204" }, { "keyid": "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "sig": "bb4e58d3f96691280935c1f6e0b603739878ad6cacc2da6395d75c1e6fb9d2fb2e4de238634ec3bd417621485093e480490002c22114a321affb7b4994714c01" }, { "keyid": "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8", "sig": "c7e970795af37c2ec5e73a627daa2fd052d26764b47b70d84257b3607f2e9b4472da8eba5bd720dd4fc9801d9108a69d1bff78d8c0c6b50031bfe158ba1ca300" }, { "keyid": "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b", "sig": "ddb6f6aa044d7b64831b3321d3aa3e3a0c3c1ef5144e9257204d0d7b8e6ac616c9f210166f7f679d8e120d8bdcbc40cfa1fc1a2faf97dbe90b5897a49bd6fe0f" }, { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "7a5b9705304316df3edad16d934518b73a4ee29259e8d5accad5b9fb88c08ae0cd8a95b06f197d94b6ce09cfba528e63eec2464de56ecb5449bba4a2d110a705" }, { "keyid": "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "sig": "a5fb7d23197cb5856ba1524676bf4f6bd96181b8f3a992607167f86a4053c0280651894d37667fbdd3ff21ed16a9f61116e969db4532935e79a7723f2c9af101" }, { "keyid": "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "sig": "701c686cb7defb91040a58f94d9800f42a142d3efdcc53db84a2c1a89f372d134f631135ffeef676efa1cc8b90b4ebbb5040bfc513a7a2aa54cf087cf9770b06" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:20:21Z", "spec_version": "1.0.0", "targets": {}, "version": 2 } }timestamp.json000066400000000000000000000013001453140004500353470ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_targets/server/metadata{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "af71d15c2434dbd9ed4e2eb05628227e9ce9ced8eb9546153544e928f35f18e9093c5ba3a5ee30d71d2000065e0a94a729e5db90e519839b3255c627922d5706" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:20:21Z", "meta": { "snapshot.json": { "hashes": { "sha256": "47ceec303641a009684536b381ee11129a338e4f8a0ea30f99efa205a78265de", "sha512": "6d1e34a684483108365554f3c6996fba96f1f64892920436d2c4e27a399bb7b0cdd4fac07d1df250554ab2164e417be7391281b422a12ae26fb1dd619dc8a1c7" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_timestamp/000077500000000000000000000000001453140004500300025ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_timestamp/client/000077500000000000000000000000001453140004500312605ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_timestamp/client/metadata/000077500000000000000000000000001453140004500330405ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_timestamp/client/metadata/current/000077500000000000000000000000001453140004500345225ustar00rootroot000000000000001.root.json000066400000000000000000000120631453140004500364620ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_timestamp/client/metadata/current{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "ae1ce5269bdb49e159d202abd2bf00bc390c6af87e7efe281d3bc1991103fa2a40617d82163c7014616cdf111a37bf4984f7f2282d63625f1c25829f4752b20e" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:20:20Z", "keys": { "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f758af464295e62a1da4d3267be6d13f4aba9c7d52166d01b6bd5b4559496c9d" }, "scheme": "ed25519" }, "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f6b299bcfb4e15ef652c80e9e3dda995acbb4bf71dce889a82ba70228e45a8bf" }, "scheme": "ed25519" }, "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e104199cda6e018d7d9044fa6225aa5dc9c2af5ee4e1c0fe6d16ad002220390d" }, "scheme": "ed25519" }, "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "82f52e4503dbb364fabe8e5567f1cf909d4175d45468a021dfe75653db9ac98c" }, "scheme": "ed25519" }, "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "9b1db36a5cad80284b5f40b040621e0e444f25ee09efa5c1fd6da4499c711bd5" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "06e4dee0de7826c8d539a6112940b7459892b4ecaf696e67dc064aea0923f95c" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" }, "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "fa386632ae9cc358ad0b56565edef362ad10d7fadb05bc8dc8995627372b990e" }, "scheme": "ed25519" }, "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "683d345a948a9baa343be4e44c076ca115da3838e72c28a06340c8ec1b3ef6be" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b", "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb", "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8" ], "threshold": 4 } }, "spec_version": "1.0.0", "version": 1 } }1.snapshot.json000066400000000000000000000006571453140004500373440ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_timestamp/client/metadata/current{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "d5e231a96d45560123b3dc33bf2a9043a4b25959c0b84c621060687f41fc047548978be8673a350545653e0093cd38a4432a9f7ef98699b7fb59fc075a227b0a" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:20:20Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }1.targets.json000066400000000000000000000006711453140004500371520ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_timestamp/client/metadata/current{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "a576e0ec5d71e3eec0d3448b5107a0eccd35eeeb148ba5ace712be8979e44cdf3a4df595b76801e19957cd70b72c0783262bc23ca8ffd487c7c97de5f968e300" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:20:20Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }1.timestamp.json000066400000000000000000000047601453140004500375070ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_timestamp/client/metadata/current{ "signatures": [ { "keyid": "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "sig": "5bb29b3df3004838f4f0d3d0bdcf2e9edcc1859843f129fb54c6dc5da74e43b6c1ba5cd15652d618d5ae9dafae37f0d7a624ae554d2d94d4909425cca1409b07" }, { "keyid": "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb", "sig": "e6216a17a58b31b80fdb6b3bdfb60fb02e35dc15628cb372694715960e0c0ea82028e410852767d511f3b5a7d0953f78d21b004f5fa3eb81da16f1dfe1cc9104" }, { "keyid": "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "sig": "1b3be15b61bac3a359dcde9ec054f7c4b469c561b2b759e4794ee9535c2ca9defa6d391af04ea108d3cfb0c6e9700b470f115caccdd79db622f73d046b7a8b0d" }, { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "46803209126b583272596e06ef9ce530003f1ca013ee3ef2a77a32afe09d2f9218bcd9016c4c8d947223706f8ca086e01bc0e58a01517c51ef2034a0d8e9f503" }, { "keyid": "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "sig": "0bf36823342fe84e5111a887fab0ebb740c8883c3783f68d374f95da6ae142ab9abc1a0be9acdaf6f175fddad15b12a0ecd27fa6a5d7179609468145da1aad01" }, { "keyid": "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8", "sig": "27d124a184f4ddaeafe4746a132d119c0e0134a344691eadca7d8847178799d94f41b5f0e3ddeb3f01afab5d9dc8db5d96d0418c18ddec31557306b88d257e0c" }, { "keyid": "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b", "sig": "34e28fe630dbc1c6c4a67a7775275654262c4e42967a1b99482c903f9171c724b63e95bac7f150d6482ccfd855bd82e1c644e3dd27af4a38afd2040268215100" }, { "keyid": "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "sig": "ae3d90d7dd750cf885c78f9c12dbae2d2707f5411b42dd03d3c0bced50952661efc6b05b4f6268a663736c64d9f300d27f3a81d85a93ff5705c310c97058340b" }, { "keyid": "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "sig": "625c34749f149a2e9183d8efd813da7d8c9ed336a9fb999770290658b9efcc9432551aa85232b3cd994e77ce111265c384216dcc47bbe86c151bb7e14e911907" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:20:20Z", "meta": { "snapshot.json": { "hashes": { "sha256": "7a797f95dcb2e1894c4b2f59ec6c596dff205c16d23060a5fda55a0f053be2bd", "sha512": "d7d872b82f550d0a0b0458fb15ab343b66d9c6a07c0915ef1a1cf903ec303b717b56c04013b64599a64171564825ca01314a65c690eafecd088a3881bf62c278" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }root.json000066400000000000000000000120631453140004500363230ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_timestamp/client/metadata/current{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "ae1ce5269bdb49e159d202abd2bf00bc390c6af87e7efe281d3bc1991103fa2a40617d82163c7014616cdf111a37bf4984f7f2282d63625f1c25829f4752b20e" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:20:20Z", "keys": { "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f758af464295e62a1da4d3267be6d13f4aba9c7d52166d01b6bd5b4559496c9d" }, "scheme": "ed25519" }, "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f6b299bcfb4e15ef652c80e9e3dda995acbb4bf71dce889a82ba70228e45a8bf" }, "scheme": "ed25519" }, "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e104199cda6e018d7d9044fa6225aa5dc9c2af5ee4e1c0fe6d16ad002220390d" }, "scheme": "ed25519" }, "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "82f52e4503dbb364fabe8e5567f1cf909d4175d45468a021dfe75653db9ac98c" }, "scheme": "ed25519" }, "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "9b1db36a5cad80284b5f40b040621e0e444f25ee09efa5c1fd6da4499c711bd5" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "06e4dee0de7826c8d539a6112940b7459892b4ecaf696e67dc064aea0923f95c" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" }, "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "fa386632ae9cc358ad0b56565edef362ad10d7fadb05bc8dc8995627372b990e" }, "scheme": "ed25519" }, "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "683d345a948a9baa343be4e44c076ca115da3838e72c28a06340c8ec1b3ef6be" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b", "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb", "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8" ], "threshold": 4 } }, "spec_version": "1.0.0", "version": 1 } }snapshot.json000066400000000000000000000006571453140004500372050ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_timestamp/client/metadata/current{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "d5e231a96d45560123b3dc33bf2a9043a4b25959c0b84c621060687f41fc047548978be8673a350545653e0093cd38a4432a9f7ef98699b7fb59fc075a227b0a" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:20:20Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }targets.json000066400000000000000000000006711453140004500370130ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_timestamp/client/metadata/current{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "a576e0ec5d71e3eec0d3448b5107a0eccd35eeeb148ba5ace712be8979e44cdf3a4df595b76801e19957cd70b72c0783262bc23ca8ffd487c7c97de5f968e300" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:20:20Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }timestamp.json000066400000000000000000000047601453140004500373500ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_timestamp/client/metadata/current{ "signatures": [ { "keyid": "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "sig": "5bb29b3df3004838f4f0d3d0bdcf2e9edcc1859843f129fb54c6dc5da74e43b6c1ba5cd15652d618d5ae9dafae37f0d7a624ae554d2d94d4909425cca1409b07" }, { "keyid": "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb", "sig": "e6216a17a58b31b80fdb6b3bdfb60fb02e35dc15628cb372694715960e0c0ea82028e410852767d511f3b5a7d0953f78d21b004f5fa3eb81da16f1dfe1cc9104" }, { "keyid": "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "sig": "1b3be15b61bac3a359dcde9ec054f7c4b469c561b2b759e4794ee9535c2ca9defa6d391af04ea108d3cfb0c6e9700b470f115caccdd79db622f73d046b7a8b0d" }, { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "46803209126b583272596e06ef9ce530003f1ca013ee3ef2a77a32afe09d2f9218bcd9016c4c8d947223706f8ca086e01bc0e58a01517c51ef2034a0d8e9f503" }, { "keyid": "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "sig": "0bf36823342fe84e5111a887fab0ebb740c8883c3783f68d374f95da6ae142ab9abc1a0be9acdaf6f175fddad15b12a0ecd27fa6a5d7179609468145da1aad01" }, { "keyid": "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8", "sig": "27d124a184f4ddaeafe4746a132d119c0e0134a344691eadca7d8847178799d94f41b5f0e3ddeb3f01afab5d9dc8db5d96d0418c18ddec31557306b88d257e0c" }, { "keyid": "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b", "sig": "34e28fe630dbc1c6c4a67a7775275654262c4e42967a1b99482c903f9171c724b63e95bac7f150d6482ccfd855bd82e1c644e3dd27af4a38afd2040268215100" }, { "keyid": "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "sig": "ae3d90d7dd750cf885c78f9c12dbae2d2707f5411b42dd03d3c0bced50952661efc6b05b4f6268a663736c64d9f300d27f3a81d85a93ff5705c310c97058340b" }, { "keyid": "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "sig": "625c34749f149a2e9183d8efd813da7d8c9ed336a9fb999770290658b9efcc9432551aa85232b3cd994e77ce111265c384216dcc47bbe86c151bb7e14e911907" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:20:20Z", "meta": { "snapshot.json": { "hashes": { "sha256": "7a797f95dcb2e1894c4b2f59ec6c596dff205c16d23060a5fda55a0f053be2bd", "sha512": "d7d872b82f550d0a0b0458fb15ab343b66d9c6a07c0915ef1a1cf903ec303b717b56c04013b64599a64171564825ca01314a65c690eafecd088a3881bf62c278" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }previous/000077500000000000000000000000001453140004500346355ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_timestamp/client/metadata1.root.json000066400000000000000000000120631453140004500366540ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_timestamp/client/metadata/previous{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "ae1ce5269bdb49e159d202abd2bf00bc390c6af87e7efe281d3bc1991103fa2a40617d82163c7014616cdf111a37bf4984f7f2282d63625f1c25829f4752b20e" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:20:20Z", "keys": { "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f758af464295e62a1da4d3267be6d13f4aba9c7d52166d01b6bd5b4559496c9d" }, "scheme": "ed25519" }, "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f6b299bcfb4e15ef652c80e9e3dda995acbb4bf71dce889a82ba70228e45a8bf" }, "scheme": "ed25519" }, "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e104199cda6e018d7d9044fa6225aa5dc9c2af5ee4e1c0fe6d16ad002220390d" }, "scheme": "ed25519" }, "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "82f52e4503dbb364fabe8e5567f1cf909d4175d45468a021dfe75653db9ac98c" }, "scheme": "ed25519" }, "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "9b1db36a5cad80284b5f40b040621e0e444f25ee09efa5c1fd6da4499c711bd5" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "06e4dee0de7826c8d539a6112940b7459892b4ecaf696e67dc064aea0923f95c" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" }, "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "fa386632ae9cc358ad0b56565edef362ad10d7fadb05bc8dc8995627372b990e" }, "scheme": "ed25519" }, "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "683d345a948a9baa343be4e44c076ca115da3838e72c28a06340c8ec1b3ef6be" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b", "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb", "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8" ], "threshold": 4 } }, "spec_version": "1.0.0", "version": 1 } }1.snapshot.json000066400000000000000000000006571453140004500375360ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_timestamp/client/metadata/previous{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "d5e231a96d45560123b3dc33bf2a9043a4b25959c0b84c621060687f41fc047548978be8673a350545653e0093cd38a4432a9f7ef98699b7fb59fc075a227b0a" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:20:20Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }1.targets.json000066400000000000000000000006711453140004500373440ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_timestamp/client/metadata/previous{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "a576e0ec5d71e3eec0d3448b5107a0eccd35eeeb148ba5ace712be8979e44cdf3a4df595b76801e19957cd70b72c0783262bc23ca8ffd487c7c97de5f968e300" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:20:20Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }1.timestamp.json000066400000000000000000000047601453140004500377010ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_timestamp/client/metadata/previous{ "signatures": [ { "keyid": "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "sig": "5bb29b3df3004838f4f0d3d0bdcf2e9edcc1859843f129fb54c6dc5da74e43b6c1ba5cd15652d618d5ae9dafae37f0d7a624ae554d2d94d4909425cca1409b07" }, { "keyid": "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb", "sig": "e6216a17a58b31b80fdb6b3bdfb60fb02e35dc15628cb372694715960e0c0ea82028e410852767d511f3b5a7d0953f78d21b004f5fa3eb81da16f1dfe1cc9104" }, { "keyid": "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "sig": "1b3be15b61bac3a359dcde9ec054f7c4b469c561b2b759e4794ee9535c2ca9defa6d391af04ea108d3cfb0c6e9700b470f115caccdd79db622f73d046b7a8b0d" }, { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "46803209126b583272596e06ef9ce530003f1ca013ee3ef2a77a32afe09d2f9218bcd9016c4c8d947223706f8ca086e01bc0e58a01517c51ef2034a0d8e9f503" }, { "keyid": "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "sig": "0bf36823342fe84e5111a887fab0ebb740c8883c3783f68d374f95da6ae142ab9abc1a0be9acdaf6f175fddad15b12a0ecd27fa6a5d7179609468145da1aad01" }, { "keyid": "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8", "sig": "27d124a184f4ddaeafe4746a132d119c0e0134a344691eadca7d8847178799d94f41b5f0e3ddeb3f01afab5d9dc8db5d96d0418c18ddec31557306b88d257e0c" }, { "keyid": "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b", "sig": "34e28fe630dbc1c6c4a67a7775275654262c4e42967a1b99482c903f9171c724b63e95bac7f150d6482ccfd855bd82e1c644e3dd27af4a38afd2040268215100" }, { "keyid": "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "sig": "ae3d90d7dd750cf885c78f9c12dbae2d2707f5411b42dd03d3c0bced50952661efc6b05b4f6268a663736c64d9f300d27f3a81d85a93ff5705c310c97058340b" }, { "keyid": "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "sig": "625c34749f149a2e9183d8efd813da7d8c9ed336a9fb999770290658b9efcc9432551aa85232b3cd994e77ce111265c384216dcc47bbe86c151bb7e14e911907" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:20:20Z", "meta": { "snapshot.json": { "hashes": { "sha256": "7a797f95dcb2e1894c4b2f59ec6c596dff205c16d23060a5fda55a0f053be2bd", "sha512": "d7d872b82f550d0a0b0458fb15ab343b66d9c6a07c0915ef1a1cf903ec303b717b56c04013b64599a64171564825ca01314a65c690eafecd088a3881bf62c278" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }root.json000066400000000000000000000120631453140004500365150ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_timestamp/client/metadata/previous{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "ae1ce5269bdb49e159d202abd2bf00bc390c6af87e7efe281d3bc1991103fa2a40617d82163c7014616cdf111a37bf4984f7f2282d63625f1c25829f4752b20e" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:20:20Z", "keys": { "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f758af464295e62a1da4d3267be6d13f4aba9c7d52166d01b6bd5b4559496c9d" }, "scheme": "ed25519" }, "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f6b299bcfb4e15ef652c80e9e3dda995acbb4bf71dce889a82ba70228e45a8bf" }, "scheme": "ed25519" }, "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e104199cda6e018d7d9044fa6225aa5dc9c2af5ee4e1c0fe6d16ad002220390d" }, "scheme": "ed25519" }, "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "82f52e4503dbb364fabe8e5567f1cf909d4175d45468a021dfe75653db9ac98c" }, "scheme": "ed25519" }, "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "9b1db36a5cad80284b5f40b040621e0e444f25ee09efa5c1fd6da4499c711bd5" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "06e4dee0de7826c8d539a6112940b7459892b4ecaf696e67dc064aea0923f95c" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" }, "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "fa386632ae9cc358ad0b56565edef362ad10d7fadb05bc8dc8995627372b990e" }, "scheme": "ed25519" }, "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "683d345a948a9baa343be4e44c076ca115da3838e72c28a06340c8ec1b3ef6be" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b", "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb", "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8" ], "threshold": 4 } }, "spec_version": "1.0.0", "version": 1 } }snapshot.json000066400000000000000000000006571453140004500373770ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_timestamp/client/metadata/previous{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "d5e231a96d45560123b3dc33bf2a9043a4b25959c0b84c621060687f41fc047548978be8673a350545653e0093cd38a4432a9f7ef98699b7fb59fc075a227b0a" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:20:20Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }targets.json000066400000000000000000000006711453140004500372050ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_timestamp/client/metadata/previous{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "a576e0ec5d71e3eec0d3448b5107a0eccd35eeeb148ba5ace712be8979e44cdf3a4df595b76801e19957cd70b72c0783262bc23ca8ffd487c7c97de5f968e300" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:20:20Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }timestamp.json000066400000000000000000000047601453140004500375420ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_timestamp/client/metadata/previous{ "signatures": [ { "keyid": "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "sig": "5bb29b3df3004838f4f0d3d0bdcf2e9edcc1859843f129fb54c6dc5da74e43b6c1ba5cd15652d618d5ae9dafae37f0d7a624ae554d2d94d4909425cca1409b07" }, { "keyid": "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb", "sig": "e6216a17a58b31b80fdb6b3bdfb60fb02e35dc15628cb372694715960e0c0ea82028e410852767d511f3b5a7d0953f78d21b004f5fa3eb81da16f1dfe1cc9104" }, { "keyid": "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "sig": "1b3be15b61bac3a359dcde9ec054f7c4b469c561b2b759e4794ee9535c2ca9defa6d391af04ea108d3cfb0c6e9700b470f115caccdd79db622f73d046b7a8b0d" }, { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "46803209126b583272596e06ef9ce530003f1ca013ee3ef2a77a32afe09d2f9218bcd9016c4c8d947223706f8ca086e01bc0e58a01517c51ef2034a0d8e9f503" }, { "keyid": "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "sig": "0bf36823342fe84e5111a887fab0ebb740c8883c3783f68d374f95da6ae142ab9abc1a0be9acdaf6f175fddad15b12a0ecd27fa6a5d7179609468145da1aad01" }, { "keyid": "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8", "sig": "27d124a184f4ddaeafe4746a132d119c0e0134a344691eadca7d8847178799d94f41b5f0e3ddeb3f01afab5d9dc8db5d96d0418c18ddec31557306b88d257e0c" }, { "keyid": "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b", "sig": "34e28fe630dbc1c6c4a67a7775275654262c4e42967a1b99482c903f9171c724b63e95bac7f150d6482ccfd855bd82e1c644e3dd27af4a38afd2040268215100" }, { "keyid": "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "sig": "ae3d90d7dd750cf885c78f9c12dbae2d2707f5411b42dd03d3c0bced50952661efc6b05b4f6268a663736c64d9f300d27f3a81d85a93ff5705c310c97058340b" }, { "keyid": "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "sig": "625c34749f149a2e9183d8efd813da7d8c9ed336a9fb999770290658b9efcc9432551aa85232b3cd994e77ce111265c384216dcc47bbe86c151bb7e14e911907" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:20:20Z", "meta": { "snapshot.json": { "hashes": { "sha256": "7a797f95dcb2e1894c4b2f59ec6c596dff205c16d23060a5fda55a0f053be2bd", "sha512": "d7d872b82f550d0a0b0458fb15ab343b66d9c6a07c0915ef1a1cf903ec303b717b56c04013b64599a64171564825ca01314a65c690eafecd088a3881bf62c278" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_timestamp/hash.txt000066400000000000000000000001001453140004500314550ustar00rootroot0000000000000019c5ec00c484505be65a024696fd980add6848b623d74d7eee92dbd3b2c8f178client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_timestamp/server/000077500000000000000000000000001453140004500313105ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_timestamp/server/metadata.staged/000077500000000000000000000000001453140004500343365ustar00rootroot000000000000001.root.json000066400000000000000000000120631453140004500362760ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_timestamp/server/metadata.staged{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "ae1ce5269bdb49e159d202abd2bf00bc390c6af87e7efe281d3bc1991103fa2a40617d82163c7014616cdf111a37bf4984f7f2282d63625f1c25829f4752b20e" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:20:20Z", "keys": { "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f758af464295e62a1da4d3267be6d13f4aba9c7d52166d01b6bd5b4559496c9d" }, "scheme": "ed25519" }, "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f6b299bcfb4e15ef652c80e9e3dda995acbb4bf71dce889a82ba70228e45a8bf" }, "scheme": "ed25519" }, "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e104199cda6e018d7d9044fa6225aa5dc9c2af5ee4e1c0fe6d16ad002220390d" }, "scheme": "ed25519" }, "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "82f52e4503dbb364fabe8e5567f1cf909d4175d45468a021dfe75653db9ac98c" }, "scheme": "ed25519" }, "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "9b1db36a5cad80284b5f40b040621e0e444f25ee09efa5c1fd6da4499c711bd5" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "06e4dee0de7826c8d539a6112940b7459892b4ecaf696e67dc064aea0923f95c" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" }, "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "fa386632ae9cc358ad0b56565edef362ad10d7fadb05bc8dc8995627372b990e" }, "scheme": "ed25519" }, "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "683d345a948a9baa343be4e44c076ca115da3838e72c28a06340c8ec1b3ef6be" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b", "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb", "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8" ], "threshold": 4 } }, "spec_version": "1.0.0", "version": 1 } }1.snapshot.json000066400000000000000000000006571453140004500371600ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_timestamp/server/metadata.staged{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "d5e231a96d45560123b3dc33bf2a9043a4b25959c0b84c621060687f41fc047548978be8673a350545653e0093cd38a4432a9f7ef98699b7fb59fc075a227b0a" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:20:20Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }1.targets.json000066400000000000000000000006711453140004500367660ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_timestamp/server/metadata.staged{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "a576e0ec5d71e3eec0d3448b5107a0eccd35eeeb148ba5ace712be8979e44cdf3a4df595b76801e19957cd70b72c0783262bc23ca8ffd487c7c97de5f968e300" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:20:20Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }1.timestamp.json000066400000000000000000000047601453140004500373230ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_timestamp/server/metadata.staged{ "signatures": [ { "keyid": "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "sig": "5bb29b3df3004838f4f0d3d0bdcf2e9edcc1859843f129fb54c6dc5da74e43b6c1ba5cd15652d618d5ae9dafae37f0d7a624ae554d2d94d4909425cca1409b07" }, { "keyid": "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb", "sig": "e6216a17a58b31b80fdb6b3bdfb60fb02e35dc15628cb372694715960e0c0ea82028e410852767d511f3b5a7d0953f78d21b004f5fa3eb81da16f1dfe1cc9104" }, { "keyid": "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "sig": "1b3be15b61bac3a359dcde9ec054f7c4b469c561b2b759e4794ee9535c2ca9defa6d391af04ea108d3cfb0c6e9700b470f115caccdd79db622f73d046b7a8b0d" }, { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "46803209126b583272596e06ef9ce530003f1ca013ee3ef2a77a32afe09d2f9218bcd9016c4c8d947223706f8ca086e01bc0e58a01517c51ef2034a0d8e9f503" }, { "keyid": "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "sig": "0bf36823342fe84e5111a887fab0ebb740c8883c3783f68d374f95da6ae142ab9abc1a0be9acdaf6f175fddad15b12a0ecd27fa6a5d7179609468145da1aad01" }, { "keyid": "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8", "sig": "27d124a184f4ddaeafe4746a132d119c0e0134a344691eadca7d8847178799d94f41b5f0e3ddeb3f01afab5d9dc8db5d96d0418c18ddec31557306b88d257e0c" }, { "keyid": "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b", "sig": "34e28fe630dbc1c6c4a67a7775275654262c4e42967a1b99482c903f9171c724b63e95bac7f150d6482ccfd855bd82e1c644e3dd27af4a38afd2040268215100" }, { "keyid": "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "sig": "ae3d90d7dd750cf885c78f9c12dbae2d2707f5411b42dd03d3c0bced50952661efc6b05b4f6268a663736c64d9f300d27f3a81d85a93ff5705c310c97058340b" }, { "keyid": "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "sig": "625c34749f149a2e9183d8efd813da7d8c9ed336a9fb999770290658b9efcc9432551aa85232b3cd994e77ce111265c384216dcc47bbe86c151bb7e14e911907" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:20:20Z", "meta": { "snapshot.json": { "hashes": { "sha256": "7a797f95dcb2e1894c4b2f59ec6c596dff205c16d23060a5fda55a0f053be2bd", "sha512": "d7d872b82f550d0a0b0458fb15ab343b66d9c6a07c0915ef1a1cf903ec303b717b56c04013b64599a64171564825ca01314a65c690eafecd088a3881bf62c278" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }2.root.json000066400000000000000000000105071453140004500363000ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_timestamp/server/metadata.staged{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "49f17c01fd9e296f1029144b2c7cff78672f8f0d6f2c6c2049e6412a21f33c8f993fd3e8faf8debefdb4af1a2e2c530826398b8f0c2b1bc9d1dbe3d30d20e60a" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:20:20Z", "keys": { "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f6b299bcfb4e15ef652c80e9e3dda995acbb4bf71dce889a82ba70228e45a8bf" }, "scheme": "ed25519" }, "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e104199cda6e018d7d9044fa6225aa5dc9c2af5ee4e1c0fe6d16ad002220390d" }, "scheme": "ed25519" }, "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "82f52e4503dbb364fabe8e5567f1cf909d4175d45468a021dfe75653db9ac98c" }, "scheme": "ed25519" }, "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "9b1db36a5cad80284b5f40b040621e0e444f25ee09efa5c1fd6da4499c711bd5" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "06e4dee0de7826c8d539a6112940b7459892b4ecaf696e67dc064aea0923f95c" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" }, "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "fa386632ae9cc358ad0b56565edef362ad10d7fadb05bc8dc8995627372b990e" }, "scheme": "ed25519" }, "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "683d345a948a9baa343be4e44c076ca115da3838e72c28a06340c8ec1b3ef6be" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b", "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb", "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8" ], "threshold": 4 } }, "spec_version": "1.0.0", "version": 2 } }2.timestamp.json000066400000000000000000000047601453140004500373240ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_timestamp/server/metadata.staged{ "signatures": [ { "keyid": "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "sig": "4bf1ce4b2a66f6f4bb002d06f6d69a3b72678bcf0ce0d16ac4eaf8faa6eb35aba57cb368abb86f81b41c60dc59c0a43bdbee6fcc3ae5be381aad5aec0cc0e80c" }, { "keyid": "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb", "sig": "f0bbf3b300d72231df1c4bb55e73e20afa08a32f8414ad66d76c886384a71f23b64301fa3f5ebaf30cddd33407ffe58ae00c08112ea30e4f18f355cd4e2bd70d" }, { "keyid": "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "sig": "721f21d83e4e22e52da0f4ec76e05a16f2f6ac41e5f688b5ea81c16a2b3d0be44dab1df306a100a826fc10f2991eb6ba295ff0dd7269abd1faa9e57140fc4508" }, { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "0d1c192b314eab6296eec926b34a9393e27432fbe9d0ac349384648236138c9a2f4c5cbde14074e1c58ce92247f67d93c4c55d6cbfda0873f285b4922e614003" }, { "keyid": "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "sig": "d333eccfaadee6bf457743270df4587550c090b32285ab1cea64b9829e6455218c01bbb6848a4e9126b54b5c893121a1c43d2bf5229165396f79d621d0ba7806" }, { "keyid": "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8", "sig": "ee798279d0e2a7afc94794e99ab17ce8b5754be06b1e6108e5d380b70950e062d5f4551e261545eeba3845d779f51b1390cc6a535b8a0e5a6db083e648bc060c" }, { "keyid": "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b", "sig": "5381bd588a78bf1820e284f6b403696fe56b786df783522d85a0f42e6f3750ca8dd9c6c6dc9a81a40471c97ed50be24555b2f6b7a1439e25e31297342ccfe10c" }, { "keyid": "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "sig": "400dd1ee64a31bf899f956a9d43710ff9b96cd3737a528fd0ae5ef313a91ba4132ee09dc2ed4b77868b09811b9bc8b7808d4eab06df5b57c16fdb53ac2d9fa0b" }, { "keyid": "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "sig": "3e53225418b7b6edd22970bf3e3ed1dd2931d7b8c7ab1e91f54efa12554b151d80c3591f0203eba317873c5aa71bfec5c5349b43ca8a5143a3b393b4751c500b" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:20:20Z", "meta": { "snapshot.json": { "hashes": { "sha256": "7a797f95dcb2e1894c4b2f59ec6c596dff205c16d23060a5fda55a0f053be2bd", "sha512": "d7d872b82f550d0a0b0458fb15ab343b66d9c6a07c0915ef1a1cf903ec303b717b56c04013b64599a64171564825ca01314a65c690eafecd088a3881bf62c278" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 2 } }root.json000066400000000000000000000105071453140004500361400ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_timestamp/server/metadata.staged{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "49f17c01fd9e296f1029144b2c7cff78672f8f0d6f2c6c2049e6412a21f33c8f993fd3e8faf8debefdb4af1a2e2c530826398b8f0c2b1bc9d1dbe3d30d20e60a" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:20:20Z", "keys": { "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f6b299bcfb4e15ef652c80e9e3dda995acbb4bf71dce889a82ba70228e45a8bf" }, "scheme": "ed25519" }, "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e104199cda6e018d7d9044fa6225aa5dc9c2af5ee4e1c0fe6d16ad002220390d" }, "scheme": "ed25519" }, "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "82f52e4503dbb364fabe8e5567f1cf909d4175d45468a021dfe75653db9ac98c" }, "scheme": "ed25519" }, "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "9b1db36a5cad80284b5f40b040621e0e444f25ee09efa5c1fd6da4499c711bd5" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "06e4dee0de7826c8d539a6112940b7459892b4ecaf696e67dc064aea0923f95c" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" }, "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "fa386632ae9cc358ad0b56565edef362ad10d7fadb05bc8dc8995627372b990e" }, "scheme": "ed25519" }, "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "683d345a948a9baa343be4e44c076ca115da3838e72c28a06340c8ec1b3ef6be" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b", "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb", "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8" ], "threshold": 4 } }, "spec_version": "1.0.0", "version": 2 } }snapshot.json000066400000000000000000000006571453140004500370210ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_timestamp/server/metadata.staged{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "d5e231a96d45560123b3dc33bf2a9043a4b25959c0b84c621060687f41fc047548978be8673a350545653e0093cd38a4432a9f7ef98699b7fb59fc075a227b0a" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:20:20Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }targets.json000066400000000000000000000006711453140004500366270ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_timestamp/server/metadata.staged{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "a576e0ec5d71e3eec0d3448b5107a0eccd35eeeb148ba5ace712be8979e44cdf3a4df595b76801e19957cd70b72c0783262bc23ca8ffd487c7c97de5f968e300" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:20:20Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }timestamp.json000066400000000000000000000047601453140004500371640ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_timestamp/server/metadata.staged{ "signatures": [ { "keyid": "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "sig": "4bf1ce4b2a66f6f4bb002d06f6d69a3b72678bcf0ce0d16ac4eaf8faa6eb35aba57cb368abb86f81b41c60dc59c0a43bdbee6fcc3ae5be381aad5aec0cc0e80c" }, { "keyid": "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb", "sig": "f0bbf3b300d72231df1c4bb55e73e20afa08a32f8414ad66d76c886384a71f23b64301fa3f5ebaf30cddd33407ffe58ae00c08112ea30e4f18f355cd4e2bd70d" }, { "keyid": "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "sig": "721f21d83e4e22e52da0f4ec76e05a16f2f6ac41e5f688b5ea81c16a2b3d0be44dab1df306a100a826fc10f2991eb6ba295ff0dd7269abd1faa9e57140fc4508" }, { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "0d1c192b314eab6296eec926b34a9393e27432fbe9d0ac349384648236138c9a2f4c5cbde14074e1c58ce92247f67d93c4c55d6cbfda0873f285b4922e614003" }, { "keyid": "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "sig": "d333eccfaadee6bf457743270df4587550c090b32285ab1cea64b9829e6455218c01bbb6848a4e9126b54b5c893121a1c43d2bf5229165396f79d621d0ba7806" }, { "keyid": "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8", "sig": "ee798279d0e2a7afc94794e99ab17ce8b5754be06b1e6108e5d380b70950e062d5f4551e261545eeba3845d779f51b1390cc6a535b8a0e5a6db083e648bc060c" }, { "keyid": "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b", "sig": "5381bd588a78bf1820e284f6b403696fe56b786df783522d85a0f42e6f3750ca8dd9c6c6dc9a81a40471c97ed50be24555b2f6b7a1439e25e31297342ccfe10c" }, { "keyid": "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "sig": "400dd1ee64a31bf899f956a9d43710ff9b96cd3737a528fd0ae5ef313a91ba4132ee09dc2ed4b77868b09811b9bc8b7808d4eab06df5b57c16fdb53ac2d9fa0b" }, { "keyid": "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "sig": "3e53225418b7b6edd22970bf3e3ed1dd2931d7b8c7ab1e91f54efa12554b151d80c3591f0203eba317873c5aa71bfec5c5349b43ca8a5143a3b393b4751c500b" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:20:20Z", "meta": { "snapshot.json": { "hashes": { "sha256": "7a797f95dcb2e1894c4b2f59ec6c596dff205c16d23060a5fda55a0f053be2bd", "sha512": "d7d872b82f550d0a0b0458fb15ab343b66d9c6a07c0915ef1a1cf903ec303b717b56c04013b64599a64171564825ca01314a65c690eafecd088a3881bf62c278" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 2 } }client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_timestamp/server/metadata/000077500000000000000000000000001453140004500330705ustar00rootroot000000000000001.root.json000066400000000000000000000120631453140004500350300ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_timestamp/server/metadata{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "ae1ce5269bdb49e159d202abd2bf00bc390c6af87e7efe281d3bc1991103fa2a40617d82163c7014616cdf111a37bf4984f7f2282d63625f1c25829f4752b20e" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:20:20Z", "keys": { "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f758af464295e62a1da4d3267be6d13f4aba9c7d52166d01b6bd5b4559496c9d" }, "scheme": "ed25519" }, "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f6b299bcfb4e15ef652c80e9e3dda995acbb4bf71dce889a82ba70228e45a8bf" }, "scheme": "ed25519" }, "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e104199cda6e018d7d9044fa6225aa5dc9c2af5ee4e1c0fe6d16ad002220390d" }, "scheme": "ed25519" }, "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "82f52e4503dbb364fabe8e5567f1cf909d4175d45468a021dfe75653db9ac98c" }, "scheme": "ed25519" }, "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "9b1db36a5cad80284b5f40b040621e0e444f25ee09efa5c1fd6da4499c711bd5" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "06e4dee0de7826c8d539a6112940b7459892b4ecaf696e67dc064aea0923f95c" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" }, "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "fa386632ae9cc358ad0b56565edef362ad10d7fadb05bc8dc8995627372b990e" }, "scheme": "ed25519" }, "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "683d345a948a9baa343be4e44c076ca115da3838e72c28a06340c8ec1b3ef6be" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b", "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb", "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8" ], "threshold": 4 } }, "spec_version": "1.0.0", "version": 1 } }1.snapshot.json000066400000000000000000000006571453140004500357120ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_timestamp/server/metadata{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "d5e231a96d45560123b3dc33bf2a9043a4b25959c0b84c621060687f41fc047548978be8673a350545653e0093cd38a4432a9f7ef98699b7fb59fc075a227b0a" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:20:20Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }1.targets.json000066400000000000000000000006711453140004500355200ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_timestamp/server/metadata{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "a576e0ec5d71e3eec0d3448b5107a0eccd35eeeb148ba5ace712be8979e44cdf3a4df595b76801e19957cd70b72c0783262bc23ca8ffd487c7c97de5f968e300" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:20:20Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }1.timestamp.json000066400000000000000000000047601453140004500360550ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_timestamp/server/metadata{ "signatures": [ { "keyid": "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "sig": "5bb29b3df3004838f4f0d3d0bdcf2e9edcc1859843f129fb54c6dc5da74e43b6c1ba5cd15652d618d5ae9dafae37f0d7a624ae554d2d94d4909425cca1409b07" }, { "keyid": "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb", "sig": "e6216a17a58b31b80fdb6b3bdfb60fb02e35dc15628cb372694715960e0c0ea82028e410852767d511f3b5a7d0953f78d21b004f5fa3eb81da16f1dfe1cc9104" }, { "keyid": "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "sig": "1b3be15b61bac3a359dcde9ec054f7c4b469c561b2b759e4794ee9535c2ca9defa6d391af04ea108d3cfb0c6e9700b470f115caccdd79db622f73d046b7a8b0d" }, { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "46803209126b583272596e06ef9ce530003f1ca013ee3ef2a77a32afe09d2f9218bcd9016c4c8d947223706f8ca086e01bc0e58a01517c51ef2034a0d8e9f503" }, { "keyid": "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "sig": "0bf36823342fe84e5111a887fab0ebb740c8883c3783f68d374f95da6ae142ab9abc1a0be9acdaf6f175fddad15b12a0ecd27fa6a5d7179609468145da1aad01" }, { "keyid": "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8", "sig": "27d124a184f4ddaeafe4746a132d119c0e0134a344691eadca7d8847178799d94f41b5f0e3ddeb3f01afab5d9dc8db5d96d0418c18ddec31557306b88d257e0c" }, { "keyid": "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b", "sig": "34e28fe630dbc1c6c4a67a7775275654262c4e42967a1b99482c903f9171c724b63e95bac7f150d6482ccfd855bd82e1c644e3dd27af4a38afd2040268215100" }, { "keyid": "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "sig": "ae3d90d7dd750cf885c78f9c12dbae2d2707f5411b42dd03d3c0bced50952661efc6b05b4f6268a663736c64d9f300d27f3a81d85a93ff5705c310c97058340b" }, { "keyid": "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "sig": "625c34749f149a2e9183d8efd813da7d8c9ed336a9fb999770290658b9efcc9432551aa85232b3cd994e77ce111265c384216dcc47bbe86c151bb7e14e911907" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:20:20Z", "meta": { "snapshot.json": { "hashes": { "sha256": "7a797f95dcb2e1894c4b2f59ec6c596dff205c16d23060a5fda55a0f053be2bd", "sha512": "d7d872b82f550d0a0b0458fb15ab343b66d9c6a07c0915ef1a1cf903ec303b717b56c04013b64599a64171564825ca01314a65c690eafecd088a3881bf62c278" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }2.root.json000066400000000000000000000105071453140004500350320ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_timestamp/server/metadata{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "49f17c01fd9e296f1029144b2c7cff78672f8f0d6f2c6c2049e6412a21f33c8f993fd3e8faf8debefdb4af1a2e2c530826398b8f0c2b1bc9d1dbe3d30d20e60a" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:20:20Z", "keys": { "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f6b299bcfb4e15ef652c80e9e3dda995acbb4bf71dce889a82ba70228e45a8bf" }, "scheme": "ed25519" }, "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e104199cda6e018d7d9044fa6225aa5dc9c2af5ee4e1c0fe6d16ad002220390d" }, "scheme": "ed25519" }, "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "82f52e4503dbb364fabe8e5567f1cf909d4175d45468a021dfe75653db9ac98c" }, "scheme": "ed25519" }, "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "9b1db36a5cad80284b5f40b040621e0e444f25ee09efa5c1fd6da4499c711bd5" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "06e4dee0de7826c8d539a6112940b7459892b4ecaf696e67dc064aea0923f95c" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" }, "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "fa386632ae9cc358ad0b56565edef362ad10d7fadb05bc8dc8995627372b990e" }, "scheme": "ed25519" }, "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "683d345a948a9baa343be4e44c076ca115da3838e72c28a06340c8ec1b3ef6be" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b", "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb", "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8" ], "threshold": 4 } }, "spec_version": "1.0.0", "version": 2 } }2.timestamp.json000066400000000000000000000047601453140004500360560ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_timestamp/server/metadata{ "signatures": [ { "keyid": "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "sig": "4bf1ce4b2a66f6f4bb002d06f6d69a3b72678bcf0ce0d16ac4eaf8faa6eb35aba57cb368abb86f81b41c60dc59c0a43bdbee6fcc3ae5be381aad5aec0cc0e80c" }, { "keyid": "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb", "sig": "f0bbf3b300d72231df1c4bb55e73e20afa08a32f8414ad66d76c886384a71f23b64301fa3f5ebaf30cddd33407ffe58ae00c08112ea30e4f18f355cd4e2bd70d" }, { "keyid": "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "sig": "721f21d83e4e22e52da0f4ec76e05a16f2f6ac41e5f688b5ea81c16a2b3d0be44dab1df306a100a826fc10f2991eb6ba295ff0dd7269abd1faa9e57140fc4508" }, { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "0d1c192b314eab6296eec926b34a9393e27432fbe9d0ac349384648236138c9a2f4c5cbde14074e1c58ce92247f67d93c4c55d6cbfda0873f285b4922e614003" }, { "keyid": "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "sig": "d333eccfaadee6bf457743270df4587550c090b32285ab1cea64b9829e6455218c01bbb6848a4e9126b54b5c893121a1c43d2bf5229165396f79d621d0ba7806" }, { "keyid": "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8", "sig": "ee798279d0e2a7afc94794e99ab17ce8b5754be06b1e6108e5d380b70950e062d5f4551e261545eeba3845d779f51b1390cc6a535b8a0e5a6db083e648bc060c" }, { "keyid": "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b", "sig": "5381bd588a78bf1820e284f6b403696fe56b786df783522d85a0f42e6f3750ca8dd9c6c6dc9a81a40471c97ed50be24555b2f6b7a1439e25e31297342ccfe10c" }, { "keyid": "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "sig": "400dd1ee64a31bf899f956a9d43710ff9b96cd3737a528fd0ae5ef313a91ba4132ee09dc2ed4b77868b09811b9bc8b7808d4eab06df5b57c16fdb53ac2d9fa0b" }, { "keyid": "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "sig": "3e53225418b7b6edd22970bf3e3ed1dd2931d7b8c7ab1e91f54efa12554b151d80c3591f0203eba317873c5aa71bfec5c5349b43ca8a5143a3b393b4751c500b" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:20:20Z", "meta": { "snapshot.json": { "hashes": { "sha256": "7a797f95dcb2e1894c4b2f59ec6c596dff205c16d23060a5fda55a0f053be2bd", "sha512": "d7d872b82f550d0a0b0458fb15ab343b66d9c6a07c0915ef1a1cf903ec303b717b56c04013b64599a64171564825ca01314a65c690eafecd088a3881bf62c278" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 2 } }root.json000066400000000000000000000105071453140004500346720ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_timestamp/server/metadata{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "49f17c01fd9e296f1029144b2c7cff78672f8f0d6f2c6c2049e6412a21f33c8f993fd3e8faf8debefdb4af1a2e2c530826398b8f0c2b1bc9d1dbe3d30d20e60a" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:20:20Z", "keys": { "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f6b299bcfb4e15ef652c80e9e3dda995acbb4bf71dce889a82ba70228e45a8bf" }, "scheme": "ed25519" }, "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e104199cda6e018d7d9044fa6225aa5dc9c2af5ee4e1c0fe6d16ad002220390d" }, "scheme": "ed25519" }, "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "82f52e4503dbb364fabe8e5567f1cf909d4175d45468a021dfe75653db9ac98c" }, "scheme": "ed25519" }, "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "9b1db36a5cad80284b5f40b040621e0e444f25ee09efa5c1fd6da4499c711bd5" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "06e4dee0de7826c8d539a6112940b7459892b4ecaf696e67dc064aea0923f95c" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" }, "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "fa386632ae9cc358ad0b56565edef362ad10d7fadb05bc8dc8995627372b990e" }, "scheme": "ed25519" }, "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "683d345a948a9baa343be4e44c076ca115da3838e72c28a06340c8ec1b3ef6be" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b", "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb", "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8" ], "threshold": 4 } }, "spec_version": "1.0.0", "version": 2 } }snapshot.json000066400000000000000000000006571453140004500355530ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_timestamp/server/metadata{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "d5e231a96d45560123b3dc33bf2a9043a4b25959c0b84c621060687f41fc047548978be8673a350545653e0093cd38a4432a9f7ef98699b7fb59fc075a227b0a" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:20:20Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }targets.json000066400000000000000000000006711453140004500353610ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_timestamp/server/metadata{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "a576e0ec5d71e3eec0d3448b5107a0eccd35eeeb148ba5ace712be8979e44cdf3a4df595b76801e19957cd70b72c0783262bc23ca8ffd487c7c97de5f968e300" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:20:20Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }timestamp.json000066400000000000000000000047601453140004500357160ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_2_threshold_4_timestamp/server/metadata{ "signatures": [ { "keyid": "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "sig": "4bf1ce4b2a66f6f4bb002d06f6d69a3b72678bcf0ce0d16ac4eaf8faa6eb35aba57cb368abb86f81b41c60dc59c0a43bdbee6fcc3ae5be381aad5aec0cc0e80c" }, { "keyid": "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb", "sig": "f0bbf3b300d72231df1c4bb55e73e20afa08a32f8414ad66d76c886384a71f23b64301fa3f5ebaf30cddd33407ffe58ae00c08112ea30e4f18f355cd4e2bd70d" }, { "keyid": "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "sig": "721f21d83e4e22e52da0f4ec76e05a16f2f6ac41e5f688b5ea81c16a2b3d0be44dab1df306a100a826fc10f2991eb6ba295ff0dd7269abd1faa9e57140fc4508" }, { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "0d1c192b314eab6296eec926b34a9393e27432fbe9d0ac349384648236138c9a2f4c5cbde14074e1c58ce92247f67d93c4c55d6cbfda0873f285b4922e614003" }, { "keyid": "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "sig": "d333eccfaadee6bf457743270df4587550c090b32285ab1cea64b9829e6455218c01bbb6848a4e9126b54b5c893121a1c43d2bf5229165396f79d621d0ba7806" }, { "keyid": "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8", "sig": "ee798279d0e2a7afc94794e99ab17ce8b5754be06b1e6108e5d380b70950e062d5f4551e261545eeba3845d779f51b1390cc6a535b8a0e5a6db083e648bc060c" }, { "keyid": "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b", "sig": "5381bd588a78bf1820e284f6b403696fe56b786df783522d85a0f42e6f3750ca8dd9c6c6dc9a81a40471c97ed50be24555b2f6b7a1439e25e31297342ccfe10c" }, { "keyid": "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "sig": "400dd1ee64a31bf899f956a9d43710ff9b96cd3737a528fd0ae5ef313a91ba4132ee09dc2ed4b77868b09811b9bc8b7808d4eab06df5b57c16fdb53ac2d9fa0b" }, { "keyid": "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "sig": "3e53225418b7b6edd22970bf3e3ed1dd2931d7b8c7ab1e91f54efa12554b151d80c3591f0203eba317873c5aa71bfec5c5349b43ca8a5143a3b393b4751c500b" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:20:20Z", "meta": { "snapshot.json": { "hashes": { "sha256": "7a797f95dcb2e1894c4b2f59ec6c596dff205c16d23060a5fda55a0f053be2bd", "sha512": "d7d872b82f550d0a0b0458fb15ab343b66d9c6a07c0915ef1a1cf903ec303b717b56c04013b64599a64171564825ca01314a65c690eafecd088a3881bf62c278" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 2 } }client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_root/000077500000000000000000000000001453140004500267645ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_root/client/000077500000000000000000000000001453140004500302425ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_root/client/metadata/000077500000000000000000000000001453140004500320225ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_root/client/metadata/current/000077500000000000000000000000001453140004500335045ustar00rootroot000000000000001.root.json000066400000000000000000000155431453140004500354520ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_root/client/metadata/current{ "signatures": [ { "keyid": "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "sig": "876195f83e8dbb1b00f70188fc7f405d05d321da97a9b98781f331d2dea6be1415d0a0b4e23697f2e30235e98c3503a2ec3aade3bd4c1bac8109f368d9ed5005" }, { "keyid": "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb", "sig": "ff3e54a7492085d33ebf25158ce673fdd7d871a49cdccbe31b35c9ba1c28b91fd22b161b8a226248b3ef3e81378cdaa1ef3e37c2100363ec1be6d87d19a2aa0c" }, { "keyid": "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "sig": "59da18183f6729135b74539865f55e5c6e3d837209b724922cd56dd79f46c7150016930f477707c78ee9e39ee0f1a8e18304ab4cdaf1c11f81f147cbf5c57904" }, { "keyid": "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "sig": "c0b98cba687cdab0628872207026501c9b3c289af113c0be83176a908e58a647b2be9716b37ae4acc78327bbcd715d97d200953681646f3bc918e6c0f409dc0d" }, { "keyid": "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8", "sig": "7fa4506b7e9c6aac34b6c9b5e1099e8fa995fb1af7804cb9245b0132edf41739b7049277de11577c1ff72c1cf8fe41ba3ec32bf802cf16cb19e42765f53d3f0e" }, { "keyid": "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b", "sig": "8c5af6fd1930026a1a9d9816e18205dc4e6bbf0e4b9dd7385d9cc10ca6bf3609cce7c62d5ea5432e0a67e3c395531cf1c67f874f0ba1acb27bf161423b34500c" }, { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "ef03e8b766ffe280b1486460ee1b8cd92e6605d4d4af32696a0345b940767f7e3ae66f217b97eae12aa704fa5ee03073079046efe4c76c14989c4784d2d1fa0d" }, { "keyid": "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "sig": "0a536f66722b82fa8da8ef6837cdae1d719abe72dd27fe36a4fcb2d21302989bb897275825bfef3a5f93fd487f947c75c703da69ad67988c1be46a975a8a6602" }, { "keyid": "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "sig": "caf6083cc4ab3fc5a39cc243d08faf0724435b9189b4a3349cb8955b321d9c644697c9d96698e09a5c47f5d032a562c97b08a3e840dbb60f4224afeb438a3a0b" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:20:18Z", "keys": { "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f758af464295e62a1da4d3267be6d13f4aba9c7d52166d01b6bd5b4559496c9d" }, "scheme": "ed25519" }, "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f6b299bcfb4e15ef652c80e9e3dda995acbb4bf71dce889a82ba70228e45a8bf" }, "scheme": "ed25519" }, "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e104199cda6e018d7d9044fa6225aa5dc9c2af5ee4e1c0fe6d16ad002220390d" }, "scheme": "ed25519" }, "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "82f52e4503dbb364fabe8e5567f1cf909d4175d45468a021dfe75653db9ac98c" }, "scheme": "ed25519" }, "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "9b1db36a5cad80284b5f40b040621e0e444f25ee09efa5c1fd6da4499c711bd5" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "06e4dee0de7826c8d539a6112940b7459892b4ecaf696e67dc064aea0923f95c" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" }, "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "fa386632ae9cc358ad0b56565edef362ad10d7fadb05bc8dc8995627372b990e" }, "scheme": "ed25519" }, "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "683d345a948a9baa343be4e44c076ca115da3838e72c28a06340c8ec1b3ef6be" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b", "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb", "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8" ], "threshold": 4 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 1 } }1.snapshot.json000066400000000000000000000006571453140004500363260ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_root/client/metadata/current{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "7945d5bbebfd0f077a6f8bcac4eed402709f07307663b935835712ff4fb4eebbc51146039d0a1ecb3bc7726c526f12e0b063cc3d9dae1c422179db99d4409b0c" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:20:18Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }1.targets.json000066400000000000000000000006711453140004500361340ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_root/client/metadata/current{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "1c07f726a8988b2bbb150cd91c36fa2e0716eb904a89002e24f2382641d5f7680e04cbedbecf89034c8b6416b7a31d5c4bdcc20f0aa2cd976353828cda0e3e0e" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:20:18Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }1.timestamp.json000066400000000000000000000013001453140004500364540ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_root/client/metadata/current{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "18e08cd54878e2af5838ed4445230e687ce0007c1b886b3c1446ee639365b0053e294c930b176fdb1258af9f957e4c4927beaccbbffb354cc27b9d5745257808" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:20:18Z", "meta": { "snapshot.json": { "hashes": { "sha256": "765e1bc98ad6235b9a6e1c200e8576c262ed924ba81a9960268a65b7fc1bba91", "sha512": "b245cd1eb39623b7d6d9d07765bae5e7a373471c4bfc66862042e50f0ced2fbe564dfd23565ce7746e926492d6543c700b22ce48bbe19f5e4128698d243cea49" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }root.json000066400000000000000000000155431453140004500353130ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_root/client/metadata/current{ "signatures": [ { "keyid": "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "sig": "876195f83e8dbb1b00f70188fc7f405d05d321da97a9b98781f331d2dea6be1415d0a0b4e23697f2e30235e98c3503a2ec3aade3bd4c1bac8109f368d9ed5005" }, { "keyid": "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb", "sig": "ff3e54a7492085d33ebf25158ce673fdd7d871a49cdccbe31b35c9ba1c28b91fd22b161b8a226248b3ef3e81378cdaa1ef3e37c2100363ec1be6d87d19a2aa0c" }, { "keyid": "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "sig": "59da18183f6729135b74539865f55e5c6e3d837209b724922cd56dd79f46c7150016930f477707c78ee9e39ee0f1a8e18304ab4cdaf1c11f81f147cbf5c57904" }, { "keyid": "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "sig": "c0b98cba687cdab0628872207026501c9b3c289af113c0be83176a908e58a647b2be9716b37ae4acc78327bbcd715d97d200953681646f3bc918e6c0f409dc0d" }, { "keyid": "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8", "sig": "7fa4506b7e9c6aac34b6c9b5e1099e8fa995fb1af7804cb9245b0132edf41739b7049277de11577c1ff72c1cf8fe41ba3ec32bf802cf16cb19e42765f53d3f0e" }, { "keyid": "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b", "sig": "8c5af6fd1930026a1a9d9816e18205dc4e6bbf0e4b9dd7385d9cc10ca6bf3609cce7c62d5ea5432e0a67e3c395531cf1c67f874f0ba1acb27bf161423b34500c" }, { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "ef03e8b766ffe280b1486460ee1b8cd92e6605d4d4af32696a0345b940767f7e3ae66f217b97eae12aa704fa5ee03073079046efe4c76c14989c4784d2d1fa0d" }, { "keyid": "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "sig": "0a536f66722b82fa8da8ef6837cdae1d719abe72dd27fe36a4fcb2d21302989bb897275825bfef3a5f93fd487f947c75c703da69ad67988c1be46a975a8a6602" }, { "keyid": "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "sig": "caf6083cc4ab3fc5a39cc243d08faf0724435b9189b4a3349cb8955b321d9c644697c9d96698e09a5c47f5d032a562c97b08a3e840dbb60f4224afeb438a3a0b" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:20:18Z", "keys": { "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f758af464295e62a1da4d3267be6d13f4aba9c7d52166d01b6bd5b4559496c9d" }, "scheme": "ed25519" }, "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f6b299bcfb4e15ef652c80e9e3dda995acbb4bf71dce889a82ba70228e45a8bf" }, "scheme": "ed25519" }, "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e104199cda6e018d7d9044fa6225aa5dc9c2af5ee4e1c0fe6d16ad002220390d" }, "scheme": "ed25519" }, "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "82f52e4503dbb364fabe8e5567f1cf909d4175d45468a021dfe75653db9ac98c" }, "scheme": "ed25519" }, "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "9b1db36a5cad80284b5f40b040621e0e444f25ee09efa5c1fd6da4499c711bd5" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "06e4dee0de7826c8d539a6112940b7459892b4ecaf696e67dc064aea0923f95c" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" }, "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "fa386632ae9cc358ad0b56565edef362ad10d7fadb05bc8dc8995627372b990e" }, "scheme": "ed25519" }, "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "683d345a948a9baa343be4e44c076ca115da3838e72c28a06340c8ec1b3ef6be" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b", "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb", "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8" ], "threshold": 4 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 1 } }snapshot.json000066400000000000000000000006571453140004500361670ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_root/client/metadata/current{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "7945d5bbebfd0f077a6f8bcac4eed402709f07307663b935835712ff4fb4eebbc51146039d0a1ecb3bc7726c526f12e0b063cc3d9dae1c422179db99d4409b0c" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:20:18Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }targets.json000066400000000000000000000006711453140004500357750ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_root/client/metadata/current{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "1c07f726a8988b2bbb150cd91c36fa2e0716eb904a89002e24f2382641d5f7680e04cbedbecf89034c8b6416b7a31d5c4bdcc20f0aa2cd976353828cda0e3e0e" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:20:18Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }timestamp.json000066400000000000000000000013001453140004500363150ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_root/client/metadata/current{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "18e08cd54878e2af5838ed4445230e687ce0007c1b886b3c1446ee639365b0053e294c930b176fdb1258af9f957e4c4927beaccbbffb354cc27b9d5745257808" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:20:18Z", "meta": { "snapshot.json": { "hashes": { "sha256": "765e1bc98ad6235b9a6e1c200e8576c262ed924ba81a9960268a65b7fc1bba91", "sha512": "b245cd1eb39623b7d6d9d07765bae5e7a373471c4bfc66862042e50f0ced2fbe564dfd23565ce7746e926492d6543c700b22ce48bbe19f5e4128698d243cea49" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_root/client/metadata/previous/000077500000000000000000000000001453140004500336765ustar00rootroot000000000000001.root.json000066400000000000000000000155431453140004500356440ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_root/client/metadata/previous{ "signatures": [ { "keyid": "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "sig": "876195f83e8dbb1b00f70188fc7f405d05d321da97a9b98781f331d2dea6be1415d0a0b4e23697f2e30235e98c3503a2ec3aade3bd4c1bac8109f368d9ed5005" }, { "keyid": "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb", "sig": "ff3e54a7492085d33ebf25158ce673fdd7d871a49cdccbe31b35c9ba1c28b91fd22b161b8a226248b3ef3e81378cdaa1ef3e37c2100363ec1be6d87d19a2aa0c" }, { "keyid": "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "sig": "59da18183f6729135b74539865f55e5c6e3d837209b724922cd56dd79f46c7150016930f477707c78ee9e39ee0f1a8e18304ab4cdaf1c11f81f147cbf5c57904" }, { "keyid": "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "sig": "c0b98cba687cdab0628872207026501c9b3c289af113c0be83176a908e58a647b2be9716b37ae4acc78327bbcd715d97d200953681646f3bc918e6c0f409dc0d" }, { "keyid": "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8", "sig": "7fa4506b7e9c6aac34b6c9b5e1099e8fa995fb1af7804cb9245b0132edf41739b7049277de11577c1ff72c1cf8fe41ba3ec32bf802cf16cb19e42765f53d3f0e" }, { "keyid": "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b", "sig": "8c5af6fd1930026a1a9d9816e18205dc4e6bbf0e4b9dd7385d9cc10ca6bf3609cce7c62d5ea5432e0a67e3c395531cf1c67f874f0ba1acb27bf161423b34500c" }, { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "ef03e8b766ffe280b1486460ee1b8cd92e6605d4d4af32696a0345b940767f7e3ae66f217b97eae12aa704fa5ee03073079046efe4c76c14989c4784d2d1fa0d" }, { "keyid": "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "sig": "0a536f66722b82fa8da8ef6837cdae1d719abe72dd27fe36a4fcb2d21302989bb897275825bfef3a5f93fd487f947c75c703da69ad67988c1be46a975a8a6602" }, { "keyid": "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "sig": "caf6083cc4ab3fc5a39cc243d08faf0724435b9189b4a3349cb8955b321d9c644697c9d96698e09a5c47f5d032a562c97b08a3e840dbb60f4224afeb438a3a0b" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:20:18Z", "keys": { "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f758af464295e62a1da4d3267be6d13f4aba9c7d52166d01b6bd5b4559496c9d" }, "scheme": "ed25519" }, "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f6b299bcfb4e15ef652c80e9e3dda995acbb4bf71dce889a82ba70228e45a8bf" }, "scheme": "ed25519" }, "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e104199cda6e018d7d9044fa6225aa5dc9c2af5ee4e1c0fe6d16ad002220390d" }, "scheme": "ed25519" }, "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "82f52e4503dbb364fabe8e5567f1cf909d4175d45468a021dfe75653db9ac98c" }, "scheme": "ed25519" }, "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "9b1db36a5cad80284b5f40b040621e0e444f25ee09efa5c1fd6da4499c711bd5" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "06e4dee0de7826c8d539a6112940b7459892b4ecaf696e67dc064aea0923f95c" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" }, "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "fa386632ae9cc358ad0b56565edef362ad10d7fadb05bc8dc8995627372b990e" }, "scheme": "ed25519" }, "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "683d345a948a9baa343be4e44c076ca115da3838e72c28a06340c8ec1b3ef6be" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b", "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb", "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8" ], "threshold": 4 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 1 } }1.snapshot.json000066400000000000000000000006571453140004500365200ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_root/client/metadata/previous{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "7945d5bbebfd0f077a6f8bcac4eed402709f07307663b935835712ff4fb4eebbc51146039d0a1ecb3bc7726c526f12e0b063cc3d9dae1c422179db99d4409b0c" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:20:18Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }1.targets.json000066400000000000000000000006711453140004500363260ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_root/client/metadata/previous{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "1c07f726a8988b2bbb150cd91c36fa2e0716eb904a89002e24f2382641d5f7680e04cbedbecf89034c8b6416b7a31d5c4bdcc20f0aa2cd976353828cda0e3e0e" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:20:18Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }1.timestamp.json000066400000000000000000000013001453140004500366460ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_root/client/metadata/previous{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "18e08cd54878e2af5838ed4445230e687ce0007c1b886b3c1446ee639365b0053e294c930b176fdb1258af9f957e4c4927beaccbbffb354cc27b9d5745257808" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:20:18Z", "meta": { "snapshot.json": { "hashes": { "sha256": "765e1bc98ad6235b9a6e1c200e8576c262ed924ba81a9960268a65b7fc1bba91", "sha512": "b245cd1eb39623b7d6d9d07765bae5e7a373471c4bfc66862042e50f0ced2fbe564dfd23565ce7746e926492d6543c700b22ce48bbe19f5e4128698d243cea49" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }root.json000066400000000000000000000155431453140004500355050ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_root/client/metadata/previous{ "signatures": [ { "keyid": "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "sig": "876195f83e8dbb1b00f70188fc7f405d05d321da97a9b98781f331d2dea6be1415d0a0b4e23697f2e30235e98c3503a2ec3aade3bd4c1bac8109f368d9ed5005" }, { "keyid": "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb", "sig": "ff3e54a7492085d33ebf25158ce673fdd7d871a49cdccbe31b35c9ba1c28b91fd22b161b8a226248b3ef3e81378cdaa1ef3e37c2100363ec1be6d87d19a2aa0c" }, { "keyid": "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "sig": "59da18183f6729135b74539865f55e5c6e3d837209b724922cd56dd79f46c7150016930f477707c78ee9e39ee0f1a8e18304ab4cdaf1c11f81f147cbf5c57904" }, { "keyid": "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "sig": "c0b98cba687cdab0628872207026501c9b3c289af113c0be83176a908e58a647b2be9716b37ae4acc78327bbcd715d97d200953681646f3bc918e6c0f409dc0d" }, { "keyid": "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8", "sig": "7fa4506b7e9c6aac34b6c9b5e1099e8fa995fb1af7804cb9245b0132edf41739b7049277de11577c1ff72c1cf8fe41ba3ec32bf802cf16cb19e42765f53d3f0e" }, { "keyid": "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b", "sig": "8c5af6fd1930026a1a9d9816e18205dc4e6bbf0e4b9dd7385d9cc10ca6bf3609cce7c62d5ea5432e0a67e3c395531cf1c67f874f0ba1acb27bf161423b34500c" }, { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "ef03e8b766ffe280b1486460ee1b8cd92e6605d4d4af32696a0345b940767f7e3ae66f217b97eae12aa704fa5ee03073079046efe4c76c14989c4784d2d1fa0d" }, { "keyid": "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "sig": "0a536f66722b82fa8da8ef6837cdae1d719abe72dd27fe36a4fcb2d21302989bb897275825bfef3a5f93fd487f947c75c703da69ad67988c1be46a975a8a6602" }, { "keyid": "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "sig": "caf6083cc4ab3fc5a39cc243d08faf0724435b9189b4a3349cb8955b321d9c644697c9d96698e09a5c47f5d032a562c97b08a3e840dbb60f4224afeb438a3a0b" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:20:18Z", "keys": { "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f758af464295e62a1da4d3267be6d13f4aba9c7d52166d01b6bd5b4559496c9d" }, "scheme": "ed25519" }, "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f6b299bcfb4e15ef652c80e9e3dda995acbb4bf71dce889a82ba70228e45a8bf" }, "scheme": "ed25519" }, "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e104199cda6e018d7d9044fa6225aa5dc9c2af5ee4e1c0fe6d16ad002220390d" }, "scheme": "ed25519" }, "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "82f52e4503dbb364fabe8e5567f1cf909d4175d45468a021dfe75653db9ac98c" }, "scheme": "ed25519" }, "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "9b1db36a5cad80284b5f40b040621e0e444f25ee09efa5c1fd6da4499c711bd5" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "06e4dee0de7826c8d539a6112940b7459892b4ecaf696e67dc064aea0923f95c" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" }, "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "fa386632ae9cc358ad0b56565edef362ad10d7fadb05bc8dc8995627372b990e" }, "scheme": "ed25519" }, "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "683d345a948a9baa343be4e44c076ca115da3838e72c28a06340c8ec1b3ef6be" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b", "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb", "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8" ], "threshold": 4 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 1 } }snapshot.json000066400000000000000000000006571453140004500363610ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_root/client/metadata/previous{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "7945d5bbebfd0f077a6f8bcac4eed402709f07307663b935835712ff4fb4eebbc51146039d0a1ecb3bc7726c526f12e0b063cc3d9dae1c422179db99d4409b0c" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:20:18Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }targets.json000066400000000000000000000006711453140004500361670ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_root/client/metadata/previous{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "1c07f726a8988b2bbb150cd91c36fa2e0716eb904a89002e24f2382641d5f7680e04cbedbecf89034c8b6416b7a31d5c4bdcc20f0aa2cd976353828cda0e3e0e" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:20:18Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }timestamp.json000066400000000000000000000013001453140004500365070ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_root/client/metadata/previous{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "18e08cd54878e2af5838ed4445230e687ce0007c1b886b3c1446ee639365b0053e294c930b176fdb1258af9f957e4c4927beaccbbffb354cc27b9d5745257808" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:20:18Z", "meta": { "snapshot.json": { "hashes": { "sha256": "765e1bc98ad6235b9a6e1c200e8576c262ed924ba81a9960268a65b7fc1bba91", "sha512": "b245cd1eb39623b7d6d9d07765bae5e7a373471c4bfc66862042e50f0ced2fbe564dfd23565ce7746e926492d6543c700b22ce48bbe19f5e4128698d243cea49" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_root/hash.txt000066400000000000000000000001001453140004500304370ustar00rootroot000000000000003394568b65c89ced0502b93667ebc005aa9337c95f1c10c8e0f09c002b217edeclient/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_root/server/000077500000000000000000000000001453140004500302725ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_root/server/metadata.staged/000077500000000000000000000000001453140004500333205ustar00rootroot000000000000001.root.json000066400000000000000000000155431453140004500352660ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_root/server/metadata.staged{ "signatures": [ { "keyid": "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "sig": "876195f83e8dbb1b00f70188fc7f405d05d321da97a9b98781f331d2dea6be1415d0a0b4e23697f2e30235e98c3503a2ec3aade3bd4c1bac8109f368d9ed5005" }, { "keyid": "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb", "sig": "ff3e54a7492085d33ebf25158ce673fdd7d871a49cdccbe31b35c9ba1c28b91fd22b161b8a226248b3ef3e81378cdaa1ef3e37c2100363ec1be6d87d19a2aa0c" }, { "keyid": "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "sig": "59da18183f6729135b74539865f55e5c6e3d837209b724922cd56dd79f46c7150016930f477707c78ee9e39ee0f1a8e18304ab4cdaf1c11f81f147cbf5c57904" }, { "keyid": "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "sig": "c0b98cba687cdab0628872207026501c9b3c289af113c0be83176a908e58a647b2be9716b37ae4acc78327bbcd715d97d200953681646f3bc918e6c0f409dc0d" }, { "keyid": "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8", "sig": "7fa4506b7e9c6aac34b6c9b5e1099e8fa995fb1af7804cb9245b0132edf41739b7049277de11577c1ff72c1cf8fe41ba3ec32bf802cf16cb19e42765f53d3f0e" }, { "keyid": "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b", "sig": "8c5af6fd1930026a1a9d9816e18205dc4e6bbf0e4b9dd7385d9cc10ca6bf3609cce7c62d5ea5432e0a67e3c395531cf1c67f874f0ba1acb27bf161423b34500c" }, { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "ef03e8b766ffe280b1486460ee1b8cd92e6605d4d4af32696a0345b940767f7e3ae66f217b97eae12aa704fa5ee03073079046efe4c76c14989c4784d2d1fa0d" }, { "keyid": "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "sig": "0a536f66722b82fa8da8ef6837cdae1d719abe72dd27fe36a4fcb2d21302989bb897275825bfef3a5f93fd487f947c75c703da69ad67988c1be46a975a8a6602" }, { "keyid": "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "sig": "caf6083cc4ab3fc5a39cc243d08faf0724435b9189b4a3349cb8955b321d9c644697c9d96698e09a5c47f5d032a562c97b08a3e840dbb60f4224afeb438a3a0b" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:20:18Z", "keys": { "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f758af464295e62a1da4d3267be6d13f4aba9c7d52166d01b6bd5b4559496c9d" }, "scheme": "ed25519" }, "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f6b299bcfb4e15ef652c80e9e3dda995acbb4bf71dce889a82ba70228e45a8bf" }, "scheme": "ed25519" }, "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e104199cda6e018d7d9044fa6225aa5dc9c2af5ee4e1c0fe6d16ad002220390d" }, "scheme": "ed25519" }, "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "82f52e4503dbb364fabe8e5567f1cf909d4175d45468a021dfe75653db9ac98c" }, "scheme": "ed25519" }, "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "9b1db36a5cad80284b5f40b040621e0e444f25ee09efa5c1fd6da4499c711bd5" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "06e4dee0de7826c8d539a6112940b7459892b4ecaf696e67dc064aea0923f95c" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" }, "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "fa386632ae9cc358ad0b56565edef362ad10d7fadb05bc8dc8995627372b990e" }, "scheme": "ed25519" }, "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "683d345a948a9baa343be4e44c076ca115da3838e72c28a06340c8ec1b3ef6be" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b", "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb", "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8" ], "threshold": 4 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 1 } }1.snapshot.json000066400000000000000000000006571453140004500361420ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_root/server/metadata.staged{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "7945d5bbebfd0f077a6f8bcac4eed402709f07307663b935835712ff4fb4eebbc51146039d0a1ecb3bc7726c526f12e0b063cc3d9dae1c422179db99d4409b0c" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:20:18Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }1.targets.json000066400000000000000000000006711453140004500357500ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_root/server/metadata.staged{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "1c07f726a8988b2bbb150cd91c36fa2e0716eb904a89002e24f2382641d5f7680e04cbedbecf89034c8b6416b7a31d5c4bdcc20f0aa2cd976353828cda0e3e0e" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:20:18Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }1.timestamp.json000066400000000000000000000013001453140004500362700ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_root/server/metadata.staged{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "18e08cd54878e2af5838ed4445230e687ce0007c1b886b3c1446ee639365b0053e294c930b176fdb1258af9f957e4c4927beaccbbffb354cc27b9d5745257808" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:20:18Z", "meta": { "snapshot.json": { "hashes": { "sha256": "765e1bc98ad6235b9a6e1c200e8576c262ed924ba81a9960268a65b7fc1bba91", "sha512": "b245cd1eb39623b7d6d9d07765bae5e7a373471c4bfc66862042e50f0ced2fbe564dfd23565ce7746e926492d6543c700b22ce48bbe19f5e4128698d243cea49" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }2.root.json000066400000000000000000000126131453140004500352620ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_root/server/metadata.staged{ "signatures": [ { "keyid": "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "sig": "1796c3a9956f553c32ff9c7db8734af9d960989f89f185ef0edc36a87591d2e815ef84a7903bd553ec7ed156170e0c701739bdb9c8fd61316b36dd870525b30a" }, { "keyid": "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb", "sig": "1aae88766ce5015d6ec2e75345a8ed5ac7b7e7a3c234e7f2215c37e577bb512743f612f6d7ead301970f1a01dbd15a7a4467147823a1e226ce5643817fafb900" }, { "keyid": "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "sig": "7f7bec7da5b5b88bd33ac8c94dbee5700c6fdae5454a98a21516edea8a8d5714c16d49957b3eebbb4b88aa3f3e2e17590f2b056894cb1093c7399a403ad33007" }, { "keyid": "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "sig": "398ab57bf00e675ccf5c6a34c88013f86488cece97646db6e00aac40ca3e2f68c8ee6e2d73a14ee9484cb6405f1f653ff896ff95b062221c0c36df2a71b5e50f" }, { "keyid": "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8", "sig": "8ea937bb5a9451161b32605676731ded282d3878e8058d585759b43ee1700a77a33d1b21614486e0240fc1d0af39723cc85ea403479d6efb62c05cc6fdd16a08" }, { "keyid": "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b", "sig": "bf47e74acfdc137847a1c96d7ef42e3049a347cf96c6b873e5047dd2e50050e13a0dba4907138ba3c29e1c768ddfc6332647fb9658fede4229192e1bc5b6d409" }, { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "9c17a9c043a6dc378334f162999767acc012f6cb33e041f3c9b14963cacb1a32b6cba552931eb9ddd8bd78bf0a872498a8829c4c6c261a2978b083a8639c110f" }, { "keyid": "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "sig": "c5698a3a2195c4399b4e04fc9db778a7c02acf82c691517fad43a387083fa4dfe9331c1429c10d22ca14088516518939b104994c68dfc16d21b1ada46ef7b700" }, { "keyid": "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "sig": "78f401be103e238daf3c931c2eeb6e7a0eb118042bcbabce533a4d0057e9a19b7df5357fd8f837f36d58a69b1a2719ab2e326e4656e92e8435dd14ba2b01640f" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:20:18Z", "keys": { "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f6b299bcfb4e15ef652c80e9e3dda995acbb4bf71dce889a82ba70228e45a8bf" }, "scheme": "ed25519" }, "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e104199cda6e018d7d9044fa6225aa5dc9c2af5ee4e1c0fe6d16ad002220390d" }, "scheme": "ed25519" }, "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "9b1db36a5cad80284b5f40b040621e0e444f25ee09efa5c1fd6da4499c711bd5" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" }, "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "fa386632ae9cc358ad0b56565edef362ad10d7fadb05bc8dc8995627372b990e" }, "scheme": "ed25519" }, "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "683d345a948a9baa343be4e44c076ca115da3838e72c28a06340c8ec1b3ef6be" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb", "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8" ], "threshold": 4 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 2 } }root.json000066400000000000000000000126131453140004500351220ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_root/server/metadata.staged{ "signatures": [ { "keyid": "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "sig": "1796c3a9956f553c32ff9c7db8734af9d960989f89f185ef0edc36a87591d2e815ef84a7903bd553ec7ed156170e0c701739bdb9c8fd61316b36dd870525b30a" }, { "keyid": "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb", "sig": "1aae88766ce5015d6ec2e75345a8ed5ac7b7e7a3c234e7f2215c37e577bb512743f612f6d7ead301970f1a01dbd15a7a4467147823a1e226ce5643817fafb900" }, { "keyid": "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "sig": "7f7bec7da5b5b88bd33ac8c94dbee5700c6fdae5454a98a21516edea8a8d5714c16d49957b3eebbb4b88aa3f3e2e17590f2b056894cb1093c7399a403ad33007" }, { "keyid": "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "sig": "398ab57bf00e675ccf5c6a34c88013f86488cece97646db6e00aac40ca3e2f68c8ee6e2d73a14ee9484cb6405f1f653ff896ff95b062221c0c36df2a71b5e50f" }, { "keyid": "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8", "sig": "8ea937bb5a9451161b32605676731ded282d3878e8058d585759b43ee1700a77a33d1b21614486e0240fc1d0af39723cc85ea403479d6efb62c05cc6fdd16a08" }, { "keyid": "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b", "sig": "bf47e74acfdc137847a1c96d7ef42e3049a347cf96c6b873e5047dd2e50050e13a0dba4907138ba3c29e1c768ddfc6332647fb9658fede4229192e1bc5b6d409" }, { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "9c17a9c043a6dc378334f162999767acc012f6cb33e041f3c9b14963cacb1a32b6cba552931eb9ddd8bd78bf0a872498a8829c4c6c261a2978b083a8639c110f" }, { "keyid": "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "sig": "c5698a3a2195c4399b4e04fc9db778a7c02acf82c691517fad43a387083fa4dfe9331c1429c10d22ca14088516518939b104994c68dfc16d21b1ada46ef7b700" }, { "keyid": "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "sig": "78f401be103e238daf3c931c2eeb6e7a0eb118042bcbabce533a4d0057e9a19b7df5357fd8f837f36d58a69b1a2719ab2e326e4656e92e8435dd14ba2b01640f" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:20:18Z", "keys": { "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f6b299bcfb4e15ef652c80e9e3dda995acbb4bf71dce889a82ba70228e45a8bf" }, "scheme": "ed25519" }, "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e104199cda6e018d7d9044fa6225aa5dc9c2af5ee4e1c0fe6d16ad002220390d" }, "scheme": "ed25519" }, "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "9b1db36a5cad80284b5f40b040621e0e444f25ee09efa5c1fd6da4499c711bd5" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" }, "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "fa386632ae9cc358ad0b56565edef362ad10d7fadb05bc8dc8995627372b990e" }, "scheme": "ed25519" }, "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "683d345a948a9baa343be4e44c076ca115da3838e72c28a06340c8ec1b3ef6be" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb", "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8" ], "threshold": 4 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 2 } }snapshot.json000066400000000000000000000006571453140004500360030ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_root/server/metadata.staged{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "7945d5bbebfd0f077a6f8bcac4eed402709f07307663b935835712ff4fb4eebbc51146039d0a1ecb3bc7726c526f12e0b063cc3d9dae1c422179db99d4409b0c" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:20:18Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }targets.json000066400000000000000000000006711453140004500356110ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_root/server/metadata.staged{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "1c07f726a8988b2bbb150cd91c36fa2e0716eb904a89002e24f2382641d5f7680e04cbedbecf89034c8b6416b7a31d5c4bdcc20f0aa2cd976353828cda0e3e0e" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:20:18Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }timestamp.json000066400000000000000000000013001453140004500361310ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_root/server/metadata.staged{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "18e08cd54878e2af5838ed4445230e687ce0007c1b886b3c1446ee639365b0053e294c930b176fdb1258af9f957e4c4927beaccbbffb354cc27b9d5745257808" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:20:18Z", "meta": { "snapshot.json": { "hashes": { "sha256": "765e1bc98ad6235b9a6e1c200e8576c262ed924ba81a9960268a65b7fc1bba91", "sha512": "b245cd1eb39623b7d6d9d07765bae5e7a373471c4bfc66862042e50f0ced2fbe564dfd23565ce7746e926492d6543c700b22ce48bbe19f5e4128698d243cea49" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_root/server/metadata/000077500000000000000000000000001453140004500320525ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_root/server/metadata/1.root.json000066400000000000000000000155431453140004500340770ustar00rootroot00000000000000{ "signatures": [ { "keyid": "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "sig": "876195f83e8dbb1b00f70188fc7f405d05d321da97a9b98781f331d2dea6be1415d0a0b4e23697f2e30235e98c3503a2ec3aade3bd4c1bac8109f368d9ed5005" }, { "keyid": "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb", "sig": "ff3e54a7492085d33ebf25158ce673fdd7d871a49cdccbe31b35c9ba1c28b91fd22b161b8a226248b3ef3e81378cdaa1ef3e37c2100363ec1be6d87d19a2aa0c" }, { "keyid": "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "sig": "59da18183f6729135b74539865f55e5c6e3d837209b724922cd56dd79f46c7150016930f477707c78ee9e39ee0f1a8e18304ab4cdaf1c11f81f147cbf5c57904" }, { "keyid": "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "sig": "c0b98cba687cdab0628872207026501c9b3c289af113c0be83176a908e58a647b2be9716b37ae4acc78327bbcd715d97d200953681646f3bc918e6c0f409dc0d" }, { "keyid": "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8", "sig": "7fa4506b7e9c6aac34b6c9b5e1099e8fa995fb1af7804cb9245b0132edf41739b7049277de11577c1ff72c1cf8fe41ba3ec32bf802cf16cb19e42765f53d3f0e" }, { "keyid": "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b", "sig": "8c5af6fd1930026a1a9d9816e18205dc4e6bbf0e4b9dd7385d9cc10ca6bf3609cce7c62d5ea5432e0a67e3c395531cf1c67f874f0ba1acb27bf161423b34500c" }, { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "ef03e8b766ffe280b1486460ee1b8cd92e6605d4d4af32696a0345b940767f7e3ae66f217b97eae12aa704fa5ee03073079046efe4c76c14989c4784d2d1fa0d" }, { "keyid": "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "sig": "0a536f66722b82fa8da8ef6837cdae1d719abe72dd27fe36a4fcb2d21302989bb897275825bfef3a5f93fd487f947c75c703da69ad67988c1be46a975a8a6602" }, { "keyid": "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "sig": "caf6083cc4ab3fc5a39cc243d08faf0724435b9189b4a3349cb8955b321d9c644697c9d96698e09a5c47f5d032a562c97b08a3e840dbb60f4224afeb438a3a0b" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:20:18Z", "keys": { "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f758af464295e62a1da4d3267be6d13f4aba9c7d52166d01b6bd5b4559496c9d" }, "scheme": "ed25519" }, "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f6b299bcfb4e15ef652c80e9e3dda995acbb4bf71dce889a82ba70228e45a8bf" }, "scheme": "ed25519" }, "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e104199cda6e018d7d9044fa6225aa5dc9c2af5ee4e1c0fe6d16ad002220390d" }, "scheme": "ed25519" }, "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "82f52e4503dbb364fabe8e5567f1cf909d4175d45468a021dfe75653db9ac98c" }, "scheme": "ed25519" }, "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "9b1db36a5cad80284b5f40b040621e0e444f25ee09efa5c1fd6da4499c711bd5" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "06e4dee0de7826c8d539a6112940b7459892b4ecaf696e67dc064aea0923f95c" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" }, "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "fa386632ae9cc358ad0b56565edef362ad10d7fadb05bc8dc8995627372b990e" }, "scheme": "ed25519" }, "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "683d345a948a9baa343be4e44c076ca115da3838e72c28a06340c8ec1b3ef6be" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b", "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb", "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8" ], "threshold": 4 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 1 } }1.snapshot.json000066400000000000000000000006571453140004500346740ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_root/server/metadata{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "7945d5bbebfd0f077a6f8bcac4eed402709f07307663b935835712ff4fb4eebbc51146039d0a1ecb3bc7726c526f12e0b063cc3d9dae1c422179db99d4409b0c" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:20:18Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }1.targets.json000066400000000000000000000006711453140004500345020ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_root/server/metadata{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "1c07f726a8988b2bbb150cd91c36fa2e0716eb904a89002e24f2382641d5f7680e04cbedbecf89034c8b6416b7a31d5c4bdcc20f0aa2cd976353828cda0e3e0e" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:20:18Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }1.timestamp.json000066400000000000000000000013001453140004500350220ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_root/server/metadata{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "18e08cd54878e2af5838ed4445230e687ce0007c1b886b3c1446ee639365b0053e294c930b176fdb1258af9f957e4c4927beaccbbffb354cc27b9d5745257808" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:20:18Z", "meta": { "snapshot.json": { "hashes": { "sha256": "765e1bc98ad6235b9a6e1c200e8576c262ed924ba81a9960268a65b7fc1bba91", "sha512": "b245cd1eb39623b7d6d9d07765bae5e7a373471c4bfc66862042e50f0ced2fbe564dfd23565ce7746e926492d6543c700b22ce48bbe19f5e4128698d243cea49" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_root/server/metadata/2.root.json000066400000000000000000000126131453140004500340730ustar00rootroot00000000000000{ "signatures": [ { "keyid": "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "sig": "1796c3a9956f553c32ff9c7db8734af9d960989f89f185ef0edc36a87591d2e815ef84a7903bd553ec7ed156170e0c701739bdb9c8fd61316b36dd870525b30a" }, { "keyid": "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb", "sig": "1aae88766ce5015d6ec2e75345a8ed5ac7b7e7a3c234e7f2215c37e577bb512743f612f6d7ead301970f1a01dbd15a7a4467147823a1e226ce5643817fafb900" }, { "keyid": "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "sig": "7f7bec7da5b5b88bd33ac8c94dbee5700c6fdae5454a98a21516edea8a8d5714c16d49957b3eebbb4b88aa3f3e2e17590f2b056894cb1093c7399a403ad33007" }, { "keyid": "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "sig": "398ab57bf00e675ccf5c6a34c88013f86488cece97646db6e00aac40ca3e2f68c8ee6e2d73a14ee9484cb6405f1f653ff896ff95b062221c0c36df2a71b5e50f" }, { "keyid": "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8", "sig": "8ea937bb5a9451161b32605676731ded282d3878e8058d585759b43ee1700a77a33d1b21614486e0240fc1d0af39723cc85ea403479d6efb62c05cc6fdd16a08" }, { "keyid": "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b", "sig": "bf47e74acfdc137847a1c96d7ef42e3049a347cf96c6b873e5047dd2e50050e13a0dba4907138ba3c29e1c768ddfc6332647fb9658fede4229192e1bc5b6d409" }, { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "9c17a9c043a6dc378334f162999767acc012f6cb33e041f3c9b14963cacb1a32b6cba552931eb9ddd8bd78bf0a872498a8829c4c6c261a2978b083a8639c110f" }, { "keyid": "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "sig": "c5698a3a2195c4399b4e04fc9db778a7c02acf82c691517fad43a387083fa4dfe9331c1429c10d22ca14088516518939b104994c68dfc16d21b1ada46ef7b700" }, { "keyid": "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "sig": "78f401be103e238daf3c931c2eeb6e7a0eb118042bcbabce533a4d0057e9a19b7df5357fd8f837f36d58a69b1a2719ab2e326e4656e92e8435dd14ba2b01640f" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:20:18Z", "keys": { "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f6b299bcfb4e15ef652c80e9e3dda995acbb4bf71dce889a82ba70228e45a8bf" }, "scheme": "ed25519" }, "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e104199cda6e018d7d9044fa6225aa5dc9c2af5ee4e1c0fe6d16ad002220390d" }, "scheme": "ed25519" }, "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "9b1db36a5cad80284b5f40b040621e0e444f25ee09efa5c1fd6da4499c711bd5" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" }, "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "fa386632ae9cc358ad0b56565edef362ad10d7fadb05bc8dc8995627372b990e" }, "scheme": "ed25519" }, "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "683d345a948a9baa343be4e44c076ca115da3838e72c28a06340c8ec1b3ef6be" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb", "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8" ], "threshold": 4 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 2 } }client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_root/server/metadata/root.json000066400000000000000000000126131453140004500337330ustar00rootroot00000000000000{ "signatures": [ { "keyid": "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "sig": "1796c3a9956f553c32ff9c7db8734af9d960989f89f185ef0edc36a87591d2e815ef84a7903bd553ec7ed156170e0c701739bdb9c8fd61316b36dd870525b30a" }, { "keyid": "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb", "sig": "1aae88766ce5015d6ec2e75345a8ed5ac7b7e7a3c234e7f2215c37e577bb512743f612f6d7ead301970f1a01dbd15a7a4467147823a1e226ce5643817fafb900" }, { "keyid": "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "sig": "7f7bec7da5b5b88bd33ac8c94dbee5700c6fdae5454a98a21516edea8a8d5714c16d49957b3eebbb4b88aa3f3e2e17590f2b056894cb1093c7399a403ad33007" }, { "keyid": "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "sig": "398ab57bf00e675ccf5c6a34c88013f86488cece97646db6e00aac40ca3e2f68c8ee6e2d73a14ee9484cb6405f1f653ff896ff95b062221c0c36df2a71b5e50f" }, { "keyid": "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8", "sig": "8ea937bb5a9451161b32605676731ded282d3878e8058d585759b43ee1700a77a33d1b21614486e0240fc1d0af39723cc85ea403479d6efb62c05cc6fdd16a08" }, { "keyid": "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b", "sig": "bf47e74acfdc137847a1c96d7ef42e3049a347cf96c6b873e5047dd2e50050e13a0dba4907138ba3c29e1c768ddfc6332647fb9658fede4229192e1bc5b6d409" }, { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "9c17a9c043a6dc378334f162999767acc012f6cb33e041f3c9b14963cacb1a32b6cba552931eb9ddd8bd78bf0a872498a8829c4c6c261a2978b083a8639c110f" }, { "keyid": "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "sig": "c5698a3a2195c4399b4e04fc9db778a7c02acf82c691517fad43a387083fa4dfe9331c1429c10d22ca14088516518939b104994c68dfc16d21b1ada46ef7b700" }, { "keyid": "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "sig": "78f401be103e238daf3c931c2eeb6e7a0eb118042bcbabce533a4d0057e9a19b7df5357fd8f837f36d58a69b1a2719ab2e326e4656e92e8435dd14ba2b01640f" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:20:18Z", "keys": { "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f6b299bcfb4e15ef652c80e9e3dda995acbb4bf71dce889a82ba70228e45a8bf" }, "scheme": "ed25519" }, "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e104199cda6e018d7d9044fa6225aa5dc9c2af5ee4e1c0fe6d16ad002220390d" }, "scheme": "ed25519" }, "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "9b1db36a5cad80284b5f40b040621e0e444f25ee09efa5c1fd6da4499c711bd5" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" }, "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "fa386632ae9cc358ad0b56565edef362ad10d7fadb05bc8dc8995627372b990e" }, "scheme": "ed25519" }, "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "683d345a948a9baa343be4e44c076ca115da3838e72c28a06340c8ec1b3ef6be" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb", "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8" ], "threshold": 4 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 2 } }client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_root/server/metadata/snapshot.json000066400000000000000000000006571453140004500346140ustar00rootroot00000000000000{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "7945d5bbebfd0f077a6f8bcac4eed402709f07307663b935835712ff4fb4eebbc51146039d0a1ecb3bc7726c526f12e0b063cc3d9dae1c422179db99d4409b0c" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:20:18Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_root/server/metadata/targets.json000066400000000000000000000006711453140004500344220ustar00rootroot00000000000000{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "1c07f726a8988b2bbb150cd91c36fa2e0716eb904a89002e24f2382641d5f7680e04cbedbecf89034c8b6416b7a31d5c4bdcc20f0aa2cd976353828cda0e3e0e" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:20:18Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }timestamp.json000066400000000000000000000013001453140004500346630ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_root/server/metadata{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "18e08cd54878e2af5838ed4445230e687ce0007c1b886b3c1446ee639365b0053e294c930b176fdb1258af9f957e4c4927beaccbbffb354cc27b9d5745257808" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:20:18Z", "meta": { "snapshot.json": { "hashes": { "sha256": "765e1bc98ad6235b9a6e1c200e8576c262ed924ba81a9960268a65b7fc1bba91", "sha512": "b245cd1eb39623b7d6d9d07765bae5e7a373471c4bfc66862042e50f0ced2fbe564dfd23565ce7746e926492d6543c700b22ce48bbe19f5e4128698d243cea49" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_snapshot/000077500000000000000000000000001453140004500276405ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_snapshot/client/000077500000000000000000000000001453140004500311165ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_snapshot/client/metadata/000077500000000000000000000000001453140004500326765ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_snapshot/client/metadata/current/000077500000000000000000000000001453140004500343605ustar00rootroot000000000000001.root.json000066400000000000000000000120631453140004500363200ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_snapshot/client/metadata/current{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "6fcc711c61ce5cebe08cc4f3ed4ccfbee0d33a223cea1258d8a10af6be18627129d2ab2b063283eadcd36e67dd8713af00390aa44733ce9889e2aee2e2e1c600" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:20:19Z", "keys": { "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f758af464295e62a1da4d3267be6d13f4aba9c7d52166d01b6bd5b4559496c9d" }, "scheme": "ed25519" }, "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f6b299bcfb4e15ef652c80e9e3dda995acbb4bf71dce889a82ba70228e45a8bf" }, "scheme": "ed25519" }, "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e104199cda6e018d7d9044fa6225aa5dc9c2af5ee4e1c0fe6d16ad002220390d" }, "scheme": "ed25519" }, "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "82f52e4503dbb364fabe8e5567f1cf909d4175d45468a021dfe75653db9ac98c" }, "scheme": "ed25519" }, "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "9b1db36a5cad80284b5f40b040621e0e444f25ee09efa5c1fd6da4499c711bd5" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "06e4dee0de7826c8d539a6112940b7459892b4ecaf696e67dc064aea0923f95c" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" }, "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "fa386632ae9cc358ad0b56565edef362ad10d7fadb05bc8dc8995627372b990e" }, "scheme": "ed25519" }, "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "683d345a948a9baa343be4e44c076ca115da3838e72c28a06340c8ec1b3ef6be" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b", "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb", "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8" ], "threshold": 4 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 1 } }1.snapshot.json000066400000000000000000000043371453140004500372010ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_snapshot/client/metadata/current{ "signatures": [ { "keyid": "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "sig": "9b7a3b750e08dfc308b46c3671df8385f782507498c03d2f9f7ecd08045e1112ae034e176f5afea79008aa6bc6dd514fc86aaeec598521d2b5e3247d28e56f0b" }, { "keyid": "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb", "sig": "65b00baea2495c7c2093e65b249597160020ec400ec993979ac07acfc99aab4ea8a2a5ed30bde8ac6c9e7d762d2a6f508ba2aefe47b3615d7eb3d3807d6ebe08" }, { "keyid": "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "sig": "02926e5f258062cad02f5246701737146bd84ce82a3641d172e0534204604be437aea4842a55964a368416679255308c0db6f7980c885d9afaeae92fc779a40d" }, { "keyid": "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "sig": "9efc64982359e93211f05350e1399c1953579807ace961423cdc5c2406df96180b56f94ddac14511bc8430625f230235f51a98e9c546c262f9b444e08c31c50d" }, { "keyid": "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8", "sig": "3105c9e05fb0a536586a9f241c40ffd0696bb11be43bc50ad18fb63799764139a839bee36c58e509d725b4350658c3d3c2a3e60050de66eda65a87be36b6cc03" }, { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "7b4fd39d2babaead15732edf5cadd72b77e3e3cc8b46a5462fe9eadf4ef79cffe15d7b95d56b94d2e4776a2892c5c9ca7895ec6fabaaa563071be633375b3c03" }, { "keyid": "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b", "sig": "24b9b1f3730d6cc8293d83ebae86e3ea3a9bbb4d0a8907b2c71001cc1b0d257814f037f5aa06f8425e871c66f7c377ab197bfceb4402144924dbbe0422103607" }, { "keyid": "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "sig": "5bc6f5738109fe3be3e02c8558a241d61d7494fd76a0274774485ff6b010f41f718b184a3a743a2ceb16324e5bcd57daa6fb87cf32c85bf6c01d8a3098238308" }, { "keyid": "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "sig": "3e3a376641fce12b3df639293cf52c29fbf6a04398ab6e69d2bf12cfae264ace4c984816440536e870cc50816fb2b94e9b9824ce873c7237561afa9bbb649304" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:20:19Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }1.targets.json000066400000000000000000000006711453140004500370100ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_snapshot/client/metadata/current{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "51fff9a858517278b811fc9b8dc4fee5e10c5f444a87bc259cb0241ea54f1da693cf844412693d6ea24bed5302a508d08879e0a32a961f1132a646ef9f370a07" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:20:19Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }1.timestamp.json000066400000000000000000000013011453140004500373310ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_snapshot/client/metadata/current{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "de078d3c5438334ab51ed4e433cab94b53f883dad9519505ebe64088f13077f725d96b54c10afbf7909c95ddfd829d0bcca82e09612b91d63dbc9a34e830270c" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:20:19Z", "meta": { "snapshot.json": { "hashes": { "sha256": "16459413316a5b9a617e84c06840164beaa4d7ef0b67c0c720acefc89cb15be3", "sha512": "c118a299f2be396ef21097a0803166b1d796256a3c68e3590e1addd656e804dd28d32e67664e460066af4b956f50fcd1abd8b614e2535fb7e175d8e2819d1d87" }, "length": 2271, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }root.json000066400000000000000000000120631453140004500361610ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_snapshot/client/metadata/current{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "6fcc711c61ce5cebe08cc4f3ed4ccfbee0d33a223cea1258d8a10af6be18627129d2ab2b063283eadcd36e67dd8713af00390aa44733ce9889e2aee2e2e1c600" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:20:19Z", "keys": { "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f758af464295e62a1da4d3267be6d13f4aba9c7d52166d01b6bd5b4559496c9d" }, "scheme": "ed25519" }, "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f6b299bcfb4e15ef652c80e9e3dda995acbb4bf71dce889a82ba70228e45a8bf" }, "scheme": "ed25519" }, "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e104199cda6e018d7d9044fa6225aa5dc9c2af5ee4e1c0fe6d16ad002220390d" }, "scheme": "ed25519" }, "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "82f52e4503dbb364fabe8e5567f1cf909d4175d45468a021dfe75653db9ac98c" }, "scheme": "ed25519" }, "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "9b1db36a5cad80284b5f40b040621e0e444f25ee09efa5c1fd6da4499c711bd5" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "06e4dee0de7826c8d539a6112940b7459892b4ecaf696e67dc064aea0923f95c" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" }, "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "fa386632ae9cc358ad0b56565edef362ad10d7fadb05bc8dc8995627372b990e" }, "scheme": "ed25519" }, "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "683d345a948a9baa343be4e44c076ca115da3838e72c28a06340c8ec1b3ef6be" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b", "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb", "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8" ], "threshold": 4 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 1 } }snapshot.json000066400000000000000000000043371453140004500370420ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_snapshot/client/metadata/current{ "signatures": [ { "keyid": "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "sig": "9b7a3b750e08dfc308b46c3671df8385f782507498c03d2f9f7ecd08045e1112ae034e176f5afea79008aa6bc6dd514fc86aaeec598521d2b5e3247d28e56f0b" }, { "keyid": "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb", "sig": "65b00baea2495c7c2093e65b249597160020ec400ec993979ac07acfc99aab4ea8a2a5ed30bde8ac6c9e7d762d2a6f508ba2aefe47b3615d7eb3d3807d6ebe08" }, { "keyid": "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "sig": "02926e5f258062cad02f5246701737146bd84ce82a3641d172e0534204604be437aea4842a55964a368416679255308c0db6f7980c885d9afaeae92fc779a40d" }, { "keyid": "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "sig": "9efc64982359e93211f05350e1399c1953579807ace961423cdc5c2406df96180b56f94ddac14511bc8430625f230235f51a98e9c546c262f9b444e08c31c50d" }, { "keyid": "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8", "sig": "3105c9e05fb0a536586a9f241c40ffd0696bb11be43bc50ad18fb63799764139a839bee36c58e509d725b4350658c3d3c2a3e60050de66eda65a87be36b6cc03" }, { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "7b4fd39d2babaead15732edf5cadd72b77e3e3cc8b46a5462fe9eadf4ef79cffe15d7b95d56b94d2e4776a2892c5c9ca7895ec6fabaaa563071be633375b3c03" }, { "keyid": "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b", "sig": "24b9b1f3730d6cc8293d83ebae86e3ea3a9bbb4d0a8907b2c71001cc1b0d257814f037f5aa06f8425e871c66f7c377ab197bfceb4402144924dbbe0422103607" }, { "keyid": "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "sig": "5bc6f5738109fe3be3e02c8558a241d61d7494fd76a0274774485ff6b010f41f718b184a3a743a2ceb16324e5bcd57daa6fb87cf32c85bf6c01d8a3098238308" }, { "keyid": "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "sig": "3e3a376641fce12b3df639293cf52c29fbf6a04398ab6e69d2bf12cfae264ace4c984816440536e870cc50816fb2b94e9b9824ce873c7237561afa9bbb649304" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:20:19Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }targets.json000066400000000000000000000006711453140004500366510ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_snapshot/client/metadata/current{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "51fff9a858517278b811fc9b8dc4fee5e10c5f444a87bc259cb0241ea54f1da693cf844412693d6ea24bed5302a508d08879e0a32a961f1132a646ef9f370a07" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:20:19Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }timestamp.json000066400000000000000000000013011453140004500371720ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_snapshot/client/metadata/current{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "de078d3c5438334ab51ed4e433cab94b53f883dad9519505ebe64088f13077f725d96b54c10afbf7909c95ddfd829d0bcca82e09612b91d63dbc9a34e830270c" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:20:19Z", "meta": { "snapshot.json": { "hashes": { "sha256": "16459413316a5b9a617e84c06840164beaa4d7ef0b67c0c720acefc89cb15be3", "sha512": "c118a299f2be396ef21097a0803166b1d796256a3c68e3590e1addd656e804dd28d32e67664e460066af4b956f50fcd1abd8b614e2535fb7e175d8e2819d1d87" }, "length": 2271, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_snapshot/client/metadata/previous/000077500000000000000000000000001453140004500345525ustar00rootroot000000000000001.root.json000066400000000000000000000120631453140004500365120ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_snapshot/client/metadata/previous{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "6fcc711c61ce5cebe08cc4f3ed4ccfbee0d33a223cea1258d8a10af6be18627129d2ab2b063283eadcd36e67dd8713af00390aa44733ce9889e2aee2e2e1c600" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:20:19Z", "keys": { "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f758af464295e62a1da4d3267be6d13f4aba9c7d52166d01b6bd5b4559496c9d" }, "scheme": "ed25519" }, "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f6b299bcfb4e15ef652c80e9e3dda995acbb4bf71dce889a82ba70228e45a8bf" }, "scheme": "ed25519" }, "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e104199cda6e018d7d9044fa6225aa5dc9c2af5ee4e1c0fe6d16ad002220390d" }, "scheme": "ed25519" }, "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "82f52e4503dbb364fabe8e5567f1cf909d4175d45468a021dfe75653db9ac98c" }, "scheme": "ed25519" }, "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "9b1db36a5cad80284b5f40b040621e0e444f25ee09efa5c1fd6da4499c711bd5" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "06e4dee0de7826c8d539a6112940b7459892b4ecaf696e67dc064aea0923f95c" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" }, "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "fa386632ae9cc358ad0b56565edef362ad10d7fadb05bc8dc8995627372b990e" }, "scheme": "ed25519" }, "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "683d345a948a9baa343be4e44c076ca115da3838e72c28a06340c8ec1b3ef6be" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b", "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb", "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8" ], "threshold": 4 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 1 } }1.snapshot.json000066400000000000000000000043371453140004500373730ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_snapshot/client/metadata/previous{ "signatures": [ { "keyid": "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "sig": "9b7a3b750e08dfc308b46c3671df8385f782507498c03d2f9f7ecd08045e1112ae034e176f5afea79008aa6bc6dd514fc86aaeec598521d2b5e3247d28e56f0b" }, { "keyid": "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb", "sig": "65b00baea2495c7c2093e65b249597160020ec400ec993979ac07acfc99aab4ea8a2a5ed30bde8ac6c9e7d762d2a6f508ba2aefe47b3615d7eb3d3807d6ebe08" }, { "keyid": "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "sig": "02926e5f258062cad02f5246701737146bd84ce82a3641d172e0534204604be437aea4842a55964a368416679255308c0db6f7980c885d9afaeae92fc779a40d" }, { "keyid": "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "sig": "9efc64982359e93211f05350e1399c1953579807ace961423cdc5c2406df96180b56f94ddac14511bc8430625f230235f51a98e9c546c262f9b444e08c31c50d" }, { "keyid": "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8", "sig": "3105c9e05fb0a536586a9f241c40ffd0696bb11be43bc50ad18fb63799764139a839bee36c58e509d725b4350658c3d3c2a3e60050de66eda65a87be36b6cc03" }, { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "7b4fd39d2babaead15732edf5cadd72b77e3e3cc8b46a5462fe9eadf4ef79cffe15d7b95d56b94d2e4776a2892c5c9ca7895ec6fabaaa563071be633375b3c03" }, { "keyid": "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b", "sig": "24b9b1f3730d6cc8293d83ebae86e3ea3a9bbb4d0a8907b2c71001cc1b0d257814f037f5aa06f8425e871c66f7c377ab197bfceb4402144924dbbe0422103607" }, { "keyid": "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "sig": "5bc6f5738109fe3be3e02c8558a241d61d7494fd76a0274774485ff6b010f41f718b184a3a743a2ceb16324e5bcd57daa6fb87cf32c85bf6c01d8a3098238308" }, { "keyid": "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "sig": "3e3a376641fce12b3df639293cf52c29fbf6a04398ab6e69d2bf12cfae264ace4c984816440536e870cc50816fb2b94e9b9824ce873c7237561afa9bbb649304" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:20:19Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }1.targets.json000066400000000000000000000006711453140004500372020ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_snapshot/client/metadata/previous{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "51fff9a858517278b811fc9b8dc4fee5e10c5f444a87bc259cb0241ea54f1da693cf844412693d6ea24bed5302a508d08879e0a32a961f1132a646ef9f370a07" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:20:19Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }1.timestamp.json000066400000000000000000000013011453140004500375230ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_snapshot/client/metadata/previous{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "de078d3c5438334ab51ed4e433cab94b53f883dad9519505ebe64088f13077f725d96b54c10afbf7909c95ddfd829d0bcca82e09612b91d63dbc9a34e830270c" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:20:19Z", "meta": { "snapshot.json": { "hashes": { "sha256": "16459413316a5b9a617e84c06840164beaa4d7ef0b67c0c720acefc89cb15be3", "sha512": "c118a299f2be396ef21097a0803166b1d796256a3c68e3590e1addd656e804dd28d32e67664e460066af4b956f50fcd1abd8b614e2535fb7e175d8e2819d1d87" }, "length": 2271, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }root.json000066400000000000000000000120631453140004500363530ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_snapshot/client/metadata/previous{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "6fcc711c61ce5cebe08cc4f3ed4ccfbee0d33a223cea1258d8a10af6be18627129d2ab2b063283eadcd36e67dd8713af00390aa44733ce9889e2aee2e2e1c600" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:20:19Z", "keys": { "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f758af464295e62a1da4d3267be6d13f4aba9c7d52166d01b6bd5b4559496c9d" }, "scheme": "ed25519" }, "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f6b299bcfb4e15ef652c80e9e3dda995acbb4bf71dce889a82ba70228e45a8bf" }, "scheme": "ed25519" }, "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e104199cda6e018d7d9044fa6225aa5dc9c2af5ee4e1c0fe6d16ad002220390d" }, "scheme": "ed25519" }, "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "82f52e4503dbb364fabe8e5567f1cf909d4175d45468a021dfe75653db9ac98c" }, "scheme": "ed25519" }, "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "9b1db36a5cad80284b5f40b040621e0e444f25ee09efa5c1fd6da4499c711bd5" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "06e4dee0de7826c8d539a6112940b7459892b4ecaf696e67dc064aea0923f95c" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" }, "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "fa386632ae9cc358ad0b56565edef362ad10d7fadb05bc8dc8995627372b990e" }, "scheme": "ed25519" }, "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "683d345a948a9baa343be4e44c076ca115da3838e72c28a06340c8ec1b3ef6be" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b", "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb", "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8" ], "threshold": 4 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 1 } }snapshot.json000066400000000000000000000043371453140004500372340ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_snapshot/client/metadata/previous{ "signatures": [ { "keyid": "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "sig": "9b7a3b750e08dfc308b46c3671df8385f782507498c03d2f9f7ecd08045e1112ae034e176f5afea79008aa6bc6dd514fc86aaeec598521d2b5e3247d28e56f0b" }, { "keyid": "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb", "sig": "65b00baea2495c7c2093e65b249597160020ec400ec993979ac07acfc99aab4ea8a2a5ed30bde8ac6c9e7d762d2a6f508ba2aefe47b3615d7eb3d3807d6ebe08" }, { "keyid": "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "sig": "02926e5f258062cad02f5246701737146bd84ce82a3641d172e0534204604be437aea4842a55964a368416679255308c0db6f7980c885d9afaeae92fc779a40d" }, { "keyid": "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "sig": "9efc64982359e93211f05350e1399c1953579807ace961423cdc5c2406df96180b56f94ddac14511bc8430625f230235f51a98e9c546c262f9b444e08c31c50d" }, { "keyid": "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8", "sig": "3105c9e05fb0a536586a9f241c40ffd0696bb11be43bc50ad18fb63799764139a839bee36c58e509d725b4350658c3d3c2a3e60050de66eda65a87be36b6cc03" }, { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "7b4fd39d2babaead15732edf5cadd72b77e3e3cc8b46a5462fe9eadf4ef79cffe15d7b95d56b94d2e4776a2892c5c9ca7895ec6fabaaa563071be633375b3c03" }, { "keyid": "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b", "sig": "24b9b1f3730d6cc8293d83ebae86e3ea3a9bbb4d0a8907b2c71001cc1b0d257814f037f5aa06f8425e871c66f7c377ab197bfceb4402144924dbbe0422103607" }, { "keyid": "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "sig": "5bc6f5738109fe3be3e02c8558a241d61d7494fd76a0274774485ff6b010f41f718b184a3a743a2ceb16324e5bcd57daa6fb87cf32c85bf6c01d8a3098238308" }, { "keyid": "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "sig": "3e3a376641fce12b3df639293cf52c29fbf6a04398ab6e69d2bf12cfae264ace4c984816440536e870cc50816fb2b94e9b9824ce873c7237561afa9bbb649304" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:20:19Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }targets.json000066400000000000000000000006711453140004500370430ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_snapshot/client/metadata/previous{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "51fff9a858517278b811fc9b8dc4fee5e10c5f444a87bc259cb0241ea54f1da693cf844412693d6ea24bed5302a508d08879e0a32a961f1132a646ef9f370a07" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:20:19Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }timestamp.json000066400000000000000000000013011453140004500373640ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_snapshot/client/metadata/previous{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "de078d3c5438334ab51ed4e433cab94b53f883dad9519505ebe64088f13077f725d96b54c10afbf7909c95ddfd829d0bcca82e09612b91d63dbc9a34e830270c" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:20:19Z", "meta": { "snapshot.json": { "hashes": { "sha256": "16459413316a5b9a617e84c06840164beaa4d7ef0b67c0c720acefc89cb15be3", "sha512": "c118a299f2be396ef21097a0803166b1d796256a3c68e3590e1addd656e804dd28d32e67664e460066af4b956f50fcd1abd8b614e2535fb7e175d8e2819d1d87" }, "length": 2271, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_snapshot/hash.txt000066400000000000000000000001001453140004500313130ustar00rootroot00000000000000af9b3cfe7cc8b819338f9cf29b6d297df3c3b5969d7fd08fd5f0d945932051e6client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_snapshot/server/000077500000000000000000000000001453140004500311465ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_snapshot/server/metadata.staged/000077500000000000000000000000001453140004500341745ustar00rootroot000000000000001.root.json000066400000000000000000000120631453140004500361340ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_snapshot/server/metadata.staged{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "6fcc711c61ce5cebe08cc4f3ed4ccfbee0d33a223cea1258d8a10af6be18627129d2ab2b063283eadcd36e67dd8713af00390aa44733ce9889e2aee2e2e1c600" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:20:19Z", "keys": { "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f758af464295e62a1da4d3267be6d13f4aba9c7d52166d01b6bd5b4559496c9d" }, "scheme": "ed25519" }, "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f6b299bcfb4e15ef652c80e9e3dda995acbb4bf71dce889a82ba70228e45a8bf" }, "scheme": "ed25519" }, "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e104199cda6e018d7d9044fa6225aa5dc9c2af5ee4e1c0fe6d16ad002220390d" }, "scheme": "ed25519" }, "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "82f52e4503dbb364fabe8e5567f1cf909d4175d45468a021dfe75653db9ac98c" }, "scheme": "ed25519" }, "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "9b1db36a5cad80284b5f40b040621e0e444f25ee09efa5c1fd6da4499c711bd5" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "06e4dee0de7826c8d539a6112940b7459892b4ecaf696e67dc064aea0923f95c" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" }, "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "fa386632ae9cc358ad0b56565edef362ad10d7fadb05bc8dc8995627372b990e" }, "scheme": "ed25519" }, "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "683d345a948a9baa343be4e44c076ca115da3838e72c28a06340c8ec1b3ef6be" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b", "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb", "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8" ], "threshold": 4 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 1 } }1.snapshot.json000066400000000000000000000043371453140004500370150ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_snapshot/server/metadata.staged{ "signatures": [ { "keyid": "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "sig": "9b7a3b750e08dfc308b46c3671df8385f782507498c03d2f9f7ecd08045e1112ae034e176f5afea79008aa6bc6dd514fc86aaeec598521d2b5e3247d28e56f0b" }, { "keyid": "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb", "sig": "65b00baea2495c7c2093e65b249597160020ec400ec993979ac07acfc99aab4ea8a2a5ed30bde8ac6c9e7d762d2a6f508ba2aefe47b3615d7eb3d3807d6ebe08" }, { "keyid": "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "sig": "02926e5f258062cad02f5246701737146bd84ce82a3641d172e0534204604be437aea4842a55964a368416679255308c0db6f7980c885d9afaeae92fc779a40d" }, { "keyid": "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "sig": "9efc64982359e93211f05350e1399c1953579807ace961423cdc5c2406df96180b56f94ddac14511bc8430625f230235f51a98e9c546c262f9b444e08c31c50d" }, { "keyid": "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8", "sig": "3105c9e05fb0a536586a9f241c40ffd0696bb11be43bc50ad18fb63799764139a839bee36c58e509d725b4350658c3d3c2a3e60050de66eda65a87be36b6cc03" }, { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "7b4fd39d2babaead15732edf5cadd72b77e3e3cc8b46a5462fe9eadf4ef79cffe15d7b95d56b94d2e4776a2892c5c9ca7895ec6fabaaa563071be633375b3c03" }, { "keyid": "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b", "sig": "24b9b1f3730d6cc8293d83ebae86e3ea3a9bbb4d0a8907b2c71001cc1b0d257814f037f5aa06f8425e871c66f7c377ab197bfceb4402144924dbbe0422103607" }, { "keyid": "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "sig": "5bc6f5738109fe3be3e02c8558a241d61d7494fd76a0274774485ff6b010f41f718b184a3a743a2ceb16324e5bcd57daa6fb87cf32c85bf6c01d8a3098238308" }, { "keyid": "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "sig": "3e3a376641fce12b3df639293cf52c29fbf6a04398ab6e69d2bf12cfae264ace4c984816440536e870cc50816fb2b94e9b9824ce873c7237561afa9bbb649304" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:20:19Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }1.targets.json000066400000000000000000000006711453140004500366240ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_snapshot/server/metadata.staged{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "51fff9a858517278b811fc9b8dc4fee5e10c5f444a87bc259cb0241ea54f1da693cf844412693d6ea24bed5302a508d08879e0a32a961f1132a646ef9f370a07" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:20:19Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }1.timestamp.json000066400000000000000000000013011453140004500371450ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_snapshot/server/metadata.staged{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "de078d3c5438334ab51ed4e433cab94b53f883dad9519505ebe64088f13077f725d96b54c10afbf7909c95ddfd829d0bcca82e09612b91d63dbc9a34e830270c" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:20:19Z", "meta": { "snapshot.json": { "hashes": { "sha256": "16459413316a5b9a617e84c06840164beaa4d7ef0b67c0c720acefc89cb15be3", "sha512": "c118a299f2be396ef21097a0803166b1d796256a3c68e3590e1addd656e804dd28d32e67664e460066af4b956f50fcd1abd8b614e2535fb7e175d8e2819d1d87" }, "length": 2271, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }2.root.json000066400000000000000000000071331453140004500361370ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_snapshot/server/metadata.staged{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "e74e989e4ef342e273a7838703998da620fe1585a53bc9b0700c458acd83d82a8e35d69c9ef448b0ab591da6dbfc22341c950dd32ffbb1f525923c34b9047704" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:20:19Z", "keys": { "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f6b299bcfb4e15ef652c80e9e3dda995acbb4bf71dce889a82ba70228e45a8bf" }, "scheme": "ed25519" }, "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e104199cda6e018d7d9044fa6225aa5dc9c2af5ee4e1c0fe6d16ad002220390d" }, "scheme": "ed25519" }, "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "9b1db36a5cad80284b5f40b040621e0e444f25ee09efa5c1fd6da4499c711bd5" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" }, "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "fa386632ae9cc358ad0b56565edef362ad10d7fadb05bc8dc8995627372b990e" }, "scheme": "ed25519" }, "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "683d345a948a9baa343be4e44c076ca115da3838e72c28a06340c8ec1b3ef6be" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb", "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8" ], "threshold": 4 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 2 } }2.snapshot.json000066400000000000000000000043371453140004500370160ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_snapshot/server/metadata.staged{ "signatures": [ { "keyid": "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "sig": "25cd6eee4f580fed660330de02cb9ab34b9e7495d3f4c57babf225c3c2c39a0937afe633a7760c19681c6b05d89f2c3907a7eef32822992624223cfbcb872d00" }, { "keyid": "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb", "sig": "2011938c47cf0990172acc5a418b9758d124655200b6874fb6646bd6025de6c5a48a3c30ced83b1f955b242c1c3f4d2d346b71861fccdc45c945418aa2511d0e" }, { "keyid": "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "sig": "303b7b1062a09644bd18804b6b1af6818c25abd212b6539cab0fab0e729a4eb14621396fde4d809649c37b82db5278e878b21b52052ac4fecbcff471c8f64408" }, { "keyid": "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "sig": "85961c73d21ab17e5892681198479700a995920cd02001818979fe35122e5776fcc3fd499811b1f995f922ad737d61c5b72229ab1e4d7aab63d9ea1642795c0d" }, { "keyid": "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8", "sig": "4aed1e9ef8d1ac785d15df386470df92ff484f71c35a37ecd1e83e0fd66e67206172f6a2f277bdebae17372e75d253b45143adf3f9d8b6d23a4690d482e2180b" }, { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "26ed17502d130ab4c7b26a1ef78730d9f15847cc3aa6623f692003e588554761b6f6c3b60da304933b3e012478466ce634970562504fdab9b6d2c8e818f3220e" }, { "keyid": "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b", "sig": "0b498cf7cd3a926007f158d9b72002283d67f4f0c2e4a61d5bb3d3afe09d0e9dcd41a4bc67d5cc87a2d072028904d2e022ca4d2abc84137433cdd6812f613505" }, { "keyid": "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "sig": "1f9aea75e9b632f06769ac0aa611ce3116faa14a3736cddc4cdbcae5f7084a0cd44c4a44a8c78a4200f34b097c0176c8c686b352c79105ffcfd764473f9d3206" }, { "keyid": "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "sig": "3f315ca76675299894f1ad111dcce7450e1e2f06400e64a86db5d42c67a14fc7a8f92b1063ae547229544d046bcbb038027e0e0abab05bfb6600f7349a9bf90a" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:20:19Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 2 } }root.json000066400000000000000000000071331453140004500357770ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_snapshot/server/metadata.staged{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "e74e989e4ef342e273a7838703998da620fe1585a53bc9b0700c458acd83d82a8e35d69c9ef448b0ab591da6dbfc22341c950dd32ffbb1f525923c34b9047704" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:20:19Z", "keys": { "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f6b299bcfb4e15ef652c80e9e3dda995acbb4bf71dce889a82ba70228e45a8bf" }, "scheme": "ed25519" }, "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e104199cda6e018d7d9044fa6225aa5dc9c2af5ee4e1c0fe6d16ad002220390d" }, "scheme": "ed25519" }, "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "9b1db36a5cad80284b5f40b040621e0e444f25ee09efa5c1fd6da4499c711bd5" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" }, "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "fa386632ae9cc358ad0b56565edef362ad10d7fadb05bc8dc8995627372b990e" }, "scheme": "ed25519" }, "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "683d345a948a9baa343be4e44c076ca115da3838e72c28a06340c8ec1b3ef6be" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb", "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8" ], "threshold": 4 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 2 } }snapshot.json000066400000000000000000000043371453140004500366560ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_snapshot/server/metadata.staged{ "signatures": [ { "keyid": "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "sig": "25cd6eee4f580fed660330de02cb9ab34b9e7495d3f4c57babf225c3c2c39a0937afe633a7760c19681c6b05d89f2c3907a7eef32822992624223cfbcb872d00" }, { "keyid": "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb", "sig": "2011938c47cf0990172acc5a418b9758d124655200b6874fb6646bd6025de6c5a48a3c30ced83b1f955b242c1c3f4d2d346b71861fccdc45c945418aa2511d0e" }, { "keyid": "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "sig": "303b7b1062a09644bd18804b6b1af6818c25abd212b6539cab0fab0e729a4eb14621396fde4d809649c37b82db5278e878b21b52052ac4fecbcff471c8f64408" }, { "keyid": "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "sig": "85961c73d21ab17e5892681198479700a995920cd02001818979fe35122e5776fcc3fd499811b1f995f922ad737d61c5b72229ab1e4d7aab63d9ea1642795c0d" }, { "keyid": "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8", "sig": "4aed1e9ef8d1ac785d15df386470df92ff484f71c35a37ecd1e83e0fd66e67206172f6a2f277bdebae17372e75d253b45143adf3f9d8b6d23a4690d482e2180b" }, { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "26ed17502d130ab4c7b26a1ef78730d9f15847cc3aa6623f692003e588554761b6f6c3b60da304933b3e012478466ce634970562504fdab9b6d2c8e818f3220e" }, { "keyid": "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b", "sig": "0b498cf7cd3a926007f158d9b72002283d67f4f0c2e4a61d5bb3d3afe09d0e9dcd41a4bc67d5cc87a2d072028904d2e022ca4d2abc84137433cdd6812f613505" }, { "keyid": "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "sig": "1f9aea75e9b632f06769ac0aa611ce3116faa14a3736cddc4cdbcae5f7084a0cd44c4a44a8c78a4200f34b097c0176c8c686b352c79105ffcfd764473f9d3206" }, { "keyid": "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "sig": "3f315ca76675299894f1ad111dcce7450e1e2f06400e64a86db5d42c67a14fc7a8f92b1063ae547229544d046bcbb038027e0e0abab05bfb6600f7349a9bf90a" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:20:19Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 2 } }targets.json000066400000000000000000000006711453140004500364650ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_snapshot/server/metadata.staged{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "51fff9a858517278b811fc9b8dc4fee5e10c5f444a87bc259cb0241ea54f1da693cf844412693d6ea24bed5302a508d08879e0a32a961f1132a646ef9f370a07" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:20:19Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }timestamp.json000066400000000000000000000013011453140004500370060ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_snapshot/server/metadata.staged{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "de078d3c5438334ab51ed4e433cab94b53f883dad9519505ebe64088f13077f725d96b54c10afbf7909c95ddfd829d0bcca82e09612b91d63dbc9a34e830270c" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:20:19Z", "meta": { "snapshot.json": { "hashes": { "sha256": "16459413316a5b9a617e84c06840164beaa4d7ef0b67c0c720acefc89cb15be3", "sha512": "c118a299f2be396ef21097a0803166b1d796256a3c68e3590e1addd656e804dd28d32e67664e460066af4b956f50fcd1abd8b614e2535fb7e175d8e2819d1d87" }, "length": 2271, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_snapshot/server/metadata/000077500000000000000000000000001453140004500327265ustar00rootroot000000000000001.root.json000066400000000000000000000120631453140004500346660ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_snapshot/server/metadata{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "6fcc711c61ce5cebe08cc4f3ed4ccfbee0d33a223cea1258d8a10af6be18627129d2ab2b063283eadcd36e67dd8713af00390aa44733ce9889e2aee2e2e1c600" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:20:19Z", "keys": { "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f758af464295e62a1da4d3267be6d13f4aba9c7d52166d01b6bd5b4559496c9d" }, "scheme": "ed25519" }, "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f6b299bcfb4e15ef652c80e9e3dda995acbb4bf71dce889a82ba70228e45a8bf" }, "scheme": "ed25519" }, "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e104199cda6e018d7d9044fa6225aa5dc9c2af5ee4e1c0fe6d16ad002220390d" }, "scheme": "ed25519" }, "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "82f52e4503dbb364fabe8e5567f1cf909d4175d45468a021dfe75653db9ac98c" }, "scheme": "ed25519" }, "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "9b1db36a5cad80284b5f40b040621e0e444f25ee09efa5c1fd6da4499c711bd5" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "06e4dee0de7826c8d539a6112940b7459892b4ecaf696e67dc064aea0923f95c" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" }, "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "fa386632ae9cc358ad0b56565edef362ad10d7fadb05bc8dc8995627372b990e" }, "scheme": "ed25519" }, "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "683d345a948a9baa343be4e44c076ca115da3838e72c28a06340c8ec1b3ef6be" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b", "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb", "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8" ], "threshold": 4 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 1 } }1.snapshot.json000066400000000000000000000043371453140004500355470ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_snapshot/server/metadata{ "signatures": [ { "keyid": "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "sig": "9b7a3b750e08dfc308b46c3671df8385f782507498c03d2f9f7ecd08045e1112ae034e176f5afea79008aa6bc6dd514fc86aaeec598521d2b5e3247d28e56f0b" }, { "keyid": "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb", "sig": "65b00baea2495c7c2093e65b249597160020ec400ec993979ac07acfc99aab4ea8a2a5ed30bde8ac6c9e7d762d2a6f508ba2aefe47b3615d7eb3d3807d6ebe08" }, { "keyid": "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "sig": "02926e5f258062cad02f5246701737146bd84ce82a3641d172e0534204604be437aea4842a55964a368416679255308c0db6f7980c885d9afaeae92fc779a40d" }, { "keyid": "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "sig": "9efc64982359e93211f05350e1399c1953579807ace961423cdc5c2406df96180b56f94ddac14511bc8430625f230235f51a98e9c546c262f9b444e08c31c50d" }, { "keyid": "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8", "sig": "3105c9e05fb0a536586a9f241c40ffd0696bb11be43bc50ad18fb63799764139a839bee36c58e509d725b4350658c3d3c2a3e60050de66eda65a87be36b6cc03" }, { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "7b4fd39d2babaead15732edf5cadd72b77e3e3cc8b46a5462fe9eadf4ef79cffe15d7b95d56b94d2e4776a2892c5c9ca7895ec6fabaaa563071be633375b3c03" }, { "keyid": "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b", "sig": "24b9b1f3730d6cc8293d83ebae86e3ea3a9bbb4d0a8907b2c71001cc1b0d257814f037f5aa06f8425e871c66f7c377ab197bfceb4402144924dbbe0422103607" }, { "keyid": "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "sig": "5bc6f5738109fe3be3e02c8558a241d61d7494fd76a0274774485ff6b010f41f718b184a3a743a2ceb16324e5bcd57daa6fb87cf32c85bf6c01d8a3098238308" }, { "keyid": "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "sig": "3e3a376641fce12b3df639293cf52c29fbf6a04398ab6e69d2bf12cfae264ace4c984816440536e870cc50816fb2b94e9b9824ce873c7237561afa9bbb649304" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:20:19Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }1.targets.json000066400000000000000000000006711453140004500353560ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_snapshot/server/metadata{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "51fff9a858517278b811fc9b8dc4fee5e10c5f444a87bc259cb0241ea54f1da693cf844412693d6ea24bed5302a508d08879e0a32a961f1132a646ef9f370a07" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:20:19Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }1.timestamp.json000066400000000000000000000013011453140004500356770ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_snapshot/server/metadata{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "de078d3c5438334ab51ed4e433cab94b53f883dad9519505ebe64088f13077f725d96b54c10afbf7909c95ddfd829d0bcca82e09612b91d63dbc9a34e830270c" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:20:19Z", "meta": { "snapshot.json": { "hashes": { "sha256": "16459413316a5b9a617e84c06840164beaa4d7ef0b67c0c720acefc89cb15be3", "sha512": "c118a299f2be396ef21097a0803166b1d796256a3c68e3590e1addd656e804dd28d32e67664e460066af4b956f50fcd1abd8b614e2535fb7e175d8e2819d1d87" }, "length": 2271, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }2.root.json000066400000000000000000000071331453140004500346710ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_snapshot/server/metadata{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "e74e989e4ef342e273a7838703998da620fe1585a53bc9b0700c458acd83d82a8e35d69c9ef448b0ab591da6dbfc22341c950dd32ffbb1f525923c34b9047704" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:20:19Z", "keys": { "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f6b299bcfb4e15ef652c80e9e3dda995acbb4bf71dce889a82ba70228e45a8bf" }, "scheme": "ed25519" }, "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e104199cda6e018d7d9044fa6225aa5dc9c2af5ee4e1c0fe6d16ad002220390d" }, "scheme": "ed25519" }, "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "9b1db36a5cad80284b5f40b040621e0e444f25ee09efa5c1fd6da4499c711bd5" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" }, "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "fa386632ae9cc358ad0b56565edef362ad10d7fadb05bc8dc8995627372b990e" }, "scheme": "ed25519" }, "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "683d345a948a9baa343be4e44c076ca115da3838e72c28a06340c8ec1b3ef6be" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb", "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8" ], "threshold": 4 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 2 } }2.snapshot.json000066400000000000000000000043371453140004500355500ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_snapshot/server/metadata{ "signatures": [ { "keyid": "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "sig": "25cd6eee4f580fed660330de02cb9ab34b9e7495d3f4c57babf225c3c2c39a0937afe633a7760c19681c6b05d89f2c3907a7eef32822992624223cfbcb872d00" }, { "keyid": "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb", "sig": "2011938c47cf0990172acc5a418b9758d124655200b6874fb6646bd6025de6c5a48a3c30ced83b1f955b242c1c3f4d2d346b71861fccdc45c945418aa2511d0e" }, { "keyid": "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "sig": "303b7b1062a09644bd18804b6b1af6818c25abd212b6539cab0fab0e729a4eb14621396fde4d809649c37b82db5278e878b21b52052ac4fecbcff471c8f64408" }, { "keyid": "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "sig": "85961c73d21ab17e5892681198479700a995920cd02001818979fe35122e5776fcc3fd499811b1f995f922ad737d61c5b72229ab1e4d7aab63d9ea1642795c0d" }, { "keyid": "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8", "sig": "4aed1e9ef8d1ac785d15df386470df92ff484f71c35a37ecd1e83e0fd66e67206172f6a2f277bdebae17372e75d253b45143adf3f9d8b6d23a4690d482e2180b" }, { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "26ed17502d130ab4c7b26a1ef78730d9f15847cc3aa6623f692003e588554761b6f6c3b60da304933b3e012478466ce634970562504fdab9b6d2c8e818f3220e" }, { "keyid": "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b", "sig": "0b498cf7cd3a926007f158d9b72002283d67f4f0c2e4a61d5bb3d3afe09d0e9dcd41a4bc67d5cc87a2d072028904d2e022ca4d2abc84137433cdd6812f613505" }, { "keyid": "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "sig": "1f9aea75e9b632f06769ac0aa611ce3116faa14a3736cddc4cdbcae5f7084a0cd44c4a44a8c78a4200f34b097c0176c8c686b352c79105ffcfd764473f9d3206" }, { "keyid": "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "sig": "3f315ca76675299894f1ad111dcce7450e1e2f06400e64a86db5d42c67a14fc7a8f92b1063ae547229544d046bcbb038027e0e0abab05bfb6600f7349a9bf90a" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:20:19Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 2 } }client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_snapshot/server/metadata/root.json000066400000000000000000000071331453140004500346100ustar00rootroot00000000000000{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "e74e989e4ef342e273a7838703998da620fe1585a53bc9b0700c458acd83d82a8e35d69c9ef448b0ab591da6dbfc22341c950dd32ffbb1f525923c34b9047704" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:20:19Z", "keys": { "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f6b299bcfb4e15ef652c80e9e3dda995acbb4bf71dce889a82ba70228e45a8bf" }, "scheme": "ed25519" }, "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e104199cda6e018d7d9044fa6225aa5dc9c2af5ee4e1c0fe6d16ad002220390d" }, "scheme": "ed25519" }, "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "9b1db36a5cad80284b5f40b040621e0e444f25ee09efa5c1fd6da4499c711bd5" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" }, "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "fa386632ae9cc358ad0b56565edef362ad10d7fadb05bc8dc8995627372b990e" }, "scheme": "ed25519" }, "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "683d345a948a9baa343be4e44c076ca115da3838e72c28a06340c8ec1b3ef6be" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb", "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8" ], "threshold": 4 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 2 } }snapshot.json000066400000000000000000000043371453140004500354100ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_snapshot/server/metadata{ "signatures": [ { "keyid": "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "sig": "25cd6eee4f580fed660330de02cb9ab34b9e7495d3f4c57babf225c3c2c39a0937afe633a7760c19681c6b05d89f2c3907a7eef32822992624223cfbcb872d00" }, { "keyid": "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb", "sig": "2011938c47cf0990172acc5a418b9758d124655200b6874fb6646bd6025de6c5a48a3c30ced83b1f955b242c1c3f4d2d346b71861fccdc45c945418aa2511d0e" }, { "keyid": "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "sig": "303b7b1062a09644bd18804b6b1af6818c25abd212b6539cab0fab0e729a4eb14621396fde4d809649c37b82db5278e878b21b52052ac4fecbcff471c8f64408" }, { "keyid": "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "sig": "85961c73d21ab17e5892681198479700a995920cd02001818979fe35122e5776fcc3fd499811b1f995f922ad737d61c5b72229ab1e4d7aab63d9ea1642795c0d" }, { "keyid": "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8", "sig": "4aed1e9ef8d1ac785d15df386470df92ff484f71c35a37ecd1e83e0fd66e67206172f6a2f277bdebae17372e75d253b45143adf3f9d8b6d23a4690d482e2180b" }, { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "26ed17502d130ab4c7b26a1ef78730d9f15847cc3aa6623f692003e588554761b6f6c3b60da304933b3e012478466ce634970562504fdab9b6d2c8e818f3220e" }, { "keyid": "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b", "sig": "0b498cf7cd3a926007f158d9b72002283d67f4f0c2e4a61d5bb3d3afe09d0e9dcd41a4bc67d5cc87a2d072028904d2e022ca4d2abc84137433cdd6812f613505" }, { "keyid": "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "sig": "1f9aea75e9b632f06769ac0aa611ce3116faa14a3736cddc4cdbcae5f7084a0cd44c4a44a8c78a4200f34b097c0176c8c686b352c79105ffcfd764473f9d3206" }, { "keyid": "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "sig": "3f315ca76675299894f1ad111dcce7450e1e2f06400e64a86db5d42c67a14fc7a8f92b1063ae547229544d046bcbb038027e0e0abab05bfb6600f7349a9bf90a" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:20:19Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 2 } }targets.json000066400000000000000000000006711453140004500352170ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_snapshot/server/metadata{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "51fff9a858517278b811fc9b8dc4fee5e10c5f444a87bc259cb0241ea54f1da693cf844412693d6ea24bed5302a508d08879e0a32a961f1132a646ef9f370a07" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:20:19Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }timestamp.json000066400000000000000000000013011453140004500355400ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_snapshot/server/metadata{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "de078d3c5438334ab51ed4e433cab94b53f883dad9519505ebe64088f13077f725d96b54c10afbf7909c95ddfd829d0bcca82e09612b91d63dbc9a34e830270c" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:20:19Z", "meta": { "snapshot.json": { "hashes": { "sha256": "16459413316a5b9a617e84c06840164beaa4d7ef0b67c0c720acefc89cb15be3", "sha512": "c118a299f2be396ef21097a0803166b1d796256a3c68e3590e1addd656e804dd28d32e67664e460066af4b956f50fcd1abd8b614e2535fb7e175d8e2819d1d87" }, "length": 2271, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_targets/000077500000000000000000000000001453140004500274525ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_targets/client/000077500000000000000000000000001453140004500307305ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_targets/client/metadata/000077500000000000000000000000001453140004500325105ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_targets/client/metadata/current/000077500000000000000000000000001453140004500341725ustar00rootroot000000000000001.root.json000066400000000000000000000120631453140004500361320ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_targets/client/metadata/current{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "ba2efed303d416f5e38018fb72802fb9263c87e6ad63725fd5e839d3cec51e2cfd50bdd0004a96a4017ef929249fc263332a54d0c86552f9014e68f6972b3c08" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:20:22Z", "keys": { "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f758af464295e62a1da4d3267be6d13f4aba9c7d52166d01b6bd5b4559496c9d" }, "scheme": "ed25519" }, "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f6b299bcfb4e15ef652c80e9e3dda995acbb4bf71dce889a82ba70228e45a8bf" }, "scheme": "ed25519" }, "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e104199cda6e018d7d9044fa6225aa5dc9c2af5ee4e1c0fe6d16ad002220390d" }, "scheme": "ed25519" }, "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "82f52e4503dbb364fabe8e5567f1cf909d4175d45468a021dfe75653db9ac98c" }, "scheme": "ed25519" }, "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "9b1db36a5cad80284b5f40b040621e0e444f25ee09efa5c1fd6da4499c711bd5" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "06e4dee0de7826c8d539a6112940b7459892b4ecaf696e67dc064aea0923f95c" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" }, "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "fa386632ae9cc358ad0b56565edef362ad10d7fadb05bc8dc8995627372b990e" }, "scheme": "ed25519" }, "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "683d345a948a9baa343be4e44c076ca115da3838e72c28a06340c8ec1b3ef6be" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b", "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb", "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8" ], "threshold": 4 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 1 } }1.snapshot.json000066400000000000000000000006571453140004500370140ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_targets/client/metadata/current{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "8d1132037c4a0fb48600ecda532f1518a24e85aba93147021f763762793ff82e75fa5b7904d223085ceabbfe10206f667cd4951fab481b3712ab01115e85060a" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:20:22Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }1.targets.json000066400000000000000000000043511453140004500366210ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_targets/client/metadata/current{ "signatures": [ { "keyid": "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "sig": "2a088977e3828da40fbe4f245d9d0ab6cf6e81eb30835531a1a732e75dc734214d70061ef6e1c30a1984b9d36401d257952471a974314c148823d207781fdd09" }, { "keyid": "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb", "sig": "f48198da5d992e46d55f092689c442bf31d83b9c9187d83defee46f7fea5a802c0badc1ab3ae2799492946946b29b90b2c10eaca7f5e8e33a00c555e0d5abc0b" }, { "keyid": "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "sig": "37fffad3ba0cb53593b1d2cf7aa0437cfb821a66d00c1b3ad6dd858117b66336ad42ac7a53de241dcacbd5961e2b22d4c5c1e6535cd0595645c813a0fc222a00" }, { "keyid": "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "sig": "42964abf028dd306e5a98920e90c5234dd01492259fbbfe6cafcb3d6076d34bfc296b2e57834a2f7039fdab89fee185dd2291abfec61a9bce256556a922ae006" }, { "keyid": "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8", "sig": "6ba3c3e8485f4298bff2547bc39237d0ba07d275028ef8a7b0d051a1a8867f7d38cf5973b4f5b4acd868820dfc5d4eb86646c87fe9b3cbe77e50a2dcaf963b04" }, { "keyid": "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b", "sig": "3e5189ac4c3c485c833ff697056e07eeae6cabc2de11a32c2a6a074d622ff22295d0ed8f3e42882caa4f59c09ceb3869a6d7b663439327e6f0e56c713ff1780e" }, { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "c5688ea77f9e7020c2664920af7d48814231dea91a1997d7adec74f9e167e55dea7797603ebea9f9352c4e91306f92cb81980b9351787d90cbf23e706a26730e" }, { "keyid": "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "sig": "17adcf644ace2f7e66abf30980426db96c2b1bf275ea728593433feeb90e39e4b2db1bbd5128f8fe56a1fa3db8afafe5fec2b40903b402015a9554c24d543704" }, { "keyid": "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "sig": "bed1c8e2e94072dc3c8bf0f823ada338ce7eae194d3d1df6596fb49efdf59733137d02f10b8521db6b00c696d45a1f4689ae350ee1a6cbd5dcc63700da70b401" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:20:22Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }1.timestamp.json000066400000000000000000000013001453140004500371420ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_targets/client/metadata/current{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "09068b028ead5c22678544002721e77c9cea836ed1034ea90c5757ac8fdd121a5bb9b54891306643e45816f63edb563a2faf88c0b92f4a6da7c9102fad1cde09" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:20:22Z", "meta": { "snapshot.json": { "hashes": { "sha256": "e4f270f0f80cd430d6b7596625a9f75664ca0d0fe27f42a9bfde9041d498b737", "sha512": "abeb893c9e16771a1336374ff257dcb6752c2ed3ad51de8f2a9799f2dd515fc3677bb8bb4f0420a2e423f2c87f26a2a04df9f380ea2d2d6dc6b7f9cbb337cd8f" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }root.json000066400000000000000000000120631453140004500357730ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_targets/client/metadata/current{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "ba2efed303d416f5e38018fb72802fb9263c87e6ad63725fd5e839d3cec51e2cfd50bdd0004a96a4017ef929249fc263332a54d0c86552f9014e68f6972b3c08" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:20:22Z", "keys": { "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f758af464295e62a1da4d3267be6d13f4aba9c7d52166d01b6bd5b4559496c9d" }, "scheme": "ed25519" }, "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f6b299bcfb4e15ef652c80e9e3dda995acbb4bf71dce889a82ba70228e45a8bf" }, "scheme": "ed25519" }, "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e104199cda6e018d7d9044fa6225aa5dc9c2af5ee4e1c0fe6d16ad002220390d" }, "scheme": "ed25519" }, "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "82f52e4503dbb364fabe8e5567f1cf909d4175d45468a021dfe75653db9ac98c" }, "scheme": "ed25519" }, "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "9b1db36a5cad80284b5f40b040621e0e444f25ee09efa5c1fd6da4499c711bd5" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "06e4dee0de7826c8d539a6112940b7459892b4ecaf696e67dc064aea0923f95c" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" }, "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "fa386632ae9cc358ad0b56565edef362ad10d7fadb05bc8dc8995627372b990e" }, "scheme": "ed25519" }, "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "683d345a948a9baa343be4e44c076ca115da3838e72c28a06340c8ec1b3ef6be" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b", "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb", "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8" ], "threshold": 4 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 1 } }snapshot.json000066400000000000000000000006571453140004500366550ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_targets/client/metadata/current{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "8d1132037c4a0fb48600ecda532f1518a24e85aba93147021f763762793ff82e75fa5b7904d223085ceabbfe10206f667cd4951fab481b3712ab01115e85060a" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:20:22Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }targets.json000066400000000000000000000043511453140004500364620ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_targets/client/metadata/current{ "signatures": [ { "keyid": "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "sig": "2a088977e3828da40fbe4f245d9d0ab6cf6e81eb30835531a1a732e75dc734214d70061ef6e1c30a1984b9d36401d257952471a974314c148823d207781fdd09" }, { "keyid": "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb", "sig": "f48198da5d992e46d55f092689c442bf31d83b9c9187d83defee46f7fea5a802c0badc1ab3ae2799492946946b29b90b2c10eaca7f5e8e33a00c555e0d5abc0b" }, { "keyid": "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "sig": "37fffad3ba0cb53593b1d2cf7aa0437cfb821a66d00c1b3ad6dd858117b66336ad42ac7a53de241dcacbd5961e2b22d4c5c1e6535cd0595645c813a0fc222a00" }, { "keyid": "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "sig": "42964abf028dd306e5a98920e90c5234dd01492259fbbfe6cafcb3d6076d34bfc296b2e57834a2f7039fdab89fee185dd2291abfec61a9bce256556a922ae006" }, { "keyid": "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8", "sig": "6ba3c3e8485f4298bff2547bc39237d0ba07d275028ef8a7b0d051a1a8867f7d38cf5973b4f5b4acd868820dfc5d4eb86646c87fe9b3cbe77e50a2dcaf963b04" }, { "keyid": "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b", "sig": "3e5189ac4c3c485c833ff697056e07eeae6cabc2de11a32c2a6a074d622ff22295d0ed8f3e42882caa4f59c09ceb3869a6d7b663439327e6f0e56c713ff1780e" }, { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "c5688ea77f9e7020c2664920af7d48814231dea91a1997d7adec74f9e167e55dea7797603ebea9f9352c4e91306f92cb81980b9351787d90cbf23e706a26730e" }, { "keyid": "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "sig": "17adcf644ace2f7e66abf30980426db96c2b1bf275ea728593433feeb90e39e4b2db1bbd5128f8fe56a1fa3db8afafe5fec2b40903b402015a9554c24d543704" }, { "keyid": "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "sig": "bed1c8e2e94072dc3c8bf0f823ada338ce7eae194d3d1df6596fb49efdf59733137d02f10b8521db6b00c696d45a1f4689ae350ee1a6cbd5dcc63700da70b401" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:20:22Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }timestamp.json000066400000000000000000000013001453140004500370030ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_targets/client/metadata/current{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "09068b028ead5c22678544002721e77c9cea836ed1034ea90c5757ac8fdd121a5bb9b54891306643e45816f63edb563a2faf88c0b92f4a6da7c9102fad1cde09" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:20:22Z", "meta": { "snapshot.json": { "hashes": { "sha256": "e4f270f0f80cd430d6b7596625a9f75664ca0d0fe27f42a9bfde9041d498b737", "sha512": "abeb893c9e16771a1336374ff257dcb6752c2ed3ad51de8f2a9799f2dd515fc3677bb8bb4f0420a2e423f2c87f26a2a04df9f380ea2d2d6dc6b7f9cbb337cd8f" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_targets/client/metadata/previous/000077500000000000000000000000001453140004500343645ustar00rootroot000000000000001.root.json000066400000000000000000000120631453140004500363240ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_targets/client/metadata/previous{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "ba2efed303d416f5e38018fb72802fb9263c87e6ad63725fd5e839d3cec51e2cfd50bdd0004a96a4017ef929249fc263332a54d0c86552f9014e68f6972b3c08" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:20:22Z", "keys": { "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f758af464295e62a1da4d3267be6d13f4aba9c7d52166d01b6bd5b4559496c9d" }, "scheme": "ed25519" }, "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f6b299bcfb4e15ef652c80e9e3dda995acbb4bf71dce889a82ba70228e45a8bf" }, "scheme": "ed25519" }, "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e104199cda6e018d7d9044fa6225aa5dc9c2af5ee4e1c0fe6d16ad002220390d" }, "scheme": "ed25519" }, "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "82f52e4503dbb364fabe8e5567f1cf909d4175d45468a021dfe75653db9ac98c" }, "scheme": "ed25519" }, "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "9b1db36a5cad80284b5f40b040621e0e444f25ee09efa5c1fd6da4499c711bd5" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "06e4dee0de7826c8d539a6112940b7459892b4ecaf696e67dc064aea0923f95c" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" }, "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "fa386632ae9cc358ad0b56565edef362ad10d7fadb05bc8dc8995627372b990e" }, "scheme": "ed25519" }, "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "683d345a948a9baa343be4e44c076ca115da3838e72c28a06340c8ec1b3ef6be" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b", "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb", "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8" ], "threshold": 4 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 1 } }1.snapshot.json000066400000000000000000000006571453140004500372060ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_targets/client/metadata/previous{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "8d1132037c4a0fb48600ecda532f1518a24e85aba93147021f763762793ff82e75fa5b7904d223085ceabbfe10206f667cd4951fab481b3712ab01115e85060a" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:20:22Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }1.targets.json000066400000000000000000000043511453140004500370130ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_targets/client/metadata/previous{ "signatures": [ { "keyid": "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "sig": "2a088977e3828da40fbe4f245d9d0ab6cf6e81eb30835531a1a732e75dc734214d70061ef6e1c30a1984b9d36401d257952471a974314c148823d207781fdd09" }, { "keyid": "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb", "sig": "f48198da5d992e46d55f092689c442bf31d83b9c9187d83defee46f7fea5a802c0badc1ab3ae2799492946946b29b90b2c10eaca7f5e8e33a00c555e0d5abc0b" }, { "keyid": "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "sig": "37fffad3ba0cb53593b1d2cf7aa0437cfb821a66d00c1b3ad6dd858117b66336ad42ac7a53de241dcacbd5961e2b22d4c5c1e6535cd0595645c813a0fc222a00" }, { "keyid": "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "sig": "42964abf028dd306e5a98920e90c5234dd01492259fbbfe6cafcb3d6076d34bfc296b2e57834a2f7039fdab89fee185dd2291abfec61a9bce256556a922ae006" }, { "keyid": "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8", "sig": "6ba3c3e8485f4298bff2547bc39237d0ba07d275028ef8a7b0d051a1a8867f7d38cf5973b4f5b4acd868820dfc5d4eb86646c87fe9b3cbe77e50a2dcaf963b04" }, { "keyid": "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b", "sig": "3e5189ac4c3c485c833ff697056e07eeae6cabc2de11a32c2a6a074d622ff22295d0ed8f3e42882caa4f59c09ceb3869a6d7b663439327e6f0e56c713ff1780e" }, { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "c5688ea77f9e7020c2664920af7d48814231dea91a1997d7adec74f9e167e55dea7797603ebea9f9352c4e91306f92cb81980b9351787d90cbf23e706a26730e" }, { "keyid": "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "sig": "17adcf644ace2f7e66abf30980426db96c2b1bf275ea728593433feeb90e39e4b2db1bbd5128f8fe56a1fa3db8afafe5fec2b40903b402015a9554c24d543704" }, { "keyid": "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "sig": "bed1c8e2e94072dc3c8bf0f823ada338ce7eae194d3d1df6596fb49efdf59733137d02f10b8521db6b00c696d45a1f4689ae350ee1a6cbd5dcc63700da70b401" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:20:22Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }1.timestamp.json000066400000000000000000000013001453140004500373340ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_targets/client/metadata/previous{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "09068b028ead5c22678544002721e77c9cea836ed1034ea90c5757ac8fdd121a5bb9b54891306643e45816f63edb563a2faf88c0b92f4a6da7c9102fad1cde09" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:20:22Z", "meta": { "snapshot.json": { "hashes": { "sha256": "e4f270f0f80cd430d6b7596625a9f75664ca0d0fe27f42a9bfde9041d498b737", "sha512": "abeb893c9e16771a1336374ff257dcb6752c2ed3ad51de8f2a9799f2dd515fc3677bb8bb4f0420a2e423f2c87f26a2a04df9f380ea2d2d6dc6b7f9cbb337cd8f" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }root.json000066400000000000000000000120631453140004500361650ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_targets/client/metadata/previous{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "ba2efed303d416f5e38018fb72802fb9263c87e6ad63725fd5e839d3cec51e2cfd50bdd0004a96a4017ef929249fc263332a54d0c86552f9014e68f6972b3c08" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:20:22Z", "keys": { "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f758af464295e62a1da4d3267be6d13f4aba9c7d52166d01b6bd5b4559496c9d" }, "scheme": "ed25519" }, "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f6b299bcfb4e15ef652c80e9e3dda995acbb4bf71dce889a82ba70228e45a8bf" }, "scheme": "ed25519" }, "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e104199cda6e018d7d9044fa6225aa5dc9c2af5ee4e1c0fe6d16ad002220390d" }, "scheme": "ed25519" }, "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "82f52e4503dbb364fabe8e5567f1cf909d4175d45468a021dfe75653db9ac98c" }, "scheme": "ed25519" }, "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "9b1db36a5cad80284b5f40b040621e0e444f25ee09efa5c1fd6da4499c711bd5" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "06e4dee0de7826c8d539a6112940b7459892b4ecaf696e67dc064aea0923f95c" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" }, "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "fa386632ae9cc358ad0b56565edef362ad10d7fadb05bc8dc8995627372b990e" }, "scheme": "ed25519" }, "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "683d345a948a9baa343be4e44c076ca115da3838e72c28a06340c8ec1b3ef6be" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b", "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb", "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8" ], "threshold": 4 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 1 } }snapshot.json000066400000000000000000000006571453140004500370470ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_targets/client/metadata/previous{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "8d1132037c4a0fb48600ecda532f1518a24e85aba93147021f763762793ff82e75fa5b7904d223085ceabbfe10206f667cd4951fab481b3712ab01115e85060a" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:20:22Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }targets.json000066400000000000000000000043511453140004500366540ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_targets/client/metadata/previous{ "signatures": [ { "keyid": "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "sig": "2a088977e3828da40fbe4f245d9d0ab6cf6e81eb30835531a1a732e75dc734214d70061ef6e1c30a1984b9d36401d257952471a974314c148823d207781fdd09" }, { "keyid": "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb", "sig": "f48198da5d992e46d55f092689c442bf31d83b9c9187d83defee46f7fea5a802c0badc1ab3ae2799492946946b29b90b2c10eaca7f5e8e33a00c555e0d5abc0b" }, { "keyid": "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "sig": "37fffad3ba0cb53593b1d2cf7aa0437cfb821a66d00c1b3ad6dd858117b66336ad42ac7a53de241dcacbd5961e2b22d4c5c1e6535cd0595645c813a0fc222a00" }, { "keyid": "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "sig": "42964abf028dd306e5a98920e90c5234dd01492259fbbfe6cafcb3d6076d34bfc296b2e57834a2f7039fdab89fee185dd2291abfec61a9bce256556a922ae006" }, { "keyid": "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8", "sig": "6ba3c3e8485f4298bff2547bc39237d0ba07d275028ef8a7b0d051a1a8867f7d38cf5973b4f5b4acd868820dfc5d4eb86646c87fe9b3cbe77e50a2dcaf963b04" }, { "keyid": "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b", "sig": "3e5189ac4c3c485c833ff697056e07eeae6cabc2de11a32c2a6a074d622ff22295d0ed8f3e42882caa4f59c09ceb3869a6d7b663439327e6f0e56c713ff1780e" }, { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "c5688ea77f9e7020c2664920af7d48814231dea91a1997d7adec74f9e167e55dea7797603ebea9f9352c4e91306f92cb81980b9351787d90cbf23e706a26730e" }, { "keyid": "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "sig": "17adcf644ace2f7e66abf30980426db96c2b1bf275ea728593433feeb90e39e4b2db1bbd5128f8fe56a1fa3db8afafe5fec2b40903b402015a9554c24d543704" }, { "keyid": "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "sig": "bed1c8e2e94072dc3c8bf0f823ada338ce7eae194d3d1df6596fb49efdf59733137d02f10b8521db6b00c696d45a1f4689ae350ee1a6cbd5dcc63700da70b401" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:20:22Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }timestamp.json000066400000000000000000000013001453140004500371750ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_targets/client/metadata/previous{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "09068b028ead5c22678544002721e77c9cea836ed1034ea90c5757ac8fdd121a5bb9b54891306643e45816f63edb563a2faf88c0b92f4a6da7c9102fad1cde09" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:20:22Z", "meta": { "snapshot.json": { "hashes": { "sha256": "e4f270f0f80cd430d6b7596625a9f75664ca0d0fe27f42a9bfde9041d498b737", "sha512": "abeb893c9e16771a1336374ff257dcb6752c2ed3ad51de8f2a9799f2dd515fc3677bb8bb4f0420a2e423f2c87f26a2a04df9f380ea2d2d6dc6b7f9cbb337cd8f" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_targets/hash.txt000066400000000000000000000001001453140004500311250ustar00rootroot000000000000000d1fafc3b1e2fba17b6702b14477333fd5ed2379cfc454304a93524503f2594eclient/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_targets/server/000077500000000000000000000000001453140004500307605ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_targets/server/metadata.staged/000077500000000000000000000000001453140004500340065ustar00rootroot000000000000001.root.json000066400000000000000000000120631453140004500357460ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_targets/server/metadata.staged{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "ba2efed303d416f5e38018fb72802fb9263c87e6ad63725fd5e839d3cec51e2cfd50bdd0004a96a4017ef929249fc263332a54d0c86552f9014e68f6972b3c08" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:20:22Z", "keys": { "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f758af464295e62a1da4d3267be6d13f4aba9c7d52166d01b6bd5b4559496c9d" }, "scheme": "ed25519" }, "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f6b299bcfb4e15ef652c80e9e3dda995acbb4bf71dce889a82ba70228e45a8bf" }, "scheme": "ed25519" }, "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e104199cda6e018d7d9044fa6225aa5dc9c2af5ee4e1c0fe6d16ad002220390d" }, "scheme": "ed25519" }, "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "82f52e4503dbb364fabe8e5567f1cf909d4175d45468a021dfe75653db9ac98c" }, "scheme": "ed25519" }, "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "9b1db36a5cad80284b5f40b040621e0e444f25ee09efa5c1fd6da4499c711bd5" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "06e4dee0de7826c8d539a6112940b7459892b4ecaf696e67dc064aea0923f95c" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" }, "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "fa386632ae9cc358ad0b56565edef362ad10d7fadb05bc8dc8995627372b990e" }, "scheme": "ed25519" }, "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "683d345a948a9baa343be4e44c076ca115da3838e72c28a06340c8ec1b3ef6be" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b", "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb", "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8" ], "threshold": 4 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 1 } }1.snapshot.json000066400000000000000000000006571453140004500366300ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_targets/server/metadata.staged{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "8d1132037c4a0fb48600ecda532f1518a24e85aba93147021f763762793ff82e75fa5b7904d223085ceabbfe10206f667cd4951fab481b3712ab01115e85060a" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:20:22Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }1.targets.json000066400000000000000000000043511453140004500364350ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_targets/server/metadata.staged{ "signatures": [ { "keyid": "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "sig": "2a088977e3828da40fbe4f245d9d0ab6cf6e81eb30835531a1a732e75dc734214d70061ef6e1c30a1984b9d36401d257952471a974314c148823d207781fdd09" }, { "keyid": "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb", "sig": "f48198da5d992e46d55f092689c442bf31d83b9c9187d83defee46f7fea5a802c0badc1ab3ae2799492946946b29b90b2c10eaca7f5e8e33a00c555e0d5abc0b" }, { "keyid": "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "sig": "37fffad3ba0cb53593b1d2cf7aa0437cfb821a66d00c1b3ad6dd858117b66336ad42ac7a53de241dcacbd5961e2b22d4c5c1e6535cd0595645c813a0fc222a00" }, { "keyid": "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "sig": "42964abf028dd306e5a98920e90c5234dd01492259fbbfe6cafcb3d6076d34bfc296b2e57834a2f7039fdab89fee185dd2291abfec61a9bce256556a922ae006" }, { "keyid": "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8", "sig": "6ba3c3e8485f4298bff2547bc39237d0ba07d275028ef8a7b0d051a1a8867f7d38cf5973b4f5b4acd868820dfc5d4eb86646c87fe9b3cbe77e50a2dcaf963b04" }, { "keyid": "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b", "sig": "3e5189ac4c3c485c833ff697056e07eeae6cabc2de11a32c2a6a074d622ff22295d0ed8f3e42882caa4f59c09ceb3869a6d7b663439327e6f0e56c713ff1780e" }, { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "c5688ea77f9e7020c2664920af7d48814231dea91a1997d7adec74f9e167e55dea7797603ebea9f9352c4e91306f92cb81980b9351787d90cbf23e706a26730e" }, { "keyid": "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "sig": "17adcf644ace2f7e66abf30980426db96c2b1bf275ea728593433feeb90e39e4b2db1bbd5128f8fe56a1fa3db8afafe5fec2b40903b402015a9554c24d543704" }, { "keyid": "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "sig": "bed1c8e2e94072dc3c8bf0f823ada338ce7eae194d3d1df6596fb49efdf59733137d02f10b8521db6b00c696d45a1f4689ae350ee1a6cbd5dcc63700da70b401" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:20:22Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }1.timestamp.json000066400000000000000000000013001453140004500367560ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_targets/server/metadata.staged{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "09068b028ead5c22678544002721e77c9cea836ed1034ea90c5757ac8fdd121a5bb9b54891306643e45816f63edb563a2faf88c0b92f4a6da7c9102fad1cde09" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:20:22Z", "meta": { "snapshot.json": { "hashes": { "sha256": "e4f270f0f80cd430d6b7596625a9f75664ca0d0fe27f42a9bfde9041d498b737", "sha512": "abeb893c9e16771a1336374ff257dcb6752c2ed3ad51de8f2a9799f2dd515fc3677bb8bb4f0420a2e423f2c87f26a2a04df9f380ea2d2d6dc6b7f9cbb337cd8f" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }2.root.json000066400000000000000000000071331453140004500357510ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_targets/server/metadata.staged{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "5221883d99795f64519d986c33744cf101b50d098735859192a6536a62f2af62d28c7d3348f407fd4302b6c6be8198b5fb33b41a660bc998751626898e954105" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:20:22Z", "keys": { "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f6b299bcfb4e15ef652c80e9e3dda995acbb4bf71dce889a82ba70228e45a8bf" }, "scheme": "ed25519" }, "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e104199cda6e018d7d9044fa6225aa5dc9c2af5ee4e1c0fe6d16ad002220390d" }, "scheme": "ed25519" }, "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "9b1db36a5cad80284b5f40b040621e0e444f25ee09efa5c1fd6da4499c711bd5" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "fa386632ae9cc358ad0b56565edef362ad10d7fadb05bc8dc8995627372b990e" }, "scheme": "ed25519" }, "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "683d345a948a9baa343be4e44c076ca115da3838e72c28a06340c8ec1b3ef6be" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb", "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8" ], "threshold": 4 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 2 } }2.targets.json000066400000000000000000000043511453140004500364360ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_targets/server/metadata.staged{ "signatures": [ { "keyid": "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "sig": "24efa3e5c6463307219075f5c4e816a3c2643024d36909735dbcd617c4300246b4384db27cefce01a8481b6c52f5dad2f3f416830912bf0b0d8398c14508e705" }, { "keyid": "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb", "sig": "f9304ff820dbb0f245baa68291ffaa901fa160d446a2fbe864e561afc74006c1f47e112eef2f51a78efa87335d2dc86392d0d3c84d69744366202caa35c80801" }, { "keyid": "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "sig": "d2e5e871f943281e59bce283ac874bdd9ec1ed461bf9a7dce48774b577fd481fe3e0975670fbc684d0bbc881974e832cef02ced09f0e533a621266b81b8f1307" }, { "keyid": "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "sig": "d3044468af5877042ef1585a83d8dc59bf4bd8f0b20837d6e73d39828ed15c1e13fb64ab02d9dbc2940768b02ac95d8cc17d05d9c9fea4200a98453b8463c408" }, { "keyid": "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8", "sig": "cb5da30b57e62e562cb8897adde8ecfc195d9d513ec59ed4931c5d8f1612518f644e7e78f674b8de646373747bcf08a4025351167c3a77d8eff382823d18670b" }, { "keyid": "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b", "sig": "eccd5243a12063c73c56ecad469da0c2ce96dbfd4f04c8f6c5b1456336193d92f6ef69efb5ec6e69d29e868983a576d2baab66e983b7ae7bee553f5fcd9ef909" }, { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "4892c826626dd62c189707efcd1b340ed6bf6e68833eefb1f94020bf59a9c4eefafacfa4a3998d149fca8ad5a30e12f8aa1a936821c45726d445403df0688508" }, { "keyid": "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "sig": "12b6240c2d9a922a35591e3d86877f4a407210f7e6d3bf270ef2e496394029f731f77cb3220a361b0b49b54f5564969aaa62262219db0a5b58b86fd0cf42420e" }, { "keyid": "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "sig": "894a62b4b9ae92e45298abd9465aeedeba40eb82a4ca014d41f1b58b6117d9ab3e89c2d152e2a7adce99396bc53c9f1324dbb4af8ff00e251f3f16e1ed52f103" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:20:22Z", "spec_version": "1.0.0", "targets": {}, "version": 2 } }root.json000066400000000000000000000071331453140004500356110ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_targets/server/metadata.staged{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "5221883d99795f64519d986c33744cf101b50d098735859192a6536a62f2af62d28c7d3348f407fd4302b6c6be8198b5fb33b41a660bc998751626898e954105" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:20:22Z", "keys": { "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f6b299bcfb4e15ef652c80e9e3dda995acbb4bf71dce889a82ba70228e45a8bf" }, "scheme": "ed25519" }, "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e104199cda6e018d7d9044fa6225aa5dc9c2af5ee4e1c0fe6d16ad002220390d" }, "scheme": "ed25519" }, "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "9b1db36a5cad80284b5f40b040621e0e444f25ee09efa5c1fd6da4499c711bd5" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "fa386632ae9cc358ad0b56565edef362ad10d7fadb05bc8dc8995627372b990e" }, "scheme": "ed25519" }, "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "683d345a948a9baa343be4e44c076ca115da3838e72c28a06340c8ec1b3ef6be" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb", "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8" ], "threshold": 4 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 2 } }snapshot.json000066400000000000000000000006571453140004500364710ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_targets/server/metadata.staged{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "8d1132037c4a0fb48600ecda532f1518a24e85aba93147021f763762793ff82e75fa5b7904d223085ceabbfe10206f667cd4951fab481b3712ab01115e85060a" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:20:22Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }targets.json000066400000000000000000000043511453140004500362760ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_targets/server/metadata.staged{ "signatures": [ { "keyid": "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "sig": "24efa3e5c6463307219075f5c4e816a3c2643024d36909735dbcd617c4300246b4384db27cefce01a8481b6c52f5dad2f3f416830912bf0b0d8398c14508e705" }, { "keyid": "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb", "sig": "f9304ff820dbb0f245baa68291ffaa901fa160d446a2fbe864e561afc74006c1f47e112eef2f51a78efa87335d2dc86392d0d3c84d69744366202caa35c80801" }, { "keyid": "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "sig": "d2e5e871f943281e59bce283ac874bdd9ec1ed461bf9a7dce48774b577fd481fe3e0975670fbc684d0bbc881974e832cef02ced09f0e533a621266b81b8f1307" }, { "keyid": "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "sig": "d3044468af5877042ef1585a83d8dc59bf4bd8f0b20837d6e73d39828ed15c1e13fb64ab02d9dbc2940768b02ac95d8cc17d05d9c9fea4200a98453b8463c408" }, { "keyid": "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8", "sig": "cb5da30b57e62e562cb8897adde8ecfc195d9d513ec59ed4931c5d8f1612518f644e7e78f674b8de646373747bcf08a4025351167c3a77d8eff382823d18670b" }, { "keyid": "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b", "sig": "eccd5243a12063c73c56ecad469da0c2ce96dbfd4f04c8f6c5b1456336193d92f6ef69efb5ec6e69d29e868983a576d2baab66e983b7ae7bee553f5fcd9ef909" }, { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "4892c826626dd62c189707efcd1b340ed6bf6e68833eefb1f94020bf59a9c4eefafacfa4a3998d149fca8ad5a30e12f8aa1a936821c45726d445403df0688508" }, { "keyid": "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "sig": "12b6240c2d9a922a35591e3d86877f4a407210f7e6d3bf270ef2e496394029f731f77cb3220a361b0b49b54f5564969aaa62262219db0a5b58b86fd0cf42420e" }, { "keyid": "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "sig": "894a62b4b9ae92e45298abd9465aeedeba40eb82a4ca014d41f1b58b6117d9ab3e89c2d152e2a7adce99396bc53c9f1324dbb4af8ff00e251f3f16e1ed52f103" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:20:22Z", "spec_version": "1.0.0", "targets": {}, "version": 2 } }timestamp.json000066400000000000000000000013001453140004500366170ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_targets/server/metadata.staged{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "09068b028ead5c22678544002721e77c9cea836ed1034ea90c5757ac8fdd121a5bb9b54891306643e45816f63edb563a2faf88c0b92f4a6da7c9102fad1cde09" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:20:22Z", "meta": { "snapshot.json": { "hashes": { "sha256": "e4f270f0f80cd430d6b7596625a9f75664ca0d0fe27f42a9bfde9041d498b737", "sha512": "abeb893c9e16771a1336374ff257dcb6752c2ed3ad51de8f2a9799f2dd515fc3677bb8bb4f0420a2e423f2c87f26a2a04df9f380ea2d2d6dc6b7f9cbb337cd8f" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_targets/server/metadata/000077500000000000000000000000001453140004500325405ustar00rootroot000000000000001.root.json000066400000000000000000000120631453140004500345000ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_targets/server/metadata{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "ba2efed303d416f5e38018fb72802fb9263c87e6ad63725fd5e839d3cec51e2cfd50bdd0004a96a4017ef929249fc263332a54d0c86552f9014e68f6972b3c08" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:20:22Z", "keys": { "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f758af464295e62a1da4d3267be6d13f4aba9c7d52166d01b6bd5b4559496c9d" }, "scheme": "ed25519" }, "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f6b299bcfb4e15ef652c80e9e3dda995acbb4bf71dce889a82ba70228e45a8bf" }, "scheme": "ed25519" }, "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e104199cda6e018d7d9044fa6225aa5dc9c2af5ee4e1c0fe6d16ad002220390d" }, "scheme": "ed25519" }, "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "82f52e4503dbb364fabe8e5567f1cf909d4175d45468a021dfe75653db9ac98c" }, "scheme": "ed25519" }, "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "9b1db36a5cad80284b5f40b040621e0e444f25ee09efa5c1fd6da4499c711bd5" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "06e4dee0de7826c8d539a6112940b7459892b4ecaf696e67dc064aea0923f95c" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" }, "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "fa386632ae9cc358ad0b56565edef362ad10d7fadb05bc8dc8995627372b990e" }, "scheme": "ed25519" }, "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "683d345a948a9baa343be4e44c076ca115da3838e72c28a06340c8ec1b3ef6be" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b", "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb", "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8" ], "threshold": 4 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 1 } }1.snapshot.json000066400000000000000000000006571453140004500353620ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_targets/server/metadata{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "8d1132037c4a0fb48600ecda532f1518a24e85aba93147021f763762793ff82e75fa5b7904d223085ceabbfe10206f667cd4951fab481b3712ab01115e85060a" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:20:22Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }1.targets.json000066400000000000000000000043511453140004500351670ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_targets/server/metadata{ "signatures": [ { "keyid": "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "sig": "2a088977e3828da40fbe4f245d9d0ab6cf6e81eb30835531a1a732e75dc734214d70061ef6e1c30a1984b9d36401d257952471a974314c148823d207781fdd09" }, { "keyid": "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb", "sig": "f48198da5d992e46d55f092689c442bf31d83b9c9187d83defee46f7fea5a802c0badc1ab3ae2799492946946b29b90b2c10eaca7f5e8e33a00c555e0d5abc0b" }, { "keyid": "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "sig": "37fffad3ba0cb53593b1d2cf7aa0437cfb821a66d00c1b3ad6dd858117b66336ad42ac7a53de241dcacbd5961e2b22d4c5c1e6535cd0595645c813a0fc222a00" }, { "keyid": "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "sig": "42964abf028dd306e5a98920e90c5234dd01492259fbbfe6cafcb3d6076d34bfc296b2e57834a2f7039fdab89fee185dd2291abfec61a9bce256556a922ae006" }, { "keyid": "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8", "sig": "6ba3c3e8485f4298bff2547bc39237d0ba07d275028ef8a7b0d051a1a8867f7d38cf5973b4f5b4acd868820dfc5d4eb86646c87fe9b3cbe77e50a2dcaf963b04" }, { "keyid": "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b", "sig": "3e5189ac4c3c485c833ff697056e07eeae6cabc2de11a32c2a6a074d622ff22295d0ed8f3e42882caa4f59c09ceb3869a6d7b663439327e6f0e56c713ff1780e" }, { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "c5688ea77f9e7020c2664920af7d48814231dea91a1997d7adec74f9e167e55dea7797603ebea9f9352c4e91306f92cb81980b9351787d90cbf23e706a26730e" }, { "keyid": "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "sig": "17adcf644ace2f7e66abf30980426db96c2b1bf275ea728593433feeb90e39e4b2db1bbd5128f8fe56a1fa3db8afafe5fec2b40903b402015a9554c24d543704" }, { "keyid": "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "sig": "bed1c8e2e94072dc3c8bf0f823ada338ce7eae194d3d1df6596fb49efdf59733137d02f10b8521db6b00c696d45a1f4689ae350ee1a6cbd5dcc63700da70b401" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:20:22Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }1.timestamp.json000066400000000000000000000013001453140004500355100ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_targets/server/metadata{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "09068b028ead5c22678544002721e77c9cea836ed1034ea90c5757ac8fdd121a5bb9b54891306643e45816f63edb563a2faf88c0b92f4a6da7c9102fad1cde09" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:20:22Z", "meta": { "snapshot.json": { "hashes": { "sha256": "e4f270f0f80cd430d6b7596625a9f75664ca0d0fe27f42a9bfde9041d498b737", "sha512": "abeb893c9e16771a1336374ff257dcb6752c2ed3ad51de8f2a9799f2dd515fc3677bb8bb4f0420a2e423f2c87f26a2a04df9f380ea2d2d6dc6b7f9cbb337cd8f" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }2.root.json000066400000000000000000000071331453140004500345030ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_targets/server/metadata{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "5221883d99795f64519d986c33744cf101b50d098735859192a6536a62f2af62d28c7d3348f407fd4302b6c6be8198b5fb33b41a660bc998751626898e954105" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:20:22Z", "keys": { "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f6b299bcfb4e15ef652c80e9e3dda995acbb4bf71dce889a82ba70228e45a8bf" }, "scheme": "ed25519" }, "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e104199cda6e018d7d9044fa6225aa5dc9c2af5ee4e1c0fe6d16ad002220390d" }, "scheme": "ed25519" }, "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "9b1db36a5cad80284b5f40b040621e0e444f25ee09efa5c1fd6da4499c711bd5" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "fa386632ae9cc358ad0b56565edef362ad10d7fadb05bc8dc8995627372b990e" }, "scheme": "ed25519" }, "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "683d345a948a9baa343be4e44c076ca115da3838e72c28a06340c8ec1b3ef6be" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb", "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8" ], "threshold": 4 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 2 } }2.targets.json000066400000000000000000000043511453140004500351700ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_targets/server/metadata{ "signatures": [ { "keyid": "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "sig": "24efa3e5c6463307219075f5c4e816a3c2643024d36909735dbcd617c4300246b4384db27cefce01a8481b6c52f5dad2f3f416830912bf0b0d8398c14508e705" }, { "keyid": "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb", "sig": "f9304ff820dbb0f245baa68291ffaa901fa160d446a2fbe864e561afc74006c1f47e112eef2f51a78efa87335d2dc86392d0d3c84d69744366202caa35c80801" }, { "keyid": "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "sig": "d2e5e871f943281e59bce283ac874bdd9ec1ed461bf9a7dce48774b577fd481fe3e0975670fbc684d0bbc881974e832cef02ced09f0e533a621266b81b8f1307" }, { "keyid": "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "sig": "d3044468af5877042ef1585a83d8dc59bf4bd8f0b20837d6e73d39828ed15c1e13fb64ab02d9dbc2940768b02ac95d8cc17d05d9c9fea4200a98453b8463c408" }, { "keyid": "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8", "sig": "cb5da30b57e62e562cb8897adde8ecfc195d9d513ec59ed4931c5d8f1612518f644e7e78f674b8de646373747bcf08a4025351167c3a77d8eff382823d18670b" }, { "keyid": "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b", "sig": "eccd5243a12063c73c56ecad469da0c2ce96dbfd4f04c8f6c5b1456336193d92f6ef69efb5ec6e69d29e868983a576d2baab66e983b7ae7bee553f5fcd9ef909" }, { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "4892c826626dd62c189707efcd1b340ed6bf6e68833eefb1f94020bf59a9c4eefafacfa4a3998d149fca8ad5a30e12f8aa1a936821c45726d445403df0688508" }, { "keyid": "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "sig": "12b6240c2d9a922a35591e3d86877f4a407210f7e6d3bf270ef2e496394029f731f77cb3220a361b0b49b54f5564969aaa62262219db0a5b58b86fd0cf42420e" }, { "keyid": "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "sig": "894a62b4b9ae92e45298abd9465aeedeba40eb82a4ca014d41f1b58b6117d9ab3e89c2d152e2a7adce99396bc53c9f1324dbb4af8ff00e251f3f16e1ed52f103" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:20:22Z", "spec_version": "1.0.0", "targets": {}, "version": 2 } }client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_targets/server/metadata/root.json000066400000000000000000000071331453140004500344220ustar00rootroot00000000000000{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "5221883d99795f64519d986c33744cf101b50d098735859192a6536a62f2af62d28c7d3348f407fd4302b6c6be8198b5fb33b41a660bc998751626898e954105" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:20:22Z", "keys": { "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f6b299bcfb4e15ef652c80e9e3dda995acbb4bf71dce889a82ba70228e45a8bf" }, "scheme": "ed25519" }, "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e104199cda6e018d7d9044fa6225aa5dc9c2af5ee4e1c0fe6d16ad002220390d" }, "scheme": "ed25519" }, "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "9b1db36a5cad80284b5f40b040621e0e444f25ee09efa5c1fd6da4499c711bd5" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "fa386632ae9cc358ad0b56565edef362ad10d7fadb05bc8dc8995627372b990e" }, "scheme": "ed25519" }, "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "683d345a948a9baa343be4e44c076ca115da3838e72c28a06340c8ec1b3ef6be" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb", "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8" ], "threshold": 4 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 2 } }snapshot.json000066400000000000000000000006571453140004500352230ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_targets/server/metadata{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "8d1132037c4a0fb48600ecda532f1518a24e85aba93147021f763762793ff82e75fa5b7904d223085ceabbfe10206f667cd4951fab481b3712ab01115e85060a" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:20:22Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }targets.json000066400000000000000000000043511453140004500350300ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_targets/server/metadata{ "signatures": [ { "keyid": "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "sig": "24efa3e5c6463307219075f5c4e816a3c2643024d36909735dbcd617c4300246b4384db27cefce01a8481b6c52f5dad2f3f416830912bf0b0d8398c14508e705" }, { "keyid": "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb", "sig": "f9304ff820dbb0f245baa68291ffaa901fa160d446a2fbe864e561afc74006c1f47e112eef2f51a78efa87335d2dc86392d0d3c84d69744366202caa35c80801" }, { "keyid": "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "sig": "d2e5e871f943281e59bce283ac874bdd9ec1ed461bf9a7dce48774b577fd481fe3e0975670fbc684d0bbc881974e832cef02ced09f0e533a621266b81b8f1307" }, { "keyid": "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "sig": "d3044468af5877042ef1585a83d8dc59bf4bd8f0b20837d6e73d39828ed15c1e13fb64ab02d9dbc2940768b02ac95d8cc17d05d9c9fea4200a98453b8463c408" }, { "keyid": "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8", "sig": "cb5da30b57e62e562cb8897adde8ecfc195d9d513ec59ed4931c5d8f1612518f644e7e78f674b8de646373747bcf08a4025351167c3a77d8eff382823d18670b" }, { "keyid": "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b", "sig": "eccd5243a12063c73c56ecad469da0c2ce96dbfd4f04c8f6c5b1456336193d92f6ef69efb5ec6e69d29e868983a576d2baab66e983b7ae7bee553f5fcd9ef909" }, { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "4892c826626dd62c189707efcd1b340ed6bf6e68833eefb1f94020bf59a9c4eefafacfa4a3998d149fca8ad5a30e12f8aa1a936821c45726d445403df0688508" }, { "keyid": "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "sig": "12b6240c2d9a922a35591e3d86877f4a407210f7e6d3bf270ef2e496394029f731f77cb3220a361b0b49b54f5564969aaa62262219db0a5b58b86fd0cf42420e" }, { "keyid": "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "sig": "894a62b4b9ae92e45298abd9465aeedeba40eb82a4ca014d41f1b58b6117d9ab3e89c2d152e2a7adce99396bc53c9f1324dbb4af8ff00e251f3f16e1ed52f103" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:20:22Z", "spec_version": "1.0.0", "targets": {}, "version": 2 } }timestamp.json000066400000000000000000000013001453140004500353510ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_targets/server/metadata{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "09068b028ead5c22678544002721e77c9cea836ed1034ea90c5757ac8fdd121a5bb9b54891306643e45816f63edb563a2faf88c0b92f4a6da7c9102fad1cde09" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:20:22Z", "meta": { "snapshot.json": { "hashes": { "sha256": "e4f270f0f80cd430d6b7596625a9f75664ca0d0fe27f42a9bfde9041d498b737", "sha512": "abeb893c9e16771a1336374ff257dcb6752c2ed3ad51de8f2a9799f2dd515fc3677bb8bb4f0420a2e423f2c87f26a2a04df9f380ea2d2d6dc6b7f9cbb337cd8f" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_timestamp/000077500000000000000000000000001453140004500300045ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_timestamp/client/000077500000000000000000000000001453140004500312625ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_timestamp/client/metadata/000077500000000000000000000000001453140004500330425ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_timestamp/client/metadata/current/000077500000000000000000000000001453140004500345245ustar00rootroot000000000000001.root.json000066400000000000000000000120631453140004500364640ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_timestamp/client/metadata/current{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "87ccdd9f898665507c07b9b5ae4b19cc5069a35db47d2bb59fe31324c019f384701a650966965f680c2fb2e43950beaac3818c430a5e0450a2d61439273b4803" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:20:21Z", "keys": { "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f758af464295e62a1da4d3267be6d13f4aba9c7d52166d01b6bd5b4559496c9d" }, "scheme": "ed25519" }, "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f6b299bcfb4e15ef652c80e9e3dda995acbb4bf71dce889a82ba70228e45a8bf" }, "scheme": "ed25519" }, "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e104199cda6e018d7d9044fa6225aa5dc9c2af5ee4e1c0fe6d16ad002220390d" }, "scheme": "ed25519" }, "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "82f52e4503dbb364fabe8e5567f1cf909d4175d45468a021dfe75653db9ac98c" }, "scheme": "ed25519" }, "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "9b1db36a5cad80284b5f40b040621e0e444f25ee09efa5c1fd6da4499c711bd5" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "06e4dee0de7826c8d539a6112940b7459892b4ecaf696e67dc064aea0923f95c" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" }, "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "fa386632ae9cc358ad0b56565edef362ad10d7fadb05bc8dc8995627372b990e" }, "scheme": "ed25519" }, "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "683d345a948a9baa343be4e44c076ca115da3838e72c28a06340c8ec1b3ef6be" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b", "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb", "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8" ], "threshold": 4 } }, "spec_version": "1.0.0", "version": 1 } }1.snapshot.json000066400000000000000000000006571453140004500373460ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_timestamp/client/metadata/current{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "5939785ca69e19f3dd0e1c9a6fe36179625528fb36e30173a88dbdf139eb1ed7f9f3e0f4e0db075ff51a74141e70669cb329a042938369faa3ca1d5605c0980a" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:20:21Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }1.targets.json000066400000000000000000000006711453140004500371540ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_timestamp/client/metadata/current{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "6745efba317ff34aea61685be997d9ee18d02fee2445cfd9cef32da940d2497b12986b95edbc9be38302bbca90ade299697ad2506ce354b8a3ea9528898fab09" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:20:21Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }1.timestamp.json000066400000000000000000000047601453140004500375110ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_timestamp/client/metadata/current{ "signatures": [ { "keyid": "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "sig": "0d88a87a5c298a1629f784cdad65c1fc6bf65a2a5e6fe92912e86d0c86ef5a8d4a90b978b1b80c980fe5f04cc78f76b1fb388d964208c3136690b12054da4008" }, { "keyid": "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb", "sig": "570e7580e1087363f1c1ba92b97cb92d5157a21c044ad3ae3f7638b087c8d8257cade3db5d40e0006ef41fa90c7cc6fbff8fc3ebe91324edfcd4e539617f6c00" }, { "keyid": "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "sig": "4f7000d954a4133cb731c60f45bbfaf172327b866570f8f81035c8177cf0d1ec725fe4c1e48be94d649ee69a9434c0a00aff85aaf3198b242783569995d60c03" }, { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "af71d15c2434dbd9ed4e2eb05628227e9ce9ced8eb9546153544e928f35f18e9093c5ba3a5ee30d71d2000065e0a94a729e5db90e519839b3255c627922d5706" }, { "keyid": "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "sig": "952a8b5311c810be01ee3b79aeb837a408e53aa316d8b3b79843e27899f951fbd6b335507739c045582a6abc47d43912ba7533786342d1a726cf96c8b2464806" }, { "keyid": "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8", "sig": "58c5523a8f0b127b320772c1525ad3d5c98ce1217a178b02c97ea855a3a1e7d3037b5f7c21a485d6bf1815c11f4e56a874a6c4c72ab26590246ba7ce51c3f001" }, { "keyid": "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b", "sig": "5250b1ef0952043c6787cb0818e0bc9ab309e57ad40763471a06e72df759b952043b33de0b5f3d5ee5c08ab9143248dc5eabb81b236548cb8241a06a0d3bd405" }, { "keyid": "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "sig": "27735b3d6b7f6cb928f4b5ea689127d4f22213dc49560e3aa6043cb385a1cf2656bc806bbade810bb301c0ba906b638691ba0cf7557b5f7fb696a15c3a581005" }, { "keyid": "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "sig": "5d4076732895f6ef7419cbaab36e61e18e99c19320ef9fb94b9b34a7146f1d790940847986ed61fca47bfce36ab67f19e476232fb3d30dcc690c887c2eb9d704" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:20:21Z", "meta": { "snapshot.json": { "hashes": { "sha256": "47ceec303641a009684536b381ee11129a338e4f8a0ea30f99efa205a78265de", "sha512": "6d1e34a684483108365554f3c6996fba96f1f64892920436d2c4e27a399bb7b0cdd4fac07d1df250554ab2164e417be7391281b422a12ae26fb1dd619dc8a1c7" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }root.json000066400000000000000000000120631453140004500363250ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_timestamp/client/metadata/current{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "87ccdd9f898665507c07b9b5ae4b19cc5069a35db47d2bb59fe31324c019f384701a650966965f680c2fb2e43950beaac3818c430a5e0450a2d61439273b4803" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:20:21Z", "keys": { "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f758af464295e62a1da4d3267be6d13f4aba9c7d52166d01b6bd5b4559496c9d" }, "scheme": "ed25519" }, "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f6b299bcfb4e15ef652c80e9e3dda995acbb4bf71dce889a82ba70228e45a8bf" }, "scheme": "ed25519" }, "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e104199cda6e018d7d9044fa6225aa5dc9c2af5ee4e1c0fe6d16ad002220390d" }, "scheme": "ed25519" }, "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "82f52e4503dbb364fabe8e5567f1cf909d4175d45468a021dfe75653db9ac98c" }, "scheme": "ed25519" }, "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "9b1db36a5cad80284b5f40b040621e0e444f25ee09efa5c1fd6da4499c711bd5" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "06e4dee0de7826c8d539a6112940b7459892b4ecaf696e67dc064aea0923f95c" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" }, "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "fa386632ae9cc358ad0b56565edef362ad10d7fadb05bc8dc8995627372b990e" }, "scheme": "ed25519" }, "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "683d345a948a9baa343be4e44c076ca115da3838e72c28a06340c8ec1b3ef6be" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b", "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb", "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8" ], "threshold": 4 } }, "spec_version": "1.0.0", "version": 1 } }snapshot.json000066400000000000000000000006571453140004500372070ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_timestamp/client/metadata/current{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "5939785ca69e19f3dd0e1c9a6fe36179625528fb36e30173a88dbdf139eb1ed7f9f3e0f4e0db075ff51a74141e70669cb329a042938369faa3ca1d5605c0980a" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:20:21Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }targets.json000066400000000000000000000006711453140004500370150ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_timestamp/client/metadata/current{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "6745efba317ff34aea61685be997d9ee18d02fee2445cfd9cef32da940d2497b12986b95edbc9be38302bbca90ade299697ad2506ce354b8a3ea9528898fab09" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:20:21Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }timestamp.json000066400000000000000000000047601453140004500373520ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_timestamp/client/metadata/current{ "signatures": [ { "keyid": "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "sig": "0d88a87a5c298a1629f784cdad65c1fc6bf65a2a5e6fe92912e86d0c86ef5a8d4a90b978b1b80c980fe5f04cc78f76b1fb388d964208c3136690b12054da4008" }, { "keyid": "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb", "sig": "570e7580e1087363f1c1ba92b97cb92d5157a21c044ad3ae3f7638b087c8d8257cade3db5d40e0006ef41fa90c7cc6fbff8fc3ebe91324edfcd4e539617f6c00" }, { "keyid": "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "sig": "4f7000d954a4133cb731c60f45bbfaf172327b866570f8f81035c8177cf0d1ec725fe4c1e48be94d649ee69a9434c0a00aff85aaf3198b242783569995d60c03" }, { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "af71d15c2434dbd9ed4e2eb05628227e9ce9ced8eb9546153544e928f35f18e9093c5ba3a5ee30d71d2000065e0a94a729e5db90e519839b3255c627922d5706" }, { "keyid": "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "sig": "952a8b5311c810be01ee3b79aeb837a408e53aa316d8b3b79843e27899f951fbd6b335507739c045582a6abc47d43912ba7533786342d1a726cf96c8b2464806" }, { "keyid": "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8", "sig": "58c5523a8f0b127b320772c1525ad3d5c98ce1217a178b02c97ea855a3a1e7d3037b5f7c21a485d6bf1815c11f4e56a874a6c4c72ab26590246ba7ce51c3f001" }, { "keyid": "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b", "sig": "5250b1ef0952043c6787cb0818e0bc9ab309e57ad40763471a06e72df759b952043b33de0b5f3d5ee5c08ab9143248dc5eabb81b236548cb8241a06a0d3bd405" }, { "keyid": "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "sig": "27735b3d6b7f6cb928f4b5ea689127d4f22213dc49560e3aa6043cb385a1cf2656bc806bbade810bb301c0ba906b638691ba0cf7557b5f7fb696a15c3a581005" }, { "keyid": "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "sig": "5d4076732895f6ef7419cbaab36e61e18e99c19320ef9fb94b9b34a7146f1d790940847986ed61fca47bfce36ab67f19e476232fb3d30dcc690c887c2eb9d704" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:20:21Z", "meta": { "snapshot.json": { "hashes": { "sha256": "47ceec303641a009684536b381ee11129a338e4f8a0ea30f99efa205a78265de", "sha512": "6d1e34a684483108365554f3c6996fba96f1f64892920436d2c4e27a399bb7b0cdd4fac07d1df250554ab2164e417be7391281b422a12ae26fb1dd619dc8a1c7" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }previous/000077500000000000000000000000001453140004500346375ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_timestamp/client/metadata1.root.json000066400000000000000000000120631453140004500366560ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_timestamp/client/metadata/previous{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "87ccdd9f898665507c07b9b5ae4b19cc5069a35db47d2bb59fe31324c019f384701a650966965f680c2fb2e43950beaac3818c430a5e0450a2d61439273b4803" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:20:21Z", "keys": { "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f758af464295e62a1da4d3267be6d13f4aba9c7d52166d01b6bd5b4559496c9d" }, "scheme": "ed25519" }, "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f6b299bcfb4e15ef652c80e9e3dda995acbb4bf71dce889a82ba70228e45a8bf" }, "scheme": "ed25519" }, "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e104199cda6e018d7d9044fa6225aa5dc9c2af5ee4e1c0fe6d16ad002220390d" }, "scheme": "ed25519" }, "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "82f52e4503dbb364fabe8e5567f1cf909d4175d45468a021dfe75653db9ac98c" }, "scheme": "ed25519" }, "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "9b1db36a5cad80284b5f40b040621e0e444f25ee09efa5c1fd6da4499c711bd5" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "06e4dee0de7826c8d539a6112940b7459892b4ecaf696e67dc064aea0923f95c" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" }, "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "fa386632ae9cc358ad0b56565edef362ad10d7fadb05bc8dc8995627372b990e" }, "scheme": "ed25519" }, "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "683d345a948a9baa343be4e44c076ca115da3838e72c28a06340c8ec1b3ef6be" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b", "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb", "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8" ], "threshold": 4 } }, "spec_version": "1.0.0", "version": 1 } }1.snapshot.json000066400000000000000000000006571453140004500375400ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_timestamp/client/metadata/previous{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "5939785ca69e19f3dd0e1c9a6fe36179625528fb36e30173a88dbdf139eb1ed7f9f3e0f4e0db075ff51a74141e70669cb329a042938369faa3ca1d5605c0980a" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:20:21Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }1.targets.json000066400000000000000000000006711453140004500373460ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_timestamp/client/metadata/previous{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "6745efba317ff34aea61685be997d9ee18d02fee2445cfd9cef32da940d2497b12986b95edbc9be38302bbca90ade299697ad2506ce354b8a3ea9528898fab09" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:20:21Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }1.timestamp.json000066400000000000000000000047601453140004500377030ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_timestamp/client/metadata/previous{ "signatures": [ { "keyid": "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "sig": "0d88a87a5c298a1629f784cdad65c1fc6bf65a2a5e6fe92912e86d0c86ef5a8d4a90b978b1b80c980fe5f04cc78f76b1fb388d964208c3136690b12054da4008" }, { "keyid": "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb", "sig": "570e7580e1087363f1c1ba92b97cb92d5157a21c044ad3ae3f7638b087c8d8257cade3db5d40e0006ef41fa90c7cc6fbff8fc3ebe91324edfcd4e539617f6c00" }, { "keyid": "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "sig": "4f7000d954a4133cb731c60f45bbfaf172327b866570f8f81035c8177cf0d1ec725fe4c1e48be94d649ee69a9434c0a00aff85aaf3198b242783569995d60c03" }, { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "af71d15c2434dbd9ed4e2eb05628227e9ce9ced8eb9546153544e928f35f18e9093c5ba3a5ee30d71d2000065e0a94a729e5db90e519839b3255c627922d5706" }, { "keyid": "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "sig": "952a8b5311c810be01ee3b79aeb837a408e53aa316d8b3b79843e27899f951fbd6b335507739c045582a6abc47d43912ba7533786342d1a726cf96c8b2464806" }, { "keyid": "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8", "sig": "58c5523a8f0b127b320772c1525ad3d5c98ce1217a178b02c97ea855a3a1e7d3037b5f7c21a485d6bf1815c11f4e56a874a6c4c72ab26590246ba7ce51c3f001" }, { "keyid": "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b", "sig": "5250b1ef0952043c6787cb0818e0bc9ab309e57ad40763471a06e72df759b952043b33de0b5f3d5ee5c08ab9143248dc5eabb81b236548cb8241a06a0d3bd405" }, { "keyid": "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "sig": "27735b3d6b7f6cb928f4b5ea689127d4f22213dc49560e3aa6043cb385a1cf2656bc806bbade810bb301c0ba906b638691ba0cf7557b5f7fb696a15c3a581005" }, { "keyid": "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "sig": "5d4076732895f6ef7419cbaab36e61e18e99c19320ef9fb94b9b34a7146f1d790940847986ed61fca47bfce36ab67f19e476232fb3d30dcc690c887c2eb9d704" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:20:21Z", "meta": { "snapshot.json": { "hashes": { "sha256": "47ceec303641a009684536b381ee11129a338e4f8a0ea30f99efa205a78265de", "sha512": "6d1e34a684483108365554f3c6996fba96f1f64892920436d2c4e27a399bb7b0cdd4fac07d1df250554ab2164e417be7391281b422a12ae26fb1dd619dc8a1c7" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }root.json000066400000000000000000000120631453140004500365170ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_timestamp/client/metadata/previous{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "87ccdd9f898665507c07b9b5ae4b19cc5069a35db47d2bb59fe31324c019f384701a650966965f680c2fb2e43950beaac3818c430a5e0450a2d61439273b4803" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:20:21Z", "keys": { "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f758af464295e62a1da4d3267be6d13f4aba9c7d52166d01b6bd5b4559496c9d" }, "scheme": "ed25519" }, "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f6b299bcfb4e15ef652c80e9e3dda995acbb4bf71dce889a82ba70228e45a8bf" }, "scheme": "ed25519" }, "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e104199cda6e018d7d9044fa6225aa5dc9c2af5ee4e1c0fe6d16ad002220390d" }, "scheme": "ed25519" }, "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "82f52e4503dbb364fabe8e5567f1cf909d4175d45468a021dfe75653db9ac98c" }, "scheme": "ed25519" }, "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "9b1db36a5cad80284b5f40b040621e0e444f25ee09efa5c1fd6da4499c711bd5" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "06e4dee0de7826c8d539a6112940b7459892b4ecaf696e67dc064aea0923f95c" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" }, "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "fa386632ae9cc358ad0b56565edef362ad10d7fadb05bc8dc8995627372b990e" }, "scheme": "ed25519" }, "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "683d345a948a9baa343be4e44c076ca115da3838e72c28a06340c8ec1b3ef6be" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b", "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb", "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8" ], "threshold": 4 } }, "spec_version": "1.0.0", "version": 1 } }snapshot.json000066400000000000000000000006571453140004500374010ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_timestamp/client/metadata/previous{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "5939785ca69e19f3dd0e1c9a6fe36179625528fb36e30173a88dbdf139eb1ed7f9f3e0f4e0db075ff51a74141e70669cb329a042938369faa3ca1d5605c0980a" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:20:21Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }targets.json000066400000000000000000000006711453140004500372070ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_timestamp/client/metadata/previous{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "6745efba317ff34aea61685be997d9ee18d02fee2445cfd9cef32da940d2497b12986b95edbc9be38302bbca90ade299697ad2506ce354b8a3ea9528898fab09" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:20:21Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }timestamp.json000066400000000000000000000047601453140004500375440ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_timestamp/client/metadata/previous{ "signatures": [ { "keyid": "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "sig": "0d88a87a5c298a1629f784cdad65c1fc6bf65a2a5e6fe92912e86d0c86ef5a8d4a90b978b1b80c980fe5f04cc78f76b1fb388d964208c3136690b12054da4008" }, { "keyid": "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb", "sig": "570e7580e1087363f1c1ba92b97cb92d5157a21c044ad3ae3f7638b087c8d8257cade3db5d40e0006ef41fa90c7cc6fbff8fc3ebe91324edfcd4e539617f6c00" }, { "keyid": "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "sig": "4f7000d954a4133cb731c60f45bbfaf172327b866570f8f81035c8177cf0d1ec725fe4c1e48be94d649ee69a9434c0a00aff85aaf3198b242783569995d60c03" }, { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "af71d15c2434dbd9ed4e2eb05628227e9ce9ced8eb9546153544e928f35f18e9093c5ba3a5ee30d71d2000065e0a94a729e5db90e519839b3255c627922d5706" }, { "keyid": "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "sig": "952a8b5311c810be01ee3b79aeb837a408e53aa316d8b3b79843e27899f951fbd6b335507739c045582a6abc47d43912ba7533786342d1a726cf96c8b2464806" }, { "keyid": "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8", "sig": "58c5523a8f0b127b320772c1525ad3d5c98ce1217a178b02c97ea855a3a1e7d3037b5f7c21a485d6bf1815c11f4e56a874a6c4c72ab26590246ba7ce51c3f001" }, { "keyid": "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b", "sig": "5250b1ef0952043c6787cb0818e0bc9ab309e57ad40763471a06e72df759b952043b33de0b5f3d5ee5c08ab9143248dc5eabb81b236548cb8241a06a0d3bd405" }, { "keyid": "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "sig": "27735b3d6b7f6cb928f4b5ea689127d4f22213dc49560e3aa6043cb385a1cf2656bc806bbade810bb301c0ba906b638691ba0cf7557b5f7fb696a15c3a581005" }, { "keyid": "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "sig": "5d4076732895f6ef7419cbaab36e61e18e99c19320ef9fb94b9b34a7146f1d790940847986ed61fca47bfce36ab67f19e476232fb3d30dcc690c887c2eb9d704" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:20:21Z", "meta": { "snapshot.json": { "hashes": { "sha256": "47ceec303641a009684536b381ee11129a338e4f8a0ea30f99efa205a78265de", "sha512": "6d1e34a684483108365554f3c6996fba96f1f64892920436d2c4e27a399bb7b0cdd4fac07d1df250554ab2164e417be7391281b422a12ae26fb1dd619dc8a1c7" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_timestamp/hash.txt000066400000000000000000000001001453140004500314570ustar00rootroot000000000000002d2c91c4805412779df23c78ae6477ea01ca2bccc740eb1750b6b8d4e02d527aclient/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_timestamp/server/000077500000000000000000000000001453140004500313125ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_timestamp/server/metadata.staged/000077500000000000000000000000001453140004500343405ustar00rootroot000000000000001.root.json000066400000000000000000000120631453140004500363000ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_timestamp/server/metadata.staged{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "87ccdd9f898665507c07b9b5ae4b19cc5069a35db47d2bb59fe31324c019f384701a650966965f680c2fb2e43950beaac3818c430a5e0450a2d61439273b4803" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:20:21Z", "keys": { "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f758af464295e62a1da4d3267be6d13f4aba9c7d52166d01b6bd5b4559496c9d" }, "scheme": "ed25519" }, "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f6b299bcfb4e15ef652c80e9e3dda995acbb4bf71dce889a82ba70228e45a8bf" }, "scheme": "ed25519" }, "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e104199cda6e018d7d9044fa6225aa5dc9c2af5ee4e1c0fe6d16ad002220390d" }, "scheme": "ed25519" }, "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "82f52e4503dbb364fabe8e5567f1cf909d4175d45468a021dfe75653db9ac98c" }, "scheme": "ed25519" }, "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "9b1db36a5cad80284b5f40b040621e0e444f25ee09efa5c1fd6da4499c711bd5" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "06e4dee0de7826c8d539a6112940b7459892b4ecaf696e67dc064aea0923f95c" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" }, "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "fa386632ae9cc358ad0b56565edef362ad10d7fadb05bc8dc8995627372b990e" }, "scheme": "ed25519" }, "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "683d345a948a9baa343be4e44c076ca115da3838e72c28a06340c8ec1b3ef6be" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b", "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb", "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8" ], "threshold": 4 } }, "spec_version": "1.0.0", "version": 1 } }1.snapshot.json000066400000000000000000000006571453140004500371620ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_timestamp/server/metadata.staged{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "5939785ca69e19f3dd0e1c9a6fe36179625528fb36e30173a88dbdf139eb1ed7f9f3e0f4e0db075ff51a74141e70669cb329a042938369faa3ca1d5605c0980a" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:20:21Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }1.targets.json000066400000000000000000000006711453140004500367700ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_timestamp/server/metadata.staged{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "6745efba317ff34aea61685be997d9ee18d02fee2445cfd9cef32da940d2497b12986b95edbc9be38302bbca90ade299697ad2506ce354b8a3ea9528898fab09" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:20:21Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }1.timestamp.json000066400000000000000000000047601453140004500373250ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_timestamp/server/metadata.staged{ "signatures": [ { "keyid": "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "sig": "0d88a87a5c298a1629f784cdad65c1fc6bf65a2a5e6fe92912e86d0c86ef5a8d4a90b978b1b80c980fe5f04cc78f76b1fb388d964208c3136690b12054da4008" }, { "keyid": "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb", "sig": "570e7580e1087363f1c1ba92b97cb92d5157a21c044ad3ae3f7638b087c8d8257cade3db5d40e0006ef41fa90c7cc6fbff8fc3ebe91324edfcd4e539617f6c00" }, { "keyid": "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "sig": "4f7000d954a4133cb731c60f45bbfaf172327b866570f8f81035c8177cf0d1ec725fe4c1e48be94d649ee69a9434c0a00aff85aaf3198b242783569995d60c03" }, { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "af71d15c2434dbd9ed4e2eb05628227e9ce9ced8eb9546153544e928f35f18e9093c5ba3a5ee30d71d2000065e0a94a729e5db90e519839b3255c627922d5706" }, { "keyid": "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "sig": "952a8b5311c810be01ee3b79aeb837a408e53aa316d8b3b79843e27899f951fbd6b335507739c045582a6abc47d43912ba7533786342d1a726cf96c8b2464806" }, { "keyid": "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8", "sig": "58c5523a8f0b127b320772c1525ad3d5c98ce1217a178b02c97ea855a3a1e7d3037b5f7c21a485d6bf1815c11f4e56a874a6c4c72ab26590246ba7ce51c3f001" }, { "keyid": "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b", "sig": "5250b1ef0952043c6787cb0818e0bc9ab309e57ad40763471a06e72df759b952043b33de0b5f3d5ee5c08ab9143248dc5eabb81b236548cb8241a06a0d3bd405" }, { "keyid": "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "sig": "27735b3d6b7f6cb928f4b5ea689127d4f22213dc49560e3aa6043cb385a1cf2656bc806bbade810bb301c0ba906b638691ba0cf7557b5f7fb696a15c3a581005" }, { "keyid": "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "sig": "5d4076732895f6ef7419cbaab36e61e18e99c19320ef9fb94b9b34a7146f1d790940847986ed61fca47bfce36ab67f19e476232fb3d30dcc690c887c2eb9d704" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:20:21Z", "meta": { "snapshot.json": { "hashes": { "sha256": "47ceec303641a009684536b381ee11129a338e4f8a0ea30f99efa205a78265de", "sha512": "6d1e34a684483108365554f3c6996fba96f1f64892920436d2c4e27a399bb7b0cdd4fac07d1df250554ab2164e417be7391281b422a12ae26fb1dd619dc8a1c7" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }2.root.json000066400000000000000000000071331453140004500363030ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_timestamp/server/metadata.staged{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "af983d51f4deacf728c3076b7a5c79dd8c8d2c1c25071ec1523ca4d18f47e1d5e39a411ae18f437267079300fe0c74331e0f3231017f9a39a2f11628079e3406" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:20:21Z", "keys": { "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f6b299bcfb4e15ef652c80e9e3dda995acbb4bf71dce889a82ba70228e45a8bf" }, "scheme": "ed25519" }, "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e104199cda6e018d7d9044fa6225aa5dc9c2af5ee4e1c0fe6d16ad002220390d" }, "scheme": "ed25519" }, "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "9b1db36a5cad80284b5f40b040621e0e444f25ee09efa5c1fd6da4499c711bd5" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" }, "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "fa386632ae9cc358ad0b56565edef362ad10d7fadb05bc8dc8995627372b990e" }, "scheme": "ed25519" }, "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "683d345a948a9baa343be4e44c076ca115da3838e72c28a06340c8ec1b3ef6be" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb", "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8" ], "threshold": 4 } }, "spec_version": "1.0.0", "version": 2 } }2.timestamp.json000066400000000000000000000047601453140004500373260ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_timestamp/server/metadata.staged{ "signatures": [ { "keyid": "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "sig": "ec1d63e79fadec3dddb5852a1007fa7e5ed4b746b3d608ba9d3fa6fa2f25afa308a72474d820fe2b88adf4f9d6352e57fe7475725e539858f1ab07ab7a5ca305" }, { "keyid": "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb", "sig": "c3021d40208c80b25034d7d7d29d2faeeb7b0e4e3238430a0f2c0435337d3b2c47e87f4ec2c5692dc2aec01dee8e72feea2b6f72cb17591aca1e5252fe2c4f0b" }, { "keyid": "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "sig": "dbe051e077a6d7ad54ad39c41e3fc497c65b8f5cd9ac9b9c7bf0900dba979614198922232fcd2ef66ec9d5e571b9e936cd997c41e74c55abce8448d13b178007" }, { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "76946f3caeba163ff8fcaa9892f92457a9531da85092ddff660d8af2859fc94ea714e1962ab704a4e028fe48b195b850d6c29d13cf668bb2bf41b0814229b402" }, { "keyid": "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "sig": "9f5c7234e8c67e15fa326bc693595b6ac75aacbec4c5c6bd07bb4c8d8e9bfb35d1ee121987629e45fbb2f4fdcd6593a1f4cd1231b361b89832dcc19be248f70a" }, { "keyid": "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8", "sig": "d33845b0bfc6ace034377acc4e043dedd3c26c1d58b2f11bb3fa9416c86f55a396c3547d5f95662cbafe231af913752be851947413fca7fa5ec86948aae8ae0c" }, { "keyid": "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b", "sig": "f94b9c239f481f74715627accec1f2794faeefbc0a110e4ac4c8ab0f3451812042ea5b5f85b66b568ea2b00ac46b3d5496b184bc6a59fdee1361b6dbf5e6d90d" }, { "keyid": "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "sig": "b17e9fed31051906f6d31c81db44c025718ced629d2d2914e09c0da4f303163bbfbd11673491aafcce6e35226b3c2f1a6fefa3ff5f39b838d4c3d736e521ac07" }, { "keyid": "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "sig": "b82b9a726284bbc488f3fa8e7b91cd641b63aa0488c7706d7a8a09eecd9a12ce99e02fe77e0994084e72316476e26df42aac2d89616674e40c82a1c3f7082409" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:20:21Z", "meta": { "snapshot.json": { "hashes": { "sha256": "47ceec303641a009684536b381ee11129a338e4f8a0ea30f99efa205a78265de", "sha512": "6d1e34a684483108365554f3c6996fba96f1f64892920436d2c4e27a399bb7b0cdd4fac07d1df250554ab2164e417be7391281b422a12ae26fb1dd619dc8a1c7" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 2 } }root.json000066400000000000000000000071331453140004500361430ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_timestamp/server/metadata.staged{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "af983d51f4deacf728c3076b7a5c79dd8c8d2c1c25071ec1523ca4d18f47e1d5e39a411ae18f437267079300fe0c74331e0f3231017f9a39a2f11628079e3406" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:20:21Z", "keys": { "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f6b299bcfb4e15ef652c80e9e3dda995acbb4bf71dce889a82ba70228e45a8bf" }, "scheme": "ed25519" }, "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e104199cda6e018d7d9044fa6225aa5dc9c2af5ee4e1c0fe6d16ad002220390d" }, "scheme": "ed25519" }, "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "9b1db36a5cad80284b5f40b040621e0e444f25ee09efa5c1fd6da4499c711bd5" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" }, "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "fa386632ae9cc358ad0b56565edef362ad10d7fadb05bc8dc8995627372b990e" }, "scheme": "ed25519" }, "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "683d345a948a9baa343be4e44c076ca115da3838e72c28a06340c8ec1b3ef6be" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb", "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8" ], "threshold": 4 } }, "spec_version": "1.0.0", "version": 2 } }snapshot.json000066400000000000000000000006571453140004500370230ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_timestamp/server/metadata.staged{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "5939785ca69e19f3dd0e1c9a6fe36179625528fb36e30173a88dbdf139eb1ed7f9f3e0f4e0db075ff51a74141e70669cb329a042938369faa3ca1d5605c0980a" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:20:21Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }targets.json000066400000000000000000000006711453140004500366310ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_timestamp/server/metadata.staged{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "6745efba317ff34aea61685be997d9ee18d02fee2445cfd9cef32da940d2497b12986b95edbc9be38302bbca90ade299697ad2506ce354b8a3ea9528898fab09" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:20:21Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }timestamp.json000066400000000000000000000047601453140004500371660ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_timestamp/server/metadata.staged{ "signatures": [ { "keyid": "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "sig": "ec1d63e79fadec3dddb5852a1007fa7e5ed4b746b3d608ba9d3fa6fa2f25afa308a72474d820fe2b88adf4f9d6352e57fe7475725e539858f1ab07ab7a5ca305" }, { "keyid": "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb", "sig": "c3021d40208c80b25034d7d7d29d2faeeb7b0e4e3238430a0f2c0435337d3b2c47e87f4ec2c5692dc2aec01dee8e72feea2b6f72cb17591aca1e5252fe2c4f0b" }, { "keyid": "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "sig": "dbe051e077a6d7ad54ad39c41e3fc497c65b8f5cd9ac9b9c7bf0900dba979614198922232fcd2ef66ec9d5e571b9e936cd997c41e74c55abce8448d13b178007" }, { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "76946f3caeba163ff8fcaa9892f92457a9531da85092ddff660d8af2859fc94ea714e1962ab704a4e028fe48b195b850d6c29d13cf668bb2bf41b0814229b402" }, { "keyid": "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "sig": "9f5c7234e8c67e15fa326bc693595b6ac75aacbec4c5c6bd07bb4c8d8e9bfb35d1ee121987629e45fbb2f4fdcd6593a1f4cd1231b361b89832dcc19be248f70a" }, { "keyid": "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8", "sig": "d33845b0bfc6ace034377acc4e043dedd3c26c1d58b2f11bb3fa9416c86f55a396c3547d5f95662cbafe231af913752be851947413fca7fa5ec86948aae8ae0c" }, { "keyid": "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b", "sig": "f94b9c239f481f74715627accec1f2794faeefbc0a110e4ac4c8ab0f3451812042ea5b5f85b66b568ea2b00ac46b3d5496b184bc6a59fdee1361b6dbf5e6d90d" }, { "keyid": "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "sig": "b17e9fed31051906f6d31c81db44c025718ced629d2d2914e09c0da4f303163bbfbd11673491aafcce6e35226b3c2f1a6fefa3ff5f39b838d4c3d736e521ac07" }, { "keyid": "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "sig": "b82b9a726284bbc488f3fa8e7b91cd641b63aa0488c7706d7a8a09eecd9a12ce99e02fe77e0994084e72316476e26df42aac2d89616674e40c82a1c3f7082409" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:20:21Z", "meta": { "snapshot.json": { "hashes": { "sha256": "47ceec303641a009684536b381ee11129a338e4f8a0ea30f99efa205a78265de", "sha512": "6d1e34a684483108365554f3c6996fba96f1f64892920436d2c4e27a399bb7b0cdd4fac07d1df250554ab2164e417be7391281b422a12ae26fb1dd619dc8a1c7" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 2 } }client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_timestamp/server/metadata/000077500000000000000000000000001453140004500330725ustar00rootroot000000000000001.root.json000066400000000000000000000120631453140004500350320ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_timestamp/server/metadata{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "87ccdd9f898665507c07b9b5ae4b19cc5069a35db47d2bb59fe31324c019f384701a650966965f680c2fb2e43950beaac3818c430a5e0450a2d61439273b4803" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:20:21Z", "keys": { "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f758af464295e62a1da4d3267be6d13f4aba9c7d52166d01b6bd5b4559496c9d" }, "scheme": "ed25519" }, "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f6b299bcfb4e15ef652c80e9e3dda995acbb4bf71dce889a82ba70228e45a8bf" }, "scheme": "ed25519" }, "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e104199cda6e018d7d9044fa6225aa5dc9c2af5ee4e1c0fe6d16ad002220390d" }, "scheme": "ed25519" }, "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "82f52e4503dbb364fabe8e5567f1cf909d4175d45468a021dfe75653db9ac98c" }, "scheme": "ed25519" }, "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "9b1db36a5cad80284b5f40b040621e0e444f25ee09efa5c1fd6da4499c711bd5" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "06e4dee0de7826c8d539a6112940b7459892b4ecaf696e67dc064aea0923f95c" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" }, "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "fa386632ae9cc358ad0b56565edef362ad10d7fadb05bc8dc8995627372b990e" }, "scheme": "ed25519" }, "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "683d345a948a9baa343be4e44c076ca115da3838e72c28a06340c8ec1b3ef6be" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b", "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb", "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8" ], "threshold": 4 } }, "spec_version": "1.0.0", "version": 1 } }1.snapshot.json000066400000000000000000000006571453140004500357140ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_timestamp/server/metadata{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "5939785ca69e19f3dd0e1c9a6fe36179625528fb36e30173a88dbdf139eb1ed7f9f3e0f4e0db075ff51a74141e70669cb329a042938369faa3ca1d5605c0980a" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:20:21Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }1.targets.json000066400000000000000000000006711453140004500355220ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_timestamp/server/metadata{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "6745efba317ff34aea61685be997d9ee18d02fee2445cfd9cef32da940d2497b12986b95edbc9be38302bbca90ade299697ad2506ce354b8a3ea9528898fab09" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:20:21Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }1.timestamp.json000066400000000000000000000047601453140004500360570ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_timestamp/server/metadata{ "signatures": [ { "keyid": "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "sig": "0d88a87a5c298a1629f784cdad65c1fc6bf65a2a5e6fe92912e86d0c86ef5a8d4a90b978b1b80c980fe5f04cc78f76b1fb388d964208c3136690b12054da4008" }, { "keyid": "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb", "sig": "570e7580e1087363f1c1ba92b97cb92d5157a21c044ad3ae3f7638b087c8d8257cade3db5d40e0006ef41fa90c7cc6fbff8fc3ebe91324edfcd4e539617f6c00" }, { "keyid": "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "sig": "4f7000d954a4133cb731c60f45bbfaf172327b866570f8f81035c8177cf0d1ec725fe4c1e48be94d649ee69a9434c0a00aff85aaf3198b242783569995d60c03" }, { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "af71d15c2434dbd9ed4e2eb05628227e9ce9ced8eb9546153544e928f35f18e9093c5ba3a5ee30d71d2000065e0a94a729e5db90e519839b3255c627922d5706" }, { "keyid": "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "sig": "952a8b5311c810be01ee3b79aeb837a408e53aa316d8b3b79843e27899f951fbd6b335507739c045582a6abc47d43912ba7533786342d1a726cf96c8b2464806" }, { "keyid": "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8", "sig": "58c5523a8f0b127b320772c1525ad3d5c98ce1217a178b02c97ea855a3a1e7d3037b5f7c21a485d6bf1815c11f4e56a874a6c4c72ab26590246ba7ce51c3f001" }, { "keyid": "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b", "sig": "5250b1ef0952043c6787cb0818e0bc9ab309e57ad40763471a06e72df759b952043b33de0b5f3d5ee5c08ab9143248dc5eabb81b236548cb8241a06a0d3bd405" }, { "keyid": "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "sig": "27735b3d6b7f6cb928f4b5ea689127d4f22213dc49560e3aa6043cb385a1cf2656bc806bbade810bb301c0ba906b638691ba0cf7557b5f7fb696a15c3a581005" }, { "keyid": "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "sig": "5d4076732895f6ef7419cbaab36e61e18e99c19320ef9fb94b9b34a7146f1d790940847986ed61fca47bfce36ab67f19e476232fb3d30dcc690c887c2eb9d704" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:20:21Z", "meta": { "snapshot.json": { "hashes": { "sha256": "47ceec303641a009684536b381ee11129a338e4f8a0ea30f99efa205a78265de", "sha512": "6d1e34a684483108365554f3c6996fba96f1f64892920436d2c4e27a399bb7b0cdd4fac07d1df250554ab2164e417be7391281b422a12ae26fb1dd619dc8a1c7" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }2.root.json000066400000000000000000000071331453140004500350350ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_timestamp/server/metadata{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "af983d51f4deacf728c3076b7a5c79dd8c8d2c1c25071ec1523ca4d18f47e1d5e39a411ae18f437267079300fe0c74331e0f3231017f9a39a2f11628079e3406" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:20:21Z", "keys": { "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f6b299bcfb4e15ef652c80e9e3dda995acbb4bf71dce889a82ba70228e45a8bf" }, "scheme": "ed25519" }, "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e104199cda6e018d7d9044fa6225aa5dc9c2af5ee4e1c0fe6d16ad002220390d" }, "scheme": "ed25519" }, "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "9b1db36a5cad80284b5f40b040621e0e444f25ee09efa5c1fd6da4499c711bd5" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" }, "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "fa386632ae9cc358ad0b56565edef362ad10d7fadb05bc8dc8995627372b990e" }, "scheme": "ed25519" }, "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "683d345a948a9baa343be4e44c076ca115da3838e72c28a06340c8ec1b3ef6be" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb", "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8" ], "threshold": 4 } }, "spec_version": "1.0.0", "version": 2 } }2.timestamp.json000066400000000000000000000047601453140004500360600ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_timestamp/server/metadata{ "signatures": [ { "keyid": "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "sig": "ec1d63e79fadec3dddb5852a1007fa7e5ed4b746b3d608ba9d3fa6fa2f25afa308a72474d820fe2b88adf4f9d6352e57fe7475725e539858f1ab07ab7a5ca305" }, { "keyid": "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb", "sig": "c3021d40208c80b25034d7d7d29d2faeeb7b0e4e3238430a0f2c0435337d3b2c47e87f4ec2c5692dc2aec01dee8e72feea2b6f72cb17591aca1e5252fe2c4f0b" }, { "keyid": "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "sig": "dbe051e077a6d7ad54ad39c41e3fc497c65b8f5cd9ac9b9c7bf0900dba979614198922232fcd2ef66ec9d5e571b9e936cd997c41e74c55abce8448d13b178007" }, { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "76946f3caeba163ff8fcaa9892f92457a9531da85092ddff660d8af2859fc94ea714e1962ab704a4e028fe48b195b850d6c29d13cf668bb2bf41b0814229b402" }, { "keyid": "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "sig": "9f5c7234e8c67e15fa326bc693595b6ac75aacbec4c5c6bd07bb4c8d8e9bfb35d1ee121987629e45fbb2f4fdcd6593a1f4cd1231b361b89832dcc19be248f70a" }, { "keyid": "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8", "sig": "d33845b0bfc6ace034377acc4e043dedd3c26c1d58b2f11bb3fa9416c86f55a396c3547d5f95662cbafe231af913752be851947413fca7fa5ec86948aae8ae0c" }, { "keyid": "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b", "sig": "f94b9c239f481f74715627accec1f2794faeefbc0a110e4ac4c8ab0f3451812042ea5b5f85b66b568ea2b00ac46b3d5496b184bc6a59fdee1361b6dbf5e6d90d" }, { "keyid": "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "sig": "b17e9fed31051906f6d31c81db44c025718ced629d2d2914e09c0da4f303163bbfbd11673491aafcce6e35226b3c2f1a6fefa3ff5f39b838d4c3d736e521ac07" }, { "keyid": "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "sig": "b82b9a726284bbc488f3fa8e7b91cd641b63aa0488c7706d7a8a09eecd9a12ce99e02fe77e0994084e72316476e26df42aac2d89616674e40c82a1c3f7082409" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:20:21Z", "meta": { "snapshot.json": { "hashes": { "sha256": "47ceec303641a009684536b381ee11129a338e4f8a0ea30f99efa205a78265de", "sha512": "6d1e34a684483108365554f3c6996fba96f1f64892920436d2c4e27a399bb7b0cdd4fac07d1df250554ab2164e417be7391281b422a12ae26fb1dd619dc8a1c7" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 2 } }root.json000066400000000000000000000071331453140004500346750ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_timestamp/server/metadata{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "af983d51f4deacf728c3076b7a5c79dd8c8d2c1c25071ec1523ca4d18f47e1d5e39a411ae18f437267079300fe0c74331e0f3231017f9a39a2f11628079e3406" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2031-09-09T23:20:21Z", "keys": { "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f6b299bcfb4e15ef652c80e9e3dda995acbb4bf71dce889a82ba70228e45a8bf" }, "scheme": "ed25519" }, "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e104199cda6e018d7d9044fa6225aa5dc9c2af5ee4e1c0fe6d16ad002220390d" }, "scheme": "ed25519" }, "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "9b1db36a5cad80284b5f40b040621e0e444f25ee09efa5c1fd6da4499c711bd5" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" }, "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "fa386632ae9cc358ad0b56565edef362ad10d7fadb05bc8dc8995627372b990e" }, "scheme": "ed25519" }, "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "683d345a948a9baa343be4e44c076ca115da3838e72c28a06340c8ec1b3ef6be" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb", "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8" ], "threshold": 4 } }, "spec_version": "1.0.0", "version": 2 } }snapshot.json000066400000000000000000000006571453140004500355550ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_timestamp/server/metadata{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "5939785ca69e19f3dd0e1c9a6fe36179625528fb36e30173a88dbdf139eb1ed7f9f3e0f4e0db075ff51a74141e70669cb329a042938369faa3ca1d5605c0980a" } ], "signed": { "_type": "snapshot", "expires": "2031-09-09T23:20:21Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }targets.json000066400000000000000000000006711453140004500353630ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_timestamp/server/metadata{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "6745efba317ff34aea61685be997d9ee18d02fee2445cfd9cef32da940d2497b12986b95edbc9be38302bbca90ade299697ad2506ce354b8a3ea9528898fab09" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2031-09-09T23:20:21Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }timestamp.json000066400000000000000000000047601453140004500357200ustar00rootroot00000000000000client/testdata/PublishedTwiceMultiKeysadd_9_revoke_4_threshold_4_timestamp/server/metadata{ "signatures": [ { "keyid": "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "sig": "ec1d63e79fadec3dddb5852a1007fa7e5ed4b746b3d608ba9d3fa6fa2f25afa308a72474d820fe2b88adf4f9d6352e57fe7475725e539858f1ab07ab7a5ca305" }, { "keyid": "06e78858e726b48732eaae08a5731465587d322f4e63c0fae62ec13537c0a1cb", "sig": "c3021d40208c80b25034d7d7d29d2faeeb7b0e4e3238430a0f2c0435337d3b2c47e87f4ec2c5692dc2aec01dee8e72feea2b6f72cb17591aca1e5252fe2c4f0b" }, { "keyid": "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "sig": "dbe051e077a6d7ad54ad39c41e3fc497c65b8f5cd9ac9b9c7bf0900dba979614198922232fcd2ef66ec9d5e571b9e936cd997c41e74c55abce8448d13b178007" }, { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "76946f3caeba163ff8fcaa9892f92457a9531da85092ddff660d8af2859fc94ea714e1962ab704a4e028fe48b195b850d6c29d13cf668bb2bf41b0814229b402" }, { "keyid": "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "sig": "9f5c7234e8c67e15fa326bc693595b6ac75aacbec4c5c6bd07bb4c8d8e9bfb35d1ee121987629e45fbb2f4fdcd6593a1f4cd1231b361b89832dcc19be248f70a" }, { "keyid": "75b81ec1572cc1dd55f88f13f0f0217b4e7a25f1665deed40115b612ff9c0eb8", "sig": "d33845b0bfc6ace034377acc4e043dedd3c26c1d58b2f11bb3fa9416c86f55a396c3547d5f95662cbafe231af913752be851947413fca7fa5ec86948aae8ae0c" }, { "keyid": "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b", "sig": "f94b9c239f481f74715627accec1f2794faeefbc0a110e4ac4c8ab0f3451812042ea5b5f85b66b568ea2b00ac46b3d5496b184bc6a59fdee1361b6dbf5e6d90d" }, { "keyid": "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "sig": "b17e9fed31051906f6d31c81db44c025718ced629d2d2914e09c0da4f303163bbfbd11673491aafcce6e35226b3c2f1a6fefa3ff5f39b838d4c3d736e521ac07" }, { "keyid": "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "sig": "b82b9a726284bbc488f3fa8e7b91cd641b63aa0488c7706d7a8a09eecd9a12ce99e02fe77e0994084e72316476e26df42aac2d89616674e40c82a1c3f7082409" } ], "signed": { "_type": "timestamp", "expires": "2031-09-09T23:20:21Z", "meta": { "snapshot.json": { "hashes": { "sha256": "47ceec303641a009684536b381ee11129a338e4f8a0ea30f99efa205a78265de", "sha512": "6d1e34a684483108365554f3c6996fba96f1f64892920436d2c4e27a399bb7b0cdd4fac07d1df250554ab2164e417be7391281b422a12ae26fb1dd619dc8a1c7" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 2 } }client/testdata/go-tuf-transition-M3/000077500000000000000000000000001453140004500200075ustar00rootroot00000000000000client/testdata/go-tuf-transition-M3/consistent-snapshot-false/000077500000000000000000000000001453140004500251255ustar00rootroot00000000000000client/testdata/go-tuf-transition-M3/consistent-snapshot-false/0/000077500000000000000000000000001453140004500252645ustar00rootroot00000000000000client/testdata/go-tuf-transition-M3/consistent-snapshot-false/0/repository/000077500000000000000000000000001453140004500275035ustar00rootroot00000000000000client/testdata/go-tuf-transition-M3/consistent-snapshot-false/0/repository/1.root.json000066400000000000000000000073701453140004500315270ustar00rootroot00000000000000{ "signed": { "_type": "root", "consistent_snapshot": false, "expires": "2100-01-01T00:00:00Z", "keys": { "160f5ae5e7017bc783bbbe26c5419bbeeeb87f507b140ef474da0517d56549f7": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "bca152214dbfd3e7a1b7a7b3e2cc179fb00520fd7212c8a60ba99f14dfc0e1ca" }, "scheme": "ed25519" }, "7165b3cf2ad6a10d456498d958e80f2356b0d3a230d93a96a8dada5fdd8dd40d": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "d482fa4805a50870aa1356ace6b764f7ab47ed4dc38f49b1a189afa25f179e94" }, "scheme": "ed25519" }, "b1eb1d74c0e65524c85f96f9badf09a4d2ed1259fb427fc689fc2279ebb4d867": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "62f71f99c788f16bcdc8bb252455e3a690350e4ddea5a6aab1f9a3aaabcf369a" }, "scheme": "ed25519" }, "b59406a55fbe2492022f2951dacd01fc7b400b7b41ec4028b8356161a5a71a33": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "8656ad20568cd3534c405e4d9a84b0c6e6163f7f66434df77416502835b9b160" }, "scheme": "ed25519" }, "c7a2ca868b0e65b50cc6a2dfcfd9c129bdcb3da390ac78bb83a732be02ed5a5d": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "8656ad20568cd3534c405e4d9a84b0c6e6163f7f66434df77416502835b9b160" }, "scheme": "ed25519" }, "d77999c3b2d553fceee309cc47bf7ab2fee37b8a0b30d4033e4b40dc09719556": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "62f71f99c788f16bcdc8bb252455e3a690350e4ddea5a6aab1f9a3aaabcf369a" }, "scheme": "ed25519" }, "d792ff8cf3c5d9a8fe0fdfa585b25028fa9f49aa29c62a658140d4b98cc2c917": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "d482fa4805a50870aa1356ace6b764f7ab47ed4dc38f49b1a189afa25f179e94" }, "scheme": "ed25519" }, "f806b84c8763453d011c0ba830a3290ee4be587969f5325117c7626411a0f953": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "bca152214dbfd3e7a1b7a7b3e2cc179fb00520fd7212c8a60ba99f14dfc0e1ca" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "160f5ae5e7017bc783bbbe26c5419bbeeeb87f507b140ef474da0517d56549f7", "f806b84c8763453d011c0ba830a3290ee4be587969f5325117c7626411a0f953" ], "threshold": 1 }, "snapshot": { "keyids": [ "d792ff8cf3c5d9a8fe0fdfa585b25028fa9f49aa29c62a658140d4b98cc2c917", "7165b3cf2ad6a10d456498d958e80f2356b0d3a230d93a96a8dada5fdd8dd40d" ], "threshold": 1 }, "targets": { "keyids": [ "b1eb1d74c0e65524c85f96f9badf09a4d2ed1259fb427fc689fc2279ebb4d867", "d77999c3b2d553fceee309cc47bf7ab2fee37b8a0b30d4033e4b40dc09719556" ], "threshold": 1 }, "timestamp": { "keyids": [ "b59406a55fbe2492022f2951dacd01fc7b400b7b41ec4028b8356161a5a71a33", "c7a2ca868b0e65b50cc6a2dfcfd9c129bdcb3da390ac78bb83a732be02ed5a5d" ], "threshold": 1 } }, "spec_version": "1.0", "version": 1 }, "signatures": [ { "keyid": "160f5ae5e7017bc783bbbe26c5419bbeeeb87f507b140ef474da0517d56549f7", "method": "ed25519", "sig": "5ff5c02ecdfc36583f4fb1a8e660bee1643f82a1a7cb3291739200b9f9be6ee026958af3b342e6d8d4f242a05f8e8558e146b6f692ddd4a7d558b85e82ad9b05" }, { "keyid": "f806b84c8763453d011c0ba830a3290ee4be587969f5325117c7626411a0f953", "method": "ed25519", "sig": "5ff5c02ecdfc36583f4fb1a8e660bee1643f82a1a7cb3291739200b9f9be6ee026958af3b342e6d8d4f242a05f8e8558e146b6f692ddd4a7d558b85e82ad9b05" } ] }client/testdata/go-tuf-transition-M3/consistent-snapshot-false/0/repository/root.json000066400000000000000000000073701453140004500313700ustar00rootroot00000000000000{ "signed": { "_type": "root", "consistent_snapshot": false, "expires": "2100-01-01T00:00:00Z", "keys": { "160f5ae5e7017bc783bbbe26c5419bbeeeb87f507b140ef474da0517d56549f7": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "bca152214dbfd3e7a1b7a7b3e2cc179fb00520fd7212c8a60ba99f14dfc0e1ca" }, "scheme": "ed25519" }, "7165b3cf2ad6a10d456498d958e80f2356b0d3a230d93a96a8dada5fdd8dd40d": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "d482fa4805a50870aa1356ace6b764f7ab47ed4dc38f49b1a189afa25f179e94" }, "scheme": "ed25519" }, "b1eb1d74c0e65524c85f96f9badf09a4d2ed1259fb427fc689fc2279ebb4d867": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "62f71f99c788f16bcdc8bb252455e3a690350e4ddea5a6aab1f9a3aaabcf369a" }, "scheme": "ed25519" }, "b59406a55fbe2492022f2951dacd01fc7b400b7b41ec4028b8356161a5a71a33": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "8656ad20568cd3534c405e4d9a84b0c6e6163f7f66434df77416502835b9b160" }, "scheme": "ed25519" }, "c7a2ca868b0e65b50cc6a2dfcfd9c129bdcb3da390ac78bb83a732be02ed5a5d": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "8656ad20568cd3534c405e4d9a84b0c6e6163f7f66434df77416502835b9b160" }, "scheme": "ed25519" }, "d77999c3b2d553fceee309cc47bf7ab2fee37b8a0b30d4033e4b40dc09719556": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "62f71f99c788f16bcdc8bb252455e3a690350e4ddea5a6aab1f9a3aaabcf369a" }, "scheme": "ed25519" }, "d792ff8cf3c5d9a8fe0fdfa585b25028fa9f49aa29c62a658140d4b98cc2c917": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "d482fa4805a50870aa1356ace6b764f7ab47ed4dc38f49b1a189afa25f179e94" }, "scheme": "ed25519" }, "f806b84c8763453d011c0ba830a3290ee4be587969f5325117c7626411a0f953": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "bca152214dbfd3e7a1b7a7b3e2cc179fb00520fd7212c8a60ba99f14dfc0e1ca" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "160f5ae5e7017bc783bbbe26c5419bbeeeb87f507b140ef474da0517d56549f7", "f806b84c8763453d011c0ba830a3290ee4be587969f5325117c7626411a0f953" ], "threshold": 1 }, "snapshot": { "keyids": [ "d792ff8cf3c5d9a8fe0fdfa585b25028fa9f49aa29c62a658140d4b98cc2c917", "7165b3cf2ad6a10d456498d958e80f2356b0d3a230d93a96a8dada5fdd8dd40d" ], "threshold": 1 }, "targets": { "keyids": [ "b1eb1d74c0e65524c85f96f9badf09a4d2ed1259fb427fc689fc2279ebb4d867", "d77999c3b2d553fceee309cc47bf7ab2fee37b8a0b30d4033e4b40dc09719556" ], "threshold": 1 }, "timestamp": { "keyids": [ "b59406a55fbe2492022f2951dacd01fc7b400b7b41ec4028b8356161a5a71a33", "c7a2ca868b0e65b50cc6a2dfcfd9c129bdcb3da390ac78bb83a732be02ed5a5d" ], "threshold": 1 } }, "spec_version": "1.0", "version": 1 }, "signatures": [ { "keyid": "160f5ae5e7017bc783bbbe26c5419bbeeeb87f507b140ef474da0517d56549f7", "method": "ed25519", "sig": "5ff5c02ecdfc36583f4fb1a8e660bee1643f82a1a7cb3291739200b9f9be6ee026958af3b342e6d8d4f242a05f8e8558e146b6f692ddd4a7d558b85e82ad9b05" }, { "keyid": "f806b84c8763453d011c0ba830a3290ee4be587969f5325117c7626411a0f953", "method": "ed25519", "sig": "5ff5c02ecdfc36583f4fb1a8e660bee1643f82a1a7cb3291739200b9f9be6ee026958af3b342e6d8d4f242a05f8e8558e146b6f692ddd4a7d558b85e82ad9b05" } ] }client/testdata/go-tuf-transition-M3/consistent-snapshot-false/0/repository/snapshot.json000066400000000000000000000021451453140004500322370ustar00rootroot00000000000000{ "signed": { "_type": "snapshot", "expires": "2100-01-01T00:00:00Z", "meta": { "root.json": { "hashes": { "sha512": "683aae02eb3fcc4fc0ffc37f2f43dc0fdb43e7997d3c65653cfdabcaea9fed8414e3d77047483eca96490747b2a62dec4d17021de42173520f12b60b39ffbc0f" }, "length": 3832, "version": 1 }, "targets.json": { "hashes": { "sha512": "6ecff211b4df20d84e5a99a1145b7f96752efe880147439a3a8c2ecc080762f84b5b784da1b41d2ccb1492d112c521b4b82973589285dfbcfbb6c423c559ff4e" }, "length": 866, "version": 1 } }, "spec_version": "1.0", "version": 1 }, "signatures": [ { "keyid": "d792ff8cf3c5d9a8fe0fdfa585b25028fa9f49aa29c62a658140d4b98cc2c917", "method": "ed25519", "sig": "30374e6296c813037083321b16c0d2b9578de32a99f56e33134d1936ff14c611e50d0a68bf9e6a2f25dfb449e599f069c51f1c8e3113e36d905a6a0fe825a005" }, { "keyid": "7165b3cf2ad6a10d456498d958e80f2356b0d3a230d93a96a8dada5fdd8dd40d", "method": "ed25519", "sig": "30374e6296c813037083321b16c0d2b9578de32a99f56e33134d1936ff14c611e50d0a68bf9e6a2f25dfb449e599f069c51f1c8e3113e36d905a6a0fe825a005" } ] }client/testdata/go-tuf-transition-M3/consistent-snapshot-false/0/repository/targets.json000066400000000000000000000015421453140004500320510ustar00rootroot00000000000000{ "signed": { "_type": "targets", "expires": "2100-01-01T00:00:00Z", "spec_version": "1.0", "targets": { "0": { "hashes": { "sha512": "31bca02094eb78126a517b206a88c73cfa9ec6f704c7030d18212cace820f025f00bf0ea68dbf3f3a5436ca63b53bf7bf80ad8d5de7d8359d0b7fed9dbc3ab99" }, "length": 1 } }, "version": 1 }, "signatures": [ { "keyid": "b1eb1d74c0e65524c85f96f9badf09a4d2ed1259fb427fc689fc2279ebb4d867", "method": "ed25519", "sig": "4d5c3a5da43f3792d077c1128fa28585982ff2957fae59be02a831fc920d0b91cbeaa99fd6c15066ec4da8bf12f993440a90d1624fd7b0a68070e5d60ed2500f" }, { "keyid": "d77999c3b2d553fceee309cc47bf7ab2fee37b8a0b30d4033e4b40dc09719556", "method": "ed25519", "sig": "4d5c3a5da43f3792d077c1128fa28585982ff2957fae59be02a831fc920d0b91cbeaa99fd6c15066ec4da8bf12f993440a90d1624fd7b0a68070e5d60ed2500f" } ] }client/testdata/go-tuf-transition-M3/consistent-snapshot-false/0/repository/targets/000077500000000000000000000000001453140004500311545ustar00rootroot00000000000000client/testdata/go-tuf-transition-M3/consistent-snapshot-false/0/repository/targets/0000066400000000000000000000000011453140004500312250ustar00rootroot000000000000000client/testdata/go-tuf-transition-M3/consistent-snapshot-false/0/repository/timestamp.json000066400000000000000000000016021453140004500324000ustar00rootroot00000000000000{ "signed": { "_type": "timestamp", "expires": "2100-01-01T00:00:00Z", "meta": { "snapshot.json": { "hashes": { "sha512": "892f57086442891029dd180f01c8653ab91d0ddba2ab6002437634ad0a3579e31e21ef8790577086773ba8b5ffc1da80451589dae92ae122d2943a963fae9725" }, "length": 1125, "version": 1 } }, "spec_version": "1.0", "version": 1 }, "signatures": [ { "keyid": "b59406a55fbe2492022f2951dacd01fc7b400b7b41ec4028b8356161a5a71a33", "method": "ed25519", "sig": "f661d41e29185709f03c5fc28498c369153df6be0eee08d11df869046a5b6605471729541ce8d05d9d5f035adac00d531efe6294c99715270c7e8acc5967fb0a" }, { "keyid": "c7a2ca868b0e65b50cc6a2dfcfd9c129bdcb3da390ac78bb83a732be02ed5a5d", "method": "ed25519", "sig": "f661d41e29185709f03c5fc28498c369153df6be0eee08d11df869046a5b6605471729541ce8d05d9d5f035adac00d531efe6294c99715270c7e8acc5967fb0a" } ] }client/testdata/go-tuf-transition-M3/consistent-snapshot-false/1/000077500000000000000000000000001453140004500252655ustar00rootroot00000000000000client/testdata/go-tuf-transition-M3/consistent-snapshot-false/1/repository/000077500000000000000000000000001453140004500275045ustar00rootroot00000000000000client/testdata/go-tuf-transition-M3/consistent-snapshot-false/1/repository/1.root.json000077700000000000000000000000001453140004500365352../../0/repository/1.root.jsonustar00rootroot00000000000000client/testdata/go-tuf-transition-M3/consistent-snapshot-false/1/repository/2.root.json000066400000000000000000000103641453140004500315260ustar00rootroot00000000000000{ "signed": { "_type": "root", "consistent_snapshot": false, "expires": "2100-01-01T00:00:00Z", "keys": { "4c663b6d0b9f2c74a19b6791c1417c8d1916e2d84461be1a8148e4386c89582d": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "153986a7370e002f377dd68797e7466c421180c1571e233de2f8ab41c8af4f54" }, "scheme": "ed25519" }, "7165b3cf2ad6a10d456498d958e80f2356b0d3a230d93a96a8dada5fdd8dd40d": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "d482fa4805a50870aa1356ace6b764f7ab47ed4dc38f49b1a189afa25f179e94" }, "scheme": "ed25519" }, "a67ca94ed559c97db79999d32b79ca35b5ae1795d2f6be3eafa3bd5816a8f2c4": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "153986a7370e002f377dd68797e7466c421180c1571e233de2f8ab41c8af4f54" }, "scheme": "ed25519" }, "b1eb1d74c0e65524c85f96f9badf09a4d2ed1259fb427fc689fc2279ebb4d867": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "62f71f99c788f16bcdc8bb252455e3a690350e4ddea5a6aab1f9a3aaabcf369a" }, "scheme": "ed25519" }, "b59406a55fbe2492022f2951dacd01fc7b400b7b41ec4028b8356161a5a71a33": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "8656ad20568cd3534c405e4d9a84b0c6e6163f7f66434df77416502835b9b160" }, "scheme": "ed25519" }, "c7a2ca868b0e65b50cc6a2dfcfd9c129bdcb3da390ac78bb83a732be02ed5a5d": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "8656ad20568cd3534c405e4d9a84b0c6e6163f7f66434df77416502835b9b160" }, "scheme": "ed25519" }, "d77999c3b2d553fceee309cc47bf7ab2fee37b8a0b30d4033e4b40dc09719556": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "62f71f99c788f16bcdc8bb252455e3a690350e4ddea5a6aab1f9a3aaabcf369a" }, "scheme": "ed25519" }, "d792ff8cf3c5d9a8fe0fdfa585b25028fa9f49aa29c62a658140d4b98cc2c917": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "d482fa4805a50870aa1356ace6b764f7ab47ed4dc38f49b1a189afa25f179e94" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "4c663b6d0b9f2c74a19b6791c1417c8d1916e2d84461be1a8148e4386c89582d", "a67ca94ed559c97db79999d32b79ca35b5ae1795d2f6be3eafa3bd5816a8f2c4" ], "threshold": 1 }, "snapshot": { "keyids": [ "d792ff8cf3c5d9a8fe0fdfa585b25028fa9f49aa29c62a658140d4b98cc2c917", "7165b3cf2ad6a10d456498d958e80f2356b0d3a230d93a96a8dada5fdd8dd40d" ], "threshold": 1 }, "targets": { "keyids": [ "b1eb1d74c0e65524c85f96f9badf09a4d2ed1259fb427fc689fc2279ebb4d867", "d77999c3b2d553fceee309cc47bf7ab2fee37b8a0b30d4033e4b40dc09719556" ], "threshold": 1 }, "timestamp": { "keyids": [ "b59406a55fbe2492022f2951dacd01fc7b400b7b41ec4028b8356161a5a71a33", "c7a2ca868b0e65b50cc6a2dfcfd9c129bdcb3da390ac78bb83a732be02ed5a5d" ], "threshold": 1 } }, "spec_version": "1.0", "version": 2 }, "signatures": [ { "keyid": "160f5ae5e7017bc783bbbe26c5419bbeeeb87f507b140ef474da0517d56549f7", "method": "ed25519", "sig": "61cfd8782175d6b88a05088ad57c4147d56328bfeac7a8d2f135e831bb1d9f37eaa32e61405baabec61ae280f5ca47af21a3b2a6ef9866889a0d5eb4ce00fa08" }, { "keyid": "f806b84c8763453d011c0ba830a3290ee4be587969f5325117c7626411a0f953", "method": "ed25519", "sig": "61cfd8782175d6b88a05088ad57c4147d56328bfeac7a8d2f135e831bb1d9f37eaa32e61405baabec61ae280f5ca47af21a3b2a6ef9866889a0d5eb4ce00fa08" }, { "keyid": "4c663b6d0b9f2c74a19b6791c1417c8d1916e2d84461be1a8148e4386c89582d", "method": "ed25519", "sig": "855ab125077b6a8e00f8224ef9e8bd595d8b5baeae7a4588605702b4279030f6a34dfa4ba544d6c66fcbec92dc7dc4d5df4f744b7b9962b281a24f7e5c264905" }, { "keyid": "a67ca94ed559c97db79999d32b79ca35b5ae1795d2f6be3eafa3bd5816a8f2c4", "method": "ed25519", "sig": "855ab125077b6a8e00f8224ef9e8bd595d8b5baeae7a4588605702b4279030f6a34dfa4ba544d6c66fcbec92dc7dc4d5df4f744b7b9962b281a24f7e5c264905" } ] }client/testdata/go-tuf-transition-M3/consistent-snapshot-false/1/repository/root.json000066400000000000000000000103641453140004500313660ustar00rootroot00000000000000{ "signed": { "_type": "root", "consistent_snapshot": false, "expires": "2100-01-01T00:00:00Z", "keys": { "4c663b6d0b9f2c74a19b6791c1417c8d1916e2d84461be1a8148e4386c89582d": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "153986a7370e002f377dd68797e7466c421180c1571e233de2f8ab41c8af4f54" }, "scheme": "ed25519" }, "7165b3cf2ad6a10d456498d958e80f2356b0d3a230d93a96a8dada5fdd8dd40d": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "d482fa4805a50870aa1356ace6b764f7ab47ed4dc38f49b1a189afa25f179e94" }, "scheme": "ed25519" }, "a67ca94ed559c97db79999d32b79ca35b5ae1795d2f6be3eafa3bd5816a8f2c4": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "153986a7370e002f377dd68797e7466c421180c1571e233de2f8ab41c8af4f54" }, "scheme": "ed25519" }, "b1eb1d74c0e65524c85f96f9badf09a4d2ed1259fb427fc689fc2279ebb4d867": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "62f71f99c788f16bcdc8bb252455e3a690350e4ddea5a6aab1f9a3aaabcf369a" }, "scheme": "ed25519" }, "b59406a55fbe2492022f2951dacd01fc7b400b7b41ec4028b8356161a5a71a33": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "8656ad20568cd3534c405e4d9a84b0c6e6163f7f66434df77416502835b9b160" }, "scheme": "ed25519" }, "c7a2ca868b0e65b50cc6a2dfcfd9c129bdcb3da390ac78bb83a732be02ed5a5d": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "8656ad20568cd3534c405e4d9a84b0c6e6163f7f66434df77416502835b9b160" }, "scheme": "ed25519" }, "d77999c3b2d553fceee309cc47bf7ab2fee37b8a0b30d4033e4b40dc09719556": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "62f71f99c788f16bcdc8bb252455e3a690350e4ddea5a6aab1f9a3aaabcf369a" }, "scheme": "ed25519" }, "d792ff8cf3c5d9a8fe0fdfa585b25028fa9f49aa29c62a658140d4b98cc2c917": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "d482fa4805a50870aa1356ace6b764f7ab47ed4dc38f49b1a189afa25f179e94" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "4c663b6d0b9f2c74a19b6791c1417c8d1916e2d84461be1a8148e4386c89582d", "a67ca94ed559c97db79999d32b79ca35b5ae1795d2f6be3eafa3bd5816a8f2c4" ], "threshold": 1 }, "snapshot": { "keyids": [ "d792ff8cf3c5d9a8fe0fdfa585b25028fa9f49aa29c62a658140d4b98cc2c917", "7165b3cf2ad6a10d456498d958e80f2356b0d3a230d93a96a8dada5fdd8dd40d" ], "threshold": 1 }, "targets": { "keyids": [ "b1eb1d74c0e65524c85f96f9badf09a4d2ed1259fb427fc689fc2279ebb4d867", "d77999c3b2d553fceee309cc47bf7ab2fee37b8a0b30d4033e4b40dc09719556" ], "threshold": 1 }, "timestamp": { "keyids": [ "b59406a55fbe2492022f2951dacd01fc7b400b7b41ec4028b8356161a5a71a33", "c7a2ca868b0e65b50cc6a2dfcfd9c129bdcb3da390ac78bb83a732be02ed5a5d" ], "threshold": 1 } }, "spec_version": "1.0", "version": 2 }, "signatures": [ { "keyid": "160f5ae5e7017bc783bbbe26c5419bbeeeb87f507b140ef474da0517d56549f7", "method": "ed25519", "sig": "61cfd8782175d6b88a05088ad57c4147d56328bfeac7a8d2f135e831bb1d9f37eaa32e61405baabec61ae280f5ca47af21a3b2a6ef9866889a0d5eb4ce00fa08" }, { "keyid": "f806b84c8763453d011c0ba830a3290ee4be587969f5325117c7626411a0f953", "method": "ed25519", "sig": "61cfd8782175d6b88a05088ad57c4147d56328bfeac7a8d2f135e831bb1d9f37eaa32e61405baabec61ae280f5ca47af21a3b2a6ef9866889a0d5eb4ce00fa08" }, { "keyid": "4c663b6d0b9f2c74a19b6791c1417c8d1916e2d84461be1a8148e4386c89582d", "method": "ed25519", "sig": "855ab125077b6a8e00f8224ef9e8bd595d8b5baeae7a4588605702b4279030f6a34dfa4ba544d6c66fcbec92dc7dc4d5df4f744b7b9962b281a24f7e5c264905" }, { "keyid": "a67ca94ed559c97db79999d32b79ca35b5ae1795d2f6be3eafa3bd5816a8f2c4", "method": "ed25519", "sig": "855ab125077b6a8e00f8224ef9e8bd595d8b5baeae7a4588605702b4279030f6a34dfa4ba544d6c66fcbec92dc7dc4d5df4f744b7b9962b281a24f7e5c264905" } ] }client/testdata/go-tuf-transition-M3/consistent-snapshot-false/1/repository/snapshot.json000066400000000000000000000021461453140004500322410ustar00rootroot00000000000000{ "signed": { "_type": "snapshot", "expires": "2100-01-01T00:00:00Z", "meta": { "root.json": { "hashes": { "sha512": "4feab9708b19ebd38844cab9879fb6c9c52b6a55c4281030149f696090d4e4ca07ebcaf7c97d6e13f41bae6c332242dda18ebeb63fb2555d759b2283cf8187ab" }, "length": 4340, "version": 2 }, "targets.json": { "hashes": { "sha512": "118c2a2b6b9f7bc667dca8404a2671910a22b6fe48e460816a9f6f2be66f7806a789c9dc4880d2c2812c0bc7607caac30cc0a8299183fd7228e1049f6920ce22" }, "length": 1067, "version": 2 } }, "spec_version": "1.0", "version": 2 }, "signatures": [ { "keyid": "d792ff8cf3c5d9a8fe0fdfa585b25028fa9f49aa29c62a658140d4b98cc2c917", "method": "ed25519", "sig": "9d6b3455d3749f21974ccfe087044ca46254c84e6d0b8a0767e001a4eb6bb2bee19f341cec0c4f752deebd657fdeea7641df661c6a9d224e1d1fe8cee5826203" }, { "keyid": "7165b3cf2ad6a10d456498d958e80f2356b0d3a230d93a96a8dada5fdd8dd40d", "method": "ed25519", "sig": "9d6b3455d3749f21974ccfe087044ca46254c84e6d0b8a0767e001a4eb6bb2bee19f341cec0c4f752deebd657fdeea7641df661c6a9d224e1d1fe8cee5826203" } ] }client/testdata/go-tuf-transition-M3/consistent-snapshot-false/1/repository/targets.json000066400000000000000000000020531453140004500320500ustar00rootroot00000000000000{ "signed": { "_type": "targets", "expires": "2100-01-01T00:00:00Z", "spec_version": "1.0", "targets": { "0": { "hashes": { "sha512": "31bca02094eb78126a517b206a88c73cfa9ec6f704c7030d18212cace820f025f00bf0ea68dbf3f3a5436ca63b53bf7bf80ad8d5de7d8359d0b7fed9dbc3ab99" }, "length": 1 }, "1": { "hashes": { "sha512": "4dff4ea340f0a823f15d3f4f01ab62eae0e5da579ccb851f8db9dfe84c58b2b37b89903a740e1ee172da793a6e79d560e5f7f9bd058a12a280433ed6fa46510a" }, "length": 1 } }, "version": 2 }, "signatures": [ { "keyid": "b1eb1d74c0e65524c85f96f9badf09a4d2ed1259fb427fc689fc2279ebb4d867", "method": "ed25519", "sig": "81bcf5921834a20b8b0946815ad4316f43ffce20b3793e6653dc5fd4b98f1c6318ce2243948574e82414a102717a6f2d731250b3191c54abc8391fd867503e0b" }, { "keyid": "d77999c3b2d553fceee309cc47bf7ab2fee37b8a0b30d4033e4b40dc09719556", "method": "ed25519", "sig": "81bcf5921834a20b8b0946815ad4316f43ffce20b3793e6653dc5fd4b98f1c6318ce2243948574e82414a102717a6f2d731250b3191c54abc8391fd867503e0b" } ] }client/testdata/go-tuf-transition-M3/consistent-snapshot-false/1/repository/targets/000077500000000000000000000000001453140004500311555ustar00rootroot00000000000000client/testdata/go-tuf-transition-M3/consistent-snapshot-false/1/repository/targets/0000077700000000000000000000000001453140004500362042../../../0/repository/targets/0ustar00rootroot00000000000000client/testdata/go-tuf-transition-M3/consistent-snapshot-false/1/repository/targets/1000066400000000000000000000000011453140004500312270ustar00rootroot000000000000001client/testdata/go-tuf-transition-M3/consistent-snapshot-false/1/repository/timestamp.json000066400000000000000000000016021453140004500324010ustar00rootroot00000000000000{ "signed": { "_type": "timestamp", "expires": "2100-01-01T00:00:00Z", "meta": { "snapshot.json": { "hashes": { "sha512": "c94cf74bfd65605e8310957476c6cad2102bf9d3c76711a3530ed8e5f38289474fb01ac5747b4977d3ff0a4ddbb3f6767231c1ba54c78a708969807a2d587119" }, "length": 1126, "version": 2 } }, "spec_version": "1.0", "version": 2 }, "signatures": [ { "keyid": "b59406a55fbe2492022f2951dacd01fc7b400b7b41ec4028b8356161a5a71a33", "method": "ed25519", "sig": "08dc93ecb35c64fe26e319b8a7cb06117d96257c96e4781960f8f0b158f559ec756f8affaafd9b6404494b00525e33b3cd2130f8ea2cb5990e6e5461025ea60c" }, { "keyid": "c7a2ca868b0e65b50cc6a2dfcfd9c129bdcb3da390ac78bb83a732be02ed5a5d", "method": "ed25519", "sig": "08dc93ecb35c64fe26e319b8a7cb06117d96257c96e4781960f8f0b158f559ec756f8affaafd9b6404494b00525e33b3cd2130f8ea2cb5990e6e5461025ea60c" } ] }client/testdata/go-tuf-transition-M3/consistent-snapshot-false/2/000077500000000000000000000000001453140004500252665ustar00rootroot00000000000000client/testdata/go-tuf-transition-M3/consistent-snapshot-false/2/repository/000077500000000000000000000000001453140004500275055ustar00rootroot00000000000000client/testdata/go-tuf-transition-M3/consistent-snapshot-false/2/repository/1.root.json000077700000000000000000000000001453140004500365372../../1/repository/1.root.jsonustar00rootroot00000000000000client/testdata/go-tuf-transition-M3/consistent-snapshot-false/2/repository/2.root.json000077700000000000000000000000001453140004500365412../../1/repository/2.root.jsonustar00rootroot00000000000000client/testdata/go-tuf-transition-M3/consistent-snapshot-false/2/repository/3.root.json000066400000000000000000000073701453140004500315330ustar00rootroot00000000000000{ "signed": { "_type": "root", "consistent_snapshot": false, "expires": "2100-01-01T00:00:00Z", "keys": { "0efcc6a8d07a1cb5955fb698b8ea57e903b6924854f5a025c90f16c9a52b2700": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "aee574e56780ea1709a8b56e02d4ffdd9a3a1deaed61e2eb0701f376a4422e42" }, "scheme": "ed25519" }, "4c663b6d0b9f2c74a19b6791c1417c8d1916e2d84461be1a8148e4386c89582d": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "153986a7370e002f377dd68797e7466c421180c1571e233de2f8ab41c8af4f54" }, "scheme": "ed25519" }, "7165b3cf2ad6a10d456498d958e80f2356b0d3a230d93a96a8dada5fdd8dd40d": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "d482fa4805a50870aa1356ace6b764f7ab47ed4dc38f49b1a189afa25f179e94" }, "scheme": "ed25519" }, "a3eba2113e37b749b908101bdb7b856a44f2853641830c0f939730aca3e30360": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "aee574e56780ea1709a8b56e02d4ffdd9a3a1deaed61e2eb0701f376a4422e42" }, "scheme": "ed25519" }, "a67ca94ed559c97db79999d32b79ca35b5ae1795d2f6be3eafa3bd5816a8f2c4": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "153986a7370e002f377dd68797e7466c421180c1571e233de2f8ab41c8af4f54" }, "scheme": "ed25519" }, "b59406a55fbe2492022f2951dacd01fc7b400b7b41ec4028b8356161a5a71a33": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "8656ad20568cd3534c405e4d9a84b0c6e6163f7f66434df77416502835b9b160" }, "scheme": "ed25519" }, "c7a2ca868b0e65b50cc6a2dfcfd9c129bdcb3da390ac78bb83a732be02ed5a5d": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "8656ad20568cd3534c405e4d9a84b0c6e6163f7f66434df77416502835b9b160" }, "scheme": "ed25519" }, "d792ff8cf3c5d9a8fe0fdfa585b25028fa9f49aa29c62a658140d4b98cc2c917": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "d482fa4805a50870aa1356ace6b764f7ab47ed4dc38f49b1a189afa25f179e94" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "4c663b6d0b9f2c74a19b6791c1417c8d1916e2d84461be1a8148e4386c89582d", "a67ca94ed559c97db79999d32b79ca35b5ae1795d2f6be3eafa3bd5816a8f2c4" ], "threshold": 1 }, "snapshot": { "keyids": [ "d792ff8cf3c5d9a8fe0fdfa585b25028fa9f49aa29c62a658140d4b98cc2c917", "7165b3cf2ad6a10d456498d958e80f2356b0d3a230d93a96a8dada5fdd8dd40d" ], "threshold": 1 }, "targets": { "keyids": [ "a3eba2113e37b749b908101bdb7b856a44f2853641830c0f939730aca3e30360", "0efcc6a8d07a1cb5955fb698b8ea57e903b6924854f5a025c90f16c9a52b2700" ], "threshold": 1 }, "timestamp": { "keyids": [ "b59406a55fbe2492022f2951dacd01fc7b400b7b41ec4028b8356161a5a71a33", "c7a2ca868b0e65b50cc6a2dfcfd9c129bdcb3da390ac78bb83a732be02ed5a5d" ], "threshold": 1 } }, "spec_version": "1.0", "version": 3 }, "signatures": [ { "keyid": "4c663b6d0b9f2c74a19b6791c1417c8d1916e2d84461be1a8148e4386c89582d", "method": "ed25519", "sig": "f88ad025e4e486cba6fc97d0a28bc9eb25d8f2148f66fb1929a8c906d5cc7753849ff91a56ade22e4a9d8729347617b75cbc34a5769b1cf1db8cbf2137168c0e" }, { "keyid": "a67ca94ed559c97db79999d32b79ca35b5ae1795d2f6be3eafa3bd5816a8f2c4", "method": "ed25519", "sig": "f88ad025e4e486cba6fc97d0a28bc9eb25d8f2148f66fb1929a8c906d5cc7753849ff91a56ade22e4a9d8729347617b75cbc34a5769b1cf1db8cbf2137168c0e" } ] }client/testdata/go-tuf-transition-M3/consistent-snapshot-false/2/repository/root.json000066400000000000000000000073701453140004500313720ustar00rootroot00000000000000{ "signed": { "_type": "root", "consistent_snapshot": false, "expires": "2100-01-01T00:00:00Z", "keys": { "0efcc6a8d07a1cb5955fb698b8ea57e903b6924854f5a025c90f16c9a52b2700": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "aee574e56780ea1709a8b56e02d4ffdd9a3a1deaed61e2eb0701f376a4422e42" }, "scheme": "ed25519" }, "4c663b6d0b9f2c74a19b6791c1417c8d1916e2d84461be1a8148e4386c89582d": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "153986a7370e002f377dd68797e7466c421180c1571e233de2f8ab41c8af4f54" }, "scheme": "ed25519" }, "7165b3cf2ad6a10d456498d958e80f2356b0d3a230d93a96a8dada5fdd8dd40d": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "d482fa4805a50870aa1356ace6b764f7ab47ed4dc38f49b1a189afa25f179e94" }, "scheme": "ed25519" }, "a3eba2113e37b749b908101bdb7b856a44f2853641830c0f939730aca3e30360": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "aee574e56780ea1709a8b56e02d4ffdd9a3a1deaed61e2eb0701f376a4422e42" }, "scheme": "ed25519" }, "a67ca94ed559c97db79999d32b79ca35b5ae1795d2f6be3eafa3bd5816a8f2c4": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "153986a7370e002f377dd68797e7466c421180c1571e233de2f8ab41c8af4f54" }, "scheme": "ed25519" }, "b59406a55fbe2492022f2951dacd01fc7b400b7b41ec4028b8356161a5a71a33": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "8656ad20568cd3534c405e4d9a84b0c6e6163f7f66434df77416502835b9b160" }, "scheme": "ed25519" }, "c7a2ca868b0e65b50cc6a2dfcfd9c129bdcb3da390ac78bb83a732be02ed5a5d": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "8656ad20568cd3534c405e4d9a84b0c6e6163f7f66434df77416502835b9b160" }, "scheme": "ed25519" }, "d792ff8cf3c5d9a8fe0fdfa585b25028fa9f49aa29c62a658140d4b98cc2c917": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "d482fa4805a50870aa1356ace6b764f7ab47ed4dc38f49b1a189afa25f179e94" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "4c663b6d0b9f2c74a19b6791c1417c8d1916e2d84461be1a8148e4386c89582d", "a67ca94ed559c97db79999d32b79ca35b5ae1795d2f6be3eafa3bd5816a8f2c4" ], "threshold": 1 }, "snapshot": { "keyids": [ "d792ff8cf3c5d9a8fe0fdfa585b25028fa9f49aa29c62a658140d4b98cc2c917", "7165b3cf2ad6a10d456498d958e80f2356b0d3a230d93a96a8dada5fdd8dd40d" ], "threshold": 1 }, "targets": { "keyids": [ "a3eba2113e37b749b908101bdb7b856a44f2853641830c0f939730aca3e30360", "0efcc6a8d07a1cb5955fb698b8ea57e903b6924854f5a025c90f16c9a52b2700" ], "threshold": 1 }, "timestamp": { "keyids": [ "b59406a55fbe2492022f2951dacd01fc7b400b7b41ec4028b8356161a5a71a33", "c7a2ca868b0e65b50cc6a2dfcfd9c129bdcb3da390ac78bb83a732be02ed5a5d" ], "threshold": 1 } }, "spec_version": "1.0", "version": 3 }, "signatures": [ { "keyid": "4c663b6d0b9f2c74a19b6791c1417c8d1916e2d84461be1a8148e4386c89582d", "method": "ed25519", "sig": "f88ad025e4e486cba6fc97d0a28bc9eb25d8f2148f66fb1929a8c906d5cc7753849ff91a56ade22e4a9d8729347617b75cbc34a5769b1cf1db8cbf2137168c0e" }, { "keyid": "a67ca94ed559c97db79999d32b79ca35b5ae1795d2f6be3eafa3bd5816a8f2c4", "method": "ed25519", "sig": "f88ad025e4e486cba6fc97d0a28bc9eb25d8f2148f66fb1929a8c906d5cc7753849ff91a56ade22e4a9d8729347617b75cbc34a5769b1cf1db8cbf2137168c0e" } ] }client/testdata/go-tuf-transition-M3/consistent-snapshot-false/2/repository/snapshot.json000066400000000000000000000021461453140004500322420ustar00rootroot00000000000000{ "signed": { "_type": "snapshot", "expires": "2100-01-01T00:00:00Z", "meta": { "root.json": { "hashes": { "sha512": "baf96d1da4a27b3e57dc35fa1ddde8b20a18f96f6268e07252ed4840725f599d4375ed99d9509f2edde04309efbba71c86735ba630698401cc1778cc31e768f4" }, "length": 3832, "version": 3 }, "targets.json": { "hashes": { "sha512": "bdcbdfe0a1ecaaf9c0c5dc9728bc2eebb1c931b17e57676bd251f8b05640826dcf923ed854c235247329e7068c0d01ad6920b4454a976feb0c9f29b64e338ee4" }, "length": 1268, "version": 3 } }, "spec_version": "1.0", "version": 3 }, "signatures": [ { "keyid": "d792ff8cf3c5d9a8fe0fdfa585b25028fa9f49aa29c62a658140d4b98cc2c917", "method": "ed25519", "sig": "4f202ab758b9a2baefbd23d8fea5deaa8c66d967afa9c52d81df2c17915fc10b059775d53ea858da2c668735f1eb1692f04e2f971545f4ba631f41579e729903" }, { "keyid": "7165b3cf2ad6a10d456498d958e80f2356b0d3a230d93a96a8dada5fdd8dd40d", "method": "ed25519", "sig": "4f202ab758b9a2baefbd23d8fea5deaa8c66d967afa9c52d81df2c17915fc10b059775d53ea858da2c668735f1eb1692f04e2f971545f4ba631f41579e729903" } ] }client/testdata/go-tuf-transition-M3/consistent-snapshot-false/2/repository/targets.json000066400000000000000000000023641453140004500320560ustar00rootroot00000000000000{ "signed": { "_type": "targets", "expires": "2100-01-01T00:00:00Z", "spec_version": "1.0", "targets": { "0": { "hashes": { "sha512": "31bca02094eb78126a517b206a88c73cfa9ec6f704c7030d18212cace820f025f00bf0ea68dbf3f3a5436ca63b53bf7bf80ad8d5de7d8359d0b7fed9dbc3ab99" }, "length": 1 }, "1": { "hashes": { "sha512": "4dff4ea340f0a823f15d3f4f01ab62eae0e5da579ccb851f8db9dfe84c58b2b37b89903a740e1ee172da793a6e79d560e5f7f9bd058a12a280433ed6fa46510a" }, "length": 1 }, "2": { "hashes": { "sha512": "40b244112641dd78dd4f93b6c9190dd46e0099194d5a44257b7efad6ef9ff4683da1eda0244448cb343aa688f5d3efd7314dafe580ac0bcbf115aeca9e8dc114" }, "length": 1 } }, "version": 3 }, "signatures": [ { "keyid": "a3eba2113e37b749b908101bdb7b856a44f2853641830c0f939730aca3e30360", "method": "ed25519", "sig": "09593c7b47f4dbf1e8ac949fa010279ffbbd36070a54a89b689378441e8111602d4236fa2962063778c82027d4746a8973ba8fea86e9c105190da9fa362d8b0c" }, { "keyid": "0efcc6a8d07a1cb5955fb698b8ea57e903b6924854f5a025c90f16c9a52b2700", "method": "ed25519", "sig": "09593c7b47f4dbf1e8ac949fa010279ffbbd36070a54a89b689378441e8111602d4236fa2962063778c82027d4746a8973ba8fea86e9c105190da9fa362d8b0c" } ] }client/testdata/go-tuf-transition-M3/consistent-snapshot-false/2/repository/targets/000077500000000000000000000000001453140004500311565ustar00rootroot00000000000000client/testdata/go-tuf-transition-M3/consistent-snapshot-false/2/repository/targets/0000077700000000000000000000000001453140004500362062../../../1/repository/targets/0ustar00rootroot00000000000000client/testdata/go-tuf-transition-M3/consistent-snapshot-false/2/repository/targets/1000077700000000000000000000000001453140004500362102../../../1/repository/targets/1ustar00rootroot00000000000000client/testdata/go-tuf-transition-M3/consistent-snapshot-false/2/repository/targets/2000066400000000000000000000000011453140004500312310ustar00rootroot000000000000002client/testdata/go-tuf-transition-M3/consistent-snapshot-false/2/repository/timestamp.json000066400000000000000000000016021453140004500324020ustar00rootroot00000000000000{ "signed": { "_type": "timestamp", "expires": "2100-01-01T00:00:00Z", "meta": { "snapshot.json": { "hashes": { "sha512": "27cf44e990df07e40205463d25a12bbacd2ee3dc2650d1a01a37fa0ac27a5e2c885a6e85c2b07e8f56f8bd165cdcd756b182ccfb7f2728709b7a77a7b2251e86" }, "length": 1126, "version": 3 } }, "spec_version": "1.0", "version": 3 }, "signatures": [ { "keyid": "b59406a55fbe2492022f2951dacd01fc7b400b7b41ec4028b8356161a5a71a33", "method": "ed25519", "sig": "9d1c694c4037e0f7d9665ae450ba1b3be30f0a882942802991986f3211788fc347edba9b90a6eeed54c20d9bf5ed9434b0e088a79d7ad2185d16a1b8589bce0f" }, { "keyid": "c7a2ca868b0e65b50cc6a2dfcfd9c129bdcb3da390ac78bb83a732be02ed5a5d", "method": "ed25519", "sig": "9d1c694c4037e0f7d9665ae450ba1b3be30f0a882942802991986f3211788fc347edba9b90a6eeed54c20d9bf5ed9434b0e088a79d7ad2185d16a1b8589bce0f" } ] }client/testdata/go-tuf-transition-M3/consistent-snapshot-false/3/000077500000000000000000000000001453140004500252675ustar00rootroot00000000000000client/testdata/go-tuf-transition-M3/consistent-snapshot-false/3/repository/000077500000000000000000000000001453140004500275065ustar00rootroot00000000000000client/testdata/go-tuf-transition-M3/consistent-snapshot-false/3/repository/1.root.json000077700000000000000000000000001453140004500365412../../2/repository/1.root.jsonustar00rootroot00000000000000client/testdata/go-tuf-transition-M3/consistent-snapshot-false/3/repository/2.root.json000077700000000000000000000000001453140004500365432../../2/repository/2.root.jsonustar00rootroot00000000000000client/testdata/go-tuf-transition-M3/consistent-snapshot-false/3/repository/3.root.json000077700000000000000000000000001453140004500365452../../2/repository/3.root.jsonustar00rootroot00000000000000client/testdata/go-tuf-transition-M3/consistent-snapshot-false/3/repository/4.root.json000066400000000000000000000073701453140004500315350ustar00rootroot00000000000000{ "signed": { "_type": "root", "consistent_snapshot": false, "expires": "2100-01-01T00:00:00Z", "keys": { "0efcc6a8d07a1cb5955fb698b8ea57e903b6924854f5a025c90f16c9a52b2700": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "aee574e56780ea1709a8b56e02d4ffdd9a3a1deaed61e2eb0701f376a4422e42" }, "scheme": "ed25519" }, "4c663b6d0b9f2c74a19b6791c1417c8d1916e2d84461be1a8148e4386c89582d": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "153986a7370e002f377dd68797e7466c421180c1571e233de2f8ab41c8af4f54" }, "scheme": "ed25519" }, "a3eba2113e37b749b908101bdb7b856a44f2853641830c0f939730aca3e30360": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "aee574e56780ea1709a8b56e02d4ffdd9a3a1deaed61e2eb0701f376a4422e42" }, "scheme": "ed25519" }, "a67ca94ed559c97db79999d32b79ca35b5ae1795d2f6be3eafa3bd5816a8f2c4": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "153986a7370e002f377dd68797e7466c421180c1571e233de2f8ab41c8af4f54" }, "scheme": "ed25519" }, "ad7c98dfb3b99024f8b49e33f3d92e66537f0abab78a84f1e4b667dfbf52bf60": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "722dbc861813bb5b568524d62083e875c08e66fed1694d9161d253fa163dd86f" }, "scheme": "ed25519" }, "b59406a55fbe2492022f2951dacd01fc7b400b7b41ec4028b8356161a5a71a33": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "8656ad20568cd3534c405e4d9a84b0c6e6163f7f66434df77416502835b9b160" }, "scheme": "ed25519" }, "bed15bf57ba4deb4e09667099d45d119504420983d16fd0927ebfb0c25184e7f": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "722dbc861813bb5b568524d62083e875c08e66fed1694d9161d253fa163dd86f" }, "scheme": "ed25519" }, "c7a2ca868b0e65b50cc6a2dfcfd9c129bdcb3da390ac78bb83a732be02ed5a5d": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "8656ad20568cd3534c405e4d9a84b0c6e6163f7f66434df77416502835b9b160" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "4c663b6d0b9f2c74a19b6791c1417c8d1916e2d84461be1a8148e4386c89582d", "a67ca94ed559c97db79999d32b79ca35b5ae1795d2f6be3eafa3bd5816a8f2c4" ], "threshold": 1 }, "snapshot": { "keyids": [ "bed15bf57ba4deb4e09667099d45d119504420983d16fd0927ebfb0c25184e7f", "ad7c98dfb3b99024f8b49e33f3d92e66537f0abab78a84f1e4b667dfbf52bf60" ], "threshold": 1 }, "targets": { "keyids": [ "a3eba2113e37b749b908101bdb7b856a44f2853641830c0f939730aca3e30360", "0efcc6a8d07a1cb5955fb698b8ea57e903b6924854f5a025c90f16c9a52b2700" ], "threshold": 1 }, "timestamp": { "keyids": [ "b59406a55fbe2492022f2951dacd01fc7b400b7b41ec4028b8356161a5a71a33", "c7a2ca868b0e65b50cc6a2dfcfd9c129bdcb3da390ac78bb83a732be02ed5a5d" ], "threshold": 1 } }, "spec_version": "1.0", "version": 4 }, "signatures": [ { "keyid": "4c663b6d0b9f2c74a19b6791c1417c8d1916e2d84461be1a8148e4386c89582d", "method": "ed25519", "sig": "780d8db1d802ef7ccaa23ae9bcccf7b619d820a505ae75f61453ebbc882ce4dff37194ee112f3da22feba8cc89531329872e22704a75a21658a5ec38ee568c00" }, { "keyid": "a67ca94ed559c97db79999d32b79ca35b5ae1795d2f6be3eafa3bd5816a8f2c4", "method": "ed25519", "sig": "780d8db1d802ef7ccaa23ae9bcccf7b619d820a505ae75f61453ebbc882ce4dff37194ee112f3da22feba8cc89531329872e22704a75a21658a5ec38ee568c00" } ] }client/testdata/go-tuf-transition-M3/consistent-snapshot-false/3/repository/root.json000066400000000000000000000073701453140004500313730ustar00rootroot00000000000000{ "signed": { "_type": "root", "consistent_snapshot": false, "expires": "2100-01-01T00:00:00Z", "keys": { "0efcc6a8d07a1cb5955fb698b8ea57e903b6924854f5a025c90f16c9a52b2700": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "aee574e56780ea1709a8b56e02d4ffdd9a3a1deaed61e2eb0701f376a4422e42" }, "scheme": "ed25519" }, "4c663b6d0b9f2c74a19b6791c1417c8d1916e2d84461be1a8148e4386c89582d": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "153986a7370e002f377dd68797e7466c421180c1571e233de2f8ab41c8af4f54" }, "scheme": "ed25519" }, "a3eba2113e37b749b908101bdb7b856a44f2853641830c0f939730aca3e30360": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "aee574e56780ea1709a8b56e02d4ffdd9a3a1deaed61e2eb0701f376a4422e42" }, "scheme": "ed25519" }, "a67ca94ed559c97db79999d32b79ca35b5ae1795d2f6be3eafa3bd5816a8f2c4": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "153986a7370e002f377dd68797e7466c421180c1571e233de2f8ab41c8af4f54" }, "scheme": "ed25519" }, "ad7c98dfb3b99024f8b49e33f3d92e66537f0abab78a84f1e4b667dfbf52bf60": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "722dbc861813bb5b568524d62083e875c08e66fed1694d9161d253fa163dd86f" }, "scheme": "ed25519" }, "b59406a55fbe2492022f2951dacd01fc7b400b7b41ec4028b8356161a5a71a33": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "8656ad20568cd3534c405e4d9a84b0c6e6163f7f66434df77416502835b9b160" }, "scheme": "ed25519" }, "bed15bf57ba4deb4e09667099d45d119504420983d16fd0927ebfb0c25184e7f": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "722dbc861813bb5b568524d62083e875c08e66fed1694d9161d253fa163dd86f" }, "scheme": "ed25519" }, "c7a2ca868b0e65b50cc6a2dfcfd9c129bdcb3da390ac78bb83a732be02ed5a5d": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "8656ad20568cd3534c405e4d9a84b0c6e6163f7f66434df77416502835b9b160" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "4c663b6d0b9f2c74a19b6791c1417c8d1916e2d84461be1a8148e4386c89582d", "a67ca94ed559c97db79999d32b79ca35b5ae1795d2f6be3eafa3bd5816a8f2c4" ], "threshold": 1 }, "snapshot": { "keyids": [ "bed15bf57ba4deb4e09667099d45d119504420983d16fd0927ebfb0c25184e7f", "ad7c98dfb3b99024f8b49e33f3d92e66537f0abab78a84f1e4b667dfbf52bf60" ], "threshold": 1 }, "targets": { "keyids": [ "a3eba2113e37b749b908101bdb7b856a44f2853641830c0f939730aca3e30360", "0efcc6a8d07a1cb5955fb698b8ea57e903b6924854f5a025c90f16c9a52b2700" ], "threshold": 1 }, "timestamp": { "keyids": [ "b59406a55fbe2492022f2951dacd01fc7b400b7b41ec4028b8356161a5a71a33", "c7a2ca868b0e65b50cc6a2dfcfd9c129bdcb3da390ac78bb83a732be02ed5a5d" ], "threshold": 1 } }, "spec_version": "1.0", "version": 4 }, "signatures": [ { "keyid": "4c663b6d0b9f2c74a19b6791c1417c8d1916e2d84461be1a8148e4386c89582d", "method": "ed25519", "sig": "780d8db1d802ef7ccaa23ae9bcccf7b619d820a505ae75f61453ebbc882ce4dff37194ee112f3da22feba8cc89531329872e22704a75a21658a5ec38ee568c00" }, { "keyid": "a67ca94ed559c97db79999d32b79ca35b5ae1795d2f6be3eafa3bd5816a8f2c4", "method": "ed25519", "sig": "780d8db1d802ef7ccaa23ae9bcccf7b619d820a505ae75f61453ebbc882ce4dff37194ee112f3da22feba8cc89531329872e22704a75a21658a5ec38ee568c00" } ] }client/testdata/go-tuf-transition-M3/consistent-snapshot-false/3/repository/snapshot.json000066400000000000000000000021461453140004500322430ustar00rootroot00000000000000{ "signed": { "_type": "snapshot", "expires": "2100-01-01T00:00:00Z", "meta": { "root.json": { "hashes": { "sha512": "f23ff2acc0678a3e5d75d192417e3d008c35aa1143fb65807c46310b28a0c2cb88c94fc8d29bef3bebf81ef1c32db0cec6f5f00359c6259f22346a252ddf664d" }, "length": 3832, "version": 4 }, "targets.json": { "hashes": { "sha512": "7c7a5e381e1e8c3f10bc4ab1c1d33f6460f741a5c0bbeb8be4f206de58e9ce67964bef7cef0738d22d5c55238d2062a2a9a72c99f6df0c57a2bece6435a3e461" }, "length": 1469, "version": 4 } }, "spec_version": "1.0", "version": 4 }, "signatures": [ { "keyid": "bed15bf57ba4deb4e09667099d45d119504420983d16fd0927ebfb0c25184e7f", "method": "ed25519", "sig": "a076e6f99019484fc5daf715a62967e23a2ee94e8847298f5bc8ca21d0ae91207f0098dbd368c287d4468142c2ce29a74c9cecff0368a09673af1b2b0313dd00" }, { "keyid": "ad7c98dfb3b99024f8b49e33f3d92e66537f0abab78a84f1e4b667dfbf52bf60", "method": "ed25519", "sig": "a076e6f99019484fc5daf715a62967e23a2ee94e8847298f5bc8ca21d0ae91207f0098dbd368c287d4468142c2ce29a74c9cecff0368a09673af1b2b0313dd00" } ] }client/testdata/go-tuf-transition-M3/consistent-snapshot-false/3/repository/targets.json000066400000000000000000000026751453140004500320640ustar00rootroot00000000000000{ "signed": { "_type": "targets", "expires": "2100-01-01T00:00:00Z", "spec_version": "1.0", "targets": { "0": { "hashes": { "sha512": "31bca02094eb78126a517b206a88c73cfa9ec6f704c7030d18212cace820f025f00bf0ea68dbf3f3a5436ca63b53bf7bf80ad8d5de7d8359d0b7fed9dbc3ab99" }, "length": 1 }, "1": { "hashes": { "sha512": "4dff4ea340f0a823f15d3f4f01ab62eae0e5da579ccb851f8db9dfe84c58b2b37b89903a740e1ee172da793a6e79d560e5f7f9bd058a12a280433ed6fa46510a" }, "length": 1 }, "2": { "hashes": { "sha512": "40b244112641dd78dd4f93b6c9190dd46e0099194d5a44257b7efad6ef9ff4683da1eda0244448cb343aa688f5d3efd7314dafe580ac0bcbf115aeca9e8dc114" }, "length": 1 }, "3": { "hashes": { "sha512": "3bafbf08882a2d10133093a1b8433f50563b93c14acd05b79028eb1d12799027241450980651994501423a66c276ae26c43b739bc65c4e16b10c3af6c202aebb" }, "length": 1 } }, "version": 4 }, "signatures": [ { "keyid": "a3eba2113e37b749b908101bdb7b856a44f2853641830c0f939730aca3e30360", "method": "ed25519", "sig": "7bfe0a63ee324034807b5341336d9d2d64e9ef3936086577b5bbcc6d021b4656bd6bf14d817bbb3908e4dcb05391d1b4031b527c14d942c2d1e38275d5ff1308" }, { "keyid": "0efcc6a8d07a1cb5955fb698b8ea57e903b6924854f5a025c90f16c9a52b2700", "method": "ed25519", "sig": "7bfe0a63ee324034807b5341336d9d2d64e9ef3936086577b5bbcc6d021b4656bd6bf14d817bbb3908e4dcb05391d1b4031b527c14d942c2d1e38275d5ff1308" } ] }client/testdata/go-tuf-transition-M3/consistent-snapshot-false/3/repository/targets/000077500000000000000000000000001453140004500311575ustar00rootroot00000000000000client/testdata/go-tuf-transition-M3/consistent-snapshot-false/3/repository/targets/0000077700000000000000000000000001453140004500362102../../../2/repository/targets/0ustar00rootroot00000000000000client/testdata/go-tuf-transition-M3/consistent-snapshot-false/3/repository/targets/1000077700000000000000000000000001453140004500362122../../../2/repository/targets/1ustar00rootroot00000000000000client/testdata/go-tuf-transition-M3/consistent-snapshot-false/3/repository/targets/2000077700000000000000000000000001453140004500362142../../../2/repository/targets/2ustar00rootroot00000000000000client/testdata/go-tuf-transition-M3/consistent-snapshot-false/3/repository/targets/3000066400000000000000000000000011453140004500312330ustar00rootroot000000000000003client/testdata/go-tuf-transition-M3/consistent-snapshot-false/3/repository/timestamp.json000066400000000000000000000016021453140004500324030ustar00rootroot00000000000000{ "signed": { "_type": "timestamp", "expires": "2100-01-01T00:00:00Z", "meta": { "snapshot.json": { "hashes": { "sha512": "3e1518698609a8ea5dc88323cbc3c7f487346cf489db59ff6c74d232372c3d77217416c5ccbdcf3172cb79df93ed635c3981663f2019f958a6f6a84cd443aee3" }, "length": 1126, "version": 4 } }, "spec_version": "1.0", "version": 4 }, "signatures": [ { "keyid": "b59406a55fbe2492022f2951dacd01fc7b400b7b41ec4028b8356161a5a71a33", "method": "ed25519", "sig": "87d09d36cd148d9e7947353514818cb1ae455962acec5f98c1d8941755d1a515bc8f0cdde4602fd2eb25999c2e842f60882fa1e8d9dc97dbf6442e6f4c8c4e0e" }, { "keyid": "c7a2ca868b0e65b50cc6a2dfcfd9c129bdcb3da390ac78bb83a732be02ed5a5d", "method": "ed25519", "sig": "87d09d36cd148d9e7947353514818cb1ae455962acec5f98c1d8941755d1a515bc8f0cdde4602fd2eb25999c2e842f60882fa1e8d9dc97dbf6442e6f4c8c4e0e" } ] }client/testdata/go-tuf-transition-M3/consistent-snapshot-false/4/000077500000000000000000000000001453140004500252705ustar00rootroot00000000000000client/testdata/go-tuf-transition-M3/consistent-snapshot-false/4/repository/000077500000000000000000000000001453140004500275075ustar00rootroot00000000000000client/testdata/go-tuf-transition-M3/consistent-snapshot-false/4/repository/1.root.json000077700000000000000000000000001453140004500365432../../3/repository/1.root.jsonustar00rootroot00000000000000client/testdata/go-tuf-transition-M3/consistent-snapshot-false/4/repository/2.root.json000077700000000000000000000000001453140004500365452../../3/repository/2.root.jsonustar00rootroot00000000000000client/testdata/go-tuf-transition-M3/consistent-snapshot-false/4/repository/3.root.json000077700000000000000000000000001453140004500365472../../3/repository/3.root.jsonustar00rootroot00000000000000client/testdata/go-tuf-transition-M3/consistent-snapshot-false/4/repository/4.root.json000077700000000000000000000000001453140004500365512../../3/repository/4.root.jsonustar00rootroot00000000000000client/testdata/go-tuf-transition-M3/consistent-snapshot-false/4/repository/5.root.json000066400000000000000000000073701453140004500315370ustar00rootroot00000000000000{ "signed": { "_type": "root", "consistent_snapshot": false, "expires": "2100-01-01T00:00:00Z", "keys": { "0efcc6a8d07a1cb5955fb698b8ea57e903b6924854f5a025c90f16c9a52b2700": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "aee574e56780ea1709a8b56e02d4ffdd9a3a1deaed61e2eb0701f376a4422e42" }, "scheme": "ed25519" }, "4c663b6d0b9f2c74a19b6791c1417c8d1916e2d84461be1a8148e4386c89582d": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "153986a7370e002f377dd68797e7466c421180c1571e233de2f8ab41c8af4f54" }, "scheme": "ed25519" }, "79b5760e4c96b6becc12bec4260c9c1d533b9b70628ade2b229ef02b772b10b0": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "3ab34b0c2d4eadccaa0f0cf22ced07b552394063a9de2806993d022360dffc76" }, "scheme": "ed25519" }, "a3eba2113e37b749b908101bdb7b856a44f2853641830c0f939730aca3e30360": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "aee574e56780ea1709a8b56e02d4ffdd9a3a1deaed61e2eb0701f376a4422e42" }, "scheme": "ed25519" }, "a67ca94ed559c97db79999d32b79ca35b5ae1795d2f6be3eafa3bd5816a8f2c4": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "153986a7370e002f377dd68797e7466c421180c1571e233de2f8ab41c8af4f54" }, "scheme": "ed25519" }, "ad7c98dfb3b99024f8b49e33f3d92e66537f0abab78a84f1e4b667dfbf52bf60": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "722dbc861813bb5b568524d62083e875c08e66fed1694d9161d253fa163dd86f" }, "scheme": "ed25519" }, "bed15bf57ba4deb4e09667099d45d119504420983d16fd0927ebfb0c25184e7f": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "722dbc861813bb5b568524d62083e875c08e66fed1694d9161d253fa163dd86f" }, "scheme": "ed25519" }, "e23c19fb64db7146965700b9983df63d2dd4362b1f99d74da2383234da4ab20d": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "3ab34b0c2d4eadccaa0f0cf22ced07b552394063a9de2806993d022360dffc76" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "4c663b6d0b9f2c74a19b6791c1417c8d1916e2d84461be1a8148e4386c89582d", "a67ca94ed559c97db79999d32b79ca35b5ae1795d2f6be3eafa3bd5816a8f2c4" ], "threshold": 1 }, "snapshot": { "keyids": [ "bed15bf57ba4deb4e09667099d45d119504420983d16fd0927ebfb0c25184e7f", "ad7c98dfb3b99024f8b49e33f3d92e66537f0abab78a84f1e4b667dfbf52bf60" ], "threshold": 1 }, "targets": { "keyids": [ "a3eba2113e37b749b908101bdb7b856a44f2853641830c0f939730aca3e30360", "0efcc6a8d07a1cb5955fb698b8ea57e903b6924854f5a025c90f16c9a52b2700" ], "threshold": 1 }, "timestamp": { "keyids": [ "79b5760e4c96b6becc12bec4260c9c1d533b9b70628ade2b229ef02b772b10b0", "e23c19fb64db7146965700b9983df63d2dd4362b1f99d74da2383234da4ab20d" ], "threshold": 1 } }, "spec_version": "1.0", "version": 5 }, "signatures": [ { "keyid": "4c663b6d0b9f2c74a19b6791c1417c8d1916e2d84461be1a8148e4386c89582d", "method": "ed25519", "sig": "b9bec20a6e47c15ee0abae1ec2314bf129d838c0996be90dfa5ef5983354d2c55b83ddf2fbd9d783fb82d16f4b1106af8b01331bbd9648807e42f0eaafecb600" }, { "keyid": "a67ca94ed559c97db79999d32b79ca35b5ae1795d2f6be3eafa3bd5816a8f2c4", "method": "ed25519", "sig": "b9bec20a6e47c15ee0abae1ec2314bf129d838c0996be90dfa5ef5983354d2c55b83ddf2fbd9d783fb82d16f4b1106af8b01331bbd9648807e42f0eaafecb600" } ] }client/testdata/go-tuf-transition-M3/consistent-snapshot-false/4/repository/root.json000066400000000000000000000073701453140004500313740ustar00rootroot00000000000000{ "signed": { "_type": "root", "consistent_snapshot": false, "expires": "2100-01-01T00:00:00Z", "keys": { "0efcc6a8d07a1cb5955fb698b8ea57e903b6924854f5a025c90f16c9a52b2700": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "aee574e56780ea1709a8b56e02d4ffdd9a3a1deaed61e2eb0701f376a4422e42" }, "scheme": "ed25519" }, "4c663b6d0b9f2c74a19b6791c1417c8d1916e2d84461be1a8148e4386c89582d": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "153986a7370e002f377dd68797e7466c421180c1571e233de2f8ab41c8af4f54" }, "scheme": "ed25519" }, "79b5760e4c96b6becc12bec4260c9c1d533b9b70628ade2b229ef02b772b10b0": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "3ab34b0c2d4eadccaa0f0cf22ced07b552394063a9de2806993d022360dffc76" }, "scheme": "ed25519" }, "a3eba2113e37b749b908101bdb7b856a44f2853641830c0f939730aca3e30360": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "aee574e56780ea1709a8b56e02d4ffdd9a3a1deaed61e2eb0701f376a4422e42" }, "scheme": "ed25519" }, "a67ca94ed559c97db79999d32b79ca35b5ae1795d2f6be3eafa3bd5816a8f2c4": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "153986a7370e002f377dd68797e7466c421180c1571e233de2f8ab41c8af4f54" }, "scheme": "ed25519" }, "ad7c98dfb3b99024f8b49e33f3d92e66537f0abab78a84f1e4b667dfbf52bf60": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "722dbc861813bb5b568524d62083e875c08e66fed1694d9161d253fa163dd86f" }, "scheme": "ed25519" }, "bed15bf57ba4deb4e09667099d45d119504420983d16fd0927ebfb0c25184e7f": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "722dbc861813bb5b568524d62083e875c08e66fed1694d9161d253fa163dd86f" }, "scheme": "ed25519" }, "e23c19fb64db7146965700b9983df63d2dd4362b1f99d74da2383234da4ab20d": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "3ab34b0c2d4eadccaa0f0cf22ced07b552394063a9de2806993d022360dffc76" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "4c663b6d0b9f2c74a19b6791c1417c8d1916e2d84461be1a8148e4386c89582d", "a67ca94ed559c97db79999d32b79ca35b5ae1795d2f6be3eafa3bd5816a8f2c4" ], "threshold": 1 }, "snapshot": { "keyids": [ "bed15bf57ba4deb4e09667099d45d119504420983d16fd0927ebfb0c25184e7f", "ad7c98dfb3b99024f8b49e33f3d92e66537f0abab78a84f1e4b667dfbf52bf60" ], "threshold": 1 }, "targets": { "keyids": [ "a3eba2113e37b749b908101bdb7b856a44f2853641830c0f939730aca3e30360", "0efcc6a8d07a1cb5955fb698b8ea57e903b6924854f5a025c90f16c9a52b2700" ], "threshold": 1 }, "timestamp": { "keyids": [ "79b5760e4c96b6becc12bec4260c9c1d533b9b70628ade2b229ef02b772b10b0", "e23c19fb64db7146965700b9983df63d2dd4362b1f99d74da2383234da4ab20d" ], "threshold": 1 } }, "spec_version": "1.0", "version": 5 }, "signatures": [ { "keyid": "4c663b6d0b9f2c74a19b6791c1417c8d1916e2d84461be1a8148e4386c89582d", "method": "ed25519", "sig": "b9bec20a6e47c15ee0abae1ec2314bf129d838c0996be90dfa5ef5983354d2c55b83ddf2fbd9d783fb82d16f4b1106af8b01331bbd9648807e42f0eaafecb600" }, { "keyid": "a67ca94ed559c97db79999d32b79ca35b5ae1795d2f6be3eafa3bd5816a8f2c4", "method": "ed25519", "sig": "b9bec20a6e47c15ee0abae1ec2314bf129d838c0996be90dfa5ef5983354d2c55b83ddf2fbd9d783fb82d16f4b1106af8b01331bbd9648807e42f0eaafecb600" } ] }client/testdata/go-tuf-transition-M3/consistent-snapshot-false/4/repository/snapshot.json000066400000000000000000000021461453140004500322440ustar00rootroot00000000000000{ "signed": { "_type": "snapshot", "expires": "2100-01-01T00:00:00Z", "meta": { "root.json": { "hashes": { "sha512": "1d328734fe2f05dcf8527fd56dc2be8eb93f0c55f71d14aa6e8ad756d9d0a9dd41355df2712aaf992adc50add64ffde009a56cde02c4792e8c2d3b694ac70fc3" }, "length": 3832, "version": 5 }, "targets.json": { "hashes": { "sha512": "c86fd75fe946b88488ece0fa399857a75f3cc80bd85bc71f3fcc030ad6201c559370cbc67a8a547f1964355911fc0ef8000dd8e9f0ff84a3cc8e45cbd42ec7db" }, "length": 1670, "version": 5 } }, "spec_version": "1.0", "version": 5 }, "signatures": [ { "keyid": "bed15bf57ba4deb4e09667099d45d119504420983d16fd0927ebfb0c25184e7f", "method": "ed25519", "sig": "e7b397e79f9fe7c12a662abbc99424b615790c64065e1ed66f6ce46d48ac0132a8c90e93ae3e7bfe5a75279cd015dbf52ef1a73c543697f1de5bb059072b7d02" }, { "keyid": "ad7c98dfb3b99024f8b49e33f3d92e66537f0abab78a84f1e4b667dfbf52bf60", "method": "ed25519", "sig": "e7b397e79f9fe7c12a662abbc99424b615790c64065e1ed66f6ce46d48ac0132a8c90e93ae3e7bfe5a75279cd015dbf52ef1a73c543697f1de5bb059072b7d02" } ] }client/testdata/go-tuf-transition-M3/consistent-snapshot-false/4/repository/targets.json000066400000000000000000000032061453140004500320540ustar00rootroot00000000000000{ "signed": { "_type": "targets", "expires": "2100-01-01T00:00:00Z", "spec_version": "1.0", "targets": { "0": { "hashes": { "sha512": "31bca02094eb78126a517b206a88c73cfa9ec6f704c7030d18212cace820f025f00bf0ea68dbf3f3a5436ca63b53bf7bf80ad8d5de7d8359d0b7fed9dbc3ab99" }, "length": 1 }, "1": { "hashes": { "sha512": "4dff4ea340f0a823f15d3f4f01ab62eae0e5da579ccb851f8db9dfe84c58b2b37b89903a740e1ee172da793a6e79d560e5f7f9bd058a12a280433ed6fa46510a" }, "length": 1 }, "2": { "hashes": { "sha512": "40b244112641dd78dd4f93b6c9190dd46e0099194d5a44257b7efad6ef9ff4683da1eda0244448cb343aa688f5d3efd7314dafe580ac0bcbf115aeca9e8dc114" }, "length": 1 }, "3": { "hashes": { "sha512": "3bafbf08882a2d10133093a1b8433f50563b93c14acd05b79028eb1d12799027241450980651994501423a66c276ae26c43b739bc65c4e16b10c3af6c202aebb" }, "length": 1 }, "4": { "hashes": { "sha512": "a321d8b405e3ef2604959847b36d171eebebc4a8941dc70a4784935a4fca5d5813de84dfa049f06549aa61b20848c1633ce81b675286ea8fb53db240d831c568" }, "length": 1 } }, "version": 5 }, "signatures": [ { "keyid": "a3eba2113e37b749b908101bdb7b856a44f2853641830c0f939730aca3e30360", "method": "ed25519", "sig": "68f2346cdbe045e8558b2ccd86be66e15466955167557c704b51d7163838f670c53ab9247c16a4ed0cd4ecc981a7e2a04a350b01548f97654499d6f9c17c4202" }, { "keyid": "0efcc6a8d07a1cb5955fb698b8ea57e903b6924854f5a025c90f16c9a52b2700", "method": "ed25519", "sig": "68f2346cdbe045e8558b2ccd86be66e15466955167557c704b51d7163838f670c53ab9247c16a4ed0cd4ecc981a7e2a04a350b01548f97654499d6f9c17c4202" } ] }client/testdata/go-tuf-transition-M3/consistent-snapshot-false/4/repository/targets/000077500000000000000000000000001453140004500311605ustar00rootroot00000000000000client/testdata/go-tuf-transition-M3/consistent-snapshot-false/4/repository/targets/0000077700000000000000000000000001453140004500362122../../../3/repository/targets/0ustar00rootroot00000000000000client/testdata/go-tuf-transition-M3/consistent-snapshot-false/4/repository/targets/1000077700000000000000000000000001453140004500362142../../../3/repository/targets/1ustar00rootroot00000000000000client/testdata/go-tuf-transition-M3/consistent-snapshot-false/4/repository/targets/2000077700000000000000000000000001453140004500362162../../../3/repository/targets/2ustar00rootroot00000000000000client/testdata/go-tuf-transition-M3/consistent-snapshot-false/4/repository/targets/3000077700000000000000000000000001453140004500362202../../../3/repository/targets/3ustar00rootroot00000000000000client/testdata/go-tuf-transition-M3/consistent-snapshot-false/4/repository/targets/4000066400000000000000000000000011453140004500312350ustar00rootroot000000000000004client/testdata/go-tuf-transition-M3/consistent-snapshot-false/4/repository/timestamp.json000066400000000000000000000016021453140004500324040ustar00rootroot00000000000000{ "signed": { "_type": "timestamp", "expires": "2100-01-01T00:00:00Z", "meta": { "snapshot.json": { "hashes": { "sha512": "f3285e9249d6fe5c693a9766c8f9efbfb915349213f155cfc7e511e40fc43134b9925c589efb9cc561edf3bea182e4b61e23dc8434c00e0bf1a35dea1a7c81d9" }, "length": 1126, "version": 5 } }, "spec_version": "1.0", "version": 5 }, "signatures": [ { "keyid": "79b5760e4c96b6becc12bec4260c9c1d533b9b70628ade2b229ef02b772b10b0", "method": "ed25519", "sig": "efeb3f5a53fd6c6c9e03cb3ac48dccc9a7ff050108e89dc85d83b8ad56d7b752174c0d0ee60621982da9858c8d468844cc0f3d011ff0b121e58f34b6af1a1f0b" }, { "keyid": "e23c19fb64db7146965700b9983df63d2dd4362b1f99d74da2383234da4ab20d", "method": "ed25519", "sig": "efeb3f5a53fd6c6c9e03cb3ac48dccc9a7ff050108e89dc85d83b8ad56d7b752174c0d0ee60621982da9858c8d468844cc0f3d011ff0b121e58f34b6af1a1f0b" } ] }client/testdata/go-tuf-transition-M3/consistent-snapshot-false/5/000077500000000000000000000000001453140004500252715ustar00rootroot00000000000000client/testdata/go-tuf-transition-M3/consistent-snapshot-false/5/repository/000077500000000000000000000000001453140004500275105ustar00rootroot00000000000000client/testdata/go-tuf-transition-M3/consistent-snapshot-false/5/repository/1.root.json000077700000000000000000000000001453140004500365452../../4/repository/1.root.jsonustar00rootroot00000000000000client/testdata/go-tuf-transition-M3/consistent-snapshot-false/5/repository/2.root.json000077700000000000000000000000001453140004500365472../../4/repository/2.root.jsonustar00rootroot00000000000000client/testdata/go-tuf-transition-M3/consistent-snapshot-false/5/repository/3.root.json000077700000000000000000000000001453140004500365512../../4/repository/3.root.jsonustar00rootroot00000000000000client/testdata/go-tuf-transition-M3/consistent-snapshot-false/5/repository/4.root.json000077700000000000000000000000001453140004500365532../../4/repository/4.root.jsonustar00rootroot00000000000000client/testdata/go-tuf-transition-M3/consistent-snapshot-false/5/repository/5.root.json000077700000000000000000000000001453140004500365552../../4/repository/5.root.jsonustar00rootroot00000000000000client/testdata/go-tuf-transition-M3/consistent-snapshot-false/5/repository/root.json000077700000000000000000000000001453140004500362472../../4/repository/root.jsonustar00rootroot00000000000000client/testdata/go-tuf-transition-M3/consistent-snapshot-false/5/repository/snapshot.json000066400000000000000000000021461453140004500322450ustar00rootroot00000000000000{ "signed": { "_type": "snapshot", "expires": "2100-01-01T00:00:00Z", "meta": { "root.json": { "hashes": { "sha512": "1d328734fe2f05dcf8527fd56dc2be8eb93f0c55f71d14aa6e8ad756d9d0a9dd41355df2712aaf992adc50add64ffde009a56cde02c4792e8c2d3b694ac70fc3" }, "length": 3832, "version": 5 }, "targets.json": { "hashes": { "sha512": "8ec9b98766edfe6acc23bb700183532a990b966ceb7b62784f6c80d4b1bfe5661df3cc2765b57bd0e78eb4b5c2b136f5ab7a365665c6e918d4137b83cb7e2262" }, "length": 1871, "version": 6 } }, "spec_version": "1.0", "version": 6 }, "signatures": [ { "keyid": "bed15bf57ba4deb4e09667099d45d119504420983d16fd0927ebfb0c25184e7f", "method": "ed25519", "sig": "cf36c85855679c11e0efb1cc53deb1a1bfd43d02e8fb564e6c280f1ef280a62fe05368336fdbe59daa642313b28479accfed25f4a3c8be9cc1d0474ab87c150f" }, { "keyid": "ad7c98dfb3b99024f8b49e33f3d92e66537f0abab78a84f1e4b667dfbf52bf60", "method": "ed25519", "sig": "cf36c85855679c11e0efb1cc53deb1a1bfd43d02e8fb564e6c280f1ef280a62fe05368336fdbe59daa642313b28479accfed25f4a3c8be9cc1d0474ab87c150f" } ] }client/testdata/go-tuf-transition-M3/consistent-snapshot-false/5/repository/targets.json000066400000000000000000000035171453140004500320620ustar00rootroot00000000000000{ "signed": { "_type": "targets", "expires": "2100-01-01T00:00:00Z", "spec_version": "1.0", "targets": { "0": { "hashes": { "sha512": "31bca02094eb78126a517b206a88c73cfa9ec6f704c7030d18212cace820f025f00bf0ea68dbf3f3a5436ca63b53bf7bf80ad8d5de7d8359d0b7fed9dbc3ab99" }, "length": 1 }, "1": { "hashes": { "sha512": "4dff4ea340f0a823f15d3f4f01ab62eae0e5da579ccb851f8db9dfe84c58b2b37b89903a740e1ee172da793a6e79d560e5f7f9bd058a12a280433ed6fa46510a" }, "length": 1 }, "2": { "hashes": { "sha512": "40b244112641dd78dd4f93b6c9190dd46e0099194d5a44257b7efad6ef9ff4683da1eda0244448cb343aa688f5d3efd7314dafe580ac0bcbf115aeca9e8dc114" }, "length": 1 }, "3": { "hashes": { "sha512": "3bafbf08882a2d10133093a1b8433f50563b93c14acd05b79028eb1d12799027241450980651994501423a66c276ae26c43b739bc65c4e16b10c3af6c202aebb" }, "length": 1 }, "4": { "hashes": { "sha512": "a321d8b405e3ef2604959847b36d171eebebc4a8941dc70a4784935a4fca5d5813de84dfa049f06549aa61b20848c1633ce81b675286ea8fb53db240d831c568" }, "length": 1 }, "5": { "hashes": { "sha512": "06df05371981a237d0ed11472fae7c94c9ac0eff1d05413516710d17b10a4fb6f4517bda4a695f02d0a73dd4db543b4653df28f5d09dab86f92ffb9b86d01e25" }, "length": 1 } }, "version": 6 }, "signatures": [ { "keyid": "a3eba2113e37b749b908101bdb7b856a44f2853641830c0f939730aca3e30360", "method": "ed25519", "sig": "1e80ae84c4badf194e2fd7225c120999d8f628598fa0e994a2ff7cac705ec2f14601a64ba5370fc668f3fb114975dd81c554400d757f41762c4e12eb4db35d02" }, { "keyid": "0efcc6a8d07a1cb5955fb698b8ea57e903b6924854f5a025c90f16c9a52b2700", "method": "ed25519", "sig": "1e80ae84c4badf194e2fd7225c120999d8f628598fa0e994a2ff7cac705ec2f14601a64ba5370fc668f3fb114975dd81c554400d757f41762c4e12eb4db35d02" } ] }client/testdata/go-tuf-transition-M3/consistent-snapshot-false/5/repository/targets/000077500000000000000000000000001453140004500311615ustar00rootroot00000000000000client/testdata/go-tuf-transition-M3/consistent-snapshot-false/5/repository/targets/0000077700000000000000000000000001453140004500362142../../../4/repository/targets/0ustar00rootroot00000000000000client/testdata/go-tuf-transition-M3/consistent-snapshot-false/5/repository/targets/1000077700000000000000000000000001453140004500362162../../../4/repository/targets/1ustar00rootroot00000000000000client/testdata/go-tuf-transition-M3/consistent-snapshot-false/5/repository/targets/2000077700000000000000000000000001453140004500362202../../../4/repository/targets/2ustar00rootroot00000000000000client/testdata/go-tuf-transition-M3/consistent-snapshot-false/5/repository/targets/3000077700000000000000000000000001453140004500362222../../../4/repository/targets/3ustar00rootroot00000000000000client/testdata/go-tuf-transition-M3/consistent-snapshot-false/5/repository/targets/4000077700000000000000000000000001453140004500362242../../../4/repository/targets/4ustar00rootroot00000000000000client/testdata/go-tuf-transition-M3/consistent-snapshot-false/5/repository/targets/5000066400000000000000000000000011453140004500312370ustar00rootroot000000000000005client/testdata/go-tuf-transition-M3/consistent-snapshot-false/5/repository/timestamp.json000066400000000000000000000016021453140004500324050ustar00rootroot00000000000000{ "signed": { "_type": "timestamp", "expires": "2100-01-01T00:00:00Z", "meta": { "snapshot.json": { "hashes": { "sha512": "416d5114cfe34e8412cc68c85a1aaded17f53d8ba77f4c3fa769835904ae664d729711e88e1a90c2a6bc4f3c61e46eb026c0a1da5a22c7d28a3103c82c6b284a" }, "length": 1126, "version": 6 } }, "spec_version": "1.0", "version": 6 }, "signatures": [ { "keyid": "79b5760e4c96b6becc12bec4260c9c1d533b9b70628ade2b229ef02b772b10b0", "method": "ed25519", "sig": "d238cb69543dc66c40e5f9d5bcf58d43e6c99e5559399be52c08f6a7c29809a4d7c50014ea631f871b5e2be28264b0c682eafe775297888bc883061214c55600" }, { "keyid": "e23c19fb64db7146965700b9983df63d2dd4362b1f99d74da2383234da4ab20d", "method": "ed25519", "sig": "d238cb69543dc66c40e5f9d5bcf58d43e6c99e5559399be52c08f6a7c29809a4d7c50014ea631f871b5e2be28264b0c682eafe775297888bc883061214c55600" } ] }client/testdata/go-tuf-transition-M3/consistent-snapshot-true/000077500000000000000000000000001453140004500250125ustar00rootroot00000000000000client/testdata/go-tuf-transition-M3/consistent-snapshot-true/0/000077500000000000000000000000001453140004500251515ustar00rootroot00000000000000client/testdata/go-tuf-transition-M3/consistent-snapshot-true/0/repository/000077500000000000000000000000001453140004500273705ustar00rootroot00000000000000client/testdata/go-tuf-transition-M3/consistent-snapshot-true/0/repository/1.root.json000066400000000000000000000073671453140004500314220ustar00rootroot00000000000000{ "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2100-01-01T00:00:00Z", "keys": { "160f5ae5e7017bc783bbbe26c5419bbeeeb87f507b140ef474da0517d56549f7": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "bca152214dbfd3e7a1b7a7b3e2cc179fb00520fd7212c8a60ba99f14dfc0e1ca" }, "scheme": "ed25519" }, "7165b3cf2ad6a10d456498d958e80f2356b0d3a230d93a96a8dada5fdd8dd40d": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "d482fa4805a50870aa1356ace6b764f7ab47ed4dc38f49b1a189afa25f179e94" }, "scheme": "ed25519" }, "b1eb1d74c0e65524c85f96f9badf09a4d2ed1259fb427fc689fc2279ebb4d867": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "62f71f99c788f16bcdc8bb252455e3a690350e4ddea5a6aab1f9a3aaabcf369a" }, "scheme": "ed25519" }, "b59406a55fbe2492022f2951dacd01fc7b400b7b41ec4028b8356161a5a71a33": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "8656ad20568cd3534c405e4d9a84b0c6e6163f7f66434df77416502835b9b160" }, "scheme": "ed25519" }, "c7a2ca868b0e65b50cc6a2dfcfd9c129bdcb3da390ac78bb83a732be02ed5a5d": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "8656ad20568cd3534c405e4d9a84b0c6e6163f7f66434df77416502835b9b160" }, "scheme": "ed25519" }, "d77999c3b2d553fceee309cc47bf7ab2fee37b8a0b30d4033e4b40dc09719556": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "62f71f99c788f16bcdc8bb252455e3a690350e4ddea5a6aab1f9a3aaabcf369a" }, "scheme": "ed25519" }, "d792ff8cf3c5d9a8fe0fdfa585b25028fa9f49aa29c62a658140d4b98cc2c917": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "d482fa4805a50870aa1356ace6b764f7ab47ed4dc38f49b1a189afa25f179e94" }, "scheme": "ed25519" }, "f806b84c8763453d011c0ba830a3290ee4be587969f5325117c7626411a0f953": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "bca152214dbfd3e7a1b7a7b3e2cc179fb00520fd7212c8a60ba99f14dfc0e1ca" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "160f5ae5e7017bc783bbbe26c5419bbeeeb87f507b140ef474da0517d56549f7", "f806b84c8763453d011c0ba830a3290ee4be587969f5325117c7626411a0f953" ], "threshold": 1 }, "snapshot": { "keyids": [ "d792ff8cf3c5d9a8fe0fdfa585b25028fa9f49aa29c62a658140d4b98cc2c917", "7165b3cf2ad6a10d456498d958e80f2356b0d3a230d93a96a8dada5fdd8dd40d" ], "threshold": 1 }, "targets": { "keyids": [ "b1eb1d74c0e65524c85f96f9badf09a4d2ed1259fb427fc689fc2279ebb4d867", "d77999c3b2d553fceee309cc47bf7ab2fee37b8a0b30d4033e4b40dc09719556" ], "threshold": 1 }, "timestamp": { "keyids": [ "b59406a55fbe2492022f2951dacd01fc7b400b7b41ec4028b8356161a5a71a33", "c7a2ca868b0e65b50cc6a2dfcfd9c129bdcb3da390ac78bb83a732be02ed5a5d" ], "threshold": 1 } }, "spec_version": "1.0", "version": 1 }, "signatures": [ { "keyid": "160f5ae5e7017bc783bbbe26c5419bbeeeb87f507b140ef474da0517d56549f7", "method": "ed25519", "sig": "485c97e0bb392ee60f9644cdd430f1325cb2329a8c0223fc69b209061d8f3a72268a087f4a715f5a0f70f967edaecebdcc8e9fc914ea8aff1c9741d495f5f904" }, { "keyid": "f806b84c8763453d011c0ba830a3290ee4be587969f5325117c7626411a0f953", "method": "ed25519", "sig": "485c97e0bb392ee60f9644cdd430f1325cb2329a8c0223fc69b209061d8f3a72268a087f4a715f5a0f70f967edaecebdcc8e9fc914ea8aff1c9741d495f5f904" } ] }client/testdata/go-tuf-transition-M3/consistent-snapshot-true/0/repository/1.snapshot.json000066400000000000000000000021451453140004500322630ustar00rootroot00000000000000{ "signed": { "_type": "snapshot", "expires": "2100-01-01T00:00:00Z", "meta": { "root.json": { "hashes": { "sha512": "bf4f7f4a062fd3780055d98572619db84d6d6c9b9b647bf6bca1190e984963ffb86189fb455110f4c13956ce9cbe72d95d03c5e6d72295414ac6bbcc3d1957c3" }, "length": 3831, "version": 1 }, "targets.json": { "hashes": { "sha512": "6ecff211b4df20d84e5a99a1145b7f96752efe880147439a3a8c2ecc080762f84b5b784da1b41d2ccb1492d112c521b4b82973589285dfbcfbb6c423c559ff4e" }, "length": 866, "version": 1 } }, "spec_version": "1.0", "version": 1 }, "signatures": [ { "keyid": "d792ff8cf3c5d9a8fe0fdfa585b25028fa9f49aa29c62a658140d4b98cc2c917", "method": "ed25519", "sig": "f2ee59f04d66fa5a73249e985bae22e04bad839131334b630a2bd57566a2da2e5c32179c147daac927909a88a4896cc541dc30129450549c63b41bb5f0506e0d" }, { "keyid": "7165b3cf2ad6a10d456498d958e80f2356b0d3a230d93a96a8dada5fdd8dd40d", "method": "ed25519", "sig": "f2ee59f04d66fa5a73249e985bae22e04bad839131334b630a2bd57566a2da2e5c32179c147daac927909a88a4896cc541dc30129450549c63b41bb5f0506e0d" } ] }client/testdata/go-tuf-transition-M3/consistent-snapshot-true/0/repository/1.targets.json000066400000000000000000000015421453140004500320750ustar00rootroot00000000000000{ "signed": { "_type": "targets", "expires": "2100-01-01T00:00:00Z", "spec_version": "1.0", "targets": { "0": { "hashes": { "sha512": "31bca02094eb78126a517b206a88c73cfa9ec6f704c7030d18212cace820f025f00bf0ea68dbf3f3a5436ca63b53bf7bf80ad8d5de7d8359d0b7fed9dbc3ab99" }, "length": 1 } }, "version": 1 }, "signatures": [ { "keyid": "b1eb1d74c0e65524c85f96f9badf09a4d2ed1259fb427fc689fc2279ebb4d867", "method": "ed25519", "sig": "4d5c3a5da43f3792d077c1128fa28585982ff2957fae59be02a831fc920d0b91cbeaa99fd6c15066ec4da8bf12f993440a90d1624fd7b0a68070e5d60ed2500f" }, { "keyid": "d77999c3b2d553fceee309cc47bf7ab2fee37b8a0b30d4033e4b40dc09719556", "method": "ed25519", "sig": "4d5c3a5da43f3792d077c1128fa28585982ff2957fae59be02a831fc920d0b91cbeaa99fd6c15066ec4da8bf12f993440a90d1624fd7b0a68070e5d60ed2500f" } ] }7bf654da1a8459b7d986ada59713dcb14de271f5.paxheader00006660000000000000000000000343145314000450020604xustar00rootroot00000000000000227 path=client/testdata/go-tuf-transition-M3/consistent-snapshot-true/0/repository/33b282c1970996734deff944f2862f84b196f0b2b67dfa7383f75f95ef3e8673602aa411e05572075729ead6caa35df6720ce5723fd67c63d4aaa81dd966c5a4.snapshot.json 7bf654da1a8459b7d986ada59713dcb14de271f5.data000066400000000000000000000021451453140004500174440ustar00rootroot00000000000000{ "signed": { "_type": "snapshot", "expires": "2100-01-01T00:00:00Z", "meta": { "root.json": { "hashes": { "sha512": "bf4f7f4a062fd3780055d98572619db84d6d6c9b9b647bf6bca1190e984963ffb86189fb455110f4c13956ce9cbe72d95d03c5e6d72295414ac6bbcc3d1957c3" }, "length": 3831, "version": 1 }, "targets.json": { "hashes": { "sha512": "6ecff211b4df20d84e5a99a1145b7f96752efe880147439a3a8c2ecc080762f84b5b784da1b41d2ccb1492d112c521b4b82973589285dfbcfbb6c423c559ff4e" }, "length": 866, "version": 1 } }, "spec_version": "1.0", "version": 1 }, "signatures": [ { "keyid": "d792ff8cf3c5d9a8fe0fdfa585b25028fa9f49aa29c62a658140d4b98cc2c917", "method": "ed25519", "sig": "f2ee59f04d66fa5a73249e985bae22e04bad839131334b630a2bd57566a2da2e5c32179c147daac927909a88a4896cc541dc30129450549c63b41bb5f0506e0d" }, { "keyid": "7165b3cf2ad6a10d456498d958e80f2356b0d3a230d93a96a8dada5fdd8dd40d", "method": "ed25519", "sig": "f2ee59f04d66fa5a73249e985bae22e04bad839131334b630a2bd57566a2da2e5c32179c147daac927909a88a4896cc541dc30129450549c63b41bb5f0506e0d" } ] }60091e7364fa406cdaf2a2df26ded300db9a61af.paxheader00006660000000000000000000000342145314000450020702xustar00rootroot00000000000000226 path=client/testdata/go-tuf-transition-M3/consistent-snapshot-true/0/repository/6ecff211b4df20d84e5a99a1145b7f96752efe880147439a3a8c2ecc080762f84b5b784da1b41d2ccb1492d112c521b4b82973589285dfbcfbb6c423c559ff4e.targets.json 60091e7364fa406cdaf2a2df26ded300db9a61af.data000066400000000000000000000015421453140004500175430ustar00rootroot00000000000000{ "signed": { "_type": "targets", "expires": "2100-01-01T00:00:00Z", "spec_version": "1.0", "targets": { "0": { "hashes": { "sha512": "31bca02094eb78126a517b206a88c73cfa9ec6f704c7030d18212cace820f025f00bf0ea68dbf3f3a5436ca63b53bf7bf80ad8d5de7d8359d0b7fed9dbc3ab99" }, "length": 1 } }, "version": 1 }, "signatures": [ { "keyid": "b1eb1d74c0e65524c85f96f9badf09a4d2ed1259fb427fc689fc2279ebb4d867", "method": "ed25519", "sig": "4d5c3a5da43f3792d077c1128fa28585982ff2957fae59be02a831fc920d0b91cbeaa99fd6c15066ec4da8bf12f993440a90d1624fd7b0a68070e5d60ed2500f" }, { "keyid": "d77999c3b2d553fceee309cc47bf7ab2fee37b8a0b30d4033e4b40dc09719556", "method": "ed25519", "sig": "4d5c3a5da43f3792d077c1128fa28585982ff2957fae59be02a831fc920d0b91cbeaa99fd6c15066ec4da8bf12f993440a90d1624fd7b0a68070e5d60ed2500f" } ] }93189d2ca78d43e39ea9ac4f185815e66d111acb.paxheader00006660000000000000000000000337145314000450020523xustar00rootroot00000000000000223 path=client/testdata/go-tuf-transition-M3/consistent-snapshot-true/0/repository/bf4f7f4a062fd3780055d98572619db84d6d6c9b9b647bf6bca1190e984963ffb86189fb455110f4c13956ce9cbe72d95d03c5e6d72295414ac6bbcc3d1957c3.root.json 93189d2ca78d43e39ea9ac4f185815e66d111acb.data000066400000000000000000000073671453140004500173730ustar00rootroot00000000000000{ "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2100-01-01T00:00:00Z", "keys": { "160f5ae5e7017bc783bbbe26c5419bbeeeb87f507b140ef474da0517d56549f7": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "bca152214dbfd3e7a1b7a7b3e2cc179fb00520fd7212c8a60ba99f14dfc0e1ca" }, "scheme": "ed25519" }, "7165b3cf2ad6a10d456498d958e80f2356b0d3a230d93a96a8dada5fdd8dd40d": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "d482fa4805a50870aa1356ace6b764f7ab47ed4dc38f49b1a189afa25f179e94" }, "scheme": "ed25519" }, "b1eb1d74c0e65524c85f96f9badf09a4d2ed1259fb427fc689fc2279ebb4d867": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "62f71f99c788f16bcdc8bb252455e3a690350e4ddea5a6aab1f9a3aaabcf369a" }, "scheme": "ed25519" }, "b59406a55fbe2492022f2951dacd01fc7b400b7b41ec4028b8356161a5a71a33": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "8656ad20568cd3534c405e4d9a84b0c6e6163f7f66434df77416502835b9b160" }, "scheme": "ed25519" }, "c7a2ca868b0e65b50cc6a2dfcfd9c129bdcb3da390ac78bb83a732be02ed5a5d": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "8656ad20568cd3534c405e4d9a84b0c6e6163f7f66434df77416502835b9b160" }, "scheme": "ed25519" }, "d77999c3b2d553fceee309cc47bf7ab2fee37b8a0b30d4033e4b40dc09719556": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "62f71f99c788f16bcdc8bb252455e3a690350e4ddea5a6aab1f9a3aaabcf369a" }, "scheme": "ed25519" }, "d792ff8cf3c5d9a8fe0fdfa585b25028fa9f49aa29c62a658140d4b98cc2c917": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "d482fa4805a50870aa1356ace6b764f7ab47ed4dc38f49b1a189afa25f179e94" }, "scheme": "ed25519" }, "f806b84c8763453d011c0ba830a3290ee4be587969f5325117c7626411a0f953": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "bca152214dbfd3e7a1b7a7b3e2cc179fb00520fd7212c8a60ba99f14dfc0e1ca" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "160f5ae5e7017bc783bbbe26c5419bbeeeb87f507b140ef474da0517d56549f7", "f806b84c8763453d011c0ba830a3290ee4be587969f5325117c7626411a0f953" ], "threshold": 1 }, "snapshot": { "keyids": [ "d792ff8cf3c5d9a8fe0fdfa585b25028fa9f49aa29c62a658140d4b98cc2c917", "7165b3cf2ad6a10d456498d958e80f2356b0d3a230d93a96a8dada5fdd8dd40d" ], "threshold": 1 }, "targets": { "keyids": [ "b1eb1d74c0e65524c85f96f9badf09a4d2ed1259fb427fc689fc2279ebb4d867", "d77999c3b2d553fceee309cc47bf7ab2fee37b8a0b30d4033e4b40dc09719556" ], "threshold": 1 }, "timestamp": { "keyids": [ "b59406a55fbe2492022f2951dacd01fc7b400b7b41ec4028b8356161a5a71a33", "c7a2ca868b0e65b50cc6a2dfcfd9c129bdcb3da390ac78bb83a732be02ed5a5d" ], "threshold": 1 } }, "spec_version": "1.0", "version": 1 }, "signatures": [ { "keyid": "160f5ae5e7017bc783bbbe26c5419bbeeeb87f507b140ef474da0517d56549f7", "method": "ed25519", "sig": "485c97e0bb392ee60f9644cdd430f1325cb2329a8c0223fc69b209061d8f3a72268a087f4a715f5a0f70f967edaecebdcc8e9fc914ea8aff1c9741d495f5f904" }, { "keyid": "f806b84c8763453d011c0ba830a3290ee4be587969f5325117c7626411a0f953", "method": "ed25519", "sig": "485c97e0bb392ee60f9644cdd430f1325cb2329a8c0223fc69b209061d8f3a72268a087f4a715f5a0f70f967edaecebdcc8e9fc914ea8aff1c9741d495f5f904" } ] }client/testdata/go-tuf-transition-M3/consistent-snapshot-true/0/repository/root.json000066400000000000000000000073671453140004500312630ustar00rootroot00000000000000{ "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2100-01-01T00:00:00Z", "keys": { "160f5ae5e7017bc783bbbe26c5419bbeeeb87f507b140ef474da0517d56549f7": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "bca152214dbfd3e7a1b7a7b3e2cc179fb00520fd7212c8a60ba99f14dfc0e1ca" }, "scheme": "ed25519" }, "7165b3cf2ad6a10d456498d958e80f2356b0d3a230d93a96a8dada5fdd8dd40d": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "d482fa4805a50870aa1356ace6b764f7ab47ed4dc38f49b1a189afa25f179e94" }, "scheme": "ed25519" }, "b1eb1d74c0e65524c85f96f9badf09a4d2ed1259fb427fc689fc2279ebb4d867": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "62f71f99c788f16bcdc8bb252455e3a690350e4ddea5a6aab1f9a3aaabcf369a" }, "scheme": "ed25519" }, "b59406a55fbe2492022f2951dacd01fc7b400b7b41ec4028b8356161a5a71a33": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "8656ad20568cd3534c405e4d9a84b0c6e6163f7f66434df77416502835b9b160" }, "scheme": "ed25519" }, "c7a2ca868b0e65b50cc6a2dfcfd9c129bdcb3da390ac78bb83a732be02ed5a5d": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "8656ad20568cd3534c405e4d9a84b0c6e6163f7f66434df77416502835b9b160" }, "scheme": "ed25519" }, "d77999c3b2d553fceee309cc47bf7ab2fee37b8a0b30d4033e4b40dc09719556": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "62f71f99c788f16bcdc8bb252455e3a690350e4ddea5a6aab1f9a3aaabcf369a" }, "scheme": "ed25519" }, "d792ff8cf3c5d9a8fe0fdfa585b25028fa9f49aa29c62a658140d4b98cc2c917": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "d482fa4805a50870aa1356ace6b764f7ab47ed4dc38f49b1a189afa25f179e94" }, "scheme": "ed25519" }, "f806b84c8763453d011c0ba830a3290ee4be587969f5325117c7626411a0f953": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "bca152214dbfd3e7a1b7a7b3e2cc179fb00520fd7212c8a60ba99f14dfc0e1ca" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "160f5ae5e7017bc783bbbe26c5419bbeeeb87f507b140ef474da0517d56549f7", "f806b84c8763453d011c0ba830a3290ee4be587969f5325117c7626411a0f953" ], "threshold": 1 }, "snapshot": { "keyids": [ "d792ff8cf3c5d9a8fe0fdfa585b25028fa9f49aa29c62a658140d4b98cc2c917", "7165b3cf2ad6a10d456498d958e80f2356b0d3a230d93a96a8dada5fdd8dd40d" ], "threshold": 1 }, "targets": { "keyids": [ "b1eb1d74c0e65524c85f96f9badf09a4d2ed1259fb427fc689fc2279ebb4d867", "d77999c3b2d553fceee309cc47bf7ab2fee37b8a0b30d4033e4b40dc09719556" ], "threshold": 1 }, "timestamp": { "keyids": [ "b59406a55fbe2492022f2951dacd01fc7b400b7b41ec4028b8356161a5a71a33", "c7a2ca868b0e65b50cc6a2dfcfd9c129bdcb3da390ac78bb83a732be02ed5a5d" ], "threshold": 1 } }, "spec_version": "1.0", "version": 1 }, "signatures": [ { "keyid": "160f5ae5e7017bc783bbbe26c5419bbeeeb87f507b140ef474da0517d56549f7", "method": "ed25519", "sig": "485c97e0bb392ee60f9644cdd430f1325cb2329a8c0223fc69b209061d8f3a72268a087f4a715f5a0f70f967edaecebdcc8e9fc914ea8aff1c9741d495f5f904" }, { "keyid": "f806b84c8763453d011c0ba830a3290ee4be587969f5325117c7626411a0f953", "method": "ed25519", "sig": "485c97e0bb392ee60f9644cdd430f1325cb2329a8c0223fc69b209061d8f3a72268a087f4a715f5a0f70f967edaecebdcc8e9fc914ea8aff1c9741d495f5f904" } ] }client/testdata/go-tuf-transition-M3/consistent-snapshot-true/0/repository/snapshot.json000066400000000000000000000021451453140004500321240ustar00rootroot00000000000000{ "signed": { "_type": "snapshot", "expires": "2100-01-01T00:00:00Z", "meta": { "root.json": { "hashes": { "sha512": "bf4f7f4a062fd3780055d98572619db84d6d6c9b9b647bf6bca1190e984963ffb86189fb455110f4c13956ce9cbe72d95d03c5e6d72295414ac6bbcc3d1957c3" }, "length": 3831, "version": 1 }, "targets.json": { "hashes": { "sha512": "6ecff211b4df20d84e5a99a1145b7f96752efe880147439a3a8c2ecc080762f84b5b784da1b41d2ccb1492d112c521b4b82973589285dfbcfbb6c423c559ff4e" }, "length": 866, "version": 1 } }, "spec_version": "1.0", "version": 1 }, "signatures": [ { "keyid": "d792ff8cf3c5d9a8fe0fdfa585b25028fa9f49aa29c62a658140d4b98cc2c917", "method": "ed25519", "sig": "f2ee59f04d66fa5a73249e985bae22e04bad839131334b630a2bd57566a2da2e5c32179c147daac927909a88a4896cc541dc30129450549c63b41bb5f0506e0d" }, { "keyid": "7165b3cf2ad6a10d456498d958e80f2356b0d3a230d93a96a8dada5fdd8dd40d", "method": "ed25519", "sig": "f2ee59f04d66fa5a73249e985bae22e04bad839131334b630a2bd57566a2da2e5c32179c147daac927909a88a4896cc541dc30129450549c63b41bb5f0506e0d" } ] }client/testdata/go-tuf-transition-M3/consistent-snapshot-true/0/repository/targets.json000066400000000000000000000015421453140004500317360ustar00rootroot00000000000000{ "signed": { "_type": "targets", "expires": "2100-01-01T00:00:00Z", "spec_version": "1.0", "targets": { "0": { "hashes": { "sha512": "31bca02094eb78126a517b206a88c73cfa9ec6f704c7030d18212cace820f025f00bf0ea68dbf3f3a5436ca63b53bf7bf80ad8d5de7d8359d0b7fed9dbc3ab99" }, "length": 1 } }, "version": 1 }, "signatures": [ { "keyid": "b1eb1d74c0e65524c85f96f9badf09a4d2ed1259fb427fc689fc2279ebb4d867", "method": "ed25519", "sig": "4d5c3a5da43f3792d077c1128fa28585982ff2957fae59be02a831fc920d0b91cbeaa99fd6c15066ec4da8bf12f993440a90d1624fd7b0a68070e5d60ed2500f" }, { "keyid": "d77999c3b2d553fceee309cc47bf7ab2fee37b8a0b30d4033e4b40dc09719556", "method": "ed25519", "sig": "4d5c3a5da43f3792d077c1128fa28585982ff2957fae59be02a831fc920d0b91cbeaa99fd6c15066ec4da8bf12f993440a90d1624fd7b0a68070e5d60ed2500f" } ] }client/testdata/go-tuf-transition-M3/consistent-snapshot-true/0/repository/targets/000077500000000000000000000000001453140004500310415ustar00rootroot00000000000000client/testdata/go-tuf-transition-M3/consistent-snapshot-true/0/repository/targets/0.0000066400000000000000000000000011453140004500312500ustar00rootroot000000000000000c227083464fb9af8955c90d2924774ee50abb547.paxheader00006660000000000000000000000337145314000450020312xustar00rootroot00000000000000223 path=client/testdata/go-tuf-transition-M3/consistent-snapshot-true/0/repository/targets/31bca02094eb78126a517b206a88c73cfa9ec6f704c7030d18212cace820f025f00bf0ea68dbf3f3a5436ca63b53bf7bf80ad8d5de7d8359d0b7fed9dbc3ab99.0 c227083464fb9af8955c90d2924774ee50abb547.data000066400000000000000000000000011453140004500171340ustar00rootroot000000000000000client/testdata/go-tuf-transition-M3/consistent-snapshot-true/0/repository/timestamp.json000066400000000000000000000016021453140004500322650ustar00rootroot00000000000000{ "signed": { "_type": "timestamp", "expires": "2100-01-01T00:00:00Z", "meta": { "snapshot.json": { "hashes": { "sha512": "33b282c1970996734deff944f2862f84b196f0b2b67dfa7383f75f95ef3e8673602aa411e05572075729ead6caa35df6720ce5723fd67c63d4aaa81dd966c5a4" }, "length": 1125, "version": 1 } }, "spec_version": "1.0", "version": 1 }, "signatures": [ { "keyid": "b59406a55fbe2492022f2951dacd01fc7b400b7b41ec4028b8356161a5a71a33", "method": "ed25519", "sig": "1b51547737f70f5a3c4ee95c4ae9698d571777dd8b0a3c5d57af266beb95802889b3d7ba9062ff06e85427f05b76ad193d5f3ca45e1be86a266e53b2d0526504" }, { "keyid": "c7a2ca868b0e65b50cc6a2dfcfd9c129bdcb3da390ac78bb83a732be02ed5a5d", "method": "ed25519", "sig": "1b51547737f70f5a3c4ee95c4ae9698d571777dd8b0a3c5d57af266beb95802889b3d7ba9062ff06e85427f05b76ad193d5f3ca45e1be86a266e53b2d0526504" } ] }client/testdata/go-tuf-transition-M3/consistent-snapshot-true/1/000077500000000000000000000000001453140004500251525ustar00rootroot00000000000000client/testdata/go-tuf-transition-M3/consistent-snapshot-true/1/repository/000077500000000000000000000000001453140004500273715ustar00rootroot00000000000000client/testdata/go-tuf-transition-M3/consistent-snapshot-true/1/repository/1.root.json000077700000000000000000000000001453140004500364222../../0/repository/1.root.jsonustar00rootroot00000000000000client/testdata/go-tuf-transition-M3/consistent-snapshot-true/1/repository/1.snapshot.json000077700000000000000000000000001453140004500401522../../0/repository/1.snapshot.jsonustar00rootroot00000000000000client/testdata/go-tuf-transition-M3/consistent-snapshot-true/1/repository/1.targets.json000077700000000000000000000000001453140004500375762../../0/repository/1.targets.jsonustar00rootroot00000000000000eeb97eb33afd2f24c87ba0aa07f1db6b10f0a0ee.paxheader00006660000000000000000000000342145314000450021174xustar00rootroot00000000000000226 path=client/testdata/go-tuf-transition-M3/consistent-snapshot-true/1/repository/118c2a2b6b9f7bc667dca8404a2671910a22b6fe48e460816a9f6f2be66f7806a789c9dc4880d2c2812c0bc7607caac30cc0a8299183fd7228e1049f6920ce22.targets.json eeb97eb33afd2f24c87ba0aa07f1db6b10f0a0ee.data000066400000000000000000000020531453140004500200330ustar00rootroot00000000000000{ "signed": { "_type": "targets", "expires": "2100-01-01T00:00:00Z", "spec_version": "1.0", "targets": { "0": { "hashes": { "sha512": "31bca02094eb78126a517b206a88c73cfa9ec6f704c7030d18212cace820f025f00bf0ea68dbf3f3a5436ca63b53bf7bf80ad8d5de7d8359d0b7fed9dbc3ab99" }, "length": 1 }, "1": { "hashes": { "sha512": "4dff4ea340f0a823f15d3f4f01ab62eae0e5da579ccb851f8db9dfe84c58b2b37b89903a740e1ee172da793a6e79d560e5f7f9bd058a12a280433ed6fa46510a" }, "length": 1 } }, "version": 2 }, "signatures": [ { "keyid": "b1eb1d74c0e65524c85f96f9badf09a4d2ed1259fb427fc689fc2279ebb4d867", "method": "ed25519", "sig": "81bcf5921834a20b8b0946815ad4316f43ffce20b3793e6653dc5fd4b98f1c6318ce2243948574e82414a102717a6f2d731250b3191c54abc8391fd867503e0b" }, { "keyid": "d77999c3b2d553fceee309cc47bf7ab2fee37b8a0b30d4033e4b40dc09719556", "method": "ed25519", "sig": "81bcf5921834a20b8b0946815ad4316f43ffce20b3793e6653dc5fd4b98f1c6318ce2243948574e82414a102717a6f2d731250b3191c54abc8391fd867503e0b" } ] }client/testdata/go-tuf-transition-M3/consistent-snapshot-true/1/repository/2.root.json000066400000000000000000000103631453140004500314120ustar00rootroot00000000000000{ "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2100-01-01T00:00:00Z", "keys": { "4c663b6d0b9f2c74a19b6791c1417c8d1916e2d84461be1a8148e4386c89582d": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "153986a7370e002f377dd68797e7466c421180c1571e233de2f8ab41c8af4f54" }, "scheme": "ed25519" }, "7165b3cf2ad6a10d456498d958e80f2356b0d3a230d93a96a8dada5fdd8dd40d": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "d482fa4805a50870aa1356ace6b764f7ab47ed4dc38f49b1a189afa25f179e94" }, "scheme": "ed25519" }, "a67ca94ed559c97db79999d32b79ca35b5ae1795d2f6be3eafa3bd5816a8f2c4": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "153986a7370e002f377dd68797e7466c421180c1571e233de2f8ab41c8af4f54" }, "scheme": "ed25519" }, "b1eb1d74c0e65524c85f96f9badf09a4d2ed1259fb427fc689fc2279ebb4d867": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "62f71f99c788f16bcdc8bb252455e3a690350e4ddea5a6aab1f9a3aaabcf369a" }, "scheme": "ed25519" }, "b59406a55fbe2492022f2951dacd01fc7b400b7b41ec4028b8356161a5a71a33": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "8656ad20568cd3534c405e4d9a84b0c6e6163f7f66434df77416502835b9b160" }, "scheme": "ed25519" }, "c7a2ca868b0e65b50cc6a2dfcfd9c129bdcb3da390ac78bb83a732be02ed5a5d": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "8656ad20568cd3534c405e4d9a84b0c6e6163f7f66434df77416502835b9b160" }, "scheme": "ed25519" }, "d77999c3b2d553fceee309cc47bf7ab2fee37b8a0b30d4033e4b40dc09719556": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "62f71f99c788f16bcdc8bb252455e3a690350e4ddea5a6aab1f9a3aaabcf369a" }, "scheme": "ed25519" }, "d792ff8cf3c5d9a8fe0fdfa585b25028fa9f49aa29c62a658140d4b98cc2c917": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "d482fa4805a50870aa1356ace6b764f7ab47ed4dc38f49b1a189afa25f179e94" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "4c663b6d0b9f2c74a19b6791c1417c8d1916e2d84461be1a8148e4386c89582d", "a67ca94ed559c97db79999d32b79ca35b5ae1795d2f6be3eafa3bd5816a8f2c4" ], "threshold": 1 }, "snapshot": { "keyids": [ "d792ff8cf3c5d9a8fe0fdfa585b25028fa9f49aa29c62a658140d4b98cc2c917", "7165b3cf2ad6a10d456498d958e80f2356b0d3a230d93a96a8dada5fdd8dd40d" ], "threshold": 1 }, "targets": { "keyids": [ "b1eb1d74c0e65524c85f96f9badf09a4d2ed1259fb427fc689fc2279ebb4d867", "d77999c3b2d553fceee309cc47bf7ab2fee37b8a0b30d4033e4b40dc09719556" ], "threshold": 1 }, "timestamp": { "keyids": [ "b59406a55fbe2492022f2951dacd01fc7b400b7b41ec4028b8356161a5a71a33", "c7a2ca868b0e65b50cc6a2dfcfd9c129bdcb3da390ac78bb83a732be02ed5a5d" ], "threshold": 1 } }, "spec_version": "1.0", "version": 2 }, "signatures": [ { "keyid": "160f5ae5e7017bc783bbbe26c5419bbeeeb87f507b140ef474da0517d56549f7", "method": "ed25519", "sig": "eaca65a09fb8f16ebc7c4560e9d23875225c0fd0f84747542a23e2dd9942fcf4c2bebd7292f06e1eaaf242048103594107353b75eea161bfe15ab24bfd752706" }, { "keyid": "f806b84c8763453d011c0ba830a3290ee4be587969f5325117c7626411a0f953", "method": "ed25519", "sig": "eaca65a09fb8f16ebc7c4560e9d23875225c0fd0f84747542a23e2dd9942fcf4c2bebd7292f06e1eaaf242048103594107353b75eea161bfe15ab24bfd752706" }, { "keyid": "4c663b6d0b9f2c74a19b6791c1417c8d1916e2d84461be1a8148e4386c89582d", "method": "ed25519", "sig": "0dd9685391cc229d15c468fb3a71d93780bf1220b82e97c5dc6384db76eab74b9254478c89c26f5cf86f640e6a49d0a9d6990ba151fb862648181c8c029f470d" }, { "keyid": "a67ca94ed559c97db79999d32b79ca35b5ae1795d2f6be3eafa3bd5816a8f2c4", "method": "ed25519", "sig": "0dd9685391cc229d15c468fb3a71d93780bf1220b82e97c5dc6384db76eab74b9254478c89c26f5cf86f640e6a49d0a9d6990ba151fb862648181c8c029f470d" } ] }client/testdata/go-tuf-transition-M3/consistent-snapshot-true/1/repository/2.snapshot.json000066400000000000000000000021461453140004500322660ustar00rootroot00000000000000{ "signed": { "_type": "snapshot", "expires": "2100-01-01T00:00:00Z", "meta": { "root.json": { "hashes": { "sha512": "93b38df5b9cb993dd7e2e16e9b8dd07386b35936f21c36b7527e1587052dce86f64b5eb5669fffe86b4aae4c581a2bbba6e49d780d8687dd6c304fae9b6fe098" }, "length": 4339, "version": 2 }, "targets.json": { "hashes": { "sha512": "118c2a2b6b9f7bc667dca8404a2671910a22b6fe48e460816a9f6f2be66f7806a789c9dc4880d2c2812c0bc7607caac30cc0a8299183fd7228e1049f6920ce22" }, "length": 1067, "version": 2 } }, "spec_version": "1.0", "version": 2 }, "signatures": [ { "keyid": "d792ff8cf3c5d9a8fe0fdfa585b25028fa9f49aa29c62a658140d4b98cc2c917", "method": "ed25519", "sig": "f5b71b0dfefa020f7110d8767d5a6b7a98f6a71a89a3819cd54ae628081502b3bd18e8c7f1254f53a5346088deaee66fdd359ae365ea3758f0dc0032e9517a05" }, { "keyid": "7165b3cf2ad6a10d456498d958e80f2356b0d3a230d93a96a8dada5fdd8dd40d", "method": "ed25519", "sig": "f5b71b0dfefa020f7110d8767d5a6b7a98f6a71a89a3819cd54ae628081502b3bd18e8c7f1254f53a5346088deaee66fdd359ae365ea3758f0dc0032e9517a05" } ] }client/testdata/go-tuf-transition-M3/consistent-snapshot-true/1/repository/2.targets.json000066400000000000000000000020531453140004500320750ustar00rootroot00000000000000{ "signed": { "_type": "targets", "expires": "2100-01-01T00:00:00Z", "spec_version": "1.0", "targets": { "0": { "hashes": { "sha512": "31bca02094eb78126a517b206a88c73cfa9ec6f704c7030d18212cace820f025f00bf0ea68dbf3f3a5436ca63b53bf7bf80ad8d5de7d8359d0b7fed9dbc3ab99" }, "length": 1 }, "1": { "hashes": { "sha512": "4dff4ea340f0a823f15d3f4f01ab62eae0e5da579ccb851f8db9dfe84c58b2b37b89903a740e1ee172da793a6e79d560e5f7f9bd058a12a280433ed6fa46510a" }, "length": 1 } }, "version": 2 }, "signatures": [ { "keyid": "b1eb1d74c0e65524c85f96f9badf09a4d2ed1259fb427fc689fc2279ebb4d867", "method": "ed25519", "sig": "81bcf5921834a20b8b0946815ad4316f43ffce20b3793e6653dc5fd4b98f1c6318ce2243948574e82414a102717a6f2d731250b3191c54abc8391fd867503e0b" }, { "keyid": "d77999c3b2d553fceee309cc47bf7ab2fee37b8a0b30d4033e4b40dc09719556", "method": "ed25519", "sig": "81bcf5921834a20b8b0946815ad4316f43ffce20b3793e6653dc5fd4b98f1c6318ce2243948574e82414a102717a6f2d731250b3191c54abc8391fd867503e0b" } ] }43bfdc14c5c15222afdc7854386136c4809b353c.paxheader00006660000000000000000000000343145314000450020341xustar00rootroot00000000000000227 path=client/testdata/go-tuf-transition-M3/consistent-snapshot-true/1/repository/23170400c30b4bbcd375c88ae22104241e377006e9c40c64ed49aef9ad2bdfa49ba2832ccb9c3776aaee336195de73cda28b5ba65fb468f7a5e60b870cbe26e9.snapshot.json 43bfdc14c5c15222afdc7854386136c4809b353c.data000066400000000000000000000021461453140004500172020ustar00rootroot00000000000000{ "signed": { "_type": "snapshot", "expires": "2100-01-01T00:00:00Z", "meta": { "root.json": { "hashes": { "sha512": "93b38df5b9cb993dd7e2e16e9b8dd07386b35936f21c36b7527e1587052dce86f64b5eb5669fffe86b4aae4c581a2bbba6e49d780d8687dd6c304fae9b6fe098" }, "length": 4339, "version": 2 }, "targets.json": { "hashes": { "sha512": "118c2a2b6b9f7bc667dca8404a2671910a22b6fe48e460816a9f6f2be66f7806a789c9dc4880d2c2812c0bc7607caac30cc0a8299183fd7228e1049f6920ce22" }, "length": 1067, "version": 2 } }, "spec_version": "1.0", "version": 2 }, "signatures": [ { "keyid": "d792ff8cf3c5d9a8fe0fdfa585b25028fa9f49aa29c62a658140d4b98cc2c917", "method": "ed25519", "sig": "f5b71b0dfefa020f7110d8767d5a6b7a98f6a71a89a3819cd54ae628081502b3bd18e8c7f1254f53a5346088deaee66fdd359ae365ea3758f0dc0032e9517a05" }, { "keyid": "7165b3cf2ad6a10d456498d958e80f2356b0d3a230d93a96a8dada5fdd8dd40d", "method": "ed25519", "sig": "f5b71b0dfefa020f7110d8767d5a6b7a98f6a71a89a3819cd54ae628081502b3bd18e8c7f1254f53a5346088deaee66fdd359ae365ea3758f0dc0032e9517a05" } ] }027671c5b6e62c004327a472b8afb93c5be90cc3.paxheader00006660000000000000000000000622145314000450020413xustar00rootroot00000000000000227 path=client/testdata/go-tuf-transition-M3/consistent-snapshot-true/1/repository/33b282c1970996734deff944f2862f84b196f0b2b67dfa7383f75f95ef3e8673602aa411e05572075729ead6caa35df6720ce5723fd67c63d4aaa81dd966c5a4.snapshot.json 175 linkpath=../../0/repository/33b282c1970996734deff944f2862f84b196f0b2b67dfa7383f75f95ef3e8673602aa411e05572075729ead6caa35df6720ce5723fd67c63d4aaa81dd966c5a4.snapshot.json 027671c5b6e62c004327a472b8afb93c5be90cc3.data000077700000000000000000000000001453140004500272302see 027671c5b6e62c004327a472b8afb93c5be90cc3.paxheaderustar00rootroot00000000000000aecd94767eb65bca9fe358b87d4870ddbfdeec0d.paxheader00006660000000000000000000000620145314000450021253xustar00rootroot00000000000000226 path=client/testdata/go-tuf-transition-M3/consistent-snapshot-true/1/repository/6ecff211b4df20d84e5a99a1145b7f96752efe880147439a3a8c2ecc080762f84b5b784da1b41d2ccb1492d112c521b4b82973589285dfbcfbb6c423c559ff4e.targets.json 174 linkpath=../../0/repository/6ecff211b4df20d84e5a99a1145b7f96752efe880147439a3a8c2ecc080762f84b5b784da1b41d2ccb1492d112c521b4b82973589285dfbcfbb6c423c559ff4e.targets.json aecd94767eb65bca9fe358b87d4870ddbfdeec0d.data000077700000000000000000000000001453140004500307342see aecd94767eb65bca9fe358b87d4870ddbfdeec0d.paxheaderustar00rootroot00000000000000911c87f8c61d9e967f7644c5a66b526fbfa099bd.paxheader00006660000000000000000000000337145314000450020554xustar00rootroot00000000000000223 path=client/testdata/go-tuf-transition-M3/consistent-snapshot-true/1/repository/93b38df5b9cb993dd7e2e16e9b8dd07386b35936f21c36b7527e1587052dce86f64b5eb5669fffe86b4aae4c581a2bbba6e49d780d8687dd6c304fae9b6fe098.root.json 911c87f8c61d9e967f7644c5a66b526fbfa099bd.data000066400000000000000000000103631453140004500174120ustar00rootroot00000000000000{ "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2100-01-01T00:00:00Z", "keys": { "4c663b6d0b9f2c74a19b6791c1417c8d1916e2d84461be1a8148e4386c89582d": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "153986a7370e002f377dd68797e7466c421180c1571e233de2f8ab41c8af4f54" }, "scheme": "ed25519" }, "7165b3cf2ad6a10d456498d958e80f2356b0d3a230d93a96a8dada5fdd8dd40d": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "d482fa4805a50870aa1356ace6b764f7ab47ed4dc38f49b1a189afa25f179e94" }, "scheme": "ed25519" }, "a67ca94ed559c97db79999d32b79ca35b5ae1795d2f6be3eafa3bd5816a8f2c4": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "153986a7370e002f377dd68797e7466c421180c1571e233de2f8ab41c8af4f54" }, "scheme": "ed25519" }, "b1eb1d74c0e65524c85f96f9badf09a4d2ed1259fb427fc689fc2279ebb4d867": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "62f71f99c788f16bcdc8bb252455e3a690350e4ddea5a6aab1f9a3aaabcf369a" }, "scheme": "ed25519" }, "b59406a55fbe2492022f2951dacd01fc7b400b7b41ec4028b8356161a5a71a33": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "8656ad20568cd3534c405e4d9a84b0c6e6163f7f66434df77416502835b9b160" }, "scheme": "ed25519" }, "c7a2ca868b0e65b50cc6a2dfcfd9c129bdcb3da390ac78bb83a732be02ed5a5d": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "8656ad20568cd3534c405e4d9a84b0c6e6163f7f66434df77416502835b9b160" }, "scheme": "ed25519" }, "d77999c3b2d553fceee309cc47bf7ab2fee37b8a0b30d4033e4b40dc09719556": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "62f71f99c788f16bcdc8bb252455e3a690350e4ddea5a6aab1f9a3aaabcf369a" }, "scheme": "ed25519" }, "d792ff8cf3c5d9a8fe0fdfa585b25028fa9f49aa29c62a658140d4b98cc2c917": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "d482fa4805a50870aa1356ace6b764f7ab47ed4dc38f49b1a189afa25f179e94" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "4c663b6d0b9f2c74a19b6791c1417c8d1916e2d84461be1a8148e4386c89582d", "a67ca94ed559c97db79999d32b79ca35b5ae1795d2f6be3eafa3bd5816a8f2c4" ], "threshold": 1 }, "snapshot": { "keyids": [ "d792ff8cf3c5d9a8fe0fdfa585b25028fa9f49aa29c62a658140d4b98cc2c917", "7165b3cf2ad6a10d456498d958e80f2356b0d3a230d93a96a8dada5fdd8dd40d" ], "threshold": 1 }, "targets": { "keyids": [ "b1eb1d74c0e65524c85f96f9badf09a4d2ed1259fb427fc689fc2279ebb4d867", "d77999c3b2d553fceee309cc47bf7ab2fee37b8a0b30d4033e4b40dc09719556" ], "threshold": 1 }, "timestamp": { "keyids": [ "b59406a55fbe2492022f2951dacd01fc7b400b7b41ec4028b8356161a5a71a33", "c7a2ca868b0e65b50cc6a2dfcfd9c129bdcb3da390ac78bb83a732be02ed5a5d" ], "threshold": 1 } }, "spec_version": "1.0", "version": 2 }, "signatures": [ { "keyid": "160f5ae5e7017bc783bbbe26c5419bbeeeb87f507b140ef474da0517d56549f7", "method": "ed25519", "sig": "eaca65a09fb8f16ebc7c4560e9d23875225c0fd0f84747542a23e2dd9942fcf4c2bebd7292f06e1eaaf242048103594107353b75eea161bfe15ab24bfd752706" }, { "keyid": "f806b84c8763453d011c0ba830a3290ee4be587969f5325117c7626411a0f953", "method": "ed25519", "sig": "eaca65a09fb8f16ebc7c4560e9d23875225c0fd0f84747542a23e2dd9942fcf4c2bebd7292f06e1eaaf242048103594107353b75eea161bfe15ab24bfd752706" }, { "keyid": "4c663b6d0b9f2c74a19b6791c1417c8d1916e2d84461be1a8148e4386c89582d", "method": "ed25519", "sig": "0dd9685391cc229d15c468fb3a71d93780bf1220b82e97c5dc6384db76eab74b9254478c89c26f5cf86f640e6a49d0a9d6990ba151fb862648181c8c029f470d" }, { "keyid": "a67ca94ed559c97db79999d32b79ca35b5ae1795d2f6be3eafa3bd5816a8f2c4", "method": "ed25519", "sig": "0dd9685391cc229d15c468fb3a71d93780bf1220b82e97c5dc6384db76eab74b9254478c89c26f5cf86f640e6a49d0a9d6990ba151fb862648181c8c029f470d" } ] }70b171e66ebd3fdb02699c077c39f45b1029ddf8.paxheader00006660000000000000000000000612145314000450020517xustar00rootroot00000000000000223 path=client/testdata/go-tuf-transition-M3/consistent-snapshot-true/1/repository/bf4f7f4a062fd3780055d98572619db84d6d6c9b9b647bf6bca1190e984963ffb86189fb455110f4c13956ce9cbe72d95d03c5e6d72295414ac6bbcc3d1957c3.root.json 171 linkpath=../../0/repository/bf4f7f4a062fd3780055d98572619db84d6d6c9b9b647bf6bca1190e984963ffb86189fb455110f4c13956ce9cbe72d95d03c5e6d72295414ac6bbcc3d1957c3.root.json 70b171e66ebd3fdb02699c077c39f45b1029ddf8.data000077700000000000000000000000001453140004500274422see 70b171e66ebd3fdb02699c077c39f45b1029ddf8.paxheaderustar00rootroot00000000000000client/testdata/go-tuf-transition-M3/consistent-snapshot-true/1/repository/root.json000066400000000000000000000103631453140004500312520ustar00rootroot00000000000000{ "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2100-01-01T00:00:00Z", "keys": { "4c663b6d0b9f2c74a19b6791c1417c8d1916e2d84461be1a8148e4386c89582d": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "153986a7370e002f377dd68797e7466c421180c1571e233de2f8ab41c8af4f54" }, "scheme": "ed25519" }, "7165b3cf2ad6a10d456498d958e80f2356b0d3a230d93a96a8dada5fdd8dd40d": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "d482fa4805a50870aa1356ace6b764f7ab47ed4dc38f49b1a189afa25f179e94" }, "scheme": "ed25519" }, "a67ca94ed559c97db79999d32b79ca35b5ae1795d2f6be3eafa3bd5816a8f2c4": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "153986a7370e002f377dd68797e7466c421180c1571e233de2f8ab41c8af4f54" }, "scheme": "ed25519" }, "b1eb1d74c0e65524c85f96f9badf09a4d2ed1259fb427fc689fc2279ebb4d867": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "62f71f99c788f16bcdc8bb252455e3a690350e4ddea5a6aab1f9a3aaabcf369a" }, "scheme": "ed25519" }, "b59406a55fbe2492022f2951dacd01fc7b400b7b41ec4028b8356161a5a71a33": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "8656ad20568cd3534c405e4d9a84b0c6e6163f7f66434df77416502835b9b160" }, "scheme": "ed25519" }, "c7a2ca868b0e65b50cc6a2dfcfd9c129bdcb3da390ac78bb83a732be02ed5a5d": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "8656ad20568cd3534c405e4d9a84b0c6e6163f7f66434df77416502835b9b160" }, "scheme": "ed25519" }, "d77999c3b2d553fceee309cc47bf7ab2fee37b8a0b30d4033e4b40dc09719556": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "62f71f99c788f16bcdc8bb252455e3a690350e4ddea5a6aab1f9a3aaabcf369a" }, "scheme": "ed25519" }, "d792ff8cf3c5d9a8fe0fdfa585b25028fa9f49aa29c62a658140d4b98cc2c917": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "d482fa4805a50870aa1356ace6b764f7ab47ed4dc38f49b1a189afa25f179e94" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "4c663b6d0b9f2c74a19b6791c1417c8d1916e2d84461be1a8148e4386c89582d", "a67ca94ed559c97db79999d32b79ca35b5ae1795d2f6be3eafa3bd5816a8f2c4" ], "threshold": 1 }, "snapshot": { "keyids": [ "d792ff8cf3c5d9a8fe0fdfa585b25028fa9f49aa29c62a658140d4b98cc2c917", "7165b3cf2ad6a10d456498d958e80f2356b0d3a230d93a96a8dada5fdd8dd40d" ], "threshold": 1 }, "targets": { "keyids": [ "b1eb1d74c0e65524c85f96f9badf09a4d2ed1259fb427fc689fc2279ebb4d867", "d77999c3b2d553fceee309cc47bf7ab2fee37b8a0b30d4033e4b40dc09719556" ], "threshold": 1 }, "timestamp": { "keyids": [ "b59406a55fbe2492022f2951dacd01fc7b400b7b41ec4028b8356161a5a71a33", "c7a2ca868b0e65b50cc6a2dfcfd9c129bdcb3da390ac78bb83a732be02ed5a5d" ], "threshold": 1 } }, "spec_version": "1.0", "version": 2 }, "signatures": [ { "keyid": "160f5ae5e7017bc783bbbe26c5419bbeeeb87f507b140ef474da0517d56549f7", "method": "ed25519", "sig": "eaca65a09fb8f16ebc7c4560e9d23875225c0fd0f84747542a23e2dd9942fcf4c2bebd7292f06e1eaaf242048103594107353b75eea161bfe15ab24bfd752706" }, { "keyid": "f806b84c8763453d011c0ba830a3290ee4be587969f5325117c7626411a0f953", "method": "ed25519", "sig": "eaca65a09fb8f16ebc7c4560e9d23875225c0fd0f84747542a23e2dd9942fcf4c2bebd7292f06e1eaaf242048103594107353b75eea161bfe15ab24bfd752706" }, { "keyid": "4c663b6d0b9f2c74a19b6791c1417c8d1916e2d84461be1a8148e4386c89582d", "method": "ed25519", "sig": "0dd9685391cc229d15c468fb3a71d93780bf1220b82e97c5dc6384db76eab74b9254478c89c26f5cf86f640e6a49d0a9d6990ba151fb862648181c8c029f470d" }, { "keyid": "a67ca94ed559c97db79999d32b79ca35b5ae1795d2f6be3eafa3bd5816a8f2c4", "method": "ed25519", "sig": "0dd9685391cc229d15c468fb3a71d93780bf1220b82e97c5dc6384db76eab74b9254478c89c26f5cf86f640e6a49d0a9d6990ba151fb862648181c8c029f470d" } ] }client/testdata/go-tuf-transition-M3/consistent-snapshot-true/1/repository/snapshot.json000066400000000000000000000021461453140004500321260ustar00rootroot00000000000000{ "signed": { "_type": "snapshot", "expires": "2100-01-01T00:00:00Z", "meta": { "root.json": { "hashes": { "sha512": "93b38df5b9cb993dd7e2e16e9b8dd07386b35936f21c36b7527e1587052dce86f64b5eb5669fffe86b4aae4c581a2bbba6e49d780d8687dd6c304fae9b6fe098" }, "length": 4339, "version": 2 }, "targets.json": { "hashes": { "sha512": "118c2a2b6b9f7bc667dca8404a2671910a22b6fe48e460816a9f6f2be66f7806a789c9dc4880d2c2812c0bc7607caac30cc0a8299183fd7228e1049f6920ce22" }, "length": 1067, "version": 2 } }, "spec_version": "1.0", "version": 2 }, "signatures": [ { "keyid": "d792ff8cf3c5d9a8fe0fdfa585b25028fa9f49aa29c62a658140d4b98cc2c917", "method": "ed25519", "sig": "f5b71b0dfefa020f7110d8767d5a6b7a98f6a71a89a3819cd54ae628081502b3bd18e8c7f1254f53a5346088deaee66fdd359ae365ea3758f0dc0032e9517a05" }, { "keyid": "7165b3cf2ad6a10d456498d958e80f2356b0d3a230d93a96a8dada5fdd8dd40d", "method": "ed25519", "sig": "f5b71b0dfefa020f7110d8767d5a6b7a98f6a71a89a3819cd54ae628081502b3bd18e8c7f1254f53a5346088deaee66fdd359ae365ea3758f0dc0032e9517a05" } ] }client/testdata/go-tuf-transition-M3/consistent-snapshot-true/1/repository/targets.json000066400000000000000000000020531453140004500317350ustar00rootroot00000000000000{ "signed": { "_type": "targets", "expires": "2100-01-01T00:00:00Z", "spec_version": "1.0", "targets": { "0": { "hashes": { "sha512": "31bca02094eb78126a517b206a88c73cfa9ec6f704c7030d18212cace820f025f00bf0ea68dbf3f3a5436ca63b53bf7bf80ad8d5de7d8359d0b7fed9dbc3ab99" }, "length": 1 }, "1": { "hashes": { "sha512": "4dff4ea340f0a823f15d3f4f01ab62eae0e5da579ccb851f8db9dfe84c58b2b37b89903a740e1ee172da793a6e79d560e5f7f9bd058a12a280433ed6fa46510a" }, "length": 1 } }, "version": 2 }, "signatures": [ { "keyid": "b1eb1d74c0e65524c85f96f9badf09a4d2ed1259fb427fc689fc2279ebb4d867", "method": "ed25519", "sig": "81bcf5921834a20b8b0946815ad4316f43ffce20b3793e6653dc5fd4b98f1c6318ce2243948574e82414a102717a6f2d731250b3191c54abc8391fd867503e0b" }, { "keyid": "d77999c3b2d553fceee309cc47bf7ab2fee37b8a0b30d4033e4b40dc09719556", "method": "ed25519", "sig": "81bcf5921834a20b8b0946815ad4316f43ffce20b3793e6653dc5fd4b98f1c6318ce2243948574e82414a102717a6f2d731250b3191c54abc8391fd867503e0b" } ] }client/testdata/go-tuf-transition-M3/consistent-snapshot-true/1/repository/targets/000077500000000000000000000000001453140004500310425ustar00rootroot00000000000000client/testdata/go-tuf-transition-M3/consistent-snapshot-true/1/repository/targets/0.0000077700000000000000000000000001453140004500363652../../../0/repository/targets/0.0ustar00rootroot00000000000000client/testdata/go-tuf-transition-M3/consistent-snapshot-true/1/repository/targets/0.1000066400000000000000000000000011453140004500312520ustar00rootroot000000000000001b0c459f9f5bb60a8bf42ecdd64a211da1b0d7e9e.paxheader00006660000000000000000000000615145314000450021057xustar00rootroot00000000000000223 path=client/testdata/go-tuf-transition-M3/consistent-snapshot-true/1/repository/targets/31bca02094eb78126a517b206a88c73cfa9ec6f704c7030d18212cace820f025f00bf0ea68dbf3f3a5436ca63b53bf7bf80ad8d5de7d8359d0b7fed9dbc3ab99.0 174 linkpath=../../../0/repository/targets/31bca02094eb78126a517b206a88c73cfa9ec6f704c7030d18212cace820f025f00bf0ea68dbf3f3a5436ca63b53bf7bf80ad8d5de7d8359d0b7fed9dbc3ab99.0 b0c459f9f5bb60a8bf42ecdd64a211da1b0d7e9e.data000077700000000000000000000000001453140004500303342see b0c459f9f5bb60a8bf42ecdd64a211da1b0d7e9e.paxheaderustar00rootroot0000000000000056a6051ca2b02b04ef92d5150c9ef600403cb1de.paxheader00006660000000000000000000000337145314000450020451xustar00rootroot00000000000000223 path=client/testdata/go-tuf-transition-M3/consistent-snapshot-true/1/repository/targets/4dff4ea340f0a823f15d3f4f01ab62eae0e5da579ccb851f8db9dfe84c58b2b37b89903a740e1ee172da793a6e79d560e5f7f9bd058a12a280433ed6fa46510a.1 56a6051ca2b02b04ef92d5150c9ef600403cb1de.data000066400000000000000000000000011453140004500172730ustar00rootroot000000000000001client/testdata/go-tuf-transition-M3/consistent-snapshot-true/1/repository/timestamp.json000066400000000000000000000016021453140004500322660ustar00rootroot00000000000000{ "signed": { "_type": "timestamp", "expires": "2100-01-01T00:00:00Z", "meta": { "snapshot.json": { "hashes": { "sha512": "23170400c30b4bbcd375c88ae22104241e377006e9c40c64ed49aef9ad2bdfa49ba2832ccb9c3776aaee336195de73cda28b5ba65fb468f7a5e60b870cbe26e9" }, "length": 1126, "version": 2 } }, "spec_version": "1.0", "version": 2 }, "signatures": [ { "keyid": "b59406a55fbe2492022f2951dacd01fc7b400b7b41ec4028b8356161a5a71a33", "method": "ed25519", "sig": "c077ad4567c1db81609c89ab80310de559a2045d58a7f0166269f82e6d33a326248414ff7e5eb2d876d7741652ea1b6fab61f9bc774a6592727ac248a196720f" }, { "keyid": "c7a2ca868b0e65b50cc6a2dfcfd9c129bdcb3da390ac78bb83a732be02ed5a5d", "method": "ed25519", "sig": "c077ad4567c1db81609c89ab80310de559a2045d58a7f0166269f82e6d33a326248414ff7e5eb2d876d7741652ea1b6fab61f9bc774a6592727ac248a196720f" } ] }client/testdata/go-tuf-transition-M3/consistent-snapshot-true/2/000077500000000000000000000000001453140004500251535ustar00rootroot00000000000000client/testdata/go-tuf-transition-M3/consistent-snapshot-true/2/repository/000077500000000000000000000000001453140004500273725ustar00rootroot00000000000000client/testdata/go-tuf-transition-M3/consistent-snapshot-true/2/repository/1.root.json000077700000000000000000000000001453140004500364242../../1/repository/1.root.jsonustar00rootroot00000000000000client/testdata/go-tuf-transition-M3/consistent-snapshot-true/2/repository/1.snapshot.json000077700000000000000000000000001453140004500401542../../1/repository/1.snapshot.jsonustar00rootroot00000000000000client/testdata/go-tuf-transition-M3/consistent-snapshot-true/2/repository/1.targets.json000077700000000000000000000000001453140004500376002../../1/repository/1.targets.jsonustar00rootroot000000000000000018c8258ee65cd191161ea6d81996238a6a711d.paxheader00006660000000000000000000000620145314000450020211xustar00rootroot00000000000000226 path=client/testdata/go-tuf-transition-M3/consistent-snapshot-true/2/repository/118c2a2b6b9f7bc667dca8404a2671910a22b6fe48e460816a9f6f2be66f7806a789c9dc4880d2c2812c0bc7607caac30cc0a8299183fd7228e1049f6920ce22.targets.json 174 linkpath=../../1/repository/118c2a2b6b9f7bc667dca8404a2671910a22b6fe48e460816a9f6f2be66f7806a789c9dc4880d2c2812c0bc7607caac30cc0a8299183fd7228e1049f6920ce22.targets.json 0018c8258ee65cd191161ea6d81996238a6a711d.data000077700000000000000000000000001453140004500266302see 0018c8258ee65cd191161ea6d81996238a6a711d.paxheaderustar00rootroot00000000000000c6303cd5db03d26e5bfcc1fdc5064fcd573e5267.paxheader00006660000000000000000000000343145314000450020720xustar00rootroot00000000000000227 path=client/testdata/go-tuf-transition-M3/consistent-snapshot-true/2/repository/15c2c14fb300cecb52c9ef9a88545759028ec5d7e0f028269ba828c2199e3f0e56f963bdcfd0897c51ebb95ee2452666ec7f65bae688b48db1b8aa8de944e432.snapshot.json c6303cd5db03d26e5bfcc1fdc5064fcd573e5267.data000066400000000000000000000021461453140004500175610ustar00rootroot00000000000000{ "signed": { "_type": "snapshot", "expires": "2100-01-01T00:00:00Z", "meta": { "root.json": { "hashes": { "sha512": "590c7d2df37495eae436e25eea548eb48294ef63aaeebe51b1bc1056c149fd54710c67d231c19c14708824aa7095e0028b6691fcf21c1edfcc7a88a48d4b7b94" }, "length": 3831, "version": 3 }, "targets.json": { "hashes": { "sha512": "bdcbdfe0a1ecaaf9c0c5dc9728bc2eebb1c931b17e57676bd251f8b05640826dcf923ed854c235247329e7068c0d01ad6920b4454a976feb0c9f29b64e338ee4" }, "length": 1268, "version": 3 } }, "spec_version": "1.0", "version": 3 }, "signatures": [ { "keyid": "d792ff8cf3c5d9a8fe0fdfa585b25028fa9f49aa29c62a658140d4b98cc2c917", "method": "ed25519", "sig": "b3aa3119a74147ceb37b98248638710da5741c635e5791b13fd851b37212e4d3d5e7f6cbd4122b232a4010c13332c3048c1c6cc3e2838934ed481e6959441f05" }, { "keyid": "7165b3cf2ad6a10d456498d958e80f2356b0d3a230d93a96a8dada5fdd8dd40d", "method": "ed25519", "sig": "b3aa3119a74147ceb37b98248638710da5741c635e5791b13fd851b37212e4d3d5e7f6cbd4122b232a4010c13332c3048c1c6cc3e2838934ed481e6959441f05" } ] }client/testdata/go-tuf-transition-M3/consistent-snapshot-true/2/repository/2.root.json000077700000000000000000000000001453140004500364262../../1/repository/2.root.jsonustar00rootroot00000000000000client/testdata/go-tuf-transition-M3/consistent-snapshot-true/2/repository/2.snapshot.json000077700000000000000000000000001453140004500401562../../1/repository/2.snapshot.jsonustar00rootroot00000000000000client/testdata/go-tuf-transition-M3/consistent-snapshot-true/2/repository/2.targets.json000077700000000000000000000000001453140004500376022../../1/repository/2.targets.jsonustar00rootroot0000000000000069cd01db78a5108624391e1be13a4ce5bc64099b.paxheader00006660000000000000000000000622145314000450020420xustar00rootroot00000000000000227 path=client/testdata/go-tuf-transition-M3/consistent-snapshot-true/2/repository/23170400c30b4bbcd375c88ae22104241e377006e9c40c64ed49aef9ad2bdfa49ba2832ccb9c3776aaee336195de73cda28b5ba65fb468f7a5e60b870cbe26e9.snapshot.json 175 linkpath=../../1/repository/23170400c30b4bbcd375c88ae22104241e377006e9c40c64ed49aef9ad2bdfa49ba2832ccb9c3776aaee336195de73cda28b5ba65fb468f7a5e60b870cbe26e9.snapshot.json 69cd01db78a5108624391e1be13a4ce5bc64099b.data000077700000000000000000000000001453140004500272422see 69cd01db78a5108624391e1be13a4ce5bc64099b.paxheaderustar00rootroot00000000000000client/testdata/go-tuf-transition-M3/consistent-snapshot-true/2/repository/3.root.json000066400000000000000000000073671453140004500314260ustar00rootroot00000000000000{ "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2100-01-01T00:00:00Z", "keys": { "0efcc6a8d07a1cb5955fb698b8ea57e903b6924854f5a025c90f16c9a52b2700": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "aee574e56780ea1709a8b56e02d4ffdd9a3a1deaed61e2eb0701f376a4422e42" }, "scheme": "ed25519" }, "4c663b6d0b9f2c74a19b6791c1417c8d1916e2d84461be1a8148e4386c89582d": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "153986a7370e002f377dd68797e7466c421180c1571e233de2f8ab41c8af4f54" }, "scheme": "ed25519" }, "7165b3cf2ad6a10d456498d958e80f2356b0d3a230d93a96a8dada5fdd8dd40d": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "d482fa4805a50870aa1356ace6b764f7ab47ed4dc38f49b1a189afa25f179e94" }, "scheme": "ed25519" }, "a3eba2113e37b749b908101bdb7b856a44f2853641830c0f939730aca3e30360": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "aee574e56780ea1709a8b56e02d4ffdd9a3a1deaed61e2eb0701f376a4422e42" }, "scheme": "ed25519" }, "a67ca94ed559c97db79999d32b79ca35b5ae1795d2f6be3eafa3bd5816a8f2c4": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "153986a7370e002f377dd68797e7466c421180c1571e233de2f8ab41c8af4f54" }, "scheme": "ed25519" }, "b59406a55fbe2492022f2951dacd01fc7b400b7b41ec4028b8356161a5a71a33": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "8656ad20568cd3534c405e4d9a84b0c6e6163f7f66434df77416502835b9b160" }, "scheme": "ed25519" }, "c7a2ca868b0e65b50cc6a2dfcfd9c129bdcb3da390ac78bb83a732be02ed5a5d": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "8656ad20568cd3534c405e4d9a84b0c6e6163f7f66434df77416502835b9b160" }, "scheme": "ed25519" }, "d792ff8cf3c5d9a8fe0fdfa585b25028fa9f49aa29c62a658140d4b98cc2c917": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "d482fa4805a50870aa1356ace6b764f7ab47ed4dc38f49b1a189afa25f179e94" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "4c663b6d0b9f2c74a19b6791c1417c8d1916e2d84461be1a8148e4386c89582d", "a67ca94ed559c97db79999d32b79ca35b5ae1795d2f6be3eafa3bd5816a8f2c4" ], "threshold": 1 }, "snapshot": { "keyids": [ "d792ff8cf3c5d9a8fe0fdfa585b25028fa9f49aa29c62a658140d4b98cc2c917", "7165b3cf2ad6a10d456498d958e80f2356b0d3a230d93a96a8dada5fdd8dd40d" ], "threshold": 1 }, "targets": { "keyids": [ "a3eba2113e37b749b908101bdb7b856a44f2853641830c0f939730aca3e30360", "0efcc6a8d07a1cb5955fb698b8ea57e903b6924854f5a025c90f16c9a52b2700" ], "threshold": 1 }, "timestamp": { "keyids": [ "b59406a55fbe2492022f2951dacd01fc7b400b7b41ec4028b8356161a5a71a33", "c7a2ca868b0e65b50cc6a2dfcfd9c129bdcb3da390ac78bb83a732be02ed5a5d" ], "threshold": 1 } }, "spec_version": "1.0", "version": 3 }, "signatures": [ { "keyid": "4c663b6d0b9f2c74a19b6791c1417c8d1916e2d84461be1a8148e4386c89582d", "method": "ed25519", "sig": "d11082d75a4e60f9c5d1d176dfea4d7c43a41a9d4595a8b14b844a43c329bf86d2bf4eb8d6255af1afd97bbd5cfc1a69f038a82617cbfcfb82c6434e1790c702" }, { "keyid": "a67ca94ed559c97db79999d32b79ca35b5ae1795d2f6be3eafa3bd5816a8f2c4", "method": "ed25519", "sig": "d11082d75a4e60f9c5d1d176dfea4d7c43a41a9d4595a8b14b844a43c329bf86d2bf4eb8d6255af1afd97bbd5cfc1a69f038a82617cbfcfb82c6434e1790c702" } ] }client/testdata/go-tuf-transition-M3/consistent-snapshot-true/2/repository/3.snapshot.json000066400000000000000000000021461453140004500322700ustar00rootroot00000000000000{ "signed": { "_type": "snapshot", "expires": "2100-01-01T00:00:00Z", "meta": { "root.json": { "hashes": { "sha512": "590c7d2df37495eae436e25eea548eb48294ef63aaeebe51b1bc1056c149fd54710c67d231c19c14708824aa7095e0028b6691fcf21c1edfcc7a88a48d4b7b94" }, "length": 3831, "version": 3 }, "targets.json": { "hashes": { "sha512": "bdcbdfe0a1ecaaf9c0c5dc9728bc2eebb1c931b17e57676bd251f8b05640826dcf923ed854c235247329e7068c0d01ad6920b4454a976feb0c9f29b64e338ee4" }, "length": 1268, "version": 3 } }, "spec_version": "1.0", "version": 3 }, "signatures": [ { "keyid": "d792ff8cf3c5d9a8fe0fdfa585b25028fa9f49aa29c62a658140d4b98cc2c917", "method": "ed25519", "sig": "b3aa3119a74147ceb37b98248638710da5741c635e5791b13fd851b37212e4d3d5e7f6cbd4122b232a4010c13332c3048c1c6cc3e2838934ed481e6959441f05" }, { "keyid": "7165b3cf2ad6a10d456498d958e80f2356b0d3a230d93a96a8dada5fdd8dd40d", "method": "ed25519", "sig": "b3aa3119a74147ceb37b98248638710da5741c635e5791b13fd851b37212e4d3d5e7f6cbd4122b232a4010c13332c3048c1c6cc3e2838934ed481e6959441f05" } ] }client/testdata/go-tuf-transition-M3/consistent-snapshot-true/2/repository/3.targets.json000066400000000000000000000023641453140004500321040ustar00rootroot00000000000000{ "signed": { "_type": "targets", "expires": "2100-01-01T00:00:00Z", "spec_version": "1.0", "targets": { "0": { "hashes": { "sha512": "31bca02094eb78126a517b206a88c73cfa9ec6f704c7030d18212cace820f025f00bf0ea68dbf3f3a5436ca63b53bf7bf80ad8d5de7d8359d0b7fed9dbc3ab99" }, "length": 1 }, "1": { "hashes": { "sha512": "4dff4ea340f0a823f15d3f4f01ab62eae0e5da579ccb851f8db9dfe84c58b2b37b89903a740e1ee172da793a6e79d560e5f7f9bd058a12a280433ed6fa46510a" }, "length": 1 }, "2": { "hashes": { "sha512": "40b244112641dd78dd4f93b6c9190dd46e0099194d5a44257b7efad6ef9ff4683da1eda0244448cb343aa688f5d3efd7314dafe580ac0bcbf115aeca9e8dc114" }, "length": 1 } }, "version": 3 }, "signatures": [ { "keyid": "a3eba2113e37b749b908101bdb7b856a44f2853641830c0f939730aca3e30360", "method": "ed25519", "sig": "09593c7b47f4dbf1e8ac949fa010279ffbbd36070a54a89b689378441e8111602d4236fa2962063778c82027d4746a8973ba8fea86e9c105190da9fa362d8b0c" }, { "keyid": "0efcc6a8d07a1cb5955fb698b8ea57e903b6924854f5a025c90f16c9a52b2700", "method": "ed25519", "sig": "09593c7b47f4dbf1e8ac949fa010279ffbbd36070a54a89b689378441e8111602d4236fa2962063778c82027d4746a8973ba8fea86e9c105190da9fa362d8b0c" } ] }944d3575f058773e6c8a0de0bad1e0e6f0f9d435.paxheader00006660000000000000000000000622145314000450020520xustar00rootroot00000000000000227 path=client/testdata/go-tuf-transition-M3/consistent-snapshot-true/2/repository/33b282c1970996734deff944f2862f84b196f0b2b67dfa7383f75f95ef3e8673602aa411e05572075729ead6caa35df6720ce5723fd67c63d4aaa81dd966c5a4.snapshot.json 175 linkpath=../../1/repository/33b282c1970996734deff944f2862f84b196f0b2b67dfa7383f75f95ef3e8673602aa411e05572075729ead6caa35df6720ce5723fd67c63d4aaa81dd966c5a4.snapshot.json 944d3575f058773e6c8a0de0bad1e0e6f0f9d435.data000077700000000000000000000000001453140004500274422see 944d3575f058773e6c8a0de0bad1e0e6f0f9d435.paxheaderustar00rootroot00000000000000deacdc1974c176dbde3b86a48a3cf610bb12fa69.paxheader00006660000000000000000000000337145314000450021063xustar00rootroot00000000000000223 path=client/testdata/go-tuf-transition-M3/consistent-snapshot-true/2/repository/590c7d2df37495eae436e25eea548eb48294ef63aaeebe51b1bc1056c149fd54710c67d231c19c14708824aa7095e0028b6691fcf21c1edfcc7a88a48d4b7b94.root.json deacdc1974c176dbde3b86a48a3cf610bb12fa69.data000066400000000000000000000073671453140004500177330ustar00rootroot00000000000000{ "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2100-01-01T00:00:00Z", "keys": { "0efcc6a8d07a1cb5955fb698b8ea57e903b6924854f5a025c90f16c9a52b2700": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "aee574e56780ea1709a8b56e02d4ffdd9a3a1deaed61e2eb0701f376a4422e42" }, "scheme": "ed25519" }, "4c663b6d0b9f2c74a19b6791c1417c8d1916e2d84461be1a8148e4386c89582d": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "153986a7370e002f377dd68797e7466c421180c1571e233de2f8ab41c8af4f54" }, "scheme": "ed25519" }, "7165b3cf2ad6a10d456498d958e80f2356b0d3a230d93a96a8dada5fdd8dd40d": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "d482fa4805a50870aa1356ace6b764f7ab47ed4dc38f49b1a189afa25f179e94" }, "scheme": "ed25519" }, "a3eba2113e37b749b908101bdb7b856a44f2853641830c0f939730aca3e30360": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "aee574e56780ea1709a8b56e02d4ffdd9a3a1deaed61e2eb0701f376a4422e42" }, "scheme": "ed25519" }, "a67ca94ed559c97db79999d32b79ca35b5ae1795d2f6be3eafa3bd5816a8f2c4": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "153986a7370e002f377dd68797e7466c421180c1571e233de2f8ab41c8af4f54" }, "scheme": "ed25519" }, "b59406a55fbe2492022f2951dacd01fc7b400b7b41ec4028b8356161a5a71a33": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "8656ad20568cd3534c405e4d9a84b0c6e6163f7f66434df77416502835b9b160" }, "scheme": "ed25519" }, "c7a2ca868b0e65b50cc6a2dfcfd9c129bdcb3da390ac78bb83a732be02ed5a5d": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "8656ad20568cd3534c405e4d9a84b0c6e6163f7f66434df77416502835b9b160" }, "scheme": "ed25519" }, "d792ff8cf3c5d9a8fe0fdfa585b25028fa9f49aa29c62a658140d4b98cc2c917": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "d482fa4805a50870aa1356ace6b764f7ab47ed4dc38f49b1a189afa25f179e94" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "4c663b6d0b9f2c74a19b6791c1417c8d1916e2d84461be1a8148e4386c89582d", "a67ca94ed559c97db79999d32b79ca35b5ae1795d2f6be3eafa3bd5816a8f2c4" ], "threshold": 1 }, "snapshot": { "keyids": [ "d792ff8cf3c5d9a8fe0fdfa585b25028fa9f49aa29c62a658140d4b98cc2c917", "7165b3cf2ad6a10d456498d958e80f2356b0d3a230d93a96a8dada5fdd8dd40d" ], "threshold": 1 }, "targets": { "keyids": [ "a3eba2113e37b749b908101bdb7b856a44f2853641830c0f939730aca3e30360", "0efcc6a8d07a1cb5955fb698b8ea57e903b6924854f5a025c90f16c9a52b2700" ], "threshold": 1 }, "timestamp": { "keyids": [ "b59406a55fbe2492022f2951dacd01fc7b400b7b41ec4028b8356161a5a71a33", "c7a2ca868b0e65b50cc6a2dfcfd9c129bdcb3da390ac78bb83a732be02ed5a5d" ], "threshold": 1 } }, "spec_version": "1.0", "version": 3 }, "signatures": [ { "keyid": "4c663b6d0b9f2c74a19b6791c1417c8d1916e2d84461be1a8148e4386c89582d", "method": "ed25519", "sig": "d11082d75a4e60f9c5d1d176dfea4d7c43a41a9d4595a8b14b844a43c329bf86d2bf4eb8d6255af1afd97bbd5cfc1a69f038a82617cbfcfb82c6434e1790c702" }, { "keyid": "a67ca94ed559c97db79999d32b79ca35b5ae1795d2f6be3eafa3bd5816a8f2c4", "method": "ed25519", "sig": "d11082d75a4e60f9c5d1d176dfea4d7c43a41a9d4595a8b14b844a43c329bf86d2bf4eb8d6255af1afd97bbd5cfc1a69f038a82617cbfcfb82c6434e1790c702" } ] }de6ef3767e652ba647850356f2d1eff637a2a3b9.paxheader00006660000000000000000000000620145314000450020526xustar00rootroot00000000000000226 path=client/testdata/go-tuf-transition-M3/consistent-snapshot-true/2/repository/6ecff211b4df20d84e5a99a1145b7f96752efe880147439a3a8c2ecc080762f84b5b784da1b41d2ccb1492d112c521b4b82973589285dfbcfbb6c423c559ff4e.targets.json 174 linkpath=../../1/repository/6ecff211b4df20d84e5a99a1145b7f96752efe880147439a3a8c2ecc080762f84b5b784da1b41d2ccb1492d112c521b4b82973589285dfbcfbb6c423c559ff4e.targets.json de6ef3767e652ba647850356f2d1eff637a2a3b9.data000077700000000000000000000000001453140004500274622see de6ef3767e652ba647850356f2d1eff637a2a3b9.paxheaderustar00rootroot00000000000000f8bb03c5f9639d67d0c733021b41c5c112bd06f6.paxheader00006660000000000000000000000612145314000450020411xustar00rootroot00000000000000223 path=client/testdata/go-tuf-transition-M3/consistent-snapshot-true/2/repository/93b38df5b9cb993dd7e2e16e9b8dd07386b35936f21c36b7527e1587052dce86f64b5eb5669fffe86b4aae4c581a2bbba6e49d780d8687dd6c304fae9b6fe098.root.json 171 linkpath=../../1/repository/93b38df5b9cb993dd7e2e16e9b8dd07386b35936f21c36b7527e1587052dce86f64b5eb5669fffe86b4aae4c581a2bbba6e49d780d8687dd6c304fae9b6fe098.root.json f8bb03c5f9639d67d0c733021b41c5c112bd06f6.data000077700000000000000000000000001453140004500272262see f8bb03c5f9639d67d0c733021b41c5c112bd06f6.paxheaderustar00rootroot00000000000000147dfc686e55416f0d80f999e3fe530cc8881695.paxheader00006660000000000000000000000342145314000450020335xustar00rootroot00000000000000226 path=client/testdata/go-tuf-transition-M3/consistent-snapshot-true/2/repository/bdcbdfe0a1ecaaf9c0c5dc9728bc2eebb1c931b17e57676bd251f8b05640826dcf923ed854c235247329e7068c0d01ad6920b4454a976feb0c9f29b64e338ee4.targets.json 147dfc686e55416f0d80f999e3fe530cc8881695.data000066400000000000000000000023641453140004500172010ustar00rootroot00000000000000{ "signed": { "_type": "targets", "expires": "2100-01-01T00:00:00Z", "spec_version": "1.0", "targets": { "0": { "hashes": { "sha512": "31bca02094eb78126a517b206a88c73cfa9ec6f704c7030d18212cace820f025f00bf0ea68dbf3f3a5436ca63b53bf7bf80ad8d5de7d8359d0b7fed9dbc3ab99" }, "length": 1 }, "1": { "hashes": { "sha512": "4dff4ea340f0a823f15d3f4f01ab62eae0e5da579ccb851f8db9dfe84c58b2b37b89903a740e1ee172da793a6e79d560e5f7f9bd058a12a280433ed6fa46510a" }, "length": 1 }, "2": { "hashes": { "sha512": "40b244112641dd78dd4f93b6c9190dd46e0099194d5a44257b7efad6ef9ff4683da1eda0244448cb343aa688f5d3efd7314dafe580ac0bcbf115aeca9e8dc114" }, "length": 1 } }, "version": 3 }, "signatures": [ { "keyid": "a3eba2113e37b749b908101bdb7b856a44f2853641830c0f939730aca3e30360", "method": "ed25519", "sig": "09593c7b47f4dbf1e8ac949fa010279ffbbd36070a54a89b689378441e8111602d4236fa2962063778c82027d4746a8973ba8fea86e9c105190da9fa362d8b0c" }, { "keyid": "0efcc6a8d07a1cb5955fb698b8ea57e903b6924854f5a025c90f16c9a52b2700", "method": "ed25519", "sig": "09593c7b47f4dbf1e8ac949fa010279ffbbd36070a54a89b689378441e8111602d4236fa2962063778c82027d4746a8973ba8fea86e9c105190da9fa362d8b0c" } ] }ce078d7eb50b80d9fc93e6ec0507c5603c8ed686.paxheader00006660000000000000000000000612145314000450020607xustar00rootroot00000000000000223 path=client/testdata/go-tuf-transition-M3/consistent-snapshot-true/2/repository/bf4f7f4a062fd3780055d98572619db84d6d6c9b9b647bf6bca1190e984963ffb86189fb455110f4c13956ce9cbe72d95d03c5e6d72295414ac6bbcc3d1957c3.root.json 171 linkpath=../../1/repository/bf4f7f4a062fd3780055d98572619db84d6d6c9b9b647bf6bca1190e984963ffb86189fb455110f4c13956ce9cbe72d95d03c5e6d72295414ac6bbcc3d1957c3.root.json ce078d7eb50b80d9fc93e6ec0507c5603c8ed686.data000077700000000000000000000000001453140004500276222see ce078d7eb50b80d9fc93e6ec0507c5603c8ed686.paxheaderustar00rootroot00000000000000client/testdata/go-tuf-transition-M3/consistent-snapshot-true/2/repository/root.json000066400000000000000000000073671453140004500312650ustar00rootroot00000000000000{ "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2100-01-01T00:00:00Z", "keys": { "0efcc6a8d07a1cb5955fb698b8ea57e903b6924854f5a025c90f16c9a52b2700": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "aee574e56780ea1709a8b56e02d4ffdd9a3a1deaed61e2eb0701f376a4422e42" }, "scheme": "ed25519" }, "4c663b6d0b9f2c74a19b6791c1417c8d1916e2d84461be1a8148e4386c89582d": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "153986a7370e002f377dd68797e7466c421180c1571e233de2f8ab41c8af4f54" }, "scheme": "ed25519" }, "7165b3cf2ad6a10d456498d958e80f2356b0d3a230d93a96a8dada5fdd8dd40d": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "d482fa4805a50870aa1356ace6b764f7ab47ed4dc38f49b1a189afa25f179e94" }, "scheme": "ed25519" }, "a3eba2113e37b749b908101bdb7b856a44f2853641830c0f939730aca3e30360": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "aee574e56780ea1709a8b56e02d4ffdd9a3a1deaed61e2eb0701f376a4422e42" }, "scheme": "ed25519" }, "a67ca94ed559c97db79999d32b79ca35b5ae1795d2f6be3eafa3bd5816a8f2c4": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "153986a7370e002f377dd68797e7466c421180c1571e233de2f8ab41c8af4f54" }, "scheme": "ed25519" }, "b59406a55fbe2492022f2951dacd01fc7b400b7b41ec4028b8356161a5a71a33": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "8656ad20568cd3534c405e4d9a84b0c6e6163f7f66434df77416502835b9b160" }, "scheme": "ed25519" }, "c7a2ca868b0e65b50cc6a2dfcfd9c129bdcb3da390ac78bb83a732be02ed5a5d": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "8656ad20568cd3534c405e4d9a84b0c6e6163f7f66434df77416502835b9b160" }, "scheme": "ed25519" }, "d792ff8cf3c5d9a8fe0fdfa585b25028fa9f49aa29c62a658140d4b98cc2c917": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "d482fa4805a50870aa1356ace6b764f7ab47ed4dc38f49b1a189afa25f179e94" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "4c663b6d0b9f2c74a19b6791c1417c8d1916e2d84461be1a8148e4386c89582d", "a67ca94ed559c97db79999d32b79ca35b5ae1795d2f6be3eafa3bd5816a8f2c4" ], "threshold": 1 }, "snapshot": { "keyids": [ "d792ff8cf3c5d9a8fe0fdfa585b25028fa9f49aa29c62a658140d4b98cc2c917", "7165b3cf2ad6a10d456498d958e80f2356b0d3a230d93a96a8dada5fdd8dd40d" ], "threshold": 1 }, "targets": { "keyids": [ "a3eba2113e37b749b908101bdb7b856a44f2853641830c0f939730aca3e30360", "0efcc6a8d07a1cb5955fb698b8ea57e903b6924854f5a025c90f16c9a52b2700" ], "threshold": 1 }, "timestamp": { "keyids": [ "b59406a55fbe2492022f2951dacd01fc7b400b7b41ec4028b8356161a5a71a33", "c7a2ca868b0e65b50cc6a2dfcfd9c129bdcb3da390ac78bb83a732be02ed5a5d" ], "threshold": 1 } }, "spec_version": "1.0", "version": 3 }, "signatures": [ { "keyid": "4c663b6d0b9f2c74a19b6791c1417c8d1916e2d84461be1a8148e4386c89582d", "method": "ed25519", "sig": "d11082d75a4e60f9c5d1d176dfea4d7c43a41a9d4595a8b14b844a43c329bf86d2bf4eb8d6255af1afd97bbd5cfc1a69f038a82617cbfcfb82c6434e1790c702" }, { "keyid": "a67ca94ed559c97db79999d32b79ca35b5ae1795d2f6be3eafa3bd5816a8f2c4", "method": "ed25519", "sig": "d11082d75a4e60f9c5d1d176dfea4d7c43a41a9d4595a8b14b844a43c329bf86d2bf4eb8d6255af1afd97bbd5cfc1a69f038a82617cbfcfb82c6434e1790c702" } ] }client/testdata/go-tuf-transition-M3/consistent-snapshot-true/2/repository/snapshot.json000066400000000000000000000021461453140004500321270ustar00rootroot00000000000000{ "signed": { "_type": "snapshot", "expires": "2100-01-01T00:00:00Z", "meta": { "root.json": { "hashes": { "sha512": "590c7d2df37495eae436e25eea548eb48294ef63aaeebe51b1bc1056c149fd54710c67d231c19c14708824aa7095e0028b6691fcf21c1edfcc7a88a48d4b7b94" }, "length": 3831, "version": 3 }, "targets.json": { "hashes": { "sha512": "bdcbdfe0a1ecaaf9c0c5dc9728bc2eebb1c931b17e57676bd251f8b05640826dcf923ed854c235247329e7068c0d01ad6920b4454a976feb0c9f29b64e338ee4" }, "length": 1268, "version": 3 } }, "spec_version": "1.0", "version": 3 }, "signatures": [ { "keyid": "d792ff8cf3c5d9a8fe0fdfa585b25028fa9f49aa29c62a658140d4b98cc2c917", "method": "ed25519", "sig": "b3aa3119a74147ceb37b98248638710da5741c635e5791b13fd851b37212e4d3d5e7f6cbd4122b232a4010c13332c3048c1c6cc3e2838934ed481e6959441f05" }, { "keyid": "7165b3cf2ad6a10d456498d958e80f2356b0d3a230d93a96a8dada5fdd8dd40d", "method": "ed25519", "sig": "b3aa3119a74147ceb37b98248638710da5741c635e5791b13fd851b37212e4d3d5e7f6cbd4122b232a4010c13332c3048c1c6cc3e2838934ed481e6959441f05" } ] }client/testdata/go-tuf-transition-M3/consistent-snapshot-true/2/repository/targets.json000066400000000000000000000023641453140004500317430ustar00rootroot00000000000000{ "signed": { "_type": "targets", "expires": "2100-01-01T00:00:00Z", "spec_version": "1.0", "targets": { "0": { "hashes": { "sha512": "31bca02094eb78126a517b206a88c73cfa9ec6f704c7030d18212cace820f025f00bf0ea68dbf3f3a5436ca63b53bf7bf80ad8d5de7d8359d0b7fed9dbc3ab99" }, "length": 1 }, "1": { "hashes": { "sha512": "4dff4ea340f0a823f15d3f4f01ab62eae0e5da579ccb851f8db9dfe84c58b2b37b89903a740e1ee172da793a6e79d560e5f7f9bd058a12a280433ed6fa46510a" }, "length": 1 }, "2": { "hashes": { "sha512": "40b244112641dd78dd4f93b6c9190dd46e0099194d5a44257b7efad6ef9ff4683da1eda0244448cb343aa688f5d3efd7314dafe580ac0bcbf115aeca9e8dc114" }, "length": 1 } }, "version": 3 }, "signatures": [ { "keyid": "a3eba2113e37b749b908101bdb7b856a44f2853641830c0f939730aca3e30360", "method": "ed25519", "sig": "09593c7b47f4dbf1e8ac949fa010279ffbbd36070a54a89b689378441e8111602d4236fa2962063778c82027d4746a8973ba8fea86e9c105190da9fa362d8b0c" }, { "keyid": "0efcc6a8d07a1cb5955fb698b8ea57e903b6924854f5a025c90f16c9a52b2700", "method": "ed25519", "sig": "09593c7b47f4dbf1e8ac949fa010279ffbbd36070a54a89b689378441e8111602d4236fa2962063778c82027d4746a8973ba8fea86e9c105190da9fa362d8b0c" } ] }client/testdata/go-tuf-transition-M3/consistent-snapshot-true/2/repository/targets/000077500000000000000000000000001453140004500310435ustar00rootroot00000000000000client/testdata/go-tuf-transition-M3/consistent-snapshot-true/2/repository/targets/0.0000077700000000000000000000000001453140004500363672../../../1/repository/targets/0.0ustar00rootroot00000000000000client/testdata/go-tuf-transition-M3/consistent-snapshot-true/2/repository/targets/0.1000077700000000000000000000000001453140004500363712../../../1/repository/targets/0.1ustar00rootroot00000000000000client/testdata/go-tuf-transition-M3/consistent-snapshot-true/2/repository/targets/0.2000066400000000000000000000000011453140004500312540ustar00rootroot000000000000002de9aac3af913eb6363a47bb669ce2bdccfe475b6.paxheader00006660000000000000000000000615145314000450021155xustar00rootroot00000000000000223 path=client/testdata/go-tuf-transition-M3/consistent-snapshot-true/2/repository/targets/31bca02094eb78126a517b206a88c73cfa9ec6f704c7030d18212cace820f025f00bf0ea68dbf3f3a5436ca63b53bf7bf80ad8d5de7d8359d0b7fed9dbc3ab99.0 174 linkpath=../../../1/repository/targets/31bca02094eb78126a517b206a88c73cfa9ec6f704c7030d18212cace820f025f00bf0ea68dbf3f3a5436ca63b53bf7bf80ad8d5de7d8359d0b7fed9dbc3ab99.0 de9aac3af913eb6363a47bb669ce2bdccfe475b6.data000077700000000000000000000000001453140004500305302see de9aac3af913eb6363a47bb669ce2bdccfe475b6.paxheaderustar00rootroot00000000000000d8263ee9860594d2806b0dfd1bfd17528b0ba2a4.paxheader00006660000000000000000000000337145314000450020507xustar00rootroot00000000000000223 path=client/testdata/go-tuf-transition-M3/consistent-snapshot-true/2/repository/targets/40b244112641dd78dd4f93b6c9190dd46e0099194d5a44257b7efad6ef9ff4683da1eda0244448cb343aa688f5d3efd7314dafe580ac0bcbf115aeca9e8dc114.2 d8263ee9860594d2806b0dfd1bfd17528b0ba2a4.data000066400000000000000000000000011453140004500173310ustar00rootroot0000000000000022ebb2d33317c217847b6c001664e44a4651818fd.paxheader00006660000000000000000000000615145314000450020177xustar00rootroot00000000000000223 path=client/testdata/go-tuf-transition-M3/consistent-snapshot-true/2/repository/targets/4dff4ea340f0a823f15d3f4f01ab62eae0e5da579ccb851f8db9dfe84c58b2b37b89903a740e1ee172da793a6e79d560e5f7f9bd058a12a280433ed6fa46510a.1 174 linkpath=../../../1/repository/targets/4dff4ea340f0a823f15d3f4f01ab62eae0e5da579ccb851f8db9dfe84c58b2b37b89903a740e1ee172da793a6e79d560e5f7f9bd058a12a280433ed6fa46510a.1 2ebb2d33317c217847b6c001664e44a4651818fd.data000077700000000000000000000000001453140004500265742see 2ebb2d33317c217847b6c001664e44a4651818fd.paxheaderustar00rootroot00000000000000client/testdata/go-tuf-transition-M3/consistent-snapshot-true/2/repository/timestamp.json000066400000000000000000000016021453140004500322670ustar00rootroot00000000000000{ "signed": { "_type": "timestamp", "expires": "2100-01-01T00:00:00Z", "meta": { "snapshot.json": { "hashes": { "sha512": "15c2c14fb300cecb52c9ef9a88545759028ec5d7e0f028269ba828c2199e3f0e56f963bdcfd0897c51ebb95ee2452666ec7f65bae688b48db1b8aa8de944e432" }, "length": 1126, "version": 3 } }, "spec_version": "1.0", "version": 3 }, "signatures": [ { "keyid": "b59406a55fbe2492022f2951dacd01fc7b400b7b41ec4028b8356161a5a71a33", "method": "ed25519", "sig": "25122819bb1e9fcd7383d0a13a35a049470162140b1573eb139e4269e29ec31b77a9771396bf2c9719c9ddb4e167e2e5ebabfef229cb4f16b59db45c6fdb4508" }, { "keyid": "c7a2ca868b0e65b50cc6a2dfcfd9c129bdcb3da390ac78bb83a732be02ed5a5d", "method": "ed25519", "sig": "25122819bb1e9fcd7383d0a13a35a049470162140b1573eb139e4269e29ec31b77a9771396bf2c9719c9ddb4e167e2e5ebabfef229cb4f16b59db45c6fdb4508" } ] }client/testdata/go-tuf-transition-M3/consistent-snapshot-true/3/000077500000000000000000000000001453140004500251545ustar00rootroot00000000000000client/testdata/go-tuf-transition-M3/consistent-snapshot-true/3/repository/000077500000000000000000000000001453140004500273735ustar00rootroot00000000000000client/testdata/go-tuf-transition-M3/consistent-snapshot-true/3/repository/1.root.json000077700000000000000000000000001453140004500364262../../2/repository/1.root.jsonustar00rootroot00000000000000client/testdata/go-tuf-transition-M3/consistent-snapshot-true/3/repository/1.snapshot.json000077700000000000000000000000001453140004500401562../../2/repository/1.snapshot.jsonustar00rootroot00000000000000client/testdata/go-tuf-transition-M3/consistent-snapshot-true/3/repository/1.targets.json000077700000000000000000000000001453140004500376022../../2/repository/1.targets.jsonustar00rootroot0000000000000032bd3243b217bf1cf01ca3deee3ba3f7131a4a75.paxheader00006660000000000000000000000620145314000450020661xustar00rootroot00000000000000226 path=client/testdata/go-tuf-transition-M3/consistent-snapshot-true/3/repository/118c2a2b6b9f7bc667dca8404a2671910a22b6fe48e460816a9f6f2be66f7806a789c9dc4880d2c2812c0bc7607caac30cc0a8299183fd7228e1049f6920ce22.targets.json 174 linkpath=../../2/repository/118c2a2b6b9f7bc667dca8404a2671910a22b6fe48e460816a9f6f2be66f7806a789c9dc4880d2c2812c0bc7607caac30cc0a8299183fd7228e1049f6920ce22.targets.json 32bd3243b217bf1cf01ca3deee3ba3f7131a4a75.data000077700000000000000000000000001453140004500277502see 32bd3243b217bf1cf01ca3deee3ba3f7131a4a75.paxheaderustar00rootroot000000000000006671723656211adb1bb4a77b4f4dd09d7e398dd7.paxheader00006660000000000000000000000343145314000450020436xustar00rootroot00000000000000227 path=client/testdata/go-tuf-transition-M3/consistent-snapshot-true/3/repository/148c273a895a85127bb254edd19da2190176272446cd0f43220aba2b0f72fe954a2eab52c38daf67b1c3cbe877848d01266d8a1af3e858c8d004682a3393f3a7.snapshot.json 6671723656211adb1bb4a77b4f4dd09d7e398dd7.data000066400000000000000000000021461453140004500172770ustar00rootroot00000000000000{ "signed": { "_type": "snapshot", "expires": "2100-01-01T00:00:00Z", "meta": { "root.json": { "hashes": { "sha512": "765d0de07adc4de8aa6060a9c579c70938f0a6e998d76ad75363945fdb998b8019d4d42a00642141ac8a86346098dfb40bc7be32d684077be5aae06495f57cfa" }, "length": 3831, "version": 4 }, "targets.json": { "hashes": { "sha512": "7c7a5e381e1e8c3f10bc4ab1c1d33f6460f741a5c0bbeb8be4f206de58e9ce67964bef7cef0738d22d5c55238d2062a2a9a72c99f6df0c57a2bece6435a3e461" }, "length": 1469, "version": 4 } }, "spec_version": "1.0", "version": 4 }, "signatures": [ { "keyid": "bed15bf57ba4deb4e09667099d45d119504420983d16fd0927ebfb0c25184e7f", "method": "ed25519", "sig": "4619db132982f96f2f7d62d1ea5e7bfdc69eab8cf10cc6eca8721557144a8b193b98f6c3a25da862c414da348d42cee78b59c3f14903be937b16b39e1003f503" }, { "keyid": "ad7c98dfb3b99024f8b49e33f3d92e66537f0abab78a84f1e4b667dfbf52bf60", "method": "ed25519", "sig": "4619db132982f96f2f7d62d1ea5e7bfdc69eab8cf10cc6eca8721557144a8b193b98f6c3a25da862c414da348d42cee78b59c3f14903be937b16b39e1003f503" } ] }03468a15208045dcb38a06907425b664e86eb568.paxheader00006660000000000000000000000622145314000450020052xustar00rootroot00000000000000227 path=client/testdata/go-tuf-transition-M3/consistent-snapshot-true/3/repository/15c2c14fb300cecb52c9ef9a88545759028ec5d7e0f028269ba828c2199e3f0e56f963bdcfd0897c51ebb95ee2452666ec7f65bae688b48db1b8aa8de944e432.snapshot.json 175 linkpath=../../2/repository/15c2c14fb300cecb52c9ef9a88545759028ec5d7e0f028269ba828c2199e3f0e56f963bdcfd0897c51ebb95ee2452666ec7f65bae688b48db1b8aa8de944e432.snapshot.json 03468a15208045dcb38a06907425b664e86eb568.data000077700000000000000000000000001453140004500263262see 03468a15208045dcb38a06907425b664e86eb568.paxheaderustar00rootroot00000000000000client/testdata/go-tuf-transition-M3/consistent-snapshot-true/3/repository/2.root.json000077700000000000000000000000001453140004500364302../../2/repository/2.root.jsonustar00rootroot00000000000000client/testdata/go-tuf-transition-M3/consistent-snapshot-true/3/repository/2.snapshot.json000077700000000000000000000000001453140004500401602../../2/repository/2.snapshot.jsonustar00rootroot00000000000000client/testdata/go-tuf-transition-M3/consistent-snapshot-true/3/repository/2.targets.json000077700000000000000000000000001453140004500376042../../2/repository/2.targets.jsonustar00rootroot00000000000000b20325e0abd643384d619aa9854da60d97642cba.paxheader00006660000000000000000000000622145314000450020415xustar00rootroot00000000000000227 path=client/testdata/go-tuf-transition-M3/consistent-snapshot-true/3/repository/23170400c30b4bbcd375c88ae22104241e377006e9c40c64ed49aef9ad2bdfa49ba2832ccb9c3776aaee336195de73cda28b5ba65fb468f7a5e60b870cbe26e9.snapshot.json 175 linkpath=../../2/repository/23170400c30b4bbcd375c88ae22104241e377006e9c40c64ed49aef9ad2bdfa49ba2832ccb9c3776aaee336195de73cda28b5ba65fb468f7a5e60b870cbe26e9.snapshot.json b20325e0abd643384d619aa9854da60d97642cba.data000077700000000000000000000000001453140004500272342see b20325e0abd643384d619aa9854da60d97642cba.paxheaderustar00rootroot00000000000000client/testdata/go-tuf-transition-M3/consistent-snapshot-true/3/repository/3.root.json000077700000000000000000000000001453140004500364322../../2/repository/3.root.jsonustar00rootroot00000000000000client/testdata/go-tuf-transition-M3/consistent-snapshot-true/3/repository/3.snapshot.json000077700000000000000000000000001453140004500401622../../2/repository/3.snapshot.jsonustar00rootroot00000000000000client/testdata/go-tuf-transition-M3/consistent-snapshot-true/3/repository/3.targets.json000077700000000000000000000000001453140004500376062../../2/repository/3.targets.jsonustar00rootroot00000000000000d1372152184b91b4332492b62e6ccca99393005b.paxheader00006660000000000000000000000622145314000450020114xustar00rootroot00000000000000227 path=client/testdata/go-tuf-transition-M3/consistent-snapshot-true/3/repository/33b282c1970996734deff944f2862f84b196f0b2b67dfa7383f75f95ef3e8673602aa411e05572075729ead6caa35df6720ce5723fd67c63d4aaa81dd966c5a4.snapshot.json 175 linkpath=../../2/repository/33b282c1970996734deff944f2862f84b196f0b2b67dfa7383f75f95ef3e8673602aa411e05572075729ead6caa35df6720ce5723fd67c63d4aaa81dd966c5a4.snapshot.json d1372152184b91b4332492b62e6ccca99393005b.data000077700000000000000000000000001453140004500264322see d1372152184b91b4332492b62e6ccca99393005b.paxheaderustar00rootroot00000000000000client/testdata/go-tuf-transition-M3/consistent-snapshot-true/3/repository/4.root.json000066400000000000000000000073671453140004500314300ustar00rootroot00000000000000{ "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2100-01-01T00:00:00Z", "keys": { "0efcc6a8d07a1cb5955fb698b8ea57e903b6924854f5a025c90f16c9a52b2700": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "aee574e56780ea1709a8b56e02d4ffdd9a3a1deaed61e2eb0701f376a4422e42" }, "scheme": "ed25519" }, "4c663b6d0b9f2c74a19b6791c1417c8d1916e2d84461be1a8148e4386c89582d": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "153986a7370e002f377dd68797e7466c421180c1571e233de2f8ab41c8af4f54" }, "scheme": "ed25519" }, "a3eba2113e37b749b908101bdb7b856a44f2853641830c0f939730aca3e30360": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "aee574e56780ea1709a8b56e02d4ffdd9a3a1deaed61e2eb0701f376a4422e42" }, "scheme": "ed25519" }, "a67ca94ed559c97db79999d32b79ca35b5ae1795d2f6be3eafa3bd5816a8f2c4": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "153986a7370e002f377dd68797e7466c421180c1571e233de2f8ab41c8af4f54" }, "scheme": "ed25519" }, "ad7c98dfb3b99024f8b49e33f3d92e66537f0abab78a84f1e4b667dfbf52bf60": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "722dbc861813bb5b568524d62083e875c08e66fed1694d9161d253fa163dd86f" }, "scheme": "ed25519" }, "b59406a55fbe2492022f2951dacd01fc7b400b7b41ec4028b8356161a5a71a33": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "8656ad20568cd3534c405e4d9a84b0c6e6163f7f66434df77416502835b9b160" }, "scheme": "ed25519" }, "bed15bf57ba4deb4e09667099d45d119504420983d16fd0927ebfb0c25184e7f": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "722dbc861813bb5b568524d62083e875c08e66fed1694d9161d253fa163dd86f" }, "scheme": "ed25519" }, "c7a2ca868b0e65b50cc6a2dfcfd9c129bdcb3da390ac78bb83a732be02ed5a5d": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "8656ad20568cd3534c405e4d9a84b0c6e6163f7f66434df77416502835b9b160" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "4c663b6d0b9f2c74a19b6791c1417c8d1916e2d84461be1a8148e4386c89582d", "a67ca94ed559c97db79999d32b79ca35b5ae1795d2f6be3eafa3bd5816a8f2c4" ], "threshold": 1 }, "snapshot": { "keyids": [ "bed15bf57ba4deb4e09667099d45d119504420983d16fd0927ebfb0c25184e7f", "ad7c98dfb3b99024f8b49e33f3d92e66537f0abab78a84f1e4b667dfbf52bf60" ], "threshold": 1 }, "targets": { "keyids": [ "a3eba2113e37b749b908101bdb7b856a44f2853641830c0f939730aca3e30360", "0efcc6a8d07a1cb5955fb698b8ea57e903b6924854f5a025c90f16c9a52b2700" ], "threshold": 1 }, "timestamp": { "keyids": [ "b59406a55fbe2492022f2951dacd01fc7b400b7b41ec4028b8356161a5a71a33", "c7a2ca868b0e65b50cc6a2dfcfd9c129bdcb3da390ac78bb83a732be02ed5a5d" ], "threshold": 1 } }, "spec_version": "1.0", "version": 4 }, "signatures": [ { "keyid": "4c663b6d0b9f2c74a19b6791c1417c8d1916e2d84461be1a8148e4386c89582d", "method": "ed25519", "sig": "5a5afbd4270a2638b84f50d0291e35acdf59e25492914017cb317c617d71c3a9c450d3f71f1dd7a33c369399d8de26f3a61060146682d84159f27c08f1675005" }, { "keyid": "a67ca94ed559c97db79999d32b79ca35b5ae1795d2f6be3eafa3bd5816a8f2c4", "method": "ed25519", "sig": "5a5afbd4270a2638b84f50d0291e35acdf59e25492914017cb317c617d71c3a9c450d3f71f1dd7a33c369399d8de26f3a61060146682d84159f27c08f1675005" } ] }client/testdata/go-tuf-transition-M3/consistent-snapshot-true/3/repository/4.snapshot.json000066400000000000000000000021461453140004500322720ustar00rootroot00000000000000{ "signed": { "_type": "snapshot", "expires": "2100-01-01T00:00:00Z", "meta": { "root.json": { "hashes": { "sha512": "765d0de07adc4de8aa6060a9c579c70938f0a6e998d76ad75363945fdb998b8019d4d42a00642141ac8a86346098dfb40bc7be32d684077be5aae06495f57cfa" }, "length": 3831, "version": 4 }, "targets.json": { "hashes": { "sha512": "7c7a5e381e1e8c3f10bc4ab1c1d33f6460f741a5c0bbeb8be4f206de58e9ce67964bef7cef0738d22d5c55238d2062a2a9a72c99f6df0c57a2bece6435a3e461" }, "length": 1469, "version": 4 } }, "spec_version": "1.0", "version": 4 }, "signatures": [ { "keyid": "bed15bf57ba4deb4e09667099d45d119504420983d16fd0927ebfb0c25184e7f", "method": "ed25519", "sig": "4619db132982f96f2f7d62d1ea5e7bfdc69eab8cf10cc6eca8721557144a8b193b98f6c3a25da862c414da348d42cee78b59c3f14903be937b16b39e1003f503" }, { "keyid": "ad7c98dfb3b99024f8b49e33f3d92e66537f0abab78a84f1e4b667dfbf52bf60", "method": "ed25519", "sig": "4619db132982f96f2f7d62d1ea5e7bfdc69eab8cf10cc6eca8721557144a8b193b98f6c3a25da862c414da348d42cee78b59c3f14903be937b16b39e1003f503" } ] }client/testdata/go-tuf-transition-M3/consistent-snapshot-true/3/repository/4.targets.json000066400000000000000000000026751453140004500321130ustar00rootroot00000000000000{ "signed": { "_type": "targets", "expires": "2100-01-01T00:00:00Z", "spec_version": "1.0", "targets": { "0": { "hashes": { "sha512": "31bca02094eb78126a517b206a88c73cfa9ec6f704c7030d18212cace820f025f00bf0ea68dbf3f3a5436ca63b53bf7bf80ad8d5de7d8359d0b7fed9dbc3ab99" }, "length": 1 }, "1": { "hashes": { "sha512": "4dff4ea340f0a823f15d3f4f01ab62eae0e5da579ccb851f8db9dfe84c58b2b37b89903a740e1ee172da793a6e79d560e5f7f9bd058a12a280433ed6fa46510a" }, "length": 1 }, "2": { "hashes": { "sha512": "40b244112641dd78dd4f93b6c9190dd46e0099194d5a44257b7efad6ef9ff4683da1eda0244448cb343aa688f5d3efd7314dafe580ac0bcbf115aeca9e8dc114" }, "length": 1 }, "3": { "hashes": { "sha512": "3bafbf08882a2d10133093a1b8433f50563b93c14acd05b79028eb1d12799027241450980651994501423a66c276ae26c43b739bc65c4e16b10c3af6c202aebb" }, "length": 1 } }, "version": 4 }, "signatures": [ { "keyid": "a3eba2113e37b749b908101bdb7b856a44f2853641830c0f939730aca3e30360", "method": "ed25519", "sig": "7bfe0a63ee324034807b5341336d9d2d64e9ef3936086577b5bbcc6d021b4656bd6bf14d817bbb3908e4dcb05391d1b4031b527c14d942c2d1e38275d5ff1308" }, { "keyid": "0efcc6a8d07a1cb5955fb698b8ea57e903b6924854f5a025c90f16c9a52b2700", "method": "ed25519", "sig": "7bfe0a63ee324034807b5341336d9d2d64e9ef3936086577b5bbcc6d021b4656bd6bf14d817bbb3908e4dcb05391d1b4031b527c14d942c2d1e38275d5ff1308" } ] }f966ccc68ce63bc85266bcd7c2610628bac295fe.paxheader00006660000000000000000000000612145314000450020665xustar00rootroot00000000000000223 path=client/testdata/go-tuf-transition-M3/consistent-snapshot-true/3/repository/590c7d2df37495eae436e25eea548eb48294ef63aaeebe51b1bc1056c149fd54710c67d231c19c14708824aa7095e0028b6691fcf21c1edfcc7a88a48d4b7b94.root.json 171 linkpath=../../2/repository/590c7d2df37495eae436e25eea548eb48294ef63aaeebe51b1bc1056c149fd54710c67d231c19c14708824aa7095e0028b6691fcf21c1edfcc7a88a48d4b7b94.root.json f966ccc68ce63bc85266bcd7c2610628bac295fe.data000077700000000000000000000000001453140004500277562see f966ccc68ce63bc85266bcd7c2610628bac295fe.paxheaderustar00rootroot0000000000000077a36563317a5a02045ae4d75069f127c0305238.paxheader00006660000000000000000000000620145314000450017750xustar00rootroot00000000000000226 path=client/testdata/go-tuf-transition-M3/consistent-snapshot-true/3/repository/6ecff211b4df20d84e5a99a1145b7f96752efe880147439a3a8c2ecc080762f84b5b784da1b41d2ccb1492d112c521b4b82973589285dfbcfbb6c423c559ff4e.targets.json 174 linkpath=../../2/repository/6ecff211b4df20d84e5a99a1145b7f96752efe880147439a3a8c2ecc080762f84b5b784da1b41d2ccb1492d112c521b4b82973589285dfbcfbb6c423c559ff4e.targets.json 77a36563317a5a02045ae4d75069f127c0305238.data000077700000000000000000000000001453140004500261262see 77a36563317a5a02045ae4d75069f127c0305238.paxheaderustar00rootroot000000000000008ccb8d72e7d2f77870bec6b37d0ddddc3f3a706f.paxheader00006660000000000000000000000337145314000450021106xustar00rootroot00000000000000223 path=client/testdata/go-tuf-transition-M3/consistent-snapshot-true/3/repository/765d0de07adc4de8aa6060a9c579c70938f0a6e998d76ad75363945fdb998b8019d4d42a00642141ac8a86346098dfb40bc7be32d684077be5aae06495f57cfa.root.json 8ccb8d72e7d2f77870bec6b37d0ddddc3f3a706f.data000066400000000000000000000073671453140004500177560ustar00rootroot00000000000000{ "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2100-01-01T00:00:00Z", "keys": { "0efcc6a8d07a1cb5955fb698b8ea57e903b6924854f5a025c90f16c9a52b2700": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "aee574e56780ea1709a8b56e02d4ffdd9a3a1deaed61e2eb0701f376a4422e42" }, "scheme": "ed25519" }, "4c663b6d0b9f2c74a19b6791c1417c8d1916e2d84461be1a8148e4386c89582d": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "153986a7370e002f377dd68797e7466c421180c1571e233de2f8ab41c8af4f54" }, "scheme": "ed25519" }, "a3eba2113e37b749b908101bdb7b856a44f2853641830c0f939730aca3e30360": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "aee574e56780ea1709a8b56e02d4ffdd9a3a1deaed61e2eb0701f376a4422e42" }, "scheme": "ed25519" }, "a67ca94ed559c97db79999d32b79ca35b5ae1795d2f6be3eafa3bd5816a8f2c4": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "153986a7370e002f377dd68797e7466c421180c1571e233de2f8ab41c8af4f54" }, "scheme": "ed25519" }, "ad7c98dfb3b99024f8b49e33f3d92e66537f0abab78a84f1e4b667dfbf52bf60": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "722dbc861813bb5b568524d62083e875c08e66fed1694d9161d253fa163dd86f" }, "scheme": "ed25519" }, "b59406a55fbe2492022f2951dacd01fc7b400b7b41ec4028b8356161a5a71a33": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "8656ad20568cd3534c405e4d9a84b0c6e6163f7f66434df77416502835b9b160" }, "scheme": "ed25519" }, "bed15bf57ba4deb4e09667099d45d119504420983d16fd0927ebfb0c25184e7f": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "722dbc861813bb5b568524d62083e875c08e66fed1694d9161d253fa163dd86f" }, "scheme": "ed25519" }, "c7a2ca868b0e65b50cc6a2dfcfd9c129bdcb3da390ac78bb83a732be02ed5a5d": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "8656ad20568cd3534c405e4d9a84b0c6e6163f7f66434df77416502835b9b160" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "4c663b6d0b9f2c74a19b6791c1417c8d1916e2d84461be1a8148e4386c89582d", "a67ca94ed559c97db79999d32b79ca35b5ae1795d2f6be3eafa3bd5816a8f2c4" ], "threshold": 1 }, "snapshot": { "keyids": [ "bed15bf57ba4deb4e09667099d45d119504420983d16fd0927ebfb0c25184e7f", "ad7c98dfb3b99024f8b49e33f3d92e66537f0abab78a84f1e4b667dfbf52bf60" ], "threshold": 1 }, "targets": { "keyids": [ "a3eba2113e37b749b908101bdb7b856a44f2853641830c0f939730aca3e30360", "0efcc6a8d07a1cb5955fb698b8ea57e903b6924854f5a025c90f16c9a52b2700" ], "threshold": 1 }, "timestamp": { "keyids": [ "b59406a55fbe2492022f2951dacd01fc7b400b7b41ec4028b8356161a5a71a33", "c7a2ca868b0e65b50cc6a2dfcfd9c129bdcb3da390ac78bb83a732be02ed5a5d" ], "threshold": 1 } }, "spec_version": "1.0", "version": 4 }, "signatures": [ { "keyid": "4c663b6d0b9f2c74a19b6791c1417c8d1916e2d84461be1a8148e4386c89582d", "method": "ed25519", "sig": "5a5afbd4270a2638b84f50d0291e35acdf59e25492914017cb317c617d71c3a9c450d3f71f1dd7a33c369399d8de26f3a61060146682d84159f27c08f1675005" }, { "keyid": "a67ca94ed559c97db79999d32b79ca35b5ae1795d2f6be3eafa3bd5816a8f2c4", "method": "ed25519", "sig": "5a5afbd4270a2638b84f50d0291e35acdf59e25492914017cb317c617d71c3a9c450d3f71f1dd7a33c369399d8de26f3a61060146682d84159f27c08f1675005" } ] }c960d1c8b0fac8eaa3311c5149fc6d6b944250e4.paxheader00006660000000000000000000000342145314000450020554xustar00rootroot00000000000000226 path=client/testdata/go-tuf-transition-M3/consistent-snapshot-true/3/repository/7c7a5e381e1e8c3f10bc4ab1c1d33f6460f741a5c0bbeb8be4f206de58e9ce67964bef7cef0738d22d5c55238d2062a2a9a72c99f6df0c57a2bece6435a3e461.targets.json c960d1c8b0fac8eaa3311c5149fc6d6b944250e4.data000066400000000000000000000026751453140004500174250ustar00rootroot00000000000000{ "signed": { "_type": "targets", "expires": "2100-01-01T00:00:00Z", "spec_version": "1.0", "targets": { "0": { "hashes": { "sha512": "31bca02094eb78126a517b206a88c73cfa9ec6f704c7030d18212cace820f025f00bf0ea68dbf3f3a5436ca63b53bf7bf80ad8d5de7d8359d0b7fed9dbc3ab99" }, "length": 1 }, "1": { "hashes": { "sha512": "4dff4ea340f0a823f15d3f4f01ab62eae0e5da579ccb851f8db9dfe84c58b2b37b89903a740e1ee172da793a6e79d560e5f7f9bd058a12a280433ed6fa46510a" }, "length": 1 }, "2": { "hashes": { "sha512": "40b244112641dd78dd4f93b6c9190dd46e0099194d5a44257b7efad6ef9ff4683da1eda0244448cb343aa688f5d3efd7314dafe580ac0bcbf115aeca9e8dc114" }, "length": 1 }, "3": { "hashes": { "sha512": "3bafbf08882a2d10133093a1b8433f50563b93c14acd05b79028eb1d12799027241450980651994501423a66c276ae26c43b739bc65c4e16b10c3af6c202aebb" }, "length": 1 } }, "version": 4 }, "signatures": [ { "keyid": "a3eba2113e37b749b908101bdb7b856a44f2853641830c0f939730aca3e30360", "method": "ed25519", "sig": "7bfe0a63ee324034807b5341336d9d2d64e9ef3936086577b5bbcc6d021b4656bd6bf14d817bbb3908e4dcb05391d1b4031b527c14d942c2d1e38275d5ff1308" }, { "keyid": "0efcc6a8d07a1cb5955fb698b8ea57e903b6924854f5a025c90f16c9a52b2700", "method": "ed25519", "sig": "7bfe0a63ee324034807b5341336d9d2d64e9ef3936086577b5bbcc6d021b4656bd6bf14d817bbb3908e4dcb05391d1b4031b527c14d942c2d1e38275d5ff1308" } ] }49199f1e1ed94f39595153e2ddb9936c63e15919.paxheader00006660000000000000000000000612145314000450020254xustar00rootroot00000000000000223 path=client/testdata/go-tuf-transition-M3/consistent-snapshot-true/3/repository/93b38df5b9cb993dd7e2e16e9b8dd07386b35936f21c36b7527e1587052dce86f64b5eb5669fffe86b4aae4c581a2bbba6e49d780d8687dd6c304fae9b6fe098.root.json 171 linkpath=../../2/repository/93b38df5b9cb993dd7e2e16e9b8dd07386b35936f21c36b7527e1587052dce86f64b5eb5669fffe86b4aae4c581a2bbba6e49d780d8687dd6c304fae9b6fe098.root.json 49199f1e1ed94f39595153e2ddb9936c63e15919.data000077700000000000000000000000001453140004500267342see 49199f1e1ed94f39595153e2ddb9936c63e15919.paxheaderustar00rootroot000000000000004e721c74323fb94d1e3aeab4d0ef512b53fd481e.paxheader00006660000000000000000000000620145314000450020631xustar00rootroot00000000000000226 path=client/testdata/go-tuf-transition-M3/consistent-snapshot-true/3/repository/bdcbdfe0a1ecaaf9c0c5dc9728bc2eebb1c931b17e57676bd251f8b05640826dcf923ed854c235247329e7068c0d01ad6920b4454a976feb0c9f29b64e338ee4.targets.json 174 linkpath=../../2/repository/bdcbdfe0a1ecaaf9c0c5dc9728bc2eebb1c931b17e57676bd251f8b05640826dcf923ed854c235247329e7068c0d01ad6920b4454a976feb0c9f29b64e338ee4.targets.json 4e721c74323fb94d1e3aeab4d0ef512b53fd481e.data000077700000000000000000000000001453140004500276702see 4e721c74323fb94d1e3aeab4d0ef512b53fd481e.paxheaderustar00rootroot00000000000000f1f205adb2b8acbd45750258858db402fe74cf8d.paxheader00006660000000000000000000000612145314000450020646xustar00rootroot00000000000000223 path=client/testdata/go-tuf-transition-M3/consistent-snapshot-true/3/repository/bf4f7f4a062fd3780055d98572619db84d6d6c9b9b647bf6bca1190e984963ffb86189fb455110f4c13956ce9cbe72d95d03c5e6d72295414ac6bbcc3d1957c3.root.json 171 linkpath=../../2/repository/bf4f7f4a062fd3780055d98572619db84d6d6c9b9b647bf6bca1190e984963ffb86189fb455110f4c13956ce9cbe72d95d03c5e6d72295414ac6bbcc3d1957c3.root.json f1f205adb2b8acbd45750258858db402fe74cf8d.data000077700000000000000000000000001453140004500277202see f1f205adb2b8acbd45750258858db402fe74cf8d.paxheaderustar00rootroot00000000000000client/testdata/go-tuf-transition-M3/consistent-snapshot-true/3/repository/root.json000066400000000000000000000073671453140004500312660ustar00rootroot00000000000000{ "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2100-01-01T00:00:00Z", "keys": { "0efcc6a8d07a1cb5955fb698b8ea57e903b6924854f5a025c90f16c9a52b2700": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "aee574e56780ea1709a8b56e02d4ffdd9a3a1deaed61e2eb0701f376a4422e42" }, "scheme": "ed25519" }, "4c663b6d0b9f2c74a19b6791c1417c8d1916e2d84461be1a8148e4386c89582d": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "153986a7370e002f377dd68797e7466c421180c1571e233de2f8ab41c8af4f54" }, "scheme": "ed25519" }, "a3eba2113e37b749b908101bdb7b856a44f2853641830c0f939730aca3e30360": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "aee574e56780ea1709a8b56e02d4ffdd9a3a1deaed61e2eb0701f376a4422e42" }, "scheme": "ed25519" }, "a67ca94ed559c97db79999d32b79ca35b5ae1795d2f6be3eafa3bd5816a8f2c4": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "153986a7370e002f377dd68797e7466c421180c1571e233de2f8ab41c8af4f54" }, "scheme": "ed25519" }, "ad7c98dfb3b99024f8b49e33f3d92e66537f0abab78a84f1e4b667dfbf52bf60": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "722dbc861813bb5b568524d62083e875c08e66fed1694d9161d253fa163dd86f" }, "scheme": "ed25519" }, "b59406a55fbe2492022f2951dacd01fc7b400b7b41ec4028b8356161a5a71a33": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "8656ad20568cd3534c405e4d9a84b0c6e6163f7f66434df77416502835b9b160" }, "scheme": "ed25519" }, "bed15bf57ba4deb4e09667099d45d119504420983d16fd0927ebfb0c25184e7f": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "722dbc861813bb5b568524d62083e875c08e66fed1694d9161d253fa163dd86f" }, "scheme": "ed25519" }, "c7a2ca868b0e65b50cc6a2dfcfd9c129bdcb3da390ac78bb83a732be02ed5a5d": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "8656ad20568cd3534c405e4d9a84b0c6e6163f7f66434df77416502835b9b160" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "4c663b6d0b9f2c74a19b6791c1417c8d1916e2d84461be1a8148e4386c89582d", "a67ca94ed559c97db79999d32b79ca35b5ae1795d2f6be3eafa3bd5816a8f2c4" ], "threshold": 1 }, "snapshot": { "keyids": [ "bed15bf57ba4deb4e09667099d45d119504420983d16fd0927ebfb0c25184e7f", "ad7c98dfb3b99024f8b49e33f3d92e66537f0abab78a84f1e4b667dfbf52bf60" ], "threshold": 1 }, "targets": { "keyids": [ "a3eba2113e37b749b908101bdb7b856a44f2853641830c0f939730aca3e30360", "0efcc6a8d07a1cb5955fb698b8ea57e903b6924854f5a025c90f16c9a52b2700" ], "threshold": 1 }, "timestamp": { "keyids": [ "b59406a55fbe2492022f2951dacd01fc7b400b7b41ec4028b8356161a5a71a33", "c7a2ca868b0e65b50cc6a2dfcfd9c129bdcb3da390ac78bb83a732be02ed5a5d" ], "threshold": 1 } }, "spec_version": "1.0", "version": 4 }, "signatures": [ { "keyid": "4c663b6d0b9f2c74a19b6791c1417c8d1916e2d84461be1a8148e4386c89582d", "method": "ed25519", "sig": "5a5afbd4270a2638b84f50d0291e35acdf59e25492914017cb317c617d71c3a9c450d3f71f1dd7a33c369399d8de26f3a61060146682d84159f27c08f1675005" }, { "keyid": "a67ca94ed559c97db79999d32b79ca35b5ae1795d2f6be3eafa3bd5816a8f2c4", "method": "ed25519", "sig": "5a5afbd4270a2638b84f50d0291e35acdf59e25492914017cb317c617d71c3a9c450d3f71f1dd7a33c369399d8de26f3a61060146682d84159f27c08f1675005" } ] }client/testdata/go-tuf-transition-M3/consistent-snapshot-true/3/repository/snapshot.json000066400000000000000000000021461453140004500321300ustar00rootroot00000000000000{ "signed": { "_type": "snapshot", "expires": "2100-01-01T00:00:00Z", "meta": { "root.json": { "hashes": { "sha512": "765d0de07adc4de8aa6060a9c579c70938f0a6e998d76ad75363945fdb998b8019d4d42a00642141ac8a86346098dfb40bc7be32d684077be5aae06495f57cfa" }, "length": 3831, "version": 4 }, "targets.json": { "hashes": { "sha512": "7c7a5e381e1e8c3f10bc4ab1c1d33f6460f741a5c0bbeb8be4f206de58e9ce67964bef7cef0738d22d5c55238d2062a2a9a72c99f6df0c57a2bece6435a3e461" }, "length": 1469, "version": 4 } }, "spec_version": "1.0", "version": 4 }, "signatures": [ { "keyid": "bed15bf57ba4deb4e09667099d45d119504420983d16fd0927ebfb0c25184e7f", "method": "ed25519", "sig": "4619db132982f96f2f7d62d1ea5e7bfdc69eab8cf10cc6eca8721557144a8b193b98f6c3a25da862c414da348d42cee78b59c3f14903be937b16b39e1003f503" }, { "keyid": "ad7c98dfb3b99024f8b49e33f3d92e66537f0abab78a84f1e4b667dfbf52bf60", "method": "ed25519", "sig": "4619db132982f96f2f7d62d1ea5e7bfdc69eab8cf10cc6eca8721557144a8b193b98f6c3a25da862c414da348d42cee78b59c3f14903be937b16b39e1003f503" } ] }client/testdata/go-tuf-transition-M3/consistent-snapshot-true/3/repository/targets.json000066400000000000000000000026751453140004500317510ustar00rootroot00000000000000{ "signed": { "_type": "targets", "expires": "2100-01-01T00:00:00Z", "spec_version": "1.0", "targets": { "0": { "hashes": { "sha512": "31bca02094eb78126a517b206a88c73cfa9ec6f704c7030d18212cace820f025f00bf0ea68dbf3f3a5436ca63b53bf7bf80ad8d5de7d8359d0b7fed9dbc3ab99" }, "length": 1 }, "1": { "hashes": { "sha512": "4dff4ea340f0a823f15d3f4f01ab62eae0e5da579ccb851f8db9dfe84c58b2b37b89903a740e1ee172da793a6e79d560e5f7f9bd058a12a280433ed6fa46510a" }, "length": 1 }, "2": { "hashes": { "sha512": "40b244112641dd78dd4f93b6c9190dd46e0099194d5a44257b7efad6ef9ff4683da1eda0244448cb343aa688f5d3efd7314dafe580ac0bcbf115aeca9e8dc114" }, "length": 1 }, "3": { "hashes": { "sha512": "3bafbf08882a2d10133093a1b8433f50563b93c14acd05b79028eb1d12799027241450980651994501423a66c276ae26c43b739bc65c4e16b10c3af6c202aebb" }, "length": 1 } }, "version": 4 }, "signatures": [ { "keyid": "a3eba2113e37b749b908101bdb7b856a44f2853641830c0f939730aca3e30360", "method": "ed25519", "sig": "7bfe0a63ee324034807b5341336d9d2d64e9ef3936086577b5bbcc6d021b4656bd6bf14d817bbb3908e4dcb05391d1b4031b527c14d942c2d1e38275d5ff1308" }, { "keyid": "0efcc6a8d07a1cb5955fb698b8ea57e903b6924854f5a025c90f16c9a52b2700", "method": "ed25519", "sig": "7bfe0a63ee324034807b5341336d9d2d64e9ef3936086577b5bbcc6d021b4656bd6bf14d817bbb3908e4dcb05391d1b4031b527c14d942c2d1e38275d5ff1308" } ] }client/testdata/go-tuf-transition-M3/consistent-snapshot-true/3/repository/targets/000077500000000000000000000000001453140004500310445ustar00rootroot00000000000000client/testdata/go-tuf-transition-M3/consistent-snapshot-true/3/repository/targets/0.0000077700000000000000000000000001453140004500363712../../../2/repository/targets/0.0ustar00rootroot00000000000000client/testdata/go-tuf-transition-M3/consistent-snapshot-true/3/repository/targets/0.1000077700000000000000000000000001453140004500363732../../../2/repository/targets/0.1ustar00rootroot00000000000000client/testdata/go-tuf-transition-M3/consistent-snapshot-true/3/repository/targets/0.2000077700000000000000000000000001453140004500363752../../../2/repository/targets/0.2ustar00rootroot00000000000000client/testdata/go-tuf-transition-M3/consistent-snapshot-true/3/repository/targets/0.3000066400000000000000000000000011453140004500312560ustar00rootroot000000000000003f820397645f6f28ac0d75055df0fd28512bd7b70.paxheader00006660000000000000000000000615145314000450020360xustar00rootroot00000000000000223 path=client/testdata/go-tuf-transition-M3/consistent-snapshot-true/3/repository/targets/31bca02094eb78126a517b206a88c73cfa9ec6f704c7030d18212cace820f025f00bf0ea68dbf3f3a5436ca63b53bf7bf80ad8d5de7d8359d0b7fed9dbc3ab99.0 174 linkpath=../../../2/repository/targets/31bca02094eb78126a517b206a88c73cfa9ec6f704c7030d18212cace820f025f00bf0ea68dbf3f3a5436ca63b53bf7bf80ad8d5de7d8359d0b7fed9dbc3ab99.0 f820397645f6f28ac0d75055df0fd28512bd7b70.data000077700000000000000000000000001453140004500271362see f820397645f6f28ac0d75055df0fd28512bd7b70.paxheaderustar00rootroot00000000000000e440e5c842586965a7fb77deda2eca68612b1f53.paxheader00006660000000000000000000000337145314000450020527xustar00rootroot00000000000000223 path=client/testdata/go-tuf-transition-M3/consistent-snapshot-true/3/repository/targets/3bafbf08882a2d10133093a1b8433f50563b93c14acd05b79028eb1d12799027241450980651994501423a66c276ae26c43b739bc65c4e16b10c3af6c202aebb.3 e440e5c842586965a7fb77deda2eca68612b1f53.data000066400000000000000000000000011453140004500173510ustar00rootroot0000000000000037cbcc2a6335c6040f6ee95f6300ea6aea7a8a87f.paxheader00006660000000000000000000000615145314000450020727xustar00rootroot00000000000000223 path=client/testdata/go-tuf-transition-M3/consistent-snapshot-true/3/repository/targets/40b244112641dd78dd4f93b6c9190dd46e0099194d5a44257b7efad6ef9ff4683da1eda0244448cb343aa688f5d3efd7314dafe580ac0bcbf115aeca9e8dc114.2 174 linkpath=../../../2/repository/targets/40b244112641dd78dd4f93b6c9190dd46e0099194d5a44257b7efad6ef9ff4683da1eda0244448cb343aa688f5d3efd7314dafe580ac0bcbf115aeca9e8dc114.2 7cbcc2a6335c6040f6ee95f6300ea6aea7a8a87f.data000077700000000000000000000000001453140004500300542see 7cbcc2a6335c6040f6ee95f6300ea6aea7a8a87f.paxheaderustar00rootroot00000000000000180cdb4fd229abf57fb6a4c85457ad9a8620fd92.paxheader00006660000000000000000000000615145314000450020661xustar00rootroot00000000000000223 path=client/testdata/go-tuf-transition-M3/consistent-snapshot-true/3/repository/targets/4dff4ea340f0a823f15d3f4f01ab62eae0e5da579ccb851f8db9dfe84c58b2b37b89903a740e1ee172da793a6e79d560e5f7f9bd058a12a280433ed6fa46510a.1 174 linkpath=../../../2/repository/targets/4dff4ea340f0a823f15d3f4f01ab62eae0e5da579ccb851f8db9dfe84c58b2b37b89903a740e1ee172da793a6e79d560e5f7f9bd058a12a280433ed6fa46510a.1 180cdb4fd229abf57fb6a4c85457ad9a8620fd92.data000077700000000000000000000000001453140004500277402see 180cdb4fd229abf57fb6a4c85457ad9a8620fd92.paxheaderustar00rootroot00000000000000client/testdata/go-tuf-transition-M3/consistent-snapshot-true/3/repository/timestamp.json000066400000000000000000000016021453140004500322700ustar00rootroot00000000000000{ "signed": { "_type": "timestamp", "expires": "2100-01-01T00:00:00Z", "meta": { "snapshot.json": { "hashes": { "sha512": "148c273a895a85127bb254edd19da2190176272446cd0f43220aba2b0f72fe954a2eab52c38daf67b1c3cbe877848d01266d8a1af3e858c8d004682a3393f3a7" }, "length": 1126, "version": 4 } }, "spec_version": "1.0", "version": 4 }, "signatures": [ { "keyid": "b59406a55fbe2492022f2951dacd01fc7b400b7b41ec4028b8356161a5a71a33", "method": "ed25519", "sig": "a14cd9dfc17e257aa7f5d6586e32defbc076d1aa3cb30fd86be362f0c528df3145aeba52f5eceb8fab481336b95667c9009fb639bfe996cbe11412c60226320a" }, { "keyid": "c7a2ca868b0e65b50cc6a2dfcfd9c129bdcb3da390ac78bb83a732be02ed5a5d", "method": "ed25519", "sig": "a14cd9dfc17e257aa7f5d6586e32defbc076d1aa3cb30fd86be362f0c528df3145aeba52f5eceb8fab481336b95667c9009fb639bfe996cbe11412c60226320a" } ] }client/testdata/go-tuf-transition-M3/consistent-snapshot-true/4/000077500000000000000000000000001453140004500251555ustar00rootroot00000000000000client/testdata/go-tuf-transition-M3/consistent-snapshot-true/4/repository/000077500000000000000000000000001453140004500273745ustar00rootroot00000000000000client/testdata/go-tuf-transition-M3/consistent-snapshot-true/4/repository/1.root.json000077700000000000000000000000001453140004500364302../../3/repository/1.root.jsonustar00rootroot00000000000000client/testdata/go-tuf-transition-M3/consistent-snapshot-true/4/repository/1.snapshot.json000077700000000000000000000000001453140004500401602../../3/repository/1.snapshot.jsonustar00rootroot00000000000000client/testdata/go-tuf-transition-M3/consistent-snapshot-true/4/repository/1.targets.json000077700000000000000000000000001453140004500376042../../3/repository/1.targets.jsonustar00rootroot0000000000000071b4225b2a1f618697e4145fd828e7e4c597ebd3.paxheader00006660000000000000000000000620145314000450020366xustar00rootroot00000000000000226 path=client/testdata/go-tuf-transition-M3/consistent-snapshot-true/4/repository/118c2a2b6b9f7bc667dca8404a2671910a22b6fe48e460816a9f6f2be66f7806a789c9dc4880d2c2812c0bc7607caac30cc0a8299183fd7228e1049f6920ce22.targets.json 174 linkpath=../../3/repository/118c2a2b6b9f7bc667dca8404a2671910a22b6fe48e460816a9f6f2be66f7806a789c9dc4880d2c2812c0bc7607caac30cc0a8299183fd7228e1049f6920ce22.targets.json 71b4225b2a1f618697e4145fd828e7e4c597ebd3.data000077700000000000000000000000001453140004500271622see 71b4225b2a1f618697e4145fd828e7e4c597ebd3.paxheaderustar00rootroot0000000000000011937d87fbf0d084143b4484ab01e63978f19c35.paxheader00006660000000000000000000000622145314000450020217xustar00rootroot00000000000000227 path=client/testdata/go-tuf-transition-M3/consistent-snapshot-true/4/repository/148c273a895a85127bb254edd19da2190176272446cd0f43220aba2b0f72fe954a2eab52c38daf67b1c3cbe877848d01266d8a1af3e858c8d004682a3393f3a7.snapshot.json 175 linkpath=../../3/repository/148c273a895a85127bb254edd19da2190176272446cd0f43220aba2b0f72fe954a2eab52c38daf67b1c3cbe877848d01266d8a1af3e858c8d004682a3393f3a7.snapshot.json 11937d87fbf0d084143b4484ab01e63978f19c35.data000077700000000000000000000000001453140004500266402see 11937d87fbf0d084143b4484ab01e63978f19c35.paxheaderustar00rootroot000000000000000e10c4d0c543ab979bf7ba5730f628792e1ad138.paxheader00006660000000000000000000000622145314000450020422xustar00rootroot00000000000000227 path=client/testdata/go-tuf-transition-M3/consistent-snapshot-true/4/repository/15c2c14fb300cecb52c9ef9a88545759028ec5d7e0f028269ba828c2199e3f0e56f963bdcfd0897c51ebb95ee2452666ec7f65bae688b48db1b8aa8de944e432.snapshot.json 175 linkpath=../../3/repository/15c2c14fb300cecb52c9ef9a88545759028ec5d7e0f028269ba828c2199e3f0e56f963bdcfd0897c51ebb95ee2452666ec7f65bae688b48db1b8aa8de944e432.snapshot.json 0e10c4d0c543ab979bf7ba5730f628792e1ad138.data000077700000000000000000000000001453140004500272462see 0e10c4d0c543ab979bf7ba5730f628792e1ad138.paxheaderustar00rootroot00000000000000client/testdata/go-tuf-transition-M3/consistent-snapshot-true/4/repository/2.root.json000077700000000000000000000000001453140004500364322../../3/repository/2.root.jsonustar00rootroot00000000000000client/testdata/go-tuf-transition-M3/consistent-snapshot-true/4/repository/2.snapshot.json000077700000000000000000000000001453140004500401622../../3/repository/2.snapshot.jsonustar00rootroot00000000000000client/testdata/go-tuf-transition-M3/consistent-snapshot-true/4/repository/2.targets.json000077700000000000000000000000001453140004500376062../../3/repository/2.targets.jsonustar00rootroot0000000000000057800212f28bc7cc332e2ddea56518c68b8f0c1b.paxheader00006660000000000000000000000622145314000450020476xustar00rootroot00000000000000227 path=client/testdata/go-tuf-transition-M3/consistent-snapshot-true/4/repository/23170400c30b4bbcd375c88ae22104241e377006e9c40c64ed49aef9ad2bdfa49ba2832ccb9c3776aaee336195de73cda28b5ba65fb468f7a5e60b870cbe26e9.snapshot.json 175 linkpath=../../3/repository/23170400c30b4bbcd375c88ae22104241e377006e9c40c64ed49aef9ad2bdfa49ba2832ccb9c3776aaee336195de73cda28b5ba65fb468f7a5e60b870cbe26e9.snapshot.json 57800212f28bc7cc332e2ddea56518c68b8f0c1b.data000077700000000000000000000000001453140004500273762see 57800212f28bc7cc332e2ddea56518c68b8f0c1b.paxheaderustar00rootroot00000000000000client/testdata/go-tuf-transition-M3/consistent-snapshot-true/4/repository/3.root.json000077700000000000000000000000001453140004500364342../../3/repository/3.root.jsonustar00rootroot00000000000000client/testdata/go-tuf-transition-M3/consistent-snapshot-true/4/repository/3.snapshot.json000077700000000000000000000000001453140004500401642../../3/repository/3.snapshot.jsonustar00rootroot00000000000000client/testdata/go-tuf-transition-M3/consistent-snapshot-true/4/repository/3.targets.json000077700000000000000000000000001453140004500376102../../3/repository/3.targets.jsonustar00rootroot0000000000000098160f781efdd2c46a03b7c8da4f74ccc780a456.paxheader00006660000000000000000000000622145314000450020600xustar00rootroot00000000000000227 path=client/testdata/go-tuf-transition-M3/consistent-snapshot-true/4/repository/33b282c1970996734deff944f2862f84b196f0b2b67dfa7383f75f95ef3e8673602aa411e05572075729ead6caa35df6720ce5723fd67c63d4aaa81dd966c5a4.snapshot.json 175 linkpath=../../3/repository/33b282c1970996734deff944f2862f84b196f0b2b67dfa7383f75f95ef3e8673602aa411e05572075729ead6caa35df6720ce5723fd67c63d4aaa81dd966c5a4.snapshot.json 98160f781efdd2c46a03b7c8da4f74ccc780a456.data000077700000000000000000000000001453140004500276022see 98160f781efdd2c46a03b7c8da4f74ccc780a456.paxheaderustar00rootroot00000000000000client/testdata/go-tuf-transition-M3/consistent-snapshot-true/4/repository/4.root.json000077700000000000000000000000001453140004500364362../../3/repository/4.root.jsonustar00rootroot00000000000000client/testdata/go-tuf-transition-M3/consistent-snapshot-true/4/repository/4.snapshot.json000077700000000000000000000000001453140004500401662../../3/repository/4.snapshot.jsonustar00rootroot00000000000000client/testdata/go-tuf-transition-M3/consistent-snapshot-true/4/repository/4.targets.json000077700000000000000000000000001453140004500376122../../3/repository/4.targets.jsonustar00rootroot00000000000000client/testdata/go-tuf-transition-M3/consistent-snapshot-true/4/repository/5.root.json000066400000000000000000000073671453140004500314320ustar00rootroot00000000000000{ "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2100-01-01T00:00:00Z", "keys": { "0efcc6a8d07a1cb5955fb698b8ea57e903b6924854f5a025c90f16c9a52b2700": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "aee574e56780ea1709a8b56e02d4ffdd9a3a1deaed61e2eb0701f376a4422e42" }, "scheme": "ed25519" }, "4c663b6d0b9f2c74a19b6791c1417c8d1916e2d84461be1a8148e4386c89582d": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "153986a7370e002f377dd68797e7466c421180c1571e233de2f8ab41c8af4f54" }, "scheme": "ed25519" }, "79b5760e4c96b6becc12bec4260c9c1d533b9b70628ade2b229ef02b772b10b0": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "3ab34b0c2d4eadccaa0f0cf22ced07b552394063a9de2806993d022360dffc76" }, "scheme": "ed25519" }, "a3eba2113e37b749b908101bdb7b856a44f2853641830c0f939730aca3e30360": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "aee574e56780ea1709a8b56e02d4ffdd9a3a1deaed61e2eb0701f376a4422e42" }, "scheme": "ed25519" }, "a67ca94ed559c97db79999d32b79ca35b5ae1795d2f6be3eafa3bd5816a8f2c4": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "153986a7370e002f377dd68797e7466c421180c1571e233de2f8ab41c8af4f54" }, "scheme": "ed25519" }, "ad7c98dfb3b99024f8b49e33f3d92e66537f0abab78a84f1e4b667dfbf52bf60": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "722dbc861813bb5b568524d62083e875c08e66fed1694d9161d253fa163dd86f" }, "scheme": "ed25519" }, "bed15bf57ba4deb4e09667099d45d119504420983d16fd0927ebfb0c25184e7f": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "722dbc861813bb5b568524d62083e875c08e66fed1694d9161d253fa163dd86f" }, "scheme": "ed25519" }, "e23c19fb64db7146965700b9983df63d2dd4362b1f99d74da2383234da4ab20d": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "3ab34b0c2d4eadccaa0f0cf22ced07b552394063a9de2806993d022360dffc76" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "4c663b6d0b9f2c74a19b6791c1417c8d1916e2d84461be1a8148e4386c89582d", "a67ca94ed559c97db79999d32b79ca35b5ae1795d2f6be3eafa3bd5816a8f2c4" ], "threshold": 1 }, "snapshot": { "keyids": [ "bed15bf57ba4deb4e09667099d45d119504420983d16fd0927ebfb0c25184e7f", "ad7c98dfb3b99024f8b49e33f3d92e66537f0abab78a84f1e4b667dfbf52bf60" ], "threshold": 1 }, "targets": { "keyids": [ "a3eba2113e37b749b908101bdb7b856a44f2853641830c0f939730aca3e30360", "0efcc6a8d07a1cb5955fb698b8ea57e903b6924854f5a025c90f16c9a52b2700" ], "threshold": 1 }, "timestamp": { "keyids": [ "79b5760e4c96b6becc12bec4260c9c1d533b9b70628ade2b229ef02b772b10b0", "e23c19fb64db7146965700b9983df63d2dd4362b1f99d74da2383234da4ab20d" ], "threshold": 1 } }, "spec_version": "1.0", "version": 5 }, "signatures": [ { "keyid": "4c663b6d0b9f2c74a19b6791c1417c8d1916e2d84461be1a8148e4386c89582d", "method": "ed25519", "sig": "1d3e90aac8b4fad8846d3ae59ed9069ba335310bd14259a6ca6a905499a9b166761c3c737cbef6d231f84b78575d2cb543caba350a1fcaa104589c86cf2e890c" }, { "keyid": "a67ca94ed559c97db79999d32b79ca35b5ae1795d2f6be3eafa3bd5816a8f2c4", "method": "ed25519", "sig": "1d3e90aac8b4fad8846d3ae59ed9069ba335310bd14259a6ca6a905499a9b166761c3c737cbef6d231f84b78575d2cb543caba350a1fcaa104589c86cf2e890c" } ] }client/testdata/go-tuf-transition-M3/consistent-snapshot-true/4/repository/5.snapshot.json000066400000000000000000000021461453140004500322740ustar00rootroot00000000000000{ "signed": { "_type": "snapshot", "expires": "2100-01-01T00:00:00Z", "meta": { "root.json": { "hashes": { "sha512": "8aae80ec8056a31ca28304ed0b0b35f0dacb11c5d6684cc7200086ff237fec23dc1e3fc2b43afb968d780c8053bd4081f4ae7ca71a066894042b1d24983fc0fd" }, "length": 3831, "version": 5 }, "targets.json": { "hashes": { "sha512": "c86fd75fe946b88488ece0fa399857a75f3cc80bd85bc71f3fcc030ad6201c559370cbc67a8a547f1964355911fc0ef8000dd8e9f0ff84a3cc8e45cbd42ec7db" }, "length": 1670, "version": 5 } }, "spec_version": "1.0", "version": 5 }, "signatures": [ { "keyid": "bed15bf57ba4deb4e09667099d45d119504420983d16fd0927ebfb0c25184e7f", "method": "ed25519", "sig": "1d473b59dec8a119fb8bc1e5b33c3b0896f62598d0b560cc7a98f501bdc9436fb2399219f8d0301081fe9db22f6734bd1b865a3b9040c3a5357e67d0dc89880f" }, { "keyid": "ad7c98dfb3b99024f8b49e33f3d92e66537f0abab78a84f1e4b667dfbf52bf60", "method": "ed25519", "sig": "1d473b59dec8a119fb8bc1e5b33c3b0896f62598d0b560cc7a98f501bdc9436fb2399219f8d0301081fe9db22f6734bd1b865a3b9040c3a5357e67d0dc89880f" } ] }client/testdata/go-tuf-transition-M3/consistent-snapshot-true/4/repository/5.targets.json000066400000000000000000000032061453140004500321040ustar00rootroot00000000000000{ "signed": { "_type": "targets", "expires": "2100-01-01T00:00:00Z", "spec_version": "1.0", "targets": { "0": { "hashes": { "sha512": "31bca02094eb78126a517b206a88c73cfa9ec6f704c7030d18212cace820f025f00bf0ea68dbf3f3a5436ca63b53bf7bf80ad8d5de7d8359d0b7fed9dbc3ab99" }, "length": 1 }, "1": { "hashes": { "sha512": "4dff4ea340f0a823f15d3f4f01ab62eae0e5da579ccb851f8db9dfe84c58b2b37b89903a740e1ee172da793a6e79d560e5f7f9bd058a12a280433ed6fa46510a" }, "length": 1 }, "2": { "hashes": { "sha512": "40b244112641dd78dd4f93b6c9190dd46e0099194d5a44257b7efad6ef9ff4683da1eda0244448cb343aa688f5d3efd7314dafe580ac0bcbf115aeca9e8dc114" }, "length": 1 }, "3": { "hashes": { "sha512": "3bafbf08882a2d10133093a1b8433f50563b93c14acd05b79028eb1d12799027241450980651994501423a66c276ae26c43b739bc65c4e16b10c3af6c202aebb" }, "length": 1 }, "4": { "hashes": { "sha512": "a321d8b405e3ef2604959847b36d171eebebc4a8941dc70a4784935a4fca5d5813de84dfa049f06549aa61b20848c1633ce81b675286ea8fb53db240d831c568" }, "length": 1 } }, "version": 5 }, "signatures": [ { "keyid": "a3eba2113e37b749b908101bdb7b856a44f2853641830c0f939730aca3e30360", "method": "ed25519", "sig": "68f2346cdbe045e8558b2ccd86be66e15466955167557c704b51d7163838f670c53ab9247c16a4ed0cd4ecc981a7e2a04a350b01548f97654499d6f9c17c4202" }, { "keyid": "0efcc6a8d07a1cb5955fb698b8ea57e903b6924854f5a025c90f16c9a52b2700", "method": "ed25519", "sig": "68f2346cdbe045e8558b2ccd86be66e15466955167557c704b51d7163838f670c53ab9247c16a4ed0cd4ecc981a7e2a04a350b01548f97654499d6f9c17c4202" } ] }fcb3707acb7b38dd81c2ae4683a1c2f36ad56a6e.paxheader00006660000000000000000000000612145314000450020776xustar00rootroot00000000000000223 path=client/testdata/go-tuf-transition-M3/consistent-snapshot-true/4/repository/590c7d2df37495eae436e25eea548eb48294ef63aaeebe51b1bc1056c149fd54710c67d231c19c14708824aa7095e0028b6691fcf21c1edfcc7a88a48d4b7b94.root.json 171 linkpath=../../3/repository/590c7d2df37495eae436e25eea548eb48294ef63aaeebe51b1bc1056c149fd54710c67d231c19c14708824aa7095e0028b6691fcf21c1edfcc7a88a48d4b7b94.root.json fcb3707acb7b38dd81c2ae4683a1c2f36ad56a6e.data000077700000000000000000000000001453140004500302002see fcb3707acb7b38dd81c2ae4683a1c2f36ad56a6e.paxheaderustar00rootroot0000000000000021e403ff9c75247439d27169b49a56af723a5bf3.paxheader00006660000000000000000000000620145314000450020300xustar00rootroot00000000000000226 path=client/testdata/go-tuf-transition-M3/consistent-snapshot-true/4/repository/6ecff211b4df20d84e5a99a1145b7f96752efe880147439a3a8c2ecc080762f84b5b784da1b41d2ccb1492d112c521b4b82973589285dfbcfbb6c423c559ff4e.targets.json 174 linkpath=../../3/repository/6ecff211b4df20d84e5a99a1145b7f96752efe880147439a3a8c2ecc080762f84b5b784da1b41d2ccb1492d112c521b4b82973589285dfbcfbb6c423c559ff4e.targets.json 21e403ff9c75247439d27169b49a56af723a5bf3.data000077700000000000000000000000001453140004500270062see 21e403ff9c75247439d27169b49a56af723a5bf3.paxheaderustar00rootroot0000000000000037511d051d115204c96b4bb9bcb750eba15bc9cd.paxheader00006660000000000000000000000612145314000450020534xustar00rootroot00000000000000223 path=client/testdata/go-tuf-transition-M3/consistent-snapshot-true/4/repository/765d0de07adc4de8aa6060a9c579c70938f0a6e998d76ad75363945fdb998b8019d4d42a00642141ac8a86346098dfb40bc7be32d684077be5aae06495f57cfa.root.json 171 linkpath=../../3/repository/765d0de07adc4de8aa6060a9c579c70938f0a6e998d76ad75363945fdb998b8019d4d42a00642141ac8a86346098dfb40bc7be32d684077be5aae06495f57cfa.root.json 37511d051d115204c96b4bb9bcb750eba15bc9cd.data000077700000000000000000000000001453140004500274742see 37511d051d115204c96b4bb9bcb750eba15bc9cd.paxheaderustar00rootroot0000000000000029e8425ac0eed7bf51e0eca6aee1cabb9bad5a7f.paxheader00006660000000000000000000000620145314000450021351xustar00rootroot00000000000000226 path=client/testdata/go-tuf-transition-M3/consistent-snapshot-true/4/repository/7c7a5e381e1e8c3f10bc4ab1c1d33f6460f741a5c0bbeb8be4f206de58e9ce67964bef7cef0738d22d5c55238d2062a2a9a72c99f6df0c57a2bece6435a3e461.targets.json 174 linkpath=../../3/repository/7c7a5e381e1e8c3f10bc4ab1c1d33f6460f741a5c0bbeb8be4f206de58e9ce67964bef7cef0738d22d5c55238d2062a2a9a72c99f6df0c57a2bece6435a3e461.targets.json 29e8425ac0eed7bf51e0eca6aee1cabb9bad5a7f.data000077700000000000000000000000001453140004500311302see 29e8425ac0eed7bf51e0eca6aee1cabb9bad5a7f.paxheaderustar00rootroot00000000000000a9f853e4566afca1b67b180536cdb7babb04a037.paxheader00006660000000000000000000000337145314000450020635xustar00rootroot00000000000000223 path=client/testdata/go-tuf-transition-M3/consistent-snapshot-true/4/repository/8aae80ec8056a31ca28304ed0b0b35f0dacb11c5d6684cc7200086ff237fec23dc1e3fc2b43afb968d780c8053bd4081f4ae7ca71a066894042b1d24983fc0fd.root.json a9f853e4566afca1b67b180536cdb7babb04a037.data000066400000000000000000000073671453140004500175050ustar00rootroot00000000000000{ "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2100-01-01T00:00:00Z", "keys": { "0efcc6a8d07a1cb5955fb698b8ea57e903b6924854f5a025c90f16c9a52b2700": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "aee574e56780ea1709a8b56e02d4ffdd9a3a1deaed61e2eb0701f376a4422e42" }, "scheme": "ed25519" }, "4c663b6d0b9f2c74a19b6791c1417c8d1916e2d84461be1a8148e4386c89582d": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "153986a7370e002f377dd68797e7466c421180c1571e233de2f8ab41c8af4f54" }, "scheme": "ed25519" }, "79b5760e4c96b6becc12bec4260c9c1d533b9b70628ade2b229ef02b772b10b0": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "3ab34b0c2d4eadccaa0f0cf22ced07b552394063a9de2806993d022360dffc76" }, "scheme": "ed25519" }, "a3eba2113e37b749b908101bdb7b856a44f2853641830c0f939730aca3e30360": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "aee574e56780ea1709a8b56e02d4ffdd9a3a1deaed61e2eb0701f376a4422e42" }, "scheme": "ed25519" }, "a67ca94ed559c97db79999d32b79ca35b5ae1795d2f6be3eafa3bd5816a8f2c4": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "153986a7370e002f377dd68797e7466c421180c1571e233de2f8ab41c8af4f54" }, "scheme": "ed25519" }, "ad7c98dfb3b99024f8b49e33f3d92e66537f0abab78a84f1e4b667dfbf52bf60": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "722dbc861813bb5b568524d62083e875c08e66fed1694d9161d253fa163dd86f" }, "scheme": "ed25519" }, "bed15bf57ba4deb4e09667099d45d119504420983d16fd0927ebfb0c25184e7f": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "722dbc861813bb5b568524d62083e875c08e66fed1694d9161d253fa163dd86f" }, "scheme": "ed25519" }, "e23c19fb64db7146965700b9983df63d2dd4362b1f99d74da2383234da4ab20d": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "3ab34b0c2d4eadccaa0f0cf22ced07b552394063a9de2806993d022360dffc76" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "4c663b6d0b9f2c74a19b6791c1417c8d1916e2d84461be1a8148e4386c89582d", "a67ca94ed559c97db79999d32b79ca35b5ae1795d2f6be3eafa3bd5816a8f2c4" ], "threshold": 1 }, "snapshot": { "keyids": [ "bed15bf57ba4deb4e09667099d45d119504420983d16fd0927ebfb0c25184e7f", "ad7c98dfb3b99024f8b49e33f3d92e66537f0abab78a84f1e4b667dfbf52bf60" ], "threshold": 1 }, "targets": { "keyids": [ "a3eba2113e37b749b908101bdb7b856a44f2853641830c0f939730aca3e30360", "0efcc6a8d07a1cb5955fb698b8ea57e903b6924854f5a025c90f16c9a52b2700" ], "threshold": 1 }, "timestamp": { "keyids": [ "79b5760e4c96b6becc12bec4260c9c1d533b9b70628ade2b229ef02b772b10b0", "e23c19fb64db7146965700b9983df63d2dd4362b1f99d74da2383234da4ab20d" ], "threshold": 1 } }, "spec_version": "1.0", "version": 5 }, "signatures": [ { "keyid": "4c663b6d0b9f2c74a19b6791c1417c8d1916e2d84461be1a8148e4386c89582d", "method": "ed25519", "sig": "1d3e90aac8b4fad8846d3ae59ed9069ba335310bd14259a6ca6a905499a9b166761c3c737cbef6d231f84b78575d2cb543caba350a1fcaa104589c86cf2e890c" }, { "keyid": "a67ca94ed559c97db79999d32b79ca35b5ae1795d2f6be3eafa3bd5816a8f2c4", "method": "ed25519", "sig": "1d3e90aac8b4fad8846d3ae59ed9069ba335310bd14259a6ca6a905499a9b166761c3c737cbef6d231f84b78575d2cb543caba350a1fcaa104589c86cf2e890c" } ] }26fca7090c781da0016bce69929fdb3a58d7ba59.paxheader00006660000000000000000000000612145314000450020574xustar00rootroot00000000000000223 path=client/testdata/go-tuf-transition-M3/consistent-snapshot-true/4/repository/93b38df5b9cb993dd7e2e16e9b8dd07386b35936f21c36b7527e1587052dce86f64b5eb5669fffe86b4aae4c581a2bbba6e49d780d8687dd6c304fae9b6fe098.root.json 171 linkpath=../../3/repository/93b38df5b9cb993dd7e2e16e9b8dd07386b35936f21c36b7527e1587052dce86f64b5eb5669fffe86b4aae4c581a2bbba6e49d780d8687dd6c304fae9b6fe098.root.json 26fca7090c781da0016bce69929fdb3a58d7ba59.data000077700000000000000000000000001453140004500275742see 26fca7090c781da0016bce69929fdb3a58d7ba59.paxheaderustar00rootroot00000000000000b978f58ffa29678d38c28ff6a6162873e74f010c.paxheader00006660000000000000000000000620145314000450020410xustar00rootroot00000000000000226 path=client/testdata/go-tuf-transition-M3/consistent-snapshot-true/4/repository/bdcbdfe0a1ecaaf9c0c5dc9728bc2eebb1c931b17e57676bd251f8b05640826dcf923ed854c235247329e7068c0d01ad6920b4454a976feb0c9f29b64e338ee4.targets.json 174 linkpath=../../3/repository/bdcbdfe0a1ecaaf9c0c5dc9728bc2eebb1c931b17e57676bd251f8b05640826dcf923ed854c235247329e7068c0d01ad6920b4454a976feb0c9f29b64e338ee4.targets.json b978f58ffa29678d38c28ff6a6162873e74f010c.data000077700000000000000000000000001453140004500272262see b978f58ffa29678d38c28ff6a6162873e74f010c.paxheaderustar00rootroot00000000000000c4206729a0c97efaa459d98fe9b70b7682167f76.paxheader00006660000000000000000000000612145314000450020405xustar00rootroot00000000000000223 path=client/testdata/go-tuf-transition-M3/consistent-snapshot-true/4/repository/bf4f7f4a062fd3780055d98572619db84d6d6c9b9b647bf6bca1190e984963ffb86189fb455110f4c13956ce9cbe72d95d03c5e6d72295414ac6bbcc3d1957c3.root.json 171 linkpath=../../3/repository/bf4f7f4a062fd3780055d98572619db84d6d6c9b9b647bf6bca1190e984963ffb86189fb455110f4c13956ce9cbe72d95d03c5e6d72295414ac6bbcc3d1957c3.root.json c4206729a0c97efaa459d98fe9b70b7682167f76.data000077700000000000000000000000001453140004500272162see c4206729a0c97efaa459d98fe9b70b7682167f76.paxheaderustar00rootroot000000000000007dc909476f5b6bbf1929bb261be9c9534fcb8246.paxheader00006660000000000000000000000342145314000450020534xustar00rootroot00000000000000226 path=client/testdata/go-tuf-transition-M3/consistent-snapshot-true/4/repository/c86fd75fe946b88488ece0fa399857a75f3cc80bd85bc71f3fcc030ad6201c559370cbc67a8a547f1964355911fc0ef8000dd8e9f0ff84a3cc8e45cbd42ec7db.targets.json 7dc909476f5b6bbf1929bb261be9c9534fcb8246.data000066400000000000000000000032061453140004500173740ustar00rootroot00000000000000{ "signed": { "_type": "targets", "expires": "2100-01-01T00:00:00Z", "spec_version": "1.0", "targets": { "0": { "hashes": { "sha512": "31bca02094eb78126a517b206a88c73cfa9ec6f704c7030d18212cace820f025f00bf0ea68dbf3f3a5436ca63b53bf7bf80ad8d5de7d8359d0b7fed9dbc3ab99" }, "length": 1 }, "1": { "hashes": { "sha512": "4dff4ea340f0a823f15d3f4f01ab62eae0e5da579ccb851f8db9dfe84c58b2b37b89903a740e1ee172da793a6e79d560e5f7f9bd058a12a280433ed6fa46510a" }, "length": 1 }, "2": { "hashes": { "sha512": "40b244112641dd78dd4f93b6c9190dd46e0099194d5a44257b7efad6ef9ff4683da1eda0244448cb343aa688f5d3efd7314dafe580ac0bcbf115aeca9e8dc114" }, "length": 1 }, "3": { "hashes": { "sha512": "3bafbf08882a2d10133093a1b8433f50563b93c14acd05b79028eb1d12799027241450980651994501423a66c276ae26c43b739bc65c4e16b10c3af6c202aebb" }, "length": 1 }, "4": { "hashes": { "sha512": "a321d8b405e3ef2604959847b36d171eebebc4a8941dc70a4784935a4fca5d5813de84dfa049f06549aa61b20848c1633ce81b675286ea8fb53db240d831c568" }, "length": 1 } }, "version": 5 }, "signatures": [ { "keyid": "a3eba2113e37b749b908101bdb7b856a44f2853641830c0f939730aca3e30360", "method": "ed25519", "sig": "68f2346cdbe045e8558b2ccd86be66e15466955167557c704b51d7163838f670c53ab9247c16a4ed0cd4ecc981a7e2a04a350b01548f97654499d6f9c17c4202" }, { "keyid": "0efcc6a8d07a1cb5955fb698b8ea57e903b6924854f5a025c90f16c9a52b2700", "method": "ed25519", "sig": "68f2346cdbe045e8558b2ccd86be66e15466955167557c704b51d7163838f670c53ab9247c16a4ed0cd4ecc981a7e2a04a350b01548f97654499d6f9c17c4202" } ] }882ff3a0e69ba7686d4cfc7fe9ef684a059a8f1e.paxheader00006660000000000000000000000343145314000450020772xustar00rootroot00000000000000227 path=client/testdata/go-tuf-transition-M3/consistent-snapshot-true/4/repository/dce60b87bbc2b98c1e4cc86cc5798d381561600934b0da7d044ed72511dafefc5e4e640a76e59ea96f6c9edf1a002974180e1562b0496127fcb44ca6b08c294c.snapshot.json 882ff3a0e69ba7686d4cfc7fe9ef684a059a8f1e.data000066400000000000000000000021461453140004500176330ustar00rootroot00000000000000{ "signed": { "_type": "snapshot", "expires": "2100-01-01T00:00:00Z", "meta": { "root.json": { "hashes": { "sha512": "8aae80ec8056a31ca28304ed0b0b35f0dacb11c5d6684cc7200086ff237fec23dc1e3fc2b43afb968d780c8053bd4081f4ae7ca71a066894042b1d24983fc0fd" }, "length": 3831, "version": 5 }, "targets.json": { "hashes": { "sha512": "c86fd75fe946b88488ece0fa399857a75f3cc80bd85bc71f3fcc030ad6201c559370cbc67a8a547f1964355911fc0ef8000dd8e9f0ff84a3cc8e45cbd42ec7db" }, "length": 1670, "version": 5 } }, "spec_version": "1.0", "version": 5 }, "signatures": [ { "keyid": "bed15bf57ba4deb4e09667099d45d119504420983d16fd0927ebfb0c25184e7f", "method": "ed25519", "sig": "1d473b59dec8a119fb8bc1e5b33c3b0896f62598d0b560cc7a98f501bdc9436fb2399219f8d0301081fe9db22f6734bd1b865a3b9040c3a5357e67d0dc89880f" }, { "keyid": "ad7c98dfb3b99024f8b49e33f3d92e66537f0abab78a84f1e4b667dfbf52bf60", "method": "ed25519", "sig": "1d473b59dec8a119fb8bc1e5b33c3b0896f62598d0b560cc7a98f501bdc9436fb2399219f8d0301081fe9db22f6734bd1b865a3b9040c3a5357e67d0dc89880f" } ] }client/testdata/go-tuf-transition-M3/consistent-snapshot-true/4/repository/root.json000066400000000000000000000073671453140004500312670ustar00rootroot00000000000000{ "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2100-01-01T00:00:00Z", "keys": { "0efcc6a8d07a1cb5955fb698b8ea57e903b6924854f5a025c90f16c9a52b2700": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "aee574e56780ea1709a8b56e02d4ffdd9a3a1deaed61e2eb0701f376a4422e42" }, "scheme": "ed25519" }, "4c663b6d0b9f2c74a19b6791c1417c8d1916e2d84461be1a8148e4386c89582d": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "153986a7370e002f377dd68797e7466c421180c1571e233de2f8ab41c8af4f54" }, "scheme": "ed25519" }, "79b5760e4c96b6becc12bec4260c9c1d533b9b70628ade2b229ef02b772b10b0": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "3ab34b0c2d4eadccaa0f0cf22ced07b552394063a9de2806993d022360dffc76" }, "scheme": "ed25519" }, "a3eba2113e37b749b908101bdb7b856a44f2853641830c0f939730aca3e30360": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "aee574e56780ea1709a8b56e02d4ffdd9a3a1deaed61e2eb0701f376a4422e42" }, "scheme": "ed25519" }, "a67ca94ed559c97db79999d32b79ca35b5ae1795d2f6be3eafa3bd5816a8f2c4": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "153986a7370e002f377dd68797e7466c421180c1571e233de2f8ab41c8af4f54" }, "scheme": "ed25519" }, "ad7c98dfb3b99024f8b49e33f3d92e66537f0abab78a84f1e4b667dfbf52bf60": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "722dbc861813bb5b568524d62083e875c08e66fed1694d9161d253fa163dd86f" }, "scheme": "ed25519" }, "bed15bf57ba4deb4e09667099d45d119504420983d16fd0927ebfb0c25184e7f": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "722dbc861813bb5b568524d62083e875c08e66fed1694d9161d253fa163dd86f" }, "scheme": "ed25519" }, "e23c19fb64db7146965700b9983df63d2dd4362b1f99d74da2383234da4ab20d": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "3ab34b0c2d4eadccaa0f0cf22ced07b552394063a9de2806993d022360dffc76" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "4c663b6d0b9f2c74a19b6791c1417c8d1916e2d84461be1a8148e4386c89582d", "a67ca94ed559c97db79999d32b79ca35b5ae1795d2f6be3eafa3bd5816a8f2c4" ], "threshold": 1 }, "snapshot": { "keyids": [ "bed15bf57ba4deb4e09667099d45d119504420983d16fd0927ebfb0c25184e7f", "ad7c98dfb3b99024f8b49e33f3d92e66537f0abab78a84f1e4b667dfbf52bf60" ], "threshold": 1 }, "targets": { "keyids": [ "a3eba2113e37b749b908101bdb7b856a44f2853641830c0f939730aca3e30360", "0efcc6a8d07a1cb5955fb698b8ea57e903b6924854f5a025c90f16c9a52b2700" ], "threshold": 1 }, "timestamp": { "keyids": [ "79b5760e4c96b6becc12bec4260c9c1d533b9b70628ade2b229ef02b772b10b0", "e23c19fb64db7146965700b9983df63d2dd4362b1f99d74da2383234da4ab20d" ], "threshold": 1 } }, "spec_version": "1.0", "version": 5 }, "signatures": [ { "keyid": "4c663b6d0b9f2c74a19b6791c1417c8d1916e2d84461be1a8148e4386c89582d", "method": "ed25519", "sig": "1d3e90aac8b4fad8846d3ae59ed9069ba335310bd14259a6ca6a905499a9b166761c3c737cbef6d231f84b78575d2cb543caba350a1fcaa104589c86cf2e890c" }, { "keyid": "a67ca94ed559c97db79999d32b79ca35b5ae1795d2f6be3eafa3bd5816a8f2c4", "method": "ed25519", "sig": "1d3e90aac8b4fad8846d3ae59ed9069ba335310bd14259a6ca6a905499a9b166761c3c737cbef6d231f84b78575d2cb543caba350a1fcaa104589c86cf2e890c" } ] }client/testdata/go-tuf-transition-M3/consistent-snapshot-true/4/repository/snapshot.json000066400000000000000000000021461453140004500321310ustar00rootroot00000000000000{ "signed": { "_type": "snapshot", "expires": "2100-01-01T00:00:00Z", "meta": { "root.json": { "hashes": { "sha512": "8aae80ec8056a31ca28304ed0b0b35f0dacb11c5d6684cc7200086ff237fec23dc1e3fc2b43afb968d780c8053bd4081f4ae7ca71a066894042b1d24983fc0fd" }, "length": 3831, "version": 5 }, "targets.json": { "hashes": { "sha512": "c86fd75fe946b88488ece0fa399857a75f3cc80bd85bc71f3fcc030ad6201c559370cbc67a8a547f1964355911fc0ef8000dd8e9f0ff84a3cc8e45cbd42ec7db" }, "length": 1670, "version": 5 } }, "spec_version": "1.0", "version": 5 }, "signatures": [ { "keyid": "bed15bf57ba4deb4e09667099d45d119504420983d16fd0927ebfb0c25184e7f", "method": "ed25519", "sig": "1d473b59dec8a119fb8bc1e5b33c3b0896f62598d0b560cc7a98f501bdc9436fb2399219f8d0301081fe9db22f6734bd1b865a3b9040c3a5357e67d0dc89880f" }, { "keyid": "ad7c98dfb3b99024f8b49e33f3d92e66537f0abab78a84f1e4b667dfbf52bf60", "method": "ed25519", "sig": "1d473b59dec8a119fb8bc1e5b33c3b0896f62598d0b560cc7a98f501bdc9436fb2399219f8d0301081fe9db22f6734bd1b865a3b9040c3a5357e67d0dc89880f" } ] }client/testdata/go-tuf-transition-M3/consistent-snapshot-true/4/repository/targets.json000066400000000000000000000032061453140004500317410ustar00rootroot00000000000000{ "signed": { "_type": "targets", "expires": "2100-01-01T00:00:00Z", "spec_version": "1.0", "targets": { "0": { "hashes": { "sha512": "31bca02094eb78126a517b206a88c73cfa9ec6f704c7030d18212cace820f025f00bf0ea68dbf3f3a5436ca63b53bf7bf80ad8d5de7d8359d0b7fed9dbc3ab99" }, "length": 1 }, "1": { "hashes": { "sha512": "4dff4ea340f0a823f15d3f4f01ab62eae0e5da579ccb851f8db9dfe84c58b2b37b89903a740e1ee172da793a6e79d560e5f7f9bd058a12a280433ed6fa46510a" }, "length": 1 }, "2": { "hashes": { "sha512": "40b244112641dd78dd4f93b6c9190dd46e0099194d5a44257b7efad6ef9ff4683da1eda0244448cb343aa688f5d3efd7314dafe580ac0bcbf115aeca9e8dc114" }, "length": 1 }, "3": { "hashes": { "sha512": "3bafbf08882a2d10133093a1b8433f50563b93c14acd05b79028eb1d12799027241450980651994501423a66c276ae26c43b739bc65c4e16b10c3af6c202aebb" }, "length": 1 }, "4": { "hashes": { "sha512": "a321d8b405e3ef2604959847b36d171eebebc4a8941dc70a4784935a4fca5d5813de84dfa049f06549aa61b20848c1633ce81b675286ea8fb53db240d831c568" }, "length": 1 } }, "version": 5 }, "signatures": [ { "keyid": "a3eba2113e37b749b908101bdb7b856a44f2853641830c0f939730aca3e30360", "method": "ed25519", "sig": "68f2346cdbe045e8558b2ccd86be66e15466955167557c704b51d7163838f670c53ab9247c16a4ed0cd4ecc981a7e2a04a350b01548f97654499d6f9c17c4202" }, { "keyid": "0efcc6a8d07a1cb5955fb698b8ea57e903b6924854f5a025c90f16c9a52b2700", "method": "ed25519", "sig": "68f2346cdbe045e8558b2ccd86be66e15466955167557c704b51d7163838f670c53ab9247c16a4ed0cd4ecc981a7e2a04a350b01548f97654499d6f9c17c4202" } ] }client/testdata/go-tuf-transition-M3/consistent-snapshot-true/4/repository/targets/000077500000000000000000000000001453140004500310455ustar00rootroot00000000000000client/testdata/go-tuf-transition-M3/consistent-snapshot-true/4/repository/targets/0.0000077700000000000000000000000001453140004500363732../../../3/repository/targets/0.0ustar00rootroot00000000000000client/testdata/go-tuf-transition-M3/consistent-snapshot-true/4/repository/targets/0.1000077700000000000000000000000001453140004500363752../../../3/repository/targets/0.1ustar00rootroot00000000000000client/testdata/go-tuf-transition-M3/consistent-snapshot-true/4/repository/targets/0.2000077700000000000000000000000001453140004500363772../../../3/repository/targets/0.2ustar00rootroot00000000000000client/testdata/go-tuf-transition-M3/consistent-snapshot-true/4/repository/targets/0.3000077700000000000000000000000001453140004500364012../../../3/repository/targets/0.3ustar00rootroot00000000000000client/testdata/go-tuf-transition-M3/consistent-snapshot-true/4/repository/targets/0.4000066400000000000000000000000011453140004500312600ustar00rootroot0000000000000048bca78fbca6323e517f27b36ae635780adcf1883.paxheader00006660000000000000000000000615145314000450020600xustar00rootroot00000000000000223 path=client/testdata/go-tuf-transition-M3/consistent-snapshot-true/4/repository/targets/31bca02094eb78126a517b206a88c73cfa9ec6f704c7030d18212cace820f025f00bf0ea68dbf3f3a5436ca63b53bf7bf80ad8d5de7d8359d0b7fed9dbc3ab99.0 174 linkpath=../../../3/repository/targets/31bca02094eb78126a517b206a88c73cfa9ec6f704c7030d18212cace820f025f00bf0ea68dbf3f3a5436ca63b53bf7bf80ad8d5de7d8359d0b7fed9dbc3ab99.0 8bca78fbca6323e517f27b36ae635780adcf1883.data000077700000000000000000000000001453140004500275762see 8bca78fbca6323e517f27b36ae635780adcf1883.paxheaderustar00rootroot00000000000000814339fc398f0e36b2d3fb3a9a3d3dc1f588267a.paxheader00006660000000000000000000000615145314000450020523xustar00rootroot00000000000000223 path=client/testdata/go-tuf-transition-M3/consistent-snapshot-true/4/repository/targets/3bafbf08882a2d10133093a1b8433f50563b93c14acd05b79028eb1d12799027241450980651994501423a66c276ae26c43b739bc65c4e16b10c3af6c202aebb.3 174 linkpath=../../../3/repository/targets/3bafbf08882a2d10133093a1b8433f50563b93c14acd05b79028eb1d12799027241450980651994501423a66c276ae26c43b739bc65c4e16b10c3af6c202aebb.3 814339fc398f0e36b2d3fb3a9a3d3dc1f588267a.data000077700000000000000000000000001453140004500274442see 814339fc398f0e36b2d3fb3a9a3d3dc1f588267a.paxheaderustar00rootroot00000000000000dc5c46dccf4ff0841ec5a355bf8e280958fb807a.paxheader00006660000000000000000000000615145314000450020746xustar00rootroot00000000000000223 path=client/testdata/go-tuf-transition-M3/consistent-snapshot-true/4/repository/targets/40b244112641dd78dd4f93b6c9190dd46e0099194d5a44257b7efad6ef9ff4683da1eda0244448cb343aa688f5d3efd7314dafe580ac0bcbf115aeca9e8dc114.2 174 linkpath=../../../3/repository/targets/40b244112641dd78dd4f93b6c9190dd46e0099194d5a44257b7efad6ef9ff4683da1eda0244448cb343aa688f5d3efd7314dafe580ac0bcbf115aeca9e8dc114.2 dc5c46dccf4ff0841ec5a355bf8e280958fb807a.data000077700000000000000000000000001453140004500301122see dc5c46dccf4ff0841ec5a355bf8e280958fb807a.paxheaderustar00rootroot0000000000000016b79678a9a80678a19ab98b3c05e2669b332a31.paxheader00006660000000000000000000000615145314000450020225xustar00rootroot00000000000000223 path=client/testdata/go-tuf-transition-M3/consistent-snapshot-true/4/repository/targets/4dff4ea340f0a823f15d3f4f01ab62eae0e5da579ccb851f8db9dfe84c58b2b37b89903a740e1ee172da793a6e79d560e5f7f9bd058a12a280433ed6fa46510a.1 174 linkpath=../../../3/repository/targets/4dff4ea340f0a823f15d3f4f01ab62eae0e5da579ccb851f8db9dfe84c58b2b37b89903a740e1ee172da793a6e79d560e5f7f9bd058a12a280433ed6fa46510a.1 16b79678a9a80678a19ab98b3c05e2669b332a31.data000077700000000000000000000000001453140004500266502see 16b79678a9a80678a19ab98b3c05e2669b332a31.paxheaderustar00rootroot00000000000000bf0d87ab1b2b0ec1a11a3973d2845b42413d9767.paxheader00006660000000000000000000000337145314000450020411xustar00rootroot00000000000000223 path=client/testdata/go-tuf-transition-M3/consistent-snapshot-true/4/repository/targets/a321d8b405e3ef2604959847b36d171eebebc4a8941dc70a4784935a4fca5d5813de84dfa049f06549aa61b20848c1633ce81b675286ea8fb53db240d831c568.4 bf0d87ab1b2b0ec1a11a3973d2845b42413d9767.data000066400000000000000000000000011453140004500172330ustar00rootroot000000000000004client/testdata/go-tuf-transition-M3/consistent-snapshot-true/4/repository/timestamp.json000066400000000000000000000016021453140004500322710ustar00rootroot00000000000000{ "signed": { "_type": "timestamp", "expires": "2100-01-01T00:00:00Z", "meta": { "snapshot.json": { "hashes": { "sha512": "dce60b87bbc2b98c1e4cc86cc5798d381561600934b0da7d044ed72511dafefc5e4e640a76e59ea96f6c9edf1a002974180e1562b0496127fcb44ca6b08c294c" }, "length": 1126, "version": 5 } }, "spec_version": "1.0", "version": 5 }, "signatures": [ { "keyid": "79b5760e4c96b6becc12bec4260c9c1d533b9b70628ade2b229ef02b772b10b0", "method": "ed25519", "sig": "82aa747d16c493b0b92c32de5832bf447d2f2348970f066598835d11efba303bc9685e3436200a88778d78a50111df81639d206c5e09b491989bec461a98550b" }, { "keyid": "e23c19fb64db7146965700b9983df63d2dd4362b1f99d74da2383234da4ab20d", "method": "ed25519", "sig": "82aa747d16c493b0b92c32de5832bf447d2f2348970f066598835d11efba303bc9685e3436200a88778d78a50111df81639d206c5e09b491989bec461a98550b" } ] }client/testdata/go-tuf-transition-M3/consistent-snapshot-true/5/000077500000000000000000000000001453140004500251565ustar00rootroot00000000000000client/testdata/go-tuf-transition-M3/consistent-snapshot-true/5/repository/000077500000000000000000000000001453140004500273755ustar00rootroot00000000000000client/testdata/go-tuf-transition-M3/consistent-snapshot-true/5/repository/1.root.json000077700000000000000000000000001453140004500364322../../4/repository/1.root.jsonustar00rootroot00000000000000client/testdata/go-tuf-transition-M3/consistent-snapshot-true/5/repository/1.snapshot.json000077700000000000000000000000001453140004500401622../../4/repository/1.snapshot.jsonustar00rootroot00000000000000client/testdata/go-tuf-transition-M3/consistent-snapshot-true/5/repository/1.targets.json000077700000000000000000000000001453140004500376062../../4/repository/1.targets.jsonustar00rootroot00000000000000d1949f9d116e998c764824191122c0ee973122f2.paxheader00006660000000000000000000000620145314000450020070xustar00rootroot00000000000000226 path=client/testdata/go-tuf-transition-M3/consistent-snapshot-true/5/repository/118c2a2b6b9f7bc667dca8404a2671910a22b6fe48e460816a9f6f2be66f7806a789c9dc4880d2c2812c0bc7607caac30cc0a8299183fd7228e1049f6920ce22.targets.json 174 linkpath=../../4/repository/118c2a2b6b9f7bc667dca8404a2671910a22b6fe48e460816a9f6f2be66f7806a789c9dc4880d2c2812c0bc7607caac30cc0a8299183fd7228e1049f6920ce22.targets.json d1949f9d116e998c764824191122c0ee973122f2.data000077700000000000000000000000001453140004500263662see d1949f9d116e998c764824191122c0ee973122f2.paxheaderustar00rootroot000000000000008106e599123a00423fd88917237295c7716d3e59.paxheader00006660000000000000000000000622145314000450017732xustar00rootroot00000000000000227 path=client/testdata/go-tuf-transition-M3/consistent-snapshot-true/5/repository/148c273a895a85127bb254edd19da2190176272446cd0f43220aba2b0f72fe954a2eab52c38daf67b1c3cbe877848d01266d8a1af3e858c8d004682a3393f3a7.snapshot.json 175 linkpath=../../4/repository/148c273a895a85127bb254edd19da2190176272446cd0f43220aba2b0f72fe954a2eab52c38daf67b1c3cbe877848d01266d8a1af3e858c8d004682a3393f3a7.snapshot.json 8106e599123a00423fd88917237295c7716d3e59.data000077700000000000000000000000001453140004500260662see 8106e599123a00423fd88917237295c7716d3e59.paxheaderustar00rootroot000000000000001c73279d40db79bc2c41a348a371d1b5a89f6f5b.paxheader00006660000000000000000000000622145314000450020506xustar00rootroot00000000000000227 path=client/testdata/go-tuf-transition-M3/consistent-snapshot-true/5/repository/15c2c14fb300cecb52c9ef9a88545759028ec5d7e0f028269ba828c2199e3f0e56f963bdcfd0897c51ebb95ee2452666ec7f65bae688b48db1b8aa8de944e432.snapshot.json 175 linkpath=../../4/repository/15c2c14fb300cecb52c9ef9a88545759028ec5d7e0f028269ba828c2199e3f0e56f963bdcfd0897c51ebb95ee2452666ec7f65bae688b48db1b8aa8de944e432.snapshot.json 1c73279d40db79bc2c41a348a371d1b5a89f6f5b.data000077700000000000000000000000001453140004500274162see 1c73279d40db79bc2c41a348a371d1b5a89f6f5b.paxheaderustar00rootroot00000000000000client/testdata/go-tuf-transition-M3/consistent-snapshot-true/5/repository/2.root.json000077700000000000000000000000001453140004500364342../../4/repository/2.root.jsonustar00rootroot00000000000000client/testdata/go-tuf-transition-M3/consistent-snapshot-true/5/repository/2.snapshot.json000077700000000000000000000000001453140004500401642../../4/repository/2.snapshot.jsonustar00rootroot00000000000000client/testdata/go-tuf-transition-M3/consistent-snapshot-true/5/repository/2.targets.json000077700000000000000000000000001453140004500376102../../4/repository/2.targets.jsonustar00rootroot00000000000000237b697b2dc3628b6cd31f1bfd6f28e3b2673810.paxheader00006660000000000000000000000622145314000450020431xustar00rootroot00000000000000227 path=client/testdata/go-tuf-transition-M3/consistent-snapshot-true/5/repository/23170400c30b4bbcd375c88ae22104241e377006e9c40c64ed49aef9ad2bdfa49ba2832ccb9c3776aaee336195de73cda28b5ba65fb468f7a5e60b870cbe26e9.snapshot.json 175 linkpath=../../4/repository/23170400c30b4bbcd375c88ae22104241e377006e9c40c64ed49aef9ad2bdfa49ba2832ccb9c3776aaee336195de73cda28b5ba65fb468f7a5e60b870cbe26e9.snapshot.json 237b697b2dc3628b6cd31f1bfd6f28e3b2673810.data000077700000000000000000000000001453140004500272642see 237b697b2dc3628b6cd31f1bfd6f28e3b2673810.paxheaderustar00rootroot00000000000000client/testdata/go-tuf-transition-M3/consistent-snapshot-true/5/repository/3.root.json000077700000000000000000000000001453140004500364362../../4/repository/3.root.jsonustar00rootroot00000000000000client/testdata/go-tuf-transition-M3/consistent-snapshot-true/5/repository/3.snapshot.json000077700000000000000000000000001453140004500401662../../4/repository/3.snapshot.jsonustar00rootroot00000000000000client/testdata/go-tuf-transition-M3/consistent-snapshot-true/5/repository/3.targets.json000077700000000000000000000000001453140004500376122../../4/repository/3.targets.jsonustar00rootroot00000000000000aad4346e6cd3180976b7ac413ce5ced83f68c1b1.paxheader00006660000000000000000000000622145314000450020645xustar00rootroot00000000000000227 path=client/testdata/go-tuf-transition-M3/consistent-snapshot-true/5/repository/33b282c1970996734deff944f2862f84b196f0b2b67dfa7383f75f95ef3e8673602aa411e05572075729ead6caa35df6720ce5723fd67c63d4aaa81dd966c5a4.snapshot.json 175 linkpath=../../4/repository/33b282c1970996734deff944f2862f84b196f0b2b67dfa7383f75f95ef3e8673602aa411e05572075729ead6caa35df6720ce5723fd67c63d4aaa81dd966c5a4.snapshot.json aad4346e6cd3180976b7ac413ce5ced83f68c1b1.data000077700000000000000000000000001453140004500277142see aad4346e6cd3180976b7ac413ce5ced83f68c1b1.paxheaderustar00rootroot00000000000000client/testdata/go-tuf-transition-M3/consistent-snapshot-true/5/repository/4.root.json000077700000000000000000000000001453140004500364402../../4/repository/4.root.jsonustar00rootroot00000000000000client/testdata/go-tuf-transition-M3/consistent-snapshot-true/5/repository/4.snapshot.json000077700000000000000000000000001453140004500401702../../4/repository/4.snapshot.jsonustar00rootroot00000000000000client/testdata/go-tuf-transition-M3/consistent-snapshot-true/5/repository/4.targets.json000077700000000000000000000000001453140004500376142../../4/repository/4.targets.jsonustar00rootroot00000000000000client/testdata/go-tuf-transition-M3/consistent-snapshot-true/5/repository/5.root.json000077700000000000000000000000001453140004500364422../../4/repository/5.root.jsonustar00rootroot00000000000000client/testdata/go-tuf-transition-M3/consistent-snapshot-true/5/repository/5.snapshot.json000077700000000000000000000000001453140004500401722../../4/repository/5.snapshot.jsonustar00rootroot00000000000000client/testdata/go-tuf-transition-M3/consistent-snapshot-true/5/repository/5.targets.json000077700000000000000000000000001453140004500376162../../4/repository/5.targets.jsonustar00rootroot00000000000000102fb8f34d70ae1898502501e894e7b8597b452b.paxheader00006660000000000000000000000612145314000450020221xustar00rootroot00000000000000223 path=client/testdata/go-tuf-transition-M3/consistent-snapshot-true/5/repository/590c7d2df37495eae436e25eea548eb48294ef63aaeebe51b1bc1056c149fd54710c67d231c19c14708824aa7095e0028b6691fcf21c1edfcc7a88a48d4b7b94.root.json 171 linkpath=../../4/repository/590c7d2df37495eae436e25eea548eb48294ef63aaeebe51b1bc1056c149fd54710c67d231c19c14708824aa7095e0028b6691fcf21c1edfcc7a88a48d4b7b94.root.json 102fb8f34d70ae1898502501e894e7b8597b452b.data000077700000000000000000000000001453140004500266462see 102fb8f34d70ae1898502501e894e7b8597b452b.paxheaderustar00rootroot00000000000000client/testdata/go-tuf-transition-M3/consistent-snapshot-true/5/repository/6.snapshot.json000066400000000000000000000021461453140004500322760ustar00rootroot00000000000000{ "signed": { "_type": "snapshot", "expires": "2100-01-01T00:00:00Z", "meta": { "root.json": { "hashes": { "sha512": "8aae80ec8056a31ca28304ed0b0b35f0dacb11c5d6684cc7200086ff237fec23dc1e3fc2b43afb968d780c8053bd4081f4ae7ca71a066894042b1d24983fc0fd" }, "length": 3831, "version": 5 }, "targets.json": { "hashes": { "sha512": "8ec9b98766edfe6acc23bb700183532a990b966ceb7b62784f6c80d4b1bfe5661df3cc2765b57bd0e78eb4b5c2b136f5ab7a365665c6e918d4137b83cb7e2262" }, "length": 1871, "version": 6 } }, "spec_version": "1.0", "version": 6 }, "signatures": [ { "keyid": "bed15bf57ba4deb4e09667099d45d119504420983d16fd0927ebfb0c25184e7f", "method": "ed25519", "sig": "61f3a52657285ee76cac838dcf7bd605c8b895dadd7877f5ef3aaa8b22ec0e952fa44c9d9145d5740e56568d5c772c4ca46f96458c813d24c61596cfddff350b" }, { "keyid": "ad7c98dfb3b99024f8b49e33f3d92e66537f0abab78a84f1e4b667dfbf52bf60", "method": "ed25519", "sig": "61f3a52657285ee76cac838dcf7bd605c8b895dadd7877f5ef3aaa8b22ec0e952fa44c9d9145d5740e56568d5c772c4ca46f96458c813d24c61596cfddff350b" } ] }client/testdata/go-tuf-transition-M3/consistent-snapshot-true/5/repository/6.targets.json000066400000000000000000000035171453140004500321130ustar00rootroot00000000000000{ "signed": { "_type": "targets", "expires": "2100-01-01T00:00:00Z", "spec_version": "1.0", "targets": { "0": { "hashes": { "sha512": "31bca02094eb78126a517b206a88c73cfa9ec6f704c7030d18212cace820f025f00bf0ea68dbf3f3a5436ca63b53bf7bf80ad8d5de7d8359d0b7fed9dbc3ab99" }, "length": 1 }, "1": { "hashes": { "sha512": "4dff4ea340f0a823f15d3f4f01ab62eae0e5da579ccb851f8db9dfe84c58b2b37b89903a740e1ee172da793a6e79d560e5f7f9bd058a12a280433ed6fa46510a" }, "length": 1 }, "2": { "hashes": { "sha512": "40b244112641dd78dd4f93b6c9190dd46e0099194d5a44257b7efad6ef9ff4683da1eda0244448cb343aa688f5d3efd7314dafe580ac0bcbf115aeca9e8dc114" }, "length": 1 }, "3": { "hashes": { "sha512": "3bafbf08882a2d10133093a1b8433f50563b93c14acd05b79028eb1d12799027241450980651994501423a66c276ae26c43b739bc65c4e16b10c3af6c202aebb" }, "length": 1 }, "4": { "hashes": { "sha512": "a321d8b405e3ef2604959847b36d171eebebc4a8941dc70a4784935a4fca5d5813de84dfa049f06549aa61b20848c1633ce81b675286ea8fb53db240d831c568" }, "length": 1 }, "5": { "hashes": { "sha512": "06df05371981a237d0ed11472fae7c94c9ac0eff1d05413516710d17b10a4fb6f4517bda4a695f02d0a73dd4db543b4653df28f5d09dab86f92ffb9b86d01e25" }, "length": 1 } }, "version": 6 }, "signatures": [ { "keyid": "a3eba2113e37b749b908101bdb7b856a44f2853641830c0f939730aca3e30360", "method": "ed25519", "sig": "1e80ae84c4badf194e2fd7225c120999d8f628598fa0e994a2ff7cac705ec2f14601a64ba5370fc668f3fb114975dd81c554400d757f41762c4e12eb4db35d02" }, { "keyid": "0efcc6a8d07a1cb5955fb698b8ea57e903b6924854f5a025c90f16c9a52b2700", "method": "ed25519", "sig": "1e80ae84c4badf194e2fd7225c120999d8f628598fa0e994a2ff7cac705ec2f14601a64ba5370fc668f3fb114975dd81c554400d757f41762c4e12eb4db35d02" } ] }15ab63b9d95fa7a3edcad03b8c0e62904804c64a.paxheader00006660000000000000000000000343145314000450020634xustar00rootroot00000000000000227 path=client/testdata/go-tuf-transition-M3/consistent-snapshot-true/5/repository/63c16cc2225e77b7c94ec3b143271e02d97a1bfba828e11820392b9108412ef22f09732694673331f386b6f8a281103e20d07c21db78f487e1b046d9968173c8.snapshot.json 15ab63b9d95fa7a3edcad03b8c0e62904804c64a.data000066400000000000000000000021461453140004500174750ustar00rootroot00000000000000{ "signed": { "_type": "snapshot", "expires": "2100-01-01T00:00:00Z", "meta": { "root.json": { "hashes": { "sha512": "8aae80ec8056a31ca28304ed0b0b35f0dacb11c5d6684cc7200086ff237fec23dc1e3fc2b43afb968d780c8053bd4081f4ae7ca71a066894042b1d24983fc0fd" }, "length": 3831, "version": 5 }, "targets.json": { "hashes": { "sha512": "8ec9b98766edfe6acc23bb700183532a990b966ceb7b62784f6c80d4b1bfe5661df3cc2765b57bd0e78eb4b5c2b136f5ab7a365665c6e918d4137b83cb7e2262" }, "length": 1871, "version": 6 } }, "spec_version": "1.0", "version": 6 }, "signatures": [ { "keyid": "bed15bf57ba4deb4e09667099d45d119504420983d16fd0927ebfb0c25184e7f", "method": "ed25519", "sig": "61f3a52657285ee76cac838dcf7bd605c8b895dadd7877f5ef3aaa8b22ec0e952fa44c9d9145d5740e56568d5c772c4ca46f96458c813d24c61596cfddff350b" }, { "keyid": "ad7c98dfb3b99024f8b49e33f3d92e66537f0abab78a84f1e4b667dfbf52bf60", "method": "ed25519", "sig": "61f3a52657285ee76cac838dcf7bd605c8b895dadd7877f5ef3aaa8b22ec0e952fa44c9d9145d5740e56568d5c772c4ca46f96458c813d24c61596cfddff350b" } ] }18eed32f922c78c6301babb0a01ac4d6cec521f8.paxheader00006660000000000000000000000620145314000450020676xustar00rootroot00000000000000226 path=client/testdata/go-tuf-transition-M3/consistent-snapshot-true/5/repository/6ecff211b4df20d84e5a99a1145b7f96752efe880147439a3a8c2ecc080762f84b5b784da1b41d2ccb1492d112c521b4b82973589285dfbcfbb6c423c559ff4e.targets.json 174 linkpath=../../4/repository/6ecff211b4df20d84e5a99a1145b7f96752efe880147439a3a8c2ecc080762f84b5b784da1b41d2ccb1492d112c521b4b82973589285dfbcfbb6c423c559ff4e.targets.json 18eed32f922c78c6301babb0a01ac4d6cec521f8.data000077700000000000000000000000001453140004500300022see 18eed32f922c78c6301babb0a01ac4d6cec521f8.paxheaderustar00rootroot000000000000009bad4bded5416dca19d5fcefbbdc548cd03001eb.paxheader00006660000000000000000000000612145314000450021265xustar00rootroot00000000000000223 path=client/testdata/go-tuf-transition-M3/consistent-snapshot-true/5/repository/765d0de07adc4de8aa6060a9c579c70938f0a6e998d76ad75363945fdb998b8019d4d42a00642141ac8a86346098dfb40bc7be32d684077be5aae06495f57cfa.root.json 171 linkpath=../../4/repository/765d0de07adc4de8aa6060a9c579c70938f0a6e998d76ad75363945fdb998b8019d4d42a00642141ac8a86346098dfb40bc7be32d684077be5aae06495f57cfa.root.json 9bad4bded5416dca19d5fcefbbdc548cd03001eb.data000077700000000000000000000000001453140004500307562see 9bad4bded5416dca19d5fcefbbdc548cd03001eb.paxheaderustar00rootroot00000000000000eed61239d07a3d4bc5491544f46c45cc86c9e254.paxheader00006660000000000000000000000620145314000450020437xustar00rootroot00000000000000226 path=client/testdata/go-tuf-transition-M3/consistent-snapshot-true/5/repository/7c7a5e381e1e8c3f10bc4ab1c1d33f6460f741a5c0bbeb8be4f206de58e9ce67964bef7cef0738d22d5c55238d2062a2a9a72c99f6df0c57a2bece6435a3e461.targets.json 174 linkpath=../../4/repository/7c7a5e381e1e8c3f10bc4ab1c1d33f6460f741a5c0bbeb8be4f206de58e9ce67964bef7cef0738d22d5c55238d2062a2a9a72c99f6df0c57a2bece6435a3e461.targets.json eed61239d07a3d4bc5491544f46c45cc86c9e254.data000077700000000000000000000000001453140004500273042see eed61239d07a3d4bc5491544f46c45cc86c9e254.paxheaderustar00rootroot000000000000009e5a79b028c7c9e617fcc520dd98009111b56965.paxheader00006660000000000000000000000612145314000450020307xustar00rootroot00000000000000223 path=client/testdata/go-tuf-transition-M3/consistent-snapshot-true/5/repository/8aae80ec8056a31ca28304ed0b0b35f0dacb11c5d6684cc7200086ff237fec23dc1e3fc2b43afb968d780c8053bd4081f4ae7ca71a066894042b1d24983fc0fd.root.json 171 linkpath=../../4/repository/8aae80ec8056a31ca28304ed0b0b35f0dacb11c5d6684cc7200086ff237fec23dc1e3fc2b43afb968d780c8053bd4081f4ae7ca71a066894042b1d24983fc0fd.root.json 9e5a79b028c7c9e617fcc520dd98009111b56965.data000077700000000000000000000000001453140004500270222see 9e5a79b028c7c9e617fcc520dd98009111b56965.paxheaderustar00rootroot000000000000003f07d3d12cddb97d9d7883c98501b547e6a3e9f6.paxheader00006660000000000000000000000342145314000450020540xustar00rootroot00000000000000226 path=client/testdata/go-tuf-transition-M3/consistent-snapshot-true/5/repository/8ec9b98766edfe6acc23bb700183532a990b966ceb7b62784f6c80d4b1bfe5661df3cc2765b57bd0e78eb4b5c2b136f5ab7a365665c6e918d4137b83cb7e2262.targets.json 3f07d3d12cddb97d9d7883c98501b547e6a3e9f6.data000066400000000000000000000035171453140004500174050ustar00rootroot00000000000000{ "signed": { "_type": "targets", "expires": "2100-01-01T00:00:00Z", "spec_version": "1.0", "targets": { "0": { "hashes": { "sha512": "31bca02094eb78126a517b206a88c73cfa9ec6f704c7030d18212cace820f025f00bf0ea68dbf3f3a5436ca63b53bf7bf80ad8d5de7d8359d0b7fed9dbc3ab99" }, "length": 1 }, "1": { "hashes": { "sha512": "4dff4ea340f0a823f15d3f4f01ab62eae0e5da579ccb851f8db9dfe84c58b2b37b89903a740e1ee172da793a6e79d560e5f7f9bd058a12a280433ed6fa46510a" }, "length": 1 }, "2": { "hashes": { "sha512": "40b244112641dd78dd4f93b6c9190dd46e0099194d5a44257b7efad6ef9ff4683da1eda0244448cb343aa688f5d3efd7314dafe580ac0bcbf115aeca9e8dc114" }, "length": 1 }, "3": { "hashes": { "sha512": "3bafbf08882a2d10133093a1b8433f50563b93c14acd05b79028eb1d12799027241450980651994501423a66c276ae26c43b739bc65c4e16b10c3af6c202aebb" }, "length": 1 }, "4": { "hashes": { "sha512": "a321d8b405e3ef2604959847b36d171eebebc4a8941dc70a4784935a4fca5d5813de84dfa049f06549aa61b20848c1633ce81b675286ea8fb53db240d831c568" }, "length": 1 }, "5": { "hashes": { "sha512": "06df05371981a237d0ed11472fae7c94c9ac0eff1d05413516710d17b10a4fb6f4517bda4a695f02d0a73dd4db543b4653df28f5d09dab86f92ffb9b86d01e25" }, "length": 1 } }, "version": 6 }, "signatures": [ { "keyid": "a3eba2113e37b749b908101bdb7b856a44f2853641830c0f939730aca3e30360", "method": "ed25519", "sig": "1e80ae84c4badf194e2fd7225c120999d8f628598fa0e994a2ff7cac705ec2f14601a64ba5370fc668f3fb114975dd81c554400d757f41762c4e12eb4db35d02" }, { "keyid": "0efcc6a8d07a1cb5955fb698b8ea57e903b6924854f5a025c90f16c9a52b2700", "method": "ed25519", "sig": "1e80ae84c4badf194e2fd7225c120999d8f628598fa0e994a2ff7cac705ec2f14601a64ba5370fc668f3fb114975dd81c554400d757f41762c4e12eb4db35d02" } ] }557a1575c144a083336cac66dd688a6aaeb8001b.paxheader00006660000000000000000000000612145314000450020411xustar00rootroot00000000000000223 path=client/testdata/go-tuf-transition-M3/consistent-snapshot-true/5/repository/93b38df5b9cb993dd7e2e16e9b8dd07386b35936f21c36b7527e1587052dce86f64b5eb5669fffe86b4aae4c581a2bbba6e49d780d8687dd6c304fae9b6fe098.root.json 171 linkpath=../../4/repository/93b38df5b9cb993dd7e2e16e9b8dd07386b35936f21c36b7527e1587052dce86f64b5eb5669fffe86b4aae4c581a2bbba6e49d780d8687dd6c304fae9b6fe098.root.json 557a1575c144a083336cac66dd688a6aaeb8001b.data000077700000000000000000000000001453140004500272262see 557a1575c144a083336cac66dd688a6aaeb8001b.paxheaderustar00rootroot0000000000000060975e48c2f419eede16c3983599b4360ca2c02a.paxheader00006660000000000000000000000620145314000450020357xustar00rootroot00000000000000226 path=client/testdata/go-tuf-transition-M3/consistent-snapshot-true/5/repository/bdcbdfe0a1ecaaf9c0c5dc9728bc2eebb1c931b17e57676bd251f8b05640826dcf923ed854c235247329e7068c0d01ad6920b4454a976feb0c9f29b64e338ee4.targets.json 174 linkpath=../../4/repository/bdcbdfe0a1ecaaf9c0c5dc9728bc2eebb1c931b17e57676bd251f8b05640826dcf923ed854c235247329e7068c0d01ad6920b4454a976feb0c9f29b64e338ee4.targets.json 60975e48c2f419eede16c3983599b4360ca2c02a.data000077700000000000000000000000001453140004500271442see 60975e48c2f419eede16c3983599b4360ca2c02a.paxheaderustar00rootroot00000000000000abbc6bdd87416ea2b9651c7c274c257165e64b64.paxheader00006660000000000000000000000612145314000450020510xustar00rootroot00000000000000223 path=client/testdata/go-tuf-transition-M3/consistent-snapshot-true/5/repository/bf4f7f4a062fd3780055d98572619db84d6d6c9b9b647bf6bca1190e984963ffb86189fb455110f4c13956ce9cbe72d95d03c5e6d72295414ac6bbcc3d1957c3.root.json 171 linkpath=../../4/repository/bf4f7f4a062fd3780055d98572619db84d6d6c9b9b647bf6bca1190e984963ffb86189fb455110f4c13956ce9cbe72d95d03c5e6d72295414ac6bbcc3d1957c3.root.json abbc6bdd87416ea2b9651c7c274c257165e64b64.data000077700000000000000000000000001453140004500274242see abbc6bdd87416ea2b9651c7c274c257165e64b64.paxheaderustar00rootroot00000000000000b786bfab31dc8bf95e71b98e1f1ddb09372f30a5.paxheader00006660000000000000000000000620145314000450020732xustar00rootroot00000000000000226 path=client/testdata/go-tuf-transition-M3/consistent-snapshot-true/5/repository/c86fd75fe946b88488ece0fa399857a75f3cc80bd85bc71f3fcc030ad6201c559370cbc67a8a547f1964355911fc0ef8000dd8e9f0ff84a3cc8e45cbd42ec7db.targets.json 174 linkpath=../../4/repository/c86fd75fe946b88488ece0fa399857a75f3cc80bd85bc71f3fcc030ad6201c559370cbc67a8a547f1964355911fc0ef8000dd8e9f0ff84a3cc8e45cbd42ec7db.targets.json b786bfab31dc8bf95e71b98e1f1ddb09372f30a5.data000077700000000000000000000000001453140004500300722see b786bfab31dc8bf95e71b98e1f1ddb09372f30a5.paxheaderustar00rootroot00000000000000ef1e4439a9db448d414de17e80cbe518674f8fbe.paxheader00006660000000000000000000000622145314000450020672xustar00rootroot00000000000000227 path=client/testdata/go-tuf-transition-M3/consistent-snapshot-true/5/repository/dce60b87bbc2b98c1e4cc86cc5798d381561600934b0da7d044ed72511dafefc5e4e640a76e59ea96f6c9edf1a002974180e1562b0496127fcb44ca6b08c294c.snapshot.json 175 linkpath=../../4/repository/dce60b87bbc2b98c1e4cc86cc5798d381561600934b0da7d044ed72511dafefc5e4e640a76e59ea96f6c9edf1a002974180e1562b0496127fcb44ca6b08c294c.snapshot.json ef1e4439a9db448d414de17e80cbe518674f8fbe.data000077700000000000000000000000001453140004500277662see ef1e4439a9db448d414de17e80cbe518674f8fbe.paxheaderustar00rootroot00000000000000client/testdata/go-tuf-transition-M3/consistent-snapshot-true/5/repository/root.json000077700000000000000000000000001453140004500361342../../4/repository/root.jsonustar00rootroot00000000000000client/testdata/go-tuf-transition-M3/consistent-snapshot-true/5/repository/snapshot.json000066400000000000000000000021461453140004500321320ustar00rootroot00000000000000{ "signed": { "_type": "snapshot", "expires": "2100-01-01T00:00:00Z", "meta": { "root.json": { "hashes": { "sha512": "8aae80ec8056a31ca28304ed0b0b35f0dacb11c5d6684cc7200086ff237fec23dc1e3fc2b43afb968d780c8053bd4081f4ae7ca71a066894042b1d24983fc0fd" }, "length": 3831, "version": 5 }, "targets.json": { "hashes": { "sha512": "8ec9b98766edfe6acc23bb700183532a990b966ceb7b62784f6c80d4b1bfe5661df3cc2765b57bd0e78eb4b5c2b136f5ab7a365665c6e918d4137b83cb7e2262" }, "length": 1871, "version": 6 } }, "spec_version": "1.0", "version": 6 }, "signatures": [ { "keyid": "bed15bf57ba4deb4e09667099d45d119504420983d16fd0927ebfb0c25184e7f", "method": "ed25519", "sig": "61f3a52657285ee76cac838dcf7bd605c8b895dadd7877f5ef3aaa8b22ec0e952fa44c9d9145d5740e56568d5c772c4ca46f96458c813d24c61596cfddff350b" }, { "keyid": "ad7c98dfb3b99024f8b49e33f3d92e66537f0abab78a84f1e4b667dfbf52bf60", "method": "ed25519", "sig": "61f3a52657285ee76cac838dcf7bd605c8b895dadd7877f5ef3aaa8b22ec0e952fa44c9d9145d5740e56568d5c772c4ca46f96458c813d24c61596cfddff350b" } ] }client/testdata/go-tuf-transition-M3/consistent-snapshot-true/5/repository/targets.json000066400000000000000000000035171453140004500317470ustar00rootroot00000000000000{ "signed": { "_type": "targets", "expires": "2100-01-01T00:00:00Z", "spec_version": "1.0", "targets": { "0": { "hashes": { "sha512": "31bca02094eb78126a517b206a88c73cfa9ec6f704c7030d18212cace820f025f00bf0ea68dbf3f3a5436ca63b53bf7bf80ad8d5de7d8359d0b7fed9dbc3ab99" }, "length": 1 }, "1": { "hashes": { "sha512": "4dff4ea340f0a823f15d3f4f01ab62eae0e5da579ccb851f8db9dfe84c58b2b37b89903a740e1ee172da793a6e79d560e5f7f9bd058a12a280433ed6fa46510a" }, "length": 1 }, "2": { "hashes": { "sha512": "40b244112641dd78dd4f93b6c9190dd46e0099194d5a44257b7efad6ef9ff4683da1eda0244448cb343aa688f5d3efd7314dafe580ac0bcbf115aeca9e8dc114" }, "length": 1 }, "3": { "hashes": { "sha512": "3bafbf08882a2d10133093a1b8433f50563b93c14acd05b79028eb1d12799027241450980651994501423a66c276ae26c43b739bc65c4e16b10c3af6c202aebb" }, "length": 1 }, "4": { "hashes": { "sha512": "a321d8b405e3ef2604959847b36d171eebebc4a8941dc70a4784935a4fca5d5813de84dfa049f06549aa61b20848c1633ce81b675286ea8fb53db240d831c568" }, "length": 1 }, "5": { "hashes": { "sha512": "06df05371981a237d0ed11472fae7c94c9ac0eff1d05413516710d17b10a4fb6f4517bda4a695f02d0a73dd4db543b4653df28f5d09dab86f92ffb9b86d01e25" }, "length": 1 } }, "version": 6 }, "signatures": [ { "keyid": "a3eba2113e37b749b908101bdb7b856a44f2853641830c0f939730aca3e30360", "method": "ed25519", "sig": "1e80ae84c4badf194e2fd7225c120999d8f628598fa0e994a2ff7cac705ec2f14601a64ba5370fc668f3fb114975dd81c554400d757f41762c4e12eb4db35d02" }, { "keyid": "0efcc6a8d07a1cb5955fb698b8ea57e903b6924854f5a025c90f16c9a52b2700", "method": "ed25519", "sig": "1e80ae84c4badf194e2fd7225c120999d8f628598fa0e994a2ff7cac705ec2f14601a64ba5370fc668f3fb114975dd81c554400d757f41762c4e12eb4db35d02" } ] }client/testdata/go-tuf-transition-M3/consistent-snapshot-true/5/repository/targets/000077500000000000000000000000001453140004500310465ustar00rootroot00000000000000client/testdata/go-tuf-transition-M3/consistent-snapshot-true/5/repository/targets/0.0000077700000000000000000000000001453140004500363752../../../4/repository/targets/0.0ustar00rootroot00000000000000client/testdata/go-tuf-transition-M3/consistent-snapshot-true/5/repository/targets/0.1000077700000000000000000000000001453140004500363772../../../4/repository/targets/0.1ustar00rootroot00000000000000client/testdata/go-tuf-transition-M3/consistent-snapshot-true/5/repository/targets/0.2000077700000000000000000000000001453140004500364012../../../4/repository/targets/0.2ustar00rootroot00000000000000client/testdata/go-tuf-transition-M3/consistent-snapshot-true/5/repository/targets/0.3000077700000000000000000000000001453140004500364032../../../4/repository/targets/0.3ustar00rootroot00000000000000client/testdata/go-tuf-transition-M3/consistent-snapshot-true/5/repository/targets/0.4000077700000000000000000000000001453140004500364052../../../4/repository/targets/0.4ustar00rootroot00000000000000client/testdata/go-tuf-transition-M3/consistent-snapshot-true/5/repository/targets/0.5000066400000000000000000000000011453140004500312620ustar00rootroot0000000000000057813681f5b41c028345ca62a2be376bae70b7f61.paxheader00006660000000000000000000000337145314000450020341xustar00rootroot00000000000000223 path=client/testdata/go-tuf-transition-M3/consistent-snapshot-true/5/repository/targets/06df05371981a237d0ed11472fae7c94c9ac0eff1d05413516710d17b10a4fb6f4517bda4a695f02d0a73dd4db543b4653df28f5d09dab86f92ffb9b86d01e25.5 7813681f5b41c028345ca62a2be376bae70b7f61.data000066400000000000000000000000011453140004500171630ustar00rootroot000000000000005c70b61bd355940045552cd82c1eb815658c6e8ed.paxheader00006660000000000000000000000615145314000450020354xustar00rootroot00000000000000223 path=client/testdata/go-tuf-transition-M3/consistent-snapshot-true/5/repository/targets/31bca02094eb78126a517b206a88c73cfa9ec6f704c7030d18212cace820f025f00bf0ea68dbf3f3a5436ca63b53bf7bf80ad8d5de7d8359d0b7fed9dbc3ab99.0 174 linkpath=../../../4/repository/targets/31bca02094eb78126a517b206a88c73cfa9ec6f704c7030d18212cace820f025f00bf0ea68dbf3f3a5436ca63b53bf7bf80ad8d5de7d8359d0b7fed9dbc3ab99.0 c70b61bd355940045552cd82c1eb815658c6e8ed.data000077700000000000000000000000001453140004500271262see c70b61bd355940045552cd82c1eb815658c6e8ed.paxheaderustar00rootroot000000000000001e66cb1b8592685e3e2c6e7d88917c49507c7462.paxheader00006660000000000000000000000615145314000450020250xustar00rootroot00000000000000223 path=client/testdata/go-tuf-transition-M3/consistent-snapshot-true/5/repository/targets/3bafbf08882a2d10133093a1b8433f50563b93c14acd05b79028eb1d12799027241450980651994501423a66c276ae26c43b739bc65c4e16b10c3af6c202aebb.3 174 linkpath=../../../4/repository/targets/3bafbf08882a2d10133093a1b8433f50563b93c14acd05b79028eb1d12799027241450980651994501423a66c276ae26c43b739bc65c4e16b10c3af6c202aebb.3 1e66cb1b8592685e3e2c6e7d88917c49507c7462.data000077700000000000000000000000001453140004500267162see 1e66cb1b8592685e3e2c6e7d88917c49507c7462.paxheaderustar00rootroot00000000000000a02a23169a412bbdb2d87aec6ef1e6bebaa69a64.paxheader00006660000000000000000000000615145314000450021043xustar00rootroot00000000000000223 path=client/testdata/go-tuf-transition-M3/consistent-snapshot-true/5/repository/targets/40b244112641dd78dd4f93b6c9190dd46e0099194d5a44257b7efad6ef9ff4683da1eda0244448cb343aa688f5d3efd7314dafe580ac0bcbf115aeca9e8dc114.2 174 linkpath=../../../4/repository/targets/40b244112641dd78dd4f93b6c9190dd46e0099194d5a44257b7efad6ef9ff4683da1eda0244448cb343aa688f5d3efd7314dafe580ac0bcbf115aeca9e8dc114.2 a02a23169a412bbdb2d87aec6ef1e6bebaa69a64.data000077700000000000000000000000001453140004500303042see a02a23169a412bbdb2d87aec6ef1e6bebaa69a64.paxheaderustar00rootroot0000000000000074d1328f1d30fbd0dcb6694d3c9c6e7657e23ff6.paxheader00006660000000000000000000000615145314000450020607xustar00rootroot00000000000000223 path=client/testdata/go-tuf-transition-M3/consistent-snapshot-true/5/repository/targets/4dff4ea340f0a823f15d3f4f01ab62eae0e5da579ccb851f8db9dfe84c58b2b37b89903a740e1ee172da793a6e79d560e5f7f9bd058a12a280433ed6fa46510a.1 174 linkpath=../../../4/repository/targets/4dff4ea340f0a823f15d3f4f01ab62eae0e5da579ccb851f8db9dfe84c58b2b37b89903a740e1ee172da793a6e79d560e5f7f9bd058a12a280433ed6fa46510a.1 74d1328f1d30fbd0dcb6694d3c9c6e7657e23ff6.data000077700000000000000000000000001453140004500276142see 74d1328f1d30fbd0dcb6694d3c9c6e7657e23ff6.paxheaderustar00rootroot0000000000000073a65ad27180becb4341ecde3026f6daeb8f69ea.paxheader00006660000000000000000000000615145314000450021004xustar00rootroot00000000000000223 path=client/testdata/go-tuf-transition-M3/consistent-snapshot-true/5/repository/targets/a321d8b405e3ef2604959847b36d171eebebc4a8941dc70a4784935a4fca5d5813de84dfa049f06549aa61b20848c1633ce81b675286ea8fb53db240d831c568.4 174 linkpath=../../../4/repository/targets/a321d8b405e3ef2604959847b36d171eebebc4a8941dc70a4784935a4fca5d5813de84dfa049f06549aa61b20848c1633ce81b675286ea8fb53db240d831c568.4 73a65ad27180becb4341ecde3026f6daeb8f69ea.data000077700000000000000000000000001453140004500302062see 73a65ad27180becb4341ecde3026f6daeb8f69ea.paxheaderustar00rootroot00000000000000client/testdata/go-tuf-transition-M3/consistent-snapshot-true/5/repository/timestamp.json000066400000000000000000000016021453140004500322720ustar00rootroot00000000000000{ "signed": { "_type": "timestamp", "expires": "2100-01-01T00:00:00Z", "meta": { "snapshot.json": { "hashes": { "sha512": "63c16cc2225e77b7c94ec3b143271e02d97a1bfba828e11820392b9108412ef22f09732694673331f386b6f8a281103e20d07c21db78f487e1b046d9968173c8" }, "length": 1126, "version": 6 } }, "spec_version": "1.0", "version": 6 }, "signatures": [ { "keyid": "79b5760e4c96b6becc12bec4260c9c1d533b9b70628ade2b229ef02b772b10b0", "method": "ed25519", "sig": "93de7e13e6ad7b03be3c299169aba2cf1fed7a6bac8b3059ca858e4a709063b6a0237b78614e9101c9beed0d9f470bfcd77644108246688d75cf58b243ea1f0c" }, { "keyid": "e23c19fb64db7146965700b9983df63d2dd4362b1f99d74da2383234da4ab20d", "method": "ed25519", "sig": "93de7e13e6ad7b03be3c299169aba2cf1fed7a6bac8b3059ca858e4a709063b6a0237b78614e9101c9beed0d9f470bfcd77644108246688d75cf58b243ea1f0c" } ] }client/testdata/go-tuf-transition-M3/generate.go000066400000000000000000000077411453140004500221410ustar00rootroot00000000000000package main import ( "encoding/json" "fmt" "log" "os" "os/exec" "path/filepath" "time" tuf "github.com/theupdateframework/go-tuf" "github.com/theupdateframework/go-tuf/data" "github.com/theupdateframework/go-tuf/pkg/keys" ) var expirationDate = time.Date(2100, time.January, 1, 0, 0, 0, 0, time.UTC) type persistedKeys struct { Encrypted bool `json:"encrypted"` Data []*data.PrivateKey `json:"data"` } func assertNoError(err error) { if err != nil { panic(fmt.Sprintf("assertion failed: %s", err)) } } func copyRepo(src string, dst string) { cmd := exec.Command("cp", "-r", src, dst) assertNoError(cmd.Run()) } func newRepo(dir string) *tuf.Repo { repo, err := tuf.NewRepoIndent(tuf.FileSystemStore(dir, nil), "", "\t") assertNoError(err) return repo } func commit(dir string, repo *tuf.Repo) { assertNoError(repo.SnapshotWithExpires(expirationDate)) assertNoError(repo.TimestampWithExpires(expirationDate)) assertNoError(repo.Commit()) // Remove the keys directory to make sure we don't accidentally use a key. assertNoError(os.RemoveAll(filepath.Join(dir, "keys"))) } func addKeys(repo *tuf.Repo, roleKeys map[string][]*data.PrivateKey) { for role, keyList := range roleKeys { for _, key := range keyList { signer, err := keys.GetSigner(key) assertNoError(err) assertNoError(repo.AddPrivateKeyWithExpires(role, signer, expirationDate)) } } } func addTargets(repo *tuf.Repo, dir string, files map[string][]byte) { paths := []string{} for file, data := range files { path := filepath.Join(dir, "staged", "targets", file) assertNoError(os.MkdirAll(filepath.Dir(path), 0755)) assertNoError(os.WriteFile(path, data, 0644)) paths = append(paths, file) } assertNoError(repo.AddTargetsWithExpires(paths, nil, expirationDate)) } func revokeKeys(repo *tuf.Repo, role string, keyList []*data.PrivateKey) { for _, key := range keyList { signer, err := keys.GetSigner(key) assertNoError(err) assertNoError(repo.RevokeKeyWithExpires(role, signer.PublicData().IDs()[0], expirationDate)) } } func generateRepos(dir string, consistentSnapshot bool) { f, err := os.Open("../keys.json") assertNoError(err) var roleKeys map[string][][]*data.PrivateKey assertNoError(json.NewDecoder(f).Decode(&roleKeys)) // Collect all the initial keys we'll use when creating repositories. // We'll modify this to reflect rotated keys. keys := map[string][]*data.PrivateKey{ "root": roleKeys["root"][0], "targets": roleKeys["targets"][0], "snapshot": roleKeys["snapshot"][0], "timestamp": roleKeys["timestamp"][0], } // Create the initial repo. dir0 := filepath.Join(dir, "0") repo0 := newRepo(dir0) repo0.Init(consistentSnapshot) addKeys(repo0, keys) addTargets(repo0, dir0, map[string][]byte{"0": []byte("0")}) commit(dir0, repo0) // Rotate all the keys to make sure that works. oldDir := dir0 i := 1 for _, role := range []string{"root", "targets", "snapshot", "timestamp"} { // Setup the repo. stepName := fmt.Sprintf("%d", i) d := filepath.Join(dir, stepName) copyRepo(oldDir, d) repo := newRepo(d) addKeys(repo, keys) // Actually rotate the keys revokeKeys(repo, role, roleKeys[role][0]) addKeys(repo, map[string][]*data.PrivateKey{ role: roleKeys[role][1], }) keys[role] = roleKeys[role][1] // Add a target to make sure that works, then commit. addTargets(repo, d, map[string][]byte{stepName: []byte(stepName)}) commit(d, repo) i += 1 oldDir = d } // Add another target file to make sure the workflow worked. stepName := fmt.Sprintf("%d", i) d := filepath.Join(dir, stepName) copyRepo(oldDir, d) repo := newRepo(d) addKeys(repo, keys) addTargets(repo, d, map[string][]byte{stepName: []byte(stepName)}) commit(d, repo) } func main() { cwd, err := os.Getwd() assertNoError(err) for _, consistentSnapshot := range []bool{false, true} { name := fmt.Sprintf("consistent-snapshot-%t", consistentSnapshot) log.Printf("generating %s", name) generateRepos(filepath.Join(cwd, name), consistentSnapshot) } } client/testdata/go-tuf-transition-M4/000077500000000000000000000000001453140004500200105ustar00rootroot00000000000000client/testdata/go-tuf-transition-M4/consistent-snapshot-false/000077500000000000000000000000001453140004500251265ustar00rootroot00000000000000client/testdata/go-tuf-transition-M4/consistent-snapshot-false/0/000077500000000000000000000000001453140004500252655ustar00rootroot00000000000000client/testdata/go-tuf-transition-M4/consistent-snapshot-false/0/repository/000077500000000000000000000000001453140004500275045ustar00rootroot00000000000000client/testdata/go-tuf-transition-M4/consistent-snapshot-false/0/repository/1.root.json000066400000000000000000000041061453140004500315220ustar00rootroot00000000000000{ "signatures": [ { "keyid": "160f5ae5e7017bc783bbbe26c5419bbeeeb87f507b140ef474da0517d56549f7", "sig": "4d84952574a5ef31fa9f8d97a3159305b8b99c011b27327e969d88f8f88a5d56ef4a3d03b19134d0f8a1627de8d03b11847ffb7ed0e15c2fad0d8cfd5a57ae0f" } ], "signed": { "_type": "root", "consistent_snapshot": false, "expires": "2100-01-01T00:00:00Z", "keys": { "160f5ae5e7017bc783bbbe26c5419bbeeeb87f507b140ef474da0517d56549f7": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "bca152214dbfd3e7a1b7a7b3e2cc179fb00520fd7212c8a60ba99f14dfc0e1ca" }, "scheme": "ed25519" }, "b1eb1d74c0e65524c85f96f9badf09a4d2ed1259fb427fc689fc2279ebb4d867": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "62f71f99c788f16bcdc8bb252455e3a690350e4ddea5a6aab1f9a3aaabcf369a" }, "scheme": "ed25519" }, "b59406a55fbe2492022f2951dacd01fc7b400b7b41ec4028b8356161a5a71a33": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "8656ad20568cd3534c405e4d9a84b0c6e6163f7f66434df77416502835b9b160" }, "scheme": "ed25519" }, "d792ff8cf3c5d9a8fe0fdfa585b25028fa9f49aa29c62a658140d4b98cc2c917": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "d482fa4805a50870aa1356ace6b764f7ab47ed4dc38f49b1a189afa25f179e94" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "160f5ae5e7017bc783bbbe26c5419bbeeeb87f507b140ef474da0517d56549f7" ], "threshold": 1 }, "snapshot": { "keyids": [ "d792ff8cf3c5d9a8fe0fdfa585b25028fa9f49aa29c62a658140d4b98cc2c917" ], "threshold": 1 }, "targets": { "keyids": [ "b1eb1d74c0e65524c85f96f9badf09a4d2ed1259fb427fc689fc2279ebb4d867" ], "threshold": 1 }, "timestamp": { "keyids": [ "b59406a55fbe2492022f2951dacd01fc7b400b7b41ec4028b8356161a5a71a33" ], "threshold": 1 } }, "spec_version": "1.0", "version": 1 } }client/testdata/go-tuf-transition-M4/consistent-snapshot-false/0/repository/root.json000066400000000000000000000041061453140004500313630ustar00rootroot00000000000000{ "signatures": [ { "keyid": "160f5ae5e7017bc783bbbe26c5419bbeeeb87f507b140ef474da0517d56549f7", "sig": "4d84952574a5ef31fa9f8d97a3159305b8b99c011b27327e969d88f8f88a5d56ef4a3d03b19134d0f8a1627de8d03b11847ffb7ed0e15c2fad0d8cfd5a57ae0f" } ], "signed": { "_type": "root", "consistent_snapshot": false, "expires": "2100-01-01T00:00:00Z", "keys": { "160f5ae5e7017bc783bbbe26c5419bbeeeb87f507b140ef474da0517d56549f7": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "bca152214dbfd3e7a1b7a7b3e2cc179fb00520fd7212c8a60ba99f14dfc0e1ca" }, "scheme": "ed25519" }, "b1eb1d74c0e65524c85f96f9badf09a4d2ed1259fb427fc689fc2279ebb4d867": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "62f71f99c788f16bcdc8bb252455e3a690350e4ddea5a6aab1f9a3aaabcf369a" }, "scheme": "ed25519" }, "b59406a55fbe2492022f2951dacd01fc7b400b7b41ec4028b8356161a5a71a33": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "8656ad20568cd3534c405e4d9a84b0c6e6163f7f66434df77416502835b9b160" }, "scheme": "ed25519" }, "d792ff8cf3c5d9a8fe0fdfa585b25028fa9f49aa29c62a658140d4b98cc2c917": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "d482fa4805a50870aa1356ace6b764f7ab47ed4dc38f49b1a189afa25f179e94" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "160f5ae5e7017bc783bbbe26c5419bbeeeb87f507b140ef474da0517d56549f7" ], "threshold": 1 }, "snapshot": { "keyids": [ "d792ff8cf3c5d9a8fe0fdfa585b25028fa9f49aa29c62a658140d4b98cc2c917" ], "threshold": 1 }, "targets": { "keyids": [ "b1eb1d74c0e65524c85f96f9badf09a4d2ed1259fb427fc689fc2279ebb4d867" ], "threshold": 1 }, "timestamp": { "keyids": [ "b59406a55fbe2492022f2951dacd01fc7b400b7b41ec4028b8356161a5a71a33" ], "threshold": 1 } }, "spec_version": "1.0", "version": 1 } }client/testdata/go-tuf-transition-M4/consistent-snapshot-false/0/repository/snapshot.json000066400000000000000000000015171453140004500322420ustar00rootroot00000000000000{ "signatures": [ { "keyid": "d792ff8cf3c5d9a8fe0fdfa585b25028fa9f49aa29c62a658140d4b98cc2c917", "sig": "0c2eb81db397d04faed82a5b75c4e5980d3fb2dafb13ff6892a7bdc131a6d698fe635ee369a016a4a8e47964a77f56f834cc432853d76feccc70e3fbb9dcc70a" } ], "signed": { "_type": "snapshot", "expires": "2100-01-01T00:00:00Z", "meta": { "root.json": { "hashes": { "sha512": "d2a63252478ef0e4baef238f277261b469dac193d731c618194d37492dcd57eb391563fe065c2df054628dc28ae9896f20670a41b1264507a739ff36dab85d9f" }, "length": 2118, "version": 1 }, "targets.json": { "hashes": { "sha512": "257ae8c4653e9ecd1580d0f95ece3cbd03d67ace62e670c0493cde2afde96670a1620fcdf4a2e81ecbf8a67c7b0af9e03e6f9c5c8195d4b1940f7e0e61cc04c8" }, "length": 588, "version": 1 } }, "spec_version": "1.0", "version": 1 } }client/testdata/go-tuf-transition-M4/consistent-snapshot-false/0/repository/targets.json000066400000000000000000000011141453140004500320450ustar00rootroot00000000000000{ "signatures": [ { "keyid": "b1eb1d74c0e65524c85f96f9badf09a4d2ed1259fb427fc689fc2279ebb4d867", "sig": "4d5c3a5da43f3792d077c1128fa28585982ff2957fae59be02a831fc920d0b91cbeaa99fd6c15066ec4da8bf12f993440a90d1624fd7b0a68070e5d60ed2500f" } ], "signed": { "_type": "targets", "expires": "2100-01-01T00:00:00Z", "spec_version": "1.0", "targets": { "0": { "hashes": { "sha512": "31bca02094eb78126a517b206a88c73cfa9ec6f704c7030d18212cace820f025f00bf0ea68dbf3f3a5436ca63b53bf7bf80ad8d5de7d8359d0b7fed9dbc3ab99" }, "length": 1 } }, "version": 1 } }client/testdata/go-tuf-transition-M4/consistent-snapshot-false/0/repository/targets/000077500000000000000000000000001453140004500311555ustar00rootroot00000000000000client/testdata/go-tuf-transition-M4/consistent-snapshot-false/0/repository/targets/0000066400000000000000000000000011453140004500312260ustar00rootroot000000000000000client/testdata/go-tuf-transition-M4/consistent-snapshot-false/0/repository/timestamp.json000066400000000000000000000011531453140004500324020ustar00rootroot00000000000000{ "signatures": [ { "keyid": "b59406a55fbe2492022f2951dacd01fc7b400b7b41ec4028b8356161a5a71a33", "sig": "cff803896a6af526281ad8ae7e3c3039bd850a4f56afc23e50564b9259719d2dd9e2f7956bf89f04d405a6f2c836db0ae98fa21846921bba39ed43adbf728c0e" } ], "signed": { "_type": "timestamp", "expires": "2100-01-01T00:00:00Z", "meta": { "snapshot.json": { "hashes": { "sha512": "9f96c109f0d6a53fa01567d1577fdbc02a34c4a755cba6cfb2e3dd9f6c87596755b9285317c6640a139abad25dcbac22da79208f37ecffd17c67fb87fc89ce1c" }, "length": 847, "version": 1 } }, "spec_version": "1.0", "version": 1 } }client/testdata/go-tuf-transition-M4/consistent-snapshot-false/1/000077500000000000000000000000001453140004500252665ustar00rootroot00000000000000client/testdata/go-tuf-transition-M4/consistent-snapshot-false/1/repository/000077500000000000000000000000001453140004500275055ustar00rootroot00000000000000client/testdata/go-tuf-transition-M4/consistent-snapshot-false/1/repository/1.root.json000077700000000000000000000000001453140004500365362../../0/repository/1.root.jsonustar00rootroot00000000000000client/testdata/go-tuf-transition-M4/consistent-snapshot-false/1/repository/2.root.json000066400000000000000000000044541453140004500315320ustar00rootroot00000000000000{ "signatures": [ { "keyid": "160f5ae5e7017bc783bbbe26c5419bbeeeb87f507b140ef474da0517d56549f7", "sig": "2c7952346c8f899b15f33048bfc22db078a2ee5df5ae4dfc1c7e4eb303ee5dd99b6957d8bddd39ddddbc2e49b0abd76e27c0b0439984ae36e23db5bafb51d104" }, { "keyid": "4c663b6d0b9f2c74a19b6791c1417c8d1916e2d84461be1a8148e4386c89582d", "sig": "a9ae363c57c79235e0fb646f364a747e88d61a25eef9e92e44f13f6849bb62ee1a91db6ba021cbef330e9a5b3e2131a45b5922bbd1a30596a11973743aedc404" } ], "signed": { "_type": "root", "consistent_snapshot": false, "expires": "2100-01-01T00:00:00Z", "keys": { "4c663b6d0b9f2c74a19b6791c1417c8d1916e2d84461be1a8148e4386c89582d": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "153986a7370e002f377dd68797e7466c421180c1571e233de2f8ab41c8af4f54" }, "scheme": "ed25519" }, "b1eb1d74c0e65524c85f96f9badf09a4d2ed1259fb427fc689fc2279ebb4d867": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "62f71f99c788f16bcdc8bb252455e3a690350e4ddea5a6aab1f9a3aaabcf369a" }, "scheme": "ed25519" }, "b59406a55fbe2492022f2951dacd01fc7b400b7b41ec4028b8356161a5a71a33": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "8656ad20568cd3534c405e4d9a84b0c6e6163f7f66434df77416502835b9b160" }, "scheme": "ed25519" }, "d792ff8cf3c5d9a8fe0fdfa585b25028fa9f49aa29c62a658140d4b98cc2c917": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "d482fa4805a50870aa1356ace6b764f7ab47ed4dc38f49b1a189afa25f179e94" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "4c663b6d0b9f2c74a19b6791c1417c8d1916e2d84461be1a8148e4386c89582d" ], "threshold": 1 }, "snapshot": { "keyids": [ "d792ff8cf3c5d9a8fe0fdfa585b25028fa9f49aa29c62a658140d4b98cc2c917" ], "threshold": 1 }, "targets": { "keyids": [ "b1eb1d74c0e65524c85f96f9badf09a4d2ed1259fb427fc689fc2279ebb4d867" ], "threshold": 1 }, "timestamp": { "keyids": [ "b59406a55fbe2492022f2951dacd01fc7b400b7b41ec4028b8356161a5a71a33" ], "threshold": 1 } }, "spec_version": "1.0", "version": 2 } }client/testdata/go-tuf-transition-M4/consistent-snapshot-false/1/repository/root.json000066400000000000000000000044541453140004500313720ustar00rootroot00000000000000{ "signatures": [ { "keyid": "160f5ae5e7017bc783bbbe26c5419bbeeeb87f507b140ef474da0517d56549f7", "sig": "2c7952346c8f899b15f33048bfc22db078a2ee5df5ae4dfc1c7e4eb303ee5dd99b6957d8bddd39ddddbc2e49b0abd76e27c0b0439984ae36e23db5bafb51d104" }, { "keyid": "4c663b6d0b9f2c74a19b6791c1417c8d1916e2d84461be1a8148e4386c89582d", "sig": "a9ae363c57c79235e0fb646f364a747e88d61a25eef9e92e44f13f6849bb62ee1a91db6ba021cbef330e9a5b3e2131a45b5922bbd1a30596a11973743aedc404" } ], "signed": { "_type": "root", "consistent_snapshot": false, "expires": "2100-01-01T00:00:00Z", "keys": { "4c663b6d0b9f2c74a19b6791c1417c8d1916e2d84461be1a8148e4386c89582d": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "153986a7370e002f377dd68797e7466c421180c1571e233de2f8ab41c8af4f54" }, "scheme": "ed25519" }, "b1eb1d74c0e65524c85f96f9badf09a4d2ed1259fb427fc689fc2279ebb4d867": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "62f71f99c788f16bcdc8bb252455e3a690350e4ddea5a6aab1f9a3aaabcf369a" }, "scheme": "ed25519" }, "b59406a55fbe2492022f2951dacd01fc7b400b7b41ec4028b8356161a5a71a33": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "8656ad20568cd3534c405e4d9a84b0c6e6163f7f66434df77416502835b9b160" }, "scheme": "ed25519" }, "d792ff8cf3c5d9a8fe0fdfa585b25028fa9f49aa29c62a658140d4b98cc2c917": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "d482fa4805a50870aa1356ace6b764f7ab47ed4dc38f49b1a189afa25f179e94" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "4c663b6d0b9f2c74a19b6791c1417c8d1916e2d84461be1a8148e4386c89582d" ], "threshold": 1 }, "snapshot": { "keyids": [ "d792ff8cf3c5d9a8fe0fdfa585b25028fa9f49aa29c62a658140d4b98cc2c917" ], "threshold": 1 }, "targets": { "keyids": [ "b1eb1d74c0e65524c85f96f9badf09a4d2ed1259fb427fc689fc2279ebb4d867" ], "threshold": 1 }, "timestamp": { "keyids": [ "b59406a55fbe2492022f2951dacd01fc7b400b7b41ec4028b8356161a5a71a33" ], "threshold": 1 } }, "spec_version": "1.0", "version": 2 } }client/testdata/go-tuf-transition-M4/consistent-snapshot-false/1/repository/snapshot.json000066400000000000000000000015171453140004500322430ustar00rootroot00000000000000{ "signatures": [ { "keyid": "d792ff8cf3c5d9a8fe0fdfa585b25028fa9f49aa29c62a658140d4b98cc2c917", "sig": "3b170ced5f99155d617d933721eb8b1bc37d53bacd13787495f5b65f8e217898b0432391ddc76ddf350d367a590f39c44ef89350c67119d7c3cf869375da6004" } ], "signed": { "_type": "snapshot", "expires": "2100-01-01T00:00:00Z", "meta": { "root.json": { "hashes": { "sha512": "fac18f6f1804305c960c48700111947a77b6249659a43ebc1caffb701784a16a3967bb640b7ad612235f6b5078b9c9f178b0cb5acaf9d2a49cabd4bd8ec418de" }, "length": 2348, "version": 2 }, "targets.json": { "hashes": { "sha512": "0fa0d9f7f64ffaf2a52bda808851c71ae87c7c47aaec4ce2ba28c19123a0d4394156dce76012a5253c1c02ccdf88843cdb980042eab746e1a93ce2541f89d91c" }, "length": 789, "version": 2 } }, "spec_version": "1.0", "version": 2 } }client/testdata/go-tuf-transition-M4/consistent-snapshot-false/1/repository/targets.json000066400000000000000000000014251453140004500320530ustar00rootroot00000000000000{ "signatures": [ { "keyid": "b1eb1d74c0e65524c85f96f9badf09a4d2ed1259fb427fc689fc2279ebb4d867", "sig": "81bcf5921834a20b8b0946815ad4316f43ffce20b3793e6653dc5fd4b98f1c6318ce2243948574e82414a102717a6f2d731250b3191c54abc8391fd867503e0b" } ], "signed": { "_type": "targets", "expires": "2100-01-01T00:00:00Z", "spec_version": "1.0", "targets": { "0": { "hashes": { "sha512": "31bca02094eb78126a517b206a88c73cfa9ec6f704c7030d18212cace820f025f00bf0ea68dbf3f3a5436ca63b53bf7bf80ad8d5de7d8359d0b7fed9dbc3ab99" }, "length": 1 }, "1": { "hashes": { "sha512": "4dff4ea340f0a823f15d3f4f01ab62eae0e5da579ccb851f8db9dfe84c58b2b37b89903a740e1ee172da793a6e79d560e5f7f9bd058a12a280433ed6fa46510a" }, "length": 1 } }, "version": 2 } }client/testdata/go-tuf-transition-M4/consistent-snapshot-false/1/repository/targets/000077500000000000000000000000001453140004500311565ustar00rootroot00000000000000client/testdata/go-tuf-transition-M4/consistent-snapshot-false/1/repository/targets/0000077700000000000000000000000001453140004500362052../../../0/repository/targets/0ustar00rootroot00000000000000client/testdata/go-tuf-transition-M4/consistent-snapshot-false/1/repository/targets/1000066400000000000000000000000011453140004500312300ustar00rootroot000000000000001client/testdata/go-tuf-transition-M4/consistent-snapshot-false/1/repository/timestamp.json000066400000000000000000000011531453140004500324030ustar00rootroot00000000000000{ "signatures": [ { "keyid": "b59406a55fbe2492022f2951dacd01fc7b400b7b41ec4028b8356161a5a71a33", "sig": "df50c702b51dec901cd5d6f548b4c551ab578aaf8e791d7d3fc85697f291e6102c64e9d758fb4291d09dd28bcfd442cdb7598167821b7b50247b4af3f763780c" } ], "signed": { "_type": "timestamp", "expires": "2100-01-01T00:00:00Z", "meta": { "snapshot.json": { "hashes": { "sha512": "c150afd2864d6b6f0f14e4549c592418abf4b390ca6c88f0a50c4e615f54cc449cd9cf9dfbc227bea900fd3007921fb64ff6fd30bf5cfa2877682af66368a2f6" }, "length": 847, "version": 2 } }, "spec_version": "1.0", "version": 2 } }client/testdata/go-tuf-transition-M4/consistent-snapshot-false/2/000077500000000000000000000000001453140004500252675ustar00rootroot00000000000000client/testdata/go-tuf-transition-M4/consistent-snapshot-false/2/repository/000077500000000000000000000000001453140004500275065ustar00rootroot00000000000000client/testdata/go-tuf-transition-M4/consistent-snapshot-false/2/repository/1.root.json000077700000000000000000000000001453140004500365402../../1/repository/1.root.jsonustar00rootroot00000000000000client/testdata/go-tuf-transition-M4/consistent-snapshot-false/2/repository/2.root.json000077700000000000000000000000001453140004500365422../../1/repository/2.root.jsonustar00rootroot00000000000000client/testdata/go-tuf-transition-M4/consistent-snapshot-false/2/repository/3.root.json000066400000000000000000000041061453140004500315260ustar00rootroot00000000000000{ "signatures": [ { "keyid": "4c663b6d0b9f2c74a19b6791c1417c8d1916e2d84461be1a8148e4386c89582d", "sig": "ea2529b895eeabd2aaf00c06d5789fc3152aab134d8f1265954304c89f4a6eeca4e7f0be6620c8fce14caf4c447b8c472483438d74273d2a50ea86f5de59aa06" } ], "signed": { "_type": "root", "consistent_snapshot": false, "expires": "2100-01-01T00:00:00Z", "keys": { "4c663b6d0b9f2c74a19b6791c1417c8d1916e2d84461be1a8148e4386c89582d": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "153986a7370e002f377dd68797e7466c421180c1571e233de2f8ab41c8af4f54" }, "scheme": "ed25519" }, "a3eba2113e37b749b908101bdb7b856a44f2853641830c0f939730aca3e30360": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "aee574e56780ea1709a8b56e02d4ffdd9a3a1deaed61e2eb0701f376a4422e42" }, "scheme": "ed25519" }, "b59406a55fbe2492022f2951dacd01fc7b400b7b41ec4028b8356161a5a71a33": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "8656ad20568cd3534c405e4d9a84b0c6e6163f7f66434df77416502835b9b160" }, "scheme": "ed25519" }, "d792ff8cf3c5d9a8fe0fdfa585b25028fa9f49aa29c62a658140d4b98cc2c917": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "d482fa4805a50870aa1356ace6b764f7ab47ed4dc38f49b1a189afa25f179e94" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "4c663b6d0b9f2c74a19b6791c1417c8d1916e2d84461be1a8148e4386c89582d" ], "threshold": 1 }, "snapshot": { "keyids": [ "d792ff8cf3c5d9a8fe0fdfa585b25028fa9f49aa29c62a658140d4b98cc2c917" ], "threshold": 1 }, "targets": { "keyids": [ "a3eba2113e37b749b908101bdb7b856a44f2853641830c0f939730aca3e30360" ], "threshold": 1 }, "timestamp": { "keyids": [ "b59406a55fbe2492022f2951dacd01fc7b400b7b41ec4028b8356161a5a71a33" ], "threshold": 1 } }, "spec_version": "1.0", "version": 3 } }client/testdata/go-tuf-transition-M4/consistent-snapshot-false/2/repository/root.json000066400000000000000000000041061453140004500313650ustar00rootroot00000000000000{ "signatures": [ { "keyid": "4c663b6d0b9f2c74a19b6791c1417c8d1916e2d84461be1a8148e4386c89582d", "sig": "ea2529b895eeabd2aaf00c06d5789fc3152aab134d8f1265954304c89f4a6eeca4e7f0be6620c8fce14caf4c447b8c472483438d74273d2a50ea86f5de59aa06" } ], "signed": { "_type": "root", "consistent_snapshot": false, "expires": "2100-01-01T00:00:00Z", "keys": { "4c663b6d0b9f2c74a19b6791c1417c8d1916e2d84461be1a8148e4386c89582d": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "153986a7370e002f377dd68797e7466c421180c1571e233de2f8ab41c8af4f54" }, "scheme": "ed25519" }, "a3eba2113e37b749b908101bdb7b856a44f2853641830c0f939730aca3e30360": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "aee574e56780ea1709a8b56e02d4ffdd9a3a1deaed61e2eb0701f376a4422e42" }, "scheme": "ed25519" }, "b59406a55fbe2492022f2951dacd01fc7b400b7b41ec4028b8356161a5a71a33": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "8656ad20568cd3534c405e4d9a84b0c6e6163f7f66434df77416502835b9b160" }, "scheme": "ed25519" }, "d792ff8cf3c5d9a8fe0fdfa585b25028fa9f49aa29c62a658140d4b98cc2c917": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "d482fa4805a50870aa1356ace6b764f7ab47ed4dc38f49b1a189afa25f179e94" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "4c663b6d0b9f2c74a19b6791c1417c8d1916e2d84461be1a8148e4386c89582d" ], "threshold": 1 }, "snapshot": { "keyids": [ "d792ff8cf3c5d9a8fe0fdfa585b25028fa9f49aa29c62a658140d4b98cc2c917" ], "threshold": 1 }, "targets": { "keyids": [ "a3eba2113e37b749b908101bdb7b856a44f2853641830c0f939730aca3e30360" ], "threshold": 1 }, "timestamp": { "keyids": [ "b59406a55fbe2492022f2951dacd01fc7b400b7b41ec4028b8356161a5a71a33" ], "threshold": 1 } }, "spec_version": "1.0", "version": 3 } }client/testdata/go-tuf-transition-M4/consistent-snapshot-false/2/repository/snapshot.json000066400000000000000000000015171453140004500322440ustar00rootroot00000000000000{ "signatures": [ { "keyid": "d792ff8cf3c5d9a8fe0fdfa585b25028fa9f49aa29c62a658140d4b98cc2c917", "sig": "e4a00bb62fb3c1efd1b949050d952d89023461ab6db280f2b5233bafd8b672abfc23b22453eb1becb5d850eb70c7e201ee6780555fabd5f6c4d68b69c82f1406" } ], "signed": { "_type": "snapshot", "expires": "2100-01-01T00:00:00Z", "meta": { "root.json": { "hashes": { "sha512": "cd1af4dae35649774a2090ea0471ccaf677dddd080973807faa37c0744649f316052603c43032fc308c85c60379bf5067201957622061ad91acd942a1b55b274" }, "length": 2118, "version": 3 }, "targets.json": { "hashes": { "sha512": "33835f152dcc9ab1396e0f44dff841eca2c747dfd8cccc079dd0f4a88e7920f29cfaa3d895618c39463bed3997d6ba83c7791749483f2df8f3589fff3f4c379d" }, "length": 990, "version": 3 } }, "spec_version": "1.0", "version": 3 } }client/testdata/go-tuf-transition-M4/consistent-snapshot-false/2/repository/targets.json000066400000000000000000000017361453140004500320610ustar00rootroot00000000000000{ "signatures": [ { "keyid": "a3eba2113e37b749b908101bdb7b856a44f2853641830c0f939730aca3e30360", "sig": "09593c7b47f4dbf1e8ac949fa010279ffbbd36070a54a89b689378441e8111602d4236fa2962063778c82027d4746a8973ba8fea86e9c105190da9fa362d8b0c" } ], "signed": { "_type": "targets", "expires": "2100-01-01T00:00:00Z", "spec_version": "1.0", "targets": { "0": { "hashes": { "sha512": "31bca02094eb78126a517b206a88c73cfa9ec6f704c7030d18212cace820f025f00bf0ea68dbf3f3a5436ca63b53bf7bf80ad8d5de7d8359d0b7fed9dbc3ab99" }, "length": 1 }, "1": { "hashes": { "sha512": "4dff4ea340f0a823f15d3f4f01ab62eae0e5da579ccb851f8db9dfe84c58b2b37b89903a740e1ee172da793a6e79d560e5f7f9bd058a12a280433ed6fa46510a" }, "length": 1 }, "2": { "hashes": { "sha512": "40b244112641dd78dd4f93b6c9190dd46e0099194d5a44257b7efad6ef9ff4683da1eda0244448cb343aa688f5d3efd7314dafe580ac0bcbf115aeca9e8dc114" }, "length": 1 } }, "version": 3 } }client/testdata/go-tuf-transition-M4/consistent-snapshot-false/2/repository/targets/000077500000000000000000000000001453140004500311575ustar00rootroot00000000000000client/testdata/go-tuf-transition-M4/consistent-snapshot-false/2/repository/targets/0000077700000000000000000000000001453140004500362072../../../1/repository/targets/0ustar00rootroot00000000000000client/testdata/go-tuf-transition-M4/consistent-snapshot-false/2/repository/targets/1000077700000000000000000000000001453140004500362112../../../1/repository/targets/1ustar00rootroot00000000000000client/testdata/go-tuf-transition-M4/consistent-snapshot-false/2/repository/targets/2000066400000000000000000000000011453140004500312320ustar00rootroot000000000000002client/testdata/go-tuf-transition-M4/consistent-snapshot-false/2/repository/timestamp.json000066400000000000000000000011531453140004500324040ustar00rootroot00000000000000{ "signatures": [ { "keyid": "b59406a55fbe2492022f2951dacd01fc7b400b7b41ec4028b8356161a5a71a33", "sig": "3c11c4fea59b6433d678dfa7e6405182d7337f66bfcbe74c82602c689f2bfcca8cb5663ddf8d325fcc3e434c50bea08777e07d34ff439264f1e7cb688921ef00" } ], "signed": { "_type": "timestamp", "expires": "2100-01-01T00:00:00Z", "meta": { "snapshot.json": { "hashes": { "sha512": "0ab33430ecbe903acaafa3158ad1bfe2cfc22968b5966a6816c16d16a72bfa5da09426d98b547fc5c8784a6502972977c331956ed84c525f1e85fb385a36fb58" }, "length": 847, "version": 3 } }, "spec_version": "1.0", "version": 3 } }client/testdata/go-tuf-transition-M4/consistent-snapshot-false/3/000077500000000000000000000000001453140004500252705ustar00rootroot00000000000000client/testdata/go-tuf-transition-M4/consistent-snapshot-false/3/repository/000077500000000000000000000000001453140004500275075ustar00rootroot00000000000000client/testdata/go-tuf-transition-M4/consistent-snapshot-false/3/repository/1.root.json000077700000000000000000000000001453140004500365422../../2/repository/1.root.jsonustar00rootroot00000000000000client/testdata/go-tuf-transition-M4/consistent-snapshot-false/3/repository/2.root.json000077700000000000000000000000001453140004500365442../../2/repository/2.root.jsonustar00rootroot00000000000000client/testdata/go-tuf-transition-M4/consistent-snapshot-false/3/repository/3.root.json000077700000000000000000000000001453140004500365462../../2/repository/3.root.jsonustar00rootroot00000000000000client/testdata/go-tuf-transition-M4/consistent-snapshot-false/3/repository/4.root.json000066400000000000000000000041061453140004500315300ustar00rootroot00000000000000{ "signatures": [ { "keyid": "4c663b6d0b9f2c74a19b6791c1417c8d1916e2d84461be1a8148e4386c89582d", "sig": "ec7e22d27d5b5c43d350ae7b6345fd0acc37b7106063081f637f49fe09cc8f4c6db664f2198d53f930dc061c1ab25d1b015336a12085ee582e823eaf309b1202" } ], "signed": { "_type": "root", "consistent_snapshot": false, "expires": "2100-01-01T00:00:00Z", "keys": { "4c663b6d0b9f2c74a19b6791c1417c8d1916e2d84461be1a8148e4386c89582d": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "153986a7370e002f377dd68797e7466c421180c1571e233de2f8ab41c8af4f54" }, "scheme": "ed25519" }, "a3eba2113e37b749b908101bdb7b856a44f2853641830c0f939730aca3e30360": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "aee574e56780ea1709a8b56e02d4ffdd9a3a1deaed61e2eb0701f376a4422e42" }, "scheme": "ed25519" }, "b59406a55fbe2492022f2951dacd01fc7b400b7b41ec4028b8356161a5a71a33": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "8656ad20568cd3534c405e4d9a84b0c6e6163f7f66434df77416502835b9b160" }, "scheme": "ed25519" }, "bed15bf57ba4deb4e09667099d45d119504420983d16fd0927ebfb0c25184e7f": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "722dbc861813bb5b568524d62083e875c08e66fed1694d9161d253fa163dd86f" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "4c663b6d0b9f2c74a19b6791c1417c8d1916e2d84461be1a8148e4386c89582d" ], "threshold": 1 }, "snapshot": { "keyids": [ "bed15bf57ba4deb4e09667099d45d119504420983d16fd0927ebfb0c25184e7f" ], "threshold": 1 }, "targets": { "keyids": [ "a3eba2113e37b749b908101bdb7b856a44f2853641830c0f939730aca3e30360" ], "threshold": 1 }, "timestamp": { "keyids": [ "b59406a55fbe2492022f2951dacd01fc7b400b7b41ec4028b8356161a5a71a33" ], "threshold": 1 } }, "spec_version": "1.0", "version": 4 } }client/testdata/go-tuf-transition-M4/consistent-snapshot-false/3/repository/root.json000066400000000000000000000041061453140004500313660ustar00rootroot00000000000000{ "signatures": [ { "keyid": "4c663b6d0b9f2c74a19b6791c1417c8d1916e2d84461be1a8148e4386c89582d", "sig": "ec7e22d27d5b5c43d350ae7b6345fd0acc37b7106063081f637f49fe09cc8f4c6db664f2198d53f930dc061c1ab25d1b015336a12085ee582e823eaf309b1202" } ], "signed": { "_type": "root", "consistent_snapshot": false, "expires": "2100-01-01T00:00:00Z", "keys": { "4c663b6d0b9f2c74a19b6791c1417c8d1916e2d84461be1a8148e4386c89582d": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "153986a7370e002f377dd68797e7466c421180c1571e233de2f8ab41c8af4f54" }, "scheme": "ed25519" }, "a3eba2113e37b749b908101bdb7b856a44f2853641830c0f939730aca3e30360": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "aee574e56780ea1709a8b56e02d4ffdd9a3a1deaed61e2eb0701f376a4422e42" }, "scheme": "ed25519" }, "b59406a55fbe2492022f2951dacd01fc7b400b7b41ec4028b8356161a5a71a33": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "8656ad20568cd3534c405e4d9a84b0c6e6163f7f66434df77416502835b9b160" }, "scheme": "ed25519" }, "bed15bf57ba4deb4e09667099d45d119504420983d16fd0927ebfb0c25184e7f": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "722dbc861813bb5b568524d62083e875c08e66fed1694d9161d253fa163dd86f" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "4c663b6d0b9f2c74a19b6791c1417c8d1916e2d84461be1a8148e4386c89582d" ], "threshold": 1 }, "snapshot": { "keyids": [ "bed15bf57ba4deb4e09667099d45d119504420983d16fd0927ebfb0c25184e7f" ], "threshold": 1 }, "targets": { "keyids": [ "a3eba2113e37b749b908101bdb7b856a44f2853641830c0f939730aca3e30360" ], "threshold": 1 }, "timestamp": { "keyids": [ "b59406a55fbe2492022f2951dacd01fc7b400b7b41ec4028b8356161a5a71a33" ], "threshold": 1 } }, "spec_version": "1.0", "version": 4 } }client/testdata/go-tuf-transition-M4/consistent-snapshot-false/3/repository/snapshot.json000066400000000000000000000015201453140004500322370ustar00rootroot00000000000000{ "signatures": [ { "keyid": "bed15bf57ba4deb4e09667099d45d119504420983d16fd0927ebfb0c25184e7f", "sig": "fb791108edb246566da93f43af287fc8bb7ac03d6a7c615b4c14622a95a9f029fe1b1ad97c14554bc5fa681d39df2b67858a3b63e5d49578c87f1a1a134bdb0e" } ], "signed": { "_type": "snapshot", "expires": "2100-01-01T00:00:00Z", "meta": { "root.json": { "hashes": { "sha512": "52f836fc2bdeec872c621b84a87a1ab9e2d46763d640bbb775f862306b060ba51370ff838b9589a732f86938509c3a55731d2e3e6f1601d14c42c47efe990ddc" }, "length": 2118, "version": 4 }, "targets.json": { "hashes": { "sha512": "518518c1f03d874f9832390dea5bc12ab0061400bd0b3b8b44e4a353087d802accde1ec3dc94e0be4931f572960a0192bd84e667c02e6ac99d0a3bf28f5f9802" }, "length": 1191, "version": 4 } }, "spec_version": "1.0", "version": 4 } }client/testdata/go-tuf-transition-M4/consistent-snapshot-false/3/repository/targets.json000066400000000000000000000022471453140004500320600ustar00rootroot00000000000000{ "signatures": [ { "keyid": "a3eba2113e37b749b908101bdb7b856a44f2853641830c0f939730aca3e30360", "sig": "7bfe0a63ee324034807b5341336d9d2d64e9ef3936086577b5bbcc6d021b4656bd6bf14d817bbb3908e4dcb05391d1b4031b527c14d942c2d1e38275d5ff1308" } ], "signed": { "_type": "targets", "expires": "2100-01-01T00:00:00Z", "spec_version": "1.0", "targets": { "0": { "hashes": { "sha512": "31bca02094eb78126a517b206a88c73cfa9ec6f704c7030d18212cace820f025f00bf0ea68dbf3f3a5436ca63b53bf7bf80ad8d5de7d8359d0b7fed9dbc3ab99" }, "length": 1 }, "1": { "hashes": { "sha512": "4dff4ea340f0a823f15d3f4f01ab62eae0e5da579ccb851f8db9dfe84c58b2b37b89903a740e1ee172da793a6e79d560e5f7f9bd058a12a280433ed6fa46510a" }, "length": 1 }, "2": { "hashes": { "sha512": "40b244112641dd78dd4f93b6c9190dd46e0099194d5a44257b7efad6ef9ff4683da1eda0244448cb343aa688f5d3efd7314dafe580ac0bcbf115aeca9e8dc114" }, "length": 1 }, "3": { "hashes": { "sha512": "3bafbf08882a2d10133093a1b8433f50563b93c14acd05b79028eb1d12799027241450980651994501423a66c276ae26c43b739bc65c4e16b10c3af6c202aebb" }, "length": 1 } }, "version": 4 } }client/testdata/go-tuf-transition-M4/consistent-snapshot-false/3/repository/targets/000077500000000000000000000000001453140004500311605ustar00rootroot00000000000000client/testdata/go-tuf-transition-M4/consistent-snapshot-false/3/repository/targets/0000077700000000000000000000000001453140004500362112../../../2/repository/targets/0ustar00rootroot00000000000000client/testdata/go-tuf-transition-M4/consistent-snapshot-false/3/repository/targets/1000077700000000000000000000000001453140004500362132../../../2/repository/targets/1ustar00rootroot00000000000000client/testdata/go-tuf-transition-M4/consistent-snapshot-false/3/repository/targets/2000077700000000000000000000000001453140004500362152../../../2/repository/targets/2ustar00rootroot00000000000000client/testdata/go-tuf-transition-M4/consistent-snapshot-false/3/repository/targets/3000066400000000000000000000000011453140004500312340ustar00rootroot000000000000003client/testdata/go-tuf-transition-M4/consistent-snapshot-false/3/repository/timestamp.json000066400000000000000000000011531453140004500324050ustar00rootroot00000000000000{ "signatures": [ { "keyid": "b59406a55fbe2492022f2951dacd01fc7b400b7b41ec4028b8356161a5a71a33", "sig": "f93295631c148c1f4949c44cb07e1daca4b0cf587e5d3b999740b3e012e0dd2780803b3aec44c9fa1f27d0f5fa28136073331c41d81de5e4b82a7d7df5591509" } ], "signed": { "_type": "timestamp", "expires": "2100-01-01T00:00:00Z", "meta": { "snapshot.json": { "hashes": { "sha512": "6455d62f5676402784607019dbb9a23ab31ee61b47a67a4fcd2a69bf3a3b5ec60b602b42112626f17ef2ec0177c4392e61d587637c06f636831ff63c3317827d" }, "length": 848, "version": 4 } }, "spec_version": "1.0", "version": 4 } }client/testdata/go-tuf-transition-M4/consistent-snapshot-false/4/000077500000000000000000000000001453140004500252715ustar00rootroot00000000000000client/testdata/go-tuf-transition-M4/consistent-snapshot-false/4/repository/000077500000000000000000000000001453140004500275105ustar00rootroot00000000000000client/testdata/go-tuf-transition-M4/consistent-snapshot-false/4/repository/1.root.json000077700000000000000000000000001453140004500365442../../3/repository/1.root.jsonustar00rootroot00000000000000client/testdata/go-tuf-transition-M4/consistent-snapshot-false/4/repository/2.root.json000077700000000000000000000000001453140004500365462../../3/repository/2.root.jsonustar00rootroot00000000000000client/testdata/go-tuf-transition-M4/consistent-snapshot-false/4/repository/3.root.json000077700000000000000000000000001453140004500365502../../3/repository/3.root.jsonustar00rootroot00000000000000client/testdata/go-tuf-transition-M4/consistent-snapshot-false/4/repository/4.root.json000077700000000000000000000000001453140004500365522../../3/repository/4.root.jsonustar00rootroot00000000000000client/testdata/go-tuf-transition-M4/consistent-snapshot-false/4/repository/5.root.json000066400000000000000000000041061453140004500315320ustar00rootroot00000000000000{ "signatures": [ { "keyid": "4c663b6d0b9f2c74a19b6791c1417c8d1916e2d84461be1a8148e4386c89582d", "sig": "fc0f92883c9c89135505c1ae59ec11bf4bbd82ead0dca1d719eda4251345830514f0bd1b264d36d26b971ab58d7ee3f10110190cadee753b24fc98eaa61d2004" } ], "signed": { "_type": "root", "consistent_snapshot": false, "expires": "2100-01-01T00:00:00Z", "keys": { "4c663b6d0b9f2c74a19b6791c1417c8d1916e2d84461be1a8148e4386c89582d": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "153986a7370e002f377dd68797e7466c421180c1571e233de2f8ab41c8af4f54" }, "scheme": "ed25519" }, "79b5760e4c96b6becc12bec4260c9c1d533b9b70628ade2b229ef02b772b10b0": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "3ab34b0c2d4eadccaa0f0cf22ced07b552394063a9de2806993d022360dffc76" }, "scheme": "ed25519" }, "a3eba2113e37b749b908101bdb7b856a44f2853641830c0f939730aca3e30360": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "aee574e56780ea1709a8b56e02d4ffdd9a3a1deaed61e2eb0701f376a4422e42" }, "scheme": "ed25519" }, "bed15bf57ba4deb4e09667099d45d119504420983d16fd0927ebfb0c25184e7f": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "722dbc861813bb5b568524d62083e875c08e66fed1694d9161d253fa163dd86f" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "4c663b6d0b9f2c74a19b6791c1417c8d1916e2d84461be1a8148e4386c89582d" ], "threshold": 1 }, "snapshot": { "keyids": [ "bed15bf57ba4deb4e09667099d45d119504420983d16fd0927ebfb0c25184e7f" ], "threshold": 1 }, "targets": { "keyids": [ "a3eba2113e37b749b908101bdb7b856a44f2853641830c0f939730aca3e30360" ], "threshold": 1 }, "timestamp": { "keyids": [ "79b5760e4c96b6becc12bec4260c9c1d533b9b70628ade2b229ef02b772b10b0" ], "threshold": 1 } }, "spec_version": "1.0", "version": 5 } }client/testdata/go-tuf-transition-M4/consistent-snapshot-false/4/repository/root.json000066400000000000000000000041061453140004500313670ustar00rootroot00000000000000{ "signatures": [ { "keyid": "4c663b6d0b9f2c74a19b6791c1417c8d1916e2d84461be1a8148e4386c89582d", "sig": "fc0f92883c9c89135505c1ae59ec11bf4bbd82ead0dca1d719eda4251345830514f0bd1b264d36d26b971ab58d7ee3f10110190cadee753b24fc98eaa61d2004" } ], "signed": { "_type": "root", "consistent_snapshot": false, "expires": "2100-01-01T00:00:00Z", "keys": { "4c663b6d0b9f2c74a19b6791c1417c8d1916e2d84461be1a8148e4386c89582d": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "153986a7370e002f377dd68797e7466c421180c1571e233de2f8ab41c8af4f54" }, "scheme": "ed25519" }, "79b5760e4c96b6becc12bec4260c9c1d533b9b70628ade2b229ef02b772b10b0": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "3ab34b0c2d4eadccaa0f0cf22ced07b552394063a9de2806993d022360dffc76" }, "scheme": "ed25519" }, "a3eba2113e37b749b908101bdb7b856a44f2853641830c0f939730aca3e30360": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "aee574e56780ea1709a8b56e02d4ffdd9a3a1deaed61e2eb0701f376a4422e42" }, "scheme": "ed25519" }, "bed15bf57ba4deb4e09667099d45d119504420983d16fd0927ebfb0c25184e7f": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "722dbc861813bb5b568524d62083e875c08e66fed1694d9161d253fa163dd86f" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "4c663b6d0b9f2c74a19b6791c1417c8d1916e2d84461be1a8148e4386c89582d" ], "threshold": 1 }, "snapshot": { "keyids": [ "bed15bf57ba4deb4e09667099d45d119504420983d16fd0927ebfb0c25184e7f" ], "threshold": 1 }, "targets": { "keyids": [ "a3eba2113e37b749b908101bdb7b856a44f2853641830c0f939730aca3e30360" ], "threshold": 1 }, "timestamp": { "keyids": [ "79b5760e4c96b6becc12bec4260c9c1d533b9b70628ade2b229ef02b772b10b0" ], "threshold": 1 } }, "spec_version": "1.0", "version": 5 } }client/testdata/go-tuf-transition-M4/consistent-snapshot-false/4/repository/snapshot.json000066400000000000000000000015201453140004500322400ustar00rootroot00000000000000{ "signatures": [ { "keyid": "bed15bf57ba4deb4e09667099d45d119504420983d16fd0927ebfb0c25184e7f", "sig": "074a04f426d423f2675b58c8db38814bfe1bded4717c6c748ff2484cbc94fe2b67cb166cfe4550908565759018427042ebc59fc95005c105d12c1c0c1d779808" } ], "signed": { "_type": "snapshot", "expires": "2100-01-01T00:00:00Z", "meta": { "root.json": { "hashes": { "sha512": "6393ac77695995ad751bf33c885882088a4f5c3b1c58ed75433007a5c79aef45aeea10881094686254198e12fc78be781f777947f23ed5bef0bdb157ef55e74d" }, "length": 2118, "version": 5 }, "targets.json": { "hashes": { "sha512": "25ba8ef109680040b2e28dde51389397c51f4ba12acb1ea1b70dfc7e1bc5eceec71b1cbfb4747c47af8d9cdf76baa53ab5b2403eef226be1ae7a8d7794474ebf" }, "length": 1392, "version": 5 } }, "spec_version": "1.0", "version": 5 } }client/testdata/go-tuf-transition-M4/consistent-snapshot-false/4/repository/targets.json000066400000000000000000000025601453140004500320570ustar00rootroot00000000000000{ "signatures": [ { "keyid": "a3eba2113e37b749b908101bdb7b856a44f2853641830c0f939730aca3e30360", "sig": "68f2346cdbe045e8558b2ccd86be66e15466955167557c704b51d7163838f670c53ab9247c16a4ed0cd4ecc981a7e2a04a350b01548f97654499d6f9c17c4202" } ], "signed": { "_type": "targets", "expires": "2100-01-01T00:00:00Z", "spec_version": "1.0", "targets": { "0": { "hashes": { "sha512": "31bca02094eb78126a517b206a88c73cfa9ec6f704c7030d18212cace820f025f00bf0ea68dbf3f3a5436ca63b53bf7bf80ad8d5de7d8359d0b7fed9dbc3ab99" }, "length": 1 }, "1": { "hashes": { "sha512": "4dff4ea340f0a823f15d3f4f01ab62eae0e5da579ccb851f8db9dfe84c58b2b37b89903a740e1ee172da793a6e79d560e5f7f9bd058a12a280433ed6fa46510a" }, "length": 1 }, "2": { "hashes": { "sha512": "40b244112641dd78dd4f93b6c9190dd46e0099194d5a44257b7efad6ef9ff4683da1eda0244448cb343aa688f5d3efd7314dafe580ac0bcbf115aeca9e8dc114" }, "length": 1 }, "3": { "hashes": { "sha512": "3bafbf08882a2d10133093a1b8433f50563b93c14acd05b79028eb1d12799027241450980651994501423a66c276ae26c43b739bc65c4e16b10c3af6c202aebb" }, "length": 1 }, "4": { "hashes": { "sha512": "a321d8b405e3ef2604959847b36d171eebebc4a8941dc70a4784935a4fca5d5813de84dfa049f06549aa61b20848c1633ce81b675286ea8fb53db240d831c568" }, "length": 1 } }, "version": 5 } }client/testdata/go-tuf-transition-M4/consistent-snapshot-false/4/repository/targets/000077500000000000000000000000001453140004500311615ustar00rootroot00000000000000client/testdata/go-tuf-transition-M4/consistent-snapshot-false/4/repository/targets/0000077700000000000000000000000001453140004500362132../../../3/repository/targets/0ustar00rootroot00000000000000client/testdata/go-tuf-transition-M4/consistent-snapshot-false/4/repository/targets/1000077700000000000000000000000001453140004500362152../../../3/repository/targets/1ustar00rootroot00000000000000client/testdata/go-tuf-transition-M4/consistent-snapshot-false/4/repository/targets/2000077700000000000000000000000001453140004500362172../../../3/repository/targets/2ustar00rootroot00000000000000client/testdata/go-tuf-transition-M4/consistent-snapshot-false/4/repository/targets/3000077700000000000000000000000001453140004500362212../../../3/repository/targets/3ustar00rootroot00000000000000client/testdata/go-tuf-transition-M4/consistent-snapshot-false/4/repository/targets/4000066400000000000000000000000011453140004500312360ustar00rootroot000000000000004client/testdata/go-tuf-transition-M4/consistent-snapshot-false/4/repository/timestamp.json000066400000000000000000000011531453140004500324060ustar00rootroot00000000000000{ "signatures": [ { "keyid": "79b5760e4c96b6becc12bec4260c9c1d533b9b70628ade2b229ef02b772b10b0", "sig": "5f5f3f30efa3531c4a8174283820a7c499b15c36f93e5f0e179b32be898e4a43810cc46e3bd06cda75b16237a258f909884ae3718189830f6e2991b5d4968b04" } ], "signed": { "_type": "timestamp", "expires": "2100-01-01T00:00:00Z", "meta": { "snapshot.json": { "hashes": { "sha512": "26e8fa7db5884e5b8c6868898d8ad2fa26d37da07255364b48d4e09560e83b25586767ee53e2c39eb372d6ef0db0c8d7ae72a50bfb0bdab57510439d5e3ceef8" }, "length": 848, "version": 5 } }, "spec_version": "1.0", "version": 5 } }client/testdata/go-tuf-transition-M4/consistent-snapshot-false/5/000077500000000000000000000000001453140004500252725ustar00rootroot00000000000000client/testdata/go-tuf-transition-M4/consistent-snapshot-false/5/repository/000077500000000000000000000000001453140004500275115ustar00rootroot00000000000000client/testdata/go-tuf-transition-M4/consistent-snapshot-false/5/repository/1.root.json000077700000000000000000000000001453140004500365462../../4/repository/1.root.jsonustar00rootroot00000000000000client/testdata/go-tuf-transition-M4/consistent-snapshot-false/5/repository/2.root.json000077700000000000000000000000001453140004500365502../../4/repository/2.root.jsonustar00rootroot00000000000000client/testdata/go-tuf-transition-M4/consistent-snapshot-false/5/repository/3.root.json000077700000000000000000000000001453140004500365522../../4/repository/3.root.jsonustar00rootroot00000000000000client/testdata/go-tuf-transition-M4/consistent-snapshot-false/5/repository/4.root.json000077700000000000000000000000001453140004500365542../../4/repository/4.root.jsonustar00rootroot00000000000000client/testdata/go-tuf-transition-M4/consistent-snapshot-false/5/repository/5.root.json000077700000000000000000000000001453140004500365562../../4/repository/5.root.jsonustar00rootroot00000000000000client/testdata/go-tuf-transition-M4/consistent-snapshot-false/5/repository/root.json000077700000000000000000000000001453140004500362502../../4/repository/root.jsonustar00rootroot00000000000000client/testdata/go-tuf-transition-M4/consistent-snapshot-false/5/repository/snapshot.json000066400000000000000000000015201453140004500322410ustar00rootroot00000000000000{ "signatures": [ { "keyid": "bed15bf57ba4deb4e09667099d45d119504420983d16fd0927ebfb0c25184e7f", "sig": "a44ce7ca76f178c41acf92e6cb6cacc5c4cd17e1e99cc0d7ba8fb37d11b468b8475ad2801adeef7a246947595f845545be420ee912bfcb7091708530fab3eb01" } ], "signed": { "_type": "snapshot", "expires": "2100-01-01T00:00:00Z", "meta": { "root.json": { "hashes": { "sha512": "6393ac77695995ad751bf33c885882088a4f5c3b1c58ed75433007a5c79aef45aeea10881094686254198e12fc78be781f777947f23ed5bef0bdb157ef55e74d" }, "length": 2118, "version": 5 }, "targets.json": { "hashes": { "sha512": "c57a6fd231341bea3adb36d5a9c07167ef26bf9b037470bef1dadfeb2cdafa73b39b30965e39175fa9be5426065073bbf859f149c366ae07ea2a0f6fb6730b00" }, "length": 1593, "version": 6 } }, "spec_version": "1.0", "version": 6 } }client/testdata/go-tuf-transition-M4/consistent-snapshot-false/5/repository/targets.json000066400000000000000000000030711453140004500320560ustar00rootroot00000000000000{ "signatures": [ { "keyid": "a3eba2113e37b749b908101bdb7b856a44f2853641830c0f939730aca3e30360", "sig": "1e80ae84c4badf194e2fd7225c120999d8f628598fa0e994a2ff7cac705ec2f14601a64ba5370fc668f3fb114975dd81c554400d757f41762c4e12eb4db35d02" } ], "signed": { "_type": "targets", "expires": "2100-01-01T00:00:00Z", "spec_version": "1.0", "targets": { "0": { "hashes": { "sha512": "31bca02094eb78126a517b206a88c73cfa9ec6f704c7030d18212cace820f025f00bf0ea68dbf3f3a5436ca63b53bf7bf80ad8d5de7d8359d0b7fed9dbc3ab99" }, "length": 1 }, "1": { "hashes": { "sha512": "4dff4ea340f0a823f15d3f4f01ab62eae0e5da579ccb851f8db9dfe84c58b2b37b89903a740e1ee172da793a6e79d560e5f7f9bd058a12a280433ed6fa46510a" }, "length": 1 }, "2": { "hashes": { "sha512": "40b244112641dd78dd4f93b6c9190dd46e0099194d5a44257b7efad6ef9ff4683da1eda0244448cb343aa688f5d3efd7314dafe580ac0bcbf115aeca9e8dc114" }, "length": 1 }, "3": { "hashes": { "sha512": "3bafbf08882a2d10133093a1b8433f50563b93c14acd05b79028eb1d12799027241450980651994501423a66c276ae26c43b739bc65c4e16b10c3af6c202aebb" }, "length": 1 }, "4": { "hashes": { "sha512": "a321d8b405e3ef2604959847b36d171eebebc4a8941dc70a4784935a4fca5d5813de84dfa049f06549aa61b20848c1633ce81b675286ea8fb53db240d831c568" }, "length": 1 }, "5": { "hashes": { "sha512": "06df05371981a237d0ed11472fae7c94c9ac0eff1d05413516710d17b10a4fb6f4517bda4a695f02d0a73dd4db543b4653df28f5d09dab86f92ffb9b86d01e25" }, "length": 1 } }, "version": 6 } }client/testdata/go-tuf-transition-M4/consistent-snapshot-false/5/repository/targets/000077500000000000000000000000001453140004500311625ustar00rootroot00000000000000client/testdata/go-tuf-transition-M4/consistent-snapshot-false/5/repository/targets/0000077700000000000000000000000001453140004500362152../../../4/repository/targets/0ustar00rootroot00000000000000client/testdata/go-tuf-transition-M4/consistent-snapshot-false/5/repository/targets/1000077700000000000000000000000001453140004500362172../../../4/repository/targets/1ustar00rootroot00000000000000client/testdata/go-tuf-transition-M4/consistent-snapshot-false/5/repository/targets/2000077700000000000000000000000001453140004500362212../../../4/repository/targets/2ustar00rootroot00000000000000client/testdata/go-tuf-transition-M4/consistent-snapshot-false/5/repository/targets/3000077700000000000000000000000001453140004500362232../../../4/repository/targets/3ustar00rootroot00000000000000client/testdata/go-tuf-transition-M4/consistent-snapshot-false/5/repository/targets/4000077700000000000000000000000001453140004500362252../../../4/repository/targets/4ustar00rootroot00000000000000client/testdata/go-tuf-transition-M4/consistent-snapshot-false/5/repository/targets/5000066400000000000000000000000011453140004500312400ustar00rootroot000000000000005client/testdata/go-tuf-transition-M4/consistent-snapshot-false/5/repository/timestamp.json000066400000000000000000000011531453140004500324070ustar00rootroot00000000000000{ "signatures": [ { "keyid": "79b5760e4c96b6becc12bec4260c9c1d533b9b70628ade2b229ef02b772b10b0", "sig": "5de52850930dc5e8e6c5c1d85d84e8d968f170904c958de30473f81f8293e7b48e27e9d2afa1592eb1d527a0937553ee5e2540f0255837d2f93c5af12d510f08" } ], "signed": { "_type": "timestamp", "expires": "2100-01-01T00:00:00Z", "meta": { "snapshot.json": { "hashes": { "sha512": "c0fb132da6b90f31ba8c1122388c13d37e4a553ff5b5fa0a65dcf19c53af41965a62b7f88526b4363b288005bfc286c4480fa6d8d63ba54a0ec491f14329b549" }, "length": 848, "version": 6 } }, "spec_version": "1.0", "version": 6 } }client/testdata/go-tuf-transition-M4/consistent-snapshot-true/000077500000000000000000000000001453140004500250135ustar00rootroot00000000000000client/testdata/go-tuf-transition-M4/consistent-snapshot-true/0/000077500000000000000000000000001453140004500251525ustar00rootroot00000000000000client/testdata/go-tuf-transition-M4/consistent-snapshot-true/0/repository/000077500000000000000000000000001453140004500273715ustar00rootroot00000000000000client/testdata/go-tuf-transition-M4/consistent-snapshot-true/0/repository/1.root.json000066400000000000000000000041051453140004500314060ustar00rootroot00000000000000{ "signatures": [ { "keyid": "160f5ae5e7017bc783bbbe26c5419bbeeeb87f507b140ef474da0517d56549f7", "sig": "971ed150895f0dc14d5a2cfb7d805131ba7d0152f315f1e8498f5a0119fa0254c4f4dd4cdbb6401e8d2e1649df1dd91ed56cf5623986a81135b5e94f40dbda08" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2100-01-01T00:00:00Z", "keys": { "160f5ae5e7017bc783bbbe26c5419bbeeeb87f507b140ef474da0517d56549f7": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "bca152214dbfd3e7a1b7a7b3e2cc179fb00520fd7212c8a60ba99f14dfc0e1ca" }, "scheme": "ed25519" }, "b1eb1d74c0e65524c85f96f9badf09a4d2ed1259fb427fc689fc2279ebb4d867": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "62f71f99c788f16bcdc8bb252455e3a690350e4ddea5a6aab1f9a3aaabcf369a" }, "scheme": "ed25519" }, "b59406a55fbe2492022f2951dacd01fc7b400b7b41ec4028b8356161a5a71a33": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "8656ad20568cd3534c405e4d9a84b0c6e6163f7f66434df77416502835b9b160" }, "scheme": "ed25519" }, "d792ff8cf3c5d9a8fe0fdfa585b25028fa9f49aa29c62a658140d4b98cc2c917": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "d482fa4805a50870aa1356ace6b764f7ab47ed4dc38f49b1a189afa25f179e94" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "160f5ae5e7017bc783bbbe26c5419bbeeeb87f507b140ef474da0517d56549f7" ], "threshold": 1 }, "snapshot": { "keyids": [ "d792ff8cf3c5d9a8fe0fdfa585b25028fa9f49aa29c62a658140d4b98cc2c917" ], "threshold": 1 }, "targets": { "keyids": [ "b1eb1d74c0e65524c85f96f9badf09a4d2ed1259fb427fc689fc2279ebb4d867" ], "threshold": 1 }, "timestamp": { "keyids": [ "b59406a55fbe2492022f2951dacd01fc7b400b7b41ec4028b8356161a5a71a33" ], "threshold": 1 } }, "spec_version": "1.0", "version": 1 } }client/testdata/go-tuf-transition-M4/consistent-snapshot-true/0/repository/1.snapshot.json000066400000000000000000000015171453140004500322660ustar00rootroot00000000000000{ "signatures": [ { "keyid": "d792ff8cf3c5d9a8fe0fdfa585b25028fa9f49aa29c62a658140d4b98cc2c917", "sig": "baefc778a9aaa93cfa86bd9d0f5b4d05c58c48e1abdff6d44f1c0b3ffac7c18989c357f78222f4decc52f0372251679ca074b3969e11991a424c6c2f3bda9709" } ], "signed": { "_type": "snapshot", "expires": "2100-01-01T00:00:00Z", "meta": { "root.json": { "hashes": { "sha512": "c125be40b37191d913a727873ff99224f2641d665534211641c7bf8bc7813e3b9b90a80380d118c5815188f799ba8e43d3ccc7dcb2ea42563e7250ac7791c1db" }, "length": 2117, "version": 1 }, "targets.json": { "hashes": { "sha512": "257ae8c4653e9ecd1580d0f95ece3cbd03d67ace62e670c0493cde2afde96670a1620fcdf4a2e81ecbf8a67c7b0af9e03e6f9c5c8195d4b1940f7e0e61cc04c8" }, "length": 588, "version": 1 } }, "spec_version": "1.0", "version": 1 } }client/testdata/go-tuf-transition-M4/consistent-snapshot-true/0/repository/1.targets.json000066400000000000000000000011141453140004500320710ustar00rootroot00000000000000{ "signatures": [ { "keyid": "b1eb1d74c0e65524c85f96f9badf09a4d2ed1259fb427fc689fc2279ebb4d867", "sig": "4d5c3a5da43f3792d077c1128fa28585982ff2957fae59be02a831fc920d0b91cbeaa99fd6c15066ec4da8bf12f993440a90d1624fd7b0a68070e5d60ed2500f" } ], "signed": { "_type": "targets", "expires": "2100-01-01T00:00:00Z", "spec_version": "1.0", "targets": { "0": { "hashes": { "sha512": "31bca02094eb78126a517b206a88c73cfa9ec6f704c7030d18212cace820f025f00bf0ea68dbf3f3a5436ca63b53bf7bf80ad8d5de7d8359d0b7fed9dbc3ab99" }, "length": 1 } }, "version": 1 } }client/testdata/go-tuf-transition-M4/consistent-snapshot-true/0/repository/root.json000066400000000000000000000041051453140004500312470ustar00rootroot00000000000000{ "signatures": [ { "keyid": "160f5ae5e7017bc783bbbe26c5419bbeeeb87f507b140ef474da0517d56549f7", "sig": "971ed150895f0dc14d5a2cfb7d805131ba7d0152f315f1e8498f5a0119fa0254c4f4dd4cdbb6401e8d2e1649df1dd91ed56cf5623986a81135b5e94f40dbda08" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2100-01-01T00:00:00Z", "keys": { "160f5ae5e7017bc783bbbe26c5419bbeeeb87f507b140ef474da0517d56549f7": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "bca152214dbfd3e7a1b7a7b3e2cc179fb00520fd7212c8a60ba99f14dfc0e1ca" }, "scheme": "ed25519" }, "b1eb1d74c0e65524c85f96f9badf09a4d2ed1259fb427fc689fc2279ebb4d867": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "62f71f99c788f16bcdc8bb252455e3a690350e4ddea5a6aab1f9a3aaabcf369a" }, "scheme": "ed25519" }, "b59406a55fbe2492022f2951dacd01fc7b400b7b41ec4028b8356161a5a71a33": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "8656ad20568cd3534c405e4d9a84b0c6e6163f7f66434df77416502835b9b160" }, "scheme": "ed25519" }, "d792ff8cf3c5d9a8fe0fdfa585b25028fa9f49aa29c62a658140d4b98cc2c917": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "d482fa4805a50870aa1356ace6b764f7ab47ed4dc38f49b1a189afa25f179e94" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "160f5ae5e7017bc783bbbe26c5419bbeeeb87f507b140ef474da0517d56549f7" ], "threshold": 1 }, "snapshot": { "keyids": [ "d792ff8cf3c5d9a8fe0fdfa585b25028fa9f49aa29c62a658140d4b98cc2c917" ], "threshold": 1 }, "targets": { "keyids": [ "b1eb1d74c0e65524c85f96f9badf09a4d2ed1259fb427fc689fc2279ebb4d867" ], "threshold": 1 }, "timestamp": { "keyids": [ "b59406a55fbe2492022f2951dacd01fc7b400b7b41ec4028b8356161a5a71a33" ], "threshold": 1 } }, "spec_version": "1.0", "version": 1 } }client/testdata/go-tuf-transition-M4/consistent-snapshot-true/0/repository/snapshot.json000066400000000000000000000015171453140004500321270ustar00rootroot00000000000000{ "signatures": [ { "keyid": "d792ff8cf3c5d9a8fe0fdfa585b25028fa9f49aa29c62a658140d4b98cc2c917", "sig": "baefc778a9aaa93cfa86bd9d0f5b4d05c58c48e1abdff6d44f1c0b3ffac7c18989c357f78222f4decc52f0372251679ca074b3969e11991a424c6c2f3bda9709" } ], "signed": { "_type": "snapshot", "expires": "2100-01-01T00:00:00Z", "meta": { "root.json": { "hashes": { "sha512": "c125be40b37191d913a727873ff99224f2641d665534211641c7bf8bc7813e3b9b90a80380d118c5815188f799ba8e43d3ccc7dcb2ea42563e7250ac7791c1db" }, "length": 2117, "version": 1 }, "targets.json": { "hashes": { "sha512": "257ae8c4653e9ecd1580d0f95ece3cbd03d67ace62e670c0493cde2afde96670a1620fcdf4a2e81ecbf8a67c7b0af9e03e6f9c5c8195d4b1940f7e0e61cc04c8" }, "length": 588, "version": 1 } }, "spec_version": "1.0", "version": 1 } }client/testdata/go-tuf-transition-M4/consistent-snapshot-true/0/repository/targets.json000066400000000000000000000011141453140004500317320ustar00rootroot00000000000000{ "signatures": [ { "keyid": "b1eb1d74c0e65524c85f96f9badf09a4d2ed1259fb427fc689fc2279ebb4d867", "sig": "4d5c3a5da43f3792d077c1128fa28585982ff2957fae59be02a831fc920d0b91cbeaa99fd6c15066ec4da8bf12f993440a90d1624fd7b0a68070e5d60ed2500f" } ], "signed": { "_type": "targets", "expires": "2100-01-01T00:00:00Z", "spec_version": "1.0", "targets": { "0": { "hashes": { "sha512": "31bca02094eb78126a517b206a88c73cfa9ec6f704c7030d18212cace820f025f00bf0ea68dbf3f3a5436ca63b53bf7bf80ad8d5de7d8359d0b7fed9dbc3ab99" }, "length": 1 } }, "version": 1 } }client/testdata/go-tuf-transition-M4/consistent-snapshot-true/0/repository/targets/000077500000000000000000000000001453140004500310425ustar00rootroot00000000000000c227083464fb9af8955c90d2924774ee50abb547.paxheader00006660000000000000000000000337145314000450020312xustar00rootroot00000000000000223 path=client/testdata/go-tuf-transition-M4/consistent-snapshot-true/0/repository/targets/31bca02094eb78126a517b206a88c73cfa9ec6f704c7030d18212cace820f025f00bf0ea68dbf3f3a5436ca63b53bf7bf80ad8d5de7d8359d0b7fed9dbc3ab99.0 c227083464fb9af8955c90d2924774ee50abb547.data000066400000000000000000000000011453140004500171340ustar00rootroot000000000000000client/testdata/go-tuf-transition-M4/consistent-snapshot-true/0/repository/timestamp.json000066400000000000000000000011531453140004500322670ustar00rootroot00000000000000{ "signatures": [ { "keyid": "b59406a55fbe2492022f2951dacd01fc7b400b7b41ec4028b8356161a5a71a33", "sig": "d66dc8ec2ede5c442ec600c22c46a5e0661bfdaae9a24ace66fedafe6a8f7a8d20cbe8685d3e0947c5d84bc4e9fdd4f4a442477c1544316678eef537fcdd0e06" } ], "signed": { "_type": "timestamp", "expires": "2100-01-01T00:00:00Z", "meta": { "snapshot.json": { "hashes": { "sha512": "67b27e18e00391e67d5ce85d60cc8aaf862cff0d22e541d044c39373ed7d524969ab8a31a826722a94ee42ff1e81eedcefba379b2f02f0116b4c30c5285692f3" }, "length": 847, "version": 1 } }, "spec_version": "1.0", "version": 1 } }client/testdata/go-tuf-transition-M4/consistent-snapshot-true/1/000077500000000000000000000000001453140004500251535ustar00rootroot00000000000000client/testdata/go-tuf-transition-M4/consistent-snapshot-true/1/repository/000077500000000000000000000000001453140004500273725ustar00rootroot00000000000000client/testdata/go-tuf-transition-M4/consistent-snapshot-true/1/repository/1.root.json000077700000000000000000000000001453140004500364232../../0/repository/1.root.jsonustar00rootroot00000000000000client/testdata/go-tuf-transition-M4/consistent-snapshot-true/1/repository/1.snapshot.json000077700000000000000000000000001453140004500401532../../0/repository/1.snapshot.jsonustar00rootroot00000000000000client/testdata/go-tuf-transition-M4/consistent-snapshot-true/1/repository/1.targets.json000077700000000000000000000000001453140004500375772../../0/repository/1.targets.jsonustar00rootroot00000000000000client/testdata/go-tuf-transition-M4/consistent-snapshot-true/1/repository/2.root.json000066400000000000000000000044531453140004500314160ustar00rootroot00000000000000{ "signatures": [ { "keyid": "160f5ae5e7017bc783bbbe26c5419bbeeeb87f507b140ef474da0517d56549f7", "sig": "953fe3874eeb876b137ff4449d6e3d49d61a0b9e7bd339a47f9df3bd19e197aeee1e6b2b89a0ed4425c66e551b396ec53ea73f46d772ca81e27a3daf917e130d" }, { "keyid": "4c663b6d0b9f2c74a19b6791c1417c8d1916e2d84461be1a8148e4386c89582d", "sig": "09cd32bfed745ebdd6c8f69c3dca6ac74ddaf0121098442414ef4cb141f4916b14cc2127223f9ffaec2a4e0bde03c04f33aba3c357f7f8c3544666bfe84ede02" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2100-01-01T00:00:00Z", "keys": { "4c663b6d0b9f2c74a19b6791c1417c8d1916e2d84461be1a8148e4386c89582d": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "153986a7370e002f377dd68797e7466c421180c1571e233de2f8ab41c8af4f54" }, "scheme": "ed25519" }, "b1eb1d74c0e65524c85f96f9badf09a4d2ed1259fb427fc689fc2279ebb4d867": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "62f71f99c788f16bcdc8bb252455e3a690350e4ddea5a6aab1f9a3aaabcf369a" }, "scheme": "ed25519" }, "b59406a55fbe2492022f2951dacd01fc7b400b7b41ec4028b8356161a5a71a33": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "8656ad20568cd3534c405e4d9a84b0c6e6163f7f66434df77416502835b9b160" }, "scheme": "ed25519" }, "d792ff8cf3c5d9a8fe0fdfa585b25028fa9f49aa29c62a658140d4b98cc2c917": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "d482fa4805a50870aa1356ace6b764f7ab47ed4dc38f49b1a189afa25f179e94" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "4c663b6d0b9f2c74a19b6791c1417c8d1916e2d84461be1a8148e4386c89582d" ], "threshold": 1 }, "snapshot": { "keyids": [ "d792ff8cf3c5d9a8fe0fdfa585b25028fa9f49aa29c62a658140d4b98cc2c917" ], "threshold": 1 }, "targets": { "keyids": [ "b1eb1d74c0e65524c85f96f9badf09a4d2ed1259fb427fc689fc2279ebb4d867" ], "threshold": 1 }, "timestamp": { "keyids": [ "b59406a55fbe2492022f2951dacd01fc7b400b7b41ec4028b8356161a5a71a33" ], "threshold": 1 } }, "spec_version": "1.0", "version": 2 } }client/testdata/go-tuf-transition-M4/consistent-snapshot-true/1/repository/2.snapshot.json000066400000000000000000000015171453140004500322700ustar00rootroot00000000000000{ "signatures": [ { "keyid": "d792ff8cf3c5d9a8fe0fdfa585b25028fa9f49aa29c62a658140d4b98cc2c917", "sig": "b0298a786de3c14313b5a8f5afe8bbab0a407699a91062b8ead172f3afc74fc27210a7a042978c7d42b4ae9874f4bb139628be8a7be5b57c7bacc9f5a4cec809" } ], "signed": { "_type": "snapshot", "expires": "2100-01-01T00:00:00Z", "meta": { "root.json": { "hashes": { "sha512": "df686bed8fac62391d47356f6be52fe3316bf856a415a7a2102369289d23d274a739a1071f6095a712654e6b75296b726198e67604666d808c2e7caa3964f419" }, "length": 2347, "version": 2 }, "targets.json": { "hashes": { "sha512": "0fa0d9f7f64ffaf2a52bda808851c71ae87c7c47aaec4ce2ba28c19123a0d4394156dce76012a5253c1c02ccdf88843cdb980042eab746e1a93ce2541f89d91c" }, "length": 789, "version": 2 } }, "spec_version": "1.0", "version": 2 } }client/testdata/go-tuf-transition-M4/consistent-snapshot-true/1/repository/2.targets.json000066400000000000000000000014251453140004500321000ustar00rootroot00000000000000{ "signatures": [ { "keyid": "b1eb1d74c0e65524c85f96f9badf09a4d2ed1259fb427fc689fc2279ebb4d867", "sig": "81bcf5921834a20b8b0946815ad4316f43ffce20b3793e6653dc5fd4b98f1c6318ce2243948574e82414a102717a6f2d731250b3191c54abc8391fd867503e0b" } ], "signed": { "_type": "targets", "expires": "2100-01-01T00:00:00Z", "spec_version": "1.0", "targets": { "0": { "hashes": { "sha512": "31bca02094eb78126a517b206a88c73cfa9ec6f704c7030d18212cace820f025f00bf0ea68dbf3f3a5436ca63b53bf7bf80ad8d5de7d8359d0b7fed9dbc3ab99" }, "length": 1 }, "1": { "hashes": { "sha512": "4dff4ea340f0a823f15d3f4f01ab62eae0e5da579ccb851f8db9dfe84c58b2b37b89903a740e1ee172da793a6e79d560e5f7f9bd058a12a280433ed6fa46510a" }, "length": 1 } }, "version": 2 } }client/testdata/go-tuf-transition-M4/consistent-snapshot-true/1/repository/root.json000066400000000000000000000044531453140004500312560ustar00rootroot00000000000000{ "signatures": [ { "keyid": "160f5ae5e7017bc783bbbe26c5419bbeeeb87f507b140ef474da0517d56549f7", "sig": "953fe3874eeb876b137ff4449d6e3d49d61a0b9e7bd339a47f9df3bd19e197aeee1e6b2b89a0ed4425c66e551b396ec53ea73f46d772ca81e27a3daf917e130d" }, { "keyid": "4c663b6d0b9f2c74a19b6791c1417c8d1916e2d84461be1a8148e4386c89582d", "sig": "09cd32bfed745ebdd6c8f69c3dca6ac74ddaf0121098442414ef4cb141f4916b14cc2127223f9ffaec2a4e0bde03c04f33aba3c357f7f8c3544666bfe84ede02" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2100-01-01T00:00:00Z", "keys": { "4c663b6d0b9f2c74a19b6791c1417c8d1916e2d84461be1a8148e4386c89582d": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "153986a7370e002f377dd68797e7466c421180c1571e233de2f8ab41c8af4f54" }, "scheme": "ed25519" }, "b1eb1d74c0e65524c85f96f9badf09a4d2ed1259fb427fc689fc2279ebb4d867": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "62f71f99c788f16bcdc8bb252455e3a690350e4ddea5a6aab1f9a3aaabcf369a" }, "scheme": "ed25519" }, "b59406a55fbe2492022f2951dacd01fc7b400b7b41ec4028b8356161a5a71a33": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "8656ad20568cd3534c405e4d9a84b0c6e6163f7f66434df77416502835b9b160" }, "scheme": "ed25519" }, "d792ff8cf3c5d9a8fe0fdfa585b25028fa9f49aa29c62a658140d4b98cc2c917": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "d482fa4805a50870aa1356ace6b764f7ab47ed4dc38f49b1a189afa25f179e94" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "4c663b6d0b9f2c74a19b6791c1417c8d1916e2d84461be1a8148e4386c89582d" ], "threshold": 1 }, "snapshot": { "keyids": [ "d792ff8cf3c5d9a8fe0fdfa585b25028fa9f49aa29c62a658140d4b98cc2c917" ], "threshold": 1 }, "targets": { "keyids": [ "b1eb1d74c0e65524c85f96f9badf09a4d2ed1259fb427fc689fc2279ebb4d867" ], "threshold": 1 }, "timestamp": { "keyids": [ "b59406a55fbe2492022f2951dacd01fc7b400b7b41ec4028b8356161a5a71a33" ], "threshold": 1 } }, "spec_version": "1.0", "version": 2 } }client/testdata/go-tuf-transition-M4/consistent-snapshot-true/1/repository/snapshot.json000066400000000000000000000015171453140004500321300ustar00rootroot00000000000000{ "signatures": [ { "keyid": "d792ff8cf3c5d9a8fe0fdfa585b25028fa9f49aa29c62a658140d4b98cc2c917", "sig": "b0298a786de3c14313b5a8f5afe8bbab0a407699a91062b8ead172f3afc74fc27210a7a042978c7d42b4ae9874f4bb139628be8a7be5b57c7bacc9f5a4cec809" } ], "signed": { "_type": "snapshot", "expires": "2100-01-01T00:00:00Z", "meta": { "root.json": { "hashes": { "sha512": "df686bed8fac62391d47356f6be52fe3316bf856a415a7a2102369289d23d274a739a1071f6095a712654e6b75296b726198e67604666d808c2e7caa3964f419" }, "length": 2347, "version": 2 }, "targets.json": { "hashes": { "sha512": "0fa0d9f7f64ffaf2a52bda808851c71ae87c7c47aaec4ce2ba28c19123a0d4394156dce76012a5253c1c02ccdf88843cdb980042eab746e1a93ce2541f89d91c" }, "length": 789, "version": 2 } }, "spec_version": "1.0", "version": 2 } }client/testdata/go-tuf-transition-M4/consistent-snapshot-true/1/repository/targets.json000066400000000000000000000014251453140004500317400ustar00rootroot00000000000000{ "signatures": [ { "keyid": "b1eb1d74c0e65524c85f96f9badf09a4d2ed1259fb427fc689fc2279ebb4d867", "sig": "81bcf5921834a20b8b0946815ad4316f43ffce20b3793e6653dc5fd4b98f1c6318ce2243948574e82414a102717a6f2d731250b3191c54abc8391fd867503e0b" } ], "signed": { "_type": "targets", "expires": "2100-01-01T00:00:00Z", "spec_version": "1.0", "targets": { "0": { "hashes": { "sha512": "31bca02094eb78126a517b206a88c73cfa9ec6f704c7030d18212cace820f025f00bf0ea68dbf3f3a5436ca63b53bf7bf80ad8d5de7d8359d0b7fed9dbc3ab99" }, "length": 1 }, "1": { "hashes": { "sha512": "4dff4ea340f0a823f15d3f4f01ab62eae0e5da579ccb851f8db9dfe84c58b2b37b89903a740e1ee172da793a6e79d560e5f7f9bd058a12a280433ed6fa46510a" }, "length": 1 } }, "version": 2 } }client/testdata/go-tuf-transition-M4/consistent-snapshot-true/1/repository/targets/000077500000000000000000000000001453140004500310435ustar00rootroot00000000000000b0c459f9f5bb60a8bf42ecdd64a211da1b0d7e9e.paxheader00006660000000000000000000000615145314000450021057xustar00rootroot00000000000000223 path=client/testdata/go-tuf-transition-M4/consistent-snapshot-true/1/repository/targets/31bca02094eb78126a517b206a88c73cfa9ec6f704c7030d18212cace820f025f00bf0ea68dbf3f3a5436ca63b53bf7bf80ad8d5de7d8359d0b7fed9dbc3ab99.0 174 linkpath=../../../0/repository/targets/31bca02094eb78126a517b206a88c73cfa9ec6f704c7030d18212cace820f025f00bf0ea68dbf3f3a5436ca63b53bf7bf80ad8d5de7d8359d0b7fed9dbc3ab99.0 b0c459f9f5bb60a8bf42ecdd64a211da1b0d7e9e.data000077700000000000000000000000001453140004500303342see b0c459f9f5bb60a8bf42ecdd64a211da1b0d7e9e.paxheaderustar00rootroot0000000000000056a6051ca2b02b04ef92d5150c9ef600403cb1de.paxheader00006660000000000000000000000337145314000450020451xustar00rootroot00000000000000223 path=client/testdata/go-tuf-transition-M4/consistent-snapshot-true/1/repository/targets/4dff4ea340f0a823f15d3f4f01ab62eae0e5da579ccb851f8db9dfe84c58b2b37b89903a740e1ee172da793a6e79d560e5f7f9bd058a12a280433ed6fa46510a.1 56a6051ca2b02b04ef92d5150c9ef600403cb1de.data000066400000000000000000000000011453140004500172730ustar00rootroot000000000000001client/testdata/go-tuf-transition-M4/consistent-snapshot-true/1/repository/timestamp.json000066400000000000000000000011531453140004500322700ustar00rootroot00000000000000{ "signatures": [ { "keyid": "b59406a55fbe2492022f2951dacd01fc7b400b7b41ec4028b8356161a5a71a33", "sig": "d55dc9bd3e7a5a56cada46ca40858b7dd48fd994de1ea0067e20e9fc6401faf5d25b20ddc8f93a966d82d4f0eabf7ef03c3612dd01339bb7527a5271b1c41b07" } ], "signed": { "_type": "timestamp", "expires": "2100-01-01T00:00:00Z", "meta": { "snapshot.json": { "hashes": { "sha512": "41a2de22c5a4b972102e2c65b9f5024c384be52a03c345a36736c3bee79e30a7aa3853c4dfdc7dfc3d5ddb713258454f0ef9140ac52e832f3ca927030013ca8e" }, "length": 847, "version": 2 } }, "spec_version": "1.0", "version": 2 } }client/testdata/go-tuf-transition-M4/consistent-snapshot-true/2/000077500000000000000000000000001453140004500251545ustar00rootroot00000000000000client/testdata/go-tuf-transition-M4/consistent-snapshot-true/2/repository/000077500000000000000000000000001453140004500273735ustar00rootroot00000000000000client/testdata/go-tuf-transition-M4/consistent-snapshot-true/2/repository/1.root.json000077700000000000000000000000001453140004500364252../../1/repository/1.root.jsonustar00rootroot00000000000000client/testdata/go-tuf-transition-M4/consistent-snapshot-true/2/repository/1.snapshot.json000077700000000000000000000000001453140004500401552../../1/repository/1.snapshot.jsonustar00rootroot00000000000000client/testdata/go-tuf-transition-M4/consistent-snapshot-true/2/repository/1.targets.json000077700000000000000000000000001453140004500376012../../1/repository/1.targets.jsonustar00rootroot00000000000000client/testdata/go-tuf-transition-M4/consistent-snapshot-true/2/repository/2.root.json000077700000000000000000000000001453140004500364272../../1/repository/2.root.jsonustar00rootroot00000000000000client/testdata/go-tuf-transition-M4/consistent-snapshot-true/2/repository/2.snapshot.json000077700000000000000000000000001453140004500401572../../1/repository/2.snapshot.jsonustar00rootroot00000000000000client/testdata/go-tuf-transition-M4/consistent-snapshot-true/2/repository/2.targets.json000077700000000000000000000000001453140004500376032../../1/repository/2.targets.jsonustar00rootroot00000000000000client/testdata/go-tuf-transition-M4/consistent-snapshot-true/2/repository/3.root.json000066400000000000000000000041051453140004500314120ustar00rootroot00000000000000{ "signatures": [ { "keyid": "4c663b6d0b9f2c74a19b6791c1417c8d1916e2d84461be1a8148e4386c89582d", "sig": "46ef3256d2df1f7259ec3044030cc6af71536aee4976b8858a46b0f0e98763679794546bcc21736231c0dac8cfbad936bdd18437d02a1c97e7ef347c16ddeb0c" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2100-01-01T00:00:00Z", "keys": { "4c663b6d0b9f2c74a19b6791c1417c8d1916e2d84461be1a8148e4386c89582d": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "153986a7370e002f377dd68797e7466c421180c1571e233de2f8ab41c8af4f54" }, "scheme": "ed25519" }, "a3eba2113e37b749b908101bdb7b856a44f2853641830c0f939730aca3e30360": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "aee574e56780ea1709a8b56e02d4ffdd9a3a1deaed61e2eb0701f376a4422e42" }, "scheme": "ed25519" }, "b59406a55fbe2492022f2951dacd01fc7b400b7b41ec4028b8356161a5a71a33": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "8656ad20568cd3534c405e4d9a84b0c6e6163f7f66434df77416502835b9b160" }, "scheme": "ed25519" }, "d792ff8cf3c5d9a8fe0fdfa585b25028fa9f49aa29c62a658140d4b98cc2c917": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "d482fa4805a50870aa1356ace6b764f7ab47ed4dc38f49b1a189afa25f179e94" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "4c663b6d0b9f2c74a19b6791c1417c8d1916e2d84461be1a8148e4386c89582d" ], "threshold": 1 }, "snapshot": { "keyids": [ "d792ff8cf3c5d9a8fe0fdfa585b25028fa9f49aa29c62a658140d4b98cc2c917" ], "threshold": 1 }, "targets": { "keyids": [ "a3eba2113e37b749b908101bdb7b856a44f2853641830c0f939730aca3e30360" ], "threshold": 1 }, "timestamp": { "keyids": [ "b59406a55fbe2492022f2951dacd01fc7b400b7b41ec4028b8356161a5a71a33" ], "threshold": 1 } }, "spec_version": "1.0", "version": 3 } }client/testdata/go-tuf-transition-M4/consistent-snapshot-true/2/repository/3.snapshot.json000066400000000000000000000015171453140004500322720ustar00rootroot00000000000000{ "signatures": [ { "keyid": "d792ff8cf3c5d9a8fe0fdfa585b25028fa9f49aa29c62a658140d4b98cc2c917", "sig": "42974be1e70b41809ab6c5bfaaef53508c3c1184cd045ee38cd737b0c9debaddbc0244731cbd208ead966561ab1103bae40d26fa3236ac974cb589ad77019c0e" } ], "signed": { "_type": "snapshot", "expires": "2100-01-01T00:00:00Z", "meta": { "root.json": { "hashes": { "sha512": "c113580e6b210d8cdaf93530870555cac34cd7a394a91ffd0462ed38326766f09c5712b1fb1c3ad53e7b2c24feac0180649b4fdcea7722e5c1ab05635709b4d4" }, "length": 2117, "version": 3 }, "targets.json": { "hashes": { "sha512": "33835f152dcc9ab1396e0f44dff841eca2c747dfd8cccc079dd0f4a88e7920f29cfaa3d895618c39463bed3997d6ba83c7791749483f2df8f3589fff3f4c379d" }, "length": 990, "version": 3 } }, "spec_version": "1.0", "version": 3 } }client/testdata/go-tuf-transition-M4/consistent-snapshot-true/2/repository/3.targets.json000066400000000000000000000017361453140004500321070ustar00rootroot00000000000000{ "signatures": [ { "keyid": "a3eba2113e37b749b908101bdb7b856a44f2853641830c0f939730aca3e30360", "sig": "09593c7b47f4dbf1e8ac949fa010279ffbbd36070a54a89b689378441e8111602d4236fa2962063778c82027d4746a8973ba8fea86e9c105190da9fa362d8b0c" } ], "signed": { "_type": "targets", "expires": "2100-01-01T00:00:00Z", "spec_version": "1.0", "targets": { "0": { "hashes": { "sha512": "31bca02094eb78126a517b206a88c73cfa9ec6f704c7030d18212cace820f025f00bf0ea68dbf3f3a5436ca63b53bf7bf80ad8d5de7d8359d0b7fed9dbc3ab99" }, "length": 1 }, "1": { "hashes": { "sha512": "4dff4ea340f0a823f15d3f4f01ab62eae0e5da579ccb851f8db9dfe84c58b2b37b89903a740e1ee172da793a6e79d560e5f7f9bd058a12a280433ed6fa46510a" }, "length": 1 }, "2": { "hashes": { "sha512": "40b244112641dd78dd4f93b6c9190dd46e0099194d5a44257b7efad6ef9ff4683da1eda0244448cb343aa688f5d3efd7314dafe580ac0bcbf115aeca9e8dc114" }, "length": 1 } }, "version": 3 } }client/testdata/go-tuf-transition-M4/consistent-snapshot-true/2/repository/root.json000066400000000000000000000041051453140004500312510ustar00rootroot00000000000000{ "signatures": [ { "keyid": "4c663b6d0b9f2c74a19b6791c1417c8d1916e2d84461be1a8148e4386c89582d", "sig": "46ef3256d2df1f7259ec3044030cc6af71536aee4976b8858a46b0f0e98763679794546bcc21736231c0dac8cfbad936bdd18437d02a1c97e7ef347c16ddeb0c" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2100-01-01T00:00:00Z", "keys": { "4c663b6d0b9f2c74a19b6791c1417c8d1916e2d84461be1a8148e4386c89582d": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "153986a7370e002f377dd68797e7466c421180c1571e233de2f8ab41c8af4f54" }, "scheme": "ed25519" }, "a3eba2113e37b749b908101bdb7b856a44f2853641830c0f939730aca3e30360": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "aee574e56780ea1709a8b56e02d4ffdd9a3a1deaed61e2eb0701f376a4422e42" }, "scheme": "ed25519" }, "b59406a55fbe2492022f2951dacd01fc7b400b7b41ec4028b8356161a5a71a33": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "8656ad20568cd3534c405e4d9a84b0c6e6163f7f66434df77416502835b9b160" }, "scheme": "ed25519" }, "d792ff8cf3c5d9a8fe0fdfa585b25028fa9f49aa29c62a658140d4b98cc2c917": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "d482fa4805a50870aa1356ace6b764f7ab47ed4dc38f49b1a189afa25f179e94" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "4c663b6d0b9f2c74a19b6791c1417c8d1916e2d84461be1a8148e4386c89582d" ], "threshold": 1 }, "snapshot": { "keyids": [ "d792ff8cf3c5d9a8fe0fdfa585b25028fa9f49aa29c62a658140d4b98cc2c917" ], "threshold": 1 }, "targets": { "keyids": [ "a3eba2113e37b749b908101bdb7b856a44f2853641830c0f939730aca3e30360" ], "threshold": 1 }, "timestamp": { "keyids": [ "b59406a55fbe2492022f2951dacd01fc7b400b7b41ec4028b8356161a5a71a33" ], "threshold": 1 } }, "spec_version": "1.0", "version": 3 } }client/testdata/go-tuf-transition-M4/consistent-snapshot-true/2/repository/snapshot.json000066400000000000000000000015171453140004500321310ustar00rootroot00000000000000{ "signatures": [ { "keyid": "d792ff8cf3c5d9a8fe0fdfa585b25028fa9f49aa29c62a658140d4b98cc2c917", "sig": "42974be1e70b41809ab6c5bfaaef53508c3c1184cd045ee38cd737b0c9debaddbc0244731cbd208ead966561ab1103bae40d26fa3236ac974cb589ad77019c0e" } ], "signed": { "_type": "snapshot", "expires": "2100-01-01T00:00:00Z", "meta": { "root.json": { "hashes": { "sha512": "c113580e6b210d8cdaf93530870555cac34cd7a394a91ffd0462ed38326766f09c5712b1fb1c3ad53e7b2c24feac0180649b4fdcea7722e5c1ab05635709b4d4" }, "length": 2117, "version": 3 }, "targets.json": { "hashes": { "sha512": "33835f152dcc9ab1396e0f44dff841eca2c747dfd8cccc079dd0f4a88e7920f29cfaa3d895618c39463bed3997d6ba83c7791749483f2df8f3589fff3f4c379d" }, "length": 990, "version": 3 } }, "spec_version": "1.0", "version": 3 } }client/testdata/go-tuf-transition-M4/consistent-snapshot-true/2/repository/targets.json000066400000000000000000000017361453140004500317460ustar00rootroot00000000000000{ "signatures": [ { "keyid": "a3eba2113e37b749b908101bdb7b856a44f2853641830c0f939730aca3e30360", "sig": "09593c7b47f4dbf1e8ac949fa010279ffbbd36070a54a89b689378441e8111602d4236fa2962063778c82027d4746a8973ba8fea86e9c105190da9fa362d8b0c" } ], "signed": { "_type": "targets", "expires": "2100-01-01T00:00:00Z", "spec_version": "1.0", "targets": { "0": { "hashes": { "sha512": "31bca02094eb78126a517b206a88c73cfa9ec6f704c7030d18212cace820f025f00bf0ea68dbf3f3a5436ca63b53bf7bf80ad8d5de7d8359d0b7fed9dbc3ab99" }, "length": 1 }, "1": { "hashes": { "sha512": "4dff4ea340f0a823f15d3f4f01ab62eae0e5da579ccb851f8db9dfe84c58b2b37b89903a740e1ee172da793a6e79d560e5f7f9bd058a12a280433ed6fa46510a" }, "length": 1 }, "2": { "hashes": { "sha512": "40b244112641dd78dd4f93b6c9190dd46e0099194d5a44257b7efad6ef9ff4683da1eda0244448cb343aa688f5d3efd7314dafe580ac0bcbf115aeca9e8dc114" }, "length": 1 } }, "version": 3 } }client/testdata/go-tuf-transition-M4/consistent-snapshot-true/2/repository/targets/000077500000000000000000000000001453140004500310445ustar00rootroot00000000000000de9aac3af913eb6363a47bb669ce2bdccfe475b6.paxheader00006660000000000000000000000615145314000450021155xustar00rootroot00000000000000223 path=client/testdata/go-tuf-transition-M4/consistent-snapshot-true/2/repository/targets/31bca02094eb78126a517b206a88c73cfa9ec6f704c7030d18212cace820f025f00bf0ea68dbf3f3a5436ca63b53bf7bf80ad8d5de7d8359d0b7fed9dbc3ab99.0 174 linkpath=../../../1/repository/targets/31bca02094eb78126a517b206a88c73cfa9ec6f704c7030d18212cace820f025f00bf0ea68dbf3f3a5436ca63b53bf7bf80ad8d5de7d8359d0b7fed9dbc3ab99.0 de9aac3af913eb6363a47bb669ce2bdccfe475b6.data000077700000000000000000000000001453140004500305302see de9aac3af913eb6363a47bb669ce2bdccfe475b6.paxheaderustar00rootroot00000000000000d8263ee9860594d2806b0dfd1bfd17528b0ba2a4.paxheader00006660000000000000000000000337145314000450020507xustar00rootroot00000000000000223 path=client/testdata/go-tuf-transition-M4/consistent-snapshot-true/2/repository/targets/40b244112641dd78dd4f93b6c9190dd46e0099194d5a44257b7efad6ef9ff4683da1eda0244448cb343aa688f5d3efd7314dafe580ac0bcbf115aeca9e8dc114.2 d8263ee9860594d2806b0dfd1bfd17528b0ba2a4.data000066400000000000000000000000011453140004500173310ustar00rootroot0000000000000022ebb2d33317c217847b6c001664e44a4651818fd.paxheader00006660000000000000000000000615145314000450020177xustar00rootroot00000000000000223 path=client/testdata/go-tuf-transition-M4/consistent-snapshot-true/2/repository/targets/4dff4ea340f0a823f15d3f4f01ab62eae0e5da579ccb851f8db9dfe84c58b2b37b89903a740e1ee172da793a6e79d560e5f7f9bd058a12a280433ed6fa46510a.1 174 linkpath=../../../1/repository/targets/4dff4ea340f0a823f15d3f4f01ab62eae0e5da579ccb851f8db9dfe84c58b2b37b89903a740e1ee172da793a6e79d560e5f7f9bd058a12a280433ed6fa46510a.1 2ebb2d33317c217847b6c001664e44a4651818fd.data000077700000000000000000000000001453140004500265742see 2ebb2d33317c217847b6c001664e44a4651818fd.paxheaderustar00rootroot00000000000000client/testdata/go-tuf-transition-M4/consistent-snapshot-true/2/repository/timestamp.json000066400000000000000000000011531453140004500322710ustar00rootroot00000000000000{ "signatures": [ { "keyid": "b59406a55fbe2492022f2951dacd01fc7b400b7b41ec4028b8356161a5a71a33", "sig": "6344ddf5432d68616adb91cb81ad5017d17d95c238f15e4a5fe291e145d19d30b4834917a233c4c897ede7ba2d61dd23cdb285134de2b09b84ab62e8fea0120a" } ], "signed": { "_type": "timestamp", "expires": "2100-01-01T00:00:00Z", "meta": { "snapshot.json": { "hashes": { "sha512": "78828a5b8f961563240c4037cb8c90778ec5b14c54fbd2fc4e3c9ace67c55061d23cb532713ce23bfa71c1699f33dba928046749c1a70b0bf83688df12850353" }, "length": 847, "version": 3 } }, "spec_version": "1.0", "version": 3 } }client/testdata/go-tuf-transition-M4/consistent-snapshot-true/3/000077500000000000000000000000001453140004500251555ustar00rootroot00000000000000client/testdata/go-tuf-transition-M4/consistent-snapshot-true/3/repository/000077500000000000000000000000001453140004500273745ustar00rootroot00000000000000client/testdata/go-tuf-transition-M4/consistent-snapshot-true/3/repository/1.root.json000077700000000000000000000000001453140004500364272../../2/repository/1.root.jsonustar00rootroot00000000000000client/testdata/go-tuf-transition-M4/consistent-snapshot-true/3/repository/1.snapshot.json000077700000000000000000000000001453140004500401572../../2/repository/1.snapshot.jsonustar00rootroot00000000000000client/testdata/go-tuf-transition-M4/consistent-snapshot-true/3/repository/1.targets.json000077700000000000000000000000001453140004500376032../../2/repository/1.targets.jsonustar00rootroot00000000000000client/testdata/go-tuf-transition-M4/consistent-snapshot-true/3/repository/2.root.json000077700000000000000000000000001453140004500364312../../2/repository/2.root.jsonustar00rootroot00000000000000client/testdata/go-tuf-transition-M4/consistent-snapshot-true/3/repository/2.snapshot.json000077700000000000000000000000001453140004500401612../../2/repository/2.snapshot.jsonustar00rootroot00000000000000client/testdata/go-tuf-transition-M4/consistent-snapshot-true/3/repository/2.targets.json000077700000000000000000000000001453140004500376052../../2/repository/2.targets.jsonustar00rootroot00000000000000client/testdata/go-tuf-transition-M4/consistent-snapshot-true/3/repository/3.root.json000077700000000000000000000000001453140004500364332../../2/repository/3.root.jsonustar00rootroot00000000000000client/testdata/go-tuf-transition-M4/consistent-snapshot-true/3/repository/3.snapshot.json000077700000000000000000000000001453140004500401632../../2/repository/3.snapshot.jsonustar00rootroot00000000000000client/testdata/go-tuf-transition-M4/consistent-snapshot-true/3/repository/3.targets.json000077700000000000000000000000001453140004500376072../../2/repository/3.targets.jsonustar00rootroot00000000000000client/testdata/go-tuf-transition-M4/consistent-snapshot-true/3/repository/4.root.json000066400000000000000000000041051453140004500314140ustar00rootroot00000000000000{ "signatures": [ { "keyid": "4c663b6d0b9f2c74a19b6791c1417c8d1916e2d84461be1a8148e4386c89582d", "sig": "78594f8ff3160bfef32c85e58a795d8dc6831e4ec2596e6a93d17f2bcb183c3c2e2ec99a28cf9467ab9a947c5803f3c16703f9fada8b43f33ccd3c49bf8fe707" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2100-01-01T00:00:00Z", "keys": { "4c663b6d0b9f2c74a19b6791c1417c8d1916e2d84461be1a8148e4386c89582d": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "153986a7370e002f377dd68797e7466c421180c1571e233de2f8ab41c8af4f54" }, "scheme": "ed25519" }, "a3eba2113e37b749b908101bdb7b856a44f2853641830c0f939730aca3e30360": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "aee574e56780ea1709a8b56e02d4ffdd9a3a1deaed61e2eb0701f376a4422e42" }, "scheme": "ed25519" }, "b59406a55fbe2492022f2951dacd01fc7b400b7b41ec4028b8356161a5a71a33": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "8656ad20568cd3534c405e4d9a84b0c6e6163f7f66434df77416502835b9b160" }, "scheme": "ed25519" }, "bed15bf57ba4deb4e09667099d45d119504420983d16fd0927ebfb0c25184e7f": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "722dbc861813bb5b568524d62083e875c08e66fed1694d9161d253fa163dd86f" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "4c663b6d0b9f2c74a19b6791c1417c8d1916e2d84461be1a8148e4386c89582d" ], "threshold": 1 }, "snapshot": { "keyids": [ "bed15bf57ba4deb4e09667099d45d119504420983d16fd0927ebfb0c25184e7f" ], "threshold": 1 }, "targets": { "keyids": [ "a3eba2113e37b749b908101bdb7b856a44f2853641830c0f939730aca3e30360" ], "threshold": 1 }, "timestamp": { "keyids": [ "b59406a55fbe2492022f2951dacd01fc7b400b7b41ec4028b8356161a5a71a33" ], "threshold": 1 } }, "spec_version": "1.0", "version": 4 } }client/testdata/go-tuf-transition-M4/consistent-snapshot-true/3/repository/4.snapshot.json000066400000000000000000000015201453140004500322660ustar00rootroot00000000000000{ "signatures": [ { "keyid": "bed15bf57ba4deb4e09667099d45d119504420983d16fd0927ebfb0c25184e7f", "sig": "c186db540040a5f552e34365f62a497164ffe1a657bfd30ff5d7fa9eec7f1cf0a4302f99a28233b64492d27bd5a85f7a6114a7dba875f087f7ea27d553d0a80e" } ], "signed": { "_type": "snapshot", "expires": "2100-01-01T00:00:00Z", "meta": { "root.json": { "hashes": { "sha512": "1ab59b54e351d71820aff7a1a8c845e1d6820793ab542e798989bd28d2db80a05f1382dd4b403f387793be5bacbc179be429ee13e8ff5cb6a4b7d6e73b3e30bc" }, "length": 2117, "version": 4 }, "targets.json": { "hashes": { "sha512": "518518c1f03d874f9832390dea5bc12ab0061400bd0b3b8b44e4a353087d802accde1ec3dc94e0be4931f572960a0192bd84e667c02e6ac99d0a3bf28f5f9802" }, "length": 1191, "version": 4 } }, "spec_version": "1.0", "version": 4 } }client/testdata/go-tuf-transition-M4/consistent-snapshot-true/3/repository/4.targets.json000066400000000000000000000022471453140004500321070ustar00rootroot00000000000000{ "signatures": [ { "keyid": "a3eba2113e37b749b908101bdb7b856a44f2853641830c0f939730aca3e30360", "sig": "7bfe0a63ee324034807b5341336d9d2d64e9ef3936086577b5bbcc6d021b4656bd6bf14d817bbb3908e4dcb05391d1b4031b527c14d942c2d1e38275d5ff1308" } ], "signed": { "_type": "targets", "expires": "2100-01-01T00:00:00Z", "spec_version": "1.0", "targets": { "0": { "hashes": { "sha512": "31bca02094eb78126a517b206a88c73cfa9ec6f704c7030d18212cace820f025f00bf0ea68dbf3f3a5436ca63b53bf7bf80ad8d5de7d8359d0b7fed9dbc3ab99" }, "length": 1 }, "1": { "hashes": { "sha512": "4dff4ea340f0a823f15d3f4f01ab62eae0e5da579ccb851f8db9dfe84c58b2b37b89903a740e1ee172da793a6e79d560e5f7f9bd058a12a280433ed6fa46510a" }, "length": 1 }, "2": { "hashes": { "sha512": "40b244112641dd78dd4f93b6c9190dd46e0099194d5a44257b7efad6ef9ff4683da1eda0244448cb343aa688f5d3efd7314dafe580ac0bcbf115aeca9e8dc114" }, "length": 1 }, "3": { "hashes": { "sha512": "3bafbf08882a2d10133093a1b8433f50563b93c14acd05b79028eb1d12799027241450980651994501423a66c276ae26c43b739bc65c4e16b10c3af6c202aebb" }, "length": 1 } }, "version": 4 } }client/testdata/go-tuf-transition-M4/consistent-snapshot-true/3/repository/root.json000066400000000000000000000041051453140004500312520ustar00rootroot00000000000000{ "signatures": [ { "keyid": "4c663b6d0b9f2c74a19b6791c1417c8d1916e2d84461be1a8148e4386c89582d", "sig": "78594f8ff3160bfef32c85e58a795d8dc6831e4ec2596e6a93d17f2bcb183c3c2e2ec99a28cf9467ab9a947c5803f3c16703f9fada8b43f33ccd3c49bf8fe707" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2100-01-01T00:00:00Z", "keys": { "4c663b6d0b9f2c74a19b6791c1417c8d1916e2d84461be1a8148e4386c89582d": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "153986a7370e002f377dd68797e7466c421180c1571e233de2f8ab41c8af4f54" }, "scheme": "ed25519" }, "a3eba2113e37b749b908101bdb7b856a44f2853641830c0f939730aca3e30360": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "aee574e56780ea1709a8b56e02d4ffdd9a3a1deaed61e2eb0701f376a4422e42" }, "scheme": "ed25519" }, "b59406a55fbe2492022f2951dacd01fc7b400b7b41ec4028b8356161a5a71a33": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "8656ad20568cd3534c405e4d9a84b0c6e6163f7f66434df77416502835b9b160" }, "scheme": "ed25519" }, "bed15bf57ba4deb4e09667099d45d119504420983d16fd0927ebfb0c25184e7f": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "722dbc861813bb5b568524d62083e875c08e66fed1694d9161d253fa163dd86f" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "4c663b6d0b9f2c74a19b6791c1417c8d1916e2d84461be1a8148e4386c89582d" ], "threshold": 1 }, "snapshot": { "keyids": [ "bed15bf57ba4deb4e09667099d45d119504420983d16fd0927ebfb0c25184e7f" ], "threshold": 1 }, "targets": { "keyids": [ "a3eba2113e37b749b908101bdb7b856a44f2853641830c0f939730aca3e30360" ], "threshold": 1 }, "timestamp": { "keyids": [ "b59406a55fbe2492022f2951dacd01fc7b400b7b41ec4028b8356161a5a71a33" ], "threshold": 1 } }, "spec_version": "1.0", "version": 4 } }client/testdata/go-tuf-transition-M4/consistent-snapshot-true/3/repository/snapshot.json000066400000000000000000000015201453140004500321240ustar00rootroot00000000000000{ "signatures": [ { "keyid": "bed15bf57ba4deb4e09667099d45d119504420983d16fd0927ebfb0c25184e7f", "sig": "c186db540040a5f552e34365f62a497164ffe1a657bfd30ff5d7fa9eec7f1cf0a4302f99a28233b64492d27bd5a85f7a6114a7dba875f087f7ea27d553d0a80e" } ], "signed": { "_type": "snapshot", "expires": "2100-01-01T00:00:00Z", "meta": { "root.json": { "hashes": { "sha512": "1ab59b54e351d71820aff7a1a8c845e1d6820793ab542e798989bd28d2db80a05f1382dd4b403f387793be5bacbc179be429ee13e8ff5cb6a4b7d6e73b3e30bc" }, "length": 2117, "version": 4 }, "targets.json": { "hashes": { "sha512": "518518c1f03d874f9832390dea5bc12ab0061400bd0b3b8b44e4a353087d802accde1ec3dc94e0be4931f572960a0192bd84e667c02e6ac99d0a3bf28f5f9802" }, "length": 1191, "version": 4 } }, "spec_version": "1.0", "version": 4 } }client/testdata/go-tuf-transition-M4/consistent-snapshot-true/3/repository/targets.json000066400000000000000000000022471453140004500317450ustar00rootroot00000000000000{ "signatures": [ { "keyid": "a3eba2113e37b749b908101bdb7b856a44f2853641830c0f939730aca3e30360", "sig": "7bfe0a63ee324034807b5341336d9d2d64e9ef3936086577b5bbcc6d021b4656bd6bf14d817bbb3908e4dcb05391d1b4031b527c14d942c2d1e38275d5ff1308" } ], "signed": { "_type": "targets", "expires": "2100-01-01T00:00:00Z", "spec_version": "1.0", "targets": { "0": { "hashes": { "sha512": "31bca02094eb78126a517b206a88c73cfa9ec6f704c7030d18212cace820f025f00bf0ea68dbf3f3a5436ca63b53bf7bf80ad8d5de7d8359d0b7fed9dbc3ab99" }, "length": 1 }, "1": { "hashes": { "sha512": "4dff4ea340f0a823f15d3f4f01ab62eae0e5da579ccb851f8db9dfe84c58b2b37b89903a740e1ee172da793a6e79d560e5f7f9bd058a12a280433ed6fa46510a" }, "length": 1 }, "2": { "hashes": { "sha512": "40b244112641dd78dd4f93b6c9190dd46e0099194d5a44257b7efad6ef9ff4683da1eda0244448cb343aa688f5d3efd7314dafe580ac0bcbf115aeca9e8dc114" }, "length": 1 }, "3": { "hashes": { "sha512": "3bafbf08882a2d10133093a1b8433f50563b93c14acd05b79028eb1d12799027241450980651994501423a66c276ae26c43b739bc65c4e16b10c3af6c202aebb" }, "length": 1 } }, "version": 4 } }client/testdata/go-tuf-transition-M4/consistent-snapshot-true/3/repository/targets/000077500000000000000000000000001453140004500310455ustar00rootroot00000000000000f820397645f6f28ac0d75055df0fd28512bd7b70.paxheader00006660000000000000000000000615145314000450020360xustar00rootroot00000000000000223 path=client/testdata/go-tuf-transition-M4/consistent-snapshot-true/3/repository/targets/31bca02094eb78126a517b206a88c73cfa9ec6f704c7030d18212cace820f025f00bf0ea68dbf3f3a5436ca63b53bf7bf80ad8d5de7d8359d0b7fed9dbc3ab99.0 174 linkpath=../../../2/repository/targets/31bca02094eb78126a517b206a88c73cfa9ec6f704c7030d18212cace820f025f00bf0ea68dbf3f3a5436ca63b53bf7bf80ad8d5de7d8359d0b7fed9dbc3ab99.0 f820397645f6f28ac0d75055df0fd28512bd7b70.data000077700000000000000000000000001453140004500271362see f820397645f6f28ac0d75055df0fd28512bd7b70.paxheaderustar00rootroot00000000000000e440e5c842586965a7fb77deda2eca68612b1f53.paxheader00006660000000000000000000000337145314000450020527xustar00rootroot00000000000000223 path=client/testdata/go-tuf-transition-M4/consistent-snapshot-true/3/repository/targets/3bafbf08882a2d10133093a1b8433f50563b93c14acd05b79028eb1d12799027241450980651994501423a66c276ae26c43b739bc65c4e16b10c3af6c202aebb.3 e440e5c842586965a7fb77deda2eca68612b1f53.data000066400000000000000000000000011453140004500173510ustar00rootroot0000000000000037cbcc2a6335c6040f6ee95f6300ea6aea7a8a87f.paxheader00006660000000000000000000000615145314000450020727xustar00rootroot00000000000000223 path=client/testdata/go-tuf-transition-M4/consistent-snapshot-true/3/repository/targets/40b244112641dd78dd4f93b6c9190dd46e0099194d5a44257b7efad6ef9ff4683da1eda0244448cb343aa688f5d3efd7314dafe580ac0bcbf115aeca9e8dc114.2 174 linkpath=../../../2/repository/targets/40b244112641dd78dd4f93b6c9190dd46e0099194d5a44257b7efad6ef9ff4683da1eda0244448cb343aa688f5d3efd7314dafe580ac0bcbf115aeca9e8dc114.2 7cbcc2a6335c6040f6ee95f6300ea6aea7a8a87f.data000077700000000000000000000000001453140004500300542see 7cbcc2a6335c6040f6ee95f6300ea6aea7a8a87f.paxheaderustar00rootroot00000000000000180cdb4fd229abf57fb6a4c85457ad9a8620fd92.paxheader00006660000000000000000000000615145314000450020661xustar00rootroot00000000000000223 path=client/testdata/go-tuf-transition-M4/consistent-snapshot-true/3/repository/targets/4dff4ea340f0a823f15d3f4f01ab62eae0e5da579ccb851f8db9dfe84c58b2b37b89903a740e1ee172da793a6e79d560e5f7f9bd058a12a280433ed6fa46510a.1 174 linkpath=../../../2/repository/targets/4dff4ea340f0a823f15d3f4f01ab62eae0e5da579ccb851f8db9dfe84c58b2b37b89903a740e1ee172da793a6e79d560e5f7f9bd058a12a280433ed6fa46510a.1 180cdb4fd229abf57fb6a4c85457ad9a8620fd92.data000077700000000000000000000000001453140004500277402see 180cdb4fd229abf57fb6a4c85457ad9a8620fd92.paxheaderustar00rootroot00000000000000client/testdata/go-tuf-transition-M4/consistent-snapshot-true/3/repository/timestamp.json000066400000000000000000000011531453140004500322720ustar00rootroot00000000000000{ "signatures": [ { "keyid": "b59406a55fbe2492022f2951dacd01fc7b400b7b41ec4028b8356161a5a71a33", "sig": "d854e4d42a126ba8b7d643c5f8d721d9e3bef4e950a8c61f521148888dbda1f7f7ac6f665029a15d1c1e52787c3677611be4a1cb7251e93a3fbc0229f6e5a40f" } ], "signed": { "_type": "timestamp", "expires": "2100-01-01T00:00:00Z", "meta": { "snapshot.json": { "hashes": { "sha512": "9af21a02c5b066aea02f0216fc22cb66e40c95d0bcbd50d35f16e32636beb0ffd41f1547ec86e2d0640322953d3ffb8285bb495065898cd8b95faf54fd5a3309" }, "length": 848, "version": 4 } }, "spec_version": "1.0", "version": 4 } }client/testdata/go-tuf-transition-M4/consistent-snapshot-true/4/000077500000000000000000000000001453140004500251565ustar00rootroot00000000000000client/testdata/go-tuf-transition-M4/consistent-snapshot-true/4/repository/000077500000000000000000000000001453140004500273755ustar00rootroot00000000000000client/testdata/go-tuf-transition-M4/consistent-snapshot-true/4/repository/1.root.json000077700000000000000000000000001453140004500364312../../3/repository/1.root.jsonustar00rootroot00000000000000client/testdata/go-tuf-transition-M4/consistent-snapshot-true/4/repository/1.snapshot.json000077700000000000000000000000001453140004500401612../../3/repository/1.snapshot.jsonustar00rootroot00000000000000client/testdata/go-tuf-transition-M4/consistent-snapshot-true/4/repository/1.targets.json000077700000000000000000000000001453140004500376052../../3/repository/1.targets.jsonustar00rootroot00000000000000client/testdata/go-tuf-transition-M4/consistent-snapshot-true/4/repository/2.root.json000077700000000000000000000000001453140004500364332../../3/repository/2.root.jsonustar00rootroot00000000000000client/testdata/go-tuf-transition-M4/consistent-snapshot-true/4/repository/2.snapshot.json000077700000000000000000000000001453140004500401632../../3/repository/2.snapshot.jsonustar00rootroot00000000000000client/testdata/go-tuf-transition-M4/consistent-snapshot-true/4/repository/2.targets.json000077700000000000000000000000001453140004500376072../../3/repository/2.targets.jsonustar00rootroot00000000000000client/testdata/go-tuf-transition-M4/consistent-snapshot-true/4/repository/3.root.json000077700000000000000000000000001453140004500364352../../3/repository/3.root.jsonustar00rootroot00000000000000client/testdata/go-tuf-transition-M4/consistent-snapshot-true/4/repository/3.snapshot.json000077700000000000000000000000001453140004500401652../../3/repository/3.snapshot.jsonustar00rootroot00000000000000client/testdata/go-tuf-transition-M4/consistent-snapshot-true/4/repository/3.targets.json000077700000000000000000000000001453140004500376112../../3/repository/3.targets.jsonustar00rootroot00000000000000client/testdata/go-tuf-transition-M4/consistent-snapshot-true/4/repository/4.root.json000077700000000000000000000000001453140004500364372../../3/repository/4.root.jsonustar00rootroot00000000000000client/testdata/go-tuf-transition-M4/consistent-snapshot-true/4/repository/4.snapshot.json000077700000000000000000000000001453140004500401672../../3/repository/4.snapshot.jsonustar00rootroot00000000000000client/testdata/go-tuf-transition-M4/consistent-snapshot-true/4/repository/4.targets.json000077700000000000000000000000001453140004500376132../../3/repository/4.targets.jsonustar00rootroot00000000000000client/testdata/go-tuf-transition-M4/consistent-snapshot-true/4/repository/5.root.json000066400000000000000000000041051453140004500314160ustar00rootroot00000000000000{ "signatures": [ { "keyid": "4c663b6d0b9f2c74a19b6791c1417c8d1916e2d84461be1a8148e4386c89582d", "sig": "a8bf62746b62a58f80c81bdbbdc67d142f1db9e6681ac0e46bf7d33aeac527e86af8294a35fea4cfd6c750d4f1333287c201837b2b37fce7a440ea58bdb0d907" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2100-01-01T00:00:00Z", "keys": { "4c663b6d0b9f2c74a19b6791c1417c8d1916e2d84461be1a8148e4386c89582d": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "153986a7370e002f377dd68797e7466c421180c1571e233de2f8ab41c8af4f54" }, "scheme": "ed25519" }, "79b5760e4c96b6becc12bec4260c9c1d533b9b70628ade2b229ef02b772b10b0": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "3ab34b0c2d4eadccaa0f0cf22ced07b552394063a9de2806993d022360dffc76" }, "scheme": "ed25519" }, "a3eba2113e37b749b908101bdb7b856a44f2853641830c0f939730aca3e30360": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "aee574e56780ea1709a8b56e02d4ffdd9a3a1deaed61e2eb0701f376a4422e42" }, "scheme": "ed25519" }, "bed15bf57ba4deb4e09667099d45d119504420983d16fd0927ebfb0c25184e7f": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "722dbc861813bb5b568524d62083e875c08e66fed1694d9161d253fa163dd86f" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "4c663b6d0b9f2c74a19b6791c1417c8d1916e2d84461be1a8148e4386c89582d" ], "threshold": 1 }, "snapshot": { "keyids": [ "bed15bf57ba4deb4e09667099d45d119504420983d16fd0927ebfb0c25184e7f" ], "threshold": 1 }, "targets": { "keyids": [ "a3eba2113e37b749b908101bdb7b856a44f2853641830c0f939730aca3e30360" ], "threshold": 1 }, "timestamp": { "keyids": [ "79b5760e4c96b6becc12bec4260c9c1d533b9b70628ade2b229ef02b772b10b0" ], "threshold": 1 } }, "spec_version": "1.0", "version": 5 } }client/testdata/go-tuf-transition-M4/consistent-snapshot-true/4/repository/5.snapshot.json000066400000000000000000000015201453140004500322700ustar00rootroot00000000000000{ "signatures": [ { "keyid": "bed15bf57ba4deb4e09667099d45d119504420983d16fd0927ebfb0c25184e7f", "sig": "6c6b90af042c63f79a7d8079a26bd58fdcb8d84c829fd62aa554b4e9df6d31dfb5a6efb7744b814f7536ace6196c2e0b2768794fa40abf85b49dcc661d0f9a06" } ], "signed": { "_type": "snapshot", "expires": "2100-01-01T00:00:00Z", "meta": { "root.json": { "hashes": { "sha512": "7a60ff2c4e027e05c318e9a0dc891c46e9899994b50c2ac0dad0bd6f439c69a71486606adf309969f981de6b20630e27f0e529e020c41c638b9f0895ccbd797b" }, "length": 2117, "version": 5 }, "targets.json": { "hashes": { "sha512": "25ba8ef109680040b2e28dde51389397c51f4ba12acb1ea1b70dfc7e1bc5eceec71b1cbfb4747c47af8d9cdf76baa53ab5b2403eef226be1ae7a8d7794474ebf" }, "length": 1392, "version": 5 } }, "spec_version": "1.0", "version": 5 } }client/testdata/go-tuf-transition-M4/consistent-snapshot-true/4/repository/5.targets.json000066400000000000000000000025601453140004500321070ustar00rootroot00000000000000{ "signatures": [ { "keyid": "a3eba2113e37b749b908101bdb7b856a44f2853641830c0f939730aca3e30360", "sig": "68f2346cdbe045e8558b2ccd86be66e15466955167557c704b51d7163838f670c53ab9247c16a4ed0cd4ecc981a7e2a04a350b01548f97654499d6f9c17c4202" } ], "signed": { "_type": "targets", "expires": "2100-01-01T00:00:00Z", "spec_version": "1.0", "targets": { "0": { "hashes": { "sha512": "31bca02094eb78126a517b206a88c73cfa9ec6f704c7030d18212cace820f025f00bf0ea68dbf3f3a5436ca63b53bf7bf80ad8d5de7d8359d0b7fed9dbc3ab99" }, "length": 1 }, "1": { "hashes": { "sha512": "4dff4ea340f0a823f15d3f4f01ab62eae0e5da579ccb851f8db9dfe84c58b2b37b89903a740e1ee172da793a6e79d560e5f7f9bd058a12a280433ed6fa46510a" }, "length": 1 }, "2": { "hashes": { "sha512": "40b244112641dd78dd4f93b6c9190dd46e0099194d5a44257b7efad6ef9ff4683da1eda0244448cb343aa688f5d3efd7314dafe580ac0bcbf115aeca9e8dc114" }, "length": 1 }, "3": { "hashes": { "sha512": "3bafbf08882a2d10133093a1b8433f50563b93c14acd05b79028eb1d12799027241450980651994501423a66c276ae26c43b739bc65c4e16b10c3af6c202aebb" }, "length": 1 }, "4": { "hashes": { "sha512": "a321d8b405e3ef2604959847b36d171eebebc4a8941dc70a4784935a4fca5d5813de84dfa049f06549aa61b20848c1633ce81b675286ea8fb53db240d831c568" }, "length": 1 } }, "version": 5 } }client/testdata/go-tuf-transition-M4/consistent-snapshot-true/4/repository/root.json000066400000000000000000000041051453140004500312530ustar00rootroot00000000000000{ "signatures": [ { "keyid": "4c663b6d0b9f2c74a19b6791c1417c8d1916e2d84461be1a8148e4386c89582d", "sig": "a8bf62746b62a58f80c81bdbbdc67d142f1db9e6681ac0e46bf7d33aeac527e86af8294a35fea4cfd6c750d4f1333287c201837b2b37fce7a440ea58bdb0d907" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2100-01-01T00:00:00Z", "keys": { "4c663b6d0b9f2c74a19b6791c1417c8d1916e2d84461be1a8148e4386c89582d": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "153986a7370e002f377dd68797e7466c421180c1571e233de2f8ab41c8af4f54" }, "scheme": "ed25519" }, "79b5760e4c96b6becc12bec4260c9c1d533b9b70628ade2b229ef02b772b10b0": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "3ab34b0c2d4eadccaa0f0cf22ced07b552394063a9de2806993d022360dffc76" }, "scheme": "ed25519" }, "a3eba2113e37b749b908101bdb7b856a44f2853641830c0f939730aca3e30360": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "aee574e56780ea1709a8b56e02d4ffdd9a3a1deaed61e2eb0701f376a4422e42" }, "scheme": "ed25519" }, "bed15bf57ba4deb4e09667099d45d119504420983d16fd0927ebfb0c25184e7f": { "keyid_hash_algorithms": [ "sha256" ], "keytype": "ed25519", "keyval": { "public": "722dbc861813bb5b568524d62083e875c08e66fed1694d9161d253fa163dd86f" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "4c663b6d0b9f2c74a19b6791c1417c8d1916e2d84461be1a8148e4386c89582d" ], "threshold": 1 }, "snapshot": { "keyids": [ "bed15bf57ba4deb4e09667099d45d119504420983d16fd0927ebfb0c25184e7f" ], "threshold": 1 }, "targets": { "keyids": [ "a3eba2113e37b749b908101bdb7b856a44f2853641830c0f939730aca3e30360" ], "threshold": 1 }, "timestamp": { "keyids": [ "79b5760e4c96b6becc12bec4260c9c1d533b9b70628ade2b229ef02b772b10b0" ], "threshold": 1 } }, "spec_version": "1.0", "version": 5 } }client/testdata/go-tuf-transition-M4/consistent-snapshot-true/4/repository/snapshot.json000066400000000000000000000015201453140004500321250ustar00rootroot00000000000000{ "signatures": [ { "keyid": "bed15bf57ba4deb4e09667099d45d119504420983d16fd0927ebfb0c25184e7f", "sig": "6c6b90af042c63f79a7d8079a26bd58fdcb8d84c829fd62aa554b4e9df6d31dfb5a6efb7744b814f7536ace6196c2e0b2768794fa40abf85b49dcc661d0f9a06" } ], "signed": { "_type": "snapshot", "expires": "2100-01-01T00:00:00Z", "meta": { "root.json": { "hashes": { "sha512": "7a60ff2c4e027e05c318e9a0dc891c46e9899994b50c2ac0dad0bd6f439c69a71486606adf309969f981de6b20630e27f0e529e020c41c638b9f0895ccbd797b" }, "length": 2117, "version": 5 }, "targets.json": { "hashes": { "sha512": "25ba8ef109680040b2e28dde51389397c51f4ba12acb1ea1b70dfc7e1bc5eceec71b1cbfb4747c47af8d9cdf76baa53ab5b2403eef226be1ae7a8d7794474ebf" }, "length": 1392, "version": 5 } }, "spec_version": "1.0", "version": 5 } }client/testdata/go-tuf-transition-M4/consistent-snapshot-true/4/repository/targets.json000066400000000000000000000025601453140004500317440ustar00rootroot00000000000000{ "signatures": [ { "keyid": "a3eba2113e37b749b908101bdb7b856a44f2853641830c0f939730aca3e30360", "sig": "68f2346cdbe045e8558b2ccd86be66e15466955167557c704b51d7163838f670c53ab9247c16a4ed0cd4ecc981a7e2a04a350b01548f97654499d6f9c17c4202" } ], "signed": { "_type": "targets", "expires": "2100-01-01T00:00:00Z", "spec_version": "1.0", "targets": { "0": { "hashes": { "sha512": "31bca02094eb78126a517b206a88c73cfa9ec6f704c7030d18212cace820f025f00bf0ea68dbf3f3a5436ca63b53bf7bf80ad8d5de7d8359d0b7fed9dbc3ab99" }, "length": 1 }, "1": { "hashes": { "sha512": "4dff4ea340f0a823f15d3f4f01ab62eae0e5da579ccb851f8db9dfe84c58b2b37b89903a740e1ee172da793a6e79d560e5f7f9bd058a12a280433ed6fa46510a" }, "length": 1 }, "2": { "hashes": { "sha512": "40b244112641dd78dd4f93b6c9190dd46e0099194d5a44257b7efad6ef9ff4683da1eda0244448cb343aa688f5d3efd7314dafe580ac0bcbf115aeca9e8dc114" }, "length": 1 }, "3": { "hashes": { "sha512": "3bafbf08882a2d10133093a1b8433f50563b93c14acd05b79028eb1d12799027241450980651994501423a66c276ae26c43b739bc65c4e16b10c3af6c202aebb" }, "length": 1 }, "4": { "hashes": { "sha512": "a321d8b405e3ef2604959847b36d171eebebc4a8941dc70a4784935a4fca5d5813de84dfa049f06549aa61b20848c1633ce81b675286ea8fb53db240d831c568" }, "length": 1 } }, "version": 5 } }client/testdata/go-tuf-transition-M4/consistent-snapshot-true/4/repository/targets/000077500000000000000000000000001453140004500310465ustar00rootroot000000000000008bca78fbca6323e517f27b36ae635780adcf1883.paxheader00006660000000000000000000000615145314000450020600xustar00rootroot00000000000000223 path=client/testdata/go-tuf-transition-M4/consistent-snapshot-true/4/repository/targets/31bca02094eb78126a517b206a88c73cfa9ec6f704c7030d18212cace820f025f00bf0ea68dbf3f3a5436ca63b53bf7bf80ad8d5de7d8359d0b7fed9dbc3ab99.0 174 linkpath=../../../3/repository/targets/31bca02094eb78126a517b206a88c73cfa9ec6f704c7030d18212cace820f025f00bf0ea68dbf3f3a5436ca63b53bf7bf80ad8d5de7d8359d0b7fed9dbc3ab99.0 8bca78fbca6323e517f27b36ae635780adcf1883.data000077700000000000000000000000001453140004500275762see 8bca78fbca6323e517f27b36ae635780adcf1883.paxheaderustar00rootroot00000000000000814339fc398f0e36b2d3fb3a9a3d3dc1f588267a.paxheader00006660000000000000000000000615145314000450020523xustar00rootroot00000000000000223 path=client/testdata/go-tuf-transition-M4/consistent-snapshot-true/4/repository/targets/3bafbf08882a2d10133093a1b8433f50563b93c14acd05b79028eb1d12799027241450980651994501423a66c276ae26c43b739bc65c4e16b10c3af6c202aebb.3 174 linkpath=../../../3/repository/targets/3bafbf08882a2d10133093a1b8433f50563b93c14acd05b79028eb1d12799027241450980651994501423a66c276ae26c43b739bc65c4e16b10c3af6c202aebb.3 814339fc398f0e36b2d3fb3a9a3d3dc1f588267a.data000077700000000000000000000000001453140004500274442see 814339fc398f0e36b2d3fb3a9a3d3dc1f588267a.paxheaderustar00rootroot00000000000000dc5c46dccf4ff0841ec5a355bf8e280958fb807a.paxheader00006660000000000000000000000615145314000450020746xustar00rootroot00000000000000223 path=client/testdata/go-tuf-transition-M4/consistent-snapshot-true/4/repository/targets/40b244112641dd78dd4f93b6c9190dd46e0099194d5a44257b7efad6ef9ff4683da1eda0244448cb343aa688f5d3efd7314dafe580ac0bcbf115aeca9e8dc114.2 174 linkpath=../../../3/repository/targets/40b244112641dd78dd4f93b6c9190dd46e0099194d5a44257b7efad6ef9ff4683da1eda0244448cb343aa688f5d3efd7314dafe580ac0bcbf115aeca9e8dc114.2 dc5c46dccf4ff0841ec5a355bf8e280958fb807a.data000077700000000000000000000000001453140004500301122see dc5c46dccf4ff0841ec5a355bf8e280958fb807a.paxheaderustar00rootroot0000000000000016b79678a9a80678a19ab98b3c05e2669b332a31.paxheader00006660000000000000000000000615145314000450020225xustar00rootroot00000000000000223 path=client/testdata/go-tuf-transition-M4/consistent-snapshot-true/4/repository/targets/4dff4ea340f0a823f15d3f4f01ab62eae0e5da579ccb851f8db9dfe84c58b2b37b89903a740e1ee172da793a6e79d560e5f7f9bd058a12a280433ed6fa46510a.1 174 linkpath=../../../3/repository/targets/4dff4ea340f0a823f15d3f4f01ab62eae0e5da579ccb851f8db9dfe84c58b2b37b89903a740e1ee172da793a6e79d560e5f7f9bd058a12a280433ed6fa46510a.1 16b79678a9a80678a19ab98b3c05e2669b332a31.data000077700000000000000000000000001453140004500266502see 16b79678a9a80678a19ab98b3c05e2669b332a31.paxheaderustar00rootroot00000000000000bf0d87ab1b2b0ec1a11a3973d2845b42413d9767.paxheader00006660000000000000000000000337145314000450020411xustar00rootroot00000000000000223 path=client/testdata/go-tuf-transition-M4/consistent-snapshot-true/4/repository/targets/a321d8b405e3ef2604959847b36d171eebebc4a8941dc70a4784935a4fca5d5813de84dfa049f06549aa61b20848c1633ce81b675286ea8fb53db240d831c568.4 bf0d87ab1b2b0ec1a11a3973d2845b42413d9767.data000066400000000000000000000000011453140004500172330ustar00rootroot000000000000004client/testdata/go-tuf-transition-M4/consistent-snapshot-true/4/repository/timestamp.json000066400000000000000000000011531453140004500322730ustar00rootroot00000000000000{ "signatures": [ { "keyid": "79b5760e4c96b6becc12bec4260c9c1d533b9b70628ade2b229ef02b772b10b0", "sig": "6341fa975ecf98a7144a458ed4dc6a32b4d3bd0121fc0831679a582a9628cff71f8b13fe5b14f4fc8227f5ae8cfbc40998ed3ccfec84a91ee1e7ce6996678003" } ], "signed": { "_type": "timestamp", "expires": "2100-01-01T00:00:00Z", "meta": { "snapshot.json": { "hashes": { "sha512": "d1e96adc64da3b4d67016060b8ee9034e486e288595d51d5c24fcd037d4e756a6cff8a9e244da5de9b2bb6ab5bb7f3e7238ffebad0a1a3d50587d01c28f98c15" }, "length": 848, "version": 5 } }, "spec_version": "1.0", "version": 5 } }client/testdata/go-tuf-transition-M4/consistent-snapshot-true/5/000077500000000000000000000000001453140004500251575ustar00rootroot00000000000000client/testdata/go-tuf-transition-M4/consistent-snapshot-true/5/repository/000077500000000000000000000000001453140004500273765ustar00rootroot00000000000000client/testdata/go-tuf-transition-M4/consistent-snapshot-true/5/repository/1.root.json000077700000000000000000000000001453140004500364332../../4/repository/1.root.jsonustar00rootroot00000000000000client/testdata/go-tuf-transition-M4/consistent-snapshot-true/5/repository/1.snapshot.json000077700000000000000000000000001453140004500401632../../4/repository/1.snapshot.jsonustar00rootroot00000000000000client/testdata/go-tuf-transition-M4/consistent-snapshot-true/5/repository/1.targets.json000077700000000000000000000000001453140004500376072../../4/repository/1.targets.jsonustar00rootroot00000000000000client/testdata/go-tuf-transition-M4/consistent-snapshot-true/5/repository/2.root.json000077700000000000000000000000001453140004500364352../../4/repository/2.root.jsonustar00rootroot00000000000000client/testdata/go-tuf-transition-M4/consistent-snapshot-true/5/repository/2.snapshot.json000077700000000000000000000000001453140004500401652../../4/repository/2.snapshot.jsonustar00rootroot00000000000000client/testdata/go-tuf-transition-M4/consistent-snapshot-true/5/repository/2.targets.json000077700000000000000000000000001453140004500376112../../4/repository/2.targets.jsonustar00rootroot00000000000000client/testdata/go-tuf-transition-M4/consistent-snapshot-true/5/repository/3.root.json000077700000000000000000000000001453140004500364372../../4/repository/3.root.jsonustar00rootroot00000000000000client/testdata/go-tuf-transition-M4/consistent-snapshot-true/5/repository/3.snapshot.json000077700000000000000000000000001453140004500401672../../4/repository/3.snapshot.jsonustar00rootroot00000000000000client/testdata/go-tuf-transition-M4/consistent-snapshot-true/5/repository/3.targets.json000077700000000000000000000000001453140004500376132../../4/repository/3.targets.jsonustar00rootroot00000000000000client/testdata/go-tuf-transition-M4/consistent-snapshot-true/5/repository/4.root.json000077700000000000000000000000001453140004500364412../../4/repository/4.root.jsonustar00rootroot00000000000000client/testdata/go-tuf-transition-M4/consistent-snapshot-true/5/repository/4.snapshot.json000077700000000000000000000000001453140004500401712../../4/repository/4.snapshot.jsonustar00rootroot00000000000000client/testdata/go-tuf-transition-M4/consistent-snapshot-true/5/repository/4.targets.json000077700000000000000000000000001453140004500376152../../4/repository/4.targets.jsonustar00rootroot00000000000000client/testdata/go-tuf-transition-M4/consistent-snapshot-true/5/repository/5.root.json000077700000000000000000000000001453140004500364432../../4/repository/5.root.jsonustar00rootroot00000000000000client/testdata/go-tuf-transition-M4/consistent-snapshot-true/5/repository/5.snapshot.json000077700000000000000000000000001453140004500401732../../4/repository/5.snapshot.jsonustar00rootroot00000000000000client/testdata/go-tuf-transition-M4/consistent-snapshot-true/5/repository/5.targets.json000077700000000000000000000000001453140004500376172../../4/repository/5.targets.jsonustar00rootroot00000000000000client/testdata/go-tuf-transition-M4/consistent-snapshot-true/5/repository/6.snapshot.json000066400000000000000000000015201453140004500322720ustar00rootroot00000000000000{ "signatures": [ { "keyid": "bed15bf57ba4deb4e09667099d45d119504420983d16fd0927ebfb0c25184e7f", "sig": "0e8dc07c124c26108fea54bf637b8133a6b9ba9defee8820ed8ebade9ed1f9b178163e712329179d3fe681e734d7d2078b3714e69e5e9d2a72abad3611c9560e" } ], "signed": { "_type": "snapshot", "expires": "2100-01-01T00:00:00Z", "meta": { "root.json": { "hashes": { "sha512": "7a60ff2c4e027e05c318e9a0dc891c46e9899994b50c2ac0dad0bd6f439c69a71486606adf309969f981de6b20630e27f0e529e020c41c638b9f0895ccbd797b" }, "length": 2117, "version": 5 }, "targets.json": { "hashes": { "sha512": "c57a6fd231341bea3adb36d5a9c07167ef26bf9b037470bef1dadfeb2cdafa73b39b30965e39175fa9be5426065073bbf859f149c366ae07ea2a0f6fb6730b00" }, "length": 1593, "version": 6 } }, "spec_version": "1.0", "version": 6 } }client/testdata/go-tuf-transition-M4/consistent-snapshot-true/5/repository/6.targets.json000066400000000000000000000030711453140004500321070ustar00rootroot00000000000000{ "signatures": [ { "keyid": "a3eba2113e37b749b908101bdb7b856a44f2853641830c0f939730aca3e30360", "sig": "1e80ae84c4badf194e2fd7225c120999d8f628598fa0e994a2ff7cac705ec2f14601a64ba5370fc668f3fb114975dd81c554400d757f41762c4e12eb4db35d02" } ], "signed": { "_type": "targets", "expires": "2100-01-01T00:00:00Z", "spec_version": "1.0", "targets": { "0": { "hashes": { "sha512": "31bca02094eb78126a517b206a88c73cfa9ec6f704c7030d18212cace820f025f00bf0ea68dbf3f3a5436ca63b53bf7bf80ad8d5de7d8359d0b7fed9dbc3ab99" }, "length": 1 }, "1": { "hashes": { "sha512": "4dff4ea340f0a823f15d3f4f01ab62eae0e5da579ccb851f8db9dfe84c58b2b37b89903a740e1ee172da793a6e79d560e5f7f9bd058a12a280433ed6fa46510a" }, "length": 1 }, "2": { "hashes": { "sha512": "40b244112641dd78dd4f93b6c9190dd46e0099194d5a44257b7efad6ef9ff4683da1eda0244448cb343aa688f5d3efd7314dafe580ac0bcbf115aeca9e8dc114" }, "length": 1 }, "3": { "hashes": { "sha512": "3bafbf08882a2d10133093a1b8433f50563b93c14acd05b79028eb1d12799027241450980651994501423a66c276ae26c43b739bc65c4e16b10c3af6c202aebb" }, "length": 1 }, "4": { "hashes": { "sha512": "a321d8b405e3ef2604959847b36d171eebebc4a8941dc70a4784935a4fca5d5813de84dfa049f06549aa61b20848c1633ce81b675286ea8fb53db240d831c568" }, "length": 1 }, "5": { "hashes": { "sha512": "06df05371981a237d0ed11472fae7c94c9ac0eff1d05413516710d17b10a4fb6f4517bda4a695f02d0a73dd4db543b4653df28f5d09dab86f92ffb9b86d01e25" }, "length": 1 } }, "version": 6 } }client/testdata/go-tuf-transition-M4/consistent-snapshot-true/5/repository/root.json000077700000000000000000000000001453140004500361352../../4/repository/root.jsonustar00rootroot00000000000000client/testdata/go-tuf-transition-M4/consistent-snapshot-true/5/repository/snapshot.json000066400000000000000000000015201453140004500321260ustar00rootroot00000000000000{ "signatures": [ { "keyid": "bed15bf57ba4deb4e09667099d45d119504420983d16fd0927ebfb0c25184e7f", "sig": "0e8dc07c124c26108fea54bf637b8133a6b9ba9defee8820ed8ebade9ed1f9b178163e712329179d3fe681e734d7d2078b3714e69e5e9d2a72abad3611c9560e" } ], "signed": { "_type": "snapshot", "expires": "2100-01-01T00:00:00Z", "meta": { "root.json": { "hashes": { "sha512": "7a60ff2c4e027e05c318e9a0dc891c46e9899994b50c2ac0dad0bd6f439c69a71486606adf309969f981de6b20630e27f0e529e020c41c638b9f0895ccbd797b" }, "length": 2117, "version": 5 }, "targets.json": { "hashes": { "sha512": "c57a6fd231341bea3adb36d5a9c07167ef26bf9b037470bef1dadfeb2cdafa73b39b30965e39175fa9be5426065073bbf859f149c366ae07ea2a0f6fb6730b00" }, "length": 1593, "version": 6 } }, "spec_version": "1.0", "version": 6 } }client/testdata/go-tuf-transition-M4/consistent-snapshot-true/5/repository/targets.json000066400000000000000000000030711453140004500317430ustar00rootroot00000000000000{ "signatures": [ { "keyid": "a3eba2113e37b749b908101bdb7b856a44f2853641830c0f939730aca3e30360", "sig": "1e80ae84c4badf194e2fd7225c120999d8f628598fa0e994a2ff7cac705ec2f14601a64ba5370fc668f3fb114975dd81c554400d757f41762c4e12eb4db35d02" } ], "signed": { "_type": "targets", "expires": "2100-01-01T00:00:00Z", "spec_version": "1.0", "targets": { "0": { "hashes": { "sha512": "31bca02094eb78126a517b206a88c73cfa9ec6f704c7030d18212cace820f025f00bf0ea68dbf3f3a5436ca63b53bf7bf80ad8d5de7d8359d0b7fed9dbc3ab99" }, "length": 1 }, "1": { "hashes": { "sha512": "4dff4ea340f0a823f15d3f4f01ab62eae0e5da579ccb851f8db9dfe84c58b2b37b89903a740e1ee172da793a6e79d560e5f7f9bd058a12a280433ed6fa46510a" }, "length": 1 }, "2": { "hashes": { "sha512": "40b244112641dd78dd4f93b6c9190dd46e0099194d5a44257b7efad6ef9ff4683da1eda0244448cb343aa688f5d3efd7314dafe580ac0bcbf115aeca9e8dc114" }, "length": 1 }, "3": { "hashes": { "sha512": "3bafbf08882a2d10133093a1b8433f50563b93c14acd05b79028eb1d12799027241450980651994501423a66c276ae26c43b739bc65c4e16b10c3af6c202aebb" }, "length": 1 }, "4": { "hashes": { "sha512": "a321d8b405e3ef2604959847b36d171eebebc4a8941dc70a4784935a4fca5d5813de84dfa049f06549aa61b20848c1633ce81b675286ea8fb53db240d831c568" }, "length": 1 }, "5": { "hashes": { "sha512": "06df05371981a237d0ed11472fae7c94c9ac0eff1d05413516710d17b10a4fb6f4517bda4a695f02d0a73dd4db543b4653df28f5d09dab86f92ffb9b86d01e25" }, "length": 1 } }, "version": 6 } }client/testdata/go-tuf-transition-M4/consistent-snapshot-true/5/repository/targets/000077500000000000000000000000001453140004500310475ustar00rootroot000000000000007813681f5b41c028345ca62a2be376bae70b7f61.paxheader00006660000000000000000000000337145314000450020341xustar00rootroot00000000000000223 path=client/testdata/go-tuf-transition-M4/consistent-snapshot-true/5/repository/targets/06df05371981a237d0ed11472fae7c94c9ac0eff1d05413516710d17b10a4fb6f4517bda4a695f02d0a73dd4db543b4653df28f5d09dab86f92ffb9b86d01e25.5 7813681f5b41c028345ca62a2be376bae70b7f61.data000066400000000000000000000000011453140004500171630ustar00rootroot000000000000005c70b61bd355940045552cd82c1eb815658c6e8ed.paxheader00006660000000000000000000000615145314000450020354xustar00rootroot00000000000000223 path=client/testdata/go-tuf-transition-M4/consistent-snapshot-true/5/repository/targets/31bca02094eb78126a517b206a88c73cfa9ec6f704c7030d18212cace820f025f00bf0ea68dbf3f3a5436ca63b53bf7bf80ad8d5de7d8359d0b7fed9dbc3ab99.0 174 linkpath=../../../4/repository/targets/31bca02094eb78126a517b206a88c73cfa9ec6f704c7030d18212cace820f025f00bf0ea68dbf3f3a5436ca63b53bf7bf80ad8d5de7d8359d0b7fed9dbc3ab99.0 c70b61bd355940045552cd82c1eb815658c6e8ed.data000077700000000000000000000000001453140004500271262see c70b61bd355940045552cd82c1eb815658c6e8ed.paxheaderustar00rootroot000000000000001e66cb1b8592685e3e2c6e7d88917c49507c7462.paxheader00006660000000000000000000000615145314000450020250xustar00rootroot00000000000000223 path=client/testdata/go-tuf-transition-M4/consistent-snapshot-true/5/repository/targets/3bafbf08882a2d10133093a1b8433f50563b93c14acd05b79028eb1d12799027241450980651994501423a66c276ae26c43b739bc65c4e16b10c3af6c202aebb.3 174 linkpath=../../../4/repository/targets/3bafbf08882a2d10133093a1b8433f50563b93c14acd05b79028eb1d12799027241450980651994501423a66c276ae26c43b739bc65c4e16b10c3af6c202aebb.3 1e66cb1b8592685e3e2c6e7d88917c49507c7462.data000077700000000000000000000000001453140004500267162see 1e66cb1b8592685e3e2c6e7d88917c49507c7462.paxheaderustar00rootroot00000000000000a02a23169a412bbdb2d87aec6ef1e6bebaa69a64.paxheader00006660000000000000000000000615145314000450021043xustar00rootroot00000000000000223 path=client/testdata/go-tuf-transition-M4/consistent-snapshot-true/5/repository/targets/40b244112641dd78dd4f93b6c9190dd46e0099194d5a44257b7efad6ef9ff4683da1eda0244448cb343aa688f5d3efd7314dafe580ac0bcbf115aeca9e8dc114.2 174 linkpath=../../../4/repository/targets/40b244112641dd78dd4f93b6c9190dd46e0099194d5a44257b7efad6ef9ff4683da1eda0244448cb343aa688f5d3efd7314dafe580ac0bcbf115aeca9e8dc114.2 a02a23169a412bbdb2d87aec6ef1e6bebaa69a64.data000077700000000000000000000000001453140004500303042see a02a23169a412bbdb2d87aec6ef1e6bebaa69a64.paxheaderustar00rootroot0000000000000074d1328f1d30fbd0dcb6694d3c9c6e7657e23ff6.paxheader00006660000000000000000000000615145314000450020607xustar00rootroot00000000000000223 path=client/testdata/go-tuf-transition-M4/consistent-snapshot-true/5/repository/targets/4dff4ea340f0a823f15d3f4f01ab62eae0e5da579ccb851f8db9dfe84c58b2b37b89903a740e1ee172da793a6e79d560e5f7f9bd058a12a280433ed6fa46510a.1 174 linkpath=../../../4/repository/targets/4dff4ea340f0a823f15d3f4f01ab62eae0e5da579ccb851f8db9dfe84c58b2b37b89903a740e1ee172da793a6e79d560e5f7f9bd058a12a280433ed6fa46510a.1 74d1328f1d30fbd0dcb6694d3c9c6e7657e23ff6.data000077700000000000000000000000001453140004500276142see 74d1328f1d30fbd0dcb6694d3c9c6e7657e23ff6.paxheaderustar00rootroot0000000000000073a65ad27180becb4341ecde3026f6daeb8f69ea.paxheader00006660000000000000000000000615145314000450021004xustar00rootroot00000000000000223 path=client/testdata/go-tuf-transition-M4/consistent-snapshot-true/5/repository/targets/a321d8b405e3ef2604959847b36d171eebebc4a8941dc70a4784935a4fca5d5813de84dfa049f06549aa61b20848c1633ce81b675286ea8fb53db240d831c568.4 174 linkpath=../../../4/repository/targets/a321d8b405e3ef2604959847b36d171eebebc4a8941dc70a4784935a4fca5d5813de84dfa049f06549aa61b20848c1633ce81b675286ea8fb53db240d831c568.4 73a65ad27180becb4341ecde3026f6daeb8f69ea.data000077700000000000000000000000001453140004500302062see 73a65ad27180becb4341ecde3026f6daeb8f69ea.paxheaderustar00rootroot00000000000000client/testdata/go-tuf-transition-M4/consistent-snapshot-true/5/repository/timestamp.json000066400000000000000000000011531453140004500322740ustar00rootroot00000000000000{ "signatures": [ { "keyid": "79b5760e4c96b6becc12bec4260c9c1d533b9b70628ade2b229ef02b772b10b0", "sig": "c928d7bd646cf71f1bc97efef782e5eccb7c88ebe0187708735a39f68dddd4e233702f72ba79a94f27cdb3cab3f568bc3c89598191d2f2dc6cfb968a0906c40d" } ], "signed": { "_type": "timestamp", "expires": "2100-01-01T00:00:00Z", "meta": { "snapshot.json": { "hashes": { "sha512": "afa8cb95af9715cbf1ef4cf0497daec22e43c96012fd0e34de928c3adef7b4c9e71f10188ffa6d83c06d81c9182421acb03d20bcd7cc32df9b051bf37a728e89" }, "length": 848, "version": 6 } }, "spec_version": "1.0", "version": 6 } }client/testdata/go-tuf-transition-M4/generate.go000066400000000000000000000076341453140004500221430ustar00rootroot00000000000000package main import ( "encoding/json" "fmt" "log" "os" "os/exec" "path/filepath" "time" tuf "github.com/theupdateframework/go-tuf" "github.com/theupdateframework/go-tuf/data" "github.com/theupdateframework/go-tuf/pkg/keys" ) var expirationDate = time.Date(2100, time.January, 1, 0, 0, 0, 0, time.UTC) type persistedKeys struct { Encrypted bool `json:"encrypted"` Data []*data.PrivateKey `json:"data"` } func assertNoError(err error) { if err != nil { panic(fmt.Sprintf("assertion failed: %s", err)) } } func copyRepo(src string, dst string) { cmd := exec.Command("cp", "-r", src, dst) assertNoError(cmd.Run()) } func newRepo(dir string) *tuf.Repo { repo, err := tuf.NewRepoIndent(tuf.FileSystemStore(dir, nil), "", "\t") assertNoError(err) return repo } func commit(dir string, repo *tuf.Repo) { assertNoError(repo.SnapshotWithExpires(expirationDate)) assertNoError(repo.TimestampWithExpires(expirationDate)) assertNoError(repo.Commit()) // Remove the keys directory to make sure we don't accidentally use a key. assertNoError(os.RemoveAll(filepath.Join(dir, "keys"))) } func addKeys(repo *tuf.Repo, roleKeys map[string][]*data.PrivateKey) { for role, keys := range roleKeys { for _, key := range keys { assertNoError(repo.AddPrivateKeyWithExpires(role, key, expirationDate)) } } } func addTargets(repo *tuf.Repo, dir string, files map[string][]byte) { paths := []string{} for file, data := range files { path := filepath.Join(dir, "staged", "targets", file) assertNoError(os.MkdirAll(filepath.Dir(path), 0755)) assertNoError(os.WriteFile(path, data, 0644)) paths = append(paths, file) } assertNoError(repo.AddTargetsWithExpires(paths, nil, expirationDate)) } func revokeKeys(repo *tuf.Repo, role string, keyList []*data.PrivateKey) { for _, key := range keyList { signer, err := keys.GetSigner(key) assertNoError(err) assertNoError(repo.RevokeKeyWithExpires(role, signer.PublicData().IDs()[0], expirationDate)) } } func generateRepos(dir string, consistentSnapshot bool) { f, err := os.Open("../keys.json") assertNoError(err) var roleKeys map[string][][]*data.PrivateKey assertNoError(json.NewDecoder(f).Decode(&roleKeys)) // Collect all the initial keys we'll use when creating repositories. // We'll modify this to reflect rotated keys. keys := map[string][]*data.PrivateKey{ "root": roleKeys["root"][0], "targets": roleKeys["targets"][0], "snapshot": roleKeys["snapshot"][0], "timestamp": roleKeys["timestamp"][0], } // Create the initial repo. dir0 := filepath.Join(dir, "0") repo0 := newRepo(dir0) repo0.Init(consistentSnapshot) addKeys(repo0, keys) addTargets(repo0, dir0, map[string][]byte{"0": []byte("0")}) commit(dir0, repo0) // Rotate all the keys to make sure that works. oldDir := dir0 i := 1 for _, role := range []string{"root", "targets", "snapshot", "timestamp"} { // Setup the repo. stepName := fmt.Sprintf("%d", i) d := filepath.Join(dir, stepName) copyRepo(oldDir, d) repo := newRepo(d) addKeys(repo, keys) // Actually rotate the keys revokeKeys(repo, role, roleKeys[role][0]) addKeys(repo, map[string][]*data.PrivateKey{ role: roleKeys[role][1], }) keys[role] = roleKeys[role][1] // Add a target to make sure that works, then commit. addTargets(repo, d, map[string][]byte{stepName: []byte(stepName)}) commit(d, repo) i += 1 oldDir = d } // Add another target file to make sure the workflow worked. stepName := fmt.Sprintf("%d", i) d := filepath.Join(dir, stepName) copyRepo(oldDir, d) repo := newRepo(d) addKeys(repo, keys) addTargets(repo, d, map[string][]byte{stepName: []byte(stepName)}) commit(d, repo) } func main() { cwd, err := os.Getwd() assertNoError(err) for _, consistentSnapshot := range []bool{false, true} { name := fmt.Sprintf("consistent-snapshot-%t", consistentSnapshot) log.Printf("generating %s", name) generateRepos(filepath.Join(cwd, name), consistentSnapshot) } } client/testdata/go-tuf/000077500000000000000000000000001453140004500153425ustar00rootroot00000000000000client/testdata/go-tuf/consistent-snapshot-false/000077500000000000000000000000001453140004500224605ustar00rootroot00000000000000client/testdata/go-tuf/consistent-snapshot-false/0/000077500000000000000000000000001453140004500226175ustar00rootroot00000000000000client/testdata/go-tuf/consistent-snapshot-false/0/repository/000077500000000000000000000000001453140004500250365ustar00rootroot00000000000000client/testdata/go-tuf/consistent-snapshot-false/0/repository/1.root.json000066400000000000000000000042021453140004500270510ustar00rootroot00000000000000{ "signed": { "_type": "root", "spec_version": "1.0", "version": 1, "expires": "2100-01-01T00:00:00Z", "keys": { "289e5a9e71afd7909326aa4caea92f7557ee0e2283d8c31f0c3401ce67248a45": { "keytype": "ed25519", "scheme": "ed25519", "keyid_hash_algorithms": [ "sha256", "sha512" ], "keyval": { "public": "d482fa4805a50870aa1356ace6b764f7ab47ed4dc38f49b1a189afa25f179e94" } }, "808aa256a8172bb0cb961767c6768e55ccf732c99afccc6145752d7a328b7937": { "keytype": "ed25519", "scheme": "ed25519", "keyid_hash_algorithms": [ "sha256", "sha512" ], "keyval": { "public": "62f71f99c788f16bcdc8bb252455e3a690350e4ddea5a6aab1f9a3aaabcf369a" } }, "aa3255b4e8e17e566d2bdbea0e5842978f9fa1d2fa9ec76ae76b146164acbfc8": { "keytype": "ed25519", "scheme": "ed25519", "keyid_hash_algorithms": [ "sha256", "sha512" ], "keyval": { "public": "8656ad20568cd3534c405e4d9a84b0c6e6163f7f66434df77416502835b9b160" } }, "ce72db3f938914205461a415c9b7b91267a2079df991fd6283aa8461988c1add": { "keytype": "ed25519", "scheme": "ed25519", "keyid_hash_algorithms": [ "sha256", "sha512" ], "keyval": { "public": "bca152214dbfd3e7a1b7a7b3e2cc179fb00520fd7212c8a60ba99f14dfc0e1ca" } } }, "roles": { "root": { "keyids": [ "ce72db3f938914205461a415c9b7b91267a2079df991fd6283aa8461988c1add" ], "threshold": 1 }, "snapshot": { "keyids": [ "289e5a9e71afd7909326aa4caea92f7557ee0e2283d8c31f0c3401ce67248a45" ], "threshold": 1 }, "targets": { "keyids": [ "808aa256a8172bb0cb961767c6768e55ccf732c99afccc6145752d7a328b7937" ], "threshold": 1 }, "timestamp": { "keyids": [ "aa3255b4e8e17e566d2bdbea0e5842978f9fa1d2fa9ec76ae76b146164acbfc8" ], "threshold": 1 } }, "consistent_snapshot": false }, "signatures": [ { "keyid": "ce72db3f938914205461a415c9b7b91267a2079df991fd6283aa8461988c1add", "sig": "afab8b34f93c99e200505cc6f0d6a9c4e757a7229f96bd31ab618f8bc4c3abe491b372bfec9d231136de46c1e183df194d372360ee9d32652f8c04d7574e2608" } ] }client/testdata/go-tuf/consistent-snapshot-false/0/repository/root.json000066400000000000000000000042021453140004500267120ustar00rootroot00000000000000{ "signed": { "_type": "root", "spec_version": "1.0", "version": 1, "expires": "2100-01-01T00:00:00Z", "keys": { "289e5a9e71afd7909326aa4caea92f7557ee0e2283d8c31f0c3401ce67248a45": { "keytype": "ed25519", "scheme": "ed25519", "keyid_hash_algorithms": [ "sha256", "sha512" ], "keyval": { "public": "d482fa4805a50870aa1356ace6b764f7ab47ed4dc38f49b1a189afa25f179e94" } }, "808aa256a8172bb0cb961767c6768e55ccf732c99afccc6145752d7a328b7937": { "keytype": "ed25519", "scheme": "ed25519", "keyid_hash_algorithms": [ "sha256", "sha512" ], "keyval": { "public": "62f71f99c788f16bcdc8bb252455e3a690350e4ddea5a6aab1f9a3aaabcf369a" } }, "aa3255b4e8e17e566d2bdbea0e5842978f9fa1d2fa9ec76ae76b146164acbfc8": { "keytype": "ed25519", "scheme": "ed25519", "keyid_hash_algorithms": [ "sha256", "sha512" ], "keyval": { "public": "8656ad20568cd3534c405e4d9a84b0c6e6163f7f66434df77416502835b9b160" } }, "ce72db3f938914205461a415c9b7b91267a2079df991fd6283aa8461988c1add": { "keytype": "ed25519", "scheme": "ed25519", "keyid_hash_algorithms": [ "sha256", "sha512" ], "keyval": { "public": "bca152214dbfd3e7a1b7a7b3e2cc179fb00520fd7212c8a60ba99f14dfc0e1ca" } } }, "roles": { "root": { "keyids": [ "ce72db3f938914205461a415c9b7b91267a2079df991fd6283aa8461988c1add" ], "threshold": 1 }, "snapshot": { "keyids": [ "289e5a9e71afd7909326aa4caea92f7557ee0e2283d8c31f0c3401ce67248a45" ], "threshold": 1 }, "targets": { "keyids": [ "808aa256a8172bb0cb961767c6768e55ccf732c99afccc6145752d7a328b7937" ], "threshold": 1 }, "timestamp": { "keyids": [ "aa3255b4e8e17e566d2bdbea0e5842978f9fa1d2fa9ec76ae76b146164acbfc8" ], "threshold": 1 } }, "consistent_snapshot": false }, "signatures": [ { "keyid": "ce72db3f938914205461a415c9b7b91267a2079df991fd6283aa8461988c1add", "sig": "afab8b34f93c99e200505cc6f0d6a9c4e757a7229f96bd31ab618f8bc4c3abe491b372bfec9d231136de46c1e183df194d372360ee9d32652f8c04d7574e2608" } ] }client/testdata/go-tuf/consistent-snapshot-false/0/repository/snapshot.json000066400000000000000000000011511453140004500275660ustar00rootroot00000000000000{ "signed": { "_type": "snapshot", "spec_version": "1.0", "version": 1, "expires": "2100-01-01T00:00:00Z", "meta": { "targets.json": { "length": 588, "hashes": { "sha512": "2532c645262d3a15db2afc561d9ae75db96c3b42abe8bd994c173e45ea70177bc1b080e211d92b6f244d267dcb0a0bc2fbcd1c2b008881c19f950c5e8c0035ec" }, "version": 1 } } }, "signatures": [ { "keyid": "289e5a9e71afd7909326aa4caea92f7557ee0e2283d8c31f0c3401ce67248a45", "sig": "6efc0efbc7a3b849a58e9cb394af10fe6d199d2ead18e6931932c85f44269d5d73e8f18808d0d9b66fbfd9926b0bda9d2d26a7508a960758c0b84eb8aa31ac0b" } ] }client/testdata/go-tuf/consistent-snapshot-false/0/repository/targets.json000066400000000000000000000011141453140004500273770ustar00rootroot00000000000000{ "signed": { "_type": "targets", "spec_version": "1.0", "version": 1, "expires": "2100-01-01T00:00:00Z", "targets": { "0": { "length": 1, "hashes": { "sha512": "31bca02094eb78126a517b206a88c73cfa9ec6f704c7030d18212cace820f025f00bf0ea68dbf3f3a5436ca63b53bf7bf80ad8d5de7d8359d0b7fed9dbc3ab99" } } } }, "signatures": [ { "keyid": "808aa256a8172bb0cb961767c6768e55ccf732c99afccc6145752d7a328b7937", "sig": "4d5c3a5da43f3792d077c1128fa28585982ff2957fae59be02a831fc920d0b91cbeaa99fd6c15066ec4da8bf12f993440a90d1624fd7b0a68070e5d60ed2500f" } ] }client/testdata/go-tuf/consistent-snapshot-false/0/repository/targets/000077500000000000000000000000001453140004500265075ustar00rootroot00000000000000client/testdata/go-tuf/consistent-snapshot-false/0/repository/targets/0000066400000000000000000000000011453140004500265600ustar00rootroot000000000000000client/testdata/go-tuf/consistent-snapshot-false/0/repository/timestamp.json000066400000000000000000000011531453140004500277340ustar00rootroot00000000000000{ "signed": { "_type": "timestamp", "spec_version": "1.0", "version": 1, "expires": "2100-01-01T00:00:00Z", "meta": { "snapshot.json": { "length": 617, "hashes": { "sha512": "6fd318e2cc3bca35d2f597e504c095137263ffe3e72f5e5c64e6c7860bea1207448c8994066ffc1cf20898a9d1586cdf09be4e3ea06f69593ed5c7d772f8dfd1" }, "version": 1 } } }, "signatures": [ { "keyid": "aa3255b4e8e17e566d2bdbea0e5842978f9fa1d2fa9ec76ae76b146164acbfc8", "sig": "943b219ab6c651793da08d8cf38c7d25fb959c75161b5b86562983841433f9f38c237bb87cf6ecfbb3cb7c78113a3ed2651ee57d3515e7edfc3bebbf349f2809" } ] }client/testdata/go-tuf/consistent-snapshot-false/1/000077500000000000000000000000001453140004500226205ustar00rootroot00000000000000client/testdata/go-tuf/consistent-snapshot-false/1/repository/000077500000000000000000000000001453140004500250375ustar00rootroot00000000000000client/testdata/go-tuf/consistent-snapshot-false/1/repository/1.root.json000077700000000000000000000000001453140004500340702../../0/repository/1.root.jsonustar00rootroot00000000000000client/testdata/go-tuf/consistent-snapshot-false/1/repository/2.root.json000066400000000000000000000045501453140004500270610ustar00rootroot00000000000000{ "signed": { "_type": "root", "spec_version": "1.0", "version": 2, "expires": "2100-01-01T00:00:00Z", "keys": { "289e5a9e71afd7909326aa4caea92f7557ee0e2283d8c31f0c3401ce67248a45": { "keytype": "ed25519", "scheme": "ed25519", "keyid_hash_algorithms": [ "sha256", "sha512" ], "keyval": { "public": "d482fa4805a50870aa1356ace6b764f7ab47ed4dc38f49b1a189afa25f179e94" } }, "808aa256a8172bb0cb961767c6768e55ccf732c99afccc6145752d7a328b7937": { "keytype": "ed25519", "scheme": "ed25519", "keyid_hash_algorithms": [ "sha256", "sha512" ], "keyval": { "public": "62f71f99c788f16bcdc8bb252455e3a690350e4ddea5a6aab1f9a3aaabcf369a" } }, "aa3255b4e8e17e566d2bdbea0e5842978f9fa1d2fa9ec76ae76b146164acbfc8": { "keytype": "ed25519", "scheme": "ed25519", "keyid_hash_algorithms": [ "sha256", "sha512" ], "keyval": { "public": "8656ad20568cd3534c405e4d9a84b0c6e6163f7f66434df77416502835b9b160" } }, "b2403f96ae9b1089d8cbc15bbc35e9acbacd7984571f951b43aab56aedcfa84f": { "keytype": "ed25519", "scheme": "ed25519", "keyid_hash_algorithms": [ "sha256", "sha512" ], "keyval": { "public": "153986a7370e002f377dd68797e7466c421180c1571e233de2f8ab41c8af4f54" } } }, "roles": { "root": { "keyids": [ "b2403f96ae9b1089d8cbc15bbc35e9acbacd7984571f951b43aab56aedcfa84f" ], "threshold": 1 }, "snapshot": { "keyids": [ "289e5a9e71afd7909326aa4caea92f7557ee0e2283d8c31f0c3401ce67248a45" ], "threshold": 1 }, "targets": { "keyids": [ "808aa256a8172bb0cb961767c6768e55ccf732c99afccc6145752d7a328b7937" ], "threshold": 1 }, "timestamp": { "keyids": [ "aa3255b4e8e17e566d2bdbea0e5842978f9fa1d2fa9ec76ae76b146164acbfc8" ], "threshold": 1 } }, "consistent_snapshot": false }, "signatures": [ { "keyid": "b2403f96ae9b1089d8cbc15bbc35e9acbacd7984571f951b43aab56aedcfa84f", "sig": "20e91b55c995989b270091b714347b15169285cb636ef05d68d49ed7b7a96ebfda13898e0d9ef928c382873b9dba90dca492dbf705d56a4b293adaaed574340f" }, { "keyid": "ce72db3f938914205461a415c9b7b91267a2079df991fd6283aa8461988c1add", "sig": "65f63745aa8bd39132f827c427ea6d87f620ec805d9f376b6a8400dc3db7eb964e5423d31ed08867916d039661a70d6bf255bca552248021a4e78b5d357c2b0f" } ] }client/testdata/go-tuf/consistent-snapshot-false/1/repository/root.json000066400000000000000000000045501453140004500267210ustar00rootroot00000000000000{ "signed": { "_type": "root", "spec_version": "1.0", "version": 2, "expires": "2100-01-01T00:00:00Z", "keys": { "289e5a9e71afd7909326aa4caea92f7557ee0e2283d8c31f0c3401ce67248a45": { "keytype": "ed25519", "scheme": "ed25519", "keyid_hash_algorithms": [ "sha256", "sha512" ], "keyval": { "public": "d482fa4805a50870aa1356ace6b764f7ab47ed4dc38f49b1a189afa25f179e94" } }, "808aa256a8172bb0cb961767c6768e55ccf732c99afccc6145752d7a328b7937": { "keytype": "ed25519", "scheme": "ed25519", "keyid_hash_algorithms": [ "sha256", "sha512" ], "keyval": { "public": "62f71f99c788f16bcdc8bb252455e3a690350e4ddea5a6aab1f9a3aaabcf369a" } }, "aa3255b4e8e17e566d2bdbea0e5842978f9fa1d2fa9ec76ae76b146164acbfc8": { "keytype": "ed25519", "scheme": "ed25519", "keyid_hash_algorithms": [ "sha256", "sha512" ], "keyval": { "public": "8656ad20568cd3534c405e4d9a84b0c6e6163f7f66434df77416502835b9b160" } }, "b2403f96ae9b1089d8cbc15bbc35e9acbacd7984571f951b43aab56aedcfa84f": { "keytype": "ed25519", "scheme": "ed25519", "keyid_hash_algorithms": [ "sha256", "sha512" ], "keyval": { "public": "153986a7370e002f377dd68797e7466c421180c1571e233de2f8ab41c8af4f54" } } }, "roles": { "root": { "keyids": [ "b2403f96ae9b1089d8cbc15bbc35e9acbacd7984571f951b43aab56aedcfa84f" ], "threshold": 1 }, "snapshot": { "keyids": [ "289e5a9e71afd7909326aa4caea92f7557ee0e2283d8c31f0c3401ce67248a45" ], "threshold": 1 }, "targets": { "keyids": [ "808aa256a8172bb0cb961767c6768e55ccf732c99afccc6145752d7a328b7937" ], "threshold": 1 }, "timestamp": { "keyids": [ "aa3255b4e8e17e566d2bdbea0e5842978f9fa1d2fa9ec76ae76b146164acbfc8" ], "threshold": 1 } }, "consistent_snapshot": false }, "signatures": [ { "keyid": "b2403f96ae9b1089d8cbc15bbc35e9acbacd7984571f951b43aab56aedcfa84f", "sig": "20e91b55c995989b270091b714347b15169285cb636ef05d68d49ed7b7a96ebfda13898e0d9ef928c382873b9dba90dca492dbf705d56a4b293adaaed574340f" }, { "keyid": "ce72db3f938914205461a415c9b7b91267a2079df991fd6283aa8461988c1add", "sig": "65f63745aa8bd39132f827c427ea6d87f620ec805d9f376b6a8400dc3db7eb964e5423d31ed08867916d039661a70d6bf255bca552248021a4e78b5d357c2b0f" } ] }client/testdata/go-tuf/consistent-snapshot-false/1/repository/snapshot.json000066400000000000000000000011511453140004500275670ustar00rootroot00000000000000{ "signed": { "_type": "snapshot", "spec_version": "1.0", "version": 2, "expires": "2100-01-01T00:00:00Z", "meta": { "targets.json": { "length": 789, "hashes": { "sha512": "7a919ed2a5fb7cf80252c9307ac4d27bc2ab54f9bb803389977dcc3d09ae7dff533639c1b19a810d2b212a5c5e904e0f73ab01324ba79dffbb9f7488204caf2a" }, "version": 2 } } }, "signatures": [ { "keyid": "289e5a9e71afd7909326aa4caea92f7557ee0e2283d8c31f0c3401ce67248a45", "sig": "9a3734441c38daa3275ba60a2178b8dfe5f98296f408bf434144b4bd4f68af73b7f6860e6f2e638b93144ac5bebe361642bbff66a1195596bb8c841429b34508" } ] }client/testdata/go-tuf/consistent-snapshot-false/1/repository/targets.json000066400000000000000000000014251453140004500274050ustar00rootroot00000000000000{ "signed": { "_type": "targets", "spec_version": "1.0", "version": 2, "expires": "2100-01-01T00:00:00Z", "targets": { "0": { "length": 1, "hashes": { "sha512": "31bca02094eb78126a517b206a88c73cfa9ec6f704c7030d18212cace820f025f00bf0ea68dbf3f3a5436ca63b53bf7bf80ad8d5de7d8359d0b7fed9dbc3ab99" } }, "1": { "length": 1, "hashes": { "sha512": "4dff4ea340f0a823f15d3f4f01ab62eae0e5da579ccb851f8db9dfe84c58b2b37b89903a740e1ee172da793a6e79d560e5f7f9bd058a12a280433ed6fa46510a" } } } }, "signatures": [ { "keyid": "808aa256a8172bb0cb961767c6768e55ccf732c99afccc6145752d7a328b7937", "sig": "81bcf5921834a20b8b0946815ad4316f43ffce20b3793e6653dc5fd4b98f1c6318ce2243948574e82414a102717a6f2d731250b3191c54abc8391fd867503e0b" } ] }client/testdata/go-tuf/consistent-snapshot-false/1/repository/targets/000077500000000000000000000000001453140004500265105ustar00rootroot00000000000000client/testdata/go-tuf/consistent-snapshot-false/1/repository/targets/0000077700000000000000000000000001453140004500335372../../../0/repository/targets/0ustar00rootroot00000000000000client/testdata/go-tuf/consistent-snapshot-false/1/repository/targets/1000066400000000000000000000000011453140004500265620ustar00rootroot000000000000001client/testdata/go-tuf/consistent-snapshot-false/1/repository/timestamp.json000066400000000000000000000011531453140004500277350ustar00rootroot00000000000000{ "signed": { "_type": "timestamp", "spec_version": "1.0", "version": 2, "expires": "2100-01-01T00:00:00Z", "meta": { "snapshot.json": { "length": 617, "hashes": { "sha512": "d7204efe9ded4f18d679d75054f43b02b20d74189ea81ad90a67399a8884a810e380a4d343e284c4b6fde506e22a464038871d06950166548a84a76344e2bf3a" }, "version": 2 } } }, "signatures": [ { "keyid": "aa3255b4e8e17e566d2bdbea0e5842978f9fa1d2fa9ec76ae76b146164acbfc8", "sig": "85c5afdd9dd3777d2cb31721519ab2942edffc9e1282b65b2cede505a469051ac5e86388461db49f948a5998b132dddb5ce0156d21622a6d2201fb93322de20f" } ] }client/testdata/go-tuf/consistent-snapshot-false/2/000077500000000000000000000000001453140004500226215ustar00rootroot00000000000000client/testdata/go-tuf/consistent-snapshot-false/2/repository/000077500000000000000000000000001453140004500250405ustar00rootroot00000000000000client/testdata/go-tuf/consistent-snapshot-false/2/repository/1.root.json000077700000000000000000000000001453140004500340722../../1/repository/1.root.jsonustar00rootroot00000000000000client/testdata/go-tuf/consistent-snapshot-false/2/repository/2.root.json000077700000000000000000000000001453140004500340742../../1/repository/2.root.jsonustar00rootroot00000000000000client/testdata/go-tuf/consistent-snapshot-false/2/repository/3.root.json000066400000000000000000000042021453140004500270550ustar00rootroot00000000000000{ "signed": { "_type": "root", "spec_version": "1.0", "version": 3, "expires": "2100-01-01T00:00:00Z", "keys": { "289e5a9e71afd7909326aa4caea92f7557ee0e2283d8c31f0c3401ce67248a45": { "keytype": "ed25519", "scheme": "ed25519", "keyid_hash_algorithms": [ "sha256", "sha512" ], "keyval": { "public": "d482fa4805a50870aa1356ace6b764f7ab47ed4dc38f49b1a189afa25f179e94" } }, "aa3255b4e8e17e566d2bdbea0e5842978f9fa1d2fa9ec76ae76b146164acbfc8": { "keytype": "ed25519", "scheme": "ed25519", "keyid_hash_algorithms": [ "sha256", "sha512" ], "keyval": { "public": "8656ad20568cd3534c405e4d9a84b0c6e6163f7f66434df77416502835b9b160" } }, "b2403f96ae9b1089d8cbc15bbc35e9acbacd7984571f951b43aab56aedcfa84f": { "keytype": "ed25519", "scheme": "ed25519", "keyid_hash_algorithms": [ "sha256", "sha512" ], "keyval": { "public": "153986a7370e002f377dd68797e7466c421180c1571e233de2f8ab41c8af4f54" } }, "bc8f087663855564b358ddf314d5932ab920af17bd1df2f58b397afd82d76dc1": { "keytype": "ed25519", "scheme": "ed25519", "keyid_hash_algorithms": [ "sha256", "sha512" ], "keyval": { "public": "aee574e56780ea1709a8b56e02d4ffdd9a3a1deaed61e2eb0701f376a4422e42" } } }, "roles": { "root": { "keyids": [ "b2403f96ae9b1089d8cbc15bbc35e9acbacd7984571f951b43aab56aedcfa84f" ], "threshold": 1 }, "snapshot": { "keyids": [ "289e5a9e71afd7909326aa4caea92f7557ee0e2283d8c31f0c3401ce67248a45" ], "threshold": 1 }, "targets": { "keyids": [ "bc8f087663855564b358ddf314d5932ab920af17bd1df2f58b397afd82d76dc1" ], "threshold": 1 }, "timestamp": { "keyids": [ "aa3255b4e8e17e566d2bdbea0e5842978f9fa1d2fa9ec76ae76b146164acbfc8" ], "threshold": 1 } }, "consistent_snapshot": false }, "signatures": [ { "keyid": "b2403f96ae9b1089d8cbc15bbc35e9acbacd7984571f951b43aab56aedcfa84f", "sig": "cfe8b0919d1707ca6c23501909b77c8b94d1ede2b85a3081ab7146244cc6fe436b06ad58163919276f2e37ddbcc13a0dde4851301053dcea2a9bcabc5e1cd004" } ] }client/testdata/go-tuf/consistent-snapshot-false/2/repository/root.json000066400000000000000000000042021453140004500267140ustar00rootroot00000000000000{ "signed": { "_type": "root", "spec_version": "1.0", "version": 3, "expires": "2100-01-01T00:00:00Z", "keys": { "289e5a9e71afd7909326aa4caea92f7557ee0e2283d8c31f0c3401ce67248a45": { "keytype": "ed25519", "scheme": "ed25519", "keyid_hash_algorithms": [ "sha256", "sha512" ], "keyval": { "public": "d482fa4805a50870aa1356ace6b764f7ab47ed4dc38f49b1a189afa25f179e94" } }, "aa3255b4e8e17e566d2bdbea0e5842978f9fa1d2fa9ec76ae76b146164acbfc8": { "keytype": "ed25519", "scheme": "ed25519", "keyid_hash_algorithms": [ "sha256", "sha512" ], "keyval": { "public": "8656ad20568cd3534c405e4d9a84b0c6e6163f7f66434df77416502835b9b160" } }, "b2403f96ae9b1089d8cbc15bbc35e9acbacd7984571f951b43aab56aedcfa84f": { "keytype": "ed25519", "scheme": "ed25519", "keyid_hash_algorithms": [ "sha256", "sha512" ], "keyval": { "public": "153986a7370e002f377dd68797e7466c421180c1571e233de2f8ab41c8af4f54" } }, "bc8f087663855564b358ddf314d5932ab920af17bd1df2f58b397afd82d76dc1": { "keytype": "ed25519", "scheme": "ed25519", "keyid_hash_algorithms": [ "sha256", "sha512" ], "keyval": { "public": "aee574e56780ea1709a8b56e02d4ffdd9a3a1deaed61e2eb0701f376a4422e42" } } }, "roles": { "root": { "keyids": [ "b2403f96ae9b1089d8cbc15bbc35e9acbacd7984571f951b43aab56aedcfa84f" ], "threshold": 1 }, "snapshot": { "keyids": [ "289e5a9e71afd7909326aa4caea92f7557ee0e2283d8c31f0c3401ce67248a45" ], "threshold": 1 }, "targets": { "keyids": [ "bc8f087663855564b358ddf314d5932ab920af17bd1df2f58b397afd82d76dc1" ], "threshold": 1 }, "timestamp": { "keyids": [ "aa3255b4e8e17e566d2bdbea0e5842978f9fa1d2fa9ec76ae76b146164acbfc8" ], "threshold": 1 } }, "consistent_snapshot": false }, "signatures": [ { "keyid": "b2403f96ae9b1089d8cbc15bbc35e9acbacd7984571f951b43aab56aedcfa84f", "sig": "cfe8b0919d1707ca6c23501909b77c8b94d1ede2b85a3081ab7146244cc6fe436b06ad58163919276f2e37ddbcc13a0dde4851301053dcea2a9bcabc5e1cd004" } ] }client/testdata/go-tuf/consistent-snapshot-false/2/repository/snapshot.json000066400000000000000000000011511453140004500275700ustar00rootroot00000000000000{ "signed": { "_type": "snapshot", "spec_version": "1.0", "version": 3, "expires": "2100-01-01T00:00:00Z", "meta": { "targets.json": { "length": 990, "hashes": { "sha512": "987022c23793b3d234d422c3ed4525f8c3771887db610fb2e7d6b455d27ad8b1b4a957a699d519c03754fe4feeb387ec84c95e1edac1d4e9b186bfbdff76ad10" }, "version": 3 } } }, "signatures": [ { "keyid": "289e5a9e71afd7909326aa4caea92f7557ee0e2283d8c31f0c3401ce67248a45", "sig": "31896c9165a37aa54cf1c4d5f936035e092b1cf4c233ef35cd12c987aaa02de7ec99f26c198984fe0dcc21765d096b25cd67e7ca058613b2b2abef3193dd880d" } ] }client/testdata/go-tuf/consistent-snapshot-false/2/repository/targets.json000066400000000000000000000017361453140004500274130ustar00rootroot00000000000000{ "signed": { "_type": "targets", "spec_version": "1.0", "version": 3, "expires": "2100-01-01T00:00:00Z", "targets": { "0": { "length": 1, "hashes": { "sha512": "31bca02094eb78126a517b206a88c73cfa9ec6f704c7030d18212cace820f025f00bf0ea68dbf3f3a5436ca63b53bf7bf80ad8d5de7d8359d0b7fed9dbc3ab99" } }, "1": { "length": 1, "hashes": { "sha512": "4dff4ea340f0a823f15d3f4f01ab62eae0e5da579ccb851f8db9dfe84c58b2b37b89903a740e1ee172da793a6e79d560e5f7f9bd058a12a280433ed6fa46510a" } }, "2": { "length": 1, "hashes": { "sha512": "40b244112641dd78dd4f93b6c9190dd46e0099194d5a44257b7efad6ef9ff4683da1eda0244448cb343aa688f5d3efd7314dafe580ac0bcbf115aeca9e8dc114" } } } }, "signatures": [ { "keyid": "bc8f087663855564b358ddf314d5932ab920af17bd1df2f58b397afd82d76dc1", "sig": "09593c7b47f4dbf1e8ac949fa010279ffbbd36070a54a89b689378441e8111602d4236fa2962063778c82027d4746a8973ba8fea86e9c105190da9fa362d8b0c" } ] }client/testdata/go-tuf/consistent-snapshot-false/2/repository/targets/000077500000000000000000000000001453140004500265115ustar00rootroot00000000000000client/testdata/go-tuf/consistent-snapshot-false/2/repository/targets/0000077700000000000000000000000001453140004500335412../../../1/repository/targets/0ustar00rootroot00000000000000client/testdata/go-tuf/consistent-snapshot-false/2/repository/targets/1000077700000000000000000000000001453140004500335432../../../1/repository/targets/1ustar00rootroot00000000000000client/testdata/go-tuf/consistent-snapshot-false/2/repository/targets/2000066400000000000000000000000011453140004500265640ustar00rootroot000000000000002client/testdata/go-tuf/consistent-snapshot-false/2/repository/timestamp.json000066400000000000000000000011531453140004500277360ustar00rootroot00000000000000{ "signed": { "_type": "timestamp", "spec_version": "1.0", "version": 3, "expires": "2100-01-01T00:00:00Z", "meta": { "snapshot.json": { "length": 617, "hashes": { "sha512": "70d2f64bc810a0ae1c827c28eed47304c3a9c57402447d129aa3ac851d809a48bd0421aaa99e9e49055984e77f221510415cf27aca8f30f4db1767d6b7bd6024" }, "version": 3 } } }, "signatures": [ { "keyid": "aa3255b4e8e17e566d2bdbea0e5842978f9fa1d2fa9ec76ae76b146164acbfc8", "sig": "22367ebcf7c5265260b288e9fec6110257b8c8745af25f2b14c5d347ddab94f46893926bdd37c58d142089419708e446c5e3c1af5c47c51187fe69ca95038605" } ] }client/testdata/go-tuf/consistent-snapshot-false/3/000077500000000000000000000000001453140004500226225ustar00rootroot00000000000000client/testdata/go-tuf/consistent-snapshot-false/3/repository/000077500000000000000000000000001453140004500250415ustar00rootroot00000000000000client/testdata/go-tuf/consistent-snapshot-false/3/repository/1.root.json000077700000000000000000000000001453140004500340742../../2/repository/1.root.jsonustar00rootroot00000000000000client/testdata/go-tuf/consistent-snapshot-false/3/repository/2.root.json000077700000000000000000000000001453140004500340762../../2/repository/2.root.jsonustar00rootroot00000000000000client/testdata/go-tuf/consistent-snapshot-false/3/repository/3.root.json000077700000000000000000000000001453140004500341002../../2/repository/3.root.jsonustar00rootroot00000000000000client/testdata/go-tuf/consistent-snapshot-false/3/repository/4.root.json000066400000000000000000000042021453140004500270570ustar00rootroot00000000000000{ "signed": { "_type": "root", "spec_version": "1.0", "version": 4, "expires": "2100-01-01T00:00:00Z", "keys": { "aa3255b4e8e17e566d2bdbea0e5842978f9fa1d2fa9ec76ae76b146164acbfc8": { "keytype": "ed25519", "scheme": "ed25519", "keyid_hash_algorithms": [ "sha256", "sha512" ], "keyval": { "public": "8656ad20568cd3534c405e4d9a84b0c6e6163f7f66434df77416502835b9b160" } }, "b096bc2d67080cec22e6c0bbaa69cfd9d714b9e9ad847d255f950b2728855fef": { "keytype": "ed25519", "scheme": "ed25519", "keyid_hash_algorithms": [ "sha256", "sha512" ], "keyval": { "public": "722dbc861813bb5b568524d62083e875c08e66fed1694d9161d253fa163dd86f" } }, "b2403f96ae9b1089d8cbc15bbc35e9acbacd7984571f951b43aab56aedcfa84f": { "keytype": "ed25519", "scheme": "ed25519", "keyid_hash_algorithms": [ "sha256", "sha512" ], "keyval": { "public": "153986a7370e002f377dd68797e7466c421180c1571e233de2f8ab41c8af4f54" } }, "bc8f087663855564b358ddf314d5932ab920af17bd1df2f58b397afd82d76dc1": { "keytype": "ed25519", "scheme": "ed25519", "keyid_hash_algorithms": [ "sha256", "sha512" ], "keyval": { "public": "aee574e56780ea1709a8b56e02d4ffdd9a3a1deaed61e2eb0701f376a4422e42" } } }, "roles": { "root": { "keyids": [ "b2403f96ae9b1089d8cbc15bbc35e9acbacd7984571f951b43aab56aedcfa84f" ], "threshold": 1 }, "snapshot": { "keyids": [ "b096bc2d67080cec22e6c0bbaa69cfd9d714b9e9ad847d255f950b2728855fef" ], "threshold": 1 }, "targets": { "keyids": [ "bc8f087663855564b358ddf314d5932ab920af17bd1df2f58b397afd82d76dc1" ], "threshold": 1 }, "timestamp": { "keyids": [ "aa3255b4e8e17e566d2bdbea0e5842978f9fa1d2fa9ec76ae76b146164acbfc8" ], "threshold": 1 } }, "consistent_snapshot": false }, "signatures": [ { "keyid": "b2403f96ae9b1089d8cbc15bbc35e9acbacd7984571f951b43aab56aedcfa84f", "sig": "3004c4b60645c6cca18e33835837a1639eead05355aa549f1d1304a22304e7058a50fb6188fc3617a47248eb7481de7a625f036cc69b53daf04a103b12768401" } ] }client/testdata/go-tuf/consistent-snapshot-false/3/repository/root.json000066400000000000000000000042021453140004500267150ustar00rootroot00000000000000{ "signed": { "_type": "root", "spec_version": "1.0", "version": 4, "expires": "2100-01-01T00:00:00Z", "keys": { "aa3255b4e8e17e566d2bdbea0e5842978f9fa1d2fa9ec76ae76b146164acbfc8": { "keytype": "ed25519", "scheme": "ed25519", "keyid_hash_algorithms": [ "sha256", "sha512" ], "keyval": { "public": "8656ad20568cd3534c405e4d9a84b0c6e6163f7f66434df77416502835b9b160" } }, "b096bc2d67080cec22e6c0bbaa69cfd9d714b9e9ad847d255f950b2728855fef": { "keytype": "ed25519", "scheme": "ed25519", "keyid_hash_algorithms": [ "sha256", "sha512" ], "keyval": { "public": "722dbc861813bb5b568524d62083e875c08e66fed1694d9161d253fa163dd86f" } }, "b2403f96ae9b1089d8cbc15bbc35e9acbacd7984571f951b43aab56aedcfa84f": { "keytype": "ed25519", "scheme": "ed25519", "keyid_hash_algorithms": [ "sha256", "sha512" ], "keyval": { "public": "153986a7370e002f377dd68797e7466c421180c1571e233de2f8ab41c8af4f54" } }, "bc8f087663855564b358ddf314d5932ab920af17bd1df2f58b397afd82d76dc1": { "keytype": "ed25519", "scheme": "ed25519", "keyid_hash_algorithms": [ "sha256", "sha512" ], "keyval": { "public": "aee574e56780ea1709a8b56e02d4ffdd9a3a1deaed61e2eb0701f376a4422e42" } } }, "roles": { "root": { "keyids": [ "b2403f96ae9b1089d8cbc15bbc35e9acbacd7984571f951b43aab56aedcfa84f" ], "threshold": 1 }, "snapshot": { "keyids": [ "b096bc2d67080cec22e6c0bbaa69cfd9d714b9e9ad847d255f950b2728855fef" ], "threshold": 1 }, "targets": { "keyids": [ "bc8f087663855564b358ddf314d5932ab920af17bd1df2f58b397afd82d76dc1" ], "threshold": 1 }, "timestamp": { "keyids": [ "aa3255b4e8e17e566d2bdbea0e5842978f9fa1d2fa9ec76ae76b146164acbfc8" ], "threshold": 1 } }, "consistent_snapshot": false }, "signatures": [ { "keyid": "b2403f96ae9b1089d8cbc15bbc35e9acbacd7984571f951b43aab56aedcfa84f", "sig": "3004c4b60645c6cca18e33835837a1639eead05355aa549f1d1304a22304e7058a50fb6188fc3617a47248eb7481de7a625f036cc69b53daf04a103b12768401" } ] }client/testdata/go-tuf/consistent-snapshot-false/3/repository/snapshot.json000066400000000000000000000011521453140004500275720ustar00rootroot00000000000000{ "signed": { "_type": "snapshot", "spec_version": "1.0", "version": 4, "expires": "2100-01-01T00:00:00Z", "meta": { "targets.json": { "length": 1191, "hashes": { "sha512": "2bf10fb9469cb5f44ccae3c8dac2f70c19e7c58479f74f21aca7a424774ed7ef43295fff3c05f7cfe457b5832366b64e0550874775e277d7233c060e9f94e140" }, "version": 4 } } }, "signatures": [ { "keyid": "b096bc2d67080cec22e6c0bbaa69cfd9d714b9e9ad847d255f950b2728855fef", "sig": "c5efdc1b461ae319c991fd1840771d94dfc8a3e655ac233901a27959e9f2c3e7ab61b83e3d674caf9e2a6043e776d7c32a2c36dbf0922f7f08059d08fc26720a" } ] }client/testdata/go-tuf/consistent-snapshot-false/3/repository/targets.json000066400000000000000000000022471453140004500274120ustar00rootroot00000000000000{ "signed": { "_type": "targets", "spec_version": "1.0", "version": 4, "expires": "2100-01-01T00:00:00Z", "targets": { "0": { "length": 1, "hashes": { "sha512": "31bca02094eb78126a517b206a88c73cfa9ec6f704c7030d18212cace820f025f00bf0ea68dbf3f3a5436ca63b53bf7bf80ad8d5de7d8359d0b7fed9dbc3ab99" } }, "1": { "length": 1, "hashes": { "sha512": "4dff4ea340f0a823f15d3f4f01ab62eae0e5da579ccb851f8db9dfe84c58b2b37b89903a740e1ee172da793a6e79d560e5f7f9bd058a12a280433ed6fa46510a" } }, "2": { "length": 1, "hashes": { "sha512": "40b244112641dd78dd4f93b6c9190dd46e0099194d5a44257b7efad6ef9ff4683da1eda0244448cb343aa688f5d3efd7314dafe580ac0bcbf115aeca9e8dc114" } }, "3": { "length": 1, "hashes": { "sha512": "3bafbf08882a2d10133093a1b8433f50563b93c14acd05b79028eb1d12799027241450980651994501423a66c276ae26c43b739bc65c4e16b10c3af6c202aebb" } } } }, "signatures": [ { "keyid": "bc8f087663855564b358ddf314d5932ab920af17bd1df2f58b397afd82d76dc1", "sig": "7bfe0a63ee324034807b5341336d9d2d64e9ef3936086577b5bbcc6d021b4656bd6bf14d817bbb3908e4dcb05391d1b4031b527c14d942c2d1e38275d5ff1308" } ] }client/testdata/go-tuf/consistent-snapshot-false/3/repository/targets/000077500000000000000000000000001453140004500265125ustar00rootroot00000000000000client/testdata/go-tuf/consistent-snapshot-false/3/repository/targets/0000077700000000000000000000000001453140004500335432../../../2/repository/targets/0ustar00rootroot00000000000000client/testdata/go-tuf/consistent-snapshot-false/3/repository/targets/1000077700000000000000000000000001453140004500335452../../../2/repository/targets/1ustar00rootroot00000000000000client/testdata/go-tuf/consistent-snapshot-false/3/repository/targets/2000077700000000000000000000000001453140004500335472../../../2/repository/targets/2ustar00rootroot00000000000000client/testdata/go-tuf/consistent-snapshot-false/3/repository/targets/3000066400000000000000000000000011453140004500265660ustar00rootroot000000000000003client/testdata/go-tuf/consistent-snapshot-false/3/repository/timestamp.json000066400000000000000000000011531453140004500277370ustar00rootroot00000000000000{ "signed": { "_type": "timestamp", "spec_version": "1.0", "version": 4, "expires": "2100-01-01T00:00:00Z", "meta": { "snapshot.json": { "length": 618, "hashes": { "sha512": "4ddee1c0c54af1a3dc54897af33c2457525963059c29583e6df65b9b238732070bd8eb470201154f2d2fa5f8bdf37e01a86e6a53c2bcfe0ff302571458c1898d" }, "version": 4 } } }, "signatures": [ { "keyid": "aa3255b4e8e17e566d2bdbea0e5842978f9fa1d2fa9ec76ae76b146164acbfc8", "sig": "585cdcc87c23711642449d469df8bedb53a67b65ac75c303d13b7022c8c34c1db70c926e009c2438639af3be1d613f7ce4c7e28020865ad5ad93a5b085a76005" } ] }client/testdata/go-tuf/consistent-snapshot-false/4/000077500000000000000000000000001453140004500226235ustar00rootroot00000000000000client/testdata/go-tuf/consistent-snapshot-false/4/repository/000077500000000000000000000000001453140004500250425ustar00rootroot00000000000000client/testdata/go-tuf/consistent-snapshot-false/4/repository/1.root.json000077700000000000000000000000001453140004500340762../../3/repository/1.root.jsonustar00rootroot00000000000000client/testdata/go-tuf/consistent-snapshot-false/4/repository/2.root.json000077700000000000000000000000001453140004500341002../../3/repository/2.root.jsonustar00rootroot00000000000000client/testdata/go-tuf/consistent-snapshot-false/4/repository/3.root.json000077700000000000000000000000001453140004500341022../../3/repository/3.root.jsonustar00rootroot00000000000000client/testdata/go-tuf/consistent-snapshot-false/4/repository/4.root.json000077700000000000000000000000001453140004500341042../../3/repository/4.root.jsonustar00rootroot00000000000000client/testdata/go-tuf/consistent-snapshot-false/4/repository/5.root.json000066400000000000000000000042021453140004500270610ustar00rootroot00000000000000{ "signed": { "_type": "root", "spec_version": "1.0", "version": 5, "expires": "2100-01-01T00:00:00Z", "keys": { "a8eaf6de5aecfd0a72b60295b1e1cd12f349079ebcbbb63dbe7072f162e85315": { "keytype": "ed25519", "scheme": "ed25519", "keyid_hash_algorithms": [ "sha256", "sha512" ], "keyval": { "public": "3ab34b0c2d4eadccaa0f0cf22ced07b552394063a9de2806993d022360dffc76" } }, "b096bc2d67080cec22e6c0bbaa69cfd9d714b9e9ad847d255f950b2728855fef": { "keytype": "ed25519", "scheme": "ed25519", "keyid_hash_algorithms": [ "sha256", "sha512" ], "keyval": { "public": "722dbc861813bb5b568524d62083e875c08e66fed1694d9161d253fa163dd86f" } }, "b2403f96ae9b1089d8cbc15bbc35e9acbacd7984571f951b43aab56aedcfa84f": { "keytype": "ed25519", "scheme": "ed25519", "keyid_hash_algorithms": [ "sha256", "sha512" ], "keyval": { "public": "153986a7370e002f377dd68797e7466c421180c1571e233de2f8ab41c8af4f54" } }, "bc8f087663855564b358ddf314d5932ab920af17bd1df2f58b397afd82d76dc1": { "keytype": "ed25519", "scheme": "ed25519", "keyid_hash_algorithms": [ "sha256", "sha512" ], "keyval": { "public": "aee574e56780ea1709a8b56e02d4ffdd9a3a1deaed61e2eb0701f376a4422e42" } } }, "roles": { "root": { "keyids": [ "b2403f96ae9b1089d8cbc15bbc35e9acbacd7984571f951b43aab56aedcfa84f" ], "threshold": 1 }, "snapshot": { "keyids": [ "b096bc2d67080cec22e6c0bbaa69cfd9d714b9e9ad847d255f950b2728855fef" ], "threshold": 1 }, "targets": { "keyids": [ "bc8f087663855564b358ddf314d5932ab920af17bd1df2f58b397afd82d76dc1" ], "threshold": 1 }, "timestamp": { "keyids": [ "a8eaf6de5aecfd0a72b60295b1e1cd12f349079ebcbbb63dbe7072f162e85315" ], "threshold": 1 } }, "consistent_snapshot": false }, "signatures": [ { "keyid": "b2403f96ae9b1089d8cbc15bbc35e9acbacd7984571f951b43aab56aedcfa84f", "sig": "bd2edde6ba4f5cb3a0cc28dca272e2fc0be691575082479f86b82cea4e541a686a0c132c3a7eca231a5782e52e629df92f8f3f89a5b1f57e8b5368986bddfa0e" } ] }client/testdata/go-tuf/consistent-snapshot-false/4/repository/root.json000066400000000000000000000042021453140004500267160ustar00rootroot00000000000000{ "signed": { "_type": "root", "spec_version": "1.0", "version": 5, "expires": "2100-01-01T00:00:00Z", "keys": { "a8eaf6de5aecfd0a72b60295b1e1cd12f349079ebcbbb63dbe7072f162e85315": { "keytype": "ed25519", "scheme": "ed25519", "keyid_hash_algorithms": [ "sha256", "sha512" ], "keyval": { "public": "3ab34b0c2d4eadccaa0f0cf22ced07b552394063a9de2806993d022360dffc76" } }, "b096bc2d67080cec22e6c0bbaa69cfd9d714b9e9ad847d255f950b2728855fef": { "keytype": "ed25519", "scheme": "ed25519", "keyid_hash_algorithms": [ "sha256", "sha512" ], "keyval": { "public": "722dbc861813bb5b568524d62083e875c08e66fed1694d9161d253fa163dd86f" } }, "b2403f96ae9b1089d8cbc15bbc35e9acbacd7984571f951b43aab56aedcfa84f": { "keytype": "ed25519", "scheme": "ed25519", "keyid_hash_algorithms": [ "sha256", "sha512" ], "keyval": { "public": "153986a7370e002f377dd68797e7466c421180c1571e233de2f8ab41c8af4f54" } }, "bc8f087663855564b358ddf314d5932ab920af17bd1df2f58b397afd82d76dc1": { "keytype": "ed25519", "scheme": "ed25519", "keyid_hash_algorithms": [ "sha256", "sha512" ], "keyval": { "public": "aee574e56780ea1709a8b56e02d4ffdd9a3a1deaed61e2eb0701f376a4422e42" } } }, "roles": { "root": { "keyids": [ "b2403f96ae9b1089d8cbc15bbc35e9acbacd7984571f951b43aab56aedcfa84f" ], "threshold": 1 }, "snapshot": { "keyids": [ "b096bc2d67080cec22e6c0bbaa69cfd9d714b9e9ad847d255f950b2728855fef" ], "threshold": 1 }, "targets": { "keyids": [ "bc8f087663855564b358ddf314d5932ab920af17bd1df2f58b397afd82d76dc1" ], "threshold": 1 }, "timestamp": { "keyids": [ "a8eaf6de5aecfd0a72b60295b1e1cd12f349079ebcbbb63dbe7072f162e85315" ], "threshold": 1 } }, "consistent_snapshot": false }, "signatures": [ { "keyid": "b2403f96ae9b1089d8cbc15bbc35e9acbacd7984571f951b43aab56aedcfa84f", "sig": "bd2edde6ba4f5cb3a0cc28dca272e2fc0be691575082479f86b82cea4e541a686a0c132c3a7eca231a5782e52e629df92f8f3f89a5b1f57e8b5368986bddfa0e" } ] }client/testdata/go-tuf/consistent-snapshot-false/4/repository/snapshot.json000066400000000000000000000011521453140004500275730ustar00rootroot00000000000000{ "signed": { "_type": "snapshot", "spec_version": "1.0", "version": 5, "expires": "2100-01-01T00:00:00Z", "meta": { "targets.json": { "length": 1392, "hashes": { "sha512": "93146957ab1f54fe1e8687f408c21a19ad6c033518148bb730b7e635e02f96d9297f1edf12ea5f50354cfcb90385eec9f594d04a08ee876c83759e2314ec8b1a" }, "version": 5 } } }, "signatures": [ { "keyid": "b096bc2d67080cec22e6c0bbaa69cfd9d714b9e9ad847d255f950b2728855fef", "sig": "c9da15fd5b0b359a46503d0a23fa3a4e8e481cb2bdb72d6dbec4852ed6f9d32e186b35071b6ca70ec947e1688458c3476d33991af202b177ffd79ff89955e703" } ] }client/testdata/go-tuf/consistent-snapshot-false/4/repository/targets.json000066400000000000000000000025601453140004500274110ustar00rootroot00000000000000{ "signed": { "_type": "targets", "spec_version": "1.0", "version": 5, "expires": "2100-01-01T00:00:00Z", "targets": { "0": { "length": 1, "hashes": { "sha512": "31bca02094eb78126a517b206a88c73cfa9ec6f704c7030d18212cace820f025f00bf0ea68dbf3f3a5436ca63b53bf7bf80ad8d5de7d8359d0b7fed9dbc3ab99" } }, "1": { "length": 1, "hashes": { "sha512": "4dff4ea340f0a823f15d3f4f01ab62eae0e5da579ccb851f8db9dfe84c58b2b37b89903a740e1ee172da793a6e79d560e5f7f9bd058a12a280433ed6fa46510a" } }, "2": { "length": 1, "hashes": { "sha512": "40b244112641dd78dd4f93b6c9190dd46e0099194d5a44257b7efad6ef9ff4683da1eda0244448cb343aa688f5d3efd7314dafe580ac0bcbf115aeca9e8dc114" } }, "3": { "length": 1, "hashes": { "sha512": "3bafbf08882a2d10133093a1b8433f50563b93c14acd05b79028eb1d12799027241450980651994501423a66c276ae26c43b739bc65c4e16b10c3af6c202aebb" } }, "4": { "length": 1, "hashes": { "sha512": "a321d8b405e3ef2604959847b36d171eebebc4a8941dc70a4784935a4fca5d5813de84dfa049f06549aa61b20848c1633ce81b675286ea8fb53db240d831c568" } } } }, "signatures": [ { "keyid": "bc8f087663855564b358ddf314d5932ab920af17bd1df2f58b397afd82d76dc1", "sig": "68f2346cdbe045e8558b2ccd86be66e15466955167557c704b51d7163838f670c53ab9247c16a4ed0cd4ecc981a7e2a04a350b01548f97654499d6f9c17c4202" } ] }client/testdata/go-tuf/consistent-snapshot-false/4/repository/targets/000077500000000000000000000000001453140004500265135ustar00rootroot00000000000000client/testdata/go-tuf/consistent-snapshot-false/4/repository/targets/0000077700000000000000000000000001453140004500335452../../../3/repository/targets/0ustar00rootroot00000000000000client/testdata/go-tuf/consistent-snapshot-false/4/repository/targets/1000077700000000000000000000000001453140004500335472../../../3/repository/targets/1ustar00rootroot00000000000000client/testdata/go-tuf/consistent-snapshot-false/4/repository/targets/2000077700000000000000000000000001453140004500335512../../../3/repository/targets/2ustar00rootroot00000000000000client/testdata/go-tuf/consistent-snapshot-false/4/repository/targets/3000077700000000000000000000000001453140004500335532../../../3/repository/targets/3ustar00rootroot00000000000000client/testdata/go-tuf/consistent-snapshot-false/4/repository/targets/4000066400000000000000000000000011453140004500265700ustar00rootroot000000000000004client/testdata/go-tuf/consistent-snapshot-false/4/repository/timestamp.json000066400000000000000000000011531453140004500277400ustar00rootroot00000000000000{ "signed": { "_type": "timestamp", "spec_version": "1.0", "version": 5, "expires": "2100-01-01T00:00:00Z", "meta": { "snapshot.json": { "length": 618, "hashes": { "sha512": "066115510f2f7fbb2f5cb0a1c1d00759161d8a92329e9ce54d4b17c06466b5a4423bb8bcc9e47c0a37db5c7d8d3bc01df10c4ea25605778e788a76e3e9ca1e0e" }, "version": 5 } } }, "signatures": [ { "keyid": "a8eaf6de5aecfd0a72b60295b1e1cd12f349079ebcbbb63dbe7072f162e85315", "sig": "84b9e41c93b32eed4bdb6febe70f9bd4db39bbc7f0c7f820f6a078bbb7146df080a9ceaa237303e3f69e49eb33cc63f8ddff8fba8330904f5fe8d7a66f70400e" } ] }client/testdata/go-tuf/consistent-snapshot-false/5/000077500000000000000000000000001453140004500226245ustar00rootroot00000000000000client/testdata/go-tuf/consistent-snapshot-false/5/repository/000077500000000000000000000000001453140004500250435ustar00rootroot00000000000000client/testdata/go-tuf/consistent-snapshot-false/5/repository/1.root.json000077700000000000000000000000001453140004500341002../../4/repository/1.root.jsonustar00rootroot00000000000000client/testdata/go-tuf/consistent-snapshot-false/5/repository/2.root.json000077700000000000000000000000001453140004500341022../../4/repository/2.root.jsonustar00rootroot00000000000000client/testdata/go-tuf/consistent-snapshot-false/5/repository/3.root.json000077700000000000000000000000001453140004500341042../../4/repository/3.root.jsonustar00rootroot00000000000000client/testdata/go-tuf/consistent-snapshot-false/5/repository/4.root.json000077700000000000000000000000001453140004500341062../../4/repository/4.root.jsonustar00rootroot00000000000000client/testdata/go-tuf/consistent-snapshot-false/5/repository/5.root.json000077700000000000000000000000001453140004500341102../../4/repository/5.root.jsonustar00rootroot00000000000000client/testdata/go-tuf/consistent-snapshot-false/5/repository/root.json000077700000000000000000000000001453140004500336022../../4/repository/root.jsonustar00rootroot00000000000000client/testdata/go-tuf/consistent-snapshot-false/5/repository/snapshot.json000066400000000000000000000011521453140004500275740ustar00rootroot00000000000000{ "signed": { "_type": "snapshot", "spec_version": "1.0", "version": 6, "expires": "2100-01-01T00:00:00Z", "meta": { "targets.json": { "length": 1593, "hashes": { "sha512": "96fa32225e88f9e98db51369fce606039040efc51f098552594132b301228a78c2f2034d059e4d7d6d7bea14ae9862dd8a995056c5f2ed5ff0d6dc09b9da01df" }, "version": 6 } } }, "signatures": [ { "keyid": "b096bc2d67080cec22e6c0bbaa69cfd9d714b9e9ad847d255f950b2728855fef", "sig": "7da0cd1e09be0b8161a1048e08a645e5c8d1558137b2934418bf4e28d4d380b6df2306f5cc89e87e41e5abf079547a709fccd2548bf00fd5acfe5ad2496d670b" } ] }client/testdata/go-tuf/consistent-snapshot-false/5/repository/targets.json000066400000000000000000000030711453140004500274100ustar00rootroot00000000000000{ "signed": { "_type": "targets", "spec_version": "1.0", "version": 6, "expires": "2100-01-01T00:00:00Z", "targets": { "0": { "length": 1, "hashes": { "sha512": "31bca02094eb78126a517b206a88c73cfa9ec6f704c7030d18212cace820f025f00bf0ea68dbf3f3a5436ca63b53bf7bf80ad8d5de7d8359d0b7fed9dbc3ab99" } }, "1": { "length": 1, "hashes": { "sha512": "4dff4ea340f0a823f15d3f4f01ab62eae0e5da579ccb851f8db9dfe84c58b2b37b89903a740e1ee172da793a6e79d560e5f7f9bd058a12a280433ed6fa46510a" } }, "2": { "length": 1, "hashes": { "sha512": "40b244112641dd78dd4f93b6c9190dd46e0099194d5a44257b7efad6ef9ff4683da1eda0244448cb343aa688f5d3efd7314dafe580ac0bcbf115aeca9e8dc114" } }, "3": { "length": 1, "hashes": { "sha512": "3bafbf08882a2d10133093a1b8433f50563b93c14acd05b79028eb1d12799027241450980651994501423a66c276ae26c43b739bc65c4e16b10c3af6c202aebb" } }, "4": { "length": 1, "hashes": { "sha512": "a321d8b405e3ef2604959847b36d171eebebc4a8941dc70a4784935a4fca5d5813de84dfa049f06549aa61b20848c1633ce81b675286ea8fb53db240d831c568" } }, "5": { "length": 1, "hashes": { "sha512": "06df05371981a237d0ed11472fae7c94c9ac0eff1d05413516710d17b10a4fb6f4517bda4a695f02d0a73dd4db543b4653df28f5d09dab86f92ffb9b86d01e25" } } } }, "signatures": [ { "keyid": "bc8f087663855564b358ddf314d5932ab920af17bd1df2f58b397afd82d76dc1", "sig": "1e80ae84c4badf194e2fd7225c120999d8f628598fa0e994a2ff7cac705ec2f14601a64ba5370fc668f3fb114975dd81c554400d757f41762c4e12eb4db35d02" } ] }client/testdata/go-tuf/consistent-snapshot-false/5/repository/targets/000077500000000000000000000000001453140004500265145ustar00rootroot00000000000000client/testdata/go-tuf/consistent-snapshot-false/5/repository/targets/0000077700000000000000000000000001453140004500335472../../../4/repository/targets/0ustar00rootroot00000000000000client/testdata/go-tuf/consistent-snapshot-false/5/repository/targets/1000077700000000000000000000000001453140004500335512../../../4/repository/targets/1ustar00rootroot00000000000000client/testdata/go-tuf/consistent-snapshot-false/5/repository/targets/2000077700000000000000000000000001453140004500335532../../../4/repository/targets/2ustar00rootroot00000000000000client/testdata/go-tuf/consistent-snapshot-false/5/repository/targets/3000077700000000000000000000000001453140004500335552../../../4/repository/targets/3ustar00rootroot00000000000000client/testdata/go-tuf/consistent-snapshot-false/5/repository/targets/4000077700000000000000000000000001453140004500335572../../../4/repository/targets/4ustar00rootroot00000000000000client/testdata/go-tuf/consistent-snapshot-false/5/repository/targets/5000066400000000000000000000000011453140004500265720ustar00rootroot000000000000005client/testdata/go-tuf/consistent-snapshot-false/5/repository/timestamp.json000066400000000000000000000011531453140004500277410ustar00rootroot00000000000000{ "signed": { "_type": "timestamp", "spec_version": "1.0", "version": 6, "expires": "2100-01-01T00:00:00Z", "meta": { "snapshot.json": { "length": 618, "hashes": { "sha512": "7113ee370f6e1b35df7fd8203d27760e8eb8c32195e8a895f140584caff81256ccdf2d03ed43a5efac45ee4f869908cee2275c0f7e6b54969602e0542c9f78f9" }, "version": 6 } } }, "signatures": [ { "keyid": "a8eaf6de5aecfd0a72b60295b1e1cd12f349079ebcbbb63dbe7072f162e85315", "sig": "85758e7d1cdbedfd3d363136924a6e7878a2b9b68486ecc65658a29f96b55fcfeeda0f94fcae30fa3ceafc3ef5f82df8c68ad2774b6e4f4ea0e6cdbafdce8e0f" } ] }client/testdata/go-tuf/consistent-snapshot-true/000077500000000000000000000000001453140004500223455ustar00rootroot00000000000000client/testdata/go-tuf/consistent-snapshot-true/0/000077500000000000000000000000001453140004500225045ustar00rootroot00000000000000client/testdata/go-tuf/consistent-snapshot-true/0/repository/000077500000000000000000000000001453140004500247235ustar00rootroot00000000000000client/testdata/go-tuf/consistent-snapshot-true/0/repository/1.root.json000066400000000000000000000042011453140004500267350ustar00rootroot00000000000000{ "signed": { "_type": "root", "spec_version": "1.0", "version": 1, "expires": "2100-01-01T00:00:00Z", "keys": { "289e5a9e71afd7909326aa4caea92f7557ee0e2283d8c31f0c3401ce67248a45": { "keytype": "ed25519", "scheme": "ed25519", "keyid_hash_algorithms": [ "sha256", "sha512" ], "keyval": { "public": "d482fa4805a50870aa1356ace6b764f7ab47ed4dc38f49b1a189afa25f179e94" } }, "808aa256a8172bb0cb961767c6768e55ccf732c99afccc6145752d7a328b7937": { "keytype": "ed25519", "scheme": "ed25519", "keyid_hash_algorithms": [ "sha256", "sha512" ], "keyval": { "public": "62f71f99c788f16bcdc8bb252455e3a690350e4ddea5a6aab1f9a3aaabcf369a" } }, "aa3255b4e8e17e566d2bdbea0e5842978f9fa1d2fa9ec76ae76b146164acbfc8": { "keytype": "ed25519", "scheme": "ed25519", "keyid_hash_algorithms": [ "sha256", "sha512" ], "keyval": { "public": "8656ad20568cd3534c405e4d9a84b0c6e6163f7f66434df77416502835b9b160" } }, "ce72db3f938914205461a415c9b7b91267a2079df991fd6283aa8461988c1add": { "keytype": "ed25519", "scheme": "ed25519", "keyid_hash_algorithms": [ "sha256", "sha512" ], "keyval": { "public": "bca152214dbfd3e7a1b7a7b3e2cc179fb00520fd7212c8a60ba99f14dfc0e1ca" } } }, "roles": { "root": { "keyids": [ "ce72db3f938914205461a415c9b7b91267a2079df991fd6283aa8461988c1add" ], "threshold": 1 }, "snapshot": { "keyids": [ "289e5a9e71afd7909326aa4caea92f7557ee0e2283d8c31f0c3401ce67248a45" ], "threshold": 1 }, "targets": { "keyids": [ "808aa256a8172bb0cb961767c6768e55ccf732c99afccc6145752d7a328b7937" ], "threshold": 1 }, "timestamp": { "keyids": [ "aa3255b4e8e17e566d2bdbea0e5842978f9fa1d2fa9ec76ae76b146164acbfc8" ], "threshold": 1 } }, "consistent_snapshot": true }, "signatures": [ { "keyid": "ce72db3f938914205461a415c9b7b91267a2079df991fd6283aa8461988c1add", "sig": "104eb78cba674adfc7ade1d4396c99466a7d4480e50aab89df53117faffd3d4d4ea87833fe6f83b8dc7f6e1e4a62c0329244c6e5f910627772df3c4d61a8900f" } ] }client/testdata/go-tuf/consistent-snapshot-true/0/repository/1.snapshot.json000066400000000000000000000011511453140004500276120ustar00rootroot00000000000000{ "signed": { "_type": "snapshot", "spec_version": "1.0", "version": 1, "expires": "2100-01-01T00:00:00Z", "meta": { "targets.json": { "length": 588, "hashes": { "sha512": "2532c645262d3a15db2afc561d9ae75db96c3b42abe8bd994c173e45ea70177bc1b080e211d92b6f244d267dcb0a0bc2fbcd1c2b008881c19f950c5e8c0035ec" }, "version": 1 } } }, "signatures": [ { "keyid": "289e5a9e71afd7909326aa4caea92f7557ee0e2283d8c31f0c3401ce67248a45", "sig": "6efc0efbc7a3b849a58e9cb394af10fe6d199d2ead18e6931932c85f44269d5d73e8f18808d0d9b66fbfd9926b0bda9d2d26a7508a960758c0b84eb8aa31ac0b" } ] }client/testdata/go-tuf/consistent-snapshot-true/0/repository/1.targets.json000066400000000000000000000011141453140004500274230ustar00rootroot00000000000000{ "signed": { "_type": "targets", "spec_version": "1.0", "version": 1, "expires": "2100-01-01T00:00:00Z", "targets": { "0": { "length": 1, "hashes": { "sha512": "31bca02094eb78126a517b206a88c73cfa9ec6f704c7030d18212cace820f025f00bf0ea68dbf3f3a5436ca63b53bf7bf80ad8d5de7d8359d0b7fed9dbc3ab99" } } } }, "signatures": [ { "keyid": "808aa256a8172bb0cb961767c6768e55ccf732c99afccc6145752d7a328b7937", "sig": "4d5c3a5da43f3792d077c1128fa28585982ff2957fae59be02a831fc920d0b91cbeaa99fd6c15066ec4da8bf12f993440a90d1624fd7b0a68070e5d60ed2500f" } ] }client/testdata/go-tuf/consistent-snapshot-true/0/repository/root.json000066400000000000000000000042011453140004500265760ustar00rootroot00000000000000{ "signed": { "_type": "root", "spec_version": "1.0", "version": 1, "expires": "2100-01-01T00:00:00Z", "keys": { "289e5a9e71afd7909326aa4caea92f7557ee0e2283d8c31f0c3401ce67248a45": { "keytype": "ed25519", "scheme": "ed25519", "keyid_hash_algorithms": [ "sha256", "sha512" ], "keyval": { "public": "d482fa4805a50870aa1356ace6b764f7ab47ed4dc38f49b1a189afa25f179e94" } }, "808aa256a8172bb0cb961767c6768e55ccf732c99afccc6145752d7a328b7937": { "keytype": "ed25519", "scheme": "ed25519", "keyid_hash_algorithms": [ "sha256", "sha512" ], "keyval": { "public": "62f71f99c788f16bcdc8bb252455e3a690350e4ddea5a6aab1f9a3aaabcf369a" } }, "aa3255b4e8e17e566d2bdbea0e5842978f9fa1d2fa9ec76ae76b146164acbfc8": { "keytype": "ed25519", "scheme": "ed25519", "keyid_hash_algorithms": [ "sha256", "sha512" ], "keyval": { "public": "8656ad20568cd3534c405e4d9a84b0c6e6163f7f66434df77416502835b9b160" } }, "ce72db3f938914205461a415c9b7b91267a2079df991fd6283aa8461988c1add": { "keytype": "ed25519", "scheme": "ed25519", "keyid_hash_algorithms": [ "sha256", "sha512" ], "keyval": { "public": "bca152214dbfd3e7a1b7a7b3e2cc179fb00520fd7212c8a60ba99f14dfc0e1ca" } } }, "roles": { "root": { "keyids": [ "ce72db3f938914205461a415c9b7b91267a2079df991fd6283aa8461988c1add" ], "threshold": 1 }, "snapshot": { "keyids": [ "289e5a9e71afd7909326aa4caea92f7557ee0e2283d8c31f0c3401ce67248a45" ], "threshold": 1 }, "targets": { "keyids": [ "808aa256a8172bb0cb961767c6768e55ccf732c99afccc6145752d7a328b7937" ], "threshold": 1 }, "timestamp": { "keyids": [ "aa3255b4e8e17e566d2bdbea0e5842978f9fa1d2fa9ec76ae76b146164acbfc8" ], "threshold": 1 } }, "consistent_snapshot": true }, "signatures": [ { "keyid": "ce72db3f938914205461a415c9b7b91267a2079df991fd6283aa8461988c1add", "sig": "104eb78cba674adfc7ade1d4396c99466a7d4480e50aab89df53117faffd3d4d4ea87833fe6f83b8dc7f6e1e4a62c0329244c6e5f910627772df3c4d61a8900f" } ] }client/testdata/go-tuf/consistent-snapshot-true/0/repository/snapshot.json000066400000000000000000000011511453140004500274530ustar00rootroot00000000000000{ "signed": { "_type": "snapshot", "spec_version": "1.0", "version": 1, "expires": "2100-01-01T00:00:00Z", "meta": { "targets.json": { "length": 588, "hashes": { "sha512": "2532c645262d3a15db2afc561d9ae75db96c3b42abe8bd994c173e45ea70177bc1b080e211d92b6f244d267dcb0a0bc2fbcd1c2b008881c19f950c5e8c0035ec" }, "version": 1 } } }, "signatures": [ { "keyid": "289e5a9e71afd7909326aa4caea92f7557ee0e2283d8c31f0c3401ce67248a45", "sig": "6efc0efbc7a3b849a58e9cb394af10fe6d199d2ead18e6931932c85f44269d5d73e8f18808d0d9b66fbfd9926b0bda9d2d26a7508a960758c0b84eb8aa31ac0b" } ] }client/testdata/go-tuf/consistent-snapshot-true/0/repository/targets.json000066400000000000000000000011141453140004500272640ustar00rootroot00000000000000{ "signed": { "_type": "targets", "spec_version": "1.0", "version": 1, "expires": "2100-01-01T00:00:00Z", "targets": { "0": { "length": 1, "hashes": { "sha512": "31bca02094eb78126a517b206a88c73cfa9ec6f704c7030d18212cace820f025f00bf0ea68dbf3f3a5436ca63b53bf7bf80ad8d5de7d8359d0b7fed9dbc3ab99" } } } }, "signatures": [ { "keyid": "808aa256a8172bb0cb961767c6768e55ccf732c99afccc6145752d7a328b7937", "sig": "4d5c3a5da43f3792d077c1128fa28585982ff2957fae59be02a831fc920d0b91cbeaa99fd6c15066ec4da8bf12f993440a90d1624fd7b0a68070e5d60ed2500f" } ] }client/testdata/go-tuf/consistent-snapshot-true/0/repository/targets/000077500000000000000000000000001453140004500263745ustar00rootroot00000000000000c227083464fb9af8955c90d2924774ee50abb547.paxheader00006660000000000000000000000321145314000450020303xustar00rootroot00000000000000209 path=client/testdata/go-tuf/consistent-snapshot-true/0/repository/targets/31bca02094eb78126a517b206a88c73cfa9ec6f704c7030d18212cace820f025f00bf0ea68dbf3f3a5436ca63b53bf7bf80ad8d5de7d8359d0b7fed9dbc3ab99.0 c227083464fb9af8955c90d2924774ee50abb547.data000066400000000000000000000000011453140004500171340ustar00rootroot000000000000000client/testdata/go-tuf/consistent-snapshot-true/0/repository/timestamp.json000066400000000000000000000011531453140004500276210ustar00rootroot00000000000000{ "signed": { "_type": "timestamp", "spec_version": "1.0", "version": 1, "expires": "2100-01-01T00:00:00Z", "meta": { "snapshot.json": { "length": 617, "hashes": { "sha512": "6fd318e2cc3bca35d2f597e504c095137263ffe3e72f5e5c64e6c7860bea1207448c8994066ffc1cf20898a9d1586cdf09be4e3ea06f69593ed5c7d772f8dfd1" }, "version": 1 } } }, "signatures": [ { "keyid": "aa3255b4e8e17e566d2bdbea0e5842978f9fa1d2fa9ec76ae76b146164acbfc8", "sig": "943b219ab6c651793da08d8cf38c7d25fb959c75161b5b86562983841433f9f38c237bb87cf6ecfbb3cb7c78113a3ed2651ee57d3515e7edfc3bebbf349f2809" } ] }client/testdata/go-tuf/consistent-snapshot-true/1/000077500000000000000000000000001453140004500225055ustar00rootroot00000000000000client/testdata/go-tuf/consistent-snapshot-true/1/repository/000077500000000000000000000000001453140004500247245ustar00rootroot00000000000000client/testdata/go-tuf/consistent-snapshot-true/1/repository/1.root.json000077700000000000000000000000001453140004500337552../../0/repository/1.root.jsonustar00rootroot00000000000000client/testdata/go-tuf/consistent-snapshot-true/1/repository/1.snapshot.json000077700000000000000000000000001453140004500355052../../0/repository/1.snapshot.jsonustar00rootroot00000000000000client/testdata/go-tuf/consistent-snapshot-true/1/repository/1.targets.json000077700000000000000000000000001453140004500351312../../0/repository/1.targets.jsonustar00rootroot00000000000000client/testdata/go-tuf/consistent-snapshot-true/1/repository/2.root.json000066400000000000000000000045471453140004500267540ustar00rootroot00000000000000{ "signed": { "_type": "root", "spec_version": "1.0", "version": 2, "expires": "2100-01-01T00:00:00Z", "keys": { "289e5a9e71afd7909326aa4caea92f7557ee0e2283d8c31f0c3401ce67248a45": { "keytype": "ed25519", "scheme": "ed25519", "keyid_hash_algorithms": [ "sha256", "sha512" ], "keyval": { "public": "d482fa4805a50870aa1356ace6b764f7ab47ed4dc38f49b1a189afa25f179e94" } }, "808aa256a8172bb0cb961767c6768e55ccf732c99afccc6145752d7a328b7937": { "keytype": "ed25519", "scheme": "ed25519", "keyid_hash_algorithms": [ "sha256", "sha512" ], "keyval": { "public": "62f71f99c788f16bcdc8bb252455e3a690350e4ddea5a6aab1f9a3aaabcf369a" } }, "aa3255b4e8e17e566d2bdbea0e5842978f9fa1d2fa9ec76ae76b146164acbfc8": { "keytype": "ed25519", "scheme": "ed25519", "keyid_hash_algorithms": [ "sha256", "sha512" ], "keyval": { "public": "8656ad20568cd3534c405e4d9a84b0c6e6163f7f66434df77416502835b9b160" } }, "b2403f96ae9b1089d8cbc15bbc35e9acbacd7984571f951b43aab56aedcfa84f": { "keytype": "ed25519", "scheme": "ed25519", "keyid_hash_algorithms": [ "sha256", "sha512" ], "keyval": { "public": "153986a7370e002f377dd68797e7466c421180c1571e233de2f8ab41c8af4f54" } } }, "roles": { "root": { "keyids": [ "b2403f96ae9b1089d8cbc15bbc35e9acbacd7984571f951b43aab56aedcfa84f" ], "threshold": 1 }, "snapshot": { "keyids": [ "289e5a9e71afd7909326aa4caea92f7557ee0e2283d8c31f0c3401ce67248a45" ], "threshold": 1 }, "targets": { "keyids": [ "808aa256a8172bb0cb961767c6768e55ccf732c99afccc6145752d7a328b7937" ], "threshold": 1 }, "timestamp": { "keyids": [ "aa3255b4e8e17e566d2bdbea0e5842978f9fa1d2fa9ec76ae76b146164acbfc8" ], "threshold": 1 } }, "consistent_snapshot": true }, "signatures": [ { "keyid": "b2403f96ae9b1089d8cbc15bbc35e9acbacd7984571f951b43aab56aedcfa84f", "sig": "7ac71619b21fe3a076fbbf3e17f92177c5374f005c32f1818e7c92eee107e3c726ccf906e800878035a9caf7679610147d72cb515cd76164b08b5c8bf93c0f0e" }, { "keyid": "ce72db3f938914205461a415c9b7b91267a2079df991fd6283aa8461988c1add", "sig": "e560f386c0c270bb44cedda965ad21526e65162b41a2c30d84fb3a80f58913432e8dc74e5e7b0635ccdf51a2b951dae3b0ba28b4aac4088641a2b2cd2933dd04" } ] }client/testdata/go-tuf/consistent-snapshot-true/1/repository/2.snapshot.json000066400000000000000000000011511453140004500276140ustar00rootroot00000000000000{ "signed": { "_type": "snapshot", "spec_version": "1.0", "version": 2, "expires": "2100-01-01T00:00:00Z", "meta": { "targets.json": { "length": 789, "hashes": { "sha512": "7a919ed2a5fb7cf80252c9307ac4d27bc2ab54f9bb803389977dcc3d09ae7dff533639c1b19a810d2b212a5c5e904e0f73ab01324ba79dffbb9f7488204caf2a" }, "version": 2 } } }, "signatures": [ { "keyid": "289e5a9e71afd7909326aa4caea92f7557ee0e2283d8c31f0c3401ce67248a45", "sig": "9a3734441c38daa3275ba60a2178b8dfe5f98296f408bf434144b4bd4f68af73b7f6860e6f2e638b93144ac5bebe361642bbff66a1195596bb8c841429b34508" } ] }client/testdata/go-tuf/consistent-snapshot-true/1/repository/2.targets.json000066400000000000000000000014251453140004500274320ustar00rootroot00000000000000{ "signed": { "_type": "targets", "spec_version": "1.0", "version": 2, "expires": "2100-01-01T00:00:00Z", "targets": { "0": { "length": 1, "hashes": { "sha512": "31bca02094eb78126a517b206a88c73cfa9ec6f704c7030d18212cace820f025f00bf0ea68dbf3f3a5436ca63b53bf7bf80ad8d5de7d8359d0b7fed9dbc3ab99" } }, "1": { "length": 1, "hashes": { "sha512": "4dff4ea340f0a823f15d3f4f01ab62eae0e5da579ccb851f8db9dfe84c58b2b37b89903a740e1ee172da793a6e79d560e5f7f9bd058a12a280433ed6fa46510a" } } } }, "signatures": [ { "keyid": "808aa256a8172bb0cb961767c6768e55ccf732c99afccc6145752d7a328b7937", "sig": "81bcf5921834a20b8b0946815ad4316f43ffce20b3793e6653dc5fd4b98f1c6318ce2243948574e82414a102717a6f2d731250b3191c54abc8391fd867503e0b" } ] }client/testdata/go-tuf/consistent-snapshot-true/1/repository/root.json000066400000000000000000000045471453140004500266140ustar00rootroot00000000000000{ "signed": { "_type": "root", "spec_version": "1.0", "version": 2, "expires": "2100-01-01T00:00:00Z", "keys": { "289e5a9e71afd7909326aa4caea92f7557ee0e2283d8c31f0c3401ce67248a45": { "keytype": "ed25519", "scheme": "ed25519", "keyid_hash_algorithms": [ "sha256", "sha512" ], "keyval": { "public": "d482fa4805a50870aa1356ace6b764f7ab47ed4dc38f49b1a189afa25f179e94" } }, "808aa256a8172bb0cb961767c6768e55ccf732c99afccc6145752d7a328b7937": { "keytype": "ed25519", "scheme": "ed25519", "keyid_hash_algorithms": [ "sha256", "sha512" ], "keyval": { "public": "62f71f99c788f16bcdc8bb252455e3a690350e4ddea5a6aab1f9a3aaabcf369a" } }, "aa3255b4e8e17e566d2bdbea0e5842978f9fa1d2fa9ec76ae76b146164acbfc8": { "keytype": "ed25519", "scheme": "ed25519", "keyid_hash_algorithms": [ "sha256", "sha512" ], "keyval": { "public": "8656ad20568cd3534c405e4d9a84b0c6e6163f7f66434df77416502835b9b160" } }, "b2403f96ae9b1089d8cbc15bbc35e9acbacd7984571f951b43aab56aedcfa84f": { "keytype": "ed25519", "scheme": "ed25519", "keyid_hash_algorithms": [ "sha256", "sha512" ], "keyval": { "public": "153986a7370e002f377dd68797e7466c421180c1571e233de2f8ab41c8af4f54" } } }, "roles": { "root": { "keyids": [ "b2403f96ae9b1089d8cbc15bbc35e9acbacd7984571f951b43aab56aedcfa84f" ], "threshold": 1 }, "snapshot": { "keyids": [ "289e5a9e71afd7909326aa4caea92f7557ee0e2283d8c31f0c3401ce67248a45" ], "threshold": 1 }, "targets": { "keyids": [ "808aa256a8172bb0cb961767c6768e55ccf732c99afccc6145752d7a328b7937" ], "threshold": 1 }, "timestamp": { "keyids": [ "aa3255b4e8e17e566d2bdbea0e5842978f9fa1d2fa9ec76ae76b146164acbfc8" ], "threshold": 1 } }, "consistent_snapshot": true }, "signatures": [ { "keyid": "b2403f96ae9b1089d8cbc15bbc35e9acbacd7984571f951b43aab56aedcfa84f", "sig": "7ac71619b21fe3a076fbbf3e17f92177c5374f005c32f1818e7c92eee107e3c726ccf906e800878035a9caf7679610147d72cb515cd76164b08b5c8bf93c0f0e" }, { "keyid": "ce72db3f938914205461a415c9b7b91267a2079df991fd6283aa8461988c1add", "sig": "e560f386c0c270bb44cedda965ad21526e65162b41a2c30d84fb3a80f58913432e8dc74e5e7b0635ccdf51a2b951dae3b0ba28b4aac4088641a2b2cd2933dd04" } ] }client/testdata/go-tuf/consistent-snapshot-true/1/repository/snapshot.json000066400000000000000000000011511453140004500274540ustar00rootroot00000000000000{ "signed": { "_type": "snapshot", "spec_version": "1.0", "version": 2, "expires": "2100-01-01T00:00:00Z", "meta": { "targets.json": { "length": 789, "hashes": { "sha512": "7a919ed2a5fb7cf80252c9307ac4d27bc2ab54f9bb803389977dcc3d09ae7dff533639c1b19a810d2b212a5c5e904e0f73ab01324ba79dffbb9f7488204caf2a" }, "version": 2 } } }, "signatures": [ { "keyid": "289e5a9e71afd7909326aa4caea92f7557ee0e2283d8c31f0c3401ce67248a45", "sig": "9a3734441c38daa3275ba60a2178b8dfe5f98296f408bf434144b4bd4f68af73b7f6860e6f2e638b93144ac5bebe361642bbff66a1195596bb8c841429b34508" } ] }client/testdata/go-tuf/consistent-snapshot-true/1/repository/targets.json000066400000000000000000000014251453140004500272720ustar00rootroot00000000000000{ "signed": { "_type": "targets", "spec_version": "1.0", "version": 2, "expires": "2100-01-01T00:00:00Z", "targets": { "0": { "length": 1, "hashes": { "sha512": "31bca02094eb78126a517b206a88c73cfa9ec6f704c7030d18212cace820f025f00bf0ea68dbf3f3a5436ca63b53bf7bf80ad8d5de7d8359d0b7fed9dbc3ab99" } }, "1": { "length": 1, "hashes": { "sha512": "4dff4ea340f0a823f15d3f4f01ab62eae0e5da579ccb851f8db9dfe84c58b2b37b89903a740e1ee172da793a6e79d560e5f7f9bd058a12a280433ed6fa46510a" } } } }, "signatures": [ { "keyid": "808aa256a8172bb0cb961767c6768e55ccf732c99afccc6145752d7a328b7937", "sig": "81bcf5921834a20b8b0946815ad4316f43ffce20b3793e6653dc5fd4b98f1c6318ce2243948574e82414a102717a6f2d731250b3191c54abc8391fd867503e0b" } ] }client/testdata/go-tuf/consistent-snapshot-true/1/repository/targets/000077500000000000000000000000001453140004500263755ustar00rootroot00000000000000b0c459f9f5bb60a8bf42ecdd64a211da1b0d7e9e.paxheader00006660000000000000000000000577145314000450021066xustar00rootroot00000000000000209 path=client/testdata/go-tuf/consistent-snapshot-true/1/repository/targets/31bca02094eb78126a517b206a88c73cfa9ec6f704c7030d18212cace820f025f00bf0ea68dbf3f3a5436ca63b53bf7bf80ad8d5de7d8359d0b7fed9dbc3ab99.0 174 linkpath=../../../0/repository/targets/31bca02094eb78126a517b206a88c73cfa9ec6f704c7030d18212cace820f025f00bf0ea68dbf3f3a5436ca63b53bf7bf80ad8d5de7d8359d0b7fed9dbc3ab99.0 b0c459f9f5bb60a8bf42ecdd64a211da1b0d7e9e.data000077700000000000000000000000001453140004500303342see b0c459f9f5bb60a8bf42ecdd64a211da1b0d7e9e.paxheaderustar00rootroot0000000000000056a6051ca2b02b04ef92d5150c9ef600403cb1de.paxheader00006660000000000000000000000321145314000450020442xustar00rootroot00000000000000209 path=client/testdata/go-tuf/consistent-snapshot-true/1/repository/targets/4dff4ea340f0a823f15d3f4f01ab62eae0e5da579ccb851f8db9dfe84c58b2b37b89903a740e1ee172da793a6e79d560e5f7f9bd058a12a280433ed6fa46510a.1 56a6051ca2b02b04ef92d5150c9ef600403cb1de.data000066400000000000000000000000011453140004500172730ustar00rootroot000000000000001client/testdata/go-tuf/consistent-snapshot-true/1/repository/timestamp.json000066400000000000000000000011531453140004500276220ustar00rootroot00000000000000{ "signed": { "_type": "timestamp", "spec_version": "1.0", "version": 2, "expires": "2100-01-01T00:00:00Z", "meta": { "snapshot.json": { "length": 617, "hashes": { "sha512": "d7204efe9ded4f18d679d75054f43b02b20d74189ea81ad90a67399a8884a810e380a4d343e284c4b6fde506e22a464038871d06950166548a84a76344e2bf3a" }, "version": 2 } } }, "signatures": [ { "keyid": "aa3255b4e8e17e566d2bdbea0e5842978f9fa1d2fa9ec76ae76b146164acbfc8", "sig": "85c5afdd9dd3777d2cb31721519ab2942edffc9e1282b65b2cede505a469051ac5e86388461db49f948a5998b132dddb5ce0156d21622a6d2201fb93322de20f" } ] }client/testdata/go-tuf/consistent-snapshot-true/2/000077500000000000000000000000001453140004500225065ustar00rootroot00000000000000client/testdata/go-tuf/consistent-snapshot-true/2/repository/000077500000000000000000000000001453140004500247255ustar00rootroot00000000000000client/testdata/go-tuf/consistent-snapshot-true/2/repository/1.root.json000077700000000000000000000000001453140004500337572../../1/repository/1.root.jsonustar00rootroot00000000000000client/testdata/go-tuf/consistent-snapshot-true/2/repository/1.snapshot.json000077700000000000000000000000001453140004500355072../../1/repository/1.snapshot.jsonustar00rootroot00000000000000client/testdata/go-tuf/consistent-snapshot-true/2/repository/1.targets.json000077700000000000000000000000001453140004500351332../../1/repository/1.targets.jsonustar00rootroot00000000000000client/testdata/go-tuf/consistent-snapshot-true/2/repository/2.root.json000077700000000000000000000000001453140004500337612../../1/repository/2.root.jsonustar00rootroot00000000000000client/testdata/go-tuf/consistent-snapshot-true/2/repository/2.snapshot.json000077700000000000000000000000001453140004500355112../../1/repository/2.snapshot.jsonustar00rootroot00000000000000client/testdata/go-tuf/consistent-snapshot-true/2/repository/2.targets.json000077700000000000000000000000001453140004500351352../../1/repository/2.targets.jsonustar00rootroot00000000000000client/testdata/go-tuf/consistent-snapshot-true/2/repository/3.root.json000066400000000000000000000042011453140004500267410ustar00rootroot00000000000000{ "signed": { "_type": "root", "spec_version": "1.0", "version": 3, "expires": "2100-01-01T00:00:00Z", "keys": { "289e5a9e71afd7909326aa4caea92f7557ee0e2283d8c31f0c3401ce67248a45": { "keytype": "ed25519", "scheme": "ed25519", "keyid_hash_algorithms": [ "sha256", "sha512" ], "keyval": { "public": "d482fa4805a50870aa1356ace6b764f7ab47ed4dc38f49b1a189afa25f179e94" } }, "aa3255b4e8e17e566d2bdbea0e5842978f9fa1d2fa9ec76ae76b146164acbfc8": { "keytype": "ed25519", "scheme": "ed25519", "keyid_hash_algorithms": [ "sha256", "sha512" ], "keyval": { "public": "8656ad20568cd3534c405e4d9a84b0c6e6163f7f66434df77416502835b9b160" } }, "b2403f96ae9b1089d8cbc15bbc35e9acbacd7984571f951b43aab56aedcfa84f": { "keytype": "ed25519", "scheme": "ed25519", "keyid_hash_algorithms": [ "sha256", "sha512" ], "keyval": { "public": "153986a7370e002f377dd68797e7466c421180c1571e233de2f8ab41c8af4f54" } }, "bc8f087663855564b358ddf314d5932ab920af17bd1df2f58b397afd82d76dc1": { "keytype": "ed25519", "scheme": "ed25519", "keyid_hash_algorithms": [ "sha256", "sha512" ], "keyval": { "public": "aee574e56780ea1709a8b56e02d4ffdd9a3a1deaed61e2eb0701f376a4422e42" } } }, "roles": { "root": { "keyids": [ "b2403f96ae9b1089d8cbc15bbc35e9acbacd7984571f951b43aab56aedcfa84f" ], "threshold": 1 }, "snapshot": { "keyids": [ "289e5a9e71afd7909326aa4caea92f7557ee0e2283d8c31f0c3401ce67248a45" ], "threshold": 1 }, "targets": { "keyids": [ "bc8f087663855564b358ddf314d5932ab920af17bd1df2f58b397afd82d76dc1" ], "threshold": 1 }, "timestamp": { "keyids": [ "aa3255b4e8e17e566d2bdbea0e5842978f9fa1d2fa9ec76ae76b146164acbfc8" ], "threshold": 1 } }, "consistent_snapshot": true }, "signatures": [ { "keyid": "b2403f96ae9b1089d8cbc15bbc35e9acbacd7984571f951b43aab56aedcfa84f", "sig": "475436056dca79fd151ae830ad2f4dbc7ecc5b146a79319c20a1167d4f214047d8f3847d1cda4ccd32a48acb13acbea55ba7e8254cffaa07e3de9ecdd0c13d03" } ] }client/testdata/go-tuf/consistent-snapshot-true/2/repository/3.snapshot.json000066400000000000000000000011511453140004500276160ustar00rootroot00000000000000{ "signed": { "_type": "snapshot", "spec_version": "1.0", "version": 3, "expires": "2100-01-01T00:00:00Z", "meta": { "targets.json": { "length": 990, "hashes": { "sha512": "987022c23793b3d234d422c3ed4525f8c3771887db610fb2e7d6b455d27ad8b1b4a957a699d519c03754fe4feeb387ec84c95e1edac1d4e9b186bfbdff76ad10" }, "version": 3 } } }, "signatures": [ { "keyid": "289e5a9e71afd7909326aa4caea92f7557ee0e2283d8c31f0c3401ce67248a45", "sig": "31896c9165a37aa54cf1c4d5f936035e092b1cf4c233ef35cd12c987aaa02de7ec99f26c198984fe0dcc21765d096b25cd67e7ca058613b2b2abef3193dd880d" } ] }client/testdata/go-tuf/consistent-snapshot-true/2/repository/3.targets.json000066400000000000000000000017361453140004500274410ustar00rootroot00000000000000{ "signed": { "_type": "targets", "spec_version": "1.0", "version": 3, "expires": "2100-01-01T00:00:00Z", "targets": { "0": { "length": 1, "hashes": { "sha512": "31bca02094eb78126a517b206a88c73cfa9ec6f704c7030d18212cace820f025f00bf0ea68dbf3f3a5436ca63b53bf7bf80ad8d5de7d8359d0b7fed9dbc3ab99" } }, "1": { "length": 1, "hashes": { "sha512": "4dff4ea340f0a823f15d3f4f01ab62eae0e5da579ccb851f8db9dfe84c58b2b37b89903a740e1ee172da793a6e79d560e5f7f9bd058a12a280433ed6fa46510a" } }, "2": { "length": 1, "hashes": { "sha512": "40b244112641dd78dd4f93b6c9190dd46e0099194d5a44257b7efad6ef9ff4683da1eda0244448cb343aa688f5d3efd7314dafe580ac0bcbf115aeca9e8dc114" } } } }, "signatures": [ { "keyid": "bc8f087663855564b358ddf314d5932ab920af17bd1df2f58b397afd82d76dc1", "sig": "09593c7b47f4dbf1e8ac949fa010279ffbbd36070a54a89b689378441e8111602d4236fa2962063778c82027d4746a8973ba8fea86e9c105190da9fa362d8b0c" } ] }client/testdata/go-tuf/consistent-snapshot-true/2/repository/root.json000066400000000000000000000042011453140004500266000ustar00rootroot00000000000000{ "signed": { "_type": "root", "spec_version": "1.0", "version": 3, "expires": "2100-01-01T00:00:00Z", "keys": { "289e5a9e71afd7909326aa4caea92f7557ee0e2283d8c31f0c3401ce67248a45": { "keytype": "ed25519", "scheme": "ed25519", "keyid_hash_algorithms": [ "sha256", "sha512" ], "keyval": { "public": "d482fa4805a50870aa1356ace6b764f7ab47ed4dc38f49b1a189afa25f179e94" } }, "aa3255b4e8e17e566d2bdbea0e5842978f9fa1d2fa9ec76ae76b146164acbfc8": { "keytype": "ed25519", "scheme": "ed25519", "keyid_hash_algorithms": [ "sha256", "sha512" ], "keyval": { "public": "8656ad20568cd3534c405e4d9a84b0c6e6163f7f66434df77416502835b9b160" } }, "b2403f96ae9b1089d8cbc15bbc35e9acbacd7984571f951b43aab56aedcfa84f": { "keytype": "ed25519", "scheme": "ed25519", "keyid_hash_algorithms": [ "sha256", "sha512" ], "keyval": { "public": "153986a7370e002f377dd68797e7466c421180c1571e233de2f8ab41c8af4f54" } }, "bc8f087663855564b358ddf314d5932ab920af17bd1df2f58b397afd82d76dc1": { "keytype": "ed25519", "scheme": "ed25519", "keyid_hash_algorithms": [ "sha256", "sha512" ], "keyval": { "public": "aee574e56780ea1709a8b56e02d4ffdd9a3a1deaed61e2eb0701f376a4422e42" } } }, "roles": { "root": { "keyids": [ "b2403f96ae9b1089d8cbc15bbc35e9acbacd7984571f951b43aab56aedcfa84f" ], "threshold": 1 }, "snapshot": { "keyids": [ "289e5a9e71afd7909326aa4caea92f7557ee0e2283d8c31f0c3401ce67248a45" ], "threshold": 1 }, "targets": { "keyids": [ "bc8f087663855564b358ddf314d5932ab920af17bd1df2f58b397afd82d76dc1" ], "threshold": 1 }, "timestamp": { "keyids": [ "aa3255b4e8e17e566d2bdbea0e5842978f9fa1d2fa9ec76ae76b146164acbfc8" ], "threshold": 1 } }, "consistent_snapshot": true }, "signatures": [ { "keyid": "b2403f96ae9b1089d8cbc15bbc35e9acbacd7984571f951b43aab56aedcfa84f", "sig": "475436056dca79fd151ae830ad2f4dbc7ecc5b146a79319c20a1167d4f214047d8f3847d1cda4ccd32a48acb13acbea55ba7e8254cffaa07e3de9ecdd0c13d03" } ] }client/testdata/go-tuf/consistent-snapshot-true/2/repository/snapshot.json000066400000000000000000000011511453140004500274550ustar00rootroot00000000000000{ "signed": { "_type": "snapshot", "spec_version": "1.0", "version": 3, "expires": "2100-01-01T00:00:00Z", "meta": { "targets.json": { "length": 990, "hashes": { "sha512": "987022c23793b3d234d422c3ed4525f8c3771887db610fb2e7d6b455d27ad8b1b4a957a699d519c03754fe4feeb387ec84c95e1edac1d4e9b186bfbdff76ad10" }, "version": 3 } } }, "signatures": [ { "keyid": "289e5a9e71afd7909326aa4caea92f7557ee0e2283d8c31f0c3401ce67248a45", "sig": "31896c9165a37aa54cf1c4d5f936035e092b1cf4c233ef35cd12c987aaa02de7ec99f26c198984fe0dcc21765d096b25cd67e7ca058613b2b2abef3193dd880d" } ] }client/testdata/go-tuf/consistent-snapshot-true/2/repository/targets.json000066400000000000000000000017361453140004500273000ustar00rootroot00000000000000{ "signed": { "_type": "targets", "spec_version": "1.0", "version": 3, "expires": "2100-01-01T00:00:00Z", "targets": { "0": { "length": 1, "hashes": { "sha512": "31bca02094eb78126a517b206a88c73cfa9ec6f704c7030d18212cace820f025f00bf0ea68dbf3f3a5436ca63b53bf7bf80ad8d5de7d8359d0b7fed9dbc3ab99" } }, "1": { "length": 1, "hashes": { "sha512": "4dff4ea340f0a823f15d3f4f01ab62eae0e5da579ccb851f8db9dfe84c58b2b37b89903a740e1ee172da793a6e79d560e5f7f9bd058a12a280433ed6fa46510a" } }, "2": { "length": 1, "hashes": { "sha512": "40b244112641dd78dd4f93b6c9190dd46e0099194d5a44257b7efad6ef9ff4683da1eda0244448cb343aa688f5d3efd7314dafe580ac0bcbf115aeca9e8dc114" } } } }, "signatures": [ { "keyid": "bc8f087663855564b358ddf314d5932ab920af17bd1df2f58b397afd82d76dc1", "sig": "09593c7b47f4dbf1e8ac949fa010279ffbbd36070a54a89b689378441e8111602d4236fa2962063778c82027d4746a8973ba8fea86e9c105190da9fa362d8b0c" } ] }client/testdata/go-tuf/consistent-snapshot-true/2/repository/targets/000077500000000000000000000000001453140004500263765ustar00rootroot00000000000000de9aac3af913eb6363a47bb669ce2bdccfe475b6.paxheader00006660000000000000000000000577145314000450021164xustar00rootroot00000000000000209 path=client/testdata/go-tuf/consistent-snapshot-true/2/repository/targets/31bca02094eb78126a517b206a88c73cfa9ec6f704c7030d18212cace820f025f00bf0ea68dbf3f3a5436ca63b53bf7bf80ad8d5de7d8359d0b7fed9dbc3ab99.0 174 linkpath=../../../1/repository/targets/31bca02094eb78126a517b206a88c73cfa9ec6f704c7030d18212cace820f025f00bf0ea68dbf3f3a5436ca63b53bf7bf80ad8d5de7d8359d0b7fed9dbc3ab99.0 de9aac3af913eb6363a47bb669ce2bdccfe475b6.data000077700000000000000000000000001453140004500305302see de9aac3af913eb6363a47bb669ce2bdccfe475b6.paxheaderustar00rootroot00000000000000d8263ee9860594d2806b0dfd1bfd17528b0ba2a4.paxheader00006660000000000000000000000321145314000450020500xustar00rootroot00000000000000209 path=client/testdata/go-tuf/consistent-snapshot-true/2/repository/targets/40b244112641dd78dd4f93b6c9190dd46e0099194d5a44257b7efad6ef9ff4683da1eda0244448cb343aa688f5d3efd7314dafe580ac0bcbf115aeca9e8dc114.2 d8263ee9860594d2806b0dfd1bfd17528b0ba2a4.data000066400000000000000000000000011453140004500173310ustar00rootroot0000000000000022ebb2d33317c217847b6c001664e44a4651818fd.paxheader00006660000000000000000000000577145314000450020206xustar00rootroot00000000000000209 path=client/testdata/go-tuf/consistent-snapshot-true/2/repository/targets/4dff4ea340f0a823f15d3f4f01ab62eae0e5da579ccb851f8db9dfe84c58b2b37b89903a740e1ee172da793a6e79d560e5f7f9bd058a12a280433ed6fa46510a.1 174 linkpath=../../../1/repository/targets/4dff4ea340f0a823f15d3f4f01ab62eae0e5da579ccb851f8db9dfe84c58b2b37b89903a740e1ee172da793a6e79d560e5f7f9bd058a12a280433ed6fa46510a.1 2ebb2d33317c217847b6c001664e44a4651818fd.data000077700000000000000000000000001453140004500265742see 2ebb2d33317c217847b6c001664e44a4651818fd.paxheaderustar00rootroot00000000000000client/testdata/go-tuf/consistent-snapshot-true/2/repository/timestamp.json000066400000000000000000000011531453140004500276230ustar00rootroot00000000000000{ "signed": { "_type": "timestamp", "spec_version": "1.0", "version": 3, "expires": "2100-01-01T00:00:00Z", "meta": { "snapshot.json": { "length": 617, "hashes": { "sha512": "70d2f64bc810a0ae1c827c28eed47304c3a9c57402447d129aa3ac851d809a48bd0421aaa99e9e49055984e77f221510415cf27aca8f30f4db1767d6b7bd6024" }, "version": 3 } } }, "signatures": [ { "keyid": "aa3255b4e8e17e566d2bdbea0e5842978f9fa1d2fa9ec76ae76b146164acbfc8", "sig": "22367ebcf7c5265260b288e9fec6110257b8c8745af25f2b14c5d347ddab94f46893926bdd37c58d142089419708e446c5e3c1af5c47c51187fe69ca95038605" } ] }client/testdata/go-tuf/consistent-snapshot-true/3/000077500000000000000000000000001453140004500225075ustar00rootroot00000000000000client/testdata/go-tuf/consistent-snapshot-true/3/repository/000077500000000000000000000000001453140004500247265ustar00rootroot00000000000000client/testdata/go-tuf/consistent-snapshot-true/3/repository/1.root.json000077700000000000000000000000001453140004500337612../../2/repository/1.root.jsonustar00rootroot00000000000000client/testdata/go-tuf/consistent-snapshot-true/3/repository/1.snapshot.json000077700000000000000000000000001453140004500355112../../2/repository/1.snapshot.jsonustar00rootroot00000000000000client/testdata/go-tuf/consistent-snapshot-true/3/repository/1.targets.json000077700000000000000000000000001453140004500351352../../2/repository/1.targets.jsonustar00rootroot00000000000000client/testdata/go-tuf/consistent-snapshot-true/3/repository/2.root.json000077700000000000000000000000001453140004500337632../../2/repository/2.root.jsonustar00rootroot00000000000000client/testdata/go-tuf/consistent-snapshot-true/3/repository/2.snapshot.json000077700000000000000000000000001453140004500355132../../2/repository/2.snapshot.jsonustar00rootroot00000000000000client/testdata/go-tuf/consistent-snapshot-true/3/repository/2.targets.json000077700000000000000000000000001453140004500351372../../2/repository/2.targets.jsonustar00rootroot00000000000000client/testdata/go-tuf/consistent-snapshot-true/3/repository/3.root.json000077700000000000000000000000001453140004500337652../../2/repository/3.root.jsonustar00rootroot00000000000000client/testdata/go-tuf/consistent-snapshot-true/3/repository/3.snapshot.json000077700000000000000000000000001453140004500355152../../2/repository/3.snapshot.jsonustar00rootroot00000000000000client/testdata/go-tuf/consistent-snapshot-true/3/repository/3.targets.json000077700000000000000000000000001453140004500351412../../2/repository/3.targets.jsonustar00rootroot00000000000000client/testdata/go-tuf/consistent-snapshot-true/3/repository/4.root.json000066400000000000000000000042011453140004500267430ustar00rootroot00000000000000{ "signed": { "_type": "root", "spec_version": "1.0", "version": 4, "expires": "2100-01-01T00:00:00Z", "keys": { "aa3255b4e8e17e566d2bdbea0e5842978f9fa1d2fa9ec76ae76b146164acbfc8": { "keytype": "ed25519", "scheme": "ed25519", "keyid_hash_algorithms": [ "sha256", "sha512" ], "keyval": { "public": "8656ad20568cd3534c405e4d9a84b0c6e6163f7f66434df77416502835b9b160" } }, "b096bc2d67080cec22e6c0bbaa69cfd9d714b9e9ad847d255f950b2728855fef": { "keytype": "ed25519", "scheme": "ed25519", "keyid_hash_algorithms": [ "sha256", "sha512" ], "keyval": { "public": "722dbc861813bb5b568524d62083e875c08e66fed1694d9161d253fa163dd86f" } }, "b2403f96ae9b1089d8cbc15bbc35e9acbacd7984571f951b43aab56aedcfa84f": { "keytype": "ed25519", "scheme": "ed25519", "keyid_hash_algorithms": [ "sha256", "sha512" ], "keyval": { "public": "153986a7370e002f377dd68797e7466c421180c1571e233de2f8ab41c8af4f54" } }, "bc8f087663855564b358ddf314d5932ab920af17bd1df2f58b397afd82d76dc1": { "keytype": "ed25519", "scheme": "ed25519", "keyid_hash_algorithms": [ "sha256", "sha512" ], "keyval": { "public": "aee574e56780ea1709a8b56e02d4ffdd9a3a1deaed61e2eb0701f376a4422e42" } } }, "roles": { "root": { "keyids": [ "b2403f96ae9b1089d8cbc15bbc35e9acbacd7984571f951b43aab56aedcfa84f" ], "threshold": 1 }, "snapshot": { "keyids": [ "b096bc2d67080cec22e6c0bbaa69cfd9d714b9e9ad847d255f950b2728855fef" ], "threshold": 1 }, "targets": { "keyids": [ "bc8f087663855564b358ddf314d5932ab920af17bd1df2f58b397afd82d76dc1" ], "threshold": 1 }, "timestamp": { "keyids": [ "aa3255b4e8e17e566d2bdbea0e5842978f9fa1d2fa9ec76ae76b146164acbfc8" ], "threshold": 1 } }, "consistent_snapshot": true }, "signatures": [ { "keyid": "b2403f96ae9b1089d8cbc15bbc35e9acbacd7984571f951b43aab56aedcfa84f", "sig": "15431a0217deb636e2e79876cfdfc8b78fdda1119e6c8512c7dc61af240a7d2303f172e7fc28de7dfe58d92c84f5118ccd09d0f29f49aaa3f7ef95edf21e2d0a" } ] }client/testdata/go-tuf/consistent-snapshot-true/3/repository/4.snapshot.json000066400000000000000000000011521453140004500276210ustar00rootroot00000000000000{ "signed": { "_type": "snapshot", "spec_version": "1.0", "version": 4, "expires": "2100-01-01T00:00:00Z", "meta": { "targets.json": { "length": 1191, "hashes": { "sha512": "2bf10fb9469cb5f44ccae3c8dac2f70c19e7c58479f74f21aca7a424774ed7ef43295fff3c05f7cfe457b5832366b64e0550874775e277d7233c060e9f94e140" }, "version": 4 } } }, "signatures": [ { "keyid": "b096bc2d67080cec22e6c0bbaa69cfd9d714b9e9ad847d255f950b2728855fef", "sig": "c5efdc1b461ae319c991fd1840771d94dfc8a3e655ac233901a27959e9f2c3e7ab61b83e3d674caf9e2a6043e776d7c32a2c36dbf0922f7f08059d08fc26720a" } ] }client/testdata/go-tuf/consistent-snapshot-true/3/repository/4.targets.json000066400000000000000000000022471453140004500274410ustar00rootroot00000000000000{ "signed": { "_type": "targets", "spec_version": "1.0", "version": 4, "expires": "2100-01-01T00:00:00Z", "targets": { "0": { "length": 1, "hashes": { "sha512": "31bca02094eb78126a517b206a88c73cfa9ec6f704c7030d18212cace820f025f00bf0ea68dbf3f3a5436ca63b53bf7bf80ad8d5de7d8359d0b7fed9dbc3ab99" } }, "1": { "length": 1, "hashes": { "sha512": "4dff4ea340f0a823f15d3f4f01ab62eae0e5da579ccb851f8db9dfe84c58b2b37b89903a740e1ee172da793a6e79d560e5f7f9bd058a12a280433ed6fa46510a" } }, "2": { "length": 1, "hashes": { "sha512": "40b244112641dd78dd4f93b6c9190dd46e0099194d5a44257b7efad6ef9ff4683da1eda0244448cb343aa688f5d3efd7314dafe580ac0bcbf115aeca9e8dc114" } }, "3": { "length": 1, "hashes": { "sha512": "3bafbf08882a2d10133093a1b8433f50563b93c14acd05b79028eb1d12799027241450980651994501423a66c276ae26c43b739bc65c4e16b10c3af6c202aebb" } } } }, "signatures": [ { "keyid": "bc8f087663855564b358ddf314d5932ab920af17bd1df2f58b397afd82d76dc1", "sig": "7bfe0a63ee324034807b5341336d9d2d64e9ef3936086577b5bbcc6d021b4656bd6bf14d817bbb3908e4dcb05391d1b4031b527c14d942c2d1e38275d5ff1308" } ] }client/testdata/go-tuf/consistent-snapshot-true/3/repository/root.json000066400000000000000000000042011453140004500266010ustar00rootroot00000000000000{ "signed": { "_type": "root", "spec_version": "1.0", "version": 4, "expires": "2100-01-01T00:00:00Z", "keys": { "aa3255b4e8e17e566d2bdbea0e5842978f9fa1d2fa9ec76ae76b146164acbfc8": { "keytype": "ed25519", "scheme": "ed25519", "keyid_hash_algorithms": [ "sha256", "sha512" ], "keyval": { "public": "8656ad20568cd3534c405e4d9a84b0c6e6163f7f66434df77416502835b9b160" } }, "b096bc2d67080cec22e6c0bbaa69cfd9d714b9e9ad847d255f950b2728855fef": { "keytype": "ed25519", "scheme": "ed25519", "keyid_hash_algorithms": [ "sha256", "sha512" ], "keyval": { "public": "722dbc861813bb5b568524d62083e875c08e66fed1694d9161d253fa163dd86f" } }, "b2403f96ae9b1089d8cbc15bbc35e9acbacd7984571f951b43aab56aedcfa84f": { "keytype": "ed25519", "scheme": "ed25519", "keyid_hash_algorithms": [ "sha256", "sha512" ], "keyval": { "public": "153986a7370e002f377dd68797e7466c421180c1571e233de2f8ab41c8af4f54" } }, "bc8f087663855564b358ddf314d5932ab920af17bd1df2f58b397afd82d76dc1": { "keytype": "ed25519", "scheme": "ed25519", "keyid_hash_algorithms": [ "sha256", "sha512" ], "keyval": { "public": "aee574e56780ea1709a8b56e02d4ffdd9a3a1deaed61e2eb0701f376a4422e42" } } }, "roles": { "root": { "keyids": [ "b2403f96ae9b1089d8cbc15bbc35e9acbacd7984571f951b43aab56aedcfa84f" ], "threshold": 1 }, "snapshot": { "keyids": [ "b096bc2d67080cec22e6c0bbaa69cfd9d714b9e9ad847d255f950b2728855fef" ], "threshold": 1 }, "targets": { "keyids": [ "bc8f087663855564b358ddf314d5932ab920af17bd1df2f58b397afd82d76dc1" ], "threshold": 1 }, "timestamp": { "keyids": [ "aa3255b4e8e17e566d2bdbea0e5842978f9fa1d2fa9ec76ae76b146164acbfc8" ], "threshold": 1 } }, "consistent_snapshot": true }, "signatures": [ { "keyid": "b2403f96ae9b1089d8cbc15bbc35e9acbacd7984571f951b43aab56aedcfa84f", "sig": "15431a0217deb636e2e79876cfdfc8b78fdda1119e6c8512c7dc61af240a7d2303f172e7fc28de7dfe58d92c84f5118ccd09d0f29f49aaa3f7ef95edf21e2d0a" } ] }client/testdata/go-tuf/consistent-snapshot-true/3/repository/snapshot.json000066400000000000000000000011521453140004500274570ustar00rootroot00000000000000{ "signed": { "_type": "snapshot", "spec_version": "1.0", "version": 4, "expires": "2100-01-01T00:00:00Z", "meta": { "targets.json": { "length": 1191, "hashes": { "sha512": "2bf10fb9469cb5f44ccae3c8dac2f70c19e7c58479f74f21aca7a424774ed7ef43295fff3c05f7cfe457b5832366b64e0550874775e277d7233c060e9f94e140" }, "version": 4 } } }, "signatures": [ { "keyid": "b096bc2d67080cec22e6c0bbaa69cfd9d714b9e9ad847d255f950b2728855fef", "sig": "c5efdc1b461ae319c991fd1840771d94dfc8a3e655ac233901a27959e9f2c3e7ab61b83e3d674caf9e2a6043e776d7c32a2c36dbf0922f7f08059d08fc26720a" } ] }client/testdata/go-tuf/consistent-snapshot-true/3/repository/targets.json000066400000000000000000000022471453140004500272770ustar00rootroot00000000000000{ "signed": { "_type": "targets", "spec_version": "1.0", "version": 4, "expires": "2100-01-01T00:00:00Z", "targets": { "0": { "length": 1, "hashes": { "sha512": "31bca02094eb78126a517b206a88c73cfa9ec6f704c7030d18212cace820f025f00bf0ea68dbf3f3a5436ca63b53bf7bf80ad8d5de7d8359d0b7fed9dbc3ab99" } }, "1": { "length": 1, "hashes": { "sha512": "4dff4ea340f0a823f15d3f4f01ab62eae0e5da579ccb851f8db9dfe84c58b2b37b89903a740e1ee172da793a6e79d560e5f7f9bd058a12a280433ed6fa46510a" } }, "2": { "length": 1, "hashes": { "sha512": "40b244112641dd78dd4f93b6c9190dd46e0099194d5a44257b7efad6ef9ff4683da1eda0244448cb343aa688f5d3efd7314dafe580ac0bcbf115aeca9e8dc114" } }, "3": { "length": 1, "hashes": { "sha512": "3bafbf08882a2d10133093a1b8433f50563b93c14acd05b79028eb1d12799027241450980651994501423a66c276ae26c43b739bc65c4e16b10c3af6c202aebb" } } } }, "signatures": [ { "keyid": "bc8f087663855564b358ddf314d5932ab920af17bd1df2f58b397afd82d76dc1", "sig": "7bfe0a63ee324034807b5341336d9d2d64e9ef3936086577b5bbcc6d021b4656bd6bf14d817bbb3908e4dcb05391d1b4031b527c14d942c2d1e38275d5ff1308" } ] }client/testdata/go-tuf/consistent-snapshot-true/3/repository/targets/000077500000000000000000000000001453140004500263775ustar00rootroot00000000000000f820397645f6f28ac0d75055df0fd28512bd7b70.paxheader00006660000000000000000000000577145314000450020367xustar00rootroot00000000000000209 path=client/testdata/go-tuf/consistent-snapshot-true/3/repository/targets/31bca02094eb78126a517b206a88c73cfa9ec6f704c7030d18212cace820f025f00bf0ea68dbf3f3a5436ca63b53bf7bf80ad8d5de7d8359d0b7fed9dbc3ab99.0 174 linkpath=../../../2/repository/targets/31bca02094eb78126a517b206a88c73cfa9ec6f704c7030d18212cace820f025f00bf0ea68dbf3f3a5436ca63b53bf7bf80ad8d5de7d8359d0b7fed9dbc3ab99.0 f820397645f6f28ac0d75055df0fd28512bd7b70.data000077700000000000000000000000001453140004500271362see f820397645f6f28ac0d75055df0fd28512bd7b70.paxheaderustar00rootroot00000000000000e440e5c842586965a7fb77deda2eca68612b1f53.paxheader00006660000000000000000000000321145314000450020520xustar00rootroot00000000000000209 path=client/testdata/go-tuf/consistent-snapshot-true/3/repository/targets/3bafbf08882a2d10133093a1b8433f50563b93c14acd05b79028eb1d12799027241450980651994501423a66c276ae26c43b739bc65c4e16b10c3af6c202aebb.3 e440e5c842586965a7fb77deda2eca68612b1f53.data000066400000000000000000000000011453140004500173510ustar00rootroot0000000000000037cbcc2a6335c6040f6ee95f6300ea6aea7a8a87f.paxheader00006660000000000000000000000577145314000450020736xustar00rootroot00000000000000209 path=client/testdata/go-tuf/consistent-snapshot-true/3/repository/targets/40b244112641dd78dd4f93b6c9190dd46e0099194d5a44257b7efad6ef9ff4683da1eda0244448cb343aa688f5d3efd7314dafe580ac0bcbf115aeca9e8dc114.2 174 linkpath=../../../2/repository/targets/40b244112641dd78dd4f93b6c9190dd46e0099194d5a44257b7efad6ef9ff4683da1eda0244448cb343aa688f5d3efd7314dafe580ac0bcbf115aeca9e8dc114.2 7cbcc2a6335c6040f6ee95f6300ea6aea7a8a87f.data000077700000000000000000000000001453140004500300542see 7cbcc2a6335c6040f6ee95f6300ea6aea7a8a87f.paxheaderustar00rootroot00000000000000180cdb4fd229abf57fb6a4c85457ad9a8620fd92.paxheader00006660000000000000000000000577145314000450020670xustar00rootroot00000000000000209 path=client/testdata/go-tuf/consistent-snapshot-true/3/repository/targets/4dff4ea340f0a823f15d3f4f01ab62eae0e5da579ccb851f8db9dfe84c58b2b37b89903a740e1ee172da793a6e79d560e5f7f9bd058a12a280433ed6fa46510a.1 174 linkpath=../../../2/repository/targets/4dff4ea340f0a823f15d3f4f01ab62eae0e5da579ccb851f8db9dfe84c58b2b37b89903a740e1ee172da793a6e79d560e5f7f9bd058a12a280433ed6fa46510a.1 180cdb4fd229abf57fb6a4c85457ad9a8620fd92.data000077700000000000000000000000001453140004500277402see 180cdb4fd229abf57fb6a4c85457ad9a8620fd92.paxheaderustar00rootroot00000000000000client/testdata/go-tuf/consistent-snapshot-true/3/repository/timestamp.json000066400000000000000000000011531453140004500276240ustar00rootroot00000000000000{ "signed": { "_type": "timestamp", "spec_version": "1.0", "version": 4, "expires": "2100-01-01T00:00:00Z", "meta": { "snapshot.json": { "length": 618, "hashes": { "sha512": "4ddee1c0c54af1a3dc54897af33c2457525963059c29583e6df65b9b238732070bd8eb470201154f2d2fa5f8bdf37e01a86e6a53c2bcfe0ff302571458c1898d" }, "version": 4 } } }, "signatures": [ { "keyid": "aa3255b4e8e17e566d2bdbea0e5842978f9fa1d2fa9ec76ae76b146164acbfc8", "sig": "585cdcc87c23711642449d469df8bedb53a67b65ac75c303d13b7022c8c34c1db70c926e009c2438639af3be1d613f7ce4c7e28020865ad5ad93a5b085a76005" } ] }client/testdata/go-tuf/consistent-snapshot-true/4/000077500000000000000000000000001453140004500225105ustar00rootroot00000000000000client/testdata/go-tuf/consistent-snapshot-true/4/repository/000077500000000000000000000000001453140004500247275ustar00rootroot00000000000000client/testdata/go-tuf/consistent-snapshot-true/4/repository/1.root.json000077700000000000000000000000001453140004500337632../../3/repository/1.root.jsonustar00rootroot00000000000000client/testdata/go-tuf/consistent-snapshot-true/4/repository/1.snapshot.json000077700000000000000000000000001453140004500355132../../3/repository/1.snapshot.jsonustar00rootroot00000000000000client/testdata/go-tuf/consistent-snapshot-true/4/repository/1.targets.json000077700000000000000000000000001453140004500351372../../3/repository/1.targets.jsonustar00rootroot00000000000000client/testdata/go-tuf/consistent-snapshot-true/4/repository/2.root.json000077700000000000000000000000001453140004500337652../../3/repository/2.root.jsonustar00rootroot00000000000000client/testdata/go-tuf/consistent-snapshot-true/4/repository/2.snapshot.json000077700000000000000000000000001453140004500355152../../3/repository/2.snapshot.jsonustar00rootroot00000000000000client/testdata/go-tuf/consistent-snapshot-true/4/repository/2.targets.json000077700000000000000000000000001453140004500351412../../3/repository/2.targets.jsonustar00rootroot00000000000000client/testdata/go-tuf/consistent-snapshot-true/4/repository/3.root.json000077700000000000000000000000001453140004500337672../../3/repository/3.root.jsonustar00rootroot00000000000000client/testdata/go-tuf/consistent-snapshot-true/4/repository/3.snapshot.json000077700000000000000000000000001453140004500355172../../3/repository/3.snapshot.jsonustar00rootroot00000000000000client/testdata/go-tuf/consistent-snapshot-true/4/repository/3.targets.json000077700000000000000000000000001453140004500351432../../3/repository/3.targets.jsonustar00rootroot00000000000000client/testdata/go-tuf/consistent-snapshot-true/4/repository/4.root.json000077700000000000000000000000001453140004500337712../../3/repository/4.root.jsonustar00rootroot00000000000000client/testdata/go-tuf/consistent-snapshot-true/4/repository/4.snapshot.json000077700000000000000000000000001453140004500355212../../3/repository/4.snapshot.jsonustar00rootroot00000000000000client/testdata/go-tuf/consistent-snapshot-true/4/repository/4.targets.json000077700000000000000000000000001453140004500351452../../3/repository/4.targets.jsonustar00rootroot00000000000000client/testdata/go-tuf/consistent-snapshot-true/4/repository/5.root.json000066400000000000000000000042011453140004500267450ustar00rootroot00000000000000{ "signed": { "_type": "root", "spec_version": "1.0", "version": 5, "expires": "2100-01-01T00:00:00Z", "keys": { "a8eaf6de5aecfd0a72b60295b1e1cd12f349079ebcbbb63dbe7072f162e85315": { "keytype": "ed25519", "scheme": "ed25519", "keyid_hash_algorithms": [ "sha256", "sha512" ], "keyval": { "public": "3ab34b0c2d4eadccaa0f0cf22ced07b552394063a9de2806993d022360dffc76" } }, "b096bc2d67080cec22e6c0bbaa69cfd9d714b9e9ad847d255f950b2728855fef": { "keytype": "ed25519", "scheme": "ed25519", "keyid_hash_algorithms": [ "sha256", "sha512" ], "keyval": { "public": "722dbc861813bb5b568524d62083e875c08e66fed1694d9161d253fa163dd86f" } }, "b2403f96ae9b1089d8cbc15bbc35e9acbacd7984571f951b43aab56aedcfa84f": { "keytype": "ed25519", "scheme": "ed25519", "keyid_hash_algorithms": [ "sha256", "sha512" ], "keyval": { "public": "153986a7370e002f377dd68797e7466c421180c1571e233de2f8ab41c8af4f54" } }, "bc8f087663855564b358ddf314d5932ab920af17bd1df2f58b397afd82d76dc1": { "keytype": "ed25519", "scheme": "ed25519", "keyid_hash_algorithms": [ "sha256", "sha512" ], "keyval": { "public": "aee574e56780ea1709a8b56e02d4ffdd9a3a1deaed61e2eb0701f376a4422e42" } } }, "roles": { "root": { "keyids": [ "b2403f96ae9b1089d8cbc15bbc35e9acbacd7984571f951b43aab56aedcfa84f" ], "threshold": 1 }, "snapshot": { "keyids": [ "b096bc2d67080cec22e6c0bbaa69cfd9d714b9e9ad847d255f950b2728855fef" ], "threshold": 1 }, "targets": { "keyids": [ "bc8f087663855564b358ddf314d5932ab920af17bd1df2f58b397afd82d76dc1" ], "threshold": 1 }, "timestamp": { "keyids": [ "a8eaf6de5aecfd0a72b60295b1e1cd12f349079ebcbbb63dbe7072f162e85315" ], "threshold": 1 } }, "consistent_snapshot": true }, "signatures": [ { "keyid": "b2403f96ae9b1089d8cbc15bbc35e9acbacd7984571f951b43aab56aedcfa84f", "sig": "2b6f30258eaf8b4b2d900a2efb4a597b45a9c0c5a0720d5521dd37d63c34d1db62aafaa1d95b6d881f9c991615ab68930c24ef247d2f45836bca3659e36d9c0b" } ] }client/testdata/go-tuf/consistent-snapshot-true/4/repository/5.snapshot.json000066400000000000000000000011521453140004500276230ustar00rootroot00000000000000{ "signed": { "_type": "snapshot", "spec_version": "1.0", "version": 5, "expires": "2100-01-01T00:00:00Z", "meta": { "targets.json": { "length": 1392, "hashes": { "sha512": "93146957ab1f54fe1e8687f408c21a19ad6c033518148bb730b7e635e02f96d9297f1edf12ea5f50354cfcb90385eec9f594d04a08ee876c83759e2314ec8b1a" }, "version": 5 } } }, "signatures": [ { "keyid": "b096bc2d67080cec22e6c0bbaa69cfd9d714b9e9ad847d255f950b2728855fef", "sig": "c9da15fd5b0b359a46503d0a23fa3a4e8e481cb2bdb72d6dbec4852ed6f9d32e186b35071b6ca70ec947e1688458c3476d33991af202b177ffd79ff89955e703" } ] }client/testdata/go-tuf/consistent-snapshot-true/4/repository/5.targets.json000066400000000000000000000025601453140004500274410ustar00rootroot00000000000000{ "signed": { "_type": "targets", "spec_version": "1.0", "version": 5, "expires": "2100-01-01T00:00:00Z", "targets": { "0": { "length": 1, "hashes": { "sha512": "31bca02094eb78126a517b206a88c73cfa9ec6f704c7030d18212cace820f025f00bf0ea68dbf3f3a5436ca63b53bf7bf80ad8d5de7d8359d0b7fed9dbc3ab99" } }, "1": { "length": 1, "hashes": { "sha512": "4dff4ea340f0a823f15d3f4f01ab62eae0e5da579ccb851f8db9dfe84c58b2b37b89903a740e1ee172da793a6e79d560e5f7f9bd058a12a280433ed6fa46510a" } }, "2": { "length": 1, "hashes": { "sha512": "40b244112641dd78dd4f93b6c9190dd46e0099194d5a44257b7efad6ef9ff4683da1eda0244448cb343aa688f5d3efd7314dafe580ac0bcbf115aeca9e8dc114" } }, "3": { "length": 1, "hashes": { "sha512": "3bafbf08882a2d10133093a1b8433f50563b93c14acd05b79028eb1d12799027241450980651994501423a66c276ae26c43b739bc65c4e16b10c3af6c202aebb" } }, "4": { "length": 1, "hashes": { "sha512": "a321d8b405e3ef2604959847b36d171eebebc4a8941dc70a4784935a4fca5d5813de84dfa049f06549aa61b20848c1633ce81b675286ea8fb53db240d831c568" } } } }, "signatures": [ { "keyid": "bc8f087663855564b358ddf314d5932ab920af17bd1df2f58b397afd82d76dc1", "sig": "68f2346cdbe045e8558b2ccd86be66e15466955167557c704b51d7163838f670c53ab9247c16a4ed0cd4ecc981a7e2a04a350b01548f97654499d6f9c17c4202" } ] }client/testdata/go-tuf/consistent-snapshot-true/4/repository/root.json000066400000000000000000000042011453140004500266020ustar00rootroot00000000000000{ "signed": { "_type": "root", "spec_version": "1.0", "version": 5, "expires": "2100-01-01T00:00:00Z", "keys": { "a8eaf6de5aecfd0a72b60295b1e1cd12f349079ebcbbb63dbe7072f162e85315": { "keytype": "ed25519", "scheme": "ed25519", "keyid_hash_algorithms": [ "sha256", "sha512" ], "keyval": { "public": "3ab34b0c2d4eadccaa0f0cf22ced07b552394063a9de2806993d022360dffc76" } }, "b096bc2d67080cec22e6c0bbaa69cfd9d714b9e9ad847d255f950b2728855fef": { "keytype": "ed25519", "scheme": "ed25519", "keyid_hash_algorithms": [ "sha256", "sha512" ], "keyval": { "public": "722dbc861813bb5b568524d62083e875c08e66fed1694d9161d253fa163dd86f" } }, "b2403f96ae9b1089d8cbc15bbc35e9acbacd7984571f951b43aab56aedcfa84f": { "keytype": "ed25519", "scheme": "ed25519", "keyid_hash_algorithms": [ "sha256", "sha512" ], "keyval": { "public": "153986a7370e002f377dd68797e7466c421180c1571e233de2f8ab41c8af4f54" } }, "bc8f087663855564b358ddf314d5932ab920af17bd1df2f58b397afd82d76dc1": { "keytype": "ed25519", "scheme": "ed25519", "keyid_hash_algorithms": [ "sha256", "sha512" ], "keyval": { "public": "aee574e56780ea1709a8b56e02d4ffdd9a3a1deaed61e2eb0701f376a4422e42" } } }, "roles": { "root": { "keyids": [ "b2403f96ae9b1089d8cbc15bbc35e9acbacd7984571f951b43aab56aedcfa84f" ], "threshold": 1 }, "snapshot": { "keyids": [ "b096bc2d67080cec22e6c0bbaa69cfd9d714b9e9ad847d255f950b2728855fef" ], "threshold": 1 }, "targets": { "keyids": [ "bc8f087663855564b358ddf314d5932ab920af17bd1df2f58b397afd82d76dc1" ], "threshold": 1 }, "timestamp": { "keyids": [ "a8eaf6de5aecfd0a72b60295b1e1cd12f349079ebcbbb63dbe7072f162e85315" ], "threshold": 1 } }, "consistent_snapshot": true }, "signatures": [ { "keyid": "b2403f96ae9b1089d8cbc15bbc35e9acbacd7984571f951b43aab56aedcfa84f", "sig": "2b6f30258eaf8b4b2d900a2efb4a597b45a9c0c5a0720d5521dd37d63c34d1db62aafaa1d95b6d881f9c991615ab68930c24ef247d2f45836bca3659e36d9c0b" } ] }client/testdata/go-tuf/consistent-snapshot-true/4/repository/snapshot.json000066400000000000000000000011521453140004500274600ustar00rootroot00000000000000{ "signed": { "_type": "snapshot", "spec_version": "1.0", "version": 5, "expires": "2100-01-01T00:00:00Z", "meta": { "targets.json": { "length": 1392, "hashes": { "sha512": "93146957ab1f54fe1e8687f408c21a19ad6c033518148bb730b7e635e02f96d9297f1edf12ea5f50354cfcb90385eec9f594d04a08ee876c83759e2314ec8b1a" }, "version": 5 } } }, "signatures": [ { "keyid": "b096bc2d67080cec22e6c0bbaa69cfd9d714b9e9ad847d255f950b2728855fef", "sig": "c9da15fd5b0b359a46503d0a23fa3a4e8e481cb2bdb72d6dbec4852ed6f9d32e186b35071b6ca70ec947e1688458c3476d33991af202b177ffd79ff89955e703" } ] }client/testdata/go-tuf/consistent-snapshot-true/4/repository/targets.json000066400000000000000000000025601453140004500272760ustar00rootroot00000000000000{ "signed": { "_type": "targets", "spec_version": "1.0", "version": 5, "expires": "2100-01-01T00:00:00Z", "targets": { "0": { "length": 1, "hashes": { "sha512": "31bca02094eb78126a517b206a88c73cfa9ec6f704c7030d18212cace820f025f00bf0ea68dbf3f3a5436ca63b53bf7bf80ad8d5de7d8359d0b7fed9dbc3ab99" } }, "1": { "length": 1, "hashes": { "sha512": "4dff4ea340f0a823f15d3f4f01ab62eae0e5da579ccb851f8db9dfe84c58b2b37b89903a740e1ee172da793a6e79d560e5f7f9bd058a12a280433ed6fa46510a" } }, "2": { "length": 1, "hashes": { "sha512": "40b244112641dd78dd4f93b6c9190dd46e0099194d5a44257b7efad6ef9ff4683da1eda0244448cb343aa688f5d3efd7314dafe580ac0bcbf115aeca9e8dc114" } }, "3": { "length": 1, "hashes": { "sha512": "3bafbf08882a2d10133093a1b8433f50563b93c14acd05b79028eb1d12799027241450980651994501423a66c276ae26c43b739bc65c4e16b10c3af6c202aebb" } }, "4": { "length": 1, "hashes": { "sha512": "a321d8b405e3ef2604959847b36d171eebebc4a8941dc70a4784935a4fca5d5813de84dfa049f06549aa61b20848c1633ce81b675286ea8fb53db240d831c568" } } } }, "signatures": [ { "keyid": "bc8f087663855564b358ddf314d5932ab920af17bd1df2f58b397afd82d76dc1", "sig": "68f2346cdbe045e8558b2ccd86be66e15466955167557c704b51d7163838f670c53ab9247c16a4ed0cd4ecc981a7e2a04a350b01548f97654499d6f9c17c4202" } ] }client/testdata/go-tuf/consistent-snapshot-true/4/repository/targets/000077500000000000000000000000001453140004500264005ustar00rootroot000000000000008bca78fbca6323e517f27b36ae635780adcf1883.paxheader00006660000000000000000000000577145314000450020607xustar00rootroot00000000000000209 path=client/testdata/go-tuf/consistent-snapshot-true/4/repository/targets/31bca02094eb78126a517b206a88c73cfa9ec6f704c7030d18212cace820f025f00bf0ea68dbf3f3a5436ca63b53bf7bf80ad8d5de7d8359d0b7fed9dbc3ab99.0 174 linkpath=../../../3/repository/targets/31bca02094eb78126a517b206a88c73cfa9ec6f704c7030d18212cace820f025f00bf0ea68dbf3f3a5436ca63b53bf7bf80ad8d5de7d8359d0b7fed9dbc3ab99.0 8bca78fbca6323e517f27b36ae635780adcf1883.data000077700000000000000000000000001453140004500275762see 8bca78fbca6323e517f27b36ae635780adcf1883.paxheaderustar00rootroot00000000000000814339fc398f0e36b2d3fb3a9a3d3dc1f588267a.paxheader00006660000000000000000000000577145314000450020532xustar00rootroot00000000000000209 path=client/testdata/go-tuf/consistent-snapshot-true/4/repository/targets/3bafbf08882a2d10133093a1b8433f50563b93c14acd05b79028eb1d12799027241450980651994501423a66c276ae26c43b739bc65c4e16b10c3af6c202aebb.3 174 linkpath=../../../3/repository/targets/3bafbf08882a2d10133093a1b8433f50563b93c14acd05b79028eb1d12799027241450980651994501423a66c276ae26c43b739bc65c4e16b10c3af6c202aebb.3 814339fc398f0e36b2d3fb3a9a3d3dc1f588267a.data000077700000000000000000000000001453140004500274442see 814339fc398f0e36b2d3fb3a9a3d3dc1f588267a.paxheaderustar00rootroot00000000000000dc5c46dccf4ff0841ec5a355bf8e280958fb807a.paxheader00006660000000000000000000000577145314000450020755xustar00rootroot00000000000000209 path=client/testdata/go-tuf/consistent-snapshot-true/4/repository/targets/40b244112641dd78dd4f93b6c9190dd46e0099194d5a44257b7efad6ef9ff4683da1eda0244448cb343aa688f5d3efd7314dafe580ac0bcbf115aeca9e8dc114.2 174 linkpath=../../../3/repository/targets/40b244112641dd78dd4f93b6c9190dd46e0099194d5a44257b7efad6ef9ff4683da1eda0244448cb343aa688f5d3efd7314dafe580ac0bcbf115aeca9e8dc114.2 dc5c46dccf4ff0841ec5a355bf8e280958fb807a.data000077700000000000000000000000001453140004500301122see dc5c46dccf4ff0841ec5a355bf8e280958fb807a.paxheaderustar00rootroot0000000000000016b79678a9a80678a19ab98b3c05e2669b332a31.paxheader00006660000000000000000000000577145314000450020234xustar00rootroot00000000000000209 path=client/testdata/go-tuf/consistent-snapshot-true/4/repository/targets/4dff4ea340f0a823f15d3f4f01ab62eae0e5da579ccb851f8db9dfe84c58b2b37b89903a740e1ee172da793a6e79d560e5f7f9bd058a12a280433ed6fa46510a.1 174 linkpath=../../../3/repository/targets/4dff4ea340f0a823f15d3f4f01ab62eae0e5da579ccb851f8db9dfe84c58b2b37b89903a740e1ee172da793a6e79d560e5f7f9bd058a12a280433ed6fa46510a.1 16b79678a9a80678a19ab98b3c05e2669b332a31.data000077700000000000000000000000001453140004500266502see 16b79678a9a80678a19ab98b3c05e2669b332a31.paxheaderustar00rootroot00000000000000bf0d87ab1b2b0ec1a11a3973d2845b42413d9767.paxheader00006660000000000000000000000321145314000450020402xustar00rootroot00000000000000209 path=client/testdata/go-tuf/consistent-snapshot-true/4/repository/targets/a321d8b405e3ef2604959847b36d171eebebc4a8941dc70a4784935a4fca5d5813de84dfa049f06549aa61b20848c1633ce81b675286ea8fb53db240d831c568.4 bf0d87ab1b2b0ec1a11a3973d2845b42413d9767.data000066400000000000000000000000011453140004500172330ustar00rootroot000000000000004client/testdata/go-tuf/consistent-snapshot-true/4/repository/timestamp.json000066400000000000000000000011531453140004500276250ustar00rootroot00000000000000{ "signed": { "_type": "timestamp", "spec_version": "1.0", "version": 5, "expires": "2100-01-01T00:00:00Z", "meta": { "snapshot.json": { "length": 618, "hashes": { "sha512": "066115510f2f7fbb2f5cb0a1c1d00759161d8a92329e9ce54d4b17c06466b5a4423bb8bcc9e47c0a37db5c7d8d3bc01df10c4ea25605778e788a76e3e9ca1e0e" }, "version": 5 } } }, "signatures": [ { "keyid": "a8eaf6de5aecfd0a72b60295b1e1cd12f349079ebcbbb63dbe7072f162e85315", "sig": "84b9e41c93b32eed4bdb6febe70f9bd4db39bbc7f0c7f820f6a078bbb7146df080a9ceaa237303e3f69e49eb33cc63f8ddff8fba8330904f5fe8d7a66f70400e" } ] }client/testdata/go-tuf/consistent-snapshot-true/5/000077500000000000000000000000001453140004500225115ustar00rootroot00000000000000client/testdata/go-tuf/consistent-snapshot-true/5/repository/000077500000000000000000000000001453140004500247305ustar00rootroot00000000000000client/testdata/go-tuf/consistent-snapshot-true/5/repository/1.root.json000077700000000000000000000000001453140004500337652../../4/repository/1.root.jsonustar00rootroot00000000000000client/testdata/go-tuf/consistent-snapshot-true/5/repository/1.snapshot.json000077700000000000000000000000001453140004500355152../../4/repository/1.snapshot.jsonustar00rootroot00000000000000client/testdata/go-tuf/consistent-snapshot-true/5/repository/1.targets.json000077700000000000000000000000001453140004500351412../../4/repository/1.targets.jsonustar00rootroot00000000000000client/testdata/go-tuf/consistent-snapshot-true/5/repository/2.root.json000077700000000000000000000000001453140004500337672../../4/repository/2.root.jsonustar00rootroot00000000000000client/testdata/go-tuf/consistent-snapshot-true/5/repository/2.snapshot.json000077700000000000000000000000001453140004500355172../../4/repository/2.snapshot.jsonustar00rootroot00000000000000client/testdata/go-tuf/consistent-snapshot-true/5/repository/2.targets.json000077700000000000000000000000001453140004500351432../../4/repository/2.targets.jsonustar00rootroot00000000000000client/testdata/go-tuf/consistent-snapshot-true/5/repository/3.root.json000077700000000000000000000000001453140004500337712../../4/repository/3.root.jsonustar00rootroot00000000000000client/testdata/go-tuf/consistent-snapshot-true/5/repository/3.snapshot.json000077700000000000000000000000001453140004500355212../../4/repository/3.snapshot.jsonustar00rootroot00000000000000client/testdata/go-tuf/consistent-snapshot-true/5/repository/3.targets.json000077700000000000000000000000001453140004500351452../../4/repository/3.targets.jsonustar00rootroot00000000000000client/testdata/go-tuf/consistent-snapshot-true/5/repository/4.root.json000077700000000000000000000000001453140004500337732../../4/repository/4.root.jsonustar00rootroot00000000000000client/testdata/go-tuf/consistent-snapshot-true/5/repository/4.snapshot.json000077700000000000000000000000001453140004500355232../../4/repository/4.snapshot.jsonustar00rootroot00000000000000client/testdata/go-tuf/consistent-snapshot-true/5/repository/4.targets.json000077700000000000000000000000001453140004500351472../../4/repository/4.targets.jsonustar00rootroot00000000000000client/testdata/go-tuf/consistent-snapshot-true/5/repository/5.root.json000077700000000000000000000000001453140004500337752../../4/repository/5.root.jsonustar00rootroot00000000000000client/testdata/go-tuf/consistent-snapshot-true/5/repository/5.snapshot.json000077700000000000000000000000001453140004500355252../../4/repository/5.snapshot.jsonustar00rootroot00000000000000client/testdata/go-tuf/consistent-snapshot-true/5/repository/5.targets.json000077700000000000000000000000001453140004500351512../../4/repository/5.targets.jsonustar00rootroot00000000000000client/testdata/go-tuf/consistent-snapshot-true/5/repository/6.snapshot.json000066400000000000000000000011521453140004500276250ustar00rootroot00000000000000{ "signed": { "_type": "snapshot", "spec_version": "1.0", "version": 6, "expires": "2100-01-01T00:00:00Z", "meta": { "targets.json": { "length": 1593, "hashes": { "sha512": "96fa32225e88f9e98db51369fce606039040efc51f098552594132b301228a78c2f2034d059e4d7d6d7bea14ae9862dd8a995056c5f2ed5ff0d6dc09b9da01df" }, "version": 6 } } }, "signatures": [ { "keyid": "b096bc2d67080cec22e6c0bbaa69cfd9d714b9e9ad847d255f950b2728855fef", "sig": "7da0cd1e09be0b8161a1048e08a645e5c8d1558137b2934418bf4e28d4d380b6df2306f5cc89e87e41e5abf079547a709fccd2548bf00fd5acfe5ad2496d670b" } ] }client/testdata/go-tuf/consistent-snapshot-true/5/repository/6.targets.json000066400000000000000000000030711453140004500274410ustar00rootroot00000000000000{ "signed": { "_type": "targets", "spec_version": "1.0", "version": 6, "expires": "2100-01-01T00:00:00Z", "targets": { "0": { "length": 1, "hashes": { "sha512": "31bca02094eb78126a517b206a88c73cfa9ec6f704c7030d18212cace820f025f00bf0ea68dbf3f3a5436ca63b53bf7bf80ad8d5de7d8359d0b7fed9dbc3ab99" } }, "1": { "length": 1, "hashes": { "sha512": "4dff4ea340f0a823f15d3f4f01ab62eae0e5da579ccb851f8db9dfe84c58b2b37b89903a740e1ee172da793a6e79d560e5f7f9bd058a12a280433ed6fa46510a" } }, "2": { "length": 1, "hashes": { "sha512": "40b244112641dd78dd4f93b6c9190dd46e0099194d5a44257b7efad6ef9ff4683da1eda0244448cb343aa688f5d3efd7314dafe580ac0bcbf115aeca9e8dc114" } }, "3": { "length": 1, "hashes": { "sha512": "3bafbf08882a2d10133093a1b8433f50563b93c14acd05b79028eb1d12799027241450980651994501423a66c276ae26c43b739bc65c4e16b10c3af6c202aebb" } }, "4": { "length": 1, "hashes": { "sha512": "a321d8b405e3ef2604959847b36d171eebebc4a8941dc70a4784935a4fca5d5813de84dfa049f06549aa61b20848c1633ce81b675286ea8fb53db240d831c568" } }, "5": { "length": 1, "hashes": { "sha512": "06df05371981a237d0ed11472fae7c94c9ac0eff1d05413516710d17b10a4fb6f4517bda4a695f02d0a73dd4db543b4653df28f5d09dab86f92ffb9b86d01e25" } } } }, "signatures": [ { "keyid": "bc8f087663855564b358ddf314d5932ab920af17bd1df2f58b397afd82d76dc1", "sig": "1e80ae84c4badf194e2fd7225c120999d8f628598fa0e994a2ff7cac705ec2f14601a64ba5370fc668f3fb114975dd81c554400d757f41762c4e12eb4db35d02" } ] }client/testdata/go-tuf/consistent-snapshot-true/5/repository/root.json000077700000000000000000000000001453140004500334672../../4/repository/root.jsonustar00rootroot00000000000000client/testdata/go-tuf/consistent-snapshot-true/5/repository/snapshot.json000066400000000000000000000011521453140004500274610ustar00rootroot00000000000000{ "signed": { "_type": "snapshot", "spec_version": "1.0", "version": 6, "expires": "2100-01-01T00:00:00Z", "meta": { "targets.json": { "length": 1593, "hashes": { "sha512": "96fa32225e88f9e98db51369fce606039040efc51f098552594132b301228a78c2f2034d059e4d7d6d7bea14ae9862dd8a995056c5f2ed5ff0d6dc09b9da01df" }, "version": 6 } } }, "signatures": [ { "keyid": "b096bc2d67080cec22e6c0bbaa69cfd9d714b9e9ad847d255f950b2728855fef", "sig": "7da0cd1e09be0b8161a1048e08a645e5c8d1558137b2934418bf4e28d4d380b6df2306f5cc89e87e41e5abf079547a709fccd2548bf00fd5acfe5ad2496d670b" } ] }client/testdata/go-tuf/consistent-snapshot-true/5/repository/targets.json000066400000000000000000000030711453140004500272750ustar00rootroot00000000000000{ "signed": { "_type": "targets", "spec_version": "1.0", "version": 6, "expires": "2100-01-01T00:00:00Z", "targets": { "0": { "length": 1, "hashes": { "sha512": "31bca02094eb78126a517b206a88c73cfa9ec6f704c7030d18212cace820f025f00bf0ea68dbf3f3a5436ca63b53bf7bf80ad8d5de7d8359d0b7fed9dbc3ab99" } }, "1": { "length": 1, "hashes": { "sha512": "4dff4ea340f0a823f15d3f4f01ab62eae0e5da579ccb851f8db9dfe84c58b2b37b89903a740e1ee172da793a6e79d560e5f7f9bd058a12a280433ed6fa46510a" } }, "2": { "length": 1, "hashes": { "sha512": "40b244112641dd78dd4f93b6c9190dd46e0099194d5a44257b7efad6ef9ff4683da1eda0244448cb343aa688f5d3efd7314dafe580ac0bcbf115aeca9e8dc114" } }, "3": { "length": 1, "hashes": { "sha512": "3bafbf08882a2d10133093a1b8433f50563b93c14acd05b79028eb1d12799027241450980651994501423a66c276ae26c43b739bc65c4e16b10c3af6c202aebb" } }, "4": { "length": 1, "hashes": { "sha512": "a321d8b405e3ef2604959847b36d171eebebc4a8941dc70a4784935a4fca5d5813de84dfa049f06549aa61b20848c1633ce81b675286ea8fb53db240d831c568" } }, "5": { "length": 1, "hashes": { "sha512": "06df05371981a237d0ed11472fae7c94c9ac0eff1d05413516710d17b10a4fb6f4517bda4a695f02d0a73dd4db543b4653df28f5d09dab86f92ffb9b86d01e25" } } } }, "signatures": [ { "keyid": "bc8f087663855564b358ddf314d5932ab920af17bd1df2f58b397afd82d76dc1", "sig": "1e80ae84c4badf194e2fd7225c120999d8f628598fa0e994a2ff7cac705ec2f14601a64ba5370fc668f3fb114975dd81c554400d757f41762c4e12eb4db35d02" } ] }client/testdata/go-tuf/consistent-snapshot-true/5/repository/targets/000077500000000000000000000000001453140004500264015ustar00rootroot000000000000007813681f5b41c028345ca62a2be376bae70b7f61.paxheader00006660000000000000000000000321145314000450020332xustar00rootroot00000000000000209 path=client/testdata/go-tuf/consistent-snapshot-true/5/repository/targets/06df05371981a237d0ed11472fae7c94c9ac0eff1d05413516710d17b10a4fb6f4517bda4a695f02d0a73dd4db543b4653df28f5d09dab86f92ffb9b86d01e25.5 7813681f5b41c028345ca62a2be376bae70b7f61.data000066400000000000000000000000011453140004500171630ustar00rootroot000000000000005c70b61bd355940045552cd82c1eb815658c6e8ed.paxheader00006660000000000000000000000577145314000450020363xustar00rootroot00000000000000209 path=client/testdata/go-tuf/consistent-snapshot-true/5/repository/targets/31bca02094eb78126a517b206a88c73cfa9ec6f704c7030d18212cace820f025f00bf0ea68dbf3f3a5436ca63b53bf7bf80ad8d5de7d8359d0b7fed9dbc3ab99.0 174 linkpath=../../../4/repository/targets/31bca02094eb78126a517b206a88c73cfa9ec6f704c7030d18212cace820f025f00bf0ea68dbf3f3a5436ca63b53bf7bf80ad8d5de7d8359d0b7fed9dbc3ab99.0 c70b61bd355940045552cd82c1eb815658c6e8ed.data000077700000000000000000000000001453140004500271262see c70b61bd355940045552cd82c1eb815658c6e8ed.paxheaderustar00rootroot000000000000001e66cb1b8592685e3e2c6e7d88917c49507c7462.paxheader00006660000000000000000000000577145314000450020257xustar00rootroot00000000000000209 path=client/testdata/go-tuf/consistent-snapshot-true/5/repository/targets/3bafbf08882a2d10133093a1b8433f50563b93c14acd05b79028eb1d12799027241450980651994501423a66c276ae26c43b739bc65c4e16b10c3af6c202aebb.3 174 linkpath=../../../4/repository/targets/3bafbf08882a2d10133093a1b8433f50563b93c14acd05b79028eb1d12799027241450980651994501423a66c276ae26c43b739bc65c4e16b10c3af6c202aebb.3 1e66cb1b8592685e3e2c6e7d88917c49507c7462.data000077700000000000000000000000001453140004500267162see 1e66cb1b8592685e3e2c6e7d88917c49507c7462.paxheaderustar00rootroot00000000000000a02a23169a412bbdb2d87aec6ef1e6bebaa69a64.paxheader00006660000000000000000000000577145314000450021052xustar00rootroot00000000000000209 path=client/testdata/go-tuf/consistent-snapshot-true/5/repository/targets/40b244112641dd78dd4f93b6c9190dd46e0099194d5a44257b7efad6ef9ff4683da1eda0244448cb343aa688f5d3efd7314dafe580ac0bcbf115aeca9e8dc114.2 174 linkpath=../../../4/repository/targets/40b244112641dd78dd4f93b6c9190dd46e0099194d5a44257b7efad6ef9ff4683da1eda0244448cb343aa688f5d3efd7314dafe580ac0bcbf115aeca9e8dc114.2 a02a23169a412bbdb2d87aec6ef1e6bebaa69a64.data000077700000000000000000000000001453140004500303042see a02a23169a412bbdb2d87aec6ef1e6bebaa69a64.paxheaderustar00rootroot0000000000000074d1328f1d30fbd0dcb6694d3c9c6e7657e23ff6.paxheader00006660000000000000000000000577145314000450020616xustar00rootroot00000000000000209 path=client/testdata/go-tuf/consistent-snapshot-true/5/repository/targets/4dff4ea340f0a823f15d3f4f01ab62eae0e5da579ccb851f8db9dfe84c58b2b37b89903a740e1ee172da793a6e79d560e5f7f9bd058a12a280433ed6fa46510a.1 174 linkpath=../../../4/repository/targets/4dff4ea340f0a823f15d3f4f01ab62eae0e5da579ccb851f8db9dfe84c58b2b37b89903a740e1ee172da793a6e79d560e5f7f9bd058a12a280433ed6fa46510a.1 74d1328f1d30fbd0dcb6694d3c9c6e7657e23ff6.data000077700000000000000000000000001453140004500276142see 74d1328f1d30fbd0dcb6694d3c9c6e7657e23ff6.paxheaderustar00rootroot0000000000000073a65ad27180becb4341ecde3026f6daeb8f69ea.paxheader00006660000000000000000000000577145314000450021013xustar00rootroot00000000000000209 path=client/testdata/go-tuf/consistent-snapshot-true/5/repository/targets/a321d8b405e3ef2604959847b36d171eebebc4a8941dc70a4784935a4fca5d5813de84dfa049f06549aa61b20848c1633ce81b675286ea8fb53db240d831c568.4 174 linkpath=../../../4/repository/targets/a321d8b405e3ef2604959847b36d171eebebc4a8941dc70a4784935a4fca5d5813de84dfa049f06549aa61b20848c1633ce81b675286ea8fb53db240d831c568.4 73a65ad27180becb4341ecde3026f6daeb8f69ea.data000077700000000000000000000000001453140004500302062see 73a65ad27180becb4341ecde3026f6daeb8f69ea.paxheaderustar00rootroot00000000000000client/testdata/go-tuf/consistent-snapshot-true/5/repository/timestamp.json000066400000000000000000000011531453140004500276260ustar00rootroot00000000000000{ "signed": { "_type": "timestamp", "spec_version": "1.0", "version": 6, "expires": "2100-01-01T00:00:00Z", "meta": { "snapshot.json": { "length": 618, "hashes": { "sha512": "7113ee370f6e1b35df7fd8203d27760e8eb8c32195e8a895f140584caff81256ccdf2d03ed43a5efac45ee4f869908cee2275c0f7e6b54969602e0542c9f78f9" }, "version": 6 } } }, "signatures": [ { "keyid": "a8eaf6de5aecfd0a72b60295b1e1cd12f349079ebcbbb63dbe7072f162e85315", "sig": "85758e7d1cdbedfd3d363136924a6e7878a2b9b68486ecc65658a29f96b55fcfeeda0f94fcae30fa3ceafc3ef5f82df8c68ad2774b6e4f4ea0e6cdbafdce8e0f" } ] }client/testdata/go-tuf/generate.go000066400000000000000000000006061453140004500174650ustar00rootroot00000000000000package main import ( "log" "os" "path/filepath" "github.com/theupdateframework/go-tuf/client/testdata/go-tuf/generator" ) func main() { cwd, err := os.Getwd() if err != nil { log.Fatal(err) } generator.Generate(filepath.Join(cwd, "consistent-snapshot-false"), "../keys.json", false) generator.Generate(filepath.Join(cwd, "consistent-snapshot-true"), "../keys.json", true) } client/testdata/go-tuf/generator/000077500000000000000000000000001453140004500173305ustar00rootroot00000000000000client/testdata/go-tuf/generator/generator.go000066400000000000000000000114231453140004500216460ustar00rootroot00000000000000package generator import ( "encoding/json" "fmt" "io" "io/fs" "log" "os" "path/filepath" "time" tuf "github.com/theupdateframework/go-tuf" "github.com/theupdateframework/go-tuf/data" "github.com/theupdateframework/go-tuf/pkg/keys" ) var expirationDate = time.Date(2100, time.January, 1, 0, 0, 0, 0, time.UTC) type persistedKeys struct { Encrypted bool `json:"encrypted"` Data []*data.PrivateKey `json:"data"` } func assertNoError(err error) { if err != nil { panic(fmt.Sprintf("assertion failed: %s", err)) } } // copyRepo recursively copies all regular files and directories under src // to dst. In the case where any destination file/directory exists // (including dst itself), an error is returned. func copyRepo(src string, dst string) error { copyToDest := func(path string, info fs.FileInfo, err error) error { if err != nil { return err } rel, err := filepath.Rel(src, path) if err != nil { return err } target := filepath.Join(dst, rel) mode := info.Mode() if mode.IsDir() { return os.Mkdir(target, mode.Perm()) } else if mode.IsRegular() { sfile, err := os.Open(path) if err != nil { return err } defer sfile.Close() dfile, err := os.OpenFile(target, os.O_WRONLY|os.O_CREATE|os.O_EXCL, mode.Perm()) if err != nil { return err } defer dfile.Close() if _, err := io.Copy(dfile, sfile); err != nil { return err } return nil } return fmt.Errorf("unknown mode %v", mode) } return filepath.Walk(src, copyToDest) } func newRepo(dir string) *tuf.Repo { repo, err := tuf.NewRepoIndent(tuf.FileSystemStore(dir, nil), "", "\t") assertNoError(err) return repo } func commit(dir string, repo *tuf.Repo) { assertNoError(repo.SnapshotWithExpires(expirationDate)) assertNoError(repo.TimestampWithExpires(expirationDate)) assertNoError(repo.Commit()) // Remove the keys directory to make sure we don't accidentally use a key. assertNoError(os.RemoveAll(filepath.Join(dir, "keys"))) } func addKeys(repo *tuf.Repo, roleKeys map[string][]*data.PrivateKey) { for role, keyList := range roleKeys { for _, key := range keyList { signer, err := keys.GetSigner(key) assertNoError(err) assertNoError(repo.AddPrivateKeyWithExpires(role, signer, expirationDate)) } } } func addTargets(repo *tuf.Repo, dir string, files map[string][]byte) { paths := []string{} for file, data := range files { path := filepath.Join(dir, "staged", "targets", file) assertNoError(os.MkdirAll(filepath.Dir(path), 0755)) assertNoError(os.WriteFile(path, data, 0644)) paths = append(paths, file) } assertNoError(repo.AddTargetsWithExpires(paths, nil, expirationDate)) } func revokeKeys(repo *tuf.Repo, role string, keyList []*data.PrivateKey) { for _, key := range keyList { signer, err := keys.GetSigner(key) assertNoError(err) assertNoError(repo.RevokeKeyWithExpires(role, signer.PublicData().IDs()[0], expirationDate)) } } func generateRepos(dir string, roleKeys map[string][][]*data.PrivateKey, consistentSnapshot bool) { // Collect all the initial keys we'll use when creating repositories. // We'll modify this to reflect rotated keys. keys := map[string][]*data.PrivateKey{ "root": roleKeys["root"][0], "targets": roleKeys["targets"][0], "snapshot": roleKeys["snapshot"][0], "timestamp": roleKeys["timestamp"][0], } // Create the initial repo. dir0 := filepath.Join(dir, "0") repo0 := newRepo(dir0) repo0.Init(consistentSnapshot) addKeys(repo0, keys) addTargets(repo0, dir0, map[string][]byte{"0": []byte("0")}) commit(dir0, repo0) // Rotate all the keys to make sure that works. oldDir := dir0 i := 1 for _, role := range []string{"root", "targets", "snapshot", "timestamp"} { // Setup the repo. stepName := fmt.Sprintf("%d", i) d := filepath.Join(dir, stepName) assertNoError(copyRepo(oldDir, d)) repo := newRepo(d) addKeys(repo, keys) // Actually rotate the keys revokeKeys(repo, role, roleKeys[role][0]) addKeys(repo, map[string][]*data.PrivateKey{ role: roleKeys[role][1], }) keys[role] = roleKeys[role][1] // Add a target to make sure that works, then commit. addTargets(repo, d, map[string][]byte{stepName: []byte(stepName)}) commit(d, repo) i += 1 oldDir = d } // Add another target file to make sure the workflow worked. stepName := fmt.Sprintf("%d", i) d := filepath.Join(dir, stepName) assertNoError(copyRepo(oldDir, d)) repo := newRepo(d) addKeys(repo, keys) addTargets(repo, d, map[string][]byte{stepName: []byte(stepName)}) commit(d, repo) } func Generate(dir string, keysPath string, consistentSnapshot bool) { f, err := os.Open(keysPath) assertNoError(err) var roleKeys map[string][][]*data.PrivateKey assertNoError(json.NewDecoder(f).Decode(&roleKeys)) log.Printf("generating %s", dir) generateRepos(dir, roleKeys, consistentSnapshot) } client/testdata/go-tuf/regenerate-metadata.sh000077500000000000000000000003071453140004500216000ustar00rootroot00000000000000#!/bin/sh set -eu cd `dirname $0` for d in consistent-snapshot-false consistent-snapshot-true; do if [[ -e $d ]]; then rm -r $d fi done go run generate.go go run ../tools/linkify-metadata.go client/testdata/keys.json000066400000000000000000000104471453140004500160150ustar00rootroot00000000000000{ "root": [ [ { "keytype": "ed25519", "scheme": "ed25519", "keyid_hash_algorithms": [ "sha256", "sha512" ], "keyval": { "public": "bca152214dbfd3e7a1b7a7b3e2cc179fb00520fd7212c8a60ba99f14dfc0e1ca", "private": "68c2a06583ce83dabb1fc5d2b3697015b936f341f21be1be1397670a650ebd53bca152214dbfd3e7a1b7a7b3e2cc179fb00520fd7212c8a60ba99f14dfc0e1ca" } } ], [ { "keytype": "ed25519", "scheme": "ed25519", "keyid_hash_algorithms": [ "sha256", "sha512" ], "keyval": { "public": "153986a7370e002f377dd68797e7466c421180c1571e233de2f8ab41c8af4f54", "private": "e53595d99a85a33d7c228d28b25c856148c65be36558d0d61faa7e018a51db5c153986a7370e002f377dd68797e7466c421180c1571e233de2f8ab41c8af4f54" } } ] ], "snapshot": [ [ { "keytype": "ed25519", "scheme": "ed25519", "keyid_hash_algorithms": [ "sha256", "sha512" ], "keyval": { "public": "d482fa4805a50870aa1356ace6b764f7ab47ed4dc38f49b1a189afa25f179e94", "private": "28de1763cc4cc78702167bd6cf862fc3977afc2404c5eebbdfb948bab55f14f0d482fa4805a50870aa1356ace6b764f7ab47ed4dc38f49b1a189afa25f179e94" } } ], [ { "keytype": "ed25519", "scheme": "ed25519", "keyid_hash_algorithms": [ "sha256", "sha512" ], "keyval": { "public": "722dbc861813bb5b568524d62083e875c08e66fed1694d9161d253fa163dd86f", "private": "fb85703e9c1c77cfe87c18eda24d5637d997503fef4107f6c04777b0fbec2b8c722dbc861813bb5b568524d62083e875c08e66fed1694d9161d253fa163dd86f" } } ] ], "targets": [ [ { "keytype": "ed25519", "scheme": "ed25519", "keyid_hash_algorithms": [ "sha256", "sha512" ], "keyval": { "public": "62f71f99c788f16bcdc8bb252455e3a690350e4ddea5a6aab1f9a3aaabcf369a", "private": "dee6d1fa7f041bee48a4e783d416e12c72ecdbd164202a71b23149adbb1c3d1f62f71f99c788f16bcdc8bb252455e3a690350e4ddea5a6aab1f9a3aaabcf369a" } } ], [ { "keytype": "ed25519", "scheme": "ed25519", "keyid_hash_algorithms": [ "sha256", "sha512" ], "keyval": { "public": "aee574e56780ea1709a8b56e02d4ffdd9a3a1deaed61e2eb0701f376a4422e42", "private": "9f51d6d05cda79b80dad73d7e1611df50555d5090bf9fe6bfac5ad3690b57e2aaee574e56780ea1709a8b56e02d4ffdd9a3a1deaed61e2eb0701f376a4422e42" } } ] ], "timestamp": [ [ { "keytype": "ed25519", "scheme": "ed25519", "keyid_hash_algorithms": [ "sha256", "sha512" ], "keyval": { "public": "8656ad20568cd3534c405e4d9a84b0c6e6163f7f66434df77416502835b9b160", "private": "2ef838a6f0aa4bc0a746b8086098683f96bb5118c4dca7d3caa3dee5c86ea8398656ad20568cd3534c405e4d9a84b0c6e6163f7f66434df77416502835b9b160" } } ], [ { "keytype": "ed25519", "scheme": "ed25519", "keyid_hash_algorithms": [ "sha256", "sha512" ], "keyval": { "public": "3ab34b0c2d4eadccaa0f0cf22ced07b552394063a9de2806993d022360dffc76", "private": "1d9a579675ee85074a7c5d8a3e4a58a21e82bddc53bbfe1bef547d681d4049783ab34b0c2d4eadccaa0f0cf22ced07b552394063a9de2806993d022360dffc76" } } ] ] } client/testdata/php-tuf-fixtures/000077500000000000000000000000001453140004500173735ustar00rootroot00000000000000client/testdata/php-tuf-fixtures/TUFTestFixture2LevelDelegation/000077500000000000000000000000001453140004500253065ustar00rootroot00000000000000client/testdata/php-tuf-fixtures/TUFTestFixture2LevelDelegation/client/000077500000000000000000000000001453140004500265645ustar00rootroot00000000000000client/testdata/php-tuf-fixtures/TUFTestFixture2LevelDelegation/client/metadata/000077500000000000000000000000001453140004500303445ustar00rootroot00000000000000client/testdata/php-tuf-fixtures/TUFTestFixture2LevelDelegation/client/metadata/current/000077500000000000000000000000001453140004500320265ustar00rootroot00000000000000client/testdata/php-tuf-fixtures/TUFTestFixture2LevelDelegation/client/metadata/current/1.a.json000077500000000000000000000034201453140004500333020ustar00rootroot00000000000000{ "signatures": [ { "keyid": "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "sig": "72b215c194090407abc8b7c513d69fd340abbe63037d26cbc2e4dd88c095a14da8d6e4aae0561f265e97d5c658b0260be2031af73c26e157e5f062c5f4aceb00" } ], "signed": { "_type": "targets", "delegations": { "keys": { "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "82f52e4503dbb364fabe8e5567f1cf909d4175d45468a021dfe75653db9ac98c" }, "scheme": "ed25519" }, "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "06e4dee0de7826c8d539a6112940b7459892b4ecaf696e67dc064aea0923f95c" }, "scheme": "ed25519" } }, "roles": [ { "keyids": [ "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68" ], "name": "b", "paths": [ "*.txt" ], "terminating": false, "threshold": 1 }, { "keyids": [ "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b" ], "name": "c", "paths": [ "*.txt" ], "terminating": false, "threshold": 1 } ] }, "expires": "2020-04-01T07:27:10Z", "spec_version": "1.0.0", "targets": { "a.txt": { "custom": {}, "hashes": { "sha256": "3f90cedf303207851bbdc5f857e018daf93b4c0083306cef17df547b42e4e985", "sha512": "f4631ef7ea7b015d7b88e411842fafeb78a72f0181bec72ea9754604ede74ea0e491bf8411659aabc96304fc764d0131ce49ba86066ab5f7b7480dde719e0bfd" }, "length": 15 } }, "version": 1 } }client/testdata/php-tuf-fixtures/TUFTestFixture2LevelDelegation/client/metadata/current/1.b.json000077500000000000000000000013561453140004500333110ustar00rootroot00000000000000{ "signatures": [ { "keyid": "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "sig": "6a4f4bb63d7b6db4b6c09ce081fd229052ca087c98d25653c8d187de04dbedfc219aa9482774b939d84eb404fd51cfe383f9ea65e19a1d3cc79b642701bcff0d" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2020-04-01T07:27:10Z", "spec_version": "1.0.0", "targets": { "b.txt": { "custom": {}, "hashes": { "sha256": "949c6a4318dabe8bbd140cef99ea669ba031919ccf9bce0f5b4d0b61d1c0aa2e", "sha512": "f4cc9ce5c73b37e2a6707af7a0ea614ea5fa428bd2509e3af4528a5d330ce98a09c4dd98c859ad9b27b8aba24e1eacbf1af8393fdbfed899cecb995c87a11e3c" }, "length": 15 } }, "version": 1 } }client/testdata/php-tuf-fixtures/TUFTestFixture2LevelDelegation/client/metadata/current/1.c.json000077500000000000000000000013561453140004500333120ustar00rootroot00000000000000{ "signatures": [ { "keyid": "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b", "sig": "9f0c5ef7e0a11012256c4a47ed757f9e90e930238f6a6e5c758a014f1b768519acb2b7d9aa9bd0456d71ba09b032598086e42d832830391e307c926c16f5b303" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2020-04-01T07:27:10Z", "spec_version": "1.0.0", "targets": { "c.txt": { "custom": {}, "hashes": { "sha256": "946e2ea9180de673891ae09ce0edfb207966bc32bd6324ebdad2c50c82075ffd", "sha512": "ddb5fb256a368d778b5fdd03d497ad79944c766245f3cccfc8b098b14c488ec424a68b86a6a2add36db4ef0f0214f15dbe0d63fbc5ca7a9619fb4c39544d78a9" }, "length": 15 } }, "version": 1 } }client/testdata/php-tuf-fixtures/TUFTestFixture2LevelDelegation/client/metadata/current/1.root.json000077500000000000000000000042031453140004500340450ustar00rootroot00000000000000{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "d0bf76a5cfc0aee1b8a1b1bf0ed8ca646a1a6d5f205945c515e8546bfd3c1e6b5e07cc0b93836bd030dd05ba68f177aecb05f6bf90c6702fd178e53310022506" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2020-12-31T05:48:20Z", "keys": { "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 1 } }1.snapshot.json000077500000000000000000000006571453140004500346530ustar00rootroot00000000000000client/testdata/php-tuf-fixtures/TUFTestFixture2LevelDelegation/client/metadata/current{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "61db8765350398f7f750853337d9a55c5d6e790812d29146b5b45d5fd43d2a42c474a7a9fab263c3a50a28114a82f79dbf24ff1f99ae737a8d06f332f9f7d103" } ], "signed": { "_type": "snapshot", "expires": "2020-01-08T00:00:00Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }1.targets.json000077500000000000000000000006711453140004500344610ustar00rootroot00000000000000client/testdata/php-tuf-fixtures/TUFTestFixture2LevelDelegation/client/metadata/current{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "c150e8ed5d352f366a979f4c4b9d556350c414c2da7ef1279045aaed3438c60872142d0dfe5ddbb627fec2d8fb7c5d8e692e04a87230b78d74714c5db035620a" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2020-04-01T07:27:10Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }1.timestamp.json000077500000000000000000000013001453140004500350010ustar00rootroot00000000000000client/testdata/php-tuf-fixtures/TUFTestFixture2LevelDelegation/client/metadata/current{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "1d668531c7a0960cf90825faa684106a8aef0799c1b47e72301bac45d87f2dd42c14f1a3ac7db862323ca5177dd4fd686573ea92aea99638f17414dde561c00b" } ], "signed": { "_type": "timestamp", "expires": "2020-01-02T00:00:00Z", "meta": { "snapshot.json": { "hashes": { "sha256": "f4ca389c2c9fbc592d91d4e693c31113b8803a11bcb5ecd973581fa0e3d34ce0", "sha512": "92a0989e44c0e9f16d3e56268a3b8dd4e4416ee2ac91a4c871a405f1e426062651ec4effa0078fc4409c8b0422ccad9b1aa197db58f178406f398562b2e98195" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/php-tuf-fixtures/TUFTestFixture2LevelDelegation/client/metadata/current/2.root.json000077500000000000000000000042031453140004500340460ustar00rootroot00000000000000{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "e911db300e8eb378a2cabc48979e4c8f72beca30335db0579a7a1d81ae90c8bc63c27d92ce5a17846e3b1adb63a45a411bb4308e018e0d3cc4c9908311b5f208" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2020-12-31T05:48:20Z", "keys": { "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 2 } }2.snapshot.json000077500000000000000000000010411453140004500346400ustar00rootroot00000000000000client/testdata/php-tuf-fixtures/TUFTestFixture2LevelDelegation/client/metadata/current{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "699125952eb773b09461a25fee03cf5a00237625e5dcb4e20334a13f09212daf6c97aff36fc1ac09ee302142eaec81447d57ba46d0831becb98d1526cb035106" } ], "signed": { "_type": "snapshot", "expires": "2020-01-08T00:00:00Z", "meta": { "a.json": { "version": 1 }, "b.json": { "version": 1 }, "c.json": { "version": 1 }, "targets.json": { "version": 2 } }, "spec_version": "1.0.0", "version": 2 } }2.targets.json000077500000000000000000000023661453140004500344650ustar00rootroot00000000000000client/testdata/php-tuf-fixtures/TUFTestFixture2LevelDelegation/client/metadata/current{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "3b54f35d6c03622b723fe38d0115e9d98d47e147eaaa1d60e2f2925199c19e520a3a0de8842b16b1e4e73c0e71d8ca26169fa2b4063f544fb1613185f616f704" } ], "signed": { "_type": "targets", "delegations": { "keys": { "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f758af464295e62a1da4d3267be6d13f4aba9c7d52166d01b6bd5b4559496c9d" }, "scheme": "ed25519" } }, "roles": [ { "keyids": [ "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b" ], "name": "a", "paths": [ "*.txt" ], "terminating": false, "threshold": 1 } ] }, "expires": "2020-04-01T07:27:10Z", "spec_version": "1.0.0", "targets": { "targets.txt": { "hashes": { "sha256": "6da6f624811b0d7792c57dc9ed58f1af8cbf4ebfaaaa3ea2011b57b4af63f7e6", "sha512": "0951c719b5adf26a55700bd1ac6b657fb513b04e4adb335a935a0da7f12f2ac99834b47442d0b832e5f4ffdd365ef538f14d3a52221c0cf81ef7b68ce312476a" }, "length": 21 } }, "version": 2 } }2.timestamp.json000077500000000000000000000013001453140004500350020ustar00rootroot00000000000000client/testdata/php-tuf-fixtures/TUFTestFixture2LevelDelegation/client/metadata/current{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "36db44bdcb33c37f259e8a12098e9a9114f0cffde4a7d4db0d88d04d7c93add316333e671c2c2305b081fe6a9a56f365ee3000ccf8675f43d5c663d66d3edb00" } ], "signed": { "_type": "timestamp", "expires": "2020-01-02T00:00:00Z", "meta": { "snapshot.json": { "hashes": { "sha256": "35c207d52640e403b9df82386a2258e093091538c7d77a641295e7b0262d6ca0", "sha512": "0a89bb735c8324ff1e661ad25c4017c0c330f09cbd3213ffac7104540c5fa01a35787ae3f517fc2966a89f53f7c91754de852988776cc59b2a574f28a0434139" }, "length": 545, "version": 2 } }, "spec_version": "1.0.0", "version": 2 } }client/testdata/php-tuf-fixtures/TUFTestFixture2LevelDelegation/client/metadata/current/a.json000077500000000000000000000034201453140004500331430ustar00rootroot00000000000000{ "signatures": [ { "keyid": "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "sig": "72b215c194090407abc8b7c513d69fd340abbe63037d26cbc2e4dd88c095a14da8d6e4aae0561f265e97d5c658b0260be2031af73c26e157e5f062c5f4aceb00" } ], "signed": { "_type": "targets", "delegations": { "keys": { "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "82f52e4503dbb364fabe8e5567f1cf909d4175d45468a021dfe75653db9ac98c" }, "scheme": "ed25519" }, "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "06e4dee0de7826c8d539a6112940b7459892b4ecaf696e67dc064aea0923f95c" }, "scheme": "ed25519" } }, "roles": [ { "keyids": [ "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68" ], "name": "b", "paths": [ "*.txt" ], "terminating": false, "threshold": 1 }, { "keyids": [ "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b" ], "name": "c", "paths": [ "*.txt" ], "terminating": false, "threshold": 1 } ] }, "expires": "2020-04-01T07:27:10Z", "spec_version": "1.0.0", "targets": { "a.txt": { "custom": {}, "hashes": { "sha256": "3f90cedf303207851bbdc5f857e018daf93b4c0083306cef17df547b42e4e985", "sha512": "f4631ef7ea7b015d7b88e411842fafeb78a72f0181bec72ea9754604ede74ea0e491bf8411659aabc96304fc764d0131ce49ba86066ab5f7b7480dde719e0bfd" }, "length": 15 } }, "version": 1 } }client/testdata/php-tuf-fixtures/TUFTestFixture2LevelDelegation/client/metadata/current/b.json000077500000000000000000000013561453140004500331520ustar00rootroot00000000000000{ "signatures": [ { "keyid": "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "sig": "6a4f4bb63d7b6db4b6c09ce081fd229052ca087c98d25653c8d187de04dbedfc219aa9482774b939d84eb404fd51cfe383f9ea65e19a1d3cc79b642701bcff0d" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2020-04-01T07:27:10Z", "spec_version": "1.0.0", "targets": { "b.txt": { "custom": {}, "hashes": { "sha256": "949c6a4318dabe8bbd140cef99ea669ba031919ccf9bce0f5b4d0b61d1c0aa2e", "sha512": "f4cc9ce5c73b37e2a6707af7a0ea614ea5fa428bd2509e3af4528a5d330ce98a09c4dd98c859ad9b27b8aba24e1eacbf1af8393fdbfed899cecb995c87a11e3c" }, "length": 15 } }, "version": 1 } }client/testdata/php-tuf-fixtures/TUFTestFixture2LevelDelegation/client/metadata/current/c.json000077500000000000000000000013561453140004500331530ustar00rootroot00000000000000{ "signatures": [ { "keyid": "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b", "sig": "9f0c5ef7e0a11012256c4a47ed757f9e90e930238f6a6e5c758a014f1b768519acb2b7d9aa9bd0456d71ba09b032598086e42d832830391e307c926c16f5b303" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2020-04-01T07:27:10Z", "spec_version": "1.0.0", "targets": { "c.txt": { "custom": {}, "hashes": { "sha256": "946e2ea9180de673891ae09ce0edfb207966bc32bd6324ebdad2c50c82075ffd", "sha512": "ddb5fb256a368d778b5fdd03d497ad79944c766245f3cccfc8b098b14c488ec424a68b86a6a2add36db4ef0f0214f15dbe0d63fbc5ca7a9619fb4c39544d78a9" }, "length": 15 } }, "version": 1 } }client/testdata/php-tuf-fixtures/TUFTestFixture2LevelDelegation/client/metadata/current/root.json000077500000000000000000000042031453140004500337060ustar00rootroot00000000000000{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "e911db300e8eb378a2cabc48979e4c8f72beca30335db0579a7a1d81ae90c8bc63c27d92ce5a17846e3b1adb63a45a411bb4308e018e0d3cc4c9908311b5f208" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2020-12-31T05:48:20Z", "keys": { "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 2 } }snapshot.json000077500000000000000000000010411453140004500345000ustar00rootroot00000000000000client/testdata/php-tuf-fixtures/TUFTestFixture2LevelDelegation/client/metadata/current{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "699125952eb773b09461a25fee03cf5a00237625e5dcb4e20334a13f09212daf6c97aff36fc1ac09ee302142eaec81447d57ba46d0831becb98d1526cb035106" } ], "signed": { "_type": "snapshot", "expires": "2020-01-08T00:00:00Z", "meta": { "a.json": { "version": 1 }, "b.json": { "version": 1 }, "c.json": { "version": 1 }, "targets.json": { "version": 2 } }, "spec_version": "1.0.0", "version": 2 } }client/testdata/php-tuf-fixtures/TUFTestFixture2LevelDelegation/client/metadata/current/targets.json000077500000000000000000000023661453140004500344040ustar00rootroot00000000000000{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "3b54f35d6c03622b723fe38d0115e9d98d47e147eaaa1d60e2f2925199c19e520a3a0de8842b16b1e4e73c0e71d8ca26169fa2b4063f544fb1613185f616f704" } ], "signed": { "_type": "targets", "delegations": { "keys": { "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f758af464295e62a1da4d3267be6d13f4aba9c7d52166d01b6bd5b4559496c9d" }, "scheme": "ed25519" } }, "roles": [ { "keyids": [ "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b" ], "name": "a", "paths": [ "*.txt" ], "terminating": false, "threshold": 1 } ] }, "expires": "2020-04-01T07:27:10Z", "spec_version": "1.0.0", "targets": { "targets.txt": { "hashes": { "sha256": "6da6f624811b0d7792c57dc9ed58f1af8cbf4ebfaaaa3ea2011b57b4af63f7e6", "sha512": "0951c719b5adf26a55700bd1ac6b657fb513b04e4adb335a935a0da7f12f2ac99834b47442d0b832e5f4ffdd365ef538f14d3a52221c0cf81ef7b68ce312476a" }, "length": 21 } }, "version": 2 } }timestamp.json000077500000000000000000000013001453140004500346420ustar00rootroot00000000000000client/testdata/php-tuf-fixtures/TUFTestFixture2LevelDelegation/client/metadata/current{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "36db44bdcb33c37f259e8a12098e9a9114f0cffde4a7d4db0d88d04d7c93add316333e671c2c2305b081fe6a9a56f365ee3000ccf8675f43d5c663d66d3edb00" } ], "signed": { "_type": "timestamp", "expires": "2020-01-02T00:00:00Z", "meta": { "snapshot.json": { "hashes": { "sha256": "35c207d52640e403b9df82386a2258e093091538c7d77a641295e7b0262d6ca0", "sha512": "0a89bb735c8324ff1e661ad25c4017c0c330f09cbd3213ffac7104540c5fa01a35787ae3f517fc2966a89f53f7c91754de852988776cc59b2a574f28a0434139" }, "length": 545, "version": 2 } }, "spec_version": "1.0.0", "version": 2 } }client/testdata/php-tuf-fixtures/TUFTestFixture2LevelDelegation/client/metadata/previous/000077500000000000000000000000001453140004500322205ustar00rootroot00000000000000client/testdata/php-tuf-fixtures/TUFTestFixture2LevelDelegation/client/metadata/previous/1.root.json000077500000000000000000000042031453140004500342370ustar00rootroot00000000000000{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "d0bf76a5cfc0aee1b8a1b1bf0ed8ca646a1a6d5f205945c515e8546bfd3c1e6b5e07cc0b93836bd030dd05ba68f177aecb05f6bf90c6702fd178e53310022506" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2020-12-31T05:48:20Z", "keys": { "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 1 } }1.snapshot.json000077500000000000000000000006571453140004500350450ustar00rootroot00000000000000client/testdata/php-tuf-fixtures/TUFTestFixture2LevelDelegation/client/metadata/previous{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "61db8765350398f7f750853337d9a55c5d6e790812d29146b5b45d5fd43d2a42c474a7a9fab263c3a50a28114a82f79dbf24ff1f99ae737a8d06f332f9f7d103" } ], "signed": { "_type": "snapshot", "expires": "2020-01-08T00:00:00Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }1.targets.json000077500000000000000000000006711453140004500346530ustar00rootroot00000000000000client/testdata/php-tuf-fixtures/TUFTestFixture2LevelDelegation/client/metadata/previous{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "c150e8ed5d352f366a979f4c4b9d556350c414c2da7ef1279045aaed3438c60872142d0dfe5ddbb627fec2d8fb7c5d8e692e04a87230b78d74714c5db035620a" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2020-04-01T07:27:10Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }1.timestamp.json000077500000000000000000000013001453140004500351730ustar00rootroot00000000000000client/testdata/php-tuf-fixtures/TUFTestFixture2LevelDelegation/client/metadata/previous{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "1d668531c7a0960cf90825faa684106a8aef0799c1b47e72301bac45d87f2dd42c14f1a3ac7db862323ca5177dd4fd686573ea92aea99638f17414dde561c00b" } ], "signed": { "_type": "timestamp", "expires": "2020-01-02T00:00:00Z", "meta": { "snapshot.json": { "hashes": { "sha256": "f4ca389c2c9fbc592d91d4e693c31113b8803a11bcb5ecd973581fa0e3d34ce0", "sha512": "92a0989e44c0e9f16d3e56268a3b8dd4e4416ee2ac91a4c871a405f1e426062651ec4effa0078fc4409c8b0422ccad9b1aa197db58f178406f398562b2e98195" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/php-tuf-fixtures/TUFTestFixture2LevelDelegation/client/metadata/previous/root.json000077500000000000000000000042031453140004500341000ustar00rootroot00000000000000{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "d0bf76a5cfc0aee1b8a1b1bf0ed8ca646a1a6d5f205945c515e8546bfd3c1e6b5e07cc0b93836bd030dd05ba68f177aecb05f6bf90c6702fd178e53310022506" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2020-12-31T05:48:20Z", "keys": { "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 1 } }snapshot.json000077500000000000000000000006571453140004500347060ustar00rootroot00000000000000client/testdata/php-tuf-fixtures/TUFTestFixture2LevelDelegation/client/metadata/previous{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "61db8765350398f7f750853337d9a55c5d6e790812d29146b5b45d5fd43d2a42c474a7a9fab263c3a50a28114a82f79dbf24ff1f99ae737a8d06f332f9f7d103" } ], "signed": { "_type": "snapshot", "expires": "2020-01-08T00:00:00Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }targets.json000077500000000000000000000006711453140004500345140ustar00rootroot00000000000000client/testdata/php-tuf-fixtures/TUFTestFixture2LevelDelegation/client/metadata/previous{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "c150e8ed5d352f366a979f4c4b9d556350c414c2da7ef1279045aaed3438c60872142d0dfe5ddbb627fec2d8fb7c5d8e692e04a87230b78d74714c5db035620a" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2020-04-01T07:27:10Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }timestamp.json000077500000000000000000000013001453140004500350340ustar00rootroot00000000000000client/testdata/php-tuf-fixtures/TUFTestFixture2LevelDelegation/client/metadata/previous{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "1d668531c7a0960cf90825faa684106a8aef0799c1b47e72301bac45d87f2dd42c14f1a3ac7db862323ca5177dd4fd686573ea92aea99638f17414dde561c00b" } ], "signed": { "_type": "timestamp", "expires": "2020-01-02T00:00:00Z", "meta": { "snapshot.json": { "hashes": { "sha256": "f4ca389c2c9fbc592d91d4e693c31113b8803a11bcb5ecd973581fa0e3d34ce0", "sha512": "92a0989e44c0e9f16d3e56268a3b8dd4e4416ee2ac91a4c871a405f1e426062651ec4effa0078fc4409c8b0422ccad9b1aa197db58f178406f398562b2e98195" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/php-tuf-fixtures/TUFTestFixture2LevelDelegation/hash.txt000066400000000000000000000001001453140004500267610ustar00rootroot00000000000000cc7b129f475232ee357a05756746938abe35b652ec9c53a9ffb93d3c67103b20client/testdata/php-tuf-fixtures/TUFTestFixture2LevelDelegation/server/000077500000000000000000000000001453140004500266145ustar00rootroot00000000000000client/testdata/php-tuf-fixtures/TUFTestFixture2LevelDelegation/server/metadata.staged/000077500000000000000000000000001453140004500316425ustar00rootroot00000000000000client/testdata/php-tuf-fixtures/TUFTestFixture2LevelDelegation/server/metadata.staged/1.a.json000077500000000000000000000034201453140004500331160ustar00rootroot00000000000000{ "signatures": [ { "keyid": "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "sig": "72b215c194090407abc8b7c513d69fd340abbe63037d26cbc2e4dd88c095a14da8d6e4aae0561f265e97d5c658b0260be2031af73c26e157e5f062c5f4aceb00" } ], "signed": { "_type": "targets", "delegations": { "keys": { "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "82f52e4503dbb364fabe8e5567f1cf909d4175d45468a021dfe75653db9ac98c" }, "scheme": "ed25519" }, "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "06e4dee0de7826c8d539a6112940b7459892b4ecaf696e67dc064aea0923f95c" }, "scheme": "ed25519" } }, "roles": [ { "keyids": [ "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68" ], "name": "b", "paths": [ "*.txt" ], "terminating": false, "threshold": 1 }, { "keyids": [ "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b" ], "name": "c", "paths": [ "*.txt" ], "terminating": false, "threshold": 1 } ] }, "expires": "2020-04-01T07:27:10Z", "spec_version": "1.0.0", "targets": { "a.txt": { "custom": {}, "hashes": { "sha256": "3f90cedf303207851bbdc5f857e018daf93b4c0083306cef17df547b42e4e985", "sha512": "f4631ef7ea7b015d7b88e411842fafeb78a72f0181bec72ea9754604ede74ea0e491bf8411659aabc96304fc764d0131ce49ba86066ab5f7b7480dde719e0bfd" }, "length": 15 } }, "version": 1 } }client/testdata/php-tuf-fixtures/TUFTestFixture2LevelDelegation/server/metadata.staged/1.b.json000077500000000000000000000013561453140004500331250ustar00rootroot00000000000000{ "signatures": [ { "keyid": "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "sig": "6a4f4bb63d7b6db4b6c09ce081fd229052ca087c98d25653c8d187de04dbedfc219aa9482774b939d84eb404fd51cfe383f9ea65e19a1d3cc79b642701bcff0d" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2020-04-01T07:27:10Z", "spec_version": "1.0.0", "targets": { "b.txt": { "custom": {}, "hashes": { "sha256": "949c6a4318dabe8bbd140cef99ea669ba031919ccf9bce0f5b4d0b61d1c0aa2e", "sha512": "f4cc9ce5c73b37e2a6707af7a0ea614ea5fa428bd2509e3af4528a5d330ce98a09c4dd98c859ad9b27b8aba24e1eacbf1af8393fdbfed899cecb995c87a11e3c" }, "length": 15 } }, "version": 1 } }client/testdata/php-tuf-fixtures/TUFTestFixture2LevelDelegation/server/metadata.staged/1.c.json000077500000000000000000000013561453140004500331260ustar00rootroot00000000000000{ "signatures": [ { "keyid": "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b", "sig": "9f0c5ef7e0a11012256c4a47ed757f9e90e930238f6a6e5c758a014f1b768519acb2b7d9aa9bd0456d71ba09b032598086e42d832830391e307c926c16f5b303" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2020-04-01T07:27:10Z", "spec_version": "1.0.0", "targets": { "c.txt": { "custom": {}, "hashes": { "sha256": "946e2ea9180de673891ae09ce0edfb207966bc32bd6324ebdad2c50c82075ffd", "sha512": "ddb5fb256a368d778b5fdd03d497ad79944c766245f3cccfc8b098b14c488ec424a68b86a6a2add36db4ef0f0214f15dbe0d63fbc5ca7a9619fb4c39544d78a9" }, "length": 15 } }, "version": 1 } }client/testdata/php-tuf-fixtures/TUFTestFixture2LevelDelegation/server/metadata.staged/1.root.json000077500000000000000000000042031453140004500336610ustar00rootroot00000000000000{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "d0bf76a5cfc0aee1b8a1b1bf0ed8ca646a1a6d5f205945c515e8546bfd3c1e6b5e07cc0b93836bd030dd05ba68f177aecb05f6bf90c6702fd178e53310022506" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2020-12-31T05:48:20Z", "keys": { "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 1 } }1.snapshot.json000077500000000000000000000006571453140004500344670ustar00rootroot00000000000000client/testdata/php-tuf-fixtures/TUFTestFixture2LevelDelegation/server/metadata.staged{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "61db8765350398f7f750853337d9a55c5d6e790812d29146b5b45d5fd43d2a42c474a7a9fab263c3a50a28114a82f79dbf24ff1f99ae737a8d06f332f9f7d103" } ], "signed": { "_type": "snapshot", "expires": "2020-01-08T00:00:00Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }1.targets.json000077500000000000000000000006711453140004500342750ustar00rootroot00000000000000client/testdata/php-tuf-fixtures/TUFTestFixture2LevelDelegation/server/metadata.staged{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "c150e8ed5d352f366a979f4c4b9d556350c414c2da7ef1279045aaed3438c60872142d0dfe5ddbb627fec2d8fb7c5d8e692e04a87230b78d74714c5db035620a" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2020-04-01T07:27:10Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }1.timestamp.json000077500000000000000000000013001453140004500346150ustar00rootroot00000000000000client/testdata/php-tuf-fixtures/TUFTestFixture2LevelDelegation/server/metadata.staged{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "1d668531c7a0960cf90825faa684106a8aef0799c1b47e72301bac45d87f2dd42c14f1a3ac7db862323ca5177dd4fd686573ea92aea99638f17414dde561c00b" } ], "signed": { "_type": "timestamp", "expires": "2020-01-02T00:00:00Z", "meta": { "snapshot.json": { "hashes": { "sha256": "f4ca389c2c9fbc592d91d4e693c31113b8803a11bcb5ecd973581fa0e3d34ce0", "sha512": "92a0989e44c0e9f16d3e56268a3b8dd4e4416ee2ac91a4c871a405f1e426062651ec4effa0078fc4409c8b0422ccad9b1aa197db58f178406f398562b2e98195" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/php-tuf-fixtures/TUFTestFixture2LevelDelegation/server/metadata.staged/2.c.json000077500000000000000000000006711453140004500331260ustar00rootroot00000000000000{ "signatures": [ { "keyid": "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b", "sig": "c2f5f087f1bb9708f48657789cf8516b3d974e2250d3ec0268e347e89fa6f9eaa9e9441f5402ce32735fe31750013c5dc1b53f4e9a93d748ff060fa94ad3fd07" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2020-04-01T07:27:10Z", "spec_version": "1.0.0", "targets": {}, "version": 2 } }client/testdata/php-tuf-fixtures/TUFTestFixture2LevelDelegation/server/metadata.staged/2.root.json000077500000000000000000000042031453140004500336620ustar00rootroot00000000000000{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "e911db300e8eb378a2cabc48979e4c8f72beca30335db0579a7a1d81ae90c8bc63c27d92ce5a17846e3b1adb63a45a411bb4308e018e0d3cc4c9908311b5f208" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2020-12-31T05:48:20Z", "keys": { "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 2 } }2.snapshot.json000077500000000000000000000010411453140004500344540ustar00rootroot00000000000000client/testdata/php-tuf-fixtures/TUFTestFixture2LevelDelegation/server/metadata.staged{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "699125952eb773b09461a25fee03cf5a00237625e5dcb4e20334a13f09212daf6c97aff36fc1ac09ee302142eaec81447d57ba46d0831becb98d1526cb035106" } ], "signed": { "_type": "snapshot", "expires": "2020-01-08T00:00:00Z", "meta": { "a.json": { "version": 1 }, "b.json": { "version": 1 }, "c.json": { "version": 1 }, "targets.json": { "version": 2 } }, "spec_version": "1.0.0", "version": 2 } }2.targets.json000077500000000000000000000023661453140004500343010ustar00rootroot00000000000000client/testdata/php-tuf-fixtures/TUFTestFixture2LevelDelegation/server/metadata.staged{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "3b54f35d6c03622b723fe38d0115e9d98d47e147eaaa1d60e2f2925199c19e520a3a0de8842b16b1e4e73c0e71d8ca26169fa2b4063f544fb1613185f616f704" } ], "signed": { "_type": "targets", "delegations": { "keys": { "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f758af464295e62a1da4d3267be6d13f4aba9c7d52166d01b6bd5b4559496c9d" }, "scheme": "ed25519" } }, "roles": [ { "keyids": [ "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b" ], "name": "a", "paths": [ "*.txt" ], "terminating": false, "threshold": 1 } ] }, "expires": "2020-04-01T07:27:10Z", "spec_version": "1.0.0", "targets": { "targets.txt": { "hashes": { "sha256": "6da6f624811b0d7792c57dc9ed58f1af8cbf4ebfaaaa3ea2011b57b4af63f7e6", "sha512": "0951c719b5adf26a55700bd1ac6b657fb513b04e4adb335a935a0da7f12f2ac99834b47442d0b832e5f4ffdd365ef538f14d3a52221c0cf81ef7b68ce312476a" }, "length": 21 } }, "version": 2 } }2.timestamp.json000077500000000000000000000013001453140004500346160ustar00rootroot00000000000000client/testdata/php-tuf-fixtures/TUFTestFixture2LevelDelegation/server/metadata.staged{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "36db44bdcb33c37f259e8a12098e9a9114f0cffde4a7d4db0d88d04d7c93add316333e671c2c2305b081fe6a9a56f365ee3000ccf8675f43d5c663d66d3edb00" } ], "signed": { "_type": "timestamp", "expires": "2020-01-02T00:00:00Z", "meta": { "snapshot.json": { "hashes": { "sha256": "35c207d52640e403b9df82386a2258e093091538c7d77a641295e7b0262d6ca0", "sha512": "0a89bb735c8324ff1e661ad25c4017c0c330f09cbd3213ffac7104540c5fa01a35787ae3f517fc2966a89f53f7c91754de852988776cc59b2a574f28a0434139" }, "length": 545, "version": 2 } }, "spec_version": "1.0.0", "version": 2 } }client/testdata/php-tuf-fixtures/TUFTestFixture2LevelDelegation/server/metadata.staged/3.root.json000077500000000000000000000042031453140004500336630ustar00rootroot00000000000000{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "bd598e8bc29a3eb07aa71caceb0644977d73df87aae8f84c98aff5e87ea2de642c4950232fc2f4065b12a9c19ecf33e511f4e4ac78da7dcd75b3779802f39504" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2020-12-31T05:48:20Z", "keys": { "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 3 } }3.snapshot.json000077500000000000000000000010411453140004500344550ustar00rootroot00000000000000client/testdata/php-tuf-fixtures/TUFTestFixture2LevelDelegation/server/metadata.staged{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "563e4fa25cf88c0d029ac30608b219f27d9389945c7afd46c118eda1931fb64cae0f376780fee5ddbc66ab768733e2a5b640f3cc19ea687a3e71ae4116e5dd0f" } ], "signed": { "_type": "snapshot", "expires": "2020-01-08T00:00:00Z", "meta": { "a.json": { "version": 1 }, "b.json": { "version": 1 }, "c.json": { "version": 2 }, "targets.json": { "version": 3 } }, "spec_version": "1.0.0", "version": 3 } }3.targets.json000077500000000000000000000023661453140004500343020ustar00rootroot00000000000000client/testdata/php-tuf-fixtures/TUFTestFixture2LevelDelegation/server/metadata.staged{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "ced6f3e967a4366731f268a72a0f78aac0025641345a869baa013bb903502d7812ff22086834ab6b45f5c47cb7832139048663549d4e87d9219a0be7145c2807" } ], "signed": { "_type": "targets", "delegations": { "keys": { "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f758af464295e62a1da4d3267be6d13f4aba9c7d52166d01b6bd5b4559496c9d" }, "scheme": "ed25519" } }, "roles": [ { "keyids": [ "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b" ], "name": "a", "paths": [ "*.txt" ], "terminating": false, "threshold": 1 } ] }, "expires": "2020-04-01T07:27:10Z", "spec_version": "1.0.0", "targets": { "targets.txt": { "hashes": { "sha256": "6da6f624811b0d7792c57dc9ed58f1af8cbf4ebfaaaa3ea2011b57b4af63f7e6", "sha512": "0951c719b5adf26a55700bd1ac6b657fb513b04e4adb335a935a0da7f12f2ac99834b47442d0b832e5f4ffdd365ef538f14d3a52221c0cf81ef7b68ce312476a" }, "length": 21 } }, "version": 3 } }3.timestamp.json000077500000000000000000000013001453140004500346170ustar00rootroot00000000000000client/testdata/php-tuf-fixtures/TUFTestFixture2LevelDelegation/server/metadata.staged{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "65d615183cd58d8a6df898e8f7d6e886a44ca111d6cce95e9a86414b369703b2e9e897bfde405d0c0688b26a11c8f74217d0e0f62b4307d30919ce0f2cb0f700" } ], "signed": { "_type": "timestamp", "expires": "2020-01-02T00:00:00Z", "meta": { "snapshot.json": { "hashes": { "sha256": "83d637428ffc782a3f762dc6d983548aad231680f2d0d84270e02b538ecd0f68", "sha512": "3bcc5c70fe8c65d8103dcb60a0773ff436719159854d8d24242fb1f39721e9648b849b2a495487986aba1fdc53382ce604e6ddcd1fde72cbb81f8e8149bfd2f1" }, "length": 545, "version": 3 } }, "spec_version": "1.0.0", "version": 3 } }client/testdata/php-tuf-fixtures/TUFTestFixture2LevelDelegation/server/metadata.staged/a.json000077500000000000000000000034201453140004500327570ustar00rootroot00000000000000{ "signatures": [ { "keyid": "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "sig": "72b215c194090407abc8b7c513d69fd340abbe63037d26cbc2e4dd88c095a14da8d6e4aae0561f265e97d5c658b0260be2031af73c26e157e5f062c5f4aceb00" } ], "signed": { "_type": "targets", "delegations": { "keys": { "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "82f52e4503dbb364fabe8e5567f1cf909d4175d45468a021dfe75653db9ac98c" }, "scheme": "ed25519" }, "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "06e4dee0de7826c8d539a6112940b7459892b4ecaf696e67dc064aea0923f95c" }, "scheme": "ed25519" } }, "roles": [ { "keyids": [ "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68" ], "name": "b", "paths": [ "*.txt" ], "terminating": false, "threshold": 1 }, { "keyids": [ "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b" ], "name": "c", "paths": [ "*.txt" ], "terminating": false, "threshold": 1 } ] }, "expires": "2020-04-01T07:27:10Z", "spec_version": "1.0.0", "targets": { "a.txt": { "custom": {}, "hashes": { "sha256": "3f90cedf303207851bbdc5f857e018daf93b4c0083306cef17df547b42e4e985", "sha512": "f4631ef7ea7b015d7b88e411842fafeb78a72f0181bec72ea9754604ede74ea0e491bf8411659aabc96304fc764d0131ce49ba86066ab5f7b7480dde719e0bfd" }, "length": 15 } }, "version": 1 } }client/testdata/php-tuf-fixtures/TUFTestFixture2LevelDelegation/server/metadata.staged/b.json000077500000000000000000000013561453140004500327660ustar00rootroot00000000000000{ "signatures": [ { "keyid": "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "sig": "6a4f4bb63d7b6db4b6c09ce081fd229052ca087c98d25653c8d187de04dbedfc219aa9482774b939d84eb404fd51cfe383f9ea65e19a1d3cc79b642701bcff0d" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2020-04-01T07:27:10Z", "spec_version": "1.0.0", "targets": { "b.txt": { "custom": {}, "hashes": { "sha256": "949c6a4318dabe8bbd140cef99ea669ba031919ccf9bce0f5b4d0b61d1c0aa2e", "sha512": "f4cc9ce5c73b37e2a6707af7a0ea614ea5fa428bd2509e3af4528a5d330ce98a09c4dd98c859ad9b27b8aba24e1eacbf1af8393fdbfed899cecb995c87a11e3c" }, "length": 15 } }, "version": 1 } }client/testdata/php-tuf-fixtures/TUFTestFixture2LevelDelegation/server/metadata.staged/c.json000077500000000000000000000006711453140004500327660ustar00rootroot00000000000000{ "signatures": [ { "keyid": "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b", "sig": "c2f5f087f1bb9708f48657789cf8516b3d974e2250d3ec0268e347e89fa6f9eaa9e9441f5402ce32735fe31750013c5dc1b53f4e9a93d748ff060fa94ad3fd07" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2020-04-01T07:27:10Z", "spec_version": "1.0.0", "targets": {}, "version": 2 } }client/testdata/php-tuf-fixtures/TUFTestFixture2LevelDelegation/server/metadata.staged/root.json000077500000000000000000000042031453140004500335220ustar00rootroot00000000000000{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "bd598e8bc29a3eb07aa71caceb0644977d73df87aae8f84c98aff5e87ea2de642c4950232fc2f4065b12a9c19ecf33e511f4e4ac78da7dcd75b3779802f39504" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2020-12-31T05:48:20Z", "keys": { "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 3 } }client/testdata/php-tuf-fixtures/TUFTestFixture2LevelDelegation/server/metadata.staged/snapshot.json000077500000000000000000000010411453140004500343730ustar00rootroot00000000000000{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "563e4fa25cf88c0d029ac30608b219f27d9389945c7afd46c118eda1931fb64cae0f376780fee5ddbc66ab768733e2a5b640f3cc19ea687a3e71ae4116e5dd0f" } ], "signed": { "_type": "snapshot", "expires": "2020-01-08T00:00:00Z", "meta": { "a.json": { "version": 1 }, "b.json": { "version": 1 }, "c.json": { "version": 2 }, "targets.json": { "version": 3 } }, "spec_version": "1.0.0", "version": 3 } }client/testdata/php-tuf-fixtures/TUFTestFixture2LevelDelegation/server/metadata.staged/targets.json000077500000000000000000000023661453140004500342200ustar00rootroot00000000000000{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "ced6f3e967a4366731f268a72a0f78aac0025641345a869baa013bb903502d7812ff22086834ab6b45f5c47cb7832139048663549d4e87d9219a0be7145c2807" } ], "signed": { "_type": "targets", "delegations": { "keys": { "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f758af464295e62a1da4d3267be6d13f4aba9c7d52166d01b6bd5b4559496c9d" }, "scheme": "ed25519" } }, "roles": [ { "keyids": [ "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b" ], "name": "a", "paths": [ "*.txt" ], "terminating": false, "threshold": 1 } ] }, "expires": "2020-04-01T07:27:10Z", "spec_version": "1.0.0", "targets": { "targets.txt": { "hashes": { "sha256": "6da6f624811b0d7792c57dc9ed58f1af8cbf4ebfaaaa3ea2011b57b4af63f7e6", "sha512": "0951c719b5adf26a55700bd1ac6b657fb513b04e4adb335a935a0da7f12f2ac99834b47442d0b832e5f4ffdd365ef538f14d3a52221c0cf81ef7b68ce312476a" }, "length": 21 } }, "version": 3 } }timestamp.json000077500000000000000000000013001453140004500344560ustar00rootroot00000000000000client/testdata/php-tuf-fixtures/TUFTestFixture2LevelDelegation/server/metadata.staged{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "65d615183cd58d8a6df898e8f7d6e886a44ca111d6cce95e9a86414b369703b2e9e897bfde405d0c0688b26a11c8f74217d0e0f62b4307d30919ce0f2cb0f700" } ], "signed": { "_type": "timestamp", "expires": "2020-01-02T00:00:00Z", "meta": { "snapshot.json": { "hashes": { "sha256": "83d637428ffc782a3f762dc6d983548aad231680f2d0d84270e02b538ecd0f68", "sha512": "3bcc5c70fe8c65d8103dcb60a0773ff436719159854d8d24242fb1f39721e9648b849b2a495487986aba1fdc53382ce604e6ddcd1fde72cbb81f8e8149bfd2f1" }, "length": 545, "version": 3 } }, "spec_version": "1.0.0", "version": 3 } }client/testdata/php-tuf-fixtures/TUFTestFixture2LevelDelegation/server/metadata/000077500000000000000000000000001453140004500303745ustar00rootroot00000000000000client/testdata/php-tuf-fixtures/TUFTestFixture2LevelDelegation/server/metadata/1.a.json000077500000000000000000000034201453140004500316500ustar00rootroot00000000000000{ "signatures": [ { "keyid": "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "sig": "72b215c194090407abc8b7c513d69fd340abbe63037d26cbc2e4dd88c095a14da8d6e4aae0561f265e97d5c658b0260be2031af73c26e157e5f062c5f4aceb00" } ], "signed": { "_type": "targets", "delegations": { "keys": { "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "82f52e4503dbb364fabe8e5567f1cf909d4175d45468a021dfe75653db9ac98c" }, "scheme": "ed25519" }, "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "06e4dee0de7826c8d539a6112940b7459892b4ecaf696e67dc064aea0923f95c" }, "scheme": "ed25519" } }, "roles": [ { "keyids": [ "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68" ], "name": "b", "paths": [ "*.txt" ], "terminating": false, "threshold": 1 }, { "keyids": [ "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b" ], "name": "c", "paths": [ "*.txt" ], "terminating": false, "threshold": 1 } ] }, "expires": "2020-04-01T07:27:10Z", "spec_version": "1.0.0", "targets": { "a.txt": { "custom": {}, "hashes": { "sha256": "3f90cedf303207851bbdc5f857e018daf93b4c0083306cef17df547b42e4e985", "sha512": "f4631ef7ea7b015d7b88e411842fafeb78a72f0181bec72ea9754604ede74ea0e491bf8411659aabc96304fc764d0131ce49ba86066ab5f7b7480dde719e0bfd" }, "length": 15 } }, "version": 1 } }client/testdata/php-tuf-fixtures/TUFTestFixture2LevelDelegation/server/metadata/1.b.json000077500000000000000000000013561453140004500316570ustar00rootroot00000000000000{ "signatures": [ { "keyid": "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "sig": "6a4f4bb63d7b6db4b6c09ce081fd229052ca087c98d25653c8d187de04dbedfc219aa9482774b939d84eb404fd51cfe383f9ea65e19a1d3cc79b642701bcff0d" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2020-04-01T07:27:10Z", "spec_version": "1.0.0", "targets": { "b.txt": { "custom": {}, "hashes": { "sha256": "949c6a4318dabe8bbd140cef99ea669ba031919ccf9bce0f5b4d0b61d1c0aa2e", "sha512": "f4cc9ce5c73b37e2a6707af7a0ea614ea5fa428bd2509e3af4528a5d330ce98a09c4dd98c859ad9b27b8aba24e1eacbf1af8393fdbfed899cecb995c87a11e3c" }, "length": 15 } }, "version": 1 } }client/testdata/php-tuf-fixtures/TUFTestFixture2LevelDelegation/server/metadata/1.c.json000077500000000000000000000013561453140004500316600ustar00rootroot00000000000000{ "signatures": [ { "keyid": "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b", "sig": "9f0c5ef7e0a11012256c4a47ed757f9e90e930238f6a6e5c758a014f1b768519acb2b7d9aa9bd0456d71ba09b032598086e42d832830391e307c926c16f5b303" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2020-04-01T07:27:10Z", "spec_version": "1.0.0", "targets": { "c.txt": { "custom": {}, "hashes": { "sha256": "946e2ea9180de673891ae09ce0edfb207966bc32bd6324ebdad2c50c82075ffd", "sha512": "ddb5fb256a368d778b5fdd03d497ad79944c766245f3cccfc8b098b14c488ec424a68b86a6a2add36db4ef0f0214f15dbe0d63fbc5ca7a9619fb4c39544d78a9" }, "length": 15 } }, "version": 1 } }client/testdata/php-tuf-fixtures/TUFTestFixture2LevelDelegation/server/metadata/1.root.json000077500000000000000000000042031453140004500324130ustar00rootroot00000000000000{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "d0bf76a5cfc0aee1b8a1b1bf0ed8ca646a1a6d5f205945c515e8546bfd3c1e6b5e07cc0b93836bd030dd05ba68f177aecb05f6bf90c6702fd178e53310022506" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2020-12-31T05:48:20Z", "keys": { "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/php-tuf-fixtures/TUFTestFixture2LevelDelegation/server/metadata/1.snapshot.json000077500000000000000000000006571453140004500333000ustar00rootroot00000000000000{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "61db8765350398f7f750853337d9a55c5d6e790812d29146b5b45d5fd43d2a42c474a7a9fab263c3a50a28114a82f79dbf24ff1f99ae737a8d06f332f9f7d103" } ], "signed": { "_type": "snapshot", "expires": "2020-01-08T00:00:00Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/php-tuf-fixtures/TUFTestFixture2LevelDelegation/server/metadata/1.targets.json000077500000000000000000000006711453140004500331060ustar00rootroot00000000000000{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "c150e8ed5d352f366a979f4c4b9d556350c414c2da7ef1279045aaed3438c60872142d0dfe5ddbb627fec2d8fb7c5d8e692e04a87230b78d74714c5db035620a" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2020-04-01T07:27:10Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }client/testdata/php-tuf-fixtures/TUFTestFixture2LevelDelegation/server/metadata/1.timestamp.json000077500000000000000000000013001453140004500334260ustar00rootroot00000000000000{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "1d668531c7a0960cf90825faa684106a8aef0799c1b47e72301bac45d87f2dd42c14f1a3ac7db862323ca5177dd4fd686573ea92aea99638f17414dde561c00b" } ], "signed": { "_type": "timestamp", "expires": "2020-01-02T00:00:00Z", "meta": { "snapshot.json": { "hashes": { "sha256": "f4ca389c2c9fbc592d91d4e693c31113b8803a11bcb5ecd973581fa0e3d34ce0", "sha512": "92a0989e44c0e9f16d3e56268a3b8dd4e4416ee2ac91a4c871a405f1e426062651ec4effa0078fc4409c8b0422ccad9b1aa197db58f178406f398562b2e98195" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/php-tuf-fixtures/TUFTestFixture2LevelDelegation/server/metadata/2.c.json000077500000000000000000000006711453140004500316600ustar00rootroot00000000000000{ "signatures": [ { "keyid": "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b", "sig": "c2f5f087f1bb9708f48657789cf8516b3d974e2250d3ec0268e347e89fa6f9eaa9e9441f5402ce32735fe31750013c5dc1b53f4e9a93d748ff060fa94ad3fd07" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2020-04-01T07:27:10Z", "spec_version": "1.0.0", "targets": {}, "version": 2 } }client/testdata/php-tuf-fixtures/TUFTestFixture2LevelDelegation/server/metadata/2.root.json000077500000000000000000000042031453140004500324140ustar00rootroot00000000000000{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "e911db300e8eb378a2cabc48979e4c8f72beca30335db0579a7a1d81ae90c8bc63c27d92ce5a17846e3b1adb63a45a411bb4308e018e0d3cc4c9908311b5f208" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2020-12-31T05:48:20Z", "keys": { "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 2 } }client/testdata/php-tuf-fixtures/TUFTestFixture2LevelDelegation/server/metadata/2.snapshot.json000077500000000000000000000010411453140004500332650ustar00rootroot00000000000000{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "699125952eb773b09461a25fee03cf5a00237625e5dcb4e20334a13f09212daf6c97aff36fc1ac09ee302142eaec81447d57ba46d0831becb98d1526cb035106" } ], "signed": { "_type": "snapshot", "expires": "2020-01-08T00:00:00Z", "meta": { "a.json": { "version": 1 }, "b.json": { "version": 1 }, "c.json": { "version": 1 }, "targets.json": { "version": 2 } }, "spec_version": "1.0.0", "version": 2 } }client/testdata/php-tuf-fixtures/TUFTestFixture2LevelDelegation/server/metadata/2.targets.json000077500000000000000000000023661453140004500331120ustar00rootroot00000000000000{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "3b54f35d6c03622b723fe38d0115e9d98d47e147eaaa1d60e2f2925199c19e520a3a0de8842b16b1e4e73c0e71d8ca26169fa2b4063f544fb1613185f616f704" } ], "signed": { "_type": "targets", "delegations": { "keys": { "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f758af464295e62a1da4d3267be6d13f4aba9c7d52166d01b6bd5b4559496c9d" }, "scheme": "ed25519" } }, "roles": [ { "keyids": [ "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b" ], "name": "a", "paths": [ "*.txt" ], "terminating": false, "threshold": 1 } ] }, "expires": "2020-04-01T07:27:10Z", "spec_version": "1.0.0", "targets": { "targets.txt": { "hashes": { "sha256": "6da6f624811b0d7792c57dc9ed58f1af8cbf4ebfaaaa3ea2011b57b4af63f7e6", "sha512": "0951c719b5adf26a55700bd1ac6b657fb513b04e4adb335a935a0da7f12f2ac99834b47442d0b832e5f4ffdd365ef538f14d3a52221c0cf81ef7b68ce312476a" }, "length": 21 } }, "version": 2 } }client/testdata/php-tuf-fixtures/TUFTestFixture2LevelDelegation/server/metadata/2.timestamp.json000077500000000000000000000013001453140004500334270ustar00rootroot00000000000000{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "36db44bdcb33c37f259e8a12098e9a9114f0cffde4a7d4db0d88d04d7c93add316333e671c2c2305b081fe6a9a56f365ee3000ccf8675f43d5c663d66d3edb00" } ], "signed": { "_type": "timestamp", "expires": "2020-01-02T00:00:00Z", "meta": { "snapshot.json": { "hashes": { "sha256": "35c207d52640e403b9df82386a2258e093091538c7d77a641295e7b0262d6ca0", "sha512": "0a89bb735c8324ff1e661ad25c4017c0c330f09cbd3213ffac7104540c5fa01a35787ae3f517fc2966a89f53f7c91754de852988776cc59b2a574f28a0434139" }, "length": 545, "version": 2 } }, "spec_version": "1.0.0", "version": 2 } }client/testdata/php-tuf-fixtures/TUFTestFixture2LevelDelegation/server/metadata/3.root.json000077500000000000000000000042031453140004500324150ustar00rootroot00000000000000{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "bd598e8bc29a3eb07aa71caceb0644977d73df87aae8f84c98aff5e87ea2de642c4950232fc2f4065b12a9c19ecf33e511f4e4ac78da7dcd75b3779802f39504" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2020-12-31T05:48:20Z", "keys": { "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 3 } }client/testdata/php-tuf-fixtures/TUFTestFixture2LevelDelegation/server/metadata/3.snapshot.json000077500000000000000000000010411453140004500332660ustar00rootroot00000000000000{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "563e4fa25cf88c0d029ac30608b219f27d9389945c7afd46c118eda1931fb64cae0f376780fee5ddbc66ab768733e2a5b640f3cc19ea687a3e71ae4116e5dd0f" } ], "signed": { "_type": "snapshot", "expires": "2020-01-08T00:00:00Z", "meta": { "a.json": { "version": 1 }, "b.json": { "version": 1 }, "c.json": { "version": 2 }, "targets.json": { "version": 3 } }, "spec_version": "1.0.0", "version": 3 } }client/testdata/php-tuf-fixtures/TUFTestFixture2LevelDelegation/server/metadata/3.targets.json000077500000000000000000000023661453140004500331130ustar00rootroot00000000000000{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "ced6f3e967a4366731f268a72a0f78aac0025641345a869baa013bb903502d7812ff22086834ab6b45f5c47cb7832139048663549d4e87d9219a0be7145c2807" } ], "signed": { "_type": "targets", "delegations": { "keys": { "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f758af464295e62a1da4d3267be6d13f4aba9c7d52166d01b6bd5b4559496c9d" }, "scheme": "ed25519" } }, "roles": [ { "keyids": [ "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b" ], "name": "a", "paths": [ "*.txt" ], "terminating": false, "threshold": 1 } ] }, "expires": "2020-04-01T07:27:10Z", "spec_version": "1.0.0", "targets": { "targets.txt": { "hashes": { "sha256": "6da6f624811b0d7792c57dc9ed58f1af8cbf4ebfaaaa3ea2011b57b4af63f7e6", "sha512": "0951c719b5adf26a55700bd1ac6b657fb513b04e4adb335a935a0da7f12f2ac99834b47442d0b832e5f4ffdd365ef538f14d3a52221c0cf81ef7b68ce312476a" }, "length": 21 } }, "version": 3 } }client/testdata/php-tuf-fixtures/TUFTestFixture2LevelDelegation/server/metadata/3.timestamp.json000077500000000000000000000013001453140004500334300ustar00rootroot00000000000000{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "65d615183cd58d8a6df898e8f7d6e886a44ca111d6cce95e9a86414b369703b2e9e897bfde405d0c0688b26a11c8f74217d0e0f62b4307d30919ce0f2cb0f700" } ], "signed": { "_type": "timestamp", "expires": "2020-01-02T00:00:00Z", "meta": { "snapshot.json": { "hashes": { "sha256": "83d637428ffc782a3f762dc6d983548aad231680f2d0d84270e02b538ecd0f68", "sha512": "3bcc5c70fe8c65d8103dcb60a0773ff436719159854d8d24242fb1f39721e9648b849b2a495487986aba1fdc53382ce604e6ddcd1fde72cbb81f8e8149bfd2f1" }, "length": 545, "version": 3 } }, "spec_version": "1.0.0", "version": 3 } }client/testdata/php-tuf-fixtures/TUFTestFixture2LevelDelegation/server/metadata/a.json000077500000000000000000000034201453140004500315110ustar00rootroot00000000000000{ "signatures": [ { "keyid": "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "sig": "72b215c194090407abc8b7c513d69fd340abbe63037d26cbc2e4dd88c095a14da8d6e4aae0561f265e97d5c658b0260be2031af73c26e157e5f062c5f4aceb00" } ], "signed": { "_type": "targets", "delegations": { "keys": { "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "82f52e4503dbb364fabe8e5567f1cf909d4175d45468a021dfe75653db9ac98c" }, "scheme": "ed25519" }, "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "06e4dee0de7826c8d539a6112940b7459892b4ecaf696e67dc064aea0923f95c" }, "scheme": "ed25519" } }, "roles": [ { "keyids": [ "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68" ], "name": "b", "paths": [ "*.txt" ], "terminating": false, "threshold": 1 }, { "keyids": [ "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b" ], "name": "c", "paths": [ "*.txt" ], "terminating": false, "threshold": 1 } ] }, "expires": "2020-04-01T07:27:10Z", "spec_version": "1.0.0", "targets": { "a.txt": { "custom": {}, "hashes": { "sha256": "3f90cedf303207851bbdc5f857e018daf93b4c0083306cef17df547b42e4e985", "sha512": "f4631ef7ea7b015d7b88e411842fafeb78a72f0181bec72ea9754604ede74ea0e491bf8411659aabc96304fc764d0131ce49ba86066ab5f7b7480dde719e0bfd" }, "length": 15 } }, "version": 1 } }client/testdata/php-tuf-fixtures/TUFTestFixture2LevelDelegation/server/metadata/b.json000077500000000000000000000013561453140004500315200ustar00rootroot00000000000000{ "signatures": [ { "keyid": "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "sig": "6a4f4bb63d7b6db4b6c09ce081fd229052ca087c98d25653c8d187de04dbedfc219aa9482774b939d84eb404fd51cfe383f9ea65e19a1d3cc79b642701bcff0d" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2020-04-01T07:27:10Z", "spec_version": "1.0.0", "targets": { "b.txt": { "custom": {}, "hashes": { "sha256": "949c6a4318dabe8bbd140cef99ea669ba031919ccf9bce0f5b4d0b61d1c0aa2e", "sha512": "f4cc9ce5c73b37e2a6707af7a0ea614ea5fa428bd2509e3af4528a5d330ce98a09c4dd98c859ad9b27b8aba24e1eacbf1af8393fdbfed899cecb995c87a11e3c" }, "length": 15 } }, "version": 1 } }client/testdata/php-tuf-fixtures/TUFTestFixture2LevelDelegation/server/metadata/c.json000077500000000000000000000006711453140004500315200ustar00rootroot00000000000000{ "signatures": [ { "keyid": "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b", "sig": "c2f5f087f1bb9708f48657789cf8516b3d974e2250d3ec0268e347e89fa6f9eaa9e9441f5402ce32735fe31750013c5dc1b53f4e9a93d748ff060fa94ad3fd07" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2020-04-01T07:27:10Z", "spec_version": "1.0.0", "targets": {}, "version": 2 } }client/testdata/php-tuf-fixtures/TUFTestFixture2LevelDelegation/server/metadata/root.json000077500000000000000000000042031453140004500322540ustar00rootroot00000000000000{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "bd598e8bc29a3eb07aa71caceb0644977d73df87aae8f84c98aff5e87ea2de642c4950232fc2f4065b12a9c19ecf33e511f4e4ac78da7dcd75b3779802f39504" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2020-12-31T05:48:20Z", "keys": { "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 3 } }client/testdata/php-tuf-fixtures/TUFTestFixture2LevelDelegation/server/metadata/snapshot.json000077500000000000000000000010411453140004500331250ustar00rootroot00000000000000{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "563e4fa25cf88c0d029ac30608b219f27d9389945c7afd46c118eda1931fb64cae0f376780fee5ddbc66ab768733e2a5b640f3cc19ea687a3e71ae4116e5dd0f" } ], "signed": { "_type": "snapshot", "expires": "2020-01-08T00:00:00Z", "meta": { "a.json": { "version": 1 }, "b.json": { "version": 1 }, "c.json": { "version": 2 }, "targets.json": { "version": 3 } }, "spec_version": "1.0.0", "version": 3 } }client/testdata/php-tuf-fixtures/TUFTestFixture2LevelDelegation/server/metadata/targets.json000077500000000000000000000023661453140004500327520ustar00rootroot00000000000000{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "ced6f3e967a4366731f268a72a0f78aac0025641345a869baa013bb903502d7812ff22086834ab6b45f5c47cb7832139048663549d4e87d9219a0be7145c2807" } ], "signed": { "_type": "targets", "delegations": { "keys": { "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f758af464295e62a1da4d3267be6d13f4aba9c7d52166d01b6bd5b4559496c9d" }, "scheme": "ed25519" } }, "roles": [ { "keyids": [ "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b" ], "name": "a", "paths": [ "*.txt" ], "terminating": false, "threshold": 1 } ] }, "expires": "2020-04-01T07:27:10Z", "spec_version": "1.0.0", "targets": { "targets.txt": { "hashes": { "sha256": "6da6f624811b0d7792c57dc9ed58f1af8cbf4ebfaaaa3ea2011b57b4af63f7e6", "sha512": "0951c719b5adf26a55700bd1ac6b657fb513b04e4adb335a935a0da7f12f2ac99834b47442d0b832e5f4ffdd365ef538f14d3a52221c0cf81ef7b68ce312476a" }, "length": 21 } }, "version": 3 } }client/testdata/php-tuf-fixtures/TUFTestFixture2LevelDelegation/server/metadata/timestamp.json000077500000000000000000000013001453140004500332670ustar00rootroot00000000000000{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "65d615183cd58d8a6df898e8f7d6e886a44ca111d6cce95e9a86414b369703b2e9e897bfde405d0c0688b26a11c8f74217d0e0f62b4307d30919ce0f2cb0f700" } ], "signed": { "_type": "timestamp", "expires": "2020-01-02T00:00:00Z", "meta": { "snapshot.json": { "hashes": { "sha256": "83d637428ffc782a3f762dc6d983548aad231680f2d0d84270e02b538ecd0f68", "sha512": "3bcc5c70fe8c65d8103dcb60a0773ff436719159854d8d24242fb1f39721e9648b849b2a495487986aba1fdc53382ce604e6ddcd1fde72cbb81f8e8149bfd2f1" }, "length": 545, "version": 3 } }, "spec_version": "1.0.0", "version": 3 } }client/testdata/php-tuf-fixtures/TUFTestFixture2LevelDelegation/server/targets/000077500000000000000000000000001453140004500302655ustar00rootroot000000000000005f1e603365a7da158c96a6fb141fbcba126b3b6e.paxheader00006660000000000000000000000345145314000450020633xustar00rootroot00000000000000229 path=client/testdata/php-tuf-fixtures/TUFTestFixture2LevelDelegation/server/targets/0951c719b5adf26a55700bd1ac6b657fb513b04e4adb335a935a0da7f12f2ac99834b47442d0b832e5f4ffdd365ef538f14d3a52221c0cf81ef7b68ce312476a.targets.txt 5f1e603365a7da158c96a6fb141fbcba126b3b6e.data000066400000000000000000000000251453140004500174640ustar00rootroot00000000000000Contents: targets.txt3f90cedf303207851bbdc5f857e018daf93b4c0083306cef17df547b42e4e985.a.txt000066400000000000000000000000171453140004500420540ustar00rootroot00000000000000client/testdata/php-tuf-fixtures/TUFTestFixture2LevelDelegation/server/targetsContents: a.txt6da6f624811b0d7792c57dc9ed58f1af8cbf4ebfaaaa3ea2011b57b4af63f7e6.targets.txt000066400000000000000000000000251453140004500440130ustar00rootroot00000000000000client/testdata/php-tuf-fixtures/TUFTestFixture2LevelDelegation/server/targetsContents: targets.txt946e2ea9180de673891ae09ce0edfb207966bc32bd6324ebdad2c50c82075ffd.c.txt000066400000000000000000000000171453140004500422720ustar00rootroot00000000000000client/testdata/php-tuf-fixtures/TUFTestFixture2LevelDelegation/server/targetsContents: c.txt949c6a4318dabe8bbd140cef99ea669ba031919ccf9bce0f5b4d0b61d1c0aa2e.b.txt000066400000000000000000000000171453140004500425500ustar00rootroot00000000000000client/testdata/php-tuf-fixtures/TUFTestFixture2LevelDelegation/server/targetsContents: b.txtclient/testdata/php-tuf-fixtures/TUFTestFixture2LevelDelegation/server/targets/a.txt000066400000000000000000000000171453140004500312440ustar00rootroot00000000000000Contents: a.txtclient/testdata/php-tuf-fixtures/TUFTestFixture2LevelDelegation/server/targets/b.txt000066400000000000000000000000171453140004500312450ustar00rootroot00000000000000Contents: b.txtclient/testdata/php-tuf-fixtures/TUFTestFixture2LevelDelegation/server/targets/c.txt000066400000000000000000000000171453140004500312460ustar00rootroot00000000000000Contents: c.txt924df500fb662dc5b109d30bf3b42e5a67a0c6ec.paxheader00006660000000000000000000000337145314000450020631xustar00rootroot00000000000000223 path=client/testdata/php-tuf-fixtures/TUFTestFixture2LevelDelegation/server/targets/ddb5fb256a368d778b5fdd03d497ad79944c766245f3cccfc8b098b14c488ec424a68b86a6a2add36db4ef0f0214f15dbe0d63fbc5ca7a9619fb4c39544d78a9.c.txt 924df500fb662dc5b109d30bf3b42e5a67a0c6ec.data000066400000000000000000000000171453140004500174620ustar00rootroot00000000000000Contents: c.txt3c405619e1dc61b668ebcf0c501dde781d478f42.paxheader00006660000000000000000000000337145314000450020513xustar00rootroot00000000000000223 path=client/testdata/php-tuf-fixtures/TUFTestFixture2LevelDelegation/server/targets/f4631ef7ea7b015d7b88e411842fafeb78a72f0181bec72ea9754604ede74ea0e491bf8411659aabc96304fc764d0131ce49ba86066ab5f7b7480dde719e0bfd.a.txt 3c405619e1dc61b668ebcf0c501dde781d478f42.data000066400000000000000000000000171453140004500173440ustar00rootroot00000000000000Contents: a.txt976e178d20fe4826f20ed007c8a03a92002e3c60.paxheader00006660000000000000000000000337145314000450020257xustar00rootroot00000000000000223 path=client/testdata/php-tuf-fixtures/TUFTestFixture2LevelDelegation/server/targets/f4cc9ce5c73b37e2a6707af7a0ea614ea5fa428bd2509e3af4528a5d330ce98a09c4dd98c859ad9b27b8aba24e1eacbf1af8393fdbfed899cecb995c87a11e3c.b.txt 976e178d20fe4826f20ed007c8a03a92002e3c60.data000066400000000000000000000000171453140004500171100ustar00rootroot00000000000000Contents: b.txtclient/testdata/php-tuf-fixtures/TUFTestFixture2LevelDelegation/server/targets/targets.txt000066400000000000000000000000251453140004500324740ustar00rootroot00000000000000Contents: targets.txtclient/testdata/php-tuf-fixtures/TUFTestFixture3LevelDelegation/000077500000000000000000000000001453140004500253075ustar00rootroot00000000000000client/testdata/php-tuf-fixtures/TUFTestFixture3LevelDelegation/__init__.py000066400000000000000000000020211453140004500274130ustar00rootroot00000000000000# Delegation tree # # Targets # / \ # a f # / \ # b e # / \ # c d # # No terminating delegations. # # Roles should be evaluated in the order: # Targets > a > b > c > d > e > f from fixtures.builder import FixtureBuilder def build(): FixtureBuilder('TUFTestFixture3LevelDelegation')\ .publish(with_client=True)\ .create_target('targets.txt')\ .delegate('a', ['*.txt'])\ .create_target('a.txt', signing_role='a')\ .delegate('b', ['*.txt'], parent='a') \ .create_target('b.txt', signing_role='b') \ .delegate('c', ['*.txt'], parent='b') \ .create_target('c.txt', signing_role='c') \ .delegate('d', ['*.txt'], parent='b') \ .create_target('d.txt', signing_role='d') \ .delegate('e', ['*.txt'], parent='a') \ .create_target('e.txt', signing_role='e') \ .delegate('f', ['*.txt']) \ .create_target('f.txt', signing_role='f') \ .publish() client/testdata/php-tuf-fixtures/TUFTestFixture3LevelDelegation/client/000077500000000000000000000000001453140004500265655ustar00rootroot00000000000000client/testdata/php-tuf-fixtures/TUFTestFixture3LevelDelegation/client/metadata/000077500000000000000000000000001453140004500303455ustar00rootroot00000000000000client/testdata/php-tuf-fixtures/TUFTestFixture3LevelDelegation/client/metadata/current/000077500000000000000000000000001453140004500320275ustar00rootroot00000000000000client/testdata/php-tuf-fixtures/TUFTestFixture3LevelDelegation/client/metadata/current/1.root.json000066400000000000000000000042031453140004500340430ustar00rootroot00000000000000{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "d0bf76a5cfc0aee1b8a1b1bf0ed8ca646a1a6d5f205945c515e8546bfd3c1e6b5e07cc0b93836bd030dd05ba68f177aecb05f6bf90c6702fd178e53310022506" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2020-12-31T05:48:20Z", "keys": { "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 1 } }1.snapshot.json000066400000000000000000000006571453140004500346510ustar00rootroot00000000000000client/testdata/php-tuf-fixtures/TUFTestFixture3LevelDelegation/client/metadata/current{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "61db8765350398f7f750853337d9a55c5d6e790812d29146b5b45d5fd43d2a42c474a7a9fab263c3a50a28114a82f79dbf24ff1f99ae737a8d06f332f9f7d103" } ], "signed": { "_type": "snapshot", "expires": "2020-01-08T00:00:00Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }1.targets.json000066400000000000000000000006711453140004500344570ustar00rootroot00000000000000client/testdata/php-tuf-fixtures/TUFTestFixture3LevelDelegation/client/metadata/current{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "c150e8ed5d352f366a979f4c4b9d556350c414c2da7ef1279045aaed3438c60872142d0dfe5ddbb627fec2d8fb7c5d8e692e04a87230b78d74714c5db035620a" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2020-04-01T07:27:10Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }1.timestamp.json000066400000000000000000000013001453140004500347770ustar00rootroot00000000000000client/testdata/php-tuf-fixtures/TUFTestFixture3LevelDelegation/client/metadata/current{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "1d668531c7a0960cf90825faa684106a8aef0799c1b47e72301bac45d87f2dd42c14f1a3ac7db862323ca5177dd4fd686573ea92aea99638f17414dde561c00b" } ], "signed": { "_type": "timestamp", "expires": "2020-01-02T00:00:00Z", "meta": { "snapshot.json": { "hashes": { "sha256": "f4ca389c2c9fbc592d91d4e693c31113b8803a11bcb5ecd973581fa0e3d34ce0", "sha512": "92a0989e44c0e9f16d3e56268a3b8dd4e4416ee2ac91a4c871a405f1e426062651ec4effa0078fc4409c8b0422ccad9b1aa197db58f178406f398562b2e98195" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/php-tuf-fixtures/TUFTestFixture3LevelDelegation/client/metadata/current/root.json000066400000000000000000000042031453140004500337040ustar00rootroot00000000000000{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "d0bf76a5cfc0aee1b8a1b1bf0ed8ca646a1a6d5f205945c515e8546bfd3c1e6b5e07cc0b93836bd030dd05ba68f177aecb05f6bf90c6702fd178e53310022506" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2020-12-31T05:48:20Z", "keys": { "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 1 } }snapshot.json000066400000000000000000000006571453140004500345120ustar00rootroot00000000000000client/testdata/php-tuf-fixtures/TUFTestFixture3LevelDelegation/client/metadata/current{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "61db8765350398f7f750853337d9a55c5d6e790812d29146b5b45d5fd43d2a42c474a7a9fab263c3a50a28114a82f79dbf24ff1f99ae737a8d06f332f9f7d103" } ], "signed": { "_type": "snapshot", "expires": "2020-01-08T00:00:00Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/php-tuf-fixtures/TUFTestFixture3LevelDelegation/client/metadata/current/targets.json000066400000000000000000000006711453140004500343770ustar00rootroot00000000000000{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "c150e8ed5d352f366a979f4c4b9d556350c414c2da7ef1279045aaed3438c60872142d0dfe5ddbb627fec2d8fb7c5d8e692e04a87230b78d74714c5db035620a" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2020-04-01T07:27:10Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }timestamp.json000066400000000000000000000013001453140004500346400ustar00rootroot00000000000000client/testdata/php-tuf-fixtures/TUFTestFixture3LevelDelegation/client/metadata/current{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "1d668531c7a0960cf90825faa684106a8aef0799c1b47e72301bac45d87f2dd42c14f1a3ac7db862323ca5177dd4fd686573ea92aea99638f17414dde561c00b" } ], "signed": { "_type": "timestamp", "expires": "2020-01-02T00:00:00Z", "meta": { "snapshot.json": { "hashes": { "sha256": "f4ca389c2c9fbc592d91d4e693c31113b8803a11bcb5ecd973581fa0e3d34ce0", "sha512": "92a0989e44c0e9f16d3e56268a3b8dd4e4416ee2ac91a4c871a405f1e426062651ec4effa0078fc4409c8b0422ccad9b1aa197db58f178406f398562b2e98195" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/php-tuf-fixtures/TUFTestFixture3LevelDelegation/client/metadata/previous/000077500000000000000000000000001453140004500322215ustar00rootroot00000000000000client/testdata/php-tuf-fixtures/TUFTestFixture3LevelDelegation/client/metadata/previous/1.root.json000066400000000000000000000042031453140004500342350ustar00rootroot00000000000000{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "d0bf76a5cfc0aee1b8a1b1bf0ed8ca646a1a6d5f205945c515e8546bfd3c1e6b5e07cc0b93836bd030dd05ba68f177aecb05f6bf90c6702fd178e53310022506" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2020-12-31T05:48:20Z", "keys": { "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 1 } }1.snapshot.json000066400000000000000000000006571453140004500350430ustar00rootroot00000000000000client/testdata/php-tuf-fixtures/TUFTestFixture3LevelDelegation/client/metadata/previous{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "61db8765350398f7f750853337d9a55c5d6e790812d29146b5b45d5fd43d2a42c474a7a9fab263c3a50a28114a82f79dbf24ff1f99ae737a8d06f332f9f7d103" } ], "signed": { "_type": "snapshot", "expires": "2020-01-08T00:00:00Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }1.targets.json000066400000000000000000000006711453140004500346510ustar00rootroot00000000000000client/testdata/php-tuf-fixtures/TUFTestFixture3LevelDelegation/client/metadata/previous{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "c150e8ed5d352f366a979f4c4b9d556350c414c2da7ef1279045aaed3438c60872142d0dfe5ddbb627fec2d8fb7c5d8e692e04a87230b78d74714c5db035620a" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2020-04-01T07:27:10Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }1.timestamp.json000066400000000000000000000013001453140004500351710ustar00rootroot00000000000000client/testdata/php-tuf-fixtures/TUFTestFixture3LevelDelegation/client/metadata/previous{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "1d668531c7a0960cf90825faa684106a8aef0799c1b47e72301bac45d87f2dd42c14f1a3ac7db862323ca5177dd4fd686573ea92aea99638f17414dde561c00b" } ], "signed": { "_type": "timestamp", "expires": "2020-01-02T00:00:00Z", "meta": { "snapshot.json": { "hashes": { "sha256": "f4ca389c2c9fbc592d91d4e693c31113b8803a11bcb5ecd973581fa0e3d34ce0", "sha512": "92a0989e44c0e9f16d3e56268a3b8dd4e4416ee2ac91a4c871a405f1e426062651ec4effa0078fc4409c8b0422ccad9b1aa197db58f178406f398562b2e98195" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/php-tuf-fixtures/TUFTestFixture3LevelDelegation/client/metadata/previous/root.json000066400000000000000000000042031453140004500340760ustar00rootroot00000000000000{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "d0bf76a5cfc0aee1b8a1b1bf0ed8ca646a1a6d5f205945c515e8546bfd3c1e6b5e07cc0b93836bd030dd05ba68f177aecb05f6bf90c6702fd178e53310022506" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2020-12-31T05:48:20Z", "keys": { "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 1 } }snapshot.json000066400000000000000000000006571453140004500347040ustar00rootroot00000000000000client/testdata/php-tuf-fixtures/TUFTestFixture3LevelDelegation/client/metadata/previous{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "61db8765350398f7f750853337d9a55c5d6e790812d29146b5b45d5fd43d2a42c474a7a9fab263c3a50a28114a82f79dbf24ff1f99ae737a8d06f332f9f7d103" } ], "signed": { "_type": "snapshot", "expires": "2020-01-08T00:00:00Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }targets.json000066400000000000000000000006711453140004500345120ustar00rootroot00000000000000client/testdata/php-tuf-fixtures/TUFTestFixture3LevelDelegation/client/metadata/previous{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "c150e8ed5d352f366a979f4c4b9d556350c414c2da7ef1279045aaed3438c60872142d0dfe5ddbb627fec2d8fb7c5d8e692e04a87230b78d74714c5db035620a" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2020-04-01T07:27:10Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }timestamp.json000066400000000000000000000013001453140004500350320ustar00rootroot00000000000000client/testdata/php-tuf-fixtures/TUFTestFixture3LevelDelegation/client/metadata/previous{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "1d668531c7a0960cf90825faa684106a8aef0799c1b47e72301bac45d87f2dd42c14f1a3ac7db862323ca5177dd4fd686573ea92aea99638f17414dde561c00b" } ], "signed": { "_type": "timestamp", "expires": "2020-01-02T00:00:00Z", "meta": { "snapshot.json": { "hashes": { "sha256": "f4ca389c2c9fbc592d91d4e693c31113b8803a11bcb5ecd973581fa0e3d34ce0", "sha512": "92a0989e44c0e9f16d3e56268a3b8dd4e4416ee2ac91a4c871a405f1e426062651ec4effa0078fc4409c8b0422ccad9b1aa197db58f178406f398562b2e98195" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/php-tuf-fixtures/TUFTestFixture3LevelDelegation/server/000077500000000000000000000000001453140004500266155ustar00rootroot00000000000000client/testdata/php-tuf-fixtures/TUFTestFixture3LevelDelegation/server/metadata/000077500000000000000000000000001453140004500303755ustar00rootroot00000000000000client/testdata/php-tuf-fixtures/TUFTestFixture3LevelDelegation/server/metadata/1.a.json000066400000000000000000000034201453140004500316460ustar00rootroot00000000000000{ "signatures": [ { "keyid": "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "sig": "35eae38d12b845e5e2fb89c957b1e4b16bccfb5717160e0c1a36924b3ae89972d78e0837639e266cf5957ddf9d1f7eb184148ef2d242d7ff99b844342b48020a" } ], "signed": { "_type": "targets", "delegations": { "keys": { "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e104199cda6e018d7d9044fa6225aa5dc9c2af5ee4e1c0fe6d16ad002220390d" }, "scheme": "ed25519" }, "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "82f52e4503dbb364fabe8e5567f1cf909d4175d45468a021dfe75653db9ac98c" }, "scheme": "ed25519" } }, "roles": [ { "keyids": [ "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68" ], "name": "b", "paths": [ "*.txt" ], "terminating": false, "threshold": 1 }, { "keyids": [ "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586" ], "name": "e", "paths": [ "*.txt" ], "terminating": false, "threshold": 1 } ] }, "expires": "2020-04-01T07:27:10Z", "spec_version": "1.0.0", "targets": { "a.txt": { "custom": {}, "hashes": { "sha256": "3f90cedf303207851bbdc5f857e018daf93b4c0083306cef17df547b42e4e985", "sha512": "f4631ef7ea7b015d7b88e411842fafeb78a72f0181bec72ea9754604ede74ea0e491bf8411659aabc96304fc764d0131ce49ba86066ab5f7b7480dde719e0bfd" }, "length": 15 } }, "version": 1 } }client/testdata/php-tuf-fixtures/TUFTestFixture3LevelDelegation/server/metadata/1.b.json000066400000000000000000000034201453140004500316470ustar00rootroot00000000000000{ "signatures": [ { "keyid": "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "sig": "a99aa2bd1aa6473f48fc9c3a93289de4efea45071906bc4deecd3a85ffe0e6bc2c1b1751a2b0975e8f28d1b8114ac964f6dc55e5e160f602d56eff51d25c7907" } ], "signed": { "_type": "targets", "delegations": { "keys": { "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "06e4dee0de7826c8d539a6112940b7459892b4ecaf696e67dc064aea0923f95c" }, "scheme": "ed25519" }, "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "fa386632ae9cc358ad0b56565edef362ad10d7fadb05bc8dc8995627372b990e" }, "scheme": "ed25519" } }, "roles": [ { "keyids": [ "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b" ], "name": "c", "paths": [ "*.txt" ], "terminating": false, "threshold": 1 }, { "keyids": [ "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62" ], "name": "d", "paths": [ "*.txt" ], "terminating": false, "threshold": 1 } ] }, "expires": "2020-04-01T07:27:10Z", "spec_version": "1.0.0", "targets": { "b.txt": { "custom": {}, "hashes": { "sha256": "949c6a4318dabe8bbd140cef99ea669ba031919ccf9bce0f5b4d0b61d1c0aa2e", "sha512": "f4cc9ce5c73b37e2a6707af7a0ea614ea5fa428bd2509e3af4528a5d330ce98a09c4dd98c859ad9b27b8aba24e1eacbf1af8393fdbfed899cecb995c87a11e3c" }, "length": 15 } }, "version": 1 } }client/testdata/php-tuf-fixtures/TUFTestFixture3LevelDelegation/server/metadata/1.c.json000066400000000000000000000013561453140004500316560ustar00rootroot00000000000000{ "signatures": [ { "keyid": "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b", "sig": "9f0c5ef7e0a11012256c4a47ed757f9e90e930238f6a6e5c758a014f1b768519acb2b7d9aa9bd0456d71ba09b032598086e42d832830391e307c926c16f5b303" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2020-04-01T07:27:10Z", "spec_version": "1.0.0", "targets": { "c.txt": { "custom": {}, "hashes": { "sha256": "946e2ea9180de673891ae09ce0edfb207966bc32bd6324ebdad2c50c82075ffd", "sha512": "ddb5fb256a368d778b5fdd03d497ad79944c766245f3cccfc8b098b14c488ec424a68b86a6a2add36db4ef0f0214f15dbe0d63fbc5ca7a9619fb4c39544d78a9" }, "length": 15 } }, "version": 1 } }client/testdata/php-tuf-fixtures/TUFTestFixture3LevelDelegation/server/metadata/1.d.json000066400000000000000000000013561453140004500316570ustar00rootroot00000000000000{ "signatures": [ { "keyid": "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "sig": "04d8264dd6d75fad106d599603801842057de038803935cf9b043fff4d5ee2618675c85291822f18efff770fa89056ed960de35309356a24baef45d9f64c8c0f" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2020-04-01T07:27:10Z", "spec_version": "1.0.0", "targets": { "d.txt": { "custom": {}, "hashes": { "sha256": "b2ce56612fa7e840d56d263f75804f60baaad5d6e0a7d544e65e1791f2df5e55", "sha512": "79b44a183eaa0025f3997b856537502ac1759de74263985ad1dd9ab0bb5cc8ce46b6c45c1bf37adb87c2839cca54ae784c3d3488e994d29f003decc81638d589" }, "length": 15 } }, "version": 1 } }client/testdata/php-tuf-fixtures/TUFTestFixture3LevelDelegation/server/metadata/1.e.json000066400000000000000000000013561453140004500316600ustar00rootroot00000000000000{ "signatures": [ { "keyid": "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "sig": "11ea2f743a5e5ec7f5bea84804c1fdc2e70f42a1f955668b0072fc6bed00e6535574c129270f97e8849e589a57f48a077903244250ab970eac45f7c46c43b003" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2020-04-01T07:27:10Z", "spec_version": "1.0.0", "targets": { "e.txt": { "custom": {}, "hashes": { "sha256": "027b3d1814dae8547aed3d7e7b99aa0d59d82cc18411037b0ef0318eb754ce86", "sha512": "ffca8c347335e5e019deba8a15212297fe25afc734ac06fcd01b4d9dae12b16d750d7a44bdafcada254148990aa6611bc9ed2f2841da2c0dd70bb870be7275f6" }, "length": 15 } }, "version": 1 } }client/testdata/php-tuf-fixtures/TUFTestFixture3LevelDelegation/server/metadata/1.f.json000066400000000000000000000013561453140004500316610ustar00rootroot00000000000000{ "signatures": [ { "keyid": "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "sig": "ff5f1d3bfc5d31f71997b1c020c06d7c1683e0f7e747cfdbdf6c718f608181b4c81f3212a93ff8e109b377a73af5883e1568257b050a5b6137058a10463f640e" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2020-04-01T07:27:10Z", "spec_version": "1.0.0", "targets": { "f.txt": { "custom": {}, "hashes": { "sha256": "f0b07df15d4a3e98ffc6ee6a4c00d04623b0171de458d94dbec4abb7646bc60e", "sha512": "b8061c4c83d478aaadc6758a74861f749420e83dd6bf07e931738b0619404a75d12758429b12f8d047643d6d13047ec0b65bb253cf5f5b961515658864301207" }, "length": 15 } }, "version": 1 } }client/testdata/php-tuf-fixtures/TUFTestFixture3LevelDelegation/server/metadata/1.root.json000066400000000000000000000042031453140004500324110ustar00rootroot00000000000000{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "d0bf76a5cfc0aee1b8a1b1bf0ed8ca646a1a6d5f205945c515e8546bfd3c1e6b5e07cc0b93836bd030dd05ba68f177aecb05f6bf90c6702fd178e53310022506" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2020-12-31T05:48:20Z", "keys": { "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/php-tuf-fixtures/TUFTestFixture3LevelDelegation/server/metadata/1.snapshot.json000066400000000000000000000006571453140004500332760ustar00rootroot00000000000000{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "61db8765350398f7f750853337d9a55c5d6e790812d29146b5b45d5fd43d2a42c474a7a9fab263c3a50a28114a82f79dbf24ff1f99ae737a8d06f332f9f7d103" } ], "signed": { "_type": "snapshot", "expires": "2020-01-08T00:00:00Z", "meta": { "targets.json": { "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/php-tuf-fixtures/TUFTestFixture3LevelDelegation/server/metadata/1.targets.json000066400000000000000000000006711453140004500331040ustar00rootroot00000000000000{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "c150e8ed5d352f366a979f4c4b9d556350c414c2da7ef1279045aaed3438c60872142d0dfe5ddbb627fec2d8fb7c5d8e692e04a87230b78d74714c5db035620a" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2020-04-01T07:27:10Z", "spec_version": "1.0.0", "targets": {}, "version": 1 } }client/testdata/php-tuf-fixtures/TUFTestFixture3LevelDelegation/server/metadata/1.timestamp.json000066400000000000000000000013001453140004500334240ustar00rootroot00000000000000{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "1d668531c7a0960cf90825faa684106a8aef0799c1b47e72301bac45d87f2dd42c14f1a3ac7db862323ca5177dd4fd686573ea92aea99638f17414dde561c00b" } ], "signed": { "_type": "timestamp", "expires": "2020-01-02T00:00:00Z", "meta": { "snapshot.json": { "hashes": { "sha256": "f4ca389c2c9fbc592d91d4e693c31113b8803a11bcb5ecd973581fa0e3d34ce0", "sha512": "92a0989e44c0e9f16d3e56268a3b8dd4e4416ee2ac91a4c871a405f1e426062651ec4effa0078fc4409c8b0422ccad9b1aa197db58f178406f398562b2e98195" }, "length": 431, "version": 1 } }, "spec_version": "1.0.0", "version": 1 } }client/testdata/php-tuf-fixtures/TUFTestFixture3LevelDelegation/server/metadata/2.root.json000066400000000000000000000042031453140004500324120ustar00rootroot00000000000000{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "e911db300e8eb378a2cabc48979e4c8f72beca30335db0579a7a1d81ae90c8bc63c27d92ce5a17846e3b1adb63a45a411bb4308e018e0d3cc4c9908311b5f208" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2020-12-31T05:48:20Z", "keys": { "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 2 } }client/testdata/php-tuf-fixtures/TUFTestFixture3LevelDelegation/server/metadata/2.snapshot.json000066400000000000000000000012231453140004500332650ustar00rootroot00000000000000{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "a12c5320e165f6a674b5d030c1c2f6a1716ad413ad6bda8942febab0af19f510958998d36c76bb47274fe20d3531f67f99f6f6dde8bc3bc0bca7098d8042510c" } ], "signed": { "_type": "snapshot", "expires": "2020-01-08T00:00:00Z", "meta": { "a.json": { "version": 1 }, "b.json": { "version": 1 }, "c.json": { "version": 1 }, "d.json": { "version": 1 }, "e.json": { "version": 1 }, "f.json": { "version": 1 }, "targets.json": { "version": 2 } }, "spec_version": "1.0.0", "version": 2 } }client/testdata/php-tuf-fixtures/TUFTestFixture3LevelDelegation/server/metadata/2.targets.json000066400000000000000000000034041453140004500331020ustar00rootroot00000000000000{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "91abfb44e844a293837d1e081953acc4a7d179ff695353ea0472eb71846f8aee9903b352fa595084243218bec93336defc184ed0b4a1bc50e497878ed7f03c0c" } ], "signed": { "_type": "targets", "delegations": { "keys": { "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f758af464295e62a1da4d3267be6d13f4aba9c7d52166d01b6bd5b4559496c9d" }, "scheme": "ed25519" }, "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "683d345a948a9baa343be4e44c076ca115da3838e72c28a06340c8ec1b3ef6be" }, "scheme": "ed25519" } }, "roles": [ { "keyids": [ "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b" ], "name": "a", "paths": [ "*.txt" ], "terminating": false, "threshold": 1 }, { "keyids": [ "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be" ], "name": "f", "paths": [ "*.txt" ], "terminating": false, "threshold": 1 } ] }, "expires": "2020-04-01T07:27:10Z", "spec_version": "1.0.0", "targets": { "targets.txt": { "hashes": { "sha256": "6da6f624811b0d7792c57dc9ed58f1af8cbf4ebfaaaa3ea2011b57b4af63f7e6", "sha512": "0951c719b5adf26a55700bd1ac6b657fb513b04e4adb335a935a0da7f12f2ac99834b47442d0b832e5f4ffdd365ef538f14d3a52221c0cf81ef7b68ce312476a" }, "length": 21 } }, "version": 2 } }client/testdata/php-tuf-fixtures/TUFTestFixture3LevelDelegation/server/metadata/2.timestamp.json000066400000000000000000000013001453140004500334250ustar00rootroot00000000000000{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "c48177d304312637216cfa3e424e1f7a214dfbd2121597e2b6ef10b40c000d48720078742503d68d19e50dd39da093e5d25d72ff6a634e7e8880bd9992fc110b" } ], "signed": { "_type": "timestamp", "expires": "2020-01-02T00:00:00Z", "meta": { "snapshot.json": { "hashes": { "sha256": "b5a9218242238080aa294948c18f9d48022b1c3ca68ebdde92fed68bbc0c3c09", "sha512": "ffb8446b2517a5db4a0ca7b59f4800bcd00f807e918b884af53c7c82b941df242d790e64feaba08ae33edd92902c494f85c9f7c25e8b7071ab0f0b8a1e61206d" }, "length": 659, "version": 2 } }, "spec_version": "1.0.0", "version": 2 } }client/testdata/php-tuf-fixtures/TUFTestFixture3LevelDelegation/server/metadata/a.json000066400000000000000000000034201453140004500315070ustar00rootroot00000000000000{ "signatures": [ { "keyid": "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b", "sig": "35eae38d12b845e5e2fb89c957b1e4b16bccfb5717160e0c1a36924b3ae89972d78e0837639e266cf5957ddf9d1f7eb184148ef2d242d7ff99b844342b48020a" } ], "signed": { "_type": "targets", "delegations": { "keys": { "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e104199cda6e018d7d9044fa6225aa5dc9c2af5ee4e1c0fe6d16ad002220390d" }, "scheme": "ed25519" }, "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "82f52e4503dbb364fabe8e5567f1cf909d4175d45468a021dfe75653db9ac98c" }, "scheme": "ed25519" } }, "roles": [ { "keyids": [ "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68" ], "name": "b", "paths": [ "*.txt" ], "terminating": false, "threshold": 1 }, { "keyids": [ "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586" ], "name": "e", "paths": [ "*.txt" ], "terminating": false, "threshold": 1 } ] }, "expires": "2020-04-01T07:27:10Z", "spec_version": "1.0.0", "targets": { "a.txt": { "custom": {}, "hashes": { "sha256": "3f90cedf303207851bbdc5f857e018daf93b4c0083306cef17df547b42e4e985", "sha512": "f4631ef7ea7b015d7b88e411842fafeb78a72f0181bec72ea9754604ede74ea0e491bf8411659aabc96304fc764d0131ce49ba86066ab5f7b7480dde719e0bfd" }, "length": 15 } }, "version": 1 } }client/testdata/php-tuf-fixtures/TUFTestFixture3LevelDelegation/server/metadata/b.json000066400000000000000000000034201453140004500315100ustar00rootroot00000000000000{ "signatures": [ { "keyid": "718fedad390b4d0d470b890781eb8c94e5a7e975aebe65fc0862246c945fce68", "sig": "a99aa2bd1aa6473f48fc9c3a93289de4efea45071906bc4deecd3a85ffe0e6bc2c1b1751a2b0975e8f28d1b8114ac964f6dc55e5e160f602d56eff51d25c7907" } ], "signed": { "_type": "targets", "delegations": { "keys": { "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "06e4dee0de7826c8d539a6112940b7459892b4ecaf696e67dc064aea0923f95c" }, "scheme": "ed25519" }, "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "fa386632ae9cc358ad0b56565edef362ad10d7fadb05bc8dc8995627372b990e" }, "scheme": "ed25519" } }, "roles": [ { "keyids": [ "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b" ], "name": "c", "paths": [ "*.txt" ], "terminating": false, "threshold": 1 }, { "keyids": [ "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62" ], "name": "d", "paths": [ "*.txt" ], "terminating": false, "threshold": 1 } ] }, "expires": "2020-04-01T07:27:10Z", "spec_version": "1.0.0", "targets": { "b.txt": { "custom": {}, "hashes": { "sha256": "949c6a4318dabe8bbd140cef99ea669ba031919ccf9bce0f5b4d0b61d1c0aa2e", "sha512": "f4cc9ce5c73b37e2a6707af7a0ea614ea5fa428bd2509e3af4528a5d330ce98a09c4dd98c859ad9b27b8aba24e1eacbf1af8393fdbfed899cecb995c87a11e3c" }, "length": 15 } }, "version": 1 } }client/testdata/php-tuf-fixtures/TUFTestFixture3LevelDelegation/server/metadata/c.json000066400000000000000000000013561453140004500315170ustar00rootroot00000000000000{ "signatures": [ { "keyid": "9ca81f7ff17f6218246474a51b47eb035741bc472557ef5ac493e279f446b85b", "sig": "9f0c5ef7e0a11012256c4a47ed757f9e90e930238f6a6e5c758a014f1b768519acb2b7d9aa9bd0456d71ba09b032598086e42d832830391e307c926c16f5b303" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2020-04-01T07:27:10Z", "spec_version": "1.0.0", "targets": { "c.txt": { "custom": {}, "hashes": { "sha256": "946e2ea9180de673891ae09ce0edfb207966bc32bd6324ebdad2c50c82075ffd", "sha512": "ddb5fb256a368d778b5fdd03d497ad79944c766245f3cccfc8b098b14c488ec424a68b86a6a2add36db4ef0f0214f15dbe0d63fbc5ca7a9619fb4c39544d78a9" }, "length": 15 } }, "version": 1 } }client/testdata/php-tuf-fixtures/TUFTestFixture3LevelDelegation/server/metadata/d.json000066400000000000000000000013561453140004500315200ustar00rootroot00000000000000{ "signatures": [ { "keyid": "e9829d3f2fdff6d6f31002c17cf7f20cf0398e215ca0c0c44d075ccd76a26f62", "sig": "04d8264dd6d75fad106d599603801842057de038803935cf9b043fff4d5ee2618675c85291822f18efff770fa89056ed960de35309356a24baef45d9f64c8c0f" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2020-04-01T07:27:10Z", "spec_version": "1.0.0", "targets": { "d.txt": { "custom": {}, "hashes": { "sha256": "b2ce56612fa7e840d56d263f75804f60baaad5d6e0a7d544e65e1791f2df5e55", "sha512": "79b44a183eaa0025f3997b856537502ac1759de74263985ad1dd9ab0bb5cc8ce46b6c45c1bf37adb87c2839cca54ae784c3d3488e994d29f003decc81638d589" }, "length": 15 } }, "version": 1 } }client/testdata/php-tuf-fixtures/TUFTestFixture3LevelDelegation/server/metadata/e.json000066400000000000000000000013561453140004500315210ustar00rootroot00000000000000{ "signatures": [ { "keyid": "15024498e03f033ec92758a1dc7107b34eebe759b09827b02a7fb3c64ca3e586", "sig": "11ea2f743a5e5ec7f5bea84804c1fdc2e70f42a1f955668b0072fc6bed00e6535574c129270f97e8849e589a57f48a077903244250ab970eac45f7c46c43b003" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2020-04-01T07:27:10Z", "spec_version": "1.0.0", "targets": { "e.txt": { "custom": {}, "hashes": { "sha256": "027b3d1814dae8547aed3d7e7b99aa0d59d82cc18411037b0ef0318eb754ce86", "sha512": "ffca8c347335e5e019deba8a15212297fe25afc734ac06fcd01b4d9dae12b16d750d7a44bdafcada254148990aa6611bc9ed2f2841da2c0dd70bb870be7275f6" }, "length": 15 } }, "version": 1 } }client/testdata/php-tuf-fixtures/TUFTestFixture3LevelDelegation/server/metadata/f.json000066400000000000000000000013561453140004500315220ustar00rootroot00000000000000{ "signatures": [ { "keyid": "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be", "sig": "ff5f1d3bfc5d31f71997b1c020c06d7c1683e0f7e747cfdbdf6c718f608181b4c81f3212a93ff8e109b377a73af5883e1568257b050a5b6137058a10463f640e" } ], "signed": { "_type": "targets", "delegations": { "keys": {}, "roles": [] }, "expires": "2020-04-01T07:27:10Z", "spec_version": "1.0.0", "targets": { "f.txt": { "custom": {}, "hashes": { "sha256": "f0b07df15d4a3e98ffc6ee6a4c00d04623b0171de458d94dbec4abb7646bc60e", "sha512": "b8061c4c83d478aaadc6758a74861f749420e83dd6bf07e931738b0619404a75d12758429b12f8d047643d6d13047ec0b65bb253cf5f5b961515658864301207" }, "length": 15 } }, "version": 1 } }client/testdata/php-tuf-fixtures/TUFTestFixture3LevelDelegation/server/metadata/root.json000066400000000000000000000042031453140004500322520ustar00rootroot00000000000000{ "signatures": [ { "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", "sig": "e911db300e8eb378a2cabc48979e4c8f72beca30335db0579a7a1d81ae90c8bc63c27d92ce5a17846e3b1adb63a45a411bb4308e018e0d3cc4c9908311b5f208" } ], "signed": { "_type": "root", "consistent_snapshot": true, "expires": "2020-12-31T05:48:20Z", "keys": { "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } }, "roles": { "root": { "keyids": [ "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } }, "spec_version": "1.0.0", "version": 2 } }client/testdata/php-tuf-fixtures/TUFTestFixture3LevelDelegation/server/metadata/snapshot.json000066400000000000000000000012231453140004500331250ustar00rootroot00000000000000{ "signatures": [ { "keyid": "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93", "sig": "a12c5320e165f6a674b5d030c1c2f6a1716ad413ad6bda8942febab0af19f510958998d36c76bb47274fe20d3531f67f99f6f6dde8bc3bc0bca7098d8042510c" } ], "signed": { "_type": "snapshot", "expires": "2020-01-08T00:00:00Z", "meta": { "a.json": { "version": 1 }, "b.json": { "version": 1 }, "c.json": { "version": 1 }, "d.json": { "version": 1 }, "e.json": { "version": 1 }, "f.json": { "version": 1 }, "targets.json": { "version": 2 } }, "spec_version": "1.0.0", "version": 2 } }client/testdata/php-tuf-fixtures/TUFTestFixture3LevelDelegation/server/metadata/targets.json000066400000000000000000000034041453140004500327420ustar00rootroot00000000000000{ "signatures": [ { "keyid": "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4", "sig": "91abfb44e844a293837d1e081953acc4a7d179ff695353ea0472eb71846f8aee9903b352fa595084243218bec93336defc184ed0b4a1bc50e497878ed7f03c0c" } ], "signed": { "_type": "targets", "delegations": { "keys": { "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "f758af464295e62a1da4d3267be6d13f4aba9c7d52166d01b6bd5b4559496c9d" }, "scheme": "ed25519" }, "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { "public": "683d345a948a9baa343be4e44c076ca115da3838e72c28a06340c8ec1b3ef6be" }, "scheme": "ed25519" } }, "roles": [ { "keyids": [ "05e17c1501d627b2597322f80d33aacec6f30a507552d3326a88913422b0e30b" ], "name": "a", "paths": [ "*.txt" ], "terminating": false, "threshold": 1 }, { "keyids": [ "f581c9aeff9989106aeeea35319d1d1f067149619a2ff005249d6f60560557be" ], "name": "f", "paths": [ "*.txt" ], "terminating": false, "threshold": 1 } ] }, "expires": "2020-04-01T07:27:10Z", "spec_version": "1.0.0", "targets": { "targets.txt": { "hashes": { "sha256": "6da6f624811b0d7792c57dc9ed58f1af8cbf4ebfaaaa3ea2011b57b4af63f7e6", "sha512": "0951c719b5adf26a55700bd1ac6b657fb513b04e4adb335a935a0da7f12f2ac99834b47442d0b832e5f4ffdd365ef538f14d3a52221c0cf81ef7b68ce312476a" }, "length": 21 } }, "version": 2 } }client/testdata/php-tuf-fixtures/TUFTestFixture3LevelDelegation/server/metadata/timestamp.json000066400000000000000000000013001453140004500332650ustar00rootroot00000000000000{ "signatures": [ { "keyid": "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae", "sig": "c48177d304312637216cfa3e424e1f7a214dfbd2121597e2b6ef10b40c000d48720078742503d68d19e50dd39da093e5d25d72ff6a634e7e8880bd9992fc110b" } ], "signed": { "_type": "timestamp", "expires": "2020-01-02T00:00:00Z", "meta": { "snapshot.json": { "hashes": { "sha256": "b5a9218242238080aa294948c18f9d48022b1c3ca68ebdde92fed68bbc0c3c09", "sha512": "ffb8446b2517a5db4a0ca7b59f4800bcd00f807e918b884af53c7c82b941df242d790e64feaba08ae33edd92902c494f85c9f7c25e8b7071ab0f0b8a1e61206d" }, "length": 659, "version": 2 } }, "spec_version": "1.0.0", "version": 2 } }client/testdata/php-tuf-fixtures/TUFTestFixture3LevelDelegation/server/targets/000077500000000000000000000000001453140004500302665ustar00rootroot00000000000000027b3d1814dae8547aed3d7e7b99aa0d59d82cc18411037b0ef0318eb754ce86.e.txt000066400000000000000000000000171453140004500420510ustar00rootroot00000000000000client/testdata/php-tuf-fixtures/TUFTestFixture3LevelDelegation/server/targetsContents: e.txt5f1e603365a7da158c96a6fb141fbcba126b3b6e.paxheader00006660000000000000000000000345145314000450020633xustar00rootroot00000000000000229 path=client/testdata/php-tuf-fixtures/TUFTestFixture3LevelDelegation/server/targets/0951c719b5adf26a55700bd1ac6b657fb513b04e4adb335a935a0da7f12f2ac99834b47442d0b832e5f4ffdd365ef538f14d3a52221c0cf81ef7b68ce312476a.targets.txt 5f1e603365a7da158c96a6fb141fbcba126b3b6e.data000066400000000000000000000000251453140004500174640ustar00rootroot00000000000000Contents: targets.txt3f90cedf303207851bbdc5f857e018daf93b4c0083306cef17df547b42e4e985.a.txt000066400000000000000000000000171453140004500420550ustar00rootroot00000000000000client/testdata/php-tuf-fixtures/TUFTestFixture3LevelDelegation/server/targetsContents: a.txt6da6f624811b0d7792c57dc9ed58f1af8cbf4ebfaaaa3ea2011b57b4af63f7e6.targets.txt000066400000000000000000000000251453140004500440140ustar00rootroot00000000000000client/testdata/php-tuf-fixtures/TUFTestFixture3LevelDelegation/server/targetsContents: targets.txt36ce6ad47c0ccfd9e21bc0d2ea89e3cce661459c.paxheader00006660000000000000000000000337145314000450021073xustar00rootroot00000000000000223 path=client/testdata/php-tuf-fixtures/TUFTestFixture3LevelDelegation/server/targets/79b44a183eaa0025f3997b856537502ac1759de74263985ad1dd9ab0bb5cc8ce46b6c45c1bf37adb87c2839cca54ae784c3d3488e994d29f003decc81638d589.d.txt 36ce6ad47c0ccfd9e21bc0d2ea89e3cce661459c.data000066400000000000000000000000171453140004500177240ustar00rootroot00000000000000Contents: d.txt946e2ea9180de673891ae09ce0edfb207966bc32bd6324ebdad2c50c82075ffd.c.txt000066400000000000000000000000171453140004500422730ustar00rootroot00000000000000client/testdata/php-tuf-fixtures/TUFTestFixture3LevelDelegation/server/targetsContents: c.txt949c6a4318dabe8bbd140cef99ea669ba031919ccf9bce0f5b4d0b61d1c0aa2e.b.txt000066400000000000000000000000171453140004500425510ustar00rootroot00000000000000client/testdata/php-tuf-fixtures/TUFTestFixture3LevelDelegation/server/targetsContents: b.txtclient/testdata/php-tuf-fixtures/TUFTestFixture3LevelDelegation/server/targets/a.txt000066400000000000000000000000171453140004500312450ustar00rootroot00000000000000Contents: a.txtclient/testdata/php-tuf-fixtures/TUFTestFixture3LevelDelegation/server/targets/b.txt000066400000000000000000000000171453140004500312460ustar00rootroot00000000000000Contents: b.txtb2ce56612fa7e840d56d263f75804f60baaad5d6e0a7d544e65e1791f2df5e55.d.txt000066400000000000000000000000171453140004500421410ustar00rootroot00000000000000client/testdata/php-tuf-fixtures/TUFTestFixture3LevelDelegation/server/targetsContents: d.txtf7c5df53fea6193eb099b70bfb4aee31b6c21051.paxheader00006660000000000000000000000337145314000450020722xustar00rootroot00000000000000223 path=client/testdata/php-tuf-fixtures/TUFTestFixture3LevelDelegation/server/targets/b8061c4c83d478aaadc6758a74861f749420e83dd6bf07e931738b0619404a75d12758429b12f8d047643d6d13047ec0b65bb253cf5f5b961515658864301207.f.txt f7c5df53fea6193eb099b70bfb4aee31b6c21051.data000066400000000000000000000000171453140004500175530ustar00rootroot00000000000000Contents: f.txtclient/testdata/php-tuf-fixtures/TUFTestFixture3LevelDelegation/server/targets/c.txt000066400000000000000000000000171453140004500312470ustar00rootroot00000000000000Contents: c.txtclient/testdata/php-tuf-fixtures/TUFTestFixture3LevelDelegation/server/targets/d.txt000066400000000000000000000000171453140004500312500ustar00rootroot00000000000000Contents: d.txt924df500fb662dc5b109d30bf3b42e5a67a0c6ec.paxheader00006660000000000000000000000337145314000450020631xustar00rootroot00000000000000223 path=client/testdata/php-tuf-fixtures/TUFTestFixture3LevelDelegation/server/targets/ddb5fb256a368d778b5fdd03d497ad79944c766245f3cccfc8b098b14c488ec424a68b86a6a2add36db4ef0f0214f15dbe0d63fbc5ca7a9619fb4c39544d78a9.c.txt 924df500fb662dc5b109d30bf3b42e5a67a0c6ec.data000066400000000000000000000000171453140004500174620ustar00rootroot00000000000000Contents: c.txtclient/testdata/php-tuf-fixtures/TUFTestFixture3LevelDelegation/server/targets/e.txt000066400000000000000000000000171453140004500312510ustar00rootroot00000000000000Contents: e.txtclient/testdata/php-tuf-fixtures/TUFTestFixture3LevelDelegation/server/targets/f.txt000066400000000000000000000000171453140004500312520ustar00rootroot00000000000000Contents: f.txtf0b07df15d4a3e98ffc6ee6a4c00d04623b0171de458d94dbec4abb7646bc60e.f.txt000066400000000000000000000000171453140004500424160ustar00rootroot00000000000000client/testdata/php-tuf-fixtures/TUFTestFixture3LevelDelegation/server/targetsContents: f.txt3c405619e1dc61b668ebcf0c501dde781d478f42.paxheader00006660000000000000000000000337145314000450020513xustar00rootroot00000000000000223 path=client/testdata/php-tuf-fixtures/TUFTestFixture3LevelDelegation/server/targets/f4631ef7ea7b015d7b88e411842fafeb78a72f0181bec72ea9754604ede74ea0e491bf8411659aabc96304fc764d0131ce49ba86066ab5f7b7480dde719e0bfd.a.txt 3c405619e1dc61b668ebcf0c501dde781d478f42.data000066400000000000000000000000171453140004500173440ustar00rootroot00000000000000Contents: a.txt976e178d20fe4826f20ed007c8a03a92002e3c60.paxheader00006660000000000000000000000337145314000450020257xustar00rootroot00000000000000223 path=client/testdata/php-tuf-fixtures/TUFTestFixture3LevelDelegation/server/targets/f4cc9ce5c73b37e2a6707af7a0ea614ea5fa428bd2509e3af4528a5d330ce98a09c4dd98c859ad9b27b8aba24e1eacbf1af8393fdbfed899cecb995c87a11e3c.b.txt 976e178d20fe4826f20ed007c8a03a92002e3c60.data000066400000000000000000000000171453140004500171100ustar00rootroot00000000000000Contents: b.txt7bece3933084f66dc7e4ba98eaca5053a1581576.paxheader00006660000000000000000000000337145314000450020523xustar00rootroot00000000000000223 path=client/testdata/php-tuf-fixtures/TUFTestFixture3LevelDelegation/server/targets/ffca8c347335e5e019deba8a15212297fe25afc734ac06fcd01b4d9dae12b16d750d7a44bdafcada254148990aa6611bc9ed2f2841da2c0dd70bb870be7275f6.e.txt 7bece3933084f66dc7e4ba98eaca5053a1581576.data000066400000000000000000000000171453140004500173540ustar00rootroot00000000000000Contents: e.txtclient/testdata/php-tuf-fixtures/TUFTestFixture3LevelDelegation/server/targets/targets.txt000066400000000000000000000000251453140004500324750ustar00rootroot00000000000000Contents: targets.txtclient/testdata/tools/000077500000000000000000000000001453140004500153015ustar00rootroot00000000000000client/testdata/tools/gen-keys.go000066400000000000000000000017141453140004500173550ustar00rootroot00000000000000// This helper files generates a bunch of ed25519 keys to be used by the test // runners. This is done such that the signatures stay stable when the metadata // is regenerated. package main import ( "encoding/json" "fmt" "os" "time" "github.com/theupdateframework/go-tuf/data" ) var expirationDate = time.Date(2100, time.January, 1, 0, 0, 0, 0, time.UTC) func main() { rolenames := []string{ "root", "snapshot", "targets", "timestamp", } roles := make(map[string][][]*data.PrivateKey) for _, name := range rolenames { keys := [][]*data.PrivateKey{} for i := 0; i < 2; i++ { signer, err := keys.GenerateEd25519Key() assertNoError(err) keys = append(keys, []*data.PrivateKey{signer}) } roles[name] = keys } s, err := json.MarshalIndent(&roles, "", " ") assertNoError(err) os.WriteFile("keys.json", []byte(s), 0644) } func assertNoError(err error) { if err != nil { panic(fmt.Sprintf("assertion failed: %s", err)) } } client/testdata/tools/linkify-metadata.go000066400000000000000000000042321453140004500210540ustar00rootroot00000000000000// This helper command identifies duplicated metadata across multiple test // stages, and replaces them with symlinks in order to make changes to them // easier to read. package main import ( "crypto/sha256" "fmt" "log" "os" "path/filepath" ) func main() { for _, consistentSnapshot := range []bool{false, true} { err := linkifyDir(fmt.Sprintf("consistent-snapshot-%t", consistentSnapshot)) if err != nil { log.Fatal(err) } } } func linkifyDir(rootDir string) error { stepDirs, err := readStepDirs(rootDir) if err != nil { return err } oldDir := stepDirs[0] oldHashes := computeHashes(oldDir) for _, dir := range stepDirs[1:] { log.Printf("checking: %s", dir) hashes := computeHashes(dir) for path, hash := range hashes { if oldHashes[path] == hash { newPath := filepath.Join(dir, path) oldPath := filepath.Join(oldDir, path) if err = linkifyPath(oldPath, newPath); err != nil { return err } } } oldDir = dir oldHashes = hashes log.Printf("-----") } return nil } func readStepDirs(rootDir string) ([]string, error) { dirEntries, err := os.ReadDir(rootDir) if err != nil { return []string{}, err } // We only want to consider linkifying directories. var dirs []string for _, dirEntry := range dirEntries { if dirEntry.IsDir() { dirs = append(dirs, filepath.Join(rootDir, dirEntry.Name())) } } return dirs, nil } func computeHashes(dir string) map[string][32]byte { hashes := make(map[string][32]byte) err := filepath.Walk(dir, func(path string, info os.FileInfo, err error) error { if info.IsDir() || !info.Mode().IsRegular() { return nil } bytes, err := os.ReadFile(path) if err != nil { return err } hashes[path[len(dir)+1:]] = sha256.Sum256(bytes) return nil }) if err != nil { log.Fatalf("failed to linkify: %s", err) } return hashes } func linkifyPath(oldPath string, newPath string) error { p, err := filepath.Rel(filepath.Dir(newPath), oldPath) if err != nil { return err } log.Printf("symlinking %s to %s", newPath, p) if err = os.Remove(newPath); err != nil { return err } if err = os.Symlink(p, newPath); err != nil { return err } return nil } cmd/000077500000000000000000000000001453140004500116155ustar00rootroot00000000000000cmd/tuf-client/000077500000000000000000000000001453140004500136675ustar00rootroot00000000000000cmd/tuf-client/README.md000066400000000000000000000022221453140004500151440ustar00rootroot00000000000000# go-tuf client CLI ## Install ``` go get github.com/theupdateframework/go-tuf/cmd/tuf-client ``` ## Usage The CLI provides three commands: * `tuf-client init` - initialize a local file store using root keys (e.g. from the output of `tuf root-keys`) * `tuf-client list` - list available targets and their file sizes * `tuf-client get` - get a target file and write to STDOUT All commands require the base URL of the TUF repository as the first non-flag argument, and accept an optional `--store` flag which is the path to the local storage. Run `tuf-client help` from the command line to get more detailed usage information. ## Examples ``` # init $ tuf-client init https://example.com/path/to/repo # init with a custom store path $ tuf-client init --store /tmp/tuf.db https://example.com/path/to/repo # list available targets $ tuf-client list https://example.com/path/to/repo PATH SIZE /foo.txt 1.6KB /bar.txt 336B /baz.txt 1.5KB # get a target $ tuf-client get https://example.com/path/to/repo /foo.txt the contents of foo.txt # the prefixed / is optional $ tuf-client get https://example.com/path/to/repo foo.txt the contents of foo.txt ``` cmd/tuf-client/get.go000066400000000000000000000017211453140004500147760ustar00rootroot00000000000000package main import ( "io" "os" "github.com/flynn/go-docopt" tuf "github.com/theupdateframework/go-tuf/client" "github.com/theupdateframework/go-tuf/util" ) func init() { register("get", cmdGet, ` usage: tuf-client get [-s|--store=] Options: -s The path to the local file store [default: tuf.db] Get a target from the repository. `) } type tmpFile struct { *os.File } func (t *tmpFile) Delete() error { t.Close() return os.Remove(t.Name()) } func cmdGet(args *docopt.Args, client *tuf.Client) error { if _, err := client.Update(); err != nil { return err } target := util.NormalizeTarget(args.String[""]) file, err := os.CreateTemp("", "go-tuf") if err != nil { return err } tmp := tmpFile{file} if err := client.Download(target, &tmp); err != nil { return err } defer tmp.Delete() if _, err := tmp.Seek(0, io.SeekStart); err != nil { return err } _, err = io.Copy(os.Stdout, file) return err } cmd/tuf-client/init.go000066400000000000000000000013261453140004500151630ustar00rootroot00000000000000package main import ( "io" "os" "github.com/flynn/go-docopt" tuf "github.com/theupdateframework/go-tuf/client" ) func init() { register("init", cmdInit, ` usage: tuf-client init [-s|--store=] [] Options: -s The path to the local file store [default: tuf.db] Initialize the local file store with root metadata. `) } func cmdInit(args *docopt.Args, client *tuf.Client) error { file := args.String[""] var in io.Reader if file == "" || file == "-" { in = os.Stdin } else { var err error in, err = os.Open(file) if err != nil { return err } } bytes, err := io.ReadAll(in) if err != nil { return err } return client.Init(bytes) } cmd/tuf-client/list.go000066400000000000000000000014271453140004500151750ustar00rootroot00000000000000package main import ( "fmt" "os" "text/tabwriter" "github.com/dustin/go-humanize" "github.com/flynn/go-docopt" tuf "github.com/theupdateframework/go-tuf/client" ) func init() { register("list", cmdList, ` usage: tuf-client list [-s|--store=] Options: -s The path to the local file store [default: tuf.db] List available target files. `) } func cmdList(args *docopt.Args, client *tuf.Client) error { if _, err := client.Update(); err != nil { return err } targets, err := client.Targets() if err != nil { return err } w := tabwriter.NewWriter(os.Stdout, 1, 2, 2, ' ', 0) defer w.Flush() fmt.Fprintln(w, "PATH\tSIZE") for path, meta := range targets { fmt.Fprintf(w, "%s\t%s\n", path, humanize.Bytes(uint64(meta.Length))) } return nil } cmd/tuf-client/main.go000066400000000000000000000040771453140004500151520ustar00rootroot00000000000000package main import ( "fmt" "log" "os" docopt "github.com/flynn/go-docopt" tuf "github.com/theupdateframework/go-tuf/client" tuf_leveldbstore "github.com/theupdateframework/go-tuf/client/leveldbstore" ) func main() { log.SetFlags(0) usage := `usage: tuf-client [-h|--help] [...] Options: -h, --help Commands: help Show usage for a specific command init Initialize with root keys list List available target files get Get a target file See "tuf-client help " for more information on a specific command. ` args, _ := docopt.Parse(usage, nil, true, "", true) cmd := args.String[""] cmdArgs := args.All[""].([]string) if cmd == "help" { if len(cmdArgs) == 0 { // `tuf-client help` fmt.Fprint(os.Stdout, usage) return } else { // `tuf-client help ` cmd = cmdArgs[0] cmdArgs = []string{"--help"} } } if err := runCommand(cmd, cmdArgs); err != nil { log.Fatalln("ERROR:", err) } } type cmdFunc func(*docopt.Args, *tuf.Client) error type command struct { usage string f cmdFunc } var commands = make(map[string]*command) func register(name string, f cmdFunc, usage string) { commands[name] = &command{usage: usage, f: f} } func runCommand(name string, args []string) error { argv := make([]string, 1, 1+len(args)) argv[0] = name argv = append(argv, args...) cmd, ok := commands[name] if !ok { return fmt.Errorf("%s is not a tuf-client command. See 'tuf-client help'", name) } parsedArgs, err := docopt.Parse(cmd.usage, argv, true, "", true) if err != nil { return err } client, err := tufClient(parsedArgs) if err != nil { return err } return cmd.f(parsedArgs, client) } func tufClient(args *docopt.Args) (*tuf.Client, error) { store, ok := args.String["--store"] if !ok { store = args.String["-s"] } local, err := tuf_leveldbstore.FileLocalStore(store) if err != nil { return nil, err } remote, err := tuf.HTTPRemoteStore(args.String[""], nil, nil) if err != nil { return nil, err } return tuf.NewClient(local, remote), nil } cmd/tuf/000077500000000000000000000000001453140004500124135ustar00rootroot00000000000000cmd/tuf/add.go000066400000000000000000000016411453140004500134740ustar00rootroot00000000000000package main import ( "encoding/json" "github.com/flynn/go-docopt" "github.com/theupdateframework/go-tuf" ) func init() { register("add", cmdAdd, ` usage: tuf add [--expires=] [--custom=] [...] Add target file(s). Alternatively, passphrases can be set via environment variables in the form of TUF_{{ROLE}}_PASSPHRASE Options: --expires= Set the targets metadata file to expire days from now. --custom= Set custom JSON data for the target(s). `) } func cmdAdd(args *docopt.Args, repo *tuf.Repo) error { var custom json.RawMessage if c := args.String["--custom"]; c != "" { custom = json.RawMessage(c) } paths := args.All[""].([]string) if arg := args.String["--expires"]; arg != "" { expires, err := parseExpires(arg) if err != nil { return err } return repo.AddTargetsWithExpires(paths, custom, expires) } return repo.AddTargets(paths, custom) } cmd/tuf/add_key.go000066400000000000000000000035171453140004500143500ustar00rootroot00000000000000package main import ( "fmt" "os" "time" "github.com/flynn/go-docopt" "github.com/theupdateframework/go-tuf" "github.com/theupdateframework/go-tuf/data" ) func init() { register("add-key", cmdAddKey, ` usage: tuf add-key [--scheme=] [--expires=] [--public-key=] Adds a new signing key for the given role. The root metadata file will be staged with the addition of the key's ID to the role's list of key IDs. Options: --public-key= The Path to the file containing value of the public key. If absent, will be read from stdin. --expires= Set the metadata file to expire days from now. --scheme= Set the key scheme to use [default: ed25519]. `) } func cmdAddKey(args *docopt.Args, repo *tuf.Repo) error { role := args.String[""] var keyids []string var keyScheme data.KeyScheme switch t := args.String["--scheme"]; t { case string(data.KeySchemeEd25519), string(data.KeySchemeECDSA_SHA2_P256), string(data.KeySchemeRSASSA_PSS_SHA256): keyScheme = data.KeyScheme(t) default: fmt.Fprintf(os.Stderr, "tuf: key schema %s not recognised\n", t) return nil } f := args.String["--public-key"] var publicValue string if f != "" { bytes, err := os.ReadFile(f) if err != nil { return err } publicValue = string(bytes) } else { var input string _, err := fmt.Scan(&input) if err != nil { return err } publicValue = input } var err error var expires time.Time if arg := args.String["--expires"]; arg != "" { expires, err = parseExpires(arg) if err != nil { return err } } else { expires = data.DefaultExpires(role) } keyids, err = repo.AddKeyWithSchemeAndExpires(role, expires, keyScheme, publicValue) if err != nil { return err } for _, id := range keyids { fmt.Fprintf(os.Stdout, "Add key with ID %s\n", id) } return nil } cmd/tuf/add_signatures.go000066400000000000000000000037021453140004500157400ustar00rootroot00000000000000package main import ( "encoding/base64" "encoding/json" "fmt" "os" "github.com/flynn/go-docopt" "github.com/theupdateframework/go-tuf" "github.com/theupdateframework/go-tuf/data" ) func init() { register("add-signatures", cmdAddSignature, ` usage: tuf add-signatures [--signatures ] [--format=] [--key-id=] Adds signatures (the output of "sign-payload") to the given role metadata file. If the signature does not verify, it will not be added. Options: --signatures= The path to the file containing the signatures to add. If not present, the contents are read from stdin --format= One of 'json', 'hex', or 'base64'. Defaults to 'json' --key-id= The key-id of the signature being added. Only required if the format is not 'json' `) } func cmdAddSignature(args *docopt.Args, repo *tuf.Repo) error { roleFilename := args.String[""] f := args.String["--signatures"] var sigBytes []byte var err error if f != "" { sigBytes, err = os.ReadFile(f) if err != nil { return err } } else { var input string _, err := fmt.Scan(&input) if err != nil { return err } sigBytes = []byte(input) } sigs := []data.Signature{} switch args.String["--format"] { case "base64": base64bytes, err := base64.StdEncoding.DecodeString(string(sigBytes)) if err != nil { return err } sigs = append(sigs, data.Signature{KeyID: args.String["--key-id"], Signature: base64bytes}) case "hex": hex := data.HexBytes{} if err = hex.FromString(sigBytes); err != nil { return err } sigs = append(sigs, data.Signature{KeyID: args.String["--key-id"], Signature: hex}) case "json": default: if err = json.Unmarshal(sigBytes, &sigs); err != nil { return err } } for _, sig := range sigs { if err = repo.AddOrUpdateSignature(roleFilename, sig); err != nil { return err } } fmt.Fprintln(os.Stderr, "tuf: added", len(sigs), "new signature(s)") return nil } cmd/tuf/change_passphrase.go000066400000000000000000000010561453140004500164220ustar00rootroot00000000000000package main import ( "github.com/flynn/go-docopt" "github.com/theupdateframework/go-tuf" ) func init() { register("change-passphrase", cmdChangePassphrase, ` usage: tuf change-passphrase Changes the passphrase for given role keys file. Alternatively, passphrases can be passed via environment variables in the form of TUF_{{ROLE}}_PASSPHRASE for existing ones and TUF_NEW_{{ROLE}}_PASSPHRASE for setting new ones. `) } func cmdChangePassphrase(args *docopt.Args, repo *tuf.Repo) error { return repo.ChangePassphrase(args.String[""]) } cmd/tuf/clean.go000066400000000000000000000006461453140004500140320ustar00rootroot00000000000000package main import ( "fmt" "os" "github.com/flynn/go-docopt" "github.com/theupdateframework/go-tuf" ) func init() { register("clean", cmdClean, ` usage: tuf clean Remove all staged metadata files. `) } func cmdClean(args *docopt.Args, repo *tuf.Repo) error { err := repo.Clean() if err == tuf.ErrNewRepository { fmt.Fprintln(os.Stderr, "tuf: refusing to clean new repository") return nil } return err } cmd/tuf/commit.go000066400000000000000000000004411453140004500142310ustar00rootroot00000000000000package main import ( "github.com/flynn/go-docopt" "github.com/theupdateframework/go-tuf" ) func init() { register("commit", cmdCommit, ` usage: tuf commit Commit staged files to the repository. `) } func cmdCommit(args *docopt.Args, repo *tuf.Repo) error { return repo.Commit() } cmd/tuf/gen_key.go000066400000000000000000000032141453140004500143630ustar00rootroot00000000000000package main import ( "fmt" "os" "time" "github.com/flynn/go-docopt" "github.com/theupdateframework/go-tuf" "github.com/theupdateframework/go-tuf/data" ) func init() { register("gen-key", cmdGenKey, ` usage: tuf gen-key [--expires=] [--scheme=] Generate a new signing key for the given role. The key will be serialized to JSON and written to the "keys" directory with filename pattern "ROLE-KEYID.json". The root metadata file will also be staged with the addition of the key's ID to the role's list of key IDs. Alternatively, passphrases can be set via environment variables in the form of TUF_{{ROLE}}_PASSPHRASE Options: --expires= Set the root metadata file to expire days from now. --scheme= Set the key scheme to use [default: ed25519]. `) } func cmdGenKey(args *docopt.Args, repo *tuf.Repo) error { role := args.String[""] var keyids []string keyScheme := data.KeySchemeEd25519 switch t := args.String["--scheme"]; t { case string(data.KeySchemeEd25519), string(data.KeySchemeECDSA_SHA2_P256), string(data.KeySchemeRSASSA_PSS_SHA256): keyScheme = data.KeyScheme(t) default: fmt.Fprint(os.Stderr, "Using default key scheme", keyScheme) } var err error var expires time.Time if arg := args.String["--expires"]; arg != "" { expires, err = parseExpires(arg) if err != nil { return err } } else { expires = data.DefaultExpires(role) } keyids, err = repo.GenKeyWithSchemeAndExpires(role, expires, keyScheme) if err != nil { return err } for _, id := range keyids { fmt.Fprintf(os.Stdout, "Generated %s %s key with ID %s", role, keyScheme, id) } return nil } cmd/tuf/get_threshold.go000066400000000000000000000007711453140004500156020ustar00rootroot00000000000000package main import ( "fmt" "os" "github.com/flynn/go-docopt" "github.com/theupdateframework/go-tuf" ) func init() { register("get-threshold", cmdGetThreshold, ` usage: tuf get-threshold Gets the threshold for a role. `) } func cmdGetThreshold(args *docopt.Args, repo *tuf.Repo) error { role := args.String[""] threshold, err := repo.GetThreshold(role) if err != nil { return err } fmt.Fprintf(os.Stdout, "The threshold for %s role is %d", role, threshold) return nil } cmd/tuf/init.go000066400000000000000000000011311453140004500137010ustar00rootroot00000000000000package main import ( "github.com/flynn/go-docopt" "github.com/theupdateframework/go-tuf" ) func init() { register("init", cmdInit, ` usage: tuf init [--consistent-snapshot=false] Initialize a new repository. This is only required if the repository should not generate consistent snapshots (i.e. by passing "--consistent-snapshot=false"). If consistent snapshots should be generated, the repository will be implicitly initialized to do so when generating keys. `) } func cmdInit(args *docopt.Args, repo *tuf.Repo) error { return repo.Init(args.String["--consistent-snapshot"] != "false") } cmd/tuf/main.go000066400000000000000000000116141453140004500136710ustar00rootroot00000000000000package main import ( "bytes" "errors" "fmt" "log" "os" "strconv" "strings" "syscall" "time" docopt "github.com/flynn/go-docopt" tuf "github.com/theupdateframework/go-tuf" "github.com/theupdateframework/go-tuf/util" "golang.org/x/term" ) func main() { log.SetFlags(0) usage := `usage: tuf [-h|--help] [-d|--dir=] [--insecure-plaintext] [...] Options: -h, --help -d The path to the repository (defaults to the current working directory) --insecure-plaintext Don't encrypt signing keys Commands: help Show usage for a specific command init Initialize a new repository add-key Adds a new signing key for a specific role gen-key Generate a new signing key for a specific metadata file revoke-key Revoke a signing key add Add target file(s) remove Remove a target file snapshot Update the snapshot metadata file timestamp Update the timestamp metadata file payload Output a role's metadata file for signing add-signatures Adds signatures generated offline sign Sign a role's metadata file sign-payload Sign a file from the "payload" command. status Check if a role's metadata has expired commit Commit staged files to the repository regenerate Recreate the targets metadata file [Not supported yet] set-threshold Sets the threshold for a role get-threshold Outputs the threshold for a role change-passphrase Changes the passphrase for given role keys file root-keys Output a JSON serialized array of root keys to STDOUT clean Remove all staged metadata files See "tuf help " for more information on a specific command ` args, _ := docopt.Parse(usage, nil, true, "", true) cmd := args.String[""] cmdArgs := args.All[""].([]string) if cmd == "help" { if len(cmdArgs) == 0 { // `tuf help` fmt.Fprint(os.Stdout, usage) return } else { // `tuf help ` cmd = cmdArgs[0] cmdArgs = []string{"--help"} } } dir, ok := args.String["-d"] if !ok { dir = args.String["--dir"] } if dir == "" { var err error dir, err = os.Getwd() if err != nil { log.Fatal(err) } } if err := runCommand(cmd, cmdArgs, dir, args.Bool["--insecure-plaintext"]); err != nil { log.Fatalln("ERROR:", err) } } type cmdFunc func(*docopt.Args, *tuf.Repo) error type command struct { usage string f cmdFunc } var commands = make(map[string]*command) func register(name string, f cmdFunc, usage string) { commands[name] = &command{usage: usage, f: f} } func runCommand(name string, args []string, dir string, insecure bool) error { argv := make([]string, 1, 1+len(args)) argv[0] = name argv = append(argv, args...) cmd, ok := commands[name] if !ok { return fmt.Errorf("%s is not a tuf command. See 'tuf help'", name) } parsedArgs, err := docopt.Parse(cmd.usage, argv, true, "", true) if err != nil { return err } var p util.PassphraseFunc if !insecure { p = getPassphrase } logger := log.New(os.Stdout, "", 0) storeOpts := tuf.StoreOpts{Logger: logger, PassFunc: p} repo, err := tuf.NewRepoWithOpts(tuf.FileSystemStoreWithOpts(dir, storeOpts), tuf.WithLogger(logger)) if err != nil { return err } return cmd.f(parsedArgs, repo) } func parseExpires(arg string) (time.Time, error) { days, err := strconv.Atoi(arg) if err != nil { return time.Time{}, fmt.Errorf("failed to parse --expires arg: %s", err) } return time.Now().AddDate(0, 0, days).UTC(), nil } func getPassphrase(role string, confirm bool, change bool) ([]byte, error) { // In case of change we need to prompt explicitly for a new passphrase // and not read it from the environment variable, if present if pass := os.Getenv(fmt.Sprintf("TUF_%s_PASSPHRASE", strings.ToUpper(role))); pass != "" && !change { return []byte(pass), nil } // Alter role string if we are prompting for a passphrase change if change { // Check if environment variable for new passphrase exist if new_pass := os.Getenv(fmt.Sprintf("TUF_NEW_%s_PASSPHRASE", strings.ToUpper(role))); new_pass != "" { // If so, just read the new passphrase from it and return return []byte(new_pass), nil } // No environment variable set, so proceed prompting for new passphrase role = fmt.Sprintf("new %s", role) } fmt.Fprintf(os.Stderr, "Enter %s keys passphrase: ", role) passphrase, err := term.ReadPassword(int(syscall.Stdin)) fmt.Fprintln(os.Stderr) if err != nil { return nil, err } if !confirm { return passphrase, nil } fmt.Fprintf(os.Stderr, "Repeat %s keys passphrase: ", role) confirmation, err := term.ReadPassword(int(syscall.Stdin)) fmt.Fprintln(os.Stderr) if err != nil { return nil, err } if !bytes.Equal(passphrase, confirmation) { return nil, errors.New("the entered passphrases do not match") } return passphrase, nil } cmd/tuf/payload.go000066400000000000000000000007231453140004500143750ustar00rootroot00000000000000package main import ( "fmt" "os" "github.com/flynn/go-docopt" "github.com/theupdateframework/go-tuf" ) func init() { register("payload", cmdPayload, ` usage: tuf payload Outputs the metadata file for a role in a ready-to-sign (canonicalized) format. `) } func cmdPayload(args *docopt.Args, repo *tuf.Repo) error { p, err := repo.Payload(args.String[""]) if err != nil { return err } fmt.Fprint(os.Stdout, string(p)) return nil } cmd/tuf/regenerate.go000066400000000000000000000010121453140004500150550ustar00rootroot00000000000000package main import ( "log" "github.com/flynn/go-docopt" "github.com/theupdateframework/go-tuf" ) func init() { register("regenerate", cmdRegenerate, ` usage: tuf regenerate [--consistent-snapshot=false] Recreate the targets metadata file. Important: Not supported yet Alternatively, passphrases can be set via environment variables in the form of TUF_{{ROLE}}_PASSPHRASE `) } func cmdRegenerate(args *docopt.Args, repo *tuf.Repo) error { // TODO: implement this log.Println("Not supported yet") return nil } cmd/tuf/remove.go000066400000000000000000000016521453140004500142430ustar00rootroot00000000000000package main import ( "errors" "github.com/flynn/go-docopt" "github.com/theupdateframework/go-tuf" ) func init() { register("remove", cmdRemove, ` usage: tuf remove [--expires=] [--all] [...] Remove target file(s). Alternatively, passphrases can be set via environment variables in the form of TUF_{{ROLE}}_PASSPHRASE Options: --all Remove all target files. --expires= Set the targets metadata file to expire days from now. `) } func cmdRemove(args *docopt.Args, repo *tuf.Repo) error { paths := args.All[""].([]string) if len(paths) == 0 && !args.Bool["--all"] { return errors.New("either specify some paths or set the --all flag to remove all targets") } if arg := args.String["--expires"]; arg != "" { expires, err := parseExpires(arg) if err != nil { return err } return repo.RemoveTargetsWithExpires(paths, expires) } return repo.RemoveTargets(paths) } cmd/tuf/revoke_key.go000066400000000000000000000014111453140004500151020ustar00rootroot00000000000000package main import ( "github.com/flynn/go-docopt" "github.com/theupdateframework/go-tuf" ) func init() { register("revoke-key", cmdRevokeKey, ` usage: tuf revoke-key [--expires=] Revoke a signing key The key will be removed from the root metadata file, but the key will remain in the "keys" directory if present. Options: --expires= Set the root metadata file to expire days from now. `) } func cmdRevokeKey(args *docopt.Args, repo *tuf.Repo) error { if arg := args.String["--expires"]; arg != "" { expires, err := parseExpires(arg) if err != nil { return err } return repo.RevokeKeyWithExpires(args.String[""], args.String[""], expires) } return repo.RevokeKey(args.String[""], args.String[""]) } cmd/tuf/root_keys.go000066400000000000000000000012661453140004500147650ustar00rootroot00000000000000package main import ( "encoding/json" "fmt" "os" "github.com/flynn/go-docopt" "github.com/theupdateframework/go-tuf" ) func init() { register("root-keys", cmdRootKeys, ` usage: tuf root-keys Outputs a JSON serialized array of root keys to STDOUT. The resulting JSON should be distributed to clients for performing initial updates. `) } func cmdRootKeys(args *docopt.Args, repo *tuf.Repo) error { keys, err := repo.RootKeys() if err != nil { return err } data, err := json.Marshal(keys) if err == nil { fmt.Fprintf(os.Stderr, "The resulting JSON should be distributed to clients for performing initial updates:\n\n") fmt.Fprintln(os.Stdout, string(data)) } return err } cmd/tuf/set_threshold.go000066400000000000000000000012161453140004500156110ustar00rootroot00000000000000package main import ( "fmt" "os" "strconv" "github.com/flynn/go-docopt" "github.com/theupdateframework/go-tuf" ) func init() { register("set-threshold", cmdSetThreshold, ` usage: tuf set-threshold Set the threshold for a role. `) } func cmdSetThreshold(args *docopt.Args, repo *tuf.Repo) error { role := args.String[""] thresholdStr := args.String[""] threshold, err := strconv.Atoi(thresholdStr) if err != nil { return err } if err := repo.SetThreshold(role, threshold); err != nil { return err } fmt.Fprintf(os.Stdout, "The threshold for %s role is now %d", role, threshold) return nil } cmd/tuf/sign.go000066400000000000000000000006331453140004500137040ustar00rootroot00000000000000package main import ( "github.com/flynn/go-docopt" "github.com/theupdateframework/go-tuf" ) func init() { register("sign", cmdSign, ` usage: tuf sign Sign a role's metadata file. Signs the given role's staged metadata file with all keys present in the 'keys' directory for that role. `) } func cmdSign(args *docopt.Args, repo *tuf.Repo) error { return repo.Sign(args.String[""]) } cmd/tuf/sign_payload.go000066400000000000000000000014361453140004500154170ustar00rootroot00000000000000package main import ( "encoding/json" "fmt" "os" "github.com/flynn/go-docopt" tuf "github.com/theupdateframework/go-tuf" ) func init() { register("sign-payload", cmdSignPayload, ` usage: tuf sign-payload --role= Sign a file (outside of the TUF repo) using keys for the given role (from the TUF repo). Typically, path will be the output of "tuf payload". `) } func cmdSignPayload(args *docopt.Args, repo *tuf.Repo) error { payload, err := os.ReadFile(args.String[""]) if err != nil { return err } signatures, err := repo.SignRaw(args.String["--role"], payload) if err != nil { return err } fmt.Fprintln(os.Stderr, "tuf: signed") bytes, err := json.Marshal(signatures) if err != nil { return err } fmt.Fprint(os.Stdout, string(bytes)) return nil } cmd/tuf/snapshot.go000066400000000000000000000012471453140004500146050ustar00rootroot00000000000000package main import ( "github.com/flynn/go-docopt" "github.com/theupdateframework/go-tuf" ) func init() { register("snapshot", cmdSnapshot, ` usage: tuf snapshot [--expires=] Update the snapshot metadata file. Alternatively, passphrases can be set via environment variables in the form of TUF_{{ROLE}}_PASSPHRASE Options: --expires= Set the snapshot metadata file to expire days from now. `) } func cmdSnapshot(args *docopt.Args, repo *tuf.Repo) error { if arg := args.String["--expires"]; arg != "" { expires, err := parseExpires(arg) if err != nil { return err } return repo.SnapshotWithExpires(expires) } return repo.Snapshot() } cmd/tuf/status.go000066400000000000000000000022021453140004500142610ustar00rootroot00000000000000package main import ( "fmt" "time" "github.com/flynn/go-docopt" "github.com/theupdateframework/go-tuf" ) func init() { register("status", cmdStatus, ` usage: tuf status --valid-at= Check if the role's metadata will be expired on the given date. The command's exit status will be 1 if the role has expired, 0 otherwise. Example: # See if timestamp metadata is expiring in the next hour: tuf status --valid-at "$(date -d '+1 hour')" timestamp || echo "Time to refresh" Options: --valid-at= Must be in one of the formats: * RFC3339 - 2006-01-02T15:04:05Z07:00 * RFC822 - 02 Jan 06 15:04 MST * UnixDate - Mon Jan _2 15:04:05 MST 2006 `) } func cmdStatus(args *docopt.Args, repo *tuf.Repo) error { role := args.String[""] validAtStr := args.String["--valid-at"] formats := []string{ time.RFC3339, time.RFC822, time.UnixDate, } for _, fmt := range formats { validAt, err := time.Parse(fmt, validAtStr) if err == nil { return repo.CheckRoleUnexpired(role, validAt) } } return fmt.Errorf("failed to parse --valid-at arg") } cmd/tuf/timestamp.go000066400000000000000000000012571453140004500147520ustar00rootroot00000000000000package main import ( "github.com/flynn/go-docopt" "github.com/theupdateframework/go-tuf" ) func init() { register("timestamp", cmdTimestamp, ` usage: tuf timestamp [--expires=] Update the timestamp metadata file. Alternatively, passphrases can be set via environment variables in the form of TUF_{{ROLE}}_PASSPHRASE Options: --expires= Set the timestamp metadata file to expire days from now. `) } func cmdTimestamp(args *docopt.Args, repo *tuf.Repo) error { if arg := args.String["--expires"]; arg != "" { expires, err := parseExpires(arg) if err != nil { return err } return repo.TimestampWithExpires(expires) } return repo.Timestamp() } data/000077500000000000000000000000001453140004500117635ustar00rootroot00000000000000data/hex_bytes.go000066400000000000000000000022221453140004500143020ustar00rootroot00000000000000package data import ( "crypto/sha256" "encoding/hex" "errors" ) type HexBytes []byte func (b *HexBytes) UnmarshalJSON(data []byte) error { if len(data) < 2 || len(data)%2 != 0 || data[0] != '"' || data[len(data)-1] != '"' { return errors.New("tuf: invalid JSON hex bytes") } res := make([]byte, hex.DecodedLen(len(data)-2)) _, err := hex.Decode(res, data[1:len(data)-1]) if err != nil { return err } *b = res return nil } func (b *HexBytes) FromString(data []byte) error { res := make([]byte, hex.DecodedLen(len(data))) _, err := hex.Decode(res, data) if err != nil { return err } *b = res return nil } func (b HexBytes) MarshalJSON() ([]byte, error) { res := make([]byte, hex.EncodedLen(len(b))+2) res[0] = '"' res[len(res)-1] = '"' hex.Encode(res[1:], b) return res, nil } func (b HexBytes) String() string { return hex.EncodeToString(b) } // 4.5. File formats: targets.json and delegated target roles: // ...each target path, when hashed with the SHA-256 hash function to produce // a 64-byte hexadecimal digest (HEX_DIGEST)... func PathHexDigest(s string) string { b := sha256.Sum256([]byte(s)) return hex.EncodeToString(b[:]) } data/hex_bytes_test.go000066400000000000000000000016131453140004500153440ustar00rootroot00000000000000package data import ( "encoding/json" "testing" . "gopkg.in/check.v1" ) // Hook up gocheck into the "go test" runner. func Test(t *testing.T) { TestingT(t) } type HexBytesSuite struct{} var _ = Suite(&HexBytesSuite{}) func (HexBytesSuite) TestUnmarshalJSON(c *C) { var data HexBytes err := json.Unmarshal([]byte(`"666f6f"`), &data) c.Assert(err, IsNil) c.Assert(string(data), Equals, "foo") } func (HexBytesSuite) TestUnmarshalJSONError(c *C) { var data HexBytes // uneven length err := json.Unmarshal([]byte(`"a"`), &data) c.Assert(err, Not(IsNil)) // invalid hex err = json.Unmarshal([]byte(`"zz"`), &data) c.Assert(err, Not(IsNil)) // wrong type err = json.Unmarshal([]byte("6"), &data) c.Assert(err, Not(IsNil)) } func (HexBytesSuite) TestMarshalJSON(c *C) { data, err := json.Marshal(HexBytes("foo")) c.Assert(err, IsNil) c.Assert(data, DeepEquals, []byte(`"666f6f"`)) } data/types.go000066400000000000000000000217231453140004500134630ustar00rootroot00000000000000package data import ( "bytes" "crypto/sha256" "encoding/hex" "encoding/json" "errors" "fmt" "path" "strings" "sync" "time" "github.com/secure-systems-lab/go-securesystemslib/cjson" ) type KeyType string type KeyScheme string type HashAlgorithm string const ( KeyIDLength = sha256.Size * 2 KeyTypeEd25519 KeyType = "ed25519" // From version 1.0.32, the reference implementation defines 'ecdsa', // not 'ecdsa-sha2-nistp256' for NIST P-256 curves. KeyTypeECDSA_SHA2_P256 KeyType = "ecdsa" KeyTypeECDSA_SHA2_P256_OLD_FMT KeyType = "ecdsa-sha2-nistp256" KeyTypeRSASSA_PSS_SHA256 KeyType = "rsa" KeySchemeEd25519 KeyScheme = "ed25519" KeySchemeECDSA_SHA2_P256 KeyScheme = "ecdsa-sha2-nistp256" KeySchemeRSASSA_PSS_SHA256 KeyScheme = "rsassa-pss-sha256" HashAlgorithmSHA256 HashAlgorithm = "sha256" HashAlgorithmSHA512 HashAlgorithm = "sha512" ) var ( HashAlgorithms = []HashAlgorithm{HashAlgorithmSHA256, HashAlgorithmSHA512} ErrPathsAndPathHashesSet = errors.New("tuf: failed validation of delegated target: paths and path_hash_prefixes are both set") ) type Signed struct { Signed json.RawMessage `json:"signed"` Signatures []Signature `json:"signatures"` } type Signature struct { KeyID string `json:"keyid"` Signature HexBytes `json:"sig"` } type PublicKey struct { Type KeyType `json:"keytype"` Scheme KeyScheme `json:"scheme"` Algorithms []HashAlgorithm `json:"keyid_hash_algorithms,omitempty"` Value json.RawMessage `json:"keyval"` ids []string idOnce sync.Once } type PrivateKey struct { Type KeyType `json:"keytype"` Scheme KeyScheme `json:"scheme,omitempty"` Algorithms []HashAlgorithm `json:"keyid_hash_algorithms,omitempty"` Value json.RawMessage `json:"keyval"` } func (k *PublicKey) IDs() []string { k.idOnce.Do(func() { data, err := cjson.EncodeCanonical(k) if err != nil { panic(fmt.Errorf("tuf: error creating key ID: %w", err)) } digest := sha256.Sum256(data) k.ids = []string{hex.EncodeToString(digest[:])} }) return k.ids } func (k *PublicKey) ContainsID(id string) bool { for _, keyid := range k.IDs() { if id == keyid { return true } } return false } func DefaultExpires(role string) time.Time { var t time.Time switch role { case "root": t = time.Now().AddDate(1, 0, 0) case "snapshot": t = time.Now().AddDate(0, 0, 7) case "timestamp": t = time.Now().AddDate(0, 0, 1) default: // targets and delegated targets t = time.Now().AddDate(0, 3, 0) } return t.UTC().Round(time.Second) } type Root struct { Type string `json:"_type"` SpecVersion string `json:"spec_version"` Version int64 `json:"version"` Expires time.Time `json:"expires"` Keys map[string]*PublicKey `json:"keys"` Roles map[string]*Role `json:"roles"` Custom *json.RawMessage `json:"custom,omitempty"` ConsistentSnapshot bool `json:"consistent_snapshot"` } func NewRoot() *Root { return &Root{ Type: "root", SpecVersion: "1.0", Expires: DefaultExpires("root"), Keys: make(map[string]*PublicKey), Roles: make(map[string]*Role), ConsistentSnapshot: true, } } func (r *Root) AddKey(key *PublicKey) bool { changed := false for _, id := range key.IDs() { if _, ok := r.Keys[id]; !ok { changed = true r.Keys[id] = key } } return changed } type Role struct { KeyIDs []string `json:"keyids"` Threshold int `json:"threshold"` } func (r *Role) AddKeyIDs(ids []string) bool { roleIDs := make(map[string]struct{}) for _, id := range r.KeyIDs { roleIDs[id] = struct{}{} } changed := false for _, id := range ids { if _, ok := roleIDs[id]; !ok { changed = true r.KeyIDs = append(r.KeyIDs, id) } } return changed } type Files map[string]TargetFileMeta type Hashes map[string]HexBytes func (f Hashes) HashAlgorithms() []string { funcs := make([]string, 0, len(f)) for name := range f { funcs = append(funcs, name) } return funcs } type metapathFileMeta struct { Length int64 `json:"length,omitempty"` Hashes Hashes `json:"hashes,omitempty"` Version int64 `json:"version"` Custom *json.RawMessage `json:"custom,omitempty"` } // SnapshotFileMeta is the meta field of a snapshot // Note: Contains a `custom` field type SnapshotFileMeta metapathFileMeta type SnapshotFiles map[string]SnapshotFileMeta type Snapshot struct { Type string `json:"_type"` SpecVersion string `json:"spec_version"` Version int64 `json:"version"` Expires time.Time `json:"expires"` Meta SnapshotFiles `json:"meta"` Custom *json.RawMessage `json:"custom,omitempty"` } func NewSnapshot() *Snapshot { return &Snapshot{ Type: "snapshot", SpecVersion: "1.0", Expires: DefaultExpires("snapshot"), Meta: make(SnapshotFiles), } } type FileMeta struct { Length int64 `json:"length"` Hashes Hashes `json:"hashes"` } type TargetFiles map[string]TargetFileMeta type TargetFileMeta struct { FileMeta Custom *json.RawMessage `json:"custom,omitempty"` } func (f TargetFileMeta) HashAlgorithms() []string { return f.FileMeta.Hashes.HashAlgorithms() } type Targets struct { Type string `json:"_type"` SpecVersion string `json:"spec_version"` Version int64 `json:"version"` Expires time.Time `json:"expires"` Targets TargetFiles `json:"targets"` Delegations *Delegations `json:"delegations,omitempty"` Custom *json.RawMessage `json:"custom,omitempty"` } // Delegations represents the edges from a parent Targets role to one or more // delegated target roles. See spec v1.0.19 section 4.5. type Delegations struct { Keys map[string]*PublicKey `json:"keys"` Roles []DelegatedRole `json:"roles"` } // DelegatedRole describes a delegated role, including what paths it is // reponsible for. See spec v1.0.19 section 4.5. type DelegatedRole struct { Name string `json:"name"` KeyIDs []string `json:"keyids"` Threshold int `json:"threshold"` Terminating bool `json:"terminating"` PathHashPrefixes []string `json:"path_hash_prefixes,omitempty"` Paths []string `json:"paths"` } // MatchesPath evaluates whether the path patterns or path hash prefixes match // a given file. This determines whether a delegated role is responsible for // signing and verifying the file. func (d *DelegatedRole) MatchesPath(file string) (bool, error) { if err := d.validatePaths(); err != nil { return false, err } for _, pattern := range d.Paths { if matched, _ := path.Match(pattern, file); matched { return true, nil } } pathHash := PathHexDigest(file) for _, hashPrefix := range d.PathHashPrefixes { if strings.HasPrefix(pathHash, hashPrefix) { return true, nil } } return false, nil } // validatePaths enforces the spec // https://theupdateframework.github.io/specification/v1.0.19/index.html#file-formats-targets // 'role MUST specify only one of the "path_hash_prefixes" or "paths"' // Marshalling and unmarshalling JSON will fail and return // ErrPathsAndPathHashesSet if both fields are set and not empty. func (d *DelegatedRole) validatePaths() error { if len(d.PathHashPrefixes) > 0 && len(d.Paths) > 0 { return ErrPathsAndPathHashesSet } return nil } // MarshalJSON is called when writing the struct to JSON. We validate prior to // marshalling to ensure that an invalid delegated role can not be serialized // to JSON. func (d *DelegatedRole) MarshalJSON() ([]byte, error) { type delegatedRoleAlias DelegatedRole if err := d.validatePaths(); err != nil { return nil, err } return json.Marshal((*delegatedRoleAlias)(d)) } // UnmarshalJSON is called when reading the struct from JSON. We validate once // unmarshalled to ensure that an error is thrown if an invalid delegated role // is read. func (d *DelegatedRole) UnmarshalJSON(b []byte) error { type delegatedRoleAlias DelegatedRole // Prepare decoder dec := json.NewDecoder(bytes.NewReader(b)) // Unmarshal delegated role if err := dec.Decode((*delegatedRoleAlias)(d)); err != nil { return err } return d.validatePaths() } func NewTargets() *Targets { return &Targets{ Type: "targets", SpecVersion: "1.0", Expires: DefaultExpires("targets"), Targets: make(TargetFiles), } } type TimestampFileMeta metapathFileMeta type TimestampFiles map[string]TimestampFileMeta type Timestamp struct { Type string `json:"_type"` SpecVersion string `json:"spec_version"` Version int64 `json:"version"` Expires time.Time `json:"expires"` Meta TimestampFiles `json:"meta"` Custom *json.RawMessage `json:"custom,omitempty"` } func NewTimestamp() *Timestamp { return &Timestamp{ Type: "timestamp", SpecVersion: "1.0", Expires: DefaultExpires("timestamp"), Meta: make(TimestampFiles), } } data/types_test.go000066400000000000000000000200371453140004500145170ustar00rootroot00000000000000package data import ( "encoding/json" "testing" "github.com/secure-systems-lab/go-securesystemslib/cjson" "github.com/stretchr/testify/assert" . "gopkg.in/check.v1" ) const ( // This public key is from the TUF specs: // // https://github.com/theupdateframework/specification // public = `"72378e5bc588793e58f81c8533da64a2e8f1565c1fcc7f253496394ffc52542c"` keyid10 = "1bf1c6e3cdd3d3a8420b19199e27511999850f4b376c4547b2f32fba7e80fca3" keyid10algos = "506a349b85945d0d99c7289c3f0f1f6c550218089d1d38a3f64824db31e827ac" ) type TypesSuite struct{} var _ = Suite(&TypesSuite{}) type ed25519Public struct { PublicKey HexBytes `json:"public"` } func (TypesSuite) TestKeyIDs(c *C) { var hexbytes HexBytes err := json.Unmarshal([]byte(public), &hexbytes) c.Assert(err, IsNil) keyValBytes, err := json.Marshal(ed25519Public{PublicKey: hexbytes}) c.Assert(err, IsNil) key := PublicKey{ Type: KeyTypeEd25519, Scheme: KeySchemeEd25519, Value: keyValBytes, } c.Assert(key.IDs(), DeepEquals, []string{keyid10}) key = PublicKey{ Type: KeyTypeEd25519, Scheme: KeySchemeEd25519, Algorithms: HashAlgorithms, Value: keyValBytes, } c.Assert(key.IDs(), DeepEquals, []string{keyid10algos}) } func (TypesSuite) TestRootAddKey(c *C) { var hexbytes HexBytes err := json.Unmarshal([]byte(public), &hexbytes) c.Assert(err, IsNil) keyValBytes, err := json.Marshal(ed25519Public{PublicKey: hexbytes}) c.Assert(err, IsNil) key := &PublicKey{ Type: KeyTypeEd25519, Scheme: KeySchemeEd25519, Value: keyValBytes, } root := NewRoot() c.Assert(root.AddKey(key), Equals, true) c.Assert(root.AddKey(key), Equals, false) } func (TypesSuite) TestRoleAddKeyIDs(c *C) { var hexbytes HexBytes err := json.Unmarshal([]byte(public), &hexbytes) c.Assert(err, IsNil) keyValBytes, err := json.Marshal(ed25519Public{PublicKey: hexbytes}) c.Assert(err, IsNil) key := &PublicKey{ Type: KeyTypeEd25519, Scheme: KeySchemeEd25519, Value: keyValBytes, } role := &Role{} c.Assert(role.KeyIDs, HasLen, 0) c.Assert(role.AddKeyIDs(key.IDs()), Equals, true) c.Assert(role.KeyIDs, DeepEquals, []string{keyid10}) // Adding the key again doesn't modify the array. c.Assert(role.AddKeyIDs(key.IDs()), Equals, false) c.Assert(role.KeyIDs, DeepEquals, []string{keyid10}) // Add another key. key = &PublicKey{ Type: KeyTypeEd25519, Scheme: KeySchemeEd25519, Algorithms: HashAlgorithms, Value: keyValBytes, } // Adding the key again doesn't modify the array. c.Assert(role.AddKeyIDs(key.IDs()), Equals, true) c.Assert(role.KeyIDs, DeepEquals, []string{keyid10, keyid10algos}) } func TestDelegatedRolePathMatch(t *testing.T) { var tts = []struct { testName string pathPatterns []string pathHashPrefixes []string file string shouldMatch bool }{ { testName: "no path", file: "licence.txt", }, { testName: "match path *", pathPatterns: []string{"null", "targets/*.tgz"}, file: "targets/foo.tgz", shouldMatch: true, }, { testName: "does not match path *", pathPatterns: []string{"null", "targets/*.tgz"}, file: "targets/foo.txt", shouldMatch: false, }, { testName: "match path ?", pathPatterns: []string{"foo-version-?.tgz"}, file: "foo-version-a.tgz", shouldMatch: true, }, { testName: "does not match ?", pathPatterns: []string{"foo-version-?.tgz"}, file: "foo-version-alpha.tgz", shouldMatch: false, }, // picked from https://github.com/theupdateframework/tuf/blob/30ba6e9f9ab25e0370e29ce574dada2d8809afa0/tests/test_updater.py#L1726-L1734 { testName: "match hash prefix", pathHashPrefixes: []string{"badd", "8baf"}, file: "/file3.txt", shouldMatch: true, }, { testName: "does not match hash prefix", pathHashPrefixes: []string{"badd"}, file: "/file3.txt", shouldMatch: false, }, { testName: "hash prefix first char", pathHashPrefixes: []string{"2"}, file: "/a/b/c/file_d.txt", shouldMatch: true, }, { testName: "full hash prefix", pathHashPrefixes: []string{"34c85d1ee84f61f10d7dc633472a49096ed87f8f764bd597831eac371f40ac39"}, file: "/e/f/g.txt", shouldMatch: true, }, } for _, tt := range tts { t.Run(tt.testName, func(t *testing.T) { d := DelegatedRole{ Paths: tt.pathPatterns, PathHashPrefixes: tt.pathHashPrefixes, } assert.NoError(t, d.validatePaths()) matchesPath, err := d.MatchesPath(tt.file) assert.NoError(t, err) assert.Equal(t, tt.shouldMatch, matchesPath) }) } } func TestDelegatedRoleJSON(t *testing.T) { var tts = []struct { testName string d *DelegatedRole rawCJSON string }{{ testName: "all fields with hashes", d: &DelegatedRole{ Name: "n1", KeyIDs: []string{"k1"}, Threshold: 5, Terminating: true, PathHashPrefixes: []string{"8f"}, }, rawCJSON: `{"keyids":["k1"],"name":"n1","path_hash_prefixes":["8f"],"paths":null,"terminating":true,"threshold":5}`, }, { testName: "paths only", d: &DelegatedRole{ Name: "n2", KeyIDs: []string{"k1", "k3"}, Threshold: 12, Paths: []string{"*.txt"}, }, rawCJSON: `{"keyids":["k1","k3"],"name":"n2","paths":["*.txt"],"terminating":false,"threshold":12}`, }, { testName: "default", d: &DelegatedRole{}, rawCJSON: `{"keyids":null,"name":"","paths":null,"terminating":false,"threshold":0}`, }, } for _, tt := range tts { t.Run(tt.testName, func(t *testing.T) { b, err := cjson.EncodeCanonical(tt.d) assert.NoError(t, err) assert.Equal(t, tt.rawCJSON, string(b)) newD := &DelegatedRole{} err = json.Unmarshal(b, newD) assert.NoError(t, err) assert.Equal(t, tt.d, newD) }) } } func TestDelegatedRoleUnmarshalErr(t *testing.T) { targetsWithBothMatchers := []byte(`{"keyids":null,"name":"","paths":["*.txt"],"path_hash_prefixes":["8f"],"terminating":false,"threshold":0}`) var d DelegatedRole assert.Equal(t, ErrPathsAndPathHashesSet, json.Unmarshal(targetsWithBothMatchers, &d)) // test for type errors err := json.Unmarshal([]byte(`{"keyids":"a"}`), &d) assert.Equal(t, "keyids", err.(*json.UnmarshalTypeError).Field) } func TestCustomField(t *testing.T) { testCustomJSON := json.RawMessage([]byte(`{"test":true}`)) root := Root{ Type: "root", SpecVersion: "1.0", Keys: make(map[string]*PublicKey), Roles: make(map[string]*Role), ConsistentSnapshot: true, Custom: &testCustomJSON, } rootJSON, err := json.Marshal(&root) assert.NoError(t, err) assert.Equal(t, []byte("{\"_type\":\"root\",\"spec_version\":\"1.0\",\"version\":0,\"expires\":\"0001-01-01T00:00:00Z\",\"keys\":{},\"roles\":{},\"custom\":{\"test\":true},\"consistent_snapshot\":true}"), rootJSON) targets := Targets{ Type: "targets", SpecVersion: "1.0", Targets: make(TargetFiles), Custom: &testCustomJSON, } targetsJSON, err := json.Marshal(&targets) assert.NoError(t, err) assert.Equal(t, []byte("{\"_type\":\"targets\",\"spec_version\":\"1.0\",\"version\":0,\"expires\":\"0001-01-01T00:00:00Z\",\"targets\":{},\"custom\":{\"test\":true}}"), targetsJSON) snapshot := Snapshot{ Type: "snapshot", SpecVersion: "1.0", Meta: make(SnapshotFiles), Custom: &testCustomJSON, } snapshotJSON, err := json.Marshal(&snapshot) assert.NoError(t, err) assert.Equal(t, []byte("{\"_type\":\"snapshot\",\"spec_version\":\"1.0\",\"version\":0,\"expires\":\"0001-01-01T00:00:00Z\",\"meta\":{},\"custom\":{\"test\":true}}"), snapshotJSON) timestamp := Timestamp{ Type: "timestamp", SpecVersion: "1.0", Meta: make(TimestampFiles), Custom: &testCustomJSON, } timestampJSON, err := json.Marshal(×tamp) assert.NoError(t, err) assert.Equal(t, []byte("{\"_type\":\"timestamp\",\"spec_version\":\"1.0\",\"version\":0,\"expires\":\"0001-01-01T00:00:00Z\",\"meta\":{},\"custom\":{\"test\":true}}"), timestampJSON) } docs/000077500000000000000000000000001453140004500120025ustar00rootroot00000000000000docs/ALUMNI000066400000000000000000000003341453140004500127120ustar00rootroot00000000000000Christian Rebischke (github: shibumi) Erick Tryzelaar (github: erickt) Jonathan Rudenberg (github: titanous) Lewis Marshall (github: lmars)docs/CODE_OF_CONDUCT.md000066400000000000000000000002561453140004500146040ustar00rootroot00000000000000## The Update Framework Community Code of Conduct The Update Framework follows the [CNCF Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) docs/CONTRIBUTING.md000066400000000000000000000074151453140004500142420ustar00rootroot00000000000000# Contributing Guide We welcome and encourage community contributions to go-tuf. Please familiarize yourself with these Contribution Guidelines before contributing. There are many ways to help go-tuf besides contributing code: - Fix bugs or file issues. - Provide feedback on the CLI experience or suggest feature enhancements. - Improve documentation. Please follow the [code of conduct](CODE_OF_CONDUCT.md) when contributing to this project. ## Contributing Code Unless you are fixing a known bug, we strongly recommend discussing it with the community via a GitHub issue or Slack (see [Communication](#communication) below for details) before getting started to ensure that your work is consistent with TUF's specification. All contributions are made via pull request. All patches from all contributors get reviewed. See the [Pull Request procedure](#pull-request-procedure). ## Pull Request Procedure To make a pull request, you will need a GitHub account. See GitHub's documentation on [forking](https://help.github.com/articles/fork-a-repo) and [pull requests](https://help.github.com/articles/using-pull-requests). Pull requests should be targeted at the `master` branch. Before creating a pull request, go through this checklist: 1. Create a feature branch off of `master` so that changes do not get mixed up. 2. If your PR adds new code, it should include tests covering the new code. If your PR fixes a bug, it should include a regression test. 3. PRs that change user-facing behavior or the command-line interface must have associated documentation. 4. All code comments and documentation are expected to have proper English grammar and punctuation. 5. [Rebase](http://git-scm.com/book/en/Git-Branching-Rebasing) your local changes against the `master` branch. 6. Run the full project test suite with the `go test ./...` command and confirm that it passes (see [TESTING.md](TESTING.md) for details). 7. Run `go fmt ./...`. 8. You must agree to the [Developer Certificate of Origin](https://developercertificate.org/) for your contributions; use `git commit -s` ([detailed information here](https://wiki.linuxfoundation.org/dco)). When creating a PR: 1. Your PR title should be descriptive, and follow the [Conventional Commits](https://www.conventionalcommits.org/en/v1.0.0/) specification (start with `fix:`, `feat:`, or similar). 2. Your PR commit message will be used as the commit message when your PR is merged. Update this field if your PR diverges during review. 3. Your PR description should have details on what the PR does. If it fixes an existing issue, include a line like "Fixes #XXXX". When all of the tests are passing, maintainer(s) will be assigned to review and merge the PR. If you're having trouble getting tests to pass, feel free to tag in [MAINTAINERS](MAINTAINERS) for help, or ask in Slack (see [Communication](#communication) below). ## Communication We use the [#tuf](https://cloud-native.slack.com/archives/C8NMD3QJ3) and [#go-tuf](https://cloud-native.slack.com/archives/C02D577GX54) channel on [CNCF Slack](https://slack.cncf.io/). You are welcome to drop in and ask questions, discuss bugs, etc. You might also be interested in the TUF community beyond go-tuf; good places to start include: - [TUF mailing list](https://groups.google.com/g/theupdateframework) - TUF community meetings (monthly; join the mailing list or watch the Slack channel to see invitations) ## Pull Request Review Policy * Anyone is welcome to review any PR, whether they are a maintainer or not! * Maintainers should aim to turn around reviews within five business days; feel free to ping, or tag in specific maintainers if a PR is taking longer than that. * See [MAINTAINERS](MAINTAINERS) for the current list of maintainers. Maintainers should look in [MAINTAINERS.md](MAINTAINERS.md) for detailed quidelines. docs/MAINTAINERS000066400000000000000000000005641453140004500135040ustar00rootroot00000000000000Trishank Karthik Kuppusamy (github: trishankatdatadog) Joshua Lock (github: joshuagl) Marina Moore (github: mnm678) Zack Newman (github: znewman01) Radoslav Dimitrov (github: rdimitrov) Fredrik Skogman (github: kommendorkapten) docs/MAINTAINERS.md000066400000000000000000000067601453140004500141070ustar00rootroot00000000000000# go-tuf maintainer guidelines These are expectations for the [MAINTAINERS](MAINTAINERS) of go-tuf; if you are not able to meet these requirements, please remove yourself from the list of maintainers. ## Process Speedy communication makes contributors happy! - You should get notifications for all activity in this repository (using the "Watch" feature) and quickly triage each issue/PR as it comes in. - (non-draft) PRs should have assigned reviewers. - Important bugs and questions should have assignees. - If you are assigned to review a PR, please try to *acknowledge* it within one business day (no need if you are OOO). - Please review all PRs within five business days (of course, it's okay if you're OOO). - Please use the review checklist below. - We should make sure there's an assigned reviewer for every PR which has passing tests. Versioning: - go-tuf releases follow [SemVer](https://semver.org/) with the following modification: - While go-tuf is pre-1.0, increment the minor version for any breaking changes (in SemVer, there are no guarantees about API stability before 1.0). - Releases should be tagged in this repository as usual in Go (e.g. `v0.3.1`; see [Publishing a module](https://go.dev/doc/modules/publishing)). - All maintainers should have permissions to push an appropriately-named `tag`, which will trigger the full release process. - A patch release can happen at any point, but give the other maintainers 1 day's notice via Slack or GitHub first. - For a minor release, see the "Project management" tag below. - We may revisit this policy post-1.0. Project management: - Try to keep issues up-to-date with status updates! - Feel free to ping open issues to check on them. - Use the "assignee" field to indicate when you are working on an issue. - Use GitHub issue labels to describe the issue (exact labels are still changing, so just look through and add those that seem like a good fit). - Before publishing a new minor release, there should be an associated [GitHub project](https://github.com/theupdateframework/go-tuf/projects?type=beta) to track issues. - We will develop more process around project management after we get through the v0.4.0 release. ## Review checklist Code review: - [ ] Tests pass (enforced by CI). - [ ] There should be tests for any new functionality, and regression tests for any bugs. - [ ] Any user-facing functionality changes/additions (public APIs, command-line interface) should be documented. - [ ] Changes should be compliant with the [TUF specification](https://theupdateframework.github.io/specification/latest/). Pre-merge (check everything again before hitting the merge button!): - [ ] Approvals from two different organizations. - This is *not* currently enforced by CI, though PRs must have at least 2 approvals. - This may be waived for PRs which only update docs or comments, or trivial changes to tests. - Make sure that the PR title, commit message, and description are updated if the PR changes significantly during review. New version of the TUF specification: - There's an automated workflow which monitors and opens an issue in case there's newer version of the [TUF specification](https://theupdateframework.github.io/specification/latest/) - Closing the issue should happen after completing the following steps: - Review the changes to the specification and make sure they're addressed (possibly requires breaking out a few relevant issues). - Bump the `tuf-version` in the `.github/workflows/specification-version-check.yml` workflow. docs/SECURITY.md000066400000000000000000000025651453140004500136030ustar00rootroot00000000000000# Security Policy The go-tuf community is committed to maintaining a reliable and consistent TUF client implementation. If you believe you have identified a security issue in go-tuf's client protocol, please follow these guidelines for responsible disclosure. ## Supported Versions You may report issues for the most recent version of go-tuf. We will not retroactively make changes to older versions. ## Reporting a Vulnerability If you discover a potential security issue in this project we ask that you notify the go-tuf maintainers via [Github's private reporting feature](https://github.com/theupdateframework/go-tuf/security/advisories/new) (requires being signed in to GitHub). At the minimum, the report must contain the following: * A description of the issue. * A specific version or commit SHA of `go-tuf` where the issue reproduces. * Instructions to reproduce the issue. Please do **not** create a public GitHub issue or pull request to submit vulnerability reports. These public trackers are intended for non-time-sensitive and non-security-related bug reports and feature requests. Major feature requests, such as design changes to the specification, should be proposed via a [TUF Augmentation Protocol](https://theupdateframework.github.io/specification/latest/#tuf-augmentation-proposal-tap-support) (TAP). ## Disclosure This project follows a 90 day disclosure timeline. docs/TESTING.md000066400000000000000000000012551453140004500134440ustar00rootroot00000000000000# Testing The [Python interoperability tests](../client/python_interop/) require Python 3 (available as `python` on the `$PATH`) and the [`python-tuf` package](https://github.com/theupdateframework/python-tuf) installed. To use the correct versions of the packages, it is recommended to use a [virtual environment](https://docs.python.org/3/library/venv.html#module-venv) and install the dependencies via: ``` python -m pip install --upgrade -r requirements-test.txt ``` You may run the full set of tests using ``` go test ./... ``` To update the data for these tests requires Docker and make (see test data [README.md](../client/python_interop/testdata/README.md) for details). docs/audit/000077500000000000000000000000001453140004500131105ustar00rootroot00000000000000docs/audit/X41-go-tuf-Audit-2023-Final-Report-PUBLIC.pdf000066400000000000000000011602571453140004500222760ustar00rootroot00000000000000%PDF-1.5 %ะิลุ 110 0 obj << /Length 662 /Filter /FlateDecode >> stream xฺ…SKo0 พ็W่˜ฤ่mฉง๕•4†n (zpcๅฤvๆธฏ๚ั’บ†ม~–ศไ'’†'ส`FหH'ศฒ4 Wมcร๏โบƒษผไผ}ว‘5ฮk{ *ฌe4ก<ัเ'ืV™.๙Gr'ฟค\Hฬj“ดžw๗Œไx{E(gษs๐-ˆโŒk#wd,๏ฅqฉ ”ฅฆฃษTsย98ญIW„'Tโˆ– ฐ„ค9นŸUน?ขBษ๑ฺ๚็ˆซUดอฆปœUัฆทำๆล~็ _6Yณญสฃ๛๔Š8‚›VPRG๚UUG๋E:Ÿถnก( ฮีึDตย(lAถƒฆ2๕Eํซบ‰8+๓พfeถษใโฑ(ฒ๚ตe]คqญSข๐ๅtTฅ=๏eDaœ$ต'+ิ2ส%‰รส„i+ Cl‰ย Sฑ4ม„คLSษC6L)๋5้แอฌ%R"ฮUAอeื฿ทำ/๓ณ@ะOYศ=x**Q<ข ร„Œq?ว†ตŸำลลY„ณโแ2จSd๕G๑?ื~ๅwนฏM ่๎ง-xS›๎]o็T –ฐศ{’-7>พ+Uุ™uนOŠๆฐ๖๕vนi†ว1อๅอ)wฮบ๎มูฐ5QnZAXใ"ฆi๖‡ใษไEqzD•็ฟ„OB(`’๐๙ทๅช๚๔ง{?๛‹DŽfมjืm,็8aa฿PธPย†Ÿฦฮพo[วJด7 „ม)K$ฮY,๚บ^gๅ๖—ฯฃdฏัฦ-CpฝGษZT๕ฒ;MrSVปjนใ๊ีีS?x0}ฤอNSoQŠ฿ชH2่ endstream endobj 108 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [0 0 270.226501 113.030251] /Group 111 0 R /Resources << /ExtGState << /a0 << /CA 1 /ca 1 >> >>>> /Length 155 /Filter /FlateDecode >> stream xœmKยPE็ฌ‚ x๏ร2\‚“ถจ๛Oฤhำp\>7 FFใ๛ฬวณ๐ ๋ฐ่|ˆ(_Yึ๔ยahฌZ %ตj คm`๙qOIr๕l2„{ฒ|lๆY*;ญ ^ํฅห@ง,ฦNคš๕Vู;BK"uEoถ‚ผ8*T์ํ฿d}ชu ฉด๊g๐D'zss?ใ endstream endobj 104 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [0 0 474.466522 113.217751] /Group << /Type /Group /S /Transparency /I true /CS /DeviceRGB >> /Resources << /ExtGState << /a0 << /CA 1 /ca 1 >> >>>> /Length 3015 /Filter /FlateDecode >> stream xœ…YKฒไธ ๋บภศ ๐s มQแž^t/<พ„3”๊}&ย‹Žz ( ‰$๛?Gน๊Yฎ‰๋ฯ๓*็Ÿ=VฝzYงYปชอ๓7Zื*๙uึqี5๐žอณ<๖|ฦVตเZฦ๔ฦ?ผYj๙0ืVฯŽ7ฌcน~Gฟฦ่๏ฯพ๘y”O_บ=Mw~๓อถโ ฬ˜œ฿๋5ผŸญ_ฝUุูท๗_๘qิgซ|oนm+๐สœ^๙บ MปŠญ๙ —บศฏกฏm^Q~u๘lฮไ๊ว‘ฏืjฬเ๖ฑัwฟ,‹๕qอŸฒ๋—๗8}^V ฏ™5z0ฐีtf|9>ฅโ๛า/๕ฟŠE.ไหpX๐C’๗บฎ†ี8€uœัะถ๏Eพ ๙ธ๗๓ีฮEฒb ๖^โx๛ฑ฿๙6 \8ƒt $_7๘ใhQฎึ๒cLษmxkภฮ่จ5ฌ‚ี’ะ}ž)ya`\ัโRNˆk!พ๓šaฐ0ฏ๙ูaๅlปๆ‚C฿ฺบใDzDฤ์œ’Šษญั(]๘๊ฐ >ฤฺp,ะPzH s ญฑํ_ท}œpง…F๖๏ฝเธฟ†ท7d€ุ๋๑(ฺ฿[)ˆฤณQเ{กา^Oฐฬšํ S๐ำ;Œ kŒฉ้fภ5ไค_๋œข M_:พ๓$ํถ‘sค—fƒoุฒikศ^‡oญ)ฐHรgส5*ฝiใrฦฃM;ว?^>–ฆวU๘>PF ิโ๔ภ'ฑ#ผึธรฮ84Dึฤช„bรžx˜๐๋ษร61ฝ–ซ`{เื=pC;™๛•ทฝ>ุ๗็ธว๑ธƒ\h_ทท`”~{3~ฒlซ?›E95Pฬ๋Ž๐k<‘2ฤ•;R ร*นzฺfหฐ(w๔)K—7–ŸZJmWม๗ฑ0Qวภ๛q๕oLpึ๏R|™๔$ :กฒฆeัi6 ษKภC"#ฐ8เcœฒ7๗„ยฺC2O/4฿ึKvIœๆcฤกฑŽตa/๐{"3 bฉš_Qƒ/Oฑ๛๓ณ…Lc๗g: ดb48ต>U%Xฟญ‰โ B!็ท5๐@Pโ๒mHึคู sPถ––ทฺผ|ฮฌj‰‰Bj๓"ไ-xร xƒŸน๖๎ะ€”ดYEesU-opผฅ5ณคฆ˜NC๓kูบ้‹aง•X๒ิฐc˜ี…คๅส ŠT; {›Lฏกท:ƒ]๚™(“%Fฎัjhฏ ๋‚ภฬžq;7 8VUึ:Š|‘yหฮa6ซ‘ซ.MAะ€า…ภszŠภT’@:Rต8ถh/h๓`MิมDX ป`K‰ะ๒`;Sู ถeฎ•=†ฅ๚ุtข๏๙€\ยอ(yิV๘ต/I š ฐ ้พธIฐžษV ซษ๕แจฃmีํh๊1ปV 5-‹Hx!ศฮ>อRcNจS[aฯฬ่=n๓ฅŒGm๏็ฆ~L Bv 5™WaqN5๔ข€ท‰Sต&IMTW@Yียึ๔T;ู)?’‹ตœฦฆehrษถ% eBz %ป€‡เข ภปTL๐bPไq`R ฐŽ]_b,a๚6ฃห์฿:8ฒ5 ๊ฯk€i+จ šิผอGผŸF‚ฏึ ์‘Dํ–กฐ2ศ๙‰ฆ0ฉoเฒษœCฎ'๑1 ๐q&่๏‰T ช5ภภS4•ีJโEตนวM#!: Y”‘ แฺxžข '็๖๓i>คทIŸๆEภdธx›R๔MŽpฝฎ"6๕ž&2ฃยtI1ปัุปบรOป •X’'=ƒยฅู[ฟw]้K ฃ๘อฬ%ฉsๆF ๐ศ Šึ6|ฉ๛ฐตฑน}q!่;ุ`!ิ{ๅาศล YF=”ธ ถ1mไฅิ2“  ! H;ตฆฤLSฒKฒ…Pๅd/ˆ'งบA“!ูMึาal—R ปJ˜LvฦRณใmืขTป6_Ÿ๎a\พช‡xปF(ะปะฒ๋ซ( นรค•rฏlคฌ‹ชศ`ุS=“…Šื“fณ#‘ธ!y,d“Hkถฬ+{›ู ฐ๙<๖&อ;W5Wง`ซงโ-.ถซศ0พžไื”˜กฆqHธ&์&@pSทฎ&ะู ะ<แ;๒s์-ษสAมมz๖$u-๒ํ!5๔Mฺ@ํฐ‘/“ฺAฺ=เ๘%‡0y N=อญ’ฑงž[ค‘ณEs$อุ่ึvย™6ฐ ภรถ )CzD›‡8v‚J?ˆ;๊—F(o€ิฎS!๓C˜วดBT)€A๐4Kหgjวูd#๗4ฃำ™LึทVซw๕ซร$ปลอ<…:Tฆ+ŸS๊ภ,JiอโF]๊sJƒธE”๛dG้Kfฉุ้ถ1Ÿ[หํ_XษƒpฦaI—๊ ([/5(คi๖`-Oี‚R‚Q]i0aT&๗ฃ*ผฃG—…ฆภ W๔yB›| Bฉษ~^อธ๏"๋ˆC›wS $Tิษ^Pถ9แYs2dำ Mอ/ศ๐มr^X์ฟ_‚O“๗ร%ฐ.%…PชFๆ๒"ึ2๕7/‹”bL,ศู‹๚คษc-Eใ‰L_šฦUW8t ษG]M9ฏKงม9ฅaQ`Vน5 cศ“DQeดi)‡ฌ‰เL!ฆๆึdBศฅู๓$Q๙˜ว$m็4- &/ศ 0Foั่aฅถDแฃ(O|Ÿ๗œ$h–q‰ˆ_Bƒœuฎทt|โTDgI`ฬFah<&I6}h›yฬ}ฝ–jPฏ7๕-ญส็]kƒ*ตfŽฌ,}ˆQI{H6็ Nฮ0W๖๔3ž‡ข#ฒ ๑ช่.ˆ?ฯจช][$‹}f9q!)‰ม.ญ๐[๑ทิ๐5๒‚ Tๆจ ๔,X^_Pาทฤ&ล9ฺ#iื์ๆ์ะS็BDุ=๐๋=`โ๓C๕…รๆ‰†fฃศdืl{^›1 ต wdP˜3ฆL–ฉณ.…››ๅ@bDxN็!$?ฬŽ@s—KGฏ๛ $d๒žp| ื฿Fdlฅเj*ะuไ&อYS๛เbั,ู0‡dข‚ชจ๓ฮO๋ำ;h’ึK6uฤtfฏhY:+ิLvฟ์dE}Mชตื๊๊ึ4u^t‰N๏*eR-ฮด‹แ$ข›U˜9Ÿงงฆˆ’Ma–ก็ค'๏ผวmT~:zhท๗๑M›xฮ+ษเฉŠำƒ'WErาเ‰ฯด=ชOซubร๎[6 ฉแ€žฟ‚าE่๊ค๏@ู…Zi๖ทƒ#*•Z%บเ‚ฒ\Pœ๙tฯ{ ‰miฎh๛–็{l`ู๊ถ๗ญจ•ดj์;ˆchHfie …!๛ษ ]อ1์๙p๗Nvf?๚>Hˆฤ‘ั:yฦ …/ |vŠํc/)สิฝ ผHแัrฅๆ้y็ด{,P๑๑๎Qภ่xฺŠฉCี๓.‡งCผi:ิ`๔( ณE”ปCqฉเI9…ญj„ด7ท๒d˜ฺะ&/ฺพญP$†ฉG%V‡๗A= ฅ.7ำvฑ๖nR4a๛M”ึ๗กzใp<‚ค๛a’ีt{วษ5Aฟฆฎ‚๋จŒ˜*บฑ}ฎ|IัWJ$dAๆ๎CgS่€> stream xฺํ]w`E_z‘P@šA:J“"มO”ฎ*RD้" (RL(ก7iŠzO(BR้w๓‘สm›7ew๖๎~&73o๏nwๆU„, [๘้ Sบื* aฃdณA ๖]ˆผ0Žค'—๖ฏ.‘ฃp‹/ถ\‹๓*’/[ฺฃ„ฤuFํธ“์ี)ฤŸ๙พUv‰9J๖฿xวๆี.;„m้SPโˆ๊“Nx‰ pฯฏdžv๘‘WไˆฺึY2ฯŽ;ใ}‘œ๖ฮ^T2WFx•A๎’y๐™pอKbึิ•Lวภำำกฎช! ‚g์^>T‘ฐญพ$FyIQ‚dI<š้ฅฦ๗'Jขข/?YHู][ฃ๎yIJC๘—’๘จฝ฿{.DงZHมฯ๖|%๛•,„>ท<–ฉุ’ีะเคgพฆ†HVD้wCพำ]ฒ* ฌ๗จcฦญ7$+#็*a๋vGษ๊ศฑฺ#ุบ–ไศปูํ™Š(น ŠpkฆงH๎„ช็ื’๎'นw฿=ฉ:๚ดไ†“เ~L…ถ–kอ๐๗•ไพ(ัจฺŸCrk๔w›0ะ๐ึ’cฝ{œHž€—๎XŸช๋ๅ%ม‹เm“$ฯA้ซVฆ๊๒3’Gaฒe-บ๖)’งแู ‹:ฉž“<฿Y‘ชฅ’gขVธี˜zุB๒XXฬณuD๒d๔NฒะกโKษณQะ2ง๗ศ’วc™๗๙gผe…็เื&*จPนZMฟู๛ฝ๗?๐^ฏ7_kRซ\!ำd๑น-:S mŒึIถ็;[qเrXฌjนƒ๘๛—,ื้yฃ%)6U7 จ‹ฺCA’#†ิ2Nภ๑"Sตื %๏๋w™ผ*Oeฟพล ‘ณฅธมณ ุ~ฮฮพม,rB“ƒ};ๅไ.mแป‚๚?zrฟถ|ธ?šฉศั๛>,ศYๆEค*–๓ญชฮh.rG๏์ฦU๎฿ฤฃ*$/ว–}“ซำ๕ฦ์ฒ„\4ชN๑k=h6ํ_ืบˆUsแw^๛lฐลธ*Œ6s*[SKคJ’?๑ูc_ฃS฿๚–็ฑ‘ข„กjฆ&†šฒ™P.ln Bี`ทศฃๆEpูถdฟ!!า์oณ฿ุ4ณ VENsว‹–ํUๆoฉ"Dnูvฒ~sํ5{KษM๏่Uq’..0n5w;IŒห๖ซ ุฝLwทฮTชุ:FF gމ๚”ๅW›HUM–#fฑ‡c๎q•i๏ช: w1ม]N็ภtบŠงSํi$)U„ฆ %€7TยˆM%ใ RชชงˆอสQOศ์)ีษิ๖2ลŽH]hO ฿น tKkAำ?"๔“6J&–8‡ ุ-๎™โฒ%๖PฯภqแฉBฑภ-….pœLu ๗๓™pมคฮhLci <[j™๒๎e฿d์‹ัม$ฉI๑เCใW†i๏5ขๆ0ฟh\tํFš\†"M๕#Xภ"‘H*•ฆ๏™|Z’ชึrฺอ๑d‘2wz9‚•ป6œ5๔ˆp฿G’fลฟ4ฬ๓"‘”Z%, ๐“ม็น๘†’๔\0ัะ›๘ืEาะข9กvY‚e'ร฿๖๗$าŸึbฯŠNF8(ศ:ค็5#มtๆใ…+…Œ์ฦYA–ฐำb"ูะœziyT$ยฌDทQ4ฒ]ไ๏N"๋ๆ๗ƒIFˆดคš๚E3ซrw๎@ขHHฆF<U Lณ“†w$ติิWดฒ‘T ˜*W&ึ-‹L+pฺ->๒ M-ฃ(d’GDี3mฑ i]แr\๚ษฎนซ:ิขm%ะๅh์ูง“Pีั\รนํอ4)&รO๏Iใ9‡‚ฝม๑‡Eๆ 1=s1ฝโ}usP๔Xฎ1–ฑฺฤต”ฬ%กJ€ๆ๏ณศ}ซษ{Zs ^& ฦลซูœLBU{$2Šr& ๖ฐ฿Z?บ}5…,b‚ต‡+t6ึฤDN21:์‘.Li๒‚G๒ญ…ะหE Qคฤธ‰ใฤถ๊Lผภ%~˜เ๛ใ]฿M@Ue$ .eH4„4†uyสBฎส`ๆร8ั>GภีuaธB!‘ยรษฦ+ ฑจฯ} ฎิ?u'='r„" fH๕7ูxyT๘ib} ึj9IrƒใEโ =,•!Yฅ#yS›๑,ค"0ฑ๊UR )พพ‰…๘L๋y+’/‘ผฉC&Rญ๋ต›ฮŒŸรฉ*DCRฆm;?wฏ็Fiฐfc˜฿ƒO วJษฒBฮBงlโˆแaณ4็#ศvm…„=ห^: |VถOVUฐม๎|ต(–Y`ชฦˆภ‡=๊ญ+gŽุตyอ๒%?~;s๚ไฏ&N˜๘ีไi3็ฬ[์๐Eพ‚=ใ'ฒn`%์FถVpCษœ A;~™2จSร๒…ภฯยv4๕—A๊ ล#่"1P‰ื+Nwฑ 4 จ Cพ{ึFb‰โ zOZy$ุต,–ๅ^„ู>>ŠX]q–aเญ็OQฃ+Fต--๑Fน}พ๒Dhๆ—่6œ|qqjErๅ.V็ฝ฿‚U#a,.ฐv๐^็IR์๕S;–’ŒFน._œ(O•ึ{ู%ัฬy@—ฃ*วmhี}ฅxยไ.$ู"Ž/์YN ฺท้8ฅ€\Kc฿ ํŽ”Œ‘˜ธไํโ’ะ๒๛ูฉdkศBรdย<Y๖วต…9๎%I`V—ถ†sข•ยIZฦl†๓`๑Yๅฃขบ$<ฦฅbฅ๕ฤฺ ฏP๚Sเ7 hJบผ ฅdผ๒ร™ฉJท%๔Vj›ƒ์K’*x4%OŽŽ}NฒJ8่hฏžก?Bf๓€–{๖u*๓ซT<VLฒ. |ฐ?ƒ/ฌnฒฌ vฐๅ\gBๅ=A;EIษ๚๐ˆ[xฮ5โMz๋ฬAVX็ฯu%๗A-ฬฯ•wQ–๘ย๙“ฮคHำš00งไ™p &๙vw ฮ?†๎‹B๒`Dะํ4Fช* ข"ญ*y6๚ธhค l๘MŠ๋™ไ ๊ง๒’.^iุhว^ิเ:์ธ5ฝc*{yJ…K๘๏#ุ่jCก™๗MฐˆJฤKRฒป›ย†'’0แD๔_้ฯy๛๙หี๏0เ๓o—o3เBะpี์๒ฤจฐ๋g๎Yทd๚๐-ช5‡,—ิO`…ศc8u“\b—แฒใb๕zŒ[๚Gเํ(šจๅ๗8ถS็ฦe ผ\ทฑŽ2ฮubผั2ํ?[~88šU“'Oฑ ƒหFท/ร›+ืpPุ๋ก ฑiฃ–"Wฒ3๕j6j๕a‰ˆ1œ[ณ๘ค[ก“ยO๛mU„Y.2l‚N }]iF‡dณณZCVžๅW฿$ฮ‰'‡`๔๙ีืแภU่ฉ่-฿๗nย 4๘แฒ ™็”ธชฎ•|ไษhวŽฃ0mสBว๚X`ก \{]=Jv9iธ่†™‰^Nโิuนฝ]’ œZy,๑์”Šd\ษ~ธ๛@ร{y”]Mื๊^aฦe๓ปoฺœ#›t2๓m>%ธ†ษ–‡FА„@๙8วไ๔†K๗@qไrฮK“—ei๋ศไf`๗ [ฬffh[ิฑจ™ํ{(Oฅgด#aเาฺ9หJV ผ”ฦT hsาŒฟภึTว€นjuWG!ฑเ๒D;๎i(ฐ๛m๙โฐ6„ซแnฏ'ฏซ‡]AใšnCโaณ“%oA์tT„UFฯซฐ6์…•Z๔ุI&kั๕ ณ๙ึx$&\zT,|๒y]&็งยฬUZ;d†ฒ(ซP6.ฮˆขh†?ค ‘ซ`ธมฎSน,ห…WˆžFŽ่าผ \$ศjัŸp $XVเไQญWu*—•!ŠKฏiB`\ฅถว~Sต=fGขร5X๏ŒjˆฟK๎๋ด^ค อ€sไ’:— ำn] ฒN(|c‘]kbw{Eล็ า"h%“าJฬQฐY.ކ์‘*—แฎฯ˜wต…A}{CS฿Oย๓|pY.E'J$(ย๋k{มTก๊F๘d—ƒVM]‹U dV,ฒ์.๕ำLƒ2ฃ฿3ฒXกc๊GA๗ ^yKน~KFVƒ๋ป)-3ฃ†็ใฦsD}YXผsซŒ™zjฃ Yฎawใ=ร [[งงญ"ิ0วmถŽ๒lด#kย๕ๆปฬฑฎg&”Œ/ฺนEnjฎ Jš;ศ”*?ฒ,น์ๅ€B”ฟb ย่VZG1ํEBดป˜!Sณ’…asํ|uMๆฟก๐อ•ๅ* =F =9ยุญง dฉ4’xภ|ก๘Rฅ็™> Pสa–์;~ฝฬ•ช…zหื‡ฬv]Pฎ’mM์}ฏ๒คช…๊0_็PQX—•คeos๎ส“+ื๋Jุ|ยZg+{๙*}9RตFwu`!vqS้:=]6่ฝศ•t‡&tญ–ซPนฐ็™/2„Wงu‡– ",W O๓ณฬื๘„Uu๕ฟ œฒพธ\‘ ๛*๓5Fpใ*@๑ภ)‹Z‰+ตlRWOa,Lพ“ฒ[Š+ๆง๖กผธšƒฑ๘่คึโชใ๚lฮ8็k`E)ทตธ’>eปฦ;œจสณ๘1เคฅ-ฦ•๔ฏ%์XกŒท“ถ—+#4ำ`ํ8qีg๑เค_‰ห•Šฎ+ห5๑ЇมZฝ lาCโrฅvุฮp ^๗Šcญ>6ฉภ๙@๛ˆํื๘(ม‰ซ<4Oy”—*ดKM่V์ึเoตz2hสEsฅv-ณ5ธ™˜๐BCฆ| 0W™ื‘Œ–เˆw0cgฉา*เำ‚ัโn13HmS‚Eๆ๊' ม7ฐY"’Wท๐ภoK=@dชด๓๒ู”๓6-ฺ,sเภSตD๏ศd‰cธฺ†)ณkู_BS…>ำ~‹%ึqใj.ฎxiEลฆ dqาาฦ n\uย–แ<ฮt;็ชปถ๘ƒ,ั†_h ๛ๅ8ฮt7ฤๆJ/&–>ช‰gŸYˆ้/+oœะ\้{—คฮ๕›ฤ3๊ะ—9ฃJ#กหx๊v›/์M8ำ’ุง่ฯ๗‰ศ\้ฃด็ส•‘ๅฎพื๓7นาฏF๛:ี๗.)(W@—๛ ^4โgย‰๖ฆ พh S}s๐kP „?ะž๐ฎจ\ษmเ๒Nฬ)ช(ฌjc๘S ท๏แ…ห็ซ๕!)$j3yไศywฑ๏‰งฟ Uา๒`ฎส“~•ิ"rz”_~ฦํ%๖=ศตฅ Š?BŸ๖้ๆGชLุ_Lฎไ_rฒz๐1Š(เฮ7œBฅ_ึj—หูBr%๏dนNฉปๅEฃ ๑{I๎คeฃcีNม[DไJ^Ÿo„:Fโนภ—@๋ ๎pฐƒp๛ชษY'ไJnqก{L”ฑ…@็ฯ“š9HMไิ&ผ-W๒ ฐฉ ุไ‰9มฉ#[ITqะำFBจ•€ฬ-WŸ(ฦp*”™œ˜ฌp๊Oี&$k ก^S ๊LซŽส–๋ฑrูa%ตๆ“)คR—'LŒ%ำ@RI•๙šˆvอช!1MB…ฆ๔ œฌO ๕ j๋์‚ืศ~ แj๓๕Œ+YEฮ๔ฟO–‹Žo !๖จขžž!3ๅQ›o”เฆr้ˆฃ๘š๖!U๖sG'าxHviA๕งญH\%ษ ™J9น\ีiก”๙iศJ”๊ฌZํ฿W ฎไพ๗‘๊ ซ๐Eส@ M๛+w@ฐ =๔d}ษๆ€ ๕h“ rม1ชม^ฅj6–ฆgฺ–฿œ฿luTษยpuPNฉะ˜พ‰๎๋ošำr(น’*$ฤฉถํ8# Wห4 aรม&๋ๅ่”์“6 ƒ`š‰๐บๅกช“]„ซฯML้Pˆ+~Ykฎไ/hU[ๅGžƒ`Uจว าฬฌฝ–yข—\์K๊S™“Zรku^๔ด฿ต๖ฒŒเ€ฒJทัฌ{’\๊Wิ& iส@ฟถmFน #โจ_ศ-Dbช\,วพ"[นฬ๒#6ีฑ2๎Fw%F˜|mMV›จ Fw๙UธบใฟๅRO้E๕ีfฎm“˜ม7ฃZ ฃ˜๙-|ไfหžN/…=g[มJฑS2งdXฯ=ท?ˆ-ีธ’ฬๆ๊ดLฆ™zยw]˜Z•ƒ™^ณบป(1DN_€ู)ฅ–ฺ4eฬN!‘;w]AhวGw๒ฒ์ ตš•—w]b‹๏๑ฃ3ใUk”3™ฌฑz‡๒้r™Ÿ๔ˆŠ๛–ฉFKk~E(ฯ„ุhี&nๅอว•๗…r‰ฺTสsห่56Œฑ>บ ˜“%ฝŠk+R7`˜K–ฺฑYรวŸž๕ุŠน6ยผK๐ด/žฎีg(oโcP~8ฮ็๚…VPยoE9่2A๓ฮฝpbR+ซ7๑%ย5”}F•wน่ฑŠฆปZฯ๊‹๛มB?๊ฦๆ๗”ิถฅL+V"7W“}f9ฑ๒‹ภ>๎”&pญชc๐?`—vwวน’คŸ๓LŒI\ษ์~rว)Uฃkย>๏ไtฺ]-ไฑ-@ใ†ืใำ๐oชC Gšร•<Sก•สdฎจsะะNX่z3mh@ำjt…Hา2ดHu`pSธzI&ˆย—ๆ USm่"~ำyี็ ึ‰วT฿~6ฆ฿IE‹F‚$ฝฅัาืัลgฆ•]RWT'ีน,œบืyQ๐5;ํฤํ"uฺฏค–BH#ถษ”žŽ๑*Nt'$ >๖mRฑัk"N๖ ‚ก}๚ob๘‹U{ฉซ+ฑf๚aข๚˜s†sฌ๋๑๗m๛จ๔{Rุจฎยๅ‚ฎ›aงผำ’ภ?๐วŸืเ S›FLยฟFsตUำส๏เ|๐mทฬx˜Cปน๊*ธgVVฐ‰ฒ$oุŠำ/dz&WeV“ซqฃKขษS›ฮดŸ_˜V‘dรeO8\R@•น^ษนna่n™็Sฃ.dU8ั หฯXฎไ๑‹กฉ/จ๓3km5“ U;ะซUR&ุtแx:ฑฏ&๖ี”๑Wj}Œ‰4ƒ฿š| Œ92ๆ9าMๆXcwบO‚๐\:pำ,งœๆ_:ฯZp†mc‚๚GFH••B5–ร9ฒก:pxจ\ผณ`œCธmkŸขbซd๕7“5โe$ฉปqษtงูู] ฌs6@ปJM\เมฎ3์}ŽvcE\๔ต๚–ฆบS๖น~มบgP,"๗e†ษœm%ž(eQถˆ€Žlไm'ฏฒถผ*‰x,สGJกZŸ๓$+วMž$ฅ<8๋?บ้Sฌ„Rฉึ"ดXYEeQแื;E‡E๒๖*ู เมQไๅ]฿๖ญ™“ฅœUvฆเZt rW๙,Z*~ศงศฺภŒขุงถ|7ฐYIBUหIWMU‰“ ƒหค๊ถMู฿ˆ]นห6๎>๊ปี๛N]…Sว†฿<๛๗†๙Ÿ๗iV!/ืซZษ"ฐwRตi5ฐLใต"•ŒAถงJTชไี.ฝ ๙t์๘ISง๕ฬฏgL›<~์งƒ๛๗|ฃ๕หีหอ- ต2๛“กVำ๎f†?ฌ4-y&r)๋ใ…!ฯี๊3งŽ์$K9… œจQ›ง\(ํิ;žวี ผ86=h4ตฟ ซ˜ํฬ ใJ1ษ\ขบ–RKมฅยŒ†ฐM.ๆ–ฌ”˜ด๏Es<ทfYžตpYล๕ฌj์fDต˜ziˆQ๘B ข๖เ้5ณฃ’ไrรIo”›๐TvสฅL]*\ง’m x… ฺบ$จ&๎ผฝณ{6‹๓Th๐aวเ"…ฐž–ฒm—ฏ๒€4รF$Mฌร7uอnQž ƒำ้๊ ู^HทI-ยฦ…‘{>zฦbล Ÿ agถฮ๊๗๒ำœ(*Pปว”u'๏ลซฆTญย^ก—ม“`ƒ}Ra&J?"ฺ2mฅด4XMwXL5†ฟกšฏ™ณ฿ ศD˜0œr†'ๅรฦ;๎%@'…ฑ$ป๏FษUšs'›ๆซมFๆหY x…ฺอxoไ๔%๋๗Ÿบ~_ณ†šŸ@†บU1jฟE 3vษC"•ะฆคีะฉ6ฃ]ๅซ๐U๚ปƒผๆ[,‚ณฤ๑ฤว๘!"‹ฒ@cZœZoาแGZชV๛ฑT;ดG“จ_L๖รjJงฆ๔๛d’ฮง๎i1P–X8B๚"VฑK฿ส+šyY‹จิ”nีm|ค“mปJˆฒ๙*เ PๅฮIT๊ t[%ฌˆB๗พHห•ฎฃนฺูBtฅ(โค๐ฺมl๚ชPศเQ’€พัd%u &ัp•ฃ๔ˆฮKK:H,‚Bัxฬ< ๎ฉ‹Dต๏ใIH`PตKฟฺLฦ๘d˜NขWBJvbŒรr)Ž’4|&9 ญ"#๋7ฒŠโZ฿PŠN„h๖ˆPศน•‘ฮnSe' aนDมี$ภLฏ—h?’ขž ลpห‡nพHคมMpน’q•“ยึ”qช>ๆ‡๕^๛แ ‘ฯ‚๛%W(ผใOT๒ป ‰ๆ๊“‘ีˆโ‡•Šymํช#I'จฃFแุ wฌB๓ˆ†D๚;Eขธ`Bณ่hrฎ†ยย7t_ซInใN8€;๖#ฃr{2อ‘v๔ง=2cง_/ฌ#Jญ[ๅปซู0pƒW„=Š‘ฎHสUฦ9lีขฏž,ใ๑๛ั(S^ร| UIUทเ/Bฅ ฯ(:ข›฿—๋/ฉvศcUบ_ น1ก ฉ'ด จŠบฏ›๕฿๓ฐ๒ล#$kCปํ๛Žz6ช‡เ๓ 1“๔ l8:W(_Šษ,จj‚(๐>้ชo.˜‘`|4(P?ไi‹,3ๅฃŽใหะ‰W๗hธ"ฎ@NzrฟA๔K์ฃ+ฯ๓็๕~ž ฅHO‡โ จ๚†ฮ๗ถxaยzฆ-h9โ?๔๊ฆ9C•'Eซฃข6:ฎP3โฅ—ญ7/}p;่ธŒช]#ต์_mไŸย_ฎจป`Gฏฝ‰dฝฬ€ เ‘8ํ\็ชถขไ๖,พŒžชกˆฟ’ฏพ‹ย I`k‰ฤ m๐Uyะ(t‰[X›พขQNล๋ฏO`๊F{$ฒ7Žฃ$y6ฺ๑ฬถจ‡๚Ÿ“ฒๆก_.9c่+$ฒFตมชภV;ฮูค`ํิT}€˜€ๆYL๐หF๕ชลาZMฎlURtมcƒ:z;7ซ๒ฐ4U)เ๏ฌฬ&wU -ฮฝฐtใ็ไDผขเJ%ƒจV'Qฅฌเๅ*SผํRq ฏดฟcg7ไž Xฑ=-Uc3P=Ž—“ฎV€๔n˜2 Oฒ‘๊ฆ@H˜๒yZชžตฑใJ!€9PUg\B,oH]<ั^ฟ่h…tเ2n/MหำŠห‰๙hDv,—9ขณๆVP”MษŠVฯำšุELq‘J˜ท`ฟ๑,[I ‰FโJ๗ฉB"g1…˜bกŽฉฤฉ s>f’hข ัญ๚ไฏ6่[œ๊ f฿D™ฎผK[?ซ$Xy:™๗ๅ!•7ษ0ช O[lWeญ+P้บg3GB'tส\2aฟฤ]`75U?  =™ฎ!บ$ะถŽ!rmcฎš<‚šชvˆ ~กk$พ%ภ–^†Z์[อม’vม›๙๏|ิTๅ‹็ร๊E)XC3๘าฌA[้ๅฺ`qฮUŒ0๖^`เ_ไึŽ7ฅ ฅdู/โ.•DไšP?dŠZ{ฦ)-/r่7y0EๆŽลC8ตpหp—z’ำู†…ไ๖ ๅrถœqเฎ,ํฮฑoฃพKŸ!Ž8N-^7Lใฟƒ๗n%ัm~ฤึบๆ&-Zฝuว๏—}3จรสๅMWB-เSW๐Vrืปห่พB โ๘rฅQ ฦ่ซ+3tสJ‘ส†pฆ ู›า ู๋๚โpฮL|ๆ"ขP๕โŽตแถรŽ‚L[ฌx^ชV ฮBาฮW-ว8;,wpพ๙T}Ž ม%&ย๊bุฬลุถพ?ฬdชบ"ƒ๐q_ำ๕’;F_c(_VศDช^ดลiก๐#ัŠ3๕&N›GU๑xdๆฐ‘น๒5€sh -$ๅ7ช‘ศHฐjš๙ฑ๖7ฌงใg0มn|ฑrA?V‚kViv.jy™กปอฃ๊22Y‰์ Uq๚B†™GีIรฉBvvuZจW ฑ;7ฌceพ(oU‡ Haุ|๑x‘น"8>ม๓ํ๋สŸช=ศ$ืgธ‡j.E็ฺcน™ฒ–(Šp๔๑ฯ8๘๛ฺ\ฉฺLBr]–ซ\ใ>ั9~*k“rนฝฬrใถซ Z๐ขj2 ษ๕˜๎dคข%ใึว(•ŽืNค่ฃ฿ดฮ็NT=&‹qรเJๅxg๛vV9*ค`&…`บปศTคดbีk'ŸIrm.EUT7Zู^ัOมFžํึ๖!“a๏ฤ๚AQa—ซaSึEy„XXๅึซ๙]ƒขmป+1ืd>e ž๎๒โšแ๚zคhฑฅ”Wt๙5Gอdพง@$Fq80ต:ๆ๔ำ‘—‹ 5Fฅl’SIt{@[๖บŠฤภ,วl“RKชบ|E๐ Uฑญ;•‡Mอม~3น๏!Qเ'qAฅ•Yžc๒– †ŠyVe'AๅึTแฑ‘าัH์็uylด=ใฺ๓ƒย?'ม:จvคJŽ&|6๑r" $nhด1อ ๑ถยฟ๒ภ—ะ6\mดู75แต^v$ย|๘ฑ%Uœ‚Rฯะ๕p฿ูwUsEฆ!2ฏ?แ'#แ2_u฿?•+แH๗ณ๊ผ๗๗แ*ท?๖’9htBOด‹๊ Xล8 w‰‰%f๙๏ .ิ:h…t4อฑ๘t(˜็ษ_…ฎS-อช]"ก%ฬSŒ๔๔ศร.|ฅ\,‡‰MFB#นซd.j|ไ_HD\ไภu#^0W”=Ht,”ผH๛•฿Aโ#ะหS๊U Y›xฉZฌ‚ูฮTมkศ:ฬแษT๕NBVB|gฯฅjฒึz(S5ย๕pฟฆ'R5Y?xSลฏ!ซโfEฯขjผ Y๖นž๔ฃบ„ฌ;ต<…ช้6dy๘zSีo!w@ดตปเ฿๎อTฯ‡ศ}`sg aษ@ไ^x๐†ปRตฬށe‘ฉ![bƒ1ี์6rW$ปืkซ์ ไฮˆฤm˜สทน;"๚ธU~6ไธ๛ฆ๕™๚)yBบX›ฉลษศƒpท—e‰สพฬฃ˜J{o ต$SE6ฺ"v†ๅ˜zแ ๒T$ฏ๑ฑSo\FMญยิ„Hไ๑cข*lK๖2•๖(ฝชุL}xรK’ร~ฌฐDU’ไๅวล๙O;‰ส=๕พ—%ฤญญ.S\๔’ขŽจŸห‹BT›—ยWท6”งโcฝวsŠ“ล แ้้=๒ช›žฏUน๖ฎ9๙dœWอ 3xฝ+3p๋=๏ัœbNอ๏\”•{๗ๅ/๗†zๆœOˆแG๖ฅน‚•์0}๗ญ ๎Œฅi` endstream endobj 121 0 obj << /Length 515 /Filter /FlateDecode >> stream xฺ}S]O0}๏ฏ๐cใ๋o?BปvEฐ1ะ$ฦCJC[),M‡๖๏w;]Z&d)พพื>9ว็รD:M™ฤ2F…ใไนQก ศnว ์Jฮ…ฤ๙ผdRพใ`dษูaKcว๐หdt>U‚h๊Œฐ$y!ึQŽ5ฃ$Y‘วh\ญฒณ˜+eฟทู›ซ?7›PœU~N๎ง>˜ฏyVde“6ช<{Jฎˆp† h9uศ฿ษ|ฺFŸ“œ N•…–่ใ#+ฌ]‘–ป%oฮ‚HะTป๖\Nีงณ*‰ฃNs u ˆแ†JเžMซnื23Mา•I%x4คๅTtฑo6U“)ถร—ฟเศ_ผใoœ9โ/ี~๏ว;šฬRk…ง HŠqฦEฬD &žnห4วซทฅผVuใใด\๙เ&-ำugH็Pผบ$uRz์ลพ(า๚ฏK์+ษฐ~M{ฏq_น๛ไW7!๛ีุuศ~ ู‹e–w€ธ2”9‰C9ึC๒#9*ไ๎—๙๖นoผ้็XSมQคาุ8แH๐็'๑" ?˜ห/zH[C๊5้รป™ožจะถ1๏ป๘๖๒z>ˆXด]Šรt ฟ%nPฐฉ,ํ๐š endstream endobj 141 0 obj << /Length 783 /Filter /FlateDecode >> stream xฺํWKS0พ็W่่,๔ดฌc „†i MB†CˆE๐4ถจcๅืweู‰Cฺ™J&)z์ฎพ]๏ทKEBG˜Dล„`ฎšgฝ=ฬ#EE}ข3ญทhsฏYุeุg๘ด€ลฃ๕‘ฐ•v„๏O{{CษQ„ตโ1š^กXc{*’˜*Šฆ :61ษ(›ิ๙นฝ๒cylY?Nฯ†~2สn–&3y9+S›๗/ฆวˆk…9u6ี’O&ำัะm๔ง็ฌ`Xฦิz~AP{วศูฃป๚d†pคฝ%št^ํFXล๎๋—E‚`ลU๛ฒผ๛Vฮ„๚ผฦ:b‘;NPi,™๐'i?ิŒ‡๗f^•้ญ{ฒเมคสฒY๑ณrข DFธ j5it0s”—…Mช๙ A ึ”ทPD ผcCศต„?…Šฦ†1DMymปด ฐ q€๛ก$d7t[mP ๓*ษ<ิ›Uาภห[x™‡w˜ๆIš/V>˜OnMแƒ_Iพ๕7Pีำ ฎc–{P's{|รป๘gุ ภB ฯ~๙ๆแZ9เ๑ €K๘ุฬm˜˜ฤ'‘aU] Oš0O fUoญ>bร-๖ไž=วPBไ Oบ[ด็ฎlัะ1s‘–อ๒—j™Cผ_ฆหดL M•2 ไ ฆmUwศ[ž€ดkง}5ณ๏นY5คp˜Wจจ9ฝถ๓?๓U, ๔ีNำฬชZ๚โ %—mตCูำๅมชน->ญ6| Ž ฦฅ์ู%ึP๕๐ฐษU๕(‰ฺqล๋ภŽ_ปฉŒF9ไฑฌฮ%ณฅG“-]Šuด‹  Œฝ:!IŸ]ฺช๔ไ๐MP?95๔(ป|ณ˜q0๕XIทK f ZiFc,œ^งฤ‹ทต"]O์D:Aะขb—ŠjงใZฌ่ˆฅฎ;fmŽ<=0> stream xฺ•TKO@พ็W์ั‘๊e_7 MEก%ฆญD98ฤ ~ค~€๘๗{ื‰ชส‡๏ฬ|3๓ํฬPDเฃH‰‰ไH‚นa่1a.ล@์Tิ๙น‹“yฦัE1๚Aธผ™๘=ถ??G'ณ€#‰โ…kค f S2ภTQฎะฝ7)V๑ุg๔nใ—$~ตrฑถgไ”—…=รป™ๆู6ณ8ฏฃ:)๒๑C๘qฃ0งmN๒อ"œฯZลhสู%มp i›่A+ะ}Am๎ฝv–TbiZฟ-Uย(ขs!ูฐ2ฦ0ีฬฦฟˆชงe•ซ6‡ฮม`#™lํเD#ŸKฌค3ฃrืฮ–l ๒!’ยึTu‘ลๅุืL๓}•วvืQฃˆท)บYq๔m F”pญเ%ฒ,สW–ซ$wฬŸmทi๒ธg๙(ฬธฌZ•oFR[วuดิ$ˆtLศ2y‡ภbkญ-ึ4฿D›๎QMรaๆG=๔Nž“"ฏšดŽ๒บ๛Šสใงเcดwี<๖=ึP}ฒ_ฃ๒นฉฌ Eniv]'ฯiไ,ฮ–q๚^ุAItฝ.J3ฤฃฬ^nร"๗Wั[œฦ}ย|ฆร{u๗ม†…Eฅึ0ฉช&vนญ‹ฆMYHย=ึ D฿ษ0XP’ฺ ฎ LเถSJป๖โA๔a)a*˜่= ,๘pีภ“aCaี 2ํ'4RŠถ[จส‘๎ฎ™%›ฆl;Epž๎zl๏ลˆ์ศผๅะRx๓าu€NฟI@าฎ{ŒทˆA•ิo๎แJืT“ŸS{q‘Tu™,›v~ภ๐|ํKŸr†•จอŒดyิa๛‹ธ๏l๙นƒžp`ๅ๕โm,ภด”ฌฏ๓๙ี|rุQ"Tฌ`g๔ะา6,?\ืLทื_ืฯ‹d endstream endobj 147 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [0 0 600 450] /Group 111 0 R /Resources << /ExtGState << /a0 << /CA 1 /ca 1 >> /a1 << /CA 0.87 /ca 0.87 >> /a2 << /CA 0.54 /ca 0.54 >> /a3 << /CA 0.8 /ca 0.8 >> >>/Font << /f-0-0 155 0 R>> >> /Length 543 /Filter /FlateDecode >> stream xœ”Mo0 †๏๚<&ณคพu0l(ึ| z(šฆhV4ะฟ?Jršdฑบ pl1๒+๒‘๔ส $Wว๒ฐŽเnฃžCพถ+ธธ%XRYแฉ ถ X*v ?ค‹\ํข’็๛gรe /า})๗ƒš!ม\Yธ‚gเขฎO)ฉ&ฯ9็†ุj‚G๘ืCๆ=อ‡^t;ฺ` รฺ5Œา๔uฑ์จห๚ฅšะดPŸ๚CDอภ€.ก:!bฏ1ลJ4ฤฃD> stream xœ]’อnƒ0 ว๏y ปCลGih%„4u๛ะุ€&ฆE! ๔ภฯŽซNฺ‹๓ทุINอKใ†’0™่gฮำ-„3^งฒ์`–๛*อุy•Ppปฮ Ž๋'UU|าๆผ„6ฯv:ใ“€ไ=X ƒปภๆ๛ิŠซฝyƒ#บRUื`ฑงtฏ๋F„$oK๛รฒn)์O๑ตz„<ฎ39’™,ฮพ3:wAUฅi U฿ื ท—k 9๗ๆฺUํXšฆdˆ3แŒ9ฮ™wย;ๆBธ .02U้>2b๑๋่฿ ๏‰s™ ล‰5ฤe™ ๙ESฐFK-อต๔Q๘ศzษYrN-zs$๖ภ~ษฉ9งฟf!w)๘.ฅฑไ;–RซŒตDฃYฃฅ'š{ขๅฬdธฑ๗r‹๙-> stream xœํX{xEถฏชำี=ำ3Iz&3y?& ™$ไย๛เb€‘5‚"*ฤH”M0บh˜5Yะ•,j D“A@@d! เฎหสฎ F๔บ!บ1)๎้ž๑ฑ๛้?๎๗๛๎wปง๋ีUuNฮณ‡PBˆJสืล‹V\*{>™ํo„ฐนw<๘€๋jb%$x ๖KVUฮŠ!„8ภU•wณzษ๋CF็c๛e\“ท๔ฮEEส_่ON!$k)X=ภฐŸƒ~K‹x๘q‹v๛ทcž{–฿ฑ(งp๘ุ?ŠœโEฏเ[”$$T_๏Zq+†iSฐ๏"D‰$Œ,ีาRพนUH์›Dขœ(SG#5๑uL"ฉํg;ำˆvถ๓lง;ุgKŒณล-•H๏Jˆ์‹จVฟ๒~9Y฿H๙อฅ) bAr T๕Fภ f{MŒต&ฌ:fk?gLคG"ใƒbโb๛iฝธฃvทพา…๕ู๋n๏นT’JSY*คJฉผซ‹]ฯž1#;gฺV+วฤปโ}๊ฆY4›บ๋ลรโ1๑ธx˜n าตtส’nBคqผต0ษ๋€‰ี๐ ฉ1›ไ@ษXPœํฝ(ึิฮ๔.]ฐ(Tž™˜a‹sฦั@:LผBgผKณz๎‘VMišิำฑ‡๛nม}PพQไo2‰Jไ2 €ะศDYๆ๙šํล€GตDjัTFี˜ะx ๚EkฝHซญอfฯ๕์:แž<ซ@ั๘gถะ\ฝ MŸŸˆด3ณHvVVๆะค„xYษฬBฬ$ฤL‘eบŠฝาปช™†e\6๏่ŠปŽ,บD-sŠr:๖์ูs˜นฆfz้“๙ฃOคฅ_}ซฐํQี๙ˆ๚˜ ใ‘฿เงZaP#วVธvFี$Tห[ป“C‚ 8ยc’ดˆu˜c“‘_d๘l'2‡ฺู‰๊ฉ+h๗uํzฎ›† %”bฬŒtƒื„Lใ‡Lƒisญ๘๔ฦ]็๎Z๒ฮโ๛๖mูถญข๖้'ๆด,]ึฤ‹”o„ุGž}๏ำค~ว2‡Voz|๋ฮ5ล+K 8เr]zฝd‡Ž7#K๏ๅ(GFHพ7–@ศ'`Qj8… fjUIŒI’ƒฌตณy้6ๆ+zหž๋รY:† ›Oidุ2œ ถ[\&๛H$ำ๓qืŽ9ึทžG๗~ '{3vˆZZิชcWแื!3)๖F)”Q†‚ศWืL\ฆ ณIiŠธUดไN[ฎNiๆ€ฆ„4๗…RJ็{“BY˜’ฬ’”ๅ6Vฤ–)ซุE ““hฒ<ŽN”oฃwัฅฒi>™Gmจˆิ–PA ๚ะM"L‡xว7าษžAาษo2 ]ฎคŸŸ๑ห•vRimฑo 3ƒฦ€92L๋๊ิ๕็[4^v:โ๚กษฑฅ•O=Uน้ฉง6]ช๛ฺี๎n๘่โนŽK—:ฮ]ฌฟ—ลšBci ขcr1‰Dบมdฐ7ฬจ\ikฑT2)ภ,[ฦ9tบa[yHu•๑6ิร‰ งฎ"!Rไe๗=Vัิ”ถkๅKปYc฿$ึX๓ไ/๕ญ— wqู žณ้9ัโฦz“HPิเMrH#า  o‡Wทlฅ™Cd21สฎMˆ6ŽŽึ–๋; 5W๋บnฯต!+ฮ8ูNYNp›Fะ)I†๒JฝทพRะV|๗กyโq‘บพ8๗U“๔๔†๒—5ถ`ฎฦัœ7 ขน4˜ZฉW๑๐๖ ต„า"๚ณulคžI”Hฺูv#jธฉ๎SŠ˜น๏+ถnbx1\‰zลI˜ืสjศ‰ฦ@*๋Aื\ 3†#:œ๎-โ†๗ัc*‘NK…ฤJmฑL5ซ€ฅE•ธdๆ\’C“ยC%n2),˜ง†kพส˜@&-&ซE5›d.ฃ…คž5”ถ+ฏลdจ-LัLGosิb“ั-h_Jษ|oฅล,YbI,f%…๓(sคa‰ต&Th–ฤ“ๅd%ม4ุšหฒxฎœซd˜๒ฌcMอใ,“ฌณMๆ,sฌKุฐDบ›/3฿iyญแ›1฿oI RรY,ฤโฆฑjฌ:ˆ โ#ูHžงNP็จหุ|ฉZยึยjiญด†?ขฎUร0ผุ2"ฉฃ šะxจW5Šž†W๗5H…ฝฑพุ๘M=[าทอ็วg#–ซQVR๎lB,Iดq3c4_ี„vnแfBลUY–RU™ธ|ถ๊ท๕๏`3p’Ž}๏i8๕ใ&ีJร ิfFd ษ”lฮขนeส1)xซ€ว™iฺM@S™ˆQ‰5‹๎ญโฦัgb_๗ โ{?ƒเž ~ปฐหขก]ธฝœ8"*•ฆญ-๔9•ˆฬฦ์ฟ-คง๋qว๐6ร3l ™จ8Bฟu h0ทฉiศึขใWฏฝ{็6ดกผผขขผ|œfฃันiึmt8uRอพMXฮ]๐lวฅ‹บ๎C<ว ?f๔ำCผแฆFbmWŸ#eึ(ม •๙2YUตณyW:{๓|๗Jฏแšโt]ฯฤ’ขcFwž๗K‹ลeิ„โKญช‚|6๚ชแ๐‘า‚๑?[Uzะช๛žI่„ ƒgึ-)๏‚๑ฤพ3~w๔คCM?_๑๘/๖๏O}฿หป่.้๎‡ญf๛ฎEE—}zRฌว๔?๑ไ„ท˜=ศ,)$:RVœึJดD ืb 2M•งูฆM‹ ›16A๋๊อ3ดฤ๗y่˜„ศฺ๋โ๏–-ปทษmvซn‹'ฤ๊ ๓„{"<‘ž(Oด'ฆ สค2^&—)eฆ2s™Zfฉ ฉ ญ ซ ฏŠจŠฌŠชŠฎŠIภœjrƒ๕ึษ ถ[็Mnนu^ม[$x‘้’pณ-ว–3ghท๊ใ7|ใฤ๋IQ์แ๔^๙๎ูxษvฤ฿=i๒]™ใf ฿•;ib๎‹/ฦแ™r'\Ÿ0๖ด๘จ๏!๖ุg+Kาท–=๖ล ฝ– ๓<ใ๔œ1›€ถeัs/S ๛D6จฒ1<อLcˆŠ6”๎PlN— – ณไใว๛ฮGฅฏeE=ƒุ‘พ\_.P"&Hv#ๆ%“ แึ˜ศfฐW‡˜+cB*ƒ ฒ_KLะก๖'ฒuผlทวMจuต๛-@ปrฅ]7ผ;ฎ๋ัมฐ฿น ๅvฐ๏๓š์š™sื?ถษช kื7]dสฮY‹๋G?ปa๐–โ๖kืฺ๏ฉNmbนงฮŸ?u๊ยE๑‡^ัู8d๐๖S้‚้0ชP6{๎ำ>2b(ฺสฟฦะ็~<†vh ต71Tv๔ํ0‚(ๆ1h3i˜†ฃeF„ฟJ๖…ิ@ภซึ}ZนถFง[Iš์ŽะฅโO|ูž;๑‡8๕้ƒ#+[J›บ}ๆ‡จ‡Fฯ>uาžู‡์ž˜™œLซ้ z/šœ|j„ำ๕“โ=๑พw„~vบ ฯพeh#ำ1kQ,/ก&ฐล|PAKLv š>หลค„n3noขF4ชู\ฤE]67qำ อm๓/ญym3ศ :C›aณฯงC่?+pจดn๘š‰/7๎฿?คu˜ณ`๕œ่;#^zhm|?Ÿ,ึ!?&<ส"อศMAะHl๔ ฉQ5Yฬ๘ํ'k๖@:ญ๖ผ๖t#ร๋ฤ`ฉ›ณ.๔[บ[AทŸ”iำ}[Bท‹ Vบ|j่ ƒ๘๓โ`U_#‹7๏<ฮ ซ่HฟKD ยIช7ยZะฆ‘Š๐ถJะ*อ-บ@์V"‹@ลVš่บฎ๘1๘57[Jœ๔ซ™ขW\ข‰Tบeด‰›็๖@๓ห…[Fๅbบ’Cx็ ๖จazิๅแ#u{าฟU๖tฏw ช—5,H!aJฅ=ฎยี…9e “ยUู:ฦ%ษฮ‘hR๚ทSzบ/ๅmฟาี๋3+]^˜caาํvวบ]๎8w|=ฉง๕ฌ^ญทlฉญซฏœOฟ็<3r ีš5œfbT2}"Œกฌeฤฏณๆž-ฏะ๛‡ฟZ๖า‰o}b๓‚ถyKš *HrฑŒ๛Vนโฬไ)}ํ,Z๘๖๖ๆƒัOฌฮฺิฟฬ™้›}rฎG9ซr,Fง$oฐ™€ฺh= dฑeŠใRg๏ Ÿ|TMIฎlํผ9็ฏพ๐บธ@?ขี๗ป๗?}Qค๑!Fk้๓xื๛๏w๐>J•ช=C%ฬ>ๅฎe๗ืฤNทkพฝย๑ C ฬX 2F#ะๆMD1ฺ๚_9กˆ”Ž_?~5‘ใฦณ‡>๕cd=[‹า๛๖nยHrk}^=N7าุIzฑ\Gพค*กูุjมตRŽV‘Zce|BVม›ไ 9F.a๋LHq-=Cโ่Gธฦ๏ฉ@ ๖aY-P€‚ลd}w,AšหษZ†5›‰;Ÿ”Nใ่Iฒ๏อdYŽmณuศศk๘5Eถฐซd.ถรศ@1hะา;ํa#ุœwwFถัuคƒฌ”Uqๆeมแฎฏแ YLjy฿ขใuฦ6๏‚hนIv( x ท๔Mš†6yื—[แvธ.ัr๔xมUR…FPH–‘Sผ#q•’@ชไ%tตTh%๚๙ุCR!Cฎโž‹แk์ว!gตฦ‰ yอไำ๘4<๓ซ5ส*_)kไ$๔ ๎O3A'HใภƒoJค)d ูŽ+๛#2„,‡Lคพœ”๐Mพ›์ม;…o‚j฿@ƒfฐคJrh.‡1$iD๓๋คœพ†|ฅ”่_’hdพ:2ุฅ5ฐฤ‰E [ \G็ฤฅ —ฎKS\ dFCภjWำอ›3 คH>งG5@ขฉAJLธS//ง ž<ฃภีDCวŽ๑o;ถp ฮ*ภฆรa;&ล๐ˆŒู็™iaP k2T๚@๕็Œ๚เ=fทˆ–.(˜_ฃW ~วZ)ั๚w๎อ๎›_Kพ{๓ํ‰ˆ/ลงŸn|ถเณQ—>๖!|Jคำด๋๓บVโ37F๖๙฿๛็–๘๛ธ–.รzฟฏ๏_๔’ศ5‚ษฬ{ฬสๆฒj๖ฤC =า\iปtŽ๒]ฌœ#ฏeกไ((_šb ฎ#ษT๔vใะำ2๔t^๓๑”H=^์geิน๏™๙|Tu’jฬœคฬ๘฿Y`;ุ(ํ่xฺŒถf”Ah@vภพOว๓Q‰4€”bฯJฑดt,Uc?ณ1ห„T1ฺฒ1‡mษc„#ิ;G€ะW ฝพะ“h†ฏKแซ๎J•€ฏฺค๎sxw%t—I7บ’๘9pร+u%ม฿ฟLๅ๏/Sแ?|!เ๓tธ๎€ฯชกY์ะูt๓ด๗ฆ๔้xธvตˆ_ซ†ซE๐7Ÿ5’"เฏ‘๐W~ ๘s3\S8ฟ ‡ชแ เรKNก€KNธX >p๒ >ุdแ8แ|)œุ้gœ๙ฝสฯ๘ฝ งผ/เิ/lTผ'œจ†ใ‰ธ€w+…ฃŽxGภแmผ]ภ!ผ-  ๗ks@ซZjๆ-zs>ซ*“lNไoฮ‡7ฝRs"ฐฟšชF๑74bีุฏใ^ฏ xต๖ม๏กม{ผ"ผ}๐[/ xษ{์ศwงรฎ@xqงฟ8vฺเ…)…Rุ‘ฟฐ]ภฏิื…๓๚"จ{^ใuแ๐ผฟRกVภsHไ9`๋–!|ซ€-C ้ืTC๕ณอผZภณจ[ฯ6รณeา3O%๒gๆร3^iณ€_ x๛O7รS‰P…`T‚'๑ดO:`“*q ฒ*ดŠD๘… 6 ุ `ฝ€'สm ๅ6๘๋Uภ”f˜<&M ใ“ฒaโh;Ÿฦ†๑ ฦco|Œรธfcp`L6Œฮท๑ัvฤผ^ณ”?*ˆ็ ฟ‰์๒๒QA0ช‰ถaฯ๋ฑro x›h๖8๋์VKƒ&๒Aโฬ‰ฬ†๑d๔‰!๙> /Resources << /ExtGState << /a0 << /CA 1 /ca 1 >> /a1 << /CA 0.8 /ca 0.8 >> >>/Font << /f-0-0 161 0 R>> >> /Length 380 /Filter /FlateDecode >> stream xœีTมnร ฝ๓>ถ‡P0๋ฆjRฅบEฺกํaJ—N“rhwุ๏ฯ@hคi๊ฝ"cูๆฝ็”ัLŽ๚QA—ฌN฿*Ex,—1ศรญธฬไBmMtdu๋]‹^ –„R!+ูึร–Q“แดฑ1hŠ˜u$ฮZํC$m™ก็ฃฦเŒื \ˆ จu:ดœ6`LKVหนjMฑฦๆาตฆๅืพชฤp%tไBB™ึ>ี๑Mj/Oขeด ๚ฉ6๒~ฉA‚Žสม3œฒสe‰๏XŽWุ W๏M+„t@“2ฆxๆฆf`\, eg2๚zyŸ๙อศb`-‰ฎŒฒy&ซฒฏ)UšZ๔ชtชชโVDI๖Bฌr,ˆ‡[็žื{ๅœ›‰ฬ=|่าU/?ฮ๘ŒE่Fตl๕nPปลใบ!4ผl<šล~A๛ๅ๒ะmTCFหu๎8qฒ๎ิVŸไh endstream endobj 163 0 obj << /Length 165 0 R /Filter /FlateDecode >> stream xœ]‘ฯnร ฦ๏<…ก Iญ•Pคฉปไฐ?ZถHมคH A„๒๖3uา๐ฐ!cŠK๗าY ๘๐ณ์1€6Vy\ๆีK„+ŽฦฒฒedุOi—ำเXAๆ~[Nี3ŠOJ.มopxV๓๏^ก7v„ร๗ฅฯก~u๎'ด8k[Pจ้บืมฝ B‘ฬวNQ„ํHถฟŠฏอ!T้\ๆ–ไฌpqƒD?ุ™เผกuหะชนrท\ตผ ž‰วšJ9'aขyJLB๑&วโJ%&aข.“๓ฬ> stream xœํW{T”G–ฏ๚~_}บ›ๆ-oŸุ<„่ะข’ŸQ'โƒเฃฃ์Dิ‰๏q‰&†จAeMท'ธฎ‰&#ฤ8.#*์FฃŽ1สlŒfŒซ11!$1ˆƒลnpๆœ=“ณ{v˜s๖lUWีฝทช๎ฝu๋[_3ฮ3ฒต ,nnษ์ล๑็ำbL™>w๙าธ^™XO™ทx~ษษล}C3ปhืฆ๙ Vอล8‚฿ข=๚โงgป/—ฝ‡ๆฯ-ณ˜ๆ\ๅ;ฦTย{—,]™}ึ0‚๐พ„ง,X4wถ™_ ผ€๐ศ’ู+‹บo _JxโgŸ^œ๓nƒŽ๐ํฤ?Š)ฌXzิbฑดีฑุฃLๅvZจq๛aฎ๋•9/ตค2หฅ–K-)มึxซ#_ฌฒฮ%ˆ๊Tzt๗๏<ซ๕ฃ=Œณ๒ฎjช๘†EฐAฎศˆwุมP/1ดx ์Œ N3ณT-%าาู’ๆใyณญฅญลาฺšโะดฤ8fตฐ๘ดะฐคคฤลjฑฅงefฉฉใ๖ฮืๅ žหฃg์๗xี“MMoŽฮ่ื{๘bพ๏์ื๏0—|_ž“ฟ“๏ป†๙uกข^อฬฬฎปF MŒีh€ัdTธb25‡NฏU่๕:ลลฬฬมฬyFก@2้อ&ฃAฏ  7้˜๓lXv*sํฺh หN3น@'พาY๔=อŸฆ๑ดŽ~NK8nเผะ๕T,bีXฃNu€1น๊ใteบ0…™’”pจE_ƒร”dฮPrกๆˆG๔9†มฆL๓6…OW 0U}Rฬะf่&้ง L…ๆ๙๚b๓*,WW–› Yก5=Š๛~H4๑ฤฆŠช‹oU4]ซ?๓^ฝhำH$t^Uw ภŠฮd—&ฒหxฒ‹‰๕s…j^U๑ฒ zฏ๚ถ‘ Cช1,์ปŸฮฦF:l‹‚R‚ใC่ึป[–?˜ขly๐ฌR฿นB4Wษช7ช๗ฯJ”uไKึรlขrฆZ.5๚ฝ'…ำ^๎V ๎)๋๖‘ํคG>้adI.;|zˆ :ๆ5่ตฐDnขM->%าฺ|ฮGŽ'2้>x ฯ‘๘ฤ๗xf็ฉ*uฺูุว;š:€•‘Ž%4ฑ0โbtEโuƒอc๖†{bv๖‰‰าโYTBPL|lo:'1ถดvปขฅ๕RkŠ๋๗NๆไNลwYNแิœ:งipฆ\–หs฿๕ๅŠ\-W—ซฯ5ไsMุ>A™`œ`*bEผH)2™*Y%ฏT*QฉVŠJญRWฉฏ4T+MีฌšW+ีจVซEตVญซึWชีฆzVฯ๋•zิซ๕ข^ซืี๋๋ ๕ฦzS๗)ำ# Ej‘(าŠtE๚"ƒO๐๗1๊]ศ ๙เฬ๔ดะป–˜_6ซE้ใ๏ป#Ž฿—9dโ„์!cส6——oR^พๅ๋ปwฟบญMiอš81kศ๘ฑสn ดำ๒=๙>Oแ™<‹ง์‘+ๅ๓๒น’oเฯ๑5|ƒ?vะ&า=๔bOธ๚ฑ^ ม๐ˆH„EQฌ‹<‹u€ื๎Q™WaŠHcLX‚ฝฃ-t็ V[vฯลท๕G…oK›–เ ศศdY™™ƒ)WhบŒL:›Jgำi_ฆ่\Vวร3๙ึฮ8ตxปณฏpำ4๗ๆชชช&>่?๑N(’7โljฺํcณ–ฟๅำท‚&™1š s%จบ่HฏฮZnูb๗๘"$`งฎ*†‚#,†˜%6ฦงhc๏์ฮbูhห๎ŽŸ:,ฤฮศิ}2BC)‘๕(z^i{ะ8`๊ภฯนEธทขiฬ#ณ๗บnป๒}ฑดี$[ฟh‘฿ฤลKKญูป็ รAqU%๏`™fc,ึคํfฏ่l 7R˜คตXณษ^ไฮ)\SB์ถฐฤ$%cฐ- หสึญ+ใพซูnสGn}*snต๒Ÿ\ใ-ฤw&๑ํ๓ฏฮวWวMzฎฺLฤ—ฒภ_๙ฆ‡ฺB์Š.1ำ–1Xแ3<๗wอึ"‡^ป.‡ถ|ฮOธษOาณฦึ-๓1ุ›=โJึ˜7๔—–€r๓‹7A๓๖๒$์tkเฑ †sRDฌราyณ…‚๑a ’-๏ถZณS๘Cป…ุCแทฃอJ/E‚๏p้q6฿{‘คLy~ถ็_ฺฐz๎–q Mฮช…~๕ธzG~,ฟฝ]๑ูท๏ศฟ:P๓`ใGฯ#ฯpcท _–‹ไzน$ถ๛๕‚ี03UOc ณ%ญa]|2ŸอW’oL9ฉ\KŠK‰ห‰{+>กซห๗ฆฒ=|ŸE๓ฅ=๓ม4Ÿ—๙๏/œd\ๅป๘nี==๕$ีSิ฿Xo \ู]Tฏ1Aoถฏ่{่ฆฟ)ล—๛ขึ๙฿”Zvฦ฿ช๘V็๙)๋•5d๑‡ต– yลฟฎ–Ÿแ๙‚฿`ิฏcwธ๏๒,‚Žำ5žจlทg>cหp”]dงู‚>ใู ฝ"‹็ืˆฦฟJมqยNPฟวQภcy ววี$s[ฃะจL"ฮ็ิ D=วึSฦ๖ฑE๛4[G๚ฬฑrึฦv(ทูt‚ฐ&าGRœ๘e๐fzืื(Uส0eญk"nปุ.พŽ5ณ%*ใFZy]4+ˆ๋!:csุnั,v๘์Ac3ๅŒ}Dึj5ป.‘Nแณ(Oฅ˜ผH๛Wณ)˜‰ใ /Sีธอ*†Y์G์ผhึ์ฌB—ศ*ดy|•:ห_W๛ฮงฌPg๑*v›xฮม}ยใIณ3vH™$ฦ‹๑tๆyDํ๏+บ{อยฮกƒ์พU‘15น4ณZKo^ฺู‡,รุ"d๔Elตุ]Yีdฑโ๏ทOW†ฑส<^Nฺถ“5a$ห"ัข••๑Cค7ำ•ฒ%๔๚0;;ลษฦYjวhw๋‰‚ธSำโ“4ฮข‹ซakVลีvuM,Pฃฤดัซ}๊Hผ}“ื“Ž™XWหรF์a;jึH"N. ะ‡™่ฃF&๛ณe†ภ๘‰W‹‚†eฑฉๆHC๋ซ๑ท DWปŒV/๋J˜/๑ŸงQW"ฃ}฿เ]ํ]๗ีห™yXฬd๑bjๅ>oฃึค^เnฉ•QAญ‚hUิfผ†๖$ฑ์>OโCyฑ2PyQ๙@‘่ปๅQๆG๙0Ÿฒ#}S0—/7Šฉ๔‡๒๚o”ต<ไเ๖B1ผa๊ื๚๋H‚ƒฝูจท๚a‹ฟ"็๔รฟ|T w๐VJ˜™9จ7ฑ4๊~~*=ธฮk5ยซ~:ลOแฎiRโA):%$ั‘†?ึแ~)๎ตo๗$๎5จํwง‰๖Mh_ซmKwงแฎKmKยwwœโปqโ[‰o$พNCซ_yะB*ถHดิv]puฉ_>Š/nปลvใs‰ฯnE‰ฯ$nEแS‰›ฯเ†ฤึแ๚'โz>‰ภ5 ๑ฑฤี+!โชฤ•|ไมๅCฤe‰7›ฤ‡!๘R>อ„4็เ’ฤลŒโขฤF\x_โหVqพ~Šsg=8S๎g$“8]ŠS๏Jœ”hฺ %NHVโ฿%ˆ_ƒ๕f?V'ŽK;Z(ŽีแุZ๕hC-ฤQ—Z็ภ‰฿xP[1\›ฤawเืฤ๋ฤ;ntใํ@ิุP-q@บเWoIา†*‰7(Lร/ฑ ซุ฿oX๑๚พd๑z)๖%ใ_%๖J‹ฤžสฑวสื,ข2ฏY๐s#vKผJB^•ุ€;‰;มK๒ฝx^ฉ‰Wศท^ฉร+kีํ?uˆํ…ุ๎RทILb+แ[๋๐S*ศรฑ…NปลŽอ&l"ย&7สษhๅผlลF‰ ๋%^*ณŠ—$สฌxQbฤ ึ<๑ยd> stream xฺ}XIณ6พฟ_มฃ\e1ฤๅ่$ถวฉ™J&Oฎ™*O I˜G2)๒ฏŸ@Qฯส”h,h๔๒uSqม/ฒ*ฃ< ส( ำ* ๊๎้๋S˜ๆEœั‰I[ฑ๐ษยŸบ4๘ู=~Qp€ล๓‘ต—ฝ^q๛๔ร‡MไaUคeฐe&ฐWไ›0.โ`_V?นFฟY'›|๕ป>}aฺํyฒ๙ั๑ธ‰OฉีถฃณoุคUฆ1๊D’}~๚€O๏ท‹็ฬJ$แฆŒQั/DA{ฟจ{\่ddqๆ๒ตม๓โี~ไฦA’…E‰๏™_˜งiXไ๋“ž)๘ฒŽฃ$_ฝSืำhฮ๘พ,]=O]ง๚+%ฃUa•'9ŠŒ‚už‡IฒaiŸ,0”ษ๊ชฏL&Q’พEฒZ;‹yํ็๕ณฎ™ุํ†Tผ:้~๏๚N7ผกxิืš้šฝ›ScF!สุA&ทง=ำฃใั4เณฟ๒์<ตk๒hga•‰ฌ๎ีฮดf4zxณN๓|ฅlƒDฑบh๕b๕0๘ cy$๗ใu:ตฆ&W‡oึyRอzเฎ๑๒xภXกๅ๛ก=ท็qห’๓ี็SฃFH฿ฝ๊๔ล๕/p0ูฌ.GƒOมwชmeเๅFŸu๋ภฒ2G›เ8€{{^™ฃSV4๏Ltฃ'}เภเ๖ใE๕r„ ณึk:๓ํกžsŽภ{U=JYง4ฃm๛*ง@s;๚5%kวtc†ฑ7ป‰อ‡+ ํ< t=้{็้ Hิฎ;๕ฎ3ƒnBR{AnTม:‰ร*.X๗ํC(+1hๆ๘ภ8ส* › Gํเ^ \œOฝฑฆ๙5pL:๒า๎ส#$ฆล&Z๕๐$แUW<…d0S'[ึŸแ#เdž`ฉ๔š฿ฅีฝ1ว~๊AŸ^&WL™a˜ด{1ใัMใM Pฏ1ฝฎe‰โfถม์า…=*Ÿo-ปNช|๕ฮฒ ˆฒ๖:นŠ@”ด๚๖ํf#ดEQ˜*฿ฝb๏=:‡x๐ฟฺวิEy7€ W9็‘ๅซKq5ษ,๏( X K`*Rv ž<๖Z˜๔Ÿpฦh[๓™di'ฟ=Šด/Z[ž 8ฎฃhžณ“†X‚”]Z"Jฅมธ)•ทศศY  —@ \Ep‰ัV”ผh,พJะ‡Nํุ๕ MŒ๒ฎรจ;ax์ห…Kฯสดjืj’ @ุb๘Ž|๎ไ†‡P;เหุณ้%ตf zœNBžt U{ฬแ(N‚ˆแ๗$ซV+แ$ไ‡sKเf)ac€#ึษสู,ิ2ึ3<ฤดูศ$กeDj.หโา2็|ใญชK,7ฒ6Žช~ม4ลU‚XX…P?›Fุ4 šีnฮdรdฯ[Cะ)#bkำืS๗ุฃ‚ศ0 ŠJ2กLoX ๔ดdD ูtฅ7]‰๑ีฯ:8ฃuƒnฯzภจจขีn’๊Lยสฅy!bง2™ ฬšš‘ัk๐๖q…แภฌZ๓B5-)๒[`l(0^ๅศุ๘๘ฮ๑ฝ๑ฑ$ูำ‚u*ฐโ];ื ‹ฺขดฮKณฉ`อ๕oนŸกฦ„ื}าถ™ฑํ^_ฝุCโŒท>บฆถaRย{#ุไŒฯหR๖้จ๚ƒ”ไ๗ฌTปgI2ฤMธ>‹b๏๖Rกฆ๘$ย1ฉ/Z–๖p=SŽ‚ˆ^C๖›ั๕Wžsฯ€`ส,35ฐฐ[K๖1รz…-Uฦ=ั๋uแq ’!วพNว่Š4ฎธ๓‚i O"ษ=์ ะ>๑า`vัWด}šfsKซโไ;BณงๅFณ็qz๒.}เา~l'จอY”nค๗jxBฅ%๕แ k‰”๘รMชฅชKžยำไ%’$›ฃฎ–}*๗Am> stream xฺีY]SH}ืฏธImYRทฆจฉๅ#ฆ&“) LfS<ปml‰’ไl˜_ฟ็ส2ƒมุึิ๎V"Z-}๚žำ๊mA)R)Y2)eไS( EB: 9<๑$2ER”&’’คBอด|‘tธ2ดๆนEฅ,.R…&-P8า๏B‚•๒0@•I‚ษ2Ž๑ p”ณ’`‰yg3ŽUG!W†ดิฤ’V^๑เภฐ&ึฅd†Y:Šด—’ 7NFย0นl^ูPPnณทฬB‚1 nเn๙†aภฮJŽ(Fb5ว\[ CJึ2ˆษ:F;›แฝ0ฌฐ๐C=l‰AFฐXœd๖,๔ฅ1JแXZึF;;”œR๒พ:ซ(9 7ร›ถ u,า?Fo}รi[| t:L๒๚๎ํณrๆq\ถu5šข*Ÿ7ก{หyB{Sชqu}ทสบoฐ(GEyะวoกV„ญ๒Q3ŸำauVู้™~…6๓๋•ฆffz†ีdสQัแดnoBMgกi›็ฃำƒ9ษ[เงฃฆซชฆSDน.ฺ;:ŸŽK ธ,ฦE[„ๆy,jภ} ฉJ๚-ไ_หะ4๔ฎœNะย๒๐ฯั่๙8š้ธ]ั‹ž๗2ำ้ๅ๋น๛gŸ๛'ฉฉX๋%—xษUฐๆz˜๑Gy`[ำษฝโุ‡9X!กE?น่w] ฺ้ีZฏž๐ƒโ๊*ิกl‹|L}k}๕bgy}Zhmท%LฏP—h๋ืบ‚o~_]m ชื๏ปr4hซŠ9ค•m7 ๆSšt_ช6ฌำ…Zฆ ‘ฆkไ27ฑึM-s“k๔27๕4๊รน{YM[๚Œ%ๅ`€™L๏'—GOœพ๐™า %‡E{ม~;;Qrvw(๙Ÿ(ูฏภmู6XRถŒฬฯjZƒๆnษ์}ฃ"฿ซพำถ1™‰91มr๛์"BKฌ5ดเfๆ๏๋jzญ5]uท,+t๐ฅ[ /ฮ\^D €:ทˆแŸีyูrซรป(9ฆถž2Tผ9฿Ša8yฟทฺ่u%{U= u2ฝHŽ’ใd,<ฌaK_คาฑ๗žื๔X!๋R6•wHฒL์ด‡้๔ฒE›ษฯE๙5ูู้zHv;พ’ำไำษ1_onฺ๖ถ๙!Iพk1ฮx’ทภ๔BXฺฤซต4๐Whc L+ก7‡U`–ฆชแ๓๏@ห ้šrฑG&WNวใ{Bก b-"ป@ึึkˆ3ไฏ}Es7ฏ`ผ'Œ›8žภ lgx<แฌPฯ+œบ{/บœ„โ<8„ ย๗–ญ ิฝวbyฌ^)žจWlYฝย/Smฯqฯu-ง\t•9ๅ:ณ่฿q ‡3ssฒ$Qeยw้๑เCŽฅ๏ฆNe๚€S?ใฒqศ\Ÿใ๔W1๗,?kxัOyQ[ๆEฮ†ย๚ฌด}้๚า๗e6+Uฺ—ข/e_ชพ์S}{ชoO๕ํฉญ๊ ฃŒ๗h>6œ5g2ฮะƒqYŒ4zฉำๅญขภwH".ุ0ฤ6ๅ $>—b%น=๘ฏX‘ผฏร‚X฿น†> —ฦ0$ย‘a‰ิใpHฐแ๙เ sGt‹๋*j๋๊Pสฦ)’ )ล‡d&6™^ฉŽ-ฮุญฅZzรT๋‰ํfฉ๖BZถwฟnŽfไ“อคอัtŸS้>งา}Nฅณeนวไฯgุ๑ p7ก X๒ำั๙งฝ๓ฟํmำึ!Ÿœ‡:?ลฎ๑CUVƒ“j’—mQ7ํM^“’Q๒sWฐ1˜… 4รบธmซบ;3ํ ฟ+‡:Q๒[Q๎–M1แมจฝแัคฯณฉผ/_้~‹๗›z/z.z=ncชEห๎žUŸสcฮŒ'ภY@ษ'aCj`}˜OŠ๑ฝน7$ถ$6%ถ} ณq~t์ฑร^'DhH$็œ ฮึบใ6ร๒z(…์š!ซ๏0รฌยะ|~{Š๋›ๅi&็ไำูQwื!+ฦ.?6๖ใ‘Q^o็ดbyŸt|๚"y{๗TVพ\‹ \ฆฃงช]ฅอtผจ?ซŠ6Šƒฌž[:)ฃณ—yฅฑ็_‚บฃฎŒ$๗ฌ๛ีฯลJฺอฯ–&y1nซฦำa|]Mฦๆ™“ฆฟ 0sฑ๓ ฒ.๘e'yuฺฤณ“๖z;๖ข๓๋ฃฦRฎหƒX_วy็—aผ ภ^สcฤๆ)ฯ‚ํ,ๅ1ป5d ฏ•๒ ย?Šบyล ๒Ÿ%C๎้1ธ๕M†ฌ๛Ÿ> stream xฺ}TMo0 ฝ็W่่ณbษถlืv้R Xืธภ€ขลVbญถ•ษNƒ๛Qฮ’`| Eาไ)‚"๘J †#ฃ<Šp\PTuณ฿3ณŒ$6โLต.โ๓†๙ฒ‹ัฝš€/B[0>œBย ;<ฟ-g๓E#†‹,ฮQนAy)๘2–b’Tึ่5ธSตธ iส‚g๑!ลม้jใไุx็ƒrฒ|Y8eูํZั‰~ไฃTอ[๙ˆโ"ร115Yไ๏ซrน0Žู—๒ฌSง91…พพEจ฿#2ต็่`#;”†Yakั๊ฌ๋ฉฑŒ2XŽ‹4AอpA|cŸ;ีoMญy ๛า-”ทฮิซQ ŸŒ^rtถNNY‰ฺyว†ฆ‹๙"KฯRา(ร0๎›}วa๎ย.*ฃ9ฮH>EีR‹jT๚่๒์„๎ไ0@Y>1ืย%„ฏiTNฎ…ฏQ้ถ-!& \:Ip‘$.…ผๆ๋Vเ›ลiP6ฐc–ต^ƒ๖œยVŒZYZU†ฌsy๕.ด;™:Œ4๐bFร(ะบS6ฒR€ณD๛a9†นึ{ŸSNาGฎล`้Š.๚ุi^™[๐s่ว[ฯh฿ฏฆด“ฝ์๖;\ฑห‚^Tbธ>โ)!%0/นืก3Yไ!Yuจ_pg๎04๊08•‘6ฮ๓ตืr<บ“์ก‡)"*7ว4๘™ฃก:ุจฺวžAj1(`ากฎฐ%kุDน‘nhฐ;์…o›๗X)ˆ้๗ื”๎v๖.wžkˆ†kศ$bล8]€“•4K๒igฏ^ข0ย”ยไฆ ล๐vน&€rฎDๅ฿nีม3€S€า[4ฉฯ69ƒ%ๆขำถ=ฝ~[ฏ ’G8KNKฤทพ๔๒ค๙ ผgค…ฎ endstream endobj 192 0 obj << /Length 1497 /Filter /FlateDecode >> stream xฺWm6 ~ฟยŸ†]dห๏P m๏nKฑฎ]“ŠขPl%j[ž%_๚Qข์ณด(‚ƒ)ŠขH๊แ#๕๘Q/.Rค‘—‰Šะ+››nH”f4ถ3ัNQทฮ)Myท๒ๆ๘”L&๋ั๗zๆล๎ฦฟO"/%Eๅ๎เๅ a.KB3๊ํ*๏ร๊ฅฌ๘“u˜คซwA๐3ส๒€_}r“H๎฿ฃฐiบš7ผีL ู>๙ธ{ๅEEF"jbฒž฿lw›{3qsท›ฅ3’$ง&ะฏ‚นWž‰=๗ฮึฒ๑bš’ด0๋jo;หzb‚ิ c’ๅ&Ÿ)ร4ŠH–ฦGhcyึ4!V๗ฒส1z[ช‚i˜Gk…:MI&่่฿˜B๎qด๊mฅx…#ฌQc@!–ฅฑ:[P๘๎ะ8Zฝ๏*ฆย๛ž5,๛ฯฦEhค.J๓eVื๒ฌPฎ๘ฏeว{e ๏bฅ1)b—ด6ฑูJ๑r่y}มQรZv4พ‹|5ุNุ๐Œน<่3๋9ŽX[ก0zƒP่Jดข_œ &$อJํผต๘”‰ง[uฒ‡ Z=๚`๓Xๆ0Œ%ธUB้^์WQะ€๏to๐ฺใท}/G%ๆB)›ฎ—Pผ"v#sบะ๋’‚fธsญY๙ูzŒขึ u…ข๎/N๘eึิ้LBFx`ฝรดบ้d บฑฉ๏ยz“ฝ‰PะVฤ„p‚ถฌneฉ|˜ธuต๒๏๖_l7a_ƒ๑Ÿ๒ ถWพ…2L š‰ฎ๐&๕ึ‰S๗•ํงฎ:๘๛ฌ๛ดฏๅY๋{ธ”‰‡gหซvvCฯ›ยญกIฒ€(ๆ„ ฝ]L›Ÿึ “$เฉ?zฃ๘ฮz็ญf ว>~๛ล_›—_ฟญip Œ=.ภ็1l›.o๒0บ]ฒฉย endstream endobj 228 0 obj << /Length 1434 /Filter /FlateDecode >> stream xฺลXrฺH}๗W่QฎŠฦsฟไอฑฑC6 ^ภ{ฉT  Hฌ4ฤๅฟ฿iƒ7ฮV’rน45—ž๎sบ{บ!†?p#–,ะ#fh0]s†˜T„ื;:รz‰๘s~โขฟbมuq๖;แ`“ท-Q+;๊3>ปธ,ศ(ฆƒ๑,ะQXSR ขH0N‚OแU‘ค็2ฆ_ณ๔กณๆk~๑ถhพใ๛›fะ_ญ—้*อmlณ"?<~0ฃ#NงZ๒`4๎฿ธ…ณธcฮV Š„&NัOŸqภฺปภ้ฎƒ‡z็*เD"iนe0๊X}h=aI)"Rดภa”v;<ฌ< l+;๊o€K`Er,ฅค6†kŽ๓ศd๓M้เใ,„ณฏ5!ปsœ#อd ุq*>คvQ$ลฒ˜?ึ`ขะ~k•GŒK๊dGD)Dจ"bA“|Šฦ”อ“,ŸWบƒฏiYkะZ๋ฎภ™0q๒Œ4๗"โ๋่jุฟ๗A‘š‡ฃฝa๗yฤ0ัa๚<"Dh0ฑwฺ78ˆƒ๐฿P@โ)฿h}งŸˆ*๐I†—~ฟฅ-พ›สC}น\U3พฺุ่2Oขปธฒํฒต๑๔Kญ)\8 ญแK7A9žฬ oฟy฿žๅŒค)}1โฆ6-pฐ($Œ็A™3ฐ๕[/h‰{Š c๑๚ถ:๏พศฮŽ 1ฦhx;€ไ] #ส"Lฮ#ฎ9"ˆิูฆ " FT[รšKGซIฑฬฆ ฺ๏ณKwฯห]QUูd้)น”เฉžฑbตสl3ฌำr›Œฮ\ุjศˆII•pz+.จ3ๆิ’ณ้ปNgRiค ์žc๒;•<อ+Uc๐z ื๑‡uรeG4ๅ˜์MkขIM4m‰†™๒D๓ƒุป)–IZzbำr•ทE^y”‘ุ9YO …5บ=ฎษzษ๎ใ$I—พƒฃ้๔LฬA๎ลฎ4ฃ•ƒฝ๏ฑผzX๐=F %D8Jุ.๖ภNf๖)y›ๅ>t.'ลฦ๛y•N›wหWีCQ&ฟŠ• ‘?—ก๋‡ว๑C:ะg๘นฯqž,ำคแขW–E๙ซˆเ 1๘T"ธDฌ-SดC;FD๛Hm&ลฺfซxู01š–kFHฏR›2f ู j~.3P>จฯ~3ฌร ?ฌBป•7์…p…'ค ยUฃำ8nช…g*o@อˆถ๒น”—ูวh˜.ำฏq›ทE๑ ๋n‰ ‚…ฆLรฒญปูับ{4-ึ้V?x$•ตx ธ!ƒz7ปfŒV๕กˆhNแ้ฬ*[5 ฎmsณvปณุ”ำํึฤฯf๙มถYแชเบชr๓eบ.ชฬๅ# ” /+ .็ฉmฮ@‹เ๎Wฐำจ t„๓9ไ,N@วpŸิฆmลfธ๋ZหwM*D=ๆ:`HŸ„yณKใ> q้บฎY<ัXฤ:u๏ 'BP<ลF มด˜@e$‰›Ÿq2‘*–ณ# SยภAu๋Yีจ ฝB๒ส50,|Xdำ…›…a์—›f–ฑM+o˜๙Œ"ก+f|…mัƒFปŒํ‰&<$™EโPขํวp Bฦ‡ไยฺu๕๚โbž9‹ํb3A ฯศูฌPrVบyH[๐ดน˜ั9ดทกฬ๖\๔XgF k๗๒ฉฎ@I%า™น~Qีฺ ม9 wŒอว&  –'>๚Išl–Ax,$<ษ!.คขถ+‹฿FD๕วีไํถ๕qIมw> /s5 236 0 R /s7 237 0 R /s9 238 0 R /s11 239 0 R /s13 240 0 R /s15 241 0 R >>/XObject << /x6 242 0 R /x8 243 0 R /x10 244 0 R /x12 245 0 R /x14 246 0 R /x16 247 0 R >>/Font << /f-0-0 248 0 R/f-0-1 249 0 R>> >> /Length 898 /Filter /FlateDecode >> stream xœญVn7}฿ฏเใnQไp† 4Mrะ#‚-หJWR-ๅ๚๗9{%'ตัฺาฮ g†บ-nี(j}T๓o^=ซท Z$ŽHjkFศฺฃ ๆ:Œ'X็฿vŒส‡ตš/ VŠง‹ย&šฟfiดฌe-œ˜ฝb“ด Žฉลถ˜_ฯฬ Lตธ..ส—U,w›๊รโUป`…Gฦ๛x๑๑„ฝฌี3lX7๋]ณวh‰!&ซfV›lŒjqโŸ•„r๘๋xณป!Zงษ“ ฌฌถ†’๋ˆ ธป9Tdสีฒ ๅง†<3:…Sทฏ++ๅjUื›บ๗ห1xv๐kL๒=๓๗*eb๏Ž“ฤง๎UŽหUem๙eณช|๙ตฅ[ญXใิ,้S"n้๙่๛หฯี_>-ฯDปx๔ุทย +ƒr๛]็igฌรeใŒFZว/p๒'o* ฅš+|Bแรusิรvนปฬ ถ'!ึน๓Aจdทฌฟgสqs์bNŽ,ฅฌuHŽปŸoพA6ต]ตwwฎn(๏Y ๅzY๕ะOวขซเw/๒u9๖จฮฏภr2‹‹ลจซ‚ีku‹ฝ™:ห’DSA๙\n ๒NK@ญ[-†ีVQdอ^ฤัธ๏ั&Ÿๅ๊อK๕~ฺK“”p้ž)ถq:>sVt2ฦ0ซƒ๗ํYT ฌ:ะ๊)-ํ|(้๑้oHqขั/ไwย๑r/Dl็tภถa$eG;ˆ7ฺQ๑ขmฬ5d ษsnเดG)โ๔}ุWOy1แฮจSไ—Rf,ƒnK"P˜€ˆ๘F‘ม!G์{)๒๓๘„ƒŠLใSา>‰rษฃ% ‡<อฑ8lPอ ค€็ฎ qภไใษf Œจi@0‹06G y?้@’ฝM๏pษฦ‰ง9ึ็:œปz€>m๑&’C,›‹i@Bๆนมฦ`ึ‘ใh iใ้~:ไๆhs8Œถว[{อฉH@ ๏›y84ฑฦ\๊ ืๆธŸg D‡จ)๐ถกุถสธรsL>ถCถมBใ&<ซ! n›š๘_*‚ะฉอฌภ'๖Vr7i ๖y ฆW&…จ ๏8Š„๓ฏ˜ Eา. B๛Š =ฉญb~ ก Bทโแญ็m๑๏o  endstream endobj 242 0 obj << /Type /XObject /Length 47 /Filter /FlateDecode /Subtype /Form /BBox [ 79 356.275574 265 451.275574] /Group << /Type /Group /S /Transparency /I true /CS /DeviceRGB >> /Resources << /ExtGState << /a0 << /CA 1 /ca 1 >> >> /XObject << /x21 256 0 R >> >> >> stream xœ+ไ2T0Bฉk gndbbdฆœหฅŸh ^ฌ _adจเ’ฯศดa่ endstream endobj 243 0 obj << /Type /XObject /Length 47 /Filter /FlateDecode /Subtype /Form /BBox [ 328 356.275574 514 451.275574] /Group << /Type /Group /S /Transparency /I true /CS /DeviceRGB >> /Resources << /ExtGState << /a0 << /CA 1 /ca 1 >> >> /XObject << /x24 257 0 R >> >> >> stream xœ+ไ2T0Bฉk gndbbdฆœหฅŸh ^ฌ _adขเ’ฯศดv๋ endstream endobj 244 0 obj << /Type /XObject /Length 47 /Filter /FlateDecode /Subtype /Form /BBox [ 577 356.275574 764 451.275574] /Group << /Type /Group /S /Transparency /I true /CS /DeviceRGB >> /Resources << /ExtGState << /a0 << /CA 1 /ca 1 >> >> /XObject << /x27 258 0 R >> >> >> stream xœ+ไ2T0Bฉk gndbbdฆœหฅŸh ^ฌ _adฎเ’ฯศด‹๎ endstream endobj 245 0 obj << /Type /XObject /Length 47 /Filter /FlateDecode /Subtype /Form /BBox [ 328 147.275574 514 242.275574] /Group << /Type /Group /S /Transparency /I true /CS /DeviceRGB >> /Resources << /ExtGState << /a0 << /CA 1 /ca 1 >> >> /XObject << /x30 259 0 R >> >> >> stream xœ+ไ2T0Bฉk gndbbdฆœหฅŸh ^ฌ _al เ’ฯศดb่ endstream endobj 246 0 obj << /Type /XObject /Length 47 /Filter /FlateDecode /Subtype /Form /BBox [ 577 147.275574 764 242.275574] /Group << /Type /Group /S /Transparency /I true /CS /DeviceRGB >> /Resources << /ExtGState << /a0 << /CA 1 /ca 1 >> >> /XObject << /x33 260 0 R >> >> >> stream xœ+ไ2T0Bฉk gndbbdฆœหฅŸh ^ฌ _alฌเ’ฯศดw๋ endstream endobj 247 0 obj << /Type /XObject /Length 47 /Filter /FlateDecode /Subtype /Form /BBox [ 98 120.275574 247 269.275574] /Group << /Type /Group /S /Transparency /I true /CS /DeviceRGB >> /Resources << /ExtGState << /a0 << /CA 1 /ca 1 >> >> /XObject << /x36 261 0 R >> >> >> stream xœ+ไ2T0Bฉk gndbbdฆœหฅŸh ^ฌ _alฆเ’ฯศดŒ๎ endstream endobj 256 0 obj << /Length 272 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /BBox [ 79 357 265 452] /Resources 273 0 R >> stream xœŒฑย@ C๗|…€#Isนหฺ ‰กฌˆช„ฤะ2๐๛คศƒ-ู๋ qั` —ฆR=ถฮญcฑฟ1ๆOB<ศะ4ฉิ๙ษย_bI๐ขห5—ŒNX tทYอ๗๛›Zื ฑZดค[้5Zlภ๚ฤˆ‰&๚‘๙— endstream endobj 257 0 obj << /Length 274 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /BBox [ 328 357 514 452] /Resources 275 0 R >> stream xœŒฑย@ C๗|…€#ษๅาหฺ ‰กฌˆช„ฤะ2๐๛คศƒ-ู๋ qั` —Aฅyl!œ‡Žuฦฦ˜? q•:hRฉ๓’…น9พฤ8’เE—k.2œฐ@่nณ–๏๗7Uํฅ‰Cฌํ้Vz „ซXŸ1ัD?ฎจร endstream endobj 258 0 obj << /Length 276 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /BBox [ 577 357 764 452] /Resources 277 0 R >> stream xœŒฑย@ C๗|…€\s—หฺ ‰กฌˆช„ฤะ2๐๛คศƒ-ู๋ —a/Z[l!šxว:cฬŸ„dะมKRฉ๓š…5k๘’เHŠ]ฎน<ศpยฃปอjพ฿฿Tูj•Kh7๎5…mภ๚ฤˆ‰&๚’{› endstream endobj 259 0 obj << /Length 278 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /BBox [ 328 148 514 243] /Resources 279 0 R >> stream xœŒฑย@ C๗|…€ๅาหฺ ‰กฌˆช„ฤะ2๐๛คศƒ-ู๋ — ‡๐Pดyl!\†Žuฦ&˜? Iี:”คR็4 ss|Ip$ล‹.ื\ d8aัf-฿๏oชฅsSGmฦํฦฝขฐUฌOŒ˜hขฎNฟ endstream endobj 260 0 obj << /Length 280 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /BBox [ 577 148 764 243] /Resources 281 0 R >> stream xœŒฑย@ C๗|…€ๅ.อฺ ‰กฌˆช„ฤะ2๐๛คศƒ-ู๋ —a/ฺzl!บ๘€uฦ&˜? Iี๊%ฉิ๙อยบu|Ip$ล‹.ื\ d8aัf-฿๏oj๎์ŽฺŒ% :-…ญb}bฤD’!— endstream endobj 261 0 obj << /Length 282 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /BBox [ 98 121 247 270] /Resources 283 0 R >> stream xœmฑNƒ1 „w?ลฝฎํุฮŸ• ฉCYQค"ค-ฏO@MTeH๎‹ฯg_HธXs5ื๔*9แ!mร๕„›เ๔5Šคhฉ6>วyy‚เ้‰o<“โ“^ร)x'ว่_้ร๏-ัฯdฃsหศ”†3qแญLำ^ ืVกีX"–๎ะข์ูhกถqdฎS"๚%W+ำbษ›อšบฏn`N8w่๘ธณื#t €DF endstream endobj 263 0 obj << /Length 285 0 R /Filter /FlateDecode >> stream xœ]RหNร0ผ๛+|„J)ช„สฅข๐‰ฝ)‘จน้กฯฎง*‡dวใูงทฺlŸทi\t๕žงฐฃEcŠ™Žำ)า=ํวคVŽcX.ง๒‡nV;๏ฮว…4Lชmu๕ม—ว%Ÿ๕อSœzบUZ๋๊-Gสcฺ๋›ฏอิ๎4ฯ?t ด่Zญื:าภแ^บ๙ต;ฎŠ๓6๒ธœ๏ุํO๑yžI7ๅผBIaŠtœป@นK{Rm]ฏu; kE)ปปทp้‡๐eีšG–ึ5ี:*˜ c๐ฎ๐+เ•เ7uมl8ŽA# e์๏ fรผ๏[`+ุ เั7ะ7ย๗เ{มภขA^/y-๒Zษ๋ฝ`QO_๐ฎ๐จวH=นฌไ๒พN0j๓ฅ6่่=๚๒า—C|'๑ ๔F๔ณ22+‹:ญิู วFztศๅJ.ฬูหœ xSx๔หF๑๒Z๒œฒwื= งœyEสr–ญ]๗wžf๑*฿/ฏไภง endstream endobj 265 0 obj << /Length 287 0 R /Filter /FlateDecode >> stream xœ]มjร0 †๏~ ปCqำsŒ๖’CปฑlเXrjhdฃ8‡ผ't0 าๆท๔ฅฝถ์่O ถฃฮ3 MaKะำเYUg@oำ•Ž&*แn™-ป ๊๔Wง$ 1๔๔ฆ@’xเ๐s้ถQ7ว๘ค‘8มI5 นอฤป t-fงๅ˜ฑ?ว๗ ฮฅฏถH6 MัXรฉ๚”ซฺๅj1ำwชw๖aคธซอลฝฯWnไ+”Eržฒ‰dเ™^หŠ!ฎT9ฟsพq5 endstream endobj 266 0 obj << /Type /XObject /Length 49 /Filter /FlateDecode /Subtype /Form /BBox [ 79 356.275574 265 451.275574] /Group << /Type /Group /S /Transparency /I true /CS /DeviceRGB >> /Resources << /ExtGState << /a0 << /CA 0.6 /ca 0.6 >> >> >> >> stream xœ3P0ยขtD…๔b.sKcS3=#sSSsC 3KS…ขT…4.ร  endstream endobj 267 0 obj << /Type /XObject /Length 50 /Filter /FlateDecode /Subtype /Form /BBox [ 328 356.275574 514 451.275574] /Group << /Type /Group /S /Transparency /I true /CS /DeviceRGB >> /Resources << /ExtGState << /a0 << /CA 0.6 /ca 0.6 >> >> >> >> stream xœ3P0ยขtD…๔b.c# cS3=#sSSsC 3KS…ขT…4.ห€ I endstream endobj 268 0 obj << /Type /XObject /Length 50 /Filter /FlateDecode /Subtype /Form /BBox [ 577 356.275574 764 451.275574] /Group << /Type /Group /S /Transparency /I true /CS /DeviceRGB >> /Resources << /ExtGState << /a0 << /CA 0.6 /ca 0.6 >> >> >> >> stream xœ3P0ยขtD…๔b.SsscS3=#sSSsC sKS…ขT…4.ฬ) P endstream endobj 269 0 obj << /Type /XObject /Length 50 /Filter /FlateDecode /Subtype /Form /BBox [ 328 147.275574 514 242.275574] /Group << /Type /Group /S /Transparency /I true /CS /DeviceRGB >> /Resources << /ExtGState << /a0 << /CA 0.6 /ca 0.6 >> >> >> >> stream xœ3P0ยขtD…๔b.c# Cs=#sSSsC 3KS…ขT…4.หQ G endstream endobj 270 0 obj << /Type /XObject /Length 50 /Filter /FlateDecode /Subtype /Form /BBox [ 577 147.275574 764 242.275574] /Group << /Type /Group /S /Transparency /I true /CS /DeviceRGB >> /Resources << /ExtGState << /a0 << /CA 0.6 /ca 0.6 >> >> >> >> stream xœ3P0ยขtD…๔b.SssCs=#sSSsC sKS…ขT…4.ห๚ N endstream endobj 271 0 obj << /Type /XObject /Length 47 /Filter /FlateDecode /Subtype /Form /BBox [ 98 120.275574 247 269.275574] /Group << /Type /Group /S /Transparency /I true /CS /DeviceRGB >> /Resources << /ExtGState << /a0 << /CA 0.6 /ca 0.6 >> >> >> >> stream xœ3P0ยขtD…๔b.K C#=#sSSsCK0.JUHใส๔ A endstream endobj 284 0 obj << /Length 288 0 R /Filter /FlateDecode /Length1 10308 >> stream xœํZyt[ี™ฟ๗-Zญ}ตdษO~Zl๋I๗ํEฒe;ŽƒอRโ$rlgu‚“B0ะ, มฐฅ-ด ‡%ะ>' k kSzสาN9งๅ ำNง ‡ฮ =ดL'+๓'ษqฺžž๙sdค๛{ฟ๗ทพ๏>‚0BHƒ๖"qฃ[G&?ิ|๗Y„?GˆZ9บ๓ฮพmอ„\p=ธ~rรึ‡สฤf˜ฟ…6บaโ๚๕ำo)a๏iธฦฟq|dlฯG‚Pเ Xซ฿ บ฿ฒ „‚•0๗ozอิƒ; ฮม|ฬ๏žธztแ็“0ๆ‡ถŽLMโOtpฟะฬนษใ“๚}ๆ๗ร)ฤ ƒA์aฤฃิ‚:Nิดท67V—)F[ฺqMต—ฒY๕Œ๓ก`;SWไK๔_ฒิถSนM˜F)์3๙เ๛EอmซลM ห<‘๚ ž1฿ฌc]@q] ฅ !w[—6—;e^ณู[ๆt–›2ะ๏Ÿ๊่ฑsG˜B;ฟ`ธฉแช–p0เุp-_SŠ6…*›L6“c–vณ™\ž™;พobหย่ zะศ"ฦm `;๊1)•-์ใM5๘ๆ๗เFˆ ฃDิฌฅ('๚$๏@Rด šFC<(vณ EQํT[t 2‡-<7๎™I‰:ุq o๓๛*GธฦTS]Œs&3๑&b*…า4ฝฃTฃ=ฒy้žยฉ๕๛oiขฯ7u'วฌ˜ฝžบm=ณDกm N๖9ะมBขdC๐ุŽnc,ๆBศjึจ€‡6ฑ*kรs,9ิๅ<‚Oจrป*6›ฟยๅฎ ุ่3็ิ๔โฮฎนUdฌ‚{Rจใg๔FสPšตf่ †R(ฉœYJCS4CMฏRA)ื‚P์bูžn5V(ภb*J–อ- _อชณถหศvL`0 ;\ŽQUeySธษ_โq;ํข[.ำจ,a_Iฐ๋้ผf sกหy#ชษ†žถYฝm)๒ชmกEKื4ทn์,ธ๏ำgFำ †:*Vทฆd๙ฏ[q๋ชŠLEค?๊zbSeกะbvญ๒7ญพฮ๑ฎึmCฬขฏ]๋ q6}๛ภ@ใ๘มณSืšKชŠ฿fผ•๑าP#osA?์เƒBัNo:ๆ|#๛…ฮ๙๗Ÿb฿๘ฒ 8)Ÿ์!ฟTˆŠล"๐ญl…ถn9ไฒ—๛J}~โ[)รC*U3vณฒ6Jษt;ลฺ๐Rๆห‡f?ฆ\aลK~™ุ๗ยŽฬIทใ…} ๊‡3g^ภ๘ฃฬ™ฃ7ฝs ๏์‰พ๏œ3+ˆw?Š ฏŸดใlภซมณ!Dc ำเ.ยดฏUa–ECJpUO7ศศ !†I0เุฟ‹ณ—Ÿ••"มH‘หj6่ิ๐d์WƒGฑ  ็ฅkชIฌฯ๓ฏrลสR‘แ#;D‹kv]1ธ#[Uivj๋๙แอ6ธน7vใฬŽ]w™)wษ‚5Œฒํš'ท ีำซ"^ฟืU2w฿ณ[6?wโ;๎ู:ึS–๕™1^6hEํbK+ฦฌS HŠiŒ่ D3˜f6ƒGrั ฺPC W‚๊in J8w!In c˜"ฤœ" ~มPC6 ‰VuตQE6ํ๊7๚Bcจพฏ&œจrGzืฌ[ำฉฝ{อๆด *งูRฺ4ุZำWํ„ญQุช\ฝh์{MtŸำ๎ถƒ5`Mภร•ตตuO%ซ๕=zC‘ฏศnๆส๊ƒE\™ธ*ึ2ฑคฒฃษ‘ืš9DQกFด ฃ๛Eฃ +UU&ŠRŠeKำเt8]ะ`%ขh%ษ‰XอฎE2ผจThH๕งB!๛s!๑|XO…ฐjโ๒หฎxEJ๔,๎วhลฒแลรฝm%œำnิ34jฤZ9 ์Ÿอjภ๖ฌ๕BŠ –$กP฿ลrยg\eBzL2œ˜ห&&ศJV๐c+ฑSธบธiฅ‰ึŽ–๔ {oHท,ธ๑๘ไไใW7ฌŒิ}U\฿Šๆ ๑]e‰แ๕[ช๊;Kบถ๔๖L.*อœฎจwoดikQฃ๒ธ~ตQ\ิ7ต"jFyศจํ5ษ๎ุk›……#u}<ึฎ&{EEนฑŽี„๋์~มฅQ(”ฎE5พฆ2ง+ฺA-๑ิ๖+ทlY๎ฉ๓ุ+B`@ศRไฝ~ป 2'( ˜ูะNำํtรnๅX•3l!aƒฝุัŽๅZˆฑฐ}n†yล!…๓Eฯธ \ฌิ)• ๎Q]ญ๎5๎ถ่Xslศ๕pF|!๓Vหชต™ร/ฒ‡]ŽsตE1ฟ ˆ~โuฯี6v๒ํn๚mซ็หqฆฺด–sg฿ผ5๕ฺs{<>s๚๔ฬ๑7ณ๕œz๊—่“JAZmืก€งn2ฃ๓ณT6,fิ\ฅว ำ‘žฝ6[ํ้ผ&=sขขช3qi?eHe๛'r๚น~ภžm์%เ†\ฟ !ุZ์` *๏\็kฑ๋.}ƒฏขท9bกฯุ=‡ฦฏับ Š๊Wฯ๎ห๕*_@๑ *1ชร$rHฎSˆ^ซ†สCr—มrG;ไ1BŸb ร๓๋sqฃPBLaU@ู๊ิตpฝ็z:sจศg๑่๑พงผ.๓Šมใญ…าu๎h /1[2;ึ‚kFgดแํบŒไ™๋ฃ€ถูhR+”‚ฉจใ ํ,ท๑ฆœmL—wJงฤ#๋/ดI์ณวc—ดIŸำ™c d&ฒฃ:$ธ],อ26LฑTฎฌy”เ’ผ{ฮณHญ€\‹ัฤัฎฏb๊c}ฒ› SN‘หxภใV'HT์qœว^๊๗ฉT๖ฐe~#˜ซ&L4๔ย|”"MกQ||b่ภx}๋ŽGึฏพนkW์ฉฏžธP‰8œ9ฦ. ^ำฟ6~หkปทฟvpฐต1ำลธฟ;ใ๎จy๓ล‘้Tฎฎyก฿ุข$ุB.๔r)m$.ฺ11บ)M&่ํal๓ญ}uฬพLป™Z๖๐3gอฬŸ‘๏S~3๊ถ • „WcLs=!ไฉm" +ุ า†าหมณฒฝP’๊ม(น™Œ‚A%ธD‰ฮ–๋L xnฐ4๙เ้V{ถ๎CV่1>}ร-ื™์…กหIc_ๆท-•๎า"›JญU4V๎3๎฿Kูฌ‹์ธฦhษ<9=๛d[›ฌWiV •ู~_qŸ|n Š<มRศ ๘Až Xิ,ภgo0•`ข$เ /๔%!ภZ2์าS…vญC?ิป8IQฏ6ไ๔ิ83VŠ9๙€ปX‡ฒV7{\๔บB €ฆส^ํ:wะแฌ wบkgฟ`k ฯ!1บzฎ 7œ(„ถ‹6ฬRž"šfไ-!แ'w๖๙˜๊้ฮEฃ"฿I๛.ูWศํ๓\8ส๋pbไ+. นBปล–;Ur๋<ฟs&บAบ LQœซœ๔†R‰[ธlM}>‡๗ีœส4,฿[_นฃKŽมเuกŽˆ3m T๔หถ;๚ป๑Gb>1>k`Agู%ฦ,ะCั˜E74'4RณpพœoงบˆF๙โQ(@BวdPฒ(‚#Jน>ะษ1ˆnฎ๗หะ)/ไ{.น €~‹yศค[’œ92{bd‹˜>๒ภงษNฅลdฉY๚๕U'o๎้w|}วุ๒…• W๊Vnุ1๑:ึ?๒ึฟ61ถ4ญั+‚‹พ{๓-๏์3x+}J5ส๖้ฬฟA\9!ฒjฤJ=h‘ล@ฦƒ>k๓ยทu“T“;~็.n‡เ3)IŽ‘ หฅฝาN—.สv†ม0ฦ7ฝ‹Oฟตฏฝ"uำ’P~เ๙FWๆ~Si้มำKw/ ?๚ุ;ิภฌฤnthีข[6-ฒ8สg฿๐งํฅ วwํอๆฝ•ิ๚ 2#ท่ิ`bPj)Q๐iฦวหตว’ํ'ไ<ค†ŸฮŒqxุ/tfYึk&”ใ์mมพ@`aˆบd›ร…†E ถ„๓๚1฿ท”๛„y}ห็\2%† กuัc%ญc๏ท@‚—ิz…ฺช}—u[—ุŠุŸiอ*…AsJแฑ•y[EšT,ซQ‹–ป+'`‚็Aj—ัf3ฮ๎หอ@sj?๕]gฅำYๅœ๕หฒCC„F@[DmฝKฎMู๚เฟะ๖“3อถ™็oณษui/…ฌR†๑ๅ‘z๑!‡X‰P™ Fํข†ษพ`Y฿–˜ธค>`qิ๓+ึmnX๛่๕]7œธf๋ctซถ ะSXปnzhๅ้๊b1œpZƒๆฤญo|}๛+w.Ntศบ๎…ณอ๛ ไ}†^I‘Xศฝฯ€ฺ›‹ jˆฦ๙๗๙U˜“-๙%C‚พ๐>ร๏ณ๐คFcฏ4jศ+rบี™p๛๚‹พัt *˜!๖๐ๆe{– ๔™ู๋ทุAว9uีu[ฎG`??”ขก็BZ8„0yแ์ ๑r๑คRย‰(ท่’ ฏBF:ำ=6Sข6KQ)ด– ฿งVนๆฝu„‡sฅ=฿P่/} ฃkœ^ฟปศžX1Rฝใงฦำแๆ’Sk‡;ฎŽะg‚ฃ๑Wฏ…ถห๙“Hป๑ตๆdกv~-2ซ]VึuึUฃฑึ ˆ^่P‰๕ ๐ภ2k๓็๚ฎนs=HK T(•ใ#@l่ๆกอKl E้‹ -[5}&ถs๋_๎y&๓ษ้-^ลฦ'WทkKคYqน:†ฎผ๎ีz๘้ื+—๗๗๘e-ฤฏฑธ_ธ๏a๋›]๑๒5vญัโ ฿ฮž[้~ญอkฦ5ำตณ๏#๙ฝ พ้ฌำ‘NJ,ฑ`oภ:ะ”มki"r(g2๑9ห}ค“ก}4)ธ๛rอ๖…ณวMณ๛nR\Gฉึ_d๎ฅดhZญ]๋ถใมฬ,^๖๐นฉ:wwyy;‡ณปเูzไFaฑัpv€4[‹r๕ญm๎•Šปะd6ฯ$ฟ็แkUฃTVp๛ฯพK์้-ฟ๛เฎeแฒฅป–Žฒฬ~สฏ}l|๑โ†๛'ฤ7- ษyณเctิhตฮฎ†wเพ„ผ3tศJ์๚B฿\<@ ิ๐ƒๆ€Ÿภ็ฯโcŒ๘ ;ƒ8ิ(ึ™Œ V–ผTธแหiœg–mgICฦ!ฮdซุI‹^c EqฎษcƒRO•`๐`า.ฝ3แ(zจzx฿ O๔0X๏ไฌั…uE˜ห|Lฏิ1Uk†๖ฏฎาจำ:…ฃvจ#9}๎Qหœ9FglจH,ิฑิEล!†zย%%ค8ศ Eฮ›ls”๊Ÿช‹<^ฬฌyฬYฤbฅIฃ4ช3 ฏๅ™_฿}๔ ร์กhฤQแ 6ห…B๎ล˜0๘Rสฤ ้มjVรณœไW\ปฐ FjhEๅŸ๔ข>นeยณCTื์K๏ฑ‡Ÿศ8Ÿ˜)[฿~ :xWtภขPzฒญzวสJส|ไe™:[แ๒โซๅ3MสŒ์ฟ๋2วžuุTŸณš_ชํฦ๏gŽแัgnีPX>าZŸข4๘Sฝ>s‡cภcฦ=๛Gง฿jtk3’พe= …ฦฤP‹a๔"#ฌ่ัt/ล#x ๏ฦ๗Rงฉน Wษ5sO๛JฮŸ—}/มiุ฿•ทภ~ำWHํ?ˆเ๏ย฿ั฿i๘{ ฟ๛Šฟzu๑_อ~<๒qŒŸ†๒~Bึ|,๒/T~ภ„ไžH{…๋๘‚—T ฅ–€EXDrป”ึปอศ…๔RพฟCฆ\y!๒ๆA6 ฬ1ๅณ™์ฑ๓b”็œA=ชžฯวฆ??๙N๖)เออ/โ{๙ข;~ฦพ,฿๓›2’ภIhyฒ+ลq}ฯ#`ŸคXบ2)ีบฅาTz=7ฝ<)Q‘Tฃฃ:ทฯ'ก”„โ|็qˆฆx:‘ฐ q้๕‰ธ1Nzu@b‚+—bMผkดkษชคz็้$' $}’˜rsR#กS)n&ห42Fษ๘r3Nช$๛•„๓ี$BLp’f ™†Ž์iUOจ๚ด;JฅงRผ„’ใฉTDข๎รF@ 6>”X>&)๘ˆŸ’p:"1rqc3์บGvฒ—4q‰IwItนVใ47 wžฉdำƒษ๔€{dI*ษง`O\š„ 7Q(๗ิˆฤ ’2>ฉ!›ES>ฦƒy๙ุˆDญ[/แQxถฤ–G$ฅภต๑ั็ดŽ#wฤtŠฐค;eUยqฅลปbๅพ9Cซ…‹ ฏษ‡A;ๆบฆ๙โูJศM,)qn2/ฅD๘‘ฮ์#ด‚,›ค)๗EคaฮmาุHgDา ฐฯqRA|!น >–’tdถf:˜E$=\m”•โ@‡Qxฐคงน้4'้Aํˆd๚–%g˜ฑฮ”_า๓Sษ(๔ &๛–f>Xทศ๋&aโห“3C\ย#1I&!›) ?:๘‘ฐlI’3D}P76 ๎ว๊ส}<\–งู}r D.YI& 7ฌ^l์ฏpม $FŠKจ8”Tฺูfอ ชkYR2๐1ฎKาำ๑.1. ?i4bภฦXl:=cR„ฅํaw ˜ษบ™รษ*ฬ`2ฺภฮdด 34ย CFง0ร’ฑP˜Qั%ฬ(ษ่fTd,fิd๔H*‚xA !#‚ั‚ฑ!#‚ั‚1‚1‚1‚ฑTเZๅ0*เฑฦ4'คใฒอ!สKIP• RYX*ƒ€Cจvs_an~ค‘'H๓W9 ^"’0็l—ยๅถUสสEๆ[ๅโญจภีษrV๎บๆ?W|(YG๖ส๘ูฮ7ฮDฑ 4ฉฝAะ+ห Q;า‘ช„จฃ5"U-VˆฐQ`ฏW {€‹rrBR้้nพr9 ˆ ˆลวŽWclณย๓k์๐Ÿฬ"ฉใแ๑้(ฯqญำpฏบ \4{‰{'ฅI2‹ƒษGs๎TvฅbขTuผฬอ' ตโ—ๆIš L‡ฉxzŒ—่๘ศlS๑7ะi‚+—^3"A)เเ;žฝ`Ÿ๗ปยC๘,–1ฝ`{‰ฝ์ฎpGขQ@~่ผ/uแYเ๒zbVุ`ฮ|+˜ฆA^–T4—เปษรˆทe“rEห’Qฎส‘8ทศY๒&W`ึ;ฟ0fuฅศอy†'แ”“ žwMšTฮKUฬปฒYเน(ฑZPท5)วVHผ–นๅ๙หญs_‘งMjรWผiป ี…งแม$X@ฺหyภ-QฉX;ๆ",o]\<„z’${;ภ๚ล๎ซ่#โ\iๅ:ๆ๙—สษธ€#ฏŒ่๏ใsศ้1งrTถe“Š/ไก%*UB.v~ลz`-ถZค* ‚TC7ฑZุ•K@สฉG แ(uู+‡s ภ„่Žcye๒J?แYฤbยCˆซ!! OK!–B,#<„XNx:€XAx1Dx‘$<„Hž+ !VB Bฌ&<ํ@ฌ!<„XKx‘&<„ค๚93ฏ#ฉจQ™jjLŽ'˜ดยd\ๆธื“‰ฬฝAฆ๗F™"ฌ›ฉqŽu3™ศฌ[dŠฐNศa*HMsฌศDfฝZฆ๋คLึํย 5Cั]YX‰…%ีธD๛ฆH=‰ ์ Šยท฿๕๚ษZC๋_[๙sR ๚RCญzฏv์แณOฬ^ณ[u "Ga*wๆ‚฿lวญy๙์็๔šsgฑวฯH ๊ั f šฦกm๔วจˆ๎ยgก‹ฌ— z ‰ŒตชŠP3‰ฉFำ †/\รŒม๗(๒Rฟ@ๅส๐ขฅl=f่dU”"/#4ศฌF{;ะ4{ญbอ<‡Nะwขิ+(สh‘™ู๓"gs๙CNข Šรyฎ…๏ฦ๗#8"~าฝ ฺ!ค‚kTo‚ฺGAฯV๘B๕ิพ Gj|Ÿ‡รbŽ"B89`n„3ฉ๑ืp…kฬihบ๘žCศ:_mp๛pHํ„๏ไ฿สษV๓ฃ?ภู๓œk)4€าhฌ}ฌส๏ดเ๓ึh๑A(›YtžœAl์dO-๒2จœะขฆER๙ฯ[”Œ*ทะฅจR2Eฌผ Žฝl€ใฎZdษ X +บุหH„?ศPyEิดฉสTdS2ฺ๒uฮ๘๑AŸษzฌs&Hf/ช๖"ฬˆ๛Gก 8ฆคžว็ฟ!1 ƒF @]ึ endstream endobj 289 0 obj << /Length 290 0 R /Filter /FlateDecode /Length1 3972 >> stream xœญW]p[Gฝบื–ๅHถlK นMฒ๒Z‘VŠฑD‘,ปฉ •๓StคฝŠๅ$…คM;กJ†Ÿ!ยS™ahg€ฮ0๔g†ู๋ะN`&ฮ๐R†xเ๒30x+t€B“˜๏\ษnœคภt์{พs๖ปป็œ=ปซeœ1ึฦ.ฒ๋\~๚ผˆ?ศ#Œ5Xฟs๒ฉณ฿ส๏chdฌ={๊ฬ็Nžฟ๔‹' <ฯ๓๔Jต๖…?๐OŒErฐํ= C๘wึ๔ำะ๛NŸ=ก๋=~๚7 ๗œybนสXK๚๗ o;[ฝpŽ< *tq๎ฉ•sฟQจ๚o ฟฬLฆึsLฒq6ล๖ณp>4;ฝobฯ`งaชt๗,ูณำˆ๕Dฬ.๚gอฑั~ู1d๏@๗่ฌัl„š5x"šว{#_=ž์พก™ฝปฅู๕ลฐตH”ฦว์-vุ๎Jm6ดณซk็ะถmฉ]ั›/~}]jืŸ7ŸVณ๒ภฑษ๑ฆาษญง>#GRูษd4z#zWฝๆืต2i ฑต5–Z{ว|สz๕2#ล๐DBy€™ฦqฤ|u4ีcdาŒๆbำบjิŒ’;7 ฬ๗็ญึวZฎ$บนJ๓จŒ&ข=๑‘=f|pู?ลc†#1S8B2 GH๖ร’p„ไ ำ~ ) ้Š"&ม-๚9G•RQฅ”J๋!|ฅบ >$ฒ:!iง๙ ิKFซ9เqNiห๙มenอสๆฆฌcพŸปมแฅ;;ว๚น๋ dg๑๛๛๓ฌœ๐ฒ<†HrˆŽOTmu"ฃ‡Uv๋tF๏๙oTTุ2่#˜ OŠฌX๐ค‘lšิbต†fฃXต]ฺWnง —pศyฬฤ๓ˆ ยeูุหLฌ^ไB!Yw๔Š)ขค๏žุ่l™p> Sพ—r `ฑ๚›9ำHอธoึA,!ๆๅ Fณ5แงŒhf”ฉdล4Ž-๒ธiไหzส[’ะz06&๊n•œIๅ;ู๔ ธ>5.œท‡ธ>•๛”Yสฺ๛”ˆ}ฺGD}L้‰ ๊งH๑ฉŸ๖Qฯ๘ˆจg•ž >NŠO}ยGD=็#ข>ฉฎด™F ิุV i\ัพ๒:O2]ืCตาึ[vLูญฟขbั๙๛ทIrด๖๗_ผ๑‡ะ3ม๓อาhj๐lโ]{ล๋‘ะ3›n;๔ฑLล”๙K๑โึ๗[– nถฝ‰wะ ๎Ž"=ท-๖gึษ.ณVŒRf.{ ถทณธ2r†๓oยO%M]๊œวฌยซ๗Žฒ&Kฮ‡ฆ‚มพต๎V3ุ4”Z†[’7๏ฑ|C[แZ ฑถผEืะ6Xย…k,/*ีทไC3มก`’ลZอ๖”`s^ฟด„Exฉโjs^?i? ^dฬ_ZฦฯAP๐sนสืพขอห8๖ๆ๛7ฯ3๑ endstream endobj 312 0 obj << /Length 2140 /Filter /FlateDecode >> stream xฺห’6๒>_มฃ\eQ฿๔-๖ฌใq9ฑ™Tm•7ˆ%dHB!มQ”ฏO?@ฅับ\:ฐั 4๚ /€Ÿ๐โ"๕ƒ4๒๒ ๐ฃ"๔ส๖ๆฏ?J3ำŽH$แฮ9ฤๆฎผ[s๓~ทไฯ๓–๕ฤ{ฝ`๖แf๓>‰ผิ/ฒ(๗j//hYš๘"Cๅ}[ฝ3•zต“t๕›zา๊ศฐฉ๙k๗Ž๘ณแ๏ร๏๏ธkjUgฅีฆ{๕วรG/*2?(q|p๗ 7yXจ3 ๚I.Pะo^ดสž{GฺูzฑHดภswฟะzRฌ๐‹4LIฑ/’ุหยฬ/„S์'3ฬWฝ:˜A[ำŸx=จI๕g+}ฎั๕ภ_ู †กาภฉ๊5ฌฃhต-ุ8ิฆ12ฐžirฌด?์อุT o™ฏๅhCฐ๘j-bฟˆcVคl4ˆศV/ม[>€Eฑz˜\3Tฉk]NJ œทŽ{]๎/Nฃฅ๋๕‹$ปศ่4๗ใ<๗"? Iฎ+๖“jรb—‹ก[uP]าh5œ'ฮฌํ่`ˆpNDฆC€Mwตd้|*Sๆ‚\ยฃ8 ษ‹Yไึฏฬ—ธกŸ๒พญEPฉ qๅN]†(E‘Ÿ„๑sG๒ฝ{m1๛ฃ|8จah9Ÿ€*ญUํมLฅดlญ)ฬCสช5ƒ;>1ฝ•ฬ!X™cZeuซ†้"wNv๎jฒ`f–๊o=Xํๆผฟpก7[๐>Y‘s๔ห š ๐XŒ‚ธ™qทgfม% ฟ‡^–ฒ iNŒ่•พ%& โ๘ํว cFห9p‘ะ ู’ถิNฒ "ยS6ค ๚"ฟ(aG%;…ถŸ ๊}YStwA๕hวžC ไื๒=ส นภ๎ ฎา๓†ฟ5บ‹({ดY„ฎOZ5ีฤ@๒งRๅL/ง0ค๙9ฤN?ฉŽม็8หํˆฅฟีฝ*]๎T/๒ฐtญb™kSึTEฝc=ฏZŽ-B‰Œ๒๘“gฎืฬ(HVD[#ฬฉŒ8V Š’ฐˆ_a‚๎ฌ๊kY:&ึL๛ีภไ8`ะ!Šฟœpย‘ศWส฿๙๐๐หง+U.ŠC?O“e™Kจฬจ‚/”d(ƒฑfmษ:!\$!ฮ=‘ˆ!Yหfฌะ;ธz’ฝ6ฃ[lว4jษ!Žุaฤฮ‹t.!ฉ–ๆ„Kำ๗ใฑ›โ‹ ข uœ…ฮM@fฉ… <ธTr|KจN๋'ูŒ"!ปoๅเVำP ภ!†โ dย™๛ฏื\!`|หขx้Š์Š+`pหำ3W<™s @ฦCQศxŒฃJ ฿ฟFES€์v#%ฎt‡ั&\` 3qแ:โญมภNกi˜๋V•{ู้กลฅเ†Ž๘ž&aJ.XQอ@เนŠQ๛ŒW๗ชsEษe:Xณ๋ๅ ฬฝnมฎฏรso-Rด;W mzฌ้Tyํถเไ๖šƒ 5WP@ฯ็จคอาš,)คDถz7•ฤน…FU ผB๗JTษแสภ' ˜ค้4๓๋šะหp1๒i๋œ‰4ธqฐุษ2P ’โ‰•’ก๊ภณŽ…G๛ส6 ็ึ {,!-ฮ๖าEืLกษ;›< €,K]แวูโญปฬl $ลl ๑ฟ๔0AVท๋{Uบฟฺฺํโม๊'ภซ฿y๘๑—้Nญ๕ห๏o?ฝป|sŸpŸAล›๐Pืๆ็ฯ๘0ฟฬž9–v endstream endobj 172 0 obj << /Type /ObjStm /N 100 /First 882 /Length 2710 /Filter /FlateDecode >> stream xฺZmsธฎ_Od2๑า๑]วฏฑฺผี๒๕า๓dnh‰ถูศขFคฮ๑ฟ๏ณm+Žmษgฆืนัˆ๐`wฑX,จ™`าf “2i5RอTDฑ๗ฬ(‰ิ0ใP%ณž่"๓ศห XT)๊„3=ะH <jตi@wVโ๐โ;iคเ™*โ!™JใผX‹L‡>@แ•ํIxQn˜ ิ[ดศุ€Œ#จTฺhะD'1*F8ดะTB`Uภช•@ฺ1™๕ชตก*๐bX™vDcะสaึสHฆฝย84žP›H| ฐA••ศ`fส*p๘hŒ#0ฯ!f†ŒมX4ณSจ6ฦ๒(I˜มydะุl…กy[สXb2Q๔ค‚ ต ฌลt!+ <๘oeฤ$dจCฬอา,ai*`2KlW˜’ตR๕Z"“8Š IœG%ญ,š*Tฤ ‰VU20'•DๆคAF ๆจW….œQกง”bฮZช2ฬ9ฏาฬฅๆส2/TRๆฅ%YdภŒ้I JC)(ดย๔ดBฦฑ6ฬBฌAk๕โ˜ท@ฃ;0_ >ย`ุ ้ถcะ*(Mะ&) ำำPš€I๔ดP ZšTˆ…ฦBปX’ิฬฒ(=ฦЁEฮ448ฺD ‡‘ล`ก]ะึมX }‘Bhี์eป์XBก;dูวยBไ ง๖<@&๓๑๘S๏วํ~5iุๆ&ห๖imข›ิj฿’x๔๕ :ป่ญฒ๏OS ญ๚h%ยM‡Y5 ;fู‡}–_v3ุัีด@E~V๔ฒ \Lš Q๓^vXิี|6,๊dRัbTๆีv,P`ฃๅคฉมHโ'Œ–ฯะภ๙๙๋Y5Ÿ&ฝJฏ[“I…Ž“อ!„w€ค๚^6˜Ÿ4้M9๙หถซูจ˜ฅลง์ ๋g;ว2ฝDฬ๛ุD‡๑=1…งu"‡ดคยซีVbอ€eฏซฃŠA/ฆ˜2Wแ%๑จ…@B๒vIHa!$8๔r-!‘๓แ#$@ป+ค(ž"$XใUBZจ,EjTดฉlSฆฆM]›&-H๑ปบ‘cdmื‘xํ8,8ฌธๆศฝR?8ญชฃ\.Ky8”“œฬึ>๗ดง9ฌjฺ`”ใุ VQฑBpƒHป ึรกปร='+ ๕ 2ƒŠร“Zpld๗โุฮ‡Ÿgล้ฦ™ํทvช9t}๖ˆจ๎ƒw‚ษ%Q[ู/.5๙P'—ฐดณK“หถ67ำูึฐ)ซI6ศ~:์ำลyำL๋ฟfูดš5๕eyv`“ขษNๆณ้หฎ็ ุา2ฮ;S๖dฦฉ.็ภ87E nษปปม๒Dฦ]–ŸK^%^ฬy1šgรjr:ž“a‘สz:ฮฏฒบซQ‘ ๖๚ฏv๖^ํTฃrr๖jะไ“Q>ีsฺ‚ำฐN7œv˜}:งuœถ0ำ๐ฏ๗ฎ(Oe๔ๅ%?ฉK~2ŸŒ81๓ๆ~ด[ ๋lทบœŒซ|Tg{๏ฒํA?๛0?—รœzชณA3•E}( ุณT˜Mo๓ฟNGงฟ๚๋ษธ:๙azvฟ๙ํ๙๒w3!ํตpม^ jภrญแF)x๐ว๙4Qฎ็ำ|C๛ˆ“๚ญ † x์าJ)xPดQnเ8?JŒมษ]ืZr‹ฃืฃฤVHN๛฿:ดRh๎4ํJ*ฆึ$๖ vzMb๘&>ฯป‡KIง๐ฝผHฅย]/’ŽT]z‘ช %i๋สะฆ ฏŽ‘‹TถฉjSำฆบMํ}^ไ—ๆ5๖‰ณผอ๋ฯ้ดž s&1ๅ-zn๕์4ืลสฦ๒9ีs๋็46ฯilืnLjผdำŽf๓‚*`ื๒บH:ž}ๅ?>พz“7ีฉาฺ_ฮ๊fฦNi/{“ท/Rษลสุ-๊แฌœ6ี,…Mšฝษ0y,๛นœlM๊๒บ ‡‚Qsžt,1ํแŸI|Y๕s้\CQ+๏’ส;ŠHvชpิrA+จฤฅZ›Žb‚~ธo๐HD†L8ลtpzๆ@2ฮภฏถ+แปรก-๙ลงOคa์ด‚#>xฎCP…จ่B<$eคsŽฑ!ลๅแงญ`E่"Zy‹$x l|@7๓2lท|8๗BK$}ไu]ฦาฅ๑›^5็ี„<ถ ป‡สคศ”\*€7>ŸQX/ฏ๋ขฎ)ถยฯ›‹qืžยAฮน%ึ{…U๙๔o\๗Ja-–รํ%;]4‰฿q๕๋ปGf€์ึ'V0("<X๘๓‰ต\*๒+ZI6-ะง„ุc–<ม;O๒ endstream endobj 332 0 obj << /Length 858 /Filter /FlateDecode >> stream xฺ}UKoไ6 พฯฏะัjญถlปyuฺnfา=xlฃึถf%;i}ฉืt& HŠ}$Eš"EE#0ี„`0ิM›๏ฬEE oqฦz~๑เรvโ่Fo~ƒ ๏O&yŠŸธ|ธ+9ธฉxvT7˜ฎ%ฆEป=fืบ—W9+E๖Y>+๙x}tyŠส{่๎ห]`ถำq”“œ—vQzพ๚ถ๛„xSaN&๙—‡๖ฮ)6ทปณtN .k๊€>~#จ'ไฐื่ล[Nจ ‹ฦ๙่แ,๋DC‚ั๓Bฐ๓ รดfใQ$7๔˜SBไ้ 2่e)<ป[ ไk‚ฐ“vฑฮฯืฐม`ยFฺ œธ…ฟแ๗‚^ๅœV™I!ญ“๋lัแ|R‹ฺEษี1สฺUFำ^ฺฮจฝรโUsฒU6ล>jณเซผจy๖ใa‘ๆฅ5ฝดœeื_oO`m8‡"q,h 6๏คTแŠภำ9ณฺฤKํ“^วw7็ขมuQ ๊๕–{— iwHe๑๐Al็ศฌVุdชๆƒ6Sฒƒ”Dโป<ฯžU#า=ต๓ G=€ Gพจ@ๅlWc.Oํ’8๙]90S๛—Lฐ„็D.“IธX% ฒ๎e{ฉ๋uql•ญวมดฝš‡ ั&า๘t€=jkี~”AŠฝ‡PšวษnไัฝบนSาตี4S‡`<๋%ฦ00zตใ๋{@ตWPk๏|j’ิŽVฮ•Qป๎”๏ ซ‰ฏž7ŒZูญF-ฏQาซ้ข_pฦ/พ s’wAๆุ่หใจ_:ฐแe฿รm.Fฮํ—ธVึนำฯพ~ ศ๙Y=๛ๅ2†ฃ4)žŸmฑG่ิAuQ’หzฤ๓๖กeKฦo๛Pง*N'ญำฆซ๒sำิฐwJˆEq๑฿๙ชภŽPgWย•0_ ื”งฅ;M:ฆ๑ugiฺฝแกค8ๆ๖oxM๐ฬํEJ‰พwW๋Rภrb0ผ:[N.ิM c•๎งO> ”—ส (ฑŸ}ุโ,,u{ฅต๋—?oฏ/เผAk‚ซ‚Ÿฺ!DšหŸ ซ฿๖้บ„า endstream endobj 345 0 obj << /Length 1815 /Filter /FlateDecode >> stream xฺฅXY6~฿_กท:@อˆคฮพ5I“l๔ุlŠA€สmัแHิ:๛๏;ร!eญฃ\,ฮpN ษๆA<ˆ๒„…‰ ฒ0d2Aู\|ธ`2IydWฬH+โNฯ1^62xา]aฐๆณiษฺ^ฯŒ?บพx๘4–Aย๒Tfม๕6ศr&@–&1ใ)ฎซเํ๊qWฉk'ซ+uฃี‘่nKฃู;แณŽฦ๋7O‰ธlตjTk ฃป๖มป๋ฬS&9ฦd-๑๚๚๒) .~ปžฅ3!Xœq ๔ํป0จ@๖"ภุณเhW6Aฤ–ไจWฏgY๛‘ไˆXša>S†‰”,M"ŠCฺผR๐vอCูBํr‰ไ๊•2๛ฎ๊๊nwKŒmื๑Z•cฏอ-ๅ—ฑ<‚bKH3!uซ๚bฃkmดp™ญyฮ๒D$ัฺk% ย…4™]‹\ฎnฮŒSฌŠ^‘tงoTKdAขรุซฺ้U๎[]5‰zŸˆ6~‰† 4j0ชœญa’žyฌ๔Pv7ชW•M; ึ<‚\์DŽ.d“iK€i๖`Eษ๊ั8่V  ถEiบMŠถr\mฉ1jœ๖zx๏ืcๅ‘ ๎!ตyูจฮ›˜\CฌGbืZชU๋ฅLOMป …Nิqฏห=’„QŽƒภ‡&ืฎโ0;้*ŸL‰BคˆW*C†ฮV๕jkใ์n๛ฎ!ช ลฐm)lŠT&ซฆธ%bƒŸLฆPYš๋ึจ]oฝม์P๔Nม๎g v ฎ&]ฌพ“๓€›šQK๊์ฬโฒŒS$zpด‹ต็9_ตnดYn%ฃŒ?„ ืžดM‚Dืฺ’‡beปq ๎ง›eฎ3œ6ฬ๔0ŒดDLุ๛โฦ๙ฺ(ปต0€n๔6ดcัพUฺŸ‰็้ ์QiKc๋Žฬฒ.tC$+HŒuํค˜[ฑSฬ;œๅ<#—ญณ™ขvžถ๚ฦ9ช๔v ^[CSฺ๛ฮน๚จใ4|๊@>ศb๐ีuw~ฑyร•ม™1žงฌ‚ฉค๑tl~rช‹8cq$เˆXัูฑž‚5ฌงงS„I˜ม"๛ฯyš.Xb_=๛ฮีณ๘Rษ’4dšฒ4ถ๑ก JY.โ€K&ข,่Uฐˆ๎F๓ฃ_d1Kเึภล๎พ๘ฝk]G๗๒ูฐ<Œ3Š8สQๅีทฏป๛ }‰เfฮย‹%๚V_*Nฦd$ม[ฬฒTPy^vG[๏5’$ƒฎ Y’HVคQ,จขหขซ๛j-ื ช”%๑Wฺ๊^A~พ‚iฮbŒA]ธใ•ช๔ุธ๛h“ว)Bฒ,’Žกฬ๖ข่๊พZห%•œa๛Ÿ•Ž_€„ง’'ศ/4eสD’ƒ๏˜ๅ™;ๅŸ๋๔ผ…,ๆ€ผAฤCž'0ฦะอnื/‹ฎ๎ซต\PžฒไซG฿ฝ‚œŽ'ฆห…ฬ)เ€ใ๎by ทŠEFsxcœp]็’I@๋๋(dก?fึศ$_มลG„GอH๋ถ‚  ยœš}a<ฅˆ˜#ธeฺ+EJ#pหTKิพ่+ขxอŽฦๅ{ฏb:gๆใก๎ด๓[Š ไ‘แ\/ณีpPLรคิ}96ƒ€ญ@2ฮVึ-ศ\6–ยlญ้ๆศ•˜?ร่;ภ‡› Œฬ9ณG=…mฑrเ์• ลrj่˜Zร†;ฝY2O€ูtD!~|Oุธ˜0Ž'sZไ l‹ฎ€ํ^–Z รถฐrBJqzฮio“็ึ)}[ZถU 9Pฌ\ lึปึมhZL H>xมคRช9“zจใ‡Qฺ๖ฒ ฎ5 8]าิf†*ฝพฑ_ฺ๚mซ3Cc"1้-d๘p!zDฉM‘š),‚ังำๆP&๚ภQ๐‰•๑ี?'9(v ผฝชลfฃฮ+ุ~zFiŠ์LoLธ‡๑จj๛j€rmTYŒรIํ–จnklทนAn?6ตทNšDlG3๖ wQšฌžtnCืu6๚5^€gงีQ๛7ฯ`เีฒ3ดQๆฟ2อžoK?B ทฐSŠš๖š๊งชณวVฅถช๋ฌ๕ฬƒูณ;wฯูฏepฯภm‹b—},ะ~ฒ~ญJ๗หXณy>Vธ> stream xฺ}UKฃ8พ็W๘HK‹CูฦภงณํhwปอHญ9pด€ณ@‚z~ถกI6qฐ)ืใซฏสe ~@D"i 9‰ƒ€๒„‘ผ^ปข\F ŒฦbkŽภู9มzSs๒ Wใ= ?อ*ไ_8˜ฎึO!'’&Iบ#qBžE2คI ๒๊๋B๙,”ณ:—jฐ{ฝณkp‡Ÿด]ำฏOvณฉ•ชUำg}ฉ›ป้gย“ˆr1ฯพค›ง๑`๕˜.า™A0ฦ0}ฯ>“{LฃY’สdดซศห"๋iต Aนl™!cbfqp ลdF^}‚3ฏkD๎3มฝo*๛งQ]g›Sญฺ91รbBษไร0FB|.h‚&FjxJธwํq6y'^0DN%„ึn8ŽจXห…VูYฏ™]:ี)OยผN๏๚!k]์ม%กœUศœ~VUz˜ฅN=ฯzตืm๙ำ&zแ๘|ชd`[Ve_Nฒฆ0uฦnฃq‰O„ฐP—ม9^ูุu‚H๏3oณล่๋xฌสsW@u=ต๖ฤg@ˆอมRฃ@ฺ*5€ะCwoVpิƒjwงสีช?่ย๎{mืนสฺfV|•q\™๎หณ3ฺซQูEAๆ๒ถ<Ž%ํ-e๊ฎNฎ๐ ๋Qœห|๔ว˜7ษZ•ŸZวc…QuXYGŽ:PฟPgU้ฃกล7ื๒bั๒<`ุํb_6้๓ญ๛ร"šps}คUd7ฎ กเ๖๚8-j#ัญหฌlฐu๊๗‰…า Ž.™ษณฦ–~๋†฿NŸื บนŒ6m j•ฝ“b็€Qธ’›ู์’=๔ฑ๛ฐ^็8sมSด.{ผ&บฏo$€@ล<[้ลDป5_AฦT`ปbพ‚ฤ๙‰yพNFˆผG&j›น๐๊ภ๕ไยขDŒz!†D๊OฯŠฎHฦbธโ฿ญแ๚ัwฎ" แeญฃ๘—'6‡a ๕x™DM๋U{ี%Žt†„sืf €•ปWฐn"ู4DWํžLgใV,ย๘ฮๅ๋๋ว?6๗pฎ`@4พw๑lํ]7\พส,พ.ฟ€๑ endstream endobj 378 0 obj << /Length 1563 /Filter /FlateDecode >> stream xฺ•ูr6๐_มท23%Bผเ7ว‰]ง™&ตๅIg๛็Œ๐$ฅ‘แุ ‰ฺ{๑๖ฆๆ๛๖์O๘…ื3Kเd;ย฿-ฮ^ลKˆHyๆ-V^&Zšฤ„ฆิ[”ƒู–๒Mภโฤฟ•J>!ฎ๐;n,๑บล๏โ ›บซd-›1Uผ๙ถ๘่q‘NตMF๒็ปลอ•&œ}X์ธ3มHœQm่รทะ+๖ัำถg“แฌฝˆ&$๚^ๅํxํพ่ ๕XDาL๛3{˜pNา$B;"cƒปไ=4dฺaชฦAำL” KดŒ ย ’„0ฃŒลF เw’๘ล&๏Fูใก”Cัซฅด4Œฝn&–†๊dŒrษ›€3‚ํ•ASฏฦ็ —•|ฬ›ั+ี”ชY‹yoธcฟl‹I_–HP๘ึrY๏๏da(`QโG„‚^&ซPซ้ๅECฉฑ T!:o๒๊y0ร ฟ้์oiั ขt0ฃ#๖/สRi|^UฯฟjขุuXŸิธiงัjD๖ญ/Uฒ1ใ\„๐ค๊.w {a‰ญ๐k9ูK “D •G ำ 6D) c[!ดื†•๓ๅt AฦŒป#yoซช}2‘ๆa๊ำr@๓คป [๎9b๚ค#†ืrหlคแm€4ƒ ฆŒ›BOฒ—๎ๆPดp,OฅN าL>์6ฬืแฃDฤ๑พdก˜รw"€ืŸก›—ทใAHฯA~ฦ฿ฅ~เˆCNƒD๐Bl@๘rƒ‹ฆ พไร่ศใ˜฿Ovž…„ฦษaงIEzฒำ`g‰v^Tฤ„ฅ‡ž;ว๎$Dย}n4รe"ย8หt$ใHxฺ{…ปฝaพ=Oจn๏B๋็$ŠbํŠ&@– ่P”e^/ฝุฃ ๖ป่n๖ฒ0#ถ็ํงฯ_สฯ์ุc@มฺ0K๖3ํ๒๋‡๓#eYB2ป(ะทcLยฟ D…€๑iซม๗0ง์ืพuเTBปJทวุ๊ณ็bต‚ช2]„GFG@[๙/๚bฃFธ<๕yu:%yHBLJฝญV&ก™พข;Qv๏Mุ้>๐ช— e) บ๏ส|4๓3hฏ๚Kฆ1*iK้zX"ฺษ๒C} ุื๔)oJdชๅ˜ƒิ uโญXz(–๙–u่dกVช8๒Ž> stream xฺตY_8๏งศหaS`โฑ฿}kปm๎^;h8ลVฤ–ื–'อ~๚#Eสq2iปภแำดD‘๕#ฉˆE?ฑHส,ณxQ„a—ัขjž๙$ˆณ\$nฤŒtŸฯcฦํ›&^hž~แb ฬŸง!+/{5โ๎ษํซ4^dA™วลโnณ(ส ‚oy–"‹ปz๑i๙าิ๊้*Jณๅ{๕ ีhณกง๑วŸ =๏>พ"โMำํUฃZ+ญ6ํำ?๎~Yฤeฤur’๛p๗ๆ~x๒ำฬœI‰(H Š~๚#\ิ๐ํ—๊^,ndณHDd%ฮ/>ฬฌv†ๅ้ข ส,สๆ†EyP 6l-‡ฎ๎|p…0$๗:OW‰ˆ–wฮฬ2f๓สd9tชา]‘uŽU5ะจึXb๕๊ฯQ๗Š^ฦAท[0ถ๚ฯ‘ู๗๊ศำ:ี๛iด5๑rำ็ัkปIP& ้H ^ื-J‹“tY™q_ู+9 บHดDi่9ศŸk =w๒AeฺัSฬ ภจภ'š๔ 4ฯ๓ู*yผ*หมช็ฅZฅ๊i%ด(<ทฅฦฐสJ^•(EDe๚^U–^`E"ิ—j'-ู˜žน฿ซ™7˜=ศž‡๖>๕~ly๐˜ฅmฃษฌDื™ย.ฺใiก+๊ฟ}s๗vŠฑำ9ƒ0yผˆƒLค4P\‰ฤ‚ถv6๊ ํผ%๒ฅzP=nƒศภ…โuZUŠxn#€u2น ‘๘ูZขร7ุŒต"\~ำ๐9Dฐ๓1ล8า.DP”กw˜F ษ ‚ฏ๖Šb3N‚โ"4Oแ{C(ฑ-Jห@า่ํŽytŒ€ุ6’9ฝญ @Uแ 8 -๓อ Sโโ0กญC ฆ่เ!ฅ[rfE zcl๐ŸมดWv*ษ\ง‘7ไ IฒซฝVฮู D…a…ฬตWf๚ไฟŒ]--=์tตc)ฦ้_Q7Eลp} โ L'MืzE[•„์U|พYญ์^ๅิ›Byชg5md73^ภ8ณFu‰วŽภ8ฝโๅฒโxส ฟt๗5ต‹“ฺจZpE„\˜ฤ“0ณฒใๆŠ8นร;hฺE๊ฯwAr์ีV[†ฑท ƒ<)ฮึ๕ๆAื„Iโ Ÿ่๗tญ€x“ฤ~ฃ‘ ฐvsมnอนd34ซš€ว็6fเ {}ฏv&˜W†qฯ|<ษ$ศ)ะE^ม0ฐhหฦฤธ˜ pj ^jีHƒVีn๘Œุqm“$aุŒ.6e ภr H="ย!ท2Mๆ ˜>๐ผ)ธ7ูึ4ง’€P3้1hฌLx–โ ฒ$ศฒห %๊F\๎ฤ ƒฎ”๓vพ|mˆร7๔mญb๔าศ๖HSู}ฝQล`@Cj[}Qีศ•|“๑@!AษŒ฿ฅRKOp`ต—ฝqX็\{฿šC{ถศเ•”;ณNXkG๔7x ^็Nx%—!ญ•ีฝ๊่; Hป๐?K๒ –ฟ GHฏ_xพ7=ง๊ˆ]9v„่฿{%††!œ ุM —ฆŽ6AœGh i wgb๘Eg3ŸV"ฬ@๔๓แ็สถฎBhpJฬIARฐุ;wธ]น$=Q๋ ิ๖t~เu`้ฝBq6hˆ๛gส๑˜I›‹ (ธ—๚‰๐าเณ9)ง {ำV๛ฑๆ’กค๒ @˜ืฎ| 1เ‰วEœ%Sง^’ฟนฦ>บž YSuฉีเ็Mย‰A้YWRG@ฉฦk๙+้o;สชeๅD Hําัศ@;"น˜Šหm์๗\oƒใLOฤTถ_๖x9ด–;อ“ฬ>›ปYzธg\–_Qy–‰ๆ5ณ๗๐E•ํ‹๋ฑฅu๐ญ_ัV๚BนปฯU2<๖๎ๅOW\‘)็ทŒๆวW;ฅ<ไฦฃ6Zนž[n]ธผนภฮ4 Š2;E>ŒŒNํ€ฏอA๐ฮUˆS/•Su/ (lตSฌฦš[ฏYcี(+]– คLกHบ@ฟ†hร†" A=š‚aŒk™ๅSaˆ_–cœ ผXvr Š6'กฤ๔ฆ!ฆœZพ๙Irม™Nม ใHe๕•N๏0ˆ‹๒\๋ƒ้๏aธศษ๛"'๏;‚๚/ค๙าrธลƒ6#ณ)ึมขŒ)#๗^ฉn๐ไq*ท๎‰—Sฏ]-/๒Œฬu'ๆฑาณซ••(Š™$,P`๒kฮ|c˜โป šภ3ฺˆ"ว๋–ฝK—"ฒฏGbTˆ Nล฿๊7‹ <๕Lšืฦ,ภxs‹ฎ๋bˆ"บD”L๗Pขเš™อ8Xbฑ! ว๛#5ทhท;๚@๛#ฑ(WmลใฑnF.7ฌE8ท7อ่ตผญiฏf6ศhน˜ŽŸk”I—!N๓ ปจธ๑xP!Q@G.Šหปคณ$‚˜ง9๑ี 6บ&šเ)W ฌ eด',ๅ‰’็=9GY ‡๚ย้ฏบeTˆ|S‰5Š p€9wแœFแ˜๚ภ>p ๏›๗ฒข…R>Hœœ/|Ÿ—าIš`*a†Sv>๑ˆล๐/ถzKWnฒำ“x' }ซปLื 1I]EM๏e9วี฿$ใวมRƒไZ1๋ ปŽNฌ1ฺjYfี ’์ทสาxLCDกู~ .U!ลนBAีํ๛ 5–ื3‹ๆaย—๚eึGS9ลŒ ธํ(wJ „yqฏD๐ฅฅย~Gต๕p.K๛ฟJ.ฎBษPฤVผŸ#ฬต?SD^‰ˆพ๕gŠศฒ ห“้ฯ๏P ๅฮwxS—ค ๒T๘่ …+”`Iจฦข XoeตำญZ้vถฌ]ื{6้น๓฿$ๅดฺŠลไH๓ณซผ๘ๆb;kปgททแ—2,รงb‰`ฝ7กƒŒ ;p y;…ทa~šœๅุ๙\,‰ฆK-ค#฿ าห้ฦbg›wt~Tฎ~K็w ๖ปV—‚ฎ๖<สำ&Ÿฅ†SนŒว!อจ,Šโ"~\}P]ืฌ_;(Bkฟ]x๒ฝ›ฬฤ ใnสมฟ|๑๋›—3ิl|ŽฬM๗ตฟห-๏ถˆฯ#;*.C๗ฟรท๋ endstream endobj 424 0 obj << /Length 2347 /Filter /FlateDecode >> stream xฺญY[oธ~๗ฏP+Zผ‰Rž๊\œxฑปI3บ@บ(4ว#X#y%ูฎ_๚{yค‘ไqš์~ yศ97~็B™๑@ฅ1‹b$Qฤd*‚|๒๛ “ฑแส˜Lง฿แ์r/ƒ7อษ฿แ/ ฎ๘n<ผร ๓WW'gZ1KL‚ซmคLภž‰5ใ†WE๐e๕บ)์i(tผ๚d๏K๛เ็อึŽ6฿5~ผ๚|แ'—๛ส๎mg}ูิงฟ]ศิ0ษQ'ว๙ร๚๊๒7N^Mฬ•L'๒[ฐ๗c€บ'มƒ;นYœโ๏ช`=ฑzฝ<เœฅZ‹ฉ…Bณ8NฝŠq&œรƒ/!ขh๕๎˜พ Fโๅi(cตZ?๎7MUๆ`f"W?•๕Ÿ๗}–฿t~๑ฑ้บrSYฟzsื–๕ตŸฟn๖๛ฒ๗๓ทกwLย”ŒƒตืสถฃใŽ๚'N hผ๔Iอณ๑PAสาXฤ่ŽT3a‚ุHฆ8ycm๏m[๖/ฝGเhธ‰ภ]ยh…Qเส๕ฬึงw๐W3+96EเฮตF3qC– pษ„J‚ึ[ผ๗?ฆไ %rโžฆ,J๔/?ฟ}s๙๙็?ใ’ทธ@šd ื0Q,UŠข๎o,5ƒ่Mเฦ(‚t๊cํŸ‘ะง!จQื6ทถ๕tง‹ฎฉ๎ ๚•6-…๎EYั์<ฯmื ‹ผhZPq7๓ฤ๕๛๓Psq$9Cฺ——ฉใ7GณพŽ)๋ำฉ]ึํ`0 ;[<ษ<#’‹ๅ‡}@,›ปฮ˜@6 šŠ*ุณษHว๓ฮ zจeT 1 ๚้pXอveพฃฉKY.%G,ncฺ๒ง‡ู(u์ฑดR‰„บฝ-จาย#l™พs2ื๛ล ๑!๏p‘ ›1ฺัะPŠ=ดiic๐๎GฑM็Pฯ; ŒWv?๚อแ๖ใ!Q(3ศŒ=ฬžฆ"่W!ภf7ฑtŒžD‹4bฌญ.t๙๊บqouœบ"Iตืณ1l๓!'๐ENˆ\Gzๆ‡žึ•9j]Œeƒ(‡พฅน &๛ฆ(ทโ^็ใPรบm๖e7‘ƒB/Ÿ}A‰Xฑุ|ื‡๗rJแ5 &—.OIP' „†b$Hญ๙› ๎)t–šˆป’กกRƒ๏กo–ทแu๖ง|uท}๙Ÿณvฝ๓ุY`ศU—ฟย+A๒UU๛1์xถk๖๖ ๙u๖ๆ๏ค๗Wญ๐Dผ5† —&่ฟ 8MีTLภ1า2฿&าrฉตภxปI6ล–k]STฤq‘D‘z‹ศ*x=oดแบศนUY ‚2ฮmš[eŠจเ2ืEข‘“ุD[เอ“B$ฦTUhะรxจฆ๐8ึุ1W@œ:G๔ e #s˜Bษ O6XnRษAุฆPFq“%<ำ22”mSแ๔ฮคeำX™;,.YŒมBพS @ ™@๔ฮงfxK๘srrŽณ([€ฟeไN„฿ฯh‚ถtฮัฐHฮ9Š#๎๛ฟก’ะV^ศB/e>๙?ต้› ฒU3[5^jL๓bฺจลวA9ม&”ž‚Ÿมy‹๗AMจ")๘V0gž๚O๊l3|U๚เ?\ธ ฐ\S#๏>CีnทY~ศฮ๑!๑5Œ๋'๏โฏIลโ›f๙q‹ไ~]Y>” ๔ฉtฯ1฿dอฺๆwรห๖=๔~ฃฯซkhํ๚นRP็ํfธ)๛B&Ÿง=(ง˜4 YVฟ*๎ฝ A4}฿o;†€2†ฏึ๖:ฆŸ่‹ๆ-วฯcฆ๘๘๙ีO—ฏม9Sƒฌ.ษ๘๗ษลr5gƒH–ธ/เ_M endstream endobj 328 0 obj << /Type /ObjStm /N 100 /First 875 /Length 2321 /Filter /FlateDecode >> stream xฺอZn9}ืW๐q๒6ษ"ซศ…1€ใฌว6ฤู™์ypl%ใDmศ2’๛=ีjูฒ#๋bS #p(vษbฑ.็tw ใ ๙dbDร&4bh /ซ๑้๐ฒKฟฅWรณ๓“ํsฌRI6 ไ_-ฑฺษS ๗36nฏ. ซŸvwGฃ wีA5ิ๊0ms฿สดEj{Gัn 9บ๚4้๚85h^ดใณแธSศ}lšรf๏ุw์rฌฑ4?eถ^c จฉก?"rป๑ŽL๓[๛พ58ห_๖~๛3ต`’ณš9Gซน&&ถEำla›E*p๐นm'XnhKMEฒ…ทฉ!ด^hพ@‚Yjˆร—๕–/bตฌz522ฅีZŽขo%”…หฟ89k<|€uฦ๛ฝE๖ฺ+๘๊ธชa๔$PzWpiญซ8!hะ ป@ิภซๆUะ@๓ษ3wษU [<็eQ์แ"(gฐ‰Z.<ห-pf๋PO.|O"บ•{ถœnb๚)Dช›nbจšNj๙JŒ๋๛ส-ูiQ–A๖ ตdˆk-Yฏ๘ไ.ŠxŽ’๒OŽ’ธฎฃP_‡hZ”Lz์ฏ'ืทิทฑฟ?ปKกoSM๔N,|ฮ๊™'้าz๖GลzๆษY ชY=๓ิีฑ5๋™w๕4ลญƒ•YPโแ• P๐sTดŒs&UMัล-*;Eซง`ฐมIืงํฏลปRฮพXๅ< ์\ŠCถฐษ๖ืQฒ`|pGห dƒ$จ,”แ!>ไUžเ+๚$2ง2]v๐IP•€ฒGN5#dิอ=aัŠ yฦ฿˜%›A5%›ภพภวฑ’Ÿ[ฑ฿Dท‡fwgง[กู=œทฃๆจ๙็ปC๛ๅฯษไโ๒oMs๚}hฟOฦCŽฟ4ฯjฃ.Fะ‚ภ_ฃ.f‹Œฑ1๊ชพทaบ šฤq๊โฌO•ขฆ”ซBVkต.žๆ๗๏฿oN๓ู“ชIึ๓ฒdJ๋ไฝ@u^(฿f%>”3ๆ[3ฯ€*โศัV„;LB6wX๚1฿ๆ‘Ÿ1l„y(๛˜‡{ฮ=๗ๆ๋Haค.v Hห๚42+ะอ@'@hBv’ผ8M_ปณัVฌภpVฯ ˆฌฉHจจ –่sZ@ˆขฯ‰QมY๛1กฒา E่1 +) ศึ้ำ๐Lถ{จฯ1!<ถ€LNšณแ็๓ันส_6ศฐษ9๙๖๕้eCู ’]Aลศ&ไB}qฑŽlผี๗5๋ศ’BพP๊%ทmไณโสgนิอgาs.้นY๎๛นๆ˜๛|'=gห3นYฟฯƒ9ืฬ{3žBMy‚ฅ๊@๐–ลษๆีแ๛Wแ1"$๖ฤ(๛E\าw6๗ยใ9 ^1฿E\†ัฒพBŠˆ3}‘หฎฌR„*š\ัO฿sิ ƒGๆ'๕p˜…Šผ~๓zฏ&.จ= 6N@๚๊˜L“WJฌฤกH๗ชvฤม็อxจฏšา*ท้Kกฑง!EP?ัปp2งฬำ(n๚ฯ~๚ฺ~นผh'๖ดึภSใคตฯั๐๙๐ว–Ž;฿NFg่Oฏบ๚_ต˜ฮ‘1 ทษห Ÿเใ๙โึฏ๓๓ฒ3างฆK0ˆEDf^8๊kJ}.เ;ยฝTv เH9สrูเ:hช%Vh<ใ<"ถ$†0C8หšยJฝc„7~gชฉผ๐ฌใŒ>&›vเT๒ี*าล]๘Cจ bฏก~ปะต๕m่[๊ิทท8?็๛6๖ํ้ทำึ/GkpWฌ~{คC”’LApๆb ี็ฉTfชงf"อ 4ƒุL€ฒI€๎/ฬIo฿~จ™ณh‚ ษ:Bq ี -‚bzH5B“VjรV๔ำ-(ฝาJZ ^๏Udะ>ุงฬJ Aˆฒ{ฦ}ฯฮ9CpEMhšโ!b"d—™โ่่ ช18`ษrc ž–ท5!5QtซŸฐe๘#ฑ~แf“๋’2v1 8:ุ}žชฒ 0่๎ใผdลuืY๕{3T˜ดาน>Œ-๚‰– +ypst•ถ‘า จ–YŸmฎo…—(์š็%$เ%ฒ^โสm^‚"ผนj๙ มๅำวิ endstream endobj 456 0 obj << /Length 1785 /Filter /FlateDecode >> stream xฺตX๋o6๎ฟB‡+5Zq๙~๘รกMrNS๔u๕8 -”DyU๏J[Iฮฦ_๚ทw(R๛บตฝNฏ4ไผ๘ใp†$ม๐# 7aษ1b†&๙๒์ฯ3ฤค"|ฑC,็ลำทK–ผnฮ?œ\รว7›!้(;rv6ฝ,‘ศ(ฆ“Y™hƒ(๐”ˆ(’ฬŠไืษซฆp็)r๒‹{_นu ›2<๛ydพiยs๖๎2o—ซ…[บบท}ีิ็ฟฯพK˜Qˆoำ ๙งซูKฯ8๛๗lว MผกฟŽ“x฿%vฌ‡‘ห„‰ค๑๓ษีŽืƒc'M˜wL1dธNUศ่Tsฆ— ๘ L"ใ|ดtัฎ?„๓T02!แqน๖"*<ฐˆธTN/5฿ีมฦf”aศž1Qฦฦyฉ™#L(็ฮษคฬtV”Dpช.ค,`}U IฑใXเL("Š\ณ’[CAŠ ›D€%ฝส)DR%)AEG,I™kตNRƒ$ ใ˜ฬษิโ‚ฐ\Z”4ร%˜JtA50ุ›ำRฒฬ0’\qขฌg+˜fTูาPUXๆะ๒ฎฌ€ฑpGขลFD?-ธ”ใ€๔_๒Rฦ4’;Hฤ.0ง๓f้ฆรฺ‘ษดs7ญ๋ƒ@บ ž`ฦฐNvง~วฑqvุฦฒ4ŒHŸ.hฆf_ขB˜E‰qฤ้ธNuฺฆq\๓๛q$XาI้TI – Kรห\gV YยาfRCSฅ2+™…6ขศรห€‘ภ+ฤlrBฆ$`S= ›นฒ•[9์ุŒrภค3 ซ•e\! a‹pฌ2œ;ส4๖{ฅpร๘<#าา’3‹สฆAภ่?<QK{, JH\‹N‚$!#%69ๆHC๖ƒ}€8Ž๚พ๊๚ชพ†œอู„#rŒ†ca;‘ ค๙ฦ๊o๚ๆ7>อฟบhšถ‹้พ9,VMW๕M{wGl@2•1b€\ ็Cš‰ เวfี9์X>Yฯ] 1๋ไฝ[4+ฏฟV]เๆอrY๕ม}8•<ฃฌ.สŠ฿๔dัไvฑe‡ฟAชŒ˜;๖Qฉc›lฒMS@d7c์นฅ5าFŒณ@6 Zึี"jฮขๆฝkำ˜ข„B’ˆ ภ๖่0w‚_>>ฆูมกvEx๕๎ผ่FV ๓๚๎โVHƒธแOมึฝซ ›“ูœ๛yวG๐๋ผMฏ›ด‡t[^5ํ]ืห;mt€่™๖ถฝv}๗Eศ6นํฑณŒY‰ƒ๏ๅ\๚จ๏ํข*.๛Œ3<†๗D„@๔QลถU .ฌj ุศuV>^นGอ‰๑โŸๆ`tฅon๓y๔ขทืฎ˜๚Dผ๚3<๐7H<Aทe lQโD+โบห็ตขซํช›7'ฃX=ชj๓พtzัAAvฝ”ุ๐ถฎ๚๙$U ๗I๎"S2Rฬเศk(m/Xฌพฤ๐ศwณWงzฃŸ7˜}ต–]ฎN]L๓คhnล“ ๚ิp๚‚ษ‡“่ฝp๒“รฉก0b๛แ$๘˜?aเGณบฎ`:z~ชEไQ‹ฎ@ษรx†4‚ํฦ๙ฃปฮุว,‰KM่็Šอ ˜ฒzZpุ“‚sถักั,ั้n‹&RผŒg?้พŽ๋๊ž‹v[#nุ„ฒ๑คีฯปšกฆ:9Z๒QํฏถEZLž;ƒฎผ],NwS}š›ฯ\U …ŒžVญว"ว—ีC้์จ๏-™H๙<ํ1 BฉAสฐฃํฝทฝC๔zแ๘2>€'ะถŽuๅเฐง~Š~บ‡›,!งfฟหšอ}๗Dœฌ›…—l์ภ๎vับช†ืUใ๛‰สทN+l“U,ซฮ๖p!hฦ>lZตQอาๆ๓ชฺ1์ู+W!4ภl๊0k3}ีบะaXฉƒฆสข๒งi์u ืๅm•mอ`๙QhชโlJ!ztEวส2”มัก"~_@Kป1ฬF๎ๅ7,›6˜ุ-ณfQๅqVU฿Œต‘จ ฒฒu๔MxfQ8ูมˆ88ฦ{[‚๎ตขLKD˜ู\I๚.๖ฑsิ‚๖bิAZu่บ9าrŽุppศฎcYล็bZxม๑สท>่>k๗!"s•๚n/–Sะ)๑p&ื1c—“0uzๅ๒xผฬพ$ม–Cพ…nฏ“‘eหwไฃLGW~~๗๒๛ทฏฒƒ(ฟ›774?ƒA-œ"{๗ฺTอ ศ›๛n endstream endobj 463 0 obj << /Length 1980 /Filter /FlateDecode >> stream xฺํZ[o6~ฯฏP๗d1#ŠบvุC4mบ๋bƒbัถPYt%น‰ฑ๕ฟ๏’’%Gฎญฤi๗0ฐ(^ฮ๕;‡7Qร„5์ภ%ฆห ฿4 ,cEAฏ>˜Fmo ”7ndฯนaS—ธŽKŒaM๋ปดฬ€˜&๋BK'0 ›>eh‘ภ๖ ”ฐWฉ@ฅ๘&rA)›5—ฏ€˜็XฺคHŒ:„ูvi‰ษ2+JZใjเ0ฺ๛ำtฬ‰fa#ญ๒Oฒhิ\Vƒ~ ิ›ฤ ฎ๒‚ฯ๛ด7,Dฦ.ํหฮใŒ‡ฟไ qฝ฿",fšฅ”ŠXŽbูจYณฬ‹ Hว้t“๕š’๎ ษ]-DNPฤใฎฒ๑,ูvนฦฆ Oดw”ๆxสG–ุ๊๐"ณˆๅyฅฃผ่๊ซง?ทน†n o„4ซ„ษภIงq†/(ฑ’๛ImZิะโ)5|%$ป/b›บฦ“6มมึ‡ฑ8๛โcgฯ’คฏร ด‰6[Yก#?ำsœ64ิฟฏOš์cZ=2“6ๅ้K I๛พพด!-šA้หŒห,=œฝใ†-75ัฬš8;ƒ๋หพw๐ฃฌฑ๙ฒ&เฒเ5$jถ{4GณmิHถซฑ ก–_ฒ=9Qถปxv๙‹*ัง๊yส'แ2)๚5@Hชๆ&†PQูC$‰ธQๅ|5ฟI๓,‡UUพ7ึ5ษyธุคxีA,œ่[f๙Hเ|Vธ๖ฝfa>ใด‚E[ภXNฅ#ํEa’ืRฤZฤ?h%RO๘V3|\ยฬ*/๋.ฌึ…ยŠพZL?๙j\[k4c‘šmIื!ฎ๋Vณ|> ณ)่ฒฆ@[‚W๎Bๆบ๛,LทญJŒ_™ฌ•ฐค๗+8ฐ “R6'`*้ปŒOโrE_ฎ“<\จ“ฬ5k}(ค็๓“6Xัถๅฆ–ณฉตตd_vZฐ,Ik,ซ‘ภํฬw…ฌžlCฌNq:ีwC็Pqผนrํ’+[vGNn{ˆ}˜9ุึไ,์[ฃฦนฏ)€8lwชุฒ4Wฃ›A็ถ]ำเ_๖Vห{Lcp๓ผถE๎๊๐iฃ๛c˜ ๑’40บไำeฎ™utฑX.~N๗มCp8ๆi˜ลธ๛ffะป™๑T7ฤำ4„‹๎Wฬ2)%‰rE$,–9๔`u‰Žo„*|ไ+ีGBQต)็‘๎จ๛๑šึ cˆ6@ ญอ;žI์5,,ยฌˆร$YฉW”Ibฑงฤ sUsร๑JKeMEg€ส€ฎ๊ 2žhาa)jศƒ๔ถKั-™& ฎiฆขะ9ŸWk”š"RW๊]s๕Œฤxนฎ@V•OeH(dำ2ฮไ็นชมด˜9gฑฎZdbฬ#ๅ)$’ฉ'ฟUฆ#hb[c ๊รขวUน"!๒<พNx›a’K/98KŽ<4B๙รlฅZยข4Zฉึา/ุ มแศำgUuอว!ภGUสจX/ฅ‚ชTจ๗บ‚ุSWg\๊กท‰^a˜”ญ%ี™~งc^~๋ะซฌใh9เ)]‹… •™Tsช‡ ผฐบ”ฬ7พ*ษ9bชXฉทYจ _sฎid ฿Xš ‡ B์Zp3ุฌŽS&‘‹—ง็๏/ชTS๋ำซ21น›/ึŸษ X@aญJก๓…ถู6URœ†|ฌ?Š™_ฟ–„(ฮ.†L฿eQฮƒ ้š,ลฯcฌR‚w๏Ÿฟ=๑51จ‡๙ทš8฿…Sm5๊6?าฑศ๖ดๆy‚ endstream endobj 473 0 obj << /Length 1105 /Filter /FlateDecode >> stream xฺVmo6ž_A๔“DฌH‘`าdฮ\u–ธศ€ฌ(™v„Jข'ษฮ ์ว๏๘"Yv’„งใ๑๘sGมAL&8Jb$ขว’ขผ:๙๋วIJ˜ต‰v‹๘s^๑qZล่JŸZ๒z0 {฿แศ๙ง๙ษว Q‚e 4_"!1…ฝ4แ˜คอ่1ธิ uRžwj[จ'๋ฅ[ปgฟyญ::qยดZ—ชRu—u…ฎOฟอ?ฃXฆ8&“๕<ปŸO'fใไื๙(œล\๔๑[„ฐ๗์ฝXห 1’เDšs%บEฏ.@‚$– Mฦา3B † ฆ˜Z I๔’(Š‚{]n,ฒ8ธXl‹\C›ทฝp‰B*1‰s๛#pJDAฃr]A"ญ๙&Aงพึ–บ,๕‹“]๕คห"wฆeQh{ฃฦ ‹vบ)”฿ษ๊…ณ^eฏ+jทบ๒Xkpl‡Oร8ฅมฃX7*ดล‰€($ Kฦ\[(žฉฅ š,WNสuฝ(LFฬE\‹MSิ+ททUMฑ,r[๏3P%€อYฝ่ๆGึ่EjฝlJ/>yว6+vkฝs‡<ตไ๛€กhญ‡ ชCงbๆ–Vๅ›ฦณด/ูส”z>-@๋สซ]zฎvาZ5PŽ๊จ6๋Eึฉwฺcœ0z.คK"๎‹ฒSM ถชมํฑเมฆต้!™Y$ินT-๙4EwR–็ชm|q;hบooล˜ลล8!)`ณภฤydี=gต3”|dHcLIาทณn๑eฃL ^ปdp1,s๐fa๙ถ๛Hl๘pๅพlบhšb‘๒รB๖>S)ƒ‰ํศด๚;3“็์จ#๏ๆ3ฯสา[่7"#) 2ŠlถV๕ฤค๚ul†“ฝmปV9tmD็ฎ5ฺŒ‘x>๎าฤs๎DLล?3ํ”‚ค ดi ๙(gภ—ธ˜RR`JDlวŒ๕1ŽA>yLี4nPb7š:าู!jŽœr> stream xฺตX]ใถ}Ÿ_แว 0ึX๖พmw๏ดณ(บm'E/ฐํƒโ(‰ZวJm9ู๔ื—%วฮค[เ^yˆLQ4I‘GGๆA?คUฮข< ส(bI๕๎;–ไOญฦdhงธ[็ฯ๛$xฏ๏~€_lA๘๕จzแฤ๘Wหปวง, rVI,7AYฑๆŠ…<Šขลำ๐็ŸKš,–ฒ7ชข–อXลช<ฮั^„Iยฒ8%S๏‡๕ๆฉ9t๚7Y›z๚oสi ฺ#š #ื$้eฤชqห„1ขฯtQป‰๎€ฤw9็/๊ะ ›™l)e‡ณ*หbMฑ2*วฤ0ทฉก๗Av>eg+ใfzโŠฅeA]F‹dtุ/นิ`ณ"Oƒ„ๅ<งUี ร‹๓ rัR=Y๔ท—fง1ฏE๊†sƒั{—ox์๕ฦœD'g.ฑ๛0ษ๘โูิ›zฟส่‹•^ึPๆLOวกie'B[๛aฑ(ฎ‚ŠฑJ]นฌTฃŒ’๘Š2[ˆvM ;ˆK(’yูiูuบ๋ัOPxืˆพWตhšณณโฒ•Nฒ'4^้๋^๐:ซqษขb์O0ลก$x1ตDu๓ลNtญ์๛v๓œeIๅ)/Aen;ฑงxอNสW’ฦ,Jณyยถ3j0c ก…ƒมaB{€2ับ๔ก๔ฒร8uRfGr"(ฺ้ƒ7†f็:ตJ๊c”ฏ†-&;อหลฯ;ีHาชงyG5[ ่y4wY ๙˜cดI-Vmj”ฌ๔g7ีŠๆ+งH• h‘$ล%มธึkด๚$ึโ์ž DูาŠU]จ SmoบaRB๔FงW๋cxหkศ๒ึขH9๑.ฮ*จ๚zืช?ู?ะดTฎZaru&Yญ๗(mคrโ!(ชVtT๘0OxVŽห‡-ญ๋s+๖ชv๓ธ๊|หWA(zW•Tฤ2h‚0ภใ‘~ถyฒp4TฑT ‰ใ>4๒|‡ ’พpJj/iจ๋_ฑ๊ภ=ซJเnNรฟ‚ ฐฑŠฌ‹`Š<]เ$/K[8๘oื๑ฒXœt๗;‰Vาๆg2[ยŽพนดืCW;E[svdŽZx€ุ๑‹้p๐แ’Zฯร=x&ยญj้ฅ๔ๅa๚Lํ ญ@~>4z eบmฮ#าB:คu ต๔Gn_NW๎ฆ”แH~ฎ›aํ็ต<ศv-Zy €ฌ=ฬ9ฐึŠ3๛แๅใw4:ˆฎ—žฅฑฯNB ๅ•บฯํฐu|v€W.3˜–‘ร}uNltำ่ำุงG แภ ๓yZ˜^m6kk”h0ฦlย#เแ—(‹&UแลkทชฆงP ๆd๋`:k่qNL{า~fx |ธษ*ุ–9๐:œกฝหไุO๏,เ!WavY•xปƒ)๐CRtฅk1(…ฯ๔q=%@Nฺ ฒนีต0bถ–^P-ถŽfจJ@ถฑฤาพพฝI#กn๗ึ3lEจ๊ฑ v@Q€ำ"ฐ8อ็ฅ๓vฝVธIศU่ึ€จ˜GPHzเ๎พ)ญะ— 9˜15๏รYปO<๛ี7ึ $…e`ช~๘ฃ5›Nฬrุ๛~๛งฏพ}~๗บ='๚~ฬ๏จ฿ป๛GพเๅœŸฦๅ๕6‘hž endstream endobj 505 0 obj << /Length 1944 /Filter /FlateDecode >> stream xฺ…XK6พ๏ฏะญ^ ’Eฝี[t‹mณ.P ศA–(›,9”ด๎ๆืwค,9J 8$‡รแ<พY8>„ๅ‰็'ก“๙พๆSž๎พya’Šˆ8f$m sฮ,lOก๓ฎป๛~พs€ล๗‹keป3แovw‡8t/OรฬูีN–{์ฅI์‰T8ปส๙ธyU๒ โd๓A>+yaบซyŽf๓}วใ๎ฯ&O็Fžd;ƒฺ๊๛Oป_œ0OฝP N$๙ทงใnด›=gR"๐โL ข?๙N{ฟ8จ{ๆ\ˆ๓ไD"๑’ฯ5ฮำ์ีvไ G/ใ`ย ๖’$g="/๐Bารt>บย๗อ;UืRรTัภซขp๓0~ชฺr“ํr/O‚%๛Žไ^”ฅ,ty4ŒาMmŽาไา้ฯ=“๛“G–ใ0q —މสJโฉZุีศ@wะ!tY–ชV%Ÿไ'€ž"๒๒(b=๙„ศ7}q2”jฯใเปQ–mvvปP'&Ž ‹แ๋y:3ฏ๐น๕ ฯฌฺฅ์ญXฯ…๎๙•(ถญฬช๎€๓บA/Bแวb˜)ธ๒ซ.Dฦๆร2๗7Xสเฎฺ๐uGฦบ๊า`ู๗.ชixW*0ๆU-ฯZ๖ไ†™x`V|.tญน2$หM†เ•7Ž[yJง9w๚๎$‡#ูงm70q‘MใVฒVญฌx…ฎ็แย๑žฝ$€ ูZdโ™)2qRFไHฌd_jตท7Žฤ:]ZwMำ]ฆ๕~็วeFAฆyB9’ูmึลt๏e+u1H๛@๐๎’ ฿ภ{b–ฌJ๙0šg,อฮkฏy เCโฝซRฯช‹ฆy10wk^V‡ศƒั๓ฦ๘xฆฤบฺฦืแชฺoปไ‡ผนol†?ๅE๋๒tัอ[Lp๛N›'จ๚;ฑใ)P(„…๛l ก€03X‚ ๊dจโนPMฑo$ไXSฺ gตDG`ผข#ž:˜ยศ\vcS๑e{ษ{“we๒=๖\ฑ x฿ฤCๆำ A 7Hr(,โซpTํsืHF6˜ฝx|„G๋ึvBฟฯ 6ฮฉมx่aฌฟAzคœ 6ฒB*0ฯเ๊` ถŽ…‰kBพžหQ#‚Tรดโส !10ฒ&w?ฏy๏ห/mี\๋๔ิ—ฏUไจšมUญQ;šฉ„)x!ท]85๎a๔Mg{ตG{i˜/ฬ!Vฬ‘Aปž.ฌม๐^<eŠปใ~n,˜mฃฑG๔ำฐ|ฦS3€30…aฌuw2œV)อV&๓ˆฃํัu6'ฉืฤ-ญษ‚sh๎ฬu๖0๚‚@<Ÿ/]h4ๅ„พ ฌ,ฒp๓คธ …[g๛ุซ“ิ36อ$E^๎}nฃqก/I$kBB…†’ƒไtbag+ฐZ–ลุห๏๔๔๒UHย˜ƒ8ู]เ]นณƒYฏไYถะ๘—/Xแ“ุ่@GฎUf”็Hp ข5ทื8™g?Vr่W๋7นyeQึŒJkY๔ ฺ%tโอW๊M‚| ฒูึVฯ๋ขQ_-.›ภ]๏ฑGƒEคŽ„ฆ5ย% ฅ-ึYฦRCyeryc^S…0‘รRc^€W๑ฦใ„‹~#็„฿ฏV$T"žจ@™Š4ษMo‹๘3MU Fw่\I๑๋S๐ mพผ&“ใ-UI์<7ป็QCน6{l๓มต๚žพ)›ŒT@๓ฝcด๖?ฦี,หยบ๖E๕,Œ๒๚‹B$‰—คั๔…ฯ%tM 6๓ศหา d^หr๋)0๚‚๑5ลห„แ:|fmท๘J๏ลf๏Aด…—Œg€=YCƒ*กแ„R๗y ต๐M ฦz +XทญZ5\˜nดr๙ถิqบฤ๏่่ิyPžฤๆyC+ฌี๐ฒEGl65-๓zƒ€ื‡๓•๗W$ุA๏'i*ใ๛ำg~๑bฅŽ%?ุh&VเฟO-{ฟ๙ๆืวททฝำ\ ‘โฟKูt 8˜๙2v‚์6RVo endstream endobj 524 0 obj << /Length 2073 /Filter /FlateDecode >> stream xฺีko6๒ป…ŠจT\Qค^๚กMใิ…{iงw@ZดwWต$n%สŽ‹๘r(ญดuใ\ำรมฐI‘ร™แ<8Sว‡๊๐4"~ฤœฤ๗ K'ฏO~?!,Š)7“ฉูข๖œ]Xœืฬ๙Nžผ„฿Yรโ๓ฤp{ไ฿^ž,ฮBๆD$Yโ\ฎœ$%์ลQHhLหยy๋>•…8๕‚0r_‰๋Rเ\ฎpTป๙\โx๙ๆ '็๕ถตhTฆJูœz๙ƒรา˜0ชy2˜_ผพ8J†แ ๓ึฃพ๏ปฯšยSาƒ๎ฤ™{ึ๑Gูฌ๑รˆฦต๔Tฟา็4S’FAคiyภ-M/H Obค๕/NO=ะฃ‰JไJ๖Ÿœ‹(*ค๔อูลถ๊;;าุiŒง$# žXก 8ฐ2๛ลฌ๊$ฒ“gUฬภ<ั?†mหiึแ๒jธผ^\ตY-nd{…{]ูไwJeG{,รฯm+ฏEƒKJสส„GFเิฃœคœ#g7›2฿ ้Se!:ZUโ]น,ซRโBf“าBไฒ้พv]Yซ\Z+•8bฟต์”ฅ)ฺ•l๋ฌฑ฿ใฝกฌ:23cb;Qƒา“$€๒ใ‰zะฤf&๕Zจ~{ุ’‚tฯ’.5็@ย]ษช’7จ ช08ฬฮQL๒์Œ๐a?หsู<62ใ€ฎyฏึXภ/…ŒูถYฎสยi ๊}c-ธิ๖MฃkีZŽงz…Wต†รwbYfv‰RปN‰็7ฅฺฬ฿–kJษั#ŒSx"ƒ‡ผๆ…H}ธL(ำขŽ0œ8a“„ZฦญๆHบะว?ํฺู[yฅm!eN ้Sใv!aœž่ณลฒlfฯ|f๔={ฦƒG‹…Vืึฅใไ(๎ฎ/@H!ฃnถUZ(่ทEฆžs2lฑ‡ำ+›Neี)u+ธ-ฎ/๛R/ž่ภU™UธพฝUู0ฏื[I:ปธ๏ฆ๋าRั๏€ล[vฺช๔ด*—k๘ ˆoฐieงŒู;&ศ8€lหwเก;ย'ฦ}Œ—[๚YปH‰๗ฉ๔5–kuๅฑสโ,˜ 6"ฬO9}eAุ„B$ƒเg๗CL|6W‹ŒฏงZซ!%งด๊ฉช๋gUP?๚ลฝg=)Jx,จZq0ซฌฏ๓X ๐ู สฌฌบ๛C๘ษ ตช4ฯp]-€อไUึฌ= ธ ฎE?1™ญผ2พ>๗~(ะซSN‡;ฬZYO9)้จนkž็ /Œ6๚d [็นV˜U๏.เ[ฬVŒ ฯu๊ณงƒๅ๋]‹ถƒ”๕FdVฤ^C฿w˜ซ‘˜6j"ณใy Ÿ\0เธ’hธแ^sH@uƒฟPฦ ๙rฑ@ะ6)Sฮ“์ ๋uJh๔ /QroiLฤ่แ|ˆ๏#m๒ึ=z<ฏหfŒ ƒ๔?ๅ๑ศะฉ"๘!ฦD~kขP๙้ป1…ฉ1ฃ1‰๛A4 >lx์้lt2ำ–yUลวงคุt/ฏ€ '/Ÿ๘gตn${gศนcฮo`51wี๔ƒ=๔^y‰w[ูช=‹กๆpชcvŠ8g+ป(~q๑๓~๚โ ฤณ๓็{X>$pฟทญE฿ตฆF0aŠู /วใPัรมƒ#ั&ฺ# ิ™Gฯิแ>T?พญ~. ง+TNย'cบ;ศC’๐IวBW„บbร‚ึLCีทM!šผ๓ผ๏H9 žภHภว‹ภY8ญจƒ?ฏจmsฦฬ‰%ฬรปuถ?/ฑฯM€c„ ฌบวŽท)ฌ^ฬeฝอTนฌ๎ไžl-pW;_๏๚`S„mคE’]C"œ8ส—ฑ๒ๅX๙~5PญฃgLjl์g๐าnQš Vt๐aš"ฐeš"<ฺม๖ภli…ภŽw™ ๏Šพ^"ˆํŽ`ปHocOvŒ็฿ํX16ฦฉiYEถพf‡ZV๐Zยป๎MเjlE๎จฮร„๘`!ฒคิพ฿ ฝตb+ปRษึถŒฌ่#7oEฆ†>ัค)2m!๑.ำํฬnึ•zOอ๐hs0บ)ct_)#ฑmเ าเค‘ะt•v`๖๎Ln‰w฿๕†€)šฺสLO&]" F[M้#=้uTวsาAใl+V๎ีญnภ6:u–ตฑKซาศศL[YฯX๐งช8า!๊๚ก๑7hiชFm`8ํ•ฦ$dcฏtG^(ZI+ฅ"ฟuัO ๒จ๑ัz2{Kฝด4Nง๗พด#“(ๆ๓๖…l3Ž ั”“"ฉ้„ฯ:ถณH•X+•˜เจก6Jmป'‹ล^ฑ^w!่p1้›นŽ๒{อโq‘ฦ„†w=๏า/๛2ฟB5€OW๘~์๑’?ๆb xl^ูNณ๎*\-ภตNฝˆนเ_ ]#ทB,ฎ} .z$จLฝN]aC5I๙ค5oB”๗Zไถ๓X/ฟ7ฉN+ส‡ฉษ.B>AK๕7ฦ ๐ง7฿^œ?oOู ฑทcู“ ‘๘๓.u์[็ฉ \ฬ endstream endobj 545 0 obj << /Length 1932 /Filter /FlateDecode >> stream xฺํห’6๒>_มฝi*&Dเ+ทฤษ8vc;ฃูJ•7ŽIX“„ ’#;_ฟh€ขฦสk7วญฉ)Fฟ_๘ใ‘ฌr–ไ"*“„‰*ึํีว+&๒‚K‡1บ+๎฿yภ๒e+ข๏ฬี;๘Kข_L(q ฯˆปบZd"สYUˆ2Zmฃฒb)yฦxมฃี&zฟxn6๊:Nณ|๑“zิ๊H{ณฅuุ๛ห†ึี m^ถ‡Fตช๊A›๎๚—ีซHTer”฿ญ^เลี๗ซ™:“)หJŽ‚พ%‰6p๗*Bูห่่0H๒œๅพkขป™ึ_าJ*–$โฏะrฦฉ’HฒชไSVษ2สA ™ๅคwโพห›ขŒ ฐfย๑ฯ˜2h[o›x;๚๋uœ พˆ;ฟjZืฦโพซฏ๙โะ๏อฐ๔ื†V3‡q@„ณญ3+H^ p-็Ldq[๎Mซ–cฏ,P\~ss{hฦ—ราชƒ้๕ฦ~^rfุฟ{DŠi='ฑ3ห-‡qn[ —7้L1ˆ#’2จฬฃˆ ‡Pœขเg&ผ y‘ฑ2-›H Jฌสs‰ผS‘ฒTๆQ.K–ใทบtทƒภ•b!Y5 นqz(A9I ๊+ ๔๏ฦ๖v7เ^$s@ฅ*iNึฅ8zK V F฿๔ืฑเีBwzะu‡4q!1๖ฯเ 2ส3„ซwบ'a‘อh๓ค-ฆ€;9๖:ๆ‹nR้๔ OXYแ๑uO,ภๅ’gุืมฌ๊วf๐ญ5-มI.ฉO5&๓ดbขฬ"มr*PvA…*'ฐก=๓\บ^‡r^ำ๒ณ๒ย์Fีด}ิvk/Y[ฏ๗บSม— ฤoสYล}ตนำฉ–ฅoฐ๙าญŠ‡๚pฐจใฉ"'#ใๅญrฌ2Puยcr๘—mฝจž\พบ{๓ฃ“:9wมกถฝO๗ฬณ•9Bนๆ&}าแ†๊6"ีรPฏ?ด-ฐW(ช,@_ย L้=qe= ๕้ ึd8ี†ฐทf์kŠT[ฯ๊๊ บญi]อpcŽณPR?.๓ zV ‘ค0ิ6ฝฎ๖TF>“:ZUAฉ/aฒ๖q%LฮLœฝŠวเhFg`‰๓ษวQSญMตป๙b๋;x‰C๔ศWฆHyฉ_8&Uตจ75t7์๐`ฟฉ๚๕t ”้bง:‚F ้ซ<ส4ษ$8พลภ๓F:ๆเD๐LrผลงสzVฮBสjญ[@พ{ฏ•๊ุี๚฿๘fำะ—m๚dj|eอZ๕ฝ๋,ฎํ๛0sMฟ๔y€–,า'n)x่–p5‘„ฝoฐs‰‰™Pd‹พ&่–ญwŠNงษยฮ๎`ผ๋้~๐ฬ]ีตn๊‡ฦ?–"ฉ็ึ‚`>h‡ฦมบ๕;็Gธ๏XX]ำชgุาฒ๔p1KQ‡H5NHู๊ฃZ)ดั}มaะMC8งEvฃuแ็บ{„ษK๏‚ฆHฒ๏าเb ชเ‚3u–-ึc?็~ žึ{—pแ์“…6๔}.ƒ– ”ๅฐit๗AYTถ*oผlˆเ‹R T `˜๐g…uol|Iไ‡ฺ}M -N‰ ‡šL›ฆ7ดNญฦ˜{jฤ™้f*ร”ูHศฏGี4žยqฏธ๘,x-ƒIอำ}"8๗ฉ‹&๗!‚๙!ฑ€3ฯ„—ฎฌษ0/JŒš%q\ฒญŸ–œ`6”ิใZืVA๎ำพ5ึ๏&…ฅœ8Œaˆq~แIอ๊<R7 ใ—๔ฺบU๘ฝฦฐว๓ &ดโw{<ฯกวปOะู„"ƒซpข‚Ž ฯ`สฟ†9Mf%ƒqส<โ~ˆ‚ะทกXฝ ๏;t&ฮZ๚้ uฯ๒สuซฒ๔#วเง||งึ๗ฌ๖แGŒภ2 ewQุไศส๙‡ฒ•†ษใํทท/Ÿ9Yฬ๐ œ…ฆ์-ี=`›๒๓Z–O๒L Aฬ endstream endobj 451 0 obj << /Type /ObjStm /N 100 /First 870 /Length 2136 /Filter /FlateDecode >> stream xฺอZ]oท}ืฏ ะ—ๆก\rศ’F'ฝnR๔#7NถFgํ๘ฦ๖ ฒTง๕=ณZลRฌZซdไAเrwH‡‡g†CEbใ {ฃ‰$&gษ๘@(ณ๑)ก,†มF้Mp%™ภe0กไQ xQฮDํ'zรA๋d8ๅ๖›ึฃั:›ไต.&ฑŽK&;ิ™w.Œ"“๑>โ F๑T Cตจ}@GrgOแิ>8ใs„.‚O%Cฦa‚"xจ*WแD˜[ฃ}QŒ่š'}ƒVญ~ ๓ฮ:VІJ>‰aจอฒ~ส&๘เG1ุBิr!ULปŽ?&ํLิPXUUyผ)A;Dร"x‹u%bัEFฑ0Iี, cy}ศ†EZAร™๔ฟำณรpฮA)—๑€๕cเ@te๏Œxฌ6ฆ-@อHป"ลtU`ยขธaุT8์„ รaีEแมXZaลXAฟ)ฉ’hUะด5ษE‡Ž3Iฺส™ผ๊็MR{ณO&ก#<“’ฮ ค1ฆ˜KjกLX%VดาA€ †ar„ ฤ็ศ่+‘uๆ3วึVx(ฎEvฦ4๐๑๕ zN่žศIชไ’่เ`T}gNนฮผ0ีoฟfา)e›€อ๋๙ๅๅซัท฿n–- ูlNก—,TณŒ๙ ,ฬlนดหl&}P๘ถb&›ถt$X,๗‘ํ@m๕’%g9m1๘ว*tฃ 6l๋˜<–{ –#n1ฑG‚์Kฒ‚F{ฮฦ>ƒpJ6๙ฝ „ม Ÿ.|ิ\ฯฬมฉŽ”๐มmณ#ฌ๗aYฉ{๎* e‚Eฅ%ฦe›ค_~฿ฦฐlฃคซถIหŠ๚ฒE(T๖ห๋ืง …ž]A!w๗ํ๙ด9=ฎgๆฤTฯฟ;2ีห๚ฬ|˜วหฟ&5>Œฯ๋Q๕sชฏg7F๙อGี‹๚ฆ™OO๋›ึyตฏ~ช฿\Œ7๏อ‰So\ุ\ธศๆ๒ ฃง่ฎย/ฤฟŸ6๓ ฬะUฏฏ pข๔฿jจRหjๅFี๑๕ฌญxqnT=nฆo๊i;ฐ{U=ญžUON|[QU1๘N[เค)8”ิ๎•ฌ๕H6ฤนรึHวฆ๚พyู,๚ื—7ณ‹๋s{:žฬ.šk๋ห#5 ๚ภ‹ม.Iq;ฉ#‹ต๖„๊fm&X KyU&s:^•%)6$๕|มฒ๔๑่hKฌํ‚•ฑKธb๑ร‚Xเ ,Bมฒ&ป๔lCฝdฺูRสgโJƒ>แ ดg๔ค๛่ICฃg1I ใeY”iPTQโ6“ศึ“ c šŽ6xฺˆซร็ฯ†ใ@*"บ“ˆq†-ษ„ž0l’ผqงgM3รh๕ dŒ๕Xโูู zp#›ฯ‚ญฑQวใำwำ๚์)†™u*=iๆภศ๔หti‡ฟ* A€Bpุ๕ึษa uป ๖>Ž;ส~ข8[ว๙3„๛D\8!ฦ$[้fฯิ‘๓=๊ศฒ uฤB[จcม-ํ๑|QvัT]ษCRˆŠ –qNำ Žbจ–้_ไn“nŸl„s l]% ่/N“dฝ๓5๙แ๘—Ÿ‡็afx–’<ศ,ํL"g“.ฮํwห‚มAฎ็b55CษY‚รผSฆ›^;ป๊๐เ ก:<ี8ท:ฎ~}๑L_ฟอ&7ฉชๆv|3ฑอ๔ผบฝฝๆดนบš__ฬชŽๆ๙ัGw9๕งป5ู-IŠ ฒ8ตโ$๑ฐจว)รแ์$A]]๊ี/Bhซนท>ฒ> ท(๑แ@ฐ'๘3ญ‹l฿}oฒใySณmƒ๒f้๘ฑ›’ๆ%we’uณิผโพร๚=‚€8ฉดนก€2dgก๛6"๕)(B3˜ƒupอ๕*ลo สˆ$ิ`sึฬถ๚„Jรฒ;ก๚•ิั!r†u๎”ู‘Pฯ/fo็ฏ-˜ดšฝญ็“7ใY}6_ีทอ๔]u|3›ŸUlะ †ฏฮ..๋›GCึรฐ้ฮS‘ว\๒'–†0ฌc+zA |งฬฎ†m์›๚ฯ๊ฆ>OีCมCU_œา[พi]ถ๓9^6ๆa7ษฒฎ7‡~ฒ2ฅ~ฒQนชŸ1๐ูรขั#„‹ส88ๅ-:„D )ะ7๖ณ้eษรฒKIˆ`s‰=…}nฎŸ™ฏฅxฯ‡ ์Ci ๎ฆคท]‹r้3]W๚๎}๊สฎu฿ษzFั๛!ฝฟำ๔†^Œg๎>rr๐ยศูดฎซ?ญUฟ_M† &‹ˆv๘[มš,ฬ๔ฏ ,๊7น๗M+ภq9า–~n#ฐ!ฤjถฐOฟบไMกหฺ•>โข7Bิเ๒-ขฉกxฃX/[ดXฝ๑.z „ห^„5Y๛๑๒ํญ%kืฎƒึ2ท~7ดv5นrอธ +OTฤaM’ป๙q์‚ฆุUก ฆโJ‚โ\f๕ endstream endobj 558 0 obj << /Length 1864 /Filter /FlateDecode >> stream xฺญko6๐{~…ึOส1"ฉg‡}h“ฅKืญ]โาข`dส"‰ž$ว๕Š๗’%Enšด0`Žผใฝy'lน๐ร–ศ จน.ข1ฑ’โเ฿Dƒ{jGTKุะฤ๑yAญSq๐7\kศWงๅํ๔˜ฟœŸ๙ิ PาศšฅV#kaเ#bk6ทฎ์1็‡๑๛‚฿f|ฃa‘๊gณ4‹ฏ„~ฮŸiเผXๅผเeรšL”‡gฏ-‡ˆb)“โ๖rv~&~›๕ิ้„ ศฐ๔๊ฃkอaํต%eฌฺYXPKบบ์i>ต‚ุยข^@๚‚pDดฐชคhษฌ+ปฎkŸ—ฉจ %>หA)ฺ‰†ืrณ2\Œโ€’ญใุr(E>๑4™2็ฺฉศsฑษส…~ื5ฏnZcๆาvถKัhฤ’ZfvdOฬbอ“u•5[–+–4G๒ลณฏืfซ }ลsึ๐น~iฤ‡%ซๆŽ๒Qฬ{F ^‚ภ’ะfiช„ ˜ฺ้บLดa€Y•^ $pโ*Kjn–ฬ+้$ –€ึ/฿jชNhE&๔ณ:^xXใPFก์|syvH4xY“-€ทม.ymภฌฎืlfๆนแyชy.ถฏyยึ๕Žlซ!‘6ผิเตรlเŸWนศvทหŽR้บYWMI}*tค@ ี&ง6YžLS๑rlสQ๚๕\:•๕ถnxกaVฮ5ี๚ฉ,(ลอB*=)9OyYYู"Wอ 2FgFฑ๏ซ,•<Enิ%ย“)๖๊-ิ ็ไย!T"žร ตเ[ng"ŸหP’๐;^เ%•5๛jิ ๙ใ’ฦแ’กK„ืKeจQP BฤฅZ*๐•uจฑX‰ ๓‰BJyุ–ธ\$,T7œฝ๛ๅ0 G >ฎq;Zž$@4 zุใƒS^'Uถjซ๔žสFbไEแฎฒฉก฿W=BXฬh~รท๕๑?ๆ๕‚vWj ทฝYfษR‚ฎŠL‰Z๐’Wบศื9„ธฬ g%ค2TŸ๔๕ขษส ฑภ‹`‡๎าY็ะ๑กฎำc๐ฺ#=Š r;๒<+นŽโ๐ƒK|J<•ฦ'RЇู ECVH›BฃŠ}ไ๖ุ๛‘]ผธก๏OอE1๎6ษrA™๊nชฒz Aฉai๊‡ฆ๔า_!…!H^ืงJ‚DๆYŒhQB‘kฬNYYจฉ,๗mM1D‰=1๒!Fฆาฑ€๖&‰็๙(z\C ’#v-8%ยTR80ฒ< AMz›ด@.0AพจZX#ฬ…ฌsad…ะ.A@ศะ๐กฏ๐บX†+qœ`>ล๖ืwSs„'yต๊ˆๆข#๚yฤษNณœ_j7b๛R†+๐…+PnN*IršUต5ˆ<(nQ–Ny b;cว`EผH|‘็2฿ภ29W บขืะผฉ|Gฐพ‹Y™’G= ณพ๚6•ผ~9|ชF?=9ส,ๆaก}6O๕m ์upลกs.ฟโ฿ฑ,†|gๆŽJ=จ–aLฐ–ดปฃ฿X(1%tยB฿แๆoIhยรป๑n๏ญNแV๗เ)c~๚FะXž๎“ `ะ‡ึ ตญ๏hiฬ์MกŽv]๛ŽNvฌะmN่Pˆfฆ k}ๆจฤ-”มั<4่wฐ#ฺวฃ(ขพ™*dืE6k–จ.ฆะะi•r–จšs ด2€๒>ะ๛๘gีณ)Nฒ“tg™แW๐†อYรไd๋uหีfƒ˜gi–ดm4plฒ‚ืj?้_y€าhุณuๆjlจ{#่ 7รฉ,–f“LกฦืฦJ>Mศ N[bภLlสึEI๋h‚ๆฃ w#1๏H‹‰กu็$˜Yi„(๎ฯฌˆLNL—"_ksษ˜z1ฟอ>=:AC<ิg F๎†ni ้2ก๑ Œธ(5ฌี•>‚iงX;45ฌ–\v๒ฌฺJ{ดQu8hLกฟๅEบo—&๚x่ฯใ‡บง๔๑ฦ๊ๆ ำBดฏธl‹’&ป5ˆ[–ฏ๙8X=11แ0†9 71นNL่~v๎>zสผ@.(แ‡ศ~NKž˜Oœล๕๏Š–•ำRuดUQ๖ฝ[,?v’V‚w๏_พ9?๙š8”Uฎำ๋๔V๚XB†Eข(ชษd endstream endobj 566 0 obj << /Length 994 /Filter /FlateDecode >> stream xฺ•U฿o8 ~ฯ_กG˜5Kฒko[{ํ2ฐ]›แ่ํมq”Dจไ,;F๗ื%ฺ‰“ต š)~ไG‰‘>Fb%i$Iฃˆ ลI^ฮ™Q!,๖;&ข7ฑมoPผ_–‚ึณ?เ‹ศ”๗ง-แ;œดšฝฟK‘T-DJV[’*สมถ e FV๒ิ=y"ƒ}4บGนโฺ๎ใ}๋๊๛ ห๒P่RWmึšบšX}!B-จ`.'๙๋ใjy็ ณ฿V8ง$8MRๆ}๚‘ ุพ—{Jzฟณ$1“T*็Wว ๊qE€Œ0FU’๐)BžP)ๆSAนฯct$O!‹ข(ธ pย›‡ Pฐ€,มgSต ล"๘ธฎปA\VV็]ฃ๑๏[fm_7๛6ผ(ฆI๔ ผ…Zผ แฤDQ%นth ž)'RE4…>z0ท[ทzyˆšW๊ š๐ม%โป}๖ˆเพฑำU๘ฌ_ฬXฆ1…ฦŸŒฏq>{Œ+A ็>P๖j'nตอsฉt…$ŒhยRrEใtˆ๖็^W๓P(XถฆฺแCBN-๒๚ด{”ฅ*™k‘ะx,U…ำš]ฅ”–TŽy]–YตมL;ฌ3ษŠข๎๕`lk\;ซQศ*eF‚นI 9O)“™ลTล1žโ ๖Mๆ]%—ผ่6]ฒ@—‡๖-'๐tJ&กXฆะธซ๛ผœ๛ฐ๚wฆF[`“5kS˜1’ป.6Aโอ;ำิ้†]eๆkๅธHธช[ผ,ๆ็p•๔๛ฌฝบ]Luฌ‹ฃgตm์ณE1k4ฝ ฬฯเ@‘ยฅsAฑื‡ฑ.:ฯ/ํอัไ๚uฎ ฆ.น๖Wฬๆ!S‡๋ดฎซ˜J|7๎๋ฅ }ึTพ1N7๎rฅ{ฯ^๏0ฌ๕๚h๊ฮ/ธแDo๛‰fsฏ=(ทuƒ-ภ๔งmภ2‹(ฐf‡YqฎคุwNŸถห๗ธ#ณhฬช—มฅmNk]8˜N๖๚…๊|Ÿ5Iอ2ม`h?…ีิขj‡Sฮ!"ฝ"?VŒ+ฌr+บรA7นŸ๗๋็ฯู7fgZ;(ญ> stream xฺลX[o6~ฯฏเ bฤซ({h“&KQ [โbฺbPmฺ ‰ž$7†๗^$Kช“ฅA—มฐ)‘<็|฿กฮE&(†A<•8– ฉ8ฦ,ฅhYžq‚™Lw;—n‰น0qv]2taN~OŒ60yีo‰:ั@๙ซลษูฅ`Hโ4a -ึHฅ˜ยZ"& A‹๚0;7+}Q!g7๚Kฎ๏ตY๛ฑ†ล+ใวล๛Kq]๎ ]๊ชอฺTงŸoKฬˆลไ4ฟป]\_ฺ…“ื‹ลB ๔รงญ`ํ ฒุบs;Kฤ‰ฤ2ตrบฐ๎FO Bp*2คK™z3ฬŽN}ˆHวณซw@':ฟ‰(ƒ :fŠอWฌZzทœอ^ืตฉ›๛yฤ‹๘+Išหรใๆ(ลฉคายว)ŠdcๆPฟ\ฏ๕ฒu ‡S*wฆoฯ-wฌiเโI็๗e‘รฦ3?เqgฃˆpœ๒ ฝ0หฌ๘ฝiMญง;๘HKซ›v•ตููฦDํ~}ถั•ฎ3;\Gฝ#x_ชo๑ฮ๔t<;ฆ.&G๗B7ห:฿uฯ็ฤkQŒQ(ข)ๆ*๑ฺ~๊๊4bT}ำไีฦ$ณu^่ฦฯgaผำEแป™๘ฑik•อ ธใve<†D 0P"ฐ}ฤฌ๔ZืG D–สnWฉญYฃืพot˜i ]5๛:ุnทY๋gL6บu็9วœฅำใ7Nฅ ๕ผ๒cน/ฺข฿ํฒบm๎ษปฺl๊ฌฤ@็hSŽ๎dใt่.1Q}nม|ŒE _rฤ? ,ะฉ{Žี~ฉฬ,˜ิ6ข_L ปIyg๖EPP™ึ_|ฉมN๙๏ฃ๑ ˜ฤL๑oษz.ามแ(ย,„ม9)$(วŠIฯ:ธ%Q(t๙ศๆแ์bH F,W0˜ƒอง ษฬ &+2qbvึ4๘NW๖hึปS2หฺํแˆF˜ฃ&‚dอD7Pฤึœฐ?q@1š2หืวฐ=ไc’$ซผ8†แฏวz‚=ีŒbš๔R๋v_WxcŠ%ˆ{,!6๙ฟ>J?––๘>็ล)+๛Lc—เแ&ˆฃมว“๖ค–ฃ+F rŽไก$˜ชqHUT๔mดฎjุฦ|sจึA.ฐ๊™ { ศฏI่!ฯปRdo.}ฆๅq-Ÿ3>nvฆe^ะ32H๘b›7]‚ADOL๔ nmŠย๕hŠผาอ|bNzจ-ŒQ‰ขYc)‰'2ฃชH A่ซ€iDfวช1C'Yž\|“œˆg7I้ฃMส๏d’'ฯอRส๘?59h†ญIืฯSยŸ฿จTษ`”’็0j฿ฌั๎MฺŒx6|]ฐ‹ใW†น˜บcิ๋Cลi •‰%ะš}zดูฟ5ลu๚.๗พ\}ษ—๚xืฯH:๎๚ใคˆ‚๒น4%ผำฎl๚#ฉ๋ฅํ|^Bc๗E๛Ÿ แข๋aฃKโ>+ย}Y 7ต^Jอ๎ฒบก&HuใnWไห์ณ๋ณa๗บ:e ปuณณ~๕์]บฮBบฮ ^ฌ๐ืแ๐งx„‚ƒญG”RC€Etซ—แ€๒๓ONฑ•น:]บoดญฤะ๗ไ?ฟ๕๖๚!$ฑ…W๕ู&Tสว๏Tิ@oฉ) endstream endobj 604 0 obj << /Length 1980 /Filter /FlateDecode >> stream xฺฅX[o6~๗ฏฐc#Jค๎^๔!‰kืmŠdcป@ถ‰ฃ!,‰ช(ู฿รŒคŒ ๆแE‡็๚รม^ุ‹‹…iไๅaˆข‚xe{๑วŠา ว๚ฤŒิ[ุ~g‚ป6๒ฎลลฟแ/๔jXผ=๑oฦรEp“D^ŠŠ,สฝ‡—ˆภ^–&gุ{จผฏ›๗ขb—>Iาอg๖ฤูณกลฮŒใn 3>|น1ฤ]7ฌeHG.บห฿~๑ข"CV2iฮ๏๎nิฦลO3uŽB”ไX ๚๕๗ะซ`๏Oษž{ฯ๚d๋ล8Eiกพkผ๛™ึn4 bcT$ ™kH”ฆ…‘#FŠต๎C๏ซร0~u๗Ÿ}มBtšๅัๆ~ฺŠ~ไ-m`รผh่Ot -ู _V,ŒQ~ฃXVd/*f‰ฝ)I•`ษœxiข<จีxปฑrdลเถถ˜J ข|๚”ƒฯ3็ึi X)T‹H๓‡ŽkœDq<ใ… ัษ!Ÿuษ5“ๅภ{S+ลBฯ'Šsหศyg๑†K3NR™HQ;1BŽ๋jๅŽw๕๑”์ฉ”ฯbจ$รfx๓Ÿ=o˜eนb] aYยŒฅ่$ฏซqOํฐmšำ…–MK:]@ฃ"Ž2{๚คr-sIฤŽส‘ษัL๖tจž้ภจ(%งC)$๕œ๖=ฃƒๅ$ฬธตgKฺ๐ํ@Mฉ „>˜มmwฉกภzฌXI+ๆ‹ฆ:/ท‘๋่ฎฤก'ๆ,Nฯ85ศ=vLนข(6o;5ti๙จฌฌfฅ˜šส=@ƒึž2CC‡ฺbmลิK@ซ'&%“f2IฃตๆฺถขโใมLRHk์'La มHƒs›ำ(Zฟาสโ`ฆฅŽb=myฝท’ุ่Pฤึ‰Y–“๒‰™๑5๒สี‘[มท“ด‚>๓qo5„/์ๅ#•-๒k•– Oคlž`/ฒ’œอส{ัLVมที/ูO๚ภหoŒPS6f]eumE)๗BHถ2ข=cโSูชิ`m๙๋๕<l$!(หฒEธe็ภ#-ใw+›๏Dำˆ็cp<8ำบ8๊.>r&ฏ–ƒ]Œ{๘Ÿ‹ัฺช •3:WฝiXรeป<ฌ0@ุูt#ฏเีฒV ใดf฿ๅฝ‚ใภz6rาdX1+Rซฆแsใœ5Sๅอ"7u’uGทซ Z„๕ัิnื้‹‰i-,sฺฦ‰ีH•Mc+พซฬช‰แฤ^ซ\ผอ"*%’iI ฦt7qฯขฮ–`’Iเ็L๒sP๙gณ๖„aGฐ๘คkŒ2๑์Lฐซฮ๊~ร;0๕Aื„ย*-ฬ]บZ”ด3;’C฿v0‹[{ฺนบ2SภLฬ‹ ฌUL๒ม '\… ํu’ทŽ›t2ะrฦฅe๙ๆ๓ฯYคค“ฑ"ิ€กฅzJiaฎูม8u dZ๔๐€ีa๊ ๑ศ†€bฅšV0P$จณ„ๆ฿ู“Jdปุ›๐ฆขฺ–Eฎ‹ฟฺrๅศ-;งUPมช%จ๔q้ืฦก~#บ๚ˆำ{บF(ะฌุณ€ฝฎ|4M ]ตส‹ฒw–ิสฟ92V6uฉใิAนiฎู˜ค‡ฅ’/ม‰แู™ฤq/—ซ+ธX!5ผOP/ƒ•Ÿ๚"Zีใ›iP ƒจ: ‰JWษเ|ำ‹~jtSพxนHณจ%‡Qบf่…Iนั*่<‡ฅ[๑ƒ„elf•0ฃ)้๊๋ฉ๏มพ๖า ZนC่…‹e๔<(วG€”(งำsJ/ษฉฎก“fฆขฦ#0kƒ2/m9ัฯ๗๗gm%nŸZฮ€ฌ†˜ื ล],% ๔ฃฦ‰]๊็ฃข -?isว๐~ษศRแ?&P’+ะ:ื0B “E`ฏ๎๓– oต่ˆŠƒ(4oWXฌ„ฮw Ž!`ฆซฺป Cธ&๐ถž]GยWIe๏ง๖VฺH+ $๒ŽญF ˜nVจ)ะP๊‡'‰6ช๗W‘งmฉฺ›Œธ0ฆหทญp]เ*ธ—ฅk„ ย$๚;ง๐ฺหโีs5๒0Qfžซ1สณ,•ฃงห^ึ38/bmฃLฅ-สฑ}ี๎วฑ—WAPC;]โอA“@xM} ตSเณ€แ1จ…้ง`—iจฃุญz" ง‡ญฺ˜ฟr๑ค๊+ฒ๙EGง$๗DยI๚Mำ๘นe๒ฎก?xขงNf๊ส%๐ฝ,[โ F"K#้w*(ˆvผแ€4ˆ e*ฃŸA.CŸ๚่เubวWฅDขืv–b ]‚ฆฅn๘'๘3(•ฏ@3ุN#ญe๐"XฯPxeฤ ฬ_ซI˜฿’ฐx•ฤ._gธKbชฑ$0รQbภฺEnอZs๐P้š$๛ไPŠWoขkžู๗ใmปY3„D ข‡ฺsไ็[๓๛ะ“2ไŸพผ๛p๗~[`Xฆ~ฐษ‹8I–•4ฎsฤ๘ ำ๓r7 endstream endobj 627 0 obj << /Length 931 /Filter /FlateDecode >> stream xฺ}U฿o6~๗_A`s€‰II”๖ึ6Mšvภถฤลด}%Z"‹*Eลหฟ#า์4ภ๓๑ใw?ลH ?F’"ฃq&HวTœTวี๗™d‰๗8ฝ‰…{Aฑน; rญWย/& (o—hฦŽฮภ฿nW››TŒRไdป'yA9ุd–R&ูึไห๚ฎีUฤำl}ฏžZuBY๏๑ด‡`ผีxn?฿ pw:uTฝ-mซ๛ซoD’ ๆ8yไ฿ถw7ฮฐzฟ= g!มiš3G๔หท˜ิ`๛H๗œœผ็‘$,ฃYแ๎uไแ,๊9ฐ‚ฯ|`9- A$—ด`!ฐํAตืF‚„N FU๚ฬ๋1ฤB›ฦ๋ำ่žทuธXv๖ งๆ€*๓> stream xฺญX“›ถ฿ฟ‚Ggฆ$@@žฺlป้๖6ำ์fš™ด2ศถฆ€ธุ๕๗่;๎fำf€tŽŽ๔;:Ÿ2b๘แ -)ŠiqŒ’’U{๕ฟ+”ะงvลbhYุหyBt&ม๒๊ฟ๐‹ƒ-_ฯKยi๏pฑ๙ซ๛ซ่&KŠส<)‚๛MP”ˆ/งย9๎๋เใ๊ZึEH2บzว๗‚Xnwุyๆk้พ๗๏oเถํ๒n`ƒ‹?๏ ’2G 6˜์ฮฟ฿ฦีO๗ ufe6@?5๐~ ๖"8ุ•mbŠhiไšเnก๕๔u โ€ค(/Œ>ณ†4IPNS‡#ณ&กเcˆcBW?ฌๅ8€*iฒ๚b7๘1ผใ•พnื?9{ƒ%*)กfโ2)E„dn'ž•ณxV8qKฺQX็ๆุs58Zฏไ^ิ\9ฮF*ฟด๏Qน{ตอซQ‰แaฺฉvไžw|P๓บb5p=ˆn; ฉฝจธFึ67NQ™๚{๙™ํb จiฑ๗ึ]=๊A=LL€,xWyฎเƒะณ”๙fNรgง$:ะฒ!ำYต๏ผ„งJ4 t%lŽหdq)ธ$ :keพฉš:ฌฆต[ฒHืS๐0ศŒFŸ…ศ“:เ–ˆณ๘wฐ|๑%- ‚pI—>”>ญFIP™ักวm ตVluแQŸMร๚4ชo˜wข7ฌฺ‰rฤ%/*ษ‹ฅ1ฒaŽWŒsฒข_๐จลฐฯ?ื่ฎejจ˜๒ลไn`ี_๘้“p๙rLQ‘คKศ๙ฅ2‚โ2U† 5r ๏mฤalห$ไ 3‰W6gั๙7 vฬVA`-‹"0N(ฬbุนัi!ษวB \W.a x=ฑY;ณ๙‘ซ jจ๖uš”guฺ˜4IHoฆๅ:š ŠตP#Mล$ฬH ๚™^ร0EW5cอต“ƒ%\๕ส–้sQทยibFรNŽ๛Œƒ๒จํ}’ัฦื.่2@ศ^a“ๅLn่+Ž่:f%่ข๓|พ&Œ'W๎เ9-เ๒FIผQฬช่รD3 3P๔$่{f =8‚m›ถmF}ฝyž าฏาเp8 #{ –Gฦ{ธI:๚ด K84&_3ญฐ“yg‚„›๖ƒน_Dbœว$.žŸ.™๙๐ถถmุ๑™Kฟ๊lะญ0๛‰C‰ดM—#E๖โ€wgx'PŽnผŸํž้๙7ฟ=๕ุ.&>๛ ํฌฝ6ฅ'ฃฆ:”๐ย/ฟPฬ†#‘ษยjLรwvtูต›?็t๖ซ_oฏ?&,ึ็ๆฟ95ฟeSM#๙้ร‡็Y๛œ˜้ endstream endobj 553 0 obj << /Type /ObjStm /N 100 /First 885 /Length 2488 /Filter /FlateDecode >> stream xฺอZmoนฎ_Aเพ\P˜KฮC2uอK}I›๋ฅIธ6ศล^;jlญก—^๒๏๛ฬjูลZ%๋ƒ‘\๎ษ‡รg†3ค"'ใLไl<ƒ3$ ฅ7\๏๑ŽP2’!ฤd๏Q&“cD™M.ฺฎ˜ย(FgJF=zใ3)C‚๗คo’๑์ัฺ๛€Žb,ฦGศ$”Bd2DE0ช8ใ“wฃ(่.ล€7่.tล๘ TQข!็ะฏฐ!๘‰’7%{€”Œ ฅ ญlภCHฃ˜ศพŽ Oc&|สPJ๑(3ฆš0@!t“่+ฆdุyŒAุa‚>™T˜GGฃ˜ษฐ(L†“ސ#T๊0, ะ!|œโL@x`‚๊บ:N‚Ÿr0ก(dL+zฮ€๐hฅ ยะN&ํ5– ]่' S =Aัฑฤ.ป`Š–X>˜pก‘›Fอแmศฺจมh้๐€Iึ^So๐ ่39|‡ฆ%)O<& ฤx ฃgsา7่ข`……ะ `ก„ผIชK]๗ไดC‡ฏ‚w‰ธ€IA๕ ฆ%ฅ˜เs’TFฑ$“2๐ฦข๔„ช%PS'*X—ฮ”Š~Š&P^'•ห ็,*อ8'#i)า๊"Rm R‚ฮFP”ฦขฌU$X^2่.2xB?ส{ฯฺ5ุ์ภ <๐Nูqx8ช^}ผฌM๕`:mฃ๊ๅ๒ํขญ?›L฿ช‡อ์คžฝvฐL๗ฆzR=ญฝ๖meTฝจๆต/ษ&ๅvbKX3๒ลŠR)“ ฅ@๎9<4ีKSุผjL๕ุ|่๙/๗ฬ?Œ๐OVZ๓๐ฆGู’(+ู–([<9mš†ซ!9’ŠM-๓ฝe,OtbีCˆณฐžญ@๒็€’mํœu`]ˆลชs‹์ฌŠเ_๛iภล(l3Žฮ2)ษศชQ๘(Xฃญใ?ฟŸีงO0ฬ์จ[•Gอrบจgร.N›aคGKบ ฌวชa+ฒห๑๘‘ฏBxl^วะ๏ S๚๏ภRญฺSJู&˜๛ty~ๆ‹ฒe%หั2์๒FY๒FคNฐƒ(ฌ3 บIYุt/@ชสŽŽ[ั8f๋เ9ฟ^๘จ™.ZE|ปfGํnณฎ`M<dU!’ึ์Eผข๛9<}ืKŸฺ่ถ๖I,จ^ฺ 0Tฟ๖ฟJล๐๔B`๔ํ๙ฌ9~Yƒ"ฆz๘ศTฏ๊ ๓ๆ:๋žƒ ฃ๊ฆQOsดนrk,gว๕ผฺW?ี'“๑รๆƒiูˆ}tƒs๔ฯžg่;(ญฤœ5หK`๕ซjK๏9ฐจ*ย7wŒ1๕ง5ู5“อ‰{ษJ ๋\๎%‹ภฬโ†>ฒ!หุม๛ศR„Kอ๚ะ๙5ฏ๐wู<ูณๆปg$ฯ˜๏ ญ๑œฌkฏปCผgู_ใyx.$ S๓X#Cฬหล๏ญ A=๗รFย.X•7`๖คVdnO'็“หหฦN%ลมผ]็ƒหฑ๒˜็ีเห,บะF™ u •yƒ๗ูC™HฃCฤฎ,ลjะทณง2็ถนฌงซ๐ Fาœื0ฉ๊Cี*ดฉTa"๓j1>›WรNl•ฎซU6> R๚rep#ซwš"ฌu.˜fคu๎‡ะyิƒkPคpห ๒๑์ฌ™Rต*V*๗™๎ตCWฝึ๊›Š]—ฝ9&๛ฅšฌืu$\ขNgห9๊ถŽฃD์V;dvู่๗›\ศ๚AB–c๎'หH ˜n– "ล์Ny[@B “หŽ™1ณ๕ฐ…^ย๋“gยZˆไ~ยˆeหเยบ พย ยาSV [พ1™ื+Oวœ7 ฅฯฒtŠรf้ƒวฎฒๅueู์๔.vภ,แ…อ>›„•ั]2ภ“๋ีC‚›“ฐ+‹f0u ศ๔๊/PF€ H`‡ฯ๑๖ณh‚#ไไฐเ Ej-ๆ๏oภ•G*ืnEEC์่Aญ[z€R œ ˜ศP&๓๙ฒžWAาwํ#ค/`=>DN๒ฯI๚๏็Weน`yแฟ9[8,|ํJR๚yฮkง˜ท{‰(๑s‡๕๚k’ึuงดาฉ๊OIV%wฅte็G#ue๗ป:ฏ๋้$wํบ๋Yแฎ}่ฦ ]ป๎ฆXBื.ฌqtํb‡'vํโภ)!i๘#ํ%!ร9iˆ@นwฆ๐€๎#"š@ฐO–gQ,์ํฒsใ*8ต๋ศbศP"[œdญะ.$qศ3ฟุฦ P ฺ้`ฺศDXด ษ€?!ณ๚kณเ๕6๋ฏ๎ฌ๓  yฺ…$ ‰4qqƒDP=™ํ‡dภาŸฑš ๘ล‰ี›ฆเ2qู…ไ[x4”Hฐ 1๔–cXล๙๐‚%ลy฿‡เNๆ๕ฑ=ฉ๏}5*ไอไ?ก H—’๏‹๊b<9_4๗'ำำๆฏ=ํ%8 x๏ nŽ:ศ‹ %ํ๑‘ฆhQmสา+Ž ˜ฏ_ส ลr6Y|ฌf๕ผฯŽ฿Uำ๚ทyEŽธrพ๒Iรจƒติมxy‚j3_LNซม•ํœ%$›CrX ํรทง?Gต˜ endstream endobj 709 0 obj << /Length 1079 /Filter /FlateDecode >> stream xฺํ™Ms›:†๗Z:3E•Hh™&qํ4H!mg2]`ฌ8๐ลิ $จ’›P&ำMใŽ(BRะs๔#a€ไ‡Sˆจ <„ อ ˆ’มฟhS†บ…Qฌ_aOWผŸ$68อ—๒‡ภZV~l›Xอุ–1๘‡`๐~ไฺ€Bฮl7ภใศwŒบ3 ‚ธžd+qd—?‹๛X<จrvฃžลญ~๙1Sฯเjค “dป‰H‹ฐˆณ๔่{plฮ ซoชGž๛มdTฝœฦtฺ ะ๕p๕กื฿Xษw็ ๚v<ิ-เ` )ฏ๚m€oฬZM โ@ๆU๓hgFm2๊จๅYบOv๕'4}๋ŽrJhี‹RHั]“งญmฃ5ม‘v~วํ&Žิ๔k$‹<[็a’ฤ้Z3J ‘฿„‘dศธ;„G–‹ะy˜˜ภตๅ1>ฤ์Qํ ศ-Mัยคz .ฎ:ฑหๅjำ๛‰\syธi‘Gbทk‰_ฅqqdq›ผ-ุฏ7‹‡†๗3‹ขlšๅหYงYH0oอ’%I#„/ๅ&yธŒ7q‹ช ำ•*œุfป2ฏ๊=bฟาุกhศ๛‘Vเjาจqร_ปY3ศ~Ž๕WฅRšmZ&’ผ๒Iฬs้ส๗Yธ็โVŒล=ฆ]ฤๅNBH๋tฦ๛ญศ๑ฃP˜งa~WnU๙"Lืeธ–>eฮ‹๖• ๋E_ณ4่ONปุcบ˜4์'+้๑ใ›XไาaPzจž๗๘9#๖ถตQ #ž๛๓Yง„tึi‡๗กๅ๑VkhพGDบ<หtiูŽsุฦ่ฉ(…ึ0ฦงำั/b(๔ำ}{Tไ๑ฝยŽส4Rน?Tแ<Cน}c(ิ8บfgŸN‚iงJdN๋์ฆatงยŠSKๆ^VฏV‚Eษ่–L่Šํ~jP 5ฬF~งช4ฑ๕L3Qถd ้›(Dผต‘/ข2ืZ‡ปV ว›u–วลญyงžrpkYSษย!iAS3ดเ_^b—ฆ?="/ฃB’ึ.ฒ๙i ฮ)j}}๚ ษšฆ๐ว!“๔dด=์“ญ_Š–8๛›pฟZ/ๆeMตwplK#Q=ข/5พ9Xgn–๔;๚n&YŽ๋ฅV +วสื )~ฎวuŒqquKำ:ฏลี‡‹ษษ oดgี-ŒืvจuV๛3๏๑]yผ๖ฮ‚มฌ{ endstream endobj 711 0 obj << /Type /Metadata /Subtype /XML /Length 19820 >> stream Adobe PDF Schema pdf http://ns.adobe.com/pdf/1.3/ Trapped Text internal Indication if the document has been modified to include trapping information XMP Media Management Schema xmpMM http://ns.adobe.com/xap/1.0/mm/ DocumentID URI internal UUID based identifier for all versions and renditions of a document InstanceID URI internal UUID based identifier for specific incarnation of a document VersionID Text internal Document version identifier RenditionClass RenditionClass internal The manner in which a document is rendered IPTC Core Schema Iptc4xmpCore http://iptc.org/std/Iptc4xmpCore/1.0/xmlns/ CreatorContactInfo ContactInfo external Document creator's contact information ContactInfo http://iptc.org/std/Iptc4xmpCore/1.0/xmlns/ Iptc4xmpCore Basic set of information to get in contact with a person CiAdrCity Text Contact information city CiAdrCtry Text Contact information country CiAdrExtadr Text Contact information address CiAdrPcode Text Contact information local postal code CiAdrRegion Text Contact information regional information such as state or province CiEmailWork Text Contact information email address(es) CiTelWork Text Contact information telephone number(s) CiUrlWork Text Contact information Web URL(s) PRISM Basic Metadata prism http://prismstandard.org/namespaces/basic/3.0/ complianceProfile Text internal PRISM specification compliance profile to which this document adheres publicationName Text external Publication name aggregationType Text external Publication type bookEdition Text external Edition of the book in which the document was published volume Text external Publication volume number number Text external Publication issue number within a volume pageRange Text external Page range for the document within the print version of its publication issn Text external ISSN for the printed publication in which the document was published eIssn Text external ISSN for the electronic publication in which the document was published isbn Text external ISBN for the publication in which the document was published doi Text external Digital Object Identifier for the document url URL external URL at which the document can be found byteCount Integer internal Approximate file size in octets pageCount Integer internal Number of pages in the print version of the document subtitle Text external Document's subtitle pdfTeX, Version 3.14159265-2.6-1.40.21 (TeX Live 2020/Debian) kpathsea version 6.3.2 1.5 application/pdf Code Review of the Go TUF Implementation Code Review of the Go TUF Implementation 2023-05-31T14:16:32+02:00 Text X41 D-Sec GmbH Pentest-Report.tex en 2023-05-31T14:16:32+02:00 2023-05-31T14:16:32+02:00 2023-05-31T14:16:32+02:00 LaTeX with hyperref uuid:33959590-0590-4a88-91d7-54c9b188d7fd uuid:7a820a39-b188-4dce-8626-26754620a3ef 1 default Krefelderstr. 123 Aachen 52070 Germany info@x41-dsec.de https://x41-dsec.de three 29 29 endstream endobj 715 0 obj << /Length 137 /Filter /FlateDecode >> stream xฺ36ี32W0P04ฦ† &F )†\…\† A,“œหๅไษฅฎ`hฮฅ๏ๆา๗๔U()*Mๅาw pV0ไาwQˆ6T0ˆๅ๒tQ`c`ฐo`จo`๘‚3 ะ?f๚E์?ะ~zภภ€`ตกžม†หี“+ fไ6ต endstream endobj 716 0 obj << /Length 97 /Filter /FlateDecode >> stream xฺ36ี32W0P04Fฦ – )†\…\–@žNฮๅr๒ไาWฐไา๗žพ %Eฅฉ\๚Nฮ †\๚. ั† ฑ\ž. r ๖ ๕ กฐžม†หี“+ }ต endstream endobj 717 0 obj << /Length 169 /Filter /FlateDecode >> stream xฺ36ี32W0P0Uะ5S0ถT01SH1ไ*ไ26 … 2ษน\Nž\๚แ ฦฦ\๚@a.}O_…’ขาT.}งgC.}…hCƒX.Ov fเo๒pย$f"๊@D ˆ๘ฤŒ?`๓๑คD๐€C`†ิม ~4`๚ูแ๚๙QaO Gุก:๎†มๅ๊ษศณ<4 endstream endobj 718 0 obj << /Length 118 /Filter /FlateDecode >> stream xฺ36ี32W0P04F F– )†\…\†&@พˆ –Iฮๅr๒ไาW04แา๗ s้{๚*”•ฆr้;8+r้ป(D*ฤryบ(0|`ร‡ ™0>`ภ ไ์๊Ca=ƒ —ซ'W tX#| endstream endobj 719 0 obj << /Length 180 /Filter /FlateDecode >> stream xฺ36ี32W0Pฐbc3C…CฎB.ฐ˜ˆ ’Hฮๅr๒ไาW02็า๗Šr้{๚*”•ฆr้;8+๙. ั† ฑ\ž. ฬุ›๘๐ใ@~Žๅ๛˜ฟ†ู?ภ๑~ิ00๘รภ๘แ3โ‡เ˜๑ฐั๕0ŽA|;y8ฎณg`จฑCล6 2 \ฎž\\้aS> endstream endobj 720 0 obj << /Length 168 /Filter /FlateDecode >> stream xฺ36ี32W0P0bcC#…CฎB.#฿ฤ1’sนœ<น๔รŒLน๔=€ข\๚žพ %Eฅฉ\๚Nฮ †\๚. ั† ฑ\ž. ๒ ๖ \ล฿ภ˜๑=3Ÿ‡`๖๛@<‚๙AXh หู10ุAq €โม๘3 ?จa`?ม \๘?ร็\๘—ซ'W B; endstream endobj 721 0 obj << /Length 192 /Filter /FlateDecode >> stream xฺeฮ= ย@เ )ฆู#8ะอŸH1‚)ญ,ฤJ-‹ไ^)Gษถ"Dว$<พๆ=ฦŸNผ9าุ%?คภฃ“‹7๔B. ~9^0NQํศ QญธF•ฎ้qžQล›นจฺปไ0M,sั#ฑโญกฺj„ถ ำv-ดจ‘Uง•6ˆ 7g๙ 4๓็ล2ึ๔ฑL'ท5ไBC!k~ฃb%ฟ ๙O€หท๘ ‰L๊ endstream endobj 722 0 obj << /Length 180 /Filter /FlateDecode >> stream xฺ5ฮ1‚@ะ!›Lร˜ศ";H)Lดฒ0Vjiกัฮ lฝษr ’uX!?ฏ๘3อOฒู|A’R–d”ฦtŽ๑†‰ค!\‡ว้Šeัž‰ัšฏีzŸŒสํ’ธWtˆIฑฎ ซเm5๋œย>ยถƒม ŠQ>jFSzวL๑ฏ›โwพvดPกƒV่ฐ*กrTมท็ ,ฯฐ<ษบiธชq‡?มfTถ endstream endobj 723 0 obj << /Length 185 /Filter /FlateDecode >> stream xฺUฮ? ย0๐W o07ฐ๏ถ5qiกV0ƒ “ƒ8ฉฃƒข›ุญG้:บล—ด…š๙>ศ9ŸฮQยK.)‰้ใฅอ‘vsพaฎ0<L0p‹กฺา๓๑บb˜๏Vฤน cLั UAฃก4ฆเ:ก…†@=<[2[xค_|Dี๑ๆS| c@‹๗อzšิ25ะS;ผš‹–Š[‡จ๗G๓Oiยตย=ๅำZ: endstream endobj 724 0 obj << /Length 196 /Filter /FlateDecode >> stream xฺMฮฝชย` เW:Yzว\mmEฑเุAะษAœิัAQPK๛.ๅป„Žฤšฮ‡ผ!„ํfซร>GRa—ฃ€7ํ)ิ์kิfฝฃAB‚รˆผ‰LษKฆ|<œถไ fC–<โeภŠ’#ถi†4/อ?b[fpQZE9Vจ ๏fB@/V๎ยํฆศ..ฒ‹ซR(ิžสC)*ฮ€“หญc๓กnzJ_ศ>ธ_R#/—VQอhœะœ^ฉKU‹ endstream endobj 725 0 obj << /Length 215 /Filter /FlateDecode >> stream xฺ36ี32W0P0a 2TH1ไ*ไ26๒ม\Dr.—“'—~ธ‚ฑ)—พP”K฿ำWกคจ4•K฿)ภYศwQˆ6T0ˆๅ๒tQ`ฐ?ภ€ก€<ˆฐ‡๖๊0ศศg`ฐ;๐Ÿศฝฯภ`{๐”จ=ผJT฿"l~Ÿฏ็€ฤ็s@โ^ใ็9?€ฤ ๑xวม๘#Œ8๐„`?xH` ฬ ;Œ @y „จoฐ?ภ๐ฟก™จgฐo`เr๕ไ ไ!=ba endstream endobj 726 0 obj << /Length 178 /Filter /FlateDecode >> stream xฺ]ฮ=‚@†แ![Lร˜ ่๒#B% bโ&ZY+ตดะhG„ฃq”=%…a]1@<อL๓๙ม ษกˆf๙KZxtu๑ัก \๎˜ไG๒Bไ[}F.v๔zพoศ“š\ไ)\rฮ(RฆlUBฌ$ไฝฦ’P›าจ™4*&Yซห,[รฌbœ ใV“ฒaY๙~ดผ๚kr JตJ=งะฺ‰OุE7๘$Uด endstream endobj 727 0 obj << /Length 195 /Filter /FlateDecode >> stream xฺ5ษฝnย0…แ1D๚–|7ะ:Aˆ%‘(H๕€Cี @ฐฅ1Uoฬ—โK๐ˆ„Tใ0<รyฯx๒žM9ๅœ฿$sฮ%๏%(›…rึ=ป#อ‰-g3Ÿ!“P+พœฏ๓๕K ’œ~“Z0Jhoธฐ’?‡ั๏ฝƒNูˆŠ^=ฐจc‹*1จF7x฿+j Dฎl ^lัŠm1•‰อKŒผำ๖aฝ๓=mดี7`Z*ฺะตc\ endstream endobj 728 0 obj << /Length 169 /Filter /FlateDecode >> stream xฺMห1 ย0เ' oษ๒. iฺŠธจฬ ่ไ N๊่ ่&ถG๋Qzว!M ๒ฝ๙^6ฅJhJCI๙๏Ž/˜IW&”ง~9œฑะ(ถ”IKWฃะ+บ]๏'ลzNฎ-i็~๖จKb–Y‡fข6jใ^ใฑ^ํ๑x*˜ฯเ˜ ๛„D/Ÿธร\xVีPฝ*   ๏ ธะธม†(Nฺ endstream endobj 729 0 obj << /Length 175 /Filter /FlateDecode >> stream xฺ%ฬ=‚@เ!$ำpๆ.?ต"ALยD+ cฅ–ํˆpด=€—ฐฒD*ท ฌณR|ล{/yษxO(ค)Kฦฯ่แใ”shฃgฬ%Š-ล)Š%ท(ไŠnื๛ EพžS„ข ]DแeA@๕0=ธฬc~ห^=Šีd0xi(Y็ ด๓ํถตvฟJ{ฬซฮ ีWชŒฉญฬ๘ืS%เBโฮ–K๏ endstream endobj 730 0 obj << /Length 178 /Filter /FlateDecode >> stream xฺ-อฑ ย0เ“…[๚ุ6Uฤ)P+˜AะษAœิัAั-ด}_%’Gˆ[†@LZแ;ธฟแชลŒ-ฉ U˜Šัผคk‰d,ไ"ฦxธฑ˜‰1ฬทกล\์่๕|฿0ฏ๗k นกSIลECoยžhHG*สFŸ>๓z๊อิ่๋ธv\IKฒู$H.ฐ`ํd›—j—ฉ–ซฮ๗wู๘7๘ต๙N endstream endobj 731 0 obj << /Length 158 /Filter /FlateDecode >> stream xฺM‰1‚@EวPL!G`Nเ. Fฉ6ALยD+ cฅ–ํ๋ั8 วุ‚์ธhc๒~๑ฯ็3ต IeX^*้’แU\Ž:็VลTb* ณฅ็ใuEQํV”กจ้˜‘<กฉ ’ด;LุGฬฑณIฯiว้kh4,[€@0|qJ S ึ2kๆ”}ฬ.โื๗๘ฦว6฿ endstream endobj 732 0 obj << /Length 187 /Filter /FlateDecode >> stream xฺMฬ;‚@เ!$ำp„ศKลŽ1‘ยD+ cฅ–ํˆpดฝ‰ZY"•[ึbb๑<`4๐Criย‚1 =ฺ{xยnๆถฑ]์Žง่ฌษั™๓tA—๓๕€Nผœ็„6น[Lศ%€~แl1๛ง่‰žr็3 &ณtvลž ษŠ"่: 2V=eผA™UกฬTณ_ฒn‰R6y)sญ‹Vฤ‚{-™ฮR\แšYp endstream endobj 733 0 obj << /Length 165 /Filter /FlateDecode >> stream xฺ-Œ1 ย@EGRฆ0GศœภM6+’& 1‚[ZYˆ•ZZ(ฺ๎ๆh9JŽ`นEศธแโฟX.ไŠ2*C EฒคkŽ”*x6้4\๎XG’ ล6ด(ฬŽ^ฯ๗ Eฝ_SŽขกSNูMC๔ =ธaฦcฤc์mาWiWฅmฅมjm<8๖Ž?ฬ=sห<~X˜;pŽY3งแ}ฤn ๐ 5—>ณ endstream endobj 734 0 obj << /Length 184 /Filter /FlateDecode >> stream xฺUฮฟA๐O’i<‚y๖๖ —[HจขBฉ tr็ั<ŠGธ๒Š‹ณgw‰โWฬ๗%3D=ภ‡•%๏%(๐u๊qิที๎H‰"ฑๆภ'1ื9 ตเห๙z ‘,',ILy#ู’š2ะ,€v t* ถา ธีRm่๚ฃจ๋YU|ีs#วWำyk9Ÿถsืq`ฤึุJแ x•†ฤะง+}&{˜4Sดข7›คLc endstream endobj 735 0 obj << /Length 185 /Filter /FlateDecode >> stream xฺMษฝ ‚`ฦ๑#มYผฯไWก`955D TcCQ›ˆ—ๆฅ]@/4ddฺyกแ7Ÿว๖ํ1™4bฮํ-<กํr›2ๅฑ;bกฑ&Ecฮ+ั‚.็๋`9%๎6™[ŒBาJฝ๚ร L้ˆ–ฺน P๏๔šš5ญฺญิAฌh้น฿ส<–‚R๒ใAง๐)ผDขHoQ)๖,Jฅ‘r–•ะ@ ภY„+3œO8 endstream endobj 736 0 obj << /Length 175 /Filter /FlateDecode >> stream xฺeส= ย@เYR,Lใœธ?Q์\ˆBะสBA-mฃG XXz…xƒ-S„ฤˆ•รวภ›7๑ ง‡$IIฟbE}M;…'ิ!หf{ภฤขX’–(ฆŒยฮ่rพ๎Q$๓1))ญษ5ฺ”€ๅภ เ๎ง€(‡ฟaพฉ SCทำภอ@f ๒FPfมฑ๐J`ญศy›่ํ๘ืร๑งใฏ‚7^ฮ›;ซร?N,.๐:=ฺ endstream endobj 737 0 obj << /Length 197 /Filter /FlateDecode >> stream xฺEฬ1 ย@…แ• ำ์2'0‰1ค3L!he!‚ –ŠvAsโBŠ”มฑฒต wWฤโƒ๙_1~ะ๎„่ขๆุ๕pํมฬๆ๊ิวj qฮ ;!8#ต‚“Œ๑ฐ?nภ‰'}T=ภน‡๎’ฺ%cQ๕ง›)ญŸื—๕C"ณ(’œฮฤ ๑\)$Š'‰ฤๅ"ลี–vmdv%ฬฯจV-cฝณ”'‘ำ‰็”UฦM–ผัฒาRZ5[ฒ”ม0)|0Yร endstream endobj 738 0 obj << /Length 153 /Filter /FlateDecode >> stream xฺ36ี32W0P04ฦ &† )†\…\†f@>˜ –Iฮๅr๒ไาW04ใา๗ s้{๚*”•ฆr้;8+๙. ั† ฑ\ž. ๕?ม๚ ?A๐ใf|ภ€ฐเมydgฐB;;ถ:๙:๙๙{ ฌซWว๖\ฎž\\ 6Y endstream endobj 739 0 obj << /Length 189 /Filter /FlateDecode >> stream xฺ5ศ1 ย@ะR,fo` $‹Aˆ ฆดฒ+ตT,BฒV^+ืศb0ธบF‹yฬŒ์u€\’&๙}ฺxx@iถkฆ)๋ฦ ŠI‰b๒yQ$S:ฯ[๑lHŠ-=rW˜Œ๎E –~hฐ๕S+[๋?M~WฌฮoŠU9๛QfL๑๒ล/špฎต๓รช:†"ปeก]ฆฑ– คฌ๘’Bร‹ฬCอี—๖ :€ใ็๘RM• endstream endobj 740 0 obj << /Length 173 /Filter /FlateDecode >> stream xฺ-ษฑ ย0…แป wษ๊d๎˜6EญK ต‚DิัAQœด๑อบ๙};ช)q๘†œ`ะ—#๒hh’cฺ๛xBฺ๖ฺl…bE2D1ณ+ 5งห๙z@‘,&ไฃHiํ“ทA•{Vภ_ ฤo™1ฺแฺ4L›ำuๅ˜’๋›ี)8ดXEภ๔cหuf฿{ษแk™2†ฺ2EไไNฆปะœ*\โ}UHว endstream endobj 741 0 obj << /Length 164 /Filter /FlateDecode >> stream xฺษ1‚@ะ!$ำp„ธฐ`ิฦMท0ัสยXฉฅ…F;ณr4Žย(ท˜ฐ.$๏b>S สhRคVtห๑‰ช =๋x\X”'R%ส]XQš=ฝ_Ÿ;ส๊ฐกeM็œฒ šš mA๗เ]ไ9๖Cโlฺiัjั #;๙‚`ะƒต;aŽ˜c7$ฝฯทฺ7ยCส๗€[ƒGฺJ7ส endstream endobj 742 0 obj << /Length 156 /Filter /FlateDecode >> stream xฺ36ี32W0Pacs#K…CฎB. m„@ $‘œหๅไษฅไs้{€IO_…’ขาT.}งgC.}…hCƒX.O๖๘?oฐจโบอ?gbๆ?๑ๆ?ธ๐๓ฦŒ000@ยุa๘๓รp*fc``เr๕ไ ไFA› endstream endobj 743 0 obj << /Length 171 /Filter /FlateDecode >> stream xฺฬ1‚@ะ1›LรLœธฐ„จ$ˆ‰[˜heAฌิาBฃŽฦQ8%ak๑Š?๓g’tn‰—$bVr๙ม&EŽ|๔‹หsห๚$&eฝร”ตห๋๙พฑฮ‰YRฦูBaG” Dฮัฤน:๐๚ฌVดะdคš)ฉ–Hกธ=T!ะkZยฦฟ/Œ4z=Uฎฅn๊ผต|ไ–;>` endstream endobj 744 0 obj << /Length 161 /Filter /FlateDecode >> stream xฺ%หฑ ย@ €แ‡B๛—'๐๎ZลอBญเ ‚N"๊่ ่&ถพYๅกPˆ—>B๒๙4[ Egใศฮ^< ใถœrนก๔`˜Y0›ธใท๘zพo`ส cWxthOเ+TฅดR…XŠฏ๘ˆžj๊HิFK-KMtึฟŽEดšZMMJ*้๙ึ๖๐~<ว endstream endobj 745 0 obj << /Length 177 /Filter /FlateDecode >> stream xฺ%ษ=‚0ฦ๑š$๏าศ{หGP\ ALd0ัษม˜˜จฃƒ_›AŽVใเ58BGฺส๐ฯใ#o‚Ž5?@oŠG.เ…บ“ๆ8œ!ษ€oะ /๔ <[โ๚8OV3tงธuัูA–"-iมค%์ЉธWไvัj]e“ฺ1นiTF„–ฑสผ'žZปทD'™๑ฎ{ŸFฒo#-ฅJƒ*%๊UvH`žม~ๅชMภ endstream endobj 746 0 obj << /Length 174 /Filter /FlateDecode >> stream xฺ5ฬฝ‚0เthr๛JTœH;˜่ไ`œิัฃ›AG้#t์ะ€ลŸแฮ9น7›Nิœšู”ิ‚ฮ)ึจ๒“1Žร้ŠฅFน'•ฃ\‡ฅะ๖ธ ,ทKJQVtH)9ขฎˆึ วM์น)<ทEฯmำ| B๏FN˜:`NtฬŠŽ่หDmธƒ๐ๅงn{เƒ68€มผ @ฎ4๎๐ ๗AF’ endstream endobj 747 0 obj << /Length 174 /Filter /FlateDecode >> stream xฺ36ี32W0P0bc #K…CฎB.cC ฿ฤI$็r9yr้‡+r้{Eน๔=}JŠJSน๔œ€ข. ั@-ฑ\ž. 2 2v v๕ ?ภุžแƒ?ร9~F~ 'ยฬ์์ภ๘€ ืฐจแ ๖†Š † ƒฟแร๙Fถo~PSA@ุ๗๙€Zธ\=นน„E endstream endobj 748 0 obj << /Length 207 /Filter /FlateDecode >> stream xฺ-หฯjย@๐/์aa.๛ฮ ด›hด ซะ=y(=ฉGกo!๑ั๖Qึ7ุใBโDe๘1๐อ7“้ใ๘‰Sž๑C6ๅษŒวฯผฯ่‹dง2y~?ํŽ4/ษnฅ@๖MrฒๅŠฟd็๋Wฮศ.๘=ใ๔ƒส+‡OG1‰…hฺ$ิขjUhฃ Q๙ซ PA;ๅตำ8sาntW  ]#z่ณ่ป+%0h*ƒ๖&‰xต ่๔ภฃ3]แะ๗'!/R+"`<@ห’6tD` endstream endobj 749 0 obj << /Length 157 /Filter /FlateDecode >> stream xฺ36ี32W0PฐbcC#…CฎB.#C ฿ฤI$็r9yr้‡+r้{Eน๔=}JŠJSน๔œ€ข. ั@-ฑ\ž.  ?@ˆ๑3}``ภ แฦ ่๛๖ ฤA $A dFv`TF5`๔Œ`ฦQ†ภP—ซ'W ๒ง=^ endstream endobj 750 0 obj << /Length 212 /Filter /FlateDecode >> stream xฺ-=j1…ŸุB0อa็‰๖ว‹q%pศคJ\%)S8$N น˜Žข#จT!<ฐ‹ฏ˜๗=L๓ํธๅžgพxšy3๒๛@'w๖ผ™.ๆํ“๖ นwไ4&ท<๒๗ืฯนำไ:pคๅภภhdE+$xษgSLU J“/ุt%๊ญๆŠZXฅM@ฟA•nช‘VผชaDู๊ฎอฆดษ”.š์ื&๛dsะAฺDขˆฌี J[๑ะBฯ๔๓wY: endstream endobj 757 0 obj << /Length 97 /Filter /FlateDecode >> stream xฺ36ี32W0P04V02!#…CฎB.   ‚L&9—หษ“K?\ม‚K฿(ฬฅ๏้ซPRTšสฅ๏เฌ`ศฅ๏ขmจ`หๅ้ข`S๗: มๅ๊ษศ6—น endstream endobj 761 0 obj << /Length 134 /Filter /FlateDecode >> stream xฺ3ฒะ32Q0P0Vะ5T02U0ฒPH1ไ*ไ22 (YBd’sนœ<น๔รŒ น๔=€ย\๚žพ %Eฅฉ\๚Nฮ @Q…h žX.Oฦ? ์๘ูdX0<ข † @๔ก?‚(ช‡hš4hะL.WOฎ@.eย3 endstream endobj 762 0 obj << /Length 111 /Filter /FlateDecode >> stream xฺ3ฒะ32Q0P0b#c# …CฎB.Cs ฿ฤI$็r9yr้‡+šs้{Eน๔=}JŠJSน๔œ น๔]ข  bน<]0๐?`๘€แใ›Tฟˆธ\=นนด. endstream endobj 763 0 obj << /Length 159 /Filter /FlateDecode >> stream xฺ‹ฑ ย0„ฏ~„ฌ'0mTศ ต‚ฤI…l๖ั๚(}„Œ 1-|7wœ63ฝเŒ็1zษฺ๐-ง้<๖ฌฏp}PaIX็คvั’ฒ{ผฟwRลaรั–|Ž— ู’Eฐ’๕S4.๑"ํ€sp@ ๘žคจ1ฎ )`€IŠ*!ภฌƒhk้Hlฒ2H endstream endobj 764 0 obj << /Length 167 /Filter /FlateDecode >> stream xฺ-หฑ ย0ะ2า?ะ๗š4*Tpชฬ ่ไ N๊(จ(t(าOหงไ2v(jDแ —s๏3๙ะŒY๓ˆ› ›œ]ษd5›้ฏ9œฉฐคถl2Rหศค์Š๏ทว‰Tฑžsิ’w๑gOถdั!}7ฝฤiแkj„'B น๐‰Cฟ‘/ศHH‡่@ซัVhป…J„‹๔ณฤฅ๏๏˜–6๔U…3่ endstream endobj 765 0 obj << /Length 148 /Filter /FlateDecode >> stream xฺ]‹; AD{iPh AŸภ๙ฌศฤ๋ N hd Fj(๘ ผXผวฎ3†ยซเUQ>ŒXญ๚œ‰๚ {'g๑er›5ปฃTQฬZ})fžZ1qกทห ฆZNี‰ฉuใิn%ึJˆA]PวT‚ฎ Š๘ ft=ฦ'ฦ›ัถM"x4 ™EYษ 1” endstream endobj 766 0 obj << /Length 154 /Filter /FlateDecode >> stream xฺ3ฒะ32Q0P0Vะ5T02U0ฒPH1ไ*ไ22 (YBd’sนœ<น๔รŒ น๔=€ย\๚žพ %Eฅฉ\๚Nฮ @Q…h žX.O†๒่€๙?  จ่ƒ4Pœ€ ใ b๘ภB?€จ€แว(๚๐ƒ๑Cใƒๆ6 ˜0pนzrr|่0โ endstream endobj 767 0 obj << /Length 163 /Filter /FlateDecode >> stream xฺ=ห1 ย0ล๑ ฿ ่๐]@F…8 ต‚ฤI…( {ด%G(าAˆQA๘Mว“j Gœ๓๛ห1Kล‡‚ฮ$‹s–“฿ฒ?Qฉ)ฐ,([ฤL™^๒๕r;RVฎfkล๘ู‘ฎำมvฌKเปยงย+8ิ€‰๎กy ๛€kแ[๚ฯ|ี0๊รฅย๖:M ^ นฆ5ฝฏR3จ endstream endobj 768 0 obj << /Length 142 /Filter /FlateDecode >> stream xฺ3ฒะ32Q0P0Qะ5T02S0ฒPH1ไ*ไ22 (YBd’sนœ<น๔รŒ น๔=€ย\๚žพ %Eฅฉ\๚Nฮ @Q…h žX.O…†๚?ภ่C"ฦ†ฬ l < `dภภPF00"!f ฤx€หี“+ 2%- endstream endobj 769 0 obj << /Length 165 /Filter /FlateDecode >> stream xฺ3ฒะ32Q0P0Vะ5T02U0ฒPH1ไ*ไ22 (YBd’sนœ<น๔รŒ น๔=€ย\๚žพ %Eฅฉ\๚Nฮ @Q…h žX.Oฦ? ์ไ˜X0<0`((ฃ †‚:†‚z†๖ศoเวภคŒฟƒ ๖Œ?0Qล 02๊š4‡?ะL.WOฎ@.wQ3ื endstream endobj 770 0 obj << /Length 163 /Filter /FlateDecode >> stream xฺ=Œ1 ย0…_่P๘—^ ่MโZ+˜AะษAœิQˆขกCึฃ๔;ˆ„ทผ๏๑=mฦzสOxคXฯX>)บ’Vฌ็ฟๅxกา’ฑV$W“ดkพ฿g’ๅfม‘Vผฮlลโ‰๔,mrัtCp฿๘zŸ'>{๙468 ]ดjัึIใS˜†๑0€––ถ๔KY1C endstream endobj 673 0 obj << /Type /ObjStm /N 100 /First 904 /Length 3068 /Filter /FlateDecode >> stream xฺลZkoศฎ_1w h8๏Ga,Gฝtท ’I๘ƒbำถG2(นI๖ื๗œIูฑcั.ซ#ฮƒ—w.ฯนแ„ม&atD™…Fง…ฅัj”Ndะ็…Vูข…6w’ะN{ผฺ็4 ^ q  oป๒AไŒQ†๓ฌ€g •”Qัย ฦม 1TฐยXY‚C%ฤI^งูP๑7DaผbF๐Ž=เ์3z"8‹žฮ!ฑœฃAŸˆVTx*5 ั k5F^X็ ^๚b$"|< ›ติิvค7 tฏฏ>ฌมณ๚uพ๘X=98(#TOŽื๓ๅขz]ใี ~8_ฏ/Wฎชห3๙i๙๛โb&—อYตชฏš๙๚ke”N•V•สีบนZญ็‹ณ้๚ผžžิ๓ิอื้๒tz:o๊ำๅ—้ีๅษl]ฏช๚i‚ท^ฌJฉ๎~O]{ๆ(-ฆWg%โ<™ U:ใ5=_๓‰88ีkQผ|ณีs๑รำู๑GH๓ ฦi—ห5ฎŸ-ฏ๋บ‘ึ(พ#ฺ0OภŠ์t4š[aŠyณผช›iตโ๔๔-yRW๏Pฺผn ฆoฯ็๋z๚r†W“—'งฃรœsฬ[˜,ๅ‡รฦ€9:`+œษาฺ๋ย<ๆฯŸ?฿@ถฉ/—อzU๕ *ผ๚8Ÿ๊ทะเ้ซrgzy>[ีz ล‡T้‚tามo‘Žะ%คใH ซ$#-}/ฬˆ๔ล์C1,ี้์ห๘6!ย| ยฉรLc ่`ขOส2ร๗ฒ<@ฺZ๙{,๓ณ๓๕J6WUฝ่–7ฆ€rzรปPฏ O[<=แ&6งs2jFh”ทฒŒฅซOณf}ฮ…ผZ^5ว๕ชไฅ๋ท๚d>{บ"สา๗™k›‰‡–%y9kภ๙Yฺ,ฏ.๋ošล–ฌ ำLJศ,sS†ถŒm™ฺ2oสคฺRทฅiK–-ฟิ๒K-ฟิ๒K-ฟิ๒ห-ฟ๒ห-ฟ๒ห-ฟ๒k'…๙ไฆl๙ๅ ?&“›RทฅiK–ฎ-}[n๘ck‹YDโ ? ณ‹๙‡A‰8Iไก๛ค$!๚" ˜ฤวษh)†S?`,ฐ[๎๋aD๖/GG@ฒD8เใVญๅวŠrุ1๑@†„ว…จว#sาyฟA:@˜="ฑำ~–Ÿ=ไ%‡xZฌิ"รมฬO๛—ฃรร {าHใ-ข8;ธ™wฮห˜aŠ-๛ทAšŸจ0๛คDq?Ys_Cf~|FbMบ_Ž8ฆAี2ร€RC<€OŠz๏rดp˜aOm1 9วฒmw‰กธ$งPฒท˜bY/J› 2ึsl7ฬ†์1฿คฝ๙.Z2ฌ@ฺ’ คตF†กดฺI•ฬ Zd@า ฅ˜กด8ฅตp•Ci &=ŒVผ0ZหOCip(ญ ลธ ขๅ}FŠ่ำ #5ศถำ#6ซGู…~๏‘ๆ๊ฃษ{‚„i ก์€๛คงศdฏ|๖๖ฅ๗ฮำอป†็ชข๚ฆืY๖๐๘ ฯhผV0ฅขzห๑=ฯ ลศ>อ+5ิ๑@B[ฒ‚สๆสxba™‹|ฐCž›{XF- ส!ฑVFŠฯyž๐ส์E†าึŠtฮqDอ'น โm. /ฅสe๔ศณYฐr†}N๓่~=ไฮคR๑Xญ™๖I๒BอNNQBห-&ว}‰ฤ7Qฒา>บf˜ฉื์2;ํค๚์๏eปั“฿f๋fฮ/pพllใo[?ฺP=-_ „S่ วโ่๚'ชอทj๒โฬ๕SqTt่pฌึฯฮg @˜TฟฮฺฒฟI๕v~ฒ>_•ใLๅCร_วห“๙โฌœk*=ค%๛U™.vQ๙,Z]y๛os็&]ิท๛๎zๆ[ชปฦ–๒๛ฒล๛ฎัพ฿บ[ถ‡pฝฎ-๊ฐ4๓ำำบฉœุ๗ึV3‹pฺUnค>ลฃ่ก๖=.Tณ๒Cššถฝ=๘aฑz๗๚„,ุ๗๐ X^[~!ข‡?ะ,Xี฿‰ E ทดt<&ท7้jV~F$ปํล“ษ‹ด}2ใษ๒ร(rjฅxัผ~ ์)ตr์,๎(†kw";ห%๑B>š|4ญูj>ฝนx^/|N๓9™@mฉ ฅ0บท่œ‚ธ1ื“‚~ิํg>F่<0ป s™็yAี5x๒ฑสG์ฃ้๎๐่ ั]dฦt p3ถmpŒ๋|ฆ“&ีtโ` ข้ฤI|ฆ4๓™N6D}ัv gโQMƒงlฃ5} ฬญํ[Œ\฿โiO฿ทhC฿ŠŒ๒๚V*VณkqผNอ๓ N๕-Œ็zYเqข๋eแ‘Iืห‚ˆฎ—S]/ Mบ^อY้e1!๕&Ms•–E้ฃc{ QO๎F!แae8ดว๕|อจณั๔tหฆ็[6=จol๚ป„•f๓ตX}์๘ u‚๊^ฦ•่ฏฎ~/'(่๛ำฃแr้\>nแŠท\`ผํใึ"คฤ2|uศฐๆณ๒+f?˜%o๐ƒS๐ฐeฆฬร’๙ธC๚š ๆš Šณก[0๐๓1t๋žภmƒว‘ปีโi๙ป…๋y–ปทn<กผีขˆ '•q=šกJค๔ endstream endobj 778 0 obj << /Length 208 /Filter /FlateDecode >> stream xฺMฮ=jร@เ*^ณGุwฏ„,Cช@T’*EHงLใ@*KK_I9It•*–}y2$ค๙`fšYV‹๚† . eนโjล๛’ฉชyn4^——7Z7ไนชษ฿jMพนใใแใ•๚~ร%๙-?•\> stream xฺEฮกnร0เ‹"ษ#๘ž`‰ปE๊2ฉ“640ต…ญ:Z‡ํต๒(*54ฐz;ฯสพ“๎๗้ฮอใCQMZKi4ตš๖OธŠa฿—ื#V๏ด๊ฐฺHŒี๘B—๓็ซ๕๋I?ะ‡LnqศxŒศ"Ÿไ — +พ”7†’yณฐŠKซBแ”ฯr™๏ญ˜ล”HฎrAถ'Edes4PขŸธƒษ๎ะIย;น=Cม้ฯ๘<โอ๘f endstream endobj 780 0 obj << /Length 180 /Filter /FlateDecode >> stream xฺ}ฬฑ ย@ เ Y๚B๓ถวฉเbกVฐƒ “ƒ8ฉฃ ขซืGซoาGุ่แHผ๊โไ๐?!#3O)%ญ2:jผข้sฺวฯๆpฦผฤdKFcฒ๔5&ๅŠ๎ทว “|='฿ด๓—{, ฐา@$dโภz๒bลภSvŠฃึk”‹kๅฒ .๔ž?ุs๐๗n`fguฤฑG".i•H –%n๐ aŸHž endstream endobj 781 0 obj << /Length 189 /Filter /FlateDecode >> stream xฺmŽ=ชยP…OฐL“ ™รUมฦ €)„๗* ฑRK E,-๎ฤ%Xฆ๎ผ๑ูZ|็ฬฮŒ`<ๅ!—ฅ‘c7แcIro=|หอแL๓ŠŠ-ป’ŠตูTTพ]๏'*ๆ? 6wษ;ปSตd =m‘้ ^;่C’้ ๊ดC= ษ[ˆo๑Hป฿ี—๑4ี“เ+๕‡พตอ|ƒ่,ๆสT%ต`ข๖Cˆ UEฟ๔e„U™ endstream endobj 782 0 obj << /Length 218 /Filter /FlateDecode >> stream xฺ}ะ;ย0 เT*yแH๕ ฺ๒˜xHt@‚‰1#Vฺฃ๕(=#C„IXu๙วฑ;MบูcLฐฃ˜๖1ำธืp‚4ฑี{ร๗ำ๎ใิำิึAๅ ผœฏPใๅ5จ)n4ฦ[ศง(„ฦ""rŽจฒok๋3ršoำฒ=ม#,๎๋’่มฺ๙!+?บ็๐๎:รบษ–ทj2๒–MŽผโฟ{k๔ษšo๓7บฮถt /ว%ŽE‹xqข’O]๒๑yc้ฏณV๐Žปfต endstream endobj 783 0 obj << /Length 206 /Filter /FlateDecode >> stream xฺEสฑjร0€แ3ทxอฆ{‚สฦฉ!Ki ๕PHง!S1CBบฺz4?ŠAฅ‹!๕ฎ2๗฿ญปป๛ 5ิ๓ฌ{๊z๚h๑ŒดFV9ผŸp; }ฃnƒ๖™+ฺแ…ฎ—ฏOด#ตhwthฉ9โฐฃ*่:šuš2˜\ ธRŠw.&?บ ,ฬ4Ÿ…4y๗มม*ม$ŒDฎ*BZ ฃ ีqิLึAลค„๏T3‘๙ ๕ฌ S•E˜kลk€ภง_๑ฯsc‹ endstream endobj 784 0 obj << /Length 187 /Filter /FlateDecode >> stream xฺEฮ1‚@ะO(Hฆแฬ DMฌHP)Lดฒ0Vjiกัv!๑b…#PRlvกฐx›ฬ฿์อาษ|ษSNฆzd3N|M่AiยฟDวแๆrงขค๘ศiB๑VcŠหฟž๏ลล~ลšฎ๙คoฮTฎp@ 5"i‘K‘ฮ“O๏;ฯ๚=lะม†-LิŒ๒ZฆRๆฯ้g;๒~z _(l ขฦ ฏ+HD+๊jญ/อ๐ฺ”t /’&O… endstream endobj 785 0 obj << /Length 219 /Filter /FlateDecode >> stream xฺUฯ1Nร@ะoฅˆ4เนฌ—‹T+%AยTˆ*PR%ญๅŽkๅ(9‚KVฬk@+ฝbv็ฯฮ*Vk-ี{ฝ๑บชดบำw/_ซฅV!]ํ?eS‹{ัฤ=ฐ.ฎ~ิใแ๔!n๓ดU/nงฏ^ห7ฉw ไgฑ#cdใ,Œผปฺemไ 4ฦ€bขอzฃ# cy™aไLKŠDดฦ)็/ลใj <ูD?รQ ŽJpT‚S†฿ฆDๆDถ"~sษbผ9[`ษ-๛Zžๅ/[’ endstream endobj 786 0 obj << /Length 174 /Filter /FlateDecode >> stream xฺ]ฮ1ย0 PW*y้๐ Hำา ฆJฅHd@‚‰1#V’ฃqŽภศ€œฆYžญo{๐ค—3สHJ.ล”สœŽ/˜Wœ3๛อแŒBฑฅผBฑไ1 ตข๕~Bัฌ็$Qดดให=ช–b<ฝ”5ำ"k f5ำภ2ืธ บมื‹‚o/ ^^ฝ02^€ง=m;~วฑ}w 7๘บK6 endstream endobj 787 0 obj << /Length 251 /Filter /FlateDecode >> stream xฺUฯ=Nฤ0เgนˆ4MސนdC6hฉ"-‹D $จ(VT@I‰ญsด%Gp้"๒0รj šO๒๓ฯ<ฏ๓๎ŠW|ษg ฏ;๎.๘ฅกwj7ฎธk;ฯoดจ~ไvC๕ญฦTw๙๑๕J๕๖šชwผox๕Dรށ"จฒd„™เEfนŒ(ฃจfŸะON‚,8ูX๗G:K`‹#(โ‰rVz#LŠฮี™–[สฎ=ๆด ŸC+&ง็“ฯ๚ผ_…KZุ'}วJ๛GT9๗2VJ์ง "c่Ep($#;Y๐ƒ๐m}่f ๚HDqc endstream endobj 788 0 obj << /Length 237 /Filter /FlateDecode >> stream xฺMฑJฤ@†"0อ>ยฮ ่&ๆ8ฮL!he!Vjiก(X]๒hy”}„”W„Œ3็กW์Wฟ3ฌ๊๓fอ%ฏ๙ฌโUหอฟT๔NuซbษM๋<ฟัฆฃ๐ภuKแFe -~|ฝRุ]qEaห—Oิmp€~2 เDF๘ฝ“KˆC‘ะฃ˜ฐC>a1ฬ๘6ะศ๎€Qแ qฐ๙ฑฤขOt›“ฝ!QศแฟMสี@๖ งธ4์ฬ‹œB.6eถณf๘คˆฃjzUŸk^ด@ด^&[ซ3•@ืำ%e endstream endobj 789 0 obj << /Length 237 /Filter /FlateDecode >> stream xฺ…ฯฟJA๐  ำ์#ผ€๎๋Sไx…`* ฑRห@mฝ€เ+]ฐ๐5.opeŠ#๋ท๖4"X์Y๘fๆฬžไ#I%—ใ์\์H๒Sนฯ๘‘ญE5•aบ[๐ธds-ึฒน@My)ฯO/lฦWษุLๅ&“๔–หฉ‘ย!ฝษ!E€จ<ฏ=;Ol#G6ขšˆฎ#?๚๔้฿ม!ฎฯ‡ดPo๐ึk|€โ ตส๏ภ S-Zฃ‘jn@า้† ๗^Sๅ\MฮนO[mXโŽ็'่]๗M ภ’ˆg%ฯ๙ ลaข endstream endobj 790 0 obj << /Length 219 /Filter /FlateDecode >> stream xฺeฯฝŠย@ภ๑‘-ฆ๑œ87k\แš ๘ฆ8ะสBฌิายใฎ5>ฺ>J! โ8s*M๑+fณfปi;|RB>กOO+[LƒL ๛ัrƒŒา€n,st๙7ญั๕'๒่†4๗”,04™#ด˜Kศž‰|…ฒซsQฮ5k˜“ อ๗`4g4loุ ์ูมV๒ง-•(˜K๖ฝฅ wL๕@zh–J”;-%ำหถ ูทฐ)X"W ฯ ื%5ŽฃงxTgD endstream endobj 791 0 obj << /Length 247 /Filter /FlateDecode >> stream xฺUฯ1Nฤ0ะฑRDš!spL$*Kห"‘ *ŠPnฑZ’›a‰p…aหVฬุ-hž%๓6gฅิโฝœzi/ค;—gฯ;nZ์ึา5‡ฃง-ฏzvาด์nฐฯฎฟ•ทื๗vซป+๑์ึฒ๑R?rฟข"‘]@ศ ็‘Lฮ‘Šl#ูนŠTํˆ Œ`ภB 0‰Nศ่x1+{P2idTพp\}#ธ๚Dpะ`0QXp3ฬ˜&Lั€QัDOxโHา=0cณ>zy‰์tฝำ_ัaคƒฤก\๔จZeดดhA%J‘ัฯ๓uฯ๗†[q, endstream endobj 792 0 obj << /Length 222 /Filter /FlateDecode >> stream xฺmอฑJฤ@เ?คL“70๓บY/)ฌ็ ฆดฒซิ๒ŠํฤM็kลสืศ#lR„Œ39‘`vแ‹ลIyฦ9{ฯวžหS›O[*rถS.~พ๎7ดฌษr‘“ปิwr๕??ฝ<’[^Ÿณ'ทโ;ฯ๙š๊ฃŸp} ฒXคฉŒˆ|ˆ๒9ฅ๒.c:ล2dƒัGาW-Bงค]hตสTxtูฦ ฤ3ฝ’ฬtJ:ำยBŒ–d`O0๖qVฐใฟเ?้=ฟสๆีสฝtQำ }„ฐZ} endstream endobj 793 0 obj << /Length 238 /Filter /FlateDecode >> stream xฺUฑj„@Eฏl!ผฦO๐@2WaซอbHชaซ$eŠ]’V…˜Ÿโ'XN!N๎()lรน๗ํ‹๒ ™๔&ื}ฅๅ~ไr‘ขโ0ำฒXฟไX‹yีข๓ศฑ˜๚Iฟฏ?ŸbŽฯ๗š‹9้[ฎูY๊“ฑ`gย{ ๒พG8; ข‹GX-v#š€iƒศ!‘๔œ-H;ย‚ิ฿ H$ด# ‰หห๚˜iท)›่YMP4ซbAณำฐc›อมำ"ํัvถ‡ํ}วฐ9ด˜B6฿…l๐nศC-/๒h@l่ endstream endobj 794 0 obj << /Length 240 /Filter /FlateDecode >> stream xฺUฯฑJฤ@เ?คL“Gศผ€&1Iq ฮL!he!Wฉฅล‰ถท๛hy”> stream xฺ36ี32W0P0U06R06P01TH1ไ*ไ22 (XB$’sนœ<น๔รŒLธ๔=,น๔=}JŠJSน๔œ น๔]ข  bน<]ุ๐๐ทa_๛#็ๆ\ฎž\\^"/ endstream endobj 799 0 obj << /Length 178 /Filter /FlateDecode >> stream xฺuŽ1 ย@Eฟคฆษœ ่๎Fc“@Œ` A+ ฑRK E;‘=ZŽโ,Sˆ:ูต^5๗ฟ?Œั˜5อ„ฃ :‘Iๅช9Ž~ั๎HEEjอ&%5—;ฉjม—๓๕@ชXNู*ycXoฉ*EXฃW#ท๘ot บO„—ุ–-pw/G๓Ÿ๚—W†_๏”rQˆHt"u;@fศษKณŠV๔ว/9- endstream endobj 800 0 obj << /Length 173 /Filter /FlateDecode >> stream xฺuŽ1 ย@EฟXฆ๑™ ่๎FำbทดฒVj)จhk<ฺล#XZqฒ‹ฅ๐ช๙3๓8%Sึœ๑0ใ$ๅIฦ{Cg2น 5งIHvG*-ฉ ›œิBฦค์’ฏ—Tนšฑ!UqmXoษV|Zเ4@แ;DOD/๔฿่ต>ป{ O,<:ื!คa3\ลฟ?แg)D$:‘ŠZ 4พŒhฅอ-ญ้ ฆ 6ซ endstream endobj 801 0 obj << /Length 96 /Filter /FlateDecode >> stream xฺ36ี32W0P04Qะ5S02T01SH1ไ*ไ2 (˜Ae’sนœ<น๔รฬธ๔=€ย\๚žพ %Eฅฉ\๚Nฮ †\๚. ั† ฑ\ž. H\ฎž\\2D7 endstream endobj 802 0 obj << /Length 167 /Filter /FlateDecode >> stream xฺ-Ž1 ยPDW,„m<‚s~~LJ!F๐‚Vbฅ–‚Šึz4โ,-$q'คXฬฮn˜Œำ 2Pเเ๕ขin,AศZcา2ช อี-Œช‹Kฎ๗ฃบr5ƒWWa๋‘์4V8‹ศืT›ำใ%2}‹ ~"=ยๆiะŒัว บ3ฺt'›ษ่1ร,ฑํณ‹์ๆVำไm ๓จk.U4โ endstream endobj 803 0 obj << /Length 114 /Filter /FlateDecode >> stream xฺ36ี32W0P04Vะ5S06V01SH1ไ*ไ2ดŠ(˜Aฅ’sนœ<น๔ร -น๔=€โ\๚žพ %Eฅฉ\๚Nฮ †\๚. ั† ฑ\ž. ๕†``@๔ษ1@‡qนzrr…VT endstream endobj 804 0 obj << /Length 114 /Filter /FlateDecode >> stream xฺ36ี32W0P0Rะ5S02R01SH1ไ*ไ2ด (˜Ad’sนœ<น๔ร -น๔=€ย\๚žพ %Eฅฉ\๚Nฮ †\๚. ั† ฑ\ž. ๕‚๊?``HTs ุ1ธ\=นนq„Qผ endstream endobj 805 0 obj << /Length 151 /Filter /FlateDecode >> stream xฺ36ี32W0P0Qะ5S06T01SH1ไ*ไ22 (˜Ad’sนœ<น๔รŒฬธ๔=€ย\๚žพ %Eฅฉ\๚Nฮ †\๚. ั† ฑ\ž.  ? ๘ืqAฑ=หƒp?```แ ฬ0„)2f>ƒเ†`3ˆ™ธ\=นน”{3k endstream endobj 806 0 obj << /Length 159 /Filter /FlateDecode >> stream xฺ36ี32W0P0Vะ5S06R01SH1ไ*ไ2ฒ (˜Ad’sนœ<น๔รŒ,ธ๔=€ย\๚žพ %Eฅฉ\๚Nฮ †\๚. ั† ฑ\ž. ๒``bv0~ภภ7‡ๅธพก?ะไ@ЁlHฌ†\๓มnบไVvจA~๚…หี“+ ๓…D๑ endstream endobj 807 0 obj << /Length 162 /Filter /FlateDecode >> stream xฺ36ี32W0P0Vะ5S06R01SH1ไ*ไ2ฒ (˜Ad’sนœ<น๔รŒ,ธ๔=€ย\๚žพ %Eฅฉ\๚Nฮ †\๚. ั† ฑ\ž. ๕โ?@Ÿกˆ๊ไ˜Ÿ\ 4”๛ ฬ?00B1ˆ ษีi>ศm@7‚ r3ุํ@?€ยๅ๊ษศ;โE{ endstream endobj 808 0 obj << /Length 102 /Filter /FlateDecode >> stream xฺ36ี32W0P0Qะ5W06Tะ5TH1ไ*ไ22 (˜A$’sนœ<น๔รŒฬธ๔=€„งฏBIQi*—พS€ณ‚!—พ‹Bดก‚A,—ง‹B ?€ŒAb\ฎž\\&” endstream endobj 809 0 obj << /Length 107 /Filter /FlateDecode >> stream xฺ36ี32W0P04Fฦ &F )†\…\–@ฎˆ–Hฮๅr๒ไาWฐไา๗Šr้{๚*”•ฆr้;8+r้ป(D*ฤryบ(ุ1ิ3oภ ๋0ก2@5$หๅ๊ษศ:y5 endstream endobj 810 0 obj << /Length 157 /Filter /FlateDecode >> stream xฺ36ี32W0P0Q0S06T06UH1ไ*ไ22Š(Y‚%’sนœ<น๔รŒฬธ๔=€ข\๚žพ %Eฅฉ\๚Nฮ †\๚. ั† ฑ\ž. r `,ฅกธ@ŽนกFŽฟแŸœ๚y๕ ๕7ศวภใ ๕ `ฤ‰ƒไA๊@๊A๚@๚‘อC6Ÿหี“+ ๒็2ท endstream endobj 811 0 obj << /Length 111 /Filter /FlateDecode >> stream xฺ36ี32W0P0R0U06V06UH1ไ*ไ26PAcˆDr.—“'—~8ฯฅ๏&=}JŠJSน๔œ น๔]ข  bน<]˜ุํ๐?ศ˜` ด“หี“+ ผN7˜ endstream endobj 812 0 obj << /Length 120 /Filter /FlateDecode >> stream xฺ36ี32W0P04RะตT02QฐTH1ไ*ไ24 …- 2ษน\Nž\๚แ ††\๚@q.}O_…’ขาT.}งg จ‹B4PS,—ง‹‚<ƒ}C๚h@;๒?P฿๐Ÿแร†.WOฎ@.]ฤ#ฺ endstream endobj 813 0 obj << /Length 96 /Filter /FlateDecode >> stream xฺ36ี32W0P04Fฦ – )†\…\–@žNฮๅr๒ไาWฐไา๗žพ %Eฅฉ\๚Nฮ †\๚. ั† ฑ\ž. v ๕ `ฐžมށหี“+ … endstream endobj 814 0 obj << /Length 154 /Filter /FlateDecode >> stream xฺ36ี32W0P0Qะ5S06T01SH1ไ*ไ22 (˜Ad’sนœ<น๔รŒฬธ๔=€ย\๚žพ %Eฅฉ\๚Nฮ †\๚. ั† ฑ\ž. ฬ ์ ˜„|yf€`{ ถโ: ฎโ?@ƒ„?@03?๑ป10#๐3‚Lcภธˆน\=นนQื3k endstream endobj 815 0 obj << /Length 103 /Filter /FlateDecode >> stream xฺ36ี32W0P04Fฦ F– )†\…\–@ฎˆ–Hฮๅr๒ไาWฐไา๗Šr้{๚*”•ฆr้;8+r้ป(D*ฤryบ(ุ1ิ3o€มz;์S—ซ'W RŽ#ข endstream endobj 816 0 obj << /Length 131 /Filter /FlateDecode >> stream xฺ36ี32W0P04RะตT02Q0ฒTH1ไ*ไ24Š([@ฅ’sนœ<น๔ร น๔=€โ\๚žพ %Eฅฉ\๚Nฮ @Q…h ฆX.Oy๛†๚0h฿ ฯ€@ี=€@๛๒ุ€๚† 00pนzrr{จ, endstream endobj 817 0 obj << /Length 108 /Filter /FlateDecode >> stream xฺ36ี32W0P0R04R06V0ฒPH1ไ*ไ26PAC3ˆLr.—“'—~ธ‚ฑ—พP˜K฿ำWกคจ4•K฿)ภYมK฿E!ฺPม –หำEกร >€M-—ซ'W i7ฐ endstream endobj 818 0 obj << /Length 101 /Filter /FlateDecode >> stream xฺ36ี32W0P0S04R0ฒT04WH1ไ*ไ22 (˜B$’sนœ<น๔รŒŒธ๔=Lน๔=}JŠJSน๔œ น๔]ข  bน<]๊๘ู\ฎž\\ยึ‰ endstream endobj 819 0 obj << /Length 108 /Filter /FlateDecode >> stream xฺ36ี32W0P0W02R0ฒP01RH1ไ*ไ22PA#จLr.—“'—~8P€K฿Lz๚*”•ฆr้;8+r้ป(D*ฤryบ(T0>๘รแ;น๘Q ๓ 2`8ภๅ๊ษศqv6 endstream endobj 820 0 obj << /Length 145 /Filter /FlateDecode >> stream xฺ36ี32W0P0bccC…CฎB.crAษน\Nž\๚แ ฦ\๚@Q.}O_…’ขาT.}งg ฿E!ฺPม –หำEม‚ก†ฟ+#฿ภ๐Cž†๋๑?0 โ3~ฐc cำห †„ูa`?๐+fn(`เr๕ไ ไŽy^† endstream endobj 821 0 obj << /Length 209 /Filter /FlateDecode >> stream xฺe=Žย0…Q MAŽ0sp ”‘๘‘HฑาRQ * คA‡ฐ–›ภ()ฌ˜ว‚VŠฏyใ๗yฆำkง}ตซญL;‰v3]%ผๅ4Ck/}N–lfšfl&ˆู?บ฿ึlฟCMุŒtžhผเbคิ$"๙ภ–TWjO*สC {ฮŠธJขาƒ›ศ?ณY๔๓3DQ(แธR ฒล:‚”Gxะyรฟ'ผฑ’; W…ช‡๋†ฝ.pน๏เ<ๅ;^X“ endstream endobj 822 0 obj << /Length 208 /Filter /FlateDecode >> stream xฺeŽ=ŠA…K *้#t`็Gpœ@ะศ@Œ\C—]˜`X<€W๊ฃ๔*Tฆฌ3ƒ/x๕ชซม็G>ข”‘œ†}gxย|ฌ:2๛#NKL6”1Y่“rIฟ?Lฆซ/R=ฃmF้หaืœ;่‰@_ค1ญ๓6oฝw‘P +แ฿ ื๎สuaธš๔๙V๗žpค‚w^~D๗ƒฝ๗šใ5ฏั\p—ฌฟํcำZึ~ึ?<œฅื˜เผฤ5>y e` endstream endobj 823 0 obj << /Length 218 /Filter /FlateDecode >> stream xฺMฬฑJAเ‘ ำฬธ๓บwท›p 1‚WZฅ+ตดP,–\:ใลผA^aแส)†[/^ >~๘q^]rมŸ•์=ฯ+~.๑ }ม‡›๛iyzลeƒnอพ@w3ึ่š[x|AทผปโŠJ.ฑY1D€“`–LN๖; ๏ฃู?ๆˆ๖Bิ)uฃŸNM&1m#จท`ำ)„พ† 5ดa#hญไภ๖J 1iกcชํใ&hlsึ0ด4ศ๘+™dvxเ=๚ฎY่ endstream endobj 824 0 obj << /Length 165 /Filter /FlateDecode >> stream xฺ}ษ1 ยPะ‹ภ6น€=ษObด2#๘ A+ ฑRK E;!9ฺ?ŠGฐดฌH\x3›Lฦ๑”#NUb85|2tฅ8ำตต}/TX wgฎtฅะฎ๙~{œ),6 ึ^๒pt [๒@<๙ น*‘Zำ5๐•ื๑›กชฉ1ภ๛^สyAฟ9฿HU=tงฅฅ-่4๕ endstream endobj 825 0 obj << /Length 158 /Filter /FlateDecode >> stream xฺ36ี32W0P0bcc#…CฎB.crAษน\Nž\๚แ ฦ\๚@Q.}O_…’ขาT.}งgC.}…hCƒX.O `,|ภฤ5?ธข‚แG f`‡‚™?ุ30?‡เม˜8>ภ฿ภม,ฎ`ใ๛?0 โsนzrr'ธRใ endstream endobj 826 0 obj << /Length 161 /Filter /FlateDecode >> stream xฺ36ี32W0P0bc#C…CฎB.#K ฿ฤI$็r9yr้‡+Yr้{Eน๔=}JŠJSน๔œ€|…hCƒX.O…?0ˆƒpเoเภ฿ภฤฬ๘ฑ`83T~ > fเšกฑš๑ƒฟ ‰รฬได„@tำ.WOฎ@.K”eL endstream endobj 827 0 obj << /Length 190 /Filter /FlateDecode >> stream xฺŽ=ย0 …]uˆไฅGภ€ดi"•"ั &ฤŒ ุP้ัz”!#H…เ๐ณ#๋์๗์t8P#Š)ฅ~BฉขLั6มชœล˜ฒ๔3ู์ฑจP.Iๅ(ง,ฃฌft:žw(‹๙˜”%ญŠืX•‘1 ๏รฮูถWฏotZ กฝB`๋/ำ€็๖ฟ]๖Aอ^Ÿแ๓ด‡๓{ญGพkDวs เžš"8ฉp/ณ.S‚ endstream endobj 828 0 obj << /Length 160 /Filter /FlateDecode >> stream xฺ36ี32W0P0bc#C…CฎB.crAษน\Nž\๚แ ฦ\๚@Q.}O_…’ขาT.}งg ฿E!จ2–หำEก†๑? ฯPƒy fมฬ๘A๘2ฤ5Db$} s@ๆ1C1ศ {A๖ƒqฯ๛ธ\=นน XS endstream endobj 829 0 obj << /Length 131 /Filter /FlateDecode >> stream xฺ36ี32W0P0bcC…CฎB.cC ฿ฤI$็r9yr้‡+r้{Eน๔=}JŠJSน๔œ€|…h –X.O…โศ˜ฟ.bถโ#หƒี3 c ถร†๖Cรธ\=นนMซ\( endstream endobj 830 0 obj << /Length 134 /Filter /FlateDecode >> stream xฺ36ี32W0P0bccC…CฎB.c฿ฤ1’sนœ<น๔รŒ น๔=€ข\๚žพ %Eฅฉ\๚Nฮ @พ‹B4Pe,—ง‹B†์์ฐ` f@`> –Gเ11ฒ> stream xฺuฮฑ ย@ เˆรA–>ยๅ๔ฺ^ลฑP+xƒ “ƒ8ฉฃƒข[ฑ}ด๓M๒ โr`ก๖Z่&แห@ู่4žSH1M"าš’˜N^Q‡ไ+ัๆxมฬ ฺ‘Qญฺ1*ณฆ๛ํqF•mกสiQx@“ศ—…๒ระ4> stream xฺ36ี32W0P0bcC…CฎB.c# ฿ฤI$็r9yr้‡+q้{Eน๔=}JŠJSน๔œ€|…h สX.O…๚ร >ใ’๐˜˜T3 ›{ธ\=นนc๙ endstream endobj 833 0 obj << /Length 98 /Filter /FlateDecode >> stream xฺ36ี32W0P0bcC…CฎB.#c ฬI$็r9yr้‡+s้{Eน๔=}JŠJSน๔œ€|…hCƒX.O…!#†ฺ!4ปธ\=นนํ >| endstream endobj 834 0 obj << /Length 138 /Filter /FlateDecode >> stream xฺ36ี32W0P0Vะ5T06R01TH1ไ*ไ2ฒ (˜Ad’sนœ<น๔รŒ,ธ๔=€ย\๚žพ %Eฅฉ\๚Nฮ †\๚. ั† ฑ\ž. ๒0ุว >ƒ=p ƒใ: ว๐Ÿ๙C` r  Œธ\=นน‚น55 endstream endobj 835 0 obj << /Length 177 /Filter /FlateDecode >> stream xฺ=อ= ย@†แ‹ภ4s„ฬ ฬฯ*v4‚)ญ,ฤJ--ํฤไh9สaํ ๑[dyŠw†aอd”N5ึŒัqขง„ฏlb๕้ว ฯ ŽvjbŽV˜rTฌ๕~{œ9šoŠฮuŸh|เ"ืา†M๋ฒ?฿BR …$”ม žะ `่ภ’5‰@Xu2(ั-vxปŽลM ีณCณ^ุ๓I-ภะ–6๘ถN|๓ฒเ-T?Jพ endstream endobj 836 0 obj << /Length 113 /Filter /FlateDecode >> stream xฺ36ี32W0P0bccC…CฎB.crAษน\Nž\๚แ ฦ\๚@Q.}O_…’ขาT.}งg ฿E!ฺPม –หำEกร โณ 9ฎม…๋๓ ๙?ธ\=นนf*Hแ endstream endobj 837 0 obj << /Length 144 /Filter /FlateDecode >> stream xฺ36ี32W0P0bcC…CฎB.c# ฿ฤI$็r9yr้‡+q้{Eน๔=}JŠJSน๔œ€|…h สX.O… Œม๘3ห=`ฏ€ใr| ƒ2r66,cQ!'Wม|ฬ™@0AŒ์ๆr๕ไ ไ ZM endstream endobj 838 0 obj << /Length 165 /Filter /FlateDecode >> stream xฺ36ี32W0P0bccC…CฎB.crAษน\Nž\๚แ ฦ\๚@Q.}O_…’ขาT.}งg ฿E!ฺPม –หำEก€์ม๕ไ๐0ใ ถ€b(–b9(ๆb~$ฬŒภฬ‡˜„C0†โb(ฎbk0ฎ`เy(ๆ๒๙ธ\=นน{Sq endstream endobj 839 0 obj << /Length 150 /Filter /FlateDecode >> stream xฺ36ี32W0P0Qะ5T06T01RH1ไ*ไ22 …!2ษน\Nž\๚แ Ff\๚@a.}O_…’ขาT.}งgC.}…hCƒX.Oๆ๘aม0ฎoจoจcoจaเใ? ~0ฐำƒฬa˜] {A๖รrศ} wrนzrrึW]U endstream endobj 840 0 obj << /Length 157 /Filter /FlateDecode >> stream xฺฬ-A เู Hjๆ๔ฬฯBศฺeIA AP,?Gใ(aๅ ByMโฏ}m9ว{ŽPFžn)Vศ^ฃ.'ชน-วŠSriลืหํHฎ^ฯนแ]`ฟงิฐHgD^ *รๆัรๆag๓ ีl~ะy๑้iwz?`,ZG๗oาร๓ 2-m่ ๚T endstream endobj 841 0 obj << /Length 176 /Filter /FlateDecode >> stream xฺ36ี32W0P0QะตT06T01RH1ไ*ไ22 (˜Bd’sนœ<น๔รŒฬธ๔=€ย\๚žพ %Eฅฉ\๚Nฮ @พ‹Bดก‚A,—ง‹๓ 0ศว`?ื7ิ7ิ1ศ7ิ0๐ƒ๑?ุฉๅAธภ๙5็@ธŽC}๛˜[@๎นˆ@ธŠํกXพ‚๙ธ\=นน•f endstream endobj 842 0 obj << /Length 187 /Filter /FlateDecode >> stream xฺ}ฬ1ย0 Pฃ•ผ๔๘ฆiลˆTŠD$˜02€`N6Fฎิp8Bว!Nี–'ู฿*'ŠIาH’ส(•txFฅ2ฆ4้’ ๓ล†”Bฑpkๅ’ฎ—Eพš‘DQะVRผรฒ m+kฆe,€f"ฃcX9"&|;‚_๘ิ฿๙๕--๓้Gฃ™ฉฏgข™‡้y]G/c›ะzภ6]\?@8/q_…] endstream endobj 843 0 obj << /Length 204 /Filter /FlateDecode >> stream xฺMฮ1jร@ะoTฆั4HVZษุ‚ใ@Tโ*EH•ค4ุมncA.ถGไJ็Bh๒ญ4. †ฯT๓[ฟะB+ฝ)ต๒Z{}/e/~ษฐะบ๚฿ผmeีˆ{Vฟ๗ภX\๓จ‡ฯใ‡ธีำ–โึ๚Rj๑*อZa฿mb?15‹9:EBˆ#๒8 ›œ'้d@าพ่Dกr2๋‘ฺ€™— ๅ9Pึ)%ลณ|…}“‘7ฦ[๋B4A0vฒs:ศ}#๙2b endstream endobj 844 0 obj << /Length 123 /Filter /FlateDecode >> stream xฺ36ี32W0P0bccC…CฎB.crAษน\Nž\๚แ ฦ\๚@Q.}O_…’ขาT.}งg ฿E!ฺPม –หำEกƒŒฐจAว์,ุ0ะวภ๘?ƒ๘\ฎž\\YN์ endstream endobj 845 0 obj << /Length 144 /Filter /FlateDecode >> stream xฺ36ี32W0P0Tะ5T06Q01TH1ไ*ไ26 (˜Ad’sนœ<น๔รŒธ๔=€ย\๚žพ %Eฅฉ\๚Nฮ †\๚. ั† ฑ\ž. ศGว ŒhŽ0ƒ1๛ๆ์ ๘Xไฦg`จวภ ƒ—ซ'W ๎m[{ endstream endobj 846 0 obj << /Length 158 /Filter /FlateDecode >> stream xฺ36ี32W0P0Tะ5T06Q01TH1ไ*ไ26 (˜Ad’sนœ<น๔รŒธ๔=€ย\๚žพ %Eฅฉ\๚Nฮ †\๚. ั† ฑ\ž. ๕๘ภ†A|ฦ ฬ~€๙2Fๅ๑•ฬ๐Cžืุกbป–ซ@ล๒?๘? 0๛0ๆr๕ไ ไ‰๋J endstream endobj 847 0 obj << /Length 165 /Filter /FlateDecode >> stream xฺ36ี32W0P0Tะ5T06Q01TH1ไ*ไ26 (˜Ad’sนœ<น๔รŒธ๔=€ย\๚žพ %Eฅฉ\๚Nฮ †\๚. ั† ฑ\ž. 0Gว6 6 lวภP#วภP๓ณ?๘ภฯหU€1ป\ล8žc๙€}-*!๛€y‡์8!€๙?3~เo`|ภภๅ๊ษศไ‘S\ endstream endobj 848 0 obj << /Length 180 /Filter /FlateDecode >> stream xฺEฮฑ ย0เ+…[๚ฝ'0iฃธจ์ ่ไ N๊่ ่Vmญ’Gศ˜กขR‘ใ๙95็3’”3ฅh’ั)ร+*I~8๚ล๑‚E…bGJขX๑+ŠjM๗ใŒขุ,ˆsI๛Œไซ’หใ><ฑั02sูDถ†ศ๕ฮผูำ4L› ํ‚ค 9๖ฺ†?ต ฎึ๗3“B์uI›ฐฦhพB๗?>ใฒย-~.๒Vํ endstream endobj 849 0 obj << /Length 168 /Filter /FlateDecode >> stream xฺ-ฬฝ ย0๐แ–>B๎ LPฤ)P+˜AะษAœิัAั9็ำ๙>‚c‡๓R~p;ฮš9Vhณ›žkธญฅฏr›ง+tฬm f-S0~ƒ๛๓ฆ.Qฆ=ไไพว “*๙ฃ4สqI9bแH+MjT ฆ 3•B‹๐-)ศ. #-ตฆ%ผ$รs’|š๒;ฉˆฐ๒ฐƒ‚tIจ endstream endobj 850 0 obj << /Length 171 /Filter /FlateDecode >> stream xฺ36ี32W0P0bccC…CฎB.c฿ฤ1’sนœ<น๔รŒ น๔=€ข\๚žพ %Eฅฉ\๚Nฮ @พ‹B4Pe,—ง‹ย†P1;>|๐๛๑ ์๗``วƒ๓๖Œุ0@๐†:(ถร‚๋€j๊ภ๊>€0PH?`๓@ๆ฿ภ~?s๓.WOฎ@.eT๚ endstream endobj 851 0 obj << /Length 162 /Filter /FlateDecode >> stream xฺ36ี32W0P0bcC#K…CฎB.#฿ฤ1’sนœ<น๔รŒLน๔=€ข\๚žพ %Eฅฉ\๚Nฮ †\๚. ั† ฑ\ž. ๖a`Ÿˆ๙XA=ƒ}C=C=ƒCโX0Lฎށจ‡จSพม€|ƒ‡zฐy์อช๘ดห—ซ'W ๛7 endstream endobj 852 0 obj << /Length 172 /Filter /FlateDecode >> stream xฺuŒ-ย0วปL<ณ#์€ฎ๋rษ $ H,ใZฯq9Žbiy]0$ ~โฉGร|ŒๆŒ.ฐPธSpญXgA†`{€ส€\กV g์‚4s<Ÿ.{ีb‚ฌk\๓dฆF!|ระ7ƒุEAฑRโ=ฅึSู”dEJW‘๔t ผ~ะ๕y๒้ฆผ+yoฉl๛?วฟŽ]ไ๏Nุุมิภ”L[ endstream endobj 853 0 obj << /Length 170 /Filter /FlateDecode >> stream xฺ]Œฑ ย0E_้xK?!๏ Lำ"ล)P+˜AะษAœิัAัตองๅS๒ ŽŠฯDœฮp๏นz>ซ*ฉNhชtึxรoWฆ˜ฤ้ŠญEตงชAตŽ-*ปกวyAีn—คQutะTัvฦ๐9O ˜ก`v๒58ใค7P๘D"D˜๙?ภ๔ฃ‡ฬใD0A9J|uฟ†ธ’peq‡.Lฐ endstream endobj 854 0 obj << /Length 143 /Filter /FlateDecode >> stream xฺ36ี32W0P0bcC…CฎB.ฐ˜ ’Hฮๅr๒ไาW02็า๗Šr้{๚*”•ฆr้;8+๙. ั† ฑ\ž. ๕ Œ0ฐภภฤ๒@lˆ๙0ุฑ`ฐc`@ฦ๕7 ƒ๘่j(ม๖์€cŸหี“+ ๅ@„ endstream endobj 855 0 obj << /Length 214 /Filter /FlateDecode >> stream xฺUŽ=nย@…ขฐ4 -•w.ุf 4ˆHq”T)คคA‡Œๆ›$นม–[XžŒั่+ๆŒฦ>=ฦœ๒€ฒ!”ทํษfชฆ<ฌอŽf9%l3J^Uง$_๒๑p๚คd๖๖ยชฮyฅฅ5ๅs:.ช!_MWค‰”žHa~šย”E฿แ:S˜uอ@ณ่I #A๑ˆฅB์€ะค๒Œ?_๏–Fคr"พ@ฮ@ภนล“;ํ^๕p๙6กอkทา฿สŽ4€๓ EN๏๔ ฿ ZH endstream endobj 856 0 obj << /Length 144 /Filter /FlateDecode >> stream xฺ36ี32W0P0bcC…CฎB.c# ฿ฤI$็r9yr้‡+q้{Eน๔=}JŠJSน๔œ€|…h สX.O…  bv|๘เ๖ใุ๏o`ใภƒ๛ๆ์๐า๑๒ณGย๒น\=นน<ฆ[ก endstream endobj 857 0 obj << /Length 119 /Filter /FlateDecode >> stream xฺ36ี32W0P0bcC#…CฎB.# ฿ฤI$็r9yr้‡+™p้{Eน๔=}JŠJSน๔œ น๔]ข  bน<],ก" จร๐ีีุ‘‰๊๛@6—ซ'W wŒ2„ endstream endobj 858 0 obj << /Length 144 /Filter /FlateDecode >> stream xฺ36ี32W0P0Vะ54U02U01RH1ไ*ไ22Š(˜šCฅ’sนœ<น๔รŒ น๔=€โ\๚žพ %Eฅฉ\๚Nฮ @Q…h ฆX.O† ฬ?PP0ภ1ชก baม๘ฃ†๙ร? โ๐?จฯ`—ซ'W \๊O้ endstream endobj 859 0 obj << /Length 177 /Filter /FlateDecode >> stream xฺ}ส1 ย@ะ…)„ir„ฬ l6bง#ธ… •…Xฉฅ…ขญษั6XXzs„”)ข๋,‚ZY<†็๋^7๎SDŠ้„E…{ิ1็ศGX๏05(คc”nQš)ง-สt6"ฮ-yนB“Q^แ์Wฮเ/ืB๙รg;ไฬZe#เR ธVnVภฏซ฿kxS๓ถ๐>๔ ฐaPๅฯภ9~๘Œcƒs|ฒ"Xj endstream endobj 860 0 obj << /Length 112 /Filter /FlateDecode >> stream xฺ36ี32W0P0bc#C…CฎB.ฐ˜ˆ ’Hฮๅr๒ไาW02็า๗Šr้{๚*”•ฆr้;8+๙. ั† ฑ\ž. ๕Gเz f8\?€aŸหี“+ ฯจ0m endstream endobj 861 0 obj << /Length 148 /Filter /FlateDecode >> stream xฺ36ี32W0Pะ5ฦf F– )†\…\@ฆน`™ไ\.'O.p .} 0—พงฏBIQi*—พS€ณ‚!—พ‹B4Pe,—ง‹B<ใ†๕ว0๘กH2๐?'ฯภ๐8๐‡ŸฟแŒ`๘@ข๑?๛?ท€ ภb\ฎž\\ใcMa endstream endobj 862 0 obj << /Length 137 /Filter /FlateDecode >> stream xฺ36ี32W0P0bc#K…CฎB.c# ฿ฤI$็r9yr้‡+q้{Eน๔=}JŠJSน๔œ น๔]ข*cน<]7a๘?ร๛„ู๑?`ม€๓๖H๘้๘?๙ู#a๙\ฎž\\๒œR_ endstream endobj 863 0 obj << /Length 165 /Filter /FlateDecode >> stream xฺ36ี32W0P0bcC#K…CฎB.#3 ฿ฤI$็r9yr้‡+™q้{Eน๔=}JŠJSน๔œ น๔]ข  bน<]์?``ไcฐoจgฐcgจcoจaเo๘รภเ;V ’a:z{ ก ๒อ™ 2dศ>.WOฎ@.‘€=D endstream endobj 864 0 obj << /Length 178 /Filter /FlateDecode >> stream xฺ36ี32W0P0Tะ54U06V0ฒTH1ไ*ไ26Š(˜˜@ฅ’sนœ<น๔รŒ น๔=€โ\๚žพ %Eฅฉ\๚Nฮ @Q…h ฆX.O…ฯ๐ฤุ๑`มƒใ๖ |€กŠํฐเ: š:ฐบ ิา;ศ< น์๗7ฐŸฯภ~๘P=Q๘?Lฬๅ๊ษศ–ส^s endstream endobj 865 0 obj << /Length 142 /Filter /FlateDecode >> stream xฺฬ; AะŽ+๑ }็‡ˆ้บ‚ˆ‘(+˜G๓(มฐมa1”โี FC?fหพ„๗'ห5ฅึว๎ˆ&ยฌ9X˜yนยฤw็หฆYNูมดผqlทˆ-ง็เก’DEณพ4'ีL*ลJz#R"๊?๒๙OชsฺีŽYฤ o"ๅG endstream endobj 866 0 obj << /Length 160 /Filter /FlateDecode >> stream xฺ‹1 ย@D*แ7น€7ูฤฦ@Œเ‚Vbฅ–BmMโแ> stream xฺ36ี32W0P0bc 2WH1ไ*ไ‹น ‰ไ\.'O.p#s.} (—พงฏBIQi*—พS€ณ‚!—พ‹Bดก‚A,—ง‹Cรธ†€aŸz์˜๑รๆp‡ˆ๙0“?ด„์10๐a``ภภๅ๊ษศB•J( endstream endobj 868 0 obj << /Length 127 /Filter /FlateDecode >> stream xฺ36ี32W0P0bc#K…CฎB.c# ฿ฤI$็r9yr้‡+q้{Eน๔=}JŠJSน๔œ น๔]ข*cน<]7ิ๘ 2f?ภL!fb์์ฐŸŠฯ`๐?—ซ'W nNเ endstream endobj 869 0 obj << /Length 155 /Filter /FlateDecode >> stream xฺ36ี32W0P0bcc#K…CฎB.crAษน\Nž\๚แ ฦ\๚@Q.}O_…’ขาT.}งgC.}…hCƒX.O…์ c๖์ Px€ฟ๙??g`| ม์>ุ@๐†Š ฎ๙มภ`๓‚ํX๓```o`เr๕ไ ไฎ; endstream endobj 870 0 obj << /Length 154 /Filter /FlateDecode >> stream xฺ36ี32W0P0bc#K…CฎB.c# ฿ฤI$็r9yr้‡+q้{Eน๔=}JŠJSน๔œ น๔]ข*cน<]๊?๐๛C? ƒ๘๒ ?๘>`เ†์อฐทDเŸ˜๛+0Ÿ‡โ๛ี|ฯ๚ใ=๋ฦ๖GŒA&sนzrrสH— endstream endobj 871 0 obj << /Length 170 /Filter /FlateDecode >> stream xฺ36ี32W0P0bcc#K…CฎB.crAษน\Nž\๚แ ฦ\๚@Q.}O_…’ขาT.}งgC.}…hCƒX.O…๚๕@@Ÿ๙ใ†5 ?j>00ุ?``b@ภภภaƒฤlุจฆข‚แC X/ใ9ๆ๒ ๕์AฆaŸหี“+ uีF๓ endstream endobj 872 0 obj << /Length 183 /Filter /FlateDecode >> stream xฺ]ฬม ‚@เ‘ย๒ t^ vu•Dม ฺCPงัฉ:}4ลG๐่Aจ]-Šพ˜~Œฝ q๒hไ$yS:ธxAมI—๏ฟO๛&ู†GถP{drIท๋ˆ,YอศE–าึ%พC™าณŽfa–JืฅฅQiต ๐ั„ู[˜}ูgฅ*Vี3ต๒Gัณ4่D@ฎb๓เัชฉ5ฑŠqช็ื๘บOD) endstream endobj 873 0 obj << /Length 167 /Filter /FlateDecode >> stream xฺMŒ1 ย@EฟXฆษ2'p“ ขฉbทดฒ+ตTด ฤฃๅ(9ย–Sˆ๋›o†?๙๙tขgœฒไšuมงŒnv๚ปฝ8^จดคv!“Z๕ำฎ๙qžI•›gค*gœศVlผw๗2คF์j$] ำฮัผŒภX€ศq$-`‚j|:\cI:ˆi!แS|่๚--m้ 9Mโ endstream endobj 874 0 obj << /Length 180 /Filter /FlateDecode >> stream xฺ36ี32W0P0Vะ5T06R01RH1ไ*ไ2ฒ (˜Cd’sนœ<น๔รŒ,ธ๔=€ย\๚žพ %Eฅฉ\๚Nฮ †\๚. ั† ฑ\ž. ๒ ๕``‡?๖๘ุฅ€ฟมศณc`ใๆ0\มภ๘เใb1ฒ:๖03AๆƒํBฝ ๛A๎นไ.๛@๎ไr๕ไ ไยฌR endstream endobj 875 0 obj << /Length 131 /Filter /FlateDecode >> stream xฺ36ี32W0P0bc#…CฎB.#c ฬI$็r9yr้‡+s้{Eน๔=}JŠJSน๔œ น๔]ข  bน<]$ljภ่ใๆ? ์๊0‡ †š˜ŠQ?๕มะ.WOฎ@. ;6ึ endstream endobj 876 0 obj << /Length 188 /Filter /FlateDecode >> stream xฺMส1‚@…แ!$ำpๆ.ฌ้6ALค0ัสยXฉฅ…F;#{4ŽฒGุา‚0bขลWผ๙g<้ฅ4๎išh:fxAหN๛ู‡ร‹ ี–tŽj)WTีŠnื๛ UฑžS†ชค]F้ซ’ n dทp†ูึ–ํLำA์Zˆ\ก Cไ>ยฏศ โ ฦ ่ไM„/ษ๒ห‹‘\!ตCŠ=ธฤุภืฬžศvธจpƒoไ W endstream endobj 877 0 obj << /Length 198 /Filter /FlateDecode >> stream xฺ=Ž= ย@…ŸคX˜ย!sdัnม0… •…Xฉฅ…ขฐ{ด%Gฐดฌ#2| ผ7๓x๙hhฦœrฮƒŒsร…แcF2S.๒ฮ9œiZ’ฒ™^ŠLบ\๑ํz?‘žฎgœ‘ž๓.ใtOๅœแ*๔ย*ผ‡Iฐต๓ึ'•๕ฑ ๔ก* ‘xภzy\ศ?ยซN48๑“๖ถ”=;z_B๓%๚กjiPKƒสษุ|%–ผจอ•žด(iC€"S๘ endstream endobj 878 0 obj << /Length 173 /Filter /FlateDecode >> stream xฺuษ1Qเู(6๙›ฝม๎>ข[ษ"ฑ…„J!*” B'8‰ณ8‰8‚Rฑฑๆ%่d๒3ใฺอฌฃ‰fไœถ2]ฆฒ—จซ?k)JฑSu‰ุ!WฑๅHwJl1๎i*ถฏณT“น”}* x๐Dˆ ะฅœŽt งAเ= wƒะปDŸ ]ส้@ีuค๊๋ฤ๎…ฃบ๚a—A)yCB endstream endobj 879 0 obj << /Length 178 /Filter /FlateDecode >> stream xฺฮ1 ย0เ' o๑ๆ]@ำค;5P+˜AะษAœิัAัี๖h9JŽเ่Pฃqt๘–๑ผt<’J(ฅก TR&h/๐„2๗aB™ —K|M2G>๗1rฝ ห๙z@^.ง$Wด”lQWฤœๅ\๓ €0 …{๘~๗ฺ;Vี๔‚ุ<€่๔rฏ๛Š>bB฿€™ฺ„˜฿Œ] ‘๓ตบœi\แ}IOh endstream endobj 880 0 obj << /Length 201 /Filter /FlateDecode >> stream xฺ=ฮ= ย@เ )ำ์2ะM6Šv €)ญ,ฤJ--ํBฃํQr„--Bฦ1Š _๓–}3ลxh&”QAƒœ C#Cงฏhฆf4*พ/ว ฮJิ;2Sิ+‰Q—kบ฿gิณอœrิ ฺ็”ฐ\ฤ/€ดฐ ภ์"fwส'!๕ชI}?.๕ึ)g ฉ"aดสทN๐‡co=ƒj’ฆ-ฤแ+๚ซ~jษ?l/idGฟQ…งSา—Ho$ภA๎๓€หท๘O๖\ endstream endobj 881 0 obj << /Length 170 /Filter /FlateDecode >> stream xฺ…ฮ1 ย@ะ/ย49BๆบูˆฉbSZYˆ•Z Qด๑h9Jސ2E0ฮ’vฏ๙๓g;™ lyจู 5]ศDฺvr8Sœ’ฺฒ‰H-%&•ฎ๘vฝŸHล๋9kR ๏4{Jฮ4MSˆ๒Wฏจเ็0“ึSผE ๔ชVฟ0prภsค๎ก]uฆ ็๑ฃ๎TศฃดHiC๔C endstream endobj 882 0 obj << /Length 189 /Filter /FlateDecode >> stream xฺeN; ย@"0MŽฐs์&b*1‚[ZYˆ•ZZ(ฺ‰๎ั๖(9Bสม5ฃb๑`x๓~้hจว”PJEฉฆLำ^แ u“ e้็ณ;biPฎI็(็=า,่rพP–ห))”m%[4Aแ ๐-„พƒศ?!๖Dฐ…ฎ€ุ!ชo€น DN@ฬ*ห>๖ƒoเ;n๚+์wFaำB๐ๆYรเ^๎[ยYผwโฬเ _ฑŸYช endstream endobj 883 0 obj << /Length 209 /Filter /FlateDecode >> stream xฺMฮฑJAเ?\qaš}„0{ท1BŒเ‚Vbฅ–Šถน_lมนGH“โผqbRศ๐5ภำœ/โW๐YอMไeไ็š(ฎ,ฌxู7Oฏดn)s\Qธถ˜B{ร๏Ÿ/ึท—\Sุ๐Cอี#ตFส€ ฃิ N~่๚dำม็-\žPใษล7žlQ'I9‰Wป'ฅHก;~ ๆลปsไฒ7ฉ๗}‡ฦิOH_FGx๛ห้`ฟ๕˜M]ตtGฟŸN^- endstream endobj 887 0 obj << /Length 104 /Filter /FlateDecode >> stream xฺ31ึ3ตT0P0UะตP0ถTะ5RH1ไ*ไ26 (˜A$’sนœ<น๔รŒน๔=ฬธ๔=}JŠJSน๔œ น๔]ข  bน<]๊ฯฤะฐ—ซ'W *› endstream endobj 888 0 obj << /Length 99 /Filter /FlateDecode >> stream xฺ31ึ3ตT0P04F †† )†\…\@ฺ$l‘Iฮๅr๒ไา p้{€IO_…’ขาT.}งg ฿E!จ'–หำEAžมพกภ0XภพAžหี“+ ‰;“ endstream endobj 889 0 obj << /Length 157 /Filter /FlateDecode >> stream xฺ31ึ3ตT0P0Uะ5W0ถT0ตPH1ไ*ไ26 (˜™Bd’sนœ<น๔รŒน๔=€ย\๚žพ %Eฅฉ\๚Nฮ †\๚. ั† ฑ\ž. ์@ฬภ฿#ไมHฬDุˆ:Q'€ˆ@ฬ&> f0๑d˜82๎>3ั dfโ ธ™ขDpนzrr@ฤ:ี endstream endobj 890 0 obj << /Length 107 /Filter /FlateDecode >> stream xฺ31ึ3ตT0P04F ฦf )†\…\††@พˆ –Iฮๅr๒ไาW04ไา๗ s้{๚*”•ฆr้;8+E]ขzbน<]ไ์๊ƒ๕์ไ๐์:ธ\=นน{-= endstream endobj 891 0 obj << /Length 103 /Filter /FlateDecode >> stream xฺ31ึ3ตT0P0W04S06W02TH1ไ*ไ2 (˜B$’sนœ<น๔รŒ,น๔=Lน๔=}JŠJSน๔œ น๔]ข  bน<]๊๐0 โsนzrrๅ$~ endstream endobj 892 0 obj << /Length 239 /Filter /FlateDecode >> stream xฺ1Nฤ0Dg•"าo|๛$Q6อZZ‰HPQ *–’‚ีา!์ฃp!eŠUฬ8โiพ=oถีpํZท-งuC็Ž|H?ะฏถ\ผพห~”ๆษ๕ƒ4wœJ3ป๓้๓Mšรฃ?ธ็ฮต/2"Pๅ˜<>ฯๅ uมfA@5รฃž`cฬO4๊sด1dต1g๕สฎšƒ๎๊ษง๏:ู๔eิP๘~•Kูœ-ชหบQv๕Oิh๙9–ŒXาภ…H$%ห RM ŸาZษl้mb– „dทูr)}ูA!ทฃ<ส/}L~ endstream endobj 893 0 obj << /Length 191 /Filter /FlateDecode >> stream xฺmฬ= ย@เ ำx„ธ ‰‚ี‚?` A+ ฑRK E[“›™ฃไ)S,;ฮh%X์๛fๆ๙h<ฅ” }ๅ:exล\ณTฟ:8^pVขQ>Eป’mนฆ๛ํqF;ฬ)Cป }F้หE$ sญดเXBื˜^H”ศƒฉมร@ž?|beจฎŸเzYฉE—ƒโ๐TZ_ีqื-`๖Rล!a~…ˆƒ„ฎK<.Kโj/\ endstream endobj 894 0 obj << /Length 187 /Filter /FlateDecode >> stream xฺŽ= ย@…gฐฆ๑™˜„ฤ"•#ธ… •…Xฉฅ…ขญษัr”aห€!ใN;ฑ˜ๆ๏ฝGำYย‡ฎโg!ŸBบRคณ@[]/”๒w%ไฏ”|ณๆ๛ํq&?,ุ๕๏ๅLฦนฉฟ+๐x•ƒ“ภ—ด€"าก@ฑy‰Rx Œ-ถ0ชฑ้~ะ*ž?ขu๎mึฝr็!0ฑƒeฅๆ] ิEำ`็%ะาะ–*ลsz endstream endobj 895 0 obj << /Length 182 /Filter /FlateDecode >> stream xฺŽ1 ย@EฟคฆIk—9›ฐฐ ฤn!he!Vjiกh›ไh%GฐL2ฮฆะึ…}๐gู?ofง๓วœ๊ลlS>'t#k5ั?œฎ”;2{ถ–ฬZงd†๗็…Lพ]rBฆเCย๑‘\มค"iJzŒDˆฦ=แ[5/”ศjLAOๅQ~ั‰฿ก@ซB_ีZฏh4่สJ—โ5กฮซต^RMuZ9ฺัฒuEJ endstream endobj 896 0 obj << /Length 193 /Filter /FlateDecode >> stream xฺ•ฮฑ‚@ เ’.<} L— &`ข“ƒqRGฎโ›แฃ๘Œ—;[pqำแพคฝด 5)+สH๑+•9ํs<ก’^&ฅ|์ŽXLืค*L็ลิ,่rพ0ญ—SโบกMNูMCฑ€ฤ  $z1ฺ1wx๏!"ห๛โ>๔<ๆ๔Z™iแ&ณNฐ?โ>cํH ใRaธสษHŽ'c ห:วัดm™ธO,ฮ ฎ๐ —บYK endstream endobj 897 0 obj << /Length 201 /Filter /FlateDecode >> stream xฺmŽฑŠยPE๏’โม4๙„ฬ์Kˆฌฎ ›BะสBฌิr‹mM>ํ}ส๛หโ์}Vฬ™;น“๚ณ™iฉ“ิฅึS=T๒'uร๙9&a+๓NF๋FทโปฅžO—ฃ๘๙๊K+๑ VZ๎ค[(ฒ€ยะ f#2ณ;ƒJ>ยPDดCˆv@Z }ย•ˆ„‹๗cฝC  ค7ธพะ'ะ* 4u‘๖.ๆ7๚นmp ฬb2rๆcภ๒ษZI๗_ endstream endobj 898 0 obj << /Length 154 /Filter /FlateDecode >> stream xฺ31ึ3ตT0P0asSC…CฎB.c฿ฤ1’sนœ<น๔รŒน๔=€ข\๚žพ %Eฅฉ\๚Nฮ @พ‹Bดก‚A,—ง‹๛@โฦ˜A๛Ÿz ๑H๐?ฐ*;&p๕š4A€ล๐kฃa[~ `1.WOฎ@.๒ล^ฃ endstream endobj 899 0 obj << /Length 253 /Filter /FlateDecode >> stream xฺ}ฑJฤ@†#E`š}!๓šฤไ”k.pž` A+ ฑRK Eป#›ฮว๐U๒(y„”[,g‚ฒ์วฐ๓ฬึีษzรŸ๒qนแบโ๊œŸJzฅบ`;๋ณŸึใ ํZส๏ธ.(ฟาwสk~๛xฆ|wsม%ๅ{พ/นx vฯ’€4ธˆlnfxY้•Dd๖ItมงSถn\ล#7@efd=บ`’El6X4jB*ฒ`„้แพfภ}E_้h0‡ํb•๔j“1SLอ€,x>v*‹ล!*:Mร๖–ฦข๓ฝ:ฒ?-y‰%งF‚อ@—-า7ใ่‚> endstream endobj 900 0 obj << /Length 161 /Filter /FlateDecode >> stream xฺ31ึ3ตT0P0bcSC…CฎB.฿ฤ1’sนœ<น๔รL น๔=€ข\๚žพ %Eฅฉ\๚Nฮ @พ‹B4Pe,—ง‹B ๘ฌ“Œ‘๒@d ๙๓? ๙๛ ๙B~ฐo’ไAdƒ ษภ$ษ?Hไz“๕๘วIˆ8—ซ'W ƒz๚ endstream endobj 901 0 obj << /Length 132 /Filter /FlateDecode >> stream xฺ31ึ3ตT0P0bcKS#…CฎB.cC ฿ฤI$็r9yr้‡+r้{Eน๔=}JŠJSน๔œ€ข. ั@-ฑ\ž. ์ ๒ ุรฤ@๒x@@€แ?ืC1;}p†A|.WOฎ@.ุO) endstream endobj 902 0 obj << /Length 169 /Filter /FlateDecode >> stream xฺอ= ย@…_ฐฆะ#d. ›อŸ B Fp !Vbฅ–ŠถnŽ–ฃxK q\‘`e๏ภWผ๏๑Љฃ~2โ€c๎้!Gš“ทšฆฮOคj‰ิ .ปm๗O๑๋1๊โdXˆ๗„ศV๎Ž|นข-M -่ง๚X endstream endobj 903 0 obj << /Length 198 /Filter /FlateDecode >> stream xฺฬ;‚@เ%$ำp็๒.จH)Lดฒ0VjiกัVธ‰Wแ(xŒ…[ฦ_ญล~ษณ๓‡ม0ŠัEŸ_่cไแฦƒ=’น2สbฝƒ4gA ฮ„Sp๒)ง-8้l„๔Œs˜รQนyภ endstream endobj 904 0 obj << /Length 115 /Filter /FlateDecode >> stream xฺ31ึ3ตT0P0b eจbศUศelไƒน ‰ไ\.'O.pc.} (—พงฏBIQi*—พS€ณ๏ขmจ`หๅ้ขPร‰zมภ<Œˆ๚7๑,ฦๅ๊ษศ๎{\W endstream endobj 905 0 obj << /Length 171 /Filter /FlateDecode >> stream xฺฝŠ= ย@…ท[˜&Gศ\@7!Qฐ1#ธ… •…Xฉฅ…ข๕^,7๐ๆ[nฑ์8šฮศƒ๗Wรั3ไ‚r„ล9œAl&’๘]๖'จ-˜\ภ,คc—xฝŽ`๊ี s0 nๅน =œ๎=C๊ฟbqไ™ฃา1 Sฅeฌ”๖‰K•vI'์’๖‡mr/)Tž๒์8R`฿๛พ‡น…5ผํzfส endstream endobj 906 0 obj << /Length 155 /Filter /FlateDecode >> stream xฺ31ึ3ตT0P0bcc3…CฎB.฿ฤ1’sนœ<น๔รL น๔=€ข\๚žพ %Eฅฉ\๚Nฮ @Q…h สX.O…๚๒จ$$ฯภPD2`฿$ศƒศ๙@’H“ศ๔&๋?:๑7 “q.WOฎ@.‹ฃll endstream endobj 907 0 obj << /Length 183 /Filter /FlateDecode >> stream xฺ}Ž=‚@…‡XLรvNเBLฌHท0ัสยXฉฅ…F[ูฃํQ8ฅ…a†‚ฮb^2๏}น™KJ)*%ณ K†w4๗า‹๓ +‹๚@ฆ@ฝแ)jปฅ็ใuE]ํV”กฎ้˜QzB[ฤ_Pฅ ข:˜…๐แ9o’.๊Aต@9(กdq%Ÿป7@โ'aธ/=฿ตำGร.^ฌฤTyhฦ ‰”pม A!\\[ใ>P: endstream endobj 908 0 obj << /Length 200 /Filter /FlateDecode >> stream xฺฅ= ย@…gฐฆ๑™ ่fI"ฆSZYˆ•ZZ(ฺšอฃไ[.(w“€–‚S|ลๆฝ7q4HRYs_8ึ ๙ ้L‘WCNโvต?ั$#ตแ(%ตp:ฉlษืหํHjฒšฒ&5ใญๆpGูŒs” V,ศS*7;(& A‰]ƒt,พเ -ภ•วGTฮภต@8ื=ำF–>ผฎแ กฏ†พ$ฺ๑ผห_ศฅ๗ช๙Fญั<ฃ5ฝฏ์ endstream endobj 909 0 obj << /Length 158 /Filter /FlateDecode >> stream xฺญษ1 ย@ะŸJ๘—๐Ÿภuฃฤj!Fp A+ ฑRKAE๋๕h9JผAสมqc!ฺ[ฬƒ™Iํ`4-ร˜ิˆห๐™mป๎jw์Žœ{Vkฑซy\Y๙…\/ทซ|9รชฝe_Hx’+5ะC๔ั8ดไย#‚$าRCฎกนšˆ\๕ก์ธB"จฟxo<๓ผโ๕๕Iw endstream endobj 910 0 obj << /Length 185 /Filter /FlateDecode >> stream xฺMห1 ย@ะ‹ภ4!s7q5ฦ@T0… •…XฉฅEมสอัrr‹๑,,2ณ๓ิŽgฉD’€Mล&rŽ๙ฦv‚=๊ืpบr^ฐู‹ฐYใ—Mฑ‘วya“oณYส!–่ศลRศ๙rจ๊GBฎ๙7 }K๏ดD#"ืeZSจกWก!งˆ("P๗B Ca๗ฃ}ญข9ช6Aซช=> stream xฺ31ึ3ตT0P0bc 3…CฎB.cS ฿ฤI$็r9yr้‡+›r้{Eน๔=}JŠJSน๔œ น๔]ข  bน<]ไ€ภžข @ฟA€ลH2…‚๙`€hเภ ฿ €AA~ [@๓ Œ€Lxภภๅ๊ษศ:B„ endstream endobj 912 0 obj << /Length 148 /Filter /FlateDecode >> stream xฺ31ึ3ตT0P0bcc3…CฎB.฿ฤ1’sนœ<น๔รL น๔=€ข\๚žพ %Eฅฉ\๚Nฮ @Q…h สX.O…๚ฬ`…ฌม $0๐()Dฺษ? ๕ฦ๐๊dƒ=˜”H2cฯภๅ๊ษศฤฃd> endstream endobj 913 0 obj << /Length 174 /Filter /FlateDecode >> stream xฺ31ึ3ตT0P0bcc3…CฎB.฿ฤ1’sนœ<น๔รL น๔=€ข\๚žพ %Eฅฉ\๚Nฮ @Q…h สX.O…๚ `ิ๐?รูaCฤู00~ @2?ภDv`ฒN2~จ+฿Ž ฟ#ศ฿``’ ?Ÿ‡“ฟฟG#ซพg``จ?๘A6 H๛†@Ržก†หี“+ ษmข endstream endobj 914 0 obj << /Length 202 /Filter /FlateDecode >> stream xฺEŒ; ยPEoH!Lใœ๘ฃ‚Uภ˜BะสBฌิาBัN!…ฒณt ๎@ห!ใL@,aๆฬปทต{ธฃฏแจฯ™ lตรfOร„’ฃนฉZrษŒOว๓Žp>โ˜W!kJฦ‹/ŸLnRQ;”Hก(ิ+€ุ๛ญp{อ็hผฏ€/ O จ.†๊็๊ซoŸk> นถดฌ4ถ๚…ฅ4W่ฌ&F&ž”™ไRŠขชงฺั$ก}จxY& endstream endobj 915 0 obj << /Length 237 /Filter /FlateDecode >> stream xฺEฮฑjร@ เ฿dˆ‚มz๖์ุ)อCšB=าฉCษ”dฬะาnฦvศะืj้‹:tอ&ษ=Ž๛๎๎$%๑อpฤ!๘:บใdภ๑-ฏ"zฅXฃ!—Znh’‘yๆxDๆQโdฒฟฟ}ฌษLๆ๗‘™๒Kฤแ‚ฒ)—ึณต[{ฒvงศญ๕๖๐+๏๐OPy5ภ‘ ฦ@ฎฒไฬฉคไUํ๐ท-G[๙ู;zฟส฿เต[*๖‚l”ใŽBษ;ฅv\ษผHer”;ๅS๚พH‹R งZ88 พ~ํK๔ั฿อa{ endstream endobj 916 0 obj << /Length 176 /Filter /FlateDecode >> stream xฺ}Ž1 ยP †S2Y<‚9ฏล*BกV๐ ‚NโคŽŠฎญG๓(๏คฯคc‡|?!?ษ'ใ้œSž่ไ3>gt#อ”ปีง+•ž^wr๋Ž~ร๛๓Bฎ.9#W๑!ใ๔Hพโ"ฦ…๔PŒ‚ขx+š—"B I ภ/ >Šก€i`˜ฆ$fเ_ฃ…$hŠกจ†ขŠj(ชกD{ฃ{-ะสำŽ~ๆ๊bฐ endstream endobj 917 0 obj << /Length 203 /Filter /FlateDecode >> stream xฺ= ย@…_ฐL“#8ะMLRุ๐L!he!Vjiกh'šฃๅ({„”!qœ-–6฿ฒ๓`๖}›ฤรtฬ!'<ˆ8 9๑1ข ลฉ ๅปไpฆiNfหqJf)c2๙Šoื๛‰ฬt=ใˆฬœw‡{ส็Œ@ะฒถ^m ดญ…ื•„๛•Wรทจ”x:๔ dไTLdO๑”€_ึ๛'คX`–*บw]!Wาขqตฝzจ‘บ9K๕U๓๏ะ"ง }}dร endstream endobj 918 0 obj << /Length 141 /Filter /FlateDecode >> stream xฺ31ึ3ตT0Pac S#…CฎB.# ฿ฤI$็r9yr้‡+Yp้{Eน๔=}JŠJSน๔œ น๔]ข  bน<]ุ๘ XŠํธˆ7001;ื๑พฤ๓jไ‘ิฎม?ภ0ˆฯๅ๊ษศลFJ endstream endobj 919 0 obj << /Length 222 /Filter /FlateDecode >> stream xฺe1N1E*…ฅi|„ฬ ๐.›-V Ab $จ(U คA›ฃ๙(>Bสั๓ำ„,?kฦWํEwฅตฎธkํ.๕ต‘i;ฏO%/ถ๏ฒ$=iIบ๓ฎคแ^ฟ>ฟ฿$ญnด‘ดั็F๋6Šx0ฺ„สฌ ˜ํอŽXโŒพT†~ย่หฯฐœfGvฤlŽโgุืฮOศ —˜ภ<|ž๐HTGว‚+๎ฉฅตงห‡D5W๔TŒL3*ูกธ=ท‡2šะ‚ฝ,ทƒ<ส8h๑ endstream endobj 920 0 obj << /Length 226 /Filter /FlateDecode >> stream xฺEะฝNฤ0 ๐้†J^๒๑ @ZฺHH•๎CขL ˆ @ฐา>Zๅแฦง๚lทภŸวฑใTๅe}อ9W|Qp•s}ลฏ}PYkPทๅ|๒๒N›–า#—5ฅ[ Sj๏๘๋๓๛าๆ~หฅ?œ?Sปc„€NzฌDศDF‘โ˜Mˆ&4=:4งWโL์• ซhLบVฦฺšฤQ—5Aโ1;อ,๒wืKi sฐฤ™ใว…เ ฮdw;ซา-ฏ—y"Ÿอง\ผ>นํ[z 3แVc4 endstream endobj 921 0 obj << /Length 181 /Filter /FlateDecode >> stream xฺ•ฯ=‚@เ!$ำpๆ.ฟ bโ&ZY+ตดะh ฃpJŠ๋Lฑh๋$๓%๓^5Yบฬ Š(แอสบฤxวTฒHN)ฮ7ฌ4ชฅช งจ๔–žืUต[QŒชฆcLั uMมฤ„B9ำฬฦ›‹‘๑Gะ3a็(if ใMŽล( Œ/ฝ#์˜`หc„๗—V2๖OZหฟZ;ยฎ5๎๑t endstream endobj 922 0 obj << /Length 207 /Filter /FlateDecode >> stream xฺฅฮ= ย@เ‹ภ4{„ฬtณ&)!เ˜BะสBฌิาBัึ,xฏ’ฃxห’qFEะึๆƒู}o“ธv)ข„ZŽ’ˆRGk‡;ŒSสฑ๓ฺฌถุฯัฮ)NัŽeŒ6Ÿะa ํOไะiแ(Zb>$ร\Cศฬ฿ศฬวน.์5๏ชTสยบ)๑7ข ฝœ๙Pะ €๙\่)'…฿˜'ๅ-,e›๙$9๓า‘• iซฬŒ `พAƒYา ึš G9ฮ๐-ฒc— endstream endobj 923 0 obj << /Length 241 /Filter /FlateDecode >> stream xฺmŽ1Nฤ0E”"า4นž @’T––E"Th+ คุดฑๆฃ๘)S„ ใอ“=3uํEล5w|pWsษ/ ฉํ5ิg๛๓FปชGn{ชn5ฆjธใ๗ำว+Uป๛knจฺ๓Sร๕†=6™ฬ@! `dีHpั๋ณฮ็ณข˜ขขŒฐ0g0บฐฟp ใ†\ฯF<'Ÿ"DดMึbLz[‚ฮ๋€๕Zj6]*7DE๑ใ?ฐ?(ฃj”A…LP5ให Gีิก˜ต(O•Y*Gา@BRƒๆ ›่ 5pI endstream endobj 924 0 obj << /Length 183 /Filter /FlateDecode >> stream xฺ•อฝ ย0เ+ย-พ hำ NBญ`A'qRGEมษ๖ั๚(}„ŽคzWฉEq๑ _ศๅ~3ฐ#๒) พฆภ';คฦ#หI~šืฯ๖€กCต"cQอ8สอ้|บ์Q…‹ iTญ5๙t]ใม‘ ู'้`œ010%p1฿เ ญ‚i็Bฦt*Rฆ—€t 2;nB)ผ๛ฝขฆ•ื4ใช™_T+~ัฌ‹.œ:\โใM† endstream endobj 925 0 obj << /Length 213 /Filter /FlateDecode >> stream xฺ}Oป ย@œ`qฐM>!๛z‰I ซ€0… •…Xฉฅ…ขญษงๅS„”ม๕ฒWุˆp wป3s3Y:ส'sฦร„ณ˜๓1บPšปก{ฆ~s8ำด$ปๅ4'ปtcฒๅŠoื๛‰์t=ใ„์œw ว{*็ ำ(คDžˆผ`D:„y#jAิ BQปSQ]9h@๘”ข9…ื†m๐ฦ 3/"-PIoำ™n•ง ีชหืู๑อ๓?|ษR3{ฟพ‡6าnฺR๛๚ๆ}Z”ดก๋ๅn endstream endobj 926 0 obj << /Length 245 /Filter /FlateDecode >> stream xฺm1Nฤ@ Emษอa|HB’bซ‘–E"Tˆjกค`ํ&G›Žk๘้Hล 4าำุฃ๑n๊๓v+ฅ4rVISJ{!Oฟrข‰ฒ~9ผ๐ฎใโ^๊–‹kดน่nไํ๘ฬล๎๖R*.๖๒PI๙ศ^(Ÿ‰(`)3Sฺ˜่็น1›ษ+-:%๔8p'?, ๓\๚‡%แ”€^รЁ‚๚Hฝ"ศ4Ÿ)ยMก๑ฉ๚Pจ9%7นHi่/Š!ฉฏ G๓ซdLบโ!n&{„มศ๋•|ฺา๖อ J™M๘c_u|ว_ž!rท endstream endobj 930 0 obj << /Length 99 /Filter /FlateDecode >> stream xฺ35ิ32Q0P02ฦF †† )†\…\@$คภ2ษน\Nž\๚แ@.}0้้ซPRTšสฅ๏เฌไป(D๕ฤryบ(ศ3ุ7ิ๘ุ๋7ศ3pนzrr็{ endstream endobj 931 0 obj << /Length 174 /Filter /FlateDecode >> stream xฺ35ิ32Q0P0SะตP01U0ณTH1ไ*ไ2ถ (˜›Cd’sนœ<น๔รŒ-ธ๔=€ย\๚žพ %Eฅฉ\๚Nฮ †\๚. ั† ฑ\ž. @`"j@ฤม&~ f0๑Hฐƒ‰@‚L๒`ขFุƒ !๕ ขDร4“$ƒf6a&I#ฬ$l0ยL’ ‡ผ ใ*@—ซ'W ผOF endstream endobj 932 0 obj << /Length 108 /Filter /FlateDecode >> stream xฺ35ิ32Q0P02ฦF &ฦ )†\…\††  ,“œหๅไษฅฎ`hศฅ๏ๆา๗๔U()*Mๅาw pVŠบ(D๕ฤryบ(ศ3ุ7ิ๘ุ๋7ศ3ฐ๋็r๕ไ ไ่- endstream endobj 933 0 obj << /Length 103 /Filter /FlateDecode >> stream xฺ35ิ32Q0PฐP0ดT01V02UH1ไ*ไ2 (˜A$’sนœ<น๔รŒMธ๔=ฬธ๔=}JŠJSน๔œ น๔]ข  bน<]๊฿ฤ ` .WOฎ@.Eโ,ง endstream endobj 934 0 obj << /Length 284 /Filter /FlateDecode >> stream xฺ=Nฤ0…_”"า4>BๆMKiiY$R AEถJ ดฑ๗dDโ"9BสV†ฑƒhq๑Iž๛ฝw^Ÿ6-oธๅ“š 6Tำ+ต7ผ=[;/ด๋จบ็ถก๊ZหTu7๖๑Lี๎๖’kช๖P๓ๆ@žb†+‘"ศEFภˆL@)ขmŒาyะŸd:ฝ ^{ไ3zงฏd๒‰b*D`F]๖fะe_6า/๑ึปฃ2XwƒC€๚lๅŒ๒‡KbศWN0เ๏;พCหง‘4 ๊Ybํธ ๊ ˆšข9y™’ฏ1y๔ษ/’wใcๅ ™จ~อG}iV…^ีบค —”็œฒRฮš0 ฆซŽ๎่๐Eฐ‹ endstream endobj 935 0 obj << /Length 208 /Filter /FlateDecode >> stream xฺ•;n1†ไยา4มsโ5,ูr%[D ข")S$"๕r4ลGp้ํ`๓(RF}ล?า˜ป—iอ7> stream xฺฅฯ1Nร@ะYนฐ4เนฌ78n-… ลT)U L‘(ิ›,นIธำษd๘Uดะq n„ตพ#ษtซ-l#พk๘‘ฟ&ฤ–H endstream endobj 937 0 obj << /Length 225 /Filter /FlateDecode >> stream xฺu1Nฤ0E”ยา49Bๆเ˜Mถฒด,) ข@T@นล"่’ฃๅ(9‚K–‡๑. #๋ษ๚3š?p—W=w<๐…ใ~(๏อั‘6[;๎ฏฯืํFฒOผู’ฝS™์xฯŸ_๏dw7์ศ๎๙ูq๗Bใž™#h%^ฒJ"จs-ณ,&รฏ&ข M€ ํ u๔ŠไgTi:ฟศ d)ศงŸึฟHeeำ_่ๆ3พี Y}‘๕ET“ิผ4ฉ’ลวrsภ$ฒjYะhิ%ฆt;า#ใk}– endstream endobj 938 0 obj << /Length 166 /Filter /FlateDecode >> stream xฺลŽ1 ย@EH!ฬ%œธปqต1‚[ZYˆ•ฑดPดU–ฃxŒ!ใŽV้d˜๓๐๙7ส<[ว๕žงWŽฮไ-๋ฤSร‰Š@fห’YF•LX๑๕r;’)ึsvdJ9ถ{ %ศ_@"-0*rเกZ'้pGาb†4พ"mz!Iƒค•oจึ๔M๙ด๘SKึ?๘ดดก7รW€ด endstream endobj 939 0 obj << /Length 178 /Filter /FlateDecode >> stream xฺลฯ= ย@เค Lใ2'pณ’Hบ…ม-ญ,ฤJ--ญืฃy2ล’๑mาkม…เอO1…žฮrฮXใฯ5Ÿ4])/‘๛ว U–ิŽ๓’ิ URvอ๗ใLชฺ,นๆ=&dk6>ยs]PFำภX‚‰ผ`* tาB Šˆ&–66aQึฐใเsd๔m๗ด๑N|*ธช38ชwจ ]ZZฺาป้Œ€ endstream endobj 940 0 obj << /Length 141 /Filter /FlateDecode >> stream xฺ35ิ32Q0PฐbS3#…CฎB.c3 ฿ฤI$็r9yr้‡+›q้{Eน๔=}JŠJSน๔œ น๔]ข  bน<]0000€์P„Xษภ?Po?„=ˆ``ดD๑ โœx–เr๕ไ ไ็"cn endstream endobj 941 0 obj << /Length 170 /Filter /FlateDecode >> stream xฺลฯ1 ยP เt*d๑อ |ญผBทBญ`A'qRGE็็ั<ŠGุ่แ๑~๓์"^ภ!ไO2ค,ฆ3+นZe.ึสฑเ J๛O‡37›ญุŠอRS6Jnื๛‰MณžKมฆ•n๎นk…(QํS<ษ… =!8 *TภS คCํ)๚"=‹7๊ใK๚5฿รมg๑ซ ๏ŒŽษ8ๅEว~P„zง endstream endobj 942 0 obj << /Length 202 /Filter /FlateDecode >> stream xฺ•=‚@…ก ™†#0ะeๅ't$$R˜heaฌิาBฃ5ฃpJ โธ์6ด&“Wฬd๛^ฆ็‹”cฮyฆ9อฦนjzPR˜eฬi๎.—;-+RGN R[ณ&Uํ๘๕|฿H-๗+ึคึ|าŸฉZ3ผ/€P ”จฅDx"_๘โ ‚๒ {ิMุกlขQ5๒ƒ ณR้kภŸˆ๑๕†ฟDฬ0qM]†Isโย Fk,š…ดธUฐelญฑ m*:ะ9‡nฝ endstream endobj 943 0 obj << /Length 235 /Filter /FlateDecode >> stream xฺต1Nฤ0EดEคir„ฬภqd":Kห"‘ * D” จรัr”aห‘‡™8 j$\<ษฦ๓๘ฬŸถ๖|าถฮ9~๒๔JกSตแฎJ/ด๏ษq่ศ]ฉNฎฟๆ๗ทgr๛› ๖ไ|๏นy ภ@‘€ธT2bHต!iY)’0ˆDIฅฆ~B& #ด;NvญWV๚ ห#tb9wฟน‹?1ฟ™&๋์ตน+'KUฏŒใwฮนฐฬ9ฟmkQฺŽHQป*mAฺiัๆฃ๙้ช7ึณ’ซtูำ-}ขฆ endstream endobj 944 0 obj << /Length 227 /Filter /FlateDecode >> stream xฺMŽ=Nฤ0„฿j Kฏษ๒.ŽYoถŒด?) ข@[%h‘(โpฅลGH™"๘1&+A๓i4ž™็ตปผ๒RษF.œx/~-OŽ_yUรฌฤื๓หใ o[ถ๗ฒชู^รfศ้ํ™ํ๖v'Žํ^œTGn๗Be*ˆTฟยRUC‘Qf4ฟŒ†.,„B"๊ยtF๓)‘’บž ว …ฤF#a~ฬ‡ฆณ ˆLอฅ2~"1e`9Cf˜1YDจ้5-ดื ๚VM4ๅkcƒะ‡A›-฿๑สญ€› endstream endobj 945 0 obj << /Length 177 /Filter /FlateDecode >> stream xฺญะฑ ย0เ+ ท๘ฝะ4%q-ิ ftr'๋่ ่œ>šโ#t์ =/uิ ฿๐Aฮ๊In(ฃœฦšŒ!kฉึxBฃ%ฬศN_อˆฅCต!ฃQ-$Fๅ–t9_จสีŒ$ญh+3;tA|yษ=8๚‚™เล๘M?ดฟ์้`ั|า‹-xนI ,vQฐOz€x๘Eฤษ:ๆV๔vง„#J‰s‡k|jVmx endstream endobj 946 0 obj << /Length 224 /Filter /FlateDecode >> stream xฺeฑn1 †}บษ p~rฉิํ$ 7 มิ1ัŽZ••ไั๒(y„c+ฑ‰ ๙dŽํ฿/อdjฉฆ™<๛JvF ~ฃUญึT ‡/œwhษZ4+Qัtk๚9~ข™oิ Yาฎกz’ZŽฝใศ˜ฯฌ2+น Œ#€ƒ*ด>ณ๕ นฺI8๊ๅ๙&,ฏย‚•ภ}bTบ l+Ÿbฏธ๘๘Y\ตซธ่„2อลL5N{ซ อโG™ผนไs/P ์ม้ 1ำ?3W๑ญร-%_} endstream endobj 947 0 obj << /Length 154 /Filter /FlateDecode >> stream xฺ35ิ32Q0P04&& fF )†\…\ฦฦ  ,“œหๅไษฅฎ`lฬฅ๏ๆา๗๔U()*Mๅาw pV0ไาwQˆ6T0ˆๅ๒tQ``|ภภภภFฐร ~8!"์AD=ˆ๘$˜A„=ˆจฟƒˆ็ ขHิฑฃ5 ๛๖?˜h€ .WOฎ@.ชh• endstream endobj 948 0 obj << /Length 203 /Filter /FlateDecode >> stream xฺญะ1 ย0เ”…ท๔y'0mโVจ์ ่ไ N๊่ ่ฤซ๔&๖;”ฦผtx‚ซ๗A?’Y> stream xฺœนPœ[ื5Hp—เธปKp๎คi‚ปป;!ธปCpw๗ มเ6ืr฿oพฉ™ชซบžuถญตฯ>็ฉฎฆ QTa6ถ5Iฺุ81ฐ02๓d lDlญŒฌŒฬ,|ึ๗ofnfN>€™““/“ซซ+ฃีปŸษ{”##ะึš ž‚Bีษ ๔ทxx uƒฃนญ ๏i&Qกำ{ ˜กำ{B9[€Œณ €•ภสยหฮฮหฬW&ž;ฺ:ๅcfh 2ˆ[ฝ?:™;นรSˆฺฺน;˜›š9๑๓ าอย๐€‘;ภษ]ัึสะฦ ๋li่่๓0{˜+ž๚otํ๐ถ4Ws'3€2ศไเ๒Nเฏ>ไ฿นHj)ใฅ‘5‚l฿œmŒA'3@EZ `ฒ๙gไฟ่j€…‘ๅ%โt0ท{๏˜ฃนฃญƒ)“‚„,อ{-€$ศไ๐6ใฟค•Rโ ๚Gฟ˜YYธWฟM21:š0ฺ€œ˜h)nc,jkm z฿ xf€ฑ9ะ `25ทg๚+•ชปภ0™ห:9˜ปt˜™™™9ฬ}<๊ฝ๏ฑญ•๛Ÿ€๔…ILL]MZŒ๎ฯœว."b๋๘สภยสฬ `เเz฿fNn๎๗M็แxw6EC๓๑a.mcb `a๙'ocgปsw๙W/ฉOฦ๐฿ๅm๗@g’t™9˜๏_,฿ๆ้Oc๔4/“๔oz^๖šฟ 3งX g+ซ”ฆซ4เฏ]๚ฟนZ›[นq๚Ÿv ะ?ซ๒๗ญ“v2ด2 ˜ZgษQย dฌh๎4˜Z9‚นฎ๖—p+sขญฃ๙_7ฤ๛˜ฐ0›ช™9ะาไ่xŸ›˜ ฿๛โ`แ—/่}w›‘ธ ะึุฦภสม 0tp0t‡g~uVภW€๙{j7ศํ ฃญำ{ภฮูษ ๐~‚เ4N“๐_KD\&ั?ˆ๛}ไ “๘ะ๛ˆ3IA,&ษ?ˆภ$๕ฑ˜ค v“ฬ๔^๓ฤ `’ƒนศA๏\ไ w. A๏\ w.Jะ;ๅ?่‹ส๔ฮE๕z็ข๖ฝsQƒนhA๏\4ƒxm†ะปอ่z็ โxทmญ๗฿+,๏/&ใฟมw๎ ?๏9‹ๅ˜qx—cb๎๒ทˆฟฬถฮ xw1|—l๖ศ.ูฬฮ ๔wF๏kๆƒ๏๊,฿%X พ๋ณ฿‡”้O*Ž๗P›๗ฉ›]žํŸ๊๏มถe~go๗วฎไ`n๛ง?์๏b์ฌœ๒ฎ็oj฿๏1ฆ?VŽฟศๅo๊8฿/?๏Eด๗&cr2sญก๏Šœ\m๐.ส๙o๐ฝ.ƒ๏’\@ึ๗่ฟc}O๏7๘.ืใถ๗L ‡–๚ฏ#tvpxฟ๑nx?ฦ&ๆ๏ทไย//ุ๙-j๏ซ…๑]~Mpฺ\{I‘]ปฌ็xหถaฎD'ฮZT๒JิซวŸข =ปจฎร๔1Ou>]JB‚:yqaฮ*!:;ะว;M๛กแaล๖URr0ภ๓jb‰Tศ,,ีU๚ QB€ฯM8โmธอฌSืกฮ:ใาBณ์%ล๙`วnุน,ฆ8>cษœ;-(},้p aฟ;๔ลwXฬPฆ€~Œ#•AJ์4Bฟำส ฟt๋ณ'|œว\ผU๊lช9nU…๑๏๛Yส”K?๛Pฟฦ๚ฯLฑ–ธO%Ž๓L†ฅ2 ่7‹โ ้ๅ.5กีขฑG้ฮ|'ลไ\ฬd:vvุSlL๗ปaŠดห2ยยืไŸ๘ขc๐ฑ‘R2ฦc9šH-Ÿ๐้\OC๔'ฟ&UZކ$‹0ึ1โIยา|hd’8ฬKDŠ๓LŠส.˜ฝ/ฦห>ฉๆ‰YŸ?ำบ9๔Pไญžใ•eีiุŠม“„อ„๘ V9xŸFS!ฅสSศ[๛pูจ๛&ญ™ฬQโyณAzqอ(ูb—,ถql|เ˜€ํ…๐S6ไTnฆv“es์ว=ฬ;ใeขฯว/œƒ ฆ้Ÿ„:eษ ึ !#kq่ฃ—uAท †ญว ™@๋U>XV์Rป”2fวNAชู็|FWิ„{ก]%“ๆ?F๗พฤ `๘ต-Kv•ร๘ว]Sช!ฝฺx|Ež๛mT—ฏผญด_sBkbร าฤิ~<›๑๕ซฬc๙*ำUš3•โถoUแ\ล3ิหสVะศ๓คA|‰ฦqค:ภXาเRn‡มH$๙้a]ิ_6ผc5ิศก Id#Q-ญœึ5ฎNงศ๓ำ๐รiF['ูJŽat€คิ—G˜ใ—ีผ ~อqu"Rำฎไ ,{Oฒ๋zFคฃฺิy’ญะฎแ–)`’Sฆภ(๎ฐ๋W ็oโ5”บฟ‰ 0W2ใ-M“ฯกtษDk๖{หช„iํนj'฿s๊y!q@ฟt|y๘๏ZUต๘๐TJHฃ  n‚;Nธl"% ัรย็ณi$ฌYึ–ฐุยZะVะกญเŒภk้ว˜ViRไ‹Aฟ๚ิ่€ข•ด^ไว1๏)Iต*ฎไIฏืๆo๓~๖ๅะช ฒn—Gb็ธ๒1vOผเฮ.๓ํ[ฃ4ช !xj/ˆ|<ชหู.q๒\ตšgฝมvœรOuน–1‘๕–๎๚ G฿ใบ ฯ9แ}‚ๅาฑyaิnหo.ย2v„=แ*ฎ๊%ณป๛ื๊“0ฮ๋ˆnฅL›กD…ฅžท:ฉธwR‰‚ฐ8ภ5•ฎ†Y๒~ฐ’)‚ธ๔b~ไŸีมSซฬฑ/ฎแ/๓ฬCก฿/0ฬXTีฮไ~V^%&‰Žoz[฿/ขB|RPi;ธQ2ฆFN$ญฑ|ว'จ๚š•ว๊ต7ศw2p‘f7ฐGุด๒)โŸz๓q“จฉƒJPr†JทPรrฏใš€ํ๚•vฯB รฌหฏื_ผ;–>nฑ=ว}ืJแ+v }Ÿš< ะ๘ๅƒฌCป™„๓หคvวจNœ\ว\ศqŠุdจฯ๖‹K฿น“ฟerฃณฎ(ญp#ฅ‘m.™คmCฒ๏็Zด้Jš:b๓C์ัี;ด^,3š)ษ ๖็ืV˜N…}ใ…รีšาฐ”งมr Fm๋ws‚ต^นุ ;รG}Xพ๑I9T›ญใแ๙A-v“Œ"๐6๏๚ฌปZc~| ใีJ›ฮ๑๓|1_`SŠฎR๊ <กคดvyฐ ‡‚๐้‰Ÿ ๛KS `๑wOท†•_1อๅฦ\๐EPฉ][เรe็ฃ๙‡aขI0'y7๘ธŠucNซQ =มIcรM๕rย๗7Aิฅ<เตf;•@ฤซ qั–ๆnท˜ฯx<]4zอ_KDปฟ๚x—L@˜๓)' ไ{ฏ*ฅ‚›_eุyAีาฬq๚ึหล*AญุrA)†ฅLฑ™ฆCƒํWฅqgณ…Šุๆ —สฒม๖วe;ร1ๆธซR{)8&c}อ+เบ๛ะwหช 5 hQ*.๔œฉฎrผtŽ.0Lฅ/กก6<ฃ๊๑.[•๑บพy|c?ั•@,eํท>ภoฏซBt™)ใd฿,๖T๒uุปiJภ^e\~กฌ›€‰ซ19ณิ+iัJAธJบฅฉเ:˜WชๆƒrถƒM่ šตŽV‡ƒท•฿S‚ตา.ล˜๗]ย/ซ++ฒชŽP ม‡|}Š.zf˜๙Gฉฦพหญ›bศ;6รKHัSzส2ย;ฺณ)ฟ’ˆงœC^= ัSJ่•2k๓„DYŒ5egQ9G € @|ถขฦ฿0^ๆชแnžภล‚˜>้ะ๕RŒSž?wมั3๔MyF๛wฮ๗‹E•fึอ{ฮ€ิ์pjดา๙Qทฉค๐์ฌQ่!-ซ๛ฉ}1Yธ4\.Cˆ€ทฎแb”_Mำะ๛k+ไญ_sŠมa–d ฯกฤqฅฝ—Ÿ~ึำRฮ*B"ฆ฿Gn$N€Gึร็ย &‡ิสzฃ๑ˆ2กมW?•ดทฬmoฬBน1ๅ๖ัๅบฦฃ}TCภต=ท-ผTะ H6—Œ๋;œ^G"jฮUฎ๕OึJ;๕Sส l˜ฒzฑy$0/kมมอภaZPำฅ_กTรถอร‡สeญฝ9ฏP8m›พk’ษฑ›หxk^๛–ภ†5z‚E=0xหjใ‹ถvูฌฤ8~~MฝR.œ>พa[‚)~ƒ.~๚ ]์๖รƒา;๘3ห!นŠŒ@วpฯ๑๓ฆY@ใเ)ฏ๚๐ผบP˜งXK_[ถq‚ถ฿>Ÿ…LIoส~ศaลD Dั+5งฏ๘E‰CสAK๕ ‡F้ pฯ„๊P‹ใ}๘`grย]YzL v๑Lิ฿ถวึŽ@ฤ3ไตฃnไ…#™d๙:S๗ธ่๎พ1l0w/๗™IT$b้โพ0ณ]8wb1ใ&๎็ฦย]Z๎(ˆ)x]ทbร ™o1s!๙๏/–-ูGQฆฆ ๚‰PŸh8ฤ_B?‹pkิ<›Lˆ†gื๖ใฤ:์gC ื†Qrรฑ| นœIำหศ๋j‚]0*ƒธ๐~4^Nำชีwƒ]จหŠ5Žะ=2XำฦIม+D_}รศ@n…‘๑[๖U๛ิ ธUณwฏ‚พEg๒R๓Uฌaๅ(๑ร:ิงxฏRxฅm;j]อ™mŠ„;3X‹ ๏|๕•fณ๘—–ํหi]๏ฅอ8ชAทฤOŽo;ฺ๎DKlE&lภยป} zl‰‡jšษ›cžก.\๖…uำศฉ@‹๏_vf‚šn๖ณU cbqˆฃนqฏ:;จ-!Rอัแ3zอี๏,ฮoOรฟ3Sสคฺ’=๑2 ้ชน-วุ;ฮต#LC^ท+gฒ#) `๎Wม ํ5_œrสมอŠbฺJ™จ7#ฒ™;]็ฎฮรŸจ ๘]š–ฒœดภ˜ไ”:ธมธอภމb gฮY๑=R6ู…บ๔@ฐฑซน๛Pอ qาsŒ–b$3พJร:ภ ฤ๋ ิฝ^*ทฐŸแศGyปณ5p œkHญฬl5โ๕š "ฎ่S2tผuˆ\ ะ๖ซคภถ๊QdliH}NๆพWฮวไล;โŠ๛1๔6๒upfขœQ~ผ+๐ลIพวึะำ}b`G6š–}{=~๋ต€K ›Aิ%Sุ`็XxทธH›์๘0V๗ษเ*ฌสงKu )Iรว~ั€งรป/Zฑ<ตFณ‹Rา|•–žJ่ิ‹๔โ็g#z*คฮหฏร~"Œ|}ง๓ฆ–๙๒†นEฒlJƒ๐ว&ๆโฬ฿ชcŒิ~อlฑ E๒ใ 7Apห5ฝaG๘r๛๑nfล!ฦำjEIซะ„#ฑ9ธ7#ทรยฏe˜ฏู๚*Žฐจ zขeฃ~ฃž=ฟL0วฬ]ตAPงƒœ‡O?ม:๖€Qะ9ส/„•แแS‡ ฉ‘]yOS|๓ฮnซŽqอร–Xน]ร๊ึ,]b„๕ˆ—-ฃฬzœCL[WซZ–/์ผ€]ฏ“๑เz๋hฯ๊†ุ่๎คq7Dˆซํ์ห—Og68ฬj_ษฐ๛^<ก๛ ะ:ใ๒๏ฟ lzทpX#™ŒV!ง๖ํะณBu5งค๋&cŽฎ๐ไ ฺ๋u1$}6BG*p‘ธุdก8EˆQ )"ฐๆ -็v‘i„ษฦ๓๒›†d[ฮดQQ(9“sXtฑ LDdฎง ธ~ภDไจ๖”ญฤ Š) ก5ฬ2ษ;โKa[ลท#ฉAรำษH(UFt‡VEัฎ๚qtr ช,ๆ๒jc้%€_žถป๛fvSฎwIy,lโl๛๚ฤ฿)KฟLาั“@๘ˆุอž‘š‹็&ฉ )๓i4ิ!%F$ไืgาœค” & ž3AœiOhS ์y๑2ลiอ†7™–,๔gym๗๘x†์ย‹vzข”žไรafขล`}ฉล|โๅกT@ ‡ž{ ี\Jq?ัfเฦys\๑E+z…๏Fพe๙hl…f๊“฿๊‹|N๑าฬล^.]t่%ถฮf๎Gญ*#˜[B?า• ”Uษ8‚tF๋t]ž5๎„‚ —*~PSก{๎"พ ทqU;ะ 9%qc7๚-5า๓)$ฃ›—้cโพ4?ฒ‡@56‰6บ<๙bRโ๒ํSฦอJ2roรsๅ๖WLjฆืไบn๎b‘ห_|ฬทํ4JF(Š’}ถบ0~"txขฮจขูึ# Y๒ฝ๘ิ3|…Y$ธชgb๋ฬณ>ฮ’Eฏ;š”ผ ้ Ÿ:3u=hv%ุS๛}๙d—] ๗RฃฤzSฯปo!\`3[’”5IXŒLฺส˜I‘สouษจฅH’ๅˆY็8วzำ.€ฟ5†_ฟ^f*Šงˆ่ีC›้†เDขŠด|ต8๛:`{ฅฮ AำqฅัRฯUoฯP๎บ™ซฎวฝะt\ฆŒ g5จ฿Yอ0ช`[@ยบCษ’?Nๅซ2จฐฒ๔(ง&w๔ฑ*"J‚ฎ›Hท< Œฏรฐƒมx๘ลฅ>3Z{ภv€๋ฬ้€~ณ๒) Eฦ]ซสค(aผ๛ข™น๊F,lป—ฦเtถํ@a๎Xฑ*ŸํฐY–ๅต+€๚+๙|{ ?„lIฯผ-ร<หF๋ังซ&Oืืร๙4eŽOป๗T'ฯ”SนwY)มtลM„๓Œ;ย๒Oˆ! ญ›บ9ทฟo_kn‡@_ิฏฏoCๆ๓OšXนjฅสAิพ‚#ฮmดN<รฑห_ƒ฿6นฑ็/ุ์T3ฝ๎*H wจ:mทh ?ุ้Ž[}อกOจำK=‡ศ”ไตฅŽwฤ๗nศA/6˜R3ฦศ=€ส]j>ป ‚TMฏ๐ู้ถ)ํSฎ3wฟlผŽ้่ฏQ ปˆ๚{€lX^‚ืt๙๊tฮคJ D];uำ špHŒ – ิ:ท<ใW‡วiF‰๗œ์aฟUyK4พy%฿"‹„ /Mษ๒_ํ๎‰อ|šิทศ@ธ"m!ๆqJูซDภšึ+ๆคlKh๐ตฌ'Q‡ถขS๙jิ7Hˆ™iลฏgD‚็รแ๖)๐1&ภ๔ไฒั-ฤŒZศ„8๚‡hค&ฏ’(ิ๋ฒแ0๚…ๅ.F ๒โ,B^ีอZcฮฝ…Jhฉgฟ่Œฎัใˆศ—ลž1ีุ๏๑้—Kด-|ฤท$~š5wžพเ"[$ฒๆผŸ์Hเ5๚ฺK ฉ–B4ฬM#ัจyw42เiเ{‡WไŒ๒(ไLศ|ท•์s฿แ๕ ฆ๑ŒmัโนŸ๓ฟ—N{S4wณ6ๆ˜vฟา๓ฏ?ž~๒IโmW\ŠžD‘deืฒ๏R?“Œ /3{เ/ท&๙๚ฒ~ƒWผ…ผ๚e ibตไ„+E๒}|QCl๑^ะœ\ฅฯ‘\hฃ ‚ฌDศ ๊๓ะ#ฌUz๔ฝ—qŽฝšY ^…/ภ้Fฝฤซ o,*ฒŸ๙A7*_‘๎S็2แ"x_iวn‡.Cผ่จuะ‰ํ n็ž[ya/]7&เLQvzึx็๚ Œะฬฒ9Oป*|F_fฉ…KnฌฐE ]};˜„0ษWos^ฌโqJ™0ปฎCถะฐ7`ลน™ฦ๕&7Xกf้ซ฿ฝน(ะm TปŽ๑๎ซmiๆ@ภ„นŒ3Mฐห{bอ๒c˜้/ฐ#;๙}ว‘(0}'njQสดƒŽ—ยn›~uเx?ฯi{ตฅฎผG?ณM อซ†ว=‚ฒ้์.อ| e๘เ'„ึŠ˜ป1ซ๚ฐ๎Sํฉู%†ื<˜ฎjคห.หqฯฺ๒;}bด__Mod•ฌVฑo์JXp>ส่wT6ึG๋TบŸ–จฎฺ.2B บๅ]Qศ6Œศเuั&๒-ฟavแฐ Kx“?๒์˜›๊&ฎสไu“/ดL%้จ–ง!ƒอเ.Ÿ`3๑ฏMฅB#Mkž;cp‰โ๛5ฤๅOปฅูฆฃIด มมQ๊8‹ข ฿‹‹h7zd๑ธ๛ฬษtlืส €น0rฆdฺ‚dฌ2ด๘I๚[ปฮ๙ฐ*o\<ร้นฝา๕SZCูmŽฟอุำ๔ ˆึะ‰ฬZ๒-‡€Xcงฎฮ7pf ชฯ9๋ฯฌป"q‚x;2๖)2)ท.a€ัcŠทYBวU้C?n'ภ•ณDˆƒE †ถ๕Y›ห Y^GรCํci:†•wู’Jพ™ึl๔ฑjc,ขlูธช๋ol^ธ“iฯฏ๓Mq*H}วฑ฿vQจทฤ-G ู/ฑ]zn่ฬ•/%์ต!า.<บรL\S†ทkOํ–`้G฿นt"†ะฃขv39ีฝ๘M๑ำ  zฯ็ฤ_็Ž$นฐHŒqฝปแโuะœถŸฎฦ๐† ผƒK๕‰fฺษ›œฅ.๗๙AฤรE;*Sษฆฐ8Yบw_๗ขดฏ“‚ns™๐eeส+ภ ฐEZผฌK;d?-๐ณRั;q tภg,๚†huไกึnL~u.๑ุ vv8เผPะ >T|K8\Œˆ(b0Mท}:”ุิJอโช}ู!้ร^Tษ xฉuIF@๋6r‚$dท•ŽH>$xdEณภ8˜ฝ(ฅห€Zถo{คฟฺ$ฎ|->*Qฦั/Teฉ_wB–์ŸXGuแ> L<ืspwŽฅJHฮ™Gงฏฅ„=ฉ.ฤต฿"ฯ1x๕gh:ฃ7฿†ขัP!๗$—tฮญL๋Me&ำ#m0กL !Œๅ“ธx“๛&~ฮa8/C•4ชซ;$๎๏>eO/0. ŠiptRใ่หฅTP 3๐™๙กlNŽh[ีฺ–™๘ฤƒG฿ yฆห…“'ว3eชR •๕ล@>ผ ~๐JŽยฝฎ7Œfฝ๙Ÿั=*ko&ญol"my&zjฏฺุ๖ 5O wgฉYd๖ซ4๗lๆ์ฒF๚ ย~C๑SAG:>ิต;วzมAี‰มฉ๕ฏZFZำXM๛ไ`Džฬ•l๑ป๓M›@!cำ็h เ†บฆXcึAฦ‘rฐฬUqtฤ’DืrิSฦfœค'/ธ9i๔ ๐ภฆ}ysยฆ.TlVัำšฎefษคCุ- ฮbึL%,yทฟ}~๙iˆ`Gลซ๕ฉ…o๘ฬข6ฯธ,jฒต๖jฟุํญ์ŒQF”ไแปล š๒mw/…,ฅ’๒คXฺSmุ฿R\M_ >q๙ไ!ุ(ฤ+Nด‡ 0ˆผโุT๛”ฝฐ5ภฅ vŠu๊zฟhซ ฦว@ใqัšrึฟ22|wรE๙ีี_>;pทธ.ๅ~๎๑ัฮิ๐5™ #~>%cส.˜;; ~r/ยm+n3(œ /ศ ™ƒเXฝแk>L๗ตจŠdบs ฟeยฐ ื!ํ๘ฅFภ\ฯ๕Gปึ'{‘ฯdcมM< ฝ6—ƒ9สฐQA”*ำ8H†็ซŸ๖3฿ญ)ต›W8ฮฦ ข ‰๙จ_-x๏W†MyคA,แค๕=3ฐศ›rHขญฐ2น”"DยLิบ”RE_ีŒZฮผ๙๐ฌฮูืxšฒษYneฌสดเLู•–@}™Hsฟ—– ๐อษY๒#ฌฉbuฌ€ํ-q-tๆQเMญฌšY,s๗ปeq4aIš"ี!os*B5uะุ%vฺWOง-๊/๐ท;ยยูๆํตaF?Rณา ภ sบ็zX%:'R™ |2noขF๘‚qœ9a๓OQศžพO}7eƒi ,9 š h/กKlฎ๊b[Aๆฝk‡ " ยๅ ูd“ =!%ศำ(Š1'>“ฮt˜ล„ญd”PฑI{…I\eTŽ-&ไฝv๓;ฆ7๊ว'OtIค8ฝธ฿ด_xI๑5>k7*h๑fพฒy/,{Cฮรk8qžชFŒK›ะ"`Pอ๛’ƒžงโqอ}ny&Uเ‡]p|;=…qkxy5ฅถK!.R‡Aะํ!:ปl=ลsM/t‚-VZ•…้ŒE็๘ฏฯ/}JV;g ัุ„wสžOXื]$ฌ9้`ไS๊ตg)๐6ธปยŒ'์VีEw๚# tJาC๚•)F… %ƒDnฮ*oไ9t…Cfหž๗๑0=Lœ”ึ$EแNlv•Uฌj๔wL”Zม9–,๓กอฏฆาœSย{lS—Mั~|t“ๅ–โพุ์ 7ถ/ผฝi\๏‘ต]โฉ+j„„๊pๅช๎ กVTฯ‹{E9สPฐฏฝH์o้S1หคง4€› WูžวL[@ฤจJj0`Zี0ัฑื2’4วB?Qัตพ‰ ŠqใmKห ษ…‡•้ˆ=เ\:qaกfผCGฬWมๅบW[o๗Wึ4‰ึ_็5.กณจc่/‚›pc˜ฑู‰_/ิ"G<xh#™^๚BMๆ็ซ๖˜แp&B+ŽjHิ$ฟ๎7zจฅUV>ฺใชBํŸ–๎+ึภŒ žgl@ธฺ&nJfุLถฎDiนล๎ๅฝฃPศHB๋YNูy ^L)ฏpS (์VaถผwญK=ณด๕%$ZŒก๖๖ktP*N๋šด๘๗ำŒb!“‚‹แ๐\&ค_๐มข<;ณ—ำ‹<์5)*kใ๔dป?Aแ๋7ธ{#_ ์L๚ใnา€ oœ}ฆk%ธ27ช{ึžฉฬ๊Yk่ิธ ๆ๚|ํ?ึฮผโ"ฏยข<ข*ฅ./Y”Z9eTฮ” ๚v%-ค๐Vฐ๎f‡{๒ฬฮ6ญกOฒjฺšm9†_<พ7ฌปU๒&ูt~?VฺืE‘ูŸำ>% า๎_ฌฐ˜_๐S`D:มง–ฅู6S•3็—‡ถฉๆ ˜.Wหํ?b๚ิh/ ’แ€ขฆ  QVY˜›šฟ@ฯ…> :n‹uฬŸพ:…๒‘๖fฝ๓Yำy>„|๏g{C ว’-ง๙ +ดxฅFGฟ๚gQPงŠํ[‹า1๖อ A&ƒ\๒ ฏOฺTญŽว$amz!๑ฑƒ๛ฮ‹=ด\al*›ทŸ†ว„ณ†s7iุYฏvx_X ceu๖ŒkI–๛~cAฏ฿ฯsqสOV์‘/$๓ฒำ๘zฦ๖:้=ฆE‚ย(๖ฦบOŽP–UŠa๐ถํ‘ฤ†3^ล๛มฦL๙๓๘<2”ฤ#Tzค๛™›Sd2ผขุ‘ฅ์\๋reเ`นZh {Yy๊/Vีx•[ถฐkไฃ ๚ท oฎ:K๙ๅGศk– ใoฑV2g>ๅ]Šx๑฿ฉ[Wƒ๏vฃฦ†ขŒ=KeŸurYษว,; ๑„4DhL๐[U n๕๖]เRฯฤaตี๓cl๋™V‘นc‹i€๘y>CคS(€ฎ<คz_ฤ-nืœ›7%฿๘ๅํ1tX ‡ปiqR<{ัX{MF`h]ศ‡แ|‡€ูFซๆฆ•4hžใฆชb*๚w8ฆ=Šฉuq75Žล๙ฦDŒ;ž’#ืfฉ฿ี๋ห๋ชPNb.mE…rn&ท&ฬi™FF,คฌๅำ•iัีmั$%ลฦ-ะอฆภัจŸ:+EืWฟ์พ?ฅฝน๊ŸฑฅะH}Œ๋=L;ฌ9์N)้อ$l^hpำ๗ญ๓WŸ\Yั๊K—ี๘cqฺ.๖สฅjqญอEb\y=ๅบ‚ใ๓ฐ_(*[ะธ“e”๐ฑัu๎&=`:อS:โ“)2ปW>]a2งภ‰-กJN฿f฿้j# ฒ YrpดโeอสภัoBใปน)p+/บโC”พ”ะ.ตžQ˜นˆ ญ {$ฺ_[0p๊ดฦ‘ถจJh(๐๐U๋ณ~ม(๎$…%&/O๚ษ:ภฺœlตc็,ฑัB&‘–p๒Mˆิฉ฿]โH๙D๗ช•‡:1ษt1Bย๒J รœTAg•]k‘z‹+Fภ,ฤ้๚มn–XดSˆhฬmส‡Iม,‰Z'yrmJ~/0B7Ig0@ฉๅ$๙x 9Pžฬ{”๎๒ Љ7 Cศธz".‹.!w๛ฆ7๙4r3O9๚Zb๐–2‰ฏ5ฦD[ HแฃเฐT้๒ฉผบฃ ,Fˆ฿ญเ.ี3๚ใ;|D}าFZ`ชฑDDใcyH‹…ฝ“Ÿข7—ห%แจ03{;m‡\TฏฤC%-!+V0{jฃr(๛bGœ^;ฏ๗๋3๒sารๆ K่tคัFฐ๊H0ฤกKb'˜6า๔ฺo‹Ÿnฎ้ี%J…ฐัฒฟŸ๚)ถr}oAุ ZT8}รtฬฆฉ๐™<6i5 +ไรฦ0…”ุ‹ฬ•ีrฅฤEฆ2พฑฃฏdu{›Bn\ย๐5n๕ ฌร–‚ฝภLIแN˜;ญฅoเี@L…ƒ๘%ณ่฿'๊_"แq˜8Ol5MreF7‡;pulepั•ธlฤvS’๋๖฿๘ธSณ๙แ6ิ๙–?PJ~นcVaฏณ5WnŽศ~ ŸJ๚ะIi'์ีนe‡uvต†ตแiKHFVย‡ภ`฿์ึห๗m†ฒ"๓ƒ%Yš์™-๘†ํ[ษฐ}8}๐ซ๑.wุ ฉ5-ƒ/ฤบ๚ศ็V7ด…L1Lะ’ุ0ญิI๑v๗ถZ@ไธ\๔žD‡DŒ#Kแ๓[4WQS,ส4‚ำ^ถ5ˆื๒ วGBม|i๒yษY/SljฉํFGฌฝ โaD๖kb žส"ษสQฃล‡ฬภ–ไ;Eๅญ+๎0t’XฃGJ,ชsเ?สแW๏oะซ'ตXWฃœj(BฅŒKจ๋bถ์)Qธ4iฮœ‚๘Šี. lี หษL(]๓^bธTd๊ทฝ"ฯ‘ิ:|’ศ.ั๕›ตึ1๚v๙|ฆ @,จ/S์ี™7!๚ ก7oฺ๚r๑nECf`๙™hฺ๐$๗3k้ฐH+ึ•v DS5 ญFp‚๗—ณpษ๐๗‰@Šฯฟ|5Fฝ6•—จำPnw๕ยฑAฤเ๏j˜;‹ทyw 0 <‡OฑBแด†@๗‹?CึHy ณC…AZำ„ูDแภ`"’๚_โยเ:งd๚x‘Obtฯๆ< ”žขƒUtC™*ฤณคEA๋Lื ำฬu˜ว7ฒ!:๑p๊#oภา8xฝฯ`œ'_ฆ๎ณ$ ถ—Œ‹ห3 ‰ดVˆŠs”ํ๑gฮ๒๕G่‰ง{กWUงจ0 ถ/ ัwป+๊5hfฆ‘ะ| ธ|EEา2mYฌข€Qt๐4CV.!วšฤšœฺ฿ศV๓™ี๖วฅ*:฿น9ฝH%Wgฏžฺฤšoพ$ธ"ฬบข@RoœฑฎŠbažษึ‹ฬVEวFj{ิ’gภพ^ฌภวp โE๚๎ช[tbv๕Hฎฅ%,G5lYpิœฬน2ŒqFaZ„_lๅ;1ฑ˜;๐ ษnฎ_baตC‡น -—!NุำUงํ*2€6ฯผ"๊6๊(y๎าใ[o้;‘๓ูืE๓OJU„ฑ&ฮชE>hอ๖ี>kt \E๚่ย,`Tำ๕ขืใžqgžัoplถผ[ xหr่**TS$฿xี?ซว#ว?lใ"+ ฿ฬGh—l@ล‘2“dtะ_™ฟdศ-:Ÿห#™s=*ตก*ถ' ]บฺ^hืฝHnBถ้ฦCED[J^!ร5•›a„กผ—ว>™Bบ€งณdทK๏flb›Qoง—-ŠlืTY"_๊™้L’Ÿ„จ@‘˜…5้ซ_tไ8 G&Ga|,d ๑ด&9“้”m)œธ๘มจyžฉ_าrŠ5NpAึs[ค?_วcŠiydดbดtqœTDpcฎ๛ด‚ผืšศD6๚*e}ฺŽTN>้ƒูฏๅแ๚M}+ซŽ@#Bณ‹N๓>ัหAfต}plยงq=๋ป๎ฌ&ฐz”๎ 1jอ3˜a๊=ัๅJฯ(HJd๙Iั่HŠ ค=3จ‚aวr›otุLฤจ ๕* ฑ $mŸ6๙Z>ว=8สaฬัKท™Mผ4วัณ;`—ฟ๚Ÿa๕$๑อภ(W–ฏ5q‘&h๋w)Š ไสu 3š6ฮ่๊5ชผีy-H•GHฎฒๆ๔๕z‡๕อKVณj>ีLศ๙^ดบz%เรh+ณSjM๒ วœ9‹^)†X๐๕ ฆSมาฉฺv\๕ฐ9.K็„'รŒJDใXชR`›ไy๊%ฦy@ธ๕@1-‚้‹ žIBgฅ\H)ญŒธc๖แฝี,๛์Jฮก^‰n!“่รฐBlŒ้] ฃืPE1๖œCฏ๎ฆ๙y†๔H‘ะฌป?9.QIž /-a๒ifแ ‰ชึ๙„šไ Ÿ,5 ฬcmdœถ1™(/2ค฿MY%X Cƒ5kชมค:4kฐ3Nเ*ฬ฿วซ!3ะ๔S’U+V6ฑ๚#?5+ิDdx/ฃ%H์าๆˆHƒืpาI>4็;<๙๒ˆรส๋Y”น%็•ข๏7ํๆ*?I๛š"ฬ<6sฑำาSKก/’l6ฑŒ2špmฐ๒)ๅdBŸฆžชA{ก,วw'๐ฃฎL้–ทz?{๛0xรื“Ÿ=sVฉRP}๖ญฦุ๔ญW+J3DŠถ‘ร๓Lก™ก้]ืซyoม&๑p๒h1าZk๊žJ–Š”'Š—ะ๊NŸมƒ 0จS— ฉจ'ล๋๓‘9†ฺ‘9_{๑Œื๛ฦ๏X”าq'qG์?`X๐ฅKšN”C&P้[๓]NYฏ ฏูyธ็„ซ๎ฅ๑_’า๊sP:ฐฑ–๗0ZQcเฒหw€%ฒ L€~—?ๆv๕ฏ๖!pFm๘/wXฤ4>๕(/+šะˆฒ†ภXA‘s {ธจาำ 6F#๓๏Li‘ฆC|‘ป7Fำ1๋-1}XkฐmโฐNฃฟ“ึy๓ํฮฅxQฃˆฌผ๎ Ž6ิืฤ๔ ุu๐๏ˆ:rฎษช}Mo•ณeฯฝฤ%~ู qผfTจ4<"`(>Wdผmห LHฯคฒํGฝŠ_Y?,ZczKj aži~iฆNšn๗]๓1ฏ<\W%AA๐Lะh ddwให๐นษ‰MNทฉ8ื A[rS๔˜oดl่sX‘e์ด-ขผุ{CฆธK๘ศั7„Fะ zœˆฦ้,•ํ,ฒ%๋ิฒื\ฤN2$?ศY /jไ?—๘Ÿญืcๆ”ว6ค๊P>ร2aชs1‹ี=H0j—J88  œc_ํ_gพAuฯ๏ฌ-ึƒz‘๚ฐŽfS๘(๐"๕‚Eใ3ถd39ฆ—ฎฝซE\zkา]xย™ส…M๊นลFฤิYKาYC.vr์bdวŠ+šๅอษ1d๔มG”:ˆiผGช€ตฃุrn1 'ก/„~žฉึŠMd ง)y‹6A{73,๙บ‘า ‘งbฬอล่ญtX˜xฯ็(yP_ฌณfd+๒rฏŽ>.Šใ™๗ๅj<=`้ฮ>6๕Q"6(ณ&้—ฺ2รo{โ๊ไ”ๆ{‹ฐ๏›u์๕ญ}-6?ฦŸ•^วoํ๑}I‡…฿กธ๔ศšxxqีาG†๐dm็ณ-ิzt๎W“ งภ’วsฮ0H)ว๕ฑoธด.๒…ีฟํฺ  จnภณ็JJธUiŸธฎ›^eพ”ๅbว“F& n[๚1P โnแoยXฒจ\ฑ˜ล ั’ๆ‹ ฺถwโ€_„ m=—uูำดzญ9qL1่–€…มญ์9pฎYกำศฃๅ, TžJฤ,vุงjD 7"vˆw|[sฃำํ6ญl[I„>IškศsืะMโ๔วmCNฺีs์b”หผไeV>'>ฌ ขAˆ ป$ฺ!ีึ+ท|uตMŒ๕4วyข[ร+ร!S'Bดyำ์}๊`J–ู<ฺFmษ#๗ล3๓๛ŸicฒฒEl พ-}๊งๆ‰‡๗ซ๗QBSwH'`แQ๚์wš‹) u2ฦSHKM>˜รซหˆNžY์?แ๓”žแt'โมทR^—Fโ5žmร๋Y=ึ…นe1ตฒzPY24ž†ณนฐ]ํB[k˜]่j/ยXด5บ๚P9b| พt~ุ๒.kR’Xฅ฿Rฮ‘€ˆ(I WรN7zgฯ8ถั‹ฯเใ๕z่ไหMpw๋ฌdหด๎id'ฦเ—ไ8๏ฑ‡พ๒&ฉิ๓าN›ล“gcY/'QE๗/‹?rLUHมฒึ$m๎%ƒ“๘ ]้ญp ฑ๒›+miตงuษฤƒ%ฯ8๎รŠPฝณ6Z=;เ็œโื!P%ี๘Cๆ/ํR,‡šดโ์ถ๛ฃ]ม;tิจส&ด{&w?ฅฑ็ ฿$ย‹u๊_MlV˜ำ37rF๘อu?oผฝgZ)ืื'Eลุ9™ย…*ผผW H บฒืบ,njคมwฌAฐ*yJ่<’ }›ฮ!ถะต?สŒ๊Ÿฤ„PoŒŸฏเi\ p•B“Pำ m8ฺ๋สC‚N'…ๅตฤc฿#•„ี"ฤoQo๏ฮtฝ๋ฐ|อˆหRM๕ \เภแBŽสตปT{•วrถPM^tมษิเ็มะ”ฤกaใ5ๅ}ิ๑ปำ&>ฒ9ย=ีิ4†GๆํRฌ9 ˆŽ Aว[:( ?JตŠ ิฌ†‹M:Ž{–€๑ฬ„”Ap_ib$'Viฟดขๆห“ฏ>ฆrฬห˜A—žzcr•D†[็xจ—๊ภ‡>คˆ}9ซฎฦ็F;ApsxMฟ@ฟ:์๓h*oสะRูข%<ฤEF o’ฮฆ๕ˆ,&ํฝ7ฟฤฮไ ๖tc[ฐช Nฒ[0^๘ƒูฟ,BVิX†/j…ฤปแž'$Mj๕นน๚ปBn @_…สฝ‹๋็;ฒ`dยNฅi+x ้aด5ซํ8Olmyตx )fุ_@ ๚P‰อ }W’Fw2Eษขศ๗ถ;ฅ5%Žx<-ๆฤบ˜Kํ^Vณˆวู—‰ฤŒ;zป{‚RแžNwCืeวธz#๗อไž–๕yh6ๅฑฆ1}‡–Œฎค฿".†แ ๛ไO’6 Bคuช3ุผ(w3อMt‚ปปฃ[฿าัuช'%ฉ‰ผธœ€้ฃฑŽ  H๒ฅ‹ญ#4“๋~ๅ‚แ…ื6๑Œ8๓-สW ฮเถN€z._ดทดฒ4qK,ๅ$’ ม๑ใจ[˜@aRก๐’ T™ฎอ2็EนoฺรๆU 1q“้๘๛๗^฿‡๖G฿ศ<ŸฬKิW/฿รžB"า{ƒXีซ„๒KD๖ƒ์ซ์‡’.Œ@ฤ๔ อิH ภ@uBอญดCz.ึuฯ๐หขƒ_3qฌ๑ u%๒›™dkXฤ‘Šš+€›R๛หb$๛‚k]8jอศส๕โ'ฮ58„qื„=Wc:ฐ~ศ]โ–2%ฬ™tŒถ]คl9<ษ4z๗ฤ‹Xๆzaท5รui$ส;ฝƒฝ rJœโรl%ฒบ7ผฆจ#Bฆฎ!ฎF*O฿ำ• ,$†›j ่แUใะ‘Y็|๒ืL$RrีvX"ฬnฐฌ€?ภูฃDสf%žดจRyHQส„ˆ/ๅH€1nฝ๕mH[0šNแ$ะ’ก|ไซ"ถ”\v๕ธ๒1žp7#Fˆวbท0กฌJ๋ป อR๋gT’“7๏ห&^อฐA Bฆ฿ฮRเฃKโ~ชน‚*฿หTxu—้ศฒณ พTง็ˆอH3# ๆ›ปฌญQuี?Aพ๔ฝ2a&zํำmจd f3ฎนำGm>~ะyAcAฌm๘ฮฯ>™;4วโท’f฿ฮRญ฿ุซŒ๛๋:?ฎแฌฺะ ๚ฯQ๏๛hŽ๘_ฎ?ล~3ภ’ RSK(!ˆAื=‚๎ฅ œbะ˜ี=WUhƒตbศ๎ๅ๗uฅ๔(วk๕A~A5,^ืšc[ณ#;M)nฺ j&๗-ฟ๓KIถf‚cึล-TFุ่๛wHUฐเˆ?Y(๗ฒ๖Ÿะฏ็—[!~\kyJMvBร3`YผOหง# J—l 'ญจ_ežE๏๐๓b” •ด ึB๐ีa“ะฎ-\W”ษ0M—H8๙M„฿ชdsไ›6ฒฅ๏ยื0่ 8nRฉ—Y4kREฑ6J$ฃ;็ฟq!Ÿทฯ ๑ขWxญp09ฏv=๓ฐฮผL\ศ|B๛ฏ3ฬ๘๓žร_แˆแXL„š›๓‰ดอo๕๘6o6๛vงง\M๖I%!\ฤ฿;ภฺwu๙2ฃ›๚œ!ตžfdmsฅพq๋ลฆ<หTูิ9ิUญ!ax7โฟEฉฺ~๔€๔gCณ]ฆ:$ุ>Z˜๊aG. ›ณfอ†‹_=lญษKๆๆrาฤ\šมlอ*F๕ฉุ8“็จฑ๊sๆmYหษฏ›ป๕^สๆศ#cศ˜ัzwบๆะkฑซ ๊‰ถh>๛sC๊Uอ57Aง$ฮ๏ŸRๅ๕I็ั‘Kืc๓ ๅๆฬะxืr‹ธ@~]—ฏ^ pwุC!ฬc1ฐ;วEาธ!pศŽbR๎ผ ๛ฎ…,@ค]าๅึ—‹1_r:~‚–ฏฟ๎‰ ŸŸŸqแํฬฺูฌ~u๕DธU{1F#H์.ฉbVฉศ‹|€gy| ้ ุE‡ cล.‚ึ๕ณลย:`…XukLฺืม@•)Ž๚Z„t๘บฉ&z Q*ฒ+i(€๗q8ย‚’นhJ๓tถA๙ŽLnŽ๛ฝำรU็>8H๐9e๎ฺwœร.ฎi,Zเล=ณ€ซธ`ƒaฮทJซxy~น8Hฒแฺ้ฒฮz๖ฺคƒQp๊รžี]ญณ'xส้Cฮn’<฿“e”wOŒฑ๐}T˜ถŠXfฎ๐ฝๆีC ๑uวVw(๛ว—ฆ O>w์ฉžฅ[7งฆฉ’™ศ๓“V~~Lภะ ๏บZ*{›์[M๛วุšํฝuซ=•๓%mซี„๑|u$xjมP‘Zแงฒrะ.=xโSQภ”HdฃQะธี๚/ฅร†)9"bฮ`ŽรkFๅpNค้[ษ”โค๙tP&ฒใ๐[ย.€/อฤ Bˆ‹วีฯภ๐มWย ๘€˜ฑศqu3ถ/1+t๓‡”๙ฆงC๕ฏˆŽvnงG*G9’t๛ศมyŒ๏อXY“žี 5ฝโ™น ภโฑษk๙ๆ >พ๛‡š!Oวฺšณภำ (D”An=๑ำฟfๅŸT^†S้WQข-ม๒สกื•“.ฒ๐“Rh”ฟJ4าจgM›U่<ญ7ฏด™TXผ+;.ีฅT|K‹,พ/ฃส›xa0ึฮฐQO)ฎiv„—๋ ๛ตชๅ๑›=s๚” Rƒงk๒ฤL†โ๏๔ ฃ%-ุ 8!๒&ุิ[ž —Et~ P ะฯF;สM็ ("ูœุโ•ฎม[ต สŽ%2Glุ๊Z๕ห…:2่ยซ๘lc๗œฐตฉ‘™ฃฎSd‘&uวf;p ฃy–฿aฎ~ซ็ZIฤฆe๛ใ+?pสHฺณฎน/ŽhํPnsดใ‘๓ดš34IYบไหWๆ ซh„>้_ูfgภ• ~WiPุ9{โ๎ฯบq‰ 6ฝ1 LI•"W^…๙œาŽมv๘*""ฒuE๏&]mา~Rญ8RคT+$Kว…๖Vฅห๔rWฟ๊:ˆดLdง—@8M อฮ๗Ž.i˜๒ฤด๕บ[ท›‡Zืง#บ vl-'นภ;ศRลื“{s/IQrLา๓{าNยo †ล5ๆ&g฿8ฯa”ฏnณ Q1.็แ9ZCƒeผศPใ๗ๅว‰vแ๏ฺŸL9Zภำ ฟwG(ไ'Ž์Uฎฐ…ฬV†Zฬลฑัq&‹8s.ฑ์3กป๊ภั%yภHถผคMEQSผธใเgณ‚ฮฑ˜bผฮC!๊ตU%4,tAโgรหํฯvŸภ1RๆดNZx๘'ห5YฃฤไถreXQaFธ DD[„•Iฃ๕L้™ผๆB\j ไ๒ฅEiฅcAZ<–ฌ xYsM:7zj๘ล๏XฦB๑cZ€5ฉฟฃ๘2Ng‰c#ฃdน.Xž‰‹ซอ็2##ณข * ๓ˆ่›Nงžต”‡งŒs:’ศน๒sHฑอ้@S.้ {=|ฌSศ)=ฃ)“ฬด’ธฒร>Zฏฃnู๗จๅูพฯพC„เK oํ๔ึnาต2šŒU>๚];๕!ท(ุฐ‘2w5h ˜p๕8„้cฬ*ๅjฑCิ›s˜!ฎ๑V]gUืym„ˆyฤฬA‘!ลQ?œ6ิรM„.๛(]#6ใ?Ÿy?ฏ‰ฬะฏะ2ฬ‘ฃฌฺ=*&6า•ิ์i˜่อ)ฑฬ๔็=ฟึวฝ`ชUฯDuิล‹&=กR๗ฤนสษพzS/ŒฯJ„ฌ„ZอฤlฌH๘3ค่‘่ลญ0?๘pP6<อ|ป๏เeพ๋ี๖3“{4,ญิ–4KZ‡ะ$$๐ปP–‡ฐฦ•‰gฯ‚ลGฮU๐•คธ@'œย3ˆิeๅ4f๏nJ?! ๐kgŽแ )ำฉฅM"$๎ฎหสส^-5ใ;yOุL'JMœ&C๋์Lฃ-thA๐็9๔s๊<ิmดนe์ Ÿ๐w"7ฟ€ึส#ฤB`/tTฒชˆอผ kŽ๒˜w๚ิสํ‡žป8+6W=)ฉTf๔‹8๋ใ;ฑทFp}1 ๘ฝ-lุลสA?H‘๐$฿๗3ำ3‡,้ฮ๋Ÿ ้มฑ)“y7ฐไ<3๋ิฮต:ภŸฯ@์ /vNƒV์— )ayE‰‡ไN€๕ิุšิฮ;Dูๅ๗‰ท‡z฿ฝ[๐ุn วตˆจžคว๛I\๓g`ัสZVห~ณ—ห#Ck7ฝ๒ถ:‹ŸAX?uขั3šF< ๅษค;๗ku้๚๖Dแ‡œ7ก็Wด<ฺ‰`0š†t ŠัRแ#ิภ๋ยšถO๚ท6R๛พ3๛ๅผ–„zล5~j฿šุร^jCถ‚ญ่.ฃูๆWศ#< ŠใTฎœไุN'ๅํ๛ฮม&อr*ญฆ‡2vOไฮSƒ€).—พ&ต˜yš‘๕+ฟp?‘รImง= @/<ฏวskฐฤ‡–$s}แข๔rบฒ๔ฎอmŽบ&0Vตฎํ๎ฺLเ…*Dbwหg= ”ŸT๗g๐i๗%ชE๕#tป๛๖HQ0T2h*ฐ!แ*D:ลmฏเสJนเ,!}tีauซ‡แฅฆCฆอัO ๘–ไ๒{ฤใถO๗^wแๅี–ํ€Hr/Šผb=nวc,ฐuนะษ&k"<ไ\้1-„ 4c^ก4ล๒ฏ>[ŸŸเ vLว>"`Eศฃ็mxๅเ1b@Cรฯ/ช้D Xฆฏ8ุudจ@8š้ย2ก$ัqย"•บอ—L‹ุ_อ์Bqจา2avS๏fWผ)G d?_ ofา๖ยฃ 3F3^Z๑ฎ›คฮOช*พ~๏bก๗ แสบp๋{ 7ธไฮR4๎"็Y‹ŠJ๗ตwQMว-v๒ ๒฿ิ•#›(zD–r|ษ(ภ?ี'llื๓ฑm#%}์๐—Fx๊Zœ๙{ฐ Oคจ–ัDผuจF™ ๖๙@‰ฺC€#GBญža[i˜)`2},e%J- 3ำูžืPก๓, ƒoU<็ฦgฅธถeQž~Pเ นะ'žwipwK๚‚วฐ€ผcฒ๋{ ๑ใK\rPuลฒ-s›’ยฐัŽpัฯjAอฑ‡C`๘๋๒์9ร|oยwyง.&(กกเไชl:๊—Eะ๛ฝ [`ภ๑ZXYXMŸBเตIqภฎLA.jืฎชZฆ8"Sห+ฆ๋ฬ๛ยk5ฝKา‘s;pŽณุ—ฺึ}ุ# nЇว7qฆฮะq^CGZึ€คซj๑0ก฿!7•ฉต๛“NG๖ฤUฃ BฮำD‹๔Sูค๑”๚dŸภ—4นŒู อฝ|ป๐ฟพPB`‰์pq?QvตWฆโ~,Jโ`“h“'ขVW้E~y[mszัŽ่Šา๊˜ึท๑๎|\ึฺpOิmฃk๊ภ}๒DเPอถรึบะOw๔xณŒ!#ณ๏ๅ|หจล@ฒๅ^๗ฃ‚‰,ƒฮษฝZ[!O lพ‰อ๘.Œ’ท)๐๖Œnแกฤ” r‚๙Q2!้ฏ๏6นถิ๏8Sด("๚ศ,7Lฌฏจร9ลชตธ„#. @ฆŽG™ๅโฉ.m4ณi]ิ(Sืถ๏ื‰ฒ#ดดหdุบฐ ‘๕zค‚.บ—Llฆwd?ผdi0ฅyอื– ำๆภWšูฏุ`,žs3zƒพjlฏถู4)]ฺ2ะ้q ฤ#ฬdอ๛†›œOG’ฌUธz3z]ฉ˜^๗๕แ-MKหˆซš'อ๙@นภ–บI๛๘Hž฿n+ข…“‰mFCœtวๆoฦ(|วo๎ฯjสบ,฿…ž\XVิท0เI”S#ํ4–๖ŸdnwGJT|ตTสoฯRเXAWx3Luวญ฿+Vภfฌ่ฬ>h`ถno ่๚R“tร k‡ลŽ๏[p@ึ‘!ˆ ฉศŸ์์–hย; 'สPYฒmยฬJ8_ผฃv3-'ผฏy๓ะa‹  ีwฌง2b˜55ožk๋‹*ผ˜ทOQYคว} jวศ—ซมภฮ8ฝง5zkQ‚‘~aอฑ ้ฬ๔มโฎuŽทTฯNำI Ov<คื:#dfๅ^w/Y‚็Œส ุ สžb=ะ,2=pd”M‰๋.jม_D…ๅ๓]o๐’แIŠชhFณ›ํp.๚่๕๗Rฃlู\ณfฐ)Aงd๏ง่[๋ซ™8๙š#”๒ต3ทาจV8Xm|KLAc'้bcฟๆยกˆ›}d˜ ๐รU๙N’e’EQOด„I“ธง5่+จ…ˆ`5ใ/มS%ู:Dtๅ$.จaทะ”ฟจ) ๓วษ{บW๗•Tญ‹ฺ„*ฐcฐ%๕ๅ Bแง•\ๆ‘ิ๘ท€ ห0 ืจรwN๘ค๓ในƒๅvhีRฅวh3ษพ๎๓ฎ่6“จขหส๑upํ%ฮใ$ˆŽcๅ],๖}ใkะ ]ดT cž>๛ผKp}~๑ิ2.กาย6`ฐจฟ โfจฑืDฦ`ภฉพt†uไ‡รp˜!’Aภฺgๅพภ@ฉXฑKณื‚ฏกาœธ&[8}บห๑๐เ็@lŒดv๓!฿ฝศุฒ‰&_ุะ๐30j1o*dจ๔i9}!Oคกฺ Qj3ั‰šGๆๆžผส -O พฅŠH†šคมDhท๎ฺhแ”m๙œ~ ˆ‚๎L„ฉกcฯ๙lK.C8“ :+(ฯ๗Ÿe‹ฤs&.โ๊ั/ฆธ{?ฺ,รG-m@w\ุ.@w‘๚LrJŸbY ษ๙8‚ายท R๕๗ห๊Šy ๓Yฤมr•a่„t}n]/วแ>2“ƒ ๊•qณ Ÿtโต''๗ป™ัย{ƒœฤJญๆ฿มผ|ำผ•็Uฐว(ื๋+'‡ฦ[ทชI{mŽีa7วl๋ S7ุEัpฬ˜ะคŒร Kนท+ุr8RทKg“ผa]ลRด ฎ฿m˜=J…ภa๏:'˜๖น# ,๊!ฃฬภ`G%=Bงณมx N‹ึะ|๛" ัNฎpฮ๗๔‰พย];๖ X[:TIQ 9๑ใฆLฦช’ฮฯ+้pๆฤฺRญ^kDั!&™Ÿงฯp`|O๚,๚๖`F…gl๖LŸ&0สฟ/ƒั7า&ปล>Ž๖ื ˜ฅJ@(5;V่ฤ๑หv[0ไ‰Yภซย‰อๆU์]XmH=ฆœ3>%ฉ฿X฿g;ฆซ่หƒ@v๓.|nภ$ปหขQˆ๓‚6eฑ๚ข# ๓ J)P๎™“ ๛4ฒW๖gc฿Dls.'cงฆuฎzฌ๘.œŠิผ|ดษญฅฺฆC๋1œqึ-๎–‡R ถTๅภŸžI“FฒๆŠฌŸา๑“uึๅผ%!่VชE๑WK•฿$4C.๔งบ&๓Cuh๊lฤ_ภ ฆk฿ุห๑—ี\ๆ?•g“Xi์yฟูข๊ดถ5ฬˆุ๏ภ„ศฃ(์&QxไYYฝ}<สiฤผโี้์”Xe;u1ฐ็`ƒƒ.>๑}ใฤ*‡ฯ๏ๆํษUiYpวกบ๖aF$s<*ญฬตต1ผF8๖ัg.ใ7ˆm €แฬ5}mr˜xป!8ทUlฏ’ปˆใงฑ59้!3ำสL•a)1#kผผ ต?ยลHˆ ไ&ญ&๋๒'wศOฯญl<“^Vภq๚žฅํ๖ฦ5œฐr,kย๙žrLปี9‚โ‚ฯrขฆtcุปฌฎK"`m๔๘~ฦ;ืL้PE45sMน;ฌUjเe•G9@ Šองvhค๙Ÿ^}’‘ฝุห ฿Œ‰พ฿Xฺถ3OHi[ืง<{TOฯ‘‡.9สฆnง‰W๔€ธซจ๕mไ<^š}4ฌŒ ฎฺB7๛„Uดงญฮs ํ๐•|œใวŠ ฏ{ะ๗’œํbš‡ภ3ฅ๚}PA`]_‹ผ๐> m<อ'.Š[ลิ฿ล0UKว!๗ถฎฅ3&ใ(จ๔FฤจBี฿๚‚#ฐ2ี็ฃ้GŸ H GUs‡;/ค‡Xท่L)ม cญŸท&๑๊9าiy4x๔ค9ชณ์Aแศป๊ฑ8>1#—$M'|ใ•b1€W๘“ฅ ่’"4yP ๛Dขพรmขh๗ตŽOบ|’ฺ)้ผ+”ยfสมฑ#zตฬ$ึ1}็`Lล&ฅš “๙!็ขค3œเึgg…ŸพXฬ ไ”]กo5lK่เ2ใŠฒฐฯ:ณž1บ35†dn๊ืe ๎] fˆะ†:้ึqปชNŒ2 Wขfแ‰ฃ๙ะ๏:ื฿C`\ด๏-ฺ@น2fƒฤณ๒]T้ce›ฝ” ฦ‰/ยšึ|`ัฬzธ?์ลซุ;ํ‡“ฯปตฯ<3ึL$Ÿส$ หMฤB๓๚‹P;-าช†ื…๖i/ 3 ‰Ž(ฝปN—]™i}ˆ์QQ็$˜FแEญู4w'<%ๆnฯ๖;1-kป๚จฺ•—าV5นŽ›QW&ว^d)g^iฆADoƒฎ\ํด™YY๑\อตํ๖๙3ง™๊ค–w ั ขQํ{กฏฤภljj3๐ม|า”ๅšJ| kt๔อถฦ๎PJIu5%ร|มลํDi็ฌoฬ‹R ุ‚๑ศ่C‹ึ8[ผ4ื~๎ˆ‰S Kิ{œzร!๓ถ†ชt๐€้y+๊งŸ ซ๎D้Bmเ{˜ึK๎U8ฑw5 ฆiฯ๙ูxH บษ๓Ž ƒฯOร๙%–h/ยโy‚ฒ๐วอฅึลท?_~๋"$ŒpD”aฬ“พYฯ๛Z"nFgษ„CรXงtFyMbฤ”šz@…ๅ ๐ว*ผ)๏ว„พ™ศZฏมjูT„ืิ๕"3x0ำๅท*AนbDH'(+ใ/8หu…‡้นt๋%คมธœy 4m œ๙Žm2]‹บ๒ตf2 [sบฎšs /์=ŠD]6}†Oจ=ไฃy0์ฅ#+3BธตตO๗šš๚j2ฤี2ฮ$t‘ไ๖„Cงh/ใ6lั(ีปK]๒ิ#โ๗"’?-JVฦC’ฮชk!Cข{ŽDb]S2IMSทM่‚ฒˆf๙$,ุ|๘ฃ7ลื๐ZณYร‚Z—gฐแ‘N@ๆy3โๆ%'ณภcm๒ดพ๗5^‹่wuL มžT+,e/eZkd๓ƒ ธrฝ(๐: อฤฎ๚Xฌc๘G1ล๋>ŸธZ"นA6;5dฬตฆl‘๏kŽต๘0ฤ;๛xี€ ažŸหด~0?”–`้ษฦเิ‘œM๎๋š…ิธ"ซืนุˆ‹ม›Ž คไ ธt(u๎ํป6LYึriิ•ธั๚P `Hqธ@zฟo%้๚$ƒฯ๑S๚œ›r๘ลทm6ฆแถ@aŽŠ‘๔oฏท๓๙r๖ุ`Q๑ŠๅดCW๐EšE‚|ตYcฮP’^ค๒AŒ€X6Yซž—ณาN‘๐ฤคใฌrึนV$ฝ…)็ฑ๊”›*vŸ’ศฝษ›…ิ์ฦ๖šŒ*ฯิˆ‘ะq&อปgขญ8jนขก‹nL2„‰้0‹์๏ื &ดhb‡'๚ 0‘ภ%ƒฌ|D็ฐุง7ำฮaฏqdnฬ&L#ฝถY#›๑j=eฉ๕I%#ท?TmฺžD c|†GT101น•?ฏ้ชฏ๒BกฯY5Lั@ํ =๊็n ˆ,ˆŒhน์y +ห’ž๔ฟโz<ำฤซqŠนvo#๒ƒรยŽn‚ฬ:๋i@=QŒ _f ษtฒวX/ฯZ$€ฌฤvBŽKฑœจฅH๑ัyร€าพ}8พดสpqn€„ฯ8 Iฮ๗™‘V…๋:ž\[@IkoZู”žyYบ4๊$wฃ?ธ? ™ 6ู๚b๏ ช๚r๓ซฯภšC—ฏ้8jน+q|ำ•6ตeถg็‘H%ซ<5๙cืซi๓ฬฃnฅพCDvอAเบ(วT7ป Eoคœk‰sขบ๘%ศฝjฟœF‚Z๒|bซbฦ3)๒ุ้ก–œช…l฿๘'่Lภœฉถฏ็ร๔ฃ์‡Ž!^8๙|IŒ "V‰Ihžn็ภๅvpŽe,ขUQtจ ม›d”า] WBHa9ƒรA3ษ… 2A–๚#|–ห ‡ม2vคดศylT*šะ๑/ๆZˆŸ0—}ฤะญสU=ฮVAqI ๙ะะฅรๆ†…|ซšvะ‚wwิ„๔๘ทา",ั„™2ำ ฑ์u1„ักา—•h๗—ิGcM8&๛็ž‚”๓Kc‹ื‰’šใ๘ฉ๑cฆމW„็mˆฟ“Šโg†^ฮ)FDถฟfฺฑWโ๗๗๊ึ๎เ;ื2‡X๒‹”๗~˜ยfQ.s’!2t™dž]7ก2พ5ƒอๆม!๙๏๐’‹yค—b–ฤู7ฟšf9oแjก7ฐ|่‘yz!i‹ป6นY%aฉฎSt|>ใ'p๖%!W$žaฯ๔x่^›๏ฟ›์{w๔’๙เˆ๕'ใ_0)Xมดด˜Y`~tv5{ฯ%ธหPตU=บเAผ้ชJ^ฒOวะŠZ3๋ตั‰’พŽ€všIX Rž•%๘ฯtใ r^$#ะWิเฎฝฤ3ฆๅิต„=@ฒฤ่ิƒ•ƒ๔ขญ“@™ˆž๚V.……9ˆ„ โ‡น4ฦฏฦCฯ$ซผfO๐7๙6๘‹"YŒpCฒžXl๋nฃ}ยบ3๏Hฐแƒ๑ภ>ธฆฮ”2สั๚"ู€cฯ?OŽ5ค)“‰{I Ž ๊๑ข Š๑ณ๓Yvโๅไ๖“{ทE3”๛ฅฝ1CxทwS/ยŸำ่ ’ำLCH‡ฺpdV™>ท_็'ž“ฦฅ&\฿ยฎชkุ[Pgqฑ๕P 9>eเสซ&ฝ4ปkธk\ .@‹ีnWา๚๖’๙Œ%ใท‰œ”ผ1] rูW$w*‹฿ิูฑ_์ฝค*’|ีsด๋XUๆะ`ฮลKวQ"๋ชซบ<~ไ:Ux—1#žƒๅัdFค^Ep‚หฃ@sNฯ!}xG1Yท๗˜Sษู‘\.๊ๆุWbย4ฐส`RC^เ>-๕@ิลฮลzน+๔0Ak^”{YAŠ4EŸI 6รCyN/คg‰NีEฅŸภ:8F;o฿อf ‡>Œ๎Kž /‡สpนoฝZ’๒ุ์!Œ˜qœธเ0ก็ฮ ๆib.กดš †@ะZ—‘,ูฅค๚9Qp4nm๙ทแBค3‚I9ŠsH:ฃf(Œ6B.}๙ ึ ัjพ2NdTฃศmบž)h`๖O+๊4ŠjfŸ.ช’ส%ภQAูQ>๖ทw ๎๛Fงe๊์ั3v`;w\ฯกŸ5ํt๙e,ฝU˜}}๗E<ว,VK๕œ๊ีhะบ?คDิฎwห_€๛็ท‡ฦ?฿qศ๛:zDตtD่Bุบรา<อŠnq%ม˜วห฿ญฺ๛ีฬ .WภฌpญyžQฌฝlCS้ธฎZะํพฬถส™ษจฤฉ[:๛”…๔40:†]fสส spุล๐๎ืสYด#สุพีQ์xb/ษ้๎Wุpš|„Dล‘ขZHษA วKˆโใ‹šณFฺ6Vฤแ8ฑ็dบfKร๕a๐ใฅ2>q๗T@มหจ4ฆN๏]หt™็.4|Šzo๋‡๊ย ๊€ำh…†ยt„wท6w็"ส4ศยqk-t-฿๊๖ซำg‚+-ัNลz๏Uo,๋Ejเ Š๎‡LTL้ๆ_€gP‹6ำฃ๗ํa&aีu=ต๕ wgarMOuศ0Q$แ:` Lเ}rภก–ฅั˜ฑ8ฝฟ›M*–1๓โ%0๐ั–฿P๊eฌG)Ž้ษjˆGoEDYซs๗9Ualะฮฮ™“•!ข!ZกยnY0ๆAจ nเj๋ภˆซ‡๛'XไP™†ูฏ–ฺGไiƒ’~j8ึMยKงx<ะ„ัI(6ฅmTKmส์+lCปžƒgWข1ฅ@ยˆ›ฯ์่;&ˆื*๊<ษvษ.'์’2 ;ม้XE~กห5บ‰wฐผฆOฉะ?ิๅ็แุ+ŽlKะ๋โIฒwU”m]*ณ9๙ฑตู0๛แ…5˜†žyซฒ‚cั+ไ๗ญ g@ูsSZ๕๑•๐ถXk‹ำd%^้A u๒Dา‘gN๘ D‹ซว‘.R’|เฦœ 0ฏw'o,š๔CีŸhะR๋ำ#oN๓ ผสŸิOอฎ…,๕t3: ไว๏ขพb๊ผKล˜Eิ{ฒาoปขN@”oMŒซมz-ค^qyY–’ื rฮา—ร&*E;’/‚ท๑‚U,œ๙๏ึHฤnˆPŒฯ<์แB"J†ำผถธฤ–Qvอฒ-ภAไาู"QiœTๆŽยณGฤ"pน’•๐ ทR3}๗ˆ9ุ€จE๒Dผฃj๛ท่+ณ–ЉE Q ธ&๎ฐˆt|~&*ิ:๊็˜uะซ$—ตอๆO“+์กฅลวฅ›:‘3xผเำฉ†อฑร‡ๅว|m.TB^Kซ็V ยฉƒf-ูตš›<(่ฮ–‰ฟ—=ผT3๘LŽฟื;ำ;รxศ๓7Hu๒Nิšงดr#LKต!d๙lฟ๑ ๚fR>อ›ๆส>1vวศŒe$uBใปกโล{o;๙-ู[ Ÿ.< „/b4มขfMใŽๆ&E้้ณ”๘$กA8E!v$1แUG˜o๙ฎo„ปแิไ.วำ†ŠR้ห@-ށี์ปฦXQึยๅ?ฒUrƒB์i]ๆถVƒ๏+๓PAิฏญฅยKV3ฌญหqyึ@Š-Eญธ๎ณf0sฺ็eย๘ล1ย‘ด~–ฃ๓เ฿๘ฃบd’wฺศแ?P^ืH฿[ฅจ6ด‘~๖[ิิ' ๓\ต๖ศ้DซฟkY๏ฃVทSฏ„E'=9_ ฒ95ณ0ฒ:วญ<^ญKฐxคœกก๒๊n๘‡๗๋–ฤRtห&bท)Ž่ํ]RณพcํYbท1โตV%สJฌšเVย–้š+r™O๚ทdจ7ฮ:๔ˆ„ฎ‚๎u9๚W๘หภพฎิ“N๒ๆ'bฯซา@ฟคุ… šต{V้๖๚?= Fแ– @c^๖ผFVขHž๘ูkRไม}& 9V๕๏ฃ๖HyB – ข„.Œญฒ‚Rตi:๗๙ :l™„Žะษ๑Y`*ศ‰||ศ{&!๖“๔ฬ{ส–^ศMศŠh ,ํ‹+ฉDฟT"ื8mตส)ฏษr๎ไ) ย_ Vžx‰:rW#Q+}™Oืส'ม'๑ฝLฃซm‘Wฝู2ๆ่r้ิbฑ”ปฮฅ๎๛/2B|&\8/i พงbF^AตE?ุฬwLบ$}`“ ไ7ฺ‰Ÿ&ญ๒๙’ซG6|c>ˆj‚ฉ&{)|8Ad`\=จะฐ_F.yFTs‘hHv!ร๗ฅBฬ‚ณ‘ ‘^gn‡+>>ฐ7‡ObผาI๊่‰Qุุ”ฐผ …W( tVฤ"ซƒ0[—dc3T’ฺฤ๙™ž˜nผ$ไ8^๐เ\ฦทขb•V%œิะต˜“Tฆ]1 6]8_*่6๑›K;1‰^ฝภงฌ endstream endobj 957 0 obj << /Length1 1770 /Length2 15333 /Length3 0 /Length 16360 /Filter /FlateDecode >> stream xฺทPe[ฒ-Š;^8www—‚B —[แ…ปปปป๎๎๎๎๎nำท๛๛฿1cœ™#sfŽนv,2"%:!Ck} ธต•==#7@VฯšNฺุยPส^ฯยิภLฯศฤฦ`\้9ู้y&๖๖6 NNN๔ŸFŸฑv๔ึ– pddสฆ๖ภŽLhkgjmลห'b ิณ ีณค•ณถH;X˜YฬLฌ,l1q—ฃตํ_>&z–@C€˜ล็ฃญžพฉฝ ™ˆต‹ญฉฑ‰=7เ฿Jชฟข™่* ๏ฐwQฐถะณ2ศ:˜ู๋นD]M†ฎ•ทxสฟ•k๏b๓€TKp2ต7|ฺm? ๘ซง๙ฯZฤตƒ˜ฟัศšญ์>ฌ ถ{ @IJ๐อh๕ฯศ9ะี:=ำฑ;[S›ฯŽู™Zะ[3|—ฅ๚ฬZm?f๘ืัขฃ_ŒฬLŽซ฿Fmัั[ํจ>)fe(bmi #ภะิภ 46ต‚c๘‹Jูล`‰ๅ๔์mMŒ๔ŒŒŒlฦฟ~yิ๚œกต•…หัaEฑŸ๒า4Ss๖ถvธั11ฒ2ุุู่ฬlœŸ ภใฟs*่™ซ*ฦ„KYY˜˜Yฝกƒอภ๑_ฅฟ#เฟg”ทถœ€๒?zาddc4๘\˜ฟฉ๊Ob๚อ‹ži่๏iา๙+1=เVมยโฉ)J ๘kV€๋๓ิณ4ตp๙๏็๛‹โ‹U๚๛ษ/delะqำfj'n๊ 4T0ต70้YุiW๙ซฆV@k;ำฟŸrab{ส&ฆๆV@;;ื?ท๔์>๛c`b—/๐sJฝ$1+kCS+ใOๅฑ๔lm๕\เ?…ฯฬฦpc˜~R;€ฮŸล0ะ[Y†l์=Ÿ๗ ๎/มฑsD2q0ฤƒธ ฿ธ>=๕˜™ ภฟAfƒั฿ €ม๘฿• ภ`โbc๒9๕x|ฺL?ูอ9 Ÿงg๘[์็aฐฬm๓ŸdŸพ6zถ@+  ‘ฌLฒ๓&ฬiฺšZŽภ`๛7๘Yจ฿เg„฿เgฬŸi\” l?SใšŽ๐ฟฐ‘้งr€@g าผตŸY_๋c•ฎ8ปี‡$ษใZฆงl ฦrD์฿Œy~~•5ทxjฬสเซcgU-†—i’๓๖ูb<สศไ‰๐›#cz1ม๙กฮY2ภะว3ชท‚œณSวฃ5œNh8์[๚@A‰ฆ"จVh1น/V 'ฐง6ฃFm›*๓ดcี’‡$๛“ ซ^๛’จยุดcึ”€ิ‰„ํ ๘ฏะ˜ 7+์!ั฿๘า๙ดฃl1ศฬ๐’b&{P๐}r หผRอ &/ธXหvM๐ุ8+>UไPzไO‹ฑ„( XฺAณแb3ฺ_0 พkฺท็ซ๙Q;Er฿vH฿็ฯœXๅi$บ+๎mฑ–6 !6ชFๅUq๔ภฎฤƒ*๒j>ฌ\แนจ~`LZญฉํYNoiฉ'‰} เ$ฅำฤฟ@.๗ ”FFzํโู C’.๖ฦธpะโ๘์ุชแwBŠ-~ƒถเ–ญTฑ๑Q๒ีืctูuธfฏuลึฏคYซฏฃošลืhืAภ oนzYื)๕"~ืDโ๑)‹q๚‹ฤฅไW‚รYุปกv-jฦ๊RwŠ„ค่i˜ู๖`˜kSจ฿ ฮท†ผฏ๙]ฟ)–๑Hk่"ฌ#‡lฮXึ%$ซ”บ4ฏ5]Jk•๙KJx1ŽT@ย_fอณS‡rง„gNผYdฆM–4ถiจ{ิFนm<ใูTฆศ็*ัขนC0 ~_หโžฑลฌ/-' 'โ๊๋2จ ษš~๎6ฯฅถd\ฯRั๓ดr™’iiŽŸถ1C•^ใkพข%-œs;ฟๅ“์ฬ)ีใš?ฟ;žFk•4ัFHYaZe๖ž0›h3.t+JOฐ|6ผฦ”n3: ว‘Bก:Zฤ็ว˜ฎj๛$ร8็ขLึ Isย3yd…8๋EIaH™2Ž[4Ipั|•~‚คBำrอhb฿`[9,‡ฯOŠ(ธk๛๐ฉอ์FJ1'[ftŽฏ`คSฎ}ฟ๘า๓b^๓›ekฌ‘๘x๗ฃ›฿0ŠUŸ3nk$Vพภcต)8Œฺ:hธAUg x”!ชw4ฌ๘j@ู™๛%šKซๅeร49Yถ์ฑCBg1Mfa9ล&๎)๗…‚ข8ŠW™๚^ฆjVบ_ๆ๔6ณ 9๊ย๐qหŸ)3fฝ<๋๊ว‚฿uิo>‡(œ๙L]ด8Šฏนo(ฌั},๑ชสฦ ็๘S๊P*e ฤณุํบ๖ๆL๛โ๕„y?๑6|„แ๋DึmXcนX๐lVtฆ1Pวู ‹i๔ๆฏ~ึ^ภˆ เ8 b#›F๙&ฐฺ‚&V`‡3ข›™Eอฎ๛งบ]†–t˜ํG8K๕#๗s๑FBH๋ใBษ]๛฿lq–5<฿@˜ไข{kxMP๊qV4‹~‰ก‰ˆ‹G“Ddžcผ8KŒ์h›ซyฮ ?รI^ภKยxl>‚o๙Yอ 6fTE:Ž ;uAะ Jข#gƒpV.PBต๛;"3ํบ%ซฬ„ๅM1ฯ๋W™ศฆ๏ฟํ๔ด}XฬฝGi์‘gqAรๅะŒฬz์๛ตดWจLy78ฎ'+›อ๑ีp^ee%์‚=;.˜ซ|๖V$ช@‰!bนŠ@๒•ถข"Mฺxss`›ชd๖ž<ไ ว‘VMS JะQpืHp๋…B+RrผนฃN3๑๕อJฮ–ห`aPCตฅ‹ฒlรRud ,7Xร{้eูว]+ฦก‰ถŽG=/ค‘ศธำ‡F็G–žถษื:‘ภ`รูM1ผVKญ/›ฬL๘*lจobวจ +–X้Pส’[h ์&™$hขhiv์‹วสศ ดิhWซa-ฟรS4ุ สฅ9At*Hัš=/ื๗+ฯค(ถณุฐุ?.Yลb้F3Œฬฆ^—, nู้ฉ9Nืธสฑฯw๙dๆ,z๗ฅEGFgฬz‡๊=Y3[qT iK—ฆ7rฒ๑2=;๛ ?าธป๏F้ ฺC๐JR+ะrศ๗Wฉถุ่›ฐ˜}๖{฿#@บ’,Z’จฐะ,ย๓หัฝขี:ืMณJะr#ฺ๙h ~‹KI#บฑ|XUƒคT`r4ฆพ ๚ฝ›|‹‘๖ถฺ^ฦ:7&#(Ÿ„XบQ฿๖หฟฃOๅภ=ำPึยl๛ํฦ5๑ภ——%๛Aปฐบช†™ืŸqๆ{eถ๖กๆีฅษใmV๘ชvILซ"H"ห`บ}QY9#๔hคQZ๎มงึWฏ€อAาFฝ‚t;ฮZ.ฎร๔ชH^C=ชsDฅจ‚I9=ูกฤ|๗ืhส+E| ๒ฑฯดๅ฿€ 1฿6ย ™ iฝตืศฃžVCฬHบผn^๊'cTT)แห8สซนhขz๏ฌำี7 ฉŠิ็žา4g ฟฏ4โ5B่๚อร$ˆYž"žสŒ๕คษ์ˆ+ฺ๓m๑ัํaŽ&E,’โo›FK๐ฆzฃUMฅ 4qๆ[^ษภF๊‹VมJy‹ฦcรbฤ้iHไ>/่ว๊…ะ๎_ )5Eฺ'ไจ2แk๎ึ้ๆฯ{‹ณนกiฺ1นj๔๕™%๖ๆิฆk‘œžำม2๋ืูH่ „_๊tศrฑc\ยrจ๋ดŠj ็9ม„๊IR&78YŒ๖ :ร๖ุ้1ีR๏ ้\ฏยc[ฝ 2สฺtynl(vwีBฉณE๎hญC\?m๎ฉ๓]รa๐ูฬโ,ุ€ๆ‘ช""นฬDะN™ิ'๎฿ ;xๆŒุ0ฮะเฝฌ7Xะ‹.;ยซน]ZลO๛ซxฮชl5ฉ†Dฃฐ๛ัุOตl1a:mฦ‹O —{ฺ+?Ž@โ8Tฟ7#™[่#d›๕;m“ tภมS•มELQฅl๘—&๐ฅ@N•eบmSค็?bFm›cKtอ;ฃ‰@ซืเ ˆPP8/OลŸ ศขผoKd๙เศณส&mิฬ๕\Š^šร๕XpP3[tฒ9|3ฺ•ยbอ4gl'—2fํใว๏ฤ‹Rมฉ $ใ$บuฎีม๘ะ ไแ…๕ชF?ฝฑN \I4๙€ศฎ฿ฑŸ|โำ2๖w’ำษ5/—•ฮะeะฒZF๗$“ปข{1ห1T๖fฟg๙L๗ชs๛~G๕ฑ_‚Rิ&} 6๖" (ํุฅ7ฮิ™กMA้f.yfEษ;–ฦงG…•›ร:แEค!ƒบ/ฺ็์๖@บœ‡ƒัฌx2ฮsฬญrฤ‚ถถ/pภฎ๒:cบทepuI|๏6„Ehชƒ#ๆิทuอจi~!ฎ+MC;ฟ‡; น.Tฺk–>~i\Qc๋ขtOž9กญŸว' ‘ษ฿ ^'๛ ฒฑƒฝํๆfQ•&ƒ๘%Ds@I7~ผ‡ŒสภDšื[Jg:>โBภณะค๛#[ษฉމ]7 ‰ฮF^c’ดŸN‡ฟฒƒS…ๆˆ˜I ัnฉ—l$ทŠ๐]S๙‰๕ญร›ศDQ‚"$฿๘4.K„ฺgbฆ„/พัšO™๔นถ ิš‘ ฆE•‹P“$†ว%h$ด"_1†D‡ยพ5)‡ธฉC˜W+-ตtผ์>pฯzIƒ8z ฆฅฮEแwFอŽq{w–F๓I๛ใlฯ‹ig„ภ๙—x"]=ว‹่xฌF&2h๔}น มฆ(้ฦ3ฑภ dฐVg“ gBbโr…9—–‰ž "S 0ฺ’“‘dD-ะdซ๊l้ิ M!5ำ308๕ˆc*”ฐญ+ิ้๋ยF+ฝฎุ~$ฟฒ7ำ’l๚ศc=ฑAแ ๓[h1Wว~ซ‰BษpqณUEฝ็;fŠ๘ห1‹€ำ U๕ฃ>พเหl~ฉบGขg|Žศ‰Jขุ…Kถด bu฿ฎLKŽ ๗s ๏ิ >L›๋^ค$ŽC.{์~\ฮv๘= ๋Dๆ-้๛Vˆฤ5๙+กtvฤŽ๓ญม qฮ †~“aซ</e2ุจDบญ‰ -{…u:lฌEr๛ญzศOv-$|hปu๎มaRQ‚ป›ุ#Qcร!ฑU๋z)EŽ๐๕‡„8y๗\lทน”6JศธM|ฯWณ‹.~ถุฦผ๏่…ปใh๛pโvาD‡ื[๙’ฯGC&‘,xwำัZ8‡ฒ+ใv;Ozj ฃมีอNWเฉ๏Pณ‹:€ฉKฦbr;9dŽพ่—๚?1ฺƒmr–1P์๊:น9ˆ|๛ุธcdาจ็‡๋wB๐มๆต๛ŠEํ zœ.ƒ~‡uไ‚,aๅ7??ท๐ุภ/3ฤรPŠ,pฝฆ๛ฑแS™Zƒฉ๒$ axBƒg€ODžฅ์P“๔”๋\f ”ตT–– ิห” E;ˆuฉว^tn๙c!ั8‡๐ฦ”LC “GลB๋;ห=:ชน†ฒฦ‚›ดธ3*ี๋๘ฬ่Z\ค|Qล_๐ไปd6)ใฯ•qงNžs3m"ูšว+gFGผdj•…™๛™ๆsเOHยลๆ4•=Ukไ[|kuiาจ%/ฎ˜๑qป พƒKีM.ไธP;L>kก)ฬฤณท-iยงDbฤTn{Woัำ๛แo}YD:„ID‚๖;ƒ–…ฑ™~ัเป.‡฿็๔บขo๖F’tสQฃšยŒ ล€iHฉ๑ƒฯื วดะ WZๆญ72#uh็pษ•p*MาIธ€R8€x|น…Lด†ํzขSณฑ0ี}F฿t›YษW๑ศtณ0’ฤ๔ฌ”y)ฎ>ฯ@ทjคnิiตžแ9฿แษvtร \i~ั้oเ 4ำ v/๒ศ2"([lส{vฟŒOn4ฦดญ7ฟขฒ]๖ฝ๊GQไไ๎ำl่๚‡œชส๗ใม‡ฮž‰ๆถWล$ZBะ^9ฑลฺk*+LƒgE๏Iย‹ะบžIํ*่t“o็nIถีEž?ฎž›n†>72^Œ็จนย# ร  ŽฺŸ„}ฺ2ู ˆหh็ฮ‡(ัใิE Fฌ5 พM€šQ' 3$Oฟ6ˆ˜;ั€r๋rสv๕—ด…jHุรฎdยb1เcqฝดฉ๎โญ๗#ฮใ€f])} ƒ~ีU^๋ฯฌ>๑7นn‘ปก๐ 4จๆ<ฏ&Ž$w‘Wข œŸ›^ŒD`LddKฎ”๑œEhย็œษ๋ฒrHcF„–‘"…ไ฿๖นฟaKฮMรูj’น@)>9g%d /๒xแbxษ/๙)ซ$Pล &๖XK_ํPkK2ู่Ž(๗ ฎฎน๏ฺq6‘(ีX#,K๓rฮู7งธMยู๑gi้ฑ€ฮ็Mห8ย;oญY[oฺQฦ้Snk!<ื7ฅร่ศKSp}ภ้[จฏwKฐ๗่ๅ๎๒์s4ย'ษฃ^H@฿WCfžดžOํOฺ๊ ุg็หn6 ๛š˜ฮฬ:•šฬO›,๎L"žฏ๘ฌUh—๛QK๗{•ˆ„P›๗3ฐฦุรก7้kU“๑ไ้ษHฏEri‘ŠŸqศอนษrฌ3ฦ๓ชแGM1๓ŸฝF็3ฟืฐฦšฮh7fU๛^ฐ๕Œ๎Šzฌาฏ@โL๕๔”6มะฅฮC ทฏ ง>@ขแC”X!9๒›N Z% แ’š]— €Iฉv…UฃLyคปˆสฟqถๅู)ฐาพP‘ฅ^|๎a +”๚ยฮlณT$ร#๒๑3ฑ\V]ำ๏ท\N•eฎ–$Q๑Xธลด‰ฃํ—Iัธcจa{เนฤ\h๋1PŒฟุฐพ7ๆf>†rฮ G#฿ วธTฯxše!น~l๘ง D ร ฦเŠก๋)<„$ ไ–'ไ Gฎผฟ: Œ…„:๏o‹pU๗ะeูrvปๅ/ๅ3G ำ‚่€~F{บฉฝšภ;{ ๏๐๖ฉา€๓ฝำoฤr„ศฤื@าฝ็ฝ-ทนฎ๗N†ยฆช:]ปู{#Mร5ไโ,๖N๋ย}ฮ Vxา–:าปฟŽ#'YG์ห6Œ#ท ฒF๛j ญAwZอjMฺ`-=๖™ๅฦสฑ?ซsฤ%แญTถ*๊คณืy อE9ผฒv6[ฬ}8”Y>Hษ่ฎ^…jขฃชษ‚Vวhฝ)ฉd๔s~ี๙–ใ_•ฮฎ7%เ‘2ฃๆž๏๊Xwjฦว:S+ๅc็ๆ … ถj่ฤv;—-?0ฎ้์ไD_ญ eSŽŸ๛qบฑษศZzKTัIEรO๛๛ลภๆ`dท๚ฎŸ^&‚ซ"‘Rnผิydน*/ฯ^/\๓]7ฬRพฆิโ^ุฉhจFญR $dฌ่'๚†เ\C๋’tszWฯlm5งg๒œSน†ซ๔ศ’งo~บร2อ1€ฐ'ถำ๒nxc–ฎ๛Tำ=ศx€=‡VมlฑQ กถEๅ‹’ศ๔R,ท82P๊ภธ{T7ญhบm†ํ๑นฉF5๐ํ๑ฒ ˜๗ุbfUŽกgห)EwnLฬg`ง๎Z้H)Iา๔๓จ_q ›99ชถ&Œ<ฃkพซฝๅŠ ฮ Tiย•!Z/JZ€ห=„:AJา/“a/น!N๚ Sี™B™qึ๒-‰้SWูš2ๅŸฯX0–`๔[*ภซbค‘H $ำ &›๘๕—ฃ•อล}%ืค่ธ6็๗“N:น‘‘jัทฝ๚ฌฮŒAYเ5กM่@ภ๛‚ MธOšŠOp'อ\*ล‡iWc็••ํกลำ่EฟงQบี7ดฟห$‚‹ฐs สŽ€๛ฏ}Jc—‚œสQๅba2๕ต—มแ'3์์ำฦ‹้5•eฆญˆิŠ\๑q้ŸCh-aมทโJ—U™‡KแGwไท5าฦฑ"หฺ*‡D๕่ฑ5ษHใ –ฟhพ-x*ลฦณ๊+iพtฏMhื@๙UH_zP ขQษ!O๐ถธพ ™ZฏR]pศลQ—อ฿ช˜;„ฅถศ>ส—ep=•๑1ป9๛M๎๗ฉจ>พศถ—ฤQส=Cฝ[๛๒‘ก[า/ฑJj‰ำiš๎P… กำIใ”ฦpฏณ_ะsงผถZซz„อ฿น_”l่๕ทŽ-ำ$ˆ2๘p๘ŽA`Srj kเเ9Eฺ3  D†"ฝbb*้’{hDตค9ƒไ<เ lซcหโอ<มฑœt%]ฬ4l$;นjHา†ฮ•bา๎Ÿ/’้ืHงŽžๆฬฤฃ็!งหฅรฦ็เด~,ˆP๚4๛๐ฅ๛C W‘\๙ˆ๛‘ ๋เคฉหžh e3 !J8ƒ4G)M)ค*Hู‰&Vณ“ๆิข2F[๊ˆSปž* ิ:,ฆ๖๗ฎ.๊iI‹#zŸช@Fืะฑ7.๑ชFJ[ZืžSฏใ<œ๏NM@๎๗…ด่ซธ๋’,˜ิก ์่ฃBแํ ž%ํxธุLˆMq›]๖WKฌ๑ษ-6Jด^/วGEš๐lอDœ9dmD‰ุ#฿ฉพ‰ส~_ิxBbภ?Ÿ_ฯ mฟ˜‘ัเKFึKurฐฅแ๐zหผ–ึYแฺง†๖~๖า"๛R{o€b๎–้แ@E^มเน"d)๕Sgื*๑`Œsฑใ%‘ํaœpะ้jํ๔ฑq‡ห`อ(ฦ*'ฟYศB๗ฏSำภบฅหK2S!แJ2›Iผฮเ„)“Xส[Br'๎็ึ4Œ;.9ปฝf๛\ณVŸูงไ!ฑk!ำ+an:‰„อ'ิ)<•“|พajั9 ,ๆwดb๖ }Zฐุ$ำ†ูญ ด[D๗ dโ่t๚Bož8y},๔ ?JRy™ึ‘ฒrŒผCถ˜๑E“ฦ jRq6A@\,ฺFฦFIƒ.)ฉxฝฑ€ๅZ,ศ2ทš– zl~)2 A ๊ีw8ถ๓ปแА”~Š{„๚ฑณฅ‘๊ต็{ฅ๕กถ๕\+g^Zุš+ฐv;็•ฃๅ`[zด„_ฑdyชF๓nง `;uึtฐwช6†ึbๅ%HDฉง3›๕Q๐ 3ฮฅฤ่5ภทV*”จีlถึล๊ชCผษ ๓CRธ0!•ฟ0โ…ีูล‰+๋*ืŸหgผf —Rิ=1ExQ4ฒฉ88%ฦ_„ว}ฟM๖_3ภŽ^ษG’Yzฤ ๋ฟท…e X๕›„ณpv]ฦ๊žz&๐นP๙ฏบN‹๐^˜˜hY’oKฒห๙ฃ~lฏ%UจlQX‹๘ลฎ๚]X๐ำห๔UbฝH้wsUน(F[W'ž•ขณถ<9y;:]zํพƒ ํบเ!ท9L” ฆฃสีขeบ!4nnฆะีŠึW•ผ3ž‘*‡๐…‘eds 3Wฅdชุ ฝ๗^Œ"ฏ–ฎgฃา•พYแ^[ุ้A>j81_ฌMŽูs„เลห:ธb€ศ–eวค“๓ฺผ=_ ฺ"oตm‚5ทิึHMพ™*ขžดฺˆfส‘i‹ปš4%\อฮ]eํ—4<ุ—CJ*ะๅ`˜้ฝ˜ุ„โ๙ฆ๕!Zฮฌล—Iฎขำ HBษ๐RคFำฅญhพ4!#?oe]ๆง)Œi^d `๘ถมžูAŸ>ฅส๎“ไฑ)ฐ@ยg WJmcุm}๚Os๑ZS|ทวฆSะฺ4์wœ ู๊ฟฅ„ื๏-ฑ๋แเฎ@ปูT3{ัo2~mฐYฎŽIszศว๓˜™"๛๛E๐I๘Ž9‚;% หmG“W๙*์ฑg~•4๔ehขaพฑ์_้/€Djž์lzด็๏าŒ+ฆถl}U/,–๔+ณgๆซ๒WฒS›ฒขBฯ๚Bi–ืvoๆอl9ธ(‚ั$ง๚„7ํ่๒฿†ฑฐี๛.ry*-7ี9฿บิWก|ผๆf‹ำ๋,์.ไA%ำ_ะ™&vFใy์ฝลชฟAWถฆณ:08L๛ฆb้๓})ดอ‘์[ š๚sEจA|(ฤŒะMฐ%+ี˜Œ‚5โมžqฆ ฦ-ซุฏจII้Žซะ*ว๒#๒:fฯิบ~# ษxi%)ห๗†เ' NUคฺฮน<~ดdธ ‰พ =‚I@Q๔fEc-,4ุธ`—uฃ}ฅUฝ^๚ฯ๙๎c?A#ินlผื)XฌV-Sปเƒฅกœ?าŸj/|zXั‚ห"“žc#TเึD_Cฐt=K1‘‚-h$Yะญ ถNำUŠืG้)HฏัJ๊ิฮอ;aํซจภด1฿Œ}n๛–ั๚์]2*% ญโ3โ๛ฦ\›Nyžส๓ว)บ|W-|อ",๕63‚’ๅw>ิ€RฮH€?ณ๐A0๊๋ฎ*พ๊นฎ่บšลSฤ(4R้˜๕Oฅgด้ึโิ๓]2ข๚0Q›Rิะไ฿Œ^f|cX}งBLMSะฝ;ทแฏ.‰<ฅฌoˆ!xRš$ฦG]ฆ ฎ}R*1/:‹~ษในฦxC,หzงTŽ๗ต‘„.๘ฉฌฯปัTwลี9`า+?jบซnf‚!ย๙Bใ"ะฤht/{c$okปlH}!“gณศ้:H’H1ะ่วdมN"ฝ(#ผ@๒npกkbใฒ‰โ]`มฯชzC+ตy.'พvhc?Y3aใE-๗ทNM~;^ลfษ/ุฒ๚…—],๗wZD๏X™๊๏ L๎+CภiŸ{ฮEยsฮ8ZๅC_ ณOqPhุฉœ๕H%…]?(ไี‡ฒธT่๛ฆะึ ฑS๚> ๎4„คLึ่Lึ{พSธาtยPWศBุั4l rฦ?ีu—n๎กธ)ศ(KW)'n<ฌา๋$ษŠp[฿โฌ‘ฝืโtฯฬ(๚MฎญวศknาG^„พบ˜{ผ9ฉภ) ,™)d[ฺศฐOhพ”#Cฟๅ 5u[|‹%ส?Tำ/pbD‡AWb{๛่^ำ—ำ๋Bdธ•xํั๕๙ฅA ยๅรณฺpฤ%USlฦcm"FขŽ\˜ษ=•๙™ž]Qm]`GXด[ฏ8๓v0n+พ๒q?^žFIL;ร! O+ฏ•e฿๋,  ๒’oฅHดฉ๓WลWื•bขีฐ“ีษมDcฏำทUw[ฎzใฤ‡7ฌะตเ86โฯก8บจ+pตษสJpGึF‹๕UฉเD<ๅvภEH[ 7p๘๎r8 qD9ภ‡dMH-ŒNฤฦŠโ=฿^Ž 3œšษ๑ฏ`E0‚บี‚+pๆ7ฬแh…Pf๚=€๐‹}kห\ศE๕ถQdขฯ]S๑#†œkฺ-Cเzวˆ‡Q็ษษธgฃsW๙nv1™xRx`‰W+sIศŒ\uโ\๒ †lraุdh ”๏ฉแBโ้ฯา๛›ๆ–+‹ !/บ|gGั๗ฤภ‚‡ƒ๋4ฺtฆซ7กaฉ‘<ฏุKฆsœ†T"้b$ตด๗@ฆM๊<ะธจ˜ร>‹œณุPฒBhอ€1ณpูeล ‡ิส€อXŒ wา0,yš^6D†xKๅฌ< !)\œX‚ซ%”q’Eฒค๗{$]Žฆฌƒ]ผ พฃWEw-"ต  ว<lบgื๎กL2๙&$9mอ˜zฎ๔LO:ฯw'ี}ิz–@ช}ห์ซ๋๛) z๘ํวze:ึฉญญ]+ศต๗vคร9Cญ}u 9!๑˜รฝ•m|Ž๒๛ซุcฏaRฌฅถภำ&ŸฒชWใํŽ์๕\dเ๚ส.’@"๊ฌpjผ ้g5ฮ็๙ห`‘ฉ3บฮฟaยบ?˜DZ[รVNซi็8ว`&ฌgด๎๋QiBŠl%ฬ/-Z&‘’฿I„ั@๛:F5๗eน๙ ?`>ชฆ|ฅhาgาํP•V%ฺ™Pบขฎ?๕šำžมสSฎฺะ a  m๋ 7ปiŸ oริŸ๊š@^^อ0ฑไ๗ก่๘็ตปภ8๑Ž์บK+Zๆ”อf!BŠฒถโใ•rK[ใdMฒN`„i>ตูœๆ5 ฿๋อ’kาkฑT๕๒ฏRŠ E฿•๎ํ฿ลkrกu% 0pงpู฿ษSoี๙'ภ<ฏรฬ!•XผKyว^™w&ˆ@JJต)9v0๊•ฆ^ [&>ช`Vั€ZถBุาdœ‘gEมVk>ช1xื}]8)฿7S@ฬ“มwwตช๊เ‹|ร…ท"ุ,'Cžฏมื!oา's,2Uฏ&วVฐ๛_Ÿ2ๆ#หงูส๚ZTะJEขๆร๔อiาลฉ–ว…ฯ๒ฤ฿ผžิใ~vึโ ฑ’QY๑ดึ‘`ฺŸฃfo!9CฎrNธษชy7ฮ+Qฌ~~Uร.ฌ†ฏ„ฌูI‰P/–Bฬ%Cทdฎs ัŒฟวถัkด•oำ s|/YM:๖šY ๚๊B‹_9ฃณŒน%‡ชiทฺ#gลุ”ญ4bz”Žฏล3ƒ[“uึะฎ$ไhฯ‚— เVหพ`ํ5Pฤซ},ชlๆk 3;ฺภ#žฺ†ฌFั8#*"?”‰๘M<ŽO@็วฆุœผzาุ2รJwญ+฿–้PถBวต๎๋pฒฌ7นผUณ=แ๐ะXNๆขHๅ=fพA Mฤ่Œ~œl๚ํM8ฎGDVŒFำฮยs›บ๏ yaฤดoƒcป …9<Ÿุ`ƒ]eี+ธ ร€"ฺ์ี€v‰pณ ึิฐ๚kPr๒{Z[KมN็ณ‘ต™พบ@ฦUใ๙Bู‚;ให๗|’๏qŽkแV5,Y‚"›๗cิ0 gir๖๗š4Cโ•b{4่’ข†1ๅ.K๖6’=๔MiZฟภ‚ฤคPฝR๖ม2c6ฦ\์จTรyภOขŒ๗ซ๓€?ัาh:-ปCฆฅ๕mงcึพŸผคฃ,œจ/(~๗ษ™สq r@?ะ๏ฤ[Š…Nn+แ—Oฝi$‡ๆี†Š*†บผภฒ|ัฺโ็๛ะ—ๆŸ%?๖ij๊๐p ม๚YบUพ3๓‹ฏX[ใ)šญ|)+Ž gWสP7™็ป7Yก็ฮ›ัY6ท1ฐAฯื…_พ9‡*6WวทU>๘ฃQ‰๙B๊vฟ=มwŸฦอ"C‡ฤ๔ฮ ฯร=<™๛๘ธ–รœJึ@/$/ฬย)GEุฤแ%uK’Eฏษ™์žfั่ฌฤฮอk–U๙Fผฉ•Ij z˜€)Š คn=๙W&ไ–้!ฺนวF9ั’J฿M้๑ฅบ ฉN๏Œ8ร๐…Gฅvan™-ฯฝๅบ™ aนฉไ‚LIซ.U†I๒8๎ำื`a8…™‹าน9&ญา€"ลึ-ฤๅ‚HฒuGฎs๘@๊H˜Sซศxqฮ๓๋Aguำภำ-Ÿ๙d๎t5j dฝB9&Avี_™ย3ซ๐RW8šXA฿ฺK‘e8hP5สปm'$# 7lทั๙ษณล๓Xnยะช\Œ,ี๗€ล์nแฮดVฟtZ*”“6ไืwน=<ƒf\ฆayQส4งแX฿ฬpห๖๖W`:†^ไ8Mํhๆฤy–โ+™šน;ถ9]ผIฟ หภศJs่WDพ1๗~สu๛ฒ[,ร'!$ุฦTแ@)8{๗ว9 $“ซFีื2’|io=ึ;Y+2ค๊Yแ’๘๕<ซc= m–า๔ห™ผX“ยไCฎ7 †๚ gQ ]bส•|yํ Qˆบrอžp‘w"โxษ์[,Olค๚‹5’์ฌ๖DฺW|๋ฬ‡AํI2สพIฦฒ•ป>ฝ8๗ทาส๛Bl)๛๎h่Bต‡6ฏ4N$8mญขXฐ‚๘ดžkGu?0ะๅJ2”0ง^q?ยขŽๆ …า]฿ ถฺ๋/#„ืถฏฤพ่๔ุsšp™~ฅภœY”VบDebๅ-bธ71Q;ะป=ฅbฬฏd๚‘% ะูหฯผอ‡›$u#ณ=1ุŒวีอ๔=ฟ”3+ด๙g๛Tฦ๒์ข™Oลจะฃ8ณZซ.ถ?mƒิฯฝ ๎C%ส๘๚ˆฦฬ๋Ajyy˜โŽF†_?๊ณMล1๘แ`ธโ1๊๓`ŠŽA/โx/oฒ6n ษ`h๋ำ&พ7วš‡/‚๎h“˜#V ว’ฑ๛‘Šิจ†I3_งิ"ฃ,˜ถp๐#่๗๘ิฯ ‰WuํงฐๆV"๋4 @฿T๙๐!ฏ่˜0'ึ?.ดฮชผ™W1™(๛?ำX%ˆฟuvฏๅฎU qย๏_ฃGVพ™`ƒPqFห`d—‡li˜!<฿ซิุ@_7€r#šjaB์A#ฎถ5ยซฅพึุฑษ0X2โ—6rbTุฒ]ท›Yš๔š*จb#2ัพะ”ภ™tx+๘แbๆขV€^[Hํ๙lๅ" CฬuP0ใๅี.:o›Rัธd๚พxยะนŽ^ว@nใj๊๕|ฅ2~อ&ฅ-๕แFข~ฒ๋ื๛พ%rษฆษVืv8ิจ฿nร๓ลzดณ•c!ส๑Hc้ใ่f!ƒั๏Tdn?~ศุ€‹ฮ1š{H“ึe\[z,โ๋ๆ@yŒHฐ„7ซg๙’ื9๒‡› ฌŠv: I_ ต˜eใฮKX2•8จ่ Tˆ9๐}dŸ็วย`‹cxj}๙ 8j็พญ๎ึฅ9วš_‘๔”๎ํ…9ฺ“ŒฅGhกOIU=g่DBว;ใ3ด› ะ˜—ฉพ{ส9๐มjtŒ๒i 6q85—':๕?ธ4’?งe)`*•vน๙ฤ8]|๏#ร๙žs@bŽ)cA‚ืีสฑ'H๎›ึP)๛ใฒ‡๕ฺค=W†–=J? Fลž่ฃ”ฑœ‰๚Zแงh๙5ํO0&๕1vม*ยุNJถfฟIฮ๚>Jบ๋ำว˜~๕ฬ'+x™YZq0"Œ]๙vลขE…/ฺฦj+ˆJ›;g็Wาต™bัP4$Jก'’1|-f3Uk #0วธแW4wฑ;ฑA๒ษไEt้๘kZภจIqถใฐื*Œ/าrknธž(Qปญ~nใO%ใžตjk†ม๕fMs]› WOi„˜(D5กต™:ึธ0%ฦEHพGE0€Qป,พ@ฒฤิัƒ™ข}๑„nt! ฿ธqฝฮ‡เ๙๗Cั{ ฃPฏฦz~f,โ„˜Oroำรyฤรƒg๐:|_ƒ‰๐๎Sๅ๊mm}>ฏฏีuฅ๖Fไyjฑฆฑป0Rย‡[๊ฤนฆ28ๆ\ฺ]DI–)ฤย#qไนXRร endstream endobj 959 0 obj << /Length1 2008 /Length2 18375 /Length3 0 /Length 19492 /Filter /FlateDecode >> stream xฺœทpฅถ๗[;+ถูฑm+ถัุุ้้N:ถฑฑm›ไห>็ณ๗}฿๗ซตชžz~s็c>U‹œXQ…^ศิ(no็Bฯฬภฤ 5rฑง—r1ฒฑ4ฐ001ณ๓X>Ÿ๔L\๔L< nFFwww›OKณO?g{[F8rrUKเˆGฎtrถดทใKฤ hไ๒้(jไ๒Rฮ ํj`aฐ0sณฑrณsฺ้๋;ecad 4ˆู|พ:[บxย‘‹ุ;x:Yš[ธp๓  2กห›™/1cO€‹งขฝ‘)@ึีฺศู ๊e 4๕๚K?ฉ!ืลำแ_RK pทtฑ(NnŸช%@S €ไฏR00ฒ–&@;็O3W;S ภลP‘’(8ํํ๙_t€*€™๙(ฤูฤษาแณbฮ–6 ๖NๆŒ โฒิŸน@; ำgูL:ฺ_!ล?wช 3็ชทู_[ ฮf v@F๊ฯrŠู™Šฺุ?[วฬ0ต4qอ-ํเ ฅ๊้0Lff9#'K€;€้ฏ฿฿ฏzŸฝ1ตทณ๑แ_uaT‘—ัฆ็ฌวBXุเMฯฬฤฤ  ggl4;๓gูู>3žข‘ๅ)b๚]สฮฬภฬoๅฆฎญํฟชI๕eฉ3ฃผฝหgwTฯ’.;“ษ็ƒ๙Dหnๆa–อฯ?ำฦๆฏฤ €๕ฐโฎ66JM๕Wjภฟ๛๔ฟูZฺxm๖ฟ๎k}ๅ„ํํญ7_•6๏฿๑…์ฬm€zฮฏY:‹[zM-]L,fF6ฮภฏซuvK; ขฝณๅ_Ÿ‰ฯIaf๚_๖T-,Mฌํ€ฮฮฎฏ2r, €™ใฟlŸ ๚Ÿ’ฤ์L์M-ํฬ?‡Ž`ไไdไ ว๔9๏,Ÿร็อ ฐ ํz|Šadฐณw๙t8ธบ๘>ฏ_ณฦม`๚k้฿ฤ`›8Œ"€Q๔o๚ `๛q2ล&fฃฤ฿ฤ `”๚›>3ศMŸไC\ŸQ&ฃ๒฿๔Eๅob0ชMŸgP๛›>cj‡พ~’ั฿๔ฉฺไ?ฤy"{›ฯ^๗ส็0š?O~J2๛~j2~Šฒ๘ฒ}Šฒ๐tฐ3๚็šๅ?๐3ฟอ?๐Sœํ฿๘ูqฦ๘~~ ํŸRN๖i๋`ไดณšนฝส_ซพ๘๛~ u๚~ชr~v่ŸฦŸt~jv๛Y>Sx?Uy วšธ:}ชp๙ื๎s‚›อ,?/่4[^ฐ7แ ฒช ๊xชยsง฿Ÿd‹๛@„ธตZrหฺARล,ะ4น~๛Fญฟ๗ Sถย :@ŽยGโ๗่์งzง˜มg‚ส๘าˆช{๔วนข’‡ƒ1ขฤด๒Š๖ขR”7kำหๆPhฆ9ืC.ไฅw‘wํ48†ธฃฯlAน˜ซ/X’โ๙;ซ)5—ศล>ย01D้ตlgb'Gษ3T้ฐv"t๛”y’ท ืG~ร-้๕Lž7Cลo3a/H5ฟœฅณป7ืฑฺš(\[มQyjบ{ผtNศhKกcองU>u'ฤ๑;ุJi12|eณ์--~๚+m7ธฒtlNงa_นœ+2k๕wสฝแLไำ‡Kฌcxขง็]s็ˆpหห#๒†ด<”฿วซ%ิ—a฿ฐ_L$ˆFuฤ X3€อvsฎ๓qจๅ'BlV(๑ฦ3ฉ์?๘็(ิ[{หŸ‹1mมP๙ mœฺ๕o^ล?ง๏š๔๐ำปแ#8pB™^XฅทีJMฟ*ญคDi`ต6hอโิณซ‹ภ{m` สf๎cภรfกฎ1ฌOož™็ฐงขf“Ry~ฺฒวซcTœ’cA8p“๗Jˆ;€2P Uทฎะ‚๚ษำูง…ƒา!๏‘x+[“หง"๚l…ฑˆ^ลL]ฬoŒ"Ž=หsrฃ f“้ตuว gร•—ืฯ Ž๑ฦ๋“ฮO๓ธ›–i๏ฝ…Bนt๊๋ะฝ4฿฿้Œ‹ ๚p‘RHใidŽ็PZV๊I๋ฃ’`Nส5‹ ฝ™๋9%&๋Irฑbq $.ฌŒ<_ktŠซŒ‡{}„ย๏พZ๑โฤ“ฐy่c†^ฯ•๕๎ovๆž๓ โเVgƒสพ˜?ษฤธกปกวfอc{แ ฯ•vุ^๒ู๏๛PYแešˆ๗l๓ช!—HIZษเS[ห$ี ็่ฐp‘ yx‘$ู้็พ<"๊กฆ์˜–ฃSธ ทืŠsOŽ๒y†ฒ%:พในMป%hฌŽฒjqฯ๗ƒ)๘{ฐ๛ฆk5;ูฅ๔๓ชําุช>HฤMง>จฟจิฆBv•€Se]–ผ/8‹œจMฐฃบPฆณ_7ฦ \}aิฑฃ‹rฝ”ตค>‹P\‚™ด'ฆ|T้ บ‚\D4JญBชบxƒสฃแำx๏ุf/–เฦa๊|6Oกื@#Aืใซ"”๘!eศmY !฿ปs ฃdHํx[พ จŸษฌ๋y๛`๔`zฮ๑า๒ฃ…jf3ฉZื#ฝ๒—€q/ฎธfะŽv Z62?t-์Gฅ#ึ8ศ๛ป%6็A 8ฎ๕S‹โน›i}ืlถ.>Mจ\A ดฌ 8I1๙๘s]}๑sZ—s+bนฮฆD$คฤ๗ขปW, ฺ5Nb๋c์uฯXุฅE8Oš}3RGฟ*pัน_YV`สHIMwbูฟึ8jˆ๑ษัูศln@ mมท๏™๒Z2%hwmP๚'ZmPiๅฐู9†ฤ๏(ะ›E฿ค, 4X[™ซฅ๖ช!š๓๊b\hอK;๏ะซ.้TMๅ๓6~ƒ[ 4 xz˜ํ^~ููJ-๋แmIG็3<1ซ๔›kเ™D\์EงH0%Fื›ฯ๖๓x`กำuใถ’—ฟล ๚ไัE!lผ4)+ฺoนฬOO=z๚#ค:ถhbd๛,ใฑ}ผมวW้๕`ศโป:*รG_œ„tnสไฟ$V ทbWฐGใžI „ภkyูue๑UPฌ…๊ิ๑––›ไลE๚ฮำ๊z๐fึ่CTZกZr\๑‹LF7 ถ{สาR่EG็af๐PNฟV4เ™Ÿก฿เqืั] ํ\ม““ู ฏศฟWฉ5ํฝสŠŽAญYSJ’ษ€jdู๋–ุQยฑ๚‘ข,‡.œa]๔hพhทPZ rฐ&้pไP[Aสำง5ตt=(>3ุcๆภ\AฐHญ›Xฝ๙žอ}ฺฦ8๋จ-ใ›Œดzาฃ\Dbฉgเ ัUY\ฅ฿>_TJEฺ่’z]ฃฯ;7พโฝ+จ[Zu8ˆ–zฏ‰4f ›ฟb6.ญฐc๕Uฎ}oiŒ/,ปcฅฐiฎr”Ÿโถl๗$•ณ1-ม่{เtสcnMŸิผsp๚ ฉงsฺ}Awก5ฑ๓RAร^บิq'ตˆ_ท:E$[AืุŠšdๅž‘มไฏc>ฎ๓m๓-ชฌ™~E…ฐ(9ฮ…y .ษ‚ชy;hปmฆธ-%3ชเญ๚ŠใกC=ž#_=ฺQฎcุรฬ˜ฐ์ฅฬ21N#ฤ †lิสzƒ5็ข< ‰o !r๐q B!แTH,šฆลSข€ิg๗F่ห^่ภื๛ e‡ฬํฦ๑@0ฎ= LผhฐLด๏ฟ\1‚ถ๚57dPOfd$๒(0ฮวภS+A_โค๕ๅ้—ูา`ๆั:4 ฿_(Hโึฯ่g๙@ฌxd-๘`)iภฤp“ฟโ:‚๐ฯั&ฃ…) ๐ชา<ตศ”Zu16ืป*มTป]$B‘ว฿l b’oำ๏๑ยฐ.rิศ}E,1…?๚#$O๚`ฏ=.ฯFiƒ>0๏9h†๛fŸํฏฌรgห๋yป†;Nlีญ๐A์ บ=๎จ๕๎ qvุ‹>Esสึว้๔เ[]ฆ=ิภ๚ๅบžIซดDไ’_.vu}‰}R$จ^ู•ซ@FL๓HNฃ๋j'ฟลธs™ว$r„DใžถŠฺ๏šA”+!‡]ึoํกSehiX;ฌ|œ*d๔5ด๊`พ’๘อฏ@Yฆ หk7Š=๏๋6 p]eDฃ-ฮ cแฆาษ"0แl–๐ซ+ฆใ‹ๆ‚๙๚ภt!t,ผ:้ใŸ…ญ๏้0ฒค.„-ž่’lงๆี๓ “ใHVV฿9…œฤ6์sงDญH“)๐wฆlๅ;วV‹jลOษื…Kทสโ˜I็t|xฦŒฟaT[^†‘พภฎ=FยH‡[โd็U:8ž:C`Hื+c๚ฑŸc\ฝ!h.!+f[าv4‘tจ~ย™sผฺ0:าLฒ฿ััข๐ฮ[hzซ˜˜AFV–I Vข'SB”ฉฆํๆFuIƒ ๓ƒ-L'3ฎ‚เๆ#œนGZ=๎`,J๋ มŒ:๊BP).๔/ผ|ไ%4น,v_!nใ(พ>ฏ>ฒ\ี: –iหฃ๔'m*xตถ !Yฌฐx 8›ศ๕Oืc0`C๚๕๖า฿ฑ-•ฌ้ช๐5สแb+‹ฑƒO-ย<ดX.%”ƒ‹สฆะ!‘Aท ™฿‘YฑฑvNกภำ]W9ญ-T-GK6—+้0ฎฯฬษ…I/ผ๐_วŸฏเฅ&o๓ว†— C๛U็พ:ฺ~Bฑ'r[o๖‰฿็*ห:GฎชืOeสฺฃา*U›,ฒื^ภ<ั น`ฅ{ชิ+Eฤฉข้sๅ ๐„r!๙ั่๔#C‰‹}gุๅเหL.p๎ะํŠFดฑ๘,0qฌ๙#ฐ‚‰ ๐ข฿V฿หฝ่u้ญ†าJฝึ@S]MณlD9ฅus้โศู95๘Y9ืฏฬซJ—kฐ๏คESŠ๗พ’๑X๗ร>ˆHZbnGE!)lน฿๐7[ˆฮ๑ดsvํพๅe(žƒฉR@-๐ŠWl‰(ƒฟ็สลฅ r&เYชษ5๗ณฺฃ™`>ตw)๕“ๆ๏ฎUฌ„\,‰Wูฉp&ณkTb&6ต๏ไ;ซห@’”˜๕SEhม?™ฦ7ำ>‡ฦ*U฿ทฐ+-r„๒3/cุฌ 0R^aLE‚<3ถ!๕[J๘๏j6{>ฒแสเL๖›ๅŠŽ…รGx๋๒5๐xล๖%@~ฤ๙ญิฒ๘*ไๆ๗Js<9ท7qก™“ฬ|ิ$GvๅO8Fู ื็ฒRโ๕I8๚rR`dZฅฟr€ Kฺ-6ืสฤฯv@๕Hไ;ๅ.ฝ ตL๖๚/ฑรR~RdรF๑‡’ด๓mเฤศoฌๅŒ"Aฮงwyโ8&vj`ฆ13ณภๅํRิ+ญa\!jฤ 7g$Gำ6อ๏š #ฬ sZ†)ฃะ๓Cณ+ง„ฉๅ"ej[ธ๔โ=Rลฅ€๑ $๖F%ฑพ5๚xุ$BZย๙‹E6e-X•DฑI[kธ@ฃ๋ภ5j•Wd^'ด`ปษ;ึ๏อ฿ม๙อ ฌแ้% ฆ ๅLEIัŒะ‘(ุ‰.iˆ ใamณ@a7}๖๕>r}๗Ÿ่j– F„๎—ๅO%ปฏƒyม&1ู๖”คŽQ1ฉู่ยํUณใŸ’7ภ๓z?‚ฤ*วๅ;U=ๅ„bฟRb๗4{q\ต›๐ไ`ๅcC'‹C–อZ๓ธอภ4`ไ`g“ร ฤ‡(ท๚กเแงV ž๘k๎ฒ_/š2ลž๐›ๆฉk™ีู8€~ํ œ(H'ฦำฝR๊:…๚Yํw๛เŽXก( ‹M&)ใฬถ'๒๔๘ขs81;ตZ๕–Jdข ฉไ™/:›เ|าz8y,=‹๔]ฌ*๐บ^ม XZนm 7dฃ_จฦ๊พt‡cฐี๒คYม8๔Šz>Qzใ™ฬwฮํ๙Rml8ช|ญฃš;KฯE/่/ฟW]ฃxะz3Sถฤ๛)ฃtๅˆ+Lษหฆ฿เOๆ็Sีข ๔M ษ Œd็ึ๖qภsฤ/Œ”ฅ!juแvc?ฉm‹ศ’H;nกšdสตaBN‰๊twŠ‘ฎ(๒๊ย๎-D;8มฬ%J9ปAK\–\๘šJจ ฯ^pพˆS้Sม๊&ัy‰vต]๛0_)ฺ—๘lข่[› ไA๗ผƒ๑2sช๚๛ ^Yถทˆeจฯ•๕ฑwSSบJ;w-9'ม+8,’…๚•เtTฺT’uc+:ืz…^!CจฺPปcX˜ฑี%.H…๕44๚)y„•#๙’น˜ปา๛qปš…YE:ฒ<ฟ>๔–%kภS›AV๒ชปสัmn๋ฑn†ถฺgฬŠjv๒๘™?ฐf ๆถ้/ถ,AG\-›็-ีY‚e9ฉvvu๎$2‹Œ’„že“f๑ltˆFฏVt…•:ฉ$€PnฌG๋า๛Uห&6H †อุ"nำํกฃแ๏,)ฝหซฑaŒๅ7ฏบำš32น๏7Kiƒ›0"7•ภmฎ๐Žm๏ยคL๎พbห๐VaމฒสๅHmฬ,็.วว๕ฤYLLIฆHBฃ•B ูR}๊~ึ%•ดงfๆoฟ๚๖LฮŠ๓ผQฒgัxl#.8อฅะAฉ‘ฐh~d™ีบ‘p:๔ฉgส6ฑ๗i7ณlhC๎6^ฝ8็ฐ๒ฺ”๐ฑo๚YŽGLhื ฌ`E,w{-ืŸตฃไฤถมM’ก_4S|Iหๅ„^r]}๔d%ฯ‚fะ'ไ9LƒZ๐ZœšคZาพฆabo๒+ ฿"ิde/ุํx#Lฤ%ฌญ[H<ู4]ƒิUฯdC\ฎส–’ุhหฝ7lH๒%_|๘jG๐๚J฿bo :](THaํw&x vjีg์L3 L๘–lQ~m“ข ซ‹ฌ$ช\ษ–ˆ1ำ ›}ทำ ่ ‚Jๆ‚ฝชัฝawศุ—]ž,Zภฯ&๖ศจมDฯqฝ]!อฒ€ๅO฿iahํd_xC@w๊*œ>•U‹q6u˜โฯคv–+ฮ่ย—ัan ฅc ฎv>ทิ๔zขy‚ม๒TefTฮ"J”VYฉžล4าoฮ๋๐ผฃ_qำQซืoฦธำ–ผ'ล !ฉษ+Gค()J%“fQฯX่3ฆpPk@†ฤนB#/รLดฃKปมฆ v*•f๖86Cxkษ,ฅใ๕R'L๒ล+K๙ภฅคžv“m[Žฤ๙ฑๅU…eฉ•ไŒœไุู-‚{jF็ง็m’l๘83gปS ๎`ฎช Vโ&ึอ0Iฎฤ|๛๊W…PxTา๚4ษเ˜ฐY๎ต๐•ผใmล:mC็๚Gฤ๒&•iวฌOZ๕เ[ž€„Gป!๔ฃhd…พญ.ป8*˜ษ5@#B€/v.ฬ+7็T๗ฤทัๅฯ+Mฎ๏ใ,ท… X‹™๔ รt๓ซืp๓ ์\ฯ๒C›88‘๑DชMค0๓ยaqญCฅ๊…น*ิไ›๑dB่‡Lฦ|6–Žฝƒคเ.m˜ƒˆjฆ›W$ฤž–t}‹ๅ@‹4Dฉผ‚ภwคฅณ|G๕๊—]7ใ–๙#ห”ท4ปozฒPa?หู๊mฌห`๋พุz๓wv<2์ไ๎(„ษ(ญkนด#ย eพr‚/ฦgb้|!ส\ฝอฑ”ฯ s๓*,ฦ3&Srฬ>ผ‹•ฌ&*ใY‚ฐๅ`:ฃฟ3ขภŽ\ƒŸƒ3ๆโv‘€๖ื :ฬ_๎)˜ƒXญธu๗ๅทซ/&Cพ#๕๖Eแ@Q8๔N-าpŠ'†‡z‚.็๎5jช ำ[Fๆ™ถ?๏ึ/ซศi‚{ใ$›ั็ตฐo’ &์Œ๘ป(‰ปงkบฝึถsีTฤ๐[ไŸ)pฐbZUตef๗g*ˆ์(ฏก WมผGjFแ๕ˆ์ษฅB ๐aŸญT๔ vjา•฿๕SCz๐ฤแซต‹u†๑Fฏ]๓ีมY†่ํKฯม13๔AFZโํเ(=าล,”ำ'œ‚ !๙ช0ช!~aQา•นฉŒฑRแM])uoŒ+šuBžฅ˜่›Z1ศanฟ฿ธต†ืวฟต:Cœ|ธ-_qAฒ9_ะcษQ;ยฌ!)ฑภ“Šu[ะ๊y#ข‡ฐ๔ื@ฺKŸภQˆ.ลมœ-Ž)ร`๘EHฐ๏&๋vA‡๎MŒ6‚โ฿๙์rŸE ๚f1mึŠ(Xฆฎ ๚ฝ&|้๔ํŠฬQขศงฆ’ป_ขa]๓ Lซฑ„ni”วnปuA˜\ƒฝc ux‹ื'<›lฝ๘ฎf๛+iŽชj.ึ`๙ พฬ๋๛[nTOPWร^๎F‹หDญ๔ืฺผ|4 9้ฆAaกC r๖3C ฐU‘๖Hๆ%ยEฐhด†ฮœFA&›tH!‡”+!ษ๛[วRM๗•เef\'ๆษ#’@3‚m=u']wfDฆ3๕kลJ๙ž˜1ฯ๓ำ๕๒|์์ฎ๑็ๆสบ|กง)š์‡ำฏะœยเฤUดฯผCแ'ž|`่{๊€J‘Šจ -สxศ,ษ<*:ซaTศ;…ๆM:I.ฮ๏Š„็Gf้จฒ๋heฟ฿7๙ๅq"ฐ†%ใ๖ ผ ˜ีฤฐำษb8iีVฺ1้็}๖K”W"แก็ฟโ฿\ถjm๖TฏพŽe"ธฦฉBฃง„o€3: Šำž๕=Žทบฮ^;[Baธืtknป็edูฤq็1๋s2๒฿วน๔้ต+%sC้ิ/จฟ๙ŸŽัฒ:‚็ Pีๅ_Š )ฟƒ=ธ››€<ฅศ๐] ’S}ˆ๓ๅว3qh*`ฑ ฑ…Yซ J๙Œน[Eถฒูย“Kฆภ‹Xอาฤธ_3) Jึ5ไฃiส๗h––jบ1yศb–5ูD่eๅc†DGซc^|#ุž๚ezkf๒=ฤmVเY_™œซYฺ๖๔ํl็ฺy@^ ฆ@]ฬ๋ออฒ„ .ษuIO9yGษ๋ “Štqส68qz–มฦมแ<ทOรX‡rำไb–ฬ๊jด่ฏ๖9;i[)ž ™yj{@Šืh>›^ีถิวโDฆ~BqOธ"กNsX](/น_ูŒqOฝๆึ<ใk>Vc(่ํ› รศ#OฌฦปefRLmุ‰—:๕œv‘:%ซta3ข€9.vFH –{uCq๕ูO๓jNศ…™ ˆ๓ƒ ;ดว  ๗]ox๕ญท7Mฆขœฬi.d็.˜๏‚ไ฿ˆ์๐K็ฦg †tข#†(ะOl๐่‚c‹Rธ†3ŸA๚!ด<๕`ˆฃsโ'ถษลZ-็ ธ‹๛IวยK}พ€qยp8?4ATa#TัA๋)xt๚lO๕A_ใๆขwk๗ฐžB๏๘v’พ0~ไ„HJ—ฺซฑ v[šซFƒ”฿ณอq!ษt€Œเฤญbq€"ึ’)ตŒ*bพต'!ลณ3ุ-:ต*R@ฯฉyแ๏จ(z6@ม๏AeŸšŽจfจ)qึๆ๎g–จx๊zฒ%zป GbW-ัม๏'*ใื~•๒Až๓รใcเฬ?๘€%•ฦ\ศทƒห3&%ฬ ๏Žๆูชถญอ็๕ฃDNห๘๗(ืำนTg›I๒Wร๏N๏yผ๎•X%e;ซE |j’4ต‡‚dฒ}ฬmฯ'–่บ็ {%GGฆจาทci#…Œ๔๊หฐวกj‰K;ทั45ฦpฎใœ&ึคฐฃC˜tฅWพ?็๘โผJยุถ๘xอ]}ถคmถ#่`ƒ๕ธก%—‰เ /P1 qBใQภŽะ81‰ธฮ๙*K12าิๅหdGศฏ!ุ7e7ั๒ คดส_ศl‘Oฑึq‡$]ตซ'ใX›<I~•ฝ†nf(šDJ:GžŸMจ:/ฒžก๕lุ{t) Sฺ.๗‹‡็AฌA๑“VRH_{i้฿)cฟ4๒ฬฐ ๐ˆฬ>lฐJ)yL[ฟŽถ‡๑ฆฤฮsโแฺP็&%่ดึแ๋GB€{UP Y(^AšษŸ ?4\ไง๘ฤ๗gส็ณ๐/นิ/S!|,†ญ#ลบนลเaŠ‚˜๏ฦG;B‚Zhุ ศ>rkยิ ?{q›Eห†j6nฆะZI—ˆkp†v ขฟKK˜g=๔†‚ะื๙ํzปxฑ๒r^ˆํ๛s]แ๛H๑k๖ลXม=เ๖iๅ€ŽD๕g€ ด.TฒพV‹ใ™`jeฒ :าa ’]เ้ศง˜ซ้ธๆ… Dq“ศศ,งๅ ๖H๋๘น_๏ˆณ•๛y}†มัlฟ-!šย]ถx5ษu๕จฝzถp8"—iฑDrhk๎Kˆ}‰[Šf5๑Y้Yว่ˆsE)RW+ฦฝ๊‚IF9 >ขฟ#’ีzoฉบ&๚-)ƒ๕ง g4i"&ๅ$ ่ะั t,/‚็Wdไ+ูVsaO…สœๆ,๔ฬ๕ฆM็;ฐdฌ•์–Ižƒ๊ WSไ‡#|k้”า|i4?4ดฐ€กPvฉŒ‰&Qe๏/(ƒei ฉˆ ฉ?=๒๐ โMYฏK ส+ูิG่จ[‚ƒฏ2ๆW!… พ)จl€’ษ~ข|แธn‚ทDฑเ&ะ &YXฤ—9ฒ i. ๒็ฅŽR+|ฯ๚-Lr|&ฺ๊โุ$Bซ=&ัฬa™Hร<ป‘&ฌ,ฉ€ธโ๊zฮI_่‡Dhโ"ธšใ๖๗ฉž.ฌcšQ#‰Gฐiฎ*]])OpFฌMd™—ฟiา‘žJ3 G‚TฦP5แ’ž‘ ฏมร ๘To๙ฌ็Tฟต กถดF]ก•หปุจ\yเณฉT๓ฆฒm‹,่ต๕k_iษ๑ก 1ผ4 ฃีgฑ:k 5’ZRxƒสBย{ไ๚…้ไฒ^0/วข‰ชๆ๋ไคณใ>@•'zt™้แา่B๚เซQ๎}H7ฮq,ขธสqiธฑ‘iม‰ำ{}96%q๗Y+L ช\ก๖ ž`ทqIœขฆ๓ด#ๆ i5พN4)*"ีW‡๐‹ฅภ๑ฑw'ม[๖a>t/ฺคโโ๘—c๕ยษ?Jr-cบfๅๅึ?nเ‚ซรb€žนใA๏๕fs>จษ๊๙๚=0V " 1œ/๛ะ๒ ‹VสUe=Tณ;5ีX+[๛QJ>aRBkใ”1แ++ูM”๕oถCEL3R˜๓ฤ+eฐR<ง,WิWrcฎ„๚!ถไ+๋†‰?xi7฿ฤขาิฺดศh ’ Uู=ูวOUฑ7ขšp“อ€*เ!}df„ŸซฌD๎็๓M่ะฉJคาฌ๊8ห9q’ำMใ<^ฎTฅฌ<แ๓ศฅฝ้ซส]๐aสkฦ๗ช™”žพ๘ๅ~มึ‰ ใ5็Tธ๙F'ีถKเ8‚ ฆT๏pฮ;[ฤ๙`Žํํ@ )๖WทLสๅš๊ฮชฺ์ม7ชgZป˜@y฿qYeร‚AŒŸ1ร์'้ใIŒ๚ๆmภ0Lว )ถ^O0†nผพ CœฑSว6}ฎ#,ฒ6ษ๓ฝว…ฟnฅžN์ฟŸ-ซชษย๗€ี”๖ฅC™ก 83ฮจฉ<ขSvื*ฯd๓ท๒๎ยr๖ ใ:u 'ุมjม‘ZBKAq9wfeฒฆ›G›/ุ๕แjzใs\ถF—†ํ8ูGD฿-นdE9RJw…๚๎y<ง€$itIรA5NY๖อใ7U5W%ซืBชp-„„-3๚ผฬ,W6ืŠ[ฆข่ˆึ^/JิS ฯ‹มA<7จŸšงƒ}eศาิ‰Lืi?:า๎ถุ „y3†ี๊Q)DเHๆI,ุ ว–c`pu>znVุๅู(ผล’F…Œ'š๓wbีฑ|คnอfiR้eฬƒ7น0ฝvเา”–…ห์Gรs๎ฯ1+šรฦื ฐคIpb'+Eปื{ค7ย มM3ว_๗“๎าT฿ผ •o‚=ึOัM”กทJ]Q‹"ข๚ฉlปๅ”ธŠฃิ‘.0๋‚x™‘uฎˆ7Jี†#ฒŠ|eอา>6๎x[เฦวภ์ง_%แ้ภz'รืhสท๕ปg`žฟy–๛บฎJijฒตไะพ ‹/Y%ฆ9™๚Ldzeสn๙nนา=ปWfาำLN<*oส"}งํูTBวj ›ฆ๙้7 ฉเ.๎R[~์ๅงจ'ร๘๏ˆŸ!๖uวฏ Š’‡ขฎZ&ฐGnยโjชห–|รทŽH_Œใ้}l฿ˆOฉ'š๋=&ืู(h9๓O$ม_ฝ.™i๚ีXะXๅ๑ง๛Bั€ฟ5† ˆ>ท,@j™ใ2.nีิžh ฆK.๙จ๓ศ๖hRไกpWZ•ช๒†7ไ๋ๅoIฺ ^๓ต๗<6ญ‡ท่hนŽ`3ไI8๘‡่5์ฑS๓v๒ุฉAœืฏ9ฉิ›ฟชŸ3เ/|ฌปร<š‹โไvajq๘Zf๗”Nษ^A๖q฿."nN=ง๘1ฟยGiฬY3ฌ>หใ5่ษ็}i[*ึZู\ฑ—MK†ย(Nท๘ฉ)ๆ”๕๓œ๙Œ๑ZTหo2๔tฐนx บl->์Mผ.,ฤ_k ๎หซ1—๖๏<#žไGะž<๗อป5UE๎@Z‹k&onuฬวส๐nŸ๕S>‰=0zภ๘ImY9<๚หคGื<~$ฅSQฯศ4ส”œoA๎็฿%] ิศ[ัFาต ฉ๚Gnc๘Ž^ไtบcๅ*.t๐๙X๔่๑โYคษgw%ๆnงhถ pmนำ4i ั>บย›#E๛])๋ไ# ฺgW"kTใlฅ’/ำA,KปวDMจ€ฮ9ยฌฺฟKSลƒ้Y๔๓0SICŽ๐แิš-ญkZƒณ]+ฒoท4ดHp—ไญ@’้ญใuT} ‚ ‰l<]O`ฤ้)2ิ$ฬฤฮ_4,ปEุ8ึอq-ฯกะb–ษ†ณpจ—E7"ฉอยพตdQ†เn]rๆDqŒฌวMแ*๒šงn”p,–์lpa]%[‰;„็g๋s๎ห•ฌฮใ*v<๛'ศL>˜า ฌฆkMถ`ฦ[$ำฟB6C ๛ึ$บ๛N&ชŠD๛ฃO\าฅV๑5yH'b๎x4\j$*Hoฟg?ฮbjx็เฤ3‘t‹฿2e๚B>๕K๎ญN๒HŽdp9ฟ˜}ง)งโุˆfjำBู`ซ9aฉาฤ4 *Sนฏ5œRA1NysนŸ}–ฬึ%Rฅ“ๅฺฦปZ=ณา ฃญิ†Kฬ&†’ @ซ.`ކVˆ—jห_Vเh…=็ีฟm/7’w-’–j9๛ิห๖วnๆศšIบd ํะKนhถฑ8…{pใ…๊ัcีัมMี-•รฯ๚Sฉ‚`c—ขฝณ_|ะๆต3จit๘จHๅฅ๔\(š„ึ02ี 0”0p~ะj%E~2๗ˆฮ๖ฮšฤŒ:j๑jZ๚๚ษLWUgณ่™ปVbบหง1–|Tศ#4šE๏8œ8…]—##ว“†๐!*ฌY๐& ตฑŒคœžดผฃ‡|—.\๔ve>ล pำ %ทษ“Wช9*ฤ>@ใฏ0)*™O0๙‹ฉฐNO^X๏#!ว๋–ฦ’ฃ–8ฯfวฮษ$?–วชOื๎A@๏ ํึ8˜@4˜H- อbq;ก4ำสŸmซฑS+C6า๒ฝ๑ๆHะ\ฟcN~ิธ๚๓=6ทู˜ิNrไ!9๙Ž9ก}กื$J|๎‚น'bJ™n๐‰ƒุะ]4; ซŽ๊N„0%N๒2 ŽM๋อํ’^7`n›ด^0ว-ิฑฎPบ`ไํ2ๆQๅdบPnศžอ\ภ™>เผาย8ํz‚สPฮMล“Š3jš‚ล9Gี3งฎ€ภ•šT^มู0ž5=ปๆƒŒ#vAงฆfs4HKฝ†๎2vJLK็ญƒsดrbใF Šิฤ>m†‡@”๘“4uฤœ€ sRขฏ`G{ฯœAlรป๗l;"[SฝS--ีฏj…๗ี$Nž็โฎฏตฆNTุnฤใ€+ฺoญ*็+๋Œฤ๊๓&๛Œ๗?๑}็7PZ๑”hต]ญน‘‹3ˆ‰‚€ู2^k1ชh”๖ฆ#^)O นทq$๐๎_r?g ฏภฏ/œ๙ิึ•~ป4นฑKdง–cJผr†O+V๖มฌ<ค’b0d๋มู,Jx๙ษ.PใธR)3mษŠฉR๖ac๛ˆ7ธช0”R$_kฯt5|๎แ cžzZ{ฝwLLดญA.^[เแ์้Šๆ๔๊ทn')ย –‚ฝภ”,ไOง่กI‘7เ[ŸD็hxC๑jข)วีq*aึGฬฟGiภำภฺ๋ฃCย|xZ๒-ช ฆ๐9žแป‚9^n๖ฟแ%]ธ2ก9‡ๅ ฬัˆี๔1z’าTu VฐตtŸ ๒ูšT๙ฺ$๒วN๎๙๒H2& N)ซป+ะ;c“ธบM—,L๚^yd,Ph๖KPžcDจ$ฑ๒%;$ฬŠ{ทว Wh “๊ํกd†ฟ้L!ฏ_๘.ZงUKณD ีSน_P๗ฝGฮ:>cžA๊เŸฑjG๒Aงขฉ|OํีฎฏETฺจผNึNš>.ว๎ฐ&ํแ:ชึ็คซวb“ูบฟใฎโ‰N ใิ…ๆM๑/z๐ฺาš{ยฌฏRŠต–fEœ(ีฃฦš‰:T7พS‡ะน๘.zไBะูqgt6ฃ~ด๑C•$pส7'\4.ฉi‡] bGแŸวฐEวU๛eผิซœ–ผฑGFุ/ืซT…ศŽดwž๊zืถฆ7‹Uxย*ช ฉb\Tjqฺgฺฏๆk8พMdร‡‚gจZh…ญญ‚fL+ฆฐ’QรtะOฅ+ิuฺy๋ัำ†”อ๓เัส(ษ|VกฎxธkLGc๖-HรI(ๆOๆpู… ~*iแนŽiฑฺชหdจฒŸซฒ3bW0บฮBYป&3n!Mˆ 1"i!uผ„ฒบ5™Uฤๆu๑+Kู›ย แ+ญBฦ™ค_0™"27ะฑŒ^(•–E“OTแ!ขฝa‡DZ›D๐‚ˆ8_ะท 1ถสyVŠำ~E๎ษ์mต[qฑPzภธA{P0P่%ึGฉB๋‡้ถ›=ฦmใ๐gŸGp\‰r๒&,ม่ y๚ไๅAฦ‡ป3๓œศƒ๕mH”฿^DBเ–pท;อำAKธคvผดมIฟ ีeฦฝvY`๕MM}-ปs๗PPฝ๘ู@N็ฤ=`yๅฃ'  gšยฬู\fสQ.โฦัใฅฝ>็B>ถu…=yฯex\๗ชNฮ-๎“t๛*๎๚†‘&N ั๓†S’ ‚๐๐ใn"ป~`Ub\ภB2DA(๋ฆ฿ภ0DhซBNโำ‰๘Bs:Lีฬขd๒ŠcDฤ;=ึ๎#f==กiศเห๎ด—่ทpBชKŒ_-KปนเฺzD”ฺOZ฿ค„๑นdH๏‹uuwีตj๓ฃ<น#%.Oฬใ~ฏถ'๘พ#ˆMฎ0Š™9ก0”h(ล;…‡๋/็HS3ฮ>hšŠ›}+•zใ๒?ต๊(๘Fญ4}โtัยcˆ•!P^๏ฐฑ๘๎–พ,2ฝํh{8๕๎ฏrน$~ล^ว|M=bd๗+๛Mๅzdp•„์epาbJ|ืŽผ4ฟน3๐้`_Ia^.๎ส.ฆัƒีn2Pภก‰ิrcธจœNชฉนzะร––ฯbdฉญNอว”๏‡=็วฑlฎร+% ŒJ๎W_8†„ฤš ’‡๋+ฐFแ๛FQuO้Œๅ๑"“ฏG๑ภ้o—ษYงอU-}mั๗KWจeฟศชัล0ษ.์ใ2.ฒoล@P๘เะปbฺ” bซ์—Nขใๅํl ี)<ำ|W}ณt0๎ "[ฒ:DI—ฑeฒ†์ƒ‹ั@บฒณ)Xา_๚2}ฟTฅ#ไV†}?I์๖:-=ฏ๙”๒ฌว(เ^8๗ lๆง6เฤะFŠ๐/โN ๏1 ไy[0ัฃSุ ล@ปห่ ศ.l0Yฐฦ๚;†ใC๒\.p@ญcuใIฺไ2Q9v‰tŒd้ŽDo86?B๚้ฦNH9ชเ<“ถVUšI๒@:ฉK d๎S‘๊๑ล#ฮฆัญ/Ž:ที~%5M™เฅpฒCPtษท6๑3Ÿ๎\6)}qทWมด[๕๚ษCํ๋(˜ฟ)„ร:ฯR/#ฒ5นคz;ฤ<7}.c“g|๘€2„l™€ใ฿‘ห๒ยภ้a7ธd๕-„โ่๐>`ก•`5FŽีห‹ฅ-ื"j)Cˆ::†'ฅีE-ฐ€žาGHวVฒ๕^Hฺ]ฝ`lบงˆtฐ7Ÿ!!ๆ’‹ฟีฦ–{|'m`๚วs}๊๙ฤบVRัEI)i8†งดiŒทึd๋š๗ญWลแษ-“๚Nัย๗žญจ๓ฉT๖ร Hข&ปร‰ฝฟRKPˆpน‘’๒ƒ๑W"/Tตdพtงำƒ–ธ'€ฌ4ๆmฯ9R8จšG”ฅŽ64”4๎6ŒDšฎEŸ8}0‹?Fโง LเA๎ญ[๐/v๐&dูi2ƒๆ`cณyู ›T่|N๐…ฺž…3ฺ๕‡ซ|๚]`ๆ/—VฯYๅฝฏužฏโฅ}ศJฺดฑณํศ7“< hƒd’=jF๏0๔8k<ท๘ฯะXลฯ†ฯห„ฎฑ๕คo9 =แ๊ตตD[ qฃ"฿ 8>Z;<ฮ`ŒZฮ๛D8R๔ฟ 2'๕œรธMBฉJ™Sฏ9ๆดธ”พษ`ำb\๛3ล)AT•๙—็O•Dฺ‡๏สn วNuf๙z}แ( •๐” อFฑ#บ›šv…$จ โ+Z'‹v}Bv{Wวรฯซf;คห!a{žาEแ/š,~ฆ/^5lŽบbคG์‚๔~;–Nˆ~๕†๘่ดฆซ?a-Oำš…๒šP)๛“ขฅs๙ด™e`ํaผศฝ5tย™ ์หaIไNF„ำ›ึI้@vDƒ)ัฬ_yๅU  Wฌท+ฟEEา#Sษ้ศiš2๔๐ฬฃ‡(Pฒ”ุ7•omh<฿พŽ่p {”^#X_W๑๊ภ[ระCฏ‘[ำ;Wทฅฉgธ|6๘ฏ้ฉH้5ˆฅเJ็’ฃž+r KซsญฑgnฅE$ฐ๒ฬB&|j7งA๘รQธp ็Hฎฉ‹ญAHœะ‡<S๏{ร?m%’!@‚)ก๐{๏=b๔ตNห—2qh์ซษhๆ‡cv3ษsWAqบ†ทํร้ธCa๘'ฟญ† 6v–ไวืXcฃฦ๓"ฺุ8NผภŸพ}ทพ ซๅ!ฅน„sfซ*ฎ„ุW๕[^้โ๏kวH–’~Šz๏Kaิตร3“Rt™รAe‘žT€:I่RN๑ัrญ ™ง#—Q‰”)ำwอwฝy œGช ๓M๓๎ำ’วAลโช@ˆร%Q‚ฤPฒดIgค๊ดะ–~๒ถ[จป2ไ•ฏถฤXO›TQˆfQฺHง็๐œwCว๚Zสษ8!๏™ฆ7rsํ/0ำŠbz_ฝิ8 '?๖ยC1ื^ํซ;หจj๒}aํำ†…zูกs๐f"ŒAKii9[งQ[:ta ้ก๕็|รa๛B—ฎhยศTแqแซ.Eท,e~Hp™5hุพ,+ๆ,,๗uธเm\ใ !จ†ลๅL/t•ฝ?Qก) 9ƒ๔fหm, #ืจำ,ž๘ErEนืC”†ซ๕๙_ž๋}ั{๖ZฌมKzฒN6V•สrqฺึ‰ฝ๓XYy ”ฟ—’ธ!โeW๐V)Nฺ4)‘Bผ‹ำ๘๒็ภ€PM„ึP<†แมTd|DวbX`tS€p%AH2&ึTฑา!œฦตโ$T25ฯ๏vฐR†RึZtpq–๐;'ฮšฦXำ|๚„M๎ ˆ…Ž็๚ข๔ฅ*q†ตฒ-<—พ#๗ฅตฦิ@โ-ำๅ‘๔š๚๓ฤต qเฉิiฑu๙Œ แด}:ฮกกม–ž™พ%j›OมPท๐้ฬmณ๒ข๋ #ฉE“ฃ\Wuoฝฮ๋k-m3 -ึทI{๏ิยตภ˜ฌ๏์๐…™ŒิB์ฟ ๏SกH˜ญดมฑษ๕๏3็€Cโไ่ท‚จฤ๖๗K“‹ชัJT{ผ]—r3ผ งž&€?ิw[:^ฏฅฬA$๋sๆ6ณ,ฯCพจPDห‚9H๖d/ฬ ฿?+(ถฒ๐๕ƒƒˆtb žจศฆ“"๘๚็ด฿Fฬ&,ไo;ึ์pฒ"ณ๏{ ีž'e:bอ…ฝ>žีiHชโC,]Mช-gส ื^฿XSปe ฟษ[wป€นj•ิ Lฝ๎ฃ*ะ๚“ฃ0KSDง3 =9บกฦJ2oH>าฑฉญด,-u 8ฺฬ)๕l้ƒ๙r่bรฐ\C†_}ไ€ะ%–dภo5i„†Œž”บDนŒ9VjV˜'๔d›=๓uDg™'ผp†ฅq<‘.ฯัึ๘œๆ8”eัaฆ^= แ๋‰*ซฤ9g˜` หัPu,ณนž๑ชชฬผlี3Buฃ์ู6Ÿ_zร–+฿ก‚qใทXm>z™9#g.ม„ม‚๎ฎ^พX)J=ฬญWeผ‰mๆฌ_[สœฤ[s~‹/p3 –2nuร% ;d$4d๐ฅœ,hฃ]Wม6A๛ึวi^่ง1ฅL ซ๙ v›ฃ ํ~ฉzœˆ๔Cถา–™I๕I2l+1*งษNMGฃฬฦฟyT+s†ต๚ Yฬฯ4๋=›ZyS8bnŒx{vู"ู ]bdร r่ฮห™H฿›บษ0ไ`—ใ>œ+ฃœ9๐k๐…Nœๆปฟ%๎-๔๓bdผ#ฤ‰๎SOxF=N๓-โšฐ•+.C‹็ฝYศ.žูRฯโัJ‘Ÿt•6ืัฯ/E &'๋K$~6i(`จ&gB“L•} aิ”/๏ฟ์QRษm๊lแซyELฆ๎€‰ณ่ฐ1่ฮวฃฑ๎ฅ๛๓D"ํ ฤ3 R|๋yBฒ 3pS'คP]Jๅƒ6yNฃฟJA[กXฤša์ 2•?ู~ชYฬSWŽฮŸขt5ตpQ+6•ธจฬ€งฯ"ชำDํ&tัƒโื๏๘N้ฮ$Arๆaท›โvี5ญ๐ฬ:)Yetฎ๙๓Žนื\'๐x๒แ$้อLG‹uoตgY๚ฯะ^สะsั5นกพัJ‡rฑ !-ฺ{๎ึ=ง฿ฤก๙rฌม็w-ะด”Iย:4j@Z๎—bM‘‹=z๑Ž-+Hซqธ่สN›ผฆ๚ƒŒฒะ*ะy:/)ะejห\฿1g๒ๅ๔šVik% ๖ุ-ท๐‰หทษzฃณภ๓U›b็BขL\ช['น”Ÿˆ๚ษะ‹ {หnm้ฑืส ัฎ6ิ๙า้กฅจ@erป/m๎ฅฒCbะ-’ฌศ>Y„ {๏VE๑จzำ ๓๐”jแฉ>a ‘อ1๏ยซุ”ฯ‰ว—Ovฐ*Omaฆ3„w*šฎ`‚œภปๅ1๙๎ก$?๖ท'‘๗.BSvๅัGw_ใY$ฺุั๒lงฑด ตล๛ำอธรbย๒,~ํ่8ฟแfซถmฤ๛%nบะq”๋?[9"ฌ=ZOญ๚2ฌŽv3C๎9ๆด๕ูเ#HฟŽ3 ๚๕ghฟ๐พ8DอEงmัชห'ญQษCNฬ ำถทR]ฤฏˆอจ้^jหTq๙šŠ2ษ~F ~CตMัาอYจ`bv;eb –”T๚น”ฒ‚:๙ฒ‡Lค 56ฉJ:๊Cc 2ž/= {&นWัฃsjE•ƒ@ฬ: าัฬvฏbุ›”†฿;ละล่C ถสNใ"J p ฮnH@๋ ๛ชMŽป&โ ฐ "‹NฌJ>ไ๋๊6DณuณŠiธไฏ-ทข3แYด\,r ๅึwส฿ฒฬ6 ๆ„ม'๕ศ Ž€F: k๔Qชชภบ~ฆ๔ย์q๗qไฦ= Z๔KDก{f๎Uว๑€ !ล>ซำน‡ฌ;Eจ.๊ญบศ=ฎƒนฃษŒธ8ํใะ๏c ^ ธญ?H‹†๔W็วำัจฃx}ฯงOฦy0๎ธจcp~ŠŽKZ†˜s-ุ&@ผ2ฑ}VJผcm\บƒข !|?˜ŒƒSRjemฮ_6๚M4ƒFn—˜ลRงฑLาqถ†ฎ_oีfž ๑Ž0Šท1AT6G*‚ฉิ้z็YฟM= ™J‹อv่VXBคฟ“ฟRพ`๚มJ o†๒,ึ<ฟ9=นม,: V€BLmq—U1iงํ๛ืตฯฦใใ%๒.›p฿gn฿L๔Bi>ปฯYุ๊€ุœ๗‹`งW๏ม˜์eส;ฐึตะ„W0ยEYึ˜ฯ๔•ฏท5ฦ˜ แำŒSใl5`:๕ศ“Lิ฿ูธแฬ~|qTบ‘EQ ]Dม์‰๘๋ะะ(ุ๐Mะฺ}–ำบd:_gRsะh$๋ธGŠrฌ โp‘!0๑w๖รภฯ=๗'’dฯ}n_โใrOฺž€๋๋ฮ+จ>9@8‰0ไฉ๎”G"ีŒ]๚—๔”ห๗์ฌี ข*Woน:๚หnˆK;ืd“ํJUH|ฌ˜ฬ=Xึว7r†/Pื IๅH_วYzจ%๐@”S|~๘ซ“MแŸะ‡๕๏สNžUmํ B•Rk5รOƒŒภ•Šh้z e(x šaถดx */๒บ;zw 3`_่ศqก/ฐIฎืแvอซฉ๘Jz4…= ๒ื2ˆŽศาๆยฮ๛ฏฆbา2๐โอƒ%•ฐฝดqผ็ต#ฎmIฺ0ภ>N6Œ็Q๒~b๘ ‚tซ,ฤ-รg ผฺyN`ป5๚ธถW^Cc?ˆŒŸ๚ขฑž]˜Qฐฑy๋Œ๏Iฐฑ`พ &Ou!^)}Žrำฌ=›ธ๏เRwไ‡'!๔!EŽ&~XTศผ—{0RegN9cŽ0สู๕–‰<ัโ…๑ฯ่+5๚ศ2†ฬrฅŒs๐ูI>z[[ิป‹ฝ‡คp\Mฏš๘ั%~™'ฤ”ฺ™ส‚ิมˆขIŽMธับmŒ)อ>'น_ษŸnอ)˜šQํส่ฦb–+/ำณฆฮ>Ÿsทะ฿ช2x™“7ๆทฯX~ฯ‹Wฑg]ค๋ M๏’‘<ฅušFอฬ› ฆท ๊W0ะฯc๎QArญv‚+Hงท(ๅ๊•ดบ8#ฬแcaจ:nก๘มขฅiไxIบƒ’d๕a‰<า8[–A๏ศ7่ๆศ๓๙4s๚cขะฏ’ฉบ Š&สsขํ•3y/ ถyธำใ๒™ฏ5ฐดะคŒ.โอฝผZ/eยR—|Tคq‹ ~=yb[ฅ๗•๘n"Ÿ๎ูผo5ึผ}ก7๘ฎ\๋“™ย&ฟ&ฟํๆ‘์ ึƒrฦนส}๗G‹” 0ณะu9“bbวgZ H”$5ำฺด1vฐศฐE˜ีTฑฅ}Fด:`–Gยซ|š๗^ข*๕<๏:˜๔กี&1๕wใโ89๋lษƒ@ยฐ' เ7`ษศปtฮฉฃIบ}๛Œ‚ˆN:๙ {NใW วiญฺr๘๋QGึ}ฎqษศŒฅุš—ุ-*ๆŒ$W +DWฝ ‡Uยi6นy@@ไฦa?ฌOJช‰’๎{ำ„efUง‚พฒา}shธqฟํภ2'฿CวหLล/O๋œ[฿ๆฝMFxQนฬg ฆบƒธ“ส๚ม9ึ]ฏมPF๚โ_ผ4ฬ๓*ึ†“ญะ'4^ิmถ ื๗ฃธ๕@ซฑเY™9"๚4ไึc M2:Y~ ญ๓Ur?ƒ ๗ๆh“h(—zฏUQB]ž๋(bฑ{mเœ?๙ฎAษ3 ผXaMฦ QZ1่ฒต^‹ฟ”W์0MฦCฬขnud์‡†พ\tt๓-๗Vิฬี)ษ ‚—(๛`ฮ‚y*ฝˆฌฝš๓m๕ีฺหษ๚&:ู๖ไี๏โๆœร?qกKธlƒ~โะ๋>ซ|4g๙V-&ฺ*—ฬCษ‰ผ48์=Fฃๅฝ ดƒFซoฐ๏Sร๖ฌj’['Fัhgแpแ๑ผ$Oqเฦ๑ฺ'ฐ nา7๖šตฝตั1— UศFํTำณM$๐.-D?ˆพ‡๊~ฝ%ก%R@บบ~Žš7ภด4ใ่ฉ/A๙>,๚จhค6nJปผฌW9ดšŒื๗n_Hน*๔>ฌ ><ๆMŠสNd*ฐ—xIยyั&NW5 yปh}ƒูa€!{ชœ!8<ญe>ุญ ^๙]ชภผŽาวOjfA๕{ณ;๊„*ยO‡๛ฯป…Nํ๗pฎ|‘_A‚‚ฅส”—iM :๋Œฎƒ/ยฎรไ\ดข๎\SnาฯจtDLTTใ๓๐!†ศ?บ^๚%Bบ—$ำiZrV-d*"๓_0AfใŠx>oฤf+H> stream xฺœถP]ฒ-Œ{p—ฐqw‡เNpw฿ธปปปปปป‚ปkp =๐๘ฮ9๗ไ;๗พฟ๗^Qตk9G๗=บื\ษ+ั ลlmœ่˜่นาNถtŠ@Sg+3=#€๙ใ—Ž‘“Ž‘`ๆไdวอภเ๊๊Jo๕A5๙tค7ฒตf€##S6wฒg 82U ƒฃนญ ๗m2a ำG ˆำGN[€”ณ €™ภฬฤอสยอฦ๑W&ฎ"ฺ:ล13ฐDญ> อแศ„mํฬMอœธ~PQอD๗—€ก;ภษ]ึสภฦ ํliเ่๑0{˜G<ๅ฿ไ:น#เjฉฎๆNfE #ะมๅCภ_nd?ดˆ๒‚˜?าH›m?hฮ6ฦ@€“ $) ณฺ3๒_Zภฟฌ0ั3o…89˜}8ๆhnEo๋`ส '&M๕q@ht๘ฐอ๘ฏาJ)๖ฑ ‡_ŒฬLŽหo“ฟถ่M่m€N TvŠฺ Z[?Zวฤ067rMอmเJฅ์n0Œ&ฤ2Nๆn-FzFFF6ใ_u>zclkcๅ'เพ0HˆŠศสษัวด›"$d๋๐คcbไbะฑฑ|tš“ํฃ๏=๗ฯ„๒ๆ’ฤ๘'\าฦฤภฤ๔O้ฦฮv%฿ๅ_vR฿L"เ?O”ตu๚h€๒ฯ0i3ฒ1}0Ÿิ?๘_“๔4?ร๔6@?๖37L๘๏ลŠ9[YใhสฟŽซQƒe`mnๅ‡๗฿๗ี€|้„lm-Gฌา฿ป'้d`en$hcj๕๏%sG1s7 ฑผน“‘ภฤภส๘ฯu•ฟjท2ทส:šuO|L ใS637ฒด::8นนeเ๘a€‰_\เGƒS‘จ‘ญฑน)€™`เเ`เว๘1๐ฬllO&€๙Gj7ะํC ฝญำGภฮูษ๐๑ม5k์lมฟ–‰ุ B€A๘โ0ˆA\ั#Fƒุฤ`ƒ˜?^Ÿ?ˆภ ๙ฑค -_ -าะ‡™?่C‹์๔กE๎฿ˆ๓C‹๔กEแ๚ะข๘}hQ๚ƒ>ด(AZT -ชะ‡ต?่C‹๚๔กEใ฿ˆ๋ƒi๐}0  ฆัฟวž‘ญีว\ื +๋_+ึึโ™?J3จ ๘'ร‡ฦN๎ยGน&ๅš˜ป-โฏm[g‡ฟ|PL?$˜๔a‰™ปะๆoŒ5๓ฟม ƒๅ[ ~ิh๕7๘a€๕๘1แ 2 6ฏฤ฿๖?ชต#ๆ#ุ๖?ถ?Šฑ๛ณ‘ฬฮภhc4๙c+ำฟVรง›ม่๐7ํ฿T๖ฌ™๑›๕ร;+gวฟ๙ฑb7๘aื฿ฬธWูB@—ฟ™ว๖Aw๘;‡ G+Gณฟฅ๘P๑Gำว]หเdๆ[?สtrต[ภG็?#๖qๆ?.]G#[‡ฟ{๕ั—ฟม/]@ๆคnƒงบ ~๘์๑G๓G& ร?วลdไ์๐aดำ?>jทึa๓ปtมญฐ5โ ฒh๊|ฌฤsฅŸbq!bฑ์’ฝ‹จŒXาฃnq๖๒"ŽัวปZฑ๑๖ิ๓ฬ:H†ฬK์๗เ่ง|+Ÿษk„ส๐Œช}๔๊XUอ๓ƒ๏!ขใุธ๑7ไ%อ›Yตชษ—์-ซCมนึ<7™็พฅ/๋'มฑD&?K9๛ƒ%ศŸ|XŒฉ8…ฯ๗9I! /ฅ`ป“ปน ๎‰  ‡๕“ก;o'LS4ธEyฒ›.ษ/งฒฤุธ™J~[‰{ ส•ฬ]=}y๖ตFะ„แšr๖ฒึ pSธิzŒดSS5ŒฌE‘]าส’|I#ํณ!ํ0บษb&jˆหฃo?`สWฮ‚2^่วรึGๆอ•—†ฮ3H"๐๚๚I%n๛ด็ฟCNxy'บํ ม5dโฎฌ5ง$ฒ฿็์๋_s"ฉ @]ฆขˆs’[$ะd<ƒซ(‰S2๓ทeส›ฎฤJ†ว•ืย๖wถะEuRโวR•(Utแ=?ซ๘ษ๚ฮ๛ญากกใฎ๋จI<ใ ส ††ณฮ™aBUฯ้Cๆ—~8ส๕#๏ hJ๑oF`ๅ)ฅอผ๓ไฅ^Zภ’ŽฃFuฐผชฑ6sW[ข=—•ปณyซˆฮ…XoŒ้ืŒ้Q‡๒š x–ณ๓ฤ๚๒UQ+jhaUDbu๕ู฿k#s]ฒoVใˆs;ว9”^!s€,žัใjนะ้iฯ๊ปฤฌิฺท๙ c8U™cŽ็+สšืO ฿.๊ป๊CถไซŠwn(ะวœUaJ—>$ิ\c"ƒแ|“พิ„ฃฯูุี]Kฺฌ†๘›ษ๐๘pTฏBท*|๓็œิฌฉม๒ย—ŽงฐจŽLฬขถ‘U๊ฤ^_‡˜o๗F!ม7[mฉ฿ณn๕ล/N^๑่ฟ\พvเ^ฯœ.ท ๒ม๙…—ฝGื‹Œฮœห๚&ญMโ%kสี่อnขŸฺsT7๕ฟ๚FY›ฎ‹ถ7ฺ{ๆ7ฒˆ็๔ฺ;9ๆk/฿ จbศฉยยr‹K‚;ผEFต ด4ฃเ๚7gIœ~ห/Œ๗U›8Wศ;ฎฤ๒Ž‘๐!ผ'mRจึs6์ฬˆ3ูม๔#HฉนgรkŒz•ใ^๙็^๐รƒ1Hvซฆฆ’ž๑Hwฉฆ$๕\๑ฝc™ม:นฬ๗ภpjฃ‚mwณ<\YgขN_aƒ|ฑฏ ๕^ึ\Yฯ฿ฤซฅบ๔ๅU(ฏTฐq„‹WPดอสJ โVX๊•BjOๆ-~ 4|)๐Mำ˜$•eคtTf+&๘dร3ื%ฒ^ใ*ญN๐vา๛œกแฐ%u๊ [QR์ฑโบ-‘Aš ๚MผpจหJ~ด  bบฅR}‹Mk๕ู6ณ๎Lก…{hฬ1ล๒ฌูฑเRAฮพr16สทฉๆฒ>2ท4Qdฒ4^ ฒdtWฑ˜฿ŒZ™ขภzZซู-Œู–“๖€ช์—๑bSZฏ?=า]+Ž๛ค‘y7ญึีv6:Vจ52‘ รfJผ 6พ‹‚…๒qปw5 ท„ฺ•5ี˜ำ‰Jโซฑ<๚G-ๅ’H๓๑Š‘2j3 x็๙fWš–์ฺ*SaGฐตRr+ฑชผำฉฺŽ;u77{ฦ2Uส mษฌค/#ฺf&ฉฬพ์๓jผKiDมgl†MeXTŽ€ฮ&<" 5ๅ$‹#•&ฦผogฦ/ :ฑ7๙‡!‹ ๖%K!Ÿ—นฤ๙๙า|w&๛pณ(ข“@ะŒlฮ%!‡ฝ qฏ5}มตฒjะท™ื pวXŸE9@ัDEB๏—ภ% [0/›["”=oกU? aึm๊2๘ฬฌ๔mŽcู—s\FwO/วŸรั"w๖1ฝูย%Ž$SZ/^i™‘ฬX+หด)N๚ฬฆ8nšธ#ู๐'ปX—อ=ย4K9NT&*ฅˆ ฉ๏งม ์o๔ฬย฿ฅฯ)ญ{v๕:Jฦฒฟ ฃ”Šํฦ(…๘‡”ฑญก Hksปƒฐฅž€EoํธีJ”๒‚ิ๘m ซ9’ bF’—z ^uX๕้ฒ?k 7ไd๑ม๒ŒตโรฯŒชฎrv็^Mฒ@๕-IV๖ปอxvีฬ/{?๓ร‡=Až฿ุิM4jp*cีuH้๒ฤ›ร๔๑๕.๚Q&เน4ู T_Q๊sำf่‹š"{ค”^ส\n้ฮjั”ฏ˜%GPcห[ƒšh'ห+ญฯdฟ2๓tyฐ*wcจฺ^Zฉ’3 ธ‚J>ŽZv๎ั๗ยฏร ่x†ฯ2”eM`กโa๖™4ปญt€Lnˆ#F`ํ่โึT(–ๆcแฒี0 ; w)น‡#w”#ว%%์$—\‹่๏ชž`ฌ-wอฦš!w~ต›E๓v๑฿ขRษ2ค๑ๆฬเ บุํU0Rญ(่ฉด=|\!4\๒R๐๖.i3๒”{ส*M`u0WT–ข…Zƒธ yIuย1กฬ5*คg7GfEฝŽศ j—[%fš*ฏUฑ“4ฏ‘%ส;ม“Dfฝ90ย4ืuG™xธU'Vๅ!2ห;{"ฑm๋ซ7>ย’sB๖”AัQƒ“ุnษu๔Z/๗qฒ.๙RDฮwณ๛-๛&ฌ๓sเฆl์ๆฒใ3yAฺงofadข!t<›ศลซ‰|ฒx฿๐๖ฑมฑi=มž•๙ปK•พ +แื๊H}9XไM?ฃMชF9๔ๅkCG>|“๛ฏ>๊ฉN่ี"FสJงญŒtืฌEร91U‡ึvเS@”,?๏Sฺ;Wuฎญ–:}b|ฎSทๅอรDชส] ฯึw๛bwnคว373Bป๋_ขm'๏V๋„.ณNHWw`" ขl฿SP>๑sุCtžZYึฐ’ฝmˆ“1n1ีhษ9ฃX๐buฆƒุมเ๘ิํSฦ-Š˜„@i%ฐฤeUQSqFด@‰?8 P˜| ่ผๅ]เฃŒโ?๗นปภฦรธหฆืรzV.!อ๒ธ3ศใHœ&ท่8า@8ท™์๖ฅZย1ข{b(=ค๏ฆƒษศ?”_Rht =จLืฃCE“•ฐฟvMฬ๛หs{ ๋KM+7ˆm๊ีจ Šœ4ฬญx๑CQตฺ @๓H๊๓ฌ"B$ฏ˜ฎว.R_qˆŽnG๔ ฒ:Zี+[-;˜•- ึ/|”ฝTGtป>€ฌจสe:ฬตพ ›ฝก\ƒ’nSุฑ‹Y8!oซ6ยw*vตฏGฬธ๊ศอวฌ7ฮิึDโิuใาza wNyM1IภK]ซี๚‹ไhตธw ื…า‰ศ{,’)Ÿf|ู…ŒOบืcศปโ๘ะX ญคp]ีฅ†|*—ส0๛CชšอNใu‡?•?ล"4Vwt+t฿f&อqwฬ$Ÿu๒rัณ4บ๎x฿ )๑Ž…0jล ดx}ิQ_‰kวv‹#จ-์gะy^ฝิ8ัภŽ๎๛จF_O-๓[เุž\"๖ๆ oธ_นดhฎc&–ยูช$O๔\กฐˆ]ยีF<าx:ๅuwง[โNf„ฮ๐>สŠษe#ึ13ZŸPฺเฐ W‹็B&*uๅ›Vš\ž“ฅSบํๅsCถ๕)•)ถM๐D‰ห๕ŠXใณ๐คQ่ารแ‹I.?ืง'฿(0™’จE๚ดpํืcuบz฿๗&ๆิ้w$รฏ‰yJ-wGญ•!๒,๏๑F}๗฿ต4ฃ6dE๙สข่“_ฬบอ‚„0๐ผ๐ถง8žpH Jฑ]p‘นทวไฆ<ม–ณ์|/๐"~šงฦ€ตW”นด3ถงฉ]Ž๓อ‰|w.อbœfS†ŒUพhEˆ!ไระ€*สB€&ฮ๙๖i มณ๋]๚ei๙‡›€Qโ›ฆ}Uชs‚˜๛ุ•‰ฬIFฃส/ตโผA—Žฉ|V4ต‰G—=”ฝ>ฟิธ*บุŸร’ฯ๗"4/”๘M6Ÿ๎œญ ƒฝˆ๏็tอ-B๑“…{๑jYClธรรจษล๛ž`ึ;`ืŸ*^Hํศ@3lฮๆkงบ|ลภ๕ฎย๏5pœคฉ|“เc‡T˜•j\y็n‡ถlกฝŸŠั3%D„A‹ O€o๓ฏใถ๏๙สˆ๊™฿˜& จ)0 _‹9แ=ษธ๕†yธฬœ T๒[i่™/กDฦจ฿E๕fั ไ๐ฉ‡๒ฟ0U๔ ๖ฤ3Xrฃtแญค“o@“ห๓‹ฺ$๏s‚Z\ต$ภ็งขเs†ผษŠ ว—kcŒUw;LOw ฃ พQ์`m )้ฤฦดๅ˜Kƒ’JjCRบ๐ฺศ๘ฃซy DŸ‚ปZ9AผOˆกTs้txjD๗}๋…ฌษal:๗๕ภชฒลH^x{ƒ/5 นเซJEัดภ]ฬ$Vป]Lฑ—ูDฎศjซฉ์ซT˜ rไŠ?xS๊v”ำํต”@~5ฅE]๓“%๑Gf>v฿ต}gWท<6#\็›u D๋ำPผฟV(Ÿ่š๓j๐;ฏ œฅ'ญK๋เY—bPNขำ•ท•M[’RB„ี|ํG กbfส ฏ๖ขolVาโ4ฏ ฝ‹ห๑‘ฐ3v(ƒ˜oU6K๒3๚ ฆฎC‰ฐyะaืจK๙น@๐คˆ]X&J๗ำhg=<ทs ฉ๖mZ"tฦa*โ&จQ๘ธปT๚•๐.็ึีXGe%๙&สFc Oค‹Uห9d!อ~›rถ๋๔(‰  „ภEณส ฎ: ่ข$5,ในม>ฯงm’ษ๗วp"Bำe:ต˜ๆ9ผไ/๗จึง\ณไหํ*#อcไลฃ.ฬŠjZ)ˆ‚Uุ"ค‘า9bูณไpiqโส\ถЉ ฟฺ/ะ–š +Ey]3]ๆ*7,#U?ป•ฌ-J(ฦฤxนษล[ "vg๚Z’ฝA{uš`[[อภŽT_.๚`‚4‡*~lม๏๚W;ฦม…ฬสYฺ$๔=๒yI๒ตน!˜0˜๊ฯ ฐ[ส}jนธช ฟขMฝ x}t 2ต๐nช—ห€[ื+ํ2Š \๗†‰า‘DํŸื˜—?5’19fฝฑ๗|๏9ปฒฆ…ฑ@ท๔Bคใุฝฑตภจœwoบ๒t–b/hš]}ฝ€Uวค0ใeอ’ฝจ'nnแ้ญF5า9น”ฎ๒ญ๔‡่ˆ|ทสAUž˜2&YชDฉLพธzo๕ff} ท€๘1เวงษŠืŽฤ น์…„]ิ>๘g•wx~šฒsศาคa™๋ดA9์m๔ƒƒ1 ‘ซ‹ๅลูษถƒšชf@`CFMyสsB๙ก/7a่.-หึอ^ศ„8*%BSฆŠ๑zŒyฎLฬ6bAำลฃiบ๔็uร`SЉ}uฺฤ ขฃ(แ้P, ๙|…เ!FจวSไr…ใ ๚ซm|—NP"ศฅw`}†ะmF$ˆยY‰ ูpi4ๅ w`ฅล;/›6`จ8์วฉ}˜ F0’ Mg์U9*‰ภUƒeC _6eำุื*˜ีODA‘2Ioก'ั“gŽ+”U9ŒCiRŽfšหเiฯ๗nŒ„Bไ„b‚V‰ศ[ๆ|ฬง5งO฿q฿ำชฒŠญ่เˆ๑w๙z๒ณ็๗๙่YJ๘๛t@๗Mฅ|เถrlัฏศแ(Agภ๒1๋*!๏”„nร ๑]^\๑ูฒฦ็จๅว[ัS)ู๑^<ธฝธ’ฤ ,:5W๏:๊+ฅฮ‹แ]]‹๘ฌบ—บ๙rŠIญ|ฤ˜aหาๅค฿ํLŒั8ก ๕˜9\ฤ[•๑KWฬ<&GQM.:ดn„|k่Tถษฒ฿aYsไyูqFญK%ฐฅQ๗…ะ’ กšm{aโŠ๚ำ6‚‚ญq้ด™5 \^*Yจ„ŽB >ฆศ 7ว82’)Ÿฎจสฑm%neA๑]๏@f.a๓5nไ๓ษ(F๛rmื>Љ็bŸ?฿ัํf…–ึเ/ŠๆเU๗ ๚รcŠ4 ์}Ÿuุh)ญฎํSุY3o_ฑ*’พฮๆr.๑6ช๚#ด8Zื๒%ˆรจLjๅมถJZปokKƒSาiสาจิทํzุภ๐อ๔Qฯ9ฮษL ฏ‰:ฅ-5๒@ำfฦึTš๕~ฦ–hฑ7Iหฉฅญช๖cณฑ๐%R>ฝฮ5ห๏๏Tต0ๆˆ? ผฃ†{‘ปศNะ๋ฏูสฆ๒šฑ-ƒRFฦืX่งLTB&๒Zfเส๎ปi0 ธB๚…kEIๆDf•รตํ•ฦp[Ÿ}‹‹2๐›ภb~LclŽMยŒูŠ>๚ฤ ‘k[๘ณj๎Vำุซ–Iƒฮ›ร<๋ผลฐตIWโjŸYม›gษ๎๒xใJษm<`^๐Zม ๐ศ‘ƒ4สˆyBษœ‚จ›Oำ wSฆ๙[” ป(งแZฯฑ๚๘ ๆ๋/_(ณb}v L™ Vๆุคจ๊–คฉ8Rฮณ—ๅƒ O๎อศ]๐mTฝษ_Œœ?๙ฺ`ฺดSc6Lพฃ.…˜‚j ญพ๊8@ไ๋๔ส:…1Lไ˜†œWAๆฝy“4ˆเ|ู]แแ ฯ๕๋๒DอV”McO;”Pำ๚Š7Œุใkฉ’จษ(ื"”ษยฎ๖๗oMDTKตล๘O๓Š gT">nK‚iœ๓ V=B๚“l]Z\ๆ>F 4Yueˆr*5๊อ ฦl7^Vๅ‹‚uฦŽrฏ1o|,6- $หvๆผษ>๗*‰!_…'๋Mkƒ1Cฦ&้จ<=m๓E~ถ๔ฯr,hะ+ฌtปštธo่`+สnฅ,› ๅ๐ูPdฟ๕ิ]Um$2( 1a 4R€œแOแ)MHM๎ซ—u,%ํ[4้็€ฉ"์8ึศQ้•ืพฎ`ย†65ๅธข*๙Tํ.ฯE‘ชฟาhoลหหvnผr?ม Tํ่E/`ฤDXOHรf—2'Kˆฝืด^jชgจ.š้IฦญL>|WH%G)Ÿฟฒy€“K/I๏–} ’แ…c\ฆฐ๊ิ‡๎คA่ผสhฝถขJเƒqเ/aAB‰,xฏฌ€ฐสx‘ ๏,๎|Ÿห8ูeคไžgoq&ๅ๕Yf8œJ้ธ`e`uJอX*6๛š[Hw fอญCdูด็ฃคหsโcโฌแ4Nฏai˜hD‰? &๒ํแ žin‚ Wˆ๛Aว์ฬณ wฒจ.bซ9Rีฯฐ*ทปIฯญIิW$ซ)Q9cศฺ+=๔(ภGˆ˜™Pํd—S7:เฎy…Šวไ5~BoยWญดห>ศฺ—ša„ใๆ๛๛ช๏Bฐ<8dํ^๑”ิ™๔ูdำr~ฆ)CDาฺั?lŠ 9‹w+ณํย=!็Žญฟ@;ด„fbŽYPv†ญ9สทฅฮา๙=ฉ €ผ”—พฦvŒมญฝv฿ั฿ย๎Z๖ุ๎ผe hŒ~๙สฃๆ#PJศ <๑-ส…๖‹eŠ\ฤบHqyI^ๆŒ๛ณ‚!}อn.WW`ํืธถŠU2Qq(สด‚0/%ํVํึ.= HœึุŒ๗๊ ฃˆ"$O ๏—!v๎ „ŠG9ฯ•jŸฑ‰อพษ•“้%ว•™‹ยƒ็nE ี ’ผ^ขเฝดfศ–s ด~wู๔ธน๏กcVœฝ!าฉโ‘ลฌ4Œฟซ7ซั 7Œ24่ฃ0Xยฉ[‘บ ŠŸ $ื…ฎเtฝฎ๑yWนŒ4‰?h0rั ไใวR+ุีํ้1ƒN–zUวsA๐Mกห 05U$าฆะฟVะ-}…หmR3?หฮ0๏ƒ–†8ฆ}7N๋ 7‰3ถVA๖H{’)๗ซw"rงRf-+Yศ]ื"}ณ>Mฑใ ๔฿็/Œuzัrๆฐrจj<ƒ๙<€หe$ข‰C๘๐์รยํ&๙ก๑ Žง๑eR๏†ฎ กƒ{O*jหW&T›†.vˆS!ฤ:š@` ท*ฉ*,ู่&j5€T ฦภน›†1ŽYž™5˜ฏะiฆ—œ˜โ:qŽfRย{ขิช~+k:ฮ?Vฆ8HyƒWเต•Š=f}uฤฃ^เ•ถฺฮศ]ญ์=i9ฤl=N vH'8M๔ไศžภ?7`yCX‹,@@Ÿ(๒;i„ ำ ลp"}ฐ&๎6†นˆป๑๎'ๆ*!™Negีศ,ิ ‹:๎อO๙น(กุฤฦkŠฐ!_€ชgฤƒฯ๒(iซ’ฃฤโ่cธบ1่ ๖า๗"ฏ฿ีc๙RNๅ์~ค[^ฝœฑ $0`๓^}ฆŒ๕ts•cงpุ Ÿ’ิวฯฌง๚4ฮ<ข๊Dไ๘|w…/QLฎว$tงบ%W j๚šี<~๖‰-9ลำส>ยฅคhฉญถm๚!JDsk%”/๚€XIN๓‹4๕Kxu๙Pฑ†œค๓Q=๖Btซej 1ˆ๚_ภ[(ฐ‰ล๏=™P“๎uำ2ˆ3๒gšQขgyo๙๛มฃwh}‰8ส[Ÿ3m๗Y1I}*ทูpฦm1ญ๗ฦK›qเ๕ณิW ว๋4๘ b/ ^็ีFอ๊5„v่0๔ ษํAšŸ\V u?,8ื‹„ๆห[OZpO๛^๑MR๔|ํ.e้ _๗kๆYฟม๋๖์ชwkF๓๋[Rบy+q ซ‡„Oวๅซ‡้Fk“อๆฆHๆ๛„CY™ำLŽC๏อ0สถƒ; ึฌีโฒžฝจๅช˜e&ำUpฅG๚…|cช3ษ๊ษาeฤcS˜฿ifำ‘ยดคํwจN ญถ๑ึr๏ƒภๅ†WฮšW72ซ”Qโ6<ํ(ieคธบTฯศฆTคn‘HŸ๐(?om|ˆ˜โ:!5ต์ส0v๋รk sงปZ1ดe0ฝZฐึ}d๖๗๋•คb}พศ:๚DS&ŒbZวVฑฌSCซไตz“"H;˜dFะB ด ูDผะ8ก„D่>ฺ}ภ.โbฏฑKั—๒ะด๓a๐ฬุšภ)XqฤWไนภภgY3ถfฑฤ7> sค€ูีŽ"ชวZW!ฆH7*oi๔ŒJŸฅ แ๗aƒhราNโฐ๏ช ˆ…ฮ9h\ˆv๘รDช_Ca๕าฏb$ิิฬศฑQฐuโ`eS‹ย\ฤeฤ€Uถ_เ ฯ^7ิช€๋ฏง้@ฟซh` wK'!&์{ปฉโ‹Jผrำ๊vฺUใ˜Hœ๕๎ข#+ํ ๏ณ{Š้ฒ†4ฤ'฿ŠCก>พ๓Peg+๋X๘|CRP˜oมจ=›฿Žœึ"บูnWโYใbถฒพ“hข๊pีo๖ย~qžƒ ิ™œห@่r-Z4๒•D๏ฏศ ƒt* YjฌfAˆ1ต๚ง˜zV•TฒVœ-๛gœlึใ7Dฦu ‡nmูƒ‰%Rา4žฎlฬ๚พนPำ่ "K๗–)ู „,Xฟb้o„_ต›ๅ6`ฯ‘ฤWตฐjตˆ<4ๅ7{๘SคŽoMพ ]น'๙„:\๘ภซ˜๙ุฅค๔d‰Žr;g๗ภ๘šท)๋;+ฬแ“ใฆZEQีณั9ฅ„ย[อ5'ื:%†rุ[Uุป•X$xtuU‡ๆoฬษBmณN#ซ๎WNไ๛™jk W7ฦrฯJJ๖š.HEUgP๐ึeปW5WŸ;"ผ\คปญ$œŒ์.ชัx{ุึ8+eˆ๛w/๏ฯsœt9™๎}„˜ฎ๊.R”^-๒๚ฯt๕yZŠฆL;Q3ไT˜ำ’ฆ ›ดำญœXฆ6Jš3ว„แ.๓ฯล L0สฤ xลŸ_โ˜ใK๕วฆ$Xš"Qผฒ31h฿y!{ปฤhwt–u F Yฦkw๘('(คS…2q|::ไ~Š๊฿าLŠ…/?™๗N๘>ฆ‚<ฏ7ฤBทก^เ—›ษำ+%ด3 นพ=+F–Y อทม5Sฤอ7 ็ำ{•ภs 5vŽฝbฆค&9•ซ๖ปz9ใL๛ฆi+„๗๓ข›S นjๅšฦศพ [*IํB7ผี—<2้ํ‚E…Mศ‰Ey3ŸSyขˆ จœDgฟวิ;Z]5=›๑จ!๋่คa„ด}AnฅU S~็fa๔iZวา:sวj‰ŽMฦพทcFtธ&0G’จพkŽn•rโ๋มfค|I5ฬ;ย`ฏY‹ำฑƒGXl]‘ฐษˆ*๘ฝสอขซา/‰b~”ิ”^0hึขM+พŽง#ฎYฌ f๛๕แ]—ใฒฦญ็ซrn~ I)nT”หœ<อšCฉีM9.้17ˆ@Bํw|ถทๅฒvxำ'่ <์:—ุขn„5ด๒๗ƒ W”x}ฎ>NชคO„\ษฒ"4hN๋sกขซ฿w&St'L๑฿n๔`dHฺ7~O>ุuธNๅณ&3ึR(ธyฆฌ ;j\v‡ฉ‹ื่zฐบาิหฃN_๛P/fe{ฉ\5$ีใb•ฝPoŽฎฝ+ฒœตœวป ขv„Žiaฏ๏QŽช ็Šg4r๎”๋่ร3ภ—mฦญj™ป&‡ซ˜ชณ๐ภoืi\ปพ~M[ฌ Aงบ>ผ๚ูกNฏ๎Gœy<—`ู9ฦdz ]i%?๓IHนgdPฮใุ'5ญฟ‰ฏFt\_ฎรุCๅWดณค2ษงก_ฎ๖๗ษU—ุmา$sลง‰x"]ช`k=ภ#ยลj๘ ย]ฎะฉHฏก(๐เ๗์๑&๔เ@lศว‡Ÿ/žตwozฒEญ• ^›1ฐy๏C๔H+—ถS\™'\E.ญธGฦŒjฒ”๓ไL‡๔์สTซ ‚นวธt˜uตฤŠ’ทCkธ"=ปz35ธ@>^CPๆ/?ษฅžŠeJ^w๑Fbึgcฺz]n+*I่%JŽi}Qํ๐FIg„ต‡~์cฅyz1ํ]โIK3a๔-๑Dเแšผt?#ช‰Aข €ฺ’ใK!ฎI ‡ณaฆบ#nื'๊#ฝฒ™อ้{๚พ2ช๔ษ๏|7'#๊)ณกึK ะ๓aู‰๖ยูŽฐฑV$๑‡น7ฺ^‡ๆฎMฬค_๔ $่ั้9.\ส–ถ.Šh]ฌะถา†&คsA฿fฟdณึถ๗ว'—แX2’ฺะ@u๘Z0r@p–WSไš‰Ÿ๖R@ก—ฯหfฒต@ผZ”ค๊ว•" ƒฐwฏGสšต…ิซ,bหc;ร?Fฆ~]?๛’๕u  ีAู๑y=gvบแTงัzญ,{ซมvฎีต—๗ข2ณ๛ต๑-U`hๅ=gฅr)Š~ฟ–ษseไˆํขฟวฐ_ ๅ†ฎF]1š‘DLะ)ส+‡|i๐ฐ2v=ฆบ,ีžx๘^b;่ญฌฎlHศ’ฌขU@ำa6š์ษ็๓!J๒Ž๚jฃฎซ[๗ภคI5žป]๚˜xH(๑ 1ฒฃc๏Ž“[ T฿ lํอ“ฯcชtFำ๙ กfใc๒bkรA<ฎjซ‰3`{ ๔€_๗ศ฿ ฃpฐ๘๛‚‡,ศIฅzกฟ`ฎ;—๓ฌ๘9์ฅ9*๙ƒ`เaส๒Pšฆ}{aึ@ดpaD (‹๊ฉzo9;[ึl†‚ฎ€V๏Uหป}]ŸีํฺXฏ…‹ ี9A’!Cู S„้ล}้>™26S–พrฯฦ:ก&kXL’/ฤ-™!ัe”๏Kg‘ฤ๗~ELdฤฉึO&wrIถ๙nผ1cšwvใTH+ณ?ฤชœด…WTฏ=ีฏtAI*พCล~๛ฒ5 ๋jcโฺนซžทtUแฦศ"ลใฌืดพ29ลฬสศฝหว6ค]cฦvแ‰ฅพ็,7}m5eผ[๔# oณc๖gyกˆ^ฺ#ดกโg{ิšqZ๒๒ะศŸ˜sเป+#„ำfJมรn†xjม๋žs!Š_fใญ๏ึq“ใMบT‚๘฿A๘Xำย ๋[uท๙กเ๎xุ~M0vSˆ์๋ฎ๒K’ุ5ไ๊e#ฎ๗ 2%n\mmํxใ…เLphฏ‰ŠL3’ฬฒ[ส^…gฝ๑`(ภ%*โ‹๚ธbฐv่งโ็ม@te•j๒pฺจŠUqd%{+่น€q“ Bt…jนsญฮขฏ๕Œ(P?Fอ4Yaปž6sWษ{PอlตัSIเลษฌT%ๆธ๒2GสฬRjปํ~sฒe\wษร }…1pืษ๋2 ๙[”ŸnpรsL,ฤษปcป‹aSว+ƒ๒คงฃ฿สG๓ญๆฉชW8‘จˆฃk ทฏ$??จGูลM#EH™ สีๆdNจ~ƒ\/rขฺ{ฺใWg|uษe้&:dœ~?G๎o:ฯฝ็ดฏ์Nhๅ}dM*p…`˜ถึ๛๖๙ๆ}k?eY'ž๑ว๑=„€ั…ห0Œ็jY%๙$๊•๋0ฮ๔EฒนฌˆŠKฃั+s;žx&]ทณ`u…/_}ญ“†กฤฌรpe๔S ูีแ%‘|J‡z4ปT๛S๗c5าฆฬ9ก”c๔๚อhมŒฅฝฤำI9ฑธฆG๏DUhะRnP0๒U`]ู&”qํci.ํ”‰ตq`_—ูคE๕x๐’“โXQฝsฉ›-๒PR…ตณ(๖wJ™+:f๚gะู'Œ,0ไ1 ,5fVxอ๖ูFๅ๎=XMถflAO)ๆกlษฌ2๊๎wŒ•ซaป%ม่โ‰˜5>… heฒฆ1ป ๅŒ่’‚ฒน๊”…ุลOw|w1"…2แP5ฤ๋ฎลD_•ืJœ6โ๗ต7‡Mถ?ฆ™j6T๔SkGr–ใฦ‹ฒv•cvŽ?ฯ๔•0ดรo™tำ๏#g{mุ‹„์iนส%ๆุทgฑแ04ษ๙ห๒ฯ\JˆV|zฦ~ qส„bิ็ญ้Œšzฉ{8าD?H๕Bรฝช‰>%ž;ฝ(ส3>JQ[ƒต๔CิrŸร๏รk_Ÿ๏›๙yอ,—›eฤํ˜inงy-2ฺ>ƒ`j#ๅโฤาi๕%IX=uธ‚อ~ฃธ๙<อแ •อ9ปไธฉ$v3 k๐#5PD#&SQjฤYœ)ศฎLEๅ#q’รš๘ช‹ฯฬฬ@๋‡ภ4,.ๅ ฑ)nํ8ฑEž—๓€พืฝฝ”ฯF็-ไd๊‰ฬ๊ZCฉ?c๑ถ5™%๊Qฅญ‘Fถ ’W‡)…าE"Q-3ศ๛Zo&ฦEษปบ$ฅrG4ฐัวIVๅ็ƒัฅ9jkฏ]ฟˆœภP๗…;š[ดฺ>%-ญฏ–‡ดn๙์,2ก๙ณผ$โ*X๕๕b"ฆšHอตBแ†ภศ)‘|k๙z๚OFยถ.—~R*็LชฯgBบๅ“/Yeภต_ฅื‰<ก4Œ{_&เH|<1F๙ูดศฑร†,‡z™Iๅถ๋-}xผฑดaด4ช฿?E•8Dbๆ–QŒH’•๊3oi?ฏ ญืa˜๏'&([ o~‹ฮOบMฤกโY/•ฟYŠบ›_จไไ’‚ป|N;,œu2ื…์บปeาƒ#๛pฝ@r#ศSRรฬ*แ๖k'งส๓\L‘Tษไ๒3นw€{ฏšพฺ9}=dด)าV3_3_ธtึBf]๕๓m ฬ€<จใ•}9ล€RcG์~ถˆwฉ์ฺQฉ์ๅ;qyีฯKurˆ–"(ฉ7ฉตfžฌโ8ฯ;น๙EA1ƒd… สLฦ`6k‹”NฝฎŒิ/๐-ห…ฑYุ—ซ8rlืŒมG๙g ๕ญ! ศ}Xวชญ<Œ\ญต๘„ežฒ0jQ๑„‡มฑaf$้ป€๐รวHขkอบ๕‚ีWwo฿ฺI˜k้{๕ลญฎU แK็“qur.ฉ6ˆG^*฿7ฬ๊iˆG๕ฒจฏยF๎:aฐ{)wTฑj wดเ)&‡Ž้%๐bHนVcHฉ5์บ$1ม ™mกหไม1‰ฝ=.๔ƒ‡พ๕eดs‘&SB}’คs"ภmbุ่๑1ตT๛E๛}›Vˆพ๐k Bฉ’ 9‘ไแdเ๐‚์ต#uญX]ศฝJืิ‹ ฃš+i%šuฟุช4ฮ๗]ฃI:Œ6{f$jŒ$พ,fญ๓_žVศ‰Ÿg“๘‰/๊\„l9[Bัd๑ใป p$ึลมฐ๘8;\1- ‚๕์า9ึRย๔1š฿๚่‘O:ณปHญฐ'?{V–ๅ์X‡ล‚(P Ci๓า9ฃ  rUU†B/ิ๒\ูร๖ต‚˜Tก„ํ\๛Lฝ)ดkฒ6เใ๗9ˆD ฿ฟ:ฌหบ—™ญš%Sผ…ก,ž“˜ทจzs.–Y$ำไึN Cb8O .ewห•นAŸฎศฌศื ~ลนUZk—ษใ๖%Šฐ6ขˆ๕Ž*eNBPบa๚Lป>V;(ฎ5ฦ๏ฮฑ–S<๛$Q hฅš†3Oubwฬฝqผ&ฒwN’:6^ฬ ะCŸก†[๐ Vป?ฝ1ญGC's—.< ~^oyN'+Y๙Oแ+–&oŒƒดeลเ7ฯง[ทค๘UaจชG7"Ž|ถ ถ๙Ÿ:ชu‹ๅ‘ผmRรf|แ;ฟ๗ึ("drฒc ๛Zษ๛D)งV™ูV:ณ$d๗DAสฌฮ%๊,ห ็wกกืI7ซํaBt_']ูฑ๙Dป„1˜ล'e`ฆ@UพŸ’D๏๖0Us๖อF1&Nฐ„ง70ๆ ล-แ5ผ]๓็, &้Zฆ—{&]WMงDฉขN})Œ|*ˆOมฯZw}MŠ ผา'.๘#๎)๙ษฎz}–o"—ณ}ผวฟŠ/'ฦsฑX@6ไT” ส ##]๑yw‘–๏ิz'I&ค Œ $vA,ะ๖๊y?ฎต`่.บ‘'8ุZภ!๚6`๋ฆ3Yฅwg˜~BT๓๐ซาฒ5งNIมKi9์ฆ๚,๖ญgc˜Mศอี๖า๚ณ9}g “๗4n>vZ๋G‘% ศšCnƒัสLคๆSŸkเีbง๎ ySบ“Ra๚j๗Rc๔ฎฯ;…สพ‹žั€๎nš~™+ล†ฝ๔นสR”vธk{oˆ,Yก6$ŠฤEผ๐;fŒX€tU่v|’ ลโ„iDg‘w๗ขK(้9สJWๅมb‘G#ๆk›h฿—w]ฌฺ’’}}Pฺ2›ž,‘mฆชฆRxะา๕˜ศญํล‰็$๏C ๊5›~เg•าไกภA˜๋ >gc.uP‡ษถ9ว5จ–ok'ฦ…xฎอwc‹กฉeหŽl,™†ห๑€โฑ\xกBŠ dจค็L? แ๚bzสหF้`2xXสu8ŽรดŒ”>ฉ๘BW4ษR3‹x|p–ฑgq7erUฟึ =ญ ‚h!ล{}pก<ใบ™qr~ฐCค๓ฮงึก•๊0์(.ฆ’ซu๓]Ev‡7mุ๏ทeM3๛eแkฯB,๒@กJX~รrœ็x-J๓Oœ้ฌBา–” มy๊flKฯ^โLฌฺvtฏท5์ฟkฃa๛l์ซด๚ถ[จkว`ัษj+c0้่ *วญF~H๚Bฅม18XŠ)ฦIยdZ‚9nฟŸฏ”?ย=<๙้.Jุ5;0ขmZฅ๚z G—_;Ž!หf23,าX p6RJW+pพ์๖ู?–๎>ุูVS รakฬUแjๅตF[8 ้$ฌ`ํv|“\—Šฯ๖6‡„}\Og‹9ข) Aุกr^eสฃ]Xyต‚ฺ๊ โiฬีŒขzคดfๆฝ๐†‹ี๗มqแพฌษ…บ'Lj‚Q_ใณkŸiำhš>Z ๅ^Zวr7b'FZื5J#wœhท0าcƒ[้๚@8!u“aถ}็gnC8ป’:N;/”c$๋~๓Xฮ‰C๔ฑ฿ 0๔Bุญ์E๖BŠˆmDpๅz๗ป/…ณ0ะ์ิ๙iซ(hณ‘ำcŸ๙"dŽma‘ฟก2ธธฒ๙Thอร๘รฃงW;ฐwP0g AR)jŠ๕ๆภธœ"ฟB˜ Tƒภฬื\eแี`M9๎™ะ-?็ภ- ๔vืhิ8ขม‚}ๅb๋.t€แ s)”›๚ค%š2์‘Ej=aซDl๐ีL~z์U"F่ศmืูp9=ยขV๕Wฝ ฝ๚ƒฅw(0/†Ab_\ j6N1ฃWั2Sธ\๘6ณšŸฑHผ(nกคตใแปhŒ๒ใวญร'E{ฎTอก|1`eป'ป9˜?EMฯTD.-[8๘ิ—ฦRN›๐Yธ ถนZ๐ ฑztฟ9 XA (ไ‡•ษœเใ›ฐcจŽซi`ฅ;ฎ‚4ึ๐ฬฌ ขไ‹7๘ฟmฟ้!0e“หญฆต['ฬ็}๊พุ้Tิฬc‘ิ[ lะqlคuูo9ŸหŽ}“ณีฬั๖ำฺร†cไเฟ/1C๎๖๎^^ศ้ขไ๛”(ว@าจ*ท!ณ^‘ำƒโห้V`ฯNำI OvY๗ษํf8อํแ-uห“๘:p สZํˆ๊่`ƒTข}งŸะ๙k>*DdW%ำุฅNy 1ˆไฎอKฟ”=แoƒฃ่]์C{ณไ_u่aบึPz ๖ก๐ฯ<mm1พc“s‘‚ง้„k œป a4ีjzpีšท<ฆ3้ฒู6”๋u็{ŠŠLGจdŠVz‰U๔๐จ๑ฏณก๗ษฉ˜๏(฿bsถ7fญ๛p™†D(๊5„สนํืF2ฟk[“๏น6^‚5ฒ๒atปส‚_พ•žจำˆระ&;~0"9œGฐ<‰z๙ํสt๊ฃผaลีŠตฐpฌIฟSพB๊ัVฌsฤ”มปพ*ืƒฃw-มwงน ุํํ‹„ ฝญค{)%อIกtš+[9Q’sT†Oฃe˜N EŽv์ฦ&Niต]qอJV0H๏๎2ร฿K็\๐ ฤตw=œ7ํๅถฆ;9พ๕e†Ej‚@ŠฤD0TJ^ฐ—ณoพฌฉgLx๊~!qSฦฆFสํภUyu{„ฯ0‹|ิ:qŸ๏๘€ึ™Xบ}o˜ปฺ‚{๘ิh >ฏ'ีIใฒƒฑ๑~๑Bฃหy2A/ูมฐ๕อSˆ €-„5ตgขฎแGj็๙E?˜ะ๚แE฿HฺRw_Sด…้คFจ็j ญพํPŽ~ิ= ’ฑ•„„>@งt‚พ1FA ื7vtอŸฏ฿U5๙-ข—‚ก‡\lŽtฐศl :jพ–อQะ/ก™œธŽฆFวdฝ ˆฃ๏9v„_ฝ๙y~U-“qรว€์-/D๗(;๎$EBฟา„IŒ#’7์ฒ4Xวฯz~ฮ-$])ฉ ฅ"๖•๐ฤฬb ษhตฟMฉEเGๅิDบŸ‰ี[Q3๏ฬAฉlvฬ๒0…๗ํM…‰~ุH ๗บE96^J๓$ๆศ๖๘ดePXฏ“ยฎ]Ÿไ๖Cmซ~;+E๖ง˜กอ๑ฦ0ว๋ํ‡ึJDJH6๋›ๅe5ŽYณรน<ลจ0ตลีํs๒๗ัYฤ[(jๆ#ห(k!ณWุีษCืw 0o]๒ฌ่฿ึิŠTSัฦ฿&ฤณ่Ÿsฬก^Zz•ผงm๛ถภ’;ke?s๙อv้๏uุjD@ปY@Lฑœนตi[|ส?'ฯหนYp˜•2กํอลฎsSx'ษ6๕tv 2ษผแpcjภอะ,–2…`3ZEช‘V•๙น –ิ ๛ัๆฒBฬ0„b“ฟ0`้สๅJ€/ษฤ’euป›Œ๒รŸˆ˜"™„w\ศหE ,ิOjสŠby Hsร •nาฌๅ์ฅฟว< ำbtษIศ$ฺ>>LC|๚ฤŒฏuŒฦ*geซะ๓ํำลU๔ณกฆ&0dw อ์Žˆหพ๗่หภซใzDrช็บสู Wซ‘+mœ!ฮน•‹jำ=ก๛ฉy{ซฑซ!ฌ eR้#ล_ชฤnฺ™„DOวP“t็1™ ๅfิvƒP‘žl สBฏวเ๎้พ ‡ja๎’6]J–f~(– วRำ=’งjUฒฝศ๐‹HWยนžRญ ฌธท๒\ืO‘ษ#œ๔มlR3R)ขข œคุฑ•–(7ส@ํบช*อ+DWD€ qยห{ŽFmez€N๏"% s+C !e%iˆํDzI0ๆอžฒสแ:fปแY๚O^คcv:1=3cŒ^๐Vชฅ g่%ร๕ั ฬ-าืI่q<ฆ/๒v z๗84โwฦ/’:O#œ^๚+n ฃภ`๐๊คŒ‹ดบMu s฿ฒฦสQ —ฌ๐กœ7*—4ิ™p˜๖zAฐ-โ|y๑๐ฉntำ‰aฏฯE‡ cล.‚ึ๕ณลย:`…Xuh<Wac”ณoตm*กM๔’ฅiR"ธ… ท4dzL ุต๊ธ8กjํฺ๋yจP&วแ๏Ob่+หใิช๙•๕&ชD;ks่ …_^ฟ๖ฅผ์HN฿โGOๅwŽ’บญD็จ:ใK“™๑gDฆ๒ู{N Žฒฟ์ึทL51้5_ญ ขž๓ŒงำEeกNถ –ฏšฤ ผ ขbฤ/Žอ…nฌถ'ฎิ'๔ZU๊ก2ชฅKZมทEส>Š๚’D_ร ฦพGXSม ช€ ๚hๆ7ฮiA๐Zป4žuช่ณฮๆNฤXOaB^3;t๕†ท~ ๕ษเ_W0i@)_u8ๅๆo pฬณ]G=IUัี}E2๏V @ฆBnฅค\ฉuoPVิzts˜ุ—Œ+U}๘จ =จ[ทž๚ปrDิn!ฅkHiฬ1๓๑ฬK!Ÿ๏๋๑OโE)‡ˆLyบ่7ศฌ‚Xl๔๎( ๗nฝ2#ำ—`๐d?อd๔jะเ”คลฌจZKป๐#๘๒๛ฌ๓]๘Zส๘œฃ™6อ;รฯฬžํบ"๐ว^HR7ถศ3%s–  ก มฺษฦ)K฿:@ฯพอยคY@Pะถ๔ะ>ฝึฒ๗E/๓Qv™อภศ lํwฬฏo%~P5ศsํ5—ฤฎwON๗ษีJ—=ƒ+|)ฏหˆไ•šŒพค>๓W_๙‚3บ5Yฟ๓ไี'gŠB†ซ{Jำ:–๊ห‘ึจก‰%)๙Œ€jบ`_}ช›nt?แ=;ั๖ –๎ุืว~ฒ๘tŒ…ป›ศ"ฬxROฎา[€ัžฌๆyนอœk%}ตง~บ๙|กc7Xโ๙๓tx ฿ท3ฝ3ำ7’O‡'|ลL]zฬ๒ฃศ๖ @LฏBd„^ู์BปใAธฒ ดZสWU๖๊yuษจjด่๎ภ^Aฬ๕โ=[ฒ#บjดL=้–$6Ndtบ'=นล’oๅํึˆ@ฦNธ™„ฆ๑aซŒ ญพํPŽ~ิ= ’ฑ•„‡A†๕‰!’žแำดค~&ฤFเธ๒พฮภคr6วkฒา ๑usใ}R๕จ„V›๒ๆwล_ฬŽN…—.ถ แ/๘ษ] oๆCื(UkDว๗{ปม๎ด2วฆง›ŸIดถฆปซซa~ฺ5ฒVšึํพซัๆE9Rijก๐˜้'ไ๒=ฟ๏คHเ|‰๖‹.ไ9๙ิ K™ผ[]šŒdูฦีฐV†ขn‹•’Ÿv๏X[€sฮJˆld^ž(_ต ยz๘เ~ „;ข`ฃGh.ด่‹Y‚Dู…›ํฬvPXv IฺdM#/†i=EอOmาœXLRต›ฏ์_ด ฤ๖eK1BGมdr\ะ7oทn›๋^ีณ๖1x& dRJฯคฐู\ Dw๙VธXxฐ—ุyG“tแUฏ+˜„เ%๎ฦx๊‡๖ฏKฟ7ฬ‰ g[&8b“่7–zูฦ,0$uชn“/\)฿@Qผvฬ๐V็66„ตผ–šฉ”4:WGKฮœ๑"ฟˆศ ๋šวขŒšUผ"ช”6งE•กปEฉ—่๊žแ๖8=pฉ€fฝึศwT›ฎโฒ„fตuท0ฅส{ฒฬๅ^w[D๖ลqNดฦ9หoำุ JืXตพา๐^VะQU"ฤIฑSกุ๊pใ•ษโ๎>Žะฎt‹ๆ๖ฐyฤ๘;๓1kฦอง๋„—›ฑๅ้P๙vฝ“€†ฆธ);้•ฅiา ;+0€60ึR›ิ5ั€ljU9‘ปโห ๙K6/Rซงๅ Im\ๆำา ฃ')มGˆ™œ2บทLE๗ู้ฉQ8…š—ึHฅ6xUV ฑQŒอ0ๅ™ƒ\ุ51ส8c๋†KธcุปJถUผื›ƒป’uMaศœ ๕>A…๐`ฎ„๗าla†;_$กkฅ“EyYขQJ$#}^XBไท•ฒP !<ฆJGo&‰F่ˆJx5๋jฅZ ฺˆn฿๔Ÿฒƒ์:aร8ˆ‚ พปEํEM๐ฐ ษ๘สv๘hI๔ฦเVŠใฝ๛‚•ฐBG[โrr<’[\ข๗9ว—›ชื๎”ห)ไ ิ[;ฝ$฿ใ~0hะj N๒๙จฉžŸŸวศ9ฉJ ckบฃ๛ซqฐB'#[ำปจ>B6V กษh’อ`Og Žข๋HM๐Žn_,็ทe๎ฐ8žฎw๙.็๛}๙ฤๆ W”ฌม ฒ*๒B:0วœ\๚H:๙ม%จํ๒๋>›_ฮำR1IฒD`€žzA’PํHDX์zG…n/D‚ส๋ช\#๐ปฟF6MœŽŠ~*ฃqเaรhใWๅ{พiดcGgws‚ะZŸ,๎ฯ›ื6ู›;๑f39๔ฮ‡ไ๓ึ!e.‚9เrกC& งะOะ[ม‚ขŽVgขgY๕VZ สx&PีKŽฬ7๊๕๕igiaUํ,.•9Œ ้ผ}ว„ไฌผ:Jีฒoิฏˆ:l[`็yZN;#H#ซ๖kŠƒ%`‰Fชษ *ฐ๎‰(3?&2œ:๋ 4 ๒ฦถ่G"pิ?Cg?็šืพจ'‘8โ:VนฏK+ 'Ž™ิ่ฦจจ'rQคjN9š+„2ฉฒz๖L…mฺมฟœ่ณIฮ~/`'ฆ@๖่ฃ<ษา๘6์ฬโ4ม?๘{\lZJษโเฌ๑ภ*›r๓ยd็ž๔า,Kตต!=๘ิOฦl^=ษฤ‘Oณ)๏ ึIZ}NJฐŒU๕Žๆcะ}‚4†6๚ฃธ๚฿;ค~fใธ“$oFbo+แ3Ÿ(ซส r*K฿q# ด‚Wฉู;keซO๑ค5๏คไ{ี่CC5ืnรnีๅย์~Yx<ฃ!ไ*ž‰‡ค<9@KlำQ†์Ksฃ๖ณN:ยrๆ‰&Œ)›F1๑†ž๏ฒaถd๊ๆ7z—Œ!อH+8๛"๘=า%๊bฌ1ตซEฆTYฤฑHBZถ฿อ|›ๆทลl˜ญ…๛v$๕ไŒ๖รYห‡s œ 6VPฎช^Rุ๘ิœcธHƒi‡@JJปดิN่‡NTF„ฬŸ฿2q฿G%ดชโ*—žUDฒ๕๛8U`ช#n”8ไ๕Y1f‹i‹<พ& Cพ๔฿Aณ\NิmNZ‰((i–่ ’R•<ฦฤ๋LJ ิgS๊๋bŽ „฿ญ%ˆ™ฯ†…๎กS~Ž–,K•JYฮผขŸธ Kช–v๎นบ@&น%*ืตtศA€}ส๒ะทp๗l…@†"VŽ/ษgv(ฦ๊TXํ3sัd‡€zl!˜“ํŽQ!๚พMฮZใ]q"๑ํ`ๆF3ผ=—Gเ‘xYฮฑWv[ฏ2L“ŸSg แh)ซง=œ็]tฆ?็— ‚#7*G *๐h:ช%ฒปD_ั)ไLะ46หI๙4๊ิ{Ei*Kƒ๑5ฝŽIq _1& Zืaๆ฿<ค๎*๋ฑy0ˆๆ42k$ฤqญtป;Y"28ไs^ฦ“ˆŒทY f ทซฉMฏ^(3 /๊v[hๅž]ข]๖=Vมฐ„ˆหg฿&fUโk&zอŽิถCฯ@โ<า์๔ไœ{lฦiAษฒ ิ้ฏฝ๎๗{มhm๙ึAวกuซุ(็T‹7˜%"ืMธๅOฏ)C‰ใ‚%J2.u+uาJ\otEล Uj1n4P›CfEึ^ธในr’ย(QเZช9  อ::้~๚xTวXIฺํ)๕‚ํฦซXYmัใ‡.฿U+5 r‚${1ๅื˜ง ๔Œ/a|เญz@Šgผ;>S'ฅ‚–…HัลdŒพkฉ<๊ ไ ๛ ๋5”ln0doอsŠฌนญRผะัลB๔ั๘r{ฮ?ถ,๓ุU%๕เฅ"าCŠ D…ž€ข!ฏาๆ3X9”@ฺi\QSJ;ํึŸเฑีแ–’ํd๘.Nาœ๕erำๅท (6฿ใ>~฿kxhิ€฿lS ƒจtณ*Lแ๔ vฤ๘แ;DฦๅpŸนนรถU ัŠ-ฺ.ฮา*S์์C๖๔).&ัRู-ฉะ~ภ/้๚ฎ‡๕ฆฑำxถ#Xฟ^%๖U/฿ฏŒ๊๐dฎ›5g=4๎'๘ฺาฌp5ๅถ๒ฬ฿๋@0ืœ5|&ฎBฑเ8—Lฃ‰Oฃyh!$อ)ั„ใbgยฅ่``  ๗ใ‡C`•]o†ท4pว€Hฮ"‘ฎ—๏,K$FBYo`้่‚xึฑ.fN#3ฆป’›}&ีฏ–อxr๘ตZ๒’+lq<*เFฉl'บp4ฺ7‡|'ซv์-(†5ีต")ฐมS-็ทyRBซTrW2โดOศHฎms“๒›M“3yงยทดิ\ฅชฝร[ƒ™35ฟ j=กโแ ิ(’ํaqฐโ_ว๊YNเ็ฮแำ๖ู์s>ั9บqœุ ›พTฬ”็ซ‡KEฬ%็้ 1ต่ํี]"฿๎`ฆยjc’†sXโ๕ย|k ธgš๗ๆPแย{ฎ๘=ด‹๒…d\สย†ฝท9-q*ƒ tw๐Y#ฯว>?‰ถwดƒuKT<ฅ9… ชก๙7ฦห€ง O2่ท”ๅย~ลช„Prญ๑ธน็ฟyฺ‘ด่หํ/ธqDฯญ@*ฟ"[VR๚.9ฅŽฆ4vสค'!’บ˜bmกยŽ9u‰>ฆS๐_ฺ—ม_๑‘`Jร่ 53)๔ …ญะ\:Ms๋ZzจA>:e?ฮ=3cŒ^๐V๕ES่้Z์‰’}ู|๕เQก๛๖@วฌ…ฌฝ'๖'E—!เ็ีพมภใ\Iๆญ;๘ธyค%ฮำO0ู2ฏ.ว&ิฐถ…–ุ[ฺนํ๎ZWฮํ๗ุภทอร‚สลŸ็x,ไ!ฏ๏O;LนŠฑOํ"ซ ˆ:]– ฅ”คLชหV-๑>ฦ*๚h,eฤื„แC(]ถฅต1ถ๙Oูศำ~{ยภtย๓"sฝแพเ4>ค๊ดี}vƒ‘YJqSงติDˆ"สŠ/z€z๚อX๙?อƒ๓๏XNฌนm!>‹ฦษni=}•.„!FLีL—จ๖TdW}฿ฤaๆฌ๎ฒ\ญฝ์๑้ิ,"H..Gขกฺขd๎C็ทฟLŒฟSงx6,๛*ำTกeบiว’O(wู๋ภYDQ‹€จ:6ธsZ2พ–D<>#รTN๐ป๏&)เbด‡๎hNP™z ผ๘ฝ ๕VF ง๖ ขP Kjณ%๛มyG)eปk™ย ถžฃฐฟžœห ทZ;<ๆŸtkAฌึY๓QŠ‹`F๎†pž&Bi%” 2SพaŒวfตjธœ(•<่๗ฎ=๊kรธ1ผGœ•ไY›xษรก#oŽ’Wห6์‡S9๋%ฺฺ แฆq์p…ุg้5ด?๎)ฆบ๘๙Wb?๕จภา้}๖[…6 ก๐j๐ๅส#ะY฿ฮP๎ล‘3ลฬล้ไm0๘YŒฌ‘)ฃี้ฮs0`้ฉพซW‚๕kไ+๏—ˆตSธั›๖˜@iๆกŸ/b๓๊ฆf™LกX์บษ†}2{ ขึgš!ž^ค%?ปL€ฌ'”ํฒSฟญ]ํ๐"+$ฝŠ ๓ศญI3๒š:OWI็p.ะ&#d%ะ–่Mะ ๕ZHฤIธD๕6qk[ฉ๙o‘GjใR'Ÿฮอ4 Uฅ๏ฬฦu?บDณซๅVCˆ"ษg๎ธฏoNkŸxZRงSฅฑeG1ธฦ™{I+ธ๏–นะธญyOรr)ฅ4Jh3โนŠhi๘‚ฝอ10‚+LŸมึคญฯ๊€–ๆภNฎr\zRdaMG[’ุ๔พVฅ>ฤทŒ“๏่๖ศฏ“Tkอ'Œฃ"W]u8Q“Ÿœ1ญmบ;[ฝBะห๎‡ฎmhคภ3k้์ำ(ฆถpค.ฐ0๒ฎŒsุ3`่I์†ฬ๕ท์‡ึfn+!;แ‘ี&โ˜ะ†๛oจุฏ,Œี'*ฏ\Eฉ$›}ฏ/ฌ๛ยŠฐ{ƒฑ€AษJb tดK—{zพ)โ้ฝ*สุ๊Tม6แภU-๐z่ะl|›Q`œ,€ˆe๒ไ Sั๕}RQ๚,Œ๖ถฯ€‰ซKญ้ํƒ_แ’VฬPSV๎๏(๒O• _ถdฯฯ๓ฬ "BมS=#v฿>ๅฤOH7ฟeˆž้๚ฅCึ5‹ชo๒ พไไQ.๊'W๓JบN‘h็ำŠGw!ซzะ‰)ธŸ`mZLฅ๑skค ๙ฎปa9บi่t X`JไFSŒ@_m6e$ก๖๘8จร7b๙R๊ป.ฑ๙ ๐ล()ส1_•กจ!Eืt๛5ะ< ฬ4ˆc(๛‘4`˜0œf PX[ค‰ะปež€7_™yฒS[& ูฏ`Vค๔ƒ3\อF๊ฏ> ’E๕6 โ๒ฌ+"S+Žm„—ศˆŸwช“7ยg๛T‚็ …ื{“บMฎg[๙้๎k„žLณขถ)Tq>JะM [……” ‹9 m฿ฮ8ัไปw>&šีฉโ๕H-นJf!ฅA‘'ใ‘จ2๓ˆใ%{ํ๑‡t๐ๅ\ัCํKœEไRข1qข$ซคำvู@—๐ U๚7}๚h€๕ึ๖Oม…ฃผ;ฆž ๒&wr“N* d;ฯ“e™ <š2 ต1๑ลชฺy{*:ฌu‰•ง5_yะid{ ™ƒC$ฬIฉ ญาะ8รKดฎLEา๕ฝะ†Y๛8 ะ/F,) ด!›Yณป™kอึฉ ญม3ษ4๎&x•eถิฎšVQก@า@บCู29Mฮ๏RดซZxv„•๔ ตn่…(™ฟX@ด๓vขๅด9สAƒŒ๋H๊"฿็uฤI4๛S 5ญ‘U๏ะtซRกส>)i›(วปํ Gผ‰œณ’„ฌก;๗Rคัl„เ?"ษฦ๕ยC๎ฬh(๏~„6‚…R;M6–']ิป2ะ;ะ™A“๕\ฅฌ ข6ฉ๖Dฎ+ถขmฏตKp/มwน๊ ็ฃ˜ฆ3ูaZ4ธ๗๙klฌถำ(ีฌZ ม๋: ํzธŸwเ๑ัพF_ขฤY0w›}MP๑Cั3โuˆะ?ษL[็ฏwศษX /ึภ%^๚ใ†ยศตษ3คhป,๗,ฑ9vฐ92p็ZEoซ{พ+ฬฎPFฆ๓๕U‚1ิ—หtศ}ํถ_-ฤก.5๐โ๋m๚u1ฟo’ร3ญจfG,๒฿ซ.5๒˜kv็@ื<๎ีRอๅซq๐๋้Fชf“สศด˜~•หBฝฐ๏ฟu8)`›$D`6๕yk4ท $8’’“ฬ้Lˆ๘€ซŸ|ถำ‹B>Z„„>๔Š%rSง’"u\hบœRุjส|Zท† ‘ศ1A>ห ธก—์ูเชทœป๎ส–อโถFทฤ5bั’๐}S•งuธ์ๆ๒!A7V7+ัus…Dอ$Œnf*ŒฬŽ2ู…k๘ๅX๒$-฿Tิ๐๓4FH วอ1†— [ัรื‡็3์c>นส–๖\ฤ=jดศ3พ๘{ํฟ๘—{ „eq"eํบ>๊ #ืVฑ˜ 0D$@Mิ„zKzv๚ญ˜bาp4])xฟณฑ3ฅC'$-o`ืoqFQZืrฆ›y!wื7y๋แ้™กฮีํ)k็Lคนแjฐ>'wณŽ2M8ห฿ฺNาืJFฆzพเky%๗[th56๛ฆ qmgธ7‡j๎l^SฮPK๖Jขมฎ(R=I@ตฃ„ƒ๛>k์…วฃš.-Žฮ(ซ‚m%5™ ๋[Œ6ธภ์g*็่ฟมฑY —ฬ๖Oq์ไอ>ี2QkึŒYื(rีฏFฃฃฌ‰;WŠ2Vš ƒmtp๚฿๔ %ำ6XJdFฒ+Zt[Aฌ้เ$งฬฅBŒึอYโฝa{#ว๑ž?B™ไI3ฉO็‹ ว€สงrฉ๗lต4VศŸ‚ส-รฅณzล ฤขSVœ๓ืY9 'ซŽLเ๛—‘ฃYt”ฎ6œVYกqw‚Eึฉภ๏prคว”๙ฝ9ฆฅฌศŽ&^ผ<ศซStG1Hัน™ืฒž>ฦ>g Po)ิ๊~คํ{jศ๛2ใ๛กN`p’๙ŠŸฬฬ Œ1ฒZ`:@‡ผ๖1ฃฏ!7ฑ-(ิQเแQฝR#=ึูN}1๐๗๋[Y๐5•Yำ?;Rb๓\ภsภฏสส…˜E,ฟ&•hง -B*๕Fก]ฎสtlw4 8šภฺPt0™q^'๗เตnRz66^ G(‰1(oS๒ป&ขำ€มH$นณ๘ }f็าN ฏวLํ$…ร‰๑๙ิ|V2kเฟ–—็‚ภใ๔dtD ’ตGOmโ๚ถTศ{˜t„ ใ0ค,๕*ฉด“€2L๚XX=๚olPฐ๕g+F'Pง y|"ึ็๙œืฺTฒOฏฃO่ฎ๊”๔ ฑฟE๕š๎ฒ7&ป7’0aฃXศ Qด=nนฑŒแ’) ฝ*br"๎Aธภ4๙็O ะx์y?า’ูS ?-๕@-บ‡-๔ซTh๒ฎวFfโฎw>\๖!๏๊๚|\?iOซNŒKo{‡‡จไฝˆฺ›2ฝ๐าV*ป„ผิ™QeฆชsH๑4Rผ^฿ซจรำAr>~,Vตกี๔ณŠฮq?"}๑,’"U๕ลŽ็ป‡>eฯฉ ฝไ>Zฦ๛C๗xม๗อL\4.ๆ$”ุƒฐL“cบ˜ …oB๚นˆ๋1E๕jข๕‹(มฒ ัx’/E๔ลfLc ฦ--&˜W:R%ฅ ่8โถ$<ซj๕รe 7š›ผ‚&kgหq}T—ซVI(pg„C‘>Lภม อ(ณัASฦ$[าEฎBจ ฅNกz ็“ูฐk/mํ+ Gฒ:-๘y“๏(„nฟ}ค)>9ร CjF5P์๘ำCุYนฉ7สรค€iOถšฟฏ!IW {L"%–"x,„=ม>XŒ0ๅฬ‡๘ฮ’7…ˆeJžจšอ!ุ;2ฉ๓„’ย SU“แd7mHๆ}ณv2ๆ‘ุ๎R’iˆqน๋กำบซEGˆฺ™%B%ษู:'oP›oS๒ จ'ฬ๊ๅd“}ฉ๘ฺฬK•ํX(v–‘ v.VŠi๓ถZสซฅ‘่ๆ(ฏ‡๏@๚ขทโ"@~@{บšWธฌนo$)๒>f™ฤh^ Šh๐๓๎%คี+๑cๅ—‡ๆิ/ย)ฮgโAyซ@V4ะ๕l_ฎโ๓yช'๘…วฝ์ฬi‡MP๔ผWR!™aใ~Gๅ‘Cื ้ณ…]ผ๕5$๋๏พ€wฟ …zใฃ |z*a'ษ}‡<“ณŒUพ'๐มl™=˜ฑ‹าH^ุVะถ†่dต!N{nš็๏O฿๖8w8ข$Œ’ฉl‘ฆ๚Rฑ7๊…‰ส< rHF~#์ซฟ(๕~ฏO#ร5ษk#ื ๔%+F%‘ฮ๕#๖ญQ{•,].sH„ ฤžjีDแ่็Uฤ๗ปา๖†ฑ๕“c^–ฦญ’9mlBะM›Km๙lyœใบ /J4—s88cT–ล '@่ภ‰ๅ“ห_฿uฯ“gekฏฎกษ{(8Cเ๚b‡yE๊Œพ๚ยฅ•k"2 ถ๕•ๅ&ฟƒสaาล ด$ šฒึฺV^บ๐์EˆสŽคไิ!=Lรพ[“;ูทV^Zฃ Hu6พa๔E ผDฃม ‚ž“™zฦr@2^แฎI าFLิ3ษฺอIš9‰๑Œ2š’ถฏ".Oื|ฒ"o.๓`ไ€๓^ท(รWฐ,ณ\lxฆ—Udฺ7]B4ปก“bฦ๑ ฯ๔๐w04%[YฝณNUผซi่๋๏”’ฬผeKQีฦ€๏ฮ †Bๆ๚‹’๙S๏เำกŽฮน€๓CL๕ื^!‘yoฬฌwดฝ k…ื&ƒrg@g|ฺๆ[ฺ?OะLี}ว ำ] a^Qn{เ๓ฉศ:—1ฯŸ.Rง-จTfˆวไทw6‚ธB,~L‹ฃ๋ภ_่‚'€9]ƒDV \BUˆ๊ถษ›jด ŠfŽ,๐œ๐“ฟšงฑฉ 0<ฏญ.ฬฒpO8๒&l'ํ๙!‚๎mษ[ุ”M ;œFอv-Ioz>g}โจu’ต•คgๅดธุ 6ดH๒ฐนศว7ฃรƒsŸ xE~ูAfๆ๊J3๕งๅJ(ํ€9/G0z็ฃ‹„*ZZ—ห%๛ิ@บK๔พDb@ะPU8›ธฑu,ืAฑ%"่โT"pš!oIดW+oษ>'าฉ“ฐoc‚ศ“7งฮRปย๎”5!ร.ห<ใ˜มณญQŽก :†'–`ไผ›M ฐ๊จ๔9ๆlะผๆy๎๙๒ƒiAง ุ|ฺฬ๔“ŠO๚พ†I/ฦ/น๊Kแวหฎ๎—Rเ‰Ÿ‹fA‹}'ห็O€ชŒพฐฎ{/ืศศฅZ์%อ51œ“๋๕ำซqึš๚ญ๖‘Š‚~‡หq Fวcถตn‰โi้KlIำํ5จ"๓4ชอqูN฿่%ŠPšcˆฃ[`ืtฒๆ+\1T!ยฬUเฆ=ำ‡vโBซ2Pฯ&ฑ[˜Cฅ7ƒาC4  >G>[@4=เ Œiํ!<่์ฎl g่EH”|คŽ ๔š•ุ5yuึไ&ัh๓Gd*o๋Xfกธธ7"ธuŒ„๛e››็ฑZ๘,แฏฐWช๓‡ืตŽw|.๗ฬvq8๕{‰!Xyœ‘ืไ8ยMT‘”cl[us‚lง๛๎ๆถ้$ฑ:ฐฑ˜ป๋r8kวืจเชคดเRิบ&U(๔๓–฿ขรT:Tๅ6cB koภๅXkุwy6\>“d˜๋/ฟฺฦ๙ูsฏŠ{ัA]&˜YอทQ|ต™ดจOืF฿Ÿยช†ิขdภธเ/๗#฿้w_ง?ตดนœA”๑ฌฟ๏ฑฤ‹ntซะ"B)|ฅ/ฒ—˜†~0v›ณ LำxDm\๓ i'wั{๏๛ฒวฅ”ๆ–มศฝhฟC ฬz$YP |โฃAใส‘รOฒaฮb(ฟ9(š•v๋รŒูJA–| ›ฅ–u cgฦ2goฅ8n”ำำๆนใ‹ฐ^Vแ8wvJ๚ะชุ‡ HsXโไ@ํsฃf Cศrฮซวั#ฃ{U๙ ๔ะบ$๘ะB๊ฯnอฦˆ -/tเ—wธฯA่c„ล๊ฬธ๘ทLนีPi8ฏ#ุ1Z^(ฝi,_า˜ศ?H?ฆž้—8„{r์ Jยแ‘}Slฎฅน/aแL’Pฮr‘โqL"ฟ๗8š) ๚dฮZ ƒํ?ig“ถภๅŸ3บ$แR โ `ช&ิKณึ๔Y๚ึซqย ๔}ๅ๗ง<E >Q3}ก2ถ‡/YgcฟtmDf; Vฆ‚5ึ9hฦ<ฎ+pอ ฆ๛2rbบพ๔ฬนพ…ฟ‚•"|g QXF3%ั}oWง\ห๎ ทŽป 1คpนษŠ5ฯ)Fˆ~.รฝ‰jี˜ะ่[ขื์%ึฐ™žUIู Ÿn$ EŽ‚„ด>๒&ยเu=‹bใA)@มผ#มลศB(ฝฑCU•{‡~Oฅ*ญษXw=r:H/ส[ต(Q‹๗šฯเT~ˆิ็9ธ ๕ขฎ’cŸsขˆ;ใฺ—ไ ถ]ดฤ!rฐซชณ4šิืe ฏ“ƒคF๏๛#ใ_}OzF#ำIๅช๘6 ทซn{D3˜†ตธตKฯ"g๙ใ{g€฿ธ^ฟๆ8JjŠใคd…๙บเTo๐ŒcdvpสyˆsH†อUœOYŠ”ิืyท u๛ ฎ!’ฮCWN.ํ!$ฺ['X€b‹‹ญฅ„ ๑†ีzŸOฬ@8kD‰[%ท0|็ฏM์ผy๋ศaซ`ํยกญ่๒D%vŒ ‰ eๅFMฟb]–q5RๅNข(ฯwrผ!–ฆฟpˆิๅถsJ…ฎ๕ภ \ญžb†จู ิข<<˜ลk฿UFคย!ฬ›‰„๛†„ˆงช'qฎF-ฑ0K๎ฉhK’ชk็ื*ศ.บพ๙ฃฮ>a†cล(๛’6Ž`ห‡สjธึ[ีไfั,xt ี๕๔าŒuฺ2ด[L‰{^M๘ณNU๙œฮษไ…๙”zทบ๊๑q”ฝ,์9““}žมฅธ%ฦฎ๏ฑ5‡–bƒี็EฎˆQ๓t_†HฦŽิฒŠ0ƒ‡Z๒ค% เ฿:RhQH†Lณ†… ด\“}S์|Vฬl๙ŸPRŽ๖Pๆค< ิๆ”‡ลค}ู๘คxžณุ6ค‘๘ฐ@„`Tšh8๚x95 [oŠ็ žฎเ ‘ZpีอK{๎ค€’m๚ N~Nรd๛8ฺg\uSTn๎ฺBึฏI[Zyศ.Uๆ$”าp–Uญ_2ุั9MZ<5ป๚e๒#Dฺ7พช"๎/kง’!qo=ร5Kq=R๐ษ„าแ$‹ibuxฒ4@ณนฌjต I๒คUหtฅก{!hr ฯIบv3ฎ!ฉถ๖_…u๕`าเŸญ ‡ฃโใพs‰1r้^Aฎw๎q‚3(ชpรฌVชถ!8'ฯ E‹เAมN• หeศถ‚ฏ‡GจxF่€††ƒฒ9๖ะ&ษ†ฦ?=บะฬŸHTi-ฆ_ST† แ4 าC็ฐ๋Ax˜ส?\ๅžk3฿Kx้rช`๖ƒเผv•h`ง*N๑ญต1/‚ช`]:k _ _€Zฤฺ:6J2‹ฬy~ wลBMWi`bิ๙ศ˜.|ชด Bฦม๕#ข„nฝ26ฺณณ๚ž'œ–:พ"ด7ˆฉ้ช*X€ฤ_ D๗r…ั๛าฌ.’ภฐ๕ชg˜–๚ ๖ &่bไ๙ภโ–@ I5ž“427\IอถธษธŠ.y฿aป š.2BOฐTNนsศŽ›ฐ็“).†M[๕ณกษ[;Žl =๖L{€9…-Yฒ% Ni๚๏m(ืˆ–;๑ฺ๏ˆำ*L\tJ้‰ ;ฦ่ป\๑J๖’†ฐxฺษžๆm(ี g"‹(๏!!n‚h}—๕ež,|SคS‡hา€_๒ฒŒ+ิ็ย๘ฯq๓‰@ๆู๔ผŸ๎*อhm}_๕ะ#Ki\iก~tษx]—ƒวJ?ฤ qG‹บมฏH&ฦw๑ปโฃx š9—ฯฆ๗)฿†šH/ยaถฆ2hปย›$NN&Ž๛"‘•’ฐUุƒ†ฮฬŸๅŒ0wสฏฌฉ,ุKฉri`g<™†>ภh‚ตo๙ุ Fl'๚J†=4?˜ฅะพฤฃy„–์Jูf* =ลŽ)ˆbXฟF’‘ u๔ฬพŒ0[BเJลs.'ผg๘Z ฉ๚€฿.Mๅืฆญท}QdFใ๏ท†ฌวGลL iหuฦJC zoแ Ÿv",uฃ”ฌYDฃล™d8?ฎwI ,™nŸ˜@‚ข2:yฃฒw2 ษิ  E, $ญ7ฑ1๙4ฯ๐n ฉcŒD—ปxมYเกธนจiฟ€“(๓ Giธi๖ูT๑ญฏฌฑ๚n ฯF่.D…ฝWงคaฆ+™๎*-{ผu:bm๚bgนเ”?๛k ฿็”ฑŠิx1{ทDD<1ื๊tM—’™<1\XJB ซ˜J[็สทฺct,7v WYDM~aร่๛๊ ฦี/ํ—pr ยe–…”<ห]›บ3บ Qฬœ็~CงpZ-=r™FXผ๗MbPร}Pcจ8–จ Dศt>h~sธzฺSŽ๋†-ธซ38^_ๅืŸษ$ษรฦฑ’Yp:๏๔‰มm8๗Ufmื-€#3๖๚mรV๚ล5๏ฟœ‰fOrv†แขŠศ๖TPฌฌฑ$0•Kำl๓Pํษฯ†ฏ2แGbสHŽ•Aำ4pw่~‹ฦำh–ย3’kะ็L๖๘a ฐฑแ6ซ๏ฤ*นaเfษI ฺ˜ญฮ ษAซฆถ ควU_)S3~ิnR„ภDcœŽƒฉeํำP๔๑ูen6งก’%ƒž4า˜}บ @แnR0yฝงp i๘3M ›็ทV๐AŸควฝj|(n^ฏž.\ZY-„วœ`รฺ๓`แถิU^ c7 |‹bPัš }ฤw‡ฑ5\mฟz8-Ÿ3ฮไษ…ๅฯœ$ง๖?ฏ‡โ๗วดuจ๔‹> stream xฺwXำ}ื?าaP"อคnš’๎NŠฤFlc‚tJwI+!J ’ ’*J‡ภ;ใ~ž็~๋z฿kืต}ฯ9ŸS฿๓9ฟ๋7ฎw•์ถ0u$+JT๔๔ด@@(*АsqแXุ฿zr.SG"คก‚†Aฐ8*‹๊!mwH’‘"@ ิ฿@$Z  ๑€๔„ฺH Cฮฅ‚DyฃแŽX\žฟ(/$%uGเ—;@ษ††C!€๋sลe„B\ฦH(†๕GYG,%-,์้้)qล!ั๒ผO8ึ`รภะ0;ภฯ–๚WุŸึ„ศน`G8ๆทมi๕„ aœย…!08w„ ภek้ P0ฤoฐ๎o€เฯๅ@B …๛ใ3๑ห…"]Q„7แฐ‡ปภ๊บBX/ฌ‚ฐ๛ „ธ`8ˆ๎ฑล~•จ+ ธ๔‡ขแ(,Fw๙ูฃ๐ฯ0ธkVCุฉ ]]a,†g}ชp4 Šปwoแ?รuF =พK๖p„ฯ6์Qย&ธ›;LK๕ง"ทฮ†ˆ%๏ˆJŠ`n˜ิQ๘gฐ7 ๖ห๚ฉฦ๕เ๏‹Bข๖ธ6`p{๎‡๑€ฐhw˜ฟ๏)‘ƒ@;8 ฐ…9ภไŽŽSร์หธ๙ฃแ^ Ž~ ๐็็_'Kร์๏รX๘พš:XWOห2*+#ฝพ‚ข"Aq “ม็.งŽ๐ีBุ#?ƒฌwQื์๑‡<6„๐ฯ`๚Huaž3Pล}ฯ|ๅ๒ฃ๙ฯ(+ำป"uw—_vž฿€วq…ปxAเจ๋Žลญท ˆ†šม~๏ฎฬ๎๎๚฿V-,ทJฅAbB@ฑ฿z8F๎ณป วBำๆทไ็ยนภฐปH ็#็— ทePgcƒใๆoƒ[9์ฏA”aธฅ๚gj(า๎็๖‰ˆK h4ฤ›7|œ$๐แึิๆ๕‹a!‹sเz๖ุ#ัไ? ‰„Q?uไˆ uGฃq‰—๔o๙ืŠร`^0(๙ฬ4*โTา~\ฃฤไ)ธ6"Kด“~l."8RdEŠํUท^N4ฮษžีyฆ>ำRทr๊ิWv;ฮ]xท็ปZฯึเ-v(ศฆพแภf?}yxe2ษ๗ˆ™}๚F ณTeV้Rt/]–hส.2;‡^cฎ~ีuฟO๒ไฆ-Sฟฃฺฎ฿ัUS–ญKว,e๚๙ฃถีvผ&พOWGืวม+1"ำ๔3ูud;Nศ=ซ)—๚ๆจzX^Fi{ฆ›{ฃฝฅN๋X˜bu=พ_jBŠ\จYj˜7ฎ?#K9ฬ8n#:๚๘ฑsพ€UŒmbๆ7ŸกVRลPจ˜ต2๑ส ๕Y฿ศ)h‡l–jโสฯfu"ƒ(dถ๊Yvy$A‡— ;อ๚S 6KฐฺแKงLฃจa3ŠีUบ-@f:ๅผ‹ไช๙\"ชn?/+G๓ถ้ั\]ำํฆ@;ฑ‚Bp๑qi•SZจฮcพนi~Ÿั›$ๆ1ีิ>ืœทŠ '={ๅ!n}ถk XญำึJ๎Pุฉฃนˆ-๛ึ&ูoN:?โ&8[\ธฌ๗]9-)3คV{‚๓ืn9Ct‡2ฮคƒG๏‚|฿ั0า"๒#ใฆrีg}mม/†ํ‰ร>~ษฏ๔ิ฿ๆŽ่๊"4ฯ‘Z,Y:=๚ฺธ(ฏD3ปฺฮ?€jไ™9ฑ,Mฮšk!%‹l`a~IO็}๖ฅๅบH~8v}ึผ ธNเฎ6dษิฟ‹z},™ท&L’ะุhย<ล๛ตl6ฆAฤ)ลภช}9ธ’ซ๋๊c“œถะ%_๙ษXแŠ๊ง*ฎศล5เW…ิ‡[vŸ|้ฤไฃจฃHฌป”ayƒฮx๎แกฺัŠ๏ฅฆฮLญ฿ƒ๗๗"=i๕ถ E๘{ข<ฤ…žK•ชษc—€ด7P]‡ฬ๔'x*โฏ jmZC7๒<†ไรฐpฉDWภP$pืY91ข๏ยๅซผgโ‚๙–์Gอ{ฑ5}„^ิ/hWี9ณุณlio๓4๚8ซูbe๊๛ฏo:ต๔ไ8Sฌ๊3ŠUN‹d์/ึฯ]:)๑eู8Œ‡>ซญ#ใ)๙$3Tcxอ„-Deป๑FQๆธ[O ถษญnมM^๐#๔$คDa„>๕%ฝฝอzฟ*”„j€ิlแ-JY^™๛ p(!ึY8ฑŠปZเ๊๋๑ฒ“ฦฉ๗dAต‚‹บ๗L๏?ณ,fžk1 tvข“W›tฎ ฌปmฅ฿ัtค?ม$ญๆ0k ๎r ึd@Œ_xg๕ภL๚๚.`B•็ฒฃกขl#~–l€jหŒีu&Ÿึ y*๎ฦd)bc˜ฐพL˜ึ•ญQuŸdฮ’Ž@“๗ย:๘.๏์%ผ–๒Yศผษ๋sร๖้ติi๏์ต๘ๆ-์ไ๐๕จ้D'xนฺฟ?ญขLr{VีdภCิ๙@๐ํึmํnrM^fดแa|#‹ก๘aแC0ฝญฎฟฐˆธ3๕g๚#9Cฯƒ‹;tโ?"8˜คS ˜Xำ้UHh์ผฅฏRตnฌw8฿™บ6+Ÿrชo๔(bํฺ๊wQพwNf9ช[’ัœป~ปนท›ีฃ‡ฃZ.7gu“dฌ’ฆjkq6ตฅv฿เyOO็jไถAsTจmAŸ`?MI %Z.Q๑–5่ดp"ภ@๑|๛)ณฑ‘่ฑB0)ลดาd๏ขท ฯฃ+ญฃุ็๙l;&๑ิ_?ou1”ป*Ž๓ัลƒiฅโ?จตโ›8ฮฆNฟŒนQฃน‰Zงฟั$fe'}เStŠRx|‚5Dอษ”ศ7นืฆ˜๊ž‹{›้๘๙Ž๏ญค}๓›mย’9)m†šสU๙ฬˆฮvงตฺื-๊:/ฆDmฮ=๒/PtฐษU=SณgY‡BŸh๎ b72า7k*๋D|rฆพ'„ใ…“หK`A.=๓6ฯm3ืฃ๐๒ฺ๐ดถ้ฦXฌys๎g์MZร(ีฎcฏ›@ล?ฟQYVŒ~„์ง์๗าU}ำฉ”ี๔๐ผWฟ„ๅญ)@7๚Kถ}Ÿืบˆ*O๊ฃaD~์t๖๘\์ณัฑง1˜k3ํฑมO…ะ ค5ฌ{jO *ฮ›?\฿. ๒y‘บ๖]EtckiœณX๙….พpT'้eบภ๔ย;๎@ ฆ๑ปะcDžธŸโ—ู–ฤSK'–ทXสณ๙Mน๎\สนykn_ชs๑๒ูsึ*ื่yล๋"ฅฟึ฿uo›่ข&เ4‚‘นNชZTฦvลข†พU}‹ค 6ŸKR:—tU๒™9๘”Mhืก/รพš@O<–XึZl?Lปูย ขQr=0Im^M\ฯขŸ @‡ไซe—าโัdฟอj‡“ด0-ผ๛๕//LJธ๘N%˜ผ฿kR^_NšMZปร‰"pช ์๊๔์ฦ†๒รหเUEฺฯ&s›L^˜๗}รlkหq ๕/ ๐ ซฉฒEฒ3xยš!Lฎบผx>Hๆ ‡๕ฌ\อ จ}Rอิฑ5z๎๗Jศ7 Z๎r Œ+Œเ)ฅ›}จBšฮ๕ s ๓ฬ– '€๛;%ค๔FงฺณDuอXW<ล[ EขDุEฃ5x– 'หห๙๖นJ†t ิๆ'๋ม็ฮบcŠŸพTผบ6ค!ืcU๎๘~‹ืน:ซN&i;‘pฌˆฑบu์ฅq)”Fzc›เ(,๓~๔Wง๊uZ๐\๛kœ`Fฃ5ง๛ไ†ยข๗\กฮ d-๚Cา๐แ๕Eยภ—j[แถ;ั*Un{a็ๆ4Z…Y}“้„่>4ฝz๔๚๒ใ™ iใ‘ธ†ถป…R๘<:YUm?ฅ2r“ธ๖้tซั!*lrฯ™ธ xd@)Ÿ’gฦRo•แี 2Jฺรนxซ สฑ)ƒ”Z—๙ัทrฬ๛eV>โj1A >œ† _€CฮฦQจว/”พแ;–ข1ก/"lˆด฿$]8Gททkจ9Nro( า,U1ูคไฌ(JE฿NG>PิM‚€ำ,ฐŸo๘tVลศ๗๒ศD&LPmŒq-4 ๙l๛qพS|ตบน๓ว ‘ไ๙๒ฯ:^nขลKฏญฑฅ,•Y›๑oฦฬqE ‡ๅึีซ’…vDฌ–ะ๕ลาy<,š๒ฐูปร๓๕“2ีG๏๛฿= ๑w5หจทฌ4โƒฑมุ๚ว็ฦฬœwcZiญ“0ํย๘iน+๊!7 ี^•งน|^p| ac{ๅย*Y”ูฬษณฐ;`e"JSํ–ู0yฐณฒงBฤ^~้ัrเtA…ซžw:7คฤ2ัผ..T†‘๎ฐ์g’ัฉ }QงเาูPฅฅ^ฝภป[|ดFZ๘aK Š{/ฬ(Ÿ`+–’4w๎|&ผๆปHผ9–Œฬษง yฆ`ๅsฑคU$jค๕v_ณw้‰”Sฤ๙+Nจqเ6“๘ํg‰นmภ”จณŠกทS›VUษ&8$eฎ>|ฒpน‡!dษณฺช‘sP๙Vะ4ฏpฒฑฮ‡D&ึฺ2ฉ€๛ฏง™T)ŒAัฝท!ก๒๔ކC\k๚ษk&้'สrRœ$฿๛ท้9ณ๘š%Nั7n“ฑม*d6†ฎŽ›๕ •ูi\ีา—Gศ๐ŠAซMลฑ^๐š(ำgnW†[ชห“+)งQŸŠ๔ฏxz[.N?ศžรˆธน~ฝPศz_ฌำtz(ใ{pn{Dึ•๗๊qฉ~มฮ$ๅq‡๓๖R’ืK-G5นเาˆbหDK4œุๅญํซึฃณ/Y"๓ UืŠร 3.ถz-ศjาศงก๎็ญ&FAฮK๑ธ7’ฦมHฆ๒7Aa!~ํๆw'๓M_๔๒l๚,Œmน๚zผˆ๋ึว๒ๅ ฯ„Rโฉfิ3&RXห`'ณrถฤXธJK›ˆิหNv2ฎฯฉcผB dวS†ym_หล3w†Q ษ.ยM”.ˆŠขะู จ‰ด]ูฝ-็ฎถgธ™œFสณญ*+S๏Tำ3ุ|บ8ฃตv"‚กe)hZ0€๙”คzWE_L็Aำ๎บ‚วw#ฤ๘Q ๛ึฒ3ว|~ขขqฉŸ6๏ๅพๆB&bZไqUYภกิหขฌ๓ขฏ)ฯฟ%V|\ุิxO๕2‰ฏ9ฬนกฅwธ์—)I'&ฌวโWำษ‘'g#มุG„O”€ฝF3"้<ศ /ุ –ต=IษฮkฝBพ’Gมฯ*#w-‹Pใรร‡>’”wŒั(๎ฐ:ฮH็ƒี7Š+ค%้ัฝภˆWฉทh9๋`~g้๛ถีY3(ฎbuร%วjiƒ~ฃ[ฌผ‹noื(ีSฐdฉy๘…r^uลmฝDัณื—Xฏ๗ส]&Qž๓งUHญ…)๙ำ?y@ฑ์muC@ฮห:ๆeน ั๓ว]‹O$ Hร”gW$BB>ญฉ=ลK`ถˆ๗VMž้$q5+ฑๆHด†\ฆ๚y๒Riู,จ์†C ~>ฬ A!ํ0Š]t@I‘{[๑ลบ„‰‰C๑ปR‘ย‡ฑcŒ^){รt|wšv4Gญ e๗้Aƒภึ`๐•๚ฮSโivๆ˜ำTอธฺ`;g3ิ57oฃqู~ึe/ น}มlยฃด5๗Zฟ๚@3&๗ซGyแ๘฿]Mงy*t3SWฬขŸ^น@ศ ื่ไฉƒี,ฟท‹>Y,5ๆbๆึk๑Ž-ผงR”Lf{ฒาRหOฆไySง่€น2!›ฌPMb•ลล .K,vqฌ7hอh Žศ๘+ฃšๅLมะ›i)๔mnัr๒ร—้~‚5P]Jย0!UWŸ€**์K&Sฦฐ;“ล•๗ป†๒”cjฃ:ทไZH๙ธ‡ƒภwส%†วsค/๕uบคผ’dปูฤVื๛ขลQ๛ฌนไe>sS์ฅํœ6†I:žค๎บ4๏ิ4ผมศšถyโU๔ƒฦ“žฐ๑ฑ=VgM,๋PB๕ะ))ค๛หpณd‘ิDawuาศ–k์lำ˜พ!%qmฅง?€7ฬ ‘ผiฟนง๘a๖กe?็Œ2ง0‚vy‡EหRkมห\f ’ร5ไู๊]ป"h”ฯ#_ฬ7rJ6^๖y@D<ยฑ}cงอOKHฅแยฃ้Gผ6฿Ÿฆ๖7m๒ 9KงOฉท* ^yDซทXŒ`!ืเณQxcคฎWvmฉ;๐bjุa%n ีe?ปˆ ธภ๋๏ฐซ(jM๘ขำณMmกK๎โFึ ีฤูญ๘Cฤ ฤๆmณํ%๒‘๘Sต›M}Zญ;วgZเ—œแฑ#Y3แ_“ฎhฆขเญ๋—ฆPว\Kz๎‹Oิป็ฅ[_Qmrr D‘V•.ร‹ฆย ๅโล'ก…ะฏd้y%๔ณ[๋ฆ*0ฟฒฃๆ;•Ÿ๎ˆX๑โ๙&†ขจบ+ูฮว,D่!ฮ’‹ฒ•=ˆซทิ5 ๎๐7้|Iyว฿ฌ(œE>›xผqกยPลpƒ0๕I_ ห ๅN฿ุƒ#›œศTีโŒY‡ฐEา ๏ “ญ [ฤีOช๚๔฿ฮ๐a•O~•ใq๐ฬฑEwI/wxืๅ๚ไ7กช่มc–ฮ๙ทลแทzFŠท๛]’MฝDภ9ฯฎrฺ้๚0๛L4ศ"ฅใงŒ_ Bnม=๎ ้ME฿Ta„Tfqฟ7พฏ ๗ ั๗๕ๆšดˆYษL็ฯkฅB*2ฯf๊ฦUจF0O พ`y•๒RwI›๓ฒว๑ล&L=e[ดCหค€RAใํƒw๎7ใ๏?ฆำ-นe %จX์ตถถ;Dณษด;ป๛*†.Oำหัะiภ˜S –!F8$๊่ึ:ึท-ฌธึ•Š–ฟQน-hGTฏZี๎[…Ÿ5qฤ#ž+ สfaูCG“(eไซห๗2ธ๖ค}7aหp฿‘|JิL/œh๒ส”›nDๅa sk๔…มZฦ•ษ6K2ฏZมม‡`R%,“2ษ~ฑ™€u^ุ*อั xˆ Š‡ฬ๑yีฐsฯw๕•ี@€9wื“vนมJžฏA:w<-๒Žำ฿Œซ€๖ใปC-Ÿ• QฒJ:z)”ชNหFt๘ƒGภซSน๏ค^ซฬnw’๖฿/NvตฑQี๐ฤ#N‘ฉDฝ"ผœ’ }G„๔lzp%อVผห-๓ฺ[Rฏlฝ6o๒ชvฦ-GŽฒ›๓j52ฯ~K๐ชHก?IหC์แฺPญB endstream endobj 965 0 obj << /Length1 1396 /Length2 5927 /Length3 0 /Length 6885 /Filter /FlateDecode >> stream xฺTT”kทฆ;UโHืะ ’20Œภ 14า‚ˆ4า’ขาHJ‡คt‡ƒ 1๓฿ปึฝkึ๚ๆ{?{ฟ{ฟ๛y>V&}#^0ข ‡!x๘€’% (ฤ ฐฒC.?nVSˆ‡'“o%๒)ƒ(œะ๔rD%ฤ$@€ (๑/ C  ๒†‚:|M8 โIภชw๓๓€::!Pว๋ภaฯ ใ๙•Pp…x@ํA0€แqEhrมํก„฿?JpH;!n’>>>| WO>ธ‡ฃ,'ภŠpB—๛“ณ๖+dowuม 0G€ิะSีๆC๘"x ๘'ไโ GๅƒผAP ๐ซs@UมB ๘gJ f8ภ=~ฎYXภส‚๛8มแฮ.ฤฯ0ม?Žฐ๗๒๐@๕๐‹จ๓eา9โ ฑ'˜›†K…?ช ‹ฌQ ๕แ‘ฦ>สB>ไ)ฒมC๔จŒ?\M5ส}>ฏ๕Juฎ[@ีๆั{]Ewไ‹ฅ™ฏ๋๕Œ ~ย็ผŒชŽŒvษำท็่“itฬำคอh๙fŠ ’ฅ=h๚๔qd๐ๅภŽ=Fฌค์u]ณi>l๗สTล4#๊พ๛PS๖\›’Nยt‹!ขลฎ฿xCไ5{ืคฐตxซ˜Llf-้w—ฉ>ีd+} ไ๔qO4ฝC7Ž๏G"ศUค๚้”…qซM Hฎ๓Jฝ๗ฒ๏ุฉ•฿๗T,sf ๋tOึO๗ฌ™ธป_4Qwใํkซฅ>ฮฮOH•Nฉ๙šb5][บ็+0๒^6„ล46~%,Eพฉƒ๑ุภฐใ๓x†๐ัEวคWyลฬ้กไ+ำลษ%œ˜๐๐ฤฆP=ตืA๒$g๕eBEี…gษc3#ฑc'ข ๛;[ฏ๑<ๆ+&ื\Žอdึฬ๕ศค ƒุฮ๏์&ุ –>-๎E~Šญ่๊zฃ๎Aห๙qE์๊*pอสLJ)Poๅ5ะ+`มงฮทqฺ๐)G˜ูq‘œเBอZ\t4ดJW่„,ึ๕l vœxS ื\แ•„†ี!fpF๊d๊‡ุ˜,็#-ฏ๐ O๘ุ+บj ๛ิY=โ]๗ย-ึโ] า๘aSม่$ไ‹‰ัฒ\หOCา๚่ํ๘๛๕ฬากธSK‚u—z/๒@5-ญผ’ิ)ฮy[T—X–ld‡#๎lภ=๙ๆ฿TFjิ0N๛ิโ๔ฆOR ึษ EฌนŒศ„[Pฉ>ฃอ}’;šPŸx@†-t„E€RึปใV5ม&ฐฃo`t+‚ๆˆธะด)4๙ฎ+ู๕*ํ‘ฌ’—H;l9๚๐ฐ,i๘x„€๖ญbNbฉ$ ๅ'•šั™๊๚คImak'ใsฉsผ%R‡g๎kH?๊สซbYqโ"๒—=๑–œอo)kด™\pjๆฟๅ,ำ*šฏ‰ะžœž๛d#ี฿~%ไ‡ฅฐMJขiชๆอŽ“S=|gDe่cึfFไภฒใQ> ฮ„1มพมO‹๑ sทW0xโ๗๖ถO+žvญh่s“ส๕—ํk|ป%;•gTศตQำ8jฝัท‚ด”ั”R„ซฒ~ปแำคฑ฿๑7+พ!ใมŠ๏‡cs1…0'”'1•๓''VM๎i๋ผซฌ์ Wฉา/bhื>กไPqผถM่KฝG0ฒท6W๖PปฆึV฿ยฦดแกำ•"ฦ๐ „/กืฅซํZ,ยย}b>ม™#๋ใR~ๅน-ผธ๑S๓2งcโ“7๘ใุฒศvยaฎgฑšํL๎ง๋ทไ…๚ี!๙ถo.ถvาlย‰”4ะฏˆฟฬwmQƒD^1b๑๐ž4-uKต ฝ_œฌ4฿ำ๕ฝ๓ฐpึหฬฺO3ฑ„ีิr‰)ฝฟ–5—าฺุa DภYJถvS6ข‰๒EPี๗It‡ฺ๏ย?Bs˜๏E–‰UฯbฺP8์ฃuเฮฎ6˜yฆฟxข—:ผo๐ขปคaทˆvึdูหชd!sผ[rาๅ‚ม๓Rฺปเ5งฎฃ_จขQq๚l6š{&–ไ>ีAี3ฝสoำ|ถy)ฌซƒrlฑ!lฯVUฆ>ูxซทaŠู้Y˜;/Qิ ส˜%ฒฮžน๑่’๗ฌ<๗๑;,ฟ {ศ“๋4•ฯrŠฅ฿์@ y~ณY๏}r=ยพาบ่9ฦฃ3ฌญ|ๆ–๗ๆไา6ๅ-Mxเk-u -ลฎย.1ึ„Q7 ็hOZKใ฿uฉ‹ฅู๚‹ทโœ๔5esBF1สล"๘ณ ปฝ kQ6-Tฯปร๚zW๚Di๑8ไ…5ศL2ุ‰๕คฆQ๐ฎฆ,&๙ฐ1–j‘ฉxๆhgk@fึ/pอ‚๓เ&ˆ=rRมฎdpๅBฅ๙ตXwพร Fนษย“ณ ],N๎๓)ถgw3ฃุ‘่vถฦtุ ห฿†<IJญoซฏ˜v[d๊ดcแ{o\ัFคžร1…ฆ4z6<†ฯรรดm|bถT|{.ฉ๗Pฮ]< ะ&,ำปี๚ะEฅ฿ n+ใ9{‡ฟœfฏmŸxุ!‹j2าภz€Knyิจ.'7Oqท7ฅแ,้ฐฬnF4Dะม=4ฒิศr(๛๐%ยKšีƒ๔ฤ T†“7ี;ฺb@๒ื—3–YZ๚๘o†ผ‰qบ)vส/ฺ);บ Eร7ฏIbz๚“ –ฟฆศu\ฉน๕๎.jEJˆbh์v 0y๊ฅLx-ฤpๆ8=ฎ๖}/ึ™*Q†ดNเดญ๕ษาrN์)ำ0๎…nš2wOฉญVšท6ณ Shธ.\๙<ขดTI(>wขญ๛ะ่<}ƒRF๓ฮ,ฅโญ6ซฅŽŽ้หw†๊ญห6^๑;ถรCุ๏ $๓ทIฆ๓ z,˜”- ;/3๋M็4OฤD{'j@ฒ฿†3J"n=่ ์ƒฎd๏= ฑo |กธํซชโO็ฅ-๏EW2์LไVC)ีฑ’ฌลตbุ‘๓kถlะ ๚'˜bฐ„๐–B/ykสk- 1&iQžd#๓ธ้,˜สืา๚“Z&uXjฉ๚y๚gŒFs—;ว๖ฏ฿MT<๛’bา^vkNฮ๓๔฿๙ษฎชด>๗คส”ฟๆyำ N‰?lฒำžepฐไ3V kธ‚ค{ฆมAFJŸu0M๑XRฃnห2์iƒ}žrๅEG๘“nด”ญบ˜E$9ฦฅEH•a{dดภwฝfต๐ภ–$a“Asณำ•—gvข*Ÿ฿๔˜jว‘มุ7ญHeหh64ื๋ะทบฏยภ7Fg ฅ#Iaฺ็๊…L๐~O๕wน4N?ฦุ@ pUเ‚ชฏ? ‹vv9‡?\f S๛”`y4,Q„ตูz" \นฏMฤ่fผ้ถ๊h~mZC,(7Hฯฎ| ๚Nน สŠR(ซึTซ• ?C/ฃ-พb]ฬกิŒCรุT“.ฒ ขsVนผ2๓เsค๕ๅMิeWณxSีค)^ไกmoš… 3CUŸปฎ๐ฎ{฿โหษ๛”,Ijญ=tัฎgtP‹ห~H-uฉ๚B›cใ79ฌ/g๓›'L;๕ภsol(ปˆะ๏B>2`†xI|ˆŒŠž:#L3๚ฤ0ฒ๚N๔Y๓ฏœi็ueEyฯถf[ไ}ˆ›ำ1wX๋ญะ๗9<ว49๑XฎลจณƒZซ†p4าุ9ถsส้ืชsŽZ>ฟว˜๔‹วฟโวฆHฑสฺ ~™–•tฏfกบŽO—ไ}Ÿำ,vDๅ2วlqgใ!ึซsซไ3(R๓™๋qว”‡Cท่:^’,wKCpf 6—๛จ•Fr_ZW1๗fึf&gธ(Hงogฒนๅ๎อxอํงUชp๗ึšสศ;ภถ/ ฆL_.ธโฬ‘7eŒฑh–sRyฃ 2C#Ž๘Xถ็‚์t๎fํว–ˆผ)ปk'.ะ#รฑFoใe฿ฆpษ‚พ์Q&Ei`uฆXfi๑๊ไ!สอ$}่…๓๚Mถ/žฺัžฟVฃ~ฬ{v8๋ฤ_“ิ~ฯPfฑฅœZ๊ฉธ(tz๘U^lฺถ้๎G<_ืdflฺPC6ใ์…\c5ึฦอqPรv5พะkFาั>M ญยณฎHoฆŠ‚ล“‘F“๚}Aถ•ZๆLุ๎ณ$C…cป อฑๅ้6ตูJ/vŒ)ฐS"ๅH/ พป‹ญคฏ3\h\ใํิ|‰‚ฯ์๎๔ร€มก‡๏ษtชE‰:๏FB,ู.'4fฃ๋น–ฬ LIงR5ฉT ๘ก~ฮasข’ฑwKŠ๙VทRฺฉ๗ไลEM„'ฏ†:?ึ#“a๗ฬcพโh'๐์>sI< ‹ชc™p๘l—B$ฒ๑‡ดๅฒEฟoัช$๐ำ ๛J๒ฮhKO๕งŸJ”โkppn>LำIฆ^}d๋๎ืชป-*yว[ฑzg€w>คXUล๘I%‘|ขนL๑@—๐มฮ!๛œ`K๑ยX๚4…)๎"@<“ค)”ฉ\ฐ]คrrMถ1_.Mลก„lภใ]ัWw1ซLt์Gผgั~ฬฮๆ…(์]|W๐ำ-ฐฺสlื็Pีแ™ด4 ำา<Š;nู๊_ช~•\ไŸv๎TŽo๓0ŸัKฤfˆŽ@T๏่lˆU(หผlวา+ ’รS"ๅ|CC~น'/`๎D„๛ึ๛่<Žว*O3iยlm “ฒ[ษ†,หQ๗ฑu็็ฐฯจฏ {๕2 ดด.rJ_xK3๔นฉึณไท–ถžฝs‘@ษZšxŸ!์๙“|lSไz้nฎศI„‘4ศ;ๆา์มO Ÿืsฮก5‡'ื•๎…56 Qึฟ4ํ๐zvjไx“ฏฝใฏ)Mฝซ;2์\/๏Š้Ob#ำ"Mหฏชอฒฎ# ธ5‰“2ฏ“ำุS๓XZN\ะณคb‘kzื!อNฬ.ฆ7:alฮหหฌZŒ~[,]ƒAณร8ปcร‡|๙_๒ฬดล>O?VžBฑฦ‰้6wตTๅ&ปg`ุ&‘ฬ(ๅžโ5ล€‘อ๛/ฝTI๙ B7฿47  ๖ti๛ฦำla%้g…ฉ‘fg9†๋๑…›มk†โSo๔ห;cปชvdทๅุeHหฉธฌgดป–ว†ฌr๐\‡6็็๏๙)คDฅHฌPึ,๎…ซถข๗ZˆจM;ึ„=ดฦ๊œ ้pฉd๕‘ 2ฐโใ‘G@Q7ณ0กQควฆ์5aณ"[ทˆ˜ก<นสฎC๓zใuช•tpฺq๑ฬWZฮะ^ฐhท‘มW๋ธ๎ล๋Bซำ็SkKไฑฦJั๐`>—<‡4tงbpcะ๔ฤึ‰ธด|†แ๙วยผBqfฏท ƒi็5ค DฆŸ"*DH็ฉbชgC#ซฅ[ย"/ำยXj~J (ฉวแ'RT}ซŸ*”ŒฃGแWูตคB3ี|สKuา]๊Lฌใ„^ๅว3ฐ†–sjไTO๛hJ .u›i~ค*{ถ•Hึ๔Œfษ๕Ž$๚n:^~HDTy"ำงE/š)Šm๖$\๓m๋X<ๅไถ$JT<Ž์.XF K7Zญฝ o ^^Vาณ‹e_f่^ข4F็G ๙0ผ‹Eฌ}2์‚— ˆษจูฏ็y1vDˆฉ๙๚——nx•#ˆ‘ล˜OŽhช\วํปIOุNฒŠ๕yืถใ) ŠŽ\ขฒ.†;0ชi๘co.ด‹l‰…้ืญล๛แฅถิm[์“>12แ'fธZ๗;dิŸ๔-ว.{9›ฉr”ึ‚๕ˆ˜ขตsTŽrชV ไ๖ะ=> K๛บ๔ร|ๅaุ฿Iฒ3อโg=‰ฯ›ww ยX‹ํ>‹*^ใ6P^9_nฬŒ ค๖๊_ฯŒ!๚(alัAnภqˆy๑&Œฤ๏–M๋Z๓S0๔o}’†๛V–a ‡dPพSR,ฦ ฤRคญ.ญ1k<+CgbีUฎตHภ ษtP๔n‰` yฺๅฆไเŽฏ†ฺŠอำL+2‹ไKfqโj ฅ`{‰"xQำ[xฌ|๑ฑ‹บžงฅ฿ง=ู‚1—€=ข@™พไข†H๔œนต๑ฯ4‰ำึ$…๊!Arไฦร๛Šถ๑๊อŸาIš™š*‡๙ท8฿ๅ‹ 4qุBฃษ฿๋& T-ำุ‡อฦPำHDnZ•๖92“|ึ(˜ฏ๕กฏแ1่4P•Dฑ)‡G:fผAB ะ‘BN=’Œ๓ู ph}y•ญiŽ๕LEพ•]บbWlr๗ ฺญg endstream endobj 967 0 obj << /Length1 1406 /Length2 6175 /Length3 0 /Length 7144 /Filter /FlateDecode >> stream xฺx4\ํฺถˆhั…่†่uั{ˆ2ฦ`3bF'z ั{ ัK%บD ข๗hัB๔ ˆ ฿$y฿sฮ{ญ๏[ณึž๗uท็นฎ=ณ6; ศ€_iUA"ะB@I€ขถ™Šย„์์†04๚ท๊Š‚!’Pt…‚ั›j# 78@H $&)$. „@‰ฟHWI€ุf ะh P!ป"าลหf๏€ฦิ๙๛ภแIHˆ๓ศ;C]a0  F;@1!`8ภ Aั^Hม๕ะv‘๔๐๐;ฃฎ๖2|ฺ EA]กถ€_#tภฮะฟF d:ภPH;ดุ ภเ0ย„ธ!lกฎLu€บ@ืŠ๘ึ๚เต9!กฅ๛+๚W"โw0A:ป€^0„=ภ‡tUดะžh>a๛ †ฃ˜xฐ;`ฟ[Tไ๕`ฬ„อ‡‚ธย\ะ( kFม_i0ฌŒฐUD:;Chแฏ”`ฎPf฿ฝ:\'าแ๓๗ส†ฐต๛5†ญ›‹ ๖ฤ ชฎ๔c"ทอŠˆ%ฤฤD…ะ'จ'ฤA๐WC/่o็o3f?ค ภ3ิfล|๚ ภ๎Pฺี ๊็๓ŸŽฎ…„ถ0`ต‡!c†ฺYcฮ฿ๆ 0b่'๚๋ฮร0[$๎๕o๘๏#4yคฆงชว๛ืศr*( =>ย~ 1 @HHH .. ๐๛g๖WซŽฐC$ด‹ูงฟ[v‹\ „๐ฯ\:H sกฎ1Pม\„ฯt๒c๙ฏ,+ัป#78ทŸ๋เ๑ƒapฏฟๆบก1*ะFbด€๘oจ ๔tตกถ07็๖ชฃม5ศ#์1Œๆบ/ผวCฉภ<กถ โ๐‡5์Fฟ๔‡!  $ ๖๋ ƒ‰ห‡ฤ ๓Aaจ๙ลh่Ÿu•คํ/ฑ ‹Šภฎฎ`/BฬYcVข!Œ*mกžฟษ @ ั˜fF?€า•๐ืม ‹ม..ฎHO่7ฬ!`œ์๗‚(foภฎฟm( qsuล(๐7;0ฝ-w(ิ !œ›FBคB_‡ดžWหำ{๐o แ.ฏดGฦ™๕Dˆข9f^๘8hแeจŽ?QฐถญคLอ–†M๛า๓์Ÿ{>~—ธ”ข–‹ฦR๎YS8ไฯ๋~ฮสd‹คณO\#?ˆืc$ต6ว1็L4™พ ๏ู|๕นเชต๙Hbเ (:%cIกGวศ็ด๏`?3ca[A˜=&{Nแjžๆfจn4r… ๖Lก5š๖ปืš๙๓๔ลล๗Yฝ=ฉ"G๙š]Ub•a”ดwผ5Xr๚hฉโณ4 ฐ8DOK“ใXi ร8–nZ‹/˜ศ๏m‰๏qซทืQ ผญ๛๔Cƒ[-RtZ:งs้ˆมj=ำ๐ป 1McBค_u*›{•-ึ้@ฺA•<ท ‡š €[>S{Y\rfฆ…ฑ!๏iฐˆๅ็Qšs๋˜Œx!a‹di๘ƒพO/ฤ@p&—A;“—“”t์” ๕›:,Ž+nƒ๗๘พฝ์•›2'"Nถ฿ทt†"ู๖ฉฦใL2vบทใ฿จ‹žN’๓(‹กk4gVฑ9ฑ๚น98 –vUฉGrณฃฌฑฦ"คy†ไ3†Z›Xi:f’ก๒d$”N๛ฅŒฏ>Vˆ}x!ิ( ๘t~๔๐†’n,Yอฺmฝฮ๏ท,ใl\…๑-5s9X๋pj ๏วมvโ.ทฬฦลง—rฎญ(Kž>ฮต‹๙๑ๆIAฎฉ|mฤ#xdRวธšีหŒmzŸ3คฝํjใL๔Tซฟ8ล9คดP•์c )„—7ฤŠ6+.๖RE™๗‚ตZO๑];?ุ5œ|'2?“บฟ่bนUฏsเ๒ฃ์‰‚€‚”s6TBdญR;€Cย‡(ยุ_‰๘ b๐h}๐4Bหมฎp.ซ๙‘:วœํYcyํ…ชหแiร"es ƒ FŸ7ไ์faสƒ๎ ‘…O‚ฆบb๏ฝไ‘5๛Ow6-Lžะ+i7แF˜_.>k$ฯ7‹๚o R>ิบ^ณnบ]ูTŠTK๖!บ๋9N{ง›ณฃีึทI|~zaขรฬจŸกœtTด—;}๒ƒ#i- ฮฌ๒“๚ฑฟ9ถพƒะ+&•›ฏE•#~ผแpbลs @Qแ|'~ƒป2˜ืn„&K{gนึ๏ .หแYŠ`ฏด๔ืฏ๘lQๆถN6 +ั,ำํฮข~;๚๕ฤ๋›4฿๔ษฏญะ&R้พฆ๕นษq+C๓|(ฆœธm๔"หวwํ7=?ฐศ†J fr๛๑Oœ zผ‚qt‚š‰|IgๅชT-หGใฅัkbลๆ;มฦศฺิy๗ๆœูฮฺ$fฉคฌ้มพตโ๒๖วฌๅ฿’3๎Ž้๏rืWLž-ฤษาSr ค%™ณโห้ฃฬ"msข ŽฑฑƒoสซŸƒ,ฑหjำ=ๆ2(‹lี๛ีผธ g"มž?โ˜ข๚w Œ@๊ตv>šรฅC(บPข!ณชึผ=ม]๗wฑ#ๆyM?f™ตุu๓ไvาี‚ร).8Ÿkผœ๗wŸโ๋eซcu0*ึ–=ฉ‘]Itแ™w'™น+=B๙ญฉ’&ส่$ˆZŠ$Gnิ>ฐkะy้…7้r‡ิWล'>ณ“„„จ\$่{ฟค<>ถ๛โ>jIฎไฐp๒p=฿'=}U!yp{ฺ๏โm๏\JุŽS๑ุkiตฺช๏ีฤ+9 ำƒฤ๘ฮ`ฺฯ74#.๏;้J฿ป.—›6$”,ภ๙AHๅgKw?;aOฆ๓ˆใ?นi‘w๗์โอ๐์ึฤcdKๅ Ž่ใ# ๒๐ไุ๕7จ&ސw‚qซซ–,†`โc์•Šนัฺ๊ภ6ึ<ฉุญไK7K,ƒHByัฃt1i๒๙|wฤ|บแ~ezlอH+kุ่Y)ฅ… ๎ฟฟŸOฤXoฟ\๎D ๏3† ษซRxุั?ฟV7๑iสงŒXง4๋ภ๕ฝ์หaซifEง€:h}ฃย๘ใ๚p_pธ4รโdKvŠ{๏ศOLs ‹ฉแiUŒซๅCญDœภ๒&hEฯๅŒเ]Y“ซุY๋;ฉยฺG)[ฝ๋๎ณLND^ไฯฉ๋ีผ\ค่”๚gึ‰Žด{BYฃ’‡๚!‹™6ชŠฒฌ์AพะลB–ญš”!ฑ˜มB}ะ็7M’?&น๛ž+฿›*ดๅฌฺ่่ ็oj z/Œ%H฿`๚/|ฎƒ>zvแ.‘๓`hีฃKบ๎|-’#oOๆb ƒว๕#ศ;sุQ™Zj…“อš 'ว 9i฿๐žไ๐ฮฬCฬผ’{†Z s3oRZiˆพฒๆ—ซลRใ^ัsždิŒž–ข J๚ HmekLฉp(น‚อ‚CปฯœtL๊อ๎ฉฬ>R๐ซM๙โT;฿…ทฌฟว๕qjฤRx– ˆ-yต๋า‚=L๚๎๋Œœxฟ[zŸVoฃ™ช2$ฯ+›า71๖ฃ;3ล๏ำธ‚\ฆ๎$ๅzศ๓ษืs7ด{wf+Oฉwะณก7/ี as ลบ/๎:๛›ฌชb~DEปฤ๛xน9๕By๒wใF'๑๚nVsญ7O}]ŽR-ฉ€‹iฺั›๑^rอตฺ“กส๊รYv0ฬTPฤีAำ•\v@๋-ธP0็=ฎี๕(ฤท)R้S๏}~า๏+@ๅ=—†(บGว๒}+แ๘ต๏Whgๅื“šตกแํ5รjWyๆX†žจaํ|ฦPP$O (ด4ถศฎจหร้c8 ำนšท8~I,Œ5fด๋ ˆ ศ8{XWe, ๋  ˆ๔>|ะใQ(c๛ำัห0#&ฐซุน๏s๊ ํ“โ๖Šด๑ว๑ณo›3nHx฿jู0ŒP\๒์F?mŽ๏I ปUŒdไูK•ˆ๎u™R–‡tฌ2ฺำ<ฅ๔tฬk เร:็ตชž~•จK=ฎคu ๗่ฆHเYˆT-ภp๎ั๒ ๖]ีš<ฆšุ๓ฦ œsŽ?ศ3~ไ&@์ŸŽฎ2lM"๏J›ื^&ัุ98๚bฉ+น2/:”D=ฬ^h๎d๙zgษ(ย7+ๅ๎wQใป1ฃจํ' @ฟณหq_้Ÿั˜3ขบพ .-T†ฤืbฆ็~๋‰<„Œผ๖.๒|ี|๏ค}ห…Eษ๛ƒฤ3ฟM%คTีงฮ2๙ |T)กง๏oๆง ๕ณVšฃฐX< Dtด$ €ะ๕ig—ฃ}pd\uอjJเOซรm๙q‘โU=ช/ Lฦ'Oู%”๓›ฉใฅ ŸYศสทฒ}Žjว๖…rี@aื3ภ9ฺ•tr6*ใ•M:tึฉท›“›ล**œCˆ]cEY‹"ŽIŠัเ๑‘์ำTfธ^ี‹Dฝฯ้‘86+%T‚.ว7๊_0&>iW{€cu=%Ožะุกิ›ฤ๛™๏ฌ๙‡ร[๊แTGn ๓ัš9LรuNึหฏœ<ิWOL o Žะ้งขŽ๑eK…iนsG์Nšช๖’WV๓ฯฝ๎qญUYณ๔)ฃ'+fiีcสr –=›N์6สy+ฆ\Ÿ(/˜ฃว>ฺ๋j2ฤ่ฝdป`{-}‡๎SะL–์ถญœ„›ฬBคŒ.…d{Ša ‹GOก‹.KaŽ”ขํห•ด[ฎ.mดีBwฏrUศ้ศ:" ก(Ft๒ž*็ูชโใ”fnœJ๎S๋,+ๆ ๒|๎š)ฎฆ‹ฬย๚ฺฺอ„๕ต!ฤOz9ชฮ—7Dtฐดกj= An>๑ิจึๆ‘๊sPฮ3^์สา<ฃgฉ5*฿ŒฮAฌ-šรaaผๅญใfํPqJY`9W๒)>ฬ–ž>CซNส Oโ—™:\4๚ีท})๋)ชอฯ๒ฃ๘j’uฏ^ฌ˜ฉ1ฺ%ึฏถจ๕๙4z๗้[šeะ’๐พ`S)™LQSš;2ฆ“u9ย๓KmบZbW‘n ๊์๋Uว=;อSีœ9ิ>ีฉ3oฤQฐฺŽPฤ?4ค๖^ท#ุ$x8‘’}xร๚>ๆWYYhZƒณ๕je‘อฺOŸ—4๏ฃใ’๒Ua'ป|๐1าMC\$Ÿlป๎ศ}eปใฤ_sฤ'K{bIDv&6ฆT๛ศโปค ญิrwๆธPฒด[ฆซRทB˜"‹M)c@+๊Rฒน,†oPิป7O,ึ_'H™F]฿พJญ{เ –๑’ฎ ใY ดQผูิ’ธ C/๏Z“็l8๏)Jพ<พ๑๘ไl6ทŸA+{'8”ศ!ŽF“bŸบฉzKiฺ฿x<ร$๕ฦ›๕Kญิล‚ArJง{เแๅ7ลงตฒม-‚ *ฌbFี@™M\์Mฝ‰ -๋ภD๙˜๔NเWิ—ฅฝ`Oค†ลสLหK1Eฟg9่AQ๒ร|ใีมาZ ๒ย7•o/ลฃjPAฏฆK{ฝ67บ๑ sฃE/U]ํWpปษD?ฐล†งFs๘VวึwDแ?M^T-[Ÿ}“บMœW…ซํพฑฬๅx]ผถ :’๘บ—i1lัฃ‡ม„&Tw6ž.ย™D ๚ๅ๓สC}๓๖ปฃiH‡Ž๗>ใ_smvท URฮ’ผ•๒c&= }ฌํŸ ™ๆ’œ…ฦึศž††ญQ>JฟฯคaŽSฺณUะYบIJ)eX‘˜โŸฒฒ๗j๚Z๋i๚}สฟvไฆ–•Iโwฬpี@Bเjบธeำ†ฮ]ย๋ฏม+Kิ/Zม—81mษŒ"์OิU6%e;ัIณqธFบร^GaEg๓ยOๅบโ2N&N…๙ฅmุƒฆUœมฏ๗‹จณHฉ:ฟžั™ …ดuœGอˆ…หฅ฿ฃง๛š2†ๆ4Mถฅ’เUฏ9ิYวลOท~เำcqํ”-N{ป๗+YNหฬsชB[:wฺgfุaธf)งืฬHส“/้,้ส lqY$อHท#ˆTb๕จ’5๓}ขBTv๔pฯh๙‰”‚ฅ^ฌniขศ๗…"ตมnˆ–›lo–ี{IถๆZ้โBฏญ' ™ำุ.[๙๑KP้ vnhืBrdg฿๕๕oWื฿`"uXฟiUdsุAp๕ฅeปj[๘แุ๙PJ//ู.šกณฌฺ|$ซ&‚V#๏บTWฎ€];^=h้ 1บจ~ึ78l๊1]“ อฺXื‘ถฑ ีP๔็0ฏ“๚†ฐ‰„Œ]Š_ู้่ywร‰:ผกgsžcYXQ—/kq็“ธiยพ~sช ญ(‡\์็fTตณHQq'ชๅ๋ฤ{์xj ฑ๘*<‡}OPU(ฯฝBตœ‡*šไk๋แณท†๖Šo7=ฅ ลrๆ[s0เ7yDKrsXƒ†๓M๕ู€tษ๚‚‡ฮFv-^&ษvฎ+บ Z๑่ฒTFฑh.‰DŽฒZnŒ}ทr-ฌฑS๎ๅ’ra•พฐƒฬd:ฉข๖ฆwืขtฟฑฆภ/vIH๓i\.Qปซ˜ขyฅxSะฃ:๙^๙ย€ม$+ฝLcŠZ'๙ว๑ิžiŸฺ‹CU—2oq?e YWN” ๓mฒฦ!ํ!rม~ฮฑสะ|2kqลŽbUM5ขsŒY.ว ๑Š:Dป{NIบู๊ลSป=๒ฒบ๓ฺะ–5ฑ์ฅ ๏ๆ;0‹Yx•็'N1ฃ51ำืŠdJšLบxด๏ยํ2น์ๅ<,์ŠŒำ;อทŸ๎D ฉ|ยdI*/โ^Aะทช›้>^ละ |รˆะ๛bรฐq้b8ทxวๆiๆ ๓Loฏ‘„)6จPลผำ”hชญพฎ5WOจœOœ๔-/™Žรˆu™‹๘ชM/นฯ=?›ŒV.๐ฟR่R“๊ƒ๘ค>๔Rฐ/…ณpxฦ6’+ Ÿotc›ชuง/„ษ๔K:๋H=฿oํเ3G่๕เŸx(ุฦฏถ^\ตไdฒฮ”ม3mOฝฅšjาิฝฆ+ฯz7ธ้โZโคM๔FWฎส๑๖…Hrผk mp๖น›1p{KะEฟ๏|i๎m+pฝaš24A๔œท{ฎU่ˆ“NMS๑ทดO›6zฏ้Nซ เนŽ=ง€8Z:oฎ๗fHใฑ#$ฉŒใryavv„2vw[zGœ"ษŒ&ฝ๎๔แ6Ÿผ(b@}Y%*Y0K๖๒CT๚ ฑ%Pงรณ๙ฺฐน0&๗sจAVฺiœ๎๋–๓2€ฉยฦ ืฒ#wEOt๗:—ŸาRvๆNซ’ฮ-wย!ฏฏ ”+iึผ_ๆLd‘8ถRๅฏ8rฐ—หgซwY;‘ืœŸ ผ<<3i๗ƒ{ZE;บcŠ&๘'วเ”7ซฝฒฏำ.ˆฮ (nั>๚%a>Yด”†๙ƒuQšrส:Ncๆ9ษ2ฤ_;าp๋XัDท๚2oมQฬz+-็]KEUถทู€ฆp็๚๋O)CF์&ผ๒ช;๖๋ซfc”Iuฌโr!A…I‚|Šะ‰9็x‰W–Wd‚“ๆWทฮใื7ท6V8ฎฅ‘ฺฦ-เ€\rqษE฿`ขคณkCฺ˜ื๏(๕๛ไhู๒8;โฺธผัฮฮ“2fŽ•ูŸU“–ฆดนEŠ๏ล๙Imำ7:n๒คขะ้Z h”า$ฒENUถ๊Vธ y%้SฅeาUš‡ฉ“8eUผลยฌา] ถŠ๗ฬ  ฏjp-–L๎•}rjx๕ศ ีป?ฑ:_Ÿ\รeZ(Q,!ธ4I $W&ฅ}—Nฒ5พBI๔Cฏ…๖๚๛B”ธ‘ๅทใ๘˜ƒ๛แบฎ!ชํF<ฐ๘ez>Sฒร<E{วอ*Kž}ฑ5ษซฮ‹จyณษื>฿ิมติฎฑzrAIา~ฆำ”'˜Z๘ ศB‹–'๎๏0gอ^kV\ˆOํกโ฿ง๒[ฤŠ%ฬืท 5ตVฦฏO37S(รๆตฉแ—ŸๆxQฎ9“ำ๏L๚ ๐?ฤJุศ endstream endobj 969 0 obj << /Length1 1376 /Length2 5980 /Length3 0 /Length 6926 /Filter /FlateDecode >> stream xฺvTT๏๖6Hwฃ”$†กC”ษAบf€!fˆกป”’””คEบ%DBZAJ:T@i”๗๏~฿Z฿ทfญ3็๛ู๛๛ฯsฮแๆะ ศรัึ4 # †HŠšPc1C ยค๚HŒโฏ™”แๆŽDฃค@ั ร`mJ0 ง‰F๊N€ $.-$! ยˆิฟ€h7i@ ๆ‰„š`@Bธ“r+ข]|v๖์6บxm๘!)) ะ๏p@แ†ดกMฦแŒัๆ@ั6Hฦ็)xe์1iAA///0ฬูŒvณปหผ{@แŽp๓Dภ_ Z0gฤŸฮภค€พ=าŠถลxมึเ„ดA ฑ(8ย ภn@ี๎ฺ.ิ๐?๐๗l!ฐะฟำ•‰๚ ณฑA;ปภP>H”`‹tBฺ*๗มo €กเฟ€0'w46ๆ C:มฌฑ€฿•รy]†m๐o{๎6nHŒ;ุ้๔ซEม_iฐงฌŒ‚+ข(Œ;้ฏ๚”n์ฑ๛™ฌ# ํ…๒๛ปฐEขเถฟš€{ธ>@!]=jJ!X้lv ‘ฎยฦ^๐Wz}ฤoงะ/3ถƒ?ด `‹m€ดE`Hažใๆ๐๛฿ŽฎH…„8าX#์(าdวšถึุแป!ฝS–{Bไื๏฿wๆXzมั('ŸภฯWPศHCz๋Oว๖)( ฝ?a!@@JT•$ค„€€fั!V๙Oจส H){J*ุ๓๏yjƒ๘g.-4–ด€๗?7ƒˆAlฐกoฆ๙ฟW–วป 'ง฿n฿ร sF:๙`9๋ม๒_U๊ฟก†ˆ?šีDภ‘ฮํUรภฐ:Gูaน, $ †ˆฑ#Uธcc‡1์~)อ ‰B่ ‘ฟ-ุ(ไฟ|Xyู8b๎XZv!ฐ๊๙็พส(4—ฬ„ลฤ˜›ฬ‡‚e“ฐ˜เ'„ี#แ›ศ€ …ฦ`Cl€-ฺ๔ืXEDAlฺ๋ฯฐฐ>าไท๑psรส์7 ฐ›k[ำ„7ย†๔ร4ฺๆvธC]x๋I<‹—ภฺ0แโr{T‚qoค†g&ฯฯ>Qฆ๊ธซ‚ผ๒ฺ4๗ฅวฆY๘ฟœŒx›ue…,คหลเ(๗ฎ(์ <{s๚ญหqŽfถ•H‹Zก๙šจหFeeŠoz3ูp๚"Bข[dฃj๙v๗ ฉภ(:ขๆHeม<–ฯi฿นcฬมตŒ46ฃŽฃu3M๗ะW{0๚ใJ 2๎Xก5–้ิgล4.cp~~ ซฏ7Mไ _ฃงZผ๒!ฝฏ:Gฮค~&†ฤ,๕wฑ#ลา”„L…ฮy๐ฌ$ฮ'๒๛Z๛E<๊ํดCศด‡^yผd& ี+๛Sฦมˆ๎‚ึ„ ๙ฉ:yยxqฯc$,IZฟ'ธ*P๏‰p3‰+ๆ5บ|จล…ด.ยไห q๚ซฉ”…หŒO’๓+ฉฟฦ‚ห}๓3„j์#ฎIk$Py*r(ๆฺ>๐\ๆฒcี๎S๋อ‘ฐpLŒht าษ์ฃฟ้ฌL๎6ฬตยั|ชกว’ย{=Vำo๙)๎ซl๊…่ }โ`!ฎณ๗จอ“‹ฉๆ™๚ำก๏puสภื็อ๙ฝ ๙Wgไ*Cz]ภVฺŸ*ษํณwLฯุzท฿# ฆeอqก๗ถษsืNHเฑุ<๑๊ํ้๗zjไ๋า)ƒฆืMลu&i6ป$บ๎+K๚ทงf@gLชu๋ฬ๙-ๆฉี kSwg+๔ธ๏ธฌ<ฅm‘ธK2GiCHUรตor๔8{สยฝ^ฎKG{<โH“kษอ,qJ,ฤ_;ตจeุฯ_!˜4๎ชนY|มธป็๕ บฝ”ผส"พR‡าำ‘{หn$แo'ฯโ&ฤุ˜utฯ๘dฬสฯ&จn|‘™ฌซี‹ัษฑuป`ฮPW/n๔y X‚-ฯ_bโ๑—ฝoAPF๛#pฯูซ 4‰่>-$=7lˆซ”Hฃฉ–็L๗ง*ฯ—๖:.ัy:ภ#Wณ๙ฝ•zYณใ™-บy.ัา<ณ˜โi่็}NšQBถG*๔?eาคฝ)Mˆ<วะŸ›"Ÿ฿€๗ด…ฟฝˆ`3P์yHืฤ@Tั“~บ๙M?ณKf"ูŠQ่U๚Rิู‘2‚๐^`ป๕้h0ปG8Dฤ7ัธ\;k9;];s%…•วภU ฌ๒|TUพŸฏ"ภ ผ1๖cQ8ฒ™ชzsุเŽ•ฟคrทูSสฑ~kจmžX”N๖e;๋€คfฑcฅ•M‘P.ˆซฃะ6ไ‰ฟ]i3พฏ๛ทิ๊ถf*‹y2?ญฝฝ‚7?- 1(๋cฏ"โx{บV๐>tุH*‹ๆุ`ณ‘๒k/Z)4ซ tฆiฒฃj๕J~ŒJffณ๏ˆ์๑ฆ>*'๙6ฺฆ>CI•@ชo? UโWา๓,โ+฿๏ก ๐ำ4งฌ|ฅ|‘พ$ด๓ญe‘—\0="ํ฿pŒง']u#—ห+~ญัj‘} ๗;ซaปL๑จิc}0๚ๆชRฦำ๛<ฑโอษJo{นƒช}E@'ถฤ$ ำ™ูศqวบล้๏“ำฉ‡ฌ๏Ž^J๏Cj`€=฿พb๚J•๏๔ž|ษa์มใ}†วIUทo่๊ษก”ณGฌ_ ฒ๔๗ˆ้#ัฬCp\FŸำ*ูฎQโ๑๛žCณ2ี๚_jM๘]nผ”ดf&๒ฦ๗ศ1zๆF}ุ ฮf0Q<€ปดืRใ์Ž?*VMrฏชŸจุี _XยฺnทŽตXTฎ%ฑ์ญEฐญš?&CnิšซV ฝฏฎJๅเ,ัk‘z;Ž\+3ฃา&qไ„นcGหฉตc”S]ํ3oป๏|ลGื&‰๊้*๛๘vุกตษข๒ƒฆ-! ฆ(ซ8zDุ๚.R/Po”†ษ%Kๆม‹ลsฝTํฌ>?ร fฑ’nœนVŒฺF^ศ…[’ัฏฅ GูฯวสYI‘฿ฏา'QQญpธ–๔2ย<็ ีๅAหฆัOEl|œs๚b<“ณฒtOY’—”`Oภ‰“ฏ ‚jBJ`–jU,แร๖ู8๕ษยVขx„?๐%/ฤ@F 'Rแแ่!YU…D๏>พeฝ =้ากฉŠNL†m…Iฦ`ะตธฏqIญHภ P›ŠTฎ3<'=žsีฉ\1’{ีฟ ํ“ง‡[๏5๚|g"Y@ยšไ า:วย{lฤ฿ๆถ[ุฟฦฅ!"}ฤฐp|[ผเRฤฤชN%หLI6มD๊xBูh-*2bลQำม~ฐ๛iฐถ*ๅxepเ ไLก(fE/ง๛ช๗ฺ๖PoษๆxH’|‰6ี˜๕๎’e{!{ุ"zส*=;๗กู!๗šƒธv”๑Cฮ1๐P‡–ูลZ‘UOšื–พำMjrฒ\ํ3cyืะm/โ!%Kqผ Zšx—PHP๐=x.ถ€้Q ํ5y$l\56ž:6žจฺtŽ_hY9nฯฅ"8ะrjืใl>Sดeh||๙qู2f Yr?ปT?†ฐฯŠ’ฑ›ฺO<ชฮIธk=/ษฌยค๕vจสvšฎ)ูำาฉ~๊๊LZท3ช<:”ั8บึธ-–2Jrษiึ}Gจc๋”Ž‚mmbถจด"zV[ž_Cฦพิ‰—'? ๐โณfa๑Z3Ÿ\bx-ยj๔Vญ๚B@V๗›m4ฎงิ]้!ฬฃ๑ั็ทTปใดt4๕๗›—นtqc%บ†ณฮxฬปM'ฆ’ย™o^Œ๐~ บT&ฎŽ\มไืณU3ฃ๏iฬ|Œ๛*้eˆๅตSฆูงpถb๊๑mggฑGF๕Žv.ฅCขขŸฯ>*ใ๏ฏP,๓œ”š่ฏซ7j บ>f4ผS คi!>ิงๅถ™วไ=hTQธZBฒนH —“J0*๗s&ˆaีw๖fyhy๎‡œžฅ ตวh~๑OฒAโ -๊ฎHw djx~ฉvธ9\ v7โฎ๋]?[ซ‡๗žn jึIฮŠjญศฬ‘, ๎ ัŽŒถ๑๔๚ฌ฿ใใ๒Y๎ูฬL๒แผุMD์.kฌดวฆข›IMฅ…p3ษ”„fU๘ไ)ๆต‡ส`%๛ญนจจ2Uโ4อ(พำ8ถEt่ค70Pคo}wJุ๒i๙Wrํ นกbQ%ย?DPฑ-*>R&ียฯWื)๕]‡8gBFฅ,e#คลXL<เ|`เ ›i—Šฮ>ูš๒ฐ~%ฐงกุ"ญศ‹,;>,Y๋บหld ๑๋๔Khฆ‚-T(ฬ3aํจZฯ6๎ฬฃ6CoJw/๐ZhHhงฏhsฆ+KญmหiฐCFฉฌ&ˆิพฯywฃ๊šส…ๆ๕๊Tw๔๖Sรv$อhชึˆ"bQ….ะว“฿รฒ…na๓™ตe๏!ภ{‡’žy>t๐RlฬฎP–เz}6๎ง€iฒHtI1จ๕ $.ำ๔ลห‡้‰ญSึน&โนˆ{ิพ_ŽB4Œเาdฤน๊oW;ใˆ_รเ๚‘Žำ-ษœYTด 'v‡QE<‚)‚˜48Hำ์?๕&yJŠM‚\ทG๙‡M ใรๆzt?ธ <๊]“๗†๖wัฐำ?#s[ห๑๕iณบ?be6ๆ}น2จโ7ฎ]NC\W*J‘S>ๅบj|~z๐ฮNCึชœb&2สŒ B๗sฦQฎี ำtฯ›n &๏ฃ๔คD=TนKิ๒'๔u]ฦนvฟ)%ญ๒ฝ 6›€๛‘๕š๕0ใuL~}บโ๗’ต‘s^ผIb>“yšนฉ"\๗โถถ฿๏~ฟฌ4Š‚fy วy๎ถ,“Hำโ=ป†+H#I(y่j๔~๛|์J_ซœ}งฤ8ท k=mฮพศฎ}ฝŒjc'พGน2ฒป‹KžE[-6ฤถผW่vฺmฏ~Vปx๒iž้X2€žkี{}4โลฉ–Z‹ี ]vฎทยฒ6ฉ ฟtkR8aค:ฅw'฿yร<ฐหg์–X‰รัดยT์; š‘˜‘U7ฃํ“Aฃ*Eฑฐ ƒG๔”F9ศขแอVเบgkp{H',I?;ูEธ ฉ๗}๛ฺไ]XŸ๊—ฏฺใ๛yo˜T=+ฏJ๎>#UO‘pŠฦฒ9?ไช+กHผ/ฬAฮช๛ X‚yี)๛=โ”ฯƒ/7บลF]CI˜=4๗ฦเ9Pำดวต“^|วฅ—* ภ[๏คn-ž%็Š=ฃtิY*“cิ3 กฆใ์<๏ZชO?บ๐๐1Mิ๎ฉJ๑นุ53ฒQW่{ปโ ฅฐ>~ๆ%ำFฌ๒ใภhNOนTฃ๓ฏุบMjŠ‚ชรส๚ูRz๊WณH‹s&3&แ๏ƒ๗ุฌo4_เOัfีวvณไไง๓!p๙Ÿยญ๋ …๙"WBนจง>ค_ฒุEЁ๓ตื-sYMsRqT้ๅเภอAm‰ฑช^1…š๑nnฺ๘ šฎฟฉ:ฮัฉ”Hน6๐,ำา‘ฒŠุs-ฦ‡์ภNJJ{hAEroลถฦ:(ฐๅ๖Q&k”/Jำ|9๖mบา3wญธํYิฐ)ษKถมO ฃrNdeว6้Dl:Ÿ๘gยGhต–ย4๐RZž+เศฎ˜.(”แ +.ฮ๗\'P‰ถำ<Œr=e{๚,5ยแŠYŒJeQ[cKVชนวeคแ–ฃ‰oขไตำ๙hM6๛Etท๖ํ/ญฒ8–N:s“V๙uลอq'y^,ํืฏ{า๔*ป9$S/o๒–ฯ๗๚ช1/Uz’ ้ไ๓สล!Ž์ํM๖Žโฦ๏ญป‘ยวป๎-นP 6ปh๑f"ขล ธfภE}88˜ฉŠฎโ”xถ‘G‘่{ฑšฉ่ ฒษพ๑2้/๔วVธ:ŒS Yœ… ฝ‚1พ~เ65‡๗Tfœƒž!‘Y:ฌแ#คldิQ=ฯkOc_Xk(™๎{`B&;๊k&ฒ}‚^rอ๘๖”Cซโ„b9ญ`อฯฒ9@๖~+Wd’7แฺ/์E![ซuซ‡ƒ*&/ŒDWE }ร T"เ{ฎ3บ6ผๆ57๊าอZ ๕๘@รกกk+\rฝเษ^๓H‘‚นฟฦ ข&ฒค“44 ๕M๕x?ตปษP฿์๙ “Oิด’ป6ซDกพ กˆtะ๒ใ{aดS๎ฤ‰s๓ไj้ิฎ5ฯ๛ฅ๛ณJœ๔Jโ•์œdฅป์ฑuห-—Ÿ๊eหๆVkๅ๚๙ๆฎŸ…บภwฯ‘กธ๕ฬMw#ึV$+![ิ;Mี6ทฎHผฺ๐.๘tฯ…@&'„ฅd^ajฒน๗สฃฺถฮŸDษŒ๘{ZR.ฏนใ /ฏฟwภBา้’|@bO†4จ~hุูJg ผoi&oฅถHดœ0Qธ๛๔’}'~6ถjพกผQv4rฃอxWˆa๑vฌ+‰ฺูZ฿s=ทฅ๒92/ะ…ั8‡zWฆ~ลีนฒ ‚˜นข2ํvq็Z“๔ดํIลผ๐7“ฏโ฿๐^›wqHข๑Œี๐~˜๎FฟJ&ขฅ–%gซ๚9ฬ6บ^ฮ[,]Eaตล|›๏ฺฆT€†ศสjข›`Qxณษo5p,sn(‡:ŒT็l๛์9ฏแง.ญู'รผฌEขฎ#ก–eฎทIไำ% #ูฒฅYำ(๛ฆ `EนF›`ู‹ƒซ็ŸU.฿$~ห๚.X‹<๒พ‹Oq1(๘2้<]hฃ๗ช่ญVฃrSอ๛ป8ส‡Q“#฿ํผฤ็›fฑธxCF๘1๔+€‘d,k’ถชw}eŒxŒก้้ศˆ–|็ธwยฎ)[ž=บ‡vs๔.อ˜…ีuœ—ผ)•7 ฿Ÿ,แ๗ฏ•vแฅฯๅ[xf(ะ0}]g ~ๆ+,๘9ยงฆŒGดเIusBE™ำ›!บฏ3ข๒pาง3pƒฉ~๐๓มผ๒[7๋jงRพ6ํูŠ"~๖ษ{๗VผQห๛ฦ๓$oต–„ฎ6sp‡วRU{hัท๎h<Œ]๎cญ:พ8mะอŠcูโปํŠ{๔-†&•บN๘Du9ŒP ]ฑอ7tn{่’ฏ=–ํ/ี6–๔7BŽpK:ฟ~า`a๒:ย~e่ Gช Ž๎ฌ๑D "wZ6ฮทš๒™เ{ง๊GŠฏybยQ.z8ข,"ด™ฑ‚เ๋๓ˆgІฅIึkง-ึ’ธk:Œwำœqไ๊ห๓0กจใ๕–nู,' ฎ๕ฃ๓;หแxE[—์ ๚N๋ ]ฏ›ทจ—Q๙.อS5ฐS฿>ุญs ูดZศ20TiCqfชnด~ว๙ZV๖)#ิ๕ภ=ณH“–ฐธ๗G›ฃ>\&yด๖`‡.Kเoe‚ไฦ••ํฦ+$cข|ฎ5ฅJ๊oกกฉ'ล0ำMฮ\.gŽศูสLึเRK1บ๘ชtืฯ1"Gc๑Vญ๊KZ‘eM๚i2g,๗ž0ŽZ‘็มcษษอโตใซำบ๓Ÿg‹__ว{ฎ”‡ไ™*Ÿ_ˆไnpRhiฮ๎=ิฺkFืy Hฟ.อV2 พŒงDO‡WAฟFศต+]˜53๊Lu Qฐ{f0†fฐG๏H…๖^ฮล{ส๙‘~+๊๐zซฏ9cK ถB”> stream xฺvTำ๛6า)%2@ฦFงŠt7( 0ถ“ฐ#ฅSบC@Di ้T@R”RiPDโ?ใyž๏y฿s๗์œํ๛น๏๋ฎฯ}]฿3~c3qUฦฎ‰Aใฤม@"@อภ์Ž,’‚@’TๆืLลo wว"0hลPs‡Cp›:Gภ`ะ]$,ห*‚ๅA €$ค๐/ ฦ] ๑Dภ@€. วR๑ซa\๑๎'gกฬฟBPaXAAN์w8@wG@!h€็ G*B!H€Š€ใ๐H!ค์Œรน*JHxyy!(,ใ๎t]X เ…ภ9LแXธป'๘50ภ‚‚™ Hล0wF`ุอ0Ž8/ˆ;@0 P8Kˆ๐@รเ๎Bq€™Ž>ภศŽึฝwบฟัฟ!ะฟƒ!P(ๅ Aใh'€# i๊q81 ๛„ ฑB<ฤ‚@B€฿Cšช&aภฟใaก๎WˆE (๑+ แ–5ะ05 GใฐTฟ๚SGธรก„kวKูฌ ใ…๖{pD aŽฟ†€yธJX np๕ฟ‚‰๊?6'8 R••–ภpoจณฤฏ๔ๆxW๘o'๘—™0ฟฏ+ฦเH๎p„~จ|ฑO8็๎๗๗฿Žžจภ` ลเN4ีฒฬpว?gย๒{`่ื็฿Ow ๔‚aะHเฟ๗+กฆgช}หT๔ฯฤ๖บ…๑๘ŠKฤคๅ t•Tศษห™ล‚๘่?ก:hG @แOณ„[๚Wรž๗/๔Wย€ๆ2ฤH ‡ใถ ”๐f๚๏มe๙qฟา๔@"ป…~๛7…@โœ๕ภ๘o€!จ฿P+๘อภaิ{up‚TัN.‹ƒฅ ้?vVแ ‡#pP็?Œ๙cท๘ฅ4$ 7ฦ`ฟ^-„(่ฟ|yA]ฏ,–ฟ]p‚zYW ลภ~ษLRFqw‡เฉ@6Iสศ|ม=ยเฟ‰ ข18B€0ฃ?ภใN๕kญ G$ใgYี?๒C= 2๛MB๑k๗†Cฉฆ&0Pฅเ๛UมอG•ช^โ‹ƒds ญqwบยep“O|๕ษ3ดปฒ‡•]๎O5๐"tdยCไัทmGึรูํ\‘Fื—[[โyฝ?v;œเWa˜+N๏ไR#พ0~7แขทท!ตLดš8 ‘๋”Z._zzฺŠ]ถVX ฯxR8p1ช9ญ๋ฤQwxฎ-เ๚๎ุ2ฤ^rทI๓0ืฑxwJ…ˆ=ผีอล&6ฝofๆmVwWชิNพ๋ ูฒP&vf]žœ„v–๘,:,‘ภ-™ตษqผ์…จPYTี˜“๓Z์v Pฤyฟ_~!ม]๛‰สี๛ๅ*อส๑จ‰็{>ษซซรูศ9ๆˆืำ้!ึะำB/฿ปLF6{ฤ‹Vต๖6i#lwฌš|G>eฎ๛)D™#] ็๋ b8ิi# |ค`ฐถ฿ˆฬวฃี0ฌชƒŒR/kููnaไภ๒|OฐqฺฬqQ ำ๋นˆ7บz gฆ|โRfึซงฤฒ|˜RšMKž,กŽด’ฺ9yฺไจบFฟY!สUK๐ฬธ3๐มลข]๕่!ํƒณq9๒ฌึ2*/’m๕ า mJซžaeŸฯญVคny.๒dPgA๙ึซ&‡TAZ ึ0ฃถฦดึf๎fIต %Š•~๎mA๘ซE›้:"\ŸIม#fฑ1eษ.]t™ธชว๋Qf4๛/D‰๒†ฉ็“euPl่๒ฤ]ศ€ฌศฃw‡>๗Wผ`ฏข๛–ลใธGt)yCมเ-›6 ถwนญbมymV[@cมฎ}B๙rx/D๒g`“ฆ๐พผุฟขฬหo…†_iึั6–Œuท"bฟ’ด’f‘โฎqQ+ๅh[โ๊Dฎํธฃ:ืwv–š~ฆ๑—ฦ›>ษํท&ษWžw0๒ .ฏด‰่nบZชลๅำฆลkŸตฺฯlๆ๕ุHr}ภ P๐•๊œsปgห@ใBz˜1 4n:NOcN•ม]“นuฌŠŒฎ์•ฦIฺ’w@~ผศนบW)Rึ bƒ]@/ฯ ŒกŽ}a,;ฅ๑˜l<ี-qฏ NสฎRzะ…๗๛pLส?„่๊ฆp'๒o6ธฎชื@Iจ eQคนŠo<žd{3ิฉ†-,OJ๖ะ๖•๒ƒ9฿่ำ^*1™Jฒญ‚๋~Aœ]ฝIZฬŸ๔ฯสeีืผO\ฤWŒวะ Nเ›้2K"ซฟ๚มฯฆฑiZ›L๏›๔•T’ษ—Er…ฌ*bxฃฆ๘2(ื๒™ฟ ฏ็า‚ฅIz'Ÿ๚ขิฟR]’‰EธS*ฦG๛~;พR๐ำฉaว*jบoBqWตW‹gH•sช๙J็@๖๛๏๊UนŸไฅ/๓^฿*พ๕ฅผ;ฺ:๓ ,BมQczjเ#ีตู A๕œY‹า…"pอIื'cฅ…]ไฉ“GO’/ฦ^ณ—๛๙*5ํ}R!“พใyไฑbRTช}1ฒ่๕›G&0•ห<=อ9vฎnŸา"ฝฯˆ๊ฒ(งl9ขV่j8}Ÿ๓ฝ—๑U่™“/=bห๗ิ`7ฟ๐ ณิฅฃs/‘lAˆ•ใpU‡…ๆหzๅŽกณฝ๐‡๙›g~ดด์<(w๖rUMx??๔J#ริ๋“ƒล๊.g้ ฤ|nป6๔มlzแu@๒ฒถ˜็XAุAO—ๅuึี00ฉ-ˆดŒVB๙=^{รOvฎ่ฆoz๖้›hฅถอ Ÿ}5i„Y@ >qu™k๗บชฺำวEFEtwฎีษg๏๒^•โขl@…0t5ฐr-$˜'k@วฉหฤ๊B.TถXโS๒]]†E2E!rฅฦ-UT๙,‡‰.S์‡ฉฒ๐ณ ฮฺๆv0qฦIrฬ๖œโU๕มˆ6ฏžLิติƒฏx๔ž+ฺœ•ๅ_ไฌฏื™7๘zlx‹คผโe"ำ๋W)3Z&}ซ฿๒‚ซšย๏L@ฌjร๔&^ษฌjR”๒œ‚๎…|ๅRjเ๓/=ขะ)ฒ๎}สผระร–K฿v94กช๗มDฃฅdท‹‚ณฌ)Taฎ /ฌnމžO ๆะ‹ฦvท฿วฃ`ด#ณฯš ซy=G๓uŒ๒7ฟO9ํฬฆo’^?K=ฑ๊ๅผ๎wิมc8ํ‹ๅฮนผฆฐu\*ลฅบ?ึญ$#Pd๏=™ฐ‡a‡ไษYฃ่*rฒ๖D3ฉ’VษU่ฆœษ่จTž๋A‚ยmฌz“ศ5ร WU๙ต?2ษpน}XQLS๎ฺ!ๆAซป;Xุ3ตžแOŽฯA นKต”•<แ‰_!ห*` >KŒ ผmข๛i’x’ŽB๛~ ๗ใ†‘#ไฑSwP-ปึด่”ไอk9{7‚ษ;ฎ๎lfฮS0W๏บ:51วฬuฆEฉแ‰ด/8$SF%7z…ฑๆ(ผ—Aช0[E โk+ธOfฺ่Z{?:ว5OซNaงธ–†7เyฉ_’ิฯ2กBm›์ะ๛$3ๅ๙@๗ฉKตWˆธงญบIฌuตdธ ษ[ŽJuฎ|น ฬ‹ฯ”่ฏ8„†: ฏง7i์™“Mา}๒‹ข ต1o”_ฌbพ–ฯ.ด 9œ"ู>7iฏVžqโfฑžŸ4l 3จ#ญ็แ็Q—}Tฒยฺฟ2s?ีํnW4ฎB/— ฒMEฒญจK๒ิ‹b–้i”ฏว4Žm็ฤmŽ_๒aฤ=PืO6ฅeค— ฅvใ%้’^&’tตผoข†๘ั.\หŸแ#›ฏ€=้๖ะd4<ู(#Y•๑้สodhZจ™+ษล'90ฅNีz๑=ou๕๗':G๏P†พวซสd‘e|=6Cไ 3๊~ศƒU๑˜ชs#ฮนคฅว—฿ZsOง~=Cอึ!ษGw€ใ<,%แtDด๑‹lึ{๑้5โf’ฅšๅe/›+๋ฐก ็๑่เ91is^ฯqYeMbNูผฤ^ษ(@vบล(H4๚ฤ‚8z˜ฮ-@ๅฉ_luF‹ฯ%ฎxฺfok[=˜9@ไน6ืะS;vวํไะไถฒร_y๙ฌ้uˆ{}n!ฝ6vฮไ‹vฬvae^ao6…ผ‡ฦา—œ@?โ)๊ƒ๐’ึX—+&ˆF3ป4egฝ•i H˜ป‹WHศf{ฐxร ฌค5ๅ—™t(Mr์rส–้=ฤ][-ญ(7?dBฝ‰ัb๒E7•=ษ€%ฃไfฬฆฮดน/Bh^Œy๔ส@คะ*ปิ‘S๚Ž๔ฉ-Œ;Q์ 9Qฃใž~Rฦ|คญx๛ฒล๙ถž!ก'6]w•;ƒจ/ฅWŸฟฑ[ณ๒z>ๆ\O\๚‚+|ฆ5ัn?ง๒อSชณQ]8๖]z๚๛Oจหqอุt@ำV%฿K‘),,๓M์์ฏ•-ฦฉROOฟ G้jึ๛3™ฆ%ปŒeEดง‘ฺ›คw ธ0Lฬ >บ๛เvŠพšS่์็ดwิม>U6๘Rฅกา Iƒ ฃนeงIอ‘ฆd<ฒิa‘คโต%'ต{‹ฅ๗COld"x>'า4?-๘๖D๊๕Zถw๔ cิำาฃ‹ใฟq™Xๆ๙รฝiZตบIคึV๔ฺคซwฮL๛นk"piแ“clJ2–จว๚ะ)>ตไํ“%ฎ " ˜ลทu|Xq&}ีZEิwฟ่/W|Pq]mน๖)'tmzอ‹ิฝyฑรรฬ:ๅŸ“[ซy ๙ฆ/}$ถ)”ะ™ป‡8Ag+๖๑›ัpๅ•=˜ˆrฉ—gy›<.D๚าฟฮ^แa8/ญงX็/ึvV~3”™-ฅVโ-ๅ์๏X>1_˜ฦณyGฉ๒Šำy“ช‹๙–{ŽพS+๎ธmžย"๊ำปฤcz{ขภ๐’ฌ}y:ยบf หRžWๅNวhซ๖AidืZZ~๒สHŸ›”vf=_ A๖Ÿ(fส'พส68)๘›id)\nฐ@ๅ{~ล—ะ๎og[OสT@ฒไ -f~˜^(-T2Y|บฃ •ฑˆa•๏้งY๋ฐฯS (Mr้ฒด.๛8ุX‘฿™ผ๔ฌ๘>-˜Žz5Kั๗โพจ&RพVๅ1๚^ฒ๖ถฦ๑Fบพp1u๖ึ•-oฮcMj@Y„m*I;‘Eา๎Žๆg7„zก6ZH้ถ๔ฮM€ฟ+ฅปณQhษœ]N\89ฦ/ะ์ุ๔mFทแั)pฮิลชวn MๅŸ‘f|Z+ะฦ1%} ไึœฎYaฎ™j๙ฎ็a1ัภzSžHf‡œBะชโZิฒr™กEJ> ุ03iyย‹ชๅไˆoR!๕G$๗U2ทš&ึ0žฉ…~w฿Aน–ž•X;ŒGgv‰๘ฐ9Šfร`หJฐ)?jŒ8QาไึBแ&h–VOฬๅNฬ๘ุR๚ร*ืg็(Vซ’„๎<ั%ฬฃฦxหฤ ปซ3Vmสๆ฿ˆ[Ÿ%ุ‡Œ ,ร}รา๓บฃs"WG฿dษ~mทs| ~่ด๒ิœ™XqฒQ"U)ญ-C๎q;ำVzงw˜๚ผ‚ำฃ๋ะG$รุ ›ฒ8วบl_{ลฯDธ๗อ’%|โปฯ`ิฑOรรฺฃ{ ตKX†๕๗„tฎึWถห;ฅ{ฆaฮ6…นi๊5D:พ์V?J"E>หฤŸภGณy่์ำฟ๔๚๊ภuRdfถ#l}ฮป ๘hj@s2>ิcJอœ —ผ๓ม0-/žn ฯb๛””C,ยXH ]“H˜{Fw{๑ฦP{โy=$๏ฅdฦบa•Kทcๆ?žษyX๖็0< Œึg๓ๆS•ษฤ e6>ธฃอ๛๒–{ƒ——ฐคt†<ุ>ฝา+ุง$€/๚‰fJ*kูœ;มz-7ษwK็ึUำจ?5ิ_–qL‹&bศ[ไ ฌชl–R$%กRะอ“มศ ๒qš[Oeฉ.จ6็V=ƒซ๘cvึดิeญฆM(ส๎‰7๗QฌEๅh4฿”yแ[4zไ[o๗D(๘03&วชx^ขPt@Y;_Eำฝผm’&a#~C๐9‘wซ่›ัK—ƒลVธ}55[ )ฌameIั‘wเ๕+์่ZœnX๕ร๋นั'zijgศ>Fจผอšภ๑xฝ ษ‘4นSๅด’ Rฯtอ96๚V€๛`3b,Oื฿ู{xฌไcล๘ขf“ๅจๆเ&ฌกศ็ึๆ๎zฏน๛ฌ๎ฆฉ%ฦI‰ฑฌฒxLx้ภ }๎r–ฐšจฯฏ"๊a/% ฯ ณ‘จ็Yฟศ๎“]๗eคฯ}l^‰.&€๕ใ—RฺำMrTุู755๒b Tโ Qๅ{5ุrมวvๅkฆ”ตร-Ÿ—3Wจํ}6พp๓h๎ฅ5{Lตk)g›f__U๗“zš7๖La•HึลOv f^ #กj‰V7ใฮ,ำ๑ณ๎ำฌึร่์Z้ฎเj\AŒA”ูSWณ๖๕8M๖ญโšทญ‹,อ#3E[U›็rฅอZ๖lอฐ\ำbNI๙ฅ\S๓W6wˆ’EF˜ๆ๏%>feZซป+9ีฤMqจ&ฬๆ4ข๗วใd฿‹s๚ฒฎฉัM6ๆ๒%ี> stream xฺอ\[s6า}ืฏเcด[2‰;P•ฺ*ฒc%พ+oR~˜ศ#{พศe4สež 8ไH3^๏ๆ+™lงำ ’‰sถj*ฉTe+ ฎ~mฅ•วฏซ ฎE๐•—ฎ๒^Wขฑฆผใฝญ$ช*แ|ฅคฑrJ‡ฆ 5พ ธ• š tkจ‚F ; ฆฉŒข2 P‚‘•ฑอ 5Š5บฒFชƒ`leƒ๐จ4ะ6•3CXY9๔ม๊ส+”‚8c.€yิ8tฺ4q(Hแ*' ศpเkตBิ ฃJJPฎ"8ั4๗จผ„”ขIdecัๆr4 บV0–hh:šP4ะ5๔0ส‚} ง*ูH\I\)Gฦ•ฌำธ2Žฒฦขๅl„ศ๖Zฎ<ฮ„"ผmbKZวณa€œ,ูภDยR”RBGภฤ…Œ#คB–ยZะๆผ@[CaฃๅกฐลLพtฏ4…,ฌ)์แิOtจ ฌL4f_(๔Tแ. ข„0\บBX))…lKY๎)j0฿"”ะ˜•œ?XNK8S m4ผWW> ŽJยK0mดฆ1&มฌ ใ%ฮ+๚+=ŽVฑ}๚ฐU–m1†5๔1ฌ#šัM9ŒWม]xตp’-่N7pwฺ xc8Kทฤ๕@ฬpIจŽล8Q^ั{แยkุ*ะSผ•ผ‹1ผใ6œZDเ%F p›ƒŸŒo|๙ๅAํŸW๓ช~ผผ\ิง7?ฏc‘•๊ ~>๛ศ{พ9ˆฯf๋ีโ๊งๆ^?ะXๅ๘๋ฏ฿ถR,!Sฉุ๊ธ๘d…;ฏ็ืห›ีูบ๚๒หช~นZžฮืซ_?ฎ๊“ณ๗๓ี๊@'‹ี๕๚แ‡ู qP?u8๙Aรโ๚รuไ•ฆz}P?บ<[พ[\พ k(ห๎ฏ#ูฐ }คี=ƒE๘I็ๆณM๕ฟ}ด๒N9_I๏ƒ๚xq~>_อ/iฺŸดฏg๑๕ฬ48‰Cแะ8 ‹4์๋{—ห๕ป๙9œพžล-Ct“|K4่ก;‘%TG ๎$าศD‡ัม›ไ ผ . >"ืฆศ$4ฉ Qฉ`PฉภเขRิtWภฌ;—บฦ‚p.u'u ฅPนD ฉsจ…’ส%J๊ไK;.็ว‹ฦ46/š๎zธhŽY’ŸถŸผj”*Wดyี๘N‰~ี๘4Uช๑„qี(sมwtn6~๗็ฟnไ‘6ฉ?๗;ฐฤŒฃภ8pgๅ2q(ฐ ๒r‰ฤ4ฃมVm5ฺjดี`+ํve5Wฺžย,คใ-,ZXดฐhaัยข…Eฯ=;ศ9ศ9ศ9ศ9ศ9ศ9ศ9ศ9ศyศyศyศyศyศyศyศyศึ|ฏ[€d< ˜๖wะ&&˜[x˜คิ๔ไห“โI๓dxฒ<9ž๙=ฐต๐" " สmHƒ"W๔M๊ภbP™Ps"๓š7๕ฦ‰ฬฝนธฃ๊ ดuR้ฅ—I์YผJ* eD™ @ า8ุ"x•Tp%80 W  ˆอQ*J`@ฏะซ„๔:!€ฝN`@ฏะ๋„ห๋„1ห๋„ัส๋„้๒เT๓บX๊-ะึฉƒ@Wฮนบn|ŸHx๚Dย›ฆO$ผ้S(dd‘VxฃŠดยKห˜\าPๆ†6.—ธู๔น$&ไ ุ>+Šฤ๙‘ธxง1ภb3,o3xจท \ิŒ>๊mฦย กอX—Tฦ"นฆ2ษE•ฑHฎชŒEา๊y<๘บo๚vœ„<บdข็๗Mพฬ'์Xb๒…d 7๔-‹$_2'_!-ฮœ|…ดB๛ไ+t๋๔?ฒฝ•๙ฯท6S›—ๆ๏์ฒU2Ÿš`Tฆ๏1™เใค_ap ™0แ‹=\e1–ๆci™LCŽW ฦใ/ˆ1ไ €ใr`โ“ฑ>–†ษ๘H$ง ล81ไJ 9ฦ1–ๆฝ!ใb’ธ๓ๆ’ฤ๗†$๎~oบ ฆ$๎`Kโฎ$๎เKโก ๎ะ4q‡žผ@jก‘q‡Fฤ]whLAก'Dw่)s_whBA!งK$๎ DAAศ‚ชƒPU‡œ%‘ชCNRHีAุ=)ืL<$j สmฆ(Œ‹มเ>6|.ฦmzฦMมปgม ฦํโ8ืˆ{pย๒ไ฿๒ชูฉ้cC4ร‘ฆไฆ$๋ฝ™ฑา=“aTำoฎ"Kb{FŠฐป82L0แ๐้Rห‡-)๒9๘๔sง)B4=๒แvง%ฟfภ{!'นเฝc>ฅอ‰1ฉN›ƒณJ่rสฬงวช š Jข ช$š Jข ส—ิขBI-บ))B‹’"ด,)Bซ’ด.IA›rแ๋4žฉpฦ†œ‰OSIฉQฃฐ.$ิั|ˆ‹ฺษC!ุjคn{ ๕่5ฮ๒laX ญmว5Žฒฐ€๕ญoXMฅตธา หด3๗˜ฃส๎พำ,๓{wๅ#ะคv{+‰" ดXะฅมๆยJส@<บฝ๊pjX‹9กU$Jm(a๘ฆษฑฌ$eใkŒุฏTด๏ข%ขmRšm{@_l‡9‚ฐgื{ม~ศ!๖iธ ฎY#๕๘Lž5๏™ธ^ฅๆˆํฺูจฃ“/[ ฺQปHช| \Sุูtด“ฌค`ู<-ำ;ดQ ]ๅ๖98คแxbs~5ั`+HฌุZฏ,฿E\.ฮrิยฉ8ว6โb[)ฃlิ-ข าg ฿z@อW‘ุF้Zรiร4EธX$KฦJฦ‡qPา›ญป–Š &Qq1{ฤฒsžh4๒#โ•‘4si๑œT”ีึ๎1l!ำ๕โ{9fฟˆฅt5ฑุ8UiˆจธฅŠํeˆ‹,:ฅXแพœะE+มฐๅ&ฟ 8ฆหNๆฑ@TXำฑ9ฺ†]ฉ8—TญฝjAr@ื’iWพเ๊ด-่dFI3cu™๖ภธ|๔ดถ-j]\WึwํใKOโ•l%ะoโฤ1ืq<2ิๆ๛ฏใ๙๕ูjqต^ฎฺฅMlŽฟ๎ไ๘๏Og๋ๅัƒๅล;ป˜ฝฟฎt™ศ๑ฝhudฒg)B@>s๚l~นฎsฃ‡ณซ'๓ล๛(J‡ˆ;o๏ k๊“๕์bqv๒ลผ‚์้z๑{PมAฆkƒ…ัf-Lˆพจ๏ื๋ใ๚Qธช~RŸิ_ื฿ิO๋g๕๓๚Eฒ~UฟฎO๋o๋๏๊๏๋๊7๕ฌน>ซฯ–หห๚]=ฏc—๕y}พ๘m^Ÿ#ใช฿ื๊^}˜_ึ‹๚—๚ขX_ึ—‹หyฝฌ—8_ีW๓ีb๙ฎพบธนฎW๕u}= ยื‹?๊uฝฐšฯ๋๕๏ห๚ฆญฝฃณWฏ๙jyุ้๑z…๎ษว(ฅœถ๛ƒW~|uo๗ึD[ฌ฿ .ัทศ๘@0ฅ๕ๅะ๚v`}?ด‘มa๘0+ฌGำ•†ป„ล`ญ’ฉ‹๙๙บฝZEƒw&ค๕ึฐิŸCใธ}Œs๚ไ๘แญqn7 vGู ƒ€.Li-†บ4Œ[ ใ ร4n่— ฯ<‰>๙2{ใ0Y้‡็Cฟkฝnซ๙’~ฃw m๖ฑ“Gวฯ_ผhm๗zๆbถฺfผŒว|ฦsฝ๑+บ้ ื์ฒ˜o3ฺห๙ŸqA|sq1_g{ž-?~œซ{~๙nva๛"ฟ-ห|‹ใRทZzณ\ฯฃhผ๊'ฉง†๋ bฤอๅป๙๊๚lนš฿ฦV์3ฅ?>zํำg๘์ู‰hฆ'i๚s—๘อ นŸI„ฐr.ญWๅ2เอม2เ*้ฆT๖Sช•(ง๔jจŒฺG™ฏ~ๆษ๋จŒ™ิูชข๘~ณจšญชฬVซๅ๏–ห_8ีCต๖โ๓~|๒๊ซWP๋๔Ÿๆ้๔ฟภฒ8gถFะำท(vuตZ1๕fvgธ ี‹‘๏ฟy๓อหำจ๔ฌID(nส?KrA|ๅŒฝ}ึโ’๊ดS>ๆ๕“ฏฃNvzฦ4uโทV2~้๑9tฺพจฮ/–หีX'7A[žlHั๑"฿GwฌฦัM €ดคื’lวกถG‹J’k้.rnd฿H…‘[nŽŒi›E๖ฆ>b.Xด็แ6ฯ๋#kษ๒ ซฟ1ดcท;ูM(ล›ทw>ฤ”=˜]ฯyg2yx[า ฐโyžฺ๖ลl~พโ„ฺ้)ๅำึฤr™!kศŠฯัฤgA6™ีm J/ถข*ํ%?ช้|i–„E๓lฅBXpๅ—๊ฟŽr้k€—3๛ใฺฬE6้"!_9สยญไใoค›ร—›.Fg! n>A๙อ ฟ9๚hIษrtiŠษะ๛พƒ7wฃ•3๘PŽ…ฌ๚' พ,79bลเ,ไม'ผผœฝŸ_#.o˜ๅ ผb่ ้…๚7‹wค้๖UŸtทฟบ๛m฿q๐๓ใ๖ท๕๋ทŸ4F๛ข0>Aไฏj_7ม|o๛นRํ†๖“ฦPฎ๋ป}ืW้๖=aฅ[—ฌtปฌ+Z๕“ฦะํB์ลZผฆรt๘้๎;meถaZ|ฏฺ฿๖E&‚~๛ฺ๋—zท๕-C6|๛๊5~ๅำ~{ฟ๐@Tg/nึศ6ฎ;ฯซ:๖กใลoทaฉๅbผJคwš๗ซ๔4kู๕๒r5ญ๊O ฺฆืจhชMำวSฑe-Unูlo™O?Ÿฑฎ‚w“Y฿ฏา็ว“่ฒ› 4้๋Xt#'ป‰-ฝŸh™็†ฦำ%€A๒“แฤษษŸณวน9าร๎]6ฐ8๕ปw*นl`ืloiKป l`ko้ฆ4๐› lๅ-”ึถึถฺูฦOvำถิใ–&า่ํ๓คK=|G2ถ8in8i+สdำ›ก้๕`=M่งณตตl™ ๋l`-'๕k[0ฝŒ*ฅฒSIntŸ ฏnใˆ๔Ž4–iงญ๔z?`ค#5MๅษRรษRšซlmีญtt=–^ุF`j8ณb8–ฬ๓#7่ฆINธŸฬำ#ๅ๖†ๅTษ ๗y„฿ฺ‹(—ย‘ญ+๔๖^ส™”ิ/ฒูE3ีK๋Œาสmมฆ่D•)Ug+X7ฝ3ย้‘ฺU^"ไใ„เ/๎ฟ<9ฤ๒hณ’/ฬฮ~YอฯŸ ะฎ/—๋K์รใˆ๓ี=qX‰6๖!ืยทv้PPP์ (!ุ†ั;u›4ิO๋ฌใ] ฿nZๆVyอˆ ฌ+wด๔;: †=[บC0๒[„Mซฅ]}๎ePI็2wc•p.vp. ็2b็’’‚;˜IยนL—๎.ใ˜–กwตง<ผณหฬiaํแvF๏เvng›Y๚ร๘uส‚p;+vXีŠพa๗2ง9ผซหฝฬฉBม=• เ>ข0ใv—Uฌ ฝ5ปย๋์.ดซ ล>๖คw๕นŸA-1์ฐ่ฮ๎โ$t;ปCxRt;ปร\ยžr๚„9•ะ{™ำีๅ^ึดDฐƒFŽr;8งงK–Tช3๙ร—฿IL*}ˆ๗>VกQุnค๚รุYšฒใๅูั้zถZ๒มb[๗ไgO๙ฟV่Š็]ืmฮโFต1C‘ฃ๊˜Œf2?A,๎ฦ\%Œ๚ฦ2ึUkV‘0kPใN˜#่q'ฬฺ/%KCLC๙`ฺ ว–ŒI‚฿ฌŽq{ดา# mLVฃ๊๕-๘แ†-๘c˜V#“ถAy%ฅuฺ=๑แ#ํหง'oxฟ๒ีฃgŒdช‹“งO๎จ6ฃŒพ'‹ŒpœพŠQ)๕t๚คานหู‡ูโ฿bาjฃ’ %ปuต”สqfGA6[HŒpฅ[-‹aq_;ฌ‚'$†?_ผฟYอ๏แฦbyษ?E[dซไ‚‹๋๕โ๒}พใ•อijชษH‹‘ —๑[ฦd๘Ji๔ๆMฦ%ฝ ฿dt’[บQEok๗Vฃ54…{ชํ 3™๔dtฝืนี์}› ฅะV0 า:XฒR[รtฦฉกไ#เํ๘lf0>“Ÿ”ณต5ฬ{บทT] Sž”ึท5๔7จแฤ๛ฦ> endobj 1003 0 obj << /Type /ObjStm /N 16 /First 153 /Length 734 /Filter /FlateDecode >> stream xฺVษn0ฝ๋+xlzฐฤ i‚"Eณกห)ศAq˜ิจc‘|่฿w†KcSbว๏qfŒ†4iำ0าฺ4‚Pmะ„K†"R)44ัFขผ๔ป-กœ"Fแงd-JจโbK๒ ,Nจ‘ 1 ฌ๐’ฐ…*ยจภ\Tฦ„Eห€ฅi5ŸW๕u๛โzr๗กwหaีm>ฮิ แฌฝ฿ศจdhhไ๊œฑ=! =€ม๛ชพ\ฝฌ†\วม๛jฑ˜R $‡@6.Nใ9(ิ‡ Gq\‚Aมsห’โ ใ`sQฒภญ:I=์ฅ๕‰๕$ƒู้ใ+ํ$>ŠO2 @้R-"ิ’{Œ :=ืำ ก๑ZN0พ๛†O2 ่IฤY:ษ€;B#•cทษาฒ/ใ'ล4o‰ss+KผN‚ฉ2Bx่กฮL—yœfงสŸจคแh#pวƒPhแฅz‡GกŠ•๘0ะส”y๏oKผ*ฉๅฑFฤJ Ž6‚‡•Z—„๘kD5ชฬใ๙lbกC๛ฐv๑>JW@ภ–ํ6๘เF•u|๔u๕~6HซU\u\M\Cƒm˜๘Œงท_ งv๙๛ี=]ูบืฯ]7lบมuปอเ^แผ็ู ัX\y\E\ฃฃ๒l๏ๅม‰‹งฮ8งE™X”‰Eู&ฎQ–eyฺฝฐxc,A#!#ฅฐฑ+‰7€ตฑฏ6Jฐ&O‘bโng7๋ทA/<šdะdฐdˆdŒFG๏ๅ!‘‹ฤ(:&๖?ฎิ#ใๆŸ1!MะTๅษHฅŒ_a่ŠYฮ]ƒ๚††ิgํะฎป็ชพ…v๔0ู>]U฿์†๕jใpึcษF‡ซ๎ัี?{—vืWnh!$ู๙Jฎห๖มญ๛๙ผพฝ๔w ฿๋๓ล‚&ใี7[ท9๕mƒ, ?ดดแ endstream endobj 1020 0 obj << /Type /XRef /Index [0 1021] /Size 1021 /W [1 3 1] /Root 1018 0 R /Info 1019 0 R /ID [<66855E1B880009FBE39580DD13636A29> <66855E1B880009FBE39580DD13636A29>] /Length 2587 /Filter /FlateDecode >> stream xฺ%ุitUีฦ๑ณO.ยศภ”ภMH˜CBน$!2A’จสเ€(ZตPมJฉ ๑0 vถถ]]๕ƒซkwX.'aUmuY+Znี*BA๚฿~๙ๅ์}ฯ=ร~Ÿฝฯน๑<๏ๅ›พ็๙ž๑๎=*<+ฤ Œะgภง/‰พš1ขo8}๓i๖ƒX๚่›Gณ?  ฏ‘พjš!NNัsฬฅ9ำขฏŠๆJ฿(๚*iฦC}๔Uะ‰๔•ะWN3 †ำWJ฿š#`$}ณ้+ฃ™ )า็ }ณiฆB}S้+ฅ9 า้›F_ อ ศคo}ล4ณ`4}3้+ข9ฦา7พY4วมx๚"๔าฬ†฿๓รร่›IsLค/‘พ4รK_}ำiๆม$๚ฦะ7f>ะงใ2•ๆd˜"}ม๚ฆะิ๔ำZC๕}=yก๑†UK"ซฺWd=kv„E:2X^#ู†\ศ ำ หxŸ ˜๙P“a LๅZชูš3กPฆมฬ…7iฮ‚ จ„yPs@Vึ+็๕ลPFฦ๕ ช`>ิ€ฏž(ตฐสwฝRP๕ะ 8”ฏ>a๕ย"h‚fhแjก^ฎy3ูำ _mฐ–ร2hMIt‚fฃ บกˆ…ำ‚ถำ#้RโH‰ QqDลGT@.h9tp๕!จ‘#Cn๐jเ†‰u$ึ๑เ†๑จƒEะhLc‰^irคษ้3>ษ˜ด ๚ฏŽ9}จ๋ำ^ๅฉฦŒyQwลก{—๚P'„NๅŒธ#W.ห˜๐+๚ }ž๋ี๋ฮ”ย้}๐ˆ…ฃๆŽ„9ๆœ#fŽ๘ธ\c ึ๊กH›…O๗#9ฎfC ” s €r;สํส”ธ"c ใ๔ คำ้e:GึYsไฯ‘?Gเ s@\ &งฃั „ฦQ}ื`L™ฮiG†rฤวGrษq„ฦGยนr=ŒหP<0b hแ๛Œ™฿ฅ๛ลBd(,7แมฦŸอ~Aอx`- 5ฆ-FI0F@ d@ฒ1๛uฟT แtศ‚lศ4ฆ๗ue4Œ…q0žjๅณ5&ฏ[a}‡ kIX_฿๒`L}}ำ๏ฮ€™ ฏo…0 tฌศxธ •5\๕cฬ๊*ฝดbเ+<xj„็@9T@%Tqอใูš ีภšž5ฐฮ2m6รฌ_จงd‘ /†VX 9 ห ่ฮํlQ๓@หม54lQ@หล5ดๆl้โก…g ฏ ฉOญV›1wอี †ก@ช่บ‘ไ 9๔ฑ“ $" AŒ2~lฎ/C@๕ƒ1@"0’) x—ศA  ี(|@แสP๎€"D%ะ7s}ุ‹€X„! 9ศA@น๊”€พXSไ@_ (r@@‚ cถ5๊5Wณ‚n5Sn‚ด๓ืž1om ๏ŒƒKย฿>ฑ๐๎ืย{฿ ๏‘!|0O๘gD๘ฐSธธD๘>^&‹.-ขuยฟ[„Oบ„Oแณ;…ฐ๕๙ญย฿.w _ึ Wj„ซลยK…ฏJ„ฏi^ใศ฿ิ่-ฎ€่m@ฬยดs6Eใฃก้6ๆFฆ|๗ฦแ฿7z;นs฿l5BLช๚๊4Mบ@‘ Qหฯ„^xN๖K#$Nฆ0โ-aไGBJข*o ~Z™0JnะO_-dZศB=E#C็="Œ;'d'๊ฯab d:Bบ01KgภkB๎Ÿ…ผG…I B ก`ผ09ุeสva๊=ย4y9ๆท๐+aw>ณU( ƒผ?๛ณ๖ E2ฤ~ฑ ป_"ๅ๑KfŸส sส*v •lUI‘นyB5็จF˜wJ˜ฯฅีศ๛ธY ิu\_ H๙ ื„ฦXaแ8ภ๙‹ฮM/ อR(ฟๅ๗ยโ็…ึำย’CBืฒtŸฐl“ะ”ฑSฒๆwq-๙๐ฉฐœ]qR่9,๔๚ถ ฿น[๘ฎ$ึ_™#ฌขdซnซฟn๑€ญ[้ปํ aฎ๐ืJ†u—…๕W…;„;นฃปRตxฑะ#นแKแ๎ใยฦย=อยฝqย&.๗พvแ~๙5แŸ>๐ ๐เ^แ!๙}้เฌฐ๙ย้๒„ฐ๕Ya›š๕พEx„[xTfฟ]&ฑฟƒC=ถ^๘แzผRุIจ!์โ(?a่ž๘ญ๐ไ“ยOฐ››ูs]ุKึ๖qผŸsจ้mลม l\ีS„ƒŒไำU@-ญ?"๙ƒp”a:&k‰ฬ'ย๑—…ฤ๖ู๗K”O6 งศ๘i๎๗นuzถก๚+UขH2/w่.รMLฮ^abV^ำญ‘&ๆ๙=บ•lBSst+ล„d่Vช ญค[i&ดๅmeBOฏะญt(€ษP uP๚๏,}ฯึWlบš@ืำX ญฐฺ`),ƒvะทN่‚nX+ zๅF~Œ†ฮVp}Q9eeˆฒ2D๙ฏAดธ(‹€@ตขT+:๘ŸL”1ฦ›ะ™ก๓;ฝpู( endstream endobj startxref 316815 %%EOF docs/audit/blog-post.md000066400000000000000000000043021453140004500153370ustar00rootroot00000000000000# Security audit of go-tuf ## The Update Framework ## Radoslav Dimitrov - 06/13/2023 go-tuf, a Go implementation of The Update Framework (TUF), plays a critical role in securely managing software updates. Recently, a security assessment conducted by X41 D-Sec GmbH uncovered a few security-related findings in go-tuf. The following blog post provides a concise overview of the assessment's key findings and recommendations. The assessment identified two vulnerabilities of medium and low severity in go-tuf, along with four additional issues without immediate security implications. Even though there are no high-severity issues, these vulnerabilities still pose risks in update integrity and local file overwrite scenarios. To address the vulnerabilities, it was recommended to implement measures such as linking versions and making root metadata project-specific. Additionally, validating signatures for all files processed by go-tuf will enhance protection against file manipulation during transit. Alongside the identified vulnerabilities, the security assessment highlighted that the โ€œkeysโ€ directory had been assigned with world-readable permissions. Although this does not directly expose key files to local attackers, it is considered a best practice to assign only the minimum necessary permissions. Despite the discovery of only a few vulnerabilities and weaknesses, go-tuf demonstrates a high level of maturity in terms of security. The security assessment conducted by X41 D-Sec GmbH underscores the importance of continuously improving the project's security posture and implementing best practices. Alongside maintaining the project, the maintainers of go-tuf are also working on a new code base which is based on the positive redesign of python-tuf. This new code base is designed to be more efficient, user-friendly, and easier to maintain. The ongoing efforts of the maintainers to improve the project's design and simplicity will contribute to the overall health and long-term success of go-tuf. By implementing the recommended measures, adhering to best practices, and leveraging the advancements in the new code base, go-tuf will continue to provide a reliable and secure solution for managing software updates. encrypted/000077500000000000000000000000001453140004500130475ustar00rootroot00000000000000encrypted/encrypted.go000066400000000000000000000166451453140004500154070ustar00rootroot00000000000000// Package encrypted provides a simple, secure system for encrypting data // symmetrically with a passphrase. // // It uses scrypt derive a key from the passphrase and the NaCl secret box // cipher for authenticated encryption. // // Deprecated: The encrypted package from go-tuf is already moved to // https://github.com/secure-systems-lab/go-securesystemslib and will be deprecated here. // Use github.com/secure-systems-lab/go-securesystemslib/encrypted instead. package encrypted import ( "crypto/rand" "encoding/json" "errors" "fmt" "io" "golang.org/x/crypto/nacl/secretbox" "golang.org/x/crypto/scrypt" ) const saltSize = 32 const ( boxKeySize = 32 boxNonceSize = 24 ) // KDFParameterStrength defines the KDF parameter strength level to be used for // encryption key derivation. type KDFParameterStrength uint8 const ( // Legacy defines legacy scrypt parameters (N:2^15, r:8, p:1) Legacy KDFParameterStrength = iota + 1 // Standard defines standard scrypt parameters which is focusing 100ms of computation (N:2^16, r:8, p:1) Standard // OWASP defines OWASP recommended scrypt parameters (N:2^17, r:8, p:1) OWASP ) var ( // legacyParams represents old scrypt derivation parameters for backward // compatibility. legacyParams = scryptParams{ N: 32768, // 2^15 R: 8, P: 1, } // standardParams defines scrypt parameters based on the scrypt creator // recommendation to limit key derivation in time boxed to 100ms. standardParams = scryptParams{ N: 65536, // 2^16 R: 8, P: 1, } // owaspParams defines scrypt parameters recommended by OWASP owaspParams = scryptParams{ N: 131072, // 2^17 R: 8, P: 1, } // defaultParams defines scrypt parameters which will be used to generate a // new key. defaultParams = standardParams ) const ( nameScrypt = "scrypt" nameSecretBox = "nacl/secretbox" ) type data struct { KDF scryptKDF `json:"kdf"` Cipher secretBoxCipher `json:"cipher"` Ciphertext []byte `json:"ciphertext"` } type scryptParams struct { N int `json:"N"` R int `json:"r"` P int `json:"p"` } func (sp *scryptParams) Equal(in *scryptParams) bool { return in != nil && sp.N == in.N && sp.P == in.P && sp.R == in.R } func newScryptKDF(level KDFParameterStrength) (scryptKDF, error) { salt := make([]byte, saltSize) if err := fillRandom(salt); err != nil { return scryptKDF{}, fmt.Errorf("unable to generate a random salt: %w", err) } var params scryptParams switch level { case Legacy: params = legacyParams case Standard: params = standardParams case OWASP: params = owaspParams default: // Fallback to default parameters params = defaultParams } return scryptKDF{ Name: nameScrypt, Params: params, Salt: salt, }, nil } type scryptKDF struct { Name string `json:"name"` Params scryptParams `json:"params"` Salt []byte `json:"salt"` } func (s *scryptKDF) Key(passphrase []byte) ([]byte, error) { return scrypt.Key(passphrase, s.Salt, s.Params.N, s.Params.R, s.Params.P, boxKeySize) } // CheckParams checks that the encoded KDF parameters are what we expect them to // be. If we do not do this, an attacker could cause a DoS by tampering with // them. func (s *scryptKDF) CheckParams() error { switch { case legacyParams.Equal(&s.Params): case standardParams.Equal(&s.Params): case owaspParams.Equal(&s.Params): default: return errors.New("unsupported scrypt parameters") } return nil } func newSecretBoxCipher() (secretBoxCipher, error) { nonce := make([]byte, boxNonceSize) if err := fillRandom(nonce); err != nil { return secretBoxCipher{}, err } return secretBoxCipher{ Name: nameSecretBox, Nonce: nonce, }, nil } type secretBoxCipher struct { Name string `json:"name"` Nonce []byte `json:"nonce"` encrypted bool } func (s *secretBoxCipher) Encrypt(plaintext, key []byte) []byte { var keyBytes [boxKeySize]byte var nonceBytes [boxNonceSize]byte if len(key) != len(keyBytes) { panic("incorrect key size") } if len(s.Nonce) != len(nonceBytes) { panic("incorrect nonce size") } copy(keyBytes[:], key) copy(nonceBytes[:], s.Nonce) // ensure that we don't re-use nonces if s.encrypted { panic("Encrypt must only be called once for each cipher instance") } s.encrypted = true return secretbox.Seal(nil, plaintext, &nonceBytes, &keyBytes) } func (s *secretBoxCipher) Decrypt(ciphertext, key []byte) ([]byte, error) { var keyBytes [boxKeySize]byte var nonceBytes [boxNonceSize]byte if len(key) != len(keyBytes) { panic("incorrect key size") } if len(s.Nonce) != len(nonceBytes) { // return an error instead of panicking since the nonce is user input return nil, errors.New("encrypted: incorrect nonce size") } copy(keyBytes[:], key) copy(nonceBytes[:], s.Nonce) res, ok := secretbox.Open(nil, ciphertext, &nonceBytes, &keyBytes) if !ok { return nil, errors.New("encrypted: decryption failed") } return res, nil } // Encrypt takes a passphrase and plaintext, and returns a JSON object // containing ciphertext and the details necessary to decrypt it. func Encrypt(plaintext, passphrase []byte) ([]byte, error) { return EncryptWithCustomKDFParameters(plaintext, passphrase, Standard) } // EncryptWithCustomKDFParameters takes a passphrase, the plaintext and a KDF // parameter level (Legacy, Standard, or OWASP), and returns a JSON object // containing ciphertext and the details necessary to decrypt it. func EncryptWithCustomKDFParameters(plaintext, passphrase []byte, kdfLevel KDFParameterStrength) ([]byte, error) { k, err := newScryptKDF(kdfLevel) if err != nil { return nil, err } key, err := k.Key(passphrase) if err != nil { return nil, err } c, err := newSecretBoxCipher() if err != nil { return nil, err } data := &data{ KDF: k, Cipher: c, } data.Ciphertext = c.Encrypt(plaintext, key) return json.Marshal(data) } // Marshal encrypts the JSON encoding of v using passphrase. func Marshal(v interface{}, passphrase []byte) ([]byte, error) { return MarshalWithCustomKDFParameters(v, passphrase, Standard) } // MarshalWithCustomKDFParameters encrypts the JSON encoding of v using passphrase. func MarshalWithCustomKDFParameters(v interface{}, passphrase []byte, kdfLevel KDFParameterStrength) ([]byte, error) { data, err := json.MarshalIndent(v, "", "\t") if err != nil { return nil, err } return EncryptWithCustomKDFParameters(data, passphrase, kdfLevel) } // Decrypt takes a JSON-encoded ciphertext object encrypted using Encrypt and // tries to decrypt it using passphrase. If successful, it returns the // plaintext. func Decrypt(ciphertext, passphrase []byte) ([]byte, error) { data := &data{} if err := json.Unmarshal(ciphertext, data); err != nil { return nil, err } if data.KDF.Name != nameScrypt { return nil, fmt.Errorf("encrypted: unknown kdf name %q", data.KDF.Name) } if data.Cipher.Name != nameSecretBox { return nil, fmt.Errorf("encrypted: unknown cipher name %q", data.Cipher.Name) } if err := data.KDF.CheckParams(); err != nil { return nil, err } key, err := data.KDF.Key(passphrase) if err != nil { return nil, err } return data.Cipher.Decrypt(data.Ciphertext, key) } // Unmarshal decrypts the data using passphrase and unmarshals the resulting // plaintext into the value pointed to by v. func Unmarshal(data []byte, v interface{}, passphrase []byte) error { decrypted, err := Decrypt(data, passphrase) if err != nil { return err } return json.Unmarshal(decrypted, v) } func fillRandom(b []byte) error { _, err := io.ReadFull(rand.Reader, b) return err } encrypted/encrypted_test.go000066400000000000000000000116161453140004500164370ustar00rootroot00000000000000package encrypted import ( "encoding/json" "strings" "testing" . "gopkg.in/check.v1" ) var ( kdfVectors = map[KDFParameterStrength][]byte{ Legacy: []byte(`{"kdf":{"name":"scrypt","params":{"N":32768,"r":8,"p":1},"salt":"WO3mVvyTwJ9vwT5/Tk5OW5WPIBUofMjcpEfrLnfY4uA="},"cipher":{"name":"nacl/secretbox","nonce":"tCy7HcTFr4uxv4Nrg/DWmncuZ148U1MX"},"ciphertext":"08n43p5G5yviPEZpO7tPPF4aZQkWiWjkv4taFdhDBA0tamKH4nw="}`), Standard: []byte(`{"kdf":{"name":"scrypt","params":{"N":65536,"r":8,"p":1},"salt":"FhzPOt9/bJG4PTq6lQ6ecG6GzaOuOy/ynG5+yRiFlNs="},"cipher":{"name":"nacl/secretbox","nonce":"aw1ng1jHaDz/tQ7V2gR9O2+IGQ8xJEuE"},"ciphertext":"HycvuLZL4sYH0BrYTh4E/H20VtAW6u5zL5Pr+IBjYLYnCPzDkq8="}`), OWASP: []byte(`{"kdf":{"name":"scrypt","params":{"N":131072,"r":8,"p":1},"salt":"m38E3kouJTtiheLQN22NQ8DTito5hrjpUIskqcd375k="},"cipher":{"name":"nacl/secretbox","nonce":"Y6PM13yA+o44pE/W1ZBwczeGnTV/m9Zc"},"ciphertext":"6H8sqj1K6B6yDjtH5AQ6lbFigg/C2yDDJc4rYJ79w9aVPImFIPI="}`), } ) // Hook up gocheck into the "go test" runner. func Test(t *testing.T) { TestingT(t) } type EncryptedSuite struct{} var _ = Suite(&EncryptedSuite{}) var plaintext = []byte("reallyimportant") func (EncryptedSuite) TestRoundtrip(c *C) { passphrase := []byte("supersecret") enc, err := Encrypt(plaintext, passphrase) c.Assert(err, IsNil) // successful decrypt dec, err := Decrypt(enc, passphrase) c.Assert(err, IsNil) c.Assert(dec, DeepEquals, plaintext) // wrong passphrase passphrase[0] = 0 dec, err = Decrypt(enc, passphrase) c.Assert(err, NotNil) c.Assert(dec, IsNil) } func (EncryptedSuite) TestTamperedRoundtrip(c *C) { passphrase := []byte("supersecret") enc, err := Encrypt(plaintext, passphrase) c.Assert(err, IsNil) data := &data{} err = json.Unmarshal(enc, data) c.Assert(err, IsNil) data.Ciphertext[0] = ^data.Ciphertext[0] enc, _ = json.Marshal(data) dec, err := Decrypt(enc, passphrase) c.Assert(err, NotNil) c.Assert(dec, IsNil) } func (EncryptedSuite) TestDecrypt(c *C) { enc := []byte(`{"kdf":{"name":"scrypt","params":{"N":32768,"r":8,"p":1},"salt":"N9a7x5JFGbrtB2uBR81jPwp0eiLR4A7FV3mjVAQrg1g="},"cipher":{"name":"nacl/secretbox","nonce":"2h8HxMmgRfuYdpswZBQaU3xJ1nkA/5Ik"},"ciphertext":"SEW6sUh0jf2wfdjJGPNS9+bkk2uB+Cxamf32zR8XkQ=="}`) passphrase := []byte("supersecret") dec, err := Decrypt(enc, passphrase) c.Assert(err, IsNil) c.Assert(dec, DeepEquals, plaintext) } func (EncryptedSuite) TestMarshalUnmarshal(c *C) { passphrase := []byte("supersecret") wrapped, err := Marshal(plaintext, passphrase) c.Assert(err, IsNil) c.Assert(wrapped, NotNil) var protected []byte err = Unmarshal(wrapped, &protected, passphrase) c.Assert(err, IsNil) c.Assert(protected, DeepEquals, plaintext) } func (EncryptedSuite) TestInvalidKDFSettings(c *C) { passphrase := []byte("supersecret") wrapped, err := MarshalWithCustomKDFParameters(plaintext, passphrase, 0) c.Assert(err, IsNil) c.Assert(wrapped, NotNil) var protected []byte err = Unmarshal(wrapped, &protected, passphrase) c.Assert(err, IsNil) c.Assert(protected, DeepEquals, plaintext) } func (EncryptedSuite) TestLegacyKDFSettings(c *C) { passphrase := []byte("supersecret") wrapped, err := MarshalWithCustomKDFParameters(plaintext, passphrase, Legacy) c.Assert(err, IsNil) c.Assert(wrapped, NotNil) var protected []byte err = Unmarshal(wrapped, &protected, passphrase) c.Assert(err, IsNil) c.Assert(protected, DeepEquals, plaintext) } func (EncryptedSuite) TestStandardKDFSettings(c *C) { passphrase := []byte("supersecret") wrapped, err := MarshalWithCustomKDFParameters(plaintext, passphrase, Standard) c.Assert(err, IsNil) c.Assert(wrapped, NotNil) var protected []byte err = Unmarshal(wrapped, &protected, passphrase) c.Assert(err, IsNil) c.Assert(protected, DeepEquals, plaintext) } func (EncryptedSuite) TestOWASPKDFSettings(c *C) { passphrase := []byte("supersecret") wrapped, err := MarshalWithCustomKDFParameters(plaintext, passphrase, OWASP) c.Assert(err, IsNil) c.Assert(wrapped, NotNil) var protected []byte err = Unmarshal(wrapped, &protected, passphrase) c.Assert(err, IsNil) c.Assert(protected, DeepEquals, plaintext) } func (EncryptedSuite) TestKDFSettingVectors(c *C) { passphrase := []byte("supersecret") for _, v := range kdfVectors { var protected []byte err := Unmarshal(v, &protected, passphrase) c.Assert(err, IsNil) c.Assert(protected, DeepEquals, plaintext) } } func (EncryptedSuite) TestUnsupportedKDFParameters(c *C) { enc := []byte(`{"kdf":{"name":"scrypt","params":{"N":99,"r":99,"p":99},"salt":"cZFcQJdwPhPyhU1R4qkl0qVOIjZd4V/7LYYAavq166k="},"cipher":{"name":"nacl/secretbox","nonce":"7vhRS7j0hEPBWV05skAdgLj81AkGeE7U"},"ciphertext":"6WYU/YSXVbYzl/NzaeAzmjLyfFhOOjLc0d8/GFV0aBFdJvyCcXc="}`) passphrase := []byte("supersecret") dec, err := Decrypt(enc, passphrase) c.Assert(err, NotNil) c.Assert(dec, IsNil) c.Assert(strings.Contains(err.Error(), "unsupported scrypt parameters"), Equals, true) } errors.go000066400000000000000000000041151453140004500127160ustar00rootroot00000000000000package tuf import ( "errors" "fmt" "time" ) var ( ErrInitNotAllowed = errors.New("tuf: repository already initialized") ErrNewRepository = errors.New("tuf: repository not yet committed") ErrChangePassphraseNotSupported = errors.New("tuf: store does not support changing passphrase") ) type ErrMissingMetadata struct { Name string } func (e ErrMissingMetadata) Error() string { return fmt.Sprintf("tuf: missing metadata file %s", e.Name) } type ErrFileNotFound struct { Path string } func (e ErrFileNotFound) Error() string { return fmt.Sprintf("tuf: file not found %s", e.Path) } type ErrNoKeys struct { Name string } func (e ErrNoKeys) Error() string { return fmt.Sprintf("tuf: no keys available to sign %s", e.Name) } type ErrInsufficientSignatures struct { Name string Err error } func (e ErrInsufficientSignatures) Error() string { return fmt.Sprintf("tuf: insufficient signatures for %s: %s", e.Name, e.Err) } type ErrInvalidRole struct { Role string Reason string } func (e ErrInvalidRole) Error() string { return fmt.Sprintf("tuf: invalid role %s: %s", e.Role, e.Reason) } type ErrInvalidExpires struct { Expires time.Time } func (e ErrInvalidExpires) Error() string { return fmt.Sprintf("tuf: invalid expires: %s", e.Expires) } type ErrKeyNotFound struct { Role string KeyID string } func (e ErrKeyNotFound) Error() string { return fmt.Sprintf(`tuf: no key with id "%s" exists for the %s role`, e.KeyID, e.Role) } type ErrNotEnoughKeys struct { Role string Keys int Threshold int } func (e ErrNotEnoughKeys) Error() string { return fmt.Sprintf("tuf: %s role has insufficient keys for threshold (has %d keys, threshold is %d)", e.Role, e.Keys, e.Threshold) } type ErrPassphraseRequired struct { Role string } func (e ErrPassphraseRequired) Error() string { return fmt.Sprintf("tuf: a passphrase is required to access the encrypted %s keys file", e.Role) } type ErrNoDelegatedTarget struct { Path string } func (e ErrNoDelegatedTarget) Error() string { return fmt.Sprintf("tuf: no delegated target for path %s", e.Path) } go.mod000066400000000000000000000014141453140004500121600ustar00rootroot00000000000000module github.com/theupdateframework/go-tuf go 1.20 require ( github.com/dustin/go-humanize v1.0.1 github.com/flynn/go-docopt v0.0.0-20140912013429-f6dd2ebbb31e github.com/google/gofuzz v1.2.0 github.com/secure-systems-lab/go-securesystemslib v0.7.0 github.com/stretchr/testify v1.8.4 github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d golang.org/x/crypto v0.16.0 golang.org/x/term v0.15.0 gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c ) require ( github.com/davecgh/go-spew v1.1.1 // indirect github.com/golang/snappy v0.0.4 // indirect github.com/kr/pretty v0.2.1 // indirect github.com/kr/text v0.1.0 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect golang.org/x/sys v0.15.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) go.sum000066400000000000000000000321121453140004500122040ustar00rootroot00000000000000github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY= github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto= github.com/flynn/go-docopt v0.0.0-20140912013429-f6dd2ebbb31e h1:Ss/B3/5wWRh8+emnK0++g5zQzwDTi30W10pKxKc4JXI= github.com/flynn/go-docopt v0.0.0-20140912013429-f6dd2ebbb31e/go.mod h1:HyVoz1Mz5Co8TFO8EupIdlcpwShBmY98dkT2xeHkvEI= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= github.com/fsnotify/fsnotify v1.5.4 h1:jRbGcIw6P2Meqdwuo0H1p6JVLbL5DHKAKlYndzMwVZI= github.com/fsnotify/fsnotify v1.5.4/go.mod h1:OVB6XrOHzAwXMpEM7uPOzcehqUV2UqJxmVXmkdnm1bU= github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/kr/pretty v0.2.1 h1:Fmg33tUaq4/8ym9TJN1x7sLJnHVwhP33CNkpYV/7rwI= github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0= github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042wbpU= github.com/onsi/ginkgo/v2 v2.1.3/go.mod h1:vw5CSIxN1JObi/U8gcbwft7ZxR2dgaR70JSE3/PpL4c= github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= github.com/onsi/gomega v1.17.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY= github.com/onsi/gomega v1.19.0 h1:4ieX6qQjPP/BfC3mpsAtIGGlxTWPeA3Inl/7DtXw1tw= github.com/onsi/gomega v1.19.0/go.mod h1:LY+I3pBVzYsTBU1AnDwOSxaYi9WoWiqgwooUqq9yPro= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/secure-systems-lab/go-securesystemslib v0.7.0 h1:OwvJ5jQf9LnIAS83waAjPbcMsODrTQUpJ02eNLUoxBg= github.com/secure-systems-lab/go-securesystemslib v0.7.0/go.mod h1:/2gYnlnHVQ6xeGtfIqFy7Do03K4cdCY0A/GlJLDKLHI= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1FQKckRals= github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d h1:vfofYNRScrDdvS342BElfbETmL1Aiz3i2t0zfRj16Hs= github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d/go.mod h1:RRCYJbIwD5jmqPI9XoAFR0OcDxqUctll6zUj/+B4S48= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.16.0 h1:mMMrFzRSCF0GvB7Ne27XVtVAaXLrPmgPC7/v0tkwHaY= golang.org/x/crypto v0.16.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220607020251-c690dde0001d/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.10.0 h1:X2//UzNDwYmtCLn7To6G58Wr6f5ahEAQgKNzv9Y951M= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.15.0 h1:h48lPFYpsTvQJZF4EKyI4aLHaev3CxivZmv7yZig9pc= golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.15.0 h1:y/Oo/a/q3IXu26lQgl04j/gjuBDOBlx7X6Om1j2CPW4= golang.org/x/term v0.15.0/go.mod h1:BDl952bC7+uMoWR75FIrCDx79TPU9oHkTZ9yRbYOrX0= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20220517211312-f3a8303e98df/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= internal/000077500000000000000000000000001453140004500126665ustar00rootroot00000000000000internal/fsutil/000077500000000000000000000000001453140004500141745ustar00rootroot00000000000000internal/fsutil/fsutil.go000066400000000000000000000010171453140004500160300ustar00rootroot00000000000000// Package fsutil defiens a set of internal utility functions used to // interact with the file system. package fsutil import ( "fmt" "os" "path/filepath" ) // IsMetaFile tests wheter a DirEntry appears to be a metadata file or not. func IsMetaFile(e os.DirEntry) (bool, error) { if e.IsDir() || filepath.Ext(e.Name()) != ".json" { return false, nil } info, err := e.Info() if err != nil { return false, fmt.Errorf("error retrieving FileInfo for %s: %w", e.Name(), err) } return info.Mode().IsRegular(), nil } internal/fsutil/perm.go000066400000000000000000000016671453140004500155000ustar00rootroot00000000000000//go:build !windows // +build !windows package fsutil import ( "fmt" "os" ) // EnsureMaxPermissions tests the provided file info, returning an error if the // file's permission bits contain excess permissions not set in maxPerms. // // For example, a file with permissions -rw------- will successfully validate // with maxPerms -rw-r--r-- or -rw-rw-r--, but will not validate with maxPerms // -r-------- (due to excess --w------- permission) or --w------- (due to // excess -r-------- permission). // // Only permission bits of the file modes are considered. func EnsureMaxPermissions(fi os.FileInfo, maxPerms os.FileMode) error { gotPerm := fi.Mode().Perm() forbiddenPerms := (^maxPerms).Perm() excessPerms := gotPerm & forbiddenPerms if excessPerms != 0 { return fmt.Errorf("permission bits for file %v failed validation: want at most %v, got %v with excess perms %v", fi.Name(), maxPerms.Perm(), gotPerm, excessPerms) } return nil } internal/fsutil/perm_test.go000066400000000000000000000031461453140004500165310ustar00rootroot00000000000000//go:build !windows // +build !windows package fsutil import ( "os" "path/filepath" "testing" "github.com/stretchr/testify/assert" ) func TestEnsureMaxPermissions(t *testing.T) { tmp := t.TempDir() p := filepath.Join(tmp, "file.txt") // Start with 0644 and change using os.Chmod so umask doesn't interfere. err := os.WriteFile(p, []byte(`AAA`), 0644) assert.NoError(t, err) // Check matching (1) err = os.Chmod(p, 0464) assert.NoError(t, err) fi, err := os.Stat(p) assert.NoError(t, err) err = EnsureMaxPermissions(fi, os.FileMode(0464)) assert.NoError(t, err) // Check matching (2) err = os.Chmod(p, 0642) assert.NoError(t, err) fi, err = os.Stat(p) assert.NoError(t, err) err = EnsureMaxPermissions(fi, os.FileMode(0642)) assert.NoError(t, err) // Check matching with file mode bits err = os.Chmod(p, 0444) assert.NoError(t, err) fi, err = os.Stat(p) assert.NoError(t, err) err = EnsureMaxPermissions(fi, os.ModeSymlink|os.ModeAppend|os.FileMode(0444)) assert.NoError(t, err) // Check not matching (1) err = os.Chmod(p, 0444) assert.NoError(t, err) fi, err = os.Stat(p) assert.NoError(t, err) err = EnsureMaxPermissions(fi, os.FileMode(0400)) assert.Error(t, err) // Check not matching (2) err = os.Chmod(p, 0444) assert.NoError(t, err) fi, err = os.Stat(p) assert.NoError(t, err) err = EnsureMaxPermissions(fi, os.FileMode(0222)) assert.Error(t, err) // Check matching due to more restrictive perms on file err = os.Chmod(p, 0444) assert.NoError(t, err) fi, err = os.Stat(p) assert.NoError(t, err) err = EnsureMaxPermissions(fi, os.FileMode(0666)) assert.NoError(t, err) } internal/fsutil/perm_windows.go000066400000000000000000000011241453140004500172360ustar00rootroot00000000000000package fsutil import ( "os" ) // EnsureMaxPermissions tests the provided file info to make sure the // permission bits matches the provided. // On Windows system the permission bits are not really compatible with // UNIX-like permission bits. By setting the UNIX-like permission bits // on a Windows system only read/write by all users can be achieved. // See this issue for tracking and more details: // https://github.com/theupdateframework/go-tuf/issues/360 // Currently this method will always return nil. func EnsureMaxPermissions(fi os.FileInfo, perm os.FileMode) error { return nil } internal/roles/000077500000000000000000000000001453140004500140125ustar00rootroot00000000000000internal/roles/roles.go000066400000000000000000000016411453140004500154670ustar00rootroot00000000000000package roles import ( "strconv" "strings" ) var TopLevelRoles = map[string]struct{}{ "root": {}, "targets": {}, "snapshot": {}, "timestamp": {}, } func IsTopLevelRole(name string) bool { _, ok := TopLevelRoles[name] return ok } func IsDelegatedTargetsRole(name string) bool { return !IsTopLevelRole(name) } func IsTopLevelManifest(name string) bool { if IsVersionedManifest(name) { var found bool _, name, found = strings.Cut(name, ".") if !found { panic("expected a versioned manifest of the form x.role.json") } } return IsTopLevelRole(strings.TrimSuffix(name, ".json")) } func IsDelegatedTargetsManifest(name string) bool { return !IsTopLevelManifest(name) } func IsVersionedManifest(name string) bool { parts := strings.Split(name, ".") // Versioned manifests have the form "x.role.json" if len(parts) < 3 { return false } _, err := strconv.Atoi(parts[0]) return err == nil } internal/roles/roles_test.go000066400000000000000000000036661453140004500165370ustar00rootroot00000000000000package roles import ( "testing" "github.com/stretchr/testify/assert" ) func TestIsTopLevelRole(t *testing.T) { assert.True(t, IsTopLevelRole("root")) assert.True(t, IsTopLevelRole("targets")) assert.True(t, IsTopLevelRole("timestamp")) assert.True(t, IsTopLevelRole("snapshot")) assert.False(t, IsTopLevelRole("bins")) } func TestIsDelegatedTargetsRole(t *testing.T) { assert.False(t, IsDelegatedTargetsRole("root")) assert.False(t, IsDelegatedTargetsRole("targets")) assert.False(t, IsDelegatedTargetsRole("timestamp")) assert.False(t, IsDelegatedTargetsRole("snapshot")) assert.True(t, IsDelegatedTargetsRole("deleg")) } func TestIsTopLevelManifest(t *testing.T) { assert.True(t, IsTopLevelManifest("root.json")) assert.True(t, IsTopLevelManifest("1.root.json")) assert.True(t, IsTopLevelManifest("targets.json")) assert.True(t, IsTopLevelManifest("timestamp.json")) assert.True(t, IsTopLevelManifest("snapshot.json")) assert.True(t, IsTopLevelManifest("2.snapshot.json")) assert.False(t, IsTopLevelManifest("bins.json")) assert.False(t, IsTopLevelManifest("3.bins.json")) } func TestIsDelegatedTargetsManifest(t *testing.T) { assert.False(t, IsDelegatedTargetsManifest("root.json")) assert.False(t, IsDelegatedTargetsManifest("1.root.json")) assert.False(t, IsDelegatedTargetsManifest("targets.json")) assert.False(t, IsDelegatedTargetsManifest("2.targets.json")) assert.False(t, IsDelegatedTargetsManifest("timestamp.json")) assert.False(t, IsDelegatedTargetsManifest("snapshot.json")) assert.True(t, IsDelegatedTargetsManifest("bins.json")) assert.True(t, IsDelegatedTargetsManifest("2.bins.json")) } func TestIsVersionedManifest(t *testing.T) { assert.False(t, IsVersionedManifest("a.b")) assert.False(t, IsVersionedManifest("a.b.c")) assert.False(t, IsVersionedManifest("a.b.json")) assert.False(t, IsVersionedManifest("1.a")) assert.True(t, IsVersionedManifest("1.a.json")) assert.True(t, IsVersionedManifest("2.a.json")) } internal/sets/000077500000000000000000000000001453140004500136445ustar00rootroot00000000000000internal/sets/strings.go000066400000000000000000000006541453140004500156710ustar00rootroot00000000000000package sets func StringSliceToSet(items []string) map[string]struct{} { s := map[string]struct{}{} for _, item := range items { s[item] = struct{}{} } return s } func StringSetToSlice(items map[string]struct{}) []string { ret := []string{} for k := range items { ret = append(ret, k) } return ret } func DeduplicateStrings(items []string) []string { s := StringSliceToSet(items) return StringSetToSlice(s) } internal/sets/strings_test.go000066400000000000000000000011251453140004500167220ustar00rootroot00000000000000package sets import ( "testing" "github.com/stretchr/testify/assert" ) func TestStringSliceToSet(t *testing.T) { assert.Equal(t, map[string]struct{}{ "a": {}, "b": {}, "c": {}, }, StringSliceToSet([]string{"a", "c", "b", "c", "b"})) } func TestStringSetToSlice(t *testing.T) { assert.ElementsMatch(t, []string{"a", "b", "c"}, StringSetToSlice(map[string]struct{}{ "a": {}, "b": {}, "c": {}, }), ) } func TestDeduplicateStrings(t *testing.T) { assert.ElementsMatch(t, []string{"a", "b", "c"}, DeduplicateStrings([]string{"a", "c", "b", "c", "b"}), ) } internal/signer/000077500000000000000000000000001453140004500141555ustar00rootroot00000000000000internal/signer/sort.go000066400000000000000000000017701453140004500155000ustar00rootroot00000000000000package signer import ( "sort" "github.com/theupdateframework/go-tuf/pkg/keys" ) // ByIDs implements sort.Interface for []keys.Signer based on // the sorted public IDs() for each Signer. This facilitates // deterministic order of signatures, which prevents tests // that use fixtures from being flaky. type ByIDs []keys.Signer func (b ByIDs) Len() int { return len(b) } func (b ByIDs) Swap(i, j int) { b[i], b[j] = b[j], b[i] } func (b ByIDs) Less(i, j int) bool { ids := b[i].PublicData().IDs() iIDs := make([]string, len(ids)) copy(iIDs, ids) sort.Strings(iIDs) ids = b[j].PublicData().IDs() jIDs := make([]string, len(ids)) copy(jIDs, ids) sort.Strings(jIDs) minLen := len(iIDs) if len(jIDs) < minLen { minLen = len(jIDs) } // Compare iIDs[:minLen] to jIDs[:minLen] element-wise. for c := 0; c < minLen; c++ { if iIDs[c] == jIDs[c] { continue } return iIDs[c] < jIDs[c] } // iIDs[:minLen] is equal to jIDs[:minLen], so sort based on length. return len(iIDs) < len(jIDs) } internal/signer/sort_test.go000066400000000000000000000027551453140004500165430ustar00rootroot00000000000000package signer_test import ( "encoding/json" "sort" "testing" "github.com/theupdateframework/go-tuf/data" "github.com/theupdateframework/go-tuf/internal/signer" "github.com/theupdateframework/go-tuf/pkg/keys" ) type mockSigner struct { value json.RawMessage } func (s *mockSigner) MarshalPrivateKey() (*data.PrivateKey, error) { panic("not implemented") } func (s *mockSigner) UnmarshalPrivateKey(key *data.PrivateKey) error { panic("not implemented") } func (s *mockSigner) PublicData() *data.PublicKey { return &data.PublicKey{ Type: "mock", Scheme: "mock", Algorithms: []data.HashAlgorithm{"mock"}, Value: s.value, } } func (s *mockSigner) SignMessage(message []byte) ([]byte, error) { panic("not implemented") } func TestSignerSortByIDs(t *testing.T) { s1 := &mockSigner{ value: json.RawMessage(`{"mock": 1}`), } s2 := &mockSigner{ value: json.RawMessage(`{"mock": 2}`), } s3 := &mockSigner{ value: json.RawMessage(`{"mock": 3}`), } s4 := &mockSigner{ value: json.RawMessage(`{"mock": 4}`), } s5 := &mockSigner{ value: json.RawMessage(`{"mock": 5}`), } s := []keys.Signer{ s1, s2, s3, s4, s5, } sort.Sort(signer.ByIDs(s)) signerIDs := []string{} for i, signer := range s { ids := signer.PublicData().IDs() if len(ids) != 1 { t.Errorf("Signer %v IDs %v should have length 1", i, ids) } signerIDs = append(signerIDs, ids[0]) } if !sort.StringsAreSorted(signerIDs) { t.Errorf("Signers incorrectly sorted: %+v", signerIDs) } } local_store.go000066400000000000000000000441441453140004500137160ustar00rootroot00000000000000package tuf import ( "bytes" "encoding/json" "errors" "fmt" "io" "io/fs" "log" "os" "path/filepath" "strings" "github.com/secure-systems-lab/go-securesystemslib/encrypted" "github.com/theupdateframework/go-tuf/data" "github.com/theupdateframework/go-tuf/internal/fsutil" "github.com/theupdateframework/go-tuf/internal/sets" "github.com/theupdateframework/go-tuf/pkg/keys" "github.com/theupdateframework/go-tuf/util" ) type LocalStore interface { // GetMeta returns a map from metadata file names (e.g. root.json) to their raw JSON payload or an error. GetMeta() (map[string]json.RawMessage, error) // SetMeta is used to update a metadata file name with a JSON payload. SetMeta(name string, meta json.RawMessage) error // WalkStagedTargets calls targetsFn for each staged target file in paths. // If paths is empty, all staged target files will be walked. WalkStagedTargets(paths []string, targetsFn TargetsWalkFunc) error // FileIsStaged determines if a metadata file is currently staged, to avoid incrementing // version numbers repeatedly while staged. FileIsStaged(filename string) bool // Commit is used to publish staged files to the repository // // This will also reset the staged meta to signal incrementing version numbers. // TUF 1.0 requires that the root metadata version numbers in the repository does not // gaps. To avoid this, we will only increment the number once until we commit. Commit(bool, map[string]int64, map[string]data.Hashes) error // GetSigners return a list of signers for a role. // This may include revoked keys, so the signers should not // be used without filtering. GetSigners(role string) ([]keys.Signer, error) // SaveSigner adds a signer to a role. SaveSigner(role string, signer keys.Signer) error // SignersForRole return a list of signing keys for a role. SignersForKeyIDs(keyIDs []string) []keys.Signer // Clean is used to remove all staged manifests. Clean() error } type PassphraseChanger interface { // ChangePassphrase changes the passphrase for a role keys file. ChangePassphrase(string) error } func MemoryStore(meta map[string]json.RawMessage, files map[string][]byte) LocalStore { if meta == nil { meta = make(map[string]json.RawMessage) } return &memoryStore{ meta: meta, stagedMeta: make(map[string]json.RawMessage), files: files, signerForKeyID: make(map[string]keys.Signer), keyIDsForRole: make(map[string][]string), } } type memoryStore struct { meta map[string]json.RawMessage stagedMeta map[string]json.RawMessage files map[string][]byte signerForKeyID map[string]keys.Signer keyIDsForRole map[string][]string } func (m *memoryStore) GetMeta() (map[string]json.RawMessage, error) { meta := make(map[string]json.RawMessage, len(m.meta)+len(m.stagedMeta)) for key, value := range m.meta { meta[key] = value } for key, value := range m.stagedMeta { meta[key] = value } return meta, nil } func (m *memoryStore) SetMeta(name string, meta json.RawMessage) error { m.stagedMeta[name] = meta return nil } func (m *memoryStore) FileIsStaged(name string) bool { _, ok := m.stagedMeta[name] return ok } func (m *memoryStore) WalkStagedTargets(paths []string, targetsFn TargetsWalkFunc) error { if len(paths) == 0 { for path, data := range m.files { if err := targetsFn(path, bytes.NewReader(data)); err != nil { return err } } return nil } for _, path := range paths { data, ok := m.files[path] if !ok { return ErrFileNotFound{path} } if err := targetsFn(path, bytes.NewReader(data)); err != nil { return err } } return nil } func (m *memoryStore) Commit(consistentSnapshot bool, versions map[string]int64, hashes map[string]data.Hashes) error { for name, meta := range m.stagedMeta { paths := computeMetadataPaths(consistentSnapshot, name, versions) for _, path := range paths { m.meta[path] = meta } // Remove from staged metadata. // This will prompt incrementing version numbers again now that we've // successfully committed the metadata to the local store. delete(m.stagedMeta, name) } return nil } func (m *memoryStore) GetSigners(role string) ([]keys.Signer, error) { keyIDs, ok := m.keyIDsForRole[role] if ok { return m.SignersForKeyIDs(keyIDs), nil } return nil, nil } func (m *memoryStore) SaveSigner(role string, signer keys.Signer) error { keyIDs := signer.PublicData().IDs() for _, keyID := range keyIDs { m.signerForKeyID[keyID] = signer } mergedKeyIDs := sets.DeduplicateStrings(append(m.keyIDsForRole[role], keyIDs...)) m.keyIDsForRole[role] = mergedKeyIDs return nil } func (m *memoryStore) SignersForKeyIDs(keyIDs []string) []keys.Signer { signers := []keys.Signer{} keyIDsSeen := map[string]struct{}{} for _, keyID := range keyIDs { signer, ok := m.signerForKeyID[keyID] if !ok { continue } addSigner := false for _, skid := range signer.PublicData().IDs() { if _, seen := keyIDsSeen[skid]; !seen { addSigner = true } keyIDsSeen[skid] = struct{}{} } if addSigner { signers = append(signers, signer) } } return signers } func (m *memoryStore) Clean() error { return nil } type persistedKeys struct { Encrypted bool `json:"encrypted"` Data json.RawMessage `json:"data"` } type StoreOpts struct { Logger *log.Logger PassFunc util.PassphraseFunc } func FileSystemStore(dir string, p util.PassphraseFunc) LocalStore { return &fileSystemStore{ dir: dir, passphraseFunc: p, logger: log.New(io.Discard, "", 0), signerForKeyID: make(map[string]keys.Signer), keyIDsForRole: make(map[string][]string), } } func FileSystemStoreWithOpts(dir string, opts ...StoreOpts) LocalStore { store := &fileSystemStore{ dir: dir, passphraseFunc: nil, logger: log.New(io.Discard, "", 0), signerForKeyID: make(map[string]keys.Signer), keyIDsForRole: make(map[string][]string), } for _, opt := range opts { if opt.Logger != nil { store.logger = opt.Logger } if opt.PassFunc != nil { store.passphraseFunc = opt.PassFunc } } return store } type fileSystemStore struct { dir string passphraseFunc util.PassphraseFunc logger *log.Logger signerForKeyID map[string]keys.Signer keyIDsForRole map[string][]string } func (f *fileSystemStore) repoDir() string { return filepath.Join(f.dir, "repository") } func (f *fileSystemStore) stagedDir() string { return filepath.Join(f.dir, "staged") } func (f *fileSystemStore) GetMeta() (map[string]json.RawMessage, error) { // Build a map of metadata names (e.g. root.json) to their full paths // (whether in the committed repo dir, or in the staged repo dir). metaPaths := map[string]string{} rd := f.repoDir() committed, err := os.ReadDir(f.repoDir()) if err != nil && !errors.Is(err, fs.ErrNotExist) { return nil, fmt.Errorf("could not list repo dir: %w", err) } for _, e := range committed { imf, err := fsutil.IsMetaFile(e) if err != nil { return nil, err } if imf { name := e.Name() metaPaths[name] = filepath.Join(rd, name) } } sd := f.stagedDir() staged, err := os.ReadDir(sd) if err != nil && !errors.Is(err, fs.ErrNotExist) { return nil, fmt.Errorf("could not list staged dir: %w", err) } for _, e := range staged { imf, err := fsutil.IsMetaFile(e) if err != nil { return nil, err } if imf { name := e.Name() metaPaths[name] = filepath.Join(sd, name) } } meta := make(map[string]json.RawMessage) for name, path := range metaPaths { f, err := os.ReadFile(path) if err != nil { return nil, err } meta[name] = f } return meta, nil } func (f *fileSystemStore) SetMeta(name string, meta json.RawMessage) error { if err := f.createDirs(); err != nil { return err } if err := util.AtomicallyWriteFile(filepath.Join(f.stagedDir(), name), meta, 0644); err != nil { return err } return nil } func (f *fileSystemStore) FileIsStaged(name string) bool { _, err := os.Stat(filepath.Join(f.stagedDir(), name)) return err == nil } func (f *fileSystemStore) createDirs() error { for _, dir := range []string{"keys", "repository", "staged/targets"} { if err := os.MkdirAll(filepath.Join(f.dir, dir), 0755); err != nil { return err } } return nil } func (f *fileSystemStore) WalkStagedTargets(paths []string, targetsFn TargetsWalkFunc) error { if len(paths) == 0 { walkFunc := func(fpath string, info os.FileInfo, err error) error { if err != nil { return err } if info.IsDir() || !info.Mode().IsRegular() { return nil } rel, err := filepath.Rel(filepath.Join(f.stagedDir(), "targets"), fpath) if err != nil { return err } file, err := os.Open(fpath) if err != nil { return err } defer file.Close() return targetsFn(filepath.ToSlash(rel), file) } return filepath.Walk(filepath.Join(f.stagedDir(), "targets"), walkFunc) } // check all the files exist before processing any files for _, path := range paths { realFilepath := filepath.Join(f.stagedDir(), "targets", path) if _, err := os.Stat(realFilepath); err != nil { if os.IsNotExist(err) { return ErrFileNotFound{realFilepath} } return err } } for _, path := range paths { realFilepath := filepath.Join(f.stagedDir(), "targets", path) file, err := os.Open(realFilepath) if err != nil { if os.IsNotExist(err) { return ErrFileNotFound{realFilepath} } return err } err = targetsFn(path, file) file.Close() if err != nil { return err } } return nil } func (f *fileSystemStore) createRepoFile(path string) (*os.File, error) { dst := filepath.Join(f.repoDir(), path) if err := os.MkdirAll(filepath.Dir(dst), 0755); err != nil { return nil, err } return os.Create(dst) } func (f *fileSystemStore) Commit(consistentSnapshot bool, versions map[string]int64, hashes map[string]data.Hashes) error { isTarget := func(path string) bool { return strings.HasPrefix(path, "targets/") } copyToRepo := func(fpath string, info os.FileInfo, err error) error { if err != nil { return err } if info.IsDir() || !info.Mode().IsRegular() { return nil } rel, err := filepath.Rel(f.stagedDir(), fpath) if err != nil { return err } relpath := filepath.ToSlash(rel) var paths []string if isTarget(relpath) { paths = computeTargetPaths(consistentSnapshot, relpath, hashes) } else { paths = computeMetadataPaths(consistentSnapshot, relpath, versions) } var files []io.Writer for _, path := range paths { file, err := f.createRepoFile(path) if err != nil { return err } defer file.Close() files = append(files, file) } staged, err := os.Open(fpath) if err != nil { return err } defer staged.Close() if _, err = io.Copy(io.MultiWriter(files...), staged); err != nil { return err } return nil } // Checks if target file should be deleted needsRemoval := func(fpath string) bool { if consistentSnapshot { // strip out the hash name := strings.SplitN(filepath.Base(fpath), ".", 2) if len(name) != 2 || name[1] == "" { return false } fpath = filepath.Join(filepath.Dir(fpath), name[1]) } _, ok := hashes[filepath.ToSlash(fpath)] return !ok } // Checks if folder is empty folderNeedsRemoval := func(fpath string) bool { f, err := os.Open(fpath) if err != nil { return false } defer f.Close() _, err = f.Readdirnames(1) return err == io.EOF } removeFile := func(fpath string, info os.FileInfo, err error) error { if err != nil { return err } rel, err := filepath.Rel(f.repoDir(), fpath) if err != nil { return err } relpath := filepath.ToSlash(rel) if !info.IsDir() && isTarget(relpath) && needsRemoval(rel) { // Delete the target file if err := os.Remove(fpath); err != nil { return err } // Delete the target folder too if it's empty targetFolder := filepath.Dir(fpath) if folderNeedsRemoval(targetFolder) { if err := os.Remove(targetFolder); err != nil { return err } } } return nil } if err := filepath.Walk(f.stagedDir(), copyToRepo); err != nil { return err } if err := filepath.Walk(f.repoDir(), removeFile); err != nil { return err } return f.Clean() } func (f *fileSystemStore) GetSigners(role string) ([]keys.Signer, error) { keyIDs, ok := f.keyIDsForRole[role] if ok { return f.SignersForKeyIDs(keyIDs), nil } privKeys, _, err := f.loadPrivateKeys(role) if err != nil { if os.IsNotExist(err) { return nil, nil } return nil, err } signers := []keys.Signer{} for _, key := range privKeys { signer, err := keys.GetSigner(key) if err != nil { return nil, err } // Cache the signers. for _, keyID := range signer.PublicData().IDs() { f.keyIDsForRole[role] = append(f.keyIDsForRole[role], keyID) f.signerForKeyID[keyID] = signer } signers = append(signers, signer) } return signers, nil } func (f *fileSystemStore) SignersForKeyIDs(keyIDs []string) []keys.Signer { signers := []keys.Signer{} keyIDsSeen := map[string]struct{}{} for _, keyID := range keyIDs { signer, ok := f.signerForKeyID[keyID] if !ok { continue } addSigner := false for _, skid := range signer.PublicData().IDs() { if _, seen := keyIDsSeen[skid]; !seen { addSigner = true } keyIDsSeen[skid] = struct{}{} } if addSigner { signers = append(signers, signer) } } return signers } // ChangePassphrase changes the passphrase for a role keys file. Implements // PassphraseChanger interface. func (f *fileSystemStore) ChangePassphrase(role string) error { // No need to proceed if passphrase func is not set if f.passphraseFunc == nil { return ErrPassphraseRequired{role} } // Read the existing keys (if any) // If encrypted, will prompt for existing passphrase keys, _, err := f.loadPrivateKeys(role) if err != nil { if os.IsNotExist(err) { f.logger.Printf("Failed to change passphrase. Missing keys file for %s role. \n", role) } return err } // Prompt for new passphrase pass, err := f.passphraseFunc(role, true, true) if err != nil { return err } // Proceed saving the keys pk := &persistedKeys{Encrypted: true} pk.Data, err = encrypted.Marshal(keys, pass) if err != nil { return err } data, err := json.MarshalIndent(pk, "", "\t") if err != nil { return err } if err := util.AtomicallyWriteFile(f.keysPath(role), append(data, '\n'), 0600); err != nil { return err } f.logger.Printf("Successfully changed passphrase for %s keys file\n", role) return nil } func (f *fileSystemStore) SaveSigner(role string, signer keys.Signer) error { if err := f.createDirs(); err != nil { return err } // add the key to the existing keys (if any) privKeys, pass, err := f.loadPrivateKeys(role) if err != nil && !os.IsNotExist(err) { return err } key, err := signer.MarshalPrivateKey() if err != nil { return err } privKeys = append(privKeys, key) // if loadPrivateKeys didn't return a passphrase (because no keys yet exist) // and passphraseFunc is set, get the passphrase so the keys file can // be encrypted later (passphraseFunc being nil indicates the keys file // should not be encrypted) if pass == nil && f.passphraseFunc != nil { pass, err = f.passphraseFunc(role, true, false) if err != nil { return err } } pk := &persistedKeys{} if pass != nil { pk.Data, err = encrypted.Marshal(privKeys, pass) if err != nil { return err } pk.Encrypted = true } else { pk.Data, err = json.MarshalIndent(privKeys, "", "\t") if err != nil { return err } } data, err := json.MarshalIndent(pk, "", "\t") if err != nil { return err } if err := util.AtomicallyWriteFile(f.keysPath(role), append(data, '\n'), 0600); err != nil { return err } // Merge privKeys into f.keyIDsForRole and register signers with // f.signerForKeyID. keyIDsForRole := f.keyIDsForRole[role] for _, key := range privKeys { signer, err := keys.GetSigner(key) if err != nil { return err } keyIDs := signer.PublicData().IDs() for _, keyID := range keyIDs { f.signerForKeyID[keyID] = signer } keyIDsForRole = append(keyIDsForRole, keyIDs...) } f.keyIDsForRole[role] = sets.DeduplicateStrings(keyIDsForRole) return nil } // loadPrivateKeys loads keys for the given role and returns them along with the // passphrase (if read) so that callers don't need to re-read it. func (f *fileSystemStore) loadPrivateKeys(role string) ([]*data.PrivateKey, []byte, error) { file, err := os.Open(f.keysPath(role)) if err != nil { return nil, nil, err } defer file.Close() pk := &persistedKeys{} if err := json.NewDecoder(file).Decode(pk); err != nil { return nil, nil, err } var keys []*data.PrivateKey if !pk.Encrypted { if err := json.Unmarshal(pk.Data, &keys); err != nil { return nil, nil, err } return keys, nil, nil } // the keys are encrypted so cannot be loaded if passphraseFunc is not set if f.passphraseFunc == nil { return nil, nil, ErrPassphraseRequired{role} } // try the empty string as the password first pass := []byte("") if err := encrypted.Unmarshal(pk.Data, &keys, pass); err != nil { pass, err = f.passphraseFunc(role, false, false) if err != nil { return nil, nil, err } if err = encrypted.Unmarshal(pk.Data, &keys, pass); err != nil { return nil, nil, err } } return keys, pass, nil } func (f *fileSystemStore) keysPath(role string) string { return filepath.Join(f.dir, "keys", role+".json") } func (f *fileSystemStore) Clean() error { _, err := os.Stat(filepath.Join(f.repoDir(), "root.json")) if os.IsNotExist(err) { return ErrNewRepository } else if err != nil { return err } if err := os.RemoveAll(f.stagedDir()); err != nil { return err } return os.MkdirAll(filepath.Join(f.stagedDir(), "targets"), 0755) } func computeTargetPaths(consistentSnapshot bool, name string, hashes map[string]data.Hashes) []string { if consistentSnapshot { return util.HashedPaths(name, hashes[name]) } else { return []string{name} } } func computeMetadataPaths(consistentSnapshot bool, name string, versions map[string]int64) []string { copyVersion := false switch name { case "root.json": copyVersion = true case "timestamp.json": copyVersion = false default: if consistentSnapshot { copyVersion = true } else { copyVersion = false } } paths := []string{name} if copyVersion { paths = append(paths, util.VersionedPath(name, versions[name])) } return paths } local_store_test.go000066400000000000000000000036351453140004500147550ustar00rootroot00000000000000package tuf import ( "os" "testing" "github.com/stretchr/testify/assert" "github.com/theupdateframework/go-tuf/pkg/keys" ) func TestLocalStoreSigners(t *testing.T) { tmpdir, err := os.MkdirTemp("", "") if err != nil { t.Fatal(err) } defer func() { os.RemoveAll(tmpdir) }() stores := map[string]LocalStore{ "MemoryStore": MemoryStore(nil, nil), "FileSystemStore": FileSystemStore(tmpdir, nil), } for name, store := range stores { t.Run(name, func(t *testing.T) { signers, err := store.GetSigners("abc") assert.NoError(t, err) assert.Equal(t, len(signers), 0) // Add two signers to role "a". aSigner1, err := keys.GenerateEd25519Key() assert.NoError(t, err) err = store.SaveSigner("a", aSigner1) assert.NoError(t, err) aSigner2, err := keys.GenerateEd25519Key() assert.NoError(t, err) err = store.SaveSigner("a", aSigner2) assert.NoError(t, err) // Add one signer to role "b". bSigner, err := keys.GenerateEd25519Key() assert.NoError(t, err) err = store.SaveSigner("b", bSigner) assert.NoError(t, err) // Add to b again to test deduplication. err = store.SaveSigner("b", bSigner) assert.NoError(t, err) signers, err = store.GetSigners("a") assert.NoError(t, err) assert.ElementsMatch(t, []keys.Signer{aSigner1, aSigner2}, signers) signers, err = store.GetSigners("b") assert.NoError(t, err) assert.ElementsMatch(t, []keys.Signer{bSigner}, signers) a1KeyIDs := aSigner1.PublicData().IDs() a2KeyIDs := aSigner2.PublicData().IDs() bKeyIDs := bSigner.PublicData().IDs() assert.Equal(t, []keys.Signer{aSigner1}, store.SignersForKeyIDs(a1KeyIDs)) assert.Equal(t, []keys.Signer{aSigner2}, store.SignersForKeyIDs(a2KeyIDs)) assert.ElementsMatch(t, []keys.Signer{aSigner1, aSigner2}, store.SignersForKeyIDs(append(a1KeyIDs, a2KeyIDs...))) assert.Equal(t, []keys.Signer{bSigner}, store.SignersForKeyIDs(bKeyIDs)) }) } } pkg/000077500000000000000000000000001453140004500116335ustar00rootroot00000000000000pkg/deprecated/000077500000000000000000000000001453140004500137335ustar00rootroot00000000000000pkg/deprecated/deprecated_repo_test.go000066400000000000000000000065541453140004500204600ustar00rootroot00000000000000package deprecated import ( "crypto" "crypto/elliptic" "crypto/rand" "crypto/sha256" "encoding/json" "testing" "github.com/secure-systems-lab/go-securesystemslib/cjson" repo "github.com/theupdateframework/go-tuf" "github.com/theupdateframework/go-tuf/data" _ "github.com/theupdateframework/go-tuf/pkg/deprecated/set_ecdsa" "github.com/theupdateframework/go-tuf/pkg/keys" . "gopkg.in/check.v1" ) func Test(t *testing.T) { TestingT(t) } type RepoSuite struct{} var _ = Suite(&RepoSuite{}) func genKey(c *C, r *repo.Repo, role string) []string { keyids, err := r.GenKey(role) c.Assert(err, IsNil) c.Assert(len(keyids) > 0, Equals, true) return keyids } // Deprecated ecdsa key support: Support verification against roots that were // signed with hex-encoded ecdsa keys. func (rs *RepoSuite) TestDeprecatedHexEncodedKeysSucceed(c *C) { type deprecatedP256Verifier struct { PublicKey data.HexBytes `json:"public"` } files := map[string][]byte{"foo.txt": []byte("foo")} local := repo.MemoryStore(make(map[string]json.RawMessage), files) r, err := repo.NewRepo(local) c.Assert(err, IsNil) r.Init(false) // Add a root key with hex-encoded ecdsa format - compliant "ecdsa" signer, err := keys.GenerateEcdsaKey() c.Assert(err, IsNil) pub := signer.PublicKey keyValBytes, err := json.Marshal(&deprecatedP256Verifier{PublicKey: elliptic.Marshal(pub.Curve, pub.X, pub.Y)}) c.Assert(err, IsNil) publicData := &data.PublicKey{ Type: data.KeyTypeECDSA_SHA2_P256, Scheme: data.KeySchemeECDSA_SHA2_P256, Algorithms: data.HashAlgorithms, Value: keyValBytes, } err = r.AddVerificationKey("root", publicData) c.Assert(err, IsNil) // Add a root key with hex-encoded ecdsa format - deprecated "ecdsa-sha2-nistp256" signerDeprecated, err := keys.GenerateEcdsaKey() c.Assert(err, IsNil) pubDeprecated := signerDeprecated.PublicKey keyValBytesDeprecated, err := json.Marshal(&deprecatedP256Verifier{PublicKey: elliptic.Marshal(pubDeprecated.Curve, pubDeprecated.X, pubDeprecated.Y)}) c.Assert(err, IsNil) publicDataDeprecated := &data.PublicKey{ Type: data.KeyTypeECDSA_SHA2_P256_OLD_FMT, Scheme: data.KeySchemeECDSA_SHA2_P256, Algorithms: data.HashAlgorithms, Value: keyValBytesDeprecated, } err = r.AddVerificationKey("root", publicDataDeprecated) c.Assert(err, IsNil) // Add other keys as normal genKey(c, r, "targets") genKey(c, r, "snapshot") genKey(c, r, "timestamp") c.Assert(r.AddTarget("foo.txt", nil), IsNil) // Sign the root role manually rootMeta, err := r.SignedMeta("root.json") c.Assert(err, IsNil) rootCanonical, err := cjson.EncodeCanonical(rootMeta.Signed) c.Assert(err, IsNil) hash := sha256.Sum256(rootCanonical) rootSig, err := signer.PrivateKey.Sign(rand.Reader, hash[:], crypto.SHA256) c.Assert(err, IsNil) for _, id := range publicData.IDs() { c.Assert(r.AddOrUpdateSignature("root.json", data.Signature{ KeyID: id, Signature: rootSig}), IsNil) } rootSigDeprecated, err := signerDeprecated.PrivateKey.Sign(rand.Reader, hash[:], crypto.SHA256) c.Assert(err, IsNil) for _, id := range publicDataDeprecated.IDs() { c.Assert(r.AddOrUpdateSignature("root.json", data.Signature{ KeyID: id, Signature: rootSigDeprecated}), IsNil) } // Committing should succeed because the deprecated key pkg is added. c.Assert(r.Snapshot(), IsNil) c.Assert(r.Timestamp(), IsNil) c.Assert(r.Commit(), IsNil) } pkg/deprecated/set_ecdsa/000077500000000000000000000000001453140004500156655ustar00rootroot00000000000000pkg/deprecated/set_ecdsa/set_ecdsa.go000066400000000000000000000017631453140004500201550ustar00rootroot00000000000000package set_ecdsa import ( "errors" "github.com/theupdateframework/go-tuf/data" "github.com/theupdateframework/go-tuf/pkg/keys" ) /* Importing this package will allow support for both hex-encoded ECDSA verifiers and PEM-encoded ECDSA verifiers. Note that this package imports "github.com/theupdateframework/go-tuf/pkg/keys" and overrides the ECDSA verifier loaded at init time in that package. */ func init() { _, ok := keys.VerifierMap.Load(data.KeyTypeECDSA_SHA2_P256) if !ok { panic(errors.New("expected to override previously loaded PEM-only ECDSA verifier")) } // store a mapping for both data.KeyTypeECDSA_SHA2_P256_OLD_FMT and data.KeyTypeECDSA_SHA2_P256 // in case a client is verifying using both the old non-compliant format and a newly generated root keys.VerifierMap.Store(data.KeyTypeECDSA_SHA2_P256, keys.NewDeprecatedEcdsaVerifier) // compliant format keys.VerifierMap.Store(data.KeyTypeECDSA_SHA2_P256_OLD_FMT, keys.NewDeprecatedEcdsaVerifier) // deprecated format } pkg/keys/000077500000000000000000000000001453140004500126065ustar00rootroot00000000000000pkg/keys/deprecated_ecdsa.go000066400000000000000000000046571453140004500164100ustar00rootroot00000000000000package keys import ( "bytes" "crypto/ecdsa" "crypto/elliptic" "crypto/sha256" "encoding/json" "errors" "fmt" "io" "github.com/theupdateframework/go-tuf/data" ) func NewDeprecatedEcdsaVerifier() Verifier { return &ecdsaVerifierWithDeprecatedSupport{} } type ecdsaVerifierWithDeprecatedSupport struct { key *data.PublicKey // This will switch based on whether this is a PEM-encoded key // or a deprecated hex-encoded key. Verifier } func (p *ecdsaVerifierWithDeprecatedSupport) UnmarshalPublicKey(key *data.PublicKey) error { p.key = key pemVerifier := &EcdsaVerifier{} if err := pemVerifier.UnmarshalPublicKey(key); err != nil { // Try the deprecated hex-encoded verifier hexVerifier := &deprecatedP256Verifier{} if err := hexVerifier.UnmarshalPublicKey(key); err != nil { return err } p.Verifier = hexVerifier return nil } p.Verifier = pemVerifier return nil } /* Deprecated ecdsaVerifier that used hex-encoded public keys. This MAY be used to verify existing metadata that used this old format. This will be deprecated soon, ensure that repositories are re-signed and clients receieve a fully compliant root. */ type deprecatedP256Verifier struct { PublicKey data.HexBytes `json:"public"` key *data.PublicKey } func (p *deprecatedP256Verifier) Public() string { return p.PublicKey.String() } func (p *deprecatedP256Verifier) Verify(msg, sigBytes []byte) error { x, y := elliptic.Unmarshal(elliptic.P256(), p.PublicKey) k := &ecdsa.PublicKey{ Curve: elliptic.P256(), X: x, Y: y, } hash := sha256.Sum256(msg) if !ecdsa.VerifyASN1(k, hash[:], sigBytes) { return errors.New("tuf: deprecated ecdsa signature verification failed") } return nil } func (p *deprecatedP256Verifier) MarshalPublicKey() *data.PublicKey { return p.key } func (p *deprecatedP256Verifier) UnmarshalPublicKey(key *data.PublicKey) error { // Prepare decoder limited to 512Kb dec := json.NewDecoder(io.LimitReader(bytes.NewReader(key.Value), MaxJSONKeySize)) // Unmarshal key value if err := dec.Decode(p); err != nil { if errors.Is(err, io.EOF) || errors.Is(err, io.ErrUnexpectedEOF) { return fmt.Errorf("tuf: the public key is truncated or too large: %w", err) } return err } curve := elliptic.P256() // Parse as uncompressed marshalled point. x, _ := elliptic.Unmarshal(curve, p.PublicKey) if x == nil { return errors.New("tuf: invalid ecdsa public key point") } p.key = key return nil } pkg/keys/deprecated_ecdsa_test.go000066400000000000000000000072451453140004500174430ustar00rootroot00000000000000package keys import ( "crypto" "crypto/ecdsa" "crypto/elliptic" "crypto/rand" "crypto/sha256" "encoding/json" "errors" "github.com/theupdateframework/go-tuf/data" . "gopkg.in/check.v1" ) type DeprecatedECDSASuite struct{} var _ = Suite(DeprecatedECDSASuite{}) type deprecatedEcdsaSigner struct { *ecdsa.PrivateKey } type deprecatedEcdsaPublic struct { PublicKey data.HexBytes `json:"public"` } func (s deprecatedEcdsaSigner) PublicData() *data.PublicKey { pub := s.Public().(*ecdsa.PublicKey) keyValBytes, _ := json.Marshal(deprecatedEcdsaPublic{ PublicKey: elliptic.Marshal(pub.Curve, pub.X, pub.Y)}) return &data.PublicKey{ Type: data.KeyTypeECDSA_SHA2_P256, Scheme: data.KeySchemeECDSA_SHA2_P256, Algorithms: data.HashAlgorithms, Value: keyValBytes, } } func (s deprecatedEcdsaSigner) SignMessage(message []byte) ([]byte, error) { hash := sha256.Sum256(message) return s.PrivateKey.Sign(rand.Reader, hash[:], crypto.SHA256) } func (s deprecatedEcdsaSigner) ContainsID(id string) bool { return s.PublicData().ContainsID(id) } func (deprecatedEcdsaSigner) MarshalPrivateKey() (*data.PrivateKey, error) { return nil, errors.New("not implemented for test") } func (deprecatedEcdsaSigner) UnmarshalPrivateKey(key *data.PrivateKey) error { return errors.New("not implemented for test") } func generatedDeprecatedSigner() (*deprecatedEcdsaSigner, error) { privkey, err := ecdsa.GenerateKey(elliptic.P256(), rand.Reader) if err != nil { return nil, err } return &deprecatedEcdsaSigner{privkey}, nil } func (DeprecatedECDSASuite) TestSignVerifyDeprecatedFormat(c *C) { // Create an ecdsa key with a deprecated format. signer, err := generatedDeprecatedSigner() c.Assert(err, IsNil) msg := []byte("foo") sig, err := signer.SignMessage(msg) c.Assert(err, IsNil) pub := signer.PublicKey keyValBytes, err := json.Marshal(&deprecatedP256Verifier{PublicKey: elliptic.Marshal(pub.Curve, pub.X, pub.Y)}) c.Assert(err, IsNil) publicData := &data.PublicKey{ Type: data.KeyTypeECDSA_SHA2_P256, Scheme: data.KeySchemeECDSA_SHA2_P256, Algorithms: data.HashAlgorithms, Value: keyValBytes, } deprecatedEcdsa := NewDeprecatedEcdsaVerifier() err = deprecatedEcdsa.UnmarshalPublicKey(publicData) c.Assert(err, IsNil) c.Assert(deprecatedEcdsa.Verify(msg, sig), IsNil) } func (DeprecatedECDSASuite) TestECDSAVerifyMismatchMessage(c *C) { signer, err := generatedDeprecatedSigner() c.Assert(err, IsNil) msg := []byte("foo") sig, err := signer.SignMessage(msg) c.Assert(err, IsNil) publicData := signer.PublicData() deprecatedEcdsa := NewDeprecatedEcdsaVerifier() err = deprecatedEcdsa.UnmarshalPublicKey(publicData) c.Assert(err, IsNil) c.Assert(deprecatedEcdsa.Verify([]byte("notfoo"), sig), ErrorMatches, "tuf: deprecated ecdsa signature verification failed") } func (DeprecatedECDSASuite) TestECDSAVerifyMismatchPubKey(c *C) { signer, err := generatedDeprecatedSigner() c.Assert(err, IsNil) msg := []byte("foo") sig, err := signer.SignMessage(msg) c.Assert(err, IsNil) signerNew, err := generatedDeprecatedSigner() c.Assert(err, IsNil) deprecatedEcdsa := NewDeprecatedEcdsaVerifier() err = deprecatedEcdsa.UnmarshalPublicKey(signerNew.PublicData()) c.Assert(err, IsNil) c.Assert(deprecatedEcdsa.Verify([]byte("notfoo"), sig), ErrorMatches, "tuf: deprecated ecdsa signature verification failed") } func (DeprecatedECDSASuite) TestMarshalUnmarshalPublicKey(c *C) { signer, err := generatedDeprecatedSigner() c.Assert(err, IsNil) pub := signer.PublicData() deprecatedEcdsa := NewDeprecatedEcdsaVerifier() err = deprecatedEcdsa.UnmarshalPublicKey(pub) c.Assert(err, IsNil) c.Assert(deprecatedEcdsa.MarshalPublicKey(), DeepEquals, pub) } pkg/keys/ecdsa.go000066400000000000000000000107301453140004500142150ustar00rootroot00000000000000package keys import ( "bytes" "crypto/ecdsa" "crypto/elliptic" "crypto/rand" "crypto/sha256" "crypto/x509" "encoding/json" "encoding/pem" "errors" "fmt" "io" "github.com/theupdateframework/go-tuf/data" ) func init() { // Note: we use LoadOrStore here to prevent accidentally overriding the // an explicit deprecated ECDSA verifier. // TODO: When deprecated ECDSA is removed, this can switch back to Store. VerifierMap.LoadOrStore(data.KeyTypeECDSA_SHA2_P256_OLD_FMT, NewEcdsaVerifier) VerifierMap.LoadOrStore(data.KeyTypeECDSA_SHA2_P256, NewEcdsaVerifier) SignerMap.Store(data.KeyTypeECDSA_SHA2_P256_OLD_FMT, newEcdsaSigner) SignerMap.Store(data.KeyTypeECDSA_SHA2_P256, newEcdsaSigner) } func NewEcdsaVerifier() Verifier { return &EcdsaVerifier{} } func newEcdsaSigner() Signer { return &ecdsaSigner{} } type EcdsaVerifier struct { PublicKey *PKIXPublicKey `json:"public"` ecdsaKey *ecdsa.PublicKey key *data.PublicKey } func (p *EcdsaVerifier) Public() string { // This is already verified to succeed when unmarshalling a public key. r, err := x509.MarshalPKIXPublicKey(p.ecdsaKey) if err != nil { // TODO: Gracefully handle these errors. // See https://github.com/theupdateframework/go-tuf/issues/363 panic(err) } return string(r) } func (p *EcdsaVerifier) Verify(msg, sigBytes []byte) error { hash := sha256.Sum256(msg) if !ecdsa.VerifyASN1(p.ecdsaKey, hash[:], sigBytes) { return errors.New("tuf: ecdsa signature verification failed") } return nil } func (p *EcdsaVerifier) MarshalPublicKey() *data.PublicKey { return p.key } func (p *EcdsaVerifier) UnmarshalPublicKey(key *data.PublicKey) error { // Prepare decoder limited to 512Kb dec := json.NewDecoder(io.LimitReader(bytes.NewReader(key.Value), MaxJSONKeySize)) // Unmarshal key value if err := dec.Decode(p); err != nil { if errors.Is(err, io.EOF) || errors.Is(err, io.ErrUnexpectedEOF) { return fmt.Errorf("tuf: the public key is truncated or too large: %w", err) } return err } ecdsaKey, ok := p.PublicKey.PublicKey.(*ecdsa.PublicKey) if !ok { return fmt.Errorf("invalid public key") } if _, err := x509.MarshalPKIXPublicKey(ecdsaKey); err != nil { return fmt.Errorf("marshalling to PKIX key: invalid public key") } p.ecdsaKey = ecdsaKey p.key = key return nil } type ecdsaSigner struct { *ecdsa.PrivateKey } type ecdsaPrivateKeyValue struct { Private string `json:"private"` Public *PKIXPublicKey `json:"public"` } func (s *ecdsaSigner) PublicData() *data.PublicKey { // This uses a trusted public key JSON format with a trusted Public value. keyValBytes, _ := json.Marshal(EcdsaVerifier{PublicKey: &PKIXPublicKey{PublicKey: s.Public()}}) return &data.PublicKey{ Type: data.KeyTypeECDSA_SHA2_P256, Scheme: data.KeySchemeECDSA_SHA2_P256, Algorithms: data.HashAlgorithms, Value: keyValBytes, } } func (s *ecdsaSigner) SignMessage(message []byte) ([]byte, error) { hash := sha256.Sum256(message) return ecdsa.SignASN1(rand.Reader, s.PrivateKey, hash[:]) } func (s *ecdsaSigner) MarshalPrivateKey() (*data.PrivateKey, error) { priv, err := x509.MarshalECPrivateKey(s.PrivateKey) if err != nil { return nil, err } pemKey := pem.EncodeToMemory(&pem.Block{Type: "EC PRIVATE KEY", Bytes: priv}) val, err := json.Marshal(ecdsaPrivateKeyValue{ Private: string(pemKey), Public: &PKIXPublicKey{PublicKey: s.Public()}, }) if err != nil { return nil, err } return &data.PrivateKey{ Type: data.KeyTypeECDSA_SHA2_P256, Scheme: data.KeySchemeECDSA_SHA2_P256, Algorithms: data.HashAlgorithms, Value: val, }, nil } func (s *ecdsaSigner) UnmarshalPrivateKey(key *data.PrivateKey) error { val := ecdsaPrivateKeyValue{} if err := json.Unmarshal(key.Value, &val); err != nil { return err } block, _ := pem.Decode([]byte(val.Private)) if block == nil { return errors.New("invalid PEM value") } if block.Type != "EC PRIVATE KEY" { return fmt.Errorf("invalid block type: %s", block.Type) } k, err := x509.ParseECPrivateKey(block.Bytes) if err != nil { return err } if k.Curve != elliptic.P256() { return errors.New("unsupported ecdsa curve") } if _, err := json.Marshal(EcdsaVerifier{ PublicKey: &PKIXPublicKey{PublicKey: k.Public()}}); err != nil { return fmt.Errorf("invalid public key: %s", err) } s.PrivateKey = k return nil } func GenerateEcdsaKey() (*ecdsaSigner, error) { privkey, err := ecdsa.GenerateKey(elliptic.P256(), rand.Reader) if err != nil { return nil, err } return &ecdsaSigner{privkey}, nil } pkg/keys/ecdsa_test.go000066400000000000000000000107471453140004500152640ustar00rootroot00000000000000package keys import ( "crypto/ecdsa" "crypto/elliptic" "crypto/rand" "encoding/hex" "encoding/json" "errors" "io" "strings" fuzz "github.com/google/gofuzz" "github.com/theupdateframework/go-tuf/data" . "gopkg.in/check.v1" ) type ECDSASuite struct{} var _ = Suite(ECDSASuite{}) func (ECDSASuite) TestSignVerify(c *C) { signer, err := GenerateEcdsaKey() c.Assert(err, IsNil) msg := []byte("foo") sig, err := signer.SignMessage(msg) c.Assert(err, IsNil) publicData := signer.PublicData() pubKey, err := GetVerifier(publicData) c.Assert(err, IsNil) c.Assert(pubKey.Verify(msg, sig), IsNil) } func (ECDSASuite) TestECDSAVerifyMismatchMessage(c *C) { signer, err := GenerateEcdsaKey() c.Assert(err, IsNil) msg := []byte("foo") sig, err := signer.SignMessage(msg) c.Assert(err, IsNil) publicData := signer.PublicData() pubKey, err := GetVerifier(publicData) c.Assert(err, IsNil) c.Assert(pubKey.Verify([]byte("notfoo"), sig), ErrorMatches, "tuf: ecdsa signature verification failed") } func (ECDSASuite) TestECDSAVerifyMismatchPubKey(c *C) { signer, err := GenerateEcdsaKey() c.Assert(err, IsNil) msg := []byte("foo") sig, err := signer.SignMessage(msg) c.Assert(err, IsNil) signerNew, err := GenerateEcdsaKey() c.Assert(err, IsNil) pubKey, err := GetVerifier(signerNew.PublicData()) c.Assert(err, IsNil) c.Assert(pubKey.Verify([]byte("notfoo"), sig), ErrorMatches, "tuf: ecdsa signature verification failed") } func (ECDSASuite) TestSignVerifyDeprecatedFails(c *C) { // Create an ecdsa key with a deprecated format. signer, err := GenerateEcdsaKey() c.Assert(err, IsNil) type deprecatedP256Verifier struct { PublicKey data.HexBytes `json:"public"` } pub := signer.PublicKey keyValBytes, err := json.Marshal(&deprecatedP256Verifier{PublicKey: elliptic.Marshal(pub.Curve, pub.X, pub.Y)}) c.Assert(err, IsNil) publicData := &data.PublicKey{ Type: data.KeyTypeECDSA_SHA2_P256, Scheme: data.KeySchemeECDSA_SHA2_P256, Algorithms: data.HashAlgorithms, Value: keyValBytes, } _, err = GetVerifier(publicData) c.Assert(err, ErrorMatches, "tuf: error unmarshalling key: invalid PEM value") } func (ECDSASuite) TestMarshalUnmarshalPublicKey(c *C) { signer, err := GenerateEcdsaKey() c.Assert(err, IsNil) publicData := signer.PublicData() pubKey, err := GetVerifier(publicData) c.Assert(err, IsNil) c.Assert(pubKey.MarshalPublicKey(), DeepEquals, publicData) } func (ECDSASuite) TestMarshalUnmarshalPrivateKey(c *C) { signer, err := GenerateEcdsaKey() c.Assert(err, IsNil) privateData, err := signer.MarshalPrivateKey() c.Assert(err, IsNil) c.Assert(privateData.Type, Equals, data.KeyTypeECDSA_SHA2_P256) c.Assert(privateData.Scheme, Equals, data.KeySchemeECDSA_SHA2_P256) c.Assert(privateData.Algorithms, DeepEquals, data.HashAlgorithms) s, err := GetSigner(privateData) c.Assert(err, IsNil) c.Assert(s, DeepEquals, signer) } func (ECDSASuite) TestUnmarshalECDSA(c *C) { priv, err := ecdsa.GenerateKey(elliptic.P256(), strings.NewReader("00001-deterministic-buffer-for-key-generation")) c.Assert(err, IsNil) signer := &ecdsaSigner{priv} goodKey := signer.PublicData() verifier := NewEcdsaVerifier() c.Assert(verifier.UnmarshalPublicKey(goodKey), IsNil) } func (ECDSASuite) TestUnmarshalECDSA_Invalid(c *C) { badKeyValue, err := json.Marshal(true) c.Assert(err, IsNil) badKey := &data.PublicKey{ Type: data.KeyTypeECDSA_SHA2_P256, Scheme: data.KeySchemeECDSA_SHA2_P256, Algorithms: data.HashAlgorithms, Value: badKeyValue, } verifier := NewEcdsaVerifier() c.Assert(verifier.UnmarshalPublicKey(badKey), ErrorMatches, "json: cannot unmarshal.*") } func (ECDSASuite) TestUnmarshalECDSA_FastFuzz(c *C) { verifier := NewEcdsaVerifier() for i := 0; i < 50; i++ { // Ensure no basic panic f := fuzz.New() var publicData data.PublicKey f.Fuzz(&publicData) verifier.UnmarshalPublicKey(&publicData) } } func (ECDSASuite) TestUnmarshalECDSA_TooLongContent(c *C) { randomSeed := make([]byte, MaxJSONKeySize) _, err := io.ReadFull(rand.Reader, randomSeed) c.Assert(err, IsNil) tooLongPayload, err := json.Marshal( &ed25519Verifier{ PublicKey: data.HexBytes(hex.EncodeToString(randomSeed)), }, ) c.Assert(err, IsNil) badKey := &data.PublicKey{ Type: data.KeyTypeECDSA_SHA2_P256, Scheme: data.KeySchemeECDSA_SHA2_P256, Algorithms: data.HashAlgorithms, Value: tooLongPayload, } verifier := NewEcdsaVerifier() err = verifier.UnmarshalPublicKey(badKey) c.Assert(errors.Is(err, io.ErrUnexpectedEOF), Equals, true) } pkg/keys/ed25519.go000066400000000000000000000101701453140004500141320ustar00rootroot00000000000000package keys import ( "bytes" "crypto" "crypto/ed25519" "crypto/rand" "crypto/subtle" "encoding/json" "errors" "fmt" "io" "github.com/theupdateframework/go-tuf/data" ) func init() { SignerMap.Store(data.KeyTypeEd25519, NewEd25519Signer) VerifierMap.Store(data.KeyTypeEd25519, NewEd25519Verifier) } func NewEd25519Signer() Signer { return &ed25519Signer{} } func NewEd25519Verifier() Verifier { return &ed25519Verifier{} } type ed25519Verifier struct { PublicKey data.HexBytes `json:"public"` key *data.PublicKey } func (e *ed25519Verifier) Public() string { return string(e.PublicKey) } func (e *ed25519Verifier) Verify(msg, sig []byte) error { if !ed25519.Verify([]byte(e.PublicKey), msg, sig) { return errors.New("tuf: ed25519 signature verification failed") } return nil } func (e *ed25519Verifier) MarshalPublicKey() *data.PublicKey { return e.key } func (e *ed25519Verifier) UnmarshalPublicKey(key *data.PublicKey) error { e.key = key // Prepare decoder limited to 512Kb dec := json.NewDecoder(io.LimitReader(bytes.NewReader(key.Value), MaxJSONKeySize)) // Unmarshal key value if err := dec.Decode(e); err != nil { if errors.Is(err, io.EOF) || errors.Is(err, io.ErrUnexpectedEOF) { return fmt.Errorf("tuf: the public key is truncated or too large: %w", err) } return err } if n := len(e.PublicKey); n != ed25519.PublicKeySize { return fmt.Errorf("tuf: unexpected public key length for ed25519 key, expected %d, got %d", ed25519.PublicKeySize, n) } return nil } type Ed25519PrivateKeyValue struct { Public data.HexBytes `json:"public"` Private data.HexBytes `json:"private"` } type ed25519Signer struct { ed25519.PrivateKey } func GenerateEd25519Key() (*ed25519Signer, error) { _, private, err := ed25519.GenerateKey(rand.Reader) if err != nil { return nil, err } if err != nil { return nil, err } return &ed25519Signer{ PrivateKey: ed25519.PrivateKey(data.HexBytes(private)), }, nil } func NewEd25519SignerFromKey(keyValue Ed25519PrivateKeyValue) *ed25519Signer { return &ed25519Signer{ PrivateKey: ed25519.PrivateKey(data.HexBytes(keyValue.Private)), } } func (e *ed25519Signer) SignMessage(message []byte) ([]byte, error) { return e.Sign(rand.Reader, message, crypto.Hash(0)) } func (e *ed25519Signer) MarshalPrivateKey() (*data.PrivateKey, error) { valueBytes, err := json.Marshal(Ed25519PrivateKeyValue{ Public: data.HexBytes([]byte(e.PrivateKey.Public().(ed25519.PublicKey))), Private: data.HexBytes(e.PrivateKey), }) if err != nil { return nil, err } return &data.PrivateKey{ Type: data.KeyTypeEd25519, Scheme: data.KeySchemeEd25519, Algorithms: data.HashAlgorithms, Value: valueBytes, }, nil } func (e *ed25519Signer) UnmarshalPrivateKey(key *data.PrivateKey) error { keyValue := &Ed25519PrivateKeyValue{} // Prepare decoder limited to 512Kb dec := json.NewDecoder(io.LimitReader(bytes.NewReader(key.Value), MaxJSONKeySize)) // Unmarshal key value if err := dec.Decode(keyValue); err != nil { if errors.Is(err, io.EOF) || errors.Is(err, io.ErrUnexpectedEOF) { return fmt.Errorf("tuf: the private key is truncated or too large: %w", err) } } // Check private key length if n := len(keyValue.Private); n != ed25519.PrivateKeySize { return fmt.Errorf("tuf: invalid ed25519 private key length, expected %d, got %d", ed25519.PrivateKeySize, n) } // Generate public key from private key pub, _, err := ed25519.GenerateKey(bytes.NewReader(keyValue.Private)) if err != nil { return fmt.Errorf("tuf: unable to derive public key from private key: %w", err) } // Compare keys if subtle.ConstantTimeCompare(keyValue.Public, pub) != 1 { return errors.New("tuf: public and private keys don't match") } // Prepare signer *e = ed25519Signer{ PrivateKey: ed25519.PrivateKey(data.HexBytes(keyValue.Private)), } return nil } func (e *ed25519Signer) PublicData() *data.PublicKey { keyValBytes, _ := json.Marshal(ed25519Verifier{PublicKey: []byte(e.PrivateKey.Public().(ed25519.PublicKey))}) return &data.PublicKey{ Type: data.KeyTypeEd25519, Scheme: data.KeySchemeEd25519, Algorithms: data.HashAlgorithms, Value: keyValBytes, } } pkg/keys/ed25519_test.go000066400000000000000000000046431453140004500152010ustar00rootroot00000000000000package keys import ( "crypto/ed25519" "crypto/rand" "encoding/hex" "encoding/json" "errors" "io" "strings" fuzz "github.com/google/gofuzz" "github.com/theupdateframework/go-tuf/data" . "gopkg.in/check.v1" ) type Ed25519Suite struct{} var _ = Suite(&Ed25519Suite{}) func (Ed25519Suite) TestUnmarshalEd25519(c *C) { pub, _, err := ed25519.GenerateKey(strings.NewReader("00001-deterministic-buffer-for-key-generation")) c.Assert(err, IsNil) publicKey, err := json.Marshal(map[string]string{ "public": hex.EncodeToString(pub), }) c.Assert(err, IsNil) badKey := &data.PublicKey{ Type: data.KeyTypeEd25519, Scheme: data.KeySchemeEd25519, Algorithms: data.HashAlgorithms, Value: publicKey, } verifier := NewEd25519Verifier() c.Assert(verifier.UnmarshalPublicKey(badKey), IsNil) } func (Ed25519Suite) TestUnmarshalEd25519_Invalid(c *C) { badKeyValue, err := json.Marshal(true) c.Assert(err, IsNil) badKey := &data.PublicKey{ Type: data.KeyTypeEd25519, Scheme: data.KeySchemeEd25519, Algorithms: data.HashAlgorithms, Value: badKeyValue, } verifier := NewEd25519Verifier() c.Assert(verifier.UnmarshalPublicKey(badKey), ErrorMatches, "json: cannot unmarshal.*") } func (Ed25519Suite) TestUnmarshalEd25519_FastFuzz(c *C) { verifier := NewEd25519Verifier() for i := 0; i < 50; i++ { // Ensure no basic panic f := fuzz.New() var publicData data.PublicKey f.Fuzz(&publicData) verifier.UnmarshalPublicKey(&publicData) } } func (Ed25519Suite) TestUnmarshalEd25519_TooLongContent(c *C) { randomSeed := make([]byte, MaxJSONKeySize) _, err := io.ReadFull(rand.Reader, randomSeed) c.Assert(err, IsNil) tooLongPayload, err := json.Marshal( &ed25519Verifier{ PublicKey: data.HexBytes(hex.EncodeToString(randomSeed)), }, ) c.Assert(err, IsNil) badKey := &data.PublicKey{ Type: data.KeyTypeEd25519, Scheme: data.KeySchemeEd25519, Algorithms: data.HashAlgorithms, Value: tooLongPayload, } verifier := NewEd25519Verifier() err = verifier.UnmarshalPublicKey(badKey) c.Assert(errors.Is(err, io.ErrUnexpectedEOF), Equals, true) } func (Ed25519Suite) TestSignVerify(c *C) { signer, err := GenerateEd25519Key() c.Assert(err, IsNil) msg := []byte("foo") sig, err := signer.SignMessage(msg) c.Assert(err, IsNil) publicData := signer.PublicData() pubKey, err := GetVerifier(publicData) c.Assert(err, IsNil) c.Assert(pubKey.Verify(msg, sig), IsNil) } pkg/keys/keys.go000066400000000000000000000046511453140004500141160ustar00rootroot00000000000000package keys import ( "errors" "fmt" "sync" "github.com/theupdateframework/go-tuf/data" ) // MaxJSONKeySize defines the maximum length of a JSON payload. const MaxJSONKeySize = 512 * 1024 // 512Kb // SignerMap stores mapping between key type strings and signer constructors. var SignerMap sync.Map // Verifier stores mapping between key type strings and verifier constructors. var VerifierMap sync.Map var ( ErrInvalid = errors.New("tuf: signature verification failed") ErrInvalidKey = errors.New("invalid key") ) // A Verifier verifies public key signatures. type Verifier interface { // UnmarshalPublicKey takes key data to a working verifier implementation for the key type. // This performs any validation over the data.PublicKey to ensure that the verifier is usable // to verify signatures. UnmarshalPublicKey(key *data.PublicKey) error // MarshalPublicKey returns the data.PublicKey object associated with the verifier. MarshalPublicKey() *data.PublicKey // This is the public string used as a unique identifier for the verifier instance. Public() string // Verify takes a message and signature, all as byte slices, // and determines whether the signature is valid for the given // key and message. Verify(msg, sig []byte) error } type Signer interface { // MarshalPrivateKey returns the private key data. MarshalPrivateKey() (*data.PrivateKey, error) // UnmarshalPrivateKey takes private key data to a working Signer implementation for the key type. UnmarshalPrivateKey(key *data.PrivateKey) error // Returns the public data.PublicKey from the private key PublicData() *data.PublicKey // Sign returns the signature of the message. // The signer is expected to do its own hashing, so the full message will be // provided as the message to Sign with a zero opts.HashFunc(). SignMessage(message []byte) ([]byte, error) } func GetVerifier(key *data.PublicKey) (Verifier, error) { st, ok := VerifierMap.Load(key.Type) if !ok { return nil, ErrInvalidKey } s := st.(func() Verifier)() if err := s.UnmarshalPublicKey(key); err != nil { return nil, fmt.Errorf("tuf: error unmarshalling key: %w", err) } return s, nil } func GetSigner(key *data.PrivateKey) (Signer, error) { st, ok := SignerMap.Load(key.Type) if !ok { return nil, ErrInvalidKey } s := st.(func() Signer)() if err := s.UnmarshalPrivateKey(key); err != nil { return nil, fmt.Errorf("tuf: error unmarshalling key: %w", err) } return s, nil } pkg/keys/keys_test.go000066400000000000000000000016331453140004500151520ustar00rootroot00000000000000package keys import ( "testing" "github.com/theupdateframework/go-tuf/data" . "gopkg.in/check.v1" ) // Hook up gocheck into the "go test" runner. func Test(t *testing.T) { TestingT(t) } type KeysSuite struct{} var _ = Suite(&KeysSuite{}) func (KeysSuite) TestSignerKeyIDs(c *C) { _, err := GenerateEd25519Key() c.Assert(err, IsNil) // If we have a TUF-0.9 key, we won't have a scheme. signer, err := GenerateEd25519Key() c.Assert(err, IsNil) privKey, err := signer.MarshalPrivateKey() c.Assert(err, IsNil) privKey.Scheme = "" err = signer.UnmarshalPrivateKey(privKey) c.Assert(err, IsNil) // Make sure we preserve ids if we don't have any // keyid_hash_algorithms. signer, err = GenerateEd25519Key() c.Assert(err, IsNil) privKey, err = signer.MarshalPrivateKey() c.Assert(err, IsNil) privKey.Algorithms = []data.HashAlgorithm{} err = signer.UnmarshalPrivateKey(privKey) c.Assert(err, IsNil) } pkg/keys/pkix.go000066400000000000000000000022441453140004500141120ustar00rootroot00000000000000package keys import ( "bytes" "crypto" "crypto/x509" "encoding/json" "encoding/pem" "errors" "fmt" "io" ) type PKIXPublicKey struct { crypto.PublicKey } func (p *PKIXPublicKey) MarshalJSON() ([]byte, error) { bytes, err := x509.MarshalPKIXPublicKey(p.PublicKey) if err != nil { return nil, err } pemBytes := pem.EncodeToMemory(&pem.Block{ Type: "PUBLIC KEY", Bytes: bytes, }) return json.Marshal(string(pemBytes)) } func (p *PKIXPublicKey) UnmarshalJSON(b []byte) error { var pemValue string // Prepare decoder limited to 512Kb dec := json.NewDecoder(io.LimitReader(bytes.NewReader(b), MaxJSONKeySize)) // Unmarshal key value if err := dec.Decode(&pemValue); err != nil { if errors.Is(err, io.EOF) || errors.Is(err, io.ErrUnexpectedEOF) { return fmt.Errorf("tuf: the public key is truncated or too large: %w", err) } return err } block, _ := pem.Decode([]byte(pemValue)) if block == nil { return errors.New("invalid PEM value") } if block.Type != "PUBLIC KEY" { return fmt.Errorf("invalid block type: %s", block.Type) } pub, err := x509.ParsePKIXPublicKey(block.Bytes) if err != nil { return err } p.PublicKey = pub return nil } pkg/keys/pkix_test.go000066400000000000000000000026571453140004500151610ustar00rootroot00000000000000package keys import ( "crypto/ecdsa" "crypto/rand" "crypto/x509" "encoding/json" "encoding/pem" "errors" "io" . "gopkg.in/check.v1" ) const ecdsaKey = `-----BEGIN PUBLIC KEY----- MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEftgasQA68yvumeXZmcOTSIHKfbmx WT1oYuRF0Un3tKxnzip6xAYwlz0Dt96DUh+0P7BruHH2O6s4MiRR9/TuNw== -----END PUBLIC KEY----- ` type PKIXSuite struct{} var _ = Suite(&PKIXSuite{}) func (PKIXSuite) TestMarshalJSON(c *C) { block, _ := pem.Decode([]byte(ecdsaKey)) key, err := x509.ParsePKIXPublicKey(block.Bytes) c.Assert(err, IsNil) k := PKIXPublicKey{PublicKey: key} buf, err := json.Marshal(&k) c.Assert(err, IsNil) var val string err = json.Unmarshal(buf, &val) c.Assert(err, IsNil) c.Assert(val, Equals, ecdsaKey) } func (PKIXSuite) TestUnmarshalJSON(c *C) { buf, err := json.Marshal(ecdsaKey) c.Assert(err, IsNil) var k PKIXPublicKey err = json.Unmarshal(buf, &k) c.Assert(err, IsNil) c.Assert(k.PublicKey, FitsTypeOf, (*ecdsa.PublicKey)(nil)) } func (PKIXSuite) TestUnmarshalPKIX_TooLongContent(c *C) { randomSeed := make([]byte, MaxJSONKeySize) _, err := io.ReadFull(rand.Reader, randomSeed) c.Assert(err, IsNil) pemBytes := pem.EncodeToMemory(&pem.Block{ Type: "PUBLIC KEY", Bytes: randomSeed, }) tooLongPayload, err := json.Marshal(string(pemBytes)) c.Assert(err, IsNil) var k PKIXPublicKey err = json.Unmarshal(tooLongPayload, &k) c.Assert(errors.Is(err, io.ErrUnexpectedEOF), Equals, true) } pkg/keys/rsa.go000066400000000000000000000076671453140004500137420ustar00rootroot00000000000000package keys import ( "bytes" "crypto" "crypto/rand" "crypto/rsa" "crypto/sha256" "crypto/x509" "encoding/json" "encoding/pem" "errors" "fmt" "io" "github.com/theupdateframework/go-tuf/data" ) func init() { VerifierMap.Store(data.KeyTypeRSASSA_PSS_SHA256, NewRsaVerifier) SignerMap.Store(data.KeyTypeRSASSA_PSS_SHA256, newRsaSigner) } func NewRsaVerifier() Verifier { return &rsaVerifier{} } func newRsaSigner() Signer { return &rsaSigner{} } type rsaVerifier struct { PublicKey *PKIXPublicKey `json:"public"` rsaKey *rsa.PublicKey key *data.PublicKey } func (p *rsaVerifier) Public() string { // This is already verified to succeed when unmarshalling a public key. r, err := x509.MarshalPKIXPublicKey(p.rsaKey) if err != nil { // TODO: Gracefully handle these errors. // See https://github.com/theupdateframework/go-tuf/issues/363 panic(err) } return string(r) } func (p *rsaVerifier) Verify(msg, sigBytes []byte) error { hash := sha256.Sum256(msg) return rsa.VerifyPSS(p.rsaKey, crypto.SHA256, hash[:], sigBytes, &rsa.PSSOptions{}) } func (p *rsaVerifier) MarshalPublicKey() *data.PublicKey { return p.key } func (p *rsaVerifier) UnmarshalPublicKey(key *data.PublicKey) error { // Prepare decoder limited to 512Kb dec := json.NewDecoder(io.LimitReader(bytes.NewReader(key.Value), MaxJSONKeySize)) // Unmarshal key value if err := dec.Decode(p); err != nil { if errors.Is(err, io.EOF) || errors.Is(err, io.ErrUnexpectedEOF) { return fmt.Errorf("tuf: the public key is truncated or too large: %w", err) } return err } rsaKey, ok := p.PublicKey.PublicKey.(*rsa.PublicKey) if !ok { return fmt.Errorf("invalid public key") } if _, err := x509.MarshalPKIXPublicKey(rsaKey); err != nil { return fmt.Errorf("marshalling to PKIX key: invalid public key") } p.rsaKey = rsaKey p.key = key return nil } type rsaSigner struct { *rsa.PrivateKey } type rsaPrivateKeyValue struct { Private string `json:"private"` Public *PKIXPublicKey `json:"public"` } func (s *rsaSigner) PublicData() *data.PublicKey { keyValBytes, _ := json.Marshal(rsaVerifier{PublicKey: &PKIXPublicKey{PublicKey: s.Public()}}) return &data.PublicKey{ Type: data.KeyTypeRSASSA_PSS_SHA256, Scheme: data.KeySchemeRSASSA_PSS_SHA256, Algorithms: data.HashAlgorithms, Value: keyValBytes, } } func (s *rsaSigner) SignMessage(message []byte) ([]byte, error) { hash := sha256.Sum256(message) return rsa.SignPSS(rand.Reader, s.PrivateKey, crypto.SHA256, hash[:], &rsa.PSSOptions{}) } func (s *rsaSigner) ContainsID(id string) bool { return s.PublicData().ContainsID(id) } func (s *rsaSigner) MarshalPrivateKey() (*data.PrivateKey, error) { priv := x509.MarshalPKCS1PrivateKey(s.PrivateKey) pemKey := pem.EncodeToMemory(&pem.Block{Type: "RSA PRIVATE KEY", Bytes: priv}) val, err := json.Marshal(rsaPrivateKeyValue{ Private: string(pemKey), Public: &PKIXPublicKey{PublicKey: s.Public()}, }) if err != nil { return nil, err } return &data.PrivateKey{ Type: data.KeyTypeRSASSA_PSS_SHA256, Scheme: data.KeySchemeRSASSA_PSS_SHA256, Algorithms: data.HashAlgorithms, Value: val, }, nil } func (s *rsaSigner) UnmarshalPrivateKey(key *data.PrivateKey) error { val := rsaPrivateKeyValue{} if err := json.Unmarshal(key.Value, &val); err != nil { return err } block, _ := pem.Decode([]byte(val.Private)) if block == nil { return errors.New("invalid PEM value") } if block.Type != "RSA PRIVATE KEY" { return fmt.Errorf("invalid block type: %s", block.Type) } k, err := x509.ParsePKCS1PrivateKey(block.Bytes) if err != nil { return err } if _, err := json.Marshal(rsaVerifier{ PublicKey: &PKIXPublicKey{PublicKey: k.Public()}}); err != nil { return fmt.Errorf("invalid public key: %s", err) } s.PrivateKey = k return nil } func GenerateRsaKey() (*rsaSigner, error) { privkey, err := rsa.GenerateKey(rand.Reader, 2048) if err != nil { return nil, err } return &rsaSigner{privkey}, nil } pkg/keys/rsa_test.go000066400000000000000000000065211453140004500147650ustar00rootroot00000000000000package keys import ( "crypto/rand" "encoding/hex" "encoding/json" "errors" "io" "github.com/theupdateframework/go-tuf/data" . "gopkg.in/check.v1" ) type RsaSuite struct{} var _ = Suite(&RsaSuite{}) func (RsaSuite) TestSignVerify(c *C) { signer, err := GenerateRsaKey() c.Assert(err, IsNil) msg := []byte("foo") sig, err := signer.SignMessage(msg) c.Assert(err, IsNil) publicData := signer.PublicData() pubKey, err := GetVerifier(publicData) c.Assert(err, IsNil) c.Assert(pubKey.Verify(msg, sig), IsNil) } func (RsaSuite) TestRSAVerifyMismatchMessage(c *C) { signer, err := GenerateRsaKey() c.Assert(err, IsNil) msg := []byte("foo") sig, err := signer.SignMessage(msg) c.Assert(err, IsNil) publicData := signer.PublicData() pubKey, err := GetVerifier(publicData) c.Assert(err, IsNil) c.Assert(pubKey.Verify([]byte("notfoo"), sig), ErrorMatches, "crypto/rsa: verification error") } func (RsaSuite) TestRSAVerifyMismatchPubKey(c *C) { signer, err := GenerateRsaKey() c.Assert(err, IsNil) msg := []byte("foo") sig, err := signer.SignMessage(msg) c.Assert(err, IsNil) signerNew, err := GenerateRsaKey() c.Assert(err, IsNil) pubKey, err := GetVerifier(signerNew.PublicData()) c.Assert(err, IsNil) c.Assert(pubKey.Verify([]byte("notfoo"), sig), ErrorMatches, "crypto/rsa: verification error") } func (RsaSuite) TestMarshalUnmarshalPublicKey(c *C) { signer, err := GenerateRsaKey() c.Assert(err, IsNil) publicData := signer.PublicData() pubKey, err := GetVerifier(publicData) c.Assert(err, IsNil) c.Assert(pubKey.MarshalPublicKey(), DeepEquals, publicData) } func (RsaSuite) TestMarshalUnmarshalPrivateKey(c *C) { signer, err := GenerateRsaKey() c.Assert(err, IsNil) privateData, err := signer.MarshalPrivateKey() c.Assert(err, IsNil) c.Assert(privateData.Type, Equals, data.KeyTypeRSASSA_PSS_SHA256) c.Assert(privateData.Scheme, Equals, data.KeySchemeRSASSA_PSS_SHA256) c.Assert(privateData.Algorithms, DeepEquals, data.HashAlgorithms) s, err := GetSigner(privateData) c.Assert(err, IsNil) c.Assert(s, DeepEquals, signer) } func (ECDSASuite) TestUnmarshalRSA_Invalid(c *C) { badKeyValue, err := json.Marshal(true) c.Assert(err, IsNil) badKey := &data.PublicKey{ Type: data.KeyTypeECDSA_SHA2_P256, Scheme: data.KeySchemeECDSA_SHA2_P256, Algorithms: data.HashAlgorithms, Value: badKeyValue, } verifier := NewEcdsaVerifier() c.Assert(verifier.UnmarshalPublicKey(badKey), ErrorMatches, "json: cannot unmarshal.*") } func (ECDSASuite) TestUnmarshalRSAPublicKey(c *C) { priv, err := GenerateRsaKey() c.Assert(err, IsNil) signer := &rsaSigner{priv.PrivateKey} goodKey := signer.PublicData() verifier := NewRsaVerifier() c.Assert(verifier.UnmarshalPublicKey(goodKey), IsNil) } func (ECDSASuite) TestUnmarshalRSA_TooLongContent(c *C) { randomSeed := make([]byte, MaxJSONKeySize) _, err := io.ReadFull(rand.Reader, randomSeed) c.Assert(err, IsNil) tooLongPayload, err := json.Marshal( &ed25519Verifier{ PublicKey: data.HexBytes(hex.EncodeToString(randomSeed)), }, ) c.Assert(err, IsNil) badKey := &data.PublicKey{ Type: data.KeyTypeECDSA_SHA2_P256, Scheme: data.KeySchemeECDSA_SHA2_P256, Algorithms: data.HashAlgorithms, Value: tooLongPayload, } verifier := NewRsaVerifier() err = verifier.UnmarshalPublicKey(badKey) c.Assert(errors.Is(err, io.ErrUnexpectedEOF), Equals, true) } pkg/targets/000077500000000000000000000000001453140004500133045ustar00rootroot00000000000000pkg/targets/delegation.go000066400000000000000000000051341453140004500157510ustar00rootroot00000000000000package targets import ( "errors" "github.com/theupdateframework/go-tuf/data" "github.com/theupdateframework/go-tuf/internal/sets" "github.com/theupdateframework/go-tuf/verify" ) type Delegation struct { Delegator string Delegatee data.DelegatedRole DB *verify.DB } type delegationsIterator struct { stack []Delegation target string visitedRoles map[string]struct{} parents map[string]string } var ErrTopLevelTargetsRoleMissing = errors.New("tuf: top level targets role missing from top level keys DB") // NewDelegationsIterator initialises an iterator with a first step // on top level targets. func NewDelegationsIterator(target string, topLevelKeysDB *verify.DB) (*delegationsIterator, error) { targetsRole := topLevelKeysDB.GetRole("targets") if targetsRole == nil { return nil, ErrTopLevelTargetsRoleMissing } i := &delegationsIterator{ target: target, stack: []Delegation{ { Delegatee: data.DelegatedRole{ Name: "targets", KeyIDs: sets.StringSetToSlice(targetsRole.KeyIDs), Threshold: targetsRole.Threshold, }, DB: topLevelKeysDB, }, }, visitedRoles: make(map[string]struct{}), parents: make(map[string]string), } return i, nil } func (d *delegationsIterator) Next() (value Delegation, ok bool) { if len(d.stack) == 0 { return Delegation{}, false } delegation := d.stack[len(d.stack)-1] d.stack = d.stack[:len(d.stack)-1] // 5.6.7.1: If this role has been visited before, then skip this role (so // that cycles in the delegation graph are avoided). roleName := delegation.Delegatee.Name if _, ok := d.visitedRoles[roleName]; ok { return d.Next() } d.visitedRoles[roleName] = struct{}{} // 5.6.7.2 trim delegations to visit, only the current role and its delegations // will be considered // https://github.com/theupdateframework/specification/issues/168 if delegation.Delegatee.Terminating { // Empty the stack. d.stack = d.stack[0:0] } return delegation, true } func (d *delegationsIterator) Add(roles []data.DelegatedRole, delegator string, db *verify.DB) error { for i := len(roles) - 1; i >= 0; i-- { // Push the roles onto the stack in reverse so we get an preorder traversal // of the delegations graph. r := roles[i] matchesPath, err := r.MatchesPath(d.target) if err != nil { return err } if matchesPath { delegation := Delegation{ Delegator: delegator, Delegatee: r, DB: db, } d.stack = append(d.stack, delegation) d.parents[r.Name] = delegator } } return nil } func (d *delegationsIterator) Parent(role string) string { return d.parents[role] } pkg/targets/delegation_test.go000066400000000000000000000177241453140004500170200ustar00rootroot00000000000000package targets import ( "testing" "github.com/stretchr/testify/assert" "github.com/theupdateframework/go-tuf/data" "github.com/theupdateframework/go-tuf/verify" ) var ( defaultPathPatterns = []string{"tmp", "*"} noMatchPathPatterns = []string{"vars", "null"} ) func TestDelegationsIterator(t *testing.T) { topTargetsPubKey := &data.PublicKey{ Type: data.KeyTypeEd25519, Scheme: data.KeySchemeEd25519, Algorithms: data.HashAlgorithms, Value: []byte(`{"public":"aaaaec567e5901ba3976c34f7cd5169704292439bf71e6aa19c64b96706f95ef"}`), } delTargetsPubKey := &data.PublicKey{ Type: data.KeyTypeEd25519, Scheme: data.KeySchemeEd25519, Algorithms: data.HashAlgorithms, Value: []byte(`{"public":"bbbbec567e5901ba3976c34f7cd5169704292439bf71e6aa19c64b96706f95ef"}`), } defaultKeyIDs := delTargetsPubKey.IDs() var iteratorTests = []struct { testName string roles map[string][]data.DelegatedRole file string resultOrder []string err error }{ { testName: "no delegation", roles: map[string][]data.DelegatedRole{ "targets": {}, }, file: "test.txt", resultOrder: []string{"targets"}, }, { testName: "no termination", roles: map[string][]data.DelegatedRole{ "targets": { {Name: "b", Paths: defaultPathPatterns, Threshold: 1, KeyIDs: defaultKeyIDs}, {Name: "e", Paths: defaultPathPatterns, Threshold: 1, KeyIDs: defaultKeyIDs}, }, "b": { {Name: "c", Paths: defaultPathPatterns, Threshold: 1, KeyIDs: defaultKeyIDs}, }, "c": { {Name: "d", Paths: defaultPathPatterns, Threshold: 1, KeyIDs: defaultKeyIDs}, }, "e": { {Name: "f", Paths: defaultPathPatterns, Threshold: 1, KeyIDs: defaultKeyIDs}, {Name: "g", Paths: defaultPathPatterns, Threshold: 1, KeyIDs: defaultKeyIDs}, }, "g": { {Name: "h", Paths: defaultPathPatterns, Threshold: 1, KeyIDs: defaultKeyIDs}, {Name: "i", Paths: defaultPathPatterns, Threshold: 1, KeyIDs: defaultKeyIDs}, {Name: "j", Paths: defaultPathPatterns, Threshold: 1, KeyIDs: defaultKeyIDs}, }, }, file: "", resultOrder: []string{"targets", "b", "c", "d", "e", "f", "g", "h", "i", "j"}, }, { testName: "terminated in b", roles: map[string][]data.DelegatedRole{ "targets": { {Name: "b", Paths: defaultPathPatterns, Threshold: 1, KeyIDs: defaultKeyIDs, Terminating: true}, {Name: "e", Paths: defaultPathPatterns, Threshold: 1, KeyIDs: defaultKeyIDs}, }, "b": { {Name: "c", Paths: defaultPathPatterns, Threshold: 1, KeyIDs: defaultKeyIDs}, {Name: "d", Paths: defaultPathPatterns, Threshold: 1, KeyIDs: defaultKeyIDs}, }, }, file: "", resultOrder: []string{"targets", "b", "c", "d"}, }, { testName: "path does not match b", roles: map[string][]data.DelegatedRole{ "targets": { {Name: "b", Paths: noMatchPathPatterns, Threshold: 1, KeyIDs: defaultKeyIDs}, {Name: "e", Paths: defaultPathPatterns, Threshold: 1, KeyIDs: defaultKeyIDs}, }, "b": { {Name: "c", Paths: defaultPathPatterns, Threshold: 1, KeyIDs: defaultKeyIDs}, {Name: "d", Paths: defaultPathPatterns, Threshold: 1, KeyIDs: defaultKeyIDs}, }, }, file: "", resultOrder: []string{"targets", "e"}, }, { testName: "path does not match b - path prefixes", roles: map[string][]data.DelegatedRole{ "targets": { {Name: "b", PathHashPrefixes: []string{"33472a4909"}, Threshold: 1, KeyIDs: defaultKeyIDs}, {Name: "c", PathHashPrefixes: []string{"34c85d1ee84f61f10d7dc633"}, Threshold: 1, KeyIDs: defaultKeyIDs}, }, "c": { {Name: "d", PathHashPrefixes: []string{"8baf"}, Threshold: 1, KeyIDs: defaultKeyIDs}, {Name: "e", PathHashPrefixes: []string{"34c85d1ee84f61f10d7dc633472a49096ed87f8f764bd597831eac371f40ac39"}, Threshold: 1, KeyIDs: defaultKeyIDs}, }, }, file: "/e/f/g.txt", resultOrder: []string{"targets", "c", "e"}, }, { testName: "err paths and pathHashPrefixes are set", roles: map[string][]data.DelegatedRole{ "targets": { {Name: "b", Paths: defaultPathPatterns, PathHashPrefixes: defaultPathPatterns, Threshold: 1, KeyIDs: defaultKeyIDs}, }, "b": {}, }, file: "", resultOrder: []string{"targets"}, err: data.ErrPathsAndPathHashesSet, }, { testName: "cycle avoided 1", roles: map[string][]data.DelegatedRole{ "targets": { {Name: "a", Paths: defaultPathPatterns, Threshold: 1, KeyIDs: defaultKeyIDs}, }, "a": { {Name: "b", Paths: defaultPathPatterns, Threshold: 1, KeyIDs: defaultKeyIDs}, {Name: "e", Paths: defaultPathPatterns, Threshold: 1, KeyIDs: defaultKeyIDs}, }, "b": { {Name: "a", Paths: defaultPathPatterns, Threshold: 1, KeyIDs: defaultKeyIDs}, {Name: "d", Paths: defaultPathPatterns, Threshold: 1, KeyIDs: defaultKeyIDs}, }, }, file: "", resultOrder: []string{"targets", "a", "b", "d", "e"}, }, { testName: "cycle avoided 2", roles: map[string][]data.DelegatedRole{ "targets": { {Name: "a", Paths: defaultPathPatterns, Threshold: 1, KeyIDs: defaultKeyIDs}, }, "a": { {Name: "a", Paths: defaultPathPatterns, Threshold: 1, KeyIDs: defaultKeyIDs}, {Name: "b", Paths: defaultPathPatterns, Threshold: 1, KeyIDs: defaultKeyIDs}, }, "b": { {Name: "a", Paths: defaultPathPatterns, Threshold: 1, KeyIDs: defaultKeyIDs}, {Name: "b", Paths: defaultPathPatterns, Threshold: 1, KeyIDs: defaultKeyIDs}, {Name: "c", Paths: defaultPathPatterns, Threshold: 1, KeyIDs: defaultKeyIDs}, }, "c": { {Name: "c", Paths: defaultPathPatterns, Threshold: 1, KeyIDs: defaultKeyIDs}, }, }, file: "", resultOrder: []string{"targets", "a", "b", "c"}, }, { testName: "diamond delegation", roles: map[string][]data.DelegatedRole{ "targets": { {Name: "b", Paths: defaultPathPatterns, Threshold: 1, KeyIDs: defaultKeyIDs}, {Name: "c", Paths: defaultPathPatterns, Threshold: 1, KeyIDs: defaultKeyIDs}, }, "b": { {Name: "d", Paths: defaultPathPatterns, Threshold: 1, KeyIDs: defaultKeyIDs}, }, "c": { {Name: "d", Paths: defaultPathPatterns, Threshold: 1, KeyIDs: defaultKeyIDs}, }, }, file: "", resultOrder: []string{"targets", "b", "d", "c"}, }, { testName: "simple cycle", roles: map[string][]data.DelegatedRole{ "targets": { {Name: "a", Paths: defaultPathPatterns, Threshold: 1, KeyIDs: defaultKeyIDs}, }, "a": { {Name: "a", Paths: defaultPathPatterns, Threshold: 1, KeyIDs: defaultKeyIDs}, }, }, file: "", resultOrder: []string{"targets", "a"}, }, } for _, tt := range iteratorTests { t.Run(tt.testName, func(t *testing.T) { topLevelDB := verify.NewDB() topLevelDB.AddKey(topTargetsPubKey.IDs()[0], topTargetsPubKey) topLevelDB.AddRole("targets", &data.Role{ KeyIDs: topTargetsPubKey.IDs(), Threshold: 1, }) d, err := NewDelegationsIterator(tt.file, topLevelDB) assert.NoError(t, err) var iterationOrder []string for { r, ok := d.Next() if !ok { break } // A delegation should have associated keys. Testing the exact keys // isn't useful in this module since the keys are supplied by the // caller in the arguments to Add(). assert.Greater(t, len(r.Delegatee.KeyIDs), 0) iterationOrder = append(iterationOrder, r.Delegatee.Name) delegations, ok := tt.roles[r.Delegatee.Name] if !ok { continue } db, err := verify.NewDBFromDelegations(&data.Delegations{ Roles: delegations, }) assert.NoError(t, err) err = d.Add(delegations, r.Delegatee.Name, db) assert.Equal(t, tt.err, err) } assert.Equal(t, tt.resultOrder, iterationOrder) }) } } func TestNewDelegationsIteratorError(t *testing.T) { // Empty DB. It is supposed to have at least the top-level targets role and // keys. tldb := verify.NewDB() _, err := NewDelegationsIterator("targets", tldb) assert.ErrorIs(t, err, ErrTopLevelTargetsRoleMissing) } pkg/targets/hash_bins.go000066400000000000000000000057011453140004500155740ustar00rootroot00000000000000package targets import ( "fmt" "strconv" "strings" ) const MinDelegationHashPrefixBitLen = 1 const MaxDelegationHashPrefixBitLen = 32 // hexEncode formats x as a hex string. The hex string is left padded with // zeros to padWidth, if necessary. func hexEncode(x uint64, padWidth int) string { // Benchmarked to be more than 10x faster than padding with Sprintf. s := strconv.FormatUint(x, 16) if len(s) >= padWidth { return s } return strings.Repeat("0", padWidth-len(s)) + s } const bitsPerHexDigit = 4 // numHexDigits returns the number of hex digits required to encode the given // number of bits. func numHexDigits(numBits int) int { // ceil(numBits / bitsPerHexDigit) return ((numBits - 1) / bitsPerHexDigit) + 1 } // HashBins represents an ordered list of hash bin target roles, which together // partition the space of target path hashes equal-sized buckets based on path // has prefix. type HashBins struct { rolePrefix string bitLen int hexDigitLen int numBins uint64 numPrefixesPerBin uint64 } // NewHashBins creates a HashBins partitioning with 2^bitLen buckets. func NewHashBins(rolePrefix string, bitLen int) (*HashBins, error) { if bitLen < MinDelegationHashPrefixBitLen || bitLen > MaxDelegationHashPrefixBitLen { return nil, fmt.Errorf("bitLen is out of bounds, should be between %v and %v inclusive", MinDelegationHashPrefixBitLen, MaxDelegationHashPrefixBitLen) } hexDigitLen := numHexDigits(bitLen) numBins := uint64(1) << bitLen numPrefixesTotal := uint64(1) << (bitsPerHexDigit * hexDigitLen) numPrefixesPerBin := numPrefixesTotal / numBins return &HashBins{ rolePrefix: rolePrefix, bitLen: bitLen, hexDigitLen: hexDigitLen, numBins: numBins, numPrefixesPerBin: numPrefixesPerBin, }, nil } // NumBins returns the number of hash bin partitions. func (hb *HashBins) NumBins() uint64 { return hb.numBins } // GetBin returns the HashBin at index i, or nil if i is out of bounds. func (hb *HashBins) GetBin(i uint64) *HashBin { if i >= hb.numBins { return nil } return &HashBin{ rolePrefix: hb.rolePrefix, hexDigitLen: hb.hexDigitLen, first: i * hb.numPrefixesPerBin, last: ((i + 1) * hb.numPrefixesPerBin) - 1, } } // HashBin represents a hex prefix range. First should be less than Last. type HashBin struct { rolePrefix string hexDigitLen int first uint64 last uint64 } // RoleName returns the name of the role that signs for the HashBin. func (b *HashBin) RoleName() string { if b.first == b.last { return b.rolePrefix + hexEncode(b.first, b.hexDigitLen) } return b.rolePrefix + hexEncode(b.first, b.hexDigitLen) + "-" + hexEncode(b.last, b.hexDigitLen) } // HashPrefixes returns a slice of all hash prefixes in the bin. func (b *HashBin) HashPrefixes() []string { n := int(b.last - b.first + 1) ret := make([]string, int(n)) x := b.first for i := 0; i < n; i++ { ret[i] = hexEncode(x, b.hexDigitLen) x++ } return ret } pkg/targets/hash_bins_test.go000066400000000000000000000051621453140004500166340ustar00rootroot00000000000000package targets import ( "testing" "github.com/stretchr/testify/assert" ) func BenchmarkHexEncode1(b *testing.B) { for n := 0; n <= b.N; n++ { for x := uint64(0); x <= 0xf; x += 1 { hexEncode(x, 1) } } } func BenchmarkHexEncode4(b *testing.B) { for n := 0; n <= b.N; n++ { for x := uint64(0); x <= 0xffff; x += 1 { hexEncode(x, 4) } } } func TestHashBin(t *testing.T) { tcs := []struct { hb *HashBin roleName string hashPrefixes []string }{ { hb: &HashBin{ rolePrefix: "abc_", hexDigitLen: 1, first: 0x0, last: 0x7, }, roleName: "abc_0-7", hashPrefixes: []string{ "0", "1", "2", "3", "4", "5", "6", "7", }, }, { hb: &HashBin{ rolePrefix: "abc_", hexDigitLen: 2, first: 0x0, last: 0xf, }, roleName: "abc_00-0f", hashPrefixes: []string{ "00", "01", "02", "03", "04", "05", "06", "07", "08", "09", "0a", "0b", "0c", "0d", "0e", "0f", }, }, { hb: &HashBin{ rolePrefix: "cba_", hexDigitLen: 4, first: 0xcd, last: 0xcf, }, roleName: "cba_00cd-00cf", hashPrefixes: []string{"00cd", "00ce", "00cf"}, }, { hb: &HashBin{ rolePrefix: "cba_", hexDigitLen: 3, first: 0xc1, last: 0xc1, }, roleName: "cba_0c1", hashPrefixes: []string{"0c1"}, }, } for i, tc := range tcs { assert.Equalf(t, tc.roleName, tc.hb.RoleName(), "test case %v: RoleName()", i) assert.Equalf(t, tc.hashPrefixes, tc.hb.HashPrefixes(), "test case %v: HashPrefixes()", i) } } func TestHashBins(t *testing.T) { tcs := []struct { bitLen int roleNames []string }{ {1, []string{"0-7", "8-f"}}, {2, []string{"0-3", "4-7", "8-b", "c-f"}}, {3, []string{"0-1", "2-3", "4-5", "6-7", "8-9", "a-b", "c-d", "e-f"}}, {4, []string{ "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f", }}, {5, []string{ "00-07", "08-0f", "10-17", "18-1f", "20-27", "28-2f", "30-37", "38-3f", "40-47", "48-4f", "50-57", "58-5f", "60-67", "68-6f", "70-77", "78-7f", "80-87", "88-8f", "90-97", "98-9f", "a0-a7", "a8-af", "b0-b7", "b8-bf", "c0-c7", "c8-cf", "d0-d7", "d8-df", "e0-e7", "e8-ef", "f0-f7", "f8-ff", }}, } for i, tc := range tcs { got := []string{} hbs, err := NewHashBins("", tc.bitLen) assert.NoError(t, err) n := hbs.NumBins() for i := uint64(0); i < n; i += 1 { hb := hbs.GetBin(i) got = append(got, hb.RoleName()) } assert.Equalf(t, tc.roleNames, got, "test case %v", i) } _, err := NewHashBins("", 0) assert.Error(t, err) _, err = NewHashBins("", 33) assert.Error(t, err) } repo.go000066400000000000000000001277641453140004500123670ustar00rootroot00000000000000package tuf import ( "bytes" "encoding/hex" "encoding/json" "errors" "fmt" "io" "log" "path" "sort" "strings" "time" "github.com/secure-systems-lab/go-securesystemslib/cjson" "github.com/theupdateframework/go-tuf/data" "github.com/theupdateframework/go-tuf/internal/roles" "github.com/theupdateframework/go-tuf/internal/sets" "github.com/theupdateframework/go-tuf/internal/signer" "github.com/theupdateframework/go-tuf/pkg/keys" "github.com/theupdateframework/go-tuf/pkg/targets" "github.com/theupdateframework/go-tuf/sign" "github.com/theupdateframework/go-tuf/util" "github.com/theupdateframework/go-tuf/verify" ) const ( // The maximum number of delegations to visit while traversing the delegations graph. defaultMaxDelegations = 32 ) // topLevelMetadata determines the order signatures are verified when committing. var topLevelMetadata = []string{ "root.json", "targets.json", "snapshot.json", "timestamp.json", } // TargetsWalkFunc is a function of a target path name and a target payload used to // execute some function on each staged target file. For example, it may normalize path // names and generate target file metadata with additional custom metadata. type TargetsWalkFunc func(path string, target io.Reader) error type Repo struct { local LocalStore hashAlgorithms []string meta map[string]json.RawMessage prefix string indent string logger *log.Logger } type RepoOpts func(r *Repo) func WithLogger(logger *log.Logger) RepoOpts { return func(r *Repo) { r.logger = logger } } func WithHashAlgorithms(hashAlgorithms ...string) RepoOpts { return func(r *Repo) { r.hashAlgorithms = hashAlgorithms } } func WithPrefix(prefix string) RepoOpts { return func(r *Repo) { r.prefix = prefix } } func WithIndex(indent string) RepoOpts { return func(r *Repo) { r.indent = indent } } func NewRepo(local LocalStore, hashAlgorithms ...string) (*Repo, error) { return NewRepoIndent(local, "", "", hashAlgorithms...) } func NewRepoIndent(local LocalStore, prefix string, indent string, hashAlgorithms ...string) (*Repo, error) { r := &Repo{ local: local, hashAlgorithms: hashAlgorithms, prefix: prefix, indent: indent, logger: log.New(io.Discard, "", 0), } var err error r.meta, err = local.GetMeta() if err != nil { return nil, err } return r, nil } func NewRepoWithOpts(local LocalStore, opts ...RepoOpts) (*Repo, error) { r, err := NewRepo(local) if err != nil { return nil, err } for _, opt := range opts { opt(r) } return r, nil } func (r *Repo) Init(consistentSnapshot bool) error { t, err := r.topLevelTargets() if err != nil { return err } if len(t.Targets) > 0 { return ErrInitNotAllowed } root := data.NewRoot() root.ConsistentSnapshot = consistentSnapshot // Set root version to 1 for a new root. root.Version = 1 if err = r.setMeta("root.json", root); err != nil { return err } t.Version = 1 if err = r.setMeta("targets.json", t); err != nil { return err } r.logger.Println("Repository initialized") return nil } func (r *Repo) topLevelKeysDB() (*verify.DB, error) { db := verify.NewDB() root, err := r.root() if err != nil { return nil, err } for id, k := range root.Keys { if err := db.AddKey(id, k); err != nil { return nil, err } } for name, role := range root.Roles { if err := db.AddRole(name, role); err != nil { return nil, err } } return db, nil } func (r *Repo) root() (*data.Root, error) { rootJSON, ok := r.meta["root.json"] if !ok { return data.NewRoot(), nil } s := &data.Signed{} if err := json.Unmarshal(rootJSON, s); err != nil { return nil, err } root := &data.Root{} if err := json.Unmarshal(s.Signed, root); err != nil { return nil, err } return root, nil } func (r *Repo) snapshot() (*data.Snapshot, error) { snapshotJSON, ok := r.meta["snapshot.json"] if !ok { return data.NewSnapshot(), nil } s := &data.Signed{} if err := json.Unmarshal(snapshotJSON, s); err != nil { return nil, err } snapshot := &data.Snapshot{} if err := json.Unmarshal(s.Signed, snapshot); err != nil { return nil, err } return snapshot, nil } func (r *Repo) RootVersion() (int64, error) { root, err := r.root() if err != nil { return -1, err } return root.Version, nil } func (r *Repo) GetThreshold(keyRole string) (int, error) { if roles.IsDelegatedTargetsRole(keyRole) { // The signature threshold for a delegated targets role // depends on the incoming delegation edge. return -1, ErrInvalidRole{keyRole, "only thresholds for top-level roles supported"} } root, err := r.root() if err != nil { return -1, err } role, ok := root.Roles[keyRole] if !ok { return -1, ErrInvalidRole{keyRole, "role missing from root metadata"} } return role.Threshold, nil } func (r *Repo) SetThreshold(keyRole string, t int) error { if roles.IsDelegatedTargetsRole(keyRole) { // The signature threshold for a delegated targets role // depends on the incoming delegation edge. return ErrInvalidRole{keyRole, "only thresholds for top-level roles supported"} } root, err := r.root() if err != nil { return err } role, ok := root.Roles[keyRole] if !ok { return ErrInvalidRole{keyRole, "role missing from root metadata"} } if role.Threshold == t { // Change was a no-op. return nil } role.Threshold = t if !r.local.FileIsStaged("root.json") { root.Version++ } return r.setMeta("root.json", root) } func (r *Repo) Targets() (data.TargetFiles, error) { targets, err := r.topLevelTargets() if err != nil { return nil, err } return targets.Targets, nil } func (r *Repo) SetTargetsVersion(v int64) error { t, err := r.topLevelTargets() if err != nil { return err } t.Version = v return r.setMeta("targets.json", t) } func (r *Repo) TargetsVersion() (int64, error) { t, err := r.topLevelTargets() if err != nil { return -1, err } return t.Version, nil } func (r *Repo) SetTimestampVersion(v int64) error { ts, err := r.timestamp() if err != nil { return err } ts.Version = v return r.setMeta("timestamp.json", ts) } func (r *Repo) TimestampVersion() (int64, error) { ts, err := r.timestamp() if err != nil { return -1, err } return ts.Version, nil } func (r *Repo) SetSnapshotVersion(v int64) error { s, err := r.snapshot() if err != nil { return err } s.Version = v return r.setMeta("snapshot.json", s) } func (r *Repo) SnapshotVersion() (int64, error) { s, err := r.snapshot() if err != nil { return -1, err } return s.Version, nil } func (r *Repo) topLevelTargets() (*data.Targets, error) { return r.targets("targets") } func (r *Repo) targets(metaName string) (*data.Targets, error) { targetsJSON, ok := r.meta[metaName+".json"] if !ok { return data.NewTargets(), nil } s := &data.Signed{} if err := json.Unmarshal(targetsJSON, s); err != nil { return nil, fmt.Errorf("error unmarshalling for targets %q: %w", metaName, err) } targets := &data.Targets{} if err := json.Unmarshal(s.Signed, targets); err != nil { return nil, fmt.Errorf("error unmarshalling signed data for targets %q: %w", metaName, err) } return targets, nil } func (r *Repo) timestamp() (*data.Timestamp, error) { timestampJSON, ok := r.meta["timestamp.json"] if !ok { return data.NewTimestamp(), nil } s := &data.Signed{} if err := json.Unmarshal(timestampJSON, s); err != nil { return nil, err } timestamp := &data.Timestamp{} if err := json.Unmarshal(s.Signed, timestamp); err != nil { return nil, err } return timestamp, nil } func (r *Repo) ChangePassphrase(keyRole string) error { if p, ok := r.local.(PassphraseChanger); ok { return p.ChangePassphrase(keyRole) } return ErrChangePassphraseNotSupported } func (r *Repo) GenKey(role string) ([]string, error) { // Not compatible with delegated targets roles, since delegated targets keys // are associated with a delegation (edge), not a role (node). return r.GenKeyWithExpires(role, data.DefaultExpires(role)) } func (r *Repo) GenKeyWithExpires(keyRole string, expires time.Time) (keyids []string, err error) { return r.GenKeyWithSchemeAndExpires(keyRole, expires, data.KeySchemeEd25519) } func (r *Repo) GenKeyWithSchemeAndExpires(role string, expires time.Time, keyScheme data.KeyScheme) ([]string, error) { var signer keys.Signer var err error switch keyScheme { case data.KeySchemeEd25519: signer, err = keys.GenerateEd25519Key() case data.KeySchemeECDSA_SHA2_P256: signer, err = keys.GenerateEcdsaKey() case data.KeySchemeRSASSA_PSS_SHA256: signer, err = keys.GenerateRsaKey() default: return nil, errors.New("unknown key type") } if err != nil { return nil, err } // Not compatible with delegated targets roles, since delegated targets keys // are associated with a delegation (edge), not a role (node). if err = r.AddPrivateKeyWithExpires(role, signer, expires); err != nil { return nil, err } return signer.PublicData().IDs(), nil } func (r *Repo) AddKeyWithSchemeAndExpires(role string, expires time.Time, keyScheme data.KeyScheme, publicValue string) ([]string, error) { var verifier keys.Verifier var keyType data.KeyType switch keyScheme { case data.KeySchemeEd25519: verifier = keys.NewEd25519Verifier() keyType = data.KeyTypeEd25519 case data.KeySchemeECDSA_SHA2_P256: verifier = keys.NewEcdsaVerifier() keyType = data.KeyTypeECDSA_SHA2_P256 case data.KeySchemeRSASSA_PSS_SHA256: verifier = keys.NewRsaVerifier() keyType = data.KeyTypeRSASSA_PSS_SHA256 default: return nil, errors.New("unknown key type") } publicValueData, err := json.Marshal(map[string]string{ "public": publicValue, }) if err != nil { return nil, err } if err := verifier.UnmarshalPublicKey(&data.PublicKey{ Type: keyType, Scheme: keyScheme, Algorithms: data.HashAlgorithms, Value: publicValueData, }); err != nil { return nil, err } publicKey := verifier.MarshalPublicKey() // Not compatible with delegated targets roles, since delegated targets keys // are associated with a delegation (edge), not a role (node). if err := r.AddVerificationKeyWithExpiration(role, publicKey, expires); err != nil { return nil, err } return publicKey.IDs(), nil } func (r *Repo) AddPrivateKey(role string, signer keys.Signer) error { // Not compatible with delegated targets roles, since delegated targets keys // are associated with a delegation (edge), not a role (node). return r.AddPrivateKeyWithExpires(role, signer, data.DefaultExpires(role)) } func (r *Repo) AddPrivateKeyWithExpires(keyRole string, signer keys.Signer, expires time.Time) error { // Not compatible with delegated targets roles, since delegated targets keys // are associated with a delegation (edge), not a role (node). if roles.IsDelegatedTargetsRole(keyRole) { return ErrInvalidRole{keyRole, "only support adding keys for top-level roles"} } if !validExpires(expires) { return ErrInvalidExpires{expires} } // Must add signer before adding verification key, so // root.json can be signed when a new root key is added. if err := r.local.SaveSigner(keyRole, signer); err != nil { return err } if err := r.AddVerificationKeyWithExpiration(keyRole, signer.PublicData(), expires); err != nil { return err } return nil } func (r *Repo) AddVerificationKey(keyRole string, pk *data.PublicKey) error { // Not compatible with delegated targets roles, since delegated targets keys // are associated with a delegation (edge), not a role (node). return r.AddVerificationKeyWithExpiration(keyRole, pk, data.DefaultExpires(keyRole)) } func (r *Repo) AddVerificationKeyWithExpiration(keyRole string, pk *data.PublicKey, expires time.Time) error { // Not compatible with delegated targets roles, since delegated targets keys // are associated with a delegation (edge), not a role (node). if roles.IsDelegatedTargetsRole(keyRole) { return ErrInvalidRole{ Role: keyRole, Reason: "only top-level targets roles are supported", } } if !validExpires(expires) { return ErrInvalidExpires{expires} } root, err := r.root() if err != nil { return err } role, ok := root.Roles[keyRole] if !ok { role = &data.Role{KeyIDs: []string{}, Threshold: 1} root.Roles[keyRole] = role } changed := false if role.AddKeyIDs(pk.IDs()) { changed = true } if root.AddKey(pk) { changed = true } if !changed { return nil } root.Expires = expires.Round(time.Second) if !r.local.FileIsStaged("root.json") { root.Version++ } return r.setMeta("root.json", root) } func validExpires(expires time.Time) bool { return time.Until(expires) > 0 } func (r *Repo) RootKeys() ([]*data.PublicKey, error) { root, err := r.root() if err != nil { return nil, err } role, ok := root.Roles["root"] if !ok { return nil, nil } // We might have multiple key ids that correspond to the same key, so // make sure we only return unique keys. seen := make(map[string]struct{}) rootKeys := []*data.PublicKey{} for _, id := range role.KeyIDs { key, ok := root.Keys[id] if !ok { return nil, fmt.Errorf("tuf: invalid root metadata") } found := false if _, ok := seen[id]; ok { found = true break } if !found { for _, id := range key.IDs() { seen[id] = struct{}{} } rootKeys = append(rootKeys, key) } } return rootKeys, nil } func (r *Repo) RevokeKey(role, id string) error { // Not compatible with delegated targets roles, since delegated targets keys // are associated with a delegation (edge), not a role (node). return r.RevokeKeyWithExpires(role, id, data.DefaultExpires("root")) } func (r *Repo) RevokeKeyWithExpires(keyRole, id string, expires time.Time) error { // Not compatible with delegated targets roles, since delegated targets keys // are associated with a delegation (edge), not a role (node). if roles.IsDelegatedTargetsRole(keyRole) { return ErrInvalidRole{keyRole, "only revocations for top-level roles supported"} } if !validExpires(expires) { return ErrInvalidExpires{expires} } root, err := r.root() if err != nil { return err } key, ok := root.Keys[id] if !ok { return ErrKeyNotFound{keyRole, id} } role, ok := root.Roles[keyRole] if !ok { return ErrKeyNotFound{keyRole, id} } // Create a list of filtered key IDs that do not contain the revoked key IDs. filteredKeyIDs := make([]string, 0, len(role.KeyIDs)) // There may be multiple keyids that correspond to this key, so // filter all of them out. for _, keyID := range role.KeyIDs { if !key.ContainsID(keyID) { filteredKeyIDs = append(filteredKeyIDs, keyID) } } if len(filteredKeyIDs) == len(role.KeyIDs) { return ErrKeyNotFound{keyRole, id} } role.KeyIDs = filteredKeyIDs root.Roles[keyRole] = role // Only delete the key from root.Keys if the key is no longer in use by // any other role. key_in_use := false for _, role := range root.Roles { for _, keyID := range role.KeyIDs { if key.ContainsID(keyID) { key_in_use = true } } } if !key_in_use { for _, keyID := range key.IDs() { delete(root.Keys, keyID) } } root.Expires = expires.Round(time.Second) if !r.local.FileIsStaged("root.json") { root.Version++ } err = r.setMeta("root.json", root) if err == nil { r.logger.Println("Revoked", keyRole, "key with ID", id, "in root metadata") } return err } // AddDelegatedRole is equivalent to AddDelegatedRoleWithExpires, but // with a default expiration time. func (r *Repo) AddDelegatedRole(delegator string, delegatedRole data.DelegatedRole, keys []*data.PublicKey) error { return r.AddDelegatedRoleWithExpires(delegator, delegatedRole, keys, data.DefaultExpires("targets")) } // AddDelegatedRoleWithExpires adds a delegation from the delegator to the // role specified in the role argument. Key IDs referenced in role.KeyIDs // should have corresponding Key entries in the keys argument. New metadata is // written with the given expiration time. func (r *Repo) AddDelegatedRoleWithExpires(delegator string, delegatedRole data.DelegatedRole, keys []*data.PublicKey, expires time.Time) error { expires = expires.Round(time.Second) t, err := r.targets(delegator) if err != nil { return fmt.Errorf("error getting delegator (%q) metadata: %w", delegator, err) } if t.Delegations == nil { t.Delegations = &data.Delegations{} t.Delegations.Keys = make(map[string]*data.PublicKey) } for _, keyID := range delegatedRole.KeyIDs { for _, key := range keys { if key.ContainsID(keyID) { t.Delegations.Keys[keyID] = key break } } } for _, r := range t.Delegations.Roles { if r.Name == delegatedRole.Name { return fmt.Errorf("role: %s is already delegated to by %s", delegatedRole.Name, r.Name) } } t.Delegations.Roles = append(t.Delegations.Roles, delegatedRole) t.Expires = expires delegatorFile := delegator + ".json" if !r.local.FileIsStaged(delegatorFile) { t.Version++ } err = r.setMeta(delegatorFile, t) if err != nil { return fmt.Errorf("error setting metadata for %q: %w", delegatorFile, err) } delegatee := delegatedRole.Name dt, err := r.targets(delegatee) if err != nil { return fmt.Errorf("error getting delegatee (%q) metadata: %w", delegatee, err) } dt.Expires = expires delegateeFile := delegatee + ".json" if !r.local.FileIsStaged(delegateeFile) { dt.Version++ } err = r.setMeta(delegateeFile, dt) if err != nil { return fmt.Errorf("error setting metadata for %q: %w", delegateeFile, err) } return nil } // AddDelegatedRolesForPathHashBins is equivalent to // AddDelegatedRolesForPathHashBinsWithExpires, but with a default // expiration time. func (r *Repo) AddDelegatedRolesForPathHashBins(delegator string, bins *targets.HashBins, keys []*data.PublicKey, threshold int) error { return r.AddDelegatedRolesForPathHashBinsWithExpires(delegator, bins, keys, threshold, data.DefaultExpires("targets")) } // AddDelegatedRolesForPathHashBinsWithExpires adds delegations to the // delegator role for the given hash bins configuration. New metadata is // written with the given expiration time. func (r *Repo) AddDelegatedRolesForPathHashBinsWithExpires(delegator string, bins *targets.HashBins, keys []*data.PublicKey, threshold int, expires time.Time) error { keyIDs := []string{} for _, key := range keys { keyIDs = append(keyIDs, key.IDs()...) } n := bins.NumBins() for i := uint64(0); i < n; i += 1 { bin := bins.GetBin(i) name := bin.RoleName() err := r.AddDelegatedRoleWithExpires(delegator, data.DelegatedRole{ Name: name, KeyIDs: sets.DeduplicateStrings(keyIDs), PathHashPrefixes: bin.HashPrefixes(), Threshold: threshold, }, keys, expires) if err != nil { return fmt.Errorf("error adding delegation from %v to %v: %w", delegator, name, err) } } return nil } // ResetTargetsDelegation is equivalent to ResetTargetsDelegationsWithExpires // with a default expiry time. func (r *Repo) ResetTargetsDelegations(delegator string) error { return r.ResetTargetsDelegationsWithExpires(delegator, data.DefaultExpires("targets")) } // ResetTargetsDelegationsWithExpires removes all targets delegations from the // given delegator role. New metadata is written with the given expiration // time. func (r *Repo) ResetTargetsDelegationsWithExpires(delegator string, expires time.Time) error { t, err := r.targets(delegator) if err != nil { return fmt.Errorf("error getting delegator (%q) metadata: %w", delegator, err) } t.Delegations = nil t.Expires = expires.Round(time.Second) delegatorFile := delegator + ".json" if !r.local.FileIsStaged(delegatorFile) { t.Version++ } err = r.setMeta(delegatorFile, t) if err != nil { return fmt.Errorf("error setting metadata for %q: %w", delegatorFile, err) } return nil } func (r *Repo) jsonMarshal(v interface{}) ([]byte, error) { if r.prefix == "" && r.indent == "" { return json.Marshal(v) } return json.MarshalIndent(v, r.prefix, r.indent) } func (r *Repo) dbsForRole(role string) ([]*verify.DB, error) { dbs := []*verify.DB{} if roles.IsTopLevelRole(role) { db, err := r.topLevelKeysDB() if err != nil { return nil, err } dbs = append(dbs, db) } else { ddbs, err := r.delegatorDBs(role) if err != nil { return nil, err } dbs = append(dbs, ddbs...) } return dbs, nil } func (r *Repo) signersForRole(role string) ([]keys.Signer, error) { dbs, err := r.dbsForRole(role) if err != nil { return nil, err } signers := []keys.Signer{} for _, db := range dbs { ss, err := r.getSignersInDB(role, db) if err != nil { return nil, err } signers = append(signers, ss...) } return signers, nil } func (r *Repo) setMeta(roleFilename string, meta interface{}) error { role := strings.TrimSuffix(roleFilename, ".json") signers, err := r.signersForRole(role) if err != nil { return err } s, err := sign.Marshal(meta, signers...) if err != nil { return err } b, err := r.jsonMarshal(s) if err != nil { return err } r.meta[roleFilename] = b return r.local.SetMeta(roleFilename, b) } // CanonicalizeAndSign canonicalizes the signed portion of signed, then signs it using the key(s) associated with role. // // It appends the signature to signed. // // It returns the total number of keys used for signing, 0 (along with // ErrNoKeys) if no keys were found, or -1 (along with an error) in error cases. func (r *Repo) CanonicalizeAndSign(role string, signed *data.Signed) (int, error) { keys, err := r.signersForRole(role) if err != nil { return -1, err } if len(keys) == 0 { return 0, ErrNoKeys{role} } for _, k := range keys { if err = sign.Sign(signed, k); err != nil { return -1, err } } return len(keys), nil } // SignPayload canonicalizes the signed portion of payload, then signs it using the key(s) associated with role. // // It returns the total number of keys used for signing, 0 (along with // ErrNoKeys) if no keys were found, or -1 (along with an error) in error cases. // // DEPRECATED: please use CanonicalizeAndSign instead. func (r *Repo) SignPayload(role string, payload *data.Signed) (int, error) { return r.CanonicalizeAndSign(role, payload) } // SignRaw signs the given (pre-canonicalized) payload using the key(s) associated with role. // // It returns the new data.Signatures. func (r *Repo) SignRaw(role string, payload []byte) ([]data.Signature, error) { keys, err := r.signersForRole(role) if err != nil { return nil, err } if len(keys) == 0 { return nil, ErrNoKeys{role} } allSigs := make([]data.Signature, 0, len(keys)) for _, k := range keys { sigs, err := sign.MakeSignatures(payload, k) if err != nil { return nil, err } allSigs = append(allSigs, sigs...) } return allSigs, nil } func (r *Repo) Sign(roleFilename string) error { signed, err := r.SignedMeta(roleFilename) if err != nil { return err } role := strings.TrimSuffix(roleFilename, ".json") numKeys, err := r.SignPayload(role, signed) if errors.Is(err, ErrNoKeys{role}) { return ErrNoKeys{roleFilename} } else if err != nil { return err } b, err := r.jsonMarshal(signed) if err != nil { return err } r.meta[roleFilename] = b err = r.local.SetMeta(roleFilename, b) if err == nil { r.logger.Println("Signed", roleFilename, "with", numKeys, "key(s)") } return err } // AddOrUpdateSignature allows users to add or update a signature generated with an external tool. // The name must be a valid metadata file name, like root.json. func (r *Repo) AddOrUpdateSignature(roleFilename string, signature data.Signature) error { role := strings.TrimSuffix(roleFilename, ".json") // Check key ID is in valid for the role. dbs, err := r.dbsForRole(role) if err != nil { return err } if len(dbs) == 0 { return ErrInvalidRole{role, "no trusted keys for role"} } s, err := r.SignedMeta(roleFilename) if err != nil { return err } keyInDB := false validSig := false for _, db := range dbs { roleData := db.GetRole(role) if roleData == nil { return ErrInvalidRole{role, "role is not in verifier DB"} } if roleData.ValidKey(signature.KeyID) { keyInDB = true verifier, err := db.GetVerifier(signature.KeyID) if err != nil { continue } // Now check if this validly signed the metadata. if err := verify.VerifySignature(s.Signed, signature.Signature, verifier); err == nil { validSig = true break } } } if !keyInDB { // This key was not delegated for the role in any delegatee. return verify.ErrInvalidKey } if !validSig { // The signature was invalid. return verify.ErrInvalid } // Add or update signature. signatures := make([]data.Signature, 0, len(s.Signatures)+1) for _, sig := range s.Signatures { if sig.KeyID != signature.KeyID { signatures = append(signatures, sig) } } signatures = append(signatures, signature) s.Signatures = signatures b, err := r.jsonMarshal(s) if err != nil { return err } r.meta[roleFilename] = b return r.local.SetMeta(roleFilename, b) } // getSignersInDB returns available signing interfaces, sorted by key ID. // // Only keys contained in the keys db are returned (i.e. local keys which have // been revoked are omitted), except for the root role in which case all local // keys are returned (revoked root keys still need to sign new root metadata so // clients can verify the new root.json and update their keys db accordingly). func (r *Repo) getSignersInDB(roleName string, db *verify.DB) ([]keys.Signer, error) { signers, err := r.local.GetSigners(roleName) if err != nil { return nil, err } if roleName == "root" { sorted := make([]keys.Signer, len(signers)) copy(sorted, signers) sort.Sort(signer.ByIDs(sorted)) return sorted, nil } role := db.GetRole(roleName) if role == nil { return nil, nil } if len(role.KeyIDs) == 0 { return nil, nil } signersInDB := []keys.Signer{} for _, s := range signers { for _, id := range s.PublicData().IDs() { if _, ok := role.KeyIDs[id]; ok { signersInDB = append(signersInDB, s) } } } sort.Sort(signer.ByIDs(signersInDB)) return signersInDB, nil } // Used to retrieve the signable portion of the metadata when using an external signing tool. func (r *Repo) SignedMeta(roleFilename string) (*data.Signed, error) { b, ok := r.meta[roleFilename] if !ok { return nil, ErrMissingMetadata{roleFilename} } s := &data.Signed{} if err := json.Unmarshal(b, s); err != nil { return nil, err } return s, nil } // delegatorDBs returns a list of key DBs for all incoming delegations. func (r *Repo) delegatorDBs(delegateeRole string) ([]*verify.DB, error) { delegatorDBs := []*verify.DB{} for metaName := range r.meta { if roles.IsTopLevelManifest(metaName) && metaName != "targets.json" { continue } roleName := strings.TrimSuffix(metaName, ".json") t, err := r.targets(roleName) if err != nil { return nil, err } if t.Delegations == nil { continue } delegatesToRole := false for _, d := range t.Delegations.Roles { if d.Name == delegateeRole { delegatesToRole = true break } } if !delegatesToRole { continue } db, err := verify.NewDBFromDelegations(t.Delegations) if err != nil { return nil, err } delegatorDBs = append(delegatorDBs, db) } return delegatorDBs, nil } // targetDelegationForPath finds the targets metadata for the role that should // sign the given path. The final delegation that led to the returned target // metadata is also returned. // // Since there may be multiple targets roles that are able to sign a specific // path, we must choose which roles's metadata to return. If preferredRole is // specified (non-empty string) and eligible to sign the given path by way of // some delegation chain, targets metadata for that role is returned. If // preferredRole is not specified (""), we return targets metadata for the // final role visited in the depth-first delegation traversal. func (r *Repo) targetDelegationForPath(path string, preferredRole string) (*data.Targets, *targets.Delegation, error) { topLevelKeysDB, err := r.topLevelKeysDB() if err != nil { return nil, nil, err } iterator, err := targets.NewDelegationsIterator(path, topLevelKeysDB) if err != nil { return nil, nil, err } d, ok := iterator.Next() if !ok { return nil, nil, ErrNoDelegatedTarget{Path: path} } for i := 0; i < defaultMaxDelegations; i++ { targetsMeta, err := r.targets(d.Delegatee.Name) if err != nil { return nil, nil, err } if preferredRole != "" && d.Delegatee.Name == preferredRole { // The preferredRole is eligible to sign for the given path, and we've // found its metadata. Return it. return targetsMeta, &d, nil } if targetsMeta.Delegations != nil && len(targetsMeta.Delegations.Roles) > 0 { db, err := verify.NewDBFromDelegations(targetsMeta.Delegations) if err != nil { return nil, nil, err } // Add delegations to the iterator that are eligible to sign for the // given path (there may be none). iterator.Add(targetsMeta.Delegations.Roles, d.Delegatee.Name, db) } next, ok := iterator.Next() if !ok { // No more roles to traverse. if preferredRole == "" { // No preferredRole was given, so return metadata for the final role in the traversal. return targetsMeta, &d, nil } else { // There are no more roles to traverse, so preferredRole is either an // invalid role, or not eligible to sign the given path. return nil, nil, ErrNoDelegatedTarget{Path: path} } } d = next } return nil, nil, ErrNoDelegatedTarget{Path: path} } func (r *Repo) AddTarget(path string, custom json.RawMessage) error { return r.AddTargets([]string{path}, custom) } func (r *Repo) AddTargetToPreferredRole(path string, custom json.RawMessage, preferredRole string) error { return r.AddTargetsToPreferredRole([]string{path}, custom, preferredRole) } func (r *Repo) AddTargets(paths []string, custom json.RawMessage) error { return r.AddTargetsToPreferredRole(paths, custom, "") } func (r *Repo) AddTargetsToPreferredRole(paths []string, custom json.RawMessage, preferredRole string) error { return r.AddTargetsWithExpiresToPreferredRole(paths, custom, data.DefaultExpires("targets"), preferredRole) } func (r *Repo) AddTargetsWithDigest(digest string, digestAlg string, length int64, path string, custom json.RawMessage) error { // TODO: Rename this to AddTargetWithDigest // https://github.com/theupdateframework/go-tuf/issues/242 expires := data.DefaultExpires("targets") path = util.NormalizeTarget(path) targetsMeta, delegation, err := r.targetDelegationForPath(path, "") if err != nil { return err } // This is the targets role that needs to sign the target file. targetsRoleName := delegation.Delegatee.Name meta := data.TargetFileMeta{FileMeta: data.FileMeta{Length: length, Hashes: make(data.Hashes, 1)}} meta.Hashes[digestAlg], err = hex.DecodeString(digest) if err != nil { return err } // If custom is provided, set custom, otherwise maintain existing custom // metadata if len(custom) > 0 { meta.Custom = &custom } else if t, ok := targetsMeta.Targets[path]; ok { meta.Custom = t.Custom } // What does G2 mean? Copying and pasting this comment from elsewhere in this file. // G2 -> we no longer desire any readers to ever observe non-prefix targets. delete(targetsMeta.Targets, "/"+path) targetsMeta.Targets[path] = meta targetsMeta.Expires = expires.Round(time.Second) manifestName := targetsRoleName + ".json" if !r.local.FileIsStaged(manifestName) { targetsMeta.Version++ } err = r.setMeta(manifestName, targetsMeta) if err != nil { return fmt.Errorf("error setting metadata for %q: %w", manifestName, err) } return nil } func (r *Repo) AddTargetWithExpires(path string, custom json.RawMessage, expires time.Time) error { return r.AddTargetsWithExpires([]string{path}, custom, expires) } func (r *Repo) AddTargetsWithExpires(paths []string, custom json.RawMessage, expires time.Time) error { return r.AddTargetsWithExpiresToPreferredRole(paths, custom, expires, "") } func (r *Repo) AddTargetWithExpiresToPreferredRole(path string, custom json.RawMessage, expires time.Time, preferredRole string) error { return r.AddTargetsWithExpiresToPreferredRole([]string{path}, custom, expires, preferredRole) } // AddTargetsWithExpiresToPreferredRole signs the staged targets at `paths`. // // If preferredRole is not the empty string, the target is added to the given // role's manifest if delegations allow it. If delegations do not allow the // preferredRole to sign the given path, an error is returned. func (r *Repo) AddTargetsWithExpiresToPreferredRole(paths []string, custom json.RawMessage, expires time.Time, preferredRole string) error { if !validExpires(expires) { return ErrInvalidExpires{expires} } normalizedPaths := make([]string, len(paths)) for i, path := range paths { normalizedPaths[i] = util.NormalizeTarget(path) } // As we iterate through staged targets files, we accumulate changes to their // corresponding targets metadata. updatedTargetsMeta := map[string]*data.Targets{} if err := r.local.WalkStagedTargets(normalizedPaths, func(path string, target io.Reader) (err error) { originalMeta, delegation, err := r.targetDelegationForPath(path, preferredRole) if err != nil { return err } // This is the targets role that needs to sign the target file. targetsRoleName := delegation.Delegatee.Name targetsMeta := originalMeta if tm, ok := updatedTargetsMeta[targetsRoleName]; ok { // Metadata in updatedTargetsMeta overrides staged/commited metadata. targetsMeta = tm } fileMeta, err := util.GenerateTargetFileMeta(target, r.hashAlgorithms...) if err != nil { return err } // If we have custom metadata, set it, otherwise maintain // existing metadata if present if len(custom) > 0 { fileMeta.Custom = &custom } else if tf, ok := targetsMeta.Targets[path]; ok { fileMeta.Custom = tf.Custom } // G2 -> we no longer desire any readers to ever observe non-prefix targets. delete(targetsMeta.Targets, "/"+path) targetsMeta.Targets[path] = fileMeta updatedTargetsMeta[targetsRoleName] = targetsMeta return nil }); err != nil { return err } if len(updatedTargetsMeta) == 0 { // This is potentially unexpected behavior kept for backwards compatibility. // See https://github.com/theupdateframework/go-tuf/issues/243 t, err := r.topLevelTargets() if err != nil { return err } updatedTargetsMeta["targets"] = t } exp := expires.Round(time.Second) for roleName, targetsMeta := range updatedTargetsMeta { targetsMeta.Expires = exp manifestName := roleName + ".json" if !r.local.FileIsStaged(manifestName) { targetsMeta.Version++ } err := r.setMeta(manifestName, targetsMeta) if err != nil { return fmt.Errorf("error setting metadata for %q: %w", manifestName, err) } } return nil } func (r *Repo) RemoveTarget(path string) error { return r.RemoveTargets([]string{path}) } func (r *Repo) RemoveTargets(paths []string) error { return r.RemoveTargetsWithExpires(paths, data.DefaultExpires("targets")) } func (r *Repo) RemoveTargetWithExpires(path string, expires time.Time) error { return r.RemoveTargetsWithExpires([]string{path}, expires) } // If paths is empty, all targets will be removed. func (r *Repo) RemoveTargetsWithExpires(paths []string, expires time.Time) error { if !validExpires(expires) { return ErrInvalidExpires{expires} } for metaName := range r.meta { if metaName != "targets.json" && !roles.IsDelegatedTargetsManifest(metaName) { continue } err := r.removeTargetsWithExpiresFromMeta(metaName, paths, expires) if err != nil { return fmt.Errorf("could not remove %v from %v: %w", paths, metaName, err) } } return nil } func (r *Repo) removeTargetsWithExpiresFromMeta(metaName string, paths []string, expires time.Time) error { roleName := strings.TrimSuffix(metaName, ".json") t, err := r.targets(roleName) if err != nil { return err } removed_targets := []string{} if len(paths) == 0 { for rt := range t.Targets { removed_targets = append(removed_targets, rt) } t.Targets = make(data.TargetFiles) } else { removed := false for _, path := range paths { path = util.NormalizeTarget(path) if _, ok := t.Targets[path]; !ok { r.logger.Printf("[%v] The following target is not present: %v\n", metaName, path) continue } removed = true // G2 -> we no longer desire any readers to ever observe non-prefix targets. delete(t.Targets, "/"+path) delete(t.Targets, path) removed_targets = append(removed_targets, path) } if !removed { return nil } } t.Expires = expires.Round(time.Second) if !r.local.FileIsStaged(metaName) { t.Version++ } err = r.setMeta(metaName, t) if err == nil { r.logger.Printf("[%v] Removed targets:\n", metaName) for _, v := range removed_targets { r.logger.Println("*", v) } if len(t.Targets) != 0 { r.logger.Printf("[%v] Added/staged targets:\n", metaName) for k := range t.Targets { r.logger.Println("*", k) } } else { r.logger.Printf("[%v] There are no added/staged targets\n", metaName) } } return err } func (r *Repo) Snapshot() error { return r.SnapshotWithExpires(data.DefaultExpires("snapshot")) } func (r *Repo) snapshotMetadata() []string { ret := []string{"targets.json"} for name := range r.meta { if !roles.IsVersionedManifest(name) && roles.IsDelegatedTargetsManifest(name) { ret = append(ret, name) } } return ret } func (r *Repo) SnapshotWithExpires(expires time.Time) error { if !validExpires(expires) { return ErrInvalidExpires{expires} } snapshot, err := r.snapshot() if err != nil { return err } // Verify root metadata before verifying signatures on role metadata. if err := r.verifySignatures("root.json"); err != nil { return err } for _, metaName := range r.snapshotMetadata() { if err := r.verifySignatures(metaName); err != nil { return err } var err error snapshot.Meta[metaName], err = r.snapshotFileMeta(metaName) if err != nil { return err } } snapshot.Expires = expires.Round(time.Second) if !r.local.FileIsStaged("snapshot.json") { snapshot.Version++ } err = r.setMeta("snapshot.json", snapshot) if err == nil { r.logger.Println("Staged snapshot.json metadata with expiration date:", snapshot.Expires) } return err } func (r *Repo) Timestamp() error { return r.TimestampWithExpires(data.DefaultExpires("timestamp")) } func (r *Repo) TimestampWithExpires(expires time.Time) error { if !validExpires(expires) { return ErrInvalidExpires{expires} } if err := r.verifySignatures("snapshot.json"); err != nil { return err } timestamp, err := r.timestamp() if err != nil { return err } timestamp.Meta["snapshot.json"], err = r.timestampFileMeta("snapshot.json") if err != nil { return err } timestamp.Expires = expires.Round(time.Second) if !r.local.FileIsStaged("timestamp.json") { timestamp.Version++ } err = r.setMeta("timestamp.json", timestamp) if err == nil { r.logger.Println("Staged timestamp.json metadata with expiration date:", timestamp.Expires) } return err } func (r *Repo) fileVersions() (map[string]int64, error) { versions := make(map[string]int64) for fileName := range r.meta { if roles.IsVersionedManifest(fileName) { continue } roleName := strings.TrimSuffix(fileName, ".json") var version int64 switch roleName { case "root": root, err := r.root() if err != nil { return nil, err } version = root.Version case "snapshot": snapshot, err := r.snapshot() if err != nil { return nil, err } version = snapshot.Version case "timestamp": continue default: // Targets or delegated targets manifest. targets, err := r.targets(roleName) if err != nil { return nil, err } version = targets.Version } versions[fileName] = version } return versions, nil } func (r *Repo) fileHashes() (map[string]data.Hashes, error) { hashes := make(map[string]data.Hashes) for fileName := range r.meta { if roles.IsVersionedManifest(fileName) { continue } roleName := strings.TrimSuffix(fileName, ".json") switch roleName { case "snapshot": timestamp, err := r.timestamp() if err != nil { return nil, err } if m, ok := timestamp.Meta[fileName]; ok { hashes[fileName] = m.Hashes } case "timestamp": continue default: snapshot, err := r.snapshot() if err != nil { return nil, err } if m, ok := snapshot.Meta[fileName]; ok { hashes[fileName] = m.Hashes } if roleName != "root" { // Scalability issue: Commit/fileHashes loads all targets metadata into memory // https://github.com/theupdateframework/go-tuf/issues/245 t, err := r.targets(roleName) if err != nil { return nil, err } for name, m := range t.Targets { hashes[path.Join("targets", name)] = m.Hashes } } } } return hashes, nil } func (r *Repo) Commit() error { // check we have all the metadata for _, name := range topLevelMetadata { if _, ok := r.meta[name]; !ok { return ErrMissingMetadata{name} } } // check roles are valid root, err := r.root() if err != nil { return err } for name, role := range root.Roles { if len(role.KeyIDs) < role.Threshold { return ErrNotEnoughKeys{name, len(role.KeyIDs), role.Threshold} } } // verify hashes in snapshot.json are up to date snapshot, err := r.snapshot() if err != nil { return err } for _, name := range r.snapshotMetadata() { expected, ok := snapshot.Meta[name] if !ok { return fmt.Errorf("tuf: snapshot.json missing hash for %s", name) } actual, err := r.snapshotFileMeta(name) if err != nil { return err } if err := util.SnapshotFileMetaEqual(actual, expected); err != nil { return fmt.Errorf("tuf: invalid %s in snapshot.json: %s", name, err) } } // verify hashes in timestamp.json are up to date timestamp, err := r.timestamp() if err != nil { return err } snapshotMeta, err := r.timestampFileMeta("snapshot.json") if err != nil { return err } if err := util.TimestampFileMetaEqual(snapshotMeta, timestamp.Meta["snapshot.json"]); err != nil { return fmt.Errorf("tuf: invalid snapshot.json in timestamp.json: %s", err) } for _, name := range topLevelMetadata { if err := r.verifySignatures(name); err != nil { return err } } versions, err := r.fileVersions() if err != nil { return err } hashes, err := r.fileHashes() if err != nil { return err } err = r.local.Commit(root.ConsistentSnapshot, versions, hashes) if err == nil { r.logger.Println("Committed successfully") } return err } func (r *Repo) Clean() error { err := r.local.Clean() if err == nil { r.logger.Println("Removed all staged metadata and target files") } return err } func (r *Repo) verifySignatures(metaFilename string) error { s, err := r.SignedMeta(metaFilename) if err != nil { return err } role := strings.TrimSuffix(metaFilename, ".json") dbs, err := r.dbsForRole(role) if err != nil { return err } for _, db := range dbs { if err := db.Verify(s, role, 0); err != nil { return ErrInsufficientSignatures{metaFilename, err} } } return nil } func (r *Repo) snapshotFileMeta(roleFilename string) (data.SnapshotFileMeta, error) { b, ok := r.meta[roleFilename] if !ok { return data.SnapshotFileMeta{}, ErrMissingMetadata{roleFilename} } return util.GenerateSnapshotFileMeta(bytes.NewReader(b), r.hashAlgorithms...) } func (r *Repo) timestampFileMeta(roleFilename string) (data.TimestampFileMeta, error) { b, ok := r.meta[roleFilename] if !ok { return data.TimestampFileMeta{}, ErrMissingMetadata{roleFilename} } return util.GenerateTimestampFileMeta(bytes.NewReader(b), r.hashAlgorithms...) } func (r *Repo) Payload(roleFilename string) ([]byte, error) { s, err := r.SignedMeta(roleFilename) if err != nil { return nil, err } p, err := cjson.EncodeCanonical(s.Signed) if err != nil { return nil, err } return p, nil } func (r *Repo) CheckRoleUnexpired(role string, validAt time.Time) error { var expires time.Time switch role { case "root": root, err := r.root() if err != nil { return err } expires = root.Expires case "snapshot": snapshot, err := r.snapshot() if err != nil { return err } expires = snapshot.Expires case "timestamp": timestamp, err := r.timestamp() if err != nil { return err } expires = timestamp.Expires case "targets": targets, err := r.topLevelTargets() if err != nil { return err } expires = targets.Expires default: return fmt.Errorf("invalid role: %s", role) } if expires.Before(validAt) || expires.Equal(validAt) { return fmt.Errorf("role expired on: %s", expires) } return nil } // GetMeta returns the underlying meta file map from the store. func (r *Repo) GetMeta() (map[string]json.RawMessage, error) { return r.local.GetMeta() } repo_test.go000066400000000000000000002514061453140004500134150ustar00rootroot00000000000000package tuf import ( "bytes" "crypto" "crypto/elliptic" "crypto/rand" "encoding/hex" "encoding/json" "errors" "fmt" "log" "os" "path" "path/filepath" "reflect" "sort" "strings" "testing" "time" "github.com/secure-systems-lab/go-securesystemslib/cjson" "github.com/secure-systems-lab/go-securesystemslib/encrypted" "github.com/theupdateframework/go-tuf/data" "github.com/theupdateframework/go-tuf/internal/sets" "github.com/theupdateframework/go-tuf/pkg/keys" "github.com/theupdateframework/go-tuf/pkg/targets" "github.com/theupdateframework/go-tuf/util" "github.com/theupdateframework/go-tuf/verify" "golang.org/x/crypto/ed25519" . "gopkg.in/check.v1" ) // Hook up gocheck into the "go test" runner. func Test(t *testing.T) { TestingT(t) } type RepoSuite struct{} var _ = Suite(&RepoSuite{}) func (RepoSuite) TestNewRepo(c *C) { testNewRepo(c, NewRepo) } func (RepoSuite) TestNewRepoIndent(c *C) { testNewRepo(c, func(local LocalStore, hashAlgorithms ...string) (*Repo, error) { return NewRepoIndent(local, "", "\t") }) } // UniqueKeys returns the unique keys for each associated role. // We might have multiple key IDs that correspond to the same key. func UniqueKeys(r *data.Root) map[string][]*data.PublicKey { keysByRole := make(map[string][]*data.PublicKey) for name, role := range r.Roles { seen := make(map[string]struct{}) roleKeys := []*data.PublicKey{} for _, id := range role.KeyIDs { // Double-check that there is actually a key with that ID. if key, ok := r.Keys[id]; ok { verifier, err := keys.GetVerifier(key) if err != nil { continue } val := verifier.Public() if _, ok := seen[val]; ok { continue } seen[val] = struct{}{} roleKeys = append(roleKeys, key) } } keysByRole[name] = roleKeys } return keysByRole } // AssertNumUniqueKeys verifies that the number of unique root keys for a given role is as expected. func (*RepoSuite) assertNumUniqueKeys(c *C, root *data.Root, role string, num int) { c.Assert(UniqueKeys(root)[role], HasLen, num) } func testNewRepo(c *C, newRepo func(local LocalStore, hashAlgorithms ...string) (*Repo, error)) { meta := map[string]json.RawMessage{ "root.json": []byte(`{ "signed": { "_type": "root", "version": 1, "expires": "2015-12-26T03:26:55.821520874Z", "keys": {}, "roles": {} }, "signatures": [] }`), "targets.json": []byte(`{ "signed": { "_type": "targets", "version": 1, "expires": "2015-03-26T03:26:55.82155686Z", "targets": {} }, "signatures": [] }`), "snapshot.json": []byte(`{ "signed": { "_type": "snapshot", "version": 1, "expires": "2015-01-02T03:26:55.821585981Z", "meta": {} }, "signatures": [] }`), "timestamp.json": []byte(`{ "signed": { "_type": "timestamp", "version": 1, "expires": "2014-12-27T03:26:55.821599702Z", "meta": {} }, "signatures": [] }`), } local := MemoryStore(meta, nil) r, err := newRepo(local) c.Assert(err, IsNil) root, err := r.root() c.Assert(err, IsNil) c.Assert(root.Type, Equals, "root") c.Assert(root.Version, Equals, int64(1)) c.Assert(root.Keys, NotNil) c.Assert(root.Keys, HasLen, 0) targets, err := r.topLevelTargets() c.Assert(err, IsNil) c.Assert(targets.Type, Equals, "targets") c.Assert(targets.Version, Equals, int64(1)) c.Assert(targets.Targets, NotNil) c.Assert(targets.Targets, HasLen, 0) snapshot, err := r.snapshot() c.Assert(err, IsNil) c.Assert(snapshot.Type, Equals, "snapshot") c.Assert(snapshot.Version, Equals, int64(1)) c.Assert(snapshot.Meta, NotNil) c.Assert(snapshot.Meta, HasLen, 0) timestamp, err := r.timestamp() c.Assert(err, IsNil) c.Assert(timestamp.Type, Equals, "timestamp") c.Assert(timestamp.Version, Equals, int64(1)) c.Assert(timestamp.Meta, NotNil) c.Assert(timestamp.Meta, HasLen, 0) } func (rs *RepoSuite) TestInit(c *C) { local := MemoryStore( make(map[string]json.RawMessage), map[string][]byte{"foo.txt": []byte("foo")}, ) r, err := NewRepo(local) c.Assert(err, IsNil) // Init() sets root.ConsistentSnapshot for _, v := range []bool{true, false} { c.Assert(r.Init(v), IsNil) root, err := r.root() c.Assert(err, IsNil) c.Assert(root.ConsistentSnapshot, Equals, v) } // Add a target. generateAndAddPrivateKey(c, r, "targets") c.Assert(r.AddTarget("foo.txt", nil), IsNil) // Init() fails if targets have been added c.Assert(r.Init(true), Equals, ErrInitNotAllowed) } func genKey(c *C, r *Repo, role string) []string { keyids, err := r.GenKey(role) c.Assert(err, IsNil) c.Assert(len(keyids) > 0, Equals, true) return keyids } func (rs *RepoSuite) TestGenKey(c *C) { local := MemoryStore(make(map[string]json.RawMessage), nil) r, err := NewRepo(local) c.Assert(err, IsNil) // generate a key for an unknown role _, err = r.GenKey("foo") c.Assert(err, Equals, ErrInvalidRole{"foo", "only support adding keys for top-level roles"}) // generate a root key ids := genKey(c, r, "root") // check root metadata is correct root, err := r.root() c.Assert(err, IsNil) c.Assert(root.Roles, NotNil) c.Assert(root.Roles, HasLen, 1) rs.assertNumUniqueKeys(c, root, "root", 1) rootRole, ok := root.Roles["root"] if !ok { c.Fatal("missing root role") } c.Assert(rootRole.KeyIDs, HasLen, 1) c.Assert(rootRole.KeyIDs, DeepEquals, ids) for _, keyID := range ids { k, ok := root.Keys[keyID] if !ok { c.Fatal("missing key") } c.Assert(k.IDs(), DeepEquals, ids) pk, err := keys.GetVerifier(k) c.Assert(err, IsNil) c.Assert(pk.Public(), HasLen, ed25519.PublicKeySize) } // check root key + role are in db db, err := r.topLevelKeysDB() c.Assert(err, IsNil) for _, keyID := range ids { rootKey, err := db.GetVerifier(keyID) c.Assert(err, IsNil) c.Assert(rootKey.MarshalPublicKey().IDs(), DeepEquals, ids) role := db.GetRole("root") c.Assert(role.KeyIDs, DeepEquals, sets.StringSliceToSet(ids)) // check the key was saved correctly localKeys, err := local.GetSigners("root") c.Assert(err, IsNil) c.Assert(localKeys, HasLen, 1) c.Assert(localKeys[0].PublicData().IDs(), DeepEquals, ids) // check RootKeys() is correct rootKeys, err := r.RootKeys() c.Assert(err, IsNil) c.Assert(rootKeys, HasLen, 1) c.Assert(rootKeys[0].IDs(), DeepEquals, rootKey.MarshalPublicKey().IDs()) pk, err := keys.GetVerifier(rootKeys[0]) c.Assert(err, IsNil) c.Assert(pk.Public(), DeepEquals, rootKey.Public()) } rootKey, err := db.GetVerifier(ids[0]) c.Assert(err, IsNil) // generate two targets keys genKey(c, r, "targets") genKey(c, r, "targets") // check root metadata is correct root, err = r.root() c.Assert(err, IsNil) c.Assert(root.Roles, HasLen, 2) rs.assertNumUniqueKeys(c, root, "root", 1) rs.assertNumUniqueKeys(c, root, "targets", 2) targetsRole, ok := root.Roles["targets"] if !ok { c.Fatal("missing targets role") } c.Assert(targetsRole.KeyIDs, HasLen, 2) targetKeyIDs := make(map[string]struct{}, 2) db, err = r.topLevelKeysDB() c.Assert(err, IsNil) for _, id := range targetsRole.KeyIDs { targetKeyIDs[id] = struct{}{} _, ok = root.Keys[id] if !ok { c.Fatal("missing key") } verifier, err := db.GetVerifier(id) c.Assert(err, IsNil) c.Assert(verifier.MarshalPublicKey().ContainsID(id), Equals, true) } role := db.GetRole("targets") c.Assert(role.KeyIDs, DeepEquals, targetKeyIDs) // check RootKeys() is unchanged rootKeys, err := r.RootKeys() c.Assert(err, IsNil) c.Assert(rootKeys, HasLen, 1) c.Assert(rootKeys[0].IDs(), DeepEquals, rootKey.MarshalPublicKey().IDs()) // check the keys were saved correctly localKeys, err := local.GetSigners("targets") c.Assert(err, IsNil) c.Assert(localKeys, HasLen, 2) for _, key := range localKeys { found := false for _, id := range targetsRole.KeyIDs { if key.PublicData().ContainsID(id) { found = true break } } if !found { c.Fatal("missing key") } } // check root.json got staged meta, err := local.GetMeta() c.Assert(err, IsNil) rootJSON, ok := meta["root.json"] if !ok { c.Fatal("missing root metadata") } s := &data.Signed{} c.Assert(json.Unmarshal(rootJSON, s), IsNil) stagedRoot := &data.Root{} c.Assert(json.Unmarshal(s.Signed, stagedRoot), IsNil) c.Assert(stagedRoot.Type, Equals, root.Type) c.Assert(stagedRoot.Version, Equals, root.Version) c.Assert(stagedRoot.Expires.UnixNano(), Equals, root.Expires.UnixNano()) // make sure both root and stagedRoot have evaluated IDs(), otherwise // DeepEquals will fail because those values might not have been // computed yet. for _, key := range root.Keys { key.IDs() } for _, key := range stagedRoot.Keys { key.IDs() } c.Assert(stagedRoot.Keys, DeepEquals, root.Keys) c.Assert(stagedRoot.Roles, DeepEquals, root.Roles) } func addPrivateKey(c *C, r *Repo, role string, key keys.Signer) []string { err := r.AddPrivateKey(role, key) c.Assert(err, IsNil) keyids := key.PublicData().IDs() c.Assert(len(keyids) > 0, Equals, true) return keyids } func generateAndAddPrivateKey(c *C, r *Repo, role string) []string { signer, err := keys.GenerateEd25519Key() c.Assert(err, IsNil) return addPrivateKey(c, r, role, signer) } func (rs *RepoSuite) TestAddPrivateKey(c *C) { local := MemoryStore(make(map[string]json.RawMessage), nil) r, err := NewRepo(local) c.Assert(err, IsNil) // generate a key for an unknown role signer, err := keys.GenerateEd25519Key() c.Assert(err, IsNil) err = r.AddPrivateKey("foo", signer) c.Assert(err, Equals, ErrInvalidRole{"foo", "only support adding keys for top-level roles"}) // add a root key ids := addPrivateKey(c, r, "root", signer) // check root metadata is correct root, err := r.root() c.Assert(err, IsNil) c.Assert(root.Version, Equals, int64(1)) c.Assert(root.Roles, NotNil) c.Assert(root.Roles, HasLen, 1) rs.assertNumUniqueKeys(c, root, "root", 1) rootRole, ok := root.Roles["root"] if !ok { c.Fatal("missing root role") } c.Assert(rootRole.KeyIDs, HasLen, 1) c.Assert(rootRole.KeyIDs, DeepEquals, ids) for _, keyID := range ids { k, ok := root.Keys[keyID] if !ok { c.Fatalf("missing key %s", keyID) } c.Assert(k.IDs(), DeepEquals, ids) pk, err := keys.GetVerifier(k) c.Assert(err, IsNil) c.Assert(pk.Public(), HasLen, ed25519.PublicKeySize) } // check root key + role are in db db, err := r.topLevelKeysDB() c.Assert(err, IsNil) for _, keyID := range ids { rootKey, err := db.GetVerifier(keyID) c.Assert(err, IsNil) c.Assert(rootKey.MarshalPublicKey().IDs(), DeepEquals, ids) role := db.GetRole("root") c.Assert(role.KeyIDs, DeepEquals, sets.StringSliceToSet(ids)) // check the key was saved correctly localKeys, err := local.GetSigners("root") c.Assert(err, IsNil) c.Assert(localKeys, HasLen, 1) c.Assert(localKeys[0].PublicData().IDs(), DeepEquals, ids) // check RootKeys() is correct rootKeys, err := r.RootKeys() c.Assert(err, IsNil) c.Assert(rootKeys, HasLen, 1) c.Assert(rootKeys[0].IDs(), DeepEquals, rootKey.MarshalPublicKey().IDs()) pk, err := keys.GetVerifier(rootKeys[0]) c.Assert(err, IsNil) c.Assert(pk.Public(), DeepEquals, rootKey.Public()) } rootKey, err := db.GetVerifier(ids[0]) c.Assert(err, IsNil) // generate two targets keys generateAndAddPrivateKey(c, r, "targets") generateAndAddPrivateKey(c, r, "targets") // check root metadata is correct root, err = r.root() c.Assert(err, IsNil) c.Assert(root.Roles, HasLen, 2) rs.assertNumUniqueKeys(c, root, "root", 1) rs.assertNumUniqueKeys(c, root, "targets", 2) targetsRole, ok := root.Roles["targets"] if !ok { c.Fatal("missing targets role") } c.Assert(targetsRole.KeyIDs, HasLen, 2) targetKeyIDs := make(map[string]struct{}, 2) db, err = r.topLevelKeysDB() c.Assert(err, IsNil) for _, id := range targetsRole.KeyIDs { targetKeyIDs[id] = struct{}{} _, ok = root.Keys[id] if !ok { c.Fatal("missing key") } verifier, err := db.GetVerifier(id) c.Assert(err, IsNil) c.Assert(verifier.MarshalPublicKey().ContainsID(id), Equals, true) } role := db.GetRole("targets") c.Assert(role.KeyIDs, DeepEquals, targetKeyIDs) // check RootKeys() is unchanged rootKeys, err := r.RootKeys() c.Assert(err, IsNil) c.Assert(rootKeys, HasLen, 1) c.Assert(rootKeys[0].IDs(), DeepEquals, rootKey.MarshalPublicKey().IDs()) // check the keys were saved correctly localKeys, err := local.GetSigners("targets") c.Assert(err, IsNil) c.Assert(localKeys, HasLen, 2) for _, key := range localKeys { found := false for _, id := range targetsRole.KeyIDs { if key.PublicData().ContainsID(id) { found = true break } } if !found { c.Fatal("missing key") } } // check root.json got staged meta, err := local.GetMeta() c.Assert(err, IsNil) rootJSON, ok := meta["root.json"] if !ok { c.Fatal("missing root metadata") } s := &data.Signed{} c.Assert(json.Unmarshal(rootJSON, s), IsNil) stagedRoot := &data.Root{} c.Assert(json.Unmarshal(s.Signed, stagedRoot), IsNil) c.Assert(stagedRoot.Type, Equals, root.Type) c.Assert(stagedRoot.Version, Equals, root.Version) c.Assert(stagedRoot.Expires.UnixNano(), Equals, root.Expires.UnixNano()) // make sure both root and stagedRoot have evaluated IDs(), otherwise // DeepEquals will fail because those values might not have been // computed yet. for _, key := range root.Keys { key.IDs() } for _, key := range stagedRoot.Keys { key.IDs() } c.Assert(stagedRoot.Keys, DeepEquals, root.Keys) c.Assert(stagedRoot.Roles, DeepEquals, root.Roles) // commit to make sure we don't modify metadata after committing metadata. generateAndAddPrivateKey(c, r, "snapshot") generateAndAddPrivateKey(c, r, "timestamp") c.Assert(r.AddTargets([]string{}, nil), IsNil) c.Assert(r.Snapshot(), IsNil) c.Assert(r.Timestamp(), IsNil) c.Assert(r.Commit(), IsNil) // add the same root key to make sure the metadata is unmodified. oldRoot, err := r.root() c.Assert(err, IsNil) addPrivateKey(c, r, "root", signer) newRoot, err := r.root() c.Assert(err, IsNil) c.Assert(oldRoot, DeepEquals, newRoot) if r.local.FileIsStaged("root.json") { c.Fatal("root should not be marked dirty") } } func (rs *RepoSuite) TestRevokeKey(c *C) { local := MemoryStore(make(map[string]json.RawMessage), nil) r, err := NewRepo(local) c.Assert(err, IsNil) // revoking a key for an unknown role returns ErrInvalidRole c.Assert(r.RevokeKey("foo", ""), DeepEquals, ErrInvalidRole{"foo", "only revocations for top-level roles supported"}) // revoking a key which doesn't exist returns ErrKeyNotFound c.Assert(r.RevokeKey("root", "nonexistent"), DeepEquals, ErrKeyNotFound{"root", "nonexistent"}) // generate keys genKey(c, r, "root") target1IDs := genKey(c, r, "targets") target2IDs := genKey(c, r, "targets") genKey(c, r, "snapshot") genKey(c, r, "timestamp") root, err := r.root() c.Assert(err, IsNil) c.Assert(root.Roles, NotNil) c.Assert(root.Roles, HasLen, 4) c.Assert(root.Keys, NotNil) rs.assertNumUniqueKeys(c, root, "root", 1) rs.assertNumUniqueKeys(c, root, "targets", 2) rs.assertNumUniqueKeys(c, root, "snapshot", 1) rs.assertNumUniqueKeys(c, root, "timestamp", 1) // revoke a key targetsRole, ok := root.Roles["targets"] if !ok { c.Fatal("missing targets role") } c.Assert(targetsRole.KeyIDs, HasLen, len(target1IDs)+len(target2IDs)) id := targetsRole.KeyIDs[0] c.Assert(r.RevokeKey("targets", id), IsNil) // make sure all the other key ids were also revoked for _, id := range target1IDs { c.Assert(r.RevokeKey("targets", id), DeepEquals, ErrKeyNotFound{"targets", id}) } // check root was updated root, err = r.root() c.Assert(err, IsNil) c.Assert(root.Roles, NotNil) c.Assert(root.Roles, HasLen, 4) c.Assert(root.Keys, NotNil) rs.assertNumUniqueKeys(c, root, "root", 1) rs.assertNumUniqueKeys(c, root, "targets", 1) rs.assertNumUniqueKeys(c, root, "snapshot", 1) rs.assertNumUniqueKeys(c, root, "timestamp", 1) targetsRole, ok = root.Roles["targets"] if !ok { c.Fatal("missing targets role") } c.Assert(targetsRole.KeyIDs, HasLen, 1) c.Assert(targetsRole.KeyIDs, DeepEquals, target2IDs) } func (rs *RepoSuite) TestRevokeKeyInMultipleRoles(c *C) { local := MemoryStore(make(map[string]json.RawMessage), nil) r, err := NewRepo(local) c.Assert(err, IsNil) // generate keys. add a root key that is shared with the targets role rootSigner, err := keys.GenerateEd25519Key() c.Assert(err, IsNil) c.Assert(r.AddVerificationKey("root", rootSigner.PublicData()), IsNil) sharedSigner, err := keys.GenerateEd25519Key() c.Assert(err, IsNil) sharedIDs := sharedSigner.PublicData().IDs() c.Assert(r.AddVerificationKey("root", sharedSigner.PublicData()), IsNil) c.Assert(r.AddVerificationKey("targets", sharedSigner.PublicData()), IsNil) targetIDs := genKey(c, r, "targets") genKey(c, r, "snapshot") genKey(c, r, "timestamp") root, err := r.root() c.Assert(err, IsNil) c.Assert(root.Roles, NotNil) c.Assert(root.Roles, HasLen, 4) c.Assert(root.Keys, NotNil) rs.assertNumUniqueKeys(c, root, "root", 2) rs.assertNumUniqueKeys(c, root, "targets", 2) rs.assertNumUniqueKeys(c, root, "snapshot", 1) rs.assertNumUniqueKeys(c, root, "timestamp", 1) // revoke a key targetsRole, ok := root.Roles["targets"] if !ok { c.Fatal("missing targets role") } c.Assert(targetsRole.KeyIDs, HasLen, len(targetIDs)+len(sharedIDs)) id := targetsRole.KeyIDs[0] c.Assert(r.RevokeKey("targets", id), IsNil) // make sure all the other key ids were also revoked for _, id := range sharedIDs { c.Assert(r.RevokeKey("targets", id), DeepEquals, ErrKeyNotFound{"targets", id}) } // check root was updated root, err = r.root() c.Assert(err, IsNil) c.Assert(root.Roles, NotNil) c.Assert(root.Roles, HasLen, 4) c.Assert(root.Keys, NotNil) // the shared root/targets signer should still be present in root keys c.Assert(UniqueKeys(root)["root"], DeepEquals, []*data.PublicKey{rootSigner.PublicData(), sharedSigner.PublicData()}) rs.assertNumUniqueKeys(c, root, "root", 2) rs.assertNumUniqueKeys(c, root, "targets", 1) rs.assertNumUniqueKeys(c, root, "snapshot", 1) rs.assertNumUniqueKeys(c, root, "timestamp", 1) targetsRole, ok = root.Roles["targets"] if !ok { c.Fatal("missing targets role") } c.Assert(targetsRole.KeyIDs, HasLen, 1) c.Assert(targetsRole.KeyIDs, DeepEquals, targetIDs) } func (rs *RepoSuite) TestSign(c *C) { meta := map[string]json.RawMessage{"root.json": []byte(`{"signed":{},"signatures":[]}`)} local := MemoryStore(meta, nil) r, err := NewRepo(local) c.Assert(err, IsNil) c.Assert(r.Sign("foo.json"), Equals, ErrMissingMetadata{"foo.json"}) // signing with no keys returns ErrNoKeys c.Assert(r.Sign("root.json"), Equals, ErrNoKeys{"root.json"}) checkSigIDs := func(keyIDs ...string) { meta, err := local.GetMeta() c.Assert(err, IsNil) rootJSON, ok := meta["root.json"] if !ok { c.Fatal("missing root.json") } s := &data.Signed{} c.Assert(json.Unmarshal(rootJSON, s), IsNil) c.Assert(s.Signatures, HasLen, len(keyIDs)) // Signatures may be in any order, so must sort key IDs before comparison. wantKeyIDs := append([]string{}, keyIDs...) sort.Strings(wantKeyIDs) gotKeyIDs := []string{} for _, sig := range s.Signatures { gotKeyIDs = append(gotKeyIDs, sig.KeyID) } sort.Strings(gotKeyIDs) c.Assert(wantKeyIDs, DeepEquals, gotKeyIDs) } // signing with an available key generates a signature signer, err := keys.GenerateEd25519Key() c.Assert(err, IsNil) c.Assert(local.SaveSigner("root", signer), IsNil) c.Assert(r.Sign("root.json"), IsNil) checkSigIDs(signer.PublicData().IDs()...) // signing again does not generate a duplicate signature c.Assert(r.Sign("root.json"), IsNil) checkSigIDs(signer.PublicData().IDs()...) // signing with a new available key generates another signature newKey, err := keys.GenerateEd25519Key() c.Assert(err, IsNil) c.Assert(local.SaveSigner("root", newKey), IsNil) c.Assert(r.Sign("root.json"), IsNil) checkSigIDs(append(signer.PublicData().IDs(), newKey.PublicData().IDs()...)...) // attempt to sign missing metadata c.Assert(r.Sign("targets.json"), Equals, ErrMissingMetadata{"targets.json"}) } func (rs *RepoSuite) TestStatus(c *C) { files := map[string][]byte{"foo.txt": []byte("foo")} local := MemoryStore(make(map[string]json.RawMessage), files) r, err := NewRepo(local) c.Assert(err, IsNil) genKey(c, r, "root") genKey(c, r, "targets") genKey(c, r, "snapshot") genKey(c, r, "timestamp") c.Assert(r.AddTarget("foo.txt", nil), IsNil) c.Assert(r.SnapshotWithExpires(time.Now().Add(24*time.Hour)), IsNil) c.Assert(r.TimestampWithExpires(time.Now().Add(1*time.Hour)), IsNil) c.Assert(r.Commit(), IsNil) expires := time.Now().Add(2 * time.Hour) c.Assert(r.CheckRoleUnexpired("timestamp", expires), ErrorMatches, "role expired on.*") c.Assert(r.CheckRoleUnexpired("snapshot", expires), IsNil) c.Assert(r.CheckRoleUnexpired("targets", expires), IsNil) c.Assert(r.CheckRoleUnexpired("root", expires), IsNil) } func (rs *RepoSuite) TestCommit(c *C) { files := map[string][]byte{"foo.txt": []byte("foo"), "bar.txt": []byte("bar")} local := MemoryStore(make(map[string]json.RawMessage), files) r, err := NewRepo(local) c.Assert(err, IsNil) // commit without root.json c.Assert(r.Commit(), DeepEquals, ErrMissingMetadata{"root.json"}) // Init should create targets.json, but not signed yet r.Init(false) c.Assert(r.Commit(), DeepEquals, ErrMissingMetadata{"snapshot.json"}) genKey(c, r, "root") // commit without snapshot.json genKey(c, r, "targets") c.Assert(r.Sign("targets.json"), IsNil) c.Assert(r.Commit(), DeepEquals, ErrMissingMetadata{"snapshot.json"}) // commit without timestamp.json genKey(c, r, "snapshot") c.Assert(r.Snapshot(), IsNil) c.Assert(r.Commit(), DeepEquals, ErrMissingMetadata{"timestamp.json"}) // commit with timestamp.json but no timestamp key c.Assert(r.Timestamp(), IsNil) c.Assert(r.Commit(), DeepEquals, ErrInsufficientSignatures{"timestamp.json", verify.ErrNoSignatures}) // commit success genKey(c, r, "timestamp") c.Assert(r.Snapshot(), IsNil) c.Assert(r.Timestamp(), IsNil) c.Assert(r.Commit(), IsNil) // commit with an invalid root hash in snapshot.json due to new key creation genKey(c, r, "targets") c.Assert(r.Sign("targets.json"), IsNil) c.Assert(r.Commit(), DeepEquals, errors.New("tuf: invalid targets.json in snapshot.json: wrong length, expected 338 got 552")) // commit with an invalid targets hash in snapshot.json c.Assert(r.Snapshot(), IsNil) c.Assert(r.AddTarget("bar.txt", nil), IsNil) c.Assert(r.Commit(), DeepEquals, errors.New("tuf: invalid targets.json in snapshot.json: wrong length, expected 552 got 725")) // commit with an invalid timestamp c.Assert(r.Snapshot(), IsNil) err = r.Commit() c.Assert(err, NotNil) c.Assert(err.Error()[0:44], Equals, "tuf: invalid snapshot.json in timestamp.json") // commit with a role's threshold greater than number of keys root, err := r.root() c.Assert(err, IsNil) role, ok := root.Roles["timestamp"] if !ok { c.Fatal("missing timestamp role") } c.Assert(role.KeyIDs, HasLen, 1) c.Assert(role.Threshold, Equals, 1) c.Assert(r.RevokeKey("timestamp", role.KeyIDs[0]), IsNil) c.Assert(r.Snapshot(), IsNil) c.Assert(r.Timestamp(), IsNil) c.Assert(r.Commit(), DeepEquals, ErrNotEnoughKeys{"timestamp", 0, 1}) } func (rs *RepoSuite) TestCommitVersions(c *C) { files := map[string][]byte{"foo.txt": []byte("foo")} local := MemoryStore(make(map[string]json.RawMessage), files) r, err := NewRepo(local) c.Assert(err, IsNil) genKey(c, r, "root") genKey(c, r, "targets") genKey(c, r, "snapshot") genKey(c, r, "timestamp") c.Assert(r.AddTarget("foo.txt", nil), IsNil) c.Assert(r.Snapshot(), IsNil) c.Assert(r.Timestamp(), IsNil) c.Assert(r.Commit(), IsNil) // on initial commit everything should be at version 1. rootVersion, err := r.RootVersion() c.Assert(err, IsNil) c.Assert(rootVersion, Equals, int64(1)) targetsVersion, err := r.TargetsVersion() c.Assert(err, IsNil) c.Assert(targetsVersion, Equals, int64(1)) snapshotVersion, err := r.SnapshotVersion() c.Assert(err, IsNil) c.Assert(snapshotVersion, Equals, int64(1)) timestampVersion, err := r.SnapshotVersion() c.Assert(err, IsNil) c.Assert(timestampVersion, Equals, int64(1)) // taking a snapshot should only increment snapshot and timestamp. c.Assert(r.Snapshot(), IsNil) c.Assert(r.Timestamp(), IsNil) c.Assert(r.Commit(), IsNil) rootVersion, err = r.RootVersion() c.Assert(err, IsNil) c.Assert(rootVersion, Equals, int64(1)) targetsVersion, err = r.TargetsVersion() c.Assert(err, IsNil) c.Assert(targetsVersion, Equals, int64(1)) snapshotVersion, err = r.SnapshotVersion() c.Assert(err, IsNil) c.Assert(snapshotVersion, Equals, int64(2)) timestampVersion, err = r.SnapshotVersion() c.Assert(err, IsNil) c.Assert(timestampVersion, Equals, int64(2)) // rotating multiple keys should increment the root once. genKey(c, r, "targets") genKey(c, r, "snapshot") genKey(c, r, "timestamp") c.Assert(r.Snapshot(), IsNil) c.Assert(r.Timestamp(), IsNil) c.Assert(r.Commit(), IsNil) rootVersion, err = r.RootVersion() c.Assert(err, IsNil) c.Assert(rootVersion, Equals, int64(2)) targetsVersion, err = r.TargetsVersion() c.Assert(err, IsNil) c.Assert(targetsVersion, Equals, int64(1)) snapshotVersion, err = r.SnapshotVersion() c.Assert(err, IsNil) c.Assert(snapshotVersion, Equals, int64(3)) timestampVersion, err = r.TimestampVersion() c.Assert(err, IsNil) c.Assert(timestampVersion, Equals, int64(3)) } type tmpDir struct { path string c *C } func newTmpDir(c *C) *tmpDir { return &tmpDir{path: c.MkDir(), c: c} } func (t *tmpDir) assertExists(path string) { if _, err := os.Stat(filepath.Join(t.path, path)); os.IsNotExist(err) { t.c.Fatalf("expected path to exist but it doesn't: %s", path) } } func (t *tmpDir) assertNotExist(path string) { if _, err := os.Stat(filepath.Join(t.path, path)); !os.IsNotExist(err) { t.c.Fatalf("expected path to not exist but it does: %s", path) } } func (t *tmpDir) assertHashedFilesExist(path string, hashes data.Hashes) { t.c.Assert(len(hashes) > 0, Equals, true) for _, path := range util.HashedPaths(path, hashes) { t.assertExists(path) } } func (t *tmpDir) assertHashedFilesNotExist(path string, hashes data.Hashes) { for _, path := range util.HashedPaths(path, hashes) { t.assertNotExist(path) } } func (t *tmpDir) assertVersionedFileExist(path string, version int64) { t.assertExists(util.VersionedPath(path, version)) } func (t *tmpDir) assertVersionedFileNotExist(path string, version int64) { t.assertNotExist(util.VersionedPath(path, version)) } func (t *tmpDir) assertEmpty(dir string) { path := filepath.Join(t.path, dir) f, err := os.Stat(path) if os.IsNotExist(err) { t.c.Fatalf("expected dir to exist but it doesn't: %s", dir) } t.c.Assert(err, IsNil) t.c.Assert(f.IsDir(), Equals, true) entries, err := os.ReadDir(path) t.c.Assert(err, IsNil) // check that all (if any) entries are also empty for _, e := range entries { t.assertEmpty(filepath.Join(dir, e.Name())) } } func (t *tmpDir) assertFileContent(path, content string) { actual := t.readFile(path) t.c.Assert(string(actual), Equals, content) } func (t *tmpDir) stagedTargetPath(path string) string { return filepath.Join(t.path, "staged", "targets", path) } func (t *tmpDir) writeStagedTarget(path, data string) { path = t.stagedTargetPath(path) t.c.Assert(os.MkdirAll(filepath.Dir(path), 0755), IsNil) t.c.Assert(os.WriteFile(path, []byte(data), 0644), IsNil) } func (t *tmpDir) readFile(path string) []byte { t.assertExists(path) data, err := os.ReadFile(filepath.Join(t.path, path)) t.c.Assert(err, IsNil) return data } func (rs *RepoSuite) TestCommitFileSystem(c *C) { tmp := newTmpDir(c) local := FileSystemStore(tmp.path, nil) r, err := NewRepo(local) c.Assert(err, IsNil) // don't use consistent snapshots to make the checks simpler c.Assert(r.Init(false), IsNil) // cleaning with nothing staged or committed should fail c.Assert(r.Clean(), Equals, ErrNewRepository) // generating keys should stage root.json and create repo dirs genKey(c, r, "root") genKey(c, r, "targets") genKey(c, r, "snapshot") genKey(c, r, "timestamp") tmp.assertExists("staged/root.json") tmp.assertEmpty("repository") tmp.assertEmpty("staged/targets") // cleaning with nothing committed should fail c.Assert(r.Clean(), Equals, ErrNewRepository) // adding a non-existent file fails c.Assert(r.AddTarget("foo.txt", nil), Equals, ErrFileNotFound{tmp.stagedTargetPath("foo.txt")}) tmp.assertEmpty("repository") // adding a file stages targets.json tmp.writeStagedTarget("foo.txt", "foo") c.Assert(r.AddTarget("foo.txt", nil), IsNil) tmp.assertExists("staged/targets.json") tmp.assertEmpty("repository") t, err := r.topLevelTargets() c.Assert(err, IsNil) c.Assert(t.Targets, HasLen, 1) if _, ok := t.Targets["foo.txt"]; !ok { c.Fatal("missing target file: foo.txt") } // Snapshot() stages snapshot.json c.Assert(r.Snapshot(), IsNil) tmp.assertExists("staged/snapshot.json") tmp.assertEmpty("repository") // Timestamp() stages timestamp.json c.Assert(r.Timestamp(), IsNil) tmp.assertExists("staged/timestamp.json") tmp.assertEmpty("repository") // committing moves files from staged -> repository c.Assert(r.Commit(), IsNil) tmp.assertExists("repository/root.json") tmp.assertExists("repository/targets.json") tmp.assertExists("repository/snapshot.json") tmp.assertExists("repository/timestamp.json") tmp.assertFileContent("repository/targets/foo.txt", "foo") tmp.assertEmpty("staged/targets") tmp.assertEmpty("staged") // adding and committing another file moves it into repository/targets tmp.writeStagedTarget("path/to/bar.txt", "bar") c.Assert(r.AddTarget("path/to/bar.txt", nil), IsNil) tmp.assertExists("staged/targets.json") c.Assert(r.Snapshot(), IsNil) c.Assert(r.Timestamp(), IsNil) c.Assert(r.Commit(), IsNil) tmp.assertFileContent("repository/targets/foo.txt", "foo") tmp.assertFileContent("repository/targets/path/to/bar.txt", "bar") tmp.assertEmpty("staged/targets") tmp.assertEmpty("staged") // removing and committing a file removes it from repository/targets c.Assert(r.RemoveTarget("foo.txt"), IsNil) tmp.assertExists("staged/targets.json") c.Assert(r.Snapshot(), IsNil) c.Assert(r.Timestamp(), IsNil) c.Assert(r.Commit(), IsNil) tmp.assertNotExist("repository/targets/foo.txt") tmp.assertFileContent("repository/targets/path/to/bar.txt", "bar") tmp.assertEmpty("staged/targets") tmp.assertEmpty("staged") } func (rs *RepoSuite) TestCommitFileSystemWithNewRepositories(c *C) { tmp := newTmpDir(c) newRepo := func() *Repo { local := FileSystemStore(tmp.path, nil) r, err := NewRepo(local) c.Assert(err, IsNil) return r } genKey(c, newRepo(), "root") genKey(c, newRepo(), "targets") genKey(c, newRepo(), "snapshot") genKey(c, newRepo(), "timestamp") tmp.writeStagedTarget("foo.txt", "foo") c.Assert(newRepo().AddTarget("foo.txt", nil), IsNil) c.Assert(newRepo().Snapshot(), IsNil) c.Assert(newRepo().Timestamp(), IsNil) c.Assert(newRepo().Commit(), IsNil) } func (rs *RepoSuite) TestConsistentSnapshot(c *C) { tmp := newTmpDir(c) local := FileSystemStore(tmp.path, nil) r, err := NewRepo(local, "sha512", "sha256") c.Assert(err, IsNil) genKey(c, r, "root") genKey(c, r, "targets") genKey(c, r, "snapshot") genKey(c, r, "timestamp") tmp.writeStagedTarget("foo.txt", "foo") c.Assert(r.AddTarget("foo.txt", nil), IsNil) tmp.writeStagedTarget("dir/bar.txt", "bar") c.Assert(r.AddTarget("dir/bar.txt", nil), IsNil) c.Assert(r.Snapshot(), IsNil) c.Assert(r.Timestamp(), IsNil) c.Assert(r.Commit(), IsNil) versions, err := r.fileVersions() c.Assert(err, IsNil) c.Assert(versions["root.json"], Equals, int64(1)) c.Assert(versions["targets.json"], Equals, int64(1)) c.Assert(versions["snapshot.json"], Equals, int64(1)) hashes, err := r.fileHashes() c.Assert(err, IsNil) // root.json, targets.json and snapshot.json should exist at both versioned and unversioned paths for _, meta := range []string{"root.json", "targets.json", "snapshot.json"} { repoPath := path.Join("repository", meta) if meta != "root.json" { c.Assert(len(hashes[meta]) > 0, Equals, true) } tmp.assertHashedFilesNotExist(repoPath, hashes[meta]) tmp.assertVersionedFileExist(repoPath, versions[meta]) tmp.assertExists(repoPath) } // target files should exist at hashed but not unhashed paths for _, target := range []string{"targets/foo.txt", "targets/dir/bar.txt"} { repoPath := path.Join("repository", target) tmp.assertHashedFilesExist(repoPath, hashes[target]) tmp.assertNotExist(repoPath) } // timestamp.json should exist at an unversioned and unhashed path (it doesn't have a hash) c.Assert(hashes["repository/timestamp.json"], IsNil) tmp.assertVersionedFileNotExist("repository/timestamp.json", versions["repository/timestamp.json"]) tmp.assertExists("repository/timestamp.json") // removing a file should remove the hashed files c.Assert(r.RemoveTarget("foo.txt"), IsNil) c.Assert(r.Snapshot(), IsNil) c.Assert(r.Timestamp(), IsNil) c.Assert(r.Commit(), IsNil) versions, err = r.fileVersions() c.Assert(err, IsNil) c.Assert(versions["root.json"], Equals, int64(1)) c.Assert(versions["targets.json"], Equals, int64(2)) c.Assert(versions["snapshot.json"], Equals, int64(2)) // Save the old hashes for foo.txt to make sure we can assert it doesn't exist later. fooHashes := hashes["targets/foo.txt"] hashes, err = r.fileHashes() c.Assert(err, IsNil) // root.json, targets.json and snapshot.json should exist at both versioned and unversioned paths for _, meta := range []string{"root.json", "targets.json", "snapshot.json"} { repoPath := path.Join("repository", meta) if meta != "root.json" { c.Assert(len(hashes[meta]) > 0, Equals, true) } tmp.assertHashedFilesNotExist(repoPath, hashes[meta]) tmp.assertVersionedFileExist(repoPath, versions[meta]) tmp.assertExists(repoPath) } tmp.assertHashedFilesNotExist("repository/targets/foo.txt", fooHashes) tmp.assertNotExist("repository/targets/foo.txt") // targets should be returned by new repo newRepo, err := NewRepo(local, "sha512", "sha256") c.Assert(err, IsNil) t, err := newRepo.topLevelTargets() c.Assert(err, IsNil) c.Assert(t.Targets, HasLen, 1) if _, ok := t.Targets["dir/bar.txt"]; !ok { c.Fatal("missing targets file: dir/bar.txt") } } func (rs *RepoSuite) TestExpiresAndVersion(c *C) { files := map[string][]byte{"foo.txt": []byte("foo")} local := MemoryStore(make(map[string]json.RawMessage), files) r, err := NewRepo(local) c.Assert(err, IsNil) past := time.Now().Add(-1 * time.Second) _, genKeyErr := r.GenKeyWithExpires("root", past) for _, err := range []error{ genKeyErr, r.AddTargetWithExpires("foo.txt", nil, past), r.RemoveTargetWithExpires("foo.txt", past), r.SnapshotWithExpires(past), r.TimestampWithExpires(past), } { c.Assert(err, Equals, ErrInvalidExpires{past}) } genKey(c, r, "root") genKey(c, r, "targets") genKey(c, r, "snapshot") genKey(c, r, "timestamp") c.Assert(r.AddTargets([]string{}, nil), IsNil) c.Assert(r.Snapshot(), IsNil) c.Assert(r.Timestamp(), IsNil) c.Assert(r.Commit(), IsNil) root, err := r.root() c.Assert(err, IsNil) c.Assert(root.Version, Equals, int64(1)) expires := time.Now().Add(24 * time.Hour) _, err = r.GenKeyWithExpires("root", expires) c.Assert(err, IsNil) c.Assert(r.Snapshot(), IsNil) c.Assert(r.Timestamp(), IsNil) c.Assert(r.Commit(), IsNil) root, err = r.root() c.Assert(err, IsNil) c.Assert(root.Expires.Unix(), DeepEquals, expires.Round(time.Second).Unix()) c.Assert(root.Version, Equals, int64(2)) expires = time.Now().Add(12 * time.Hour) role, ok := root.Roles["root"] if !ok { c.Fatal("missing root role") } c.Assert(role.KeyIDs, HasLen, 2) c.Assert(r.RevokeKeyWithExpires("root", role.KeyIDs[0], expires), IsNil) c.Assert(r.Snapshot(), IsNil) c.Assert(r.Timestamp(), IsNil) c.Assert(r.Commit(), IsNil) root, err = r.root() c.Assert(err, IsNil) c.Assert(root.Expires.Unix(), DeepEquals, expires.Round(time.Second).Unix()) c.Assert(root.Version, Equals, int64(3)) expires = time.Now().Add(6 * time.Hour) c.Assert(r.AddTargetWithExpires("foo.txt", nil, expires), IsNil) c.Assert(r.Snapshot(), IsNil) c.Assert(r.Timestamp(), IsNil) c.Assert(r.Commit(), IsNil) targets, err := r.topLevelTargets() c.Assert(err, IsNil) c.Assert(targets.Expires.Unix(), Equals, expires.Round(time.Second).Unix()) c.Assert(targets.Version, Equals, int64(2)) expires = time.Now().Add(2 * time.Hour) c.Assert(r.RemoveTargetWithExpires("foo.txt", expires), IsNil) c.Assert(r.Snapshot(), IsNil) c.Assert(r.Timestamp(), IsNil) c.Assert(r.Commit(), IsNil) targets, err = r.topLevelTargets() c.Assert(err, IsNil) c.Assert(targets.Expires.Unix(), Equals, expires.Round(time.Second).Unix()) c.Assert(targets.Version, Equals, int64(3)) expires = time.Now().Add(time.Hour) c.Assert(r.SnapshotWithExpires(expires), IsNil) c.Assert(r.Timestamp(), IsNil) c.Assert(r.Commit(), IsNil) snapshot, err := r.snapshot() c.Assert(err, IsNil) c.Assert(snapshot.Expires.Unix(), Equals, expires.Round(time.Second).Unix()) c.Assert(snapshot.Version, Equals, int64(6)) _, snapshotHasRoot := snapshot.Meta["root.json"] c.Assert(snapshotHasRoot, Equals, false) c.Assert(snapshot.Meta["targets.json"].Version, Equals, targets.Version) c.Assert(r.Snapshot(), IsNil) c.Assert(r.Timestamp(), IsNil) c.Assert(r.Commit(), IsNil) snapshot, err = r.snapshot() c.Assert(err, IsNil) c.Assert(snapshot.Version, Equals, int64(7)) expires = time.Now().Add(10 * time.Minute) c.Assert(r.TimestampWithExpires(expires), IsNil) c.Assert(r.Commit(), IsNil) timestamp, err := r.timestamp() c.Assert(err, IsNil) c.Assert(timestamp.Expires.Unix(), Equals, expires.Round(time.Second).Unix()) c.Assert(timestamp.Version, Equals, int64(8)) c.Assert(r.Timestamp(), IsNil) c.Assert(r.Commit(), IsNil) timestamp, err = r.timestamp() c.Assert(err, IsNil) c.Assert(timestamp.Version, Equals, int64(9)) c.Assert(timestamp.Meta["snapshot.json"].Version, Equals, snapshot.Version) } func (rs *RepoSuite) TestHashAlgorithm(c *C) { files := map[string][]byte{"foo.txt": []byte("foo")} local := MemoryStore(make(map[string]json.RawMessage), files) type hashTest struct { args []string expected []string } for _, test := range []hashTest{ {args: []string{}, expected: []string{"sha512"}}, {args: []string{"sha256"}}, {args: []string{"sha512", "sha256"}}, } { // generate metadata with specific hash functions r, err := NewRepo(local, test.args...) c.Assert(err, IsNil) genKey(c, r, "root") genKey(c, r, "targets") genKey(c, r, "snapshot") c.Assert(r.AddTarget("foo.txt", nil), IsNil) c.Assert(r.Snapshot(), IsNil) c.Assert(r.Timestamp(), IsNil) // check metadata has correct hash functions if test.expected == nil { test.expected = test.args } targets, err := r.topLevelTargets() c.Assert(err, IsNil) snapshot, err := r.snapshot() c.Assert(err, IsNil) timestamp, err := r.timestamp() c.Assert(err, IsNil) for name, file := range map[string]data.FileMeta{ "foo.txt": targets.Targets["foo.txt"].FileMeta, "targets.json": {Length: snapshot.Meta["targets.json"].Length, Hashes: snapshot.Meta["targets.json"].Hashes}, "snapshot.json": {Length: timestamp.Meta["snapshot.json"].Length, Hashes: timestamp.Meta["snapshot.json"].Hashes}, } { for _, hashAlgorithm := range test.expected { if _, ok := file.Hashes[hashAlgorithm]; !ok { c.Fatalf("expected %s hash to contain hash func %s, got %s", name, hashAlgorithm, file.Hashes.HashAlgorithms()) } } } } } func (rs *RepoSuite) TestKeyPersistence(c *C) { tmp := newTmpDir(c) oldPassphrase := []byte("old_s3cr3t") newPassphrase := []byte("new_s3cr3t") // returnNewPassphrase is used to force the passphrase function to return the new passphrase when called by the SaveSigner() method returnNewPassphrase := false // passphrase mock function testPassphraseFunc := func(a string, b, change bool) ([]byte, error) { if change || returnNewPassphrase { return newPassphrase, nil } return oldPassphrase, nil } store := FileSystemStore(tmp.path, testPassphraseFunc) assertKeys := func(role string, enc bool, expected []*data.PrivateKey) { keysJSON := tmp.readFile("keys/" + role + ".json") pk := &persistedKeys{} c.Assert(json.Unmarshal(keysJSON, pk), IsNil) // check the persisted keys are correct var actual []*data.PrivateKey pass := oldPassphrase if enc { c.Assert(pk.Encrypted, Equals, true) if returnNewPassphrase { pass = newPassphrase } decrypted, err := encrypted.Decrypt(pk.Data, pass) c.Assert(err, IsNil) c.Assert(json.Unmarshal(decrypted, &actual), IsNil) } else { c.Assert(pk.Encrypted, Equals, false) c.Assert(json.Unmarshal(pk.Data, &actual), IsNil) } // Compare slices of unique elements disregarding order. c.Assert(actual, HasLen, len(expected)) for _, gotKey := range actual { expectedNumMatches := 0 for _, x := range actual { if reflect.DeepEqual(gotKey, x) { expectedNumMatches++ } } numMatches := 0 for _, wantKey := range expected { wantCanon, err := cjson.EncodeCanonical(wantKey) c.Assert(err, IsNil) gotCanon, err := cjson.EncodeCanonical(gotKey) c.Assert(err, IsNil) if string(wantCanon) == string(gotCanon) { numMatches++ } } c.Assert(numMatches, Equals, expectedNumMatches, Commentf("actual: %+v, expected: %+v", actual, expected)) } // check GetKeys is correct signers, err := store.GetSigners(role) c.Assert(err, IsNil) // Compare slices of unique elements disregarding order. c.Assert(signers, HasLen, len(expected)) for _, s := range signers { expectedNumMatches := 0 for _, x := range signers { if reflect.DeepEqual(s, x) { expectedNumMatches++ } } numMatches := 0 for _, e := range expected { v, err := keys.GetSigner(e) c.Assert(err, IsNil) if reflect.DeepEqual(s.PublicData().IDs(), v.PublicData().IDs()) { numMatches++ } } c.Assert(numMatches, Equals, expectedNumMatches, Commentf("signers: %+v, expected: %+v", signers, expected)) } } // save a key and check it gets encrypted signer, err := keys.GenerateEd25519Key() c.Assert(err, IsNil) privateKey, err := signer.MarshalPrivateKey() c.Assert(err, IsNil) c.Assert(store.SaveSigner("root", signer), IsNil) assertKeys("root", true, []*data.PrivateKey{privateKey}) // save another key and check it gets added to the existing keys newKey, err := keys.GenerateEd25519Key() c.Assert(err, IsNil) newPrivateKey, err := newKey.MarshalPrivateKey() c.Assert(err, IsNil) c.Assert(store.SaveSigner("root", newKey), IsNil) assertKeys("root", true, []*data.PrivateKey{privateKey, newPrivateKey}) // check saving a key to an encrypted file without a passphrase fails insecureStore := FileSystemStore(tmp.path, nil) signer, err = keys.GenerateEd25519Key() c.Assert(err, IsNil) c.Assert(insecureStore.SaveSigner("root", signer), Equals, ErrPassphraseRequired{"root"}) // save a key to an insecure store and check it is not encrypted signer, err = keys.GenerateEd25519Key() c.Assert(err, IsNil) privateKey, err = signer.MarshalPrivateKey() c.Assert(err, IsNil) c.Assert(insecureStore.SaveSigner("targets", signer), IsNil) assertKeys("targets", false, []*data.PrivateKey{privateKey}) c.Assert(insecureStore.SaveSigner("foo", signer), IsNil) assertKeys("foo", false, []*data.PrivateKey{privateKey}) // Test changing the passphrase // 1. Create a secure store with a passphrase (create new object and temp folder so we discard any previous state) tmp = newTmpDir(c) var logBytes bytes.Buffer storeOpts := StoreOpts{ Logger: log.New(&logBytes, "", 0), PassFunc: testPassphraseFunc, } store = FileSystemStoreWithOpts(tmp.path, storeOpts) // 1.5. Changing passphrase works for top-level and delegated roles. r, err := NewRepo(store) c.Assert(err, IsNil) c.Assert(r.ChangePassphrase("targets"), NotNil) c.Assert(r.ChangePassphrase("foo"), NotNil) // 2. Test changing the passphrase when the keys file does not exist - should FAIL c.Assert(store.(PassphraseChanger).ChangePassphrase("root"), NotNil) c.Assert(strings.Contains(logBytes.String(), "Missing keys file"), Equals, true) // 3. Generate a new key signer, err = keys.GenerateEd25519Key() c.Assert(err, IsNil) privateKey, err = signer.MarshalPrivateKey() c.Assert(err, IsNil) c.Assert(store.SaveSigner("root", signer), IsNil) // 4. Verify the key file can be decrypted using the original passphrase - should SUCCEED assertKeys("root", true, []*data.PrivateKey{privateKey}) // 5. Change the passphrase (our mock passphrase function is called with change=true thus returning the newPassphrase value) c.Assert(store.(PassphraseChanger).ChangePassphrase("root"), IsNil) // 6. Try to add a key and implicitly decrypt the keys file using the OLD passphrase - should FAIL newKey, err = keys.GenerateEd25519Key() c.Assert(err, IsNil) _, err = newKey.MarshalPrivateKey() c.Assert(err, IsNil) c.Assert(store.SaveSigner("root", newKey), NotNil) // 7. Try to add a key and implicitly decrypt the keys using the NEW passphrase - should SUCCEED returnNewPassphrase = true newKey, err = keys.GenerateEd25519Key() c.Assert(err, IsNil) newPrivateKey, err = newKey.MarshalPrivateKey() c.Assert(err, IsNil) c.Assert(store.SaveSigner("root", newKey), IsNil) // 8. Verify again that the key entries are what we expect after decrypting them using the NEW passphrase assertKeys("root", true, []*data.PrivateKey{privateKey, newPrivateKey}) } func (rs *RepoSuite) TestManageMultipleTargets(c *C) { tmp := newTmpDir(c) local := FileSystemStore(tmp.path, nil) r, err := NewRepo(local) c.Assert(err, IsNil) // don't use consistent snapshots to make the checks simpler c.Assert(r.Init(false), IsNil) genKey(c, r, "root") genKey(c, r, "targets") genKey(c, r, "snapshot") genKey(c, r, "timestamp") assertRepoTargets := func(paths ...string) { t, err := r.topLevelTargets() c.Assert(err, IsNil) for _, path := range paths { if _, ok := t.Targets[path]; !ok { c.Fatalf("missing target file: %s", path) } } } // adding and committing multiple files moves correct targets from staged -> repository tmp.writeStagedTarget("foo.txt", "foo") tmp.writeStagedTarget("bar.txt", "bar") c.Assert(r.AddTargets([]string{"foo.txt", "bar.txt"}, nil), IsNil) c.Assert(r.Snapshot(), IsNil) c.Assert(r.Timestamp(), IsNil) c.Assert(r.Commit(), IsNil) assertRepoTargets("foo.txt", "bar.txt") tmp.assertExists("repository/targets/foo.txt") tmp.assertExists("repository/targets/bar.txt") // adding all targets moves them all from staged -> repository count := 10 files := make([]string, count) for i := 0; i < count; i++ { files[i] = fmt.Sprintf("file%d.txt", i) tmp.writeStagedTarget(files[i], "data") } c.Assert(r.AddTargets(nil, nil), IsNil) c.Assert(r.Snapshot(), IsNil) c.Assert(r.Timestamp(), IsNil) c.Assert(r.Commit(), IsNil) tmp.assertExists("repository/targets/foo.txt") tmp.assertExists("repository/targets/bar.txt") assertRepoTargets(files...) for _, file := range files { tmp.assertExists("repository/targets/" + file) } tmp.assertEmpty("staged/targets") tmp.assertEmpty("staged") // removing all targets removes them from the repository and targets.json c.Assert(r.RemoveTargets(nil), IsNil) c.Assert(r.Snapshot(), IsNil) c.Assert(r.Timestamp(), IsNil) c.Assert(r.Commit(), IsNil) tmp.assertNotExist("repository/targets") t, err := r.topLevelTargets() c.Assert(err, IsNil) c.Assert(t.Targets, HasLen, 0) } func (rs *RepoSuite) TestCustomTargetMetadata(c *C) { files := map[string][]byte{ "foo.txt": []byte("foo"), "bar.txt": []byte("bar"), "baz.txt": []byte("baz"), } local := MemoryStore(make(map[string]json.RawMessage), files) r, err := NewRepo(local) c.Assert(err, IsNil) generateAndAddPrivateKey(c, r, "targets") custom := json.RawMessage(`{"foo":"bar"}`) assertCustomMeta := func(file string, custom *json.RawMessage) { t, err := r.topLevelTargets() c.Assert(err, IsNil) target, ok := t.Targets[file] if !ok { c.Fatalf("missing target file: %s", file) } c.Assert(target.Custom, DeepEquals, custom) } // check custom metadata gets added to the target c.Assert(r.AddTarget("foo.txt", custom), IsNil) assertCustomMeta("foo.txt", &custom) // check adding bar.txt with no metadata doesn't affect foo.txt c.Assert(r.AddTarget("bar.txt", nil), IsNil) assertCustomMeta("bar.txt", nil) assertCustomMeta("foo.txt", &custom) // check adding all files with no metadata doesn't reset existing metadata c.Assert(r.AddTargets(nil, nil), IsNil) assertCustomMeta("baz.txt", nil) assertCustomMeta("bar.txt", nil) assertCustomMeta("foo.txt", &custom) } func (rs *RepoSuite) TestUnknownKeyIDs(c *C) { // generate a repo local := MemoryStore(make(map[string]json.RawMessage), nil) r, err := NewRepo(local) c.Assert(err, IsNil) genKey(c, r, "root") genKey(c, r, "targets") genKey(c, r, "snapshot") genKey(c, r, "timestamp") // add a new key to the root metadata with an unknown key id. signer, err := keys.GenerateEd25519Key() c.Assert(err, IsNil) root, err := r.root() c.Assert(err, IsNil) c.Assert(root.Version, Equals, int64(1)) root.Keys["unknown-key-id"] = signer.PublicData() r.setMeta("root.json", root) // commit the metadata to the store. c.Assert(r.AddTargets([]string{}, nil), IsNil) c.Assert(r.Snapshot(), IsNil) c.Assert(r.Timestamp(), IsNil) c.Assert(r.Commit(), IsNil) // validate that the unknown key id wasn't stripped when written to the // store. meta, err := local.GetMeta() c.Assert(err, IsNil) rootJSON, ok := meta["root.json"] c.Assert(ok, Equals, true) var signedRoot struct { Signed data.Root `json:"signed"` Signatures []data.Signature `json:"signatures"` } c.Assert(json.Unmarshal(rootJSON, &signedRoot), IsNil) c.Assert(signedRoot.Signed.Version, Equals, int64(1)) unknownKey, ok := signedRoot.Signed.Keys["unknown-key-id"] c.Assert(ok, Equals, true) c.Assert(unknownKey, DeepEquals, signer.PublicData()) // a new root should preserve the unknown key id. root, err = r.root() c.Assert(root, NotNil) c.Assert(err, IsNil) genKey(c, r, "timestamp") c.Assert(r.Snapshot(), IsNil) c.Assert(r.Timestamp(), IsNil) c.Assert(r.Commit(), IsNil) meta, err = local.GetMeta() c.Assert(err, IsNil) rootJSON, ok = meta["root.json"] c.Assert(ok, Equals, true) c.Assert(json.Unmarshal(rootJSON, &signedRoot), IsNil) c.Assert(signedRoot.Signed.Version, Equals, int64(2)) unknownKey, ok = signedRoot.Signed.Keys["unknown-key-id"] c.Assert(ok, Equals, true) c.Assert(unknownKey, DeepEquals, signer.PublicData()) } func (rs *RepoSuite) TestThreshold(c *C) { local := MemoryStore(make(map[string]json.RawMessage), nil) r, err := NewRepo(local) c.Assert(err, IsNil) _, err = r.GetThreshold("root") c.Assert(err, DeepEquals, ErrInvalidRole{"root", "role missing from root metadata"}) err = r.SetThreshold("root", 2) c.Assert(err, DeepEquals, ErrInvalidRole{"root", "role missing from root metadata"}) // Add one key to each role genKey(c, r, "root") genKey(c, r, "targets") genKey(c, r, "snapshot") genKey(c, r, "timestamp") t, err := r.GetThreshold("root") c.Assert(err, IsNil) c.Assert(t, Equals, 1) _, err = r.GetThreshold("foo") c.Assert(err, DeepEquals, ErrInvalidRole{"foo", "only thresholds for top-level roles supported"}) err = r.SetThreshold("foo", 2) c.Assert(err, DeepEquals, ErrInvalidRole{"foo", "only thresholds for top-level roles supported"}) // commit the metadata to the store. c.Assert(r.AddTargets([]string{}, nil), IsNil) c.Assert(r.Snapshot(), IsNil) c.Assert(r.Timestamp(), IsNil) c.Assert(r.Commit(), IsNil) // Set a new threshold. Commit without threshold keys c.Assert(r.SetThreshold("root", 2), IsNil) t, err = r.GetThreshold("root") c.Assert(err, IsNil) c.Assert(t, Equals, 2) c.Assert(r.Commit(), DeepEquals, ErrNotEnoughKeys{"root", 1, 2}) // Add a second root key and try again genKey(c, r, "root") c.Assert(r.Sign("root.json"), IsNil) c.Assert(r.Snapshot(), IsNil) c.Assert(r.Timestamp(), IsNil) c.Assert(r.Commit(), IsNil) // Check versions updated rootVersion, err := r.RootVersion() c.Assert(err, IsNil) c.Assert(rootVersion, Equals, int64(2)) targetsVersion, err := r.TargetsVersion() c.Assert(err, IsNil) c.Assert(targetsVersion, Equals, int64(1)) snapshotVersion, err := r.SnapshotVersion() c.Assert(err, IsNil) c.Assert(snapshotVersion, Equals, int64(2)) timestampVersion, err := r.TimestampVersion() c.Assert(err, IsNil) c.Assert(timestampVersion, Equals, int64(2)) } func (rs *RepoSuite) TestAddOrUpdateSignatures(c *C) { files := map[string][]byte{"foo.txt": []byte("foo")} local := MemoryStore(make(map[string]json.RawMessage), files) r, err := NewRepo(local) c.Assert(err, IsNil) // don't use consistent snapshots to make the checks simpler c.Assert(r.Init(false), IsNil) // generate root key offline and add as a verification key rootKey, err := keys.GenerateEd25519Key() c.Assert(err, IsNil) c.Assert(r.AddVerificationKey("root", rootKey.PublicData()), IsNil) targetsKey, err := keys.GenerateEd25519Key() c.Assert(err, IsNil) c.Assert(r.AddVerificationKey("targets", targetsKey.PublicData()), IsNil) snapshotKey, err := keys.GenerateEd25519Key() c.Assert(err, IsNil) c.Assert(r.AddVerificationKey("snapshot", snapshotKey.PublicData()), IsNil) timestampKey, err := keys.GenerateEd25519Key() c.Assert(err, IsNil) c.Assert(r.AddVerificationKey("timestamp", timestampKey.PublicData()), IsNil) // generate signatures externally and append rootMeta, err := r.SignedMeta("root.json") c.Assert(err, IsNil) rootCanonical, err := cjson.EncodeCanonical(rootMeta.Signed) c.Assert(err, IsNil) rootSig, err := rootKey.SignMessage(rootCanonical) c.Assert(err, IsNil) for _, id := range rootKey.PublicData().IDs() { c.Assert(r.AddOrUpdateSignature("root.json", data.Signature{ KeyID: id, Signature: rootSig}), IsNil) } // add targets and sign c.Assert(r.AddTarget("foo.txt", nil), IsNil) targetsMeta, err := r.SignedMeta("targets.json") c.Assert(err, IsNil) targetsCanonical, err := cjson.EncodeCanonical(targetsMeta.Signed) c.Assert(err, IsNil) targetsSig, err := targetsKey.SignMessage(targetsCanonical) c.Assert(err, IsNil) for _, id := range targetsKey.PublicData().IDs() { r.AddOrUpdateSignature("targets.json", data.Signature{ KeyID: id, Signature: targetsSig}) } // snapshot and timestamp c.Assert(r.Snapshot(), IsNil) snapshotMeta, err := r.SignedMeta("snapshot.json") c.Assert(err, IsNil) snapshotCanonical, err := cjson.EncodeCanonical(snapshotMeta.Signed) c.Assert(err, IsNil) snapshotSig, err := snapshotKey.SignMessage(snapshotCanonical) c.Assert(err, IsNil) for _, id := range snapshotKey.PublicData().IDs() { r.AddOrUpdateSignature("snapshot.json", data.Signature{ KeyID: id, Signature: snapshotSig}) } c.Assert(r.Timestamp(), IsNil) timestampMeta, err := r.SignedMeta("timestamp.json") c.Assert(err, IsNil) timestampCanonical, err := cjson.EncodeCanonical(timestampMeta.Signed) c.Assert(err, IsNil) timestampSig, err := timestampKey.SignMessage(timestampCanonical) c.Assert(err, IsNil) for _, id := range timestampKey.PublicData().IDs() { r.AddOrUpdateSignature("timestamp.json", data.Signature{ KeyID: id, Signature: timestampSig}) } // commit successfully! c.Assert(r.Commit(), IsNil) } func (rs *RepoSuite) TestBadAddOrUpdateSignatures(c *C) { files := map[string][]byte{"foo.txt": []byte("foo")} local := MemoryStore(make(map[string]json.RawMessage), files) r, err := NewRepo(local) c.Assert(err, IsNil) // don't use consistent snapshots to make the checks simpler c.Assert(r.Init(false), IsNil) c.Assert(r.AddOrUpdateSignature("targets.json", data.Signature{ KeyID: "foo", Signature: nil}), Equals, ErrInvalidRole{"targets", "role is not in verifier DB"}) // generate root key offline and add as a verification key rootKey, err := keys.GenerateEd25519Key() c.Assert(err, IsNil) c.Assert(r.AddVerificationKey("root", rootKey.PublicData()), IsNil) targetsKey, err := keys.GenerateEd25519Key() c.Assert(err, IsNil) c.Assert(r.AddVerificationKey("targets", targetsKey.PublicData()), IsNil) snapshotKey, err := keys.GenerateEd25519Key() c.Assert(err, IsNil) c.Assert(r.AddVerificationKey("snapshot", snapshotKey.PublicData()), IsNil) timestampKey, err := keys.GenerateEd25519Key() c.Assert(err, IsNil) c.Assert(r.AddVerificationKey("timestamp", timestampKey.PublicData()), IsNil) // attempt to sign `root`, rather than `root.json` for _, id := range rootKey.PublicData().IDs() { c.Assert(r.AddOrUpdateSignature("root", data.Signature{ KeyID: id, Signature: nil}), Equals, ErrMissingMetadata{"root"}) } // add a signature with a bad role rootMeta, err := r.SignedMeta("root.json") c.Assert(err, IsNil) rootCanonical, err := cjson.EncodeCanonical(rootMeta.Signed) c.Assert(err, IsNil) rootSig, err := rootKey.Sign(rand.Reader, rootCanonical, crypto.Hash(0)) c.Assert(err, IsNil) for _, id := range rootKey.PublicData().IDs() { c.Assert(r.AddOrUpdateSignature("invalid_root.json", data.Signature{ KeyID: id, Signature: rootSig}), Equals, ErrInvalidRole{"invalid_root", "no trusted keys for role"}) } // add a root signature with an key ID that is for the targets role for _, id := range targetsKey.PublicData().IDs() { c.Assert(r.AddOrUpdateSignature("root.json", data.Signature{ KeyID: id, Signature: rootSig}), Equals, verify.ErrInvalidKey) } // attempt to add a bad signature to root badSig, err := rootKey.Sign(rand.Reader, []byte(""), crypto.Hash(0)) c.Assert(err, IsNil) for _, id := range rootKey.PublicData().IDs() { c.Assert(r.AddOrUpdateSignature("root.json", data.Signature{ KeyID: id, Signature: badSig}), Equals, verify.ErrInvalid) } // add the correct root signature for _, id := range rootKey.PublicData().IDs() { c.Assert(r.AddOrUpdateSignature("root.json", data.Signature{ KeyID: id, Signature: rootSig}), IsNil) } checkSigIDs := func(role string) { s, err := r.SignedMeta(role) c.Assert(err, IsNil) db, err := r.topLevelKeysDB() c.Assert(err, IsNil) // keys is a map of key IDs. keys := db.GetRole(strings.TrimSuffix(role, ".json")).KeyIDs c.Assert(s.Signatures, HasLen, len(keys)) // If the lengths are equal, and each signature key ID appears // in the role keys, they Sig IDs are equal to keyIDs. for _, sig := range s.Signatures { if _, ok := keys[sig.KeyID]; !ok { c.Fatal("missing key ID in signatures") } } } checkSigIDs("root.json") // re-adding should not duplicate. this is checked by verifying // signature key IDs match with the map of role key IDs. for _, id := range rootKey.PublicData().IDs() { c.Assert(r.AddOrUpdateSignature("root.json", data.Signature{ KeyID: id, Signature: rootSig}), IsNil) } checkSigIDs("root.json") } func (rs *RepoSuite) TestSignDigest(c *C) { files := map[string][]byte{"foo.txt": []byte("foo")} local := MemoryStore(make(map[string]json.RawMessage), files) r, err := NewRepo(local) c.Assert(err, IsNil) genKey(c, r, "root") genKey(c, r, "targets") genKey(c, r, "snapshot") genKey(c, r, "timestamp") digest := "sha256:bc11b176a293bb341a0f2d0d226f52e7fcebd186a7c4dfca5fc64f305f06b94c" hash := "bc11b176a293bb341a0f2d0d226f52e7fcebd186a7c4dfca5fc64f305f06b94c" size := int64(42) c.Assert(r.AddTargetsWithDigest(hash, "sha256", size, digest, nil), IsNil) c.Assert(r.Snapshot(), IsNil) c.Assert(r.Timestamp(), IsNil) c.Assert(r.Commit(), IsNil) digest_bytes, err := hex.DecodeString("bc11b176a293bb341a0f2d0d226f52e7fcebd186a7c4dfca5fc64f305f06b94c") hex_digest_bytes := data.HexBytes(digest_bytes) c.Assert(err, IsNil) targets, err := r.topLevelTargets() c.Assert(err, IsNil) c.Assert(targets.Targets["sha256:bc11b176a293bb341a0f2d0d226f52e7fcebd186a7c4dfca5fc64f305f06b94c"].FileMeta.Length, Equals, size) c.Assert(targets.Targets["sha256:bc11b176a293bb341a0f2d0d226f52e7fcebd186a7c4dfca5fc64f305f06b94c"].FileMeta.Hashes["sha256"], DeepEquals, hex_digest_bytes) } func concat(ss ...[]string) []string { ret := []string{} for _, s := range ss { ret = append(ret, s...) } return ret } func checkSigKeyIDs(c *C, local LocalStore, fileToKeyIDs map[string][]string) { metas, err := local.GetMeta() c.Assert(err, IsNil) for f, keyIDs := range fileToKeyIDs { meta, ok := metas[f] c.Assert(ok, Equals, true, Commentf("meta file: %v", f)) s := &data.Signed{} err = json.Unmarshal(meta, s) c.Assert(err, IsNil) gotKeyIDs := []string{} for _, sig := range s.Signatures { gotKeyIDs = append(gotKeyIDs, sig.KeyID) } gotKeyIDs = sets.DeduplicateStrings(gotKeyIDs) sort.Strings(gotKeyIDs) sort.Strings(keyIDs) c.Assert(gotKeyIDs, DeepEquals, keyIDs) } } func (rs *RepoSuite) TestDelegations(c *C) { tmp := newTmpDir(c) local := FileSystemStore(tmp.path, nil) r, err := NewRepo(local) c.Assert(err, IsNil) // Add one key to each role genKey(c, r, "root") targetsKeyIDs := genKey(c, r, "targets") genKey(c, r, "snapshot") genKey(c, r, "timestamp") // commit the metadata to the store. c.Assert(r.AddTargets([]string{}, nil), IsNil) c.Assert(r.Snapshot(), IsNil) c.Assert(r.Timestamp(), IsNil) c.Assert(r.Commit(), IsNil) snapshot, err := r.snapshot() c.Assert(err, IsNil) c.Assert(snapshot.Meta, HasLen, 1) c.Assert(snapshot.Meta["targets.json"].Version, Equals, int64(1)) checkSigKeyIDs(c, local, map[string][]string{ "1.targets.json": targetsKeyIDs, }) saveNewKey := func(role string) keys.Signer { key, err := keys.GenerateEd25519Key() c.Assert(err, IsNil) err = local.SaveSigner(role, key) c.Assert(err, IsNil) return key } // Delegate from targets -> role1 for A/*, B/* with one key, threshold 1. role1ABKey := saveNewKey("role1") role1AB := data.DelegatedRole{ Name: "role1", KeyIDs: role1ABKey.PublicData().IDs(), Paths: []string{"A/*", "B/*"}, Threshold: 1, } err = r.AddDelegatedRole("targets", role1AB, []*data.PublicKey{ role1ABKey.PublicData(), }) c.Assert(err, IsNil) // Adding duplicate delegation should return an error. err = r.AddDelegatedRole("targets", role1AB, []*data.PublicKey{ role1ABKey.PublicData(), }) c.Assert(err, NotNil) // Delegate from targets -> role2 for C/*, D/* with three key, threshold 2. role2CDKey1 := saveNewKey("role2") role2CDKey2 := saveNewKey("role2") role2CDKey3 := saveNewKey("role2") role2CD := data.DelegatedRole{ Name: "role2", KeyIDs: concat( role2CDKey1.PublicData().IDs(), role2CDKey2.PublicData().IDs(), role2CDKey3.PublicData().IDs(), ), Paths: []string{"C/*", "D/*"}, Threshold: 2, } err = r.AddDelegatedRole("targets", role2CD, []*data.PublicKey{ role2CDKey1.PublicData(), role2CDKey2.PublicData(), role2CDKey3.PublicData(), }) c.Assert(err, IsNil) // Delegate from role1 -> role2 for A/allium.txt with one key, threshold 1. role1To2Key := saveNewKey("role2") role1To2 := data.DelegatedRole{ Name: "role2", KeyIDs: role1To2Key.PublicData().IDs(), Paths: []string{"A/allium.txt"}, Threshold: 1, Terminating: true, } err = r.AddDelegatedRole("role1", role1To2, []*data.PublicKey{ role1To2Key.PublicData(), }) c.Assert(err, IsNil) checkDelegations := func(delegator string, delegatedRoles ...data.DelegatedRole) { t, err := r.targets(delegator) c.Assert(err, IsNil) // Check if there are no delegations. if t.Delegations == nil { if delegatedRoles != nil { c.Fatal("expected delegated roles on delegator") } return } // Check that delegated roles are copied verbatim. c.Assert(t.Delegations.Roles, DeepEquals, delegatedRoles) // Check that public keys match key IDs in roles. expectedKeyIDs := []string{} for _, dr := range delegatedRoles { expectedKeyIDs = append(expectedKeyIDs, dr.KeyIDs...) } expectedKeyIDs = sets.DeduplicateStrings(expectedKeyIDs) sort.Strings(expectedKeyIDs) gotKeyIDs := []string{} for _, k := range t.Delegations.Keys { gotKeyIDs = append(gotKeyIDs, k.IDs()...) } gotKeyIDs = sets.DeduplicateStrings(gotKeyIDs) sort.Strings(gotKeyIDs) c.Assert(gotKeyIDs, DeepEquals, expectedKeyIDs) } checkDelegations("targets", role1AB, role2CD) checkDelegations("role1", role1To2) c.Assert(r.Snapshot(), IsNil) c.Assert(r.Timestamp(), IsNil) c.Assert(r.Commit(), IsNil) snapshot, err = r.snapshot() c.Assert(err, IsNil) c.Assert(snapshot.Meta, HasLen, 3) c.Assert(snapshot.Meta["targets.json"].Version, Equals, int64(2)) c.Assert(snapshot.Meta["role1.json"].Version, Equals, int64(1)) c.Assert(snapshot.Meta["role2.json"].Version, Equals, int64(1)) checkSigKeyIDs(c, local, map[string][]string{ "2.targets.json": targetsKeyIDs, "1.role1.json": role1ABKey.PublicData().IDs(), "1.role2.json": concat( role2CDKey1.PublicData().IDs(), role2CDKey2.PublicData().IDs(), role2CDKey3.PublicData().IDs(), role1To2Key.PublicData().IDs(), ), }) // Add a variety of targets. files := map[string]string{ // targets.json "potato.txt": "potatoes can be starchy or waxy", // role1.json "A/apple.txt": "apples are sometimes red", "B/banana.txt": "bananas are yellow and sometimes brown", // role2.json "C/clementine.txt": "clementines are a citrus fruit", "D/durian.txt": "durians are spiky", "A/allium.txt": "alliums include garlic and leeks", } for name, content := range files { tmp.writeStagedTarget(name, content) c.Assert(r.AddTarget(name, nil), IsNil) } c.Assert(r.Snapshot(), IsNil) c.Assert(r.Timestamp(), IsNil) c.Assert(r.Commit(), IsNil) snapshot, err = r.snapshot() c.Assert(err, IsNil) c.Assert(snapshot.Meta, HasLen, 3) // All roles should have new targets. c.Assert(snapshot.Meta["targets.json"].Version, Equals, int64(3)) c.Assert(snapshot.Meta["role1.json"].Version, Equals, int64(2)) c.Assert(snapshot.Meta["role2.json"].Version, Equals, int64(2)) checkSigKeyIDs(c, local, map[string][]string{ "3.targets.json": targetsKeyIDs, "2.role1.json": role1ABKey.PublicData().IDs(), "2.role2.json": concat( role2CDKey1.PublicData().IDs(), role2CDKey2.PublicData().IDs(), role2CDKey3.PublicData().IDs(), role1To2Key.PublicData().IDs(), ), }) // Check that the given targets role has signed for the given filenames, with // the correct file metadata. checkTargets := func(role string, filenames ...string) { t, err := r.targets(role) c.Assert(err, IsNil) c.Assert(t.Targets, HasLen, len(filenames)) for _, fn := range filenames { content := files[fn] fm, err := util.GenerateTargetFileMeta(strings.NewReader(content)) c.Assert(err, IsNil) c.Assert(util.TargetFileMetaEqual(t.Targets[fn], fm), IsNil) } } checkTargets("targets", "potato.txt") checkTargets("role1", "A/apple.txt", "B/banana.txt") checkTargets("role2", "C/clementine.txt", "D/durian.txt", "A/allium.txt") // Test AddTargetToPreferredRole. // role2 is the default signer for A/allium.txt, but role1 is also eligible // for A/*.txt according to the delegation from the top-level targets role. c.Assert(r.RemoveTarget("A/allium.txt"), IsNil) tmp.writeStagedTarget("A/allium.txt", files["A/allium.txt"]) c.Assert(r.AddTargetToPreferredRole("A/allium.txt", nil, "role1"), IsNil) c.Assert(r.Snapshot(), IsNil) c.Assert(r.Timestamp(), IsNil) c.Assert(r.Commit(), IsNil) snapshot, err = r.snapshot() c.Assert(err, IsNil) c.Assert(snapshot.Meta, HasLen, 3) // Only role1 and role2 should have bumped versions. c.Assert(snapshot.Meta["targets.json"].Version, Equals, int64(3)) c.Assert(snapshot.Meta["role1.json"].Version, Equals, int64(3)) c.Assert(snapshot.Meta["role2.json"].Version, Equals, int64(3)) checkSigKeyIDs(c, local, map[string][]string{ "3.targets.json": targetsKeyIDs, "3.role1.json": role1ABKey.PublicData().IDs(), "3.role2.json": concat( role2CDKey1.PublicData().IDs(), role2CDKey2.PublicData().IDs(), role2CDKey3.PublicData().IDs(), role1To2Key.PublicData().IDs(), ), }) // role1 now signs A/allium.txt. checkTargets("targets", "potato.txt") checkTargets("role1", "A/apple.txt", "B/banana.txt", "A/allium.txt") checkTargets("role2", "C/clementine.txt", "D/durian.txt") // Remove the delegation from role1 to role2. c.Assert(r.ResetTargetsDelegations("role1"), IsNil) checkDelegations("targets", role1AB, role2CD) checkDelegations("role1") // Try to sign A/allium.txt with role2. // It should fail since we removed the role1 -> role2 delegation. c.Assert(r.RemoveTarget("A/allium.txt"), IsNil) tmp.writeStagedTarget("A/allium.txt", files["A/allium.txt"]) c.Assert(r.AddTargetToPreferredRole("A/allium.txt", nil, "role2"), Equals, ErrNoDelegatedTarget{Path: "A/allium.txt"}) // Try to sign A/allium.txt with the default role (role1). c.Assert(r.AddTarget("A/allium.txt", nil), IsNil) c.Assert(r.Snapshot(), IsNil) c.Assert(r.Timestamp(), IsNil) c.Assert(r.Commit(), IsNil) snapshot, err = r.snapshot() c.Assert(err, IsNil) c.Assert(snapshot.Meta, HasLen, 3) // Only role1 should have a bumped version. c.Assert(snapshot.Meta["targets.json"].Version, Equals, int64(3)) c.Assert(snapshot.Meta["role1.json"].Version, Equals, int64(4)) c.Assert(snapshot.Meta["role2.json"].Version, Equals, int64(3)) checkSigKeyIDs(c, local, map[string][]string{ "3.targets.json": targetsKeyIDs, "4.role1.json": role1ABKey.PublicData().IDs(), "3.role2.json": concat( // Metadata (and therefore signers) for role2.json shouldn't have // changed, even though we revoked role1To2Key. Clients verify the // signature using keys specified by 4.role1.json, so role1To2Key // shouldn't contribute to the threshold. role2CDKey1.PublicData().IDs(), role2CDKey2.PublicData().IDs(), role2CDKey3.PublicData().IDs(), role1To2Key.PublicData().IDs(), ), }) // Re-sign target signed by role2 to test that role1To2Key is not used going // forward. c.Assert(r.RemoveTarget("C/clementine.txt"), IsNil) tmp.writeStagedTarget("C/clementine.txt", files["C/clementine.txt"]) c.Assert(r.AddTarget("C/clementine.txt", nil), IsNil) c.Assert(r.Snapshot(), IsNil) c.Assert(r.Timestamp(), IsNil) c.Assert(r.Commit(), IsNil) snapshot, err = r.snapshot() c.Assert(err, IsNil) c.Assert(snapshot.Meta, HasLen, 3) // Only role2 should have a bumped version. c.Assert(snapshot.Meta["targets.json"].Version, Equals, int64(3)) c.Assert(snapshot.Meta["role1.json"].Version, Equals, int64(4)) c.Assert(snapshot.Meta["role2.json"].Version, Equals, int64(4)) checkSigKeyIDs(c, local, map[string][]string{ "3.targets.json": targetsKeyIDs, "4.role1.json": role1ABKey.PublicData().IDs(), "4.role2.json": concat( role2CDKey1.PublicData().IDs(), role2CDKey2.PublicData().IDs(), role2CDKey3.PublicData().IDs(), // Note that role1To2Key no longer signs since the role1 -> role2 // delegation was removed. ), }) // Targets should still be signed by the same roles. checkTargets("targets", "potato.txt") checkTargets("role1", "A/apple.txt", "B/banana.txt", "A/allium.txt") checkTargets("role2", "C/clementine.txt", "D/durian.txt") // Add back the role1 -> role2 delegation, and verify that it doesn't change // existing targets in role2.json. err = r.AddDelegatedRole("role1", role1To2, []*data.PublicKey{ role1To2Key.PublicData(), }) c.Assert(err, IsNil) c.Assert(r.Snapshot(), IsNil) c.Assert(r.Timestamp(), IsNil) c.Assert(r.Commit(), IsNil) snapshot, err = r.snapshot() c.Assert(err, IsNil) c.Assert(snapshot.Meta, HasLen, 3) // Both role1 and role2 should have a bumped version. // role1 is bumped because the delegations changed. // role2 is only bumped because its expiration is bumped. c.Assert(snapshot.Meta["targets.json"].Version, Equals, int64(3)) c.Assert(snapshot.Meta["role1.json"].Version, Equals, int64(5)) c.Assert(snapshot.Meta["role2.json"].Version, Equals, int64(5)) checkTargets("targets", "potato.txt") checkTargets("role1", "A/apple.txt", "B/banana.txt", "A/allium.txt") checkTargets("role2", "C/clementine.txt", "D/durian.txt") } func (rs *RepoSuite) TestHashBinDelegations(c *C) { tmp := newTmpDir(c) local := FileSystemStore(tmp.path, nil) r, err := NewRepo(local) c.Assert(err, IsNil) // Add one key to each role genKey(c, r, "root") targetsKeyIDs := genKey(c, r, "targets") genKey(c, r, "snapshot") genKey(c, r, "timestamp") hb, err := targets.NewHashBins("bins_", 3) if err != nil { c.Assert(err, IsNil) } // Generate key for the intermediate bins role. binsKey, err := keys.GenerateEd25519Key() c.Assert(err, IsNil) err = local.SaveSigner("bins", binsKey) c.Assert(err, IsNil) // Generate key for the leaf bins role. leafKey, err := keys.GenerateEd25519Key() c.Assert(err, IsNil) for i := uint64(0); i < hb.NumBins(); i++ { b := hb.GetBin(i) err = local.SaveSigner(b.RoleName(), leafKey) if err != nil { c.Assert(err, IsNil) } } err = r.AddDelegatedRole("targets", data.DelegatedRole{ Name: "bins", KeyIDs: binsKey.PublicData().IDs(), Paths: []string{"*.txt"}, Threshold: 1, }, []*data.PublicKey{ binsKey.PublicData(), }) c.Assert(err, IsNil) err = r.AddDelegatedRolesForPathHashBins("bins", hb, []*data.PublicKey{leafKey.PublicData()}, 1) c.Assert(err, IsNil) targets, err := r.targets("bins") c.Assert(err, IsNil) c.Assert(targets.Delegations.Roles, HasLen, 8) c.Assert(r.Snapshot(), IsNil) c.Assert(r.Timestamp(), IsNil) c.Assert(r.Commit(), IsNil) tmp.writeStagedTarget("foo.txt", "foo") err = r.AddTarget("foo.txt", nil) c.Assert(err, IsNil) c.Assert(r.Snapshot(), IsNil) c.Assert(r.Timestamp(), IsNil) c.Assert(r.Commit(), IsNil) snapshot, err := r.snapshot() c.Assert(err, IsNil) // 1 targets.json, 1 bins.json, 8 bins_*.json. c.Assert(snapshot.Meta, HasLen, 10) c.Assert(snapshot.Meta["targets.json"].Version, Equals, int64(1)) c.Assert(snapshot.Meta["bins.json"].Version, Equals, int64(1)) c.Assert(snapshot.Meta["bins_0-1.json"].Version, Equals, int64(1)) c.Assert(snapshot.Meta["bins_2-3.json"].Version, Equals, int64(1)) c.Assert(snapshot.Meta["bins_4-5.json"].Version, Equals, int64(1)) c.Assert(snapshot.Meta["bins_6-7.json"].Version, Equals, int64(1)) c.Assert(snapshot.Meta["bins_8-9.json"].Version, Equals, int64(1)) c.Assert(snapshot.Meta["bins_a-b.json"].Version, Equals, int64(1)) c.Assert(snapshot.Meta["bins_c-d.json"].Version, Equals, int64(2)) c.Assert(snapshot.Meta["bins_e-f.json"].Version, Equals, int64(1)) targets, err = r.targets("bins_c-d") c.Assert(err, IsNil) c.Assert(targets.Targets, HasLen, 1) checkSigKeyIDs(c, local, map[string][]string{ "targets.json": targetsKeyIDs, "1.bins.json": binsKey.PublicData().IDs(), "1.bins_0-1.json": leafKey.PublicData().IDs(), "1.bins_2-3.json": leafKey.PublicData().IDs(), "1.bins_4-5.json": leafKey.PublicData().IDs(), "1.bins_6-7.json": leafKey.PublicData().IDs(), "1.bins_8-9.json": leafKey.PublicData().IDs(), "1.bins_a-b.json": leafKey.PublicData().IDs(), "1.bins_c-d.json": leafKey.PublicData().IDs(), "2.bins_c-d.json": leafKey.PublicData().IDs(), "1.bins_e-f.json": leafKey.PublicData().IDs(), }) } func (rs *RepoSuite) TestResetTargetsDelegationsWithExpires(c *C) { tmp := newTmpDir(c) local := FileSystemStore(tmp.path, nil) r, err := NewRepo(local) c.Assert(err, IsNil) // Add one key to each role genKey(c, r, "root") targetsKeyIDs := genKey(c, r, "targets") genKey(c, r, "snapshot") genKey(c, r, "timestamp") // commit the metadata to the store. c.Assert(r.AddTargets([]string{}, nil), IsNil) c.Assert(r.Snapshot(), IsNil) c.Assert(r.Timestamp(), IsNil) c.Assert(r.Commit(), IsNil) snapshot, err := r.snapshot() c.Assert(err, IsNil) c.Assert(snapshot.Meta, HasLen, 1) c.Assert(snapshot.Meta["targets.json"].Version, Equals, int64(1)) checkSigKeyIDs(c, local, map[string][]string{ "1.targets.json": targetsKeyIDs, }) role1Key, err := keys.GenerateEd25519Key() c.Assert(err, IsNil) err = local.SaveSigner("role1", role1Key) c.Assert(err, IsNil) // Delegate from targets -> role1 for A/*, B/* with one key, threshold 1. role1 := data.DelegatedRole{ Name: "role1", KeyIDs: role1Key.PublicData().IDs(), Paths: []string{"A/*", "B/*"}, Threshold: 1, } err = r.AddDelegatedRole("targets", role1, []*data.PublicKey{ role1Key.PublicData(), }) c.Assert(err, IsNil) c.Assert(r.Snapshot(), IsNil) c.Assert(r.Timestamp(), IsNil) c.Assert(r.Commit(), IsNil) snapshot, err = r.snapshot() c.Assert(err, IsNil) c.Assert(snapshot.Meta, HasLen, 2) c.Assert(snapshot.Meta["targets.json"].Version, Equals, int64(2)) c.Assert(snapshot.Meta["role1.json"].Version, Equals, int64(1)) checkSigKeyIDs(c, local, map[string][]string{ "1.targets.json": targetsKeyIDs, "targets.json": targetsKeyIDs, "1.role1.json": role1Key.PublicData().IDs(), "role1.json": role1Key.PublicData().IDs(), }) c.Assert(r.ResetTargetsDelegations("targets"), IsNil) c.Assert(r.Snapshot(), IsNil) c.Assert(r.Timestamp(), IsNil) c.Assert(r.Commit(), IsNil) snapshot, err = r.snapshot() c.Assert(err, IsNil) c.Assert(snapshot.Meta, HasLen, 2) c.Assert(snapshot.Meta["targets.json"].Version, Equals, int64(3)) c.Assert(snapshot.Meta["role1.json"].Version, Equals, int64(1)) checkSigKeyIDs(c, local, map[string][]string{ "2.targets.json": targetsKeyIDs, "targets.json": targetsKeyIDs, "1.role1.json": role1Key.PublicData().IDs(), "role1.json": role1Key.PublicData().IDs(), }) } func (rs *RepoSuite) TestSignWithDelegations(c *C) { tmp := newTmpDir(c) local := FileSystemStore(tmp.path, nil) r, err := NewRepo(local) c.Assert(err, IsNil) // Add one key to each role genKey(c, r, "root") genKey(c, r, "targets") genKey(c, r, "snapshot") genKey(c, r, "timestamp") role1Key, err := keys.GenerateEd25519Key() c.Assert(err, IsNil) role1 := data.DelegatedRole{ Name: "role1", KeyIDs: role1Key.PublicData().IDs(), Paths: []string{"A/*", "B/*"}, Threshold: 1, } err = r.AddDelegatedRole("targets", role1, []*data.PublicKey{ role1Key.PublicData(), }) c.Assert(err, IsNil) // targets.json should be signed, but role1.json is not signed because there // is no key in the local store. m, err := local.GetMeta() c.Assert(err, IsNil) targetsMeta := &data.Signed{} c.Assert(json.Unmarshal(m["targets.json"], targetsMeta), IsNil) c.Assert(len(targetsMeta.Signatures), Equals, 1) role1Meta := &data.Signed{} c.Assert(json.Unmarshal(m["role1.json"], role1Meta), IsNil) c.Assert(len(role1Meta.Signatures), Equals, 0) c.Assert(r.Snapshot(), DeepEquals, ErrInsufficientSignatures{"role1.json", verify.ErrNoSignatures}) // Sign role1.json. c.Assert(local.SaveSigner("role1", role1Key), IsNil) c.Assert(r.Sign("role1.json"), IsNil) m, err = local.GetMeta() c.Assert(err, IsNil) targetsMeta = &data.Signed{} c.Assert(json.Unmarshal(m["targets.json"], targetsMeta), IsNil) c.Assert(len(targetsMeta.Signatures), Equals, 1) role1Meta = &data.Signed{} c.Assert(json.Unmarshal(m["role1.json"], role1Meta), IsNil) c.Assert(len(role1Meta.Signatures), Equals, 1) c.Assert(r.Snapshot(), IsNil) c.Assert(r.Timestamp(), IsNil) c.Assert(r.Commit(), IsNil) } func (rs *RepoSuite) TestAddOrUpdateSignatureWithDelegations(c *C) { tmp := newTmpDir(c) local := FileSystemStore(tmp.path, nil) r, err := NewRepo(local) c.Assert(err, IsNil) // Add one key to each role genKey(c, r, "root") genKey(c, r, "targets") genKey(c, r, "snapshot") genKey(c, r, "timestamp") role1Key, err := keys.GenerateEd25519Key() c.Assert(err, IsNil) role1 := data.DelegatedRole{ Name: "role1", KeyIDs: role1Key.PublicData().IDs(), Paths: []string{"A/*", "B/*"}, Threshold: 1, } err = r.AddDelegatedRole("targets", role1, []*data.PublicKey{ role1Key.PublicData(), }) c.Assert(err, IsNil) // targets.json should be signed, but role1.json is not signed because there // is no key in the local store. m, err := local.GetMeta() c.Assert(err, IsNil) targetsMeta := &data.Signed{} c.Assert(json.Unmarshal(m["targets.json"], targetsMeta), IsNil) c.Assert(len(targetsMeta.Signatures), Equals, 1) role1Meta := &data.Signed{} c.Assert(json.Unmarshal(m["role1.json"], role1Meta), IsNil) c.Assert(len(role1Meta.Signatures), Equals, 0) c.Assert(r.Snapshot(), DeepEquals, ErrInsufficientSignatures{"role1.json", verify.ErrNoSignatures}) // Sign role1.json. canonical, err := cjson.EncodeCanonical(role1Meta.Signed) c.Assert(err, IsNil) sig, err := role1Key.SignMessage(canonical) c.Assert(err, IsNil) err = r.AddOrUpdateSignature("role1.json", data.Signature{ KeyID: role1Key.PublicData().IDs()[0], Signature: sig, }) c.Assert(err, IsNil) m, err = local.GetMeta() c.Assert(err, IsNil) targetsMeta = &data.Signed{} c.Assert(json.Unmarshal(m["targets.json"], targetsMeta), IsNil) c.Assert(len(targetsMeta.Signatures), Equals, 1) role1Meta = &data.Signed{} c.Assert(json.Unmarshal(m["role1.json"], role1Meta), IsNil) c.Assert(len(role1Meta.Signatures), Equals, 1) c.Assert(r.Snapshot(), IsNil) c.Assert(r.Timestamp(), IsNil) c.Assert(r.Commit(), IsNil) } // Test the offline signature flow: Payload -> SignPayload -> AddSignature func (rs *RepoSuite) TestOfflineFlow(c *C) { // Set up repo. meta := make(map[string]json.RawMessage) local := MemoryStore(meta, nil) r, err := NewRepo(local) c.Assert(err, IsNil) c.Assert(r.Init(false), IsNil) // Use ECDSA because it has a newline which is a difference between JSON and cJSON. _, err = r.GenKeyWithSchemeAndExpires("root", data.DefaultExpires("root"), data.KeySchemeECDSA_SHA2_P256) c.Assert(err, IsNil) // Get the payload to sign _, err = r.Payload("badrole.json") c.Assert(err, Equals, ErrMissingMetadata{"badrole.json"}) _, err = r.Payload("root") c.Assert(err, Equals, ErrMissingMetadata{"root"}) payload, err := r.Payload("root.json") c.Assert(err, IsNil) root, err := r.SignedMeta("root.json") c.Assert(err, IsNil) rootCanonical, err := cjson.EncodeCanonical(root.Signed) c.Assert(err, IsNil) if !bytes.Equal(payload, rootCanonical) { c.Fatalf("Payload(): not canonical.\n%s\n%s", string(payload), string(rootCanonical)) } // Sign the payload _, err = r.SignRaw("targets", payload) c.Assert(err, Equals, ErrNoKeys{"targets"}) signatures, err := r.SignRaw("root", payload) c.Assert(err, IsNil) c.Assert(len(signatures), Equals, 1) // Add the payload signatures back for _, sig := range signatures { // This method checks that the signature verifies! err = r.AddOrUpdateSignature("root.json", sig) c.Assert(err, IsNil) } } // Regression test: Snapshotting an invalid root should fail. func (rs *RepoSuite) TestSnapshotWithInvalidRoot(c *C) { files := map[string][]byte{"foo.txt": []byte("foo")} local := MemoryStore(make(map[string]json.RawMessage), files) r, err := NewRepo(local) c.Assert(err, IsNil) // Init should create targets.json, but not signed yet r.Init(false) genKey(c, r, "root") genKey(c, r, "targets") genKey(c, r, "snapshot") genKey(c, r, "timestamp") c.Assert(r.AddTarget("foo.txt", nil), IsNil) // Clear the root signature so that signature verification fails. s, err := r.SignedMeta("root.json") c.Assert(err, IsNil) c.Assert(s.Signatures, HasLen, 1) s.Signatures[0].Signature = data.HexBytes{} b, err := r.jsonMarshal(s) c.Assert(err, IsNil) r.meta["root.json"] = b local.SetMeta("root.json", b) // Snapshotting should fail. c.Assert(r.Snapshot(), Equals, ErrInsufficientSignatures{ "root.json", verify.ErrRoleThreshold{Expected: 1, Actual: 0}}) // Correctly sign root c.Assert(r.Sign("root.json"), IsNil) c.Assert(r.Snapshot(), IsNil) c.Assert(r.Timestamp(), IsNil) c.Assert(r.Commit(), IsNil) } // Regression test: Do not omit length in target metadata files. func (rs *RepoSuite) TestTargetMetadataLength(c *C) { files := map[string][]byte{"foo.txt": []byte("")} local := MemoryStore(make(map[string]json.RawMessage), files) r, err := NewRepo(local) c.Assert(err, IsNil) // Init should create targets.json, but not signed yet r.Init(false) genKey(c, r, "root") genKey(c, r, "targets") genKey(c, r, "snapshot") genKey(c, r, "timestamp") c.Assert(r.AddTarget("foo.txt", nil), IsNil) c.Assert(r.Snapshot(), IsNil) c.Assert(r.Timestamp(), IsNil) c.Assert(r.Commit(), IsNil) // Check length field of foo.txt exists. meta, err := local.GetMeta() c.Assert(err, IsNil) targetsJSON, ok := meta["targets.json"] if !ok { c.Fatal("missing targets metadata") } s := &data.Signed{} c.Assert(json.Unmarshal(targetsJSON, s), IsNil) fmt.Fprint(os.Stderr, s.Signed) var objMap map[string]json.RawMessage c.Assert(json.Unmarshal(s.Signed, &objMap), IsNil) targetsMap, ok := objMap["targets"] if !ok { c.Fatal("missing targets field in targets metadata") } c.Assert(json.Unmarshal(targetsMap, &objMap), IsNil) targetsMap, ok = objMap["foo.txt"] if !ok { c.Fatal("missing foo.txt in targets") } c.Assert(json.Unmarshal(targetsMap, &objMap), IsNil) lengthMsg, ok := objMap["length"] if !ok { c.Fatal("missing length field in foo.txt file meta") } var length int64 c.Assert(json.Unmarshal(lengthMsg, &length), IsNil) c.Assert(length, Equals, int64(0)) } func (rs *RepoSuite) TestDeprecatedHexEncodedKeysFails(c *C) { files := map[string][]byte{"foo.txt": []byte("foo")} local := MemoryStore(make(map[string]json.RawMessage), files) r, err := NewRepo(local) c.Assert(err, IsNil) r.Init(false) // Add a root key with hex-encoded ecdsa format signer, err := keys.GenerateEcdsaKey() c.Assert(err, IsNil) type deprecatedP256Verifier struct { PublicKey data.HexBytes `json:"public"` } pub := signer.PublicKey keyValBytes, err := json.Marshal(&deprecatedP256Verifier{PublicKey: elliptic.Marshal(pub.Curve, pub.X, pub.Y)}) c.Assert(err, IsNil) publicData := &data.PublicKey{ Type: data.KeyTypeECDSA_SHA2_P256, Scheme: data.KeySchemeECDSA_SHA2_P256, Algorithms: data.HashAlgorithms, Value: keyValBytes, } err = r.AddVerificationKey("root", publicData) c.Assert(err, IsNil) // TODO: AddVerificationKey does no validation, so perform a sign operation. c.Assert(r.Sign("root.json"), ErrorMatches, "tuf: error unmarshalling key: invalid PEM value") } requirements-test.txt000066400000000000000000000001201453140004500153040ustar00rootroot00000000000000iso8601==2.1.0 requests==2.31.0 securesystemslib==0.30.0 six==1.16.0 tuf==3.1.0 sign/000077500000000000000000000000001453140004500120125ustar00rootroot00000000000000sign/sign.go000066400000000000000000000035541453140004500133100ustar00rootroot00000000000000package sign import ( "encoding/json" "errors" "github.com/secure-systems-lab/go-securesystemslib/cjson" "github.com/theupdateframework/go-tuf/data" "github.com/theupdateframework/go-tuf/pkg/keys" ) const maxSignatures = 1024 // MakeSignatures creates data.Signatures for canonical using signer k. // // There will be one data.Signature for each of k's IDs, each wih the same // signature data. func MakeSignatures(canonical []byte, k keys.Signer) ([]data.Signature, error) { sigData, err := k.SignMessage(canonical) if err != nil { return nil, err } ids := k.PublicData().IDs() signatures := make([]data.Signature, 0, len(ids)) for _, id := range ids { signatures = append(signatures, data.Signature{ KeyID: id, Signature: sigData, }) } return signatures, nil } // Sign signs the to-be-signed part of s using the signer k. // // The new signature(s) (one for each of k's key IDs) are appended to // s.Signatures. Existing signatures for the Key IDs are replaced. func Sign(s *data.Signed, k keys.Signer) error { canonical, err := cjson.EncodeCanonical(s.Signed) if err != nil { return err } size := len(s.Signatures) if size > maxSignatures-1 { return errors.New("value too large") } signatures := make([]data.Signature, 0, size+1) for _, oldSig := range s.Signatures { if !k.PublicData().ContainsID(oldSig.KeyID) { signatures = append(signatures, oldSig) } } newSigs, err := MakeSignatures(canonical, k) if err != nil { return err } signatures = append(signatures, newSigs...) s.Signatures = signatures return nil } func Marshal(v interface{}, keys ...keys.Signer) (*data.Signed, error) { b, err := json.Marshal(v) if err != nil { return nil, err } s := &data.Signed{Signed: b, Signatures: make([]data.Signature, 0)} for _, k := range keys { if err := Sign(s, k); err != nil { return nil, err } } return s, nil } util/000077500000000000000000000000001453140004500120275ustar00rootroot00000000000000util/util.go000066400000000000000000000201221453140004500133300ustar00rootroot00000000000000package util import ( "bytes" "crypto/hmac" "crypto/sha256" "crypto/sha512" "encoding/hex" "encoding/json" "fmt" "hash" "io" "os" "path" "path/filepath" "strconv" "strings" "github.com/theupdateframework/go-tuf/data" ) type ErrWrongLength struct { Expected int64 Actual int64 } func (e ErrWrongLength) Error() string { return fmt.Sprintf("wrong length, expected %d got %d", e.Expected, e.Actual) } type ErrWrongVersion struct { Expected int64 Actual int64 } func (e ErrWrongVersion) Error() string { return fmt.Sprintf("wrong version, expected %d got %d", e.Expected, e.Actual) } type ErrWrongHash struct { Type string Expected data.HexBytes Actual data.HexBytes } func (e ErrWrongHash) Error() string { return fmt.Sprintf("wrong %s hash, expected %s got %s", e.Type, hex.EncodeToString(e.Expected), hex.EncodeToString(e.Actual)) } type ErrNoCommonHash struct { Expected data.Hashes Actual data.Hashes } func (e ErrNoCommonHash) Error() string { types := func(a data.Hashes) []string { t := make([]string, 0, len(a)) for typ := range a { t = append(t, typ) } return t } return fmt.Sprintf("no common hash function, expected one of %s, got %s", types(e.Expected), types(e.Actual)) } type ErrUnknownHashAlgorithm struct { Name string } func (e ErrUnknownHashAlgorithm) Error() string { return fmt.Sprintf("unknown hash algorithm: %s", e.Name) } type PassphraseFunc func(role string, confirm bool, change bool) ([]byte, error) func FileMetaEqual(actual data.FileMeta, expected data.FileMeta) error { if actual.Length != expected.Length { return ErrWrongLength{expected.Length, actual.Length} } if err := hashEqual(actual.Hashes, expected.Hashes); err != nil { return err } return nil } func BytesMatchLenAndHashes(fetched []byte, length int64, hashes data.Hashes) error { flen := int64(len(fetched)) if length != 0 && flen != length { return ErrWrongLength{length, flen} } for alg, expected := range hashes { var h hash.Hash switch alg { case "sha256": h = sha256.New() case "sha512": h = sha512.New() default: return ErrUnknownHashAlgorithm{alg} } h.Write(fetched) hash := h.Sum(nil) if !hmac.Equal(hash, expected) { return ErrWrongHash{alg, expected, hash} } } return nil } func hashEqual(actual data.Hashes, expected data.Hashes) error { hashChecked := false for typ, hash := range expected { if h, ok := actual[typ]; ok { hashChecked = true if !hmac.Equal(h, hash) { return ErrWrongHash{typ, hash, h} } } } if !hashChecked { return ErrNoCommonHash{expected, actual} } return nil } func VersionEqual(actual int64, expected int64) error { if actual != expected { return ErrWrongVersion{expected, actual} } return nil } func SnapshotFileMetaEqual(actual data.SnapshotFileMeta, expected data.SnapshotFileMeta) error { // TUF-1.0 no longer considers the length and hashes to be a required // member of snapshots. However they are considering requiring hashes // for delegated roles to avoid an attack described in Section 5.6 of // the Mercury paper: // https://github.com/theupdateframework/specification/pull/40 if expected.Length != 0 && actual.Length != expected.Length { return ErrWrongLength{expected.Length, actual.Length} } // 5.6.2 - Check against snapshot role's targets hash if len(expected.Hashes) != 0 { if err := hashEqual(actual.Hashes, expected.Hashes); err != nil { return err } } // 5.6.4 - Check against snapshot role's snapshot version if err := VersionEqual(actual.Version, expected.Version); err != nil { return err } return nil } func TargetFileMetaEqual(actual data.TargetFileMeta, expected data.TargetFileMeta) error { return FileMetaEqual(actual.FileMeta, expected.FileMeta) } func TimestampFileMetaEqual(actual data.TimestampFileMeta, expected data.TimestampFileMeta) error { // TUF no longer considers the length and hashes to be a required // member of Timestamp. if expected.Length != 0 && actual.Length != expected.Length { return ErrWrongLength{expected.Length, actual.Length} } // 5.5.2 - Check against timestamp role's snapshot hash if len(expected.Hashes) != 0 { if err := hashEqual(actual.Hashes, expected.Hashes); err != nil { return err } } // 5.5.4 - Check against timestamp role's snapshot version if err := VersionEqual(actual.Version, expected.Version); err != nil { return err } return nil } const defaultHashAlgorithm = "sha512" func GenerateFileMeta(r io.Reader, hashAlgorithms ...string) (data.FileMeta, error) { if len(hashAlgorithms) == 0 { hashAlgorithms = []string{defaultHashAlgorithm} } hashes := make(map[string]hash.Hash, len(hashAlgorithms)) for _, hashAlgorithm := range hashAlgorithms { var h hash.Hash switch hashAlgorithm { case "sha256": h = sha256.New() case "sha512": h = sha512.New() default: return data.FileMeta{}, ErrUnknownHashAlgorithm{hashAlgorithm} } hashes[hashAlgorithm] = h r = io.TeeReader(r, h) } n, err := io.Copy(io.Discard, r) if err != nil { return data.FileMeta{}, err } m := data.FileMeta{Length: n, Hashes: make(data.Hashes, len(hashes))} for hashAlgorithm, h := range hashes { m.Hashes[hashAlgorithm] = h.Sum(nil) } return m, nil } type versionedMeta struct { Version int64 `json:"version"` } func generateVersionedFileMeta(r io.Reader, hashAlgorithms ...string) (data.FileMeta, int64, error) { b, err := io.ReadAll(r) if err != nil { return data.FileMeta{}, 0, err } m, err := GenerateFileMeta(bytes.NewReader(b), hashAlgorithms...) if err != nil { return data.FileMeta{}, 0, err } s := data.Signed{} if err := json.Unmarshal(b, &s); err != nil { return data.FileMeta{}, 0, err } vm := versionedMeta{} if err := json.Unmarshal(s.Signed, &vm); err != nil { return data.FileMeta{}, 0, err } return m, vm.Version, nil } func GenerateSnapshotFileMeta(r io.Reader, hashAlgorithms ...string) (data.SnapshotFileMeta, error) { m, v, err := generateVersionedFileMeta(r, hashAlgorithms...) if err != nil { return data.SnapshotFileMeta{}, err } return data.SnapshotFileMeta{ Length: m.Length, Hashes: m.Hashes, Version: v, }, nil } func GenerateTargetFileMeta(r io.Reader, hashAlgorithms ...string) (data.TargetFileMeta, error) { m, err := GenerateFileMeta(r, hashAlgorithms...) if err != nil { return data.TargetFileMeta{}, err } return data.TargetFileMeta{ FileMeta: m, }, nil } func GenerateTimestampFileMeta(r io.Reader, hashAlgorithms ...string) (data.TimestampFileMeta, error) { m, v, err := generateVersionedFileMeta(r, hashAlgorithms...) if err != nil { return data.TimestampFileMeta{}, err } return data.TimestampFileMeta{ Length: m.Length, Hashes: m.Hashes, Version: v, }, nil } func NormalizeTarget(p string) string { // FIXME(TUF-0.9) TUF-1.0 is considering banning paths that begin with // a leading path separator, to avoid surprising behavior when joining // target and delgated paths. python-tuf raises an exception if any // path starts with '/', but since we need to be cross compatible with // TUF-0.9 we still need to support leading slashes. For now, we will // just strip them out, but eventually we should also consider turning // them into an error. return strings.TrimPrefix(path.Join("/", p), "/") } func VersionedPath(p string, version int64) string { return path.Join(path.Dir(p), strconv.FormatInt(version, 10)+"."+path.Base(p)) } func HashedPaths(p string, hashes data.Hashes) []string { paths := make([]string, 0, len(hashes)) for _, hash := range hashes { hashedPath := path.Join(path.Dir(p), hash.String()+"."+path.Base(p)) paths = append(paths, hashedPath) } return paths } func AtomicallyWriteFile(filename string, data []byte, perm os.FileMode) error { dir, name := filepath.Split(filename) f, err := os.CreateTemp(dir, name) if err != nil { return err } _, err = f.Write(data) if err != nil { f.Close() os.Remove(f.Name()) return err } if err = f.Chmod(perm); err != nil { f.Close() os.Remove(f.Name()) return err } if err := f.Close(); err != nil { os.Remove(f.Name()) return err } if err := os.Rename(f.Name(), filename); err != nil { os.Remove(f.Name()) return err } return nil } util/util_test.go000066400000000000000000000176201453140004500144000ustar00rootroot00000000000000package util import ( "bytes" "crypto/sha256" "crypto/sha512" "encoding/hex" "hash" "testing" "github.com/theupdateframework/go-tuf/data" . "gopkg.in/check.v1" ) // Hook up gocheck into the "go test" runner. func Test(t *testing.T) { TestingT(t) } type UtilSuite struct{} var _ = Suite(&UtilSuite{}) func (UtilSuite) TestGenerateTargetFileMetaDefault(c *C) { // default is sha512 r := bytes.NewReader([]byte("foo")) meta, err := GenerateTargetFileMeta(r) c.Assert(err, IsNil) c.Assert(meta.Length, Equals, int64(3)) hashes := meta.Hashes c.Assert(hashes, HasLen, 1) hash, ok := hashes["sha512"] if !ok { c.Fatal("missing sha512 hash") } c.Assert(hash.String(), DeepEquals, "f7fbba6e0636f890e56fbbf3283e524c6fa3204ae298382d624741d0dc6638326e282c41be5e4254d8820772c5518a2c5a8c0c7f7eda19594a7eb539453e1ed7") } func (UtilSuite) TestGenerateTargetFileMetaExplicit(c *C) { r := bytes.NewReader([]byte("foo")) meta, err := GenerateTargetFileMeta(r, "sha256", "sha512") c.Assert(err, IsNil) c.Assert(meta.Length, Equals, int64(3)) hashes := meta.Hashes c.Assert(hashes, HasLen, 2) for name, val := range map[string]string{ "sha256": "2c26b46b68ffc68ff99b453c1d30413413422d706483bfa0f98a5e886266e7ae", "sha512": "f7fbba6e0636f890e56fbbf3283e524c6fa3204ae298382d624741d0dc6638326e282c41be5e4254d8820772c5518a2c5a8c0c7f7eda19594a7eb539453e1ed7", } { hash, ok := hashes[name] if !ok { c.Fatalf("missing %s hash", name) } c.Assert(hash.String(), DeepEquals, val) } } func makeHashes(c *C, hashes map[string]string) data.Hashes { h := make(map[string]data.HexBytes, len(hashes)) for typ, hash := range hashes { v, err := hex.DecodeString(hash) c.Assert(err, IsNil) h[typ] = v } return h } type testMetaFile struct { name string actual data.FileMeta expected data.FileMeta err func(testMetaFile) error } func testMetaFileCases(c *C) []testMetaFile { fileMeta := func(c *C, length int64, hashes map[string]string) data.FileMeta { return data.FileMeta{ Length: length, Hashes: makeHashes(c, hashes), } } return []testMetaFile{ { name: "wrong length", actual: data.FileMeta{Length: 1}, expected: data.FileMeta{Length: 2}, err: func(testMetaFile) error { return ErrWrongLength{Actual: 1, Expected: 2} }, }, { name: "wrong sha512 hash", actual: fileMeta(c, 10, map[string]string{"sha512": "111111"}), expected: fileMeta(c, 10, map[string]string{"sha512": "222222"}), err: func(t testMetaFile) error { return ErrWrongHash{"sha512", t.expected.Hashes["sha512"], t.actual.Hashes["sha512"]} }, }, { name: "intersecting hashes", actual: fileMeta(c, 10, map[string]string{"sha512": "111111", "md5": "222222"}), expected: fileMeta(c, 10, map[string]string{"sha512": "111111", "sha256": "333333"}), err: func(testMetaFile) error { return nil }, }, { name: "no common hashes", actual: fileMeta(c, 10, map[string]string{"sha512": "111111"}), expected: fileMeta(c, 10, map[string]string{"sha256": "222222", "md5": "333333"}), err: func(t testMetaFile) error { return ErrNoCommonHash{t.expected.Hashes, t.actual.Hashes} }, }, } } func (UtilSuite) TestSnapshotFileMetaEqual(c *C) { type test struct { name string actual data.SnapshotFileMeta expected data.SnapshotFileMeta err func(test) error } fileMeta := func(version int64, length int64, hashes map[string]string) data.SnapshotFileMeta { return data.SnapshotFileMeta{ Length: length, Hashes: makeHashes(c, hashes), Version: version, } } tests := []test{ { name: "same version", actual: fileMeta(1, 10, map[string]string{"sha512": "111111"}), expected: fileMeta(1, 10, map[string]string{"sha512": "111111"}), err: func(test) error { return nil }, }, { name: "wrong version", actual: fileMeta(0, 10, map[string]string{"sha512": "111111"}), expected: fileMeta(1, 10, map[string]string{"sha512": "111111"}), err: func(test) error { return ErrWrongVersion{Expected: 1, Actual: 0} }, }, { name: "wrong version", actual: fileMeta(1, 10, map[string]string{"sha512": "111111"}), expected: fileMeta(0, 10, map[string]string{"sha512": "111111"}), err: func(test) error { return ErrWrongVersion{Expected: 0, Actual: 1} }, }, { name: "wrong version", actual: fileMeta(1, 10, map[string]string{"sha512": "111111"}), expected: fileMeta(2, 10, map[string]string{"sha512": "111111"}), err: func(test) error { return ErrWrongVersion{Expected: 2, Actual: 1} }, }, } for _, t := range tests { c.Assert(SnapshotFileMetaEqual(t.actual, t.expected), DeepEquals, t.err(t), Commentf("name = %s", t.name)) } for _, t := range testMetaFileCases(c) { actual := data.SnapshotFileMeta{Length: t.actual.Length, Hashes: t.actual.Hashes} expected := data.SnapshotFileMeta{Length: t.expected.Length, Hashes: t.expected.Hashes} c.Assert(SnapshotFileMetaEqual(actual, expected), DeepEquals, t.err(t), Commentf("name = %s %d %d", t.name, t.actual.Length, t.expected.Length)) c.Assert(FileMetaEqual(t.actual, t.expected), DeepEquals, t.err(t), Commentf("name = %s", t.name)) } } func (UtilSuite) TestNormalizeTarget(c *C) { for before, after := range map[string]string{ "": "", "foo.txt": "foo.txt", "/bar.txt": "bar.txt", "foo//bar.txt": "foo/bar.txt", "/with/./a/dot": "with/a/dot", "/with/double/../dot": "with/dot", } { c.Assert(NormalizeTarget(before), Equals, after) } } func (UtilSuite) TestHashedPaths(c *C) { hexBytes := func(s string) data.HexBytes { v, err := hex.DecodeString(s) c.Assert(err, IsNil) return v } hashes := data.Hashes{ "sha512": hexBytes("abc123"), "sha256": hexBytes("def456"), } paths := HashedPaths("foo/bar.txt", hashes) // cannot use DeepEquals as the returned order is non-deterministic c.Assert(paths, HasLen, 2) expected := map[string]struct{}{"foo/abc123.bar.txt": {}, "foo/def456.bar.txt": {}} for _, path := range paths { if _, ok := expected[path]; !ok { c.Fatalf("unexpected path: %s", path) } delete(expected, path) } } func (UtilSuite) TestVersionEqual(c *C) { c.Assert(VersionEqual(1, 1), IsNil) c.Assert(VersionEqual(1, 3), Equals, ErrWrongVersion{3, 1}) } func makeHash(b []byte, alg string) []byte { var h hash.Hash switch alg { case "sha256": h = sha256.New() case "sha512": h = sha512.New() } h.Write(b) return h.Sum(nil) } func (UtilSuite) TestBytesMatchLenAndHashes(c *C) { type test struct { name string bytes []byte length int64 hashes data.Hashes err func(test) error } b := []byte{82, 253, 252, 7, 33, 130, 101, 79, 22, 63, 95, 15, 154, 98, 29, 114} bhashes := data.Hashes{ "sha512": makeHash(b, "sha512"), "sha256": makeHash(b, "sha256"), } tests := []test{ { name: "correct len and hashes", bytes: b, length: 16, hashes: bhashes, err: func(test) error { return nil }, }, { name: "incorrect len", bytes: b, length: 32, hashes: bhashes, err: func(test) error { return ErrWrongLength{32, 16} }, }, { name: "incorrect hashes sha512", bytes: b, length: 16, hashes: data.Hashes{ "sha512": makeHash(b, "sha256"), }, err: func(test) error { return ErrWrongHash{"sha512", bhashes["sha256"], bhashes["sha512"]} }, }, { name: "incorrect hashes sha256", bytes: b, length: 16, hashes: data.Hashes{ "sha256": makeHash(b, "sha512"), }, err: func(test) error { return ErrWrongHash{"sha256", bhashes["sha512"], bhashes["sha256"]} }, }, { name: "incorrect len and hashes", bytes: b, length: 32, hashes: data.Hashes{ "sha512": makeHash(b, "sha256"), "sha256": makeHash(b, "sha512"), }, err: func(test) error { return ErrWrongLength{32, 16} }, }, } for _, t := range tests { c.Assert(BytesMatchLenAndHashes(t.bytes, t.length, t.hashes), DeepEquals, t.err(t), Commentf("name = %s", t.name)) } } verify/000077500000000000000000000000001453140004500123565ustar00rootroot00000000000000verify/db.go000066400000000000000000000045321453140004500132760ustar00rootroot00000000000000package verify import ( "github.com/theupdateframework/go-tuf/data" "github.com/theupdateframework/go-tuf/internal/roles" "github.com/theupdateframework/go-tuf/pkg/keys" ) type Role struct { KeyIDs map[string]struct{} Threshold int } func (r *Role) ValidKey(id string) bool { _, ok := r.KeyIDs[id] return ok } type DB struct { roles map[string]*Role verifiers map[string]keys.Verifier } func NewDB() *DB { return &DB{ roles: make(map[string]*Role), verifiers: make(map[string]keys.Verifier), } } // NewDBFromDelegations returns a DB that verifies delegations // of a given Targets. func NewDBFromDelegations(d *data.Delegations) (*DB, error) { db := &DB{ roles: make(map[string]*Role, len(d.Roles)), verifiers: make(map[string]keys.Verifier, len(d.Keys)), } for _, r := range d.Roles { if _, ok := roles.TopLevelRoles[r.Name]; ok { return nil, ErrInvalidDelegatedRole } role := &data.Role{Threshold: r.Threshold, KeyIDs: r.KeyIDs} if err := db.AddRole(r.Name, role); err != nil { return nil, err } } for id, k := range d.Keys { if err := db.AddKey(id, k); err != nil { return nil, err } } return db, nil } func (db *DB) AddKey(id string, k *data.PublicKey) error { verifier, err := keys.GetVerifier(k) if err != nil { return err // ErrInvalidKey } // TUF is considering in TAP-12 removing the // requirement that the keyid hash algorithm be derived // from the public key. So to be forwards compatible, // we allow any key ID, rather than checking k.ContainsID(id) // // AddKey should be idempotent, so we allow re-adding the same PublicKey. // // TAP-12: https://github.com/theupdateframework/taps/blob/master/tap12.md if oldVerifier, exists := db.verifiers[id]; exists && oldVerifier.Public() != verifier.Public() { return ErrRepeatID{id} } db.verifiers[id] = verifier return nil } func (db *DB) AddRole(name string, r *data.Role) error { if r.Threshold < 1 { return ErrInvalidThreshold } role := &Role{ KeyIDs: make(map[string]struct{}), Threshold: r.Threshold, } for _, id := range r.KeyIDs { role.KeyIDs[id] = struct{}{} } db.roles[name] = role return nil } func (db *DB) GetVerifier(id string) (keys.Verifier, error) { k, ok := db.verifiers[id] if !ok { return nil, ErrMissingKey } return k, nil } func (db *DB) GetRole(name string) *Role { return db.roles[name] } verify/db_test.go000066400000000000000000000102171453140004500143320ustar00rootroot00000000000000package verify import ( "testing" "github.com/stretchr/testify/assert" "github.com/theupdateframework/go-tuf/data" "github.com/theupdateframework/go-tuf/pkg/keys" ) func TestDelegationsDB(t *testing.T) { key, err := keys.GenerateEd25519Key() assert.Nil(t, err, "generating key failed") var dbTests = []struct { testName string delegations *data.Delegations initErr error unmarshalErr error }{ { testName: "empty state", delegations: &data.Delegations{}, unmarshalErr: ErrNoSignatures, }, { testName: "top level role", delegations: &data.Delegations{Roles: []data.DelegatedRole{ {Name: "root"}, }}, initErr: ErrInvalidDelegatedRole, }, { testName: "invalid role", delegations: &data.Delegations{Roles: []data.DelegatedRole{ {Threshold: 0}, }}, initErr: ErrInvalidThreshold, }, { testName: "standard (SHA256) key IDs supported", delegations: &data.Delegations{ Keys: map[string]*data.PublicKey{ key.PublicData().IDs()[0]: key.PublicData(), }, Roles: []data.DelegatedRole{{ Name: "rolename", KeyIDs: key.PublicData().IDs(), Threshold: 1, }, }, }, // If we get to ErrNoSignatures, we've passed key loading; see // delegations_test.go to see tests that delegation DB *fully* works // with valid signatures set up. unmarshalErr: ErrNoSignatures, }, { testName: "arbitrary (non-SHA256, per TAP-12) key IDs supported", delegations: &data.Delegations{ Keys: map[string]*data.PublicKey{ "a": key.PublicData(), }, Roles: []data.DelegatedRole{{ Name: "rolename", KeyIDs: []string{"a"}, Threshold: 1, }, }, }, // If we get to ErrNoSignatures, we've passed key loading; see // delegations_test.go to see tests that delegation DB *fully* works // with valid signatures set up. unmarshalErr: ErrNoSignatures, }, } for _, tt := range dbTests { t.Run(tt.testName, func(t *testing.T) { db, err := NewDBFromDelegations(tt.delegations) assert.Equal(t, tt.initErr, err) if err == nil { assert.NotNil(t, db) var targets data.Targets err = db.Unmarshal([]byte(`{"a":"b"}`), targets, "tree", 0) assert.Equal(t, tt.unmarshalErr, err) } }) } } // Test key database for compliance with TAP-12. // // Previously, every key's key ID was the SHA256 of the public key. TAP-12 // allows arbitrary key IDs, with no loss in security. // // TAP-12: https://github.com/theupdateframework/taps/blob/master/tap12.md func TestTAP12(t *testing.T) { db := NewDB() // Need to use a signer type that supports random signatures. key1, _ := keys.GenerateRsaKey() key2, _ := keys.GenerateRsaKey() msg := []byte("{}") sig1, _ := key1.SignMessage(msg) sig1Duplicate, _ := key1.SignMessage(msg) assert.NotEqual(t, sig1, sig1Duplicate, "Signatures should be random") sig2, _ := key2.SignMessage(msg) // Idempotent: adding the same key with the same ID is okay. assert.Nil(t, db.AddKey("key1", key1.PublicData()), "initial add") assert.Nil(t, db.AddKey("key1", key1.PublicData()), "re-add") // Adding a different key is allowed, unless the key ID is the same. assert.Nil(t, db.AddKey("key2", key2.PublicData()), "different key with different ID") assert.ErrorIs(t, db.AddKey("key1", key2.PublicData()), ErrRepeatID{"key1"}, "different key with same key ID") assert.Nil(t, db.AddKey("key1-duplicate", key1.PublicData()), "same key with different ID should succeed") assert.Nil(t, db.AddRole("diffkeys", &data.Role{ KeyIDs: []string{"key1", "key2"}, Threshold: 2, }), "adding role") assert.Nil(t, db.AddRole("samekeys", &data.Role{ KeyIDs: []string{"key1", "key1-alt"}, Threshold: 2, }), "adding role") assert.Nil(t, db.VerifySignatures(&data.Signed{ Signed: msg, Signatures: []data.Signature{{KeyID: "key1", Signature: sig1}, {KeyID: "key2", Signature: sig2}}, }, "diffkeys"), "Signature with different keys: ") assert.ErrorIs(t, db.VerifySignatures(&data.Signed{ Signed: msg, Signatures: []data.Signature{{KeyID: "key1", Signature: sig1}, {KeyID: "key1-alt", Signature: sig1Duplicate}}, }, "samekeys"), ErrRoleThreshold{2, 1}, "Threshold signing with repeat key") } verify/errors.go000066400000000000000000000035001453140004500142170ustar00rootroot00000000000000package verify import ( "errors" "fmt" "time" ) var ( ErrMissingKey = errors.New("tuf: missing key") ErrNoSignatures = errors.New("tuf: data has no signatures") ErrInvalid = errors.New("tuf: signature verification failed") ErrWrongMethod = errors.New("tuf: invalid signature type") ErrWrongMetaType = errors.New("tuf: meta file has wrong type") ErrExists = errors.New("tuf: key already in db") ErrInvalidKey = errors.New("tuf: invalid key") ErrInvalidRole = errors.New("tuf: invalid role") ErrInvalidDelegatedRole = errors.New("tuf: invalid delegated role") ErrInvalidKeyID = errors.New("tuf: invalid key id") ErrInvalidThreshold = errors.New("tuf: invalid role threshold") ErrMissingTargetFile = errors.New("tuf: missing previously listed targets metadata file") ) type ErrRepeatID struct { KeyID string } func (e ErrRepeatID) Error() string { return fmt.Sprintf("tuf: duplicate key id (%s)", e.KeyID) } type ErrUnknownRole struct { Role string } func (e ErrUnknownRole) Error() string { return fmt.Sprintf("tuf: unknown role %q", e.Role) } type ErrExpired struct { Expired time.Time } func (e ErrExpired) Error() string { return fmt.Sprintf("expired at %s", e.Expired) } type ErrLowVersion struct { Actual int64 Current int64 } func (e ErrLowVersion) Error() string { return fmt.Sprintf("version %d is lower than current version %d", e.Actual, e.Current) } type ErrWrongVersion struct { Given int64 Expected int64 } func (e ErrWrongVersion) Error() string { return fmt.Sprintf("version %d does not match the expected version %d", e.Given, e.Expected) } type ErrRoleThreshold struct { Expected int Actual int } func (e ErrRoleThreshold) Error() string { return "tuf: valid signatures did not meet threshold" } verify/verify.go000066400000000000000000000116571453140004500142230ustar00rootroot00000000000000package verify import ( "encoding/json" "strings" "time" "github.com/secure-systems-lab/go-securesystemslib/cjson" "github.com/theupdateframework/go-tuf/data" "github.com/theupdateframework/go-tuf/internal/roles" "github.com/theupdateframework/go-tuf/pkg/keys" ) type signedMeta struct { Type string `json:"_type"` Expires time.Time `json:"expires"` Version int64 `json:"version"` } // VerifySignature takes a signed JSON message, a signature, and a // verifier and verifies the given signature on the JSON message // using the verifier. It returns an error if verification fails. func VerifySignature(signed json.RawMessage, sig data.HexBytes, verifier keys.Verifier) error { var decoded map[string]interface{} if err := json.Unmarshal(signed, &decoded); err != nil { return err } msg, err := cjson.EncodeCanonical(decoded) if err != nil { return err } return verifier.Verify(msg, sig) } func (db *DB) VerifyIgnoreExpiredCheck(s *data.Signed, role string, minVersion int64) error { if err := db.VerifySignatures(s, role); err != nil { return err } sm := &signedMeta{} if err := json.Unmarshal(s.Signed, sm); err != nil { return err } if roles.IsTopLevelRole(role) { // Top-level roles can only sign metadata of the same type (e.g. snapshot // metadata must be signed by the snapshot role). if !strings.EqualFold(sm.Type, role) { return ErrWrongMetaType } } else { // Delegated (non-top-level) roles may only sign targets metadata. if strings.ToLower(sm.Type) != "targets" { return ErrWrongMetaType } } if sm.Version < minVersion { return ErrLowVersion{sm.Version, minVersion} } return nil } func (db *DB) Verify(s *data.Signed, role string, minVersion int64) error { // Verify signatures and versions err := db.VerifyIgnoreExpiredCheck(s, role, minVersion) if err != nil { return err } sm := &signedMeta{} if err := json.Unmarshal(s.Signed, sm); err != nil { return err } // Verify expiration if IsExpired(sm.Expires) { return ErrExpired{sm.Expires} } return nil } var IsExpired = func(t time.Time) bool { return time.Until(t) <= 0 } func (db *DB) VerifySignatures(s *data.Signed, role string) error { if len(s.Signatures) == 0 { return ErrNoSignatures } roleData := db.GetRole(role) if roleData == nil { return ErrUnknownRole{role} } // Verify that a threshold of keys signed the data. Since keys can have // multiple key ids, we need to protect against multiple attached // signatures that just differ on the key id. verifiedKeyIDs := make(map[string]struct{}) numVerifiedKeys := 0 for _, sig := range s.Signatures { if !roleData.ValidKey(sig.KeyID) { continue } verifier, err := db.GetVerifier(sig.KeyID) if err != nil { continue } if err := VerifySignature(s.Signed, sig.Signature, verifier); err != nil { // If a signature fails verification, don't count it towards the // threshold but also return early and error out immediately. // Note: Because of this, it is impossible to distinguish between // an error of an invalid signature and a threshold not achieved. // Invalid signatures lead to not achieving the threshold. continue } // Only consider this key valid if we haven't seen any of it's // key ids before. // Careful: we must not rely on the key IDs _declared in the file_, // instead we get to decide what key IDs this key correspond to. // XXX dangerous; better stop supporting multiple key IDs altogether. keyIDs := verifier.MarshalPublicKey().IDs() wasKeySeen := false for _, keyID := range keyIDs { if _, present := verifiedKeyIDs[keyID]; present { wasKeySeen = true } } if !wasKeySeen { for _, id := range keyIDs { verifiedKeyIDs[id] = struct{}{} } numVerifiedKeys++ } } if numVerifiedKeys < roleData.Threshold { return ErrRoleThreshold{roleData.Threshold, numVerifiedKeys} } return nil } func (db *DB) Unmarshal(b []byte, v interface{}, role string, minVersion int64) error { s := &data.Signed{} if err := json.Unmarshal(b, s); err != nil { return err } if err := db.Verify(s, role, minVersion); err != nil { return err } return json.Unmarshal(s.Signed, v) } // UnmarshalExpired is exactly like Unmarshal except ignores expired timestamp error. func (db *DB) UnmarshalIgnoreExpired(b []byte, v interface{}, role string, minVersion int64) error { s := &data.Signed{} if err := json.Unmarshal(b, s); err != nil { return err } // Note: If verification fails, then we wont attempt to unmarshal // unless when verification error is errExpired. verifyErr := db.Verify(s, role, minVersion) if verifyErr != nil { if _, ok := verifyErr.(ErrExpired); !ok { return verifyErr } } return json.Unmarshal(s.Signed, v) } func (db *DB) UnmarshalTrusted(b []byte, v interface{}, role string) error { s := &data.Signed{} if err := json.Unmarshal(b, s); err != nil { return err } if err := db.VerifySignatures(s, role); err != nil { return err } return json.Unmarshal(s.Signed, v) } verify/verify_test.go000066400000000000000000000160021453140004500152470ustar00rootroot00000000000000package verify import ( "crypto" "crypto/ecdsa" "crypto/elliptic" "crypto/rand" "crypto/sha256" "encoding/json" "errors" "testing" "time" "github.com/theupdateframework/go-tuf/data" "github.com/theupdateframework/go-tuf/pkg/keys" "github.com/theupdateframework/go-tuf/sign" "golang.org/x/crypto/ed25519" . "gopkg.in/check.v1" ) // Hook up gocheck into the "go test" runner. func Test(t *testing.T) { TestingT(t) } type VerifySuite struct{} var _ = Suite(&VerifySuite{}) type ecdsaSigner struct { *ecdsa.PrivateKey } type ecdsaPublic struct { PublicKey *keys.PKIXPublicKey `json:"public"` } func (s ecdsaSigner) PublicData() *data.PublicKey { keyValBytes, _ := json.Marshal(ecdsaPublic{PublicKey: &keys.PKIXPublicKey{PublicKey: s.Public()}}) return &data.PublicKey{ Type: data.KeyTypeECDSA_SHA2_P256, Scheme: data.KeySchemeECDSA_SHA2_P256, Algorithms: data.HashAlgorithms, Value: keyValBytes, } } func (s ecdsaSigner) SignMessage(message []byte) ([]byte, error) { hash := sha256.Sum256(message) return s.PrivateKey.Sign(rand.Reader, hash[:], crypto.SHA256) } func (s ecdsaSigner) ContainsID(id string) bool { return s.PublicData().ContainsID(id) } func (ecdsaSigner) MarshalPrivateKey() (*data.PrivateKey, error) { return nil, errors.New("not implemented for test") } func (ecdsaSigner) UnmarshalPrivateKey(key *data.PrivateKey) error { return errors.New("not implemented for test") } func (VerifySuite) Test(c *C) { type test struct { name string keys []*data.PublicKey roles map[string]*data.Role s *data.Signed ver int64 exp *time.Time typ string role string err error mut func(*test) } expiredTime := time.Now().Add(-time.Hour) minVer := int64(10) tests := []test{ { name: "no signatures", mut: func(t *test) { t.s.Signatures = []data.Signature{} }, err: ErrNoSignatures, }, { name: "unknown role", role: "foo", err: ErrUnknownRole{"foo"}, }, { // It is impossible to distinguish between an error of an invalid // signature and a threshold not achieved. Invalid signatures lead // to not achieving the threshold. name: "signature wrong length", mut: func(t *test) { t.s.Signatures[0].Signature = []byte{0} }, err: ErrRoleThreshold{1, 0}, }, { name: "key missing from role", mut: func(t *test) { t.roles["root"].KeyIDs = nil }, err: ErrRoleThreshold{1, 0}, }, { name: "invalid signature", mut: func(t *test) { t.s.Signatures[0].Signature = make([]byte, ed25519.SignatureSize) }, err: ErrRoleThreshold{1, 0}, }, { name: "enough signatures with extra invalid signature", mut: func(t *test) { t.s.Signatures = append(t.s.Signatures, data.Signature{ KeyID: t.s.Signatures[0].KeyID, Signature: make([]byte, ed25519.SignatureSize)}) }, }, { name: "not enough signatures", mut: func(t *test) { t.roles["root"].Threshold = 2 }, err: ErrRoleThreshold{2, 1}, }, { name: "exactly enough signatures", }, { name: "more than enough signatures", mut: func(t *test) { k, _ := keys.GenerateEd25519Key() sign.Sign(t.s, k) t.keys = append(t.keys, k.PublicData()) t.roles["root"].KeyIDs = append(t.roles["root"].KeyIDs, k.PublicData().IDs()...) }, }, { name: "duplicate key id", mut: func(t *test) { t.roles["root"].Threshold = 2 t.s.Signatures = append(t.s.Signatures, t.s.Signatures[0]) }, err: ErrRoleThreshold{2, 1}, }, { name: "unknown key", mut: func(t *test) { k, _ := keys.GenerateEd25519Key() sign.Sign(t.s, k) }, }, { name: "unknown key below threshold", mut: func(t *test) { k, _ := keys.GenerateEd25519Key() sign.Sign(t.s, k) t.roles["root"].Threshold = 2 }, err: ErrRoleThreshold{2, 1}, }, { name: "unknown keys in db", mut: func(t *test) { k, _ := keys.GenerateEd25519Key() sign.Sign(t.s, k) t.keys = append(t.keys, k.PublicData()) }, }, { name: "unknown keys in db below threshold", mut: func(t *test) { k, _ := keys.GenerateEd25519Key() sign.Sign(t.s, k) t.keys = append(t.keys, k.PublicData()) t.roles["root"].Threshold = 2 }, err: ErrRoleThreshold{2, 1}, }, { name: "wrong type", typ: "bar", err: ErrWrongMetaType, }, { name: "low version", ver: minVer - 1, err: ErrLowVersion{minVer - 1, minVer}, }, { name: "expired", exp: &expiredTime, err: ErrExpired{expiredTime}, }, { name: "valid ecdsa signature", mut: func(t *test) { k, _ := ecdsa.GenerateKey(elliptic.P256(), rand.Reader) s := ecdsaSigner{k} sign.Sign(t.s, s) t.s.Signatures = t.s.Signatures[1:] t.keys = []*data.PublicKey{s.PublicData()} t.roles["root"].KeyIDs = s.PublicData().IDs() }, }, { // The threshold is still achieved. name: "invalid second ecdsa signature", mut: func(t *test) { k, _ := ecdsa.GenerateKey(elliptic.P256(), rand.Reader) s := ecdsaSigner{k} sign.Sign(t.s, s) t.s.Signatures[1].Signature[0]++ t.keys = append(t.keys, s.PublicData()) t.roles["root"].KeyIDs = append(t.roles["root"].KeyIDs, s.PublicData().IDs()...) }, }, } for _, t := range tests { if t.role == "" { t.role = "root" } if t.ver == 0 { t.ver = minVer } if t.exp == nil { expires := time.Now().Add(time.Hour) t.exp = &expires } if t.typ == "" { t.typ = t.role } if t.keys == nil && t.s == nil { k, _ := keys.GenerateEd25519Key() t.s, _ = sign.Marshal(&signedMeta{Type: t.typ, Version: t.ver, Expires: *t.exp}, k) t.keys = []*data.PublicKey{k.PublicData()} } if t.roles == nil { t.roles = map[string]*data.Role{ "root": { KeyIDs: t.keys[0].IDs(), Threshold: 1, }, } } if t.mut != nil { t.mut(&t) } db := NewDB() for _, k := range t.keys { for _, id := range k.IDs() { err := db.AddKey(id, k) c.Assert(err, IsNil) } } for n, r := range t.roles { err := db.AddRole(n, r) c.Assert(err, IsNil) } err := db.Verify(t.s, t.role, minVer) if e, ok := t.err.(ErrExpired); ok { assertErrExpired(c, err, e) } else { c.Assert(err, DeepEquals, t.err, Commentf("name = %s", t.name)) } } } func (VerifySuite) TestVerifyIgnoreExpired(c *C) { minVer := int64(10) role := "root" k, _ := keys.GenerateEd25519Key() s, _ := sign.Marshal(&signedMeta{Type: role, Version: minVer, Expires: time.Now().Add(-time.Hour)}, k) keys := []*data.PublicKey{k.PublicData()} roles := map[string]*data.Role{ "root": { KeyIDs: keys[0].IDs(), Threshold: 1, }, } db := NewDB() for _, k := range keys { for _, id := range k.IDs() { err := db.AddKey(id, k) c.Assert(err, IsNil) } } for n, r := range roles { err := db.AddRole(n, r) c.Assert(err, IsNil) } err := db.VerifyIgnoreExpiredCheck(s, role, minVer) c.Assert(err, IsNil) } func assertErrExpired(c *C, err error, expected ErrExpired) { actual, ok := err.(ErrExpired) if !ok { c.Fatalf("expected err to have type ErrExpired, got %T", err) } c.Assert(actual.Expired.Unix(), Equals, expected.Expired.Unix()) }