https://boringssl.googlesource.com/boringssl.git/+log/8d19c850d4db..26e8a8acb91a

This picks up a couple *years* worth of BoringSSL changes. The main
relevant change here is that generate_build_files.py is no longer
needed! Everything it generated is now checked in BoringSSL proper,
including a GN source list.

$ git log 8d19c850d..26e8a8acb --date=short --no-merges --format='%ad %ae %s'
2025-08-22 davidben bssl-crypto: Fix Ed25519 SPKI parser to check key types
2025-07-09 agl Add a jitter entropy source.
2025-08-15 davidben Set an EVP_PKEY's algorithm and data together
2025-08-15 davidben Make some more half-empty EVP_PKEY states impossible
2025-08-14 davidben Limit EVP_PKEY_set_type to EVP_PKEY_X25519
2025-08-19 davidben Add a test that arbitrary curves can be wrapped in EVP_PKEY
2025-08-15 davidben Stop tracking an ENGINE in EVP_PKEY_CTX
2025-08-13 davidben Rename EVP_PKEY_METHOD to EVP_PKEY_CTX_METHOD
2025-08-15 davidben Pull the EC_GROUP_new_by_curve_name up into EVP_PKEY_CTX_set_ec_paramgen_curve_nid
2025-08-16 davidben Split evp_tests.txt into separate files
2025-08-16 davidben Add a test for SPKI and PKCS8 parsing with unknown algorithms
2025-08-20 chlily Fix markdown syntax in BUILDING.md
2025-08-17 davidben Test async BIO_flush and fix a corner case
2025-08-15 davidben Rename EVP_R_EXPECTING_AN_EC_KEY_KEY to match OpenSSL
2025-08-16 davidben Document the generators for all the MODP groups
2025-08-15 davidben Remove an old, impractical TODO
2025-08-15 davidben Say a bit more in docs about how to use EVP_PKEY_CTX
2025-08-18 davidben Bump version for BCR
2025-08-15 davidben Run through more code in PKCS#8 and SPKI parsers
2025-08-18 davidben Fix typo in comment
2025-08-17 davidben runner: Remove need for an AllCurves value
2025-08-14 davidben Remove redundant copy of EVP_PKEY type
2025-08-15 davidben Remove EVP_PKEY_print_* support for DSA
2025-08-15 davidben Don't support parameterless DSA keys in SPKIs
2025-08-15 davidben Add a couple more no-op compatibility functions
2025-08-14 davidben More consistently reset EVP_PKEYs in free_it
2025-08-14 davidben Unexport the Kyber implementation
2025-08-14 davidben Deprecate EVP_PKEY_set_type
2025-08-14 davidben Fix reference to public key in evp.h docs
2025-08-13 ellyjones pki: add PEMDecode and PEMDecodeSingle
2025-06-17 agl Switch to using a derivation function in CTR-DRBG.
2025-08-13 ellyjones pki: allow span<string_view> for allowed types in PEMTokenizer
2025-08-13 chlily Style guide: mention placement of & for reference types
2025-08-12 davidben Update releasing docs slightly
2025-08-12 chlily Implement MLKEM1024 for TLS
2025-08-06 agl delocate: support 4-bit tweak immediates for AArch64.
2025-08-08 davidben Add a discussion about callbacks to API Conventions
2025-06-17 agl Don't run CTR-DRBG in Kyber tests.
2025-08-07 agl Link to ACVP results for 20250728.
2025-08-07 davidben Bump Bazel deps and version for BCR
2025-08-05 chlily Expand BCM abbreviation in the FIPS.md documentation
2025-08-04 chlily Add IWYU export in nid.h file generated by objects.go
2025-08-04 chlily Fix documentation typo
2025-08-04 chlily Revert Rust config for 32-bit Linux CI/CQ bots
2025-08-04 chlily Run Rust recipe steps on Mac CI/CQ builders and 32-bit Linux
2025-07-31 chlily Run Rust recipe steps on "win64_rel" builder
2025-07-31 chlily Make Windows Rust try builder use a Release build
2025-07-29 chlily Add a default-off win64_rust try builder for testing
2025-07-28 chlily Run Rust recipe steps on "linux" builder
2025-07-28 agl Fix FIPS version number comment.
(...)
2023-09-01 alex.gaynor Return the correct value in EVP_CIPHER_CTX_iv_length after EVP_CTRL_AEAD_SET_IVLEN
2023-06-01 yukl Add X25519 bindings for bssl-crypto
2023-06-01 yukl Add ecdh and P256 bindings to bssl-crypto
2023-09-01 davidben Update the warnings on split handshakes and handshake hints
2023-09-01 davidben runner: Check that the shim HRRs echo the session ID
2023-09-01 davidben Reland "Build with C11 on MSVC in the standalone Bazel build"
2023-08-31 yukl Fix cargo clippy and fmt
2023-08-17 scw delocate: accept more directive expressions
2023-08-29 davidben Initialize libunwind cursors from the signal handler's ucontext_t
2023-08-24 davidben Remove another decltype(fclose)
2023-08-28 davidben Save trampoline state in unwind tests more straightforwardly
2023-08-29 davidben Explicitly mark saved registers with .cfi_restore
2023-08-28 bbe Remove undesired OPENSSL_EXPORT's in non-library code
2023-08-28 davidben Fix RBP-based unwind in fiat assembly
2023-08-28 bbe Remove another OPENSSL_EXPORT in an enum
2023-08-24 davidben Silence warn_unused_result warning on write() call
2023-08-25 bbe Remove OPENSSL_EXPORT from enum in fillins/net_errors.h
2023-08-25 bbe Ensure OPENSSL_EXPORT is only on the class not methods.
2023-08-24 bbe Add pki file lists to generated gn build files
2023-06-05 nwadih Add Rust bindings to AES_CTR through EVP_* cipher API's
2023-08-24 davidben Export CBS/CBB unicode functions
2023-08-24 bbe rename fillins/string_util.h because gn is special
2023-08-24 bbe rename fillins/base64.c to handle gn being special
2023-08-24 davidben Also suppress OPENSSL_LINUX for nanolibc
2023-08-24 davidben Add BN_bn2lebinpad and BN_lebin2bn
2023-08-17 davidben Use a callable type for ScopedFILE in settings_writer.cc
2023-06-02 nwadih Add Rust bindings to AES-GCM through the EVP_AEAD_* APIs
2023-08-18 davidben Deduplicate the three copies of OBJ_cmp
2023-08-17 bbe Remove header file accidentally added to sources.cmake
2023-08-17 bbe Sync pki to chromium d740199e083b70d13506973c6f479f0b01165a05
2023-07-25 bbe Move the fuzzers into the fuzz directory and make them build.
2023-08-16 davidben Fix typo in .size directives for aesni_gcm_encrypt
2023-08-16 bbe Hook in ocsp into libpki, and run the ocsp unit tests.
2023-08-16 bbe Update pki to chromium cf9a08ff8be3a3f2d5b13693cc13ef22ab7ee618
2023-08-16 bbe Make a BSSL_CHECK that always aborts
2023-05-19 nwadih Add rust bindings to AES-GCM-SIV through the EVP_AEAD_* API's
2023-08-14 davidben Add EVP_HPKE_KEY_move
2023-08-11 davidben Default to q = (p-1)/2 for DH keygen
2023-08-15 davidben Remove the CRYPTO_is_*_capable_at_runtime indirection
2023-08-14 davidben Select SHA-256 vs SHA-512 explicitly in perlasm
2023-08-14 davidben Hash-to-curve is now RFC 9380
2023-08-14 bbe Add the rest of the new test data files to sources.cmake
2023-08-11 davidben Align DH keygen with NIST's formulation when q is available
2023-08-14 bbe add missing test file to sources.cmake
2023-07-27 davidben Consistently reject large p and large q in DH
2023-08-14 bbe use <errno.h> instead of <sys/errno.h>
2023-08-11 davidben Document and test DH_generate_key's weird key reuse behavior
2023-08-14 bbe Sync pki to chromium 8049b24a3fa617e66c5d3fc0e9322bb07c500f49
2023-07-31 bbe Add a basic sanity test for getentropy() if we are using it.
2023-07-20 yich Add ChromeOS EC related targets

