grpc 1.9.1 → 1.10.0.pre1

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of grpc might be problematic. Click here for more details.

Files changed (637) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +2654 -953
  3. data/etc/roots.pem +282 -683
  4. data/include/grpc/compression.h +9 -26
  5. data/include/grpc/grpc.h +10 -24
  6. data/include/grpc/grpc_security.h +7 -1
  7. data/include/grpc/impl/codegen/compression_types.h +5 -62
  8. data/include/grpc/impl/codegen/grpc_types.h +10 -6
  9. data/include/grpc/module.modulemap +1 -10
  10. data/include/grpc/support/alloc.h +3 -2
  11. data/include/grpc/support/log.h +1 -2
  12. data/{src/core/lib/gpr/thd_internal.h → include/grpc/support/thd_id.h} +23 -9
  13. data/src/boringssl/err_data.c +550 -496
  14. data/src/core/ext/census/grpc_context.cc +2 -1
  15. data/src/core/ext/filters/client_channel/backup_poller.cc +5 -4
  16. data/src/core/ext/filters/client_channel/channel_connectivity.cc +7 -7
  17. data/src/core/ext/filters/client_channel/client_channel.cc +162 -172
  18. data/src/core/ext/filters/client_channel/client_channel_factory.cc +4 -2
  19. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +10 -10
  20. data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +18 -14
  21. data/src/core/ext/filters/client_channel/http_proxy.cc +3 -1
  22. data/src/core/ext/filters/client_channel/lb_policy.cc +21 -105
  23. data/src/core/ext/filters/client_channel/lb_policy.h +166 -170
  24. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +41 -36
  25. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +1452 -1459
  26. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.h +1 -1
  27. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +3 -2
  28. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc +7 -8
  29. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +27 -27
  30. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +279 -304
  31. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +358 -330
  32. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.cc +30 -41
  33. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +7 -14
  34. data/src/core/ext/filters/client_channel/lb_policy_factory.cc +8 -21
  35. data/src/core/ext/filters/client_channel/lb_policy_factory.h +23 -27
  36. data/src/core/ext/filters/client_channel/lb_policy_registry.cc +58 -33
  37. data/src/core/ext/filters/client_channel/lb_policy_registry.h +25 -12
  38. data/src/core/ext/filters/client_channel/parse_address.cc +10 -8
  39. data/src/core/ext/filters/client_channel/proxy_mapper_registry.cc +2 -2
  40. data/src/core/ext/filters/client_channel/resolver.cc +6 -52
  41. data/src/core/ext/filters/client_channel/resolver.h +98 -55
  42. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +266 -237
  43. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +5 -5
  44. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +31 -27
  45. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +244 -207
  46. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +161 -148
  47. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +47 -31
  48. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +126 -126
  49. data/src/core/ext/filters/client_channel/resolver_factory.h +33 -32
  50. data/src/core/ext/filters/client_channel/resolver_registry.cc +110 -90
  51. data/src/core/ext/filters/client_channel/resolver_registry.h +49 -36
  52. data/src/core/ext/filters/client_channel/retry_throttle.cc +29 -22
  53. data/src/core/ext/filters/client_channel/subchannel.cc +173 -173
  54. data/src/core/ext/filters/client_channel/subchannel.h +38 -45
  55. data/src/core/ext/filters/client_channel/subchannel_index.cc +44 -40
  56. data/src/core/ext/filters/client_channel/uri_parser.cc +3 -3
  57. data/src/core/ext/filters/deadline/deadline_filter.cc +27 -18
  58. data/src/core/ext/filters/http/client/http_client_filter.cc +26 -23
  59. data/src/core/ext/filters/http/http_filters_plugin.cc +3 -2
  60. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +78 -110
  61. data/src/core/ext/filters/http/server/http_server_filter.cc +29 -26
  62. data/src/core/ext/filters/load_reporting/server_load_reporting_filter.cc +9 -11
  63. data/src/core/ext/filters/load_reporting/server_load_reporting_plugin.cc +2 -1
  64. data/src/core/ext/filters/max_age/max_age_filter.cc +14 -14
  65. data/src/core/ext/filters/message_size/message_size_filter.cc +20 -18
  66. data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc +4 -4
  67. data/src/core/ext/filters/workarounds/workaround_utils.cc +4 -4
  68. data/src/core/ext/transport/chttp2/alpn/alpn.cc +2 -1
  69. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +10 -10
  70. data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +4 -4
  71. data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +11 -12
  72. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +16 -13
  73. data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +36 -9
  74. data/src/core/ext/transport/chttp2/transport/bin_decoder.h +3 -0
  75. data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +17 -14
  76. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +139 -145
  77. data/src/core/ext/transport/chttp2/transport/flow_control.cc +16 -14
  78. data/src/core/ext/transport/chttp2/transport/flow_control.h +8 -7
  79. data/src/core/ext/transport/chttp2/transport/frame_data.cc +35 -33
  80. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +27 -25
  81. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +12 -12
  82. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +16 -15
  83. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +19 -19
  84. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +11 -11
  85. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +23 -22
  86. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +35 -35
  87. data/src/core/ext/transport/chttp2/transport/hpack_table.cc +10 -7
  88. data/src/core/ext/transport/chttp2/transport/http2_settings.cc +2 -2
  89. data/src/core/ext/transport/chttp2/transport/incoming_metadata.cc +2 -2
  90. data/src/core/ext/transport/chttp2/transport/internal.h +1 -1
  91. data/src/core/ext/transport/chttp2/transport/parsing.cc +35 -39
  92. data/src/core/ext/transport/chttp2/transport/stream_map.cc +8 -7
  93. data/src/core/ext/transport/chttp2/transport/varint.cc +5 -5
  94. data/src/core/ext/transport/chttp2/transport/writing.cc +18 -18
  95. data/src/core/ext/transport/inproc/inproc_transport.cc +43 -23
  96. data/src/core/lib/{gpr → avl}/avl.cc +61 -57
  97. data/{include/grpc/support → src/core/lib/avl}/avl.h +25 -35
  98. data/src/core/lib/backoff/backoff.cc +6 -5
  99. data/src/core/lib/channel/channel_args.cc +23 -109
  100. data/src/core/lib/channel/channel_args.h +5 -31
  101. data/src/core/lib/channel/channel_stack.cc +11 -8
  102. data/src/core/lib/channel/channel_stack_builder.cc +10 -7
  103. data/src/core/lib/channel/connected_channel.cc +18 -17
  104. data/src/core/lib/channel/handshaker.cc +8 -8
  105. data/src/core/lib/channel/handshaker_registry.cc +3 -2
  106. data/src/core/lib/compression/algorithm_metadata.h +13 -6
  107. data/src/core/lib/compression/compression.cc +72 -183
  108. data/src/core/lib/compression/compression_internal.cc +274 -0
  109. data/src/core/lib/compression/compression_internal.h +86 -0
  110. data/src/core/lib/compression/message_compress.cc +15 -15
  111. data/src/core/lib/compression/message_compress.h +4 -3
  112. data/src/core/lib/compression/stream_compression_gzip.cc +8 -8
  113. data/src/core/lib/compression/stream_compression_identity.cc +1 -1
  114. data/src/core/lib/debug/stats.cc +10 -8
  115. data/src/core/lib/debug/stats_data.cc +2 -1
  116. data/src/core/lib/debug/trace.cc +3 -3
  117. data/src/core/lib/gpr/alloc.cc +7 -11
  118. data/src/core/lib/gpr/arena.cc +34 -12
  119. data/src/core/lib/gpr/atm.cc +2 -1
  120. data/src/core/lib/gpr/cpu_linux.cc +3 -3
  121. data/src/core/lib/gpr/cpu_posix.cc +2 -1
  122. data/src/core/lib/gpr/env.h +1 -1
  123. data/src/core/lib/gpr/env_linux.cc +1 -1
  124. data/src/core/lib/gpr/env_windows.cc +4 -4
  125. data/src/core/lib/gpr/fork.cc +16 -2
  126. data/src/core/lib/gpr/host_port.cc +5 -4
  127. data/{include/grpc/support → src/core/lib/gpr}/host_port.h +5 -13
  128. data/src/core/lib/gpr/log.cc +5 -4
  129. data/src/core/lib/gpr/log_linux.cc +1 -1
  130. data/src/core/lib/gpr/mpscq.cc +1 -0
  131. data/src/core/lib/gpr/murmur_hash.cc +4 -4
  132. data/src/core/lib/gpr/string.cc +19 -16
  133. data/src/core/lib/gpr/string_posix.cc +3 -3
  134. data/src/core/lib/gpr/sync_posix.cc +5 -9
  135. data/src/core/lib/gpr/thd.cc +3 -3
  136. data/{include/grpc/support → src/core/lib/gpr}/thd.h +20 -28
  137. data/src/core/lib/gpr/thd_posix.cc +6 -4
  138. data/src/core/lib/gpr/thd_windows.cc +3 -1
  139. data/src/core/lib/gpr/time.cc +6 -4
  140. data/src/core/lib/gpr/time_posix.cc +2 -2
  141. data/{include/grpc/support → src/core/lib/gpr}/tls.h +6 -6
  142. data/{include/grpc/support → src/core/lib/gpr}/tls_gcc.h +3 -3
  143. data/{include/grpc/support → src/core/lib/gpr}/tls_msvc.h +3 -3
  144. data/src/core/lib/gpr/tls_pthread.cc +1 -1
  145. data/{include/grpc/support → src/core/lib/gpr}/tls_pthread.h +3 -3
  146. data/{include/grpc/support → src/core/lib/gpr}/useful.h +3 -3
  147. data/src/core/lib/{gpr++ → gprpp}/abstract.h +3 -3
  148. data/src/core/lib/{gpr++ → gprpp}/atomic.h +5 -5
  149. data/src/core/lib/{gpr++ → gprpp}/atomic_with_atm.h +3 -3
  150. data/src/core/lib/{gpr++ → gprpp}/atomic_with_std.h +3 -3
  151. data/src/core/lib/{gpr++ → gprpp}/debug_location.h +3 -3
  152. data/src/core/lib/{gpr++ → gprpp}/inlined_vector.h +44 -22
  153. data/src/core/lib/{gpr++ → gprpp}/manual_constructor.h +2 -2
  154. data/src/core/lib/{gpr++ → gprpp}/memory.h +14 -5
  155. data/src/core/lib/{gpr++ → gprpp}/orphanable.h +39 -14
  156. data/src/core/lib/{gpr++ → gprpp}/ref_counted.h +42 -10
  157. data/src/core/lib/{gpr++ → gprpp}/ref_counted_ptr.h +18 -8
  158. data/src/core/lib/http/format_request.cc +3 -3
  159. data/src/core/lib/http/httpcli.cc +6 -7
  160. data/src/core/lib/http/httpcli_security_connector.cc +10 -10
  161. data/src/core/lib/http/parser.cc +16 -12
  162. data/src/core/lib/iomgr/call_combiner.cc +12 -13
  163. data/src/core/lib/iomgr/closure.h +4 -6
  164. data/src/core/lib/iomgr/combiner.cc +10 -21
  165. data/src/core/lib/iomgr/error.cc +50 -55
  166. data/src/core/lib/iomgr/ev_epoll1_linux.cc +41 -52
  167. data/src/core/lib/iomgr/ev_epollex_linux.cc +80 -28
  168. data/src/core/lib/iomgr/ev_epollsig_linux.cc +23 -30
  169. data/src/core/lib/iomgr/ev_poll_posix.cc +52 -46
  170. data/src/core/lib/iomgr/ev_posix.cc +47 -6
  171. data/src/core/lib/iomgr/exec_ctx.cc +10 -10
  172. data/src/core/lib/iomgr/exec_ctx.h +1 -1
  173. data/src/core/lib/iomgr/executor.cc +16 -13
  174. data/src/core/lib/iomgr/fork_posix.cc +1 -3
  175. data/src/core/lib/iomgr/gethostname_host_name_max.cc +1 -1
  176. data/src/core/lib/iomgr/iocp_windows.cc +1 -2
  177. data/src/core/lib/iomgr/iomgr.cc +2 -2
  178. data/src/core/lib/iomgr/iomgr_uv.cc +2 -0
  179. data/src/core/lib/iomgr/iomgr_uv.h +1 -1
  180. data/src/core/lib/iomgr/is_epollexclusive_available.cc +5 -4
  181. data/src/core/lib/iomgr/load_file.cc +3 -3
  182. data/src/core/lib/iomgr/pollset_windows.cc +1 -1
  183. data/src/core/lib/iomgr/resolve_address_posix.cc +10 -9
  184. data/src/core/lib/iomgr/resolve_address_uv.cc +2 -2
  185. data/src/core/lib/iomgr/resolve_address_windows.cc +3 -2
  186. data/src/core/lib/iomgr/resource_quota.cc +36 -34
  187. data/src/core/lib/iomgr/sockaddr_utils.cc +39 -23
  188. data/src/core/lib/iomgr/socket_factory_posix.cc +5 -5
  189. data/src/core/lib/iomgr/socket_mutator.cc +7 -7
  190. data/src/core/lib/iomgr/socket_utils_common_posix.cc +7 -4
  191. data/src/core/lib/iomgr/socket_utils_linux.cc +3 -2
  192. data/src/core/lib/iomgr/tcp_client_posix.cc +7 -6
  193. data/src/core/lib/iomgr/tcp_client_windows.cc +0 -1
  194. data/src/core/lib/iomgr/tcp_posix.cc +47 -55
  195. data/src/core/lib/iomgr/tcp_server_posix.cc +12 -10
  196. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +7 -5
  197. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +4 -3
  198. data/src/core/lib/iomgr/tcp_windows.cc +1 -1
  199. data/src/core/lib/iomgr/timer_generic.cc +16 -14
  200. data/src/core/lib/iomgr/timer_heap.cc +8 -7
  201. data/src/core/lib/iomgr/timer_manager.cc +4 -3
  202. data/src/core/lib/iomgr/udp_server.cc +24 -16
  203. data/src/core/lib/iomgr/unix_sockets_posix.cc +15 -10
  204. data/src/core/lib/iomgr/wakeup_fd_cv.cc +6 -5
  205. data/src/core/lib/iomgr/wakeup_fd_eventfd.cc +1 -2
  206. data/src/core/lib/json/json.cc +1 -1
  207. data/src/core/lib/json/json_reader.cc +8 -6
  208. data/src/core/lib/json/json_string.cc +19 -18
  209. data/src/core/lib/json/json_writer.cc +10 -8
  210. data/src/core/lib/profiling/basic_timers.cc +1 -1
  211. data/src/core/lib/profiling/timers.h +3 -20
  212. data/src/core/lib/security/context/security_context.cc +16 -14
  213. data/src/core/lib/security/credentials/composite/composite_credentials.cc +17 -14
  214. data/src/core/lib/security/credentials/credentials.cc +9 -8
  215. data/src/core/lib/security/credentials/credentials.h +1 -1
  216. data/src/core/lib/security/credentials/credentials_metadata.cc +2 -2
  217. data/src/core/lib/security/credentials/fake/fake_credentials.cc +12 -13
  218. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +7 -4
  219. data/src/core/lib/security/credentials/iam/iam_credentials.cc +5 -3
  220. data/src/core/lib/security/credentials/jwt/json_token.cc +4 -3
  221. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +7 -7
  222. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +21 -18
  223. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +23 -18
  224. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +11 -7
  225. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +22 -21
  226. data/src/core/lib/security/{transport → security_connector}/security_connector.cc +46 -43
  227. data/src/core/lib/security/{transport → security_connector}/security_connector.h +3 -3
  228. data/src/core/lib/security/transport/client_auth_filter.cc +32 -34
  229. data/src/core/lib/security/transport/lb_targets_info.cc +7 -5
  230. data/src/core/lib/security/transport/secure_endpoint.cc +21 -21
  231. data/src/core/lib/security/transport/security_handshaker.cc +19 -18
  232. data/src/core/lib/security/transport/security_handshaker.h +1 -1
  233. data/src/core/lib/security/transport/server_auth_filter.cc +21 -21
  234. data/src/core/lib/slice/b64.cc +19 -16
  235. data/src/core/lib/slice/percent_encoding.cc +5 -5
  236. data/src/core/lib/slice/slice.cc +35 -33
  237. data/src/core/lib/slice/slice_buffer.cc +16 -14
  238. data/src/core/lib/slice/slice_hash_table.cc +3 -2
  239. data/src/core/lib/slice/slice_intern.cc +21 -25
  240. data/src/core/lib/slice/slice_string_helpers.cc +45 -9
  241. data/src/core/lib/slice/slice_string_helpers.h +6 -0
  242. data/src/core/lib/surface/byte_buffer.cc +2 -2
  243. data/src/core/lib/surface/byte_buffer_reader.cc +6 -3
  244. data/src/core/lib/surface/call.cc +171 -260
  245. data/src/core/lib/surface/call_test_only.h +1 -13
  246. data/src/core/lib/surface/channel.cc +20 -43
  247. data/src/core/lib/surface/channel_init.cc +7 -7
  248. data/src/core/lib/surface/channel_ping.cc +2 -2
  249. data/src/core/lib/surface/completion_queue.cc +69 -75
  250. data/src/core/lib/surface/init.cc +4 -5
  251. data/src/core/lib/surface/init_secure.cc +1 -1
  252. data/src/core/lib/surface/lame_client.cc +1 -1
  253. data/src/core/lib/surface/server.cc +64 -59
  254. data/src/core/lib/surface/version.cc +2 -2
  255. data/src/core/lib/transport/bdp_estimator.cc +6 -5
  256. data/src/core/lib/transport/byte_stream.cc +23 -14
  257. data/src/core/lib/transport/byte_stream.h +1 -1
  258. data/src/core/lib/transport/connectivity_state.cc +9 -13
  259. data/src/core/lib/transport/error_utils.cc +10 -7
  260. data/src/core/lib/transport/metadata.cc +27 -26
  261. data/src/core/lib/transport/metadata.h +1 -1
  262. data/src/core/lib/transport/pid_controller.cc +2 -1
  263. data/src/core/lib/transport/service_config.cc +5 -5
  264. data/src/core/lib/transport/static_metadata.cc +225 -222
  265. data/src/core/lib/transport/static_metadata.h +77 -76
  266. data/src/core/lib/transport/timeout_encoding.cc +3 -2
  267. data/src/core/lib/transport/transport.cc +6 -5
  268. data/src/core/lib/transport/transport_op_string.cc +0 -1
  269. data/src/core/plugin_registry/grpc_plugin_registry.cc +4 -4
  270. data/src/core/tsi/alts_transport_security.cc +61 -0
  271. data/src/core/tsi/{gts_transport_security.h → alts_transport_security.h} +16 -8
  272. data/src/core/tsi/fake_transport_security.cc +59 -43
  273. data/src/core/tsi/ssl_transport_security.cc +122 -107
  274. data/src/core/tsi/transport_security.cc +3 -3
  275. data/src/core/tsi/transport_security_adapter.cc +16 -10
  276. data/src/ruby/bin/apis/pubsub_demo.rb +1 -1
  277. data/src/ruby/ext/grpc/rb_channel.c +3 -4
  278. data/src/ruby/ext/grpc/rb_compression_options.c +13 -3
  279. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +4 -76
  280. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +8 -120
  281. data/src/ruby/ext/grpc/rb_server.c +52 -28
  282. data/src/ruby/lib/grpc/generic/rpc_server.rb +7 -4
  283. data/src/ruby/lib/grpc/version.rb +1 -1
  284. data/src/ruby/pb/test/client.rb +1 -1
  285. data/src/ruby/pb/test/server.rb +1 -1
  286. data/src/ruby/spec/client_server_spec.rb +4 -2
  287. data/src/ruby/spec/generic/active_call_spec.rb +2 -1
  288. data/src/ruby/spec/generic/client_stub_spec.rb +32 -8
  289. data/src/ruby/spec/server_spec.rb +26 -7
  290. data/third_party/boringssl/crypto/asn1/a_bitstr.c +7 -2
  291. data/third_party/boringssl/crypto/asn1/a_d2i_fp.c +15 -0
  292. data/third_party/boringssl/crypto/asn1/a_gentm.c +1 -1
  293. data/third_party/boringssl/crypto/asn1/a_print.c +0 -28
  294. data/third_party/boringssl/crypto/asn1/a_strnid.c +3 -0
  295. data/third_party/boringssl/crypto/asn1/a_time.c +17 -9
  296. data/third_party/boringssl/crypto/asn1/a_utctm.c +1 -1
  297. data/third_party/boringssl/crypto/asn1/asn1_lib.c +5 -49
  298. data/third_party/boringssl/crypto/asn1/asn1_locl.h +1 -1
  299. data/third_party/boringssl/crypto/asn1/tasn_dec.c +9 -9
  300. data/third_party/boringssl/crypto/asn1/tasn_enc.c +0 -6
  301. data/third_party/boringssl/crypto/asn1/time_support.c +5 -5
  302. data/third_party/boringssl/crypto/base64/base64.c +65 -43
  303. data/third_party/boringssl/crypto/bio/bio.c +134 -110
  304. data/third_party/boringssl/crypto/bio/bio_mem.c +9 -9
  305. data/third_party/boringssl/crypto/bio/connect.c +17 -17
  306. data/third_party/boringssl/crypto/bio/fd.c +2 -1
  307. data/third_party/boringssl/crypto/bio/file.c +14 -14
  308. data/third_party/boringssl/crypto/bio/hexdump.c +15 -16
  309. data/third_party/boringssl/crypto/bio/internal.h +14 -14
  310. data/third_party/boringssl/crypto/bio/pair.c +45 -45
  311. data/third_party/boringssl/crypto/bio/printf.c +6 -10
  312. data/third_party/boringssl/crypto/{bn → bn_extra}/bn_asn1.c +9 -9
  313. data/third_party/boringssl/crypto/{bn → bn_extra}/convert.c +18 -223
  314. data/third_party/boringssl/crypto/buf/buf.c +20 -44
  315. data/third_party/boringssl/crypto/bytestring/ber.c +35 -35
  316. data/third_party/boringssl/crypto/bytestring/cbb.c +24 -24
  317. data/third_party/boringssl/crypto/bytestring/cbs.c +33 -37
  318. data/third_party/boringssl/crypto/bytestring/internal.h +38 -38
  319. data/third_party/boringssl/crypto/chacha/chacha.c +7 -7
  320. data/third_party/boringssl/crypto/{asn1/t_bitst.c → cipher_extra/cipher_extra.c} +49 -38
  321. data/third_party/boringssl/crypto/{cipher → cipher_extra}/derive_key.c +0 -2
  322. data/third_party/boringssl/crypto/cipher_extra/e_aesctrhmac.c +281 -0
  323. data/third_party/boringssl/crypto/cipher_extra/e_aesgcmsiv.c +867 -0
  324. data/third_party/boringssl/crypto/cipher_extra/e_chacha20poly1305.c +326 -0
  325. data/third_party/boringssl/crypto/{cipher → cipher_extra}/e_null.c +0 -1
  326. data/third_party/boringssl/crypto/{cipher → cipher_extra}/e_rc2.c +22 -10
  327. data/third_party/boringssl/crypto/{cipher → cipher_extra}/e_rc4.c +0 -0
  328. data/third_party/boringssl/crypto/{cipher → cipher_extra}/e_ssl3.c +120 -64
  329. data/third_party/boringssl/crypto/{cipher → cipher_extra}/e_tls.c +220 -141
  330. data/third_party/boringssl/crypto/{asn1/x_bignum.c → cipher_extra/internal.h} +61 -86
  331. data/third_party/boringssl/crypto/cipher_extra/tls_cbc.c +482 -0
  332. data/third_party/boringssl/crypto/cmac/cmac.c +20 -20
  333. data/third_party/boringssl/crypto/conf/conf.c +32 -20
  334. data/third_party/boringssl/crypto/conf/internal.h +3 -3
  335. data/third_party/boringssl/crypto/cpu-aarch64-linux.c +5 -5
  336. data/third_party/boringssl/crypto/cpu-arm-linux.c +44 -41
  337. data/third_party/boringssl/crypto/cpu-intel.c +68 -43
  338. data/third_party/boringssl/crypto/cpu-ppc64le.c +5 -7
  339. data/third_party/boringssl/crypto/crypto.c +54 -32
  340. data/third_party/boringssl/crypto/curve25519/curve25519.c +269 -269
  341. data/third_party/boringssl/crypto/curve25519/internal.h +28 -8
  342. data/third_party/boringssl/crypto/curve25519/spake25519.c +180 -106
  343. data/third_party/boringssl/crypto/curve25519/x25519-x86_64.c +9 -9
  344. data/third_party/boringssl/crypto/dh/check.c +33 -34
  345. data/third_party/boringssl/crypto/dh/dh.c +72 -36
  346. data/third_party/boringssl/crypto/dh/dh_asn1.c +1 -1
  347. data/third_party/boringssl/crypto/dh/params.c +1 -161
  348. data/third_party/boringssl/crypto/digest_extra/digest_extra.c +240 -0
  349. data/third_party/boringssl/crypto/dsa/dsa.c +127 -87
  350. data/third_party/boringssl/crypto/dsa/dsa_asn1.c +1 -1
  351. data/third_party/boringssl/crypto/{ec → ec_extra}/ec_asn1.c +83 -70
  352. data/third_party/boringssl/crypto/ecdh/ecdh.c +1 -1
  353. data/third_party/boringssl/crypto/{ecdsa → ecdsa_extra}/ecdsa_asn1.c +86 -31
  354. data/third_party/boringssl/crypto/engine/engine.c +6 -6
  355. data/third_party/boringssl/crypto/err/err.c +197 -106
  356. data/third_party/boringssl/crypto/err/internal.h +58 -0
  357. data/third_party/boringssl/crypto/evp/digestsign.c +86 -14
  358. data/third_party/boringssl/crypto/evp/evp.c +6 -11
  359. data/third_party/boringssl/crypto/evp/evp_asn1.c +17 -17
  360. data/third_party/boringssl/crypto/evp/evp_ctx.c +15 -11
  361. data/third_party/boringssl/crypto/evp/internal.h +66 -51
  362. data/third_party/boringssl/crypto/evp/p_dsa_asn1.c +11 -11
  363. data/third_party/boringssl/crypto/evp/p_ec.c +10 -8
  364. data/third_party/boringssl/crypto/evp/p_ec_asn1.c +11 -12
  365. data/third_party/boringssl/crypto/evp/p_ed25519.c +71 -0
  366. data/third_party/boringssl/crypto/evp/p_ed25519_asn1.c +190 -0
  367. data/third_party/boringssl/crypto/evp/p_rsa.c +50 -95
  368. data/third_party/boringssl/crypto/evp/p_rsa_asn1.c +28 -18
  369. data/third_party/boringssl/crypto/evp/pbkdf.c +49 -56
  370. data/third_party/boringssl/crypto/evp/print.c +5 -36
  371. data/third_party/boringssl/crypto/evp/scrypt.c +209 -0
  372. data/third_party/boringssl/crypto/ex_data.c +15 -45
  373. data/third_party/boringssl/crypto/fipsmodule/aes/internal.h +100 -0
  374. data/third_party/boringssl/crypto/fipsmodule/bcm.c +679 -0
  375. data/third_party/boringssl/crypto/{bn → fipsmodule/bn}/internal.h +40 -27
  376. data/third_party/boringssl/crypto/{bn → fipsmodule/bn}/rsaz_exp.h +0 -0
  377. data/third_party/boringssl/crypto/{cipher → fipsmodule/cipher}/internal.h +34 -67
  378. data/third_party/boringssl/crypto/fipsmodule/delocate.h +88 -0
  379. data/third_party/boringssl/crypto/{des → fipsmodule/des}/internal.h +18 -4
  380. data/third_party/boringssl/crypto/{digest → fipsmodule/digest}/internal.h +18 -18
  381. data/third_party/boringssl/crypto/{digest → fipsmodule/digest}/md32_common.h +58 -64
  382. data/third_party/boringssl/crypto/{ec → fipsmodule/ec}/internal.h +58 -52
  383. data/third_party/boringssl/crypto/{ec → fipsmodule/ec}/p256-x86_64-table.h +11 -11
  384. data/third_party/boringssl/crypto/{ec → fipsmodule/ec}/p256-x86_64.h +32 -32
  385. data/third_party/boringssl/crypto/{rand/internal.h → fipsmodule/is_fips.c} +10 -15
  386. data/third_party/boringssl/crypto/{modes → fipsmodule/modes}/internal.h +112 -119
  387. data/third_party/boringssl/crypto/fipsmodule/rand/internal.h +92 -0
  388. data/third_party/boringssl/crypto/{rsa → fipsmodule/rsa}/internal.h +36 -49
  389. data/third_party/boringssl/crypto/hkdf/hkdf.c +6 -6
  390. data/third_party/boringssl/crypto/internal.h +301 -233
  391. data/third_party/boringssl/crypto/lhash/lhash.c +26 -45
  392. data/third_party/boringssl/crypto/mem.c +76 -33
  393. data/third_party/boringssl/crypto/obj/obj.c +44 -28
  394. data/third_party/boringssl/crypto/obj/obj_dat.h +102 -34
  395. data/third_party/boringssl/crypto/obj/obj_xref.c +6 -6
  396. data/third_party/boringssl/crypto/pem/pem_info.c +3 -5
  397. data/third_party/boringssl/crypto/pem/pem_lib.c +1 -6
  398. data/third_party/boringssl/crypto/pem/pem_pk8.c +1 -0
  399. data/third_party/boringssl/crypto/pem/pem_pkey.c +1 -1
  400. data/third_party/boringssl/crypto/pem/pem_xaux.c +0 -2
  401. data/third_party/boringssl/crypto/pkcs7/internal.h +49 -0
  402. data/third_party/boringssl/crypto/pkcs7/pkcs7.c +166 -0
  403. data/third_party/boringssl/crypto/{x509/pkcs7.c → pkcs7/pkcs7_x509.c} +27 -147
  404. data/third_party/boringssl/crypto/pkcs8/internal.h +34 -16
  405. data/third_party/boringssl/crypto/pkcs8/p5_pbev2.c +120 -39
  406. data/third_party/boringssl/crypto/pkcs8/pkcs8.c +144 -857
  407. data/third_party/boringssl/crypto/pkcs8/pkcs8_x509.c +789 -0
  408. data/third_party/boringssl/crypto/poly1305/internal.h +4 -3
  409. data/third_party/boringssl/crypto/poly1305/poly1305.c +14 -14
  410. data/third_party/boringssl/crypto/poly1305/poly1305_arm.c +11 -11
  411. data/third_party/boringssl/crypto/poly1305/poly1305_vec.c +41 -41
  412. data/third_party/boringssl/crypto/pool/internal.h +2 -2
  413. data/third_party/boringssl/crypto/pool/pool.c +15 -15
  414. data/third_party/boringssl/crypto/{rand → rand_extra}/deterministic.c +7 -7
  415. data/third_party/boringssl/crypto/rand_extra/forkunsafe.c +46 -0
  416. data/third_party/boringssl/crypto/{rand → rand_extra}/fuchsia.c +7 -7
  417. data/third_party/boringssl/crypto/rand_extra/rand_extra.c +70 -0
  418. data/third_party/boringssl/crypto/{rand → rand_extra}/windows.c +5 -5
  419. data/third_party/boringssl/crypto/refcount_c11.c +2 -2
  420. data/third_party/boringssl/crypto/refcount_lock.c +1 -1
  421. data/third_party/boringssl/crypto/{rsa → rsa_extra}/rsa_asn1.c +12 -120
  422. data/third_party/boringssl/crypto/stack/stack.c +13 -13
  423. data/third_party/boringssl/crypto/thread_none.c +1 -1
  424. data/third_party/boringssl/crypto/thread_pthread.c +1 -1
  425. data/third_party/boringssl/crypto/thread_win.c +40 -40
  426. data/third_party/boringssl/crypto/x509/a_sign.c +5 -12
  427. data/third_party/boringssl/crypto/x509/a_verify.c +6 -18
  428. data/third_party/boringssl/crypto/x509/algorithm.c +22 -6
  429. data/third_party/boringssl/crypto/x509/asn1_gen.c +30 -7
  430. data/third_party/boringssl/crypto/x509/by_dir.c +2 -2
  431. data/third_party/boringssl/crypto/x509/by_file.c +2 -2
  432. data/third_party/boringssl/crypto/x509/rsa_pss.c +5 -5
  433. data/third_party/boringssl/crypto/x509/t_x509.c +2 -1
  434. data/third_party/boringssl/crypto/x509/x509_def.c +5 -0
  435. data/third_party/boringssl/crypto/x509/x509_lu.c +35 -4
  436. data/third_party/boringssl/crypto/x509/x509_set.c +10 -0
  437. data/third_party/boringssl/crypto/x509/x509_vfy.c +20 -17
  438. data/third_party/boringssl/crypto/x509/x_name.c +13 -16
  439. data/third_party/boringssl/crypto/x509/x_x509.c +3 -3
  440. data/third_party/boringssl/crypto/x509/x_x509a.c +0 -7
  441. data/third_party/boringssl/crypto/x509v3/ext_dat.h +8 -0
  442. data/third_party/boringssl/crypto/x509v3/pcy_int.h +2 -2
  443. data/third_party/boringssl/crypto/x509v3/pcy_lib.c +0 -9
  444. data/third_party/boringssl/crypto/x509v3/pcy_node.c +1 -1
  445. data/third_party/boringssl/crypto/x509v3/pcy_tree.c +25 -15
  446. data/third_party/boringssl/crypto/x509v3/v3_alt.c +21 -11
  447. data/third_party/boringssl/crypto/x509v3/v3_cpols.c +9 -3
  448. data/third_party/boringssl/crypto/x509v3/v3_info.c +22 -14
  449. data/third_party/boringssl/crypto/x509v3/v3_ncons.c +27 -11
  450. data/third_party/boringssl/crypto/x509v3/v3_pci.c +0 -33
  451. data/third_party/boringssl/crypto/x509v3/v3_utl.c +4 -4
  452. data/third_party/boringssl/include/openssl/aead.h +280 -191
  453. data/third_party/boringssl/include/openssl/aes.h +50 -50
  454. data/third_party/boringssl/include/openssl/arm_arch.h +12 -12
  455. data/third_party/boringssl/include/openssl/asn1.h +14 -77
  456. data/third_party/boringssl/include/openssl/asn1t.h +11 -15
  457. data/third_party/boringssl/include/openssl/base.h +78 -51
  458. data/third_party/boringssl/include/openssl/base64.h +68 -68
  459. data/third_party/boringssl/include/openssl/bio.h +472 -406
  460. data/third_party/boringssl/include/openssl/blowfish.h +1 -1
  461. data/third_party/boringssl/include/openssl/bn.h +454 -435
  462. data/third_party/boringssl/include/openssl/buf.h +27 -27
  463. data/third_party/boringssl/include/openssl/bytestring.h +282 -267
  464. data/third_party/boringssl/include/openssl/cast.h +2 -2
  465. data/third_party/boringssl/include/openssl/chacha.h +5 -5
  466. data/third_party/boringssl/include/openssl/cipher.h +209 -200
  467. data/third_party/boringssl/include/openssl/cmac.h +27 -27
  468. data/third_party/boringssl/include/openssl/conf.h +49 -46
  469. data/third_party/boringssl/include/openssl/cpu.h +60 -45
  470. data/third_party/boringssl/include/openssl/crypto.h +59 -35
  471. data/third_party/boringssl/include/openssl/curve25519.h +97 -92
  472. data/third_party/boringssl/include/openssl/des.h +25 -25
  473. data/third_party/boringssl/include/openssl/dh.h +98 -97
  474. data/third_party/boringssl/include/openssl/digest.h +143 -114
  475. data/third_party/boringssl/include/openssl/dsa.h +217 -202
  476. data/third_party/boringssl/include/openssl/ec.h +132 -131
  477. data/third_party/boringssl/include/openssl/ec_key.h +132 -128
  478. data/third_party/boringssl/include/openssl/ecdh.h +9 -9
  479. data/third_party/boringssl/include/openssl/ecdsa.h +66 -66
  480. data/third_party/boringssl/include/openssl/engine.h +38 -38
  481. data/third_party/boringssl/include/openssl/err.h +189 -219
  482. data/third_party/boringssl/include/openssl/evp.h +473 -397
  483. data/third_party/boringssl/include/openssl/ex_data.h +46 -56
  484. data/third_party/boringssl/include/openssl/hkdf.h +17 -17
  485. data/third_party/boringssl/include/openssl/hmac.h +55 -43
  486. data/third_party/boringssl/include/openssl/is_boringssl.h +16 -0
  487. data/third_party/boringssl/include/openssl/lhash.h +67 -67
  488. data/third_party/boringssl/include/openssl/lhash_macros.h +4 -4
  489. data/third_party/boringssl/include/openssl/md4.h +14 -14
  490. data/third_party/boringssl/include/openssl/md5.h +14 -14
  491. data/third_party/boringssl/include/openssl/mem.h +39 -33
  492. data/third_party/boringssl/include/openssl/nid.h +43 -0
  493. data/third_party/boringssl/include/openssl/obj.h +93 -87
  494. data/third_party/boringssl/include/openssl/opensslconf.h +8 -1
  495. data/third_party/boringssl/include/openssl/pem.h +2 -122
  496. data/third_party/boringssl/include/openssl/pkcs7.h +68 -2
  497. data/third_party/boringssl/include/openssl/pkcs8.h +81 -66
  498. data/third_party/boringssl/include/openssl/poly1305.h +11 -11
  499. data/third_party/boringssl/include/openssl/pool.h +29 -25
  500. data/third_party/boringssl/include/openssl/rand.h +48 -45
  501. data/third_party/boringssl/include/openssl/rc4.h +9 -9
  502. data/third_party/boringssl/include/openssl/ripemd.h +13 -13
  503. data/third_party/boringssl/include/openssl/rsa.h +371 -340
  504. data/third_party/boringssl/include/openssl/sha.h +71 -71
  505. data/third_party/boringssl/include/openssl/span.h +191 -0
  506. data/third_party/boringssl/include/openssl/ssl.h +2639 -2519
  507. data/third_party/boringssl/include/openssl/ssl3.h +39 -122
  508. data/third_party/boringssl/include/openssl/stack.h +355 -164
  509. data/third_party/boringssl/include/openssl/thread.h +43 -43
  510. data/third_party/boringssl/include/openssl/tls1.h +60 -63
  511. data/third_party/boringssl/include/openssl/type_check.h +10 -14
  512. data/third_party/boringssl/include/openssl/x509.h +41 -116
  513. data/third_party/boringssl/include/openssl/x509_vfy.h +17 -25
  514. data/third_party/boringssl/include/openssl/x509v3.h +27 -21
  515. data/third_party/boringssl/ssl/{bio_ssl.c → bio_ssl.cc} +9 -5
  516. data/third_party/boringssl/ssl/{custom_extensions.c → custom_extensions.cc} +19 -12
  517. data/third_party/boringssl/ssl/{d1_both.c → d1_both.cc} +224 -193
  518. data/third_party/boringssl/ssl/{d1_lib.c → d1_lib.cc} +86 -79
  519. data/third_party/boringssl/ssl/{d1_pkt.c → d1_pkt.cc} +55 -87
  520. data/third_party/boringssl/ssl/{d1_srtp.c → d1_srtp.cc} +12 -16
  521. data/third_party/boringssl/ssl/{dtls_method.c → dtls_method.cc} +33 -50
  522. data/third_party/boringssl/ssl/{dtls_record.c → dtls_record.cc} +76 -64
  523. data/third_party/boringssl/ssl/handshake.cc +547 -0
  524. data/third_party/boringssl/ssl/handshake_client.cc +1828 -0
  525. data/third_party/boringssl/ssl/handshake_server.cc +1672 -0
  526. data/third_party/boringssl/ssl/internal.h +2027 -1280
  527. data/third_party/boringssl/ssl/s3_both.cc +603 -0
  528. data/third_party/boringssl/ssl/{s3_lib.c → s3_lib.cc} +22 -10
  529. data/third_party/boringssl/ssl/{s3_pkt.c → s3_pkt.cc} +171 -75
  530. data/third_party/boringssl/ssl/ssl_aead_ctx.cc +415 -0
  531. data/third_party/boringssl/ssl/{ssl_asn1.c → ssl_asn1.cc} +257 -261
  532. data/third_party/boringssl/ssl/{ssl_buffer.c → ssl_buffer.cc} +81 -97
  533. data/third_party/boringssl/ssl/{ssl_cert.c → ssl_cert.cc} +304 -414
  534. data/third_party/boringssl/ssl/{ssl_cipher.c → ssl_cipher.cc} +427 -505
  535. data/third_party/boringssl/ssl/{ssl_file.c → ssl_file.cc} +24 -16
  536. data/third_party/boringssl/ssl/ssl_key_share.cc +245 -0
  537. data/third_party/boringssl/ssl/{ssl_lib.c → ssl_lib.cc} +665 -828
  538. data/third_party/boringssl/ssl/ssl_privkey.cc +518 -0
  539. data/third_party/boringssl/ssl/{ssl_session.c → ssl_session.cc} +596 -471
  540. data/third_party/boringssl/ssl/{ssl_stat.c → ssl_stat.cc} +5 -224
  541. data/third_party/boringssl/ssl/{ssl_transcript.c → ssl_transcript.cc} +117 -140
  542. data/third_party/boringssl/ssl/ssl_versions.cc +439 -0
  543. data/third_party/boringssl/ssl/{ssl_x509.c → ssl_x509.cc} +751 -267
  544. data/third_party/boringssl/ssl/{t1_enc.c → t1_enc.cc} +120 -161
  545. data/third_party/boringssl/ssl/{t1_lib.c → t1_lib.cc} +859 -966
  546. data/third_party/boringssl/ssl/{tls13_both.c → tls13_both.cc} +202 -284
  547. data/third_party/boringssl/ssl/tls13_client.cc +842 -0
  548. data/third_party/boringssl/ssl/{tls13_enc.c → tls13_enc.cc} +108 -90
  549. data/third_party/boringssl/ssl/tls13_server.cc +967 -0
  550. data/third_party/boringssl/ssl/{tls_method.c → tls_method.cc} +94 -73
  551. data/third_party/boringssl/ssl/tls_record.cc +675 -0
  552. metadata +117 -168
  553. data/include/grpc/support/cmdline.h +0 -88
  554. data/include/grpc/support/subprocess.h +0 -44
  555. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h +0 -29
  556. data/src/core/ext/filters/client_channel/resolver_factory.cc +0 -40
  557. data/src/core/lib/gpr/cmdline.cc +0 -330
  558. data/src/core/lib/gpr/subprocess_posix.cc +0 -99
  559. data/src/core/lib/gpr/subprocess_windows.cc +0 -126
  560. data/src/core/lib/surface/alarm.cc +0 -137
  561. data/src/core/lib/surface/alarm_internal.h +0 -40
  562. data/src/core/tsi/gts_transport_security.cc +0 -40
  563. data/third_party/boringssl/crypto/aes/aes.c +0 -1142
  564. data/third_party/boringssl/crypto/aes/internal.h +0 -87
  565. data/third_party/boringssl/crypto/aes/key_wrap.c +0 -138
  566. data/third_party/boringssl/crypto/aes/mode_wrappers.c +0 -112
  567. data/third_party/boringssl/crypto/asn1/x_long.c +0 -200
  568. data/third_party/boringssl/crypto/bn/add.c +0 -377
  569. data/third_party/boringssl/crypto/bn/asm/x86_64-gcc.c +0 -532
  570. data/third_party/boringssl/crypto/bn/bn.c +0 -365
  571. data/third_party/boringssl/crypto/bn/cmp.c +0 -239
  572. data/third_party/boringssl/crypto/bn/ctx.c +0 -313
  573. data/third_party/boringssl/crypto/bn/div.c +0 -728
  574. data/third_party/boringssl/crypto/bn/exponentiation.c +0 -1240
  575. data/third_party/boringssl/crypto/bn/gcd.c +0 -635
  576. data/third_party/boringssl/crypto/bn/generic.c +0 -707
  577. data/third_party/boringssl/crypto/bn/kronecker.c +0 -176
  578. data/third_party/boringssl/crypto/bn/montgomery.c +0 -409
  579. data/third_party/boringssl/crypto/bn/montgomery_inv.c +0 -207
  580. data/third_party/boringssl/crypto/bn/mul.c +0 -871
  581. data/third_party/boringssl/crypto/bn/prime.c +0 -861
  582. data/third_party/boringssl/crypto/bn/random.c +0 -343
  583. data/third_party/boringssl/crypto/bn/rsaz_exp.c +0 -254
  584. data/third_party/boringssl/crypto/bn/shift.c +0 -307
  585. data/third_party/boringssl/crypto/bn/sqrt.c +0 -506
  586. data/third_party/boringssl/crypto/cipher/aead.c +0 -156
  587. data/third_party/boringssl/crypto/cipher/cipher.c +0 -657
  588. data/third_party/boringssl/crypto/cipher/e_aes.c +0 -1771
  589. data/third_party/boringssl/crypto/cipher/e_chacha20poly1305.c +0 -276
  590. data/third_party/boringssl/crypto/cipher/e_des.c +0 -205
  591. data/third_party/boringssl/crypto/cipher/tls_cbc.c +0 -482
  592. data/third_party/boringssl/crypto/des/des.c +0 -771
  593. data/third_party/boringssl/crypto/digest/digest.c +0 -251
  594. data/third_party/boringssl/crypto/digest/digests.c +0 -358
  595. data/third_party/boringssl/crypto/ec/ec.c +0 -847
  596. data/third_party/boringssl/crypto/ec/ec_key.c +0 -479
  597. data/third_party/boringssl/crypto/ec/ec_montgomery.c +0 -303
  598. data/third_party/boringssl/crypto/ec/oct.c +0 -416
  599. data/third_party/boringssl/crypto/ec/p224-64.c +0 -1143
  600. data/third_party/boringssl/crypto/ec/p256-64.c +0 -1701
  601. data/third_party/boringssl/crypto/ec/p256-x86_64.c +0 -561
  602. data/third_party/boringssl/crypto/ec/simple.c +0 -1118
  603. data/third_party/boringssl/crypto/ec/util-64.c +0 -109
  604. data/third_party/boringssl/crypto/ec/wnaf.c +0 -458
  605. data/third_party/boringssl/crypto/ecdsa/ecdsa.c +0 -479
  606. data/third_party/boringssl/crypto/hmac/hmac.c +0 -215
  607. data/third_party/boringssl/crypto/md4/md4.c +0 -236
  608. data/third_party/boringssl/crypto/md5/md5.c +0 -285
  609. data/third_party/boringssl/crypto/modes/cbc.c +0 -212
  610. data/third_party/boringssl/crypto/modes/cfb.c +0 -230
  611. data/third_party/boringssl/crypto/modes/ctr.c +0 -219
  612. data/third_party/boringssl/crypto/modes/gcm.c +0 -1071
  613. data/third_party/boringssl/crypto/modes/ofb.c +0 -95
  614. data/third_party/boringssl/crypto/modes/polyval.c +0 -94
  615. data/third_party/boringssl/crypto/pkcs8/p8_pkey.c +0 -85
  616. data/third_party/boringssl/crypto/rand/rand.c +0 -244
  617. data/third_party/boringssl/crypto/rand/urandom.c +0 -335
  618. data/third_party/boringssl/crypto/rsa/blinding.c +0 -265
  619. data/third_party/boringssl/crypto/rsa/padding.c +0 -708
  620. data/third_party/boringssl/crypto/rsa/rsa.c +0 -830
  621. data/third_party/boringssl/crypto/rsa/rsa_impl.c +0 -1100
  622. data/third_party/boringssl/crypto/sha/sha1-altivec.c +0 -346
  623. data/third_party/boringssl/crypto/sha/sha1.c +0 -355
  624. data/third_party/boringssl/crypto/sha/sha256.c +0 -329
  625. data/third_party/boringssl/crypto/sha/sha512.c +0 -609
  626. data/third_party/boringssl/crypto/x509/x509type.c +0 -126
  627. data/third_party/boringssl/include/openssl/stack_macros.h +0 -3987
  628. data/third_party/boringssl/ssl/handshake_client.c +0 -1883
  629. data/third_party/boringssl/ssl/handshake_server.c +0 -1950
  630. data/third_party/boringssl/ssl/s3_both.c +0 -895
  631. data/third_party/boringssl/ssl/ssl_aead_ctx.c +0 -335
  632. data/third_party/boringssl/ssl/ssl_ecdh.c +0 -465
  633. data/third_party/boringssl/ssl/ssl_privkey.c +0 -683
  634. data/third_party/boringssl/ssl/ssl_privkey_cc.cc +0 -76
  635. data/third_party/boringssl/ssl/tls13_client.c +0 -712
  636. data/third_party/boringssl/ssl/tls13_server.c +0 -680
  637. data/third_party/boringssl/ssl/tls_record.c +0 -556
