grpc 0.13.1 → 0.14.1.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 (724) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +2098 -828
  3. data/include/grpc/byte_buffer.h +1 -1
  4. data/include/grpc/byte_buffer_reader.h +1 -20
  5. data/include/grpc/census.h +4 -4
  6. data/include/grpc/compression.h +6 -5
  7. data/include/grpc/grpc.h +31 -20
  8. data/include/grpc/grpc_security.h +17 -31
  9. data/include/grpc/grpc_security_constants.h +114 -0
  10. data/include/grpc/grpc_zookeeper.h +1 -1
  11. data/include/grpc/impl/codegen/alloc.h +1 -1
  12. data/include/grpc/impl/codegen/atm.h +1 -1
  13. data/include/grpc/impl/codegen/atm_gcc_atomic.h +1 -1
  14. data/include/grpc/impl/codegen/atm_gcc_sync.h +1 -1
  15. data/include/grpc/impl/codegen/atm_win32.h +1 -1
  16. data/include/grpc/impl/codegen/byte_buffer.h +1 -1
  17. data/{src/core/client_config/lb_policies/round_robin.h → include/grpc/impl/codegen/byte_buffer_reader.h} +19 -8
  18. data/include/grpc/impl/codegen/grpc_types.h +20 -3
  19. data/include/grpc/impl/codegen/log.h +9 -2
  20. data/include/grpc/impl/codegen/port_platform.h +102 -17
  21. data/include/grpc/impl/codegen/propagation_bits.h +3 -3
  22. data/include/grpc/impl/codegen/slice.h +3 -3
  23. data/include/grpc/impl/codegen/slice_buffer.h +3 -3
  24. data/include/grpc/impl/codegen/status.h +1 -1
  25. data/include/grpc/impl/codegen/sync_generic.h +1 -1
  26. data/include/grpc/impl/codegen/sync_posix.h +1 -1
  27. data/include/grpc/impl/codegen/sync_win32.h +1 -1
  28. data/include/grpc/impl/codegen/time.h +3 -3
  29. data/include/grpc/status.h +1 -1
  30. data/include/grpc/support/alloc.h +1 -1
  31. data/include/grpc/support/atm.h +1 -1
  32. data/include/grpc/support/atm_gcc_atomic.h +4 -4
  33. data/include/grpc/support/atm_gcc_sync.h +1 -1
  34. data/include/grpc/support/atm_win32.h +1 -1
  35. data/include/grpc/support/avl.h +1 -1
  36. data/include/grpc/support/cmdline.h +1 -1
  37. data/include/grpc/support/cpu.h +1 -1
  38. data/include/grpc/support/histogram.h +1 -1
  39. data/include/grpc/support/host_port.h +1 -1
  40. data/include/grpc/support/log.h +1 -1
  41. data/include/grpc/support/log_win32.h +1 -1
  42. data/include/grpc/support/port_platform.h +1 -1
  43. data/include/grpc/support/slice.h +1 -1
  44. data/include/grpc/support/slice_buffer.h +1 -1
  45. data/include/grpc/support/string_util.h +3 -1
  46. data/include/grpc/support/subprocess.h +2 -2
  47. data/include/grpc/support/sync.h +1 -1
  48. data/include/grpc/support/sync_generic.h +1 -1
  49. data/include/grpc/support/sync_posix.h +1 -1
  50. data/include/grpc/support/sync_win32.h +1 -1
  51. data/include/grpc/support/thd.h +1 -1
  52. data/include/grpc/support/time.h +1 -1
  53. data/include/grpc/support/tls.h +1 -1
  54. data/include/grpc/support/tls_gcc.h +45 -1
  55. data/include/grpc/support/tls_msvc.h +3 -3
  56. data/include/grpc/support/tls_pthread.h +1 -1
  57. data/include/grpc/support/useful.h +1 -1
  58. data/src/boringssl/err_data.c +258 -252
  59. data/src/core/{census → ext/census}/aggregation.h +3 -3
  60. data/src/core/{statistics → ext/census}/census_interface.h +3 -3
  61. data/src/core/{statistics → ext/census}/census_rpc_stats.h +4 -4
  62. data/src/core/{census → ext/census}/context.c +2 -2
  63. data/src/core/{census → ext/census}/grpc_context.c +2 -2
  64. data/src/core/{census → ext/census}/grpc_filter.c +30 -16
  65. data/src/core/{census → ext/census}/grpc_filter.h +4 -4
  66. data/src/core/ext/census/grpc_plugin.c +82 -0
  67. data/src/core/{census → ext/census}/initialize.c +1 -1
  68. data/src/core/{census → ext/census}/mlog.c +2 -2
  69. data/src/core/{census → ext/census}/mlog.h +4 -4
  70. data/src/core/{census → ext/census}/operation.c +0 -0
  71. data/src/core/{census → ext/census}/placeholders.c +0 -0
  72. data/src/core/{census → ext/census}/rpc_metric_id.h +3 -3
  73. data/src/core/{census → ext/census}/tracing.c +0 -0
  74. data/src/core/{surface → ext/client_config}/channel_connectivity.c +8 -21
  75. data/src/core/{channel → ext/client_config}/client_channel.c +80 -35
  76. data/src/core/{channel → ext/client_config}/client_channel.h +5 -5
  77. data/src/core/{client_config/subchannel_factory.c → ext/client_config/client_channel_factory.c} +14 -6
  78. data/src/core/ext/client_config/client_channel_factory.h +85 -0
  79. data/src/core/{client_config → ext/client_config}/client_config.c +4 -2
  80. data/src/core/{client_config → ext/client_config}/client_config.h +4 -4
  81. data/src/core/ext/client_config/client_config_plugin.c +95 -0
  82. data/src/core/{client_config → ext/client_config}/connector.c +2 -2
  83. data/src/core/{client_config → ext/client_config}/connector.h +7 -10
  84. data/src/core/{client_config → ext/client_config}/default_initial_connect_string.c +1 -1
  85. data/src/core/{client_config → ext/client_config}/initial_connect_string.c +1 -1
  86. data/src/core/{client_config → ext/client_config}/initial_connect_string.h +4 -4
  87. data/src/core/{client_config → ext/client_config}/lb_policy.c +12 -3
  88. data/src/core/{client_config → ext/client_config}/lb_policy.h +19 -6
  89. data/src/core/{client_config → ext/client_config}/lb_policy_factory.c +4 -3
  90. data/src/core/{client_config → ext/client_config}/lb_policy_factory.h +14 -9
  91. data/src/core/{client_config → ext/client_config}/lb_policy_registry.c +4 -9
  92. data/src/core/{client_config → ext/client_config}/lb_policy_registry.h +7 -6
  93. data/src/core/ext/client_config/parse_address.c +137 -0
  94. data/src/core/ext/client_config/parse_address.h +56 -0
  95. data/src/core/{client_config → ext/client_config}/resolver.c +1 -1
  96. data/src/core/{client_config → ext/client_config}/resolver.h +6 -6
  97. data/src/core/{client_config → ext/client_config}/resolver_factory.c +1 -1
  98. data/src/core/{client_config → ext/client_config}/resolver_factory.h +7 -7
  99. data/src/core/{client_config → ext/client_config}/resolver_registry.c +25 -11
  100. data/src/core/{client_config → ext/client_config}/resolver_registry.h +9 -5
  101. data/src/core/{client_config → ext/client_config}/subchannel.c +90 -126
  102. data/src/core/{client_config → ext/client_config}/subchannel.h +15 -15
  103. data/src/core/{channel → ext/client_config}/subchannel_call_holder.c +9 -8
  104. data/src/core/{channel → ext/client_config}/subchannel_call_holder.h +7 -7
  105. data/src/core/{client_config → ext/client_config}/subchannel_index.c +3 -2
  106. data/src/core/{client_config → ext/client_config}/subchannel_index.h +5 -5
  107. data/src/core/{client_config → ext/client_config}/uri_parser.c +69 -1
  108. data/src/core/{client_config → ext/client_config}/uri_parser.h +15 -3
  109. data/src/core/{client_config/lb_policies → ext/lb_policy/grpclb}/load_balancer_api.c +18 -9
  110. data/src/core/{client_config/lb_policies → ext/lb_policy/grpclb}/load_balancer_api.h +5 -5
  111. data/src/core/{proto → ext/lb_policy/grpclb/proto}/grpc/lb/v0/load_balancer.pb.c +1 -1
  112. data/src/core/{proto → ext/lb_policy/grpclb/proto}/grpc/lb/v0/load_balancer.pb.h +0 -0
  113. data/src/core/{client_config/lb_policies → ext/lb_policy/pick_first}/pick_first.c +95 -32
  114. data/src/core/{client_config/lb_policies → ext/lb_policy/round_robin}/round_robin.c +98 -34
  115. data/src/core/{client_config/resolvers → ext/resolver/dns/native}/dns_resolver.c +83 -39
  116. data/src/core/{client_config/resolvers → ext/resolver/sockaddr}/sockaddr_resolver.c +66 -169
  117. data/src/core/{transport/chttp2 → ext/transport/chttp2/alpn}/alpn.c +1 -1
  118. data/src/core/{transport/chttp2 → ext/transport/chttp2/alpn}/alpn.h +3 -3
  119. data/src/core/{surface → ext/transport/chttp2/client/insecure}/channel_create.c +65 -59
  120. data/src/core/{surface → ext/transport/chttp2/client/secure}/secure_channel_create.c +77 -69
  121. data/src/core/{surface → ext/transport/chttp2/server/insecure}/server_chttp2.c +8 -11
  122. data/src/core/{security → ext/transport/chttp2/server/secure}/server_secure_chttp2.c +14 -17
  123. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/bin_encoder.c +28 -74
  124. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/bin_encoder.h +5 -5
  125. data/src/core/ext/transport/chttp2/transport/chttp2_plugin.c +46 -0
  126. data/src/core/{transport → ext/transport/chttp2/transport}/chttp2_transport.c +551 -310
  127. data/src/core/{transport → ext/transport/chttp2/transport}/chttp2_transport.h +5 -5
  128. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/frame.h +3 -3
  129. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/frame_data.c +30 -14
  130. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/frame_data.h +10 -7
  131. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/frame_goaway.c +2 -2
  132. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/frame_goaway.h +5 -5
  133. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/frame_ping.c +2 -2
  134. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/frame_ping.h +5 -5
  135. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/frame_rst_stream.c +9 -5
  136. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/frame_rst_stream.h +8 -6
  137. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/frame_settings.c +6 -6
  138. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/frame_settings.h +5 -5
  139. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/frame_window_update.c +11 -5
  140. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/frame_window_update.h +8 -6
  141. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/hpack_encoder.c +21 -12
  142. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/hpack_encoder.h +8 -6
  143. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/hpack_parser.c +42 -25
  144. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/hpack_parser.h +7 -7
  145. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/hpack_table.c +21 -11
  146. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/hpack_table.h +4 -4
  147. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/http2_errors.h +3 -3
  148. data/src/core/ext/transport/chttp2/transport/huffsyms.c +105 -0
  149. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/huffsyms.h +3 -3
  150. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/incoming_metadata.c +2 -2
  151. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/incoming_metadata.h +4 -4
  152. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/internal.h +81 -37
  153. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/parsing.c +54 -21
  154. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/status_conversion.c +1 -1
  155. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/status_conversion.h +4 -4
  156. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/stream_lists.c +10 -2
  157. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/stream_map.c +1 -1
  158. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/stream_map.h +3 -3
  159. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/timeout_encoding.c +4 -4
  160. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/timeout_encoding.h +4 -4
  161. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/varint.c +1 -1
  162. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/varint.h +3 -3
  163. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/writing.c +30 -20
  164. data/src/core/{channel → lib/channel}/channel_args.c +3 -15
  165. data/src/core/{channel → lib/channel}/channel_args.h +11 -15
  166. data/src/core/{channel → lib/channel}/channel_stack.c +5 -3
  167. data/src/core/{channel → lib/channel}/channel_stack.h +13 -8
  168. data/src/core/lib/channel/channel_stack_builder.c +277 -0
  169. data/src/core/lib/channel/channel_stack_builder.h +161 -0
  170. data/src/core/{channel → lib/channel}/compress_filter.c +51 -16
  171. data/src/core/{channel → lib/channel}/compress_filter.h +6 -4
  172. data/src/core/{channel → lib/channel}/connected_channel.c +34 -24
  173. data/src/core/lib/channel/connected_channel.h +42 -0
  174. data/src/core/{channel → lib/channel}/context.h +3 -3
  175. data/src/core/{channel → lib/channel}/http_client_filter.c +24 -13
  176. data/src/core/{channel → lib/channel}/http_client_filter.h +4 -4
  177. data/src/core/{channel → lib/channel}/http_server_filter.c +39 -19
  178. data/src/core/{channel → lib/channel}/http_server_filter.h +4 -4
  179. data/src/core/{compression → lib/compression}/algorithm_metadata.h +4 -4
  180. data/src/core/{compression → lib/compression}/compression_algorithm.c +46 -9
  181. data/src/core/{compression → lib/compression}/message_compress.c +1 -1
  182. data/src/core/{compression → lib/compression}/message_compress.h +3 -3
  183. data/src/core/{debug → lib/debug}/trace.c +2 -2
  184. data/src/core/{debug → lib/debug}/trace.h +3 -3
  185. data/src/core/{httpcli → lib/http}/format_request.c +8 -8
  186. data/src/core/{httpcli → lib/http}/format_request.h +4 -4
  187. data/src/core/{httpcli → lib/http}/httpcli.c +24 -19
  188. data/src/core/{httpcli → lib/http}/httpcli.h +14 -33
  189. data/src/core/{httpcli → lib/http}/httpcli_security_connector.c +5 -5
  190. data/src/core/lib/http/parser.c +341 -0
  191. data/src/core/lib/http/parser.h +119 -0
  192. data/src/core/{iomgr → lib/iomgr}/closure.c +8 -2
  193. data/src/core/{iomgr → lib/iomgr}/closure.h +7 -4
  194. data/src/core/{iomgr → lib/iomgr}/endpoint.c +1 -1
  195. data/src/core/{iomgr → lib/iomgr}/endpoint.h +5 -5
  196. data/src/core/{iomgr → lib/iomgr}/endpoint_pair.h +4 -4
  197. data/src/core/{iomgr → lib/iomgr}/endpoint_pair_posix.c +8 -7
  198. data/src/core/{iomgr → lib/iomgr}/endpoint_pair_windows.c +4 -4
  199. data/src/core/lib/iomgr/ev_poll_and_epoll_posix.c +1936 -0
  200. data/src/core/lib/iomgr/ev_poll_and_epoll_posix.h +41 -0
  201. data/src/core/lib/iomgr/ev_posix.c +164 -0
  202. data/src/core/lib/iomgr/ev_posix.h +158 -0
  203. data/src/core/{iomgr → lib/iomgr}/exec_ctx.c +78 -3
  204. data/src/core/{iomgr → lib/iomgr}/exec_ctx.h +25 -10
  205. data/src/core/{iomgr → lib/iomgr}/executor.c +3 -3
  206. data/src/core/{iomgr → lib/iomgr}/executor.h +5 -5
  207. data/src/core/{iomgr → lib/iomgr}/iocp_windows.c +6 -6
  208. data/src/core/{iomgr → lib/iomgr}/iocp_windows.h +5 -5
  209. data/src/core/{iomgr → lib/iomgr}/iomgr.c +13 -10
  210. data/src/core/{iomgr → lib/iomgr}/iomgr.h +3 -3
  211. data/src/core/{iomgr → lib/iomgr}/iomgr_internal.h +5 -9
  212. data/src/core/{iomgr → lib/iomgr}/iomgr_posix.c +6 -6
  213. data/src/core/{iomgr → lib/iomgr}/iomgr_posix.h +4 -4
  214. data/src/core/{iomgr → lib/iomgr}/iomgr_windows.c +7 -4
  215. data/src/core/{iomgr → lib/iomgr}/pollset.h +11 -11
  216. data/src/core/{iomgr → lib/iomgr}/pollset_set.h +5 -5
  217. data/src/core/{iomgr → lib/iomgr}/pollset_set_windows.c +2 -2
  218. data/src/core/lib/iomgr/pollset_set_windows.h +39 -0
  219. data/src/core/{iomgr → lib/iomgr}/pollset_windows.c +7 -7
  220. data/src/core/{iomgr → lib/iomgr}/pollset_windows.h +8 -5
  221. data/src/core/{iomgr → lib/iomgr}/resolve_address.h +10 -9
  222. data/src/core/{iomgr → lib/iomgr}/resolve_address_posix.c +22 -22
  223. data/src/core/{iomgr → lib/iomgr}/resolve_address_windows.c +20 -12
  224. data/src/core/{iomgr → lib/iomgr}/sockaddr.h +5 -5
  225. data/src/core/{iomgr → lib/iomgr}/sockaddr_posix.h +5 -5
  226. data/src/core/{iomgr → lib/iomgr}/sockaddr_utils.c +9 -16
  227. data/src/core/{iomgr → lib/iomgr}/sockaddr_utils.h +4 -4
  228. data/src/core/{iomgr → lib/iomgr}/sockaddr_win32.h +6 -4
  229. data/src/core/{iomgr → lib/iomgr}/socket_utils_common_posix.c +29 -7
  230. data/src/core/{iomgr → lib/iomgr}/socket_utils_linux.c +2 -2
  231. data/src/core/{iomgr → lib/iomgr}/socket_utils_posix.c +1 -1
  232. data/src/core/{iomgr → lib/iomgr}/socket_utils_posix.h +14 -4
  233. data/src/core/{iomgr → lib/iomgr}/socket_windows.c +7 -5
  234. data/src/core/{iomgr → lib/iomgr}/socket_windows.h +6 -6
  235. data/src/core/{iomgr → lib/iomgr}/tcp_client.h +6 -6
  236. data/src/core/{iomgr → lib/iomgr}/tcp_client_posix.c +33 -18
  237. data/src/core/{iomgr → lib/iomgr}/tcp_client_windows.c +30 -20
  238. data/src/core/{iomgr → lib/iomgr}/tcp_posix.c +9 -10
  239. data/src/core/{iomgr → lib/iomgr}/tcp_posix.h +6 -6
  240. data/src/core/{iomgr → lib/iomgr}/tcp_server.h +6 -6
  241. data/src/core/{iomgr → lib/iomgr}/tcp_server_posix.c +24 -37
  242. data/src/core/{iomgr → lib/iomgr}/tcp_server_windows.c +8 -36
  243. data/src/core/{iomgr → lib/iomgr}/tcp_windows.c +27 -17
  244. data/src/core/{iomgr → lib/iomgr}/tcp_windows.h +5 -5
  245. data/src/core/{iomgr → lib/iomgr}/time_averaged_stats.c +1 -1
  246. data/src/core/{iomgr → lib/iomgr}/time_averaged_stats.h +3 -3
  247. data/src/core/{iomgr → lib/iomgr}/timer.c +31 -4
  248. data/src/core/{iomgr → lib/iomgr}/timer.h +6 -7
  249. data/src/core/{iomgr → lib/iomgr}/timer_heap.c +2 -2
  250. data/src/core/{iomgr → lib/iomgr}/timer_heap.h +4 -4
  251. data/src/core/{iomgr → lib/iomgr}/udp_server.c +13 -37
  252. data/src/core/{iomgr → lib/iomgr}/udp_server.h +11 -10
  253. data/src/core/lib/iomgr/unix_sockets_posix.c +89 -0
  254. data/src/core/{client_config/resolvers/sockaddr_resolver.h → lib/iomgr/unix_sockets_posix.h} +15 -11
  255. data/src/core/lib/iomgr/unix_sockets_posix_noop.c +59 -0
  256. data/src/core/{iomgr → lib/iomgr}/wakeup_fd_eventfd.c +2 -2
  257. data/src/core/{iomgr → lib/iomgr}/wakeup_fd_nospecial.c +1 -1
  258. data/src/core/{iomgr → lib/iomgr}/wakeup_fd_pipe.c +8 -3
  259. data/src/core/{iomgr → lib/iomgr}/wakeup_fd_pipe.h +4 -4
  260. data/src/core/{iomgr → lib/iomgr}/wakeup_fd_posix.c +2 -2
  261. data/src/core/{iomgr → lib/iomgr}/wakeup_fd_posix.h +3 -3
  262. data/src/core/{iomgr → lib/iomgr}/workqueue.h +10 -10
  263. data/src/core/{iomgr → lib/iomgr}/workqueue_posix.c +5 -6
  264. data/src/core/{iomgr → lib/iomgr}/workqueue_posix.h +5 -5
  265. data/src/core/{iomgr → lib/iomgr}/workqueue_windows.c +1 -1
  266. data/src/core/{iomgr → lib/iomgr}/workqueue_windows.h +3 -3
  267. data/src/core/{json → lib/json}/json.c +1 -1
  268. data/src/core/{json → lib/json}/json.h +4 -4
  269. data/src/core/{json → lib/json}/json_common.h +3 -3
  270. data/src/core/{json → lib/json}/json_reader.c +16 -4
  271. data/src/core/{json → lib/json}/json_reader.h +4 -4
  272. data/src/core/{json → lib/json}/json_string.c +4 -4
  273. data/src/core/{json → lib/json}/json_writer.c +1 -1
  274. data/src/core/{json → lib/json}/json_writer.h +4 -4
  275. data/src/core/{profiling → lib/profiling}/basic_timers.c +3 -2
  276. data/src/core/{profiling → lib/profiling}/stap_timers.c +2 -2
  277. data/src/core/{profiling → lib/profiling}/timers.h +3 -3
  278. data/src/core/{security → lib/security}/auth_filters.h +4 -4
  279. data/src/core/{security → lib/security}/b64.c +2 -2
  280. data/src/core/{security → lib/security}/b64.h +4 -4
  281. data/src/core/{security → lib/security}/client_auth_filter.c +16 -16
  282. data/src/core/{security → lib/security}/credentials.c +42 -26
  283. data/src/core/{security → lib/security}/credentials.h +11 -10
  284. data/src/core/{security → lib/security}/credentials_metadata.c +1 -1
  285. data/src/core/{security → lib/security}/credentials_posix.c +3 -3
  286. data/src/core/{security → lib/security}/credentials_win32.c +3 -3
  287. data/src/core/{security → lib/security}/google_default_credentials.c +10 -9
  288. data/src/core/{security → lib/security}/handshake.c +4 -4
  289. data/src/core/{security → lib/security}/handshake.h +6 -6
  290. data/src/core/{security → lib/security}/json_token.c +4 -4
  291. data/src/core/{security → lib/security}/json_token.h +4 -4
  292. data/src/core/{security → lib/security}/jwt_verifier.c +14 -14
  293. data/src/core/{security → lib/security}/jwt_verifier.h +5 -5
  294. data/src/core/{security → lib/security}/secure_endpoint.c +9 -8
  295. data/src/core/{security → lib/security}/secure_endpoint.h +4 -4
  296. data/src/core/{security → lib/security}/security_connector.c +53 -21
  297. data/src/core/{security → lib/security}/security_connector.h +8 -8
  298. data/src/core/{security → lib/security}/security_context.c +5 -5
  299. data/src/core/{security → lib/security}/security_context.h +5 -5
  300. data/src/core/{security → lib/security}/server_auth_filter.c +9 -9
  301. data/src/core/{support → lib/support}/alloc.c +5 -3
  302. data/src/core/{support → lib/support}/avl.c +1 -1
  303. data/src/core/lib/support/backoff.c +76 -0
  304. data/src/core/lib/support/backoff.h +68 -0
  305. data/src/core/{support → lib/support}/block_annotate.h +3 -3
  306. data/src/core/{support → lib/support}/cmdline.c +1 -1
  307. data/src/core/{support → lib/support}/cpu_iphone.c +0 -0
  308. data/src/core/{support → lib/support}/cpu_linux.c +2 -2
  309. data/src/core/{support → lib/support}/cpu_posix.c +2 -2
  310. data/src/core/{support → lib/support}/cpu_windows.c +0 -0
  311. data/src/core/{support → lib/support}/env.h +3 -3
  312. data/src/core/{support → lib/support}/env_linux.c +3 -3
  313. data/src/core/{support → lib/support}/env_posix.c +2 -2
  314. data/src/core/{support → lib/support}/env_win32.c +27 -21
  315. data/src/core/{support → lib/support}/histogram.c +1 -1
  316. data/src/core/{support → lib/support}/host_port.c +1 -1
  317. data/src/core/{support → lib/support}/load_file.c +4 -4
  318. data/src/core/{support → lib/support}/load_file.h +4 -4
  319. data/src/core/{support → lib/support}/log.c +33 -0
  320. data/src/core/{support → lib/support}/log_android.c +2 -2
  321. data/src/core/{support → lib/support}/log_linux.c +6 -5
  322. data/src/core/{support → lib/support}/log_posix.c +3 -3
  323. data/src/core/{support → lib/support}/log_win32.c +8 -22
  324. data/src/core/{support → lib/support}/murmur_hash.c +1 -1
  325. data/src/core/{support → lib/support}/murmur_hash.h +3 -3
  326. data/src/core/{support → lib/support}/slice.c +0 -0
  327. data/src/core/{support → lib/support}/slice_buffer.c +0 -0
  328. data/src/core/{support → lib/support}/stack_lockfree.c +7 -7
  329. data/src/core/{support → lib/support}/stack_lockfree.h +3 -3
  330. data/src/core/{support → lib/support}/string.c +1 -1
  331. data/src/core/{support → lib/support}/string.h +4 -4
  332. data/src/core/{support → lib/support}/string_posix.c +1 -1
  333. data/src/core/{support/string_win32.c → lib/support/string_util_win32.c} +23 -38
  334. data/src/core/lib/support/string_win32.c +83 -0
  335. data/src/core/{support → lib/support}/string_win32.h +3 -3
  336. data/src/core/{support → lib/support}/subprocess_posix.c +3 -3
  337. data/src/core/{support → lib/support}/subprocess_windows.c +3 -3
  338. data/src/core/{support → lib/support}/sync.c +2 -2
  339. data/src/core/{support → lib/support}/sync_posix.c +3 -3
  340. data/src/core/{support → lib/support}/sync_win32.c +1 -1
  341. data/src/core/{support → lib/support}/thd.c +0 -0
  342. data/src/core/{support → lib/support}/thd_internal.h +3 -3
  343. data/src/core/{support → lib/support}/thd_posix.c +4 -3
  344. data/src/core/{support → lib/support}/thd_win32.c +1 -1
  345. data/src/core/{support → lib/support}/time.c +2 -2
  346. data/src/core/{support → lib/support}/time_posix.c +12 -6
  347. data/src/core/{support → lib/support}/time_precise.c +0 -0
  348. data/src/core/{support → lib/support}/time_precise.h +3 -3
  349. data/src/core/{support → lib/support}/time_win32.c +7 -7
  350. data/src/core/{support → lib/support}/tls_pthread.c +0 -0
  351. data/src/core/{support → lib/support}/tmpfile.h +4 -4
  352. data/src/core/lib/support/tmpfile_msys.c +73 -0
  353. data/src/core/{support → lib/support}/tmpfile_posix.c +5 -5
  354. data/src/core/{support → lib/support}/tmpfile_win32.c +5 -5
  355. data/src/core/{support → lib/support}/wrap_memcpy.c +0 -0
  356. data/src/core/{surface → lib/surface}/alarm.c +3 -3
  357. data/src/core/{surface → lib/surface}/api_trace.c +1 -1
  358. data/src/core/{surface → lib/surface}/api_trace.h +4 -4
  359. data/src/core/{surface → lib/surface}/byte_buffer.c +3 -3
  360. data/src/core/{surface → lib/surface}/byte_buffer_reader.c +3 -3
  361. data/src/core/{surface → lib/surface}/call.c +145 -73
  362. data/src/core/{surface → lib/surface}/call.h +14 -7
  363. data/src/core/{surface → lib/surface}/call_details.c +1 -1
  364. data/src/core/{surface → lib/surface}/call_log_batch.c +2 -2
  365. data/src/core/{surface → lib/surface}/call_test_only.h +3 -3
  366. data/src/core/{surface → lib/surface}/channel.c +33 -34
  367. data/src/core/{surface → lib/surface}/channel.h +9 -9
  368. data/src/core/lib/surface/channel_init.c +140 -0
  369. data/src/core/lib/surface/channel_init.h +87 -0
  370. data/src/core/{surface → lib/surface}/channel_ping.c +4 -4
  371. data/src/core/lib/surface/channel_stack_type.c +54 -0
  372. data/src/core/{httpcli/parser.h → lib/surface/channel_stack_type.h} +22 -28
  373. data/src/core/{surface → lib/surface}/completion_queue.c +15 -11
  374. data/src/core/{surface → lib/surface}/completion_queue.h +4 -4
  375. data/src/core/{surface → lib/surface}/event_string.c +2 -2
  376. data/src/core/{surface → lib/surface}/event_string.h +3 -3
  377. data/src/core/lib/surface/init.c +217 -0
  378. data/src/core/{surface → lib/surface}/init.h +4 -3
  379. data/src/core/lib/surface/init_secure.c +89 -0
  380. data/src/core/{surface → lib/surface}/lame_client.c +31 -19
  381. data/src/core/{iomgr/pollset_set_windows.h → lib/surface/lame_client.h} +7 -5
  382. data/src/core/{surface → lib/surface}/metadata_array.c +1 -1
  383. data/src/core/{surface → lib/surface}/server.c +208 -183
  384. data/src/core/{surface → lib/surface}/server.h +6 -11
  385. data/src/core/{surface → lib/surface}/surface_trace.h +5 -5
  386. data/src/core/{surface → lib/surface}/validate_metadata.c +1 -1
  387. data/src/core/{surface → lib/surface}/version.c +2 -2
  388. data/src/core/{transport → lib/transport}/byte_stream.c +1 -1
  389. data/src/core/{transport → lib/transport}/byte_stream.h +4 -4
  390. data/src/core/{transport → lib/transport}/connectivity_state.c +2 -2
  391. data/src/core/{transport → lib/transport}/connectivity_state.h +4 -4
  392. data/src/core/{transport → lib/transport}/metadata.c +71 -19
  393. data/src/core/{transport → lib/transport}/metadata.h +11 -4
  394. data/src/core/{transport → lib/transport}/metadata_batch.c +2 -2
  395. data/src/core/{transport → lib/transport}/metadata_batch.h +4 -4
  396. data/src/core/{transport → lib/transport}/static_metadata.c +100 -32
  397. data/src/core/{transport → lib/transport}/static_metadata.h +58 -58
  398. data/src/core/{transport → lib/transport}/transport.c +25 -5
  399. data/src/core/{transport → lib/transport}/transport.h +41 -16
  400. data/src/core/{transport → lib/transport}/transport_impl.h +8 -5
  401. data/src/core/{transport → lib/transport}/transport_op_string.c +2 -2
  402. data/src/core/{tsi → lib/tsi}/fake_transport_security.c +18 -14
  403. data/src/core/{tsi → lib/tsi}/fake_transport_security.h +4 -4
  404. data/src/core/{tsi → lib/tsi}/ssl_transport_security.c +173 -63
  405. data/src/core/{tsi → lib/tsi}/ssl_transport_security.h +24 -6
  406. data/src/core/{tsi → lib/tsi}/ssl_types.h +3 -3
  407. data/src/core/{tsi → lib/tsi}/transport_security.c +12 -28
  408. data/src/core/{tsi → lib/tsi}/transport_security.h +4 -4
  409. data/src/core/{tsi → lib/tsi}/transport_security_interface.h +12 -3
  410. data/src/core/plugin_registry/grpc_plugin_registry.c +66 -0
  411. data/src/ruby/ext/grpc/extconf.rb +14 -20
  412. data/src/ruby/ext/grpc/rb_byte_buffer.c +2 -3
  413. data/src/ruby/ext/grpc/rb_call.c +37 -4
  414. data/src/ruby/ext/grpc/rb_call_credentials.c +13 -3
  415. data/src/ruby/ext/grpc/rb_channel.c +2 -3
  416. data/src/ruby/ext/grpc/rb_channel_args.c +2 -3
  417. data/src/ruby/ext/grpc/rb_channel_credentials.c +31 -3
  418. data/src/ruby/ext/grpc/rb_completion_queue.c +2 -2
  419. data/src/ruby/ext/grpc/rb_event_thread.c +1 -1
  420. data/src/ruby/ext/grpc/rb_grpc.c +4 -2
  421. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +8 -0
  422. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +14 -2
  423. data/src/ruby/ext/grpc/rb_server.c +2 -3
  424. data/src/ruby/ext/grpc/rb_server_credentials.c +16 -13
  425. data/src/ruby/ext/grpc/rb_signal.c +70 -0
  426. data/src/ruby/ext/grpc/rb_signal.h +39 -0
  427. data/src/ruby/lib/grpc.rb +21 -13
  428. data/src/ruby/lib/grpc/core/time_consts.rb +2 -2
  429. data/src/ruby/lib/grpc/errors.rb +2 -2
  430. data/src/ruby/lib/grpc/generic/active_call.rb +10 -3
  431. data/src/ruby/lib/grpc/generic/bidi_call.rb +2 -2
  432. data/src/ruby/lib/grpc/generic/client_stub.rb +10 -7
  433. data/src/ruby/lib/grpc/generic/rpc_desc.rb +2 -2
  434. data/src/ruby/lib/grpc/generic/rpc_server.rb +21 -61
  435. data/src/ruby/lib/grpc/generic/service.rb +5 -15
  436. data/src/ruby/lib/grpc/grpc.rb +3 -3
  437. data/src/ruby/{bin/interop/interop_server.rb → lib/grpc/signals.rb} +39 -20
  438. data/src/ruby/lib/grpc/version.rb +2 -2
  439. data/src/ruby/pb/generate_proto_ruby.sh +9 -2
  440. data/src/ruby/pb/grpc/health/checker.rb +1 -1
  441. data/src/ruby/pb/grpc/testing/duplicate/echo_duplicate_services.rb +28 -0
  442. data/src/ruby/pb/grpc/testing/metrics.rb +28 -0
  443. data/src/ruby/pb/grpc/testing/metrics_services.rb +27 -0
  444. data/src/ruby/pb/test/client.rb +12 -23
  445. data/src/ruby/pb/test/server.rb +1 -1
  446. data/src/ruby/spec/client_server_spec.rb +1 -1
  447. data/src/ruby/spec/generic/client_stub_spec.rb +18 -17
  448. data/src/ruby/spec/generic/rpc_server_spec.rb +23 -7
  449. data/src/ruby/spec/generic/service_spec.rb +0 -69
  450. data/src/ruby/{bin/interop/interop_client.rb → spec/pb/duplicate/codegen_spec.rb} +41 -21
  451. data/src/ruby/spec/pb/health/checker_spec.rb +1 -1
  452. data/third_party/boringssl/crypto/asn1/a_bitstr.c +184 -176
  453. data/third_party/boringssl/crypto/asn1/a_bool.c +42 -44
  454. data/third_party/boringssl/crypto/asn1/a_bytes.c +236 -245
  455. data/third_party/boringssl/crypto/asn1/a_d2i_fp.c +173 -192
  456. data/third_party/boringssl/crypto/asn1/a_dup.c +43 -35
  457. data/third_party/boringssl/crypto/asn1/a_enum.c +107 -109
  458. data/third_party/boringssl/crypto/asn1/a_gentm.c +180 -181
  459. data/third_party/boringssl/crypto/asn1/a_i2d_fp.c +73 -80
  460. data/third_party/boringssl/crypto/asn1/a_int.c +357 -353
  461. data/third_party/boringssl/crypto/asn1/a_mbstr.c +272 -253
  462. data/third_party/boringssl/crypto/asn1/a_object.c +293 -309
  463. data/third_party/boringssl/crypto/asn1/a_octet.c +13 -6
  464. data/third_party/boringssl/crypto/asn1/a_print.c +54 -52
  465. data/third_party/boringssl/crypto/asn1/a_strnid.c +179 -157
  466. data/third_party/boringssl/crypto/asn1/a_time.c +125 -129
  467. data/third_party/boringssl/crypto/asn1/a_type.c +79 -86
  468. data/third_party/boringssl/crypto/asn1/a_utctm.c +246 -255
  469. data/third_party/boringssl/crypto/asn1/a_utf8.c +159 -135
  470. data/third_party/boringssl/crypto/asn1/asn1_lib.c +361 -368
  471. data/third_party/boringssl/crypto/asn1/asn1_locl.h +11 -11
  472. data/third_party/boringssl/crypto/asn1/asn1_par.c +309 -351
  473. data/third_party/boringssl/crypto/asn1/asn_pack.c +30 -29
  474. data/third_party/boringssl/crypto/asn1/bio_asn1.c +375 -394
  475. data/third_party/boringssl/crypto/asn1/bio_ndef.c +146 -149
  476. data/third_party/boringssl/crypto/asn1/f_enum.c +128 -134
  477. data/third_party/boringssl/crypto/asn1/f_int.c +131 -139
  478. data/third_party/boringssl/crypto/asn1/f_string.c +125 -133
  479. data/third_party/boringssl/crypto/asn1/t_bitst.c +30 -29
  480. data/third_party/boringssl/crypto/asn1/t_pkey.c +45 -47
  481. data/third_party/boringssl/crypto/asn1/tasn_dec.c +1099 -1216
  482. data/third_party/boringssl/crypto/asn1/tasn_enc.c +556 -592
  483. data/third_party/boringssl/crypto/asn1/tasn_fre.c +175 -193
  484. data/third_party/boringssl/crypto/asn1/tasn_new.c +271 -288
  485. data/third_party/boringssl/crypto/asn1/tasn_prn.c +462 -508
  486. data/third_party/boringssl/crypto/asn1/tasn_typ.c +28 -21
  487. data/third_party/boringssl/crypto/asn1/x_bignum.c +62 -52
  488. data/third_party/boringssl/crypto/asn1/x_long.c +101 -86
  489. data/third_party/boringssl/crypto/bio/buffer.c +3 -3
  490. data/third_party/boringssl/crypto/bn/asm/x86_64-gcc.c +8 -68
  491. data/third_party/boringssl/crypto/bn/bn.c +1 -1
  492. data/third_party/boringssl/crypto/bn/bn_asn1.c +9 -22
  493. data/third_party/boringssl/crypto/bn/convert.c +9 -4
  494. data/third_party/boringssl/crypto/bn/div.c +0 -20
  495. data/third_party/boringssl/crypto/bn/exponentiation.c +22 -13
  496. data/third_party/boringssl/crypto/bn/generic.c +6 -242
  497. data/third_party/boringssl/crypto/bn/internal.h +9 -70
  498. data/third_party/boringssl/crypto/bn/montgomery.c +1 -2
  499. data/third_party/boringssl/crypto/bn/mul.c +6 -26
  500. data/third_party/boringssl/crypto/bn/rsaz_exp.c +21 -28
  501. data/third_party/boringssl/crypto/bytestring/asn1_compat.c +51 -0
  502. data/third_party/boringssl/crypto/bytestring/ber.c +128 -87
  503. data/third_party/boringssl/crypto/bytestring/cbb.c +37 -3
  504. data/third_party/boringssl/crypto/bytestring/internal.h +39 -10
  505. data/third_party/boringssl/crypto/chacha/chacha_vec.c +18 -13
  506. data/third_party/boringssl/crypto/cipher/e_aes.c +2 -2
  507. data/third_party/boringssl/crypto/cipher/e_chacha20poly1305.c +4 -9
  508. data/third_party/boringssl/crypto/cipher/tls_cbc.c +39 -10
  509. data/third_party/boringssl/crypto/conf/conf.c +9 -0
  510. data/third_party/boringssl/crypto/cpu-intel.c +1 -1
  511. data/third_party/boringssl/crypto/crypto.c +2 -0
  512. data/third_party/boringssl/crypto/curve25519/curve25519.c +125 -120
  513. data/third_party/boringssl/crypto/curve25519/internal.h +45 -0
  514. data/third_party/boringssl/crypto/curve25519/x25519-x86_64.c +225 -0
  515. data/third_party/boringssl/crypto/dh/check.c +32 -10
  516. data/third_party/boringssl/crypto/dh/dh.c +1 -1
  517. data/third_party/boringssl/crypto/digest/md32_common.h +0 -60
  518. data/third_party/boringssl/crypto/dsa/dsa.c +47 -21
  519. data/third_party/boringssl/crypto/dsa/dsa_asn1.c +249 -64
  520. data/third_party/boringssl/crypto/ec/ec.c +45 -31
  521. data/third_party/boringssl/crypto/ec/ec_asn1.c +315 -382
  522. data/third_party/boringssl/crypto/ec/ec_key.c +1 -4
  523. data/third_party/boringssl/crypto/ec/ec_montgomery.c +0 -9
  524. data/third_party/boringssl/crypto/ec/internal.h +1 -19
  525. data/third_party/boringssl/crypto/ec/oct.c +12 -0
  526. data/third_party/boringssl/crypto/ec/p224-64.c +4 -65
  527. data/third_party/boringssl/crypto/ec/p256-64.c +9 -71
  528. data/third_party/boringssl/crypto/ec/p256-x86_64-table.h +1 -6
  529. data/third_party/boringssl/crypto/ec/p256-x86_64.c +3 -13
  530. data/third_party/boringssl/crypto/ec/simple.c +0 -76
  531. data/third_party/boringssl/crypto/ecdsa/ecdsa.c +1 -1
  532. data/third_party/boringssl/crypto/ecdsa/ecdsa_asn1.c +10 -24
  533. data/third_party/boringssl/crypto/evp/evp.c +4 -3
  534. data/third_party/boringssl/crypto/evp/evp_asn1.c +101 -0
  535. data/third_party/boringssl/crypto/evp/evp_ctx.c +22 -51
  536. data/third_party/boringssl/crypto/evp/internal.h +28 -27
  537. data/third_party/boringssl/crypto/evp/p_dsa_asn1.c +78 -249
  538. data/third_party/boringssl/crypto/evp/p_ec.c +19 -66
  539. data/third_party/boringssl/crypto/evp/p_ec_asn1.c +74 -231
  540. data/third_party/boringssl/crypto/evp/p_rsa.c +90 -13
  541. data/third_party/boringssl/crypto/evp/p_rsa_asn1.c +49 -48
  542. data/third_party/boringssl/crypto/internal.h +16 -1
  543. data/third_party/boringssl/crypto/mem.c +2 -2
  544. data/third_party/boringssl/crypto/modes/ctr.c +2 -1
  545. data/third_party/boringssl/crypto/modes/gcm.c +5 -3
  546. data/third_party/boringssl/crypto/obj/obj_dat.h +6 -3
  547. data/third_party/boringssl/crypto/pem/pem_all.c +83 -102
  548. data/third_party/boringssl/crypto/pem/pem_info.c +286 -309
  549. data/third_party/boringssl/crypto/pem/pem_lib.c +690 -710
  550. data/third_party/boringssl/crypto/pem/pem_oth.c +15 -16
  551. data/third_party/boringssl/crypto/pem/pem_pk8.c +132 -119
  552. data/third_party/boringssl/crypto/pem/pem_pkey.c +144 -220
  553. data/third_party/boringssl/crypto/pem/pem_x509.c +3 -3
  554. data/third_party/boringssl/crypto/pem/pem_xaux.c +5 -4
  555. data/third_party/boringssl/crypto/pkcs8/pkcs8.c +54 -60
  556. data/third_party/boringssl/crypto/poly1305/poly1305_arm.c +3 -1
  557. data/third_party/boringssl/crypto/poly1305/poly1305_vec.c +48 -50
  558. data/third_party/boringssl/crypto/rand/rand.c +2 -0
  559. data/third_party/boringssl/crypto/rsa/blinding.c +8 -48
  560. data/third_party/boringssl/crypto/rsa/internal.h +1 -9
  561. data/third_party/boringssl/crypto/rsa/padding.c +73 -77
  562. data/third_party/boringssl/crypto/rsa/rsa.c +1 -1
  563. data/third_party/boringssl/crypto/rsa/rsa_asn1.c +27 -46
  564. data/third_party/boringssl/crypto/rsa/rsa_impl.c +23 -34
  565. data/third_party/boringssl/crypto/test/scoped_types.h +3 -0
  566. data/third_party/boringssl/crypto/thread_win.c +15 -13
  567. data/third_party/boringssl/crypto/time_support.c +0 -6
  568. data/third_party/boringssl/crypto/x509/a_digest.c +26 -27
  569. data/third_party/boringssl/crypto/x509/a_sign.c +63 -64
  570. data/third_party/boringssl/crypto/x509/a_strex.c +482 -413
  571. data/third_party/boringssl/crypto/x509/a_verify.c +45 -51
  572. data/third_party/boringssl/crypto/x509/asn1_gen.c +715 -769
  573. data/third_party/boringssl/crypto/x509/by_dir.c +355 -393
  574. data/third_party/boringssl/crypto/x509/by_file.c +186 -206
  575. data/third_party/boringssl/crypto/x509/charmap.h +11 -11
  576. data/third_party/boringssl/crypto/x509/i2d_pr.c +21 -22
  577. data/third_party/boringssl/crypto/x509/t_crl.c +50 -51
  578. data/third_party/boringssl/crypto/x509/t_x509.c +414 -406
  579. data/third_party/boringssl/crypto/x509/t_x509a.c +44 -42
  580. data/third_party/boringssl/crypto/x509/vpm_int.h +13 -13
  581. data/third_party/boringssl/crypto/x509/x509_att.c +241 -219
  582. data/third_party/boringssl/crypto/x509/x509_cmp.c +343 -359
  583. data/third_party/boringssl/crypto/x509/x509_d2.c +36 -35
  584. data/third_party/boringssl/crypto/x509/x509_def.c +23 -13
  585. data/third_party/boringssl/crypto/x509/x509_ext.c +75 -75
  586. data/third_party/boringssl/crypto/x509/x509_lu.c +574 -612
  587. data/third_party/boringssl/crypto/x509/x509_obj.c +104 -115
  588. data/third_party/boringssl/crypto/x509/x509_r2x.c +40 -40
  589. data/third_party/boringssl/crypto/x509/x509_req.c +181 -174
  590. data/third_party/boringssl/crypto/x509/x509_set.c +71 -76
  591. data/third_party/boringssl/crypto/x509/x509_trs.c +193 -171
  592. data/third_party/boringssl/crypto/x509/x509_txt.c +135 -138
  593. data/third_party/boringssl/crypto/x509/x509_v3.c +174 -167
  594. data/third_party/boringssl/crypto/x509/x509_vfy.c +2079 -2130
  595. data/third_party/boringssl/crypto/x509/x509_vpm.c +486 -522
  596. data/third_party/boringssl/crypto/x509/x509cset.c +96 -99
  597. data/third_party/boringssl/crypto/x509/x509name.c +280 -275
  598. data/third_party/boringssl/crypto/x509/x509rset.c +15 -14
  599. data/third_party/boringssl/crypto/x509/x509spki.c +62 -60
  600. data/third_party/boringssl/crypto/x509/x509type.c +58 -60
  601. data/third_party/boringssl/crypto/x509/x_algor.c +70 -73
  602. data/third_party/boringssl/crypto/x509/x_all.c +282 -328
  603. data/third_party/boringssl/crypto/x509/x_attrib.c +36 -42
  604. data/third_party/boringssl/crypto/x509/x_crl.c +397 -418
  605. data/third_party/boringssl/crypto/x509/x_exten.c +5 -5
  606. data/third_party/boringssl/crypto/x509/x_info.c +30 -27
  607. data/third_party/boringssl/crypto/x509/x_name.c +387 -388
  608. data/third_party/boringssl/crypto/x509/x_pkey.c +32 -29
  609. data/third_party/boringssl/crypto/x509/x_pubkey.c +261 -280
  610. data/third_party/boringssl/crypto/x509/x_req.c +30 -33
  611. data/third_party/boringssl/crypto/x509/x_sig.c +2 -2
  612. data/third_party/boringssl/crypto/x509/x_spki.c +9 -7
  613. data/third_party/boringssl/crypto/x509/x_val.c +2 -2
  614. data/third_party/boringssl/crypto/x509/x_x509.c +120 -119
  615. data/third_party/boringssl/crypto/x509/x_x509a.c +99 -91
  616. data/third_party/boringssl/crypto/x509v3/ext_dat.h +57 -51
  617. data/third_party/boringssl/crypto/x509v3/pcy_cache.c +199 -214
  618. data/third_party/boringssl/crypto/x509v3/pcy_data.c +57 -64
  619. data/third_party/boringssl/crypto/x509v3/pcy_int.h +95 -90
  620. data/third_party/boringssl/crypto/x509v3/pcy_lib.c +86 -87
  621. data/third_party/boringssl/crypto/x509v3/pcy_map.c +61 -64
  622. data/third_party/boringssl/crypto/x509v3/pcy_node.c +108 -117
  623. data/third_party/boringssl/crypto/x509v3/pcy_tree.c +676 -724
  624. data/third_party/boringssl/crypto/x509v3/v3_akey.c +128 -136
  625. data/third_party/boringssl/crypto/x509v3/v3_akeya.c +7 -6
  626. data/third_party/boringssl/crypto/x509v3/v3_alt.c +499 -507
  627. data/third_party/boringssl/crypto/x509v3/v3_bcons.c +54 -47
  628. data/third_party/boringssl/crypto/x509v3/v3_bitst.c +67 -67
  629. data/third_party/boringssl/crypto/x509v3/v3_conf.c +330 -328
  630. data/third_party/boringssl/crypto/x509v3/v3_cpols.c +354 -338
  631. data/third_party/boringssl/crypto/x509v3/v3_crld.c +441 -496
  632. data/third_party/boringssl/crypto/x509v3/v3_enum.c +35 -33
  633. data/third_party/boringssl/crypto/x509v3/v3_extku.c +66 -63
  634. data/third_party/boringssl/crypto/x509v3/v3_genn.c +157 -159
  635. data/third_party/boringssl/crypto/x509v3/v3_ia5.c +45 -43
  636. data/third_party/boringssl/crypto/x509v3/v3_info.c +124 -112
  637. data/third_party/boringssl/crypto/x509v3/v3_int.c +30 -26
  638. data/third_party/boringssl/crypto/x509v3/v3_lib.c +231 -204
  639. data/third_party/boringssl/crypto/x509v3/v3_ncons.c +353 -381
  640. data/third_party/boringssl/crypto/x509v3/v3_pci.c +252 -270
  641. data/third_party/boringssl/crypto/x509v3/v3_pcia.c +9 -8
  642. data/third_party/boringssl/crypto/x509v3/v3_pcons.c +58 -61
  643. data/third_party/boringssl/crypto/x509v3/v3_pku.c +35 -34
  644. data/third_party/boringssl/crypto/x509v3/v3_pmaps.c +72 -74
  645. data/third_party/boringssl/crypto/x509v3/v3_prn.c +146 -121
  646. data/third_party/boringssl/crypto/x509v3/v3_purp.c +651 -582
  647. data/third_party/boringssl/crypto/x509v3/v3_skey.c +76 -72
  648. data/third_party/boringssl/crypto/x509v3/v3_sxnet.c +139 -131
  649. data/third_party/boringssl/crypto/x509v3/v3_utl.c +1072 -1068
  650. data/third_party/boringssl/include/openssl/asn1.h +40 -38
  651. data/third_party/boringssl/include/openssl/base.h +10 -1
  652. data/third_party/boringssl/include/openssl/bio.h +10 -11
  653. data/third_party/boringssl/include/openssl/bn.h +12 -9
  654. data/third_party/boringssl/include/openssl/buf.h +1 -1
  655. data/third_party/boringssl/include/openssl/bytestring.h +29 -0
  656. data/third_party/boringssl/include/openssl/conf.h +25 -0
  657. data/third_party/boringssl/include/openssl/crypto.h +6 -1
  658. data/third_party/boringssl/include/openssl/curve25519.h +6 -3
  659. data/third_party/boringssl/include/openssl/dh.h +7 -3
  660. data/third_party/boringssl/include/openssl/dsa.h +108 -51
  661. data/third_party/boringssl/include/openssl/ec.h +46 -21
  662. data/third_party/boringssl/include/openssl/ec_key.h +78 -42
  663. data/third_party/boringssl/include/openssl/ecdsa.h +4 -4
  664. data/third_party/boringssl/include/openssl/err.h +3 -2
  665. data/third_party/boringssl/include/openssl/evp.h +120 -37
  666. data/third_party/boringssl/include/openssl/mem.h +4 -13
  667. data/third_party/boringssl/include/openssl/obj_mac.h +4 -0
  668. data/third_party/boringssl/include/openssl/pem.h +0 -9
  669. data/third_party/boringssl/include/openssl/pkcs8.h +6 -2
  670. data/third_party/boringssl/include/openssl/rand.h +3 -0
  671. data/third_party/boringssl/include/openssl/rsa.h +42 -42
  672. data/third_party/boringssl/include/openssl/ssl.h +115 -41
  673. data/third_party/boringssl/include/openssl/stack.h +0 -3
  674. data/third_party/boringssl/include/openssl/stack_macros.h +0 -256
  675. data/third_party/boringssl/include/openssl/tls1.h +1 -1
  676. data/third_party/boringssl/include/openssl/x509.h +0 -2
  677. data/third_party/boringssl/include/openssl/x509_vfy.h +5 -0
  678. data/third_party/boringssl/ssl/d1_both.c +102 -101
  679. data/third_party/boringssl/ssl/d1_clnt.c +145 -150
  680. data/third_party/boringssl/ssl/d1_lib.c +63 -62
  681. data/third_party/boringssl/ssl/d1_pkt.c +73 -71
  682. data/third_party/boringssl/ssl/d1_srvr.c +116 -125
  683. data/third_party/boringssl/ssl/dtls_record.c +3 -3
  684. data/third_party/boringssl/ssl/internal.h +210 -208
  685. data/third_party/boringssl/ssl/pqueue/pqueue.c +2 -2
  686. data/third_party/boringssl/ssl/s3_both.c +116 -130
  687. data/third_party/boringssl/ssl/s3_clnt.c +589 -740
  688. data/third_party/boringssl/ssl/s3_enc.c +52 -151
  689. data/third_party/boringssl/ssl/s3_lib.c +70 -76
  690. data/third_party/boringssl/ssl/s3_pkt.c +105 -144
  691. data/third_party/boringssl/ssl/s3_srvr.c +542 -806
  692. data/third_party/boringssl/ssl/ssl_aead_ctx.c +1 -1
  693. data/third_party/boringssl/ssl/ssl_cert.c +2 -2
  694. data/third_party/boringssl/ssl/ssl_cipher.c +7 -3
  695. data/third_party/boringssl/ssl/ssl_ecdh.c +374 -0
  696. data/third_party/boringssl/ssl/ssl_lib.c +260 -221
  697. data/third_party/boringssl/ssl/ssl_session.c +17 -17
  698. data/third_party/boringssl/ssl/t1_enc.c +128 -273
  699. data/third_party/boringssl/ssl/t1_lib.c +134 -258
  700. data/third_party/boringssl/ssl/test/test_config.h +2 -0
  701. data/third_party/boringssl/ssl/tls_record.c +52 -15
  702. metadata +385 -359
  703. data/src/core/channel/client_uchannel.c +0 -243
  704. data/src/core/channel/client_uchannel.h +0 -60
  705. data/src/core/channel/connected_channel.h +0 -51
  706. data/src/core/client_config/lb_policies/pick_first.h +0 -43
  707. data/src/core/client_config/resolvers/dns_resolver.h +0 -42
  708. data/src/core/client_config/subchannel_factory.h +0 -66
  709. data/src/core/httpcli/parser.c +0 -211
  710. data/src/core/iomgr/fd_posix.c +0 -451
  711. data/src/core/iomgr/fd_posix.h +0 -192
  712. data/src/core/iomgr/pollset_multipoller_with_epoll.c +0 -324
  713. data/src/core/iomgr/pollset_multipoller_with_poll_posix.c +0 -234
  714. data/src/core/iomgr/pollset_posix.c +0 -633
  715. data/src/core/iomgr/pollset_posix.h +0 -153
  716. data/src/core/iomgr/pollset_set_posix.c +0 -202
  717. data/src/core/iomgr/pollset_set_posix.h +0 -45
  718. data/src/core/surface/init.c +0 -174
  719. data/src/core/surface/init_secure.c +0 -42
  720. data/src/core/surface/server_create.c +0 -48
  721. data/src/core/transport/chttp2/huffsyms.c +0 -297
  722. data/src/ruby/bin/grpc_ruby_interop_client +0 -33
  723. data/src/ruby/bin/grpc_ruby_interop_server +0 -33
  724. data/third_party/boringssl/crypto/dsa/internal.h +0 -78