Created with:
  roll-dep third_party/boringssl/src

Change-Id: Ibfb51bca122dc6ed2cffa76fe1d2a79e4a1e47fe
Reviewed-on: https://chromium-review.googlesource.com/c/openscreen/+/6881127
Reviewed-by: Jordan Bayles <jophba@chromium.org>
Commit-Queue: Jordan Bayles <jophba@chromium.org>
170 files changed
tree: 14a240429acd62c5a55bea24c315f8f5ba9f0342
  1. build_overrides/
  2. cast/
  3. discovery/
  4. docs/
  5. gni/
  6. infra/
  7. osp/
  8. platform/
  9. test/
  10. testing/
  11. third_party/
  12. tools/
  13. util/
  14. .clang-format
  15. .gitignore
  16. .gitmodules
  17. .gn
  18. .vpython3
  19. AUTHORS
  20. BUILD.gn
  21. codereview.settings
  22. DEPS
  23. LICENSE
  24. OWNERS
  25. PRESUBMIT.py
  26. PRESUBMIT_test_mocks.py
  27. README.md
README.md

Open Screen Library

The Open Screen Library implements the Open Screen Protocol, Multicast DNS and DNS-SD, and the Chromecast protocols (discovery, application control, and media streaming).

The library consists of feature modules that share a common platform API that must be implemented and linked by the embedding application.