@@ -54,100 +54,75 @@
54
54
  * copied and put under another distribution licence
55
55
  * [including the GNU Public Licence.] */
56
56
 
57
- #include <openssl/asn1.h>
57
+ #ifndef OPENSSL_HEADER_CIPHER_EXTRA_INTERNAL_H
58
+ #define OPENSSL_HEADER_CIPHER_EXTRA_INTERNAL_H
58
59
 
59
- #include <openssl/asn1t.h>
60
- #include <openssl/bn.h>
60
+ #include <openssl/base.h>
61
61
 
62
- /*
63
- * Custom primitive type for BIGNUM handling. This reads in an ASN1_INTEGER
64
- * as a BIGNUM directly. Currently it ignores the sign which isn't a problem
65
- * since all BIGNUMs used are non negative and anything that looks negative
66
- * is normally due to an encoding error.
67
- */
62
+ #include "../internal.h"
68
63
 
69
- #define BN_SENSITIVE 1
64
+ #if defined(__cplusplus)
65
+ extern "C" {
66
+ #endif
70
67
 
71
- static int bn_new(ASN1_VALUE **pval, const ASN1_ITEM *it);
72
- static void bn_free(ASN1_VALUE **pval, const ASN1_ITEM *it);
73
68
 
74
- static int bn_i2c(ASN1_VALUE **pval, unsigned char *cont, int *putype,
75
- const ASN1_ITEM *it);
76
- static int bn_c2i(ASN1_VALUE **pval, const unsigned char *cont, int len,
77
- int utype, char *free_cont, const ASN1_ITEM *it);
69
+ // EVP_tls_cbc_get_padding determines the padding from the decrypted, TLS, CBC
70
+ // record in |in|. This decrypted record should not include any "decrypted"
71
+ // explicit IV. If the record is publicly invalid, it returns zero. Otherwise,
72
+ // it returns one and sets |*out_padding_ok| to all ones (0xfff..f) if the
73
+ // padding is valid and zero otherwise. It then sets |*out_len| to the length
74
+ // with the padding removed or |in_len| if invalid.
75
+ //
76
+ // If the function returns one, it runs in time independent of the contents of
77
+ // |in|. It is also guaranteed that |*out_len| >= |mac_size|, satisfying
78
+ // |EVP_tls_cbc_copy_mac|'s precondition.
79
+ int EVP_tls_cbc_remove_padding(crypto_word_t *out_padding_ok, size_t *out_len,
80
+ const uint8_t *in, size_t in_len,
81
+ size_t block_size, size_t mac_size);
78
82
 
79
- static const ASN1_PRIMITIVE_FUNCS bignum_pf = {
80
- NULL, 0,
81
- bn_new,
82
- bn_free,
83
- 0,
84
- bn_c2i,
85
- bn_i2c,
86
- NULL /* prim_print */ ,
87
- };
83
+ // EVP_tls_cbc_copy_mac copies |md_size| bytes from the end of the first
84
+ // |in_len| bytes of |in| to |out| in constant time (independent of the concrete
85
+ // value of |in_len|, which may vary within a 256-byte window). |in| must point
86
+ // to a buffer of |orig_len| bytes.
87
+ //
88
+ // On entry:
89
+ // orig_len >= in_len >= md_size
90
+ // md_size <= EVP_MAX_MD_SIZE
91
+ void EVP_tls_cbc_copy_mac(uint8_t *out, size_t md_size, const uint8_t *in,
92
+ size_t in_len, size_t orig_len);
88
93
 
89
- ASN1_ITEM_start(BIGNUM)
90
- ASN1_ITYPE_PRIMITIVE, V_ASN1_INTEGER, NULL, 0, &bignum_pf, 0, "BIGNUM"
91
- ASN1_ITEM_end(BIGNUM)
94
+ // EVP_tls_cbc_record_digest_supported returns 1 iff |md| is a hash function
95
+ // which EVP_tls_cbc_digest_record supports.
96
+ int EVP_tls_cbc_record_digest_supported(const EVP_MD *md);
92
97
 
93
- ASN1_ITEM_start(CBIGNUM)
94
- ASN1_ITYPE_PRIMITIVE, V_ASN1_INTEGER, NULL, 0, &bignum_pf, BN_SENSITIVE, "BIGNUM"
95
- ASN1_ITEM_end(CBIGNUM)
98
+ // EVP_tls_cbc_digest_record computes the MAC of a decrypted, padded TLS
99
+ // record.
100
+ //
101
+ // md: the hash function used in the HMAC.
102
+ // EVP_tls_cbc_record_digest_supported must return true for this hash.
103
+ // md_out: the digest output. At most EVP_MAX_MD_SIZE bytes will be written.
104
+ // md_out_size: the number of output bytes is written here.
105
+ // header: the 13-byte, TLS record header.
106
+ // data: the record data itself
107
+ // data_plus_mac_size: the secret, reported length of the data and MAC
108
+ // once the padding has been removed.
109
+ // data_plus_mac_plus_padding_size: the public length of the whole
110
+ // record, including padding.
111
+ //
112
+ // On entry: by virtue of having been through one of the remove_padding
113
+ // functions, above, we know that data_plus_mac_size is large enough to contain
114
+ // a padding byte and MAC. (If the padding was invalid, it might contain the
115
+ // padding too. )
116
+ int EVP_tls_cbc_digest_record(const EVP_MD *md, uint8_t *md_out,
117
+ size_t *md_out_size, const uint8_t header[13],
118
+ const uint8_t *data, size_t data_plus_mac_size,
119
+ size_t data_plus_mac_plus_padding_size,
120
+ const uint8_t *mac_secret,
121
+ unsigned mac_secret_length);
96
122
 
97
- static int bn_new(ASN1_VALUE **pval, const ASN1_ITEM *it)
98
- {
99
- *pval = (ASN1_VALUE *)BN_new();
100
- if (*pval)
101
- return 1;
102
- else
103
- return 0;
104
- }
105
123
 
106
- static void bn_free(ASN1_VALUE **pval, const ASN1_ITEM *it)
107
- {
108
- if (!*pval)
109
- return;
110
- if (it->size & BN_SENSITIVE)
111
- BN_clear_free((BIGNUM *)*pval);
112
- else
113
- BN_free((BIGNUM *)*pval);
114
- *pval = NULL;
115
- }
124
+ #if defined(__cplusplus)
125
+ } // extern C
126
+ #endif
116
127
 
