pw_crypto: Refactor Sha256

1. Extracts state tracking from backends to the facade, with tests
   against a mocked backend.

2. Makes Sha256::Update() chainable. e.g.
   ```
   if (!Sha256().Update(message).Update(more_message).Final().ok()) {
       // Handle errors.
   }
   ```
   All usage and documentation are updated accordingly.

3. Inlines Sha256::Sha256()/Update()/Final() in sha256.h, removes
   sha256.cc.

4. Other trivial clean ups.

Test:
  - `pw presubmit`
  - `pw presubmit --step gn_crypto_(mbedtls|boringssl|micro_ecc)_build`

Change-Id: I1c9e09c4640472ff2bbff8853e076bd2ed9188d3
Reviewed-on: https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/55343
Commit-Queue: Ali Zhang <alizhang@google.com>
Commit-Queue: Auto-Submit <auto-submit@pigweed.google.com.iam.gserviceaccount.com>
Pigweed-Auto-Submit: Ali Zhang <alizhang@google.com>
Reviewed-by: Keir Mierle <keir@google.com>
15 files changed
tree: 3f25d81656566ca61526bafcef8ba36f1cd72e9e
  1. build_overrides/
  2. docker/
  3. docs/
  4. pw_allocator/
  5. pw_analog/
  6. pw_android_toolchain/
  7. pw_arduino_build/
  8. pw_assert/
  9. pw_assert_basic/
  10. pw_assert_log/
  11. pw_base64/
  12. pw_bloat/
  13. pw_blob_store/
  14. pw_boot/
  15. pw_boot_cortex_m/
  16. pw_build/
  17. pw_build_info/
  18. pw_bytes/
  19. pw_checksum/
  20. pw_chrono/
  21. pw_chrono_embos/
  22. pw_chrono_freertos/
  23. pw_chrono_stl/
  24. pw_chrono_threadx/
  25. pw_cli/
  26. pw_console/
  27. pw_containers/
  28. pw_cpu_exception/
  29. pw_cpu_exception_cortex_m/
  30. pw_crypto/
  31. pw_docgen/
  32. pw_doctor/
  33. pw_env_setup/
  34. pw_function/
  35. pw_fuzzer/
  36. pw_hdlc/
  37. pw_hex_dump/
  38. pw_i2c/
  39. pw_interrupt/
  40. pw_interrupt_cortex_m/
  41. pw_kvs/
  42. pw_libc/
  43. pw_log/
  44. pw_log_basic/
  45. pw_log_null/
  46. pw_log_rpc/
  47. pw_log_tokenized/
  48. pw_malloc/
  49. pw_malloc_freelist/
  50. pw_metric/
  51. pw_minimal_cpp_stdlib/
  52. pw_module/
  53. pw_multisink/
  54. pw_package/
  55. pw_persistent_ram/
  56. pw_polyfill/
  57. pw_preprocessor/
  58. pw_presubmit/
  59. pw_protobuf/
  60. pw_protobuf_compiler/
  61. pw_random/
  62. pw_result/
  63. pw_ring_buffer/
  64. pw_router/
  65. pw_rpc/
  66. pw_snapshot/
  67. pw_span/
  68. pw_status/
  69. pw_stm32cube_build/
  70. pw_stream/
  71. pw_string/
  72. pw_symbolizer/
  73. pw_sync/
  74. pw_sync_baremetal/
  75. pw_sync_embos/
  76. pw_sync_freertos/
  77. pw_sync_stl/
  78. pw_sync_threadx/
  79. pw_sys_io/
  80. pw_sys_io_arduino/
  81. pw_sys_io_baremetal_lm3s6965evb/
  82. pw_sys_io_baremetal_stm32f429/
  83. pw_sys_io_stdio/
  84. pw_target_runner/
  85. pw_thread/
  86. pw_thread_embos/
  87. pw_thread_freertos/
  88. pw_thread_stl/
  89. pw_thread_threadx/
  90. pw_tls_client/
  91. pw_tls_client_boringssl/
  92. pw_tls_client_mbedtls/
  93. pw_tokenizer/
  94. pw_tool/
  95. pw_toolchain/
  96. pw_trace/
  97. pw_trace_tokenized/
  98. pw_transfer/
  99. pw_unit_test/
  100. pw_varint/
  101. pw_watch/
  102. pw_web_ui/
  103. pw_work_queue/
  104. targets/
  105. third_party/
  106. .bazelignore
  107. .bazelrc
  108. .clang-format
  109. .clang-tidy
  110. .eslintrc.json
  111. .gitattributes
  112. .gitignore
  113. .gn
  114. .prettierrc.js
  115. .pylintrc
  116. activate.bat
  117. AUTHORS
  118. bootstrap.bat
  119. bootstrap.sh
  120. BUILD.bazel
  121. BUILD.gn
  122. BUILDCONFIG.gn
  123. CMakeLists.txt
  124. LICENSE
  125. modules.gni
  126. OWNERS
  127. package.json
  128. PW_PLUGINS
  129. README.md
  130. tsconfig.json
  131. WORKSPACE
  132. yarn.lock
README.md

See our website: http://pigweed.dev