The major feature modules in the library can be used independently and have their own documentation:

Getting the code

Installing depot_tools

Library dependencies are managed using gclient, from the depot_tools repo.

To get gclient, run the following command in your terminal:

    git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git

Then add the depot_tools folder to your PATH environment variable.

Note that openscreen does not use other features of depot_tools like repo or drover. However, some git-cl functions do work, like git cl try, git cl format, git cl lint, and git cl upload.

Checking out code

From the parent directory of where you want the openscreen checkout (e.g., ~/my_project_dir), configure gclient and check out openscreen with the following commands:

    cd ~/my_project_dir
    gclient config https://chromium.googlesource.com/openscreen
    gclient sync

The first gclient command will create a default .gclient file in ~/my_project_dir that describes how to pull down the openscreen repository. The second command creates an openscreen/ subdirectory, downloads the source code, all third-party dependencies, and the toolchain needed to build things; and at their appropriate revisions.

Syncing your local checkout

To update your local checkout from the openscreen reference repository, just run

   cd ~/my_project_dir/openscreen
   git pull
   gclient sync

This will rebase any local commits on the remote top-of-tree, and update any dependencies that have changed.

Build setup

The following are the main tools are required for development/builds.

  • Installed by gclient automatically
    • Build file generator: gn (installed into buildtools/)
    • Code formatter: clang-format (installed into buildtools/)
    • Builder: ninja
    • Compiler/Linker: clang
  • Installed by you
    • JSON validator: yajsv
    • libstdc++
    • gcc
    • XCode

yajsv installation

  1. Install go from https://golang.org or your Linux package manager.
  2. go install github.com/neilpa/yajsv@latest

libstdc++ (Linux only)

Ensure that libstdc++ 8 is installed, as clang depends on the system instance of it. On Debian flavors, you can run:

   sudo apt-get install libstdc++-8-dev libstdc++6-8-dbg

XCode (Mac only)

You can install the XCode command-line tools only or the full version of XCode.

xcode-select --install

gcc (optional, Linux only)