117
- static int bn_i2c(ASN1_VALUE **pval, unsigned char *cont, int *putype,
118
- const ASN1_ITEM *it)
119
- {
120
- BIGNUM *bn;
121
- int pad;
122
- if (!*pval)
123
- return -1;
124
- bn = (BIGNUM *)*pval;
125
- /* If MSB set in an octet we need a padding byte */
126
- if (BN_num_bits(bn) & 0x7)
127
- pad = 0;
128
- else
129
- pad = 1;
130
- if (cont) {
131
- if (pad)
132
- *cont++ = 0;
133
- BN_bn2bin(bn, cont);
134
- }
135
- return pad + BN_num_bytes(bn);
136
- }
137
-
138
- static int bn_c2i(ASN1_VALUE **pval, const unsigned char *cont, int len,
139
- int utype, char *free_cont, const ASN1_ITEM *it)
140
- {
141
- BIGNUM *bn;
142
- if (!*pval) {
143
- if (!bn_new(pval, it)) {
144
- return 0;
145
- }
146
- }
147
- bn = (BIGNUM *)*pval;
148
- if (!BN_bin2bn(cont, len, bn)) {
149
- bn_free(pval, it);
150
- return 0;
151
- }
152
- return 1;
153
- }
128
+ #endif // OPENSSL_HEADER_CIPHER_EXTRA_INTERNAL_H
@@ -0,0 +1,482 @@
1
+ /* ====================================================================
2
+ * Copyright (c) 2012 The OpenSSL Project. All rights reserved.
3
+ *
4
+ * Redistribution and use in source and binary forms, with or without
5
+ * modification, are permitted provided that the following conditions
6
+ * are met:
7
+ *
8
+ * 1. Redistributions of source code must retain the above copyright
9
+ * notice, this list of conditions and the following disclaimer.
10
+ *
11
+ * 2. Redistributions in binary form must reproduce the above copyright
12
+ * notice, this list of conditions and the following disclaimer in
13
+ * the documentation and/or other materials provided with the
14
+ * distribution.
15
+ *
16
+ * 3. All advertising materials mentioning features or use of this
17
+ * software must display the following acknowledgment:
18
+ * "This product includes software developed by the OpenSSL Project
19
+ * for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
20
+ *
21
+ * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
22
+ * endorse or promote products derived from this software without
23
+ * prior written permission. For written permission, please contact
24
+ * openssl-core@openssl.org.
25
+ *
26
+ * 5. Products derived from this software may not be called "OpenSSL"
27
+ * nor may "OpenSSL" appear in their names without prior written
28
+ * permission of the OpenSSL Project.
29
+ *
30
+ * 6. Redistributions of any form whatsoever must retain the following
31
+ * acknowledgment:
32
+ * "This product includes software developed by the OpenSSL Project
33
+ * for use in the OpenSSL Toolkit (http://www.openssl.org/)"
34
+ *
35
+ * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
36
+ * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
37
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
38
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
39
+ * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
40
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
41
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
42
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
43
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
44
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
45
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
46
+ * OF THE POSSIBILITY OF SUCH DAMAGE.
47
+ * ====================================================================
48
+ *
49
+ * This product includes cryptographic software written by Eric Young
50
+ * (eay@cryptsoft.com). This product includes software written by Tim
51
+ * Hudson (tjh@cryptsoft.com). */
52
+
53
+ #include <assert.h>
54
+ #include <string.h>
55
+
56
+ #include <openssl/digest.h>
57
+ #include <openssl/nid.h>
58
+ #include <openssl/sha.h>
59
+
60
+ #include "../internal.h"
61
+ #include "internal.h"
62
+ #include "../fipsmodule/cipher/internal.h"
63
+
64
+
65
+ // MAX_HASH_BIT_COUNT_BYTES is the maximum number of bytes in the hash's length
66
+ // field. (SHA-384/512 have 128-bit length.)
67
+ #define MAX_HASH_BIT_COUNT_BYTES 16
68
+
69
+ // MAX_HASH_BLOCK_SIZE is the maximum hash block size that we'll support.
70
+ // Currently SHA-384/512 has a 128-byte block size and that's the largest
71
+ // supported by TLS.)
72
+ #define MAX_HASH_BLOCK_SIZE 128
73
+
74
+ int EVP_tls_cbc_remove_padding(crypto_word_t *out_padding_ok, size_t *out_len,
75
+ const uint8_t *in, size_t in_len,
76
+ size_t block_size, size_t mac_size) {
77
+ const size_t overhead = 1 /* padding length byte */ + mac_size;
78
+
79
+ // These lengths are all public so we can test them in non-constant time.
80
+ if (overhead > in_len) {
81
+ return 0;
82
+ }
83
+
84
+ size_t padding_length = in[in_len - 1];
85
+
86
+ crypto_word_t good = constant_time_ge_w(in_len, overhead + padding_length);
87
+ // The padding consists of a length byte at the end of the record and
88
+ // then that many bytes of padding, all with the same value as the
89
+ // length byte. Thus, with the length byte included, there are i+1
90
+ // bytes of padding.
91
+ //
92
+ // We can't check just |padding_length+1| bytes because that leaks
93
+ // decrypted information. Therefore we always have to check the maximum
94
+ // amount of padding possible. (Again, the length of the record is
95
+ // public information so we can use it.)
96
+ size_t to_check = 256; // maximum amount of padding, inc length byte.
97
+ if (to_check > in_len) {
98
+ to_check = in_len;
99
+ }
100
+
101
+ for (size_t i = 0; i < to_check; i++) {
102
+ uint8_t mask = constant_time_ge_8(padding_length, i);
103
+ uint8_t b = in[in_len - 1 - i];
104
+ // The final |padding_length+1| bytes should all have the value
105
+ // |padding_length|. Therefore the XOR should be zero.
106
+ good &= ~(mask & (padding_length ^ b));
107
+ }
108
+
109
+ // If any of the final |padding_length+1| bytes had the wrong value,
110
+ // one or more of the lower eight bits of |good| will be cleared.
111
+ good = constant_time_eq_w(0xff, good & 0xff);
112
+
113
+ // Always treat |padding_length| as zero on error. If, assuming block size of
114
+ // 16, a padding of [<15 arbitrary bytes> 15] treated |padding_length| as 16
115
+ // and returned -1, distinguishing good MAC and bad padding from bad MAC and
116
+ // bad padding would give POODLE's padding oracle.
117
+ padding_length = good & (padding_length + 1);
118
+ *out_len = in_len - padding_length;
119
+ *out_padding_ok = good;
120
+ return 1;
121
+ }
122
+
123
+ void EVP_tls_cbc_copy_mac(uint8_t *out, size_t md_size, const uint8_t *in,
124
+ size_t in_len, size_t orig_len) {
125
+ uint8_t rotated_mac1[EVP_MAX_MD_SIZE], rotated_mac2[EVP_MAX_MD_SIZE];
126
+ uint8_t *rotated_mac = rotated_mac1;
127
+ uint8_t *rotated_mac_tmp = rotated_mac2;
128
+
129
+ // mac_end is the index of |in| just after the end of the MAC.
130
+ size_t mac_end = in_len;
131
+ size_t mac_start = mac_end - md_size;
132
+
133
+ assert(orig_len >= in_len);
134
+ assert(in_len >= md_size);
135
+ assert(md_size <= EVP_MAX_MD_SIZE);
136
+
137
+ // scan_start contains the number of bytes that we can ignore because
138
+ // the MAC's position can only vary by 255 bytes.
139
+ size_t scan_start = 0;
140
+ // This information is public so it's safe to branch based on it.
141
+ if (orig_len > md_size + 255 + 1) {
142
+ scan_start = orig_len - (md_size + 255 + 1);
143
+ }
144
+
145
+ size_t rotate_offset = 0;
146
+ uint8_t mac_started = 0;
147
+ OPENSSL_memset(rotated_mac, 0, md_size);
148
+ for (size_t i = scan_start, j = 0; i < orig_len; i++, j++) {
149
+ if (j >= md_size) {
150
+ j -= md_size;
151
+ }
152
+ crypto_word_t is_mac_start = constant_time_eq_w(i, mac_start);
153
+ mac_started |= is_mac_start;
154
+ uint8_t mac_ended = constant_time_ge_8(i, mac_end);
155
+ rotated_mac[j] |= in[i] & mac_started & ~mac_ended;
156
+ // Save the offset that |mac_start| is mapped to.
157
+ rotate_offset |= j & is_mac_start;
158
+ }
159
+
160
+ // Now rotate the MAC. We rotate in log(md_size) steps, one for each bit
161
+ // position.
162
+ for (size_t offset = 1; offset < md_size; offset <<= 1, rotate_offset >>= 1) {
163
+ // Rotate by |offset| iff the corresponding bit is set in
164
+ // |rotate_offset|, placing the result in |rotated_mac_tmp|.
165
+ const uint8_t skip_rotate = (rotate_offset & 1) - 1;
166
+ for (size_t i = 0, j = offset; i < md_size; i++, j++) {
167
+ if (j >= md_size) {
168
+ j -= md_size;
169
+ }
170
+ rotated_mac_tmp[i] =
171
+ constant_time_select_8(skip_rotate, rotated_mac[i], rotated_mac[j]);
172
+ }
173
+
174
+ // Swap pointers so |rotated_mac| contains the (possibly) rotated value.
175
+ // Note the number of iterations and thus the identity of these pointers is
176
+ // public information.
177
+ uint8_t *tmp = rotated_mac;
178
+ rotated_mac = rotated_mac_tmp;
179
+ rotated_mac_tmp = tmp;
180
+ }
181
+
182
+ OPENSSL_memcpy(out, rotated_mac, md_size);
183
+ }
184
+
185
+ // u32toBE serialises an unsigned, 32-bit number (n) as four bytes at (p) in
186
+ // big-endian order. The value of p is advanced by four.
187
+ #define u32toBE(n, p) \
188
+ do { \
189
+ *((p)++) = (uint8_t)((n) >> 24); \
190
+ *((p)++) = (uint8_t)((n) >> 16); \
191
+ *((p)++) = (uint8_t)((n) >> 8); \
192
+ *((p)++) = (uint8_t)((n)); \
193
+ } while (0)
194
+
195
+ // u64toBE serialises an unsigned, 64-bit number (n) as eight bytes at (p) in
196
+ // big-endian order. The value of p is advanced by eight.
197
+ #define u64toBE(n, p) \
198
+ do { \
199
+ *((p)++) = (uint8_t)((n) >> 56); \
200
+ *((p)++) = (uint8_t)((n) >> 48); \
201
+ *((p)++) = (uint8_t)((n) >> 40); \
202
+ *((p)++) = (uint8_t)((n) >> 32); \
203
+ *((p)++) = (uint8_t)((n) >> 24); \
204
+ *((p)++) = (uint8_t)((n) >> 16); \
205
+ *((p)++) = (uint8_t)((n) >> 8); \
206
+ *((p)++) = (uint8_t)((n)); \
207
+ } while (0)
208
+
209
+ typedef union {
210
+ SHA_CTX sha1;
211
+ SHA256_CTX sha256;
212
+ SHA512_CTX sha512;
213
+ } HASH_CTX;
214
+
215
+ static void tls1_sha1_transform(HASH_CTX *ctx, const uint8_t *block) {
216
+ SHA1_Transform(&ctx->sha1, block);
217
+ }
218
+
219
+ static void tls1_sha256_transform(HASH_CTX *ctx, const uint8_t *block) {
220
+ SHA256_Transform(&ctx->sha256, block);
221
+ }
222
+
223
+ static void tls1_sha512_transform(HASH_CTX *ctx, const uint8_t *block) {
224
+ SHA512_Transform(&ctx->sha512, block);
225
+ }
226
+
227
+ // These functions serialize the state of a hash and thus perform the standard
228
+ // "final" operation without adding the padding and length that such a function
229
+ // typically does.
230
+ static void tls1_sha1_final_raw(HASH_CTX *ctx, uint8_t *md_out) {
231
+ SHA_CTX *sha1 = &ctx->sha1;
232
+ u32toBE(sha1->h[0], md_out);
233
+ u32toBE(sha1->h[1], md_out);
234
+ u32toBE(sha1->h[2], md_out);
235
+ u32toBE(sha1->h[3], md_out);
236
+ u32toBE(sha1->h[4], md_out);
237
+ }
238
+
239
+ static void tls1_sha256_final_raw(HASH_CTX *ctx, uint8_t *md_out) {
240
+ SHA256_CTX *sha256 = &ctx->sha256;
241
+ for (unsigned i = 0; i < 8; i++) {
242
+ u32toBE(sha256->h[i], md_out);
243
+ }
244
+ }
245
+
246
+ static void tls1_sha512_final_raw(HASH_CTX *ctx, uint8_t *md_out) {
247
+ SHA512_CTX *sha512 = &ctx->sha512;
248
+ for (unsigned i = 0; i < 8; i++) {
249
+ u64toBE(sha512->h[i], md_out);
250
+ }
251
+ }
252
+
253
+ int EVP_tls_cbc_record_digest_supported(const EVP_MD *md) {
254
+ switch (EVP_MD_type(md)) {
255
+ case NID_sha1:
256
+ case NID_sha256:
257
+ case NID_sha384:
258
+ return 1;
259
+
260
+ default:
261
+ return 0;
262
+ }
263
+ }
264
+
265
+ int EVP_tls_cbc_digest_record(const EVP_MD *md, uint8_t *md_out,
266
+ size_t *md_out_size, const uint8_t header[13],
267
+ const uint8_t *data, size_t data_plus_mac_size,
268
+ size_t data_plus_mac_plus_padding_size,
269
+ const uint8_t *mac_secret,
270
+ unsigned mac_secret_length) {
271
+ HASH_CTX md_state;
272
+ void (*md_final_raw)(HASH_CTX *ctx, uint8_t *md_out);
273
+ void (*md_transform)(HASH_CTX *ctx, const uint8_t *block);
274
+ unsigned md_size, md_block_size = 64;
275
+ // md_length_size is the number of bytes in the length field that terminates
276
+ // the hash.
277
+ unsigned md_length_size = 8;
278
+
279
+ // Bound the acceptable input so we can forget about many possible overflows
280
+ // later in this function. This is redundant with the record size limits in
281
+ // TLS.
282
+ if (data_plus_mac_plus_padding_size >= 1024 * 1024) {
283
+ assert(0);
284
+ return 0;
285
+ }
286
+
287
+ switch (EVP_MD_type(md)) {
288
+ case NID_sha1:
289
+ SHA1_Init(&md_state.sha1);
290
+ md_final_raw = tls1_sha1_final_raw;
291
+ md_transform = tls1_sha1_transform;
292
+ md_size = SHA_DIGEST_LENGTH;
293
+ break;
294
+
295
+ case NID_sha256:
296
+ SHA256_Init(&md_state.sha256);
297
+ md_final_raw = tls1_sha256_final_raw;
298
+ md_transform = tls1_sha256_transform;
299
+ md_size = SHA256_DIGEST_LENGTH;
300
+ break;
301
+
302
+ case NID_sha384:
303
+ SHA384_Init(&md_state.sha512);
304
+ md_final_raw = tls1_sha512_final_raw;
305
+ md_transform = tls1_sha512_transform;
306
+ md_size = SHA384_DIGEST_LENGTH;
307
+ md_block_size = 128;
308
+ md_length_size = 16;
309
+ break;
310
+
311
+ default:
312
+ // EVP_tls_cbc_record_digest_supported should have been called first to
313
+ // check that the hash function is supported.
314
+ assert(0);
315
+ *md_out_size = 0;
316
+ return 0;
317
+ }
318
+
319
+ assert(md_length_size <= MAX_HASH_BIT_COUNT_BYTES);
320
+ assert(md_block_size <= MAX_HASH_BLOCK_SIZE);
321
+ assert(md_size <= EVP_MAX_MD_SIZE);
322
+
323
+ static const size_t kHeaderLength = 13;
324
+
325
+ // kVarianceBlocks is the number of blocks of the hash that we have to
326
+ // calculate in constant time because they could be altered by the
327
+ // padding value.
328
+ //
329
+ // TLSv1 has MACs up to 48 bytes long (SHA-384) and the padding is not
330
+ // required to be minimal. Therefore we say that the final six blocks
331
+ // can vary based on the padding.
332
+ static const size_t kVarianceBlocks = 6;
333
+
334
+ // From now on we're dealing with the MAC, which conceptually has 13
335
+ // bytes of `header' before the start of the data.
336
+ size_t len = data_plus_mac_plus_padding_size + kHeaderLength;
337
+ // max_mac_bytes contains the maximum bytes of bytes in the MAC, including
338
+ // |header|, assuming that there's no padding.
339
+ size_t max_mac_bytes = len - md_size - 1;
340
+ // num_blocks is the maximum number of hash blocks.
341
+ size_t num_blocks =
342
+ (max_mac_bytes + 1 + md_length_size + md_block_size - 1) / md_block_size;
343
+ // In order to calculate the MAC in constant time we have to handle
344
+ // the final blocks specially because the padding value could cause the
345
+ // end to appear somewhere in the final |kVarianceBlocks| blocks and we
346
+ // can't leak where. However, |num_starting_blocks| worth of data can
347
+ // be hashed right away because no padding value can affect whether
348
+ // they are plaintext.
349
+ size_t num_starting_blocks = 0;
350
+ // k is the starting byte offset into the conceptual header||data where
351
+ // we start processing.
352
+ size_t k = 0;
353
+ // mac_end_offset is the index just past the end of the data to be
354
+ // MACed.
355
+ size_t mac_end_offset = data_plus_mac_size + kHeaderLength - md_size;
356
+ // c is the index of the 0x80 byte in the final hash block that
357
+ // contains application data.
358
+ size_t c = mac_end_offset % md_block_size;
359
+ // index_a is the hash block number that contains the 0x80 terminating
360
+ // value.
361
+ size_t index_a = mac_end_offset / md_block_size;
362
+ // index_b is the hash block number that contains the 64-bit hash
363
+ // length, in bits.
364
+ size_t index_b = (mac_end_offset + md_length_size) / md_block_size;
365
+
366
+ if (num_blocks > kVarianceBlocks) {
367
+ num_starting_blocks = num_blocks - kVarianceBlocks;
368
+ k = md_block_size * num_starting_blocks;
369
+ }
370
+
371
+ // bits is the hash-length in bits. It includes the additional hash
372
+ // block for the masked HMAC key.
373
+ size_t bits = 8 * mac_end_offset; // at most 18 bits to represent
374
+
375
+ // Compute the initial HMAC block.
376
+ bits += 8 * md_block_size;
377
+ // hmac_pad is the masked HMAC key.
378
+ uint8_t hmac_pad[MAX_HASH_BLOCK_SIZE];
379
+ OPENSSL_memset(hmac_pad, 0, md_block_size);
380
+ assert(mac_secret_length <= sizeof(hmac_pad));
381
+ OPENSSL_memcpy(hmac_pad, mac_secret, mac_secret_length);
382
+ for (size_t i = 0; i < md_block_size; i++) {
383
+ hmac_pad[i] ^= 0x36;
384
+ }
385
+
386
+ md_transform(&md_state, hmac_pad);
387
+
388
+ // The length check means |bits| fits in four bytes.
389
+ uint8_t length_bytes[MAX_HASH_BIT_COUNT_BYTES];
390
+ OPENSSL_memset(length_bytes, 0, md_length_size - 4);
391
+ length_bytes[md_length_size - 4] = (uint8_t)(bits >> 24);
392
+ length_bytes[md_length_size - 3] = (uint8_t)(bits >> 16);
393
+ length_bytes[md_length_size - 2] = (uint8_t)(bits >> 8);
394
+ length_bytes[md_length_size - 1] = (uint8_t)bits;
395
+
396
+ if (k > 0) {
397
+ // k is a multiple of md_block_size.
398
+ uint8_t first_block[MAX_HASH_BLOCK_SIZE];
399
+ OPENSSL_memcpy(first_block, header, 13);
400
+ OPENSSL_memcpy(first_block + 13, data, md_block_size - 13);
401
+ md_transform(&md_state, first_block);
402
+ for (size_t i = 1; i < k / md_block_size; i++) {
403
+ md_transform(&md_state, data + md_block_size * i - 13);
404
+ }
405
+ }
406
+
407
+ uint8_t mac_out[EVP_MAX_MD_SIZE];
408
+ OPENSSL_memset(mac_out, 0, sizeof(mac_out));
409
+
410
+ // We now process the final hash blocks. For each block, we construct
411
+ // it in constant time. If the |i==index_a| then we'll include the 0x80
412
+ // bytes and zero pad etc. For each block we selectively copy it, in
413
+ // constant time, to |mac_out|.
414
+ for (size_t i = num_starting_blocks;
415
+ i <= num_starting_blocks + kVarianceBlocks; i++) {
416
+ uint8_t block[MAX_HASH_BLOCK_SIZE];
417
+ uint8_t is_block_a = constant_time_eq_8(i, index_a);
418
+ uint8_t is_block_b = constant_time_eq_8(i, index_b);
419
+ for (size_t j = 0; j < md_block_size; j++) {
420
+ uint8_t b = 0;
421
+ if (k < kHeaderLength) {
422
+ b = header[k];
423
+ } else if (k < data_plus_mac_plus_padding_size + kHeaderLength) {
424
+ b = data[k - kHeaderLength];
425
+ }
426
+ k++;
427
+
428
+ uint8_t is_past_c = is_block_a & constant_time_ge_8(j, c);
429
+ uint8_t is_past_cp1 = is_block_a & constant_time_ge_8(j, c + 1);
430
+ // If this is the block containing the end of the
431
+ // application data, and we are at the offset for the
432
+ // 0x80 value, then overwrite b with 0x80.
433
+ b = constant_time_select_8(is_past_c, 0x80, b);
434
+ // If this the the block containing the end of the
435
+ // application data and we're past the 0x80 value then
436
+ // just write zero.
437
+ b = b & ~is_past_cp1;
438
+ // If this is index_b (the final block), but not
439
+ // index_a (the end of the data), then the 64-bit
440
+ // length didn't fit into index_a and we're having to
441
+ // add an extra block of zeros.
442
+ b &= ~is_block_b | is_block_a;
443
+
444
+ // The final bytes of one of the blocks contains the
445
+ // length.
446
+ if (j >= md_block_size - md_length_size) {
447
+ // If this is index_b, write a length byte.
448
+ b = constant_time_select_8(
449
+ is_block_b, length_bytes[j - (md_block_size - md_length_size)], b);
450
+ }
451
+ block[j] = b;
452
+ }
453
+
454
+ md_transform(&md_state, block);
455
+ md_final_raw(&md_state, block);
456
+ // If this is index_b, copy the hash value to |mac_out|.
457
+ for (size_t j = 0; j < md_size; j++) {
458
+ mac_out[j] |= block[j] & is_block_b;
459
+ }
460
+ }
461
+
462
+ EVP_MD_CTX md_ctx;
463
+ EVP_MD_CTX_init(&md_ctx);
464
+ if (!EVP_DigestInit_ex(&md_ctx, md, NULL /* engine */)) {
465
+ EVP_MD_CTX_cleanup(&md_ctx);
466
+ return 0;
467
+ }
468
+
469
+ // Complete the HMAC in the standard manner.
470
+ for (size_t i = 0; i < md_block_size; i++) {
471
+ hmac_pad[i] ^= 0x6a;
472
+ }
473
+
474
+ EVP_DigestUpdate(&md_ctx, hmac_pad, md_block_size);
475
+ EVP_DigestUpdate(&md_ctx, mac_out, md_size);
476
+ unsigned md_out_size_u;
477
+ EVP_DigestFinal(&md_ctx, md_out, &md_out_size_u);
478
+ *md_out_size = md_out_size_u;
479
+ EVP_MD_CTX_cleanup(&md_ctx);
480
+
481
+ return 1;
482
+ }