roll: third_party/pigweed/src f7bd104..6813be6 (129 commits)

6813be6:https://pigweed.googlesource.com/pigweed/pigweed/+/6813be695aacc3d41e4989b42000705c991f4836 pw_rpc2: Standardize internal logging
3f2ee37:https://pigweed.googlesource.com/pigweed/pigweed/+/3f2ee3788d1d4b306907b63332b33c26c9133cdd docs: Use PW_LOG_ERROR in library logs
66fc1c1:https://pigweed.googlesource.com/pigweed/pigweed/+/66fc1c16206f64a57cf06d71a98d37a1033ebe21 pw_result: Add pw::Optional<T>
4507bf8:https://pigweed.googlesource.com/pigweed/pigweed/+/4507bf83a6fbcdf189afb026e015f76767a5abe9 pw_ghish: Route git fetch via Gerrit auth fallback
b3336c4:https://pigweed.googlesource.com/pigweed/pigweed/+/b3336c4196de94d13488f57b0bff3792b174c743 pw_ghish: Unify Gerrit Git push transport fallback
1e5dda8:https://pigweed.googlesource.com/pigweed/pigweed/+/1e5dda8326350e8da4bf3c762088e54187aa00a0 pw_preprocessor: Add PW_ATTRIBUTE_PREFERRED_NAME
1751829:https://pigweed.googlesource.com/pigweed/pigweed/+/17518295bd70b40cab3baef0dd861dee556bfb79 docs: Hardcode Google Analytics ID across all subsites
2a165b8:https://pigweed.googlesource.com/pigweed/pigweed/+/2a165b8c77b14f97958ad93e0a345c1879d21cbc pw_bluetooth_proxy: Remove spammy log for RFCOMM PDUs sent to host
a4281a3:https://pigweed.googlesource.com/pigweed/pigweed/+/a4281a390490b51a953236bb1715a01579fd1f9a pw_ghish: Refuse untrusted Code-Review votes
5a7636b:https://pigweed.googlesource.com/pigweed/pigweed/+/5a7636bb0eff8fb5e8437b39194d42501a149b2b pw_ghish: Cache Corp SSO sessions in runtime dir
a00d32c:https://pigweed.googlesource.com/pigweed/pigweed/+/a00d32c34d5890a78e3c72b9e39b73aac4ce4702 pw_ghish: Report Corp SSO Gerrit auth status
aa271f6:https://pigweed.googlesource.com/pigweed/pigweed/+/aa271f61b3749c26010c61a80151897893ec40a9 pw_ghish: Route Googler Gerrit REST via Corp SSO
c4e141b:https://pigweed.googlesource.com/pigweed/pigweed/+/c4e141b08c5268431b18c59894a16e7c8d2ec42a pw_ghish: Add CorpSSOStrategy for Gerrit auth
fd9e3c7:https://pigweed.googlesource.com/pigweed/pigweed/+/fd9e3c7a10bbc05acc26acd96c9038990003e140 pw_ghish: Add Corp SSO credential minting
fac3899:https://pigweed.googlesource.com/pigweed/pigweed/+/fac3899fa75140401cbeb82a3719bc9dd3fe21c9 pw_ghish: Centralize gosso helpers in gosso.go
0242661:https://pigweed.googlesource.com/pigweed/pigweed/+/0242661459ef1269f547337883d57e6c3edfaf67 pw_ghish: Migrate Issue Tracker client to HTTPAuthStrategy
ab9bd48:https://pigweed.googlesource.com/pigweed/pigweed/+/ab9bd4804797b3a4720d61a457bfc3eb19cf09ab pw_ghish: Migrate Busytown client to HTTPAuthStrategy
1014dd5:https://pigweed.googlesource.com/pigweed/pigweed/+/1014dd57961935992214df461d651ac9f9509828 pw_ghish: Migrate LUCI client to HTTPAuthStrategy
ce51519:https://pigweed.googlesource.com/pigweed/pigweed/+/ce515199bd1ae6e08a6921ee3adaabab5be8bf3e pw_bluetooth_sapphire: Reject GATT chrcs outside service range
2508dc7:https://pigweed.googlesource.com/pigweed/pigweed/+/2508dc762bab58e1b2ad8c678a7b310d17fd2a11 pw_ghish: Introduce HTTPAuthStrategy and migrate GerritClient
c68463c:https://pigweed.googlesource.com/pigweed/pigweed/+/c68463c71afe1215693ba5e0e012d24e01089171 pw_env_setup: Support activating shared environment in worktrees
fd40bda:https://pigweed.googlesource.com/pigweed/pigweed/+/fd40bda1d9f49aeccf4a51bb5eca37512593dfb9 pw_cli: Add Depends-on footers in pw requires
a491c01:https://pigweed.googlesource.com/pigweed/pigweed/+/a491c01141ec815cd7d7fcb20a296ddfc2409651 pw_rpc2: Add Python service descriptors
9c0d892:https://pigweed.googlesource.com/pigweed/pigweed/+/9c0d89236faa21e4b4b04c208b042999f840a027 python: Fix Pylint errors for Python 3.14
107bc36:https://pigweed.googlesource.com/pigweed/pigweed/+/107bc36c67951cd4a245478cc3bf1d49ee8b600f agents: Add session setup and notes file to learn-pigweed
aa4060d:https://pigweed.googlesource.com/pigweed/pigweed/+/aa4060daabd66dd3247e939f32ffa456fd183821 pw_transport: Make reliable listeners and connectors convertible
65f96e3:https://pigweed.googlesource.com/pigweed/pigweed/+/65f96e38c14cec37fc400c482cfb491946171896 docs: Remove downstream disclaimers in C++ style guide
eb211c4:https://pigweed.googlesource.com/pigweed/pigweed/+/eb211c4a3893b79843ea4530bbfcad24bced5814 docs: Update build and architecture docs for parallel assembly
0f92957:https://pigweed.googlesource.com/pigweed/pigweed/+/0f92957454ddfa0331d90d03a1ed3a11ba0ccd64 docs: Assemble Sphinx, Doxygen, and rustdoc in parallel
2d5fab1:https://pigweed.googlesource.com/pigweed/pigweed/+/2d5fab140b56c237c80bcd24afcff11a0428ec04 docs: Add site assembly rule and CLI
0404b60:https://pigweed.googlesource.com/pigweed/pigweed/+/0404b60ce2498049f21d78399fe7c5466c232b90 docs: Extract standalone site postprocessing helpers
b521067:https://pigweed.googlesource.com/pigweed/pigweed/+/b5210672d6d2532ed7958c4f6ab9672ec89e3d2d pw_toolchain: Constrain bare-metal Rust targets to os:none
19fb978:https://pigweed.googlesource.com/pigweed/pigweed/+/19fb9781445589dffa8544757fbd50c306834999 pw_bluetooth_sapphire: Close loopback FIDL bindings on peer close
616f6f6:https://pigweed.googlesource.com/pigweed/pigweed/+/616f6f69e05a0eb513f8b72ec9c7f1e60fe6377f pw_allocator: Add GetAllocatedBytes
8fd182b:https://pigweed.googlesource.com/pigweed/pigweed/+/8fd182bc0c9442eca13c3cd9bd136cab070b4fd3 pw_rpc2: Add Python packet encoding and decoding
dbda477:https://pigweed.googlesource.com/pigweed/pigweed/+/dbda4772c92e05f00737c81527c9dd328a7b84a0 roll: rust-analyzer
14526ac:https://pigweed.googlesource.com/pigweed/pigweed/+/14526ac9c8d58f3067146265573d23057a081e77 pw_rpc2: Move pw_rpc2_test.proto to pw_rpc2/
5fa7f39:https://pigweed.googlesource.com/pigweed/pigweed/+/5fa7f39b3a636619401b3fccbf535ab92cf8b1b3 pw_protobuf: Remove deprecated legacy Find APIs
2af063e:https://pigweed.googlesource.com/pigweed/pigweed/+/2af063e061ce2fc8db8c1f8a785ba56770511855 clang-tidy: Remove non-facade IWYU export pragmas
af76c13:https://pigweed.googlesource.com/pigweed/pigweed/+/af76c136c39146461f940019b9aabd9185c421cd bazel: Roll rules_python to 2.4.6
bcccb98:https://pigweed.googlesource.com/pigweed/pigweed/+/bcccb9895ac14bd93a3d7fb5d2b40557b659ac17 pw_env_setup: Pin _PW_ACTUAL_ENVIRONMENT_ROOT to install_dir
04e7895:https://pigweed.googlesource.com/pigweed/pigweed/+/04e7895a286a29ceaa8971b54ff64cf65646fc65 pw: Locate bazelisk via shared environment in git worktrees
4b4ee40:https://pigweed.googlesource.com/pigweed/pigweed/+/4b4ee40fe349f5cb653c9a6b964a88acab747b13 pw_env_setup: Avoid redundant git config writes on activation
14c5e02:https://pigweed.googlesource.com/pigweed/pigweed/+/14c5e023ce76f1b92c4376757fa42da0e5e800ba pw_env_setup: Remove PATH entries in pure POSIX shell
50cf4bc:https://pigweed.googlesource.com/pigweed/pigweed/+/50cf4bc462827ecc6d85acd1b205447dc455c546 docs: Update C++ module structure for cpp/ layout
4cf10b4:https://pigweed.googlesource.com/pigweed/pigweed/+/4cf10b4ba34bedfcd61c3d03e865fd1c5ce1285f pw_bluetooth_sapphire: Set SC in Security Request
9944d74:https://pigweed.googlesource.com/pigweed/pigweed/+/9944d74c38e03ebac802082759d782c2a4825ce6 pw_bluetooth_sapphire: Enforce SC-Only key rules
51cfb51:https://pigweed.googlesource.com/pigweed/pigweed/+/51cfb514055bb8a2d0c88d3096adaf433854586a pw_bluetooth_sapphire: Gate EndPhase2 on key ready
cafcb14:https://pigweed.googlesource.com/pigweed/pigweed/+/cafcb1437857896906bc8c9a387601e8d07e63ae pw_bluetooth_sapphire: Serialize dual-mode pairing
31fc59d:https://pigweed.googlesource.com/pigweed/pigweed/+/31fc59d25988f13d0c8cbbcbd9ba3cfc24a47f06 pw_bluetooth_sapphire: Drop CIPD MCU workaround
d7931ac:https://pigweed.googlesource.com/pigweed/pigweed/+/d7931accb58479b84563dafc9ca394777bd0cab2 pw_bluetooth_sapphire: Clean up StartingEncryption
e21bf77:https://pigweed.googlesource.com/pigweed/pigweed/+/e21bf7763475a456efdcc49dafb651ef952b3be1 pw_presubmit: Always use host/llvm Zephyr toolchain
d6f5840:https://pigweed.googlesource.com/pigweed/pigweed/+/d6f58404d469a1b4757f3596b7293496d43dc8a4 roll: zephyr
1d6c3dc:https://pigweed.googlesource.com/pigweed/pigweed/+/1d6c3dc36cbab594ad4818e9953c9468a101009b pw_i2c_zephyr: Fix initiator_test build with newer Zephyr
34bff61:https://pigweed.googlesource.com/pigweed/pigweed/+/34bff615becdbddf7de88bd7199838168b81fbde pw_bluetooth_sapphire: Fix SM callback UAFs
82c13dd:https://pigweed.googlesource.com/pigweed/pigweed/+/82c13ddd57bafffa2b4253084f3526a5324cfea4 pw_presubmit, pw_package: Fix Zephyr roll
27d27a8:https://pigweed.googlesource.com/pigweed/pigweed/+/27d27a8c68e675c9dfaab5b12763769700907f79 docs: Read Doxygen groups from index.tag in module_metadata
344e22a:https://pigweed.googlesource.com/pigweed/pigweed/+/344e22a2a1dfd1e9566fb45b39f1dfbfa7f61188 docs: Separate Doxygen tagfile output and pass sync paths via args
2d54880:https://pigweed.googlesource.com/pigweed/pigweed/+/2d54880b3416b919eef42918a8b172a45914f547 docs: Make Doxygen output deterministic and drop unused search
1af15d2:https://pigweed.googlesource.com/pigweed/pigweed/+/1af15d20945d2bc92025e37ccb0c656aeda51150 docs: Remove unused Doxygen XML output
de0ef90:https://pigweed.googlesource.com/pigweed/pigweed/+/de0ef90dcd409b634826776618426945497a5278 pw_rpc: Add DynamicCallPtr for deferred deletion
9920b65:https://pigweed.googlesource.com/pigweed/pigweed/+/9920b6517ff2889a2eefe742fec9a5f62cc26ac7 pw_toolchain: Generate Rust Linux cross toolchains
d5a5598:https://pigweed.googlesource.com/pigweed/pigweed/+/d5a5598ba44ca438219a29a02fb4edf3df7c95a2 pw_kernel: Drop the A extension from the veer target
9296225:https://pigweed.googlesource.com/pigweed/pigweed/+/9296225127c762eb9e9366be6ae4f78c079a7970 pw_assert: Rename pw_assert_backend_std to core
2533fdd:https://pigweed.googlesource.com/pigweed/pigweed/+/2533fdd7d9751c157c99b06dd7491d8f8f5eb22f pw_toolchain: Let host_clang cross-compile Linux
941f7fd:https://pigweed.googlesource.com/pigweed/pigweed/+/941f7fd573ee936f940b187a55d36242c47ef355 pw_build: Add non-root module and leak tests
c08e04b:https://pigweed.googlesource.com/pigweed/pigweed/+/c08e04be897edfc085c73a6409115d3e743b68bc pw_bloat: Trim Bazel runfiles for pw_bloat
de4f1af:https://pigweed.googlesource.com/pigweed/pigweed/+/de4f1afc5b071bff1c01978476235b1cb745e2c9 pw_result: Align Result with std::optional
dd2d565:https://pigweed.googlesource.com/pigweed/pigweed/+/dd2d565e04eabf8aef0f8318e63cbf481f4b3826 docs: Fix and reject uncategorized Doxygen groups
f060b87:https://pigweed.googlesource.com/pigweed/pigweed/+/f060b8754b234dbfc0c213abbdfcab5499dcc549 pw_ghish: Skip LOAS credential helpers on GOOGLE_ROLE=laptop
2e42bdb:https://pigweed.googlesource.com/pigweed/pigweed/+/2e42bdb6a6e3e4f72585ed0cf74e7ef17cb541e3 pw_kernel: Make ForeignRc ref-count test portable
a1fea58:https://pigweed.googlesource.com/pigweed/pigweed/+/a1fea5851ee6e2e88ea45c35f219a28d1e0a9a7a bazel: Add Python toolchain and pip hub versions
9c91e11:https://pigweed.googlesource.com/pigweed/pigweed/+/9c91e11b0d474d8f6f85a6d9d6f265d6bad99690 pw_rpc2: Move Echo example expected output files into echo/
6eac8fb:https://pigweed.googlesource.com/pigweed/pigweed/+/6eac8fb505f91fae82c2e2dfdf64a906f6b31d09 pw_kernel: Add enable_tests to system_image
3aa8792:https://pigweed.googlesource.com/pigweed/pigweed/+/3aa8792708bb2aadaf4bacb1ad876404799f1bf4 pw_kernel: Gate ForeignRc test on native atomics
4d6d59b:https://pigweed.googlesource.com/pigweed/pigweed/+/4d6d59b16665b5d2fa6ff237a01ed5f3231d20a9 pw_rpc2: Migrate status, error, and packet type enums to TOML
99745c0:https://pigweed.googlesource.com/pigweed/pigweed/+/99745c0c0977248655a3586b646aabeda20cb52e third_party: Use -isystem for public headers in GN
5e989d0:https://pigweed.googlesource.com/pigweed/pigweed/+/5e989d06cb1aca4b0488662fc9ca69636fbe47cd pw_bluetooth_proxy: Check request_handle_ before using channel_ in async
2847219:https://pigweed.googlesource.com/pigweed/pigweed/+/2847219f45d7bb679cd1be555347dd07cbec3f1b pw_bluetooth_proxy: Check remote_cid collisions in RegisterChannelLocked
3a8e629:https://pigweed.googlesource.com/pigweed/pigweed/+/3a8e62937a879f06ae93d443d5dd106a6dbfb320 pw_presubmit: Add fast reST syntax and code-block check
dd62029:https://pigweed.googlesource.com/pigweed/pigweed/+/dd62029c594b6c9e00140230bf2368e1c51d514b pw_presubmit: Fix code-block option indentation in RstFormatter
9bdaf0a:https://pigweed.googlesource.com/pigweed/pigweed/+/9bdaf0aaf374f703de4ada4f22274b564d4a3b9a pw_bluetooth_sapphire: Guard InitializeConnection RefFunc with WeakPtr
70afdff:https://pigweed.googlesource.com/pigweed/pigweed/+/70afdff5aae873602e35db65fdf6f10174313a64 pw_bluetooth_sapphire: Drop bt-host devfs use
508c1d7:https://pigweed.googlesource.com/pigweed/pigweed/+/508c1d72682cbbb69152732c2c9c4b988eb5ef4e pw_enum: Document TOML and JSON enums and add examples
f207aae:https://pigweed.googlesource.com/pigweed/pigweed/+/f207aaeaff7a65c371ea201c74e3fb0c97741522 pw_bluetooth_sapphire: Guard InitializeConnection against re-entrancy
fa23199:https://pigweed.googlesource.com/pigweed/pigweed/+/fa23199cb0fbbe783ef4bde815dab08ada7bb60d pw_enum: Support TOML and JSON enums in GN and CMake
50ddce7:https://pigweed.googlesource.com/pigweed/pigweed/+/50ddce7612de9861e878481234ea568043af32ce pw_enum: Add Bazel rules for TOML and JSON enums and tests for them
5e7d2b9:https://pigweed.googlesource.com/pigweed/pigweed/+/5e7d2b9cb99e620a1e94a836a788fd82f1b9da91 pw_protobuf: Add CopyAndDiscardCallbacks
3527dbe:https://pigweed.googlesource.com/pigweed/pigweed/+/3527dbe1f3bfb124fa42bb23aa4a88c46eb1d197 pw_tokenizer: Clear buffers in csv.rs
33dc43f:https://pigweed.googlesource.com/pigweed/pigweed/+/33dc43fffe49f712cd3f34a6ea869a48a8934322 pw_kernel: Compile apps inside system_image
cdb1e84:https://pigweed.googlesource.com/pigweed/pigweed/+/cdb1e8460a2016f3419ab392fe79cb0e24a2bbb8 pw_bluetooth_sapphire: Remove SDP security level
2c0928f:https://pigweed.googlesource.com/pigweed/pigweed/+/2c0928f9034aaad34a5512d58ae0faba3c15ce4b pw_transfer: Migrate C/C++ API reference to Doxygen
2f98408:https://pigweed.googlesource.com/pigweed/pigweed/+/2f98408af2665c4560c007d7bcaf8a6f3b59240d pw_toolchain: Allow root pw_cxx_toolchain tags
eddec7c:https://pigweed.googlesource.com/pigweed/pigweed/+/eddec7c1782fe8e8ba0e69c672efa3b7807503b5 pw_software_update: Inline VerifyEcdsaSignature
e4c7a5b:https://pigweed.googlesource.com/pigweed/pigweed/+/e4c7a5b21e379a6efb81485b3c597ac538e4d756 pw_bluetooth_sapphire: Ignore notifications below first GATT service
00ab9c0:https://pigweed.googlesource.com/pigweed/pigweed/+/00ab9c0a106acbee79a8479cdc77c19cd269e31c pw_bluetooth_sapphire: Validate GATT peripheral preferred conn params
69718df:https://pigweed.googlesource.com/pigweed/pigweed/+/69718dfa63aeeade1dbf3f5cd75d690e26a815e3 pw_software_update: Reduce DoVerify stack usage
54195a4:https://pigweed.googlesource.com/pigweed/pigweed/+/54195a422fba305c38e397b201a7f1d168649559 pw_bluetooth_sapphire: Add bt-hci-virtual.cm
aa83dd1:https://pigweed.googlesource.com/pigweed/pigweed/+/aa83dd17cf9c7b7c3d9ea681f74d192fb435263b pw_bluetooth: Fix hci_android.emb batch scan size
9c364e7:https://pigweed.googlesource.com/pigweed/pigweed/+/9c364e7a4d7e52e8d7f07a0d51dd0cb0137d6a49 agents: Require explicit invocation of learn-pigweed
c831fec:https://pigweed.googlesource.com/pigweed/pigweed/+/c831fece36c881090f2d6da66c22773263b59b42 pw_bluetooth_proxy: Tolerate a null error handler in SniffOffloadManager
88b0d07:https://pigweed.googlesource.com/pigweed/pigweed/+/88b0d076da7885295d38c6e0f128d9e34c697f6e pw_bluetooth_sapphire: Remove stale IRK when LE bond data changes
f96998d:https://pigweed.googlesource.com/pigweed/pigweed/+/f96998dcf9d3b0377d13d17b92be16fc146fba98 bazel: Mark dev-only MODULE.bazel declarations
44c9fe7:https://pigweed.googlesource.com/pigweed/pigweed/+/44c9fe7818180f76a97b3d6167cd489b4fb32572 pw_ghish: Migrate in-memory auth caches onto tiered Cache
70b65c0:https://pigweed.googlesource.com/pigweed/pigweed/+/70b65c0dbc409dd6fde0d9499c6410de984dec6e pw_ghish: Introduce tiered Cache and migrate self-account cache
37d156f:https://pigweed.googlesource.com/pigweed/pigweed/+/37d156fc6f47f33be03473f94e4a8eee0af25232 pw_enum: Generate C++ and Python enums from TOML or JSON
b1bbb43:https://pigweed.googlesource.com/pigweed/pigweed/+/b1bbb43bc448462bfb4bab25e9185b745a0848df roll: python-wheel
743800e:https://pigweed.googlesource.com/pigweed/pigweed/+/743800e79b00ad7278c73cfe6db5e45554d59535 pw_ghish: Default Buganizer to corp endpoint via gosso
cb06d6b:https://pigweed.googlesource.com/pigweed/pigweed/+/cb06d6b127b7de5ce2c0d8880a572928dd42064f pw_ghish: Drop Buganizer GCP quota-project probing and fallbacks
8c9b46f:https://pigweed.googlesource.com/pigweed/pigweed/+/8c9b46f1a992a01b55f795c0462cd5f4eaeff706 pw_ghish: Use HTTP PUT for CreateHotlistEntry
fa20109:https://pigweed.googlesource.com/pigweed/pigweed/+/fa201094acf3e80c3dcd4339573e6859023f7678 pw_ghish: Remove unused LUCIClient wrapper methods
6d3362c:https://pigweed.googlesource.com/pigweed/pigweed/+/6d3362c6bb80a36bd78ea859439662af22c32ec8 pw_ghish: Share one luci-auth token across services and drop gcloud
a141f4f:https://pigweed.googlesource.com/pigweed/pigweed/+/a141f4fd7169a5bb8446bef4e24511fffa335b83 pw_ghish: Remove go-gerrit and legacy Gerrit auth transports
621648b:https://pigweed.googlesource.com/pigweed/pigweed/+/621648b44b085b01c9a800d589c78178cec3d823 python: Remove lingering pre-3.10 compatibility workarounds
8a127f0:https://pigweed.googlesource.com/pigweed/pigweed/+/8a127f0c07da1fa89ea398d488cd14a2b652e168 doxygen: Exclude _* symbols and clarify @cond
3f3a077:https://pigweed.googlesource.com/pigweed/pigweed/+/3f3a077da71541a715089166fd3682e03b6aea82 python: Adopt Python 3.11 stdlib and typing idioms
4116f80:https://pigweed.googlesource.com/pigweed/pigweed/+/4116f8058e2b29febf0601d13c11e1c81e872e0c python: Resolve Python 3.11 TODOs and version checks
b7b037a:https://pigweed.googlesource.com/pigweed/pigweed/+/b7b037ad4129af4fe341db8757d5dfbd642a0a44 agents: Add learn-pigweed teaching skill
72e78ca:https://pigweed.googlesource.com/pigweed/pigweed/+/72e78ca607b7cea8010193fd3a8e3215647bfbcc python: Use standard library tomllib and drop tomli/toml
3be4ea1:https://pigweed.googlesource.com/pigweed/pigweed/+/3be4ea1e7b8c3e46ac672b4466f0570cd85a9eea pw_bluetooth_sapphire: Bound WindowedInspectNumericProperty queue
2d4ea2c:https://pigweed.googlesource.com/pigweed/pigweed/+/2d4ea2c78aa1ee612c575593918e9bfbe1c7f8bb bazel: Replace $(location) with $(execpath)
6e7dfed:https://pigweed.googlesource.com/pigweed/pigweed/+/6e7dfedf04bbeec4ed854c6271331bfb418dc7fb pw_protobuf: Mark parser accessors const
1b36bce:https://pigweed.googlesource.com/pigweed/pigweed/+/1b36bce6acc23ce9bf3b11a6ed6bda73c736258f pw_bluetooth_sapphire: Bound incoming ISO data queue in IsoStream
22a04d2:https://pigweed.googlesource.com/pigweed/pigweed/+/22a04d22f6255f2b5556cc5d72c759f05b1e751f pw_transport: Rename ForwardingDatagramSocket to ForwardingSocket
406e2cc:https://pigweed.googlesource.com/pigweed/pigweed/+/406e2cca0f83c20214aee4939e44c34638055750 docs: Use pwrev.dev instead of pwrev for CL links
db8d4df:https://pigweed.googlesource.com/pigweed/pigweed/+/db8d4df6e58e5bf07d444238200e3e9fe82c9a5f pw_bluetooth_sapphire: Fix UAF on failed CIS establishment
165bf64:https://pigweed.googlesource.com/pigweed/pigweed/+/165bf64fe5c7c84b13e8c63ac13a9b8e554ca2cc pw_toolchain: Remove redundant libcore dep
ffdee8f:https://pigweed.googlesource.com/pigweed/pigweed/+/ffdee8fea91722c4253e50a15b44e9549d363d85 pw_time: Select default Rust time backend via constraint
8e1f98f:https://pigweed.googlesource.com/pigweed/pigweed/+/8e1f98fe194884ba84e4b20d07bd2b86ea768e8d roll: buildifier

Rolled-Repo: https://pigweed.googlesource.com/pigweed/pigweed
Rolled-Commits: f7bd10420da33d..6813be695aacc3
Roll-Count: 1
Roller-URL: https://cr-buildbucket.appspot.com/build/8665654646465923249
GitWatcher: ignore
CQ-Do-Not-Cancel-Tryjobs: true
Change-Id: Icdecf46a88259af57d9af43740edaab81e924991
Reviewed-on: https://pigweed-review.googlesource.com/c/open-dice/+/525385
1 file changed
tree: 50666d6c8f25503e7383a5822dcf2198c7223db0
  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.