roll: third_party/pigweed/src a5a1995..6ad0bec (72 commits)

6ad0bec:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/238772 roll: gn
80ed6d9:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/238625 roll: ninja
04de174:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/238626 roll: 310, 311
d7d1066:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/238622 roll: cmake
1acb4f5:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/238619 roll: host, aarch64-unknown-linux-gnu, x86_64-unknown-linux-gnu, aarch64-apple-darwin, x86_64-apple-darwin, thumbv7m-none-eabi
5d9a1e8:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/238554 pw_log: Remove unused macro PW_MODULE_LOG_NAME_DEFINED
77f7b45:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/238318 bazel: Register C++ toolchains for root only
300cd1c:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/238513 Revert "pw_log_fuchsia: Add syslog dep to pw_log_fuchsia"
8f18755:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/234312 docs: Add fixed point blog
801fb32:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/237972 pw_async2: Refactor Dispatcher to raise top-level API out of CRTP
90d0137:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/216272 bazel: Clean up for-migration-only alias
adbc840:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/237913 bazel: Update rules_python to v0.36.0
42cff57:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/238552 pw_log_fuchsia: Add syslog dep to pw_log_fuchsia
d31705b:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/238533 pw_uart: Move non-blocking methods from Uart to UartBase
14204b5:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/238532 pw_uart: Add uart_non_blocking_test to GN build
2a0f0df:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/236723 pw_thread: Migrate from pw::thread::Thread to pw::Thread
a9f2d91:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/237915 pw_toolchain: Move fuchsia_clang toolchains to pw_toolchain
6422c9a:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/238189 pw_presubmit: Have docs_build check rust docs
e26be58:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/238272 pw_tokenizer: Expose API to define new token entry
30dcf2b:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/237933 pw_metric: Emit valid JSON from Metric::Dump
9243851:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/237993 pw_preprocessor: Expand PW_MACRO_ARG_COUNT to 256 arguments
24e98d0:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/238291 bazel: Replace remote_default_platform_properties
d3b17f3:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/237414 pw_bluetooth_sapphire: Add TODO for ScopedGlobalLogger
953f4f9:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/238132 pw_async2: Fix coroutine CMake compilation
e81cd5e:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/237934 docs: Auto-link to Rust API references
d124a14:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/238171 pw_build: Fix bazel based presubmit running
88e2a70:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/237935 pw_presubmit: Download intermediate Rust docs
0ca1822:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/238273 pw_bluetooth_sapphire: Fix bt_hci_virtual bind file name
5d7b3d1:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/238292 pw_containers: Fix Android.bp
7dc3b1b:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/238092 pw_uart: Add UartBase class
b4e7539:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/236268 pw_uart: Add ReadAtLeast and ReadExactly methods
f946f6a:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/210371 pw_uart: Add uart_non_blocking.h API
bbd82e3:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/238252 pw_rpc: Add --no-experimental-editions to protobuf compiler options
1dc9a78:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/237953 pw_uart: Add method to set flow control
0e5c336:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/237808 bazel: Upgrade bazel clang version to match the GN version
f107048:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/236796 pw_thread: Introduce pw::Thread and pw::Thread::id
3451332:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/238176 bazel: Retry build on remote cache evictions
ce337e5:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/237612 pw_containers: Fix intrusive map docs
d647f5e:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/238175 bazel: Sort the remote cache flags alphabetically
5c21dc8:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/237992 pw_bluetooth_sapphire: Document how to run Bazel Fuchsia tests
07636c2:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/236392 pw_build: Add -O and -g flags to rustflags
1f2a0fe:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/234671 pw_build: Add pw_rust_bindgen
819dd2c:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/237472 pw_containers: Multiple container example
cfa4da0:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/237932 pw_async2: Fix coroutine CMake+Windows compilation
bcda51c:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/237258 pw_bluetooth_proxy: Prevent flakes by zeroing arrays
8c7b094:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/237954 roll: bazel
a78ddd0:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/237914 pw_bluetooth_sapphire: Use shared variable for fuchsia_api_level
d5e8fff:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/237952 pw_toolchain: Fix sysroot data arg for clang-tidy
8b3ecac:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/236794 bazel: Specify a cache silo key
340d624:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/230831 pw_bluetooth: New Emboss L2CAP scheme
24baa12:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/237712 pw_bluetooth_sapphire: Specify bt-host.cm moniker
783b29c:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/236233 pw_spi_rp2040: Minor cleanup
846bb7d:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/234095 pw_async2: Expand docs with examples
94d2c39:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/237394 pw_uart_mcuxpresso: Fix disable bug
5bf0e36:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/237412 pw_bluetooth_sapphire: Document clangd configuration
ca679a2:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/236919 pw_uart_mcuxpresso: Simplify configuration struct
a4dab0b:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/230894 pw_allocator: Store TestHarness::Allocation inline
e81f65b:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/237513 pw_thread_freertos: Fix typo in tags
aaa6103:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/237592 pw_containers: Fix OOB array access in wrapped_iterator example
49c68b8:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/237512 pw_async2: Use Waker from Context in OnceSender
d95038e:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/237335 pw_rust: Add rust_tools for static_analysis
751a5ae:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/237334 pw_docgen: Include required Python packages
85469bd:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/236612 pw_containers: Add examples
1ad38f0:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/237312 pw_build_info: Fix constant name in documentation
92ab032:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/237415 pw_containers: Fix tree rebalancing
4c5e994:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/237432 pw_containers: Fix Android.bp for intrusive_list
d0e975b:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/237413 pw_env_setup: Update Windows Python constraints
1f2e4ef:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/235872 pw_presubmit: Add steps to upload Pigweed Python to pypi.org
fba0833:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/237333 pw_boot: Move main forward declaration out of extern "C" block
736eb4a:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/237132 bazel: Update Fuchsia SDK to 24.20240923.3.1
f848024:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/237332 pw_build: Move constraint/cortex-m to constraints/cortex_m
34ca6b7:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/237152 pw_bluetooth_sapphire: Upload bt-hci-virtual CIPD

