re2 1.22.2 → 1.23.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +60 -4
- package/binding.gyp +5 -1
- package/lib/addon.cc +4 -0
- package/lib/new.cc +1 -246
- package/lib/pattern.cc +252 -0
- package/lib/pattern.h +10 -0
- package/lib/set.cc +777 -0
- package/lib/wrapped_re2_set.h +42 -0
- package/package.json +21 -9
- package/re2.d.ts +46 -9
- package/vendor/abseil-cpp/CMake/AbseilDll.cmake +14 -24
- package/vendor/abseil-cpp/CMake/AbseilHelpers.cmake +3 -3
- package/vendor/abseil-cpp/CMake/README.md +2 -2
- package/vendor/abseil-cpp/CMakeLists.txt +3 -3
- package/vendor/abseil-cpp/MODULE.bazel +6 -9
- package/vendor/abseil-cpp/README.md +6 -8
- package/vendor/abseil-cpp/absl/abseil.podspec.gen.py +6 -4
- package/vendor/abseil-cpp/absl/algorithm/BUILD.bazel +3 -0
- package/vendor/abseil-cpp/absl/algorithm/CMakeLists.txt +1 -0
- package/vendor/abseil-cpp/absl/algorithm/container.h +2 -19
- package/vendor/abseil-cpp/absl/algorithm/container_test.cc +4 -11
- package/vendor/abseil-cpp/absl/base/BUILD.bazel +60 -45
- package/vendor/abseil-cpp/absl/base/CMakeLists.txt +57 -38
- package/vendor/abseil-cpp/absl/base/attributes.h +76 -7
- package/vendor/abseil-cpp/absl/base/attributes_test.cc +43 -0
- package/vendor/abseil-cpp/absl/base/call_once.h +11 -12
- package/vendor/abseil-cpp/absl/base/config.h +22 -129
- package/vendor/abseil-cpp/absl/base/exception_safety_testing_test.cc +0 -4
- package/vendor/abseil-cpp/absl/base/{internal/fast_type_id.h → fast_type_id.h} +11 -16
- package/vendor/abseil-cpp/absl/base/{internal/fast_type_id_test.cc → fast_type_id_test.cc} +34 -30
- package/vendor/abseil-cpp/absl/base/internal/cycleclock.cc +0 -5
- package/vendor/abseil-cpp/absl/base/internal/cycleclock_config.h +7 -7
- package/vendor/abseil-cpp/absl/base/internal/endian.h +34 -38
- package/vendor/abseil-cpp/absl/base/internal/iterator_traits.h +71 -0
- package/vendor/abseil-cpp/absl/base/internal/iterator_traits_test.cc +85 -0
- package/vendor/abseil-cpp/absl/base/internal/iterator_traits_test_helper.h +97 -0
- package/vendor/abseil-cpp/absl/base/internal/low_level_alloc.cc +39 -9
- package/vendor/abseil-cpp/absl/base/internal/low_level_alloc.h +6 -0
- package/vendor/abseil-cpp/absl/base/internal/poison.cc +7 -6
- package/vendor/abseil-cpp/absl/base/internal/spinlock.cc +15 -28
- package/vendor/abseil-cpp/absl/base/internal/spinlock.h +65 -35
- package/vendor/abseil-cpp/absl/base/internal/spinlock_benchmark.cc +2 -2
- package/vendor/abseil-cpp/absl/base/internal/sysinfo_test.cc +2 -2
- package/vendor/abseil-cpp/absl/base/internal/thread_identity_benchmark.cc +1 -1
- package/vendor/abseil-cpp/absl/base/internal/thread_identity_test.cc +4 -4
- package/vendor/abseil-cpp/absl/base/internal/unaligned_access.h +6 -6
- package/vendor/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +4 -0
- package/vendor/abseil-cpp/absl/base/internal/unscaledcycleclock.h +8 -3
- package/vendor/abseil-cpp/absl/base/no_destructor.h +11 -32
- package/vendor/abseil-cpp/absl/base/no_destructor_test.cc +0 -4
- package/vendor/abseil-cpp/absl/base/nullability.h +83 -72
- package/vendor/abseil-cpp/absl/base/nullability_test.cc +25 -64
- package/vendor/abseil-cpp/absl/base/options.h +3 -80
- package/vendor/abseil-cpp/absl/base/policy_checks.h +7 -7
- package/vendor/abseil-cpp/absl/base/raw_logging_test.cc +15 -0
- package/vendor/abseil-cpp/absl/base/spinlock_test_common.cc +50 -30
- package/vendor/abseil-cpp/absl/cleanup/BUILD.bazel +2 -1
- package/vendor/abseil-cpp/absl/cleanup/CMakeLists.txt +0 -1
- package/vendor/abseil-cpp/absl/cleanup/cleanup.h +1 -3
- package/vendor/abseil-cpp/absl/cleanup/cleanup_test.cc +0 -2
- package/vendor/abseil-cpp/absl/cleanup/internal/cleanup.h +3 -4
- package/vendor/abseil-cpp/absl/container/BUILD.bazel +74 -1
- package/vendor/abseil-cpp/absl/container/CMakeLists.txt +73 -0
- package/vendor/abseil-cpp/absl/container/btree_benchmark.cc +51 -9
- package/vendor/abseil-cpp/absl/container/btree_map.h +8 -6
- package/vendor/abseil-cpp/absl/container/btree_set.h +8 -6
- package/vendor/abseil-cpp/absl/container/btree_test.cc +89 -4
- package/vendor/abseil-cpp/absl/container/fixed_array.h +7 -15
- package/vendor/abseil-cpp/absl/container/fixed_array_test.cc +17 -0
- package/vendor/abseil-cpp/absl/container/flat_hash_map.h +20 -15
- package/vendor/abseil-cpp/absl/container/flat_hash_map_test.cc +8 -14
- package/vendor/abseil-cpp/absl/container/flat_hash_set.h +19 -14
- package/vendor/abseil-cpp/absl/container/flat_hash_set_test.cc +46 -0
- package/vendor/abseil-cpp/absl/container/inlined_vector.h +7 -6
- package/vendor/abseil-cpp/absl/container/inlined_vector_test.cc +28 -0
- package/vendor/abseil-cpp/absl/container/internal/btree.h +132 -29
- package/vendor/abseil-cpp/absl/container/internal/btree_container.h +175 -71
- package/vendor/abseil-cpp/absl/container/internal/common.h +43 -0
- package/vendor/abseil-cpp/absl/container/internal/common_policy_traits.h +1 -2
- package/vendor/abseil-cpp/absl/container/internal/compressed_tuple.h +28 -24
- package/vendor/abseil-cpp/absl/container/internal/compressed_tuple_test.cc +4 -17
- package/vendor/abseil-cpp/absl/container/internal/container_memory.h +80 -17
- package/vendor/abseil-cpp/absl/container/internal/container_memory_test.cc +32 -2
- package/vendor/abseil-cpp/absl/container/internal/hash_function_defaults.h +13 -8
- package/vendor/abseil-cpp/absl/container/internal/hash_function_defaults_test.cc +1 -52
- package/vendor/abseil-cpp/absl/container/internal/hash_generator_testing.cc +9 -31
- package/vendor/abseil-cpp/absl/container/internal/hash_generator_testing.h +23 -32
- package/vendor/abseil-cpp/absl/container/internal/hash_policy_testing.h +5 -1
- package/vendor/abseil-cpp/absl/container/internal/hash_policy_traits.h +11 -23
- package/vendor/abseil-cpp/absl/container/internal/hash_policy_traits_test.cc +14 -9
- package/vendor/abseil-cpp/absl/container/internal/hashtable_control_bytes.h +516 -0
- package/vendor/abseil-cpp/absl/container/internal/hashtable_control_bytes_test.cc +259 -0
- package/vendor/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +23 -6
- package/vendor/abseil-cpp/absl/container/internal/hashtablez_sampler.h +32 -13
- package/vendor/abseil-cpp/absl/container/internal/hashtablez_sampler_test.cc +8 -8
- package/vendor/abseil-cpp/absl/container/internal/inlined_vector.h +2 -7
- package/vendor/abseil-cpp/absl/container/internal/layout.h +26 -42
- package/vendor/abseil-cpp/absl/container/internal/raw_hash_map.h +199 -68
- package/vendor/abseil-cpp/absl/container/internal/raw_hash_set.cc +1506 -213
- package/vendor/abseil-cpp/absl/container/internal/raw_hash_set.h +1095 -1658
- package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_allocator_test.cc +3 -2
- package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_benchmark.cc +31 -29
- package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_probe_benchmark.cc +51 -20
- package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_resize_impl.h +79 -0
- package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_resize_impl_test.cc +66 -0
- package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_test.cc +707 -363
- package/vendor/abseil-cpp/absl/container/node_hash_map.h +20 -15
- package/vendor/abseil-cpp/absl/container/node_hash_map_test.cc +0 -3
- package/vendor/abseil-cpp/absl/container/node_hash_set.h +18 -13
- package/vendor/abseil-cpp/absl/container/sample_element_size_test.cc +3 -8
- package/vendor/abseil-cpp/absl/copts/AbseilConfigureCopts.cmake +1 -1
- package/vendor/abseil-cpp/absl/copts/GENERATED_AbseilCopts.cmake +9 -20
- package/vendor/abseil-cpp/absl/copts/GENERATED_copts.bzl +9 -20
- package/vendor/abseil-cpp/absl/copts/copts.py +24 -15
- package/vendor/abseil-cpp/absl/crc/BUILD.bazel +3 -0
- package/vendor/abseil-cpp/absl/crc/crc32c.cc +0 -4
- package/vendor/abseil-cpp/absl/crc/crc32c.h +7 -5
- package/vendor/abseil-cpp/absl/crc/crc32c_benchmark.cc +17 -4
- package/vendor/abseil-cpp/absl/crc/crc32c_test.cc +30 -0
- package/vendor/abseil-cpp/absl/crc/internal/cpu_detect.cc +17 -0
- package/vendor/abseil-cpp/absl/crc/internal/cpu_detect.h +7 -1
- package/vendor/abseil-cpp/absl/crc/internal/crc32_x86_arm_combined_simd.h +0 -22
- package/vendor/abseil-cpp/absl/crc/internal/crc_memcpy_x86_arm_combined.cc +5 -0
- package/vendor/abseil-cpp/absl/crc/internal/crc_x86_arm_combined.cc +136 -165
- package/vendor/abseil-cpp/absl/crc/internal/gen_crc32c_consts.py +90 -0
- package/vendor/abseil-cpp/absl/debugging/BUILD.bazel +7 -0
- package/vendor/abseil-cpp/absl/debugging/CMakeLists.txt +4 -0
- package/vendor/abseil-cpp/absl/debugging/internal/addresses.h +57 -0
- package/vendor/abseil-cpp/absl/debugging/internal/decode_rust_punycode.cc +1 -1
- package/vendor/abseil-cpp/absl/debugging/internal/decode_rust_punycode.h +5 -5
- package/vendor/abseil-cpp/absl/debugging/internal/demangle.cc +8 -35
- package/vendor/abseil-cpp/absl/debugging/internal/demangle_rust.cc +16 -16
- package/vendor/abseil-cpp/absl/debugging/internal/demangle_test.cc +11 -10
- package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +40 -37
- package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_arm-inl.inc +16 -7
- package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_config.h +6 -5
- package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_emscripten-inl.inc +14 -5
- package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_generic-inl.inc +10 -4
- package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +27 -16
- package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +13 -4
- package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_unimplemented-inl.inc +4 -3
- package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_win32-inl.inc +15 -28
- package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +25 -14
- package/vendor/abseil-cpp/absl/debugging/internal/vdso_support.cc +4 -0
- package/vendor/abseil-cpp/absl/debugging/stacktrace.cc +161 -27
- package/vendor/abseil-cpp/absl/debugging/stacktrace.h +73 -5
- package/vendor/abseil-cpp/absl/debugging/stacktrace_test.cc +435 -1
- package/vendor/abseil-cpp/absl/debugging/symbolize_elf.inc +55 -63
- package/vendor/abseil-cpp/absl/debugging/symbolize_emscripten.inc +3 -2
- package/vendor/abseil-cpp/absl/debugging/symbolize_win32.inc +25 -6
- package/vendor/abseil-cpp/absl/flags/BUILD.bazel +6 -0
- package/vendor/abseil-cpp/absl/flags/CMakeLists.txt +3 -0
- package/vendor/abseil-cpp/absl/flags/commandlineflag.h +2 -2
- package/vendor/abseil-cpp/absl/flags/flag.h +4 -3
- package/vendor/abseil-cpp/absl/flags/internal/commandlineflag.h +2 -2
- package/vendor/abseil-cpp/absl/flags/internal/flag.cc +14 -13
- package/vendor/abseil-cpp/absl/flags/internal/flag.h +34 -34
- package/vendor/abseil-cpp/absl/flags/internal/program_name.cc +2 -2
- package/vendor/abseil-cpp/absl/flags/internal/registry.h +4 -3
- package/vendor/abseil-cpp/absl/flags/internal/usage.cc +2 -2
- package/vendor/abseil-cpp/absl/flags/parse.cc +10 -6
- package/vendor/abseil-cpp/absl/flags/reflection.cc +9 -7
- package/vendor/abseil-cpp/absl/flags/usage.cc +2 -2
- package/vendor/abseil-cpp/absl/flags/usage_config.cc +2 -2
- package/vendor/abseil-cpp/absl/functional/BUILD.bazel +7 -6
- package/vendor/abseil-cpp/absl/functional/CMakeLists.txt +2 -4
- package/vendor/abseil-cpp/absl/functional/any_invocable.h +15 -15
- package/vendor/abseil-cpp/absl/functional/any_invocable_test.cc +10 -42
- package/vendor/abseil-cpp/absl/functional/function_ref.h +2 -9
- package/vendor/abseil-cpp/absl/functional/function_ref_test.cc +10 -0
- package/vendor/abseil-cpp/absl/functional/function_type_benchmark.cc +1 -1
- package/vendor/abseil-cpp/absl/functional/internal/any_invocable.h +112 -227
- package/vendor/abseil-cpp/absl/functional/internal/front_binder.h +10 -12
- package/vendor/abseil-cpp/absl/functional/internal/function_ref.h +2 -5
- package/vendor/abseil-cpp/absl/functional/overload.h +0 -20
- package/vendor/abseil-cpp/absl/functional/overload_test.cc +1 -7
- package/vendor/abseil-cpp/absl/hash/BUILD.bazel +16 -9
- package/vendor/abseil-cpp/absl/hash/CMakeLists.txt +6 -9
- package/vendor/abseil-cpp/absl/hash/hash.h +18 -0
- package/vendor/abseil-cpp/absl/hash/hash_benchmark.cc +3 -0
- package/vendor/abseil-cpp/absl/hash/hash_instantiated_test.cc +1 -1
- package/vendor/abseil-cpp/absl/hash/hash_test.cc +131 -30
- package/vendor/abseil-cpp/absl/hash/hash_testing.h +20 -20
- package/vendor/abseil-cpp/absl/hash/internal/hash.cc +129 -17
- package/vendor/abseil-cpp/absl/hash/internal/hash.h +326 -362
- package/vendor/abseil-cpp/absl/hash/internal/low_level_hash_test.cc +54 -151
- package/vendor/abseil-cpp/absl/hash/internal/spy_hash_state.h +14 -2
- package/vendor/abseil-cpp/absl/{strings/cord_buffer.cc → hash/internal/weakly_mixed_integer.h} +14 -6
- package/vendor/abseil-cpp/absl/log/BUILD.bazel +4 -0
- package/vendor/abseil-cpp/absl/log/CMakeLists.txt +7 -0
- package/vendor/abseil-cpp/absl/log/check.h +2 -1
- package/vendor/abseil-cpp/absl/log/check_test_impl.inc +308 -14
- package/vendor/abseil-cpp/absl/log/die_if_null.h +2 -2
- package/vendor/abseil-cpp/absl/log/flags_test.cc +7 -0
- package/vendor/abseil-cpp/absl/log/globals.h +4 -5
- package/vendor/abseil-cpp/absl/log/internal/BUILD.bazel +13 -9
- package/vendor/abseil-cpp/absl/log/internal/append_truncated.h +28 -0
- package/vendor/abseil-cpp/absl/log/internal/check_op.cc +24 -22
- package/vendor/abseil-cpp/absl/log/internal/check_op.h +149 -94
- package/vendor/abseil-cpp/absl/log/internal/conditions.cc +5 -3
- package/vendor/abseil-cpp/absl/log/internal/conditions.h +7 -2
- package/vendor/abseil-cpp/absl/log/internal/fnmatch_test.cc +1 -0
- package/vendor/abseil-cpp/absl/log/internal/log_message.cc +85 -43
- package/vendor/abseil-cpp/absl/log/internal/log_message.h +84 -59
- package/vendor/abseil-cpp/absl/log/internal/log_sink_set.cc +4 -4
- package/vendor/abseil-cpp/absl/log/internal/nullstream.h +1 -0
- package/vendor/abseil-cpp/absl/log/internal/proto.cc +3 -2
- package/vendor/abseil-cpp/absl/log/internal/proto.h +3 -3
- package/vendor/abseil-cpp/absl/log/internal/strip.h +4 -12
- package/vendor/abseil-cpp/absl/log/internal/structured.h +3 -7
- package/vendor/abseil-cpp/absl/log/internal/vlog_config.cc +9 -9
- package/vendor/abseil-cpp/absl/log/internal/vlog_config.h +8 -6
- package/vendor/abseil-cpp/absl/log/internal/voidify.h +10 -4
- package/vendor/abseil-cpp/absl/log/log.h +48 -35
- package/vendor/abseil-cpp/absl/log/log_basic_test_impl.inc +45 -0
- package/vendor/abseil-cpp/absl/log/log_entry.cc +241 -19
- package/vendor/abseil-cpp/absl/log/log_entry.h +2 -0
- package/vendor/abseil-cpp/absl/log/log_format_test.cc +412 -6
- package/vendor/abseil-cpp/absl/log/log_modifier_methods_test.cc +20 -0
- package/vendor/abseil-cpp/absl/log/log_sink_registry.h +2 -2
- package/vendor/abseil-cpp/absl/log/log_streamer_test.cc +15 -2
- package/vendor/abseil-cpp/absl/log/scoped_mock_log.h +7 -1
- package/vendor/abseil-cpp/absl/log/structured_test.cc +1 -0
- package/vendor/abseil-cpp/absl/memory/BUILD.bazel +2 -0
- package/vendor/abseil-cpp/absl/meta/BUILD.bazel +2 -0
- package/vendor/abseil-cpp/absl/meta/type_traits.h +46 -175
- package/vendor/abseil-cpp/absl/meta/type_traits_test.cc +1 -478
- package/vendor/abseil-cpp/absl/numeric/BUILD.bazel +7 -3
- package/vendor/abseil-cpp/absl/numeric/CMakeLists.txt +2 -0
- package/vendor/abseil-cpp/absl/numeric/bits.h +68 -2
- package/vendor/abseil-cpp/absl/numeric/bits_benchmark.cc +1 -1
- package/vendor/abseil-cpp/absl/numeric/bits_test.cc +83 -0
- package/vendor/abseil-cpp/absl/numeric/int128.cc +0 -52
- package/vendor/abseil-cpp/absl/numeric/int128_benchmark.cc +14 -15
- package/vendor/abseil-cpp/absl/numeric/int128_test.cc +13 -8
- package/vendor/abseil-cpp/absl/numeric/internal/bits.h +39 -7
- package/vendor/abseil-cpp/absl/profiling/BUILD.bazel +47 -0
- package/vendor/abseil-cpp/absl/profiling/CMakeLists.txt +38 -0
- package/vendor/abseil-cpp/absl/profiling/hashtable.cc +124 -0
- package/vendor/abseil-cpp/absl/profiling/hashtable.h +40 -0
- package/vendor/abseil-cpp/absl/profiling/internal/exponential_biased.cc +1 -1
- package/vendor/abseil-cpp/absl/profiling/internal/profile_builder.cc +462 -0
- package/vendor/abseil-cpp/absl/profiling/internal/profile_builder.h +138 -0
- package/vendor/abseil-cpp/absl/profiling/internal/sample_recorder.h +9 -9
- package/vendor/abseil-cpp/absl/profiling/internal/sample_recorder_test.cc +7 -3
- package/vendor/abseil-cpp/absl/random/BUILD.bazel +6 -4
- package/vendor/abseil-cpp/absl/random/CMakeLists.txt +20 -19
- package/vendor/abseil-cpp/absl/random/benchmarks.cc +16 -23
- package/vendor/abseil-cpp/absl/random/bit_gen_ref.h +10 -11
- package/vendor/abseil-cpp/absl/random/bit_gen_ref_test.cc +7 -2
- package/vendor/abseil-cpp/absl/random/distributions.h +6 -8
- package/vendor/abseil-cpp/absl/random/gaussian_distribution.h +1 -1
- package/vendor/abseil-cpp/absl/random/internal/BUILD.bazel +19 -20
- package/vendor/abseil-cpp/absl/random/internal/distribution_caller.h +5 -6
- package/vendor/abseil-cpp/absl/random/internal/{pool_urbg.cc → entropy_pool.cc} +24 -92
- package/vendor/abseil-cpp/absl/{base/inline_variable_test_b.cc → random/internal/entropy_pool.h} +14 -6
- package/vendor/abseil-cpp/absl/random/internal/entropy_pool_test.cc +119 -0
- package/vendor/abseil-cpp/absl/random/internal/mock_helpers.h +6 -7
- package/vendor/abseil-cpp/absl/random/internal/nonsecure_base.h +5 -6
- package/vendor/abseil-cpp/absl/random/internal/nonsecure_base_test.cc +39 -0
- package/vendor/abseil-cpp/absl/random/internal/randen_benchmarks.cc +8 -6
- package/vendor/abseil-cpp/absl/random/internal/randen_detect.cc +1 -1
- package/vendor/abseil-cpp/absl/random/internal/seed_material.cc +20 -12
- package/vendor/abseil-cpp/absl/random/internal/seed_material.h +5 -5
- package/vendor/abseil-cpp/absl/random/internal/seed_material_test.cc +3 -0
- package/vendor/abseil-cpp/absl/random/mock_distributions_test.cc +5 -4
- package/vendor/abseil-cpp/absl/random/mocking_bit_gen.h +8 -10
- package/vendor/abseil-cpp/absl/random/random.h +88 -53
- package/vendor/abseil-cpp/absl/random/seed_sequences.cc +6 -2
- package/vendor/abseil-cpp/absl/status/BUILD.bazel +26 -0
- package/vendor/abseil-cpp/absl/status/internal/status_internal.cc +3 -4
- package/vendor/abseil-cpp/absl/status/internal/status_internal.h +3 -4
- package/vendor/abseil-cpp/absl/status/internal/status_matchers.cc +4 -3
- package/vendor/abseil-cpp/absl/status/internal/statusor_internal.h +194 -32
- package/vendor/abseil-cpp/absl/status/status.cc +4 -8
- package/vendor/abseil-cpp/absl/status/status.h +8 -8
- package/vendor/abseil-cpp/absl/{base/inline_variable_test_a.cc → status/status_benchmark.cc} +20 -10
- package/vendor/abseil-cpp/absl/status/status_matchers_test.cc +65 -0
- package/vendor/abseil-cpp/absl/status/status_payload_printer.h +2 -2
- package/vendor/abseil-cpp/absl/status/statusor.cc +2 -2
- package/vendor/abseil-cpp/absl/status/statusor.h +49 -102
- package/vendor/abseil-cpp/absl/status/statusor_benchmark.cc +480 -0
- package/vendor/abseil-cpp/absl/status/statusor_test.cc +323 -1
- package/vendor/abseil-cpp/absl/strings/BUILD.bazel +70 -34
- package/vendor/abseil-cpp/absl/strings/CMakeLists.txt +6 -3
- package/vendor/abseil-cpp/absl/strings/ascii.cc +9 -9
- package/vendor/abseil-cpp/absl/strings/ascii.h +18 -18
- package/vendor/abseil-cpp/absl/strings/ascii_benchmark.cc +5 -8
- package/vendor/abseil-cpp/absl/strings/charconv.cc +21 -22
- package/vendor/abseil-cpp/absl/strings/charconv.h +5 -5
- package/vendor/abseil-cpp/absl/strings/charconv_benchmark.cc +1 -2
- package/vendor/abseil-cpp/absl/strings/charset_benchmark.cc +1 -1
- package/vendor/abseil-cpp/absl/strings/cord.cc +54 -58
- package/vendor/abseil-cpp/absl/strings/cord.h +94 -84
- package/vendor/abseil-cpp/absl/strings/cord_analysis.cc +11 -11
- package/vendor/abseil-cpp/absl/strings/cord_analysis.h +3 -3
- package/vendor/abseil-cpp/absl/strings/cord_test.cc +23 -0
- package/vendor/abseil-cpp/absl/strings/cordz_test_helpers.h +4 -5
- package/vendor/abseil-cpp/absl/strings/escaping.cc +130 -149
- package/vendor/abseil-cpp/absl/strings/escaping.h +9 -10
- package/vendor/abseil-cpp/absl/strings/escaping_benchmark.cc +2 -3
- package/vendor/abseil-cpp/absl/strings/escaping_test.cc +19 -9
- package/vendor/abseil-cpp/absl/strings/internal/charconv_bigint.cc +1 -1
- package/vendor/abseil-cpp/absl/strings/internal/charconv_bigint_test.cc +1 -1
- package/vendor/abseil-cpp/absl/strings/internal/cord_internal.h +6 -10
- package/vendor/abseil-cpp/absl/strings/internal/cord_rep_btree.cc +0 -4
- package/vendor/abseil-cpp/absl/strings/internal/cordz_handle.cc +6 -6
- package/vendor/abseil-cpp/absl/strings/internal/cordz_info.cc +5 -9
- package/vendor/abseil-cpp/absl/strings/internal/cordz_info.h +2 -4
- package/vendor/abseil-cpp/absl/strings/internal/damerau_levenshtein_distance_benchmark.cc +56 -0
- package/vendor/abseil-cpp/absl/strings/internal/memutil_benchmark.cc +2 -3
- package/vendor/abseil-cpp/absl/strings/internal/ostringstream_benchmark.cc +1 -2
- package/vendor/abseil-cpp/absl/strings/internal/str_format/arg.cc +7 -63
- package/vendor/abseil-cpp/absl/strings/internal/str_format/arg.h +1 -11
- package/vendor/abseil-cpp/absl/strings/internal/str_format/convert_test.cc +1 -6
- package/vendor/abseil-cpp/absl/strings/internal/str_format/extension.cc +0 -22
- package/vendor/abseil-cpp/absl/strings/internal/str_format/extension_test.cc +3 -2
- package/vendor/abseil-cpp/absl/strings/internal/str_format/output.cc +5 -3
- package/vendor/abseil-cpp/absl/strings/internal/str_format/parser.h +4 -2
- package/vendor/abseil-cpp/absl/strings/internal/str_join_internal.h +3 -3
- package/vendor/abseil-cpp/absl/strings/internal/str_split_internal.h +7 -2
- package/vendor/abseil-cpp/absl/strings/internal/string_constant.h +0 -5
- package/vendor/abseil-cpp/absl/strings/internal/utf8.cc +96 -1
- package/vendor/abseil-cpp/absl/strings/internal/utf8.h +15 -1
- package/vendor/abseil-cpp/absl/strings/internal/utf8_test.cc +196 -3
- package/vendor/abseil-cpp/absl/strings/numbers.cc +53 -32
- package/vendor/abseil-cpp/absl/strings/numbers.h +87 -58
- package/vendor/abseil-cpp/absl/strings/numbers_benchmark.cc +1 -1
- package/vendor/abseil-cpp/absl/strings/numbers_test.cc +634 -120
- package/vendor/abseil-cpp/absl/strings/str_cat.cc +6 -7
- package/vendor/abseil-cpp/absl/strings/str_cat.h +32 -32
- package/vendor/abseil-cpp/absl/strings/str_cat_benchmark.cc +25 -1
- package/vendor/abseil-cpp/absl/strings/str_cat_test.cc +2 -7
- package/vendor/abseil-cpp/absl/strings/str_format.h +18 -18
- package/vendor/abseil-cpp/absl/strings/str_format_test.cc +8 -14
- package/vendor/abseil-cpp/absl/strings/str_join_benchmark.cc +2 -3
- package/vendor/abseil-cpp/absl/strings/str_replace.cc +3 -3
- package/vendor/abseil-cpp/absl/strings/str_replace.h +6 -6
- package/vendor/abseil-cpp/absl/strings/str_replace_benchmark.cc +2 -3
- package/vendor/abseil-cpp/absl/strings/str_split.h +2 -2
- package/vendor/abseil-cpp/absl/strings/str_split_benchmark.cc +2 -3
- package/vendor/abseil-cpp/absl/strings/string_view.cc +4 -9
- package/vendor/abseil-cpp/absl/strings/string_view.h +38 -39
- package/vendor/abseil-cpp/absl/strings/string_view_benchmark.cc +4 -6
- package/vendor/abseil-cpp/absl/strings/string_view_test.cc +2 -50
- package/vendor/abseil-cpp/absl/strings/strip.h +4 -4
- package/vendor/abseil-cpp/absl/strings/substitute.cc +5 -4
- package/vendor/abseil-cpp/absl/strings/substitute.h +66 -64
- package/vendor/abseil-cpp/absl/strings/substitute_benchmark.cc +158 -0
- package/vendor/abseil-cpp/absl/synchronization/BUILD.bazel +6 -1
- package/vendor/abseil-cpp/absl/synchronization/CMakeLists.txt +2 -1
- package/vendor/abseil-cpp/absl/synchronization/barrier.cc +1 -1
- package/vendor/abseil-cpp/absl/synchronization/barrier_test.cc +3 -3
- package/vendor/abseil-cpp/absl/synchronization/blocking_counter.cc +2 -2
- package/vendor/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +3 -3
- package/vendor/abseil-cpp/absl/synchronization/internal/futex_waiter.cc +0 -4
- package/vendor/abseil-cpp/absl/synchronization/internal/graphcycles.cc +30 -33
- package/vendor/abseil-cpp/absl/synchronization/internal/graphcycles_benchmark.cc +2 -3
- package/vendor/abseil-cpp/absl/synchronization/internal/graphcycles_test.cc +6 -5
- package/vendor/abseil-cpp/absl/synchronization/internal/kernel_timeout.cc +0 -5
- package/vendor/abseil-cpp/absl/synchronization/internal/pthread_waiter.cc +0 -4
- package/vendor/abseil-cpp/absl/synchronization/internal/sem_waiter.cc +0 -4
- package/vendor/abseil-cpp/absl/synchronization/internal/stdcpp_waiter.cc +0 -4
- package/vendor/abseil-cpp/absl/synchronization/internal/thread_pool.h +3 -3
- package/vendor/abseil-cpp/absl/synchronization/internal/waiter_base.cc +0 -4
- package/vendor/abseil-cpp/absl/synchronization/internal/waiter_test.cc +12 -3
- package/vendor/abseil-cpp/absl/synchronization/internal/win32_waiter.cc +0 -4
- package/vendor/abseil-cpp/absl/synchronization/lifetime_test.cc +4 -4
- package/vendor/abseil-cpp/absl/synchronization/mutex.cc +27 -29
- package/vendor/abseil-cpp/absl/synchronization/mutex.h +205 -126
- package/vendor/abseil-cpp/absl/synchronization/mutex_benchmark.cc +13 -31
- package/vendor/abseil-cpp/absl/synchronization/mutex_test.cc +183 -169
- package/vendor/abseil-cpp/absl/synchronization/notification.cc +5 -5
- package/vendor/abseil-cpp/absl/synchronization/notification.h +1 -1
- package/vendor/abseil-cpp/absl/synchronization/notification_test.cc +3 -3
- package/vendor/abseil-cpp/absl/time/BUILD.bazel +9 -1
- package/vendor/abseil-cpp/absl/time/CMakeLists.txt +3 -1
- package/vendor/abseil-cpp/absl/time/civil_time.cc +1 -0
- package/vendor/abseil-cpp/absl/time/civil_time_test.cc +134 -0
- package/vendor/abseil-cpp/absl/time/clock.cc +11 -14
- package/vendor/abseil-cpp/absl/time/duration.cc +14 -9
- package/vendor/abseil-cpp/absl/time/duration_test.cc +6 -7
- package/vendor/abseil-cpp/absl/time/internal/cctz/BUILD.bazel +14 -3
- package/vendor/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +12 -0
- package/vendor/abseil-cpp/absl/time/internal/cctz/include/cctz/time_zone.h +1 -1
- package/vendor/abseil-cpp/absl/time/internal/cctz/src/cctz_benchmark.cc +4 -490
- package/vendor/abseil-cpp/absl/time/internal/cctz/src/test_time_zone_names.cc +515 -0
- package/vendor/abseil-cpp/absl/time/internal/cctz/src/test_time_zone_names.h +33 -0
- package/vendor/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc +41 -4
- package/vendor/abseil-cpp/absl/time/internal/cctz/src/time_zone_format_test.cc +22 -23
- package/vendor/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +90 -111
- package/vendor/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup_test.cc +1 -488
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/version +1 -1
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Coyhaique +0 -0
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Tehran +0 -0
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Iran +0 -0
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/zone1970.tab +2 -1
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/zonenow.tab +1 -1
- package/vendor/abseil-cpp/absl/time/time.h +24 -18
- package/vendor/abseil-cpp/absl/time/time_test.cc +26 -0
- package/vendor/abseil-cpp/absl/types/BUILD.bazel +11 -164
- package/vendor/abseil-cpp/absl/types/CMakeLists.txt +23 -167
- package/vendor/abseil-cpp/absl/types/any.h +9 -484
- package/vendor/abseil-cpp/absl/types/optional.h +7 -747
- package/vendor/abseil-cpp/absl/types/span.h +46 -19
- package/vendor/abseil-cpp/absl/types/span_test.cc +27 -0
- package/vendor/abseil-cpp/absl/types/variant.h +5 -784
- package/vendor/abseil-cpp/absl/types/variant_test.cc +43 -2597
- package/vendor/abseil-cpp/absl/utility/BUILD.bazel +1 -41
- package/vendor/abseil-cpp/absl/utility/CMakeLists.txt +0 -40
- package/vendor/abseil-cpp/absl/utility/utility.h +10 -185
- package/vendor/abseil-cpp/ci/absl_alternate_options.h +2 -3
- package/vendor/abseil-cpp/ci/cmake_common.sh +2 -2
- package/vendor/abseil-cpp/ci/linux_arm_clang-latest_libcxx_bazel.sh +12 -13
- package/vendor/abseil-cpp/ci/linux_clang-latest_libcxx_asan_bazel.sh +24 -21
- package/vendor/abseil-cpp/ci/linux_clang-latest_libcxx_bazel.sh +12 -12
- package/vendor/abseil-cpp/ci/linux_clang-latest_libcxx_tsan_bazel.sh +23 -22
- package/vendor/abseil-cpp/ci/linux_clang-latest_libstdcxx_bazel.sh +20 -19
- package/vendor/abseil-cpp/ci/linux_docker_containers.sh +4 -4
- package/vendor/abseil-cpp/ci/linux_gcc-floor_libstdcxx_bazel.sh +17 -17
- package/vendor/abseil-cpp/ci/linux_gcc-latest_libstdcxx_bazel.sh +10 -10
- package/vendor/abseil-cpp/ci/linux_gcc-latest_libstdcxx_cmake.sh +1 -1
- package/vendor/abseil-cpp/ci/linux_gcc_alpine_cmake.sh +1 -1
- package/vendor/abseil-cpp/ci/macos_xcode_bazel.sh +9 -10
- package/vendor/abseil-cpp/ci/macos_xcode_cmake.sh +9 -1
- package/vendor/abseil-cpp/ci/windows_clangcl_bazel.bat +14 -6
- package/vendor/abseil-cpp/ci/windows_msvc_bazel.bat +14 -6
- package/vendor/abseil-cpp/ci/windows_msvc_cmake.bat +1 -1
- package/vendor/re2/.bazelrc +4 -4
- package/vendor/re2/.bcr/metadata.template.json +16 -0
- package/vendor/re2/.bcr/presubmit.yml +57 -0
- package/vendor/re2/.bcr/source.template.json +5 -0
- package/vendor/re2/.github/bazel.sh +1 -7
- package/vendor/re2/.github/workflows/ci-bazel.yml +5 -5
- package/vendor/re2/.github/workflows/ci-cmake.yml +4 -4
- package/vendor/re2/.github/workflows/ci.yml +5 -6
- package/vendor/re2/.github/workflows/pages.yml +3 -3
- package/vendor/re2/.github/workflows/python.yml +29 -24
- package/vendor/re2/.github/workflows/release-bazel.yml +42 -0
- package/vendor/re2/.github/workflows/release.yml +15 -4
- package/vendor/re2/BUILD.bazel +25 -0
- package/vendor/re2/CMakeLists.txt +100 -85
- package/vendor/re2/CONTRIBUTING.md +0 -1
- package/vendor/re2/MODULE.bazel +10 -10
- package/vendor/re2/Makefile +1 -1
- package/vendor/re2/README.md +259 -0
- package/vendor/re2/python/BUILD.bazel +8 -0
- package/vendor/re2/python/re2.py +1 -1
- package/vendor/re2/python/re2_test.py +6 -0
- package/vendor/re2/python/setup.py +3 -3
- package/vendor/re2/re2/bitmap256.cc +3 -4
- package/vendor/re2/re2/bitstate.cc +15 -10
- package/vendor/re2/re2/dfa.cc +1 -2
- package/vendor/re2/re2/parse.cc +3 -4
- package/vendor/re2/re2/prog.cc +1 -2
- package/vendor/re2/re2/prog.h +1 -0
- package/vendor/re2/re2/re2.cc +5 -0
- package/vendor/re2/re2/re2.h +9 -9
- package/vendor/re2/re2/set.cc +6 -0
- package/vendor/re2/re2/set.h +5 -0
- package/vendor/re2/re2/testing/re2_arg_test.cc +3 -3
- package/vendor/re2/re2/testing/re2_test.cc +8 -0
- package/vendor/re2/re2/testing/set_test.cc +5 -0
- package/vendor/re2/re2/walker-inl.h +1 -1
- package/vendor/abseil-cpp/WORKSPACE +0 -76
- package/vendor/abseil-cpp/WORKSPACE.bzlmod +0 -19
- package/vendor/abseil-cpp/absl/base/inline_variable_test.cc +0 -64
- package/vendor/abseil-cpp/absl/base/internal/inline_variable.h +0 -108
- package/vendor/abseil-cpp/absl/base/internal/inline_variable_testing.h +0 -46
- package/vendor/abseil-cpp/absl/base/internal/invoke.h +0 -241
- package/vendor/abseil-cpp/absl/base/internal/nullability_impl.h +0 -69
- package/vendor/abseil-cpp/absl/base/invoke_test.cc +0 -331
- package/vendor/abseil-cpp/absl/hash/internal/low_level_hash.cc +0 -148
- package/vendor/abseil-cpp/absl/hash/internal/low_level_hash.h +0 -54
- package/vendor/abseil-cpp/absl/random/internal/pool_urbg.h +0 -131
- package/vendor/abseil-cpp/absl/random/internal/pool_urbg_test.cc +0 -182
- package/vendor/abseil-cpp/absl/types/any_exception_safety_test.cc +0 -173
- package/vendor/abseil-cpp/absl/types/any_test.cc +0 -778
- package/vendor/abseil-cpp/absl/types/bad_any_cast.cc +0 -64
- package/vendor/abseil-cpp/absl/types/bad_any_cast.h +0 -75
- package/vendor/abseil-cpp/absl/types/bad_optional_access.cc +0 -66
- package/vendor/abseil-cpp/absl/types/bad_optional_access.h +0 -78
- package/vendor/abseil-cpp/absl/types/bad_variant_access.cc +0 -82
- package/vendor/abseil-cpp/absl/types/bad_variant_access.h +0 -82
- package/vendor/abseil-cpp/absl/types/internal/optional.h +0 -352
- package/vendor/abseil-cpp/absl/types/internal/variant.h +0 -1622
- package/vendor/abseil-cpp/absl/types/optional_exception_safety_test.cc +0 -292
- package/vendor/abseil-cpp/absl/types/optional_test.cc +0 -1615
- package/vendor/abseil-cpp/absl/types/variant_benchmark.cc +0 -222
- package/vendor/abseil-cpp/absl/types/variant_exception_safety_test.cc +0 -532
- package/vendor/abseil-cpp/absl/utility/internal/if_constexpr.h +0 -70
- package/vendor/abseil-cpp/absl/utility/internal/if_constexpr_test.cc +0 -79
- package/vendor/abseil-cpp/absl/utility/utility_test.cc +0 -239
- package/vendor/re2/.github/workflows/pr.yml +0 -34
- package/vendor/re2/README +0 -47
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
// See the License for the specific language governing permissions and
|
|
13
13
|
// limitations under the License.
|
|
14
14
|
|
|
15
|
-
#include "absl/random/internal/
|
|
15
|
+
#include "absl/random/internal/entropy_pool.h"
|
|
16
16
|
|
|
17
17
|
#include <algorithm>
|
|
18
18
|
#include <atomic>
|
|
@@ -23,15 +23,14 @@
|
|
|
23
23
|
#include "absl/base/attributes.h"
|
|
24
24
|
#include "absl/base/call_once.h"
|
|
25
25
|
#include "absl/base/config.h"
|
|
26
|
-
#include "absl/base/internal/endian.h"
|
|
27
|
-
#include "absl/base/internal/raw_logging.h"
|
|
28
26
|
#include "absl/base/internal/spinlock.h"
|
|
29
|
-
#include "absl/base/internal/sysinfo.h"
|
|
30
|
-
#include "absl/base/internal/unaligned_access.h"
|
|
31
27
|
#include "absl/base/optimization.h"
|
|
28
|
+
#include "absl/base/thread_annotations.h"
|
|
32
29
|
#include "absl/random/internal/randen.h"
|
|
30
|
+
#include "absl/random/internal/randen_traits.h"
|
|
33
31
|
#include "absl/random/internal/seed_material.h"
|
|
34
32
|
#include "absl/random/seed_gen_exception.h"
|
|
33
|
+
#include "absl/types/span.h"
|
|
35
34
|
|
|
36
35
|
using absl::base_internal::SpinLock;
|
|
37
36
|
using absl::base_internal::SpinLockHolder;
|
|
@@ -45,16 +44,18 @@ namespace {
|
|
|
45
44
|
// single generator within a RandenPool<T>. It is an internal implementation
|
|
46
45
|
// detail, and does not aim to conform to [rand.req.urng].
|
|
47
46
|
//
|
|
48
|
-
//
|
|
49
|
-
//
|
|
50
|
-
|
|
47
|
+
// At least 32-byte alignment is required for the state_ array on some ARM
|
|
48
|
+
// platforms. We also want this aligned to a cacheline to eliminate false
|
|
49
|
+
// sharing.
|
|
50
|
+
class alignas(std::max(size_t{ABSL_CACHELINE_SIZE}, size_t{32}))
|
|
51
|
+
RandenPoolEntry {
|
|
51
52
|
public:
|
|
52
53
|
static constexpr size_t kState = RandenTraits::kStateBytes / sizeof(uint32_t);
|
|
53
54
|
static constexpr size_t kCapacity =
|
|
54
55
|
RandenTraits::kCapacityBytes / sizeof(uint32_t);
|
|
55
56
|
|
|
56
57
|
void Init(absl::Span<const uint32_t> data) {
|
|
57
|
-
SpinLockHolder l(
|
|
58
|
+
SpinLockHolder l(mu_); // Always uncontested.
|
|
58
59
|
std::copy(data.begin(), data.end(), std::begin(state_));
|
|
59
60
|
next_ = kState;
|
|
60
61
|
}
|
|
@@ -62,10 +63,6 @@ class RandenPoolEntry {
|
|
|
62
63
|
// Copy bytes into out.
|
|
63
64
|
void Fill(uint8_t* out, size_t bytes) ABSL_LOCKS_EXCLUDED(mu_);
|
|
64
65
|
|
|
65
|
-
// Returns random bits from the buffer in units of T.
|
|
66
|
-
template <typename T>
|
|
67
|
-
inline T Generate() ABSL_LOCKS_EXCLUDED(mu_);
|
|
68
|
-
|
|
69
66
|
inline void MaybeRefill() ABSL_EXCLUSIVE_LOCKS_REQUIRED(mu_) {
|
|
70
67
|
if (next_ >= kState) {
|
|
71
68
|
next_ = kCapacity;
|
|
@@ -73,55 +70,24 @@ class RandenPoolEntry {
|
|
|
73
70
|
}
|
|
74
71
|
}
|
|
75
72
|
|
|
73
|
+
inline size_t available() const ABSL_SHARED_LOCKS_REQUIRED(mu_) {
|
|
74
|
+
return kState - next_;
|
|
75
|
+
}
|
|
76
|
+
|
|
76
77
|
private:
|
|
77
78
|
// Randen URBG state.
|
|
78
|
-
|
|
79
|
+
// At least 32-byte alignment is required by ARM platform code.
|
|
80
|
+
alignas(32) uint32_t state_[kState] ABSL_GUARDED_BY(mu_);
|
|
79
81
|
SpinLock mu_;
|
|
80
82
|
const Randen impl_;
|
|
81
83
|
size_t next_ ABSL_GUARDED_BY(mu_);
|
|
82
84
|
};
|
|
83
85
|
|
|
84
|
-
template <>
|
|
85
|
-
inline uint8_t RandenPoolEntry::Generate<uint8_t>() {
|
|
86
|
-
SpinLockHolder l(&mu_);
|
|
87
|
-
MaybeRefill();
|
|
88
|
-
return static_cast<uint8_t>(state_[next_++]);
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
template <>
|
|
92
|
-
inline uint16_t RandenPoolEntry::Generate<uint16_t>() {
|
|
93
|
-
SpinLockHolder l(&mu_);
|
|
94
|
-
MaybeRefill();
|
|
95
|
-
return static_cast<uint16_t>(state_[next_++]);
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
template <>
|
|
99
|
-
inline uint32_t RandenPoolEntry::Generate<uint32_t>() {
|
|
100
|
-
SpinLockHolder l(&mu_);
|
|
101
|
-
MaybeRefill();
|
|
102
|
-
return state_[next_++];
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
template <>
|
|
106
|
-
inline uint64_t RandenPoolEntry::Generate<uint64_t>() {
|
|
107
|
-
SpinLockHolder l(&mu_);
|
|
108
|
-
if (next_ >= kState - 1) {
|
|
109
|
-
next_ = kCapacity;
|
|
110
|
-
impl_.Generate(state_);
|
|
111
|
-
}
|
|
112
|
-
auto p = state_ + next_;
|
|
113
|
-
next_ += 2;
|
|
114
|
-
|
|
115
|
-
uint64_t result;
|
|
116
|
-
std::memcpy(&result, p, sizeof(result));
|
|
117
|
-
return result;
|
|
118
|
-
}
|
|
119
|
-
|
|
120
86
|
void RandenPoolEntry::Fill(uint8_t* out, size_t bytes) {
|
|
121
|
-
SpinLockHolder l(
|
|
87
|
+
SpinLockHolder l(mu_);
|
|
122
88
|
while (bytes > 0) {
|
|
123
89
|
MaybeRefill();
|
|
124
|
-
size_t remaining = (
|
|
90
|
+
size_t remaining = available() * sizeof(state_[0]);
|
|
125
91
|
size_t to_copy = std::min(bytes, remaining);
|
|
126
92
|
std::memcpy(out, &state_[next_], to_copy);
|
|
127
93
|
out += to_copy;
|
|
@@ -185,38 +151,17 @@ size_t GetPoolID() {
|
|
|
185
151
|
#endif
|
|
186
152
|
}
|
|
187
153
|
|
|
188
|
-
// Allocate a RandenPoolEntry with at least 32-byte alignment, which is required
|
|
189
|
-
// by ARM platform code.
|
|
190
|
-
RandenPoolEntry* PoolAlignedAlloc() {
|
|
191
|
-
constexpr size_t kAlignment =
|
|
192
|
-
ABSL_CACHELINE_SIZE > 32 ? ABSL_CACHELINE_SIZE : 32;
|
|
193
|
-
|
|
194
|
-
// Not all the platforms that we build for have std::aligned_alloc, however
|
|
195
|
-
// since we never free these objects, we can over allocate and munge the
|
|
196
|
-
// pointers to the correct alignment.
|
|
197
|
-
uintptr_t x = reinterpret_cast<uintptr_t>(
|
|
198
|
-
new char[sizeof(RandenPoolEntry) + kAlignment]);
|
|
199
|
-
auto y = x % kAlignment;
|
|
200
|
-
void* aligned = reinterpret_cast<void*>(y == 0 ? x : (x + kAlignment - y));
|
|
201
|
-
return new (aligned) RandenPoolEntry();
|
|
202
|
-
}
|
|
203
|
-
|
|
204
154
|
// Allocate and initialize kPoolSize objects of type RandenPoolEntry.
|
|
205
|
-
//
|
|
206
|
-
// The initialization strategy is to initialize one object directly from
|
|
207
|
-
// OS entropy, then to use that object to seed all of the individual
|
|
208
|
-
// pool instances.
|
|
209
155
|
void InitPoolURBG() {
|
|
210
156
|
static constexpr size_t kSeedSize =
|
|
211
157
|
RandenTraits::kStateBytes / sizeof(uint32_t);
|
|
212
|
-
// Read
|
|
158
|
+
// Read OS entropy once, and use it to initialize each pool entry.
|
|
213
159
|
uint32_t seed_material[kPoolSize * kSeedSize];
|
|
214
|
-
if (!
|
|
215
|
-
|
|
216
|
-
random_internal::ThrowSeedGenException();
|
|
160
|
+
if (!ReadSeedMaterialFromOSEntropy(absl::MakeSpan(seed_material))) {
|
|
161
|
+
ThrowSeedGenException();
|
|
217
162
|
}
|
|
218
163
|
for (size_t i = 0; i < kPoolSize; i++) {
|
|
219
|
-
shared_pools[i] =
|
|
164
|
+
shared_pools[i] = new RandenPoolEntry();
|
|
220
165
|
shared_pools[i]->Init(
|
|
221
166
|
absl::MakeSpan(&seed_material[i * kSeedSize], kSeedSize));
|
|
222
167
|
}
|
|
@@ -230,24 +175,11 @@ RandenPoolEntry* GetPoolForCurrentThread() {
|
|
|
230
175
|
|
|
231
176
|
} // namespace
|
|
232
177
|
|
|
233
|
-
|
|
234
|
-
typename RandenPool<T>::result_type RandenPool<T>::Generate() {
|
|
178
|
+
void GetEntropyFromRandenPool(void* dest, size_t bytes) {
|
|
235
179
|
auto* pool = GetPoolForCurrentThread();
|
|
236
|
-
|
|
180
|
+
pool->Fill(reinterpret_cast<uint8_t*>(dest), bytes);
|
|
237
181
|
}
|
|
238
182
|
|
|
239
|
-
template <typename T>
|
|
240
|
-
void RandenPool<T>::Fill(absl::Span<result_type> data) {
|
|
241
|
-
auto* pool = GetPoolForCurrentThread();
|
|
242
|
-
pool->Fill(reinterpret_cast<uint8_t*>(data.data()),
|
|
243
|
-
data.size() * sizeof(result_type));
|
|
244
|
-
}
|
|
245
|
-
|
|
246
|
-
template class RandenPool<uint8_t>;
|
|
247
|
-
template class RandenPool<uint16_t>;
|
|
248
|
-
template class RandenPool<uint32_t>;
|
|
249
|
-
template class RandenPool<uint64_t>;
|
|
250
|
-
|
|
251
183
|
} // namespace random_internal
|
|
252
184
|
ABSL_NAMESPACE_END
|
|
253
185
|
} // namespace absl
|
package/vendor/abseil-cpp/absl/{base/inline_variable_test_b.cc → random/internal/entropy_pool.h}
RENAMED
|
@@ -12,16 +12,24 @@
|
|
|
12
12
|
// See the License for the specific language governing permissions and
|
|
13
13
|
// limitations under the License.
|
|
14
14
|
|
|
15
|
-
#
|
|
15
|
+
#ifndef ABSL_RANDOM_INTERNAL_ENTROPY_POOL_H_
|
|
16
|
+
#define ABSL_RANDOM_INTERNAL_ENTROPY_POOL_H_
|
|
17
|
+
|
|
18
|
+
#include <cstddef>
|
|
19
|
+
|
|
20
|
+
#include "absl/base/config.h"
|
|
16
21
|
|
|
17
22
|
namespace absl {
|
|
18
23
|
ABSL_NAMESPACE_BEGIN
|
|
19
|
-
namespace
|
|
24
|
+
namespace random_internal {
|
|
20
25
|
|
|
21
|
-
|
|
26
|
+
// GetEntropyFromRandenPool() is a helper function that fills a memory region
|
|
27
|
+
// with random bytes from the RandenPool. This is used by the absl::BitGen
|
|
28
|
+
// implementation to fill the internal buffer.
|
|
29
|
+
void GetEntropyFromRandenPool(void* dest, size_t bytes);
|
|
22
30
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
} // namespace inline_variable_testing_internal
|
|
31
|
+
} // namespace random_internal
|
|
26
32
|
ABSL_NAMESPACE_END
|
|
27
33
|
} // namespace absl
|
|
34
|
+
|
|
35
|
+
#endif // ABSL_RANDOM_INTERNAL_ENTROPY_POOL_H_
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
// Copyright 2017 The Abseil Authors.
|
|
2
|
+
//
|
|
3
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
// you may not use this file except in compliance with the License.
|
|
5
|
+
// You may obtain a copy of the License at
|
|
6
|
+
//
|
|
7
|
+
// https://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
//
|
|
9
|
+
// Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
// See the License for the specific language governing permissions and
|
|
13
|
+
// limitations under the License.
|
|
14
|
+
|
|
15
|
+
#include "absl/random/internal/entropy_pool.h"
|
|
16
|
+
|
|
17
|
+
#include <bitset>
|
|
18
|
+
#include <cmath>
|
|
19
|
+
#include <cstddef>
|
|
20
|
+
#include <cstdint>
|
|
21
|
+
#include <thread> // NOLINT
|
|
22
|
+
#include <utility>
|
|
23
|
+
#include <vector>
|
|
24
|
+
|
|
25
|
+
#include "gtest/gtest.h"
|
|
26
|
+
#include "absl/container/flat_hash_set.h"
|
|
27
|
+
#include "absl/synchronization/mutex.h"
|
|
28
|
+
|
|
29
|
+
namespace {
|
|
30
|
+
|
|
31
|
+
using ::absl::random_internal::GetEntropyFromRandenPool;
|
|
32
|
+
|
|
33
|
+
TEST(EntropyPoolTest, DistinctSequencesPerThread) {
|
|
34
|
+
using result_type = uint32_t;
|
|
35
|
+
constexpr int kNumThreads = 12;
|
|
36
|
+
constexpr size_t kValuesPerThread = 32;
|
|
37
|
+
|
|
38
|
+
// Acquire entropy from multiple threads.
|
|
39
|
+
std::vector<std::vector<result_type>> data;
|
|
40
|
+
{
|
|
41
|
+
absl::Mutex mu;
|
|
42
|
+
std::vector<std::thread> threads;
|
|
43
|
+
for (int i = 0; i < kNumThreads; i++) {
|
|
44
|
+
threads.emplace_back([&]() {
|
|
45
|
+
std::vector<result_type> v(kValuesPerThread);
|
|
46
|
+
GetEntropyFromRandenPool(v.data(), sizeof(result_type) * v.size());
|
|
47
|
+
absl::MutexLock l(mu);
|
|
48
|
+
data.push_back(std::move(v));
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
for (auto& t : threads) t.join();
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
EXPECT_EQ(data.size(), kNumThreads);
|
|
55
|
+
|
|
56
|
+
// There should be essentially no duplicates in the sequences.
|
|
57
|
+
size_t expected_size = 0;
|
|
58
|
+
absl::flat_hash_set<result_type> seen;
|
|
59
|
+
for (const auto& v : data) {
|
|
60
|
+
expected_size += v.size();
|
|
61
|
+
for (result_type x : v) seen.insert(x);
|
|
62
|
+
}
|
|
63
|
+
EXPECT_GE(seen.size(), expected_size - 1);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
// This validates that sequences are independent.
|
|
67
|
+
TEST(EntropyPoolTest, ValidateDistribution) {
|
|
68
|
+
using result_type = uint32_t;
|
|
69
|
+
constexpr int kNumOutputs = 16;
|
|
70
|
+
std::vector<result_type> a(kNumOutputs);
|
|
71
|
+
std::vector<result_type> b(kNumOutputs);
|
|
72
|
+
|
|
73
|
+
GetEntropyFromRandenPool(a.data(), sizeof(a[0]) * a.size());
|
|
74
|
+
GetEntropyFromRandenPool(b.data(), sizeof(b[0]) * b.size());
|
|
75
|
+
|
|
76
|
+
// Compare the two sequences, counting the number of bits that are different,
|
|
77
|
+
// then verify using a normal-approximation of the binomial distribution.
|
|
78
|
+
size_t changed_bits = 0;
|
|
79
|
+
size_t total_set = 0;
|
|
80
|
+
size_t equal_count = 0;
|
|
81
|
+
size_t zero_count = 0;
|
|
82
|
+
for (size_t i = 0; i < a.size(); ++i) {
|
|
83
|
+
std::bitset<sizeof(result_type) * 8> changed_set(a[i] ^ b[i]);
|
|
84
|
+
changed_bits += changed_set.count();
|
|
85
|
+
|
|
86
|
+
std::bitset<sizeof(result_type) * 8> a_set(a[i]);
|
|
87
|
+
std::bitset<sizeof(result_type) * 8> b_set(b[i]);
|
|
88
|
+
total_set += a_set.count() + b_set.count();
|
|
89
|
+
|
|
90
|
+
equal_count += (a[i] == b[i]) ? 1 : 0;
|
|
91
|
+
|
|
92
|
+
zero_count += (a[i] == 0) ? 1 : 0;
|
|
93
|
+
zero_count += (b[i] == 0) ? 1 : 0;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
constexpr size_t kNBits = kNumOutputs * sizeof(result_type) * 8;
|
|
97
|
+
|
|
98
|
+
// This should be a binomial distribution with:
|
|
99
|
+
// p = 0.5
|
|
100
|
+
// n = kNBits
|
|
101
|
+
// sigma =~ 11.3 (sqrt(n * 0.5 * 0.5))
|
|
102
|
+
// So we expect the number of changed bits to be within 5 standard deviations
|
|
103
|
+
// of the mean; this should fail less than one in 3 million times.
|
|
104
|
+
EXPECT_NEAR(changed_bits, kNBits * 0.5, 5 * std::sqrt(kNBits))
|
|
105
|
+
<< "@" << changed_bits / static_cast<double>(kNBits);
|
|
106
|
+
|
|
107
|
+
// Verify that the number of set bits is also within the expected range;
|
|
108
|
+
// Note that this is summed over the two sequences, so the number of trials
|
|
109
|
+
// is twice the number of bits.
|
|
110
|
+
EXPECT_NEAR(total_set, kNBits, 5 * std::sqrt(2 * kNBits))
|
|
111
|
+
<< "@" << total_set / static_cast<double>(2 * kNBits);
|
|
112
|
+
|
|
113
|
+
// A[i] == B[i] with probability ~= 16 * 1/2^32; certainly less than 1.
|
|
114
|
+
EXPECT_LE(equal_count, 1);
|
|
115
|
+
|
|
116
|
+
// Zeros values must be rare; 32 / 2^32 is certainly less than 1.
|
|
117
|
+
EXPECT_LE(zero_count, 1);
|
|
118
|
+
}
|
|
119
|
+
} // namespace
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
#include <utility>
|
|
20
20
|
|
|
21
21
|
#include "absl/base/config.h"
|
|
22
|
-
#include "absl/base/
|
|
22
|
+
#include "absl/base/fast_type_id.h"
|
|
23
23
|
#include "absl/types/optional.h"
|
|
24
24
|
|
|
25
25
|
namespace absl {
|
|
@@ -48,7 +48,7 @@ struct NoOpValidator {
|
|
|
48
48
|
// result_type(args...)
|
|
49
49
|
//
|
|
50
50
|
class MockHelpers {
|
|
51
|
-
using IdType = ::absl::
|
|
51
|
+
using IdType = ::absl::FastTypeIdType;
|
|
52
52
|
|
|
53
53
|
// Given a key signature type used to index the mock, extract the components.
|
|
54
54
|
// KeyT is expected to have the form:
|
|
@@ -82,8 +82,7 @@ class MockHelpers {
|
|
|
82
82
|
Args&&... args) {
|
|
83
83
|
ArgTupleT arg_tuple(std::forward<Args>(args)...);
|
|
84
84
|
ReturnT result;
|
|
85
|
-
if (urbg->InvokeMock(
|
|
86
|
-
&result)) {
|
|
85
|
+
if (urbg->InvokeMock(FastTypeId<KeyT>(), &arg_tuple, &result)) {
|
|
87
86
|
return result;
|
|
88
87
|
}
|
|
89
88
|
return absl::nullopt;
|
|
@@ -92,9 +91,9 @@ class MockHelpers {
|
|
|
92
91
|
public:
|
|
93
92
|
// InvokeMock is private; this provides access for some specialized use cases.
|
|
94
93
|
template <typename URBG>
|
|
95
|
-
static inline bool PrivateInvokeMock(URBG* urbg, IdType
|
|
94
|
+
static inline bool PrivateInvokeMock(URBG* urbg, IdType key_id,
|
|
96
95
|
void* args_tuple, void* result) {
|
|
97
|
-
return urbg->InvokeMock(
|
|
96
|
+
return urbg->InvokeMock(key_id, args_tuple, result);
|
|
98
97
|
}
|
|
99
98
|
|
|
100
99
|
// Invoke a mock for the KeyT (may or may not be a signature).
|
|
@@ -138,7 +137,7 @@ class MockHelpers {
|
|
|
138
137
|
m, std::declval<IdType>(), ValidatorT())) {
|
|
139
138
|
return m.template RegisterMock<typename KeySignature<KeyT>::result_type,
|
|
140
139
|
typename KeySignature<KeyT>::arg_tuple_type>(
|
|
141
|
-
m, ::absl::
|
|
140
|
+
m, ::absl::FastTypeId<KeyT>(), ValidatorT());
|
|
142
141
|
}
|
|
143
142
|
|
|
144
143
|
// Acquire a mock for the KeyT (may or may not be a signature).
|
|
@@ -16,19 +16,19 @@
|
|
|
16
16
|
#define ABSL_RANDOM_INTERNAL_NONSECURE_BASE_H_
|
|
17
17
|
|
|
18
18
|
#include <algorithm>
|
|
19
|
+
#include <cstddef>
|
|
19
20
|
#include <cstdint>
|
|
20
21
|
#include <iterator>
|
|
21
22
|
#include <type_traits>
|
|
22
23
|
#include <utility>
|
|
23
24
|
#include <vector>
|
|
24
25
|
|
|
25
|
-
#include "absl/base/
|
|
26
|
+
#include "absl/base/config.h"
|
|
26
27
|
#include "absl/container/inlined_vector.h"
|
|
27
28
|
#include "absl/meta/type_traits.h"
|
|
28
|
-
#include "absl/random/internal/
|
|
29
|
+
#include "absl/random/internal/entropy_pool.h"
|
|
29
30
|
#include "absl/random/internal/salted_seed_seq.h"
|
|
30
31
|
#include "absl/random/internal/seed_material.h"
|
|
31
|
-
#include "absl/types/span.h"
|
|
32
32
|
|
|
33
33
|
namespace absl {
|
|
34
34
|
ABSL_NAMESPACE_BEGIN
|
|
@@ -46,8 +46,7 @@ class RandenPoolSeedSeq {
|
|
|
46
46
|
void generate_impl(ContiguousTag, Contiguous begin, Contiguous end) {
|
|
47
47
|
const size_t n = static_cast<size_t>(std::distance(begin, end));
|
|
48
48
|
auto* a = &(*begin);
|
|
49
|
-
|
|
50
|
-
absl::MakeSpan(reinterpret_cast<uint8_t*>(a), sizeof(*a) * n));
|
|
49
|
+
GetEntropyFromRandenPool(a, sizeof(*a) * n);
|
|
51
50
|
}
|
|
52
51
|
|
|
53
52
|
// Construct a buffer of size n and fill it with values, then copy
|
|
@@ -57,7 +56,7 @@ class RandenPoolSeedSeq {
|
|
|
57
56
|
RandomAccessIterator end) {
|
|
58
57
|
const size_t n = std::distance(begin, end);
|
|
59
58
|
absl::InlinedVector<uint32_t, 8> data(n, 0);
|
|
60
|
-
|
|
59
|
+
GetEntropyFromRandenPool(data.begin(), sizeof(data[0]) * n);
|
|
61
60
|
std::copy(std::begin(data), std::end(data), begin);
|
|
62
61
|
}
|
|
63
62
|
|
|
@@ -14,18 +14,22 @@
|
|
|
14
14
|
|
|
15
15
|
#include "absl/random/internal/nonsecure_base.h"
|
|
16
16
|
|
|
17
|
+
#include <algorithm>
|
|
17
18
|
#include <cstddef>
|
|
18
19
|
#include <cstdint>
|
|
19
20
|
#include <iterator>
|
|
20
21
|
#include <random>
|
|
22
|
+
#include <thread> // NOLINT
|
|
21
23
|
#include <type_traits>
|
|
22
24
|
#include <utility>
|
|
23
25
|
#include <vector>
|
|
24
26
|
|
|
25
27
|
#include "gtest/gtest.h"
|
|
28
|
+
#include "absl/container/flat_hash_set.h"
|
|
26
29
|
#include "absl/meta/type_traits.h"
|
|
27
30
|
#include "absl/random/distributions.h"
|
|
28
31
|
#include "absl/random/random.h"
|
|
32
|
+
#include "absl/synchronization/mutex.h"
|
|
29
33
|
|
|
30
34
|
namespace {
|
|
31
35
|
|
|
@@ -194,6 +198,41 @@ TEST(NonsecureURBGBase, EqualSeedSequencesYieldEqualVariates) {
|
|
|
194
198
|
}
|
|
195
199
|
}
|
|
196
200
|
|
|
201
|
+
TEST(NonsecureURBGBase, DistinctSequencesPerThread) {
|
|
202
|
+
constexpr int kNumThreads = 12;
|
|
203
|
+
constexpr size_t kValuesPerThread = 32;
|
|
204
|
+
using result_type = absl::BitGen::result_type;
|
|
205
|
+
|
|
206
|
+
// Acquire initial sequences from multiple threads.
|
|
207
|
+
std::vector<std::vector<result_type>> data;
|
|
208
|
+
{
|
|
209
|
+
absl::Mutex mu;
|
|
210
|
+
std::vector<std::thread> threads;
|
|
211
|
+
for (int i = 0; i < kNumThreads; i++) {
|
|
212
|
+
threads.emplace_back([&]() {
|
|
213
|
+
absl::BitGen gen;
|
|
214
|
+
|
|
215
|
+
std::vector<result_type> v(kValuesPerThread);
|
|
216
|
+
std::generate(v.begin(), v.end(), [&]() { return gen(); });
|
|
217
|
+
absl::MutexLock l(mu);
|
|
218
|
+
data.push_back(std::move(v));
|
|
219
|
+
});
|
|
220
|
+
}
|
|
221
|
+
for (auto& t : threads) t.join();
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
EXPECT_EQ(data.size(), kNumThreads);
|
|
225
|
+
|
|
226
|
+
// There should be essentially no duplicates in the sequences.
|
|
227
|
+
size_t expected_size = 0;
|
|
228
|
+
absl::flat_hash_set<result_type> seen;
|
|
229
|
+
for (const auto& v : data) {
|
|
230
|
+
expected_size += v.size();
|
|
231
|
+
for (result_type x : v) seen.insert(x);
|
|
232
|
+
}
|
|
233
|
+
EXPECT_GE(seen.size(), expected_size - 1);
|
|
234
|
+
}
|
|
235
|
+
|
|
197
236
|
TEST(RandenPoolSeedSeqTest, SeederWorksForU32) {
|
|
198
237
|
absl::random_internal::RandenPoolSeedSeq seeder;
|
|
199
238
|
|
|
@@ -20,6 +20,7 @@
|
|
|
20
20
|
#include "absl/random/internal/nanobenchmark.h"
|
|
21
21
|
#include "absl/random/internal/platform.h"
|
|
22
22
|
#include "absl/random/internal/randen.h"
|
|
23
|
+
#include "absl/random/internal/randen_detect.h"
|
|
23
24
|
#include "absl/random/internal/randen_engine.h"
|
|
24
25
|
#include "absl/random/internal/randen_hwaes.h"
|
|
25
26
|
#include "absl/random/internal/randen_slow.h"
|
|
@@ -27,6 +28,7 @@
|
|
|
27
28
|
|
|
28
29
|
namespace {
|
|
29
30
|
|
|
31
|
+
using absl::random_internal::CPUSupportsRandenHwAes;
|
|
30
32
|
using absl::random_internal::Randen;
|
|
31
33
|
using absl::random_internal::RandenHwAes;
|
|
32
34
|
using absl::random_internal::RandenSlow;
|
|
@@ -150,14 +152,14 @@ void RunAll(const int argc, char* argv[]) {
|
|
|
150
152
|
const FuncInput unpredictable = (argc != 999);
|
|
151
153
|
static const FuncInput inputs[] = {unpredictable * 100, unpredictable * 1000};
|
|
152
154
|
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
155
|
+
if (CPUSupportsRandenHwAes()) {
|
|
156
|
+
Measure<AbsorbFn<RandenHwAes>>("Absorb (HwAes)", inputs);
|
|
157
|
+
}
|
|
156
158
|
Measure<AbsorbFn<RandenSlow>>("Absorb (Slow)", inputs);
|
|
157
159
|
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
160
|
+
if (CPUSupportsRandenHwAes()) {
|
|
161
|
+
Measure<GenerateFn<RandenHwAes>>("Generate (HwAes)", inputs);
|
|
162
|
+
}
|
|
161
163
|
Measure<GenerateFn<RandenSlow>>("Generate (Slow)", inputs);
|
|
162
164
|
|
|
163
165
|
// Measure the production engine.
|
|
@@ -74,7 +74,7 @@ static void __cpuid(int cpu_info[4], int info_type) {
|
|
|
74
74
|
// On linux, just use the c-library getauxval call.
|
|
75
75
|
#if defined(ABSL_INTERNAL_USE_LINUX_GETAUXVAL)
|
|
76
76
|
|
|
77
|
-
|
|
77
|
+
#include <sys/auxv.h>
|
|
78
78
|
|
|
79
79
|
static uint32_t GetAuxval(uint32_t hwcap_type) {
|
|
80
80
|
return static_cast<uint32_t>(getauxval(hwcap_type));
|
|
@@ -23,17 +23,23 @@
|
|
|
23
23
|
#endif
|
|
24
24
|
|
|
25
25
|
#include <algorithm>
|
|
26
|
+
#include <cassert>
|
|
26
27
|
#include <cerrno>
|
|
27
28
|
#include <cstdint>
|
|
28
29
|
#include <cstdlib>
|
|
29
30
|
#include <cstring>
|
|
31
|
+
#include <string>
|
|
32
|
+
#include <vector>
|
|
30
33
|
|
|
34
|
+
#include "absl/base/config.h"
|
|
31
35
|
#include "absl/base/dynamic_annotations.h"
|
|
32
36
|
#include "absl/base/internal/raw_logging.h"
|
|
33
37
|
#include "absl/strings/ascii.h"
|
|
34
38
|
#include "absl/strings/escaping.h"
|
|
35
39
|
#include "absl/strings/string_view.h"
|
|
36
40
|
#include "absl/strings/strip.h"
|
|
41
|
+
#include "absl/types/optional.h"
|
|
42
|
+
#include "absl/types/span.h"
|
|
37
43
|
|
|
38
44
|
#if defined(__native_client__)
|
|
39
45
|
|
|
@@ -167,24 +173,27 @@ bool ReadSeedMaterialFromDevURandom(absl::Span<uint32_t> values) {
|
|
|
167
173
|
size_t buffer_size = sizeof(uint32_t) * values.size();
|
|
168
174
|
|
|
169
175
|
int dev_urandom = open(kEntropyFile, O_RDONLY);
|
|
170
|
-
|
|
171
|
-
|
|
176
|
+
if (dev_urandom < 0) {
|
|
177
|
+
ABSL_RAW_LOG(ERROR, "Failed to open /dev/urandom.");
|
|
172
178
|
return false;
|
|
173
179
|
}
|
|
174
180
|
|
|
175
|
-
while (
|
|
181
|
+
while (buffer_size > 0) {
|
|
176
182
|
ssize_t bytes_read = read(dev_urandom, buffer, buffer_size);
|
|
177
183
|
int read_error = errno;
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
+
if (bytes_read == -1 && read_error == EINTR) {
|
|
185
|
+
// Interrupted, try again.
|
|
186
|
+
continue;
|
|
187
|
+
} else if (bytes_read <= 0) {
|
|
188
|
+
// EOF, or error.
|
|
189
|
+
break;
|
|
184
190
|
}
|
|
191
|
+
buffer += bytes_read;
|
|
192
|
+
buffer_size -= static_cast<size_t>(bytes_read);
|
|
185
193
|
}
|
|
194
|
+
|
|
186
195
|
close(dev_urandom);
|
|
187
|
-
return
|
|
196
|
+
return buffer_size == 0;
|
|
188
197
|
}
|
|
189
198
|
|
|
190
199
|
bool ReadSeedMaterialFromOSEntropyImpl(absl::Span<uint32_t> values) {
|
|
@@ -251,8 +260,7 @@ absl::optional<uint32_t> GetSaltMaterial() {
|
|
|
251
260
|
static const auto salt_material = []() -> absl::optional<uint32_t> {
|
|
252
261
|
uint32_t salt_value = 0;
|
|
253
262
|
|
|
254
|
-
if (
|
|
255
|
-
MakeSpan(&salt_value, 1))) {
|
|
263
|
+
if (ReadSeedMaterialFromOSEntropy(absl::MakeSpan(&salt_value, 1))) {
|
|
256
264
|
return salt_value;
|
|
257
265
|
}
|
|
258
266
|
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
#include <string>
|
|
22
22
|
#include <vector>
|
|
23
23
|
|
|
24
|
-
#include "absl/base/
|
|
24
|
+
#include "absl/base/config.h"
|
|
25
25
|
#include "absl/random/internal/fast_uniform_bits.h"
|
|
26
26
|
#include "absl/types/optional.h"
|
|
27
27
|
#include "absl/types/span.h"
|
|
@@ -54,7 +54,7 @@ static_assert(kEntropyBlocksNeeded > 0,
|
|
|
54
54
|
// to the C++ Standard "Seed Sequence" concept [rand.req.seedseq].
|
|
55
55
|
//
|
|
56
56
|
// If values.data() == nullptr, the behavior is undefined.
|
|
57
|
-
|
|
57
|
+
[[nodiscard]]
|
|
58
58
|
bool ReadSeedMaterialFromOSEntropy(absl::Span<uint32_t> values);
|
|
59
59
|
|
|
60
60
|
// Attempts to fill a span of uint32_t-values using variates generated by an
|
|
@@ -65,8 +65,8 @@ bool ReadSeedMaterialFromOSEntropy(absl::Span<uint32_t> values);
|
|
|
65
65
|
//
|
|
66
66
|
// If urbg == nullptr or values.data() == nullptr, the behavior is undefined.
|
|
67
67
|
template <typename URBG>
|
|
68
|
-
|
|
69
|
-
|
|
68
|
+
[[nodiscard]] bool ReadSeedMaterialFromURBG(URBG* urbg,
|
|
69
|
+
absl::Span<uint32_t> values) {
|
|
70
70
|
random_internal::FastUniformBits<uint32_t> distr;
|
|
71
71
|
|
|
72
72
|
assert(urbg != nullptr && values.data() != nullptr);
|
|
@@ -94,7 +94,7 @@ void MixIntoSeedMaterial(absl::Span<const uint32_t> sequence,
|
|
|
94
94
|
//
|
|
95
95
|
// Salt is obtained only once and stored in static variable.
|
|
96
96
|
//
|
|
97
|
-
// May return empty value if
|
|
97
|
+
// May return empty value if obtaining the salt was not possible.
|
|
98
98
|
absl::optional<uint32_t> GetSaltMaterial();
|
|
99
99
|
|
|
100
100
|
} // namespace random_internal
|
|
@@ -15,12 +15,15 @@
|
|
|
15
15
|
#include "absl/random/internal/seed_material.h"
|
|
16
16
|
|
|
17
17
|
#include <bitset>
|
|
18
|
+
#include <cstdint>
|
|
18
19
|
#include <cstdlib>
|
|
19
20
|
#include <cstring>
|
|
20
21
|
#include <random>
|
|
22
|
+
#include <vector>
|
|
21
23
|
|
|
22
24
|
#include "gmock/gmock.h"
|
|
23
25
|
#include "gtest/gtest.h"
|
|
26
|
+
#include "absl/types/span.h"
|
|
24
27
|
|
|
25
28
|
#ifdef __ANDROID__
|
|
26
29
|
// Android assert messages only go to system log, so death tests cannot inspect
|