roll: third_party/pigweed/src a9df994..2c9dee1 (87 commits)

2c9dee1:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/267845 roll: luci
f8d76c2:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/268295 roll: python-wheel
2dc03a3:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/268294 roll: ninja
4500636:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/265628 bazel: Remove obsolete noclangtidy tags
d29ece7:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/263512 pw_span: Add span_cast<T>
264303d:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/268153 pw_env_setup: Remove gsutil from PATH
416b03b:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/267933 pw_kernel: Add utility library for declaring registers
a4e659b:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/265252 roll: bazel 8.1.0
92d6b23:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/268052 pw_build: Enable policy if CMP0174 if available
4167b59:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/268132 pw_containers: Add missing include
ef8c646:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/267872 pw_bluetooth_sapphire: Remove packed definitions
7ee5190:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/264638 pw_allocator: Add bucket size reports
bfc7d9e:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/267936 pw_protobuf_compiler: Symlink options to proto root
f27dd15:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/267972 pw_toolchain: Make NoDestructor trivially destructible when possible
1650a4b:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/267813 pw_containers: Make size_reports more reusable
7ab1856:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/267292 pw_interrupt_freertos: Add pw_interrupt backend for FreeRTOS
0481c3f:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/267215 pw_ide: Natively process compDBs in VS Code
4b8b525:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/267572 pw_bluetooth_sapphire: Wait for LE Pairing in SSP
3fc29bc:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/264637 pw_allocator: Add size reports for blocks
4fc31df:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/266040 pw_bluetooth_sapphire: Handle BR/EDR CTKD in SM after connection
2e41749:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/267932 pw_kernel: Make optimized build the default
335316a:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/267335 pw_build: Add pw_py_importable_runfile
d1c3488:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/267793 CMake: Set policy to silence warnings; make minimum versions consistent
04fb4db:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/262853 pw_log_null: Prevent asserts being routed to pw_log_null
e1d73a0:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/267812 pw_sync: Remove chrono dependency from borrow.h
5f8f25b:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/264636 pw_allocator: Refactor size reports
fb3288a:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/267033 pw_ide: Detect & configure build system support
4bfb4e5:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/267514 pw_kernel: Add unittests for new list routines
8335a60:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/267513 pw_kernel: Add assert_ne to unittests
9808716:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/267336 pw_kernel: Basic context switch for cortex-m and scheduler
a8a94ac:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/259657 pw_ide: Read legacy settings files
7cee22f:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/267792 pw_toolchain: Add linker options for the Cortex-A35 toolchain
057c218:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/267772 pw_tokenizer: Remove invalid argument from CMake custom command
b568955:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/260218 pw_bluetooth_sapphire: Support solicitation uuids in scan filters
eec66b2:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/267614 docs: Add guidance for extending Python imports
fe7961c:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/267512 pw_toolchain: Infinite loop function
551ff04:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/267515 pw_bluetooth_proxy: Remove unused includes
32bbaba:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/267518 pw_bluetooth_proxy: Test close and reset across all channel types
318a909:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/264640 pw_containers: Add size reports
4474c41:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/267517 pw_bluetooth_proxy: Support event_fn in GATT channels
8237d75:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/267516 pw_bluetooth_proxy: Allow designated init of rfcomm config fields
e1e82ce:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/267272 pw_bluetooth_sapphire: Fix incoming BR/EDR connection stats
34fafbc:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/267312 pw_span: Add dependency on pw_assert
0fbebfb:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/267652 pw_bloat: Provide macros to prevent unwanted optimization
02bf6f4:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/267613 docs: Break out Python style guide
0da60b1:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/266593 pw_bluetooth_proxy: Improve multibuf_writer_test naming
544d741:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/266993 pw_bluetooth_sapphire: Create StartingEncryption phase in SM
d8e5ff1:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/266592 pw_bluetooth_proxy: Clarify MultiBufWriter::IsComplete() behavior
d5e8ce4:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/265393 pw_bluetooth_proxy: Erase AclConnections on disconnection
9a89696:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/267532 Revert "pw_bluetooth_proxy: Create ClientChannel base class"
a761cf1:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/266996 pw_bluetooth_proxy: Create ClientChannel base class
c5edf98:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/267233 pw_stream_uart_mcuxpresso: Use module constraint
4da3dda:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/267216 Revert "pw_bluetooth: Fix rssi values to be signed integers"
df4de4b:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/267333 pw_toolchain: Allow core_intrinsics in stable Rust toolchain
b393232:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/267332 pw_env_setup: Include hidden packages in check
63fde05:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/267232 pw_kernel: Add cheat sheet docs
6aeb739:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/266272 pw_bluetooth_sapphire: Wait for BR/EDR pairing to complete in SM
0a223d3:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/266912 pw_bloat: Add Bazel size report rule for single binary
f85f008:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/267015 pw_rust: Add --config support to gen_rust_project
f5ee80b:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/267014 pw_toolchain: Adjust stable Rust toolchain to work with gen_rust_project
7892387:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/267192 pw_build: Clean up docs headings
a3ebd8f:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/267193 pw_stream_uart_mcuxpresso: Intro module constraint
85ff31d:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/266973 pw_kernel: Remove strict kernel target compatibility
e1e39f1:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/267034 pw_bluetooth: Add A2DP AAC codec parser
d51bce4:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/266974 pw_bluetooth: Add A2DP SBC parser
9ea3210:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/260973 pw_ide: Add VSC end-to-end extension testing
cb8a650:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/267032 pw_docgen: Fix links to published SEEDs
e5ae6ad:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/266914 bazel: Run sanitizers with googletest config too
f8ca28d:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/266039 pw_thread_stl: CMake build for thread creation backend
08bb4c4:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/266992 pw_presubmit: Add cpp formatting support for Bazel
18479f6:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/266994 pw_rpc: Remove misplaced comment
bb018f0:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/267012 pw_thread: Handle div by zero in thread analyzer
f9a09e0:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/266894 pw_rpc: Formatting fix
7af59d4:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/261395 pw_unit_test: Standardize Bazel interface
17a5e76:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/260220 pw_bluetooth_sapphire: Move scan_id into LowEnergyDiscoverySession
5b8a5c5:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/260219 pw_bluetooth_sapphire: Pass offloaded packet filter support down stack
a76d73e:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/259934 pw_ide: Enable most VSC commands for bootstrap
2368964:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/266972 .*: Replace spurious gtest.h includes
f27457d:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/266893 pw_bluetooth_sapphire: clang-tidy fix
72b0188:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/264517 pw_log: Switch to PW_CONSTEXPR_TEST to improve coverage
c4e6e1f:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/266133 roll: Clang
ce36b90:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/266135 pw_bluetooth_sapphire: Remove SecurityManager::AssignLongTermKey
5f5ef63:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/239732 pw_build_mcuxpresso: Generate Bazel/GN rules from github SDK
f8b2c52:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/266032 pw_bluetooth_sapphire: Fix clang-tidy warning
7ece4db:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/266753 roll: cipd
ea358b7:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/266752 roll: go
05e746f:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/266433 roll: buildifier

Rolled-Repo: https://pigweed.googlesource.com/pigweed/pigweed
Rolled-Commits: a9df994246205c..2c9dee1dd3a940
Roll-Count: 1
Roller-URL: https://cr-buildbucket.appspot.com/build/8722730740428781281
GitWatcher: ignore
CQ-Do-Not-Cancel-Tryjobs: true
Change-Id: I3b1d7d46a07a85a55b64ded4883611df50eb16ec
Reviewed-on: https://pigweed-review.googlesource.com/c/open-dice/+/268492
Bot-Commit: Pigweed Roller <pigweed-roller@pigweed-service-accounts.iam.gserviceaccount.com>
Commit-Queue: Pigweed Roller <pigweed-roller@pigweed-service-accounts.iam.gserviceaccount.com>
Lint: Lint 🤖 <android-build-ayeaye@system.gserviceaccount.com>
1 file changed
tree: bbb022e14d1162e26e22374b0ff83d00e502e785
  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 --recursive
$ 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.