Rolled-Repo: https://pigweed.googlesource.com/pigweed/pigweed
Rolled-Commits: a5a199593f1375..6ad0bec6ba3e92
Roller-URL: https://ci.chromium.org/b/8735414316053816513
GitWatcher: ignore
CQ-Do-Not-Cancel-Tryjobs: true
Change-Id: Ibd5edf5272e24c51d984918d4c75306e92c50a23
Reviewed-on: https://pigweed-review.googlesource.com/c/open-dice/+/238695
Bot-Commit: Pigweed Roller <pigweed-roller@pigweed-service-accounts.iam.gserviceaccount.com>
Lint: Lint 🤖 <android-build-ayeaye@system.gserviceaccount.com>
Commit-Queue: Pigweed Roller <pigweed-roller@pigweed-service-accounts.iam.gserviceaccount.com>
1 file changed
tree: e37e71d69425a4d945f5b4d57f393913f0f4a0e6
  1. build_overrides/
  2. docs/
  3. dpe-rs/
  4. images/
  5. include/
  6. src/
  7. third_party/
  8. toolchains/
  9. tools/
  10. .clang-format
  11. .gitignore
  12. .gitmodules
  13. .gn
  14. banner.txt
  15. bootstrap.sh
  16. BUILD.gn
  17. BUILDCONFIG.gn
  18. generate_test_values.py
  19. LICENSE
  20. navbar.md
  21. OWNERS
  22. pigweed.json
  23. pyproject.toml
  24. README.md
  25. run_fuzzer.sh
  26. rustfmt.toml
README.md

Open Profile for DICE

This repository contains the specification for the Open Profile for DICE along with production-quality code. This profile is a specialization of the Hardware Requirements for a Device Identifier Composition Engine and DICE Layering Architecture specifications published by the Trusted Computing Group (TCG). For readers already familiar with those specs, notable distinctives of this profile include:

  • Separate CDIs for attestation and sealing use cases
  • Categorized inputs, including values related to verified boot
  • Certified UDS values
  • X.509 or CBOR certificates

Mailing List

You can find us (and join us!) at https://groups.google.com/g/open-profile-for-dice. We're happy to answer questions and discuss proposed changes or features.

Specification

The specification can be found here. It is versioned using a major.minor scheme. Compatibility is maintained across minor versions but not necessarily across major versions.

Code

Production quality, portable C code is included. The main code is in dice.h and dice.c. Cryptographic and certificate generation operations are injected via a set of callbacks. Multiple implementations of these operations are provided, all equally acceptable. Integrators should choose just one of these, or write their own.

Tests are included for all code and the build files in this repository can be used to build and run these tests.