@@ -56,7 +56,7 @@ SSL_AEAD_CTX *SSL_AEAD_CTX_new(enum evp_aead_direction_t direction,
56
56
  enc_key_len += fixed_iv_len;
57
57
  }
58
58
 
59
- SSL_AEAD_CTX *aead_ctx = (SSL_AEAD_CTX *)OPENSSL_malloc(sizeof(SSL_AEAD_CTX));
59
+ SSL_AEAD_CTX *aead_ctx = OPENSSL_malloc(sizeof(SSL_AEAD_CTX));
60
60
  if (aead_ctx == NULL) {
61
61
  OPENSSL_PUT_ERROR(SSL, ERR_R_MALLOC_FAILURE);
62
62
  return NULL;
@@ -139,7 +139,7 @@ int SSL_get_ex_data_X509_STORE_CTX_idx(void) {
139
139
  }
140
140
 
141
141
  CERT *ssl_cert_new(void) {
142
- CERT *ret = (CERT *)OPENSSL_malloc(sizeof(CERT));
142
+ CERT *ret = OPENSSL_malloc(sizeof(CERT));
143
143
  if (ret == NULL) {
144
144
  OPENSSL_PUT_ERROR(SSL, ERR_R_MALLOC_FAILURE);
145
145
  return NULL;
@@ -150,7 +150,7 @@ CERT *ssl_cert_new(void) {
150
150
  }
151
151
 
152
152
  CERT *ssl_cert_dup(CERT *cert) {
153
- CERT *ret = (CERT *)OPENSSL_malloc(sizeof(CERT));
153
+ CERT *ret = OPENSSL_malloc(sizeof(CERT));
154
154
  if (ret == NULL) {
155
155
  OPENSSL_PUT_ERROR(SSL, ERR_R_MALLOC_FAILURE);
156
156
  return NULL;
@@ -1392,7 +1392,7 @@ ssl_create_cipher_list(const SSL_PROTOCOL_METHOD *ssl_method,
1392
1392
  /* Now we have to collect the available ciphers from the compiled in ciphers.
1393
1393
  * We cannot get more than the number compiled in, so it is used for
1394
1394
  * allocation. */
1395
- co_list = (CIPHER_ORDER *)OPENSSL_malloc(sizeof(CIPHER_ORDER) * kCiphersLen);
1395
+ co_list = OPENSSL_malloc(sizeof(CIPHER_ORDER) * kCiphersLen);
1396
1396
  if (co_list == NULL) {
1397
1397
  OPENSSL_PUT_ERROR(SSL, ERR_R_MALLOC_FAILURE);
1398
1398
  return NULL;
@@ -1616,6 +1616,10 @@ int SSL_CIPHER_is_ECDSA(const SSL_CIPHER *cipher) {
1616
1616
  return (cipher->algorithm_auth & SSL_aECDSA) != 0;
1617
1617
  }
1618
1618
 
1619
+ int SSL_CIPHER_is_ECDHE(const SSL_CIPHER *cipher) {
1620
+ return (cipher->algorithm_mkey & SSL_kECDHE) != 0;
1621
+ }
1622
+
1619
1623
  uint16_t SSL_CIPHER_get_min_version(const SSL_CIPHER *cipher) {
1620
1624
  if (cipher->algorithm_prf != SSL_HANDSHAKE_MAC_DEFAULT) {
1621
1625
  /* Cipher suites before TLS 1.2 use the default PRF, while all those added
@@ -1800,7 +1804,6 @@ const char *SSL_CIPHER_description(const SSL_CIPHER *cipher, char *buf,
1800
1804
  int len) {
1801
1805
  const char *kx, *au, *enc, *mac;
1802
1806
  uint32_t alg_mkey, alg_auth, alg_enc, alg_mac;
1803
- static const char *format = "%-23s Kx=%-8s Au=%-4s Enc=%-9s Mac=%-4s\n";
1804
1807
 
1805
1808
  alg_mkey = cipher->algorithm_mkey;
1806
1809
  alg_auth = cipher->algorithm_auth;
@@ -1924,7 +1927,8 @@ const char *SSL_CIPHER_description(const SSL_CIPHER *cipher, char *buf,
1924
1927
  return "Buffer too small";
1925
1928
  }
1926
1929
 
1927
- BIO_snprintf(buf, len, format, cipher->name, kx, au, enc, mac);
1930
+ BIO_snprintf(buf, len, "%-23s Kx=%-8s Au=%-4s Enc=%-9s Mac=%-4s\n",
1931
+ cipher->name, kx, au, enc, mac);
1928
1932
  return buf;
1929
1933
  }
1930
1934
 
@@ -0,0 +1,374 @@
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/obj.h>
27
+
28
+ #include "internal.h"
29
+
30
+
31
+ /* |EC_POINT| implementation. */
32
+
33
+ static void ssl_ec_point_cleanup(SSL_ECDH_CTX *ctx) {
34
+ BIGNUM *private_key = (BIGNUM *)ctx->data;
35
+ BN_clear_free(private_key);
36
+ }
37
+
38
+ static int ssl_ec_point_generate_keypair(SSL_ECDH_CTX *ctx, CBB *out) {
39
+ assert(ctx->data == NULL);
40
+ BIGNUM *private_key = BN_new();
41
+ if (private_key == NULL) {
42
+ return 0;
43
+ }
44
+ ctx->data = private_key;
45
+
46
+ /* Set up a shared |BN_CTX| for all operations. */
47
+ BN_CTX *bn_ctx = BN_CTX_new();
48
+ if (bn_ctx == NULL) {
49
+ return 0;
50
+ }
51
+ BN_CTX_start(bn_ctx);
52
+
53
+ int ret = 0;
54
+ EC_POINT *public_key = NULL;
55
+ EC_GROUP *group = EC_GROUP_new_by_curve_name(ctx->method->nid);
56
+ if (group == NULL) {
57
+ goto err;
58
+ }
59
+
60
+ /* Generate a private key. */
61
+ const BIGNUM *order = EC_GROUP_get0_order(group);
62
+ do {
63
+ if (!BN_rand_range(private_key, order)) {
64
+ goto err;
65
+ }
66
+ } while (BN_is_zero(private_key));
67
+
68
+ /* Compute the corresponding public key and serialize it. */
69
+ public_key = EC_POINT_new(group);
70
+ if (public_key == NULL ||
71
+ !EC_POINT_mul(group, public_key, private_key, NULL, NULL, bn_ctx) ||
72
+ !EC_POINT_point2cbb(out, group, public_key, POINT_CONVERSION_UNCOMPRESSED,
73
+ bn_ctx)) {
74
+ goto err;
75
+ }
76
+
77
+ ret = 1;
78
+
79
+ err:
80
+ EC_GROUP_free(group);
81
+ EC_POINT_free(public_key);
82
+ BN_CTX_end(bn_ctx);
83
+ BN_CTX_free(bn_ctx);
84
+ return ret;
85
+ }
86
+
87
+ int ssl_ec_point_compute_secret(SSL_ECDH_CTX *ctx, uint8_t **out_secret,
88
+ size_t *out_secret_len, uint8_t *out_alert,
89
+ const uint8_t *peer_key, size_t peer_key_len) {
90
+ BIGNUM *private_key = (BIGNUM *)ctx->data;
91
+ assert(private_key != NULL);
92
+ *out_alert = SSL_AD_INTERNAL_ERROR;
93
+
94
+ /* Set up a shared |BN_CTX| for all operations. */
95
+ BN_CTX *bn_ctx = BN_CTX_new();
96
+ if (bn_ctx == NULL) {
97
+ return 0;
98
+ }
99
+ BN_CTX_start(bn_ctx);
100
+
101
+ int ret = 0;
102
+ EC_GROUP *group = EC_GROUP_new_by_curve_name(ctx->method->nid);
103
+ EC_POINT *peer_point = NULL, *result = NULL;
104
+ uint8_t *secret = NULL;
105
+ if (group == NULL) {
106
+ goto err;
107
+ }
108
+
109
+ /* Compute the x-coordinate of |peer_key| * |private_key|. */
110
+ peer_point = EC_POINT_new(group);
111
+ result = EC_POINT_new(group);
112
+ if (peer_point == NULL || result == NULL) {
113
+ goto err;
114
+ }
115
+ BIGNUM *x = BN_CTX_get(bn_ctx);
116
+ if (x == NULL) {
117
+ goto err;
118
+ }
119
+ if (!EC_POINT_oct2point(group, peer_point, peer_key, peer_key_len, bn_ctx)) {
120
+ *out_alert = SSL_AD_DECODE_ERROR;
121
+ goto err;
122
+ }
123
+ if (!EC_POINT_mul(group, result, NULL, peer_point, private_key, bn_ctx) ||
124
+ !EC_POINT_get_affine_coordinates_GFp(group, result, x, NULL, bn_ctx)) {
125
+ goto err;
126
+ }
127
+
128
+ /* Encode the x-coordinate left-padded with zeros. */
129
+ size_t secret_len = (EC_GROUP_get_degree(group) + 7) / 8;
130
+ secret = OPENSSL_malloc(secret_len);
131
+ if (secret == NULL || !BN_bn2bin_padded(secret, secret_len, x)) {
132
+ goto err;
133
+ }
134
+
135
+ *out_secret = secret;
136
+ *out_secret_len = secret_len;
137
+ secret = NULL;
138
+ ret = 1;
139
+
140
+ err:
141
+ EC_GROUP_free(group);
142
+ EC_POINT_free(peer_point);
143
+ EC_POINT_free(result);
144
+ BN_CTX_end(bn_ctx);
145
+ BN_CTX_free(bn_ctx);
146
+ OPENSSL_free(secret);
147
+ return ret;
148
+ }
149
+
150
+
151
+ /* X25119 implementation. */
152
+
153
+ static void ssl_x25519_cleanup(SSL_ECDH_CTX *ctx) {
154
+ if (ctx->data == NULL) {
155
+ return;
156
+ }
157
+ OPENSSL_cleanse(ctx->data, 32);
158
+ OPENSSL_free(ctx->data);
159
+ }
160
+
161
+ static int ssl_x25519_generate_keypair(SSL_ECDH_CTX *ctx, CBB *out) {
162
+ assert(ctx->data == NULL);
163
+
164
+ ctx->data = OPENSSL_malloc(32);
165
+ if (ctx->data == NULL) {
166
+ OPENSSL_PUT_ERROR(SSL, ERR_R_MALLOC_FAILURE);
167
+ return 0;
168
+ }
169
+ uint8_t public_key[32];
170
+ X25519_keypair(public_key, (uint8_t *)ctx->data);
171
+ return CBB_add_bytes(out, public_key, sizeof(public_key));
172
+ }
173
+
174
+ static int ssl_x25519_compute_secret(SSL_ECDH_CTX *ctx, uint8_t **out_secret,
175
+ size_t *out_secret_len, uint8_t *out_alert,
176
+ const uint8_t *peer_key,
177
+ size_t peer_key_len) {
178
+ assert(ctx->data != NULL);
179
+ *out_alert = SSL_AD_INTERNAL_ERROR;
180
+
181
+ uint8_t *secret = OPENSSL_malloc(32);
182
+ if (secret == NULL) {
183
+ return 0;
184
+ }
185
+
186
+ if (peer_key_len != 32 ||
187
+ !X25519(secret, (uint8_t *)ctx->data, peer_key)) {
188
+ OPENSSL_free(secret);
189
+ *out_alert = SSL_AD_DECODE_ERROR;
190
+ OPENSSL_PUT_ERROR(SSL, SSL_R_BAD_ECPOINT);
191
+ return 0;
192
+ }
193
+
194
+ *out_secret = secret;
195
+ *out_secret_len = 32;
196
+ return 1;
197
+ }
198
+
199
+
200
+ /* Legacy DHE-based implementation. */
201
+
202
+ static void ssl_dhe_cleanup(SSL_ECDH_CTX *ctx) {
203
+ DH_free((DH *)ctx->data);
204
+ }
205
+
206
+ static int ssl_dhe_generate_keypair(SSL_ECDH_CTX *ctx, CBB *out) {
207
+ DH *dh = (DH *)ctx->data;
208
+ /* The group must have been initialized already, but not the key. */
209
+ assert(dh != NULL);
210
+ assert(dh->priv_key == NULL);
211
+
212
+ /* Due to a bug in yaSSL, the public key must be zero padded to the size of
213
+ * the prime. */
214
+ return DH_generate_key(dh) &&
215
+ BN_bn2cbb_padded(out, BN_num_bytes(dh->p), dh->pub_key);
216
+ }
217
+
218
+ static int ssl_dhe_compute_secret(SSL_ECDH_CTX *ctx, uint8_t **out_secret,
219
+ size_t *out_secret_len, uint8_t *out_alert,
220
+ const uint8_t *peer_key,
221
+ size_t peer_key_len) {
222
+ DH *dh = (DH *)ctx->data;
223
+ assert(dh != NULL);
224
+ assert(dh->priv_key != NULL);
225
+ *out_alert = SSL_AD_INTERNAL_ERROR;
226
+
227
+ int secret_len = 0;
228
+ uint8_t *secret = NULL;
229
+ BIGNUM *peer_point = BN_bin2bn(peer_key, peer_key_len, NULL);
230
+ if (peer_point == NULL) {
231
+ goto err;
232
+ }
233
+
234
+ secret = OPENSSL_malloc(DH_size(dh));
235
+ if (secret == NULL) {
236
+ goto err;
237
+ }
238
+ secret_len = DH_compute_key(secret, peer_point, dh);
239
+ if (secret_len <= 0) {
240
+ goto err;
241
+ }
242
+
243
+ *out_secret = secret;
244
+ *out_secret_len = (size_t)secret_len;
245
+ BN_free(peer_point);
246
+ return 1;
247
+
248
+ err:
249
+ if (secret_len > 0) {
250
+ OPENSSL_cleanse(secret, (size_t)secret_len);
251
+ }
252
+ OPENSSL_free(secret);
253
+ BN_free(peer_point);
254
+ return 0;
255
+ }
256
+
257
+ static const SSL_ECDH_METHOD kDHEMethod = {
258
+ NID_undef, 0, "",
259
+ ssl_dhe_cleanup,
260
+ ssl_dhe_generate_keypair,
261
+ ssl_dhe_compute_secret,
262
+ };
263
+
264
+
265
+ static const SSL_ECDH_METHOD kMethods[] = {
266
+ {
267
+ NID_X9_62_prime256v1,
268
+ SSL_CURVE_SECP256R1,
269
+ "P-256",
270
+ ssl_ec_point_cleanup,
271
+ ssl_ec_point_generate_keypair,
272
+ ssl_ec_point_compute_secret,
273
+ },
274
+ {
275
+ NID_secp384r1,
276
+ SSL_CURVE_SECP384R1,
277
+ "P-384",
278
+ ssl_ec_point_cleanup,
279
+ ssl_ec_point_generate_keypair,
280
+ ssl_ec_point_compute_secret,
281
+ },
282
+ {
283
+ NID_secp521r1,
284
+ SSL_CURVE_SECP521R1,
285
+ "P-521",
286
+ ssl_ec_point_cleanup,
287
+ ssl_ec_point_generate_keypair,
288
+ ssl_ec_point_compute_secret,
289
+ },
290
+ {
291
+ NID_x25519,
292
+ SSL_CURVE_X25519,
293
+ "X25519",
294
+ ssl_x25519_cleanup,
295
+ ssl_x25519_generate_keypair,
296
+ ssl_x25519_compute_secret,
297
+ },
298
+ };
299
+
300
+ static const SSL_ECDH_METHOD *method_from_curve_id(uint16_t curve_id) {
301
+ size_t i;
302
+ for (i = 0; i < sizeof(kMethods) / sizeof(kMethods[0]); i++) {
303
+ if (kMethods[i].curve_id == curve_id) {
304
+ return &kMethods[i];
305
+ }
306
+ }
307
+ return NULL;
308
+ }
309
+
310
+ static const SSL_ECDH_METHOD *method_from_nid(int nid) {
311
+ size_t i;
312
+ for (i = 0; i < sizeof(kMethods) / sizeof(kMethods[0]); i++) {
313
+ if (kMethods[i].nid == nid) {
314
+ return &kMethods[i];
315
+ }
316
+ }
317
+ return NULL;
318
+ }
319
+
320
+ const char* SSL_get_curve_name(uint16_t curve_id) {
321
+ const SSL_ECDH_METHOD *method = method_from_curve_id(curve_id);
322
+ if (method == NULL) {
323
+ return NULL;
324
+ }
325
+ return method->name;
326
+ }
327
+
328
+ int ssl_nid_to_curve_id(uint16_t *out_curve_id, int nid) {
329
+ const SSL_ECDH_METHOD *method = method_from_nid(nid);
330
+ if (method == NULL) {
331
+ return 0;
332
+ }
333
+ *out_curve_id = method->curve_id;
334
+ return 1;
335
+ }
336
+
337
+ int SSL_ECDH_CTX_init(SSL_ECDH_CTX *ctx, uint16_t curve_id) {
338
+ SSL_ECDH_CTX_cleanup(ctx);
339
+
340
+ const SSL_ECDH_METHOD *method = method_from_curve_id(curve_id);
341
+ if (method == NULL) {
342
+ OPENSSL_PUT_ERROR(SSL, SSL_R_UNSUPPORTED_ELLIPTIC_CURVE);
343
+ return 0;
344
+ }
345
+ ctx->method = method;
346
+ return 1;
347
+ }
348
+
349
+ void SSL_ECDH_CTX_init_for_dhe(SSL_ECDH_CTX *ctx, DH *params) {
350
+ SSL_ECDH_CTX_cleanup(ctx);
351
+
352
+ ctx->method = &kDHEMethod;
353
+ ctx->data = params;
354
+ }
355
+
356
+ void SSL_ECDH_CTX_cleanup(SSL_ECDH_CTX *ctx) {
357
+ if (ctx->method == NULL) {
358
+ return;
359
+ }
360
+ ctx->method->cleanup(ctx);
361
+ ctx->method = NULL;
362
+ ctx->data = NULL;
363
+ }
364
+
365
+ int SSL_ECDH_CTX_generate_keypair(SSL_ECDH_CTX *ctx, CBB *out_public_key) {
366
+ return ctx->method->generate_keypair(ctx, out_public_key);
367
+ }
368
+
369
+ int SSL_ECDH_CTX_compute_secret(SSL_ECDH_CTX *ctx, uint8_t **out_secret,
370
+ size_t *out_secret_len, uint8_t *out_alert,
371
+ const uint8_t *peer_key, size_t peer_key_len) {
372
+ return ctx->method->compute_secret(ctx, out_secret, out_secret_len, out_alert,
373
+ peer_key, peer_key_len);
374
+ }
@@ -181,12 +181,21 @@ int SSL_library_init(void) {
181
181
  return 1;
182
182
  }
183
183
 
184
- static uint32_t ssl_session_hash(const SSL_SESSION *a) {
184
+ static uint32_t ssl_session_hash(const SSL_SESSION *sess) {
185
+ const uint8_t *session_id = sess->session_id;
186
+
187
+ uint8_t tmp_storage[sizeof(uint32_t)];
188
+ if (sess->session_id_length < sizeof(tmp_storage)) {
189
+ memset(tmp_storage, 0, sizeof(tmp_storage));
190
+ memcpy(tmp_storage, sess->session_id, sess->session_id_length);
191
+ session_id = tmp_storage;
192
+ }
193
+
185
194
  uint32_t hash =
186
- ((uint32_t)a->session_id[0]) |
187
- ((uint32_t)a->session_id[1] << 8) |
188
- ((uint32_t)a->session_id[2] << 16) |
189
- ((uint32_t)a->session_id[3] << 24);
195
+ ((uint32_t)session_id[0]) |
196
+ ((uint32_t)session_id[1] << 8) |
197
+ ((uint32_t)session_id[2] << 16) |
198
+ ((uint32_t)session_id[3] << 24);
190
199
 
191
200
  return hash;
192
201
  }
@@ -221,7 +230,7 @@ SSL_CTX *SSL_CTX_new(const SSL_METHOD *method) {
221
230
  goto err;
222
231
  }
223
232
 
224
- ret = (SSL_CTX *)OPENSSL_malloc(sizeof(SSL_CTX));
233
+ ret = OPENSSL_malloc(sizeof(SSL_CTX));
225
234
  if (ret == NULL) {
226
235
  goto err;
227
236
  }
@@ -344,8 +353,6 @@ void SSL_CTX_free(SSL_CTX *ctx) {
344
353
  }
345
354
 
346
355
  SSL *SSL_new(SSL_CTX *ctx) {
347
- SSL *s;
348
-
349
356
  if (ctx == NULL) {
350
357
  OPENSSL_PUT_ERROR(SSL, SSL_R_NULL_SSL_CTX);
351
358
  return NULL;
@@ -355,100 +362,99 @@ SSL *SSL_new(SSL_CTX *ctx) {
355
362
  return NULL;
356
363
  }
357
364
 
358
- s = (SSL *)OPENSSL_malloc(sizeof(SSL));
359
- if (s == NULL) {
365
+ SSL *ssl = OPENSSL_malloc(sizeof(SSL));
366
+ if (ssl == NULL) {
360
367
  goto err;
361
368
  }
362
- memset(s, 0, sizeof(SSL));
369
+ memset(ssl, 0, sizeof(SSL));
363
370
 
364
- s->min_version = ctx->min_version;
365
- s->max_version = ctx->max_version;
371
+ ssl->min_version = ctx->min_version;
372
+ ssl->max_version = ctx->max_version;
366
373
 
367
- s->options = ctx->options;
368
- s->mode = ctx->mode;
369
- s->max_cert_list = ctx->max_cert_list;
374
+ ssl->options = ctx->options;
375
+ ssl->mode = ctx->mode;
376
+ ssl->max_cert_list = ctx->max_cert_list;
370
377
 
371
- s->cert = ssl_cert_dup(ctx->cert);
372
- if (s->cert == NULL) {
378
+ ssl->cert = ssl_cert_dup(ctx->cert);
379
+ if (ssl->cert == NULL) {
373
380
  goto err;
374
381
  }
375
382
 
376
- s->msg_callback = ctx->msg_callback;
377
- s->msg_callback_arg = ctx->msg_callback_arg;
378
- s->verify_mode = ctx->verify_mode;
379
- s->sid_ctx_length = ctx->sid_ctx_length;
380
- assert(s->sid_ctx_length <= sizeof s->sid_ctx);
381
- memcpy(&s->sid_ctx, &ctx->sid_ctx, sizeof(s->sid_ctx));
382
- s->verify_callback = ctx->default_verify_callback;
383
+ ssl->msg_callback = ctx->msg_callback;
384
+ ssl->msg_callback_arg = ctx->msg_callback_arg;
385
+ ssl->verify_mode = ctx->verify_mode;
386
+ ssl->sid_ctx_length = ctx->sid_ctx_length;
387
+ assert(ssl->sid_ctx_length <= sizeof ssl->sid_ctx);
388
+ memcpy(&ssl->sid_ctx, &ctx->sid_ctx, sizeof(ssl->sid_ctx));
389
+ ssl->verify_callback = ctx->default_verify_callback;
383
390
 
384
- s->param = X509_VERIFY_PARAM_new();
385
- if (!s->param) {
391
+ ssl->param = X509_VERIFY_PARAM_new();
392
+ if (!ssl->param) {
386
393
  goto err;
387
394
  }
388
- X509_VERIFY_PARAM_inherit(s->param, ctx->param);
389
- s->quiet_shutdown = ctx->quiet_shutdown;
390
- s->max_send_fragment = ctx->max_send_fragment;
395
+ X509_VERIFY_PARAM_inherit(ssl->param, ctx->param);
396
+ ssl->quiet_shutdown = ctx->quiet_shutdown;
397
+ ssl->max_send_fragment = ctx->max_send_fragment;
391
398
 
392
399
  CRYPTO_refcount_inc(&ctx->references);
393
- s->ctx = ctx;
400
+ ssl->ctx = ctx;
394
401
  CRYPTO_refcount_inc(&ctx->references);
395
- s->initial_ctx = ctx;
402
+ ssl->initial_ctx = ctx;
396
403
 
397
404
  if (ctx->tlsext_ellipticcurvelist) {
398
- s->tlsext_ellipticcurvelist =
405
+ ssl->tlsext_ellipticcurvelist =
399
406
  BUF_memdup(ctx->tlsext_ellipticcurvelist,
400
407
  ctx->tlsext_ellipticcurvelist_length * 2);
401
- if (!s->tlsext_ellipticcurvelist) {
408
+ if (!ssl->tlsext_ellipticcurvelist) {
402
409
  goto err;
403
410
  }
404
- s->tlsext_ellipticcurvelist_length = ctx->tlsext_ellipticcurvelist_length;
411
+ ssl->tlsext_ellipticcurvelist_length = ctx->tlsext_ellipticcurvelist_length;
405
412
  }
406
413
 
407
- if (s->ctx->alpn_client_proto_list) {
408
- s->alpn_client_proto_list = BUF_memdup(s->ctx->alpn_client_proto_list,
409
- s->ctx->alpn_client_proto_list_len);
410
- if (s->alpn_client_proto_list == NULL) {
414
+ if (ssl->ctx->alpn_client_proto_list) {
415
+ ssl->alpn_client_proto_list = BUF_memdup(
416
+ ssl->ctx->alpn_client_proto_list, ssl->ctx->alpn_client_proto_list_len);
417
+ if (ssl->alpn_client_proto_list == NULL) {
411
418
  goto err;
412
419
  }
413
- s->alpn_client_proto_list_len = s->ctx->alpn_client_proto_list_len;
420
+ ssl->alpn_client_proto_list_len = ssl->ctx->alpn_client_proto_list_len;
414
421
  }
415
422
 
416
- s->verify_result = X509_V_OK;
417
- s->method = ctx->method;
423
+ ssl->verify_result = X509_V_OK;
424
+ ssl->method = ctx->method;
418
425
 
419
- if (!s->method->ssl_new(s)) {
426
+ if (!ssl->method->ssl_new(ssl)) {
420
427
  goto err;
421
428
  }
422
- s->enc_method = ssl3_get_enc_method(s->version);
423
- assert(s->enc_method != NULL);
424
429
 
425
- s->rwstate = SSL_NOTHING;
430
+ ssl->rwstate = SSL_NOTHING;
426
431
 
427
- CRYPTO_new_ex_data(&s->ex_data);
432
+ CRYPTO_new_ex_data(&ssl->ex_data);
428
433
 
429
- s->psk_identity_hint = NULL;
434
+ ssl->psk_identity_hint = NULL;
430
435
  if (ctx->psk_identity_hint) {
431
- s->psk_identity_hint = BUF_strdup(ctx->psk_identity_hint);
432
- if (s->psk_identity_hint == NULL) {
436
+ ssl->psk_identity_hint = BUF_strdup(ctx->psk_identity_hint);
437
+ if (ssl->psk_identity_hint == NULL) {
433
438
  goto err;
434
439
  }
435
440
  }
436
- s->psk_client_callback = ctx->psk_client_callback;
437
- s->psk_server_callback = ctx->psk_server_callback;
441
+ ssl->psk_client_callback = ctx->psk_client_callback;
442
+ ssl->psk_server_callback = ctx->psk_server_callback;
438
443
 
439
- s->tlsext_channel_id_enabled = ctx->tlsext_channel_id_enabled;
444
+ ssl->tlsext_channel_id_enabled = ctx->tlsext_channel_id_enabled;
440
445
  if (ctx->tlsext_channel_id_private) {
441
- s->tlsext_channel_id_private =
446
+ ssl->tlsext_channel_id_private =
442
447
  EVP_PKEY_up_ref(ctx->tlsext_channel_id_private);
443
448
  }
444
449
 
445
- s->signed_cert_timestamps_enabled = s->ctx->signed_cert_timestamps_enabled;
446
- s->ocsp_stapling_enabled = s->ctx->ocsp_stapling_enabled;
450
+ ssl->signed_cert_timestamps_enabled =
451
+ ssl->ctx->signed_cert_timestamps_enabled;
452
+ ssl->ocsp_stapling_enabled = ssl->ctx->ocsp_stapling_enabled;
447
453
 
448
- return s;
454
+ return ssl;
449
455
 
450
456
  err:
451
- SSL_free(s);
457
+ SSL_free(ssl);
452
458
  OPENSSL_PUT_ERROR(SSL, ERR_R_MALLOC_FAILURE);
453
459
 
454
460
  return NULL;
@@ -487,8 +493,6 @@ void SSL_free(SSL *ssl) {
487
493
  ssl_clear_bad_session(ssl);
488
494
  SSL_SESSION_free(ssl->session);
489
495
 
490
- ssl_clear_cipher_ctx(ssl);
491
-
492
496
  ssl_cert_free(ssl->cert);
493
497
 
494
498
  OPENSSL_free(ssl->tlsext_hostname);
@@ -498,7 +502,6 @@ void SSL_free(SSL *ssl) {
498
502
  EVP_PKEY_free(ssl->tlsext_channel_id_private);
499
503
  OPENSSL_free(ssl->psk_identity_hint);
500
504
  sk_X509_NAME_pop_free(ssl->client_CA, X509_NAME_free);
501
- OPENSSL_free(ssl->next_proto_negotiated);
502
505
  sk_SRTP_PROTECTION_PROFILE_free(ssl->srtp_profiles);
503
506
 
504
507
  if (ssl->method != NULL) {
@@ -514,8 +517,6 @@ void SSL_set_connect_state(SSL *ssl) {
514
517
  ssl->shutdown = 0;
515
518
  ssl->state = SSL_ST_CONNECT;
516
519
  ssl->handshake_func = ssl->method->ssl_connect;
517
- /* clear the current cipher */
518
- ssl_clear_cipher_ctx(ssl);
519
520
  }
520
521
 
521
522
  void SSL_set_accept_state(SSL *ssl) {
@@ -523,8 +524,6 @@ void SSL_set_accept_state(SSL *ssl) {
523
524
  ssl->shutdown = 0;
524
525
  ssl->state = SSL_ST_ACCEPT;
525
526
  ssl->handshake_func = ssl->method->ssl_accept;
526
- /* clear the current cipher */
527
- ssl_clear_cipher_ctx(ssl);
528
527
  }
529
528
 
530
529
  void SSL_set_bio(SSL *ssl, BIO *rbio, BIO *wbio) {
@@ -740,8 +739,8 @@ int SSL_get_error(const SSL *ssl, int ret_code) {
740
739
  /* This one doesn't make too much sense ... We never try to write to the
741
740
  * rbio, and an application program where rbio and wbio are separate
742
741
  * couldn't even know what it should wait for. However if we ever set
743
- * s->rwstate incorrectly (so that we have SSL_want_read(s) instead of
744
- * SSL_want_write(s)) and rbio and wbio *are* the same, this test works
742
+ * ssl->rwstate incorrectly (so that we have SSL_want_read(ssl) instead of
743
+ * SSL_want_write(ssl)) and rbio and wbio *are* the same, this test works
745
744
  * around that bug; so it might be safer to keep it. */
746
745
  return SSL_ERROR_WANT_WRITE;
747
746
  }
@@ -1109,11 +1108,11 @@ void SSL_set_verify_depth(SSL *ssl, int depth) {
1109
1108
 
1110
1109
  int SSL_CTX_get_read_ahead(const SSL_CTX *ctx) { return 0; }
1111
1110
 
1112
- int SSL_get_read_ahead(const SSL *s) { return 0; }
1111
+ int SSL_get_read_ahead(const SSL *ssl) { return 0; }
1113
1112
 
1114
1113
  void SSL_CTX_set_read_ahead(SSL_CTX *ctx, int yes) { }
1115
1114
 
1116
- void SSL_set_read_ahead(SSL *s, int yes) { }
1115
+ void SSL_set_read_ahead(SSL *ssl, int yes) { }
1117
1116
 
1118
1117
  int SSL_pending(const SSL *ssl) {
1119
1118
  if (ssl->s3->rrec.type != SSL3_RT_APPLICATION_DATA) {
@@ -1188,7 +1187,7 @@ void SSL_set_max_cert_list(SSL *ssl, size_t max_cert_list) {
1188
1187
  ssl->max_cert_list = (uint32_t)max_cert_list;
1189
1188
  }
1190
1189
 
1191
- void SSL_CTX_set_max_send_fragment(SSL_CTX *ctx, size_t max_send_fragment) {
1190
+ int SSL_CTX_set_max_send_fragment(SSL_CTX *ctx, size_t max_send_fragment) {
1192
1191
  if (max_send_fragment < 512) {
1193
1192
  max_send_fragment = 512;
1194
1193
  }
@@ -1196,9 +1195,11 @@ void SSL_CTX_set_max_send_fragment(SSL_CTX *ctx, size_t max_send_fragment) {
1196
1195
  max_send_fragment = SSL3_RT_MAX_PLAIN_LENGTH;
1197
1196
  }
1198
1197
  ctx->max_send_fragment = (uint16_t)max_send_fragment;
1198
+
1199
+ return 1;
1199
1200
  }
1200
1201
 
1201
- void SSL_set_max_send_fragment(SSL *ssl, size_t max_send_fragment) {
1202
+ int SSL_set_max_send_fragment(SSL *ssl, size_t max_send_fragment) {
1202
1203
  if (max_send_fragment < 512) {
1203
1204
  max_send_fragment = 512;
1204
1205
  }
@@ -1206,6 +1207,8 @@ void SSL_set_max_send_fragment(SSL *ssl, size_t max_send_fragment) {
1206
1207
  max_send_fragment = SSL3_RT_MAX_PLAIN_LENGTH;
1207
1208
  }
1208
1209
  ssl->max_send_fragment = (uint16_t)max_send_fragment;
1210
+
1211
+ return 1;
1209
1212
  }
1210
1213
 
1211
1214
  int SSL_set_mtu(SSL *ssl, unsigned mtu) {
@@ -1274,17 +1277,17 @@ STACK_OF(SSL_CIPHER) *SSL_get_ciphers(const SSL *ssl) {
1274
1277
 
1275
1278
  /* return a STACK of the ciphers available for the SSL and in order of
1276
1279
  * algorithm id */
1277
- STACK_OF(SSL_CIPHER) *ssl_get_ciphers_by_id(SSL *s) {
1278
- if (s == NULL) {
1280
+ STACK_OF(SSL_CIPHER) *ssl_get_ciphers_by_id(SSL *ssl) {
1281
+ if (ssl == NULL) {
1279
1282
  return NULL;
1280
1283
  }
1281
1284
 
1282
- if (s->cipher_list_by_id != NULL) {
1283
- return s->cipher_list_by_id;
1285
+ if (ssl->cipher_list_by_id != NULL) {
1286
+ return ssl->cipher_list_by_id;
1284
1287
  }
1285
1288
 
1286
- if (s->ctx != NULL && s->ctx->cipher_list_by_id != NULL) {
1287
- return s->ctx->cipher_list_by_id;
1289
+ if (ssl->ctx != NULL && ssl->ctx->cipher_list_by_id != NULL) {
1290
+ return ssl->ctx->cipher_list_by_id;
1288
1291
  }
1289
1292
 
1290
1293
  return NULL;
@@ -1375,13 +1378,13 @@ int SSL_set_cipher_list(SSL *ssl, const char *str) {
1375
1378
  return 1;
1376
1379
  }
1377
1380
 
1378
- STACK_OF(SSL_CIPHER) *ssl_bytes_to_cipher_list(SSL *s, const CBS *cbs) {
1381
+ STACK_OF(SSL_CIPHER) *ssl_bytes_to_cipher_list(SSL *ssl, const CBS *cbs) {
1379
1382
  CBS cipher_suites = *cbs;
1380
1383
  const SSL_CIPHER *c;
1381
1384
  STACK_OF(SSL_CIPHER) *sk;
1382
1385
 
1383
- if (s->s3) {
1384
- s->s3->send_connection_binding = 0;
1386
+ if (ssl->s3) {
1387
+ ssl->s3->send_connection_binding = 0;
1385
1388
  }
1386
1389
 
1387
1390
  if (CBS_len(&cipher_suites) % 2 != 0) {
@@ -1404,24 +1407,24 @@ STACK_OF(SSL_CIPHER) *ssl_bytes_to_cipher_list(SSL *s, const CBS *cbs) {
1404
1407
  }
1405
1408
 
1406
1409
  /* Check for SCSV. */
1407
- if (s->s3 && cipher_suite == (SSL3_CK_SCSV & 0xffff)) {
1410
+ if (ssl->s3 && cipher_suite == (SSL3_CK_SCSV & 0xffff)) {
1408
1411
  /* SCSV is fatal if renegotiating. */
1409
- if (s->s3->initial_handshake_complete) {
1412
+ if (ssl->s3->initial_handshake_complete) {
1410
1413
  OPENSSL_PUT_ERROR(SSL, SSL_R_SCSV_RECEIVED_WHEN_RENEGOTIATING);
1411
- ssl3_send_alert(s, SSL3_AL_FATAL, SSL_AD_HANDSHAKE_FAILURE);
1414
+ ssl3_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_HANDSHAKE_FAILURE);
1412
1415
  goto err;
1413
1416
  }
1414
- s->s3->send_connection_binding = 1;
1417
+ ssl->s3->send_connection_binding = 1;
1415
1418
  continue;
1416
1419
  }
1417
1420
 
1418
1421
  /* Check for FALLBACK_SCSV. */
1419
- if (s->s3 && cipher_suite == (SSL3_CK_FALLBACK_SCSV & 0xffff)) {
1420
- uint16_t max_version = ssl3_get_max_server_version(s);
1421
- if (SSL_IS_DTLS(s) ? (uint16_t)s->version > max_version
1422
- : (uint16_t)s->version < max_version) {
1422
+ if (ssl->s3 && cipher_suite == (SSL3_CK_FALLBACK_SCSV & 0xffff)) {
1423
+ uint16_t max_version = ssl3_get_max_server_version(ssl);
1424
+ if (SSL_IS_DTLS(ssl) ? (uint16_t)ssl->version > max_version
1425
+ : (uint16_t)ssl->version < max_version) {
1423
1426
  OPENSSL_PUT_ERROR(SSL, SSL_R_INAPPROPRIATE_FALLBACK);
1424
- ssl3_send_alert(s, SSL3_AL_FATAL, SSL3_AD_INAPPROPRIATE_FALLBACK);
1427
+ ssl3_send_alert(ssl, SSL3_AL_FATAL, SSL3_AD_INAPPROPRIATE_FALLBACK);
1425
1428
  goto err;
1426
1429
  }
1427
1430
  continue;
@@ -1575,11 +1578,11 @@ found:
1575
1578
 
1576
1579
  void SSL_get0_next_proto_negotiated(const SSL *ssl, const uint8_t **out_data,
1577
1580
  unsigned *out_len) {
1578
- *out_data = ssl->next_proto_negotiated;
1581
+ *out_data = ssl->s3->next_proto_negotiated;
1579
1582
  if (*out_data == NULL) {
1580
1583
  *out_len = 0;
1581
1584
  } else {
1582
- *out_len = ssl->next_proto_negotiated_len;
1585
+ *out_len = ssl->s3->next_proto_negotiated_len;
1583
1586
  }
1584
1587
  }
1585
1588
 
@@ -1644,18 +1647,6 @@ void SSL_get0_alpn_selected(const SSL *ssl, const uint8_t **out_data,
1644
1647
  }
1645
1648
  }
1646
1649
 
1647
- int SSL_export_keying_material(SSL *ssl, uint8_t *out, size_t out_len,
1648
- const char *label, size_t label_len,
1649
- const uint8_t *context, size_t context_len,
1650
- int use_context) {
1651
- if (ssl->version < TLS1_VERSION) {
1652
- return 0;
1653
- }
1654
-
1655
- return ssl->enc_method->export_keying_material(
1656
- ssl, out, out_len, label, label_len, context, context_len, use_context);
1657
- }
1658
-
1659
1650
  void SSL_CTX_set_cert_verify_callback(SSL_CTX *ctx,
1660
1651
  int (*cb)(X509_STORE_CTX *store_ctx,
1661
1652
  void *arg),
@@ -1683,9 +1674,9 @@ void SSL_set_cert_cb(SSL *ssl, int (*cb)(SSL *ssl, void *arg), void *arg) {
1683
1674
  ssl_cert_set_cert_cb(ssl->cert, cb, arg);
1684
1675
  }
1685
1676
 
1686
- void ssl_get_compatible_server_ciphers(SSL *s, uint32_t *out_mask_k,
1677
+ void ssl_get_compatible_server_ciphers(SSL *ssl, uint32_t *out_mask_k,
1687
1678
  uint32_t *out_mask_a) {
1688
- CERT *c = s->cert;
1679
+ CERT *c = ssl->cert;
1689
1680
  int have_rsa_cert = 0, dh_tmp;
1690
1681
  uint32_t mask_k, mask_a;
1691
1682
  int have_ecc_cert = 0, ecdsa_ok;
@@ -1693,10 +1684,10 @@ void ssl_get_compatible_server_ciphers(SSL *s, uint32_t *out_mask_k,
1693
1684
 
1694
1685
  dh_tmp = (c->dh_tmp != NULL || c->dh_tmp_cb != NULL);
1695
1686
 
1696
- if (s->cert->x509 != NULL && ssl_has_private_key(s)) {
1697
- if (ssl_private_key_type(s) == EVP_PKEY_RSA) {
1687
+ if (ssl->cert->x509 != NULL && ssl_has_private_key(ssl)) {
1688
+ if (ssl_private_key_type(ssl) == EVP_PKEY_RSA) {
1698
1689
  have_rsa_cert = 1;
1699
- } else if (ssl_private_key_type(s) == EVP_PKEY_EC) {
1690
+ } else if (ssl_private_key_type(ssl) == EVP_PKEY_EC) {
1700
1691
  have_ecc_cert = 1;
1701
1692
  }
1702
1693
  }
@@ -1721,7 +1712,7 @@ void ssl_get_compatible_server_ciphers(SSL *s, uint32_t *out_mask_k,
1721
1712
  ecdsa_ok = (x->ex_flags & EXFLAG_KUSAGE)
1722
1713
  ? (x->ex_kusage & X509v3_KU_DIGITAL_SIGNATURE)
1723
1714
  : 1;
1724
- if (!tls1_check_ec_cert(s, x)) {
1715
+ if (!tls1_check_ec_cert(ssl, x)) {
1725
1716
  ecdsa_ok = 0;
1726
1717
  }
1727
1718
  if (ecdsa_ok) {
@@ -1731,12 +1722,13 @@ void ssl_get_compatible_server_ciphers(SSL *s, uint32_t *out_mask_k,
1731
1722
 
1732
1723
  /* If we are considering an ECC cipher suite that uses an ephemeral EC
1733
1724
  * key, check for a shared curve. */
1734
- if (tls1_get_shared_curve(s) != NID_undef) {
1725
+ uint16_t unused;
1726
+ if (tls1_get_shared_curve(ssl, &unused)) {
1735
1727
  mask_k |= SSL_kECDHE;
1736
1728
  }
1737
1729
 
1738
1730
  /* PSK requires a server callback. */
1739
- if (s->psk_server_callback != NULL) {
1731
+ if (ssl->psk_server_callback != NULL) {
1740
1732
  mask_k |= SSL_kPSK;
1741
1733
  mask_a |= SSL_aPSK;
1742
1734
  }
@@ -1822,28 +1814,17 @@ const char *SSL_SESSION_get_version(const SSL_SESSION *session) {
1822
1814
  return ssl_get_version(session->ssl_version);
1823
1815
  }
1824
1816
 
1825
- const char* SSL_get_curve_name(uint16_t curve_id) {
1826
- return tls1_ec_curve_id2name(curve_id);
1827
- }
1828
-
1829
- void ssl_clear_cipher_ctx(SSL *s) {
1830
- SSL_AEAD_CTX_free(s->aead_read_ctx);
1831
- s->aead_read_ctx = NULL;
1832
- SSL_AEAD_CTX_free(s->aead_write_ctx);
1833
- s->aead_write_ctx = NULL;
1834
- }
1835
-
1836
- X509 *SSL_get_certificate(const SSL *s) {
1837
- if (s->cert != NULL) {
1838
- return s->cert->x509;
1817
+ X509 *SSL_get_certificate(const SSL *ssl) {
1818
+ if (ssl->cert != NULL) {
1819
+ return ssl->cert->x509;
1839
1820
  }
1840
1821
 
1841
1822
  return NULL;
1842
1823
  }
1843
1824
 
1844
- EVP_PKEY *SSL_get_privatekey(const SSL *s) {
1845
- if (s->cert != NULL) {
1846
- return s->cert->privatekey;
1825
+ EVP_PKEY *SSL_get_privatekey(const SSL *ssl) {
1826
+ if (ssl->cert != NULL) {
1827
+ return ssl->cert->privatekey;
1847
1828
  }
1848
1829
 
1849
1830
  return NULL;
@@ -1866,29 +1847,29 @@ EVP_PKEY *SSL_CTX_get0_privatekey(const SSL_CTX *ctx) {
1866
1847
  }
1867
1848
 
1868
1849
  const SSL_CIPHER *SSL_get_current_cipher(const SSL *ssl) {
1869
- if (ssl->aead_write_ctx == NULL) {
1850
+ if (ssl->s3->aead_write_ctx == NULL) {
1870
1851
  return NULL;
1871
1852
  }
1872
- return ssl->aead_write_ctx->cipher;
1853
+ return ssl->s3->aead_write_ctx->cipher;
1873
1854
  }
1874
1855
 
1875
- const COMP_METHOD *SSL_get_current_compression(SSL *s) { return NULL; }
1856
+ const COMP_METHOD *SSL_get_current_compression(SSL *ssl) { return NULL; }
1876
1857
 
1877
- const COMP_METHOD *SSL_get_current_expansion(SSL *s) { return NULL; }
1858
+ const COMP_METHOD *SSL_get_current_expansion(SSL *ssl) { return NULL; }
1878
1859
 
1879
- int ssl_init_wbio_buffer(SSL *s, int push) {
1860
+ int ssl_init_wbio_buffer(SSL *ssl, int push) {
1880
1861
  BIO *bbio;
1881
1862
 
1882
- if (s->bbio == NULL) {
1863
+ if (ssl->bbio == NULL) {
1883
1864
  bbio = BIO_new(BIO_f_buffer());
1884
1865
  if (bbio == NULL) {
1885
1866
  return 0;
1886
1867
  }
1887
- s->bbio = bbio;
1868
+ ssl->bbio = bbio;
1888
1869
  } else {
1889
- bbio = s->bbio;
1890
- if (s->bbio == s->wbio) {
1891
- s->wbio = BIO_pop(s->wbio);
1870
+ bbio = ssl->bbio;
1871
+ if (ssl->bbio == ssl->wbio) {
1872
+ ssl->wbio = BIO_pop(ssl->wbio);
1892
1873
  }
1893
1874
  }
1894
1875
 
@@ -1899,30 +1880,30 @@ int ssl_init_wbio_buffer(SSL *s, int push) {
1899
1880
  }
1900
1881
 
1901
1882
  if (push) {
1902
- if (s->wbio != bbio) {
1903
- s->wbio = BIO_push(bbio, s->wbio);
1883
+ if (ssl->wbio != bbio) {
1884
+ ssl->wbio = BIO_push(bbio, ssl->wbio);
1904
1885
  }
1905
1886
  } else {
1906
- if (s->wbio == bbio) {
1907
- s->wbio = BIO_pop(bbio);
1887
+ if (ssl->wbio == bbio) {
1888
+ ssl->wbio = BIO_pop(bbio);
1908
1889
  }
1909
1890
  }
1910
1891
 
1911
1892
  return 1;
1912
1893
  }
1913
1894
 
1914
- void ssl_free_wbio_buffer(SSL *s) {
1915
- if (s->bbio == NULL) {
1895
+ void ssl_free_wbio_buffer(SSL *ssl) {
1896
+ if (ssl->bbio == NULL) {
1916
1897
  return;
1917
1898
  }
1918
1899
 
1919
- if (s->bbio == s->wbio) {
1900
+ if (ssl->bbio == ssl->wbio) {
1920
1901
  /* remove buffering */
1921
- s->wbio = BIO_pop(s->wbio);
1902
+ ssl->wbio = BIO_pop(ssl->wbio);
1922
1903
  }
1923
1904
 
1924
- BIO_free(s->bbio);
1925
- s->bbio = NULL;
1905
+ BIO_free(ssl->bbio);
1906
+ ssl->bbio = NULL;
1926
1907
  }
1927
1908
 
1928
1909
  void SSL_CTX_set_quiet_shutdown(SSL_CTX *ctx, int mode) {
@@ -2280,8 +2261,8 @@ int SSL_in_false_start(const SSL *ssl) {
2280
2261
  return ssl->s3->tmp.in_false_start;
2281
2262
  }
2282
2263
 
2283
- int SSL_cutthrough_complete(const SSL *s) {
2284
- return SSL_in_false_start(s);
2264
+ int SSL_cutthrough_complete(const SSL *ssl) {
2265
+ return SSL_in_false_start(ssl);
2285
2266
  }
2286
2267
 
2287
2268
  void SSL_get_structure_sizes(size_t *ssl_size, size_t *ssl_ctx_size,
@@ -2291,13 +2272,13 @@ void SSL_get_structure_sizes(size_t *ssl_size, size_t *ssl_ctx_size,
2291
2272
  *ssl_session_size = sizeof(SSL_SESSION);
2292
2273
  }
2293
2274
 
2294
- int ssl3_can_false_start(const SSL *s) {
2295
- const SSL_CIPHER *const cipher = SSL_get_current_cipher(s);
2275
+ int ssl3_can_false_start(const SSL *ssl) {
2276
+ const SSL_CIPHER *const cipher = SSL_get_current_cipher(ssl);
2296
2277
 
2297
2278
  /* False Start only for TLS 1.2 with an ECDHE+AEAD cipher and ALPN or NPN. */
2298
- return !SSL_IS_DTLS(s) &&
2299
- SSL_version(s) >= TLS1_2_VERSION &&
2300
- (s->s3->alpn_selected || s->s3->next_proto_neg_seen) &&
2279
+ return !SSL_IS_DTLS(ssl) &&
2280
+ SSL_version(ssl) >= TLS1_2_VERSION &&
2281
+ (ssl->s3->alpn_selected || ssl->s3->next_proto_neg_seen) &&
2301
2282
  cipher != NULL &&
2302
2283
  cipher->algorithm_mkey == SSL_kECDHE &&
2303
2284
  cipher->algorithm_mac == SSL_AEAD;
@@ -2309,99 +2290,100 @@ const SSL3_ENC_METHOD *ssl3_get_enc_method(uint16_t version) {
2309
2290
  return &SSLv3_enc_data;
2310
2291
 
2311
2292
  case TLS1_VERSION:
2312
- return &TLSv1_enc_data;
2313
-
2314
- case DTLS1_VERSION:
2315
2293
  case TLS1_1_VERSION:
2316
- return &TLSv1_1_enc_data;
2317
-
2318
- case DTLS1_2_VERSION:
2319
2294
  case TLS1_2_VERSION:
2320
- return &TLSv1_2_enc_data;
2295
+ case DTLS1_VERSION:
2296
+ case DTLS1_2_VERSION:
2297
+ return &TLSv1_enc_data;
2321
2298
 
2322
2299
  default:
2323
2300
  return NULL;
2324
2301
  }
2325
2302
  }
2326
2303
 
2327
- uint16_t ssl3_get_max_server_version(const SSL *s) {
2304
+ uint16_t ssl3_get_max_server_version(const SSL *ssl) {
2328
2305
  uint16_t max_version;
2329
2306
 
2330
- if (SSL_IS_DTLS(s)) {
2331
- max_version = (s->max_version != 0) ? s->max_version : DTLS1_2_VERSION;
2332
- if (!(s->options & SSL_OP_NO_DTLSv1_2) && DTLS1_2_VERSION >= max_version) {
2307
+ if (SSL_IS_DTLS(ssl)) {
2308
+ max_version = (ssl->max_version != 0) ? ssl->max_version : DTLS1_2_VERSION;
2309
+ if (!(ssl->options & SSL_OP_NO_DTLSv1_2) &&
2310
+ DTLS1_2_VERSION >= max_version) {
2333
2311
  return DTLS1_2_VERSION;
2334
2312
  }
2335
- if (!(s->options & SSL_OP_NO_DTLSv1) && DTLS1_VERSION >= max_version) {
2313
+ if (!(ssl->options & SSL_OP_NO_DTLSv1) && DTLS1_VERSION >= max_version) {
2336
2314
  return DTLS1_VERSION;
2337
2315
  }
2338
2316
  return 0;
2339
2317
  }
2340
2318
 
2341
- max_version = (s->max_version != 0) ? s->max_version : TLS1_2_VERSION;
2342
- if (!(s->options & SSL_OP_NO_TLSv1_2) && TLS1_2_VERSION <= max_version) {
2319
+ max_version = (ssl->max_version != 0) ? ssl->max_version : TLS1_2_VERSION;
2320
+ if (!(ssl->options & SSL_OP_NO_TLSv1_2) && TLS1_2_VERSION <= max_version) {
2343
2321
  return TLS1_2_VERSION;
2344
2322
  }
2345
- if (!(s->options & SSL_OP_NO_TLSv1_1) && TLS1_1_VERSION <= max_version) {
2323
+ if (!(ssl->options & SSL_OP_NO_TLSv1_1) && TLS1_1_VERSION <= max_version) {
2346
2324
  return TLS1_1_VERSION;
2347
2325
  }
2348
- if (!(s->options & SSL_OP_NO_TLSv1) && TLS1_VERSION <= max_version) {
2326
+ if (!(ssl->options & SSL_OP_NO_TLSv1) && TLS1_VERSION <= max_version) {
2349
2327
  return TLS1_VERSION;
2350
2328
  }
2351
- if (!(s->options & SSL_OP_NO_SSLv3) && SSL3_VERSION <= max_version) {
2329
+ if (!(ssl->options & SSL_OP_NO_SSLv3) && SSL3_VERSION <= max_version) {
2352
2330
  return SSL3_VERSION;
2353
2331
  }
2354
2332
  return 0;
2355
2333
  }
2356
2334
 
2357
- uint16_t ssl3_get_mutual_version(SSL *s, uint16_t client_version) {
2335
+ uint16_t ssl3_get_mutual_version(SSL *ssl, uint16_t client_version) {
2358
2336
  uint16_t version = 0;
2359
2337
 
2360
- if (SSL_IS_DTLS(s)) {
2338
+ if (SSL_IS_DTLS(ssl)) {
2361
2339
  /* Clamp client_version to max_version. */
2362
- if (s->max_version != 0 && client_version < s->max_version) {
2363
- client_version = s->max_version;
2340
+ if (ssl->max_version != 0 && client_version < ssl->max_version) {
2341
+ client_version = ssl->max_version;
2364
2342
  }
2365
2343
 
2366
- if (client_version <= DTLS1_2_VERSION && !(s->options & SSL_OP_NO_DTLSv1_2)) {
2344
+ if (client_version <= DTLS1_2_VERSION &&
2345
+ !(ssl->options & SSL_OP_NO_DTLSv1_2)) {
2367
2346
  version = DTLS1_2_VERSION;
2368
2347
  } else if (client_version <= DTLS1_VERSION &&
2369
- !(s->options & SSL_OP_NO_DTLSv1)) {
2348
+ !(ssl->options & SSL_OP_NO_DTLSv1)) {
2370
2349
  version = DTLS1_VERSION;
2371
2350
  }
2372
2351
 
2373
2352
  /* Check against min_version. */
2374
- if (version != 0 && s->min_version != 0 && version > s->min_version) {
2353
+ if (version != 0 && ssl->min_version != 0 && version > ssl->min_version) {
2375
2354
  return 0;
2376
2355
  }
2377
2356
  return version;
2378
2357
  } else {
2379
2358
  /* Clamp client_version to max_version. */
2380
- if (s->max_version != 0 && client_version > s->max_version) {
2381
- client_version = s->max_version;
2359
+ if (ssl->max_version != 0 && client_version > ssl->max_version) {
2360
+ client_version = ssl->max_version;
2382
2361
  }
2383
2362
 
2384
- if (client_version >= TLS1_2_VERSION && !(s->options & SSL_OP_NO_TLSv1_2)) {
2363
+ if (client_version >= TLS1_2_VERSION &&
2364
+ !(ssl->options & SSL_OP_NO_TLSv1_2)) {
2385
2365
  version = TLS1_2_VERSION;
2386
2366
  } else if (client_version >= TLS1_1_VERSION &&
2387
- !(s->options & SSL_OP_NO_TLSv1_1)) {
2367
+ !(ssl->options & SSL_OP_NO_TLSv1_1)) {
2388
2368
  version = TLS1_1_VERSION;
2389
- } else if (client_version >= TLS1_VERSION && !(s->options & SSL_OP_NO_TLSv1)) {
2369
+ } else if (client_version >= TLS1_VERSION &&
2370
+ !(ssl->options & SSL_OP_NO_TLSv1)) {
2390
2371
  version = TLS1_VERSION;
2391
- } else if (client_version >= SSL3_VERSION && !(s->options & SSL_OP_NO_SSLv3)) {
2372
+ } else if (client_version >= SSL3_VERSION &&
2373
+ !(ssl->options & SSL_OP_NO_SSLv3)) {
2392
2374
  version = SSL3_VERSION;
2393
2375
  }
2394
2376
 
2395
2377
  /* Check against min_version. */
2396
- if (version != 0 && s->min_version != 0 && version < s->min_version) {
2378
+ if (version != 0 && ssl->min_version != 0 && version < ssl->min_version) {
2397
2379
  return 0;
2398
2380
  }
2399
2381
  return version;
2400
2382
  }
2401
2383
  }
2402
2384
 
2403
- uint16_t ssl3_get_max_client_version(SSL *s) {
2404
- uint32_t options = s->options;
2385
+ uint16_t ssl3_get_max_client_version(SSL *ssl) {
2386
+ uint32_t options = ssl->options;
2405
2387
  uint16_t version = 0;
2406
2388
 
2407
2389
  /* OpenSSL's API for controlling versions entails blacklisting individual
@@ -2417,15 +2399,15 @@ uint16_t ssl3_get_max_client_version(SSL *s) {
2417
2399
  *
2418
2400
  * By this scheme, the maximum version is the lowest version V such that V is
2419
2401
  * enabled and V+1 is disabled or unimplemented. */
2420
- if (SSL_IS_DTLS(s)) {
2402
+ if (SSL_IS_DTLS(ssl)) {
2421
2403
  if (!(options & SSL_OP_NO_DTLSv1_2)) {
2422
2404
  version = DTLS1_2_VERSION;
2423
2405
  }
2424
2406
  if (!(options & SSL_OP_NO_DTLSv1) && (options & SSL_OP_NO_DTLSv1_2)) {
2425
2407
  version = DTLS1_VERSION;
2426
2408
  }
2427
- if (s->max_version != 0 && version < s->max_version) {
2428
- version = s->max_version;
2409
+ if (ssl->max_version != 0 && version < ssl->max_version) {
2410
+ version = ssl->max_version;
2429
2411
  }
2430
2412
  } else {
2431
2413
  if (!(options & SSL_OP_NO_TLSv1_2)) {
@@ -2440,53 +2422,53 @@ uint16_t ssl3_get_max_client_version(SSL *s) {
2440
2422
  if (!(options & SSL_OP_NO_SSLv3) && (options & SSL_OP_NO_TLSv1)) {
2441
2423
  version = SSL3_VERSION;
2442
2424
  }
2443
- if (s->max_version != 0 && version > s->max_version) {
2444
- version = s->max_version;
2425
+ if (ssl->max_version != 0 && version > ssl->max_version) {
2426
+ version = ssl->max_version;
2445
2427
  }
2446
2428
  }
2447
2429
 
2448
2430
  return version;
2449
2431
  }
2450
2432
 
2451
- int ssl3_is_version_enabled(SSL *s, uint16_t version) {
2452
- if (SSL_IS_DTLS(s)) {
2453
- if (s->max_version != 0 && version < s->max_version) {
2433
+ int ssl3_is_version_enabled(SSL *ssl, uint16_t version) {
2434
+ if (SSL_IS_DTLS(ssl)) {
2435
+ if (ssl->max_version != 0 && version < ssl->max_version) {
2454
2436
  return 0;
2455
2437
  }
2456
- if (s->min_version != 0 && version > s->min_version) {
2438
+ if (ssl->min_version != 0 && version > ssl->min_version) {
2457
2439
  return 0;
2458
2440
  }
2459
2441
 
2460
2442
  switch (version) {
2461
2443
  case DTLS1_VERSION:
2462
- return !(s->options & SSL_OP_NO_DTLSv1);
2444
+ return !(ssl->options & SSL_OP_NO_DTLSv1);
2463
2445
 
2464
2446
  case DTLS1_2_VERSION:
2465
- return !(s->options & SSL_OP_NO_DTLSv1_2);
2447
+ return !(ssl->options & SSL_OP_NO_DTLSv1_2);
2466
2448
 
2467
2449
  default:
2468
2450
  return 0;
2469
2451
  }
2470
2452
  } else {
2471
- if (s->max_version != 0 && version > s->max_version) {
2453
+ if (ssl->max_version != 0 && version > ssl->max_version) {
2472
2454
  return 0;
2473
2455
  }
2474
- if (s->min_version != 0 && version < s->min_version) {
2456
+ if (ssl->min_version != 0 && version < ssl->min_version) {
2475
2457
  return 0;
2476
2458
  }
2477
2459
 
2478
2460
  switch (version) {
2479
2461
  case SSL3_VERSION:
2480
- return !(s->options & SSL_OP_NO_SSLv3);
2462
+ return !(ssl->options & SSL_OP_NO_SSLv3);
2481
2463
 
2482
2464
  case TLS1_VERSION:
2483
- return !(s->options & SSL_OP_NO_TLSv1);
2465
+ return !(ssl->options & SSL_OP_NO_TLSv1);
2484
2466
 
2485
2467
  case TLS1_1_VERSION:
2486
- return !(s->options & SSL_OP_NO_TLSv1_1);
2468
+ return !(ssl->options & SSL_OP_NO_TLSv1_1);
2487
2469
 
2488
2470
  case TLS1_2_VERSION:
2489
- return !(s->options & SSL_OP_NO_TLSv1_2);
2471
+ return !(ssl->options & SSL_OP_NO_TLSv1_2);
2490
2472
 
2491
2473
  default:
2492
2474
  return 0;
@@ -2494,8 +2476,8 @@ int ssl3_is_version_enabled(SSL *s, uint16_t version) {
2494
2476
  }
2495
2477
  }
2496
2478
 
2497
- uint16_t ssl3_version_from_wire(SSL *s, uint16_t wire_version) {
2498
- if (!SSL_IS_DTLS(s)) {
2479
+ uint16_t ssl3_version_from_wire(const SSL *ssl, uint16_t wire_version) {
2480
+ if (!SSL_IS_DTLS(ssl)) {
2499
2481
  return wire_version;
2500
2482
  }
2501
2483
 
@@ -2515,6 +2497,11 @@ uint16_t ssl3_version_from_wire(SSL *s, uint16_t wire_version) {
2515
2497
  return version;
2516
2498
  }
2517
2499
 
2500
+ uint16_t ssl3_protocol_version(const SSL *ssl) {
2501
+ assert(ssl->s3->have_version);
2502
+ return ssl3_version_from_wire(ssl, ssl->version);
2503
+ }
2504
+
2518
2505
  int SSL_cache_hit(SSL *ssl) { return SSL_session_reused(ssl); }
2519
2506
 
2520
2507
  int SSL_is_server(SSL *ssl) { return ssl->server; }
@@ -2540,23 +2527,24 @@ void SSL_set_reject_peer_renegotiations(SSL *ssl, int reject) {
2540
2527
 
2541
2528
  int SSL_get_rc4_state(const SSL *ssl, const RC4_KEY **read_key,
2542
2529
  const RC4_KEY **write_key) {
2543
- if (ssl->aead_read_ctx == NULL || ssl->aead_write_ctx == NULL) {
2530
+ if (ssl->s3->aead_read_ctx == NULL || ssl->s3->aead_write_ctx == NULL) {
2544
2531
  return 0;
2545
2532
  }
2546
2533
 
2547
- return EVP_AEAD_CTX_get_rc4_state(&ssl->aead_read_ctx->ctx, read_key) &&
2548
- EVP_AEAD_CTX_get_rc4_state(&ssl->aead_write_ctx->ctx, write_key);
2534
+ return EVP_AEAD_CTX_get_rc4_state(&ssl->s3->aead_read_ctx->ctx, read_key) &&
2535
+ EVP_AEAD_CTX_get_rc4_state(&ssl->s3->aead_write_ctx->ctx, write_key);
2549
2536
  }
2550
2537
 
2551
2538
  int SSL_get_ivs(const SSL *ssl, const uint8_t **out_read_iv,
2552
2539
  const uint8_t **out_write_iv, size_t *out_iv_len) {
2553
- if (ssl->aead_read_ctx == NULL || ssl->aead_write_ctx == NULL) {
2540
+ if (ssl->s3->aead_read_ctx == NULL || ssl->s3->aead_write_ctx == NULL) {
2554
2541
  return 0;
2555
2542
  }
2556
2543
 
2557
2544
  size_t write_iv_len;
2558
- if (!EVP_AEAD_CTX_get_iv(&ssl->aead_read_ctx->ctx, out_read_iv, out_iv_len) ||
2559
- !EVP_AEAD_CTX_get_iv(&ssl->aead_write_ctx->ctx, out_write_iv,
2545
+ if (!EVP_AEAD_CTX_get_iv(&ssl->s3->aead_read_ctx->ctx, out_read_iv,
2546
+ out_iv_len) ||
2547
+ !EVP_AEAD_CTX_get_iv(&ssl->s3->aead_write_ctx->ctx, out_write_iv,
2560
2548
  &write_iv_len) ||
2561
2549
  *out_iv_len != write_iv_len) {
2562
2550
  return 0;
@@ -2565,10 +2553,69 @@ int SSL_get_ivs(const SSL *ssl, const uint8_t **out_read_iv,
2565
2553
  return 1;
2566
2554
  }
2567
2555
 
2556
+ static uint64_t be_to_u64(const uint8_t in[8]) {
2557
+ return (((uint64_t)in[0]) << 56) | (((uint64_t)in[1]) << 48) |
2558
+ (((uint64_t)in[2]) << 40) | (((uint64_t)in[3]) << 32) |
2559
+ (((uint64_t)in[4]) << 24) | (((uint64_t)in[5]) << 16) |
2560
+ (((uint64_t)in[6]) << 8) | ((uint64_t)in[7]);
2561
+ }
2562
+
2563
+ uint64_t SSL_get_read_sequence(const SSL *ssl) {
2564
+ /* TODO(davidben): Internally represent sequence numbers as uint64_t. */
2565
+ if (SSL_IS_DTLS(ssl)) {
2566
+ /* max_seq_num already includes the epoch. */
2567
+ assert(ssl->d1->r_epoch == (ssl->d1->bitmap.max_seq_num >> 48));
2568
+ return ssl->d1->bitmap.max_seq_num;
2569
+ }
2570
+ return be_to_u64(ssl->s3->read_sequence);
2571
+ }
2572
+
2573
+ uint64_t SSL_get_write_sequence(const SSL *ssl) {
2574
+ uint64_t ret = be_to_u64(ssl->s3->write_sequence);
2575
+ if (SSL_IS_DTLS(ssl)) {
2576
+ assert((ret >> 48) == 0);
2577
+ ret |= ((uint64_t)ssl->d1->w_epoch) << 48;
2578
+ }
2579
+ return ret;
2580
+ }
2581
+
2568
2582
  uint8_t SSL_get_server_key_exchange_hash(const SSL *ssl) {
2569
2583
  return ssl->s3->tmp.server_key_exchange_hash;
2570
2584
  }
2571
2585
 
2586
+ size_t SSL_get_client_random(const SSL *ssl, uint8_t *out, size_t max_out) {
2587
+ if (max_out == 0) {
2588
+ return sizeof(ssl->s3->client_random);
2589
+ }
2590
+ if (max_out > sizeof(ssl->s3->client_random)) {
2591
+ max_out = sizeof(ssl->s3->client_random);
2592
+ }
2593
+ memcpy(out, ssl->s3->client_random, max_out);
2594
+ return max_out;
2595
+ }
2596
+
2597
+ size_t SSL_get_server_random(const SSL *ssl, uint8_t *out, size_t max_out) {
2598
+ if (max_out == 0) {
2599
+ return sizeof(ssl->s3->server_random);
2600
+ }
2601
+ if (max_out > sizeof(ssl->s3->server_random)) {
2602
+ max_out = sizeof(ssl->s3->server_random);
2603
+ }
2604
+ memcpy(out, ssl->s3->server_random, max_out);
2605
+ return max_out;
2606
+ }
2607
+
2608
+ const SSL_CIPHER *SSL_get_pending_cipher(const SSL *ssl) {
2609
+ if (!SSL_in_init(ssl)) {
2610
+ return NULL;
2611
+ }
2612
+ return ssl->s3->tmp.new_cipher;
2613
+ }
2614
+
2615
+ void SSL_CTX_set_retain_only_sha256_of_client_certs(SSL_CTX *ctx, int enabled) {
2616
+ ctx->retain_only_sha256_of_client_certs = !!enabled;
2617
+ }
2618
+
2572
2619
  int SSL_clear(SSL *ssl) {
2573
2620
  if (ssl->method == NULL) {
2574
2621
  OPENSSL_PUT_ERROR(SSL, SSL_R_NO_METHOD_SPECIFIED);
@@ -2607,12 +2654,6 @@ int SSL_clear(SSL *ssl) {
2607
2654
  BUF_MEM_free(ssl->init_buf);
2608
2655
  ssl->init_buf = NULL;
2609
2656
 
2610
- ssl_clear_cipher_ctx(ssl);
2611
-
2612
- OPENSSL_free(ssl->next_proto_negotiated);
2613
- ssl->next_proto_negotiated = NULL;
2614
- ssl->next_proto_negotiated_len = 0;
2615
-
2616
2657
  /* The ssl->d1->mtu is simultaneously configuration (preserved across
2617
2658
  * clear) and connection-specific state (gets reset).
2618
2659
  *
@@ -2626,8 +2667,6 @@ int SSL_clear(SSL *ssl) {
2626
2667
  if (!ssl->method->ssl_new(ssl)) {
2627
2668
  return 0;
2628
2669
  }
2629
- ssl->enc_method = ssl3_get_enc_method(ssl->version);
2630
- assert(ssl->enc_method != NULL);
2631
2670
 
2632
2671
  if (SSL_IS_DTLS(ssl) && (SSL_get_options(ssl) & SSL_OP_NO_QUERY_MTU)) {
2633
2672
  ssl->d1->mtu = mtu;