commit | ff5bf3fe591dd743d0a931f26730691131d56de1 | [log] [tgz] |
---|---|---|
author | pigweed-roller <pigweed-roller@pigweed-service-accounts.iam.gserviceaccount.com> | Mon May 06 00:44:30 2024 +0000 |
committer | CQ Bot Account <pigweed-scoped@luci-project-accounts.iam.gserviceaccount.com> | Mon May 06 00:44:30 2024 +0000 |
tree | 3d734af89c1c07017ae89a0af4209922e4065c5a | |
parent | 3390c321b830c1e60e84801884aa5d480f0f88e3 [diff] |
[third_party/pigweed/src] Roll 68 commits 825f89f0c2fd45d roll: bazel 178dee4d673a285 emboss: Update emboss repo to tag v2024.0501.21542 33da8827caa5441 pw_package: Suppress package progress messages 6c158d179f8e53b pw_log: Add core::fmt style format string support f2bfca90d64a6d4 pw_bluetooth: Remove hci_vendor 664cea90c2e3998 pw_transfer: Lock resource_responder_ access c3c31b852086eb2 docs: Update changelog 63761bcd7861acf pw_bluetooth_proxy: Reserve ACL LE slots from host 64d7ace864708ce pw_log: Rename Rust logging API to be less verbose 1f22c59e3a2f664 pw_log: Add Rust support for untyped strings c3d2877b7aa6c78 pw_rpc: Fix macro name in docs and comments d0ff89e952d68de pw_toolchain: Fix CMake build on macOS d5f3adeb5cafd73 pw_protobuf_compiler: Fix bazel failure if proto d fc8d0557e06a367 pw_protobuf_compiler: Add a no_prefix test ac388e7bdae6d03 pw_ide: Raise specific error on bad settings file 6920d0bb3b6898a pw_protobuf_compiler: Tests fail to build under cm 3aa838ba32d99bb pw_allocator: Improve namespacing 89c90454a256760 pw_toolchain: Add no-canonical-system-headers 59bc1cdc76fbc59 pw_allocator: Use singletons for stateless allocat 5b96d29bb8a6ff0 pw_digital_io_linux: Refactor test e59fb801bd8584c pw_build: Fix type hint 9cbecdc781e3706 pw_digital_io_linux: Remove OwnedFd::operator=(int 9818527a8610c7a pw_bluetooth_sapphire: Use hci_android.emb.h 1a7803b5be6ed6f third_party: Add missing libfit deps for Android 0b7dd705b9c1159 pw_bluetooth: Rename hci_vendor to hci_android (wi ae704b9dd8618ac pw_bluetooth: Add Vendor BQR subevent prefix 7b7d2fd94a5d29c pw_build: Add chipset constraint for imxrt500 fami 07d564b6cd7e9cd pw_presubmit: reST format end-of-file formatting 618d59adc376e67 pw_bluetooth: Add HCI informational commands 0a8168cbf0c950d pw_thread: Fix remaining compilability issues aa19504faca0b72 pw_web: Fix font colors in packaged version 31875b799730ab1 pw_toolchain: Register ARM m33 toolchains 58a09c188df0cc6 pw_async2: Add AllocateTask 8c5103f3da47d9c pw_grpc: Remove old constructor after migration 962861dc8e2714c pw_build: CMake recipe for the pw build command 5bda8d1632020bd pw_digital_io_linux: Move OwnedFd to its own heade 6fb2433c30e6733 pw_cpu_exception_cortex_m: Add util_test to tests 71017480adf7fb1 boringssl: Add cmake integration 63e6774b2b84f81 pw_bluetooth: Add header alias in command complete 58a80c6548797d2 pw_bluetooth_proxy: Rename ProcessH4* to HandleH4* e0a6e32b38b20eb pw_bluetooth_proxy: Rename passthrough_test.cc to ac1d46f720ff626 roll: clang-next b890f6af0b74e9a pw_web: Fix icons in packaged version 74efe356798f1e7 pw_tls_client: Add cmake facades 08d5e68858f9e26 pw_grpc: Support fragmented gRPC messages if an al b572538413b3dcc pw_bluetooth: Add Event Codes to emboss de89ebf66fe51fa pw_bluetooth: Add opcode_enum to command and respo e84673095f8d862 pw_bluetooth_proxy: Move ProxyHost methods to .cc 5c47f7009f66838 pw_bluetooth_proxy: Rename HciProxy to ProxyHost 26f064159c278b2 pw_bluetooth_proxy: Delete policies functionality e3a20766f69442f pw_bluetooth: Sync with recent APCF changes aa6b152d30aa3cc pw_rpc: Add private method for sending internal::P 299330f742b9c86 pw_transfer: Add resource_id to all GetResourceSta 73ed577762ec7ba pw_rust: Build examples in presubmit 829be4bfa88060d pw_web: Fix text download format a36109556535979 pw_bluetooth: Define Common Data Types 5f043974e7207fb pw_stream_uart_mcuxpresso: Add interrupt safe writ 4d23123c37a3363 npm: Update package-lock.json 33d6d7e04508964 pw_bluetooth: Add LoopbackCommandEvent 189b54cf33ff8e2 *: Run clang-format 53be9f9c6724a4f pw_bluetooth: Support Read RSSI command and event fa1938a64124d21 pw_assert: Fix support for print_and_abort in Baze 4f13eae7187e8ba pw_build: Add a `test_main` param to `pw_cc_test` 5e4e82bec8288b7 pw_thread_threadx: Remove unused dependency 51572a37f0c380b pw_env_setup: Update default sysroot version e0492ee7eaed1f4 roll: clang 73d4ddb4cb33de4 pw_allocator: Add missing return statement a1faba5d2d569a1 SEED-0129: Claim SEED number https://pigweed.googlesource.com/pigweed/pigweed third_party/pigweed/src Rolled-Commits: ccc5241d8133cd2..825f89f0c2fd45d Roller-URL: https://ci.chromium.org/b/8748732067150059489 GitWatcher: ignore CQ-Do-Not-Cancel-Tryjobs: true Change-Id: I014d74d317cdc792e52077a4409a1d026338b000 Reviewed-on: https://pigweed-review.googlesource.com/c/open-dice/+/208359 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>
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:
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.
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.
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.
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
.
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
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.
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.
The Google C++ Style Guide is used. A .clang-format
file is provided for convenience.
To incorporate the code into another project, there are a few options:
Copy only the necessary code. For example:
Take the main code as is: include/dice/dice.h, src/dice.c
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.
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.
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.
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.