From 3f09c3643a8eea1cc1a2aeb9a68b5ba37331d840 Mon Sep 17 00:00:00 2001 From: Kapil Sharma Date: Tue, 4 Jun 2024 12:03:49 +0530 Subject: [PATCH 01/21] Updating Contributing guidelines and copy-pastable code (#2642) * Make commands easier to copy Signed-off-by: h4l0gen Signed-off-by: Kapil Sharma Signed-off-by: shubhusion --- docs/CONTRIBUTING.rst | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/docs/CONTRIBUTING.rst b/docs/CONTRIBUTING.rst index eff4180aeb..be6830fb42 100644 --- a/docs/CONTRIBUTING.rst +++ b/docs/CONTRIBUTING.rst @@ -31,7 +31,7 @@ tox run. :: - $ tox + tox Below, you will see more details about each step managed by ``tox``, in case you need debug/run outside ``tox``. @@ -44,16 +44,16 @@ the test aggregation script inside the *tests* subdirectory. ``tuf`` and its dependencies must already be installed. :: - $ cd tests/ - $ python3 aggregate_tests.py + cd tests/ + python3 aggregate_tests.py Individual tests can also be executed. Optional ``-v`` flags can be added to increase log level up to DEBUG (``-vvvv``). :: - $ cd tests/ - $ python3 test_updater_ng.py -v + cd tests/ + python3 test_updater_ng.py -v Coverage @@ -64,8 +64,8 @@ invoked with the ``coverage`` tool (requires installation of ``coverage``, e.g. via PyPI). :: - $ cd tests/ - $ coverage run aggregate_tests.py && coverage report + cd tests/ + coverage run aggregate_tests.py && coverage report Auto-formatting @@ -76,4 +76,4 @@ The linter in CI/CD will check that new TUF code is formatted with command line: :: - $ tox -e fix + tox -e fix From 1b51be755e86c87b963abe763adf4fa860eeeec5 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 3 Jun 2024 21:29:20 +0000 Subject: [PATCH 02/21] build(deps): bump the test-and-lint-dependencies group with 2 updates Bumps the test-and-lint-dependencies group with 2 updates: [coverage](https://github.com/nedbat/coveragepy) and [ruff](https://github.com/astral-sh/ruff). Updates `coverage` from 7.5.2 to 7.5.3 - [Release notes](https://github.com/nedbat/coveragepy/releases) - [Changelog](https://github.com/nedbat/coveragepy/blob/master/CHANGES.rst) - [Commits](https://github.com/nedbat/coveragepy/compare/7.5.2...7.5.3) Updates `ruff` from 0.4.5 to 0.4.7 - [Release notes](https://github.com/astral-sh/ruff/releases) - [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md) - [Commits](https://github.com/astral-sh/ruff/compare/v0.4.5...v0.4.7) --- updated-dependencies: - dependency-name: coverage dependency-type: direct:production update-type: version-update:semver-patch dependency-group: test-and-lint-dependencies - dependency-name: ruff dependency-type: direct:production update-type: version-update:semver-patch dependency-group: test-and-lint-dependencies ... Signed-off-by: dependabot[bot] Signed-off-by: shubhusion --- requirements/lint.txt | 2 +- requirements/test.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/requirements/lint.txt b/requirements/lint.txt index 1320b47e9b..bfd5f19df4 100644 --- a/requirements/lint.txt +++ b/requirements/lint.txt @@ -6,5 +6,5 @@ # Lint tools # (We are not so interested in the specific versions of the tools: the versions # are pinned to prevent unexpected linting failures when tools update) -ruff==0.4.5 +ruff==0.4.7 mypy==1.10.0 diff --git a/requirements/test.txt b/requirements/test.txt index ec15bb8bf4..ae6dda96b5 100644 --- a/requirements/test.txt +++ b/requirements/test.txt @@ -4,4 +4,4 @@ -r pinned.txt # coverage measurement -coverage==7.5.2 +coverage==7.5.3 From 1085c56914261be8a41e6e10daae9acb9505d8d8 Mon Sep 17 00:00:00 2001 From: Kapil Sharma Date: Tue, 4 Jun 2024 12:26:53 +0530 Subject: [PATCH 03/21] repository: handle online key changes (#2650) * repository: Handle online key change situations in do_snapshot() and do_timestamp(): always create a new version if current version is not correctly signed * remove expectedFailure marks from the related tests Signed-off-by: h4l0gen Signed-off-by: Kapil Sharma Signed-off-by: shubhusion --- tests/test_repository.py | 2 -- tuf/repository/_repository.py | 26 ++++++++++++++++++++++++++ 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/tests/test_repository.py b/tests/test_repository.py index 092df0ec79..e1d228dc9b 100644 --- a/tests/test_repository.py +++ b/tests/test_repository.py @@ -186,7 +186,6 @@ def test_do_snapshot_after_new_targets_delegation(self) -> None: self.assertEqual(2, len(snapshot_versions)) self.assertEqual(2, snapshot_versions[-1].signed.version) - @unittest.expectedFailure # Issue 2438 def test_do_snapshot_after_snapshot_key_change(self) -> None: # change snapshot signing keys with self.repo.edit_root() as root: @@ -228,7 +227,6 @@ def test_do_timestamp_after_snapshot_change(self) -> None: self.assertEqual(2, len(timestamp_versions)) self.assertEqual(2, timestamp_versions[-1].signed.version) - @unittest.expectedFailure # Issue 2438 def test_do_timestamp_after_timestamp_key_change(self) -> None: # change timestamp signing keys with self.repo.edit_root() as root: diff --git a/tuf/repository/_repository.py b/tuf/repository/_repository.py index fc96b8f474..09306b821c 100644 --- a/tuf/repository/_repository.py +++ b/tuf/repository/_repository.py @@ -9,6 +9,7 @@ from copy import deepcopy from typing import Dict, Generator, Optional, Tuple +from tuf.api.exceptions import UnsignedMetadataError from tuf.api.metadata import ( Metadata, MetaFile, @@ -188,6 +189,18 @@ def do_snapshot( update_version = force removed: Dict[str, MetaFile] = {} + root = self.root() + snapshot_md = self.open(Snapshot.type) + + try: + root.verify_delegate( + Snapshot.type, + snapshot_md.signed_bytes, + snapshot_md.signatures, + ) + except UnsignedMetadataError: + update_version = True + with self.edit_snapshot() as snapshot: for keyname, new_meta in self.targets_infos.items(): if keyname not in snapshot.meta: @@ -228,6 +241,19 @@ def do_timestamp( """ update_version = force removed = None + + root = self.root() + timestamp_md = self.open(Timestamp.type) + + try: + root.verify_delegate( + Timestamp.type, + timestamp_md.signed_bytes, + timestamp_md.signatures, + ) + except UnsignedMetadataError: + update_version = True + with self.edit_timestamp() as timestamp: if self.snapshot_info.version < timestamp.snapshot_meta.version: raise ValueError("snapshot version rollback") From 101d0f836a301dd1cb422da7afcd3819e2569188 Mon Sep 17 00:00:00 2001 From: SHUBHAM SHARMA <96301987+shubhusion@users.noreply.github.com> Date: Sat, 8 Jun 2024 22:54:41 +0530 Subject: [PATCH 04/21] Update README.md Signed-off-by: SHUBHAM SHARMA <96301987+shubhusion@users.noreply.github.com> Signed-off-by: shubhusion --- README.md | 195 +++++++++++++++++++++++++----------------------------- 1 file changed, 90 insertions(+), 105 deletions(-) diff --git a/README.md b/README.md index cbefd84d86..46fc0cd6e4 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# TUF A Framework for Securing Software Update Systems +# TUF A Framework for Securing Software Update Systems ![Build](https://github.com/theupdateframework/python-tuf/actions/workflows/ci.yml/badge.svg) [![Coveralls](https://coveralls.io/repos/theupdateframework/python-tuf/badge.svg?branch=develop)](https://coveralls.io/r/theupdateframework/python-tuf?branch=develop) @@ -6,108 +6,93 @@ [![CII](https://bestpractices.coreinfrastructure.org/projects/1351/badge)](https://bestpractices.coreinfrastructure.org/projects/1351) [![PyPI](https://img.shields.io/pypi/v/tuf)](https://pypi.org/project/tuf/) [![OpenSSF Scorecard](https://api.securityscorecards.dev/projects/github.com/theupdateframework/python-tuf/badge)](https://api.securityscorecards.dev/projects/github.com/theupdateframework/python-tuf) +[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) +[![License: Apache 2.0](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0) ----------------------------- -[The Update Framework (TUF)](https://theupdateframework.io/) is a framework for -secure content delivery and updates. It protects against various types of -supply chain attacks and provides resilience to compromise. This repository is a -**reference implementation** written in Python. It is intended to conform to -version 1.0 of the [TUF -specification](https://theupdateframework.github.io/specification/latest/). - -Python-TUF provides the following APIs: - * [`tuf.api.metadata`](https://theupdateframework.readthedocs.io/en/latest/api/tuf.api.html), - a "low-level" API, designed to provide easy and safe access to TUF - metadata and to handle (de)serialization from/to files. - * [`tuf.ngclient`](https://theupdateframework.readthedocs.io/en/latest/api/tuf.ngclient.html), - a client implementation built on top of the metadata API. - * `tuf.repository`, a repository library also built on top of the metadata - API. This module is currently not considered part of python-tuf stable API. - -The reference implementation strives to be a readable guide and demonstration -for those working on implementing TUF in their own languages, environments, or -update systems. - - -About The Update Framework --------------------------- -The Update Framework (TUF) design helps developers maintain the security of a -software update system, even against attackers that compromise the repository -or signing keys. -TUF provides a flexible -[specification](https://github.com/theupdateframework/specification/blob/master/tuf-spec.md) -defining functionality that developers can use in any software update system or -re-implement to fit their needs. - -TUF is hosted by the [Linux Foundation](https://www.linuxfoundation.org/) as -part of the [Cloud Native Computing Foundation](https://www.cncf.io/) (CNCF) -and its design is [used in production](https://theupdateframework.io/adoptions/) -by various tech companies and open source organizations. A variant of TUF -called [Uptane](https://uptane.github.io/) is used to secure over-the-air -updates in automobiles. - -Please see [TUF's website](https://theupdateframework.com/) for more information about TUF! - - -Documentation -------------- -* [Introduction to TUF's Design](https://theupdateframework.io/overview/) -* [The TUF Specification](https://theupdateframework.github.io/specification/latest/) -* [Developer documentation](https://theupdateframework.readthedocs.io/), including - [API reference]( - https://theupdateframework.readthedocs.io/en/latest/api/api-reference.html) and [instructions for contributors](https://theupdateframework.readthedocs.io/en/latest/CONTRIBUTING.html) -* [Usage examples](https://github.com/theupdateframework/python-tuf/tree/develop/examples/) -* [Governance](https://github.com/theupdateframework/python-tuf/blob/develop/docs/GOVERNANCE.md) -and [Maintainers](https://github.com/theupdateframework/python-tuf/blob/develop/docs/MAINTAINERS.txt) -for the reference implementation -* [Miscellaneous Docs](https://github.com/theupdateframework/python-tuf/tree/develop/docs) -* [Python-TUF development blog](https://theupdateframework.github.io/python-tuf/) - - -Contact -------- -Questions, feedback, and suggestions are welcomed on our low volume [mailing -list](https://groups.google.com/forum/?fromgroups#!forum/theupdateframework) or -the [#tuf](https://cloud-native.slack.com/archives/C8NMD3QJ3) channel on [CNCF -Slack](https://slack.cncf.io/). - -We strive to make the specification easy to implement, so if you come across -any inconsistencies or experience any difficulty, do let us know by sending an -email, or by reporting an issue in the GitHub [specification -repo](https://github.com/theupdateframework/specification/issues). - -Security Issues and Bugs ------------------------- - -See [SECURITY.md](docs/SECURITY.md) - -License -------- - -This work is [dual-licensed](https://en.wikipedia.org/wiki/Multi-licensing) and -distributed under the (1) MIT License and (2) Apache License, Version 2.0. -Please see [LICENSE-MIT](https://github.com/theupdateframework/python-tuf/blob/develop/LICENSE-MIT) -and [LICENSE](https://github.com/theupdateframework/python-tuf/blob/develop/LICENSE). - - -Acknowledgements ----------------- - -This project is hosted by the Linux Foundation under the Cloud Native Computing -Foundation. TUF's early development was managed by members of the [Secure -Systems Lab](https://ssl.engineering.nyu.edu/) at [New York -University](https://engineering.nyu.edu/). We appreciate the efforts of all -[maintainers and emeritus -maintainers](https://github.com/theupdateframework/python-tuf/blob/develop/docs/MAINTAINERS.txt), -as well as the contributors Konstantin Andrianov, Kairo de Araujo, Ivana -Atanasova, Geremy Condra, Zane Fisher, Pankhuri Goyal, Justin Samuel, Tian -Tian, Martin Vrachev and Yuyu Zheng who are among those who helped -significantly with TUF's reference implementation. Maintainers and Contributors -are governed by the [CNCF Community Code of -Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md). - -This material is based upon work supported by the National Science Foundation -under Grant Nos. CNS-1345049 and CNS-0959138. Any opinions, findings, and -conclusions or recommendations expressed in this material are those of the -author(s) and do not necessarily reflect the views of the National Science -Foundation. +--- + +## Table of Contents + +- [Introduction](#introduction) +- [About The Update Framework](#about-the-update-framework) +- [Key Features](#key-features) +- [Documentation](#documentation) +- [Contact](#contact) +- [Security Issues and Bugs](#security-issues-and-bugs) +- [License](#license) +- [Acknowledgements](#acknowledgements) + +--- + +## Introduction + +The Update Framework (TUF) is a robust framework for secure content delivery and updates. It safeguards against various types of supply chain attacks and ensures resilience to compromise. + +--- + +## About The Update Framework + +The Update Framework (TUF) is a design that helps developers maintain the security of a software update system, even against attackers that compromise the repository or signing keys. TUF provides a flexible specification defining functionality that developers can use in any software update system or re-implement to fit their needs. + +TUF is hosted by the [Linux Foundation](https://www.linuxfoundation.org/) as part of the [Cloud Native Computing Foundation](https://www.cncf.io/) (CNCF) and is utilized in production by various tech companies and open-source organizations. A variant of TUF called [Uptane](https://uptane.github.io/) is used to secure over-the-air updates in automobiles. + +For more information about TUF, visit [TUF's website](https://theupdateframework.com/). + +--- + +## Key Features + +- **Robust Security**: TUF ensures the security of software update systems, even in the face of compromise or supply chain attacks. It employs a variety of cryptographic techniques to guarantee the integrity and authenticity of software updates. +- **Flexible Specification**: TUF provides a flexible specification that developers can adapt to fit their specific software update system requirements. This allows for easy integration into existing systems and promotes interoperability. +- **Production Usage**: TUF is utilized in production by various tech companies and open-source organizations, demonstrating its reliability and effectiveness in real-world scenarios. +- **Variant Support**: TUF's variant, Uptane, is specifically designed to secure over-the-air updates in automobiles, showcasing its versatility and applicability across different domains. + +--- + +## Documentation + +- [Introduction to TUF's Design](https://theupdateframework.io/overview/): Provides an overview of TUF's design principles and goals. +- [The TUF Specification](https://theupdateframework.github.io/specification/latest/): Offers detailed documentation on TUF's specification, explaining its various components and functionalities. +- [Developer Documentation](https://theupdateframework.readthedocs.io/), including [API Reference](https://theupdateframework.readthedocs.io/en/latest/api/api-reference.html) and [Instructions for Contributors](https://theupdateframework.readthedocs.io/en/latest/CONTRIBUTING.html) +- [Governance](https://github.com/theupdateframework/python-tuf/blob/develop/docs/GOVERNANCE.md): Outlines the governance model for the reference implementation of TUF. +- [Miscellaneous Docs](https://github.com/theupdateframework/python-tuf/tree/develop/docs): Additional documentation covering various aspects of TUF implementation and usage. +- [Python-TUF Development Blog](https://theupdateframework.github.io/python-tuf/): Provides insights, updates, and news related to Python-TUF development. + +--- + +## Contact + +### Mailing List +- [![Mailing List](https://img.shields.io/badge/Mailing%20List-Subscribe-brightgreen)](https://groups.google.com/forum/?fromgroups#!forum/theupdateframework) + - Join our low-volume mailing list for discussions, announcements, and updates. + +### CNCF Slack +- [![CNCF Slack](https://img.shields.io/badge/CNCF%20Slack-%23tuf-brightgreen)](https://slack.cncf.io/) + - Join the #tuf channel on CNCF Slack for real-time discussions and support. + +Questions, feedback, and suggestions are welcomed on our mailing list or the CNCF Slack channel. + +--- + +## Security Issues and Bugs + +[![Security](https://img.shields.io/badge/Security%20Issues-SECURITY.md-red)](docs/SECURITY.md) + +If you encounter any security issues or bugs, please refer to the [security policy](docs/SECURITY.md) for reporting and guidelines. + +--- + +## License + +[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) +[![License: Apache 2.0](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0) + +This work is dual-licensed and distributed under the (1) MIT License and (2) Apache License, Version 2.0. Please see [LICENSE-MIT](https://github.com/theupdateframework/python-tuf/blob/develop/LICENSE-MIT) and [LICENSE](https://github.com/theupdateframework/python-tuf/blob/develop/LICENSE) for more details. + +--- + +## Acknowledgements + +This project is hosted by the Linux Foundation under the Cloud Native Computing Foundation. TUF's early development was managed by members of the [Secure Systems Lab](https://ssl.engineering.nyu.edu/) at [New York University](https://engineering.nyu.edu/). We appreciate the efforts of all [maintainers and emeritus maintainers](https://github.com/theupdateframework/python-tuf/blob/develop/docs/MAINTAINERS.txt), as well as the contributors Konstantin Andrianov, Kairo de Araujo, Ivana Atanasova, Geremy Condra, Zane Fisher, Pankhuri Goyal, Justin Samuel, Tian Tian, Martin Vrachev, and Yuyu Zheng who significantly contributed to TUF's reference implementation. Maintainers and Contributors are governed by the [CNCF Community Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md). + +This material is based upon work supported by the National Science Foundation under Grant Nos. CNS-1345049 and CNS-0959138. Any opinions, findings, and conclusions or recommendations expressed in this material are those of the author(s) and do not necessarily reflect the views of the National Science Foundation. From 711454324a6ea368e7bb33d3275711a8f39d0e39 Mon Sep 17 00:00:00 2001 From: SHUBHAM SHARMA <96301987+shubhusion@users.noreply.github.com> Date: Sat, 8 Jun 2024 22:59:05 +0530 Subject: [PATCH 05/21] Update README.md Signed-off-by: SHUBHAM SHARMA <96301987+shubhusion@users.noreply.github.com> Signed-off-by: shubhusion --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index 46fc0cd6e4..15b27f2167 100644 --- a/README.md +++ b/README.md @@ -96,3 +96,7 @@ This work is dual-licensed and distributed under the (1) MIT License and (2) Apa This project is hosted by the Linux Foundation under the Cloud Native Computing Foundation. TUF's early development was managed by members of the [Secure Systems Lab](https://ssl.engineering.nyu.edu/) at [New York University](https://engineering.nyu.edu/). We appreciate the efforts of all [maintainers and emeritus maintainers](https://github.com/theupdateframework/python-tuf/blob/develop/docs/MAINTAINERS.txt), as well as the contributors Konstantin Andrianov, Kairo de Araujo, Ivana Atanasova, Geremy Condra, Zane Fisher, Pankhuri Goyal, Justin Samuel, Tian Tian, Martin Vrachev, and Yuyu Zheng who significantly contributed to TUF's reference implementation. Maintainers and Contributors are governed by the [CNCF Community Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md). This material is based upon work supported by the National Science Foundation under Grant Nos. CNS-1345049 and CNS-0959138. Any opinions, findings, and conclusions or recommendations expressed in this material are those of the author(s) and do not necessarily reflect the views of the National Science Foundation. + +--- + +[![](https://img.shields.io/badge/Move%20to%20Top-%E2%86%91%20Back%20to%20Top-blue)](#img-srchttpscdnrawgitcomtheupdateframeworkartwork3a649fa6tuf-logosvg-height100-valignmiddle-alttuf-stylebackground-colorwhite-a-framework-for-securing-software-update-systems) From 5958af8af34e0324b05317487a5dddcbc40a8c1b Mon Sep 17 00:00:00 2001 From: SHUBHAM SHARMA <96301987+shubhusion@users.noreply.github.com> Date: Sat, 8 Jun 2024 23:12:07 +0530 Subject: [PATCH 06/21] Update README.md Signed-off-by: SHUBHAM SHARMA <96301987+shubhusion@users.noreply.github.com> Signed-off-by: shubhusion --- README.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 15b27f2167..eb8cdaf032 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,8 @@ -# TUF A Framework for Securing Software Update Systems +
+ TUF +
+ +#
A Framework for Securing Software Update Systems
![Build](https://github.com/theupdateframework/python-tuf/actions/workflows/ci.yml/badge.svg) [![Coveralls](https://coveralls.io/repos/theupdateframework/python-tuf/badge.svg?branch=develop)](https://coveralls.io/r/theupdateframework/python-tuf?branch=develop) From 26bba1811d68de8180bbcd79ff76d5141b14ffff Mon Sep 17 00:00:00 2001 From: SHUBHAM SHARMA <96301987+shubhusion@users.noreply.github.com> Date: Sat, 8 Jun 2024 23:23:58 +0530 Subject: [PATCH 07/21] Update README.md Signed-off-by: SHUBHAM SHARMA <96301987+shubhusion@users.noreply.github.com> Signed-off-by: shubhusion --- README.md | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index eb8cdaf032..8fad3c2eb5 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@
- TUF + TUF
#
A Framework for Securing Software Update Systems
@@ -103,4 +103,12 @@ This material is based upon work supported by the National Science Foundation un --- +## The Update Framework is a CNCF graduated project + +
+ TUF +
+ +--- + [![](https://img.shields.io/badge/Move%20to%20Top-%E2%86%91%20Back%20to%20Top-blue)](#img-srchttpscdnrawgitcomtheupdateframeworkartwork3a649fa6tuf-logosvg-height100-valignmiddle-alttuf-stylebackground-colorwhite-a-framework-for-securing-software-update-systems) From 2bde4a6bb308117856c9c960dfa34ef34687702e Mon Sep 17 00:00:00 2001 From: SHUBHAM SHARMA <96301987+shubhusion@users.noreply.github.com> Date: Sun, 9 Jun 2024 00:01:04 +0530 Subject: [PATCH 08/21] Update README.md Signed-off-by: SHUBHAM SHARMA <96301987+shubhusion@users.noreply.github.com> Signed-off-by: shubhusion --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 8fad3c2eb5..fced9afa8d 100644 --- a/README.md +++ b/README.md @@ -111,4 +111,5 @@ This material is based upon work supported by the National Science Foundation un --- -[![](https://img.shields.io/badge/Move%20to%20Top-%E2%86%91%20Back%20to%20Top-blue)](#img-srchttpscdnrawgitcomtheupdateframeworkartwork3a649fa6tuf-logosvg-height100-valignmiddle-alttuf-stylebackground-colorwhite-a-framework-for-securing-software-update-systems) +[![](https://img.shields.io/badge/Move%20to%20Top-%E2%86%91%20Back%20to%20Top-blue)](#a-framework-for-securing-software-update-systems) + From 6063022a0166bbdab0509c24035fe8cbbbeb31e2 Mon Sep 17 00:00:00 2001 From: SHUBHAM SHARMA <96301987+shubhusion@users.noreply.github.com> Date: Sun, 9 Jun 2024 00:12:46 +0530 Subject: [PATCH 09/21] Update README.md Signed-off-by: SHUBHAM SHARMA <96301987+shubhusion@users.noreply.github.com> Signed-off-by: shubhusion --- README.md | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index fced9afa8d..f139cbe8c2 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,10 @@
- TUF + + TUF +
+ #
A Framework for Securing Software Update Systems
![Build](https://github.com/theupdateframework/python-tuf/actions/workflows/ci.yml/badge.svg) @@ -30,7 +33,17 @@ ## Introduction -The Update Framework (TUF) is a robust framework for secure content delivery and updates. It safeguards against various types of supply chain attacks and ensures resilience to compromise. +The Update Framework (TUF) is a framework for secure content delivery and updates. It protects against various types of supply chain attacks and provides resilience to compromise. This repository is a **reference implementation** written in Python. It is intended to conform to version 1.0 of the [TUF specification](https://theupdateframework.github.io/specification/latest/). + +Python-TUF provides the following APIs: + +- [`tuf.api.metadata`](https://theupdateframework.readthedocs.io/en/latest/api/tuf.api.html): A "low-level" API designed to provide easy and safe access to TUF metadata and to handle (de)serialization from/to files. + +- [`tuf.ngclient`](https://theupdateframework.readthedocs.io/en/latest/api/tuf.ngclient.html): A client implementation built on top of the metadata API. + +- `tuf.repository`: A repository library also built on top of the metadata API. This module is currently not considered part of python-tuf stable API. + +The reference implementation strives to be a readable guide and demonstration for those working on implementing TUF in their own languages, environments, or update systems. --- @@ -103,10 +116,12 @@ This material is based upon work supported by the National Science Foundation un --- -## The Update Framework is a CNCF graduated project +##
The Update Framework (TUF) is a CNCF graduated project
- TUF + + TUF +
--- From eacd91f4262b545bb2d11fc3806594e9f7f3f992 Mon Sep 17 00:00:00 2001 From: SHUBHAM SHARMA <96301987+shubhusion@users.noreply.github.com> Date: Sun, 9 Jun 2024 00:19:58 +0530 Subject: [PATCH 10/21] Update README.md Signed-off-by: SHUBHAM SHARMA <96301987+shubhusion@users.noreply.github.com> Signed-off-by: shubhusion --- README.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/README.md b/README.md index f139cbe8c2..f767b21d58 100644 --- a/README.md +++ b/README.md @@ -24,6 +24,7 @@ - [About The Update Framework](#about-the-update-framework) - [Key Features](#key-features) - [Documentation](#documentation) +- [Installation](#installation) - [Contact](#contact) - [Security Issues and Bugs](#security-issues-and-bugs) - [License](#license) @@ -77,6 +78,12 @@ For more information about TUF, visit [TUF's website](https://theupdateframework --- +## Installation + +For installation instructions, please visit the [installation page](https://theupdateframework.readthedocs.io/en/latest/INSTALLATION.html). + +--- + ## Contact ### Mailing List From d6259a681bbed49053df3ada62677c63a5890c83 Mon Sep 17 00:00:00 2001 From: SHUBHAM SHARMA <96301987+shubhusion@users.noreply.github.com> Date: Mon, 17 Jun 2024 13:33:04 +0530 Subject: [PATCH 11/21] Update README.md Signed-off-by: SHUBHAM SHARMA <96301987+shubhusion@users.noreply.github.com> Signed-off-by: shubhusion --- README.md | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index f767b21d58..d744461007 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,13 @@
- - TUF - + + + + TUF +
+ #
A Framework for Securing Software Update Systems
![Build](https://github.com/theupdateframework/python-tuf/actions/workflows/ci.yml/badge.svg) From 57497433acf4ff96e617e5e6416d7996fab0a576 Mon Sep 17 00:00:00 2001 From: shubhusion Date: Mon, 17 Jun 2024 13:50:33 +0530 Subject: [PATCH 12/21] added assets Signed-off-by: shubhusion --- tuf-horizontal-black.png | Bin 0 -> 28488 bytes tuf-horizontal-white.png | Bin 0 -> 25827 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 tuf-horizontal-black.png create mode 100644 tuf-horizontal-white.png diff --git a/tuf-horizontal-black.png b/tuf-horizontal-black.png new file mode 100644 index 0000000000000000000000000000000000000000..13991ae24a1aeef448e79281d1abf90c5c811b71 GIT binary patch literal 28488 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 POcsC1=;E96wtxH=VTDQ8 literal 0 HcmV?d00001 From 05636ff1556a5f63ec1a2a36d5e475affa199a2b Mon Sep 17 00:00:00 2001 From: shubhusion Date: Mon, 17 Jun 2024 15:43:36 +0530 Subject: [PATCH 13/21] added assets Signed-off-by: shubhusion --- cncf-black.png | Bin 0 -> 26379 bytes cncf-white.png | Bin 0 -> 22789 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 cncf-black.png create mode 100644 cncf-white.png diff --git a/cncf-black.png b/cncf-black.png new file mode 100644 index 0000000000000000000000000000000000000000..c731dc4a938458d7624159484cbf3d34a77799a1 GIT binary patch literal 26379 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 Is>9p=16*`XW&i*H literal 0 HcmV?d00001 diff --git a/cncf-white.png b/cncf-white.png new file mode 100644 index 0000000000000000000000000000000000000000..9c3fd0760d49e2617d2eaded743b96e0f4991d44 GIT binary patch literal 22789 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 Z*tA;ba1ZaJ6#m`Q#L(2B4Ep@-{{R*8Tb}>` literal 0 HcmV?d00001 From 2ed1dd75fffc994b09f06c037f83b443d65d69aa Mon Sep 17 00:00:00 2001 From: SHUBHAM SHARMA <96301987+shubhusion@users.noreply.github.com> Date: Mon, 17 Jun 2024 13:56:04 +0530 Subject: [PATCH 14/21] Update README.md Signed-off-by: SHUBHAM SHARMA <96301987+shubhusion@users.noreply.github.com> Signed-off-by: shubhusion --- README.md | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index d744461007..375ab1b830 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,8 @@ -
- - - - TUF - -
+ + + + Shows an illustrated sun in light mode and a moon with stars in dark mode. + From 9db187070aba8f45a99d5f49ce5857286aa4d83b Mon Sep 17 00:00:00 2001 From: SHUBHAM SHARMA <96301987+shubhusion@users.noreply.github.com> Date: Mon, 17 Jun 2024 13:58:57 +0530 Subject: [PATCH 15/21] Update README.md Signed-off-by: SHUBHAM SHARMA <96301987+shubhusion@users.noreply.github.com> Signed-off-by: shubhusion --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 375ab1b830..6d168ac62d 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ - + Shows an illustrated sun in light mode and a moon with stars in dark mode. From 3b92e2a10bcf26917690e4951f7c037f721d8fc7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 17 Jun 2024 11:29:00 +0300 Subject: [PATCH 16/21] build(deps): bump the dependencies group with 2 updates (#2657) Bumps the dependencies group with 2 updates: [cryptography](https://github.com/pyca/cryptography) and [securesystemslib[crypto,pynacl]](https://github.com/secure-systems-lab/securesystemslib). Updates `cryptography` from 42.0.7 to 42.0.8 - [Changelog](https://github.com/pyca/cryptography/blob/main/CHANGELOG.rst) - [Commits](https://github.com/pyca/cryptography/compare/42.0.7...42.0.8) Updates `securesystemslib[crypto,pynacl]` from 1.0.0 to 1.1.0 - [Release notes](https://github.com/secure-systems-lab/securesystemslib/releases) - [Changelog](https://github.com/secure-systems-lab/securesystemslib/blob/main/CHANGELOG.md) - [Commits](https://github.com/secure-systems-lab/securesystemslib/compare/v1.0.0...v1.1.0) --- updated-dependencies: - dependency-name: cryptography dependency-type: direct:production update-type: version-update:semver-patch dependency-group: dependencies - dependency-name: securesystemslib[crypto,pynacl] dependency-type: direct:production update-type: version-update:semver-minor dependency-group: dependencies ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Signed-off-by: shubhusion --- requirements/pinned.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/requirements/pinned.txt b/requirements/pinned.txt index e99943bd74..6c9acae7a0 100644 --- a/requirements/pinned.txt +++ b/requirements/pinned.txt @@ -1,10 +1,10 @@ certifi==2024.6.2 # via requests cffi==1.16.0 # via cryptography, pynacl charset-normalizer==3.3.2 # via requests -cryptography==42.0.7 # via securesystemslib +cryptography==42.0.8 # via securesystemslib idna==3.7 # via requests pycparser==2.22 # via cffi pynacl==1.5.0 # via securesystemslib requests==2.32.3 -securesystemslib[crypto,pynacl]==1.0.0 +securesystemslib[crypto,pynacl]==1.1.0 urllib3==2.2.1 # via requests From 7d14072e3c13c1bbbdf0c1ce5f11ef5f461bfeb4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 10 Jun 2024 21:37:15 +0000 Subject: [PATCH 17/21] build(deps): bump ruff in the test-and-lint-dependencies group Bumps the test-and-lint-dependencies group with 1 update: [ruff](https://github.com/astral-sh/ruff). Updates `ruff` from 0.4.7 to 0.4.8 - [Release notes](https://github.com/astral-sh/ruff/releases) - [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md) - [Commits](https://github.com/astral-sh/ruff/compare/v0.4.7...v0.4.8) --- updated-dependencies: - dependency-name: ruff dependency-type: direct:production update-type: version-update:semver-patch dependency-group: test-and-lint-dependencies ... Signed-off-by: dependabot[bot] Signed-off-by: shubhusion --- requirements/lint.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements/lint.txt b/requirements/lint.txt index bfd5f19df4..e5c51c8eac 100644 --- a/requirements/lint.txt +++ b/requirements/lint.txt @@ -6,5 +6,5 @@ # Lint tools # (We are not so interested in the specific versions of the tools: the versions # are pinned to prevent unexpected linting failures when tools update) -ruff==0.4.7 +ruff==0.4.8 mypy==1.10.0 From e38fc175fa6cd02e37f49e3b32cfb0890eafdf99 Mon Sep 17 00:00:00 2001 From: SHUBHAM SHARMA <96301987+shubhusion@users.noreply.github.com> Date: Mon, 17 Jun 2024 15:46:53 +0530 Subject: [PATCH 18/21] Update README.md Signed-off-by: SHUBHAM SHARMA <96301987+shubhusion@users.noreply.github.com> Signed-off-by: shubhusion --- README.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 6d168ac62d..1c740d87cf 100644 --- a/README.md +++ b/README.md @@ -128,10 +128,15 @@ This material is based upon work supported by the National Science Foundation un + --- [![](https://img.shields.io/badge/Move%20to%20Top-%E2%86%91%20Back%20to%20Top-blue)](#a-framework-for-securing-software-update-systems) From c7f1d97f96874ee7087a4b75122227232e981ada Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 3 Jun 2024 21:29:20 +0000 Subject: [PATCH 19/21] build(deps): bump the test-and-lint-dependencies group with 2 updates Bumps the test-and-lint-dependencies group with 2 updates: [coverage](https://github.com/nedbat/coveragepy) and [ruff](https://github.com/astral-sh/ruff). Updates `coverage` from 7.5.2 to 7.5.3 - [Release notes](https://github.com/nedbat/coveragepy/releases) - [Changelog](https://github.com/nedbat/coveragepy/blob/master/CHANGES.rst) - [Commits](https://github.com/nedbat/coveragepy/compare/7.5.2...7.5.3) Updates `ruff` from 0.4.5 to 0.4.7 - [Release notes](https://github.com/astral-sh/ruff/releases) - [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md) - [Commits](https://github.com/astral-sh/ruff/compare/v0.4.5...v0.4.7) --- updated-dependencies: - dependency-name: coverage dependency-type: direct:production update-type: version-update:semver-patch dependency-group: test-and-lint-dependencies - dependency-name: ruff dependency-type: direct:production update-type: version-update:semver-patch dependency-group: test-and-lint-dependencies ... Signed-off-by: dependabot[bot] --- requirements/lint.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements/lint.txt b/requirements/lint.txt index e5c51c8eac..bfd5f19df4 100644 --- a/requirements/lint.txt +++ b/requirements/lint.txt @@ -6,5 +6,5 @@ # Lint tools # (We are not so interested in the specific versions of the tools: the versions # are pinned to prevent unexpected linting failures when tools update) -ruff==0.4.8 +ruff==0.4.7 mypy==1.10.0 From 2bbac046ced2f1d7c373b2e9cb85e044679fa01b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 10 Jun 2024 21:37:15 +0000 Subject: [PATCH 20/21] build(deps): bump ruff in the test-and-lint-dependencies group Bumps the test-and-lint-dependencies group with 1 update: [ruff](https://github.com/astral-sh/ruff). Updates `ruff` from 0.4.7 to 0.4.8 - [Release notes](https://github.com/astral-sh/ruff/releases) - [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md) - [Commits](https://github.com/astral-sh/ruff/compare/v0.4.7...v0.4.8) --- updated-dependencies: - dependency-name: ruff dependency-type: direct:production update-type: version-update:semver-patch dependency-group: test-and-lint-dependencies ... Signed-off-by: dependabot[bot] Signed-off-by: shubhusion --- requirements/lint.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements/lint.txt b/requirements/lint.txt index bfd5f19df4..e5c51c8eac 100644 --- a/requirements/lint.txt +++ b/requirements/lint.txt @@ -6,5 +6,5 @@ # Lint tools # (We are not so interested in the specific versions of the tools: the versions # are pinned to prevent unexpected linting failures when tools update) -ruff==0.4.7 +ruff==0.4.8 mypy==1.10.0 From 1ee2d7a8278a586b64662f116f848e0969a17d0e Mon Sep 17 00:00:00 2001 From: shubhusion Date: Sun, 28 Jul 2024 00:36:41 +0530 Subject: [PATCH 21/21] Fixed Readme Signed-off-by: shubhusion --- README.md | 45 ++------------------------------------------- 1 file changed, 2 insertions(+), 43 deletions(-) diff --git a/README.md b/README.md index 1c740d87cf..c74fec36ed 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,8 @@ - - - Shows an illustrated sun in light mode and a moon with stars in dark mode. + + Shows an illustrated sun in light mode and a moon with stars in dark mode. - - #
A Framework for Securing Software Update Systems
![Build](https://github.com/theupdateframework/python-tuf/actions/workflows/ci.yml/badge.svg) @@ -14,24 +11,6 @@ [![CII](https://bestpractices.coreinfrastructure.org/projects/1351/badge)](https://bestpractices.coreinfrastructure.org/projects/1351) [![PyPI](https://img.shields.io/pypi/v/tuf)](https://pypi.org/project/tuf/) [![OpenSSF Scorecard](https://api.securityscorecards.dev/projects/github.com/theupdateframework/python-tuf/badge)](https://api.securityscorecards.dev/projects/github.com/theupdateframework/python-tuf) -[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) -[![License: Apache 2.0](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0) - ---- - -## Table of Contents - -- [Introduction](#introduction) -- [About The Update Framework](#about-the-update-framework) -- [Key Features](#key-features) -- [Documentation](#documentation) -- [Installation](#installation) -- [Contact](#contact) -- [Security Issues and Bugs](#security-issues-and-bugs) -- [License](#license) -- [Acknowledgements](#acknowledgements) - ---- ## Introduction @@ -47,8 +26,6 @@ Python-TUF provides the following APIs: The reference implementation strives to be a readable guide and demonstration for those working on implementing TUF in their own languages, environments, or update systems. ---- - ## About The Update Framework The Update Framework (TUF) is a design that helps developers maintain the security of a software update system, even against attackers that compromise the repository or signing keys. TUF provides a flexible specification defining functionality that developers can use in any software update system or re-implement to fit their needs. @@ -57,8 +34,6 @@ TUF is hosted by the [Linux Foundation](https://www.linuxfoundation.org/) as par For more information about TUF, visit [TUF's website](https://theupdateframework.com/). ---- - ## Key Features - **Robust Security**: TUF ensures the security of software update systems, even in the face of compromise or supply chain attacks. It employs a variety of cryptographic techniques to guarantee the integrity and authenticity of software updates. @@ -66,8 +41,6 @@ For more information about TUF, visit [TUF's website](https://theupdateframework - **Production Usage**: TUF is utilized in production by various tech companies and open-source organizations, demonstrating its reliability and effectiveness in real-world scenarios. - **Variant Support**: TUF's variant, Uptane, is specifically designed to secure over-the-air updates in automobiles, showcasing its versatility and applicability across different domains. ---- - ## Documentation - [Introduction to TUF's Design](https://theupdateframework.io/overview/): Provides an overview of TUF's design principles and goals. @@ -77,14 +50,10 @@ For more information about TUF, visit [TUF's website](https://theupdateframework - [Miscellaneous Docs](https://github.com/theupdateframework/python-tuf/tree/develop/docs): Additional documentation covering various aspects of TUF implementation and usage. - [Python-TUF Development Blog](https://theupdateframework.github.io/python-tuf/): Provides insights, updates, and news related to Python-TUF development. ---- - ## Installation For installation instructions, please visit the [installation page](https://theupdateframework.readthedocs.io/en/latest/INSTALLATION.html). ---- - ## Contact ### Mailing List @@ -97,16 +66,12 @@ For installation instructions, please visit the [installation page](https://theu Questions, feedback, and suggestions are welcomed on our mailing list or the CNCF Slack channel. ---- - ## Security Issues and Bugs [![Security](https://img.shields.io/badge/Security%20Issues-SECURITY.md-red)](docs/SECURITY.md) If you encounter any security issues or bugs, please refer to the [security policy](docs/SECURITY.md) for reporting and guidelines. ---- - ## License [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) @@ -135,9 +100,3 @@ This material is based upon work supported by the National Science Foundation un - - ---- - -[![](https://img.shields.io/badge/Move%20to%20Top-%E2%86%91%20Back%20to%20Top-blue)](#a-framework-for-securing-software-update-systems) -