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
@@ -1,335 +0,0 @@
1
- /* Copyright (c) 2015, Google Inc.
2
- *
3
- * Permission to use, copy, modify, and/or distribute this software for any
4
- * purpose with or without fee is hereby granted, provided that the above
5
- * copyright notice and this permission notice appear in all copies.
6
- *
7
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
8
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
9
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
10
- * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
11
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
12
- * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
13
- * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */
14
-
15
- #include <openssl/ssl.h>
16
-
17
- #include <assert.h>
18
- #include <string.h>
19
-
20
- #include <openssl/aead.h>
21
- #include <openssl/err.h>
22
- #include <openssl/rand.h>
23
- #include <openssl/type_check.h>
24
-
25
- #include "../crypto/internal.h"
26
- #include "internal.h"
27
-
28
-
29
- SSL_AEAD_CTX *SSL_AEAD_CTX_new(enum evp_aead_direction_t direction,
30
- uint16_t version, const SSL_CIPHER *cipher,
31
- const uint8_t *enc_key, size_t enc_key_len,
32
- const uint8_t *mac_key, size_t mac_key_len,
33
- const uint8_t *fixed_iv, size_t fixed_iv_len) {
34
- const EVP_AEAD *aead;
35
- size_t expected_mac_key_len, expected_fixed_iv_len;
36
- if (!ssl_cipher_get_evp_aead(&aead, &expected_mac_key_len,
37
- &expected_fixed_iv_len, cipher, version) ||
38
- /* Ensure the caller returned correct key sizes. */
39
- expected_fixed_iv_len != fixed_iv_len ||
40
- expected_mac_key_len != mac_key_len) {
41
- OPENSSL_PUT_ERROR(SSL, ERR_R_INTERNAL_ERROR);
42
- return 0;
43
- }
44
-
45
- uint8_t merged_key[EVP_AEAD_MAX_KEY_LENGTH];
46
- if (mac_key_len > 0) {
47
- /* This is a "stateful" AEAD (for compatibility with pre-AEAD cipher
48
- * suites). */
49
- if (mac_key_len + enc_key_len + fixed_iv_len > sizeof(merged_key)) {
50
- OPENSSL_PUT_ERROR(SSL, ERR_R_INTERNAL_ERROR);
51
- return 0;
52
- }
53
- OPENSSL_memcpy(merged_key, mac_key, mac_key_len);
54
- OPENSSL_memcpy(merged_key + mac_key_len, enc_key, enc_key_len);
55
- OPENSSL_memcpy(merged_key + mac_key_len + enc_key_len, fixed_iv,
56
- fixed_iv_len);
57
- enc_key = merged_key;
58
- enc_key_len += mac_key_len;
59
- enc_key_len += fixed_iv_len;
60
- }
61
-
62
- SSL_AEAD_CTX *aead_ctx = OPENSSL_malloc(sizeof(SSL_AEAD_CTX));
63
- if (aead_ctx == NULL) {
64
- OPENSSL_PUT_ERROR(SSL, ERR_R_MALLOC_FAILURE);
65
- return NULL;
66
- }
67
- OPENSSL_memset(aead_ctx, 0, sizeof(SSL_AEAD_CTX));
68
- aead_ctx->cipher = cipher;
69
-
70
- if (!EVP_AEAD_CTX_init_with_direction(
71
- &aead_ctx->ctx, aead, enc_key, enc_key_len,
72
- EVP_AEAD_DEFAULT_TAG_LENGTH, direction)) {
73
- OPENSSL_free(aead_ctx);
74
- return NULL;
75
- }
76
-
77
- assert(EVP_AEAD_nonce_length(aead) <= EVP_AEAD_MAX_NONCE_LENGTH);
78
- OPENSSL_COMPILE_ASSERT(EVP_AEAD_MAX_NONCE_LENGTH < 256,
79
- variable_nonce_len_doesnt_fit_in_uint8_t);
80
- aead_ctx->variable_nonce_len = (uint8_t)EVP_AEAD_nonce_length(aead);
81
- if (mac_key_len == 0) {
82
- assert(fixed_iv_len <= sizeof(aead_ctx->fixed_nonce));
83
- OPENSSL_memcpy(aead_ctx->fixed_nonce, fixed_iv, fixed_iv_len);
84
- aead_ctx->fixed_nonce_len = fixed_iv_len;
85
-
86
- if (cipher->algorithm_enc & SSL_CHACHA20POLY1305) {
87
- /* The fixed nonce into the actual nonce (the sequence number). */
88
- aead_ctx->xor_fixed_nonce = 1;
89
- aead_ctx->variable_nonce_len = 8;
90
- } else {
91
- /* The fixed IV is prepended to the nonce. */
92
- assert(fixed_iv_len <= aead_ctx->variable_nonce_len);
93
- aead_ctx->variable_nonce_len -= fixed_iv_len;
94
- }
95
-
96
- /* AES-GCM uses an explicit nonce. */
97
- if (cipher->algorithm_enc & (SSL_AES128GCM | SSL_AES256GCM)) {
98
- aead_ctx->variable_nonce_included_in_record = 1;
99
- }
100
-
101
- /* The TLS 1.3 construction XORs the fixed nonce into the sequence number
102
- * and omits the additional data. */
103
- if (version >= TLS1_3_VERSION) {
104
- aead_ctx->xor_fixed_nonce = 1;
105
- aead_ctx->variable_nonce_len = 8;
106
- aead_ctx->variable_nonce_included_in_record = 0;
107
- aead_ctx->omit_ad = 1;
108
- assert(fixed_iv_len >= aead_ctx->variable_nonce_len);
109
- }
110
- } else {
111
- assert(version < TLS1_3_VERSION);
112
- aead_ctx->variable_nonce_included_in_record = 1;
113
- aead_ctx->random_variable_nonce = 1;
114
- aead_ctx->omit_length_in_ad = 1;
115
- aead_ctx->omit_version_in_ad = (version == SSL3_VERSION);
116
- }
117
-
118
- return aead_ctx;
119
- }
120
-
121
- void SSL_AEAD_CTX_free(SSL_AEAD_CTX *aead) {
122
- if (aead == NULL) {
123
- return;
124
- }
125
- EVP_AEAD_CTX_cleanup(&aead->ctx);
126
- OPENSSL_free(aead);
127
- }
128
-
129
- size_t SSL_AEAD_CTX_explicit_nonce_len(const SSL_AEAD_CTX *aead) {
130
- #if defined(BORINGSSL_UNSAFE_FUZZER_MODE)
131
- aead = NULL;
132
- #endif
133
-
134
- if (aead != NULL && aead->variable_nonce_included_in_record) {
135
- return aead->variable_nonce_len;
136
- }
137
- return 0;
138
- }
139
-
140
- size_t SSL_AEAD_CTX_max_overhead(const SSL_AEAD_CTX *aead) {
141
- #if defined(BORINGSSL_UNSAFE_FUZZER_MODE)
142
- aead = NULL;
143
- #endif
144
-
145
- if (aead == NULL) {
146
- return 0;
147
- }
148
- return EVP_AEAD_max_overhead(aead->ctx.aead) +
149
- SSL_AEAD_CTX_explicit_nonce_len(aead);
150
- }
151
-
152
- /* ssl_aead_ctx_get_ad writes the additional data for |aead| into |out| and
153
- * returns the number of bytes written. */
154
- static size_t ssl_aead_ctx_get_ad(SSL_AEAD_CTX *aead, uint8_t out[13],
155
- uint8_t type, uint16_t wire_version,
156
- const uint8_t seqnum[8],
157
- size_t plaintext_len) {
158
- if (aead->omit_ad) {
159
- return 0;
160
- }
161
-
162
- OPENSSL_memcpy(out, seqnum, 8);
163
- size_t len = 8;
164
- out[len++] = type;
165
- if (!aead->omit_version_in_ad) {
166
- out[len++] = (uint8_t)(wire_version >> 8);
167
- out[len++] = (uint8_t)wire_version;
168
- }
169
- if (!aead->omit_length_in_ad) {
170
- out[len++] = (uint8_t)(plaintext_len >> 8);
171
- out[len++] = (uint8_t)plaintext_len;
172
- }
173
- return len;
174
- }
175
-
176
- int SSL_AEAD_CTX_open(SSL_AEAD_CTX *aead, CBS *out, uint8_t type,
177
- uint16_t wire_version, const uint8_t seqnum[8],
178
- uint8_t *in, size_t in_len) {
179
- #if defined(BORINGSSL_UNSAFE_FUZZER_MODE)
180
- aead = NULL;
181
- #endif
182
-
183
- if (aead == NULL) {
184
- /* Handle the initial NULL cipher. */
185
- CBS_init(out, in, in_len);
186
- return 1;
187
- }
188
-
189
- /* TLS 1.2 AEADs include the length in the AD and are assumed to have fixed
190
- * overhead. Otherwise the parameter is unused. */
191
- size_t plaintext_len = 0;
192
- if (!aead->omit_length_in_ad) {
193
- size_t overhead = SSL_AEAD_CTX_max_overhead(aead);
194
- if (in_len < overhead) {
195
- /* Publicly invalid. */
196
- OPENSSL_PUT_ERROR(SSL, SSL_R_BAD_PACKET_LENGTH);
197
- return 0;
198
- }
199
- plaintext_len = in_len - overhead;
200
- }
201
- uint8_t ad[13];
202
- size_t ad_len = ssl_aead_ctx_get_ad(aead, ad, type, wire_version, seqnum,
203
- plaintext_len);
204
-
205
- /* Assemble the nonce. */
206
- uint8_t nonce[EVP_AEAD_MAX_NONCE_LENGTH];
207
- size_t nonce_len = 0;
208
-
209
- /* Prepend the fixed nonce, or left-pad with zeros if XORing. */
210
- if (aead->xor_fixed_nonce) {
211
- nonce_len = aead->fixed_nonce_len - aead->variable_nonce_len;
212
- OPENSSL_memset(nonce, 0, nonce_len);
213
- } else {
214
- OPENSSL_memcpy(nonce, aead->fixed_nonce, aead->fixed_nonce_len);
215
- nonce_len += aead->fixed_nonce_len;
216
- }
217
-
218
- /* Add the variable nonce. */
219
- if (aead->variable_nonce_included_in_record) {
220
- if (in_len < aead->variable_nonce_len) {
221
- /* Publicly invalid. */
222
- OPENSSL_PUT_ERROR(SSL, SSL_R_BAD_PACKET_LENGTH);
223
- return 0;
224
- }
225
- OPENSSL_memcpy(nonce + nonce_len, in, aead->variable_nonce_len);
226
- in += aead->variable_nonce_len;
227
- in_len -= aead->variable_nonce_len;
228
- } else {
229
- assert(aead->variable_nonce_len == 8);
230
- OPENSSL_memcpy(nonce + nonce_len, seqnum, aead->variable_nonce_len);
231
- }
232
- nonce_len += aead->variable_nonce_len;
233
-
234
- /* XOR the fixed nonce, if necessary. */
235
- if (aead->xor_fixed_nonce) {
236
- assert(nonce_len == aead->fixed_nonce_len);
237
- for (size_t i = 0; i < aead->fixed_nonce_len; i++) {
238
- nonce[i] ^= aead->fixed_nonce[i];
239
- }
240
- }
241
-
242
- /* Decrypt in-place. */
243
- size_t len;
244
- if (!EVP_AEAD_CTX_open(&aead->ctx, in, &len, in_len, nonce, nonce_len,
245
- in, in_len, ad, ad_len)) {
246
- return 0;
247
- }
248
- CBS_init(out, in, len);
249
- return 1;
250
- }
251
-
252
- int SSL_AEAD_CTX_seal(SSL_AEAD_CTX *aead, uint8_t *out, size_t *out_len,
253
- size_t max_out, uint8_t type, uint16_t wire_version,
254
- const uint8_t seqnum[8], const uint8_t *in,
255
- size_t in_len) {
256
- #if defined(BORINGSSL_UNSAFE_FUZZER_MODE)
257
- aead = NULL;
258
- #endif
259
-
260
- if (aead == NULL) {
261
- /* Handle the initial NULL cipher. */
262
- if (in_len > max_out) {
263
- OPENSSL_PUT_ERROR(SSL, SSL_R_BUFFER_TOO_SMALL);
264
- return 0;
265
- }
266
- OPENSSL_memmove(out, in, in_len);
267
- *out_len = in_len;
268
- return 1;
269
- }
270
-
271
- uint8_t ad[13];
272
- size_t ad_len = ssl_aead_ctx_get_ad(aead, ad, type, wire_version, seqnum,
273
- in_len);
274
-
275
- /* Assemble the nonce. */
276
- uint8_t nonce[EVP_AEAD_MAX_NONCE_LENGTH];
277
- size_t nonce_len = 0;
278
-
279
- /* Prepend the fixed nonce, or left-pad with zeros if XORing. */
280
- if (aead->xor_fixed_nonce) {
281
- nonce_len = aead->fixed_nonce_len - aead->variable_nonce_len;
282
- OPENSSL_memset(nonce, 0, nonce_len);
283
- } else {
284
- OPENSSL_memcpy(nonce, aead->fixed_nonce, aead->fixed_nonce_len);
285
- nonce_len += aead->fixed_nonce_len;
286
- }
287
-
288
- /* Select the variable nonce. */
289
- if (aead->random_variable_nonce) {
290
- assert(aead->variable_nonce_included_in_record);
291
- if (!RAND_bytes(nonce + nonce_len, aead->variable_nonce_len)) {
292
- return 0;
293
- }
294
- } else {
295
- /* When sending we use the sequence number as the variable part of the
296
- * nonce. */
297
- assert(aead->variable_nonce_len == 8);
298
- OPENSSL_memcpy(nonce + nonce_len, seqnum, aead->variable_nonce_len);
299
- }
300
- nonce_len += aead->variable_nonce_len;
301
-
302
- /* Emit the variable nonce if included in the record. */
303
- size_t extra_len = 0;
304
- if (aead->variable_nonce_included_in_record) {
305
- assert(!aead->xor_fixed_nonce);
306
- if (max_out < aead->variable_nonce_len) {
307
- OPENSSL_PUT_ERROR(SSL, SSL_R_BUFFER_TOO_SMALL);
308
- return 0;
309
- }
310
- if (out < in + in_len && in < out + aead->variable_nonce_len) {
311
- OPENSSL_PUT_ERROR(SSL, SSL_R_OUTPUT_ALIASES_INPUT);
312
- return 0;
313
- }
314
- OPENSSL_memcpy(out, nonce + aead->fixed_nonce_len,
315
- aead->variable_nonce_len);
316
- extra_len = aead->variable_nonce_len;
317
- out += aead->variable_nonce_len;
318
- max_out -= aead->variable_nonce_len;
319
- }
320
-
321
- /* XOR the fixed nonce, if necessary. */
322
- if (aead->xor_fixed_nonce) {
323
- assert(nonce_len == aead->fixed_nonce_len);
324
- for (size_t i = 0; i < aead->fixed_nonce_len; i++) {
325
- nonce[i] ^= aead->fixed_nonce[i];
326
- }
327
- }
328
-
329
- if (!EVP_AEAD_CTX_seal(&aead->ctx, out, out_len, max_out, nonce, nonce_len,
330
- in, in_len, ad, ad_len)) {
331
- return 0;
332
- }
333
- *out_len += extra_len;
334
- return 1;
335
- }
@@ -1,465 +0,0 @@
1
- /* Copyright (c) 2015, Google Inc.
2
- *
3
- * Permission to use, copy, modify, and/or distribute this software for any
4
- * purpose with or without fee is hereby granted, provided that the above
5
- * copyright notice and this permission notice appear in all copies.
6
- *
7
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
8
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
9
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
10
- * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
11
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
12
- * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
13
- * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */
14
-
15
- #include <openssl/ssl.h>
16
-
17
- #include <assert.h>
18
- #include <string.h>
19
-
20
- #include <openssl/bn.h>
21
- #include <openssl/bytestring.h>
22
- #include <openssl/curve25519.h>
23
- #include <openssl/ec.h>
24
- #include <openssl/err.h>
25
- #include <openssl/mem.h>
26
- #include <openssl/nid.h>
27
-
28
- #include "internal.h"
29
- #include "../crypto/internal.h"
30
-
31
-
32
- /* |EC_POINT| implementation. */
33
-
34
- static void ssl_ec_point_cleanup(SSL_ECDH_CTX *ctx) {
35
- BIGNUM *private_key = (BIGNUM *)ctx->data;
36
- BN_clear_free(private_key);
37
- }
38
-
39
- static int ssl_ec_point_offer(SSL_ECDH_CTX *ctx, CBB *out) {
40
- assert(ctx->data == NULL);
41
- BIGNUM *private_key = BN_new();
42
- if (private_key == NULL) {
43
- return 0;
44
- }
45
- ctx->data = private_key;
46
-
47
- /* Set up a shared |BN_CTX| for all operations. */
48
- BN_CTX *bn_ctx = BN_CTX_new();
49
- if (bn_ctx == NULL) {
50
- return 0;
51
- }
52
- BN_CTX_start(bn_ctx);
53
-
54
- int ret = 0;
55
- EC_POINT *public_key = NULL;
56
- EC_GROUP *group = EC_GROUP_new_by_curve_name(ctx->method->nid);
57
- if (group == NULL) {
58
- goto err;
59
- }
60
-
61
- /* Generate a private key. */
62
- if (!BN_rand_range_ex(private_key, 1, EC_GROUP_get0_order(group))) {
63
- goto err;
64
- }
65
-
66
- /* Compute the corresponding public key and serialize it. */
67
- public_key = EC_POINT_new(group);
68
- if (public_key == NULL ||
69
- !EC_POINT_mul(group, public_key, private_key, NULL, NULL, bn_ctx) ||
70
- !EC_POINT_point2cbb(out, group, public_key, POINT_CONVERSION_UNCOMPRESSED,
71
- bn_ctx)) {
72
- goto err;
73
- }
74
-
75
- ret = 1;
76
-
77
- err:
78
- EC_GROUP_free(group);
79
- EC_POINT_free(public_key);
80
- BN_CTX_end(bn_ctx);
81
- BN_CTX_free(bn_ctx);
82
- return ret;
83
- }
84
-
85
- static int ssl_ec_point_finish(SSL_ECDH_CTX *ctx, uint8_t **out_secret,
86
- size_t *out_secret_len, uint8_t *out_alert,
87
- const uint8_t *peer_key, size_t peer_key_len) {
88
- BIGNUM *private_key = (BIGNUM *)ctx->data;
89
- assert(private_key != NULL);
90
- *out_alert = SSL_AD_INTERNAL_ERROR;
91
-
92
- /* Set up a shared |BN_CTX| for all operations. */
93
- BN_CTX *bn_ctx = BN_CTX_new();
94
- if (bn_ctx == NULL) {
95
- return 0;
96
- }
97
- BN_CTX_start(bn_ctx);
98
-
99
- int ret = 0;
100
- EC_GROUP *group = EC_GROUP_new_by_curve_name(ctx->method->nid);
101
- EC_POINT *peer_point = NULL, *result = NULL;
102
- uint8_t *secret = NULL;
103
- if (group == NULL) {
104
- goto err;
105
- }
106
-
107
- /* Compute the x-coordinate of |peer_key| * |private_key|. */
108
- peer_point = EC_POINT_new(group);
109
- result = EC_POINT_new(group);
110
- if (peer_point == NULL || result == NULL) {
111
- goto err;
112
- }
113
- BIGNUM *x = BN_CTX_get(bn_ctx);
114
- if (x == NULL) {
115
- goto err;
116
- }
117
- if (!EC_POINT_oct2point(group, peer_point, peer_key, peer_key_len, bn_ctx)) {
118
- *out_alert = SSL_AD_DECODE_ERROR;
119
- goto err;
120
- }
121
- if (!EC_POINT_mul(group, result, NULL, peer_point, private_key, bn_ctx) ||
122
- !EC_POINT_get_affine_coordinates_GFp(group, result, x, NULL, bn_ctx)) {
123
- goto err;
124
- }
125
-
126
- /* Encode the x-coordinate left-padded with zeros. */
127
- size_t secret_len = (EC_GROUP_get_degree(group) + 7) / 8;
128
- secret = OPENSSL_malloc(secret_len);
129
- if (secret == NULL || !BN_bn2bin_padded(secret, secret_len, x)) {
130
- goto err;
131
- }
132
-
133
- *out_secret = secret;
134
- *out_secret_len = secret_len;
135
- secret = NULL;
136
- ret = 1;
137
-
138
- err:
139
- EC_GROUP_free(group);
140
- EC_POINT_free(peer_point);
141
- EC_POINT_free(result);
142
- BN_CTX_end(bn_ctx);
143
- BN_CTX_free(bn_ctx);
144
- OPENSSL_free(secret);
145
- return ret;
146
- }
147
-
148
- static int ssl_ec_point_accept(SSL_ECDH_CTX *ctx, CBB *out_public_key,
149
- uint8_t **out_secret, size_t *out_secret_len,
150
- uint8_t *out_alert, const uint8_t *peer_key,
151
- size_t peer_key_len) {
152
- *out_alert = SSL_AD_INTERNAL_ERROR;
153
- if (!ssl_ec_point_offer(ctx, out_public_key) ||
154
- !ssl_ec_point_finish(ctx, out_secret, out_secret_len, out_alert, peer_key,
155
- peer_key_len)) {
156
- return 0;
157
- }
158
- return 1;
159
- }
160
-
161
- /* X25119 implementation. */
162
-
163
- static void ssl_x25519_cleanup(SSL_ECDH_CTX *ctx) {
164
- if (ctx->data == NULL) {
165
- return;
166
- }
167
- OPENSSL_cleanse(ctx->data, 32);
168
- OPENSSL_free(ctx->data);
169
- }
170
-
171
- static int ssl_x25519_offer(SSL_ECDH_CTX *ctx, CBB *out) {
172
- assert(ctx->data == NULL);
173
-
174
- ctx->data = OPENSSL_malloc(32);
175
- if (ctx->data == NULL) {
176
- OPENSSL_PUT_ERROR(SSL, ERR_R_MALLOC_FAILURE);
177
- return 0;
178
- }
179
- uint8_t public_key[32];
180
- X25519_keypair(public_key, (uint8_t *)ctx->data);
181
- return CBB_add_bytes(out, public_key, sizeof(public_key));
182
- }
183
-
184
- static int ssl_x25519_finish(SSL_ECDH_CTX *ctx, uint8_t **out_secret,
185
- size_t *out_secret_len, uint8_t *out_alert,
186
- const uint8_t *peer_key, size_t peer_key_len) {
187
- assert(ctx->data != NULL);
188
- *out_alert = SSL_AD_INTERNAL_ERROR;
189
-
190
- uint8_t *secret = OPENSSL_malloc(32);
191
- if (secret == NULL) {
192
- return 0;
193
- }
194
-
195
- if (peer_key_len != 32 ||
196
- !X25519(secret, (uint8_t *)ctx->data, peer_key)) {
197
- OPENSSL_free(secret);
198
- *out_alert = SSL_AD_DECODE_ERROR;
199
- OPENSSL_PUT_ERROR(SSL, SSL_R_BAD_ECPOINT);
200
- return 0;
201
- }
202
-
203
- *out_secret = secret;
204
- *out_secret_len = 32;
205
- return 1;
206
- }
207
-
208
- static int ssl_x25519_accept(SSL_ECDH_CTX *ctx, CBB *out_public_key,
209
- uint8_t **out_secret, size_t *out_secret_len,
210
- uint8_t *out_alert, const uint8_t *peer_key,
211
- size_t peer_key_len) {
212
- *out_alert = SSL_AD_INTERNAL_ERROR;
213
- if (!ssl_x25519_offer(ctx, out_public_key) ||
214
- !ssl_x25519_finish(ctx, out_secret, out_secret_len, out_alert, peer_key,
215
- peer_key_len)) {
216
- return 0;
217
- }
218
- return 1;
219
- }
220
-
221
-
222
- /* Legacy DHE-based implementation. */
223
-
224
- static void ssl_dhe_cleanup(SSL_ECDH_CTX *ctx) {
225
- DH_free((DH *)ctx->data);
226
- }
227
-
228
- static int ssl_dhe_offer(SSL_ECDH_CTX *ctx, CBB *out) {
229
- DH *dh = (DH *)ctx->data;
230
- /* The group must have been initialized already, but not the key. */
231
- assert(dh != NULL);
232
- assert(dh->priv_key == NULL);
233
-
234
- /* Due to a bug in yaSSL, the public key must be zero padded to the size of
235
- * the prime. */
236
- return DH_generate_key(dh) &&
237
- BN_bn2cbb_padded(out, BN_num_bytes(dh->p), dh->pub_key);
238
- }
239
-
240
- static int ssl_dhe_finish(SSL_ECDH_CTX *ctx, uint8_t **out_secret,
241
- size_t *out_secret_len, uint8_t *out_alert,
242
- const uint8_t *peer_key, size_t peer_key_len) {
243
- DH *dh = (DH *)ctx->data;
244
- assert(dh != NULL);
245
- assert(dh->priv_key != NULL);
246
- *out_alert = SSL_AD_INTERNAL_ERROR;
247
-
248
- int secret_len = 0;
249
- uint8_t *secret = NULL;
250
- BIGNUM *peer_point = BN_bin2bn(peer_key, peer_key_len, NULL);
251
- if (peer_point == NULL) {
252
- goto err;
253
- }
254
-
255
- secret = OPENSSL_malloc(DH_size(dh));
256
- if (secret == NULL) {
257
- goto err;
258
- }
259
- secret_len = DH_compute_key(secret, peer_point, dh);
260
- if (secret_len <= 0) {
261
- goto err;
262
- }
263
-
264
- *out_secret = secret;
265
- *out_secret_len = (size_t)secret_len;
266
- BN_free(peer_point);
267
- return 1;
268
-
269
- err:
270
- if (secret_len > 0) {
271
- OPENSSL_cleanse(secret, (size_t)secret_len);
272
- }
273
- OPENSSL_free(secret);
274
- BN_free(peer_point);
275
- return 0;
276
- }
277
-
278
- static int ssl_dhe_accept(SSL_ECDH_CTX *ctx, CBB *out_public_key,
279
- uint8_t **out_secret, size_t *out_secret_len,
280
- uint8_t *out_alert, const uint8_t *peer_key,
281
- size_t peer_key_len) {
282
- *out_alert = SSL_AD_INTERNAL_ERROR;
283
- if (!ssl_dhe_offer(ctx, out_public_key) ||
284
- !ssl_dhe_finish(ctx, out_secret, out_secret_len, out_alert, peer_key,
285
- peer_key_len)) {
286
- return 0;
287
- }
288
- return 1;
289
- }
290
-
291
- static const SSL_ECDH_METHOD kDHEMethod = {
292
- NID_undef, 0, "",
293
- ssl_dhe_cleanup,
294
- ssl_dhe_offer,
295
- ssl_dhe_accept,
296
- ssl_dhe_finish,
297
- CBS_get_u16_length_prefixed,
298
- CBB_add_u16_length_prefixed,
299
- };
300
-
301
- static const SSL_ECDH_METHOD kMethods[] = {
302
- {
303
- NID_X9_62_prime256v1,
304
- SSL_CURVE_SECP256R1,
305
- "P-256",
306
- ssl_ec_point_cleanup,
307
- ssl_ec_point_offer,
308
- ssl_ec_point_accept,
309
- ssl_ec_point_finish,
310
- CBS_get_u8_length_prefixed,
311
- CBB_add_u8_length_prefixed,
312
- },
313
- {
314
- NID_secp384r1,
315
- SSL_CURVE_SECP384R1,
316
- "P-384",
317
- ssl_ec_point_cleanup,
318
- ssl_ec_point_offer,
319
- ssl_ec_point_accept,
320
- ssl_ec_point_finish,
321
- CBS_get_u8_length_prefixed,
322
- CBB_add_u8_length_prefixed,
323
- },
324
- {
325
- NID_secp521r1,
326
- SSL_CURVE_SECP521R1,
327
- "P-521",
328
- ssl_ec_point_cleanup,
329
- ssl_ec_point_offer,
330
- ssl_ec_point_accept,
331
- ssl_ec_point_finish,
332
- CBS_get_u8_length_prefixed,
333
- CBB_add_u8_length_prefixed,
334
- },
335
- {
336
- NID_X25519,
337
- SSL_CURVE_X25519,
338
- "X25519",
339
- ssl_x25519_cleanup,
340
- ssl_x25519_offer,
341
- ssl_x25519_accept,
342
- ssl_x25519_finish,
343
- CBS_get_u8_length_prefixed,
344
- CBB_add_u8_length_prefixed,
345
- },
346
- };
347
-
348
- static const SSL_ECDH_METHOD *method_from_group_id(uint16_t group_id) {
349
- for (size_t i = 0; i < OPENSSL_ARRAY_SIZE(kMethods); i++) {
350
- if (kMethods[i].group_id == group_id) {
351
- return &kMethods[i];
352
- }
353
- }
354
- return NULL;
355
- }
356
-
357
- static const SSL_ECDH_METHOD *method_from_nid(int nid) {
358
- for (size_t i = 0; i < OPENSSL_ARRAY_SIZE(kMethods); i++) {
359
- if (kMethods[i].nid == nid) {
360
- return &kMethods[i];
361
- }
362
- }
363
- return NULL;
364
- }
365
-
366
- static const SSL_ECDH_METHOD *method_from_name(const char *name, size_t len) {
367
- for (size_t i = 0; i < OPENSSL_ARRAY_SIZE(kMethods); i++) {
368
- if (len == strlen(kMethods[i].name) &&
369
- !strncmp(kMethods[i].name, name, len)) {
370
- return &kMethods[i];
371
- }
372
- }
373
- return NULL;
374
- }
375
-
376
- const char* SSL_get_curve_name(uint16_t group_id) {
377
- const SSL_ECDH_METHOD *method = method_from_group_id(group_id);
378
- if (method == NULL) {
379
- return NULL;
380
- }
381
- return method->name;
382
- }
383
-
384
- int ssl_nid_to_group_id(uint16_t *out_group_id, int nid) {
385
- const SSL_ECDH_METHOD *method = method_from_nid(nid);
386
- if (method == NULL) {
387
- return 0;
388
- }
389
- *out_group_id = method->group_id;
390
- return 1;
391
- }
392
-
393
- int ssl_name_to_group_id(uint16_t *out_group_id, const char *name, size_t len) {
394
- const SSL_ECDH_METHOD *method = method_from_name(name, len);
395
- if (method == NULL) {
396
- return 0;
397
- }
398
- *out_group_id = method->group_id;
399
- return 1;
400
- }
401
-
402
- int SSL_ECDH_CTX_init(SSL_ECDH_CTX *ctx, uint16_t group_id) {
403
- SSL_ECDH_CTX_cleanup(ctx);
404
-
405
- const SSL_ECDH_METHOD *method = method_from_group_id(group_id);
406
- if (method == NULL) {
407
- OPENSSL_PUT_ERROR(SSL, SSL_R_UNSUPPORTED_ELLIPTIC_CURVE);
408
- return 0;
409
- }
410
- ctx->method = method;
411
- return 1;
412
- }
413
-
414
- void SSL_ECDH_CTX_init_for_dhe(SSL_ECDH_CTX *ctx, DH *params) {
415
- SSL_ECDH_CTX_cleanup(ctx);
416
-
417
- ctx->method = &kDHEMethod;
418
- ctx->data = params;
419
- }
420
-
421
- void SSL_ECDH_CTX_cleanup(SSL_ECDH_CTX *ctx) {
422
- if (ctx->method == NULL) {
423
- return;
424
- }
425
- ctx->method->cleanup(ctx);
426
- ctx->method = NULL;
427
- ctx->data = NULL;
428
- }
429
-
430
- uint16_t SSL_ECDH_CTX_get_id(const SSL_ECDH_CTX *ctx) {
431
- return ctx->method->group_id;
432
- }
433
-
434
- int SSL_ECDH_CTX_get_key(SSL_ECDH_CTX *ctx, CBS *cbs, CBS *out) {
435
- if (ctx->method == NULL) {
436
- return 0;
437
- }
438
- return ctx->method->get_key(cbs, out);
439
- }
440
-
441
- int SSL_ECDH_CTX_add_key(SSL_ECDH_CTX *ctx, CBB *cbb, CBB *out_contents) {
442
- if (ctx->method == NULL) {
443
- return 0;
444
- }
445
- return ctx->method->add_key(cbb, out_contents);
446
- }
447
-
448
- int SSL_ECDH_CTX_offer(SSL_ECDH_CTX *ctx, CBB *out_public_key) {
449
- return ctx->method->offer(ctx, out_public_key);
450
- }
451
-
452
- int SSL_ECDH_CTX_accept(SSL_ECDH_CTX *ctx, CBB *out_public_key,
453
- uint8_t **out_secret, size_t *out_secret_len,
454
- uint8_t *out_alert, const uint8_t *peer_key,
455
- size_t peer_key_len) {
456
- return ctx->method->accept(ctx, out_public_key, out_secret, out_secret_len,
457
- out_alert, peer_key, peer_key_len);
458
- }
459
-
460
- int SSL_ECDH_CTX_finish(SSL_ECDH_CTX *ctx, uint8_t **out_secret,
461
- size_t *out_secret_len, uint8_t *out_alert,
462
- const uint8_t *peer_key, size_t peer_key_len) {
463
- return ctx->method->finish(ctx, out_secret, out_secret_len, out_alert,
464
- peer_key, peer_key_len);
465
- }