Disclaimer: This is not an officially supported Google product.

Thirdparty Dependencies

Different implementations use different third party libraries. The third_party directory contains build files and git submodules for each of these. The submodules must be initialized once after cloning the repo, using git submodule update --init, and updated after pulling commits that roll the submodules using git submodule update.

Building and Running Tests

Quick setup

To setup the build environment the first time:

$ git submodule update --init
$ source bootstrap.sh
$ gn gen out

To build and run tests:

$ ninja -C out

More details

The easiest way, and currently the only supported way, to build and run tests is from a Pigweed environment on Linux. Pigweed does support other host platforms so it shouldn't be too hard to get this running on Windows for example, but we use Linux.

There are two scripts to help set this up:

  • bootstrap.sh will initialize submodules, bootstrap a Pigweed environment, and generate build files. This can take some time and may download on the order of 1GB of dependencies so the normal workflow is to just do this once.

  • activate.sh quickly reactivates an environment that has been previously bootstrapped.

These scripts must be sourced into the current session: source activate.sh.

In the environment, from the base directory of the dice-profile checkout, run ninja -C out to build everything and run all tests. You can also run pw watch which will build, run tests, and continue to watch for changes.

This will build and run tests on the host using the clang toolchain. Pigweed makes it easy to configure other targets and toolchains. See toolchains/BUILD.gn and the Pigweed documentation.

Porting

The code is designed to be portable and should work with a variety of modern toolchains and in a variety of environments. The main code in dice.h and dice.c is C99; it uses uint8_t, size_t, and memcpy from the C standard library. The various ops implementations are as portable as their dependencies (often not C99 but still very portable). Notably, this code uses designated initializers for readability. This is a feature available in C since C99 but missing from C++ until C++20 where it appears in a stricter form.

Style

The Google C++ Style Guide is used. A .clang-format file is provided for convenience.

Incorporating

To incorporate the code into another project, there are a few options:

  • Copy only the necessary code. For example:

    1. Take the main code as is: include/dice/dice.h, src/dice.c

    2. Choose an implementation for crypto and certificate generation or choose to write your own. If you choose the boringssl implementation, for example, take include/dice/utils.h, include/dice/boringssl_ops.h, src/utils.c, and src/boringssl_ops.c. Taking a look at the library targets in BUILD.gn may be helpful.

  • Add this repository as a git submodule and integrate into the project build, optionally using the gn library targets provided.

  • Integrate into a project already using Pigweed using the gn build files provided.

Size Reports

The build reports code size using Bloaty McBloatface via the pw_bloat Pigweed module. There are two reports generated:

  • Library sizes - This report includes just the library code in this repository. It shows the baseline DICE code with no ops selected, and it shows the delta introduced by choosing various ops implementations. This report does not include the size of the third party dependencies.

  • Executable sizes - This report includes sizes for the library code in this repository plus all dependencies linked into a simple main function which makes a single DICE call with all-zero input. It shows the baseline DICE code with no ops (and therefore no dependencies other than libc), and it shows the delta introduced by choosing various ops implementations. This report does include the size of the third party dependencies. Note that rows specialized from ‘Boringssl Ops’ use that as a baseline for sizing.

The reports will be in the build output, but you can also find the reports in .txt files in the build output. For example, cat out/host_optimized/gen/*.txt | less will display all reports.

Thread Safety

This code does not itself use mutable global variables, or any other type of shared data structure so there is no thread-safety concerns. However, additional care is needed to ensure dependencies are configured to be thread-safe. For example, the current boringssl configuration defines OPENSSL_NO_THREADS_CORRUPT_MEMORY_AND_LEAK_SECRETS_IF_THREADED, and that would need to be changed before running in a threaded environment.

Clearing Sensitive Data

This code makes a reasonable effort to clear memory holding sensitive data. This may help with a broader strategy to clear sensitive data but it is not sufficient on its own. Here are a few things to consider.

  • The caller of this code is responsible for buffers they own (of course).
  • The ops implementations need to clear any copies they make of sensitive data. Both boringssl and mbedtls attempt to zeroize but this may need additional care to integrate correctly. For example, boringssl skips optimization prevention when OPENSSL_NO_ASM is defined (and it is currently defined).
  • Sensitive data may remain in cache.
  • Sensitive data may have been swapped out.
  • Sensitive data may be included in a crash dump.