roll: third_party/pigweed/src a02d053..aa22856 (96 commits)

aa22856:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/278096 roll: luci
d6d2201:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/278112 roll: python-wheel
36064b3:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/277932 sense: Add missing rp2350 instructions
7da28ca:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/277955 pw_bluetooth: Fix bits order in avdtp
b47d1ac:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/278034 pw_protobuf_compiler: Nanopb + descriptor.proto
5bd503e:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/277956 pw_ide: Remove settings file trigger for refresh
bfcbc2f:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/277895 pw_bluetooth_sapphire: Disable advertising via Android vendor extensions
b598c98:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/277232 pw_intrusive_ptr: Export the recyclable.h header
52c9c54:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/277896 pw_bluetooth_sapphire: Fix gap ubsan failures
db2c1d7:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/277592 pw_ide: Unprocessed compDB management
c0b3d6a:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/276072 pw_libc: Provide errno and stdio libc backends
d01ddf0:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/277853 pw_bluetooth_proxy: Test channel not having recombine space
bab3948:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/277553 pw_bluetooth_proxy: Handle recombine of new channel with old id
f9f93dd:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/275913 docs: Clarify extern "C" and (void) parameter lists
4207345:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/277616 pw_i2c_mcuxpresso: Add ResetAddressing() that executes the i3c RSTDAA
1ea604f:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/277615 pw_i2c_mcuxpresso: Add Get/SetMaxReadLength i3c common command codes
820c417:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/277614 pw_i2c_mcuxpresso: Add static addressing option, dynamic optional
32e290b:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/277613 pw_i2c_mcuxpresso: Fix mutex and repeated start condition for CCC reads
2d204c8:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/276794 pw_async2: Add size reports for async2 primitives
e6f2293:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/277855 pw_ide: Expect bazel projects to also have a BUILD.bazel in root
6a36094:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/277854 pw_bloat: Add enable_if argument to GN template
0822879:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/277532 pw_ide: Distinguish duplicate targets
1af8e0f:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/276476 pw_bluetooth_proxy: Handle channel dtor during recombination
0f62a5e:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/275693 pw_ide: Use clangd rule from @pigweed directly
d932875:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/277552 docs: Explain Label in style guide
a7a3cbe:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/272594 pw_ide: Replace compile command refresh with custom implementation
8e2ae80:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/277852 pw_bluetooth_sapphire: Fix l2cap_fuzzer timeout with 1MB input data
24596e9:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/276935 bazel: Switch to Python 3.12
9b00f1a:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/275714 pw_kernel: Add colors and visual cleanups to console output
69aedd9:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/277792 pw_env_setup: Update watchdog
7fbccd0:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/277753 pw_toolchain: Provide pw_InfiniteLoop in C++
62025f5:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/277493 pw_bluetooth_proxy: Remove connection reuse log
322d5ee:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/277354 pw_allocator: Fix implicit conversions
8317acb:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/277514 pw_kernel: Rename qemu-virt directory to qemu_virt
2eda860:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/277355 pw_bloat: Wrap macro label paths with Label()
c9a75e8:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/277012 pw_async2: Avoid transitive includes; remove unused code
c14573c:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/276615 pw_bluetooth_proxy: Clarify and check usage of recombine pdu variables
a839dfe:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/276894 pw_async2: Restructure as typical facade
f4acd96:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/277352 pw_kernel: Remove use of chipset constraint
99169d1:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/276614 pw_bluetooth_proxy: Correct label to connection in logs
b2745aa:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/276613 pw_bluetooth_proxy: Move locked l2cap channel to its own file
099968f:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/276612 pw_bluetooth_proxy: Fix ordering of deps in targets
37f59a3:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/276593 pw_bluetooth_proxy: Fix extra/missing header includes
29acdc3:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/276475 pw_bluetooth_proxy: Move Direction enum to common header
8d5564b:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/276899 pw_bluetooth_proxy: Remove MultiBufWriter
560ea15:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/276898 pw_bluetooth_proxy: Update Recombiner to not use MultiBufWriter
ad02ea3:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/276933 pw_bluetooth_proxy: Add tests for recombiner
1090603:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/276934 pw_bluetooth_proxy: Correct IFTTT in CmakeLists.txt
24094e8:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/276574 pw_bluetooth_proxy: Move Recombiner class to its own file
8bc1db5:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/276474 pw_bluetooth_proxy: Track progress inside Recombiner
6c0f81a:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/276473 pw_bluetooth_proxy: Separate recombine IsComplete from multibuf read
8f74673:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/276573 pw_bluetooth_proxy: Move recombine tracking to its own class
b0aecdb:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/277013 pw_bluetooth_sapphire: Fix PeerFuzzer
e68cccd:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/276994 pw_kernel: Combine cortex-m and riscv unittest_runner
50b3024:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/276592 pw_bluetooth_proxy: Add more checks in recombination
8fee4cf:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/276895 pw_toolchain: Add example of clang-tidy setup
399d669:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/276832 pw_{rpc, protobuf}: Fix bash script error
b8d0c77:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/276893 pw_async2: Move dispatcher_lock() to pw::async2::impl namespace
4e25af0:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/276753 bazel: Shorten nanopb repo name
382464c:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/277132 pw_tokenizer: Enable conversion warnings in Bazel
a3d0ae7:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/276572 pw_bluetooth_proxy: Moved GetLockedChannel to subroutine
ac2c854:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/276393 pw_bluetooth_proxy: Add TODO to handle not having space for recombine
1bfa6aa:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/276993 pw_kernel: Combine cortex-m and riscv entry points
775445d:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/276992 pw_kernel: Refactor targets for consistency
29e6e1e:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/276494 pw_kernel: Don't tick scheduler before there are tasks to run
64d117c:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/276493 pw_kernel: Add preempt disabling/rescheduling on WakeQueue::wake_one
7c91661:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/276492 pw_kernel: Add current_thread accessors
0f7fc56:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/274972 pw_tokenizer: Correctly detect target os for Rust linker section
43f76d0:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/276896 bazel: Remove remote caching workaround
1486c7c:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/275178 pw_tokenizer: Enable conversion warning as error
53668ea:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/276032 pw_kernel: Add RISC-V scaffolding
f0e1180:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/276932 pw_toolchain: Remove llvm_toolchain_device
99d7c40:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/275177 pw_tokenizer: Fix conversion warnings
82b6374:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/276754 bazel: Enable -Wconversion by default
85faf90:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/276892 pw_toolchain: Document conversion_warnings feature
0f049d6:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/276793 pw_toolchain: Add conversion_warnings feature
b466e7c:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/276752 pw_kernel: Allow trailing commas in log_if! API
4c4249c:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/275175 pw_elf: Enable conversion warning as error
466384b:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/276792 pw_toolchain: Remove llvm_toolchain_macos
c64aca0:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/275174 pw_elf: Fix conversion warnings in reader_impl
1ee626d:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/276732 build: Add .vscode/ to .bazelignore
892b65c:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/276453 pw_rpc_transport: Remove unused header
2dba9b7:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/276733 MODULE.bazel: Tweak qemu reference
5a5a2d7:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/270212 pw_bluetooth_sapphire: Set ISO packet sequence number
7bcb789:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/276552 pw_bluetooth: Add IsEnabled() API
c550290:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/257914 pw_rpc: Add benchmark tools, echo service, and a sim instance
2e233e7:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/274914 pw_kernel: Use pw_assert instead of core macros
99a318c:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/274913 pw_kernel: Add initial assert API
6f10067:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/276472 build: Upgrade bazel qemu prebuilt
3aba99c:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/276452 docs: Add missing RP2350 tab to Sense factory tutorial
3a2d151:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/276374 pw_bluetooth_sapphire: Fix fuzzer timeouts
ef8dad6:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/276392 pw_bluetooth_sapphire: Change MemoryAvailable to MemoryAvailableForSlots
834a3d8:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/273813 pw_fuzzer: Fix googletest bazel config
1fbd499:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/274072 pw_bluetooth_sapphire: Handle invalid RSSI in inquiry event
0e3733b:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/265639 pw_bluetooth_sapphire: Support Controller packet filter offloading
40459ab:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/276372 pw_result: Fix typo in docs

Rolled-Repo: https://pigweed.googlesource.com/pigweed/pigweed
Rolled-Commits: a02d053a6f7326..aa2285683111b0
Roll-Count: 1
Roller-URL: https://cr-buildbucket.appspot.com/build/8719559839620414049
GitWatcher: ignore
CQ-Do-Not-Cancel-Tryjobs: true
Change-Id: I7898dca4918a0360273005990d55511291da2c08
Reviewed-on: https://pigweed-review.googlesource.com/c/open-dice/+/278099
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: 89a56c4cbbbc0b8cd989b25fd397a7a1b0ade4f7
  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.