commit | 9ff0ddb86c3357763027bcb176e082f5ce179a67 | [log] [tgz] |
---|---|---|
author | pigweed-roller <pigweed-roller@pigweed-service-accounts.iam.gserviceaccount.com> | Mon Mar 04 00:43:43 2024 +0000 |
committer | CQ Bot Account <pigweed-scoped@luci-project-accounts.iam.gserviceaccount.com> | Mon Mar 04 00:43:43 2024 +0000 |
tree | 904aea9532384050efaad35921d33c802091ac11 | |
parent | 5f53b1bd56068fa3b3834a2e651e023fb3f43f20 [diff] |
[third_party/pigweed/src] Roll 45 commits ea93eb586cad181 pw_multibuf: Deduplicate const+non_const iterators 731239b6ed7f3c7 pw_multibuf: Clean up API 6da9d6f3be9f314 pw_string: Support InlineBasicString<std::byte>; I 65ff5c3ac772677 pw_bluetooth: Add hci_data.emb 312412b466c5118 pw_web: Capture browser logs in the log viewer 5ce9ca7349c2469 bootstrap: Warn about Windows case-sensitivity sup f25eb6ab8c1d4cc pw_toolchain_bazel: Support Windows in toolchain t 6bbe3599f021969 docs: Clarify rvalue docs 25069b4047a57f3 pw_bluetooth: Add ISO feature bit to controllers b45cf66960471b7 pw_libc: Add stdfix target a34ea92cad00ee7 pw_rust: Add Rust tokenized logging example 70eae9f48da58eb pw_allocator: Remove split_free_list_allocator.cc 6a1b2e4920556e0 pw_libc: Facilitate next llvm-libc roll 1c993470e827d03 pw_result: Add constructor deduction guide ad40c5f7cb65f17 pw_assert_log: Depend on pw_log_headers in Android cf062ce10841003 pw_rpc_transport: Add log for no packet available 58e754ea92e9ed8 pw_stream_uart_mcuxpresso: Fix code examples in do f4e6db77b1ae6c0 pw_transfer: Only request a single chunk in test f816e851eec8000 pw_assert_log: Fix PW_HANDLE_CRASH to handle 0 arg c76277cc6e7c7ea roll: clang-next 75809db522a27fe pw_allocator: Add missing dep 2a3d10804995f5b pw_tokenizer: Fix missing bazel filegroup 518bb002c55ebb9 pw_async2: Add converting constructors to Poll 6b0b9c2f3ca1b6c pw_stream_uart_mcuxpresso: Implement DoRead DMA 3ca23db2114f542 pw_stream_uart_mcuxpresso: Implement DoWrite DMA 6992b4612b3a18a pw_stream_uart_mcuxpresso: Implement init / deinit fef14dcb5e4615e pw_sync: Allow implict conversion when moving Borr b10b18a6800a187 pw_allocator: Use BlockAllocator instead of altern 73892fa16303e22 pw_stream_uart_mcuxpresso: USART DMA scaffolding 837563b4de97b83 pw_bluetooth: Add ISO definitions to Controller eb4a400f6004b68 pw_json: Update example; fix typo and declaration ba1c16c185f0f3b third_party: Android.bp: Export fuchsia_sdk_lib_st 02d9eea12c0e172 pw_build: Fix ProjectBuilder recipe percentage f0da8850b48b1b0 pw_multibuf: Add +=N and +n operators to iterator 5e33ad5c30e0f1f pw_log: Show child docs in site nav fbd7625e11bc103 docs: Reorder tocdepth and title e7ad04fb98a2093 pw_multibuf: Add slicing operations to MultiBuf 2423b1d51274848 docs: Prefer rvalue references 55dcce2af4ea7e5 pw_containers: Rename VariableLengthEntryQueue 17c586758a74044 pw_containers: Rename VariableLengthEntryQueue fil e589acdd101d978 pw_containers: VariableLengthEntryQueue C++ API 44a57f1aae6e911 pw_transfer: Fix WindowPacketDropper proxy filter 614d94afb734817 pw_tokenizer: Add Detokenizer constructor with elf 1ea2d051c56f0ad docs: Update changelog 544a7b57c35e116 Revert "roll: clang" https://pigweed.googlesource.com/pigweed/pigweed third_party/pigweed/src Rolled-Commits: 154897dd5f6d239..ea93eb586cad181 Roller-URL: https://ci.chromium.org/b/8754439676994519537 GitWatcher: ignore CQ-Do-Not-Cancel-Tryjobs: true Change-Id: I41c4f436485ea5859f78a0327e89ab13db20caa2 Reviewed-on: https://pigweed-review.googlesource.com/c/open-dice/+/194830 Commit-Queue: Pigweed Roller <pigweed-roller@pigweed-service-accounts.iam.gserviceaccount.com> Bot-Commit: Pigweed Roller <pigweed-roller@pigweed-service-accounts.iam.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.