Add support for using public key sent by Omaha.

This adds support for Omaha to specify what RSA public to use for
verifying both the metadata hash signature and the payload itself.

For security reasons, we only allow this for non-official builds
e.g. for official builds we keep using the key stored on the root
file-system.

Also, if the key is specified in the Omaha response then we make hash
checks mandatory; e.g. if the signatures don't check out, fail the
update.

See CL:175283 for the devserver changes to transmit the public key and
signed metadata hash.

BUG=chromium:264352
TEST=New unit tests + unit tests pass + manual testing.

Change-Id: I709be02662a484c6284bb78683b973554e482928
Reviewed-on: https://chromium-review.googlesource.com/175285
Reviewed-by: Don Garrett <dgarrett@chromium.org>
Commit-Queue: David Zeuthen <zeuthen@chromium.org>
Tested-by: David Zeuthen <zeuthen@chromium.org>
13 files changed
tree: f57430dd135fc7d0ddc27d10c0cf0ded37c06710
  1. .gitignore
  2. 99-gpio-dutflag.rules
  3. action.h
  4. action_mock.h
  5. action_pipe.h
  6. action_pipe_unittest.cc
  7. action_processor.cc
  8. action_processor.h
  9. action_processor_mock.h
  10. action_processor_unittest.cc
  11. action_unittest.cc
  12. build
  13. bzip.cc
  14. bzip.h
  15. bzip_extent_writer.cc
  16. bzip_extent_writer.h
  17. bzip_extent_writer_unittest.cc
  18. certificate_checker.cc
  19. certificate_checker.h
  20. certificate_checker_mock.h
  21. certificate_checker_unittest.cc
  22. chrome_browser_proxy_resolver.cc
  23. chrome_browser_proxy_resolver.h
  24. chrome_browser_proxy_resolver_unittest.cc
  25. clock.cc
  26. clock.h
  27. clock_interface.h
  28. connection_manager.cc
  29. connection_manager.h
  30. connection_manager_unittest.cc
  31. constants.cc
  32. constants.h
  33. cycle_breaker.cc
  34. cycle_breaker.h
  35. cycle_breaker_unittest.cc
  36. dbus_constants.h
  37. dbus_interface.h
  38. dbus_service.cc
  39. dbus_service.h
  40. delta_diff_generator.cc
  41. delta_diff_generator.h
  42. delta_diff_generator_unittest.cc
  43. delta_performer.cc
  44. delta_performer.h
  45. delta_performer_unittest.cc
  46. download_action.cc
  47. download_action.h
  48. download_action_unittest.cc
  49. error_code.h
  50. extent_mapper.cc
  51. extent_mapper.h
  52. extent_mapper_unittest.cc
  53. extent_ranges.cc
  54. extent_ranges.h
  55. extent_ranges_unittest.cc
  56. extent_writer.cc
  57. extent_writer.h
  58. extent_writer_unittest.cc
  59. fake_clock.h
  60. fake_hardware.h
  61. fake_p2p_manager.h
  62. fake_p2p_manager_configuration.h
  63. file_descriptor.cc
  64. file_descriptor.h
  65. file_writer.cc
  66. file_writer.h
  67. file_writer_mock.h
  68. file_writer_unittest.cc
  69. filesystem_copier_action.cc
  70. filesystem_copier_action.h
  71. filesystem_copier_action_unittest.cc
  72. filesystem_iterator.cc
  73. filesystem_iterator.h
  74. filesystem_iterator_unittest.cc
  75. full_update_generator.cc
  76. full_update_generator.h
  77. full_update_generator_unittest.cc
  78. gen_coverage_html
  79. generate_delta_main.cc
  80. gpio_handler.cc
  81. gpio_handler.h
  82. gpio_handler_unittest.cc
  83. gpio_handler_unittest.h
  84. gpio_mock_file_descriptor.cc
  85. gpio_mock_file_descriptor.h
  86. gpio_mock_udev_interface.cc
  87. gpio_mock_udev_interface.h
  88. graph_types.h
  89. graph_utils.cc
  90. graph_utils.h
  91. graph_utils_unittest.cc
  92. hardware.cc
  93. hardware.h
  94. hardware_interface.h
  95. http_common.cc
  96. http_common.h
  97. http_fetcher.cc
  98. http_fetcher.h
  99. http_fetcher_unittest.cc
  100. inherit-review-settings-ok
  101. install_plan.cc
  102. install_plan.h
  103. libcurl_http_fetcher.cc
  104. libcurl_http_fetcher.h
  105. LICENSE
  106. local_coverage_rate
  107. main.cc
  108. marshal.list
  109. metadata.cc
  110. metadata.h
  111. metadata_unittest.cc
  112. mock_connection_manager.h
  113. mock_dbus_interface.h
  114. mock_file_writer.h
  115. mock_gpio_handler.h
  116. mock_http_fetcher.cc
  117. mock_http_fetcher.h
  118. mock_p2p_manager.h
  119. mock_payload_state.h
  120. mock_system_state.cc
  121. mock_system_state.h
  122. multi_range_http_fetcher.cc
  123. multi_range_http_fetcher.h
  124. omaha_hash_calculator.cc
  125. omaha_hash_calculator.h
  126. omaha_hash_calculator_unittest.cc
  127. omaha_request_action.cc
  128. omaha_request_action.h
  129. omaha_request_action_unittest.cc
  130. omaha_request_params.cc
  131. omaha_request_params.h
  132. omaha_request_params_unittest.cc
  133. omaha_response.h
  134. omaha_response_handler_action.cc
  135. omaha_response_handler_action.h
  136. omaha_response_handler_action_unittest.cc
  137. org.chromium.UpdateEngine.service
  138. p2p_manager.cc
  139. p2p_manager.h
  140. p2p_manager_unittest.cc
  141. payload_signer.cc
  142. payload_signer.h
  143. payload_signer_unittest.cc
  144. payload_state.cc
  145. payload_state.h
  146. payload_state_interface.h
  147. payload_state_unittest.cc
  148. postinstall_runner_action.cc
  149. postinstall_runner_action.h
  150. postinstall_runner_action_unittest.cc
  151. prefs.cc
  152. prefs.h
  153. prefs_interface.h
  154. prefs_mock.h
  155. prefs_unittest.cc
  156. proxy_resolver.cc
  157. proxy_resolver.h
  158. real_system_state.h
  159. run_unittests
  160. sample_omaha_v3_response.xml
  161. SConstruct
  162. setup_dev_packages
  163. simple_key_value_store.cc
  164. simple_key_value_store.h
  165. simple_key_value_store_unittest.cc
  166. subprocess.cc
  167. subprocess.h
  168. subprocess_unittest.cc
  169. system_state.cc
  170. system_state.h
  171. tarjan.cc
  172. tarjan.h
  173. tarjan_unittest.cc
  174. terminator.cc
  175. terminator.h
  176. terminator_unittest.cc
  177. test_http_server.cc
  178. test_utils.cc
  179. test_utils.h
  180. testrunner.cc
  181. topological_sort.cc
  182. topological_sort.h
  183. topological_sort_unittest.cc
  184. udev_interface.h
  185. unittest_key.pem
  186. unittest_key2.pem
  187. update_attempter.cc
  188. update_attempter.h
  189. update_attempter_mock.h
  190. update_attempter_unittest.cc
  191. update_check_scheduler.cc
  192. update_check_scheduler.h
  193. update_check_scheduler_unittest.cc
  194. update_engine.xml
  195. update_engine_client.cc
  196. update_metadata.proto
  197. UpdateEngine.conf
  198. utils.cc
  199. utils.h
  200. utils_unittest.cc
  201. WATCHLISTS
  202. zip_unittest.cc