Setting the gn argument is_clang=false on Linux enables building using gcc instead.

  mkdir out/debug-gcc
  gn gen out/debug-gcc --args="is_clang=false"

Note that g++ version 9 or newer must be installed. On Debian flavors you can run:

  sudo apt-get install gcc-9

Debug build

Setting the gn argument is_debug=true enables debug build.

  gn gen out/debug --args="is_debug=true"

gn configuration

Running gn args opens an editor that allows to create a list of arguments passed to every invocation of gn gen. gn args --list will list all of the possible arguments you can set.

  gn args out/debug

Building targets

We use the Open Screen Protocol demo application as an example, however, the instructions are essentially the same for all executable targets.

  mkdir out/debug
  gn gen out/debug             # Creates the build directory and necessary ninja files
  ninja -C out/debug osp_demo  # Builds the executable with ninja
  ./out/debug/osp_demo         # Runs the executable

The -C argument to ninja works just like it does for GNU Make: it specifies the working directory for the build. So the same could be done as follows:

  ./gn gen out/debug
  cd out/debug
  ninja osp_demo
  ./osp_demo

After editing a file, only ninja needs to be rerun, not gn. If you have edited a BUILD.gn file, ninja will re-run gn for you.

We recommend using autoninja instead of ninja, which takes the same command-line arguments but automatically parallelizes the build for your system, depending on number of processor cores, amount of RAM, etc.

Also, while specifying build targets is possible while using ninja, typically for development it is sufficient to just build everything, especially since the Open Screen repository is still quite small. That makes the invocation to the build system simplify to:

  autoninja -C out/debug

For details on running osp_demo, see its README.md.

Building all targets

Running ninja -C out/debug gn_all will build all non-test targets in the repository.

gn ls --type=executable out/debug will list all of the executable targets that can be built.

If you want to customize the build further, you can run gn args out/debug to pull up an editor for build flags. gn args --list out/debug prints all of the build flags available.

Building and running unit tests

  ninja -C out/debug openscreen_unittests
  ./out/debug/openscreen_unittests

Contributing changes

Open Screen library code should follow the Open Screen Library Style Guide.

This library uses Chromium Gerrit for patch management and code review (for better or worse). You will need to register for an account at chromium-review.googlesource.com to upload patches for review.

The following sections contain some tips about dealing with Gerrit for code reviews, specifically when pushing patches for review, getting patches reviewed, and committing patches.

Uploading a patch for review

The git cl tool handles details of interacting with Gerrit (the Chromium code review tool) and is recommended for pushing patches for review. Once you have committed changes locally, simply run:

  git cl format
  git cl upload

The first command will will auto-format the code changes using clang-format. Then, the second command runs the PRESUBMIT.py script to check style and, if it passes, a newcode review will be posted on chromium-review.googlesource.com.

If you make additional commits to your local branch, then running git cl upload again in the same branch will merge those commits into the ongoing review as a new patchset.

It's simplest to create a local git branch for each patch you want reviewed separately. git cl keeps track of review status separately for each local branch.

Addressing merge conflicts

If conflicting commits have been landed in the repository for a patch in review, Gerrit will flag the patch as having a merge conflict. In that case, use the instructions above to rebase your commits on top-of-tree and upload a new patchset with the merge conflicts resolved.

Tryjobs

Clicking the CQ DRY RUN button (also, confusingly, labeled COMMIT QUEUE +1) will run the current patchset through all LUCI builders and report the results. It is always a good idea get a green tryjob on a patch before sending it for review to avoid extra back-and-forth.

You can also run git cl try from the commandline to submit a tryjob.

Code reviews

Send your patch to one or more committers in the COMMITTERS file for code review. All patches must receive at least one LGTM by a committer before it can be submitted.

Submitting patches

After your patch has received one or more LGTM commit it by clicking the SUBMIT button (or, confusingly, COMMIT QUEUE +2) in Gerrit. This will run your patch through the builders again before committing to the main openscreen repository.

Additional resources