grpc 1.9.1 → 1.10.0.pre1

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

Potentially problematic release.


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

Files changed (637) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +2654 -953
  3. data/etc/roots.pem +282 -683
  4. data/include/grpc/compression.h +9 -26
  5. data/include/grpc/grpc.h +10 -24
  6. data/include/grpc/grpc_security.h +7 -1
  7. data/include/grpc/impl/codegen/compression_types.h +5 -62
  8. data/include/grpc/impl/codegen/grpc_types.h +10 -6
  9. data/include/grpc/module.modulemap +1 -10
  10. data/include/grpc/support/alloc.h +3 -2
  11. data/include/grpc/support/log.h +1 -2
  12. data/{src/core/lib/gpr/thd_internal.h → include/grpc/support/thd_id.h} +23 -9
  13. data/src/boringssl/err_data.c +550 -496
  14. data/src/core/ext/census/grpc_context.cc +2 -1
  15. data/src/core/ext/filters/client_channel/backup_poller.cc +5 -4
  16. data/src/core/ext/filters/client_channel/channel_connectivity.cc +7 -7
  17. data/src/core/ext/filters/client_channel/client_channel.cc +162 -172
  18. data/src/core/ext/filters/client_channel/client_channel_factory.cc +4 -2
  19. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +10 -10
  20. data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +18 -14
  21. data/src/core/ext/filters/client_channel/http_proxy.cc +3 -1
  22. data/src/core/ext/filters/client_channel/lb_policy.cc +21 -105
  23. data/src/core/ext/filters/client_channel/lb_policy.h +166 -170
  24. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +41 -36
  25. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +1452 -1459
  26. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.h +1 -1
  27. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +3 -2
  28. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc +7 -8
  29. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +27 -27
  30. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +279 -304
  31. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +358 -330
  32. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.cc +30 -41
  33. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +7 -14
  34. data/src/core/ext/filters/client_channel/lb_policy_factory.cc +8 -21
  35. data/src/core/ext/filters/client_channel/lb_policy_factory.h +23 -27
  36. data/src/core/ext/filters/client_channel/lb_policy_registry.cc +58 -33
  37. data/src/core/ext/filters/client_channel/lb_policy_registry.h +25 -12
  38. data/src/core/ext/filters/client_channel/parse_address.cc +10 -8
  39. data/src/core/ext/filters/client_channel/proxy_mapper_registry.cc +2 -2
  40. data/src/core/ext/filters/client_channel/resolver.cc +6 -52
  41. data/src/core/ext/filters/client_channel/resolver.h +98 -55
  42. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +266 -237
  43. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +5 -5
  44. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +31 -27
  45. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +244 -207
  46. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +161 -148
  47. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +47 -31
  48. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +126 -126
  49. data/src/core/ext/filters/client_channel/resolver_factory.h +33 -32
  50. data/src/core/ext/filters/client_channel/resolver_registry.cc +110 -90
  51. data/src/core/ext/filters/client_channel/resolver_registry.h +49 -36
  52. data/src/core/ext/filters/client_channel/retry_throttle.cc +29 -22
  53. data/src/core/ext/filters/client_channel/subchannel.cc +173 -173
  54. data/src/core/ext/filters/client_channel/subchannel.h +38 -45
  55. data/src/core/ext/filters/client_channel/subchannel_index.cc +44 -40
  56. data/src/core/ext/filters/client_channel/uri_parser.cc +3 -3
  57. data/src/core/ext/filters/deadline/deadline_filter.cc +27 -18
  58. data/src/core/ext/filters/http/client/http_client_filter.cc +26 -23
  59. data/src/core/ext/filters/http/http_filters_plugin.cc +3 -2
  60. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +78 -110
  61. data/src/core/ext/filters/http/server/http_server_filter.cc +29 -26
  62. data/src/core/ext/filters/load_reporting/server_load_reporting_filter.cc +9 -11
  63. data/src/core/ext/filters/load_reporting/server_load_reporting_plugin.cc +2 -1
  64. data/src/core/ext/filters/max_age/max_age_filter.cc +14 -14
  65. data/src/core/ext/filters/message_size/message_size_filter.cc +20 -18
  66. data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc +4 -4
  67. data/src/core/ext/filters/workarounds/workaround_utils.cc +4 -4
  68. data/src/core/ext/transport/chttp2/alpn/alpn.cc +2 -1
  69. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +10 -10
  70. data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +4 -4
  71. data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +11 -12
  72. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +16 -13
  73. data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +36 -9
  74. data/src/core/ext/transport/chttp2/transport/bin_decoder.h +3 -0
  75. data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +17 -14
  76. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +139 -145
  77. data/src/core/ext/transport/chttp2/transport/flow_control.cc +16 -14
  78. data/src/core/ext/transport/chttp2/transport/flow_control.h +8 -7
  79. data/src/core/ext/transport/chttp2/transport/frame_data.cc +35 -33
  80. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +27 -25
  81. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +12 -12
  82. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +16 -15
  83. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +19 -19
  84. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +11 -11
  85. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +23 -22
  86. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +35 -35
  87. data/src/core/ext/transport/chttp2/transport/hpack_table.cc +10 -7
  88. data/src/core/ext/transport/chttp2/transport/http2_settings.cc +2 -2
  89. data/src/core/ext/transport/chttp2/transport/incoming_metadata.cc +2 -2
  90. data/src/core/ext/transport/chttp2/transport/internal.h +1 -1
  91. data/src/core/ext/transport/chttp2/transport/parsing.cc +35 -39
  92. data/src/core/ext/transport/chttp2/transport/stream_map.cc +8 -7
  93. data/src/core/ext/transport/chttp2/transport/varint.cc +5 -5
  94. data/src/core/ext/transport/chttp2/transport/writing.cc +18 -18
  95. data/src/core/ext/transport/inproc/inproc_transport.cc +43 -23
  96. data/src/core/lib/{gpr → avl}/avl.cc +61 -57
  97. data/{include/grpc/support → src/core/lib/avl}/avl.h +25 -35
  98. data/src/core/lib/backoff/backoff.cc +6 -5
  99. data/src/core/lib/channel/channel_args.cc +23 -109
  100. data/src/core/lib/channel/channel_args.h +5 -31
  101. data/src/core/lib/channel/channel_stack.cc +11 -8
  102. data/src/core/lib/channel/channel_stack_builder.cc +10 -7
  103. data/src/core/lib/channel/connected_channel.cc +18 -17
  104. data/src/core/lib/channel/handshaker.cc +8 -8
  105. data/src/core/lib/channel/handshaker_registry.cc +3 -2
  106. data/src/core/lib/compression/algorithm_metadata.h +13 -6
  107. data/src/core/lib/compression/compression.cc +72 -183
  108. data/src/core/lib/compression/compression_internal.cc +274 -0
  109. data/src/core/lib/compression/compression_internal.h +86 -0
  110. data/src/core/lib/compression/message_compress.cc +15 -15
  111. data/src/core/lib/compression/message_compress.h +4 -3
  112. data/src/core/lib/compression/stream_compression_gzip.cc +8 -8
  113. data/src/core/lib/compression/stream_compression_identity.cc +1 -1
  114. data/src/core/lib/debug/stats.cc +10 -8
  115. data/src/core/lib/debug/stats_data.cc +2 -1
  116. data/src/core/lib/debug/trace.cc +3 -3
  117. data/src/core/lib/gpr/alloc.cc +7 -11
  118. data/src/core/lib/gpr/arena.cc +34 -12
  119. data/src/core/lib/gpr/atm.cc +2 -1
  120. data/src/core/lib/gpr/cpu_linux.cc +3 -3
  121. data/src/core/lib/gpr/cpu_posix.cc +2 -1
  122. data/src/core/lib/gpr/env.h +1 -1
  123. data/src/core/lib/gpr/env_linux.cc +1 -1
  124. data/src/core/lib/gpr/env_windows.cc +4 -4
  125. data/src/core/lib/gpr/fork.cc +16 -2
  126. data/src/core/lib/gpr/host_port.cc +5 -4
  127. data/{include/grpc/support → src/core/lib/gpr}/host_port.h +5 -13
  128. data/src/core/lib/gpr/log.cc +5 -4
  129. data/src/core/lib/gpr/log_linux.cc +1 -1
  130. data/src/core/lib/gpr/mpscq.cc +1 -0
  131. data/src/core/lib/gpr/murmur_hash.cc +4 -4
  132. data/src/core/lib/gpr/string.cc +19 -16
  133. data/src/core/lib/gpr/string_posix.cc +3 -3
  134. data/src/core/lib/gpr/sync_posix.cc +5 -9
  135. data/src/core/lib/gpr/thd.cc +3 -3
  136. data/{include/grpc/support → src/core/lib/gpr}/thd.h +20 -28
  137. data/src/core/lib/gpr/thd_posix.cc +6 -4
  138. data/src/core/lib/gpr/thd_windows.cc +3 -1
  139. data/src/core/lib/gpr/time.cc +6 -4
  140. data/src/core/lib/gpr/time_posix.cc +2 -2
  141. data/{include/grpc/support → src/core/lib/gpr}/tls.h +6 -6
  142. data/{include/grpc/support → src/core/lib/gpr}/tls_gcc.h +3 -3
  143. data/{include/grpc/support → src/core/lib/gpr}/tls_msvc.h +3 -3
  144. data/src/core/lib/gpr/tls_pthread.cc +1 -1
  145. data/{include/grpc/support → src/core/lib/gpr}/tls_pthread.h +3 -3
  146. data/{include/grpc/support → src/core/lib/gpr}/useful.h +3 -3
  147. data/src/core/lib/{gpr++ → gprpp}/abstract.h +3 -3
  148. data/src/core/lib/{gpr++ → gprpp}/atomic.h +5 -5
  149. data/src/core/lib/{gpr++ → gprpp}/atomic_with_atm.h +3 -3
  150. data/src/core/lib/{gpr++ → gprpp}/atomic_with_std.h +3 -3
  151. data/src/core/lib/{gpr++ → gprpp}/debug_location.h +3 -3
  152. data/src/core/lib/{gpr++ → gprpp}/inlined_vector.h +44 -22
  153. data/src/core/lib/{gpr++ → gprpp}/manual_constructor.h +2 -2
  154. data/src/core/lib/{gpr++ → gprpp}/memory.h +14 -5
  155. data/src/core/lib/{gpr++ → gprpp}/orphanable.h +39 -14
  156. data/src/core/lib/{gpr++ → gprpp}/ref_counted.h +42 -10
  157. data/src/core/lib/{gpr++ → gprpp}/ref_counted_ptr.h +18 -8
  158. data/src/core/lib/http/format_request.cc +3 -3
  159. data/src/core/lib/http/httpcli.cc +6 -7
  160. data/src/core/lib/http/httpcli_security_connector.cc +10 -10
  161. data/src/core/lib/http/parser.cc +16 -12
  162. data/src/core/lib/iomgr/call_combiner.cc +12 -13
  163. data/src/core/lib/iomgr/closure.h +4 -6
  164. data/src/core/lib/iomgr/combiner.cc +10 -21
  165. data/src/core/lib/iomgr/error.cc +50 -55
  166. data/src/core/lib/iomgr/ev_epoll1_linux.cc +41 -52
  167. data/src/core/lib/iomgr/ev_epollex_linux.cc +80 -28
  168. data/src/core/lib/iomgr/ev_epollsig_linux.cc +23 -30
  169. data/src/core/lib/iomgr/ev_poll_posix.cc +52 -46
  170. data/src/core/lib/iomgr/ev_posix.cc +47 -6
  171. data/src/core/lib/iomgr/exec_ctx.cc +10 -10
  172. data/src/core/lib/iomgr/exec_ctx.h +1 -1
  173. data/src/core/lib/iomgr/executor.cc +16 -13
  174. data/src/core/lib/iomgr/fork_posix.cc +1 -3
  175. data/src/core/lib/iomgr/gethostname_host_name_max.cc +1 -1
  176. data/src/core/lib/iomgr/iocp_windows.cc +1 -2
  177. data/src/core/lib/iomgr/iomgr.cc +2 -2
  178. data/src/core/lib/iomgr/iomgr_uv.cc +2 -0
  179. data/src/core/lib/iomgr/iomgr_uv.h +1 -1
  180. data/src/core/lib/iomgr/is_epollexclusive_available.cc +5 -4
  181. data/src/core/lib/iomgr/load_file.cc +3 -3
  182. data/src/core/lib/iomgr/pollset_windows.cc +1 -1
  183. data/src/core/lib/iomgr/resolve_address_posix.cc +10 -9
  184. data/src/core/lib/iomgr/resolve_address_uv.cc +2 -2
  185. data/src/core/lib/iomgr/resolve_address_windows.cc +3 -2
  186. data/src/core/lib/iomgr/resource_quota.cc +36 -34
  187. data/src/core/lib/iomgr/sockaddr_utils.cc +39 -23
  188. data/src/core/lib/iomgr/socket_factory_posix.cc +5 -5
  189. data/src/core/lib/iomgr/socket_mutator.cc +7 -7
  190. data/src/core/lib/iomgr/socket_utils_common_posix.cc +7 -4
  191. data/src/core/lib/iomgr/socket_utils_linux.cc +3 -2
  192. data/src/core/lib/iomgr/tcp_client_posix.cc +7 -6
  193. data/src/core/lib/iomgr/tcp_client_windows.cc +0 -1
  194. data/src/core/lib/iomgr/tcp_posix.cc +47 -55
  195. data/src/core/lib/iomgr/tcp_server_posix.cc +12 -10
  196. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +7 -5
  197. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +4 -3
  198. data/src/core/lib/iomgr/tcp_windows.cc +1 -1
  199. data/src/core/lib/iomgr/timer_generic.cc +16 -14
  200. data/src/core/lib/iomgr/timer_heap.cc +8 -7
  201. data/src/core/lib/iomgr/timer_manager.cc +4 -3
  202. data/src/core/lib/iomgr/udp_server.cc +24 -16
  203. data/src/core/lib/iomgr/unix_sockets_posix.cc +15 -10
  204. data/src/core/lib/iomgr/wakeup_fd_cv.cc +6 -5
  205. data/src/core/lib/iomgr/wakeup_fd_eventfd.cc +1 -2
  206. data/src/core/lib/json/json.cc +1 -1
  207. data/src/core/lib/json/json_reader.cc +8 -6
  208. data/src/core/lib/json/json_string.cc +19 -18
  209. data/src/core/lib/json/json_writer.cc +10 -8
  210. data/src/core/lib/profiling/basic_timers.cc +1 -1
  211. data/src/core/lib/profiling/timers.h +3 -20
  212. data/src/core/lib/security/context/security_context.cc +16 -14
  213. data/src/core/lib/security/credentials/composite/composite_credentials.cc +17 -14
  214. data/src/core/lib/security/credentials/credentials.cc +9 -8
  215. data/src/core/lib/security/credentials/credentials.h +1 -1
  216. data/src/core/lib/security/credentials/credentials_metadata.cc +2 -2
  217. data/src/core/lib/security/credentials/fake/fake_credentials.cc +12 -13
  218. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +7 -4
  219. data/src/core/lib/security/credentials/iam/iam_credentials.cc +5 -3
  220. data/src/core/lib/security/credentials/jwt/json_token.cc +4 -3
  221. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +7 -7
  222. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +21 -18
  223. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +23 -18
  224. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +11 -7
  225. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +22 -21
  226. data/src/core/lib/security/{transport → security_connector}/security_connector.cc +46 -43
  227. data/src/core/lib/security/{transport → security_connector}/security_connector.h +3 -3
  228. data/src/core/lib/security/transport/client_auth_filter.cc +32 -34
  229. data/src/core/lib/security/transport/lb_targets_info.cc +7 -5
  230. data/src/core/lib/security/transport/secure_endpoint.cc +21 -21
  231. data/src/core/lib/security/transport/security_handshaker.cc +19 -18
  232. data/src/core/lib/security/transport/security_handshaker.h +1 -1
  233. data/src/core/lib/security/transport/server_auth_filter.cc +21 -21
  234. data/src/core/lib/slice/b64.cc +19 -16
  235. data/src/core/lib/slice/percent_encoding.cc +5 -5
  236. data/src/core/lib/slice/slice.cc +35 -33
  237. data/src/core/lib/slice/slice_buffer.cc +16 -14
  238. data/src/core/lib/slice/slice_hash_table.cc +3 -2
  239. data/src/core/lib/slice/slice_intern.cc +21 -25
  240. data/src/core/lib/slice/slice_string_helpers.cc +45 -9
  241. data/src/core/lib/slice/slice_string_helpers.h +6 -0
  242. data/src/core/lib/surface/byte_buffer.cc +2 -2
  243. data/src/core/lib/surface/byte_buffer_reader.cc +6 -3
  244. data/src/core/lib/surface/call.cc +171 -260
  245. data/src/core/lib/surface/call_test_only.h +1 -13
  246. data/src/core/lib/surface/channel.cc +20 -43
  247. data/src/core/lib/surface/channel_init.cc +7 -7
  248. data/src/core/lib/surface/channel_ping.cc +2 -2
  249. data/src/core/lib/surface/completion_queue.cc +69 -75
  250. data/src/core/lib/surface/init.cc +4 -5
  251. data/src/core/lib/surface/init_secure.cc +1 -1
  252. data/src/core/lib/surface/lame_client.cc +1 -1
  253. data/src/core/lib/surface/server.cc +64 -59
  254. data/src/core/lib/surface/version.cc +2 -2
  255. data/src/core/lib/transport/bdp_estimator.cc +6 -5
  256. data/src/core/lib/transport/byte_stream.cc +23 -14
  257. data/src/core/lib/transport/byte_stream.h +1 -1
  258. data/src/core/lib/transport/connectivity_state.cc +9 -13
  259. data/src/core/lib/transport/error_utils.cc +10 -7
  260. data/src/core/lib/transport/metadata.cc +27 -26
  261. data/src/core/lib/transport/metadata.h +1 -1
  262. data/src/core/lib/transport/pid_controller.cc +2 -1
  263. data/src/core/lib/transport/service_config.cc +5 -5
  264. data/src/core/lib/transport/static_metadata.cc +225 -222
  265. data/src/core/lib/transport/static_metadata.h +77 -76
  266. data/src/core/lib/transport/timeout_encoding.cc +3 -2
  267. data/src/core/lib/transport/transport.cc +6 -5
  268. data/src/core/lib/transport/transport_op_string.cc +0 -1
  269. data/src/core/plugin_registry/grpc_plugin_registry.cc +4 -4
  270. data/src/core/tsi/alts_transport_security.cc +61 -0
  271. data/src/core/tsi/{gts_transport_security.h → alts_transport_security.h} +16 -8
  272. data/src/core/tsi/fake_transport_security.cc +59 -43
  273. data/src/core/tsi/ssl_transport_security.cc +122 -107
  274. data/src/core/tsi/transport_security.cc +3 -3
  275. data/src/core/tsi/transport_security_adapter.cc +16 -10
  276. data/src/ruby/bin/apis/pubsub_demo.rb +1 -1
  277. data/src/ruby/ext/grpc/rb_channel.c +3 -4
  278. data/src/ruby/ext/grpc/rb_compression_options.c +13 -3
  279. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +4 -76
  280. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +8 -120
  281. data/src/ruby/ext/grpc/rb_server.c +52 -28
  282. data/src/ruby/lib/grpc/generic/rpc_server.rb +7 -4
  283. data/src/ruby/lib/grpc/version.rb +1 -1
  284. data/src/ruby/pb/test/client.rb +1 -1
  285. data/src/ruby/pb/test/server.rb +1 -1
  286. data/src/ruby/spec/client_server_spec.rb +4 -2
  287. data/src/ruby/spec/generic/active_call_spec.rb +2 -1
  288. data/src/ruby/spec/generic/client_stub_spec.rb +32 -8
  289. data/src/ruby/spec/server_spec.rb +26 -7
  290. data/third_party/boringssl/crypto/asn1/a_bitstr.c +7 -2
  291. data/third_party/boringssl/crypto/asn1/a_d2i_fp.c +15 -0
  292. data/third_party/boringssl/crypto/asn1/a_gentm.c +1 -1
  293. data/third_party/boringssl/crypto/asn1/a_print.c +0 -28
  294. data/third_party/boringssl/crypto/asn1/a_strnid.c +3 -0
  295. data/third_party/boringssl/crypto/asn1/a_time.c +17 -9
  296. data/third_party/boringssl/crypto/asn1/a_utctm.c +1 -1
  297. data/third_party/boringssl/crypto/asn1/asn1_lib.c +5 -49
  298. data/third_party/boringssl/crypto/asn1/asn1_locl.h +1 -1
  299. data/third_party/boringssl/crypto/asn1/tasn_dec.c +9 -9
  300. data/third_party/boringssl/crypto/asn1/tasn_enc.c +0 -6
  301. data/third_party/boringssl/crypto/asn1/time_support.c +5 -5
  302. data/third_party/boringssl/crypto/base64/base64.c +65 -43
  303. data/third_party/boringssl/crypto/bio/bio.c +134 -110
  304. data/third_party/boringssl/crypto/bio/bio_mem.c +9 -9
  305. data/third_party/boringssl/crypto/bio/connect.c +17 -17
  306. data/third_party/boringssl/crypto/bio/fd.c +2 -1
  307. data/third_party/boringssl/crypto/bio/file.c +14 -14
  308. data/third_party/boringssl/crypto/bio/hexdump.c +15 -16
  309. data/third_party/boringssl/crypto/bio/internal.h +14 -14
  310. data/third_party/boringssl/crypto/bio/pair.c +45 -45
  311. data/third_party/boringssl/crypto/bio/printf.c +6 -10
  312. data/third_party/boringssl/crypto/{bn → bn_extra}/bn_asn1.c +9 -9
  313. data/third_party/boringssl/crypto/{bn → bn_extra}/convert.c +18 -223
  314. data/third_party/boringssl/crypto/buf/buf.c +20 -44
  315. data/third_party/boringssl/crypto/bytestring/ber.c +35 -35
  316. data/third_party/boringssl/crypto/bytestring/cbb.c +24 -24
  317. data/third_party/boringssl/crypto/bytestring/cbs.c +33 -37
  318. data/third_party/boringssl/crypto/bytestring/internal.h +38 -38
  319. data/third_party/boringssl/crypto/chacha/chacha.c +7 -7
  320. data/third_party/boringssl/crypto/{asn1/t_bitst.c → cipher_extra/cipher_extra.c} +49 -38
  321. data/third_party/boringssl/crypto/{cipher → cipher_extra}/derive_key.c +0 -2
  322. data/third_party/boringssl/crypto/cipher_extra/e_aesctrhmac.c +281 -0
  323. data/third_party/boringssl/crypto/cipher_extra/e_aesgcmsiv.c +867 -0
  324. data/third_party/boringssl/crypto/cipher_extra/e_chacha20poly1305.c +326 -0
  325. data/third_party/boringssl/crypto/{cipher → cipher_extra}/e_null.c +0 -1
  326. data/third_party/boringssl/crypto/{cipher → cipher_extra}/e_rc2.c +22 -10
  327. data/third_party/boringssl/crypto/{cipher → cipher_extra}/e_rc4.c +0 -0
  328. data/third_party/boringssl/crypto/{cipher → cipher_extra}/e_ssl3.c +120 -64
  329. data/third_party/boringssl/crypto/{cipher → cipher_extra}/e_tls.c +220 -141
  330. data/third_party/boringssl/crypto/{asn1/x_bignum.c → cipher_extra/internal.h} +61 -86
  331. data/third_party/boringssl/crypto/cipher_extra/tls_cbc.c +482 -0
  332. data/third_party/boringssl/crypto/cmac/cmac.c +20 -20
  333. data/third_party/boringssl/crypto/conf/conf.c +32 -20
  334. data/third_party/boringssl/crypto/conf/internal.h +3 -3
  335. data/third_party/boringssl/crypto/cpu-aarch64-linux.c +5 -5
  336. data/third_party/boringssl/crypto/cpu-arm-linux.c +44 -41
  337. data/third_party/boringssl/crypto/cpu-intel.c +68 -43
  338. data/third_party/boringssl/crypto/cpu-ppc64le.c +5 -7
  339. data/third_party/boringssl/crypto/crypto.c +54 -32
  340. data/third_party/boringssl/crypto/curve25519/curve25519.c +269 -269
  341. data/third_party/boringssl/crypto/curve25519/internal.h +28 -8
  342. data/third_party/boringssl/crypto/curve25519/spake25519.c +180 -106
  343. data/third_party/boringssl/crypto/curve25519/x25519-x86_64.c +9 -9
  344. data/third_party/boringssl/crypto/dh/check.c +33 -34
  345. data/third_party/boringssl/crypto/dh/dh.c +72 -36
  346. data/third_party/boringssl/crypto/dh/dh_asn1.c +1 -1
  347. data/third_party/boringssl/crypto/dh/params.c +1 -161
  348. data/third_party/boringssl/crypto/digest_extra/digest_extra.c +240 -0
  349. data/third_party/boringssl/crypto/dsa/dsa.c +127 -87
  350. data/third_party/boringssl/crypto/dsa/dsa_asn1.c +1 -1
  351. data/third_party/boringssl/crypto/{ec → ec_extra}/ec_asn1.c +83 -70
  352. data/third_party/boringssl/crypto/ecdh/ecdh.c +1 -1
  353. data/third_party/boringssl/crypto/{ecdsa → ecdsa_extra}/ecdsa_asn1.c +86 -31
  354. data/third_party/boringssl/crypto/engine/engine.c +6 -6
  355. data/third_party/boringssl/crypto/err/err.c +197 -106
  356. data/third_party/boringssl/crypto/err/internal.h +58 -0
  357. data/third_party/boringssl/crypto/evp/digestsign.c +86 -14
  358. data/third_party/boringssl/crypto/evp/evp.c +6 -11
  359. data/third_party/boringssl/crypto/evp/evp_asn1.c +17 -17
  360. data/third_party/boringssl/crypto/evp/evp_ctx.c +15 -11
  361. data/third_party/boringssl/crypto/evp/internal.h +66 -51
  362. data/third_party/boringssl/crypto/evp/p_dsa_asn1.c +11 -11
  363. data/third_party/boringssl/crypto/evp/p_ec.c +10 -8
  364. data/third_party/boringssl/crypto/evp/p_ec_asn1.c +11 -12
  365. data/third_party/boringssl/crypto/evp/p_ed25519.c +71 -0
  366. data/third_party/boringssl/crypto/evp/p_ed25519_asn1.c +190 -0
  367. data/third_party/boringssl/crypto/evp/p_rsa.c +50 -95
  368. data/third_party/boringssl/crypto/evp/p_rsa_asn1.c +28 -18
  369. data/third_party/boringssl/crypto/evp/pbkdf.c +49 -56
  370. data/third_party/boringssl/crypto/evp/print.c +5 -36
  371. data/third_party/boringssl/crypto/evp/scrypt.c +209 -0
  372. data/third_party/boringssl/crypto/ex_data.c +15 -45
  373. data/third_party/boringssl/crypto/fipsmodule/aes/internal.h +100 -0
  374. data/third_party/boringssl/crypto/fipsmodule/bcm.c +679 -0
  375. data/third_party/boringssl/crypto/{bn → fipsmodule/bn}/internal.h +40 -27
  376. data/third_party/boringssl/crypto/{bn → fipsmodule/bn}/rsaz_exp.h +0 -0
  377. data/third_party/boringssl/crypto/{cipher → fipsmodule/cipher}/internal.h +34 -67
  378. data/third_party/boringssl/crypto/fipsmodule/delocate.h +88 -0
  379. data/third_party/boringssl/crypto/{des → fipsmodule/des}/internal.h +18 -4
  380. data/third_party/boringssl/crypto/{digest → fipsmodule/digest}/internal.h +18 -18
  381. data/third_party/boringssl/crypto/{digest → fipsmodule/digest}/md32_common.h +58 -64
  382. data/third_party/boringssl/crypto/{ec → fipsmodule/ec}/internal.h +58 -52
  383. data/third_party/boringssl/crypto/{ec → fipsmodule/ec}/p256-x86_64-table.h +11 -11
  384. data/third_party/boringssl/crypto/{ec → fipsmodule/ec}/p256-x86_64.h +32 -32
  385. data/third_party/boringssl/crypto/{rand/internal.h → fipsmodule/is_fips.c} +10 -15
  386. data/third_party/boringssl/crypto/{modes → fipsmodule/modes}/internal.h +112 -119
  387. data/third_party/boringssl/crypto/fipsmodule/rand/internal.h +92 -0
  388. data/third_party/boringssl/crypto/{rsa → fipsmodule/rsa}/internal.h +36 -49
  389. data/third_party/boringssl/crypto/hkdf/hkdf.c +6 -6
  390. data/third_party/boringssl/crypto/internal.h +301 -233
  391. data/third_party/boringssl/crypto/lhash/lhash.c +26 -45
  392. data/third_party/boringssl/crypto/mem.c +76 -33
  393. data/third_party/boringssl/crypto/obj/obj.c +44 -28
  394. data/third_party/boringssl/crypto/obj/obj_dat.h +102 -34
  395. data/third_party/boringssl/crypto/obj/obj_xref.c +6 -6
  396. data/third_party/boringssl/crypto/pem/pem_info.c +3 -5
  397. data/third_party/boringssl/crypto/pem/pem_lib.c +1 -6
  398. data/third_party/boringssl/crypto/pem/pem_pk8.c +1 -0
  399. data/third_party/boringssl/crypto/pem/pem_pkey.c +1 -1
  400. data/third_party/boringssl/crypto/pem/pem_xaux.c +0 -2
  401. data/third_party/boringssl/crypto/pkcs7/internal.h +49 -0
  402. data/third_party/boringssl/crypto/pkcs7/pkcs7.c +166 -0
  403. data/third_party/boringssl/crypto/{x509/pkcs7.c → pkcs7/pkcs7_x509.c} +27 -147
  404. data/third_party/boringssl/crypto/pkcs8/internal.h +34 -16
  405. data/third_party/boringssl/crypto/pkcs8/p5_pbev2.c +120 -39
  406. data/third_party/boringssl/crypto/pkcs8/pkcs8.c +144 -857
  407. data/third_party/boringssl/crypto/pkcs8/pkcs8_x509.c +789 -0
  408. data/third_party/boringssl/crypto/poly1305/internal.h +4 -3
  409. data/third_party/boringssl/crypto/poly1305/poly1305.c +14 -14
  410. data/third_party/boringssl/crypto/poly1305/poly1305_arm.c +11 -11
  411. data/third_party/boringssl/crypto/poly1305/poly1305_vec.c +41 -41
  412. data/third_party/boringssl/crypto/pool/internal.h +2 -2
  413. data/third_party/boringssl/crypto/pool/pool.c +15 -15
  414. data/third_party/boringssl/crypto/{rand → rand_extra}/deterministic.c +7 -7
  415. data/third_party/boringssl/crypto/rand_extra/forkunsafe.c +46 -0
  416. data/third_party/boringssl/crypto/{rand → rand_extra}/fuchsia.c +7 -7
  417. data/third_party/boringssl/crypto/rand_extra/rand_extra.c +70 -0
  418. data/third_party/boringssl/crypto/{rand → rand_extra}/windows.c +5 -5
  419. data/third_party/boringssl/crypto/refcount_c11.c +2 -2
  420. data/third_party/boringssl/crypto/refcount_lock.c +1 -1
  421. data/third_party/boringssl/crypto/{rsa → rsa_extra}/rsa_asn1.c +12 -120
  422. data/third_party/boringssl/crypto/stack/stack.c +13 -13
  423. data/third_party/boringssl/crypto/thread_none.c +1 -1
  424. data/third_party/boringssl/crypto/thread_pthread.c +1 -1
  425. data/third_party/boringssl/crypto/thread_win.c +40 -40
  426. data/third_party/boringssl/crypto/x509/a_sign.c +5 -12
  427. data/third_party/boringssl/crypto/x509/a_verify.c +6 -18
  428. data/third_party/boringssl/crypto/x509/algorithm.c +22 -6
  429. data/third_party/boringssl/crypto/x509/asn1_gen.c +30 -7
  430. data/third_party/boringssl/crypto/x509/by_dir.c +2 -2
  431. data/third_party/boringssl/crypto/x509/by_file.c +2 -2
  432. data/third_party/boringssl/crypto/x509/rsa_pss.c +5 -5
  433. data/third_party/boringssl/crypto/x509/t_x509.c +2 -1
  434. data/third_party/boringssl/crypto/x509/x509_def.c +5 -0
  435. data/third_party/boringssl/crypto/x509/x509_lu.c +35 -4
  436. data/third_party/boringssl/crypto/x509/x509_set.c +10 -0
  437. data/third_party/boringssl/crypto/x509/x509_vfy.c +20 -17
  438. data/third_party/boringssl/crypto/x509/x_name.c +13 -16
  439. data/third_party/boringssl/crypto/x509/x_x509.c +3 -3
  440. data/third_party/boringssl/crypto/x509/x_x509a.c +0 -7
  441. data/third_party/boringssl/crypto/x509v3/ext_dat.h +8 -0
  442. data/third_party/boringssl/crypto/x509v3/pcy_int.h +2 -2
  443. data/third_party/boringssl/crypto/x509v3/pcy_lib.c +0 -9
  444. data/third_party/boringssl/crypto/x509v3/pcy_node.c +1 -1
  445. data/third_party/boringssl/crypto/x509v3/pcy_tree.c +25 -15
  446. data/third_party/boringssl/crypto/x509v3/v3_alt.c +21 -11
  447. data/third_party/boringssl/crypto/x509v3/v3_cpols.c +9 -3
  448. data/third_party/boringssl/crypto/x509v3/v3_info.c +22 -14
  449. data/third_party/boringssl/crypto/x509v3/v3_ncons.c +27 -11
  450. data/third_party/boringssl/crypto/x509v3/v3_pci.c +0 -33
  451. data/third_party/boringssl/crypto/x509v3/v3_utl.c +4 -4
  452. data/third_party/boringssl/include/openssl/aead.h +280 -191
  453. data/third_party/boringssl/include/openssl/aes.h +50 -50
  454. data/third_party/boringssl/include/openssl/arm_arch.h +12 -12
  455. data/third_party/boringssl/include/openssl/asn1.h +14 -77
  456. data/third_party/boringssl/include/openssl/asn1t.h +11 -15
  457. data/third_party/boringssl/include/openssl/base.h +78 -51
  458. data/third_party/boringssl/include/openssl/base64.h +68 -68
  459. data/third_party/boringssl/include/openssl/bio.h +472 -406
  460. data/third_party/boringssl/include/openssl/blowfish.h +1 -1
  461. data/third_party/boringssl/include/openssl/bn.h +454 -435
  462. data/third_party/boringssl/include/openssl/buf.h +27 -27
  463. data/third_party/boringssl/include/openssl/bytestring.h +282 -267
  464. data/third_party/boringssl/include/openssl/cast.h +2 -2
  465. data/third_party/boringssl/include/openssl/chacha.h +5 -5
  466. data/third_party/boringssl/include/openssl/cipher.h +209 -200
  467. data/third_party/boringssl/include/openssl/cmac.h +27 -27
  468. data/third_party/boringssl/include/openssl/conf.h +49 -46
  469. data/third_party/boringssl/include/openssl/cpu.h +60 -45
  470. data/third_party/boringssl/include/openssl/crypto.h +59 -35
  471. data/third_party/boringssl/include/openssl/curve25519.h +97 -92
  472. data/third_party/boringssl/include/openssl/des.h +25 -25
  473. data/third_party/boringssl/include/openssl/dh.h +98 -97
  474. data/third_party/boringssl/include/openssl/digest.h +143 -114
  475. data/third_party/boringssl/include/openssl/dsa.h +217 -202
  476. data/third_party/boringssl/include/openssl/ec.h +132 -131
  477. data/third_party/boringssl/include/openssl/ec_key.h +132 -128
  478. data/third_party/boringssl/include/openssl/ecdh.h +9 -9
  479. data/third_party/boringssl/include/openssl/ecdsa.h +66 -66
  480. data/third_party/boringssl/include/openssl/engine.h +38 -38
  481. data/third_party/boringssl/include/openssl/err.h +189 -219
  482. data/third_party/boringssl/include/openssl/evp.h +473 -397
  483. data/third_party/boringssl/include/openssl/ex_data.h +46 -56
  484. data/third_party/boringssl/include/openssl/hkdf.h +17 -17
  485. data/third_party/boringssl/include/openssl/hmac.h +55 -43
  486. data/third_party/boringssl/include/openssl/is_boringssl.h +16 -0
  487. data/third_party/boringssl/include/openssl/lhash.h +67 -67
  488. data/third_party/boringssl/include/openssl/lhash_macros.h +4 -4
  489. data/third_party/boringssl/include/openssl/md4.h +14 -14
  490. data/third_party/boringssl/include/openssl/md5.h +14 -14
  491. data/third_party/boringssl/include/openssl/mem.h +39 -33
  492. data/third_party/boringssl/include/openssl/nid.h +43 -0
  493. data/third_party/boringssl/include/openssl/obj.h +93 -87
  494. data/third_party/boringssl/include/openssl/opensslconf.h +8 -1
  495. data/third_party/boringssl/include/openssl/pem.h +2 -122
  496. data/third_party/boringssl/include/openssl/pkcs7.h +68 -2
  497. data/third_party/boringssl/include/openssl/pkcs8.h +81 -66
  498. data/third_party/boringssl/include/openssl/poly1305.h +11 -11
  499. data/third_party/boringssl/include/openssl/pool.h +29 -25
  500. data/third_party/boringssl/include/openssl/rand.h +48 -45
  501. data/third_party/boringssl/include/openssl/rc4.h +9 -9
  502. data/third_party/boringssl/include/openssl/ripemd.h +13 -13
  503. data/third_party/boringssl/include/openssl/rsa.h +371 -340
  504. data/third_party/boringssl/include/openssl/sha.h +71 -71
  505. data/third_party/boringssl/include/openssl/span.h +191 -0
  506. data/third_party/boringssl/include/openssl/ssl.h +2639 -2519
  507. data/third_party/boringssl/include/openssl/ssl3.h +39 -122
  508. data/third_party/boringssl/include/openssl/stack.h +355 -164
  509. data/third_party/boringssl/include/openssl/thread.h +43 -43
  510. data/third_party/boringssl/include/openssl/tls1.h +60 -63
  511. data/third_party/boringssl/include/openssl/type_check.h +10 -14
  512. data/third_party/boringssl/include/openssl/x509.h +41 -116
  513. data/third_party/boringssl/include/openssl/x509_vfy.h +17 -25
  514. data/third_party/boringssl/include/openssl/x509v3.h +27 -21
  515. data/third_party/boringssl/ssl/{bio_ssl.c → bio_ssl.cc} +9 -5
  516. data/third_party/boringssl/ssl/{custom_extensions.c → custom_extensions.cc} +19 -12
  517. data/third_party/boringssl/ssl/{d1_both.c → d1_both.cc} +224 -193
  518. data/third_party/boringssl/ssl/{d1_lib.c → d1_lib.cc} +86 -79
  519. data/third_party/boringssl/ssl/{d1_pkt.c → d1_pkt.cc} +55 -87
  520. data/third_party/boringssl/ssl/{d1_srtp.c → d1_srtp.cc} +12 -16
  521. data/third_party/boringssl/ssl/{dtls_method.c → dtls_method.cc} +33 -50
  522. data/third_party/boringssl/ssl/{dtls_record.c → dtls_record.cc} +76 -64
  523. data/third_party/boringssl/ssl/handshake.cc +547 -0
  524. data/third_party/boringssl/ssl/handshake_client.cc +1828 -0
  525. data/third_party/boringssl/ssl/handshake_server.cc +1672 -0
  526. data/third_party/boringssl/ssl/internal.h +2027 -1280
  527. data/third_party/boringssl/ssl/s3_both.cc +603 -0
  528. data/third_party/boringssl/ssl/{s3_lib.c → s3_lib.cc} +22 -10
  529. data/third_party/boringssl/ssl/{s3_pkt.c → s3_pkt.cc} +171 -75
  530. data/third_party/boringssl/ssl/ssl_aead_ctx.cc +415 -0
  531. data/third_party/boringssl/ssl/{ssl_asn1.c → ssl_asn1.cc} +257 -261
  532. data/third_party/boringssl/ssl/{ssl_buffer.c → ssl_buffer.cc} +81 -97
  533. data/third_party/boringssl/ssl/{ssl_cert.c → ssl_cert.cc} +304 -414
  534. data/third_party/boringssl/ssl/{ssl_cipher.c → ssl_cipher.cc} +427 -505
  535. data/third_party/boringssl/ssl/{ssl_file.c → ssl_file.cc} +24 -16
  536. data/third_party/boringssl/ssl/ssl_key_share.cc +245 -0
  537. data/third_party/boringssl/ssl/{ssl_lib.c → ssl_lib.cc} +665 -828
  538. data/third_party/boringssl/ssl/ssl_privkey.cc +518 -0
  539. data/third_party/boringssl/ssl/{ssl_session.c → ssl_session.cc} +596 -471
  540. data/third_party/boringssl/ssl/{ssl_stat.c → ssl_stat.cc} +5 -224
  541. data/third_party/boringssl/ssl/{ssl_transcript.c → ssl_transcript.cc} +117 -140
  542. data/third_party/boringssl/ssl/ssl_versions.cc +439 -0
  543. data/third_party/boringssl/ssl/{ssl_x509.c → ssl_x509.cc} +751 -267
  544. data/third_party/boringssl/ssl/{t1_enc.c → t1_enc.cc} +120 -161
  545. data/third_party/boringssl/ssl/{t1_lib.c → t1_lib.cc} +859 -966
  546. data/third_party/boringssl/ssl/{tls13_both.c → tls13_both.cc} +202 -284
  547. data/third_party/boringssl/ssl/tls13_client.cc +842 -0
  548. data/third_party/boringssl/ssl/{tls13_enc.c → tls13_enc.cc} +108 -90
  549. data/third_party/boringssl/ssl/tls13_server.cc +967 -0
  550. data/third_party/boringssl/ssl/{tls_method.c → tls_method.cc} +94 -73
  551. data/third_party/boringssl/ssl/tls_record.cc +675 -0
  552. metadata +117 -168
  553. data/include/grpc/support/cmdline.h +0 -88
  554. data/include/grpc/support/subprocess.h +0 -44
  555. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h +0 -29
  556. data/src/core/ext/filters/client_channel/resolver_factory.cc +0 -40
  557. data/src/core/lib/gpr/cmdline.cc +0 -330
  558. data/src/core/lib/gpr/subprocess_posix.cc +0 -99
  559. data/src/core/lib/gpr/subprocess_windows.cc +0 -126
  560. data/src/core/lib/surface/alarm.cc +0 -137
  561. data/src/core/lib/surface/alarm_internal.h +0 -40
  562. data/src/core/tsi/gts_transport_security.cc +0 -40
  563. data/third_party/boringssl/crypto/aes/aes.c +0 -1142
  564. data/third_party/boringssl/crypto/aes/internal.h +0 -87
  565. data/third_party/boringssl/crypto/aes/key_wrap.c +0 -138
  566. data/third_party/boringssl/crypto/aes/mode_wrappers.c +0 -112
  567. data/third_party/boringssl/crypto/asn1/x_long.c +0 -200
  568. data/third_party/boringssl/crypto/bn/add.c +0 -377
  569. data/third_party/boringssl/crypto/bn/asm/x86_64-gcc.c +0 -532
  570. data/third_party/boringssl/crypto/bn/bn.c +0 -365
  571. data/third_party/boringssl/crypto/bn/cmp.c +0 -239
  572. data/third_party/boringssl/crypto/bn/ctx.c +0 -313
  573. data/third_party/boringssl/crypto/bn/div.c +0 -728
  574. data/third_party/boringssl/crypto/bn/exponentiation.c +0 -1240
  575. data/third_party/boringssl/crypto/bn/gcd.c +0 -635
  576. data/third_party/boringssl/crypto/bn/generic.c +0 -707
  577. data/third_party/boringssl/crypto/bn/kronecker.c +0 -176
  578. data/third_party/boringssl/crypto/bn/montgomery.c +0 -409
  579. data/third_party/boringssl/crypto/bn/montgomery_inv.c +0 -207
  580. data/third_party/boringssl/crypto/bn/mul.c +0 -871
  581. data/third_party/boringssl/crypto/bn/prime.c +0 -861
  582. data/third_party/boringssl/crypto/bn/random.c +0 -343
  583. data/third_party/boringssl/crypto/bn/rsaz_exp.c +0 -254
  584. data/third_party/boringssl/crypto/bn/shift.c +0 -307
  585. data/third_party/boringssl/crypto/bn/sqrt.c +0 -506
  586. data/third_party/boringssl/crypto/cipher/aead.c +0 -156
  587. data/third_party/boringssl/crypto/cipher/cipher.c +0 -657
  588. data/third_party/boringssl/crypto/cipher/e_aes.c +0 -1771
  589. data/third_party/boringssl/crypto/cipher/e_chacha20poly1305.c +0 -276
  590. data/third_party/boringssl/crypto/cipher/e_des.c +0 -205
  591. data/third_party/boringssl/crypto/cipher/tls_cbc.c +0 -482
  592. data/third_party/boringssl/crypto/des/des.c +0 -771
  593. data/third_party/boringssl/crypto/digest/digest.c +0 -251
  594. data/third_party/boringssl/crypto/digest/digests.c +0 -358
  595. data/third_party/boringssl/crypto/ec/ec.c +0 -847
  596. data/third_party/boringssl/crypto/ec/ec_key.c +0 -479
  597. data/third_party/boringssl/crypto/ec/ec_montgomery.c +0 -303
  598. data/third_party/boringssl/crypto/ec/oct.c +0 -416
  599. data/third_party/boringssl/crypto/ec/p224-64.c +0 -1143
  600. data/third_party/boringssl/crypto/ec/p256-64.c +0 -1701
  601. data/third_party/boringssl/crypto/ec/p256-x86_64.c +0 -561
  602. data/third_party/boringssl/crypto/ec/simple.c +0 -1118
  603. data/third_party/boringssl/crypto/ec/util-64.c +0 -109
  604. data/third_party/boringssl/crypto/ec/wnaf.c +0 -458
  605. data/third_party/boringssl/crypto/ecdsa/ecdsa.c +0 -479
  606. data/third_party/boringssl/crypto/hmac/hmac.c +0 -215
  607. data/third_party/boringssl/crypto/md4/md4.c +0 -236
  608. data/third_party/boringssl/crypto/md5/md5.c +0 -285
  609. data/third_party/boringssl/crypto/modes/cbc.c +0 -212
  610. data/third_party/boringssl/crypto/modes/cfb.c +0 -230
  611. data/third_party/boringssl/crypto/modes/ctr.c +0 -219
  612. data/third_party/boringssl/crypto/modes/gcm.c +0 -1071
  613. data/third_party/boringssl/crypto/modes/ofb.c +0 -95
  614. data/third_party/boringssl/crypto/modes/polyval.c +0 -94
  615. data/third_party/boringssl/crypto/pkcs8/p8_pkey.c +0 -85
  616. data/third_party/boringssl/crypto/rand/rand.c +0 -244
  617. data/third_party/boringssl/crypto/rand/urandom.c +0 -335
  618. data/third_party/boringssl/crypto/rsa/blinding.c +0 -265
  619. data/third_party/boringssl/crypto/rsa/padding.c +0 -708
  620. data/third_party/boringssl/crypto/rsa/rsa.c +0 -830
  621. data/third_party/boringssl/crypto/rsa/rsa_impl.c +0 -1100
  622. data/third_party/boringssl/crypto/sha/sha1-altivec.c +0 -346
  623. data/third_party/boringssl/crypto/sha/sha1.c +0 -355
  624. data/third_party/boringssl/crypto/sha/sha256.c +0 -329
  625. data/third_party/boringssl/crypto/sha/sha512.c +0 -609
  626. data/third_party/boringssl/crypto/x509/x509type.c +0 -126
  627. data/third_party/boringssl/include/openssl/stack_macros.h +0 -3987
  628. data/third_party/boringssl/ssl/handshake_client.c +0 -1883
  629. data/third_party/boringssl/ssl/handshake_server.c +0 -1950
  630. data/third_party/boringssl/ssl/s3_both.c +0 -895
  631. data/third_party/boringssl/ssl/ssl_aead_ctx.c +0 -335
  632. data/third_party/boringssl/ssl/ssl_ecdh.c +0 -465
  633. data/third_party/boringssl/ssl/ssl_privkey.c +0 -683
  634. data/third_party/boringssl/ssl/ssl_privkey_cc.cc +0 -76
  635. data/third_party/boringssl/ssl/tls13_client.c +0 -712
  636. data/third_party/boringssl/ssl/tls13_server.c +0 -680
  637. data/third_party/boringssl/ssl/tls_record.c +0 -556
@@ -26,6 +26,7 @@
26
26
 
27
27
  #include "internal.h"
28
28
  #include "../internal.h"
29
+ #include "../fipsmodule/cipher/internal.h"
29
30
 
30
31
 
31
32
  typedef struct {
@@ -39,8 +40,8 @@ static int ssl3_mac(AEAD_SSL3_CTX *ssl3_ctx, uint8_t *out, unsigned *out_len,
39
40
  size_t md_size = EVP_MD_CTX_size(&ssl3_ctx->md_ctx);
40
41
  size_t pad_len = (md_size == 20) ? 40 : 48;
41
42
 
42
- /* To allow for CBC mode which changes cipher length, |ad| doesn't include the
43
- * length for legacy ciphers. */
43
+ // To allow for CBC mode which changes cipher length, |ad| doesn't include the
44
+ // length for legacy ciphers.
44
45
  uint8_t ad_extra[2];
45
46
  ad_extra[0] = (uint8_t)(in_len >> 8);
46
47
  ad_extra[1] = (uint8_t)(in_len & 0xff);
@@ -122,28 +123,48 @@ static int aead_ssl3_init(EVP_AEAD_CTX *ctx, const uint8_t *key, size_t key_len,
122
123
  return 1;
123
124
  }
124
125
 
125
- static int aead_ssl3_seal(const EVP_AEAD_CTX *ctx, uint8_t *out,
126
- size_t *out_len, size_t max_out_len,
127
- const uint8_t *nonce, size_t nonce_len,
128
- const uint8_t *in, size_t in_len,
129
- const uint8_t *ad, size_t ad_len) {
126
+ static size_t aead_ssl3_tag_len(const EVP_AEAD_CTX *ctx, const size_t in_len,
127
+ const size_t extra_in_len) {
128
+ assert(extra_in_len == 0);
129
+ const AEAD_SSL3_CTX *ssl3_ctx = (AEAD_SSL3_CTX*)ctx->aead_state;
130
+
131
+ const size_t digest_len = EVP_MD_CTX_size(&ssl3_ctx->md_ctx);
132
+ if (EVP_CIPHER_CTX_mode(&ssl3_ctx->cipher_ctx) != EVP_CIPH_CBC_MODE) {
133
+ // The NULL cipher.
134
+ return digest_len;
135
+ }
136
+
137
+ const size_t block_size = EVP_CIPHER_CTX_block_size(&ssl3_ctx->cipher_ctx);
138
+ // An overflow of |in_len + digest_len| doesn't affect the result mod
139
+ // |block_size|, provided that |block_size| is a smaller power of two.
140
+ assert(block_size != 0 && (block_size & (block_size - 1)) == 0);
141
+ const size_t pad_len = block_size - ((in_len + digest_len) % block_size);
142
+ return digest_len + pad_len;
143
+ }
144
+
145
+ static int aead_ssl3_seal_scatter(const EVP_AEAD_CTX *ctx, uint8_t *out,
146
+ uint8_t *out_tag, size_t *out_tag_len,
147
+ const size_t max_out_tag_len,
148
+ const uint8_t *nonce, const size_t nonce_len,
149
+ const uint8_t *in, const size_t in_len,
150
+ const uint8_t *extra_in,
151
+ const size_t extra_in_len, const uint8_t *ad,
152
+ const size_t ad_len) {
130
153
  AEAD_SSL3_CTX *ssl3_ctx = (AEAD_SSL3_CTX *)ctx->aead_state;
131
- size_t total = 0;
132
154
 
133
155
  if (!ssl3_ctx->cipher_ctx.encrypt) {
134
- /* Unlike a normal AEAD, an SSL3 AEAD may only be used in one direction. */
156
+ // Unlike a normal AEAD, an SSL3 AEAD may only be used in one direction.
135
157
  OPENSSL_PUT_ERROR(CIPHER, CIPHER_R_INVALID_OPERATION);
136
158
  return 0;
137
159
  }
138
160
 
139
- if (in_len + EVP_AEAD_max_overhead(ctx->aead) < in_len ||
140
- in_len > INT_MAX) {
141
- /* EVP_CIPHER takes int as input. */
161
+ if (in_len > INT_MAX) {
162
+ // EVP_CIPHER takes int as input.
142
163
  OPENSSL_PUT_ERROR(CIPHER, CIPHER_R_TOO_LARGE);
143
164
  return 0;
144
165
  }
145
166
 
146
- if (max_out_len < in_len + EVP_AEAD_max_overhead(ctx->aead)) {
167
+ if (max_out_tag_len < aead_ssl3_tag_len(ctx, in_len, extra_in_len)) {
147
168
  OPENSSL_PUT_ERROR(CIPHER, CIPHER_R_BUFFER_TOO_SMALL);
148
169
  return 0;
149
170
  }
@@ -158,52 +179,71 @@ static int aead_ssl3_seal(const EVP_AEAD_CTX *ctx, uint8_t *out,
158
179
  return 0;
159
180
  }
160
181
 
161
- /* Compute the MAC. This must be first in case the operation is being done
162
- * in-place. */
182
+ // Compute the MAC. This must be first in case the operation is being done
183
+ // in-place.
163
184
  uint8_t mac[EVP_MAX_MD_SIZE];
164
185
  unsigned mac_len;
165
186
  if (!ssl3_mac(ssl3_ctx, mac, &mac_len, ad, ad_len, in, in_len)) {
166
187
  return 0;
167
188
  }
168
189
 
169
- /* Encrypt the input. */
190
+ // Encrypt the input.
170
191
  int len;
171
192
  if (!EVP_EncryptUpdate(&ssl3_ctx->cipher_ctx, out, &len, in,
172
193
  (int)in_len)) {
173
194
  return 0;
174
195
  }
175
- total = len;
176
196
 
177
- /* Feed the MAC into the cipher. */
178
- if (!EVP_EncryptUpdate(&ssl3_ctx->cipher_ctx, out + total, &len, mac,
179
- (int)mac_len)) {
197
+ const size_t block_size = EVP_CIPHER_CTX_block_size(&ssl3_ctx->cipher_ctx);
198
+
199
+ // Feed the MAC into the cipher in two steps. First complete the final partial
200
+ // block from encrypting the input and split the result between |out| and
201
+ // |out_tag|. Then encrypt the remainder.
202
+
203
+ size_t early_mac_len = (block_size - (in_len % block_size)) % block_size;
204
+ if (early_mac_len != 0) {
205
+ assert(len + block_size - early_mac_len == in_len);
206
+ uint8_t buf[EVP_MAX_BLOCK_LENGTH];
207
+ int buf_len;
208
+ if (!EVP_EncryptUpdate(&ssl3_ctx->cipher_ctx, buf, &buf_len, mac,
209
+ (int)early_mac_len)) {
210
+ return 0;
211
+ }
212
+ assert(buf_len == (int)block_size);
213
+ OPENSSL_memcpy(out + len, buf, block_size - early_mac_len);
214
+ OPENSSL_memcpy(out_tag, buf + block_size - early_mac_len, early_mac_len);
215
+ }
216
+ size_t tag_len = early_mac_len;
217
+
218
+ if (!EVP_EncryptUpdate(&ssl3_ctx->cipher_ctx, out_tag + tag_len, &len,
219
+ mac + tag_len, mac_len - tag_len)) {
180
220
  return 0;
181
221
  }
182
- total += len;
222
+ tag_len += len;
183
223
 
184
- unsigned block_size = EVP_CIPHER_CTX_block_size(&ssl3_ctx->cipher_ctx);
185
224
  if (block_size > 1) {
186
225
  assert(block_size <= 256);
187
226
  assert(EVP_CIPHER_CTX_mode(&ssl3_ctx->cipher_ctx) == EVP_CIPH_CBC_MODE);
188
227
 
189
- /* Compute padding and feed that into the cipher. */
228
+ // Compute padding and feed that into the cipher.
190
229
  uint8_t padding[256];
191
- unsigned padding_len = block_size - ((in_len + mac_len) % block_size);
230
+ size_t padding_len = block_size - ((in_len + mac_len) % block_size);
192
231
  OPENSSL_memset(padding, 0, padding_len - 1);
193
232
  padding[padding_len - 1] = padding_len - 1;
194
- if (!EVP_EncryptUpdate(&ssl3_ctx->cipher_ctx, out + total, &len, padding,
233
+ if (!EVP_EncryptUpdate(&ssl3_ctx->cipher_ctx, out_tag + tag_len, &len, padding,
195
234
  (int)padding_len)) {
196
235
  return 0;
197
236
  }
198
- total += len;
237
+ tag_len += len;
199
238
  }
200
239
 
201
- if (!EVP_EncryptFinal_ex(&ssl3_ctx->cipher_ctx, out + total, &len)) {
240
+ if (!EVP_EncryptFinal_ex(&ssl3_ctx->cipher_ctx, out_tag + tag_len, &len)) {
202
241
  return 0;
203
242
  }
204
- total += len;
243
+ tag_len += len;
244
+ assert(tag_len == aead_ssl3_tag_len(ctx, in_len, extra_in_len));
205
245
 
206
- *out_len = total;
246
+ *out_tag_len = tag_len;
207
247
  return 1;
208
248
  }
209
249
 
@@ -215,7 +255,7 @@ static int aead_ssl3_open(const EVP_AEAD_CTX *ctx, uint8_t *out,
215
255
  AEAD_SSL3_CTX *ssl3_ctx = (AEAD_SSL3_CTX *)ctx->aead_state;
216
256
 
217
257
  if (ssl3_ctx->cipher_ctx.encrypt) {
218
- /* Unlike a normal AEAD, an SSL3 AEAD may only be used in one direction. */
258
+ // Unlike a normal AEAD, an SSL3 AEAD may only be used in one direction.
219
259
  OPENSSL_PUT_ERROR(CIPHER, CIPHER_R_INVALID_OPERATION);
220
260
  return 0;
221
261
  }
@@ -227,8 +267,8 @@ static int aead_ssl3_open(const EVP_AEAD_CTX *ctx, uint8_t *out,
227
267
  }
228
268
 
229
269
  if (max_out_len < in_len) {
230
- /* This requires that the caller provide space for the MAC, even though it
231
- * will always be removed on return. */
270
+ // This requires that the caller provide space for the MAC, even though it
271
+ // will always be removed on return.
232
272
  OPENSSL_PUT_ERROR(CIPHER, CIPHER_R_BUFFER_TOO_SMALL);
233
273
  return 0;
234
274
  }
@@ -244,12 +284,12 @@ static int aead_ssl3_open(const EVP_AEAD_CTX *ctx, uint8_t *out,
244
284
  }
245
285
 
246
286
  if (in_len > INT_MAX) {
247
- /* EVP_CIPHER takes int as input. */
287
+ // EVP_CIPHER takes int as input.
248
288
  OPENSSL_PUT_ERROR(CIPHER, CIPHER_R_TOO_LARGE);
249
289
  return 0;
250
290
  }
251
291
 
252
- /* Decrypt to get the plaintext + MAC + padding. */
292
+ // Decrypt to get the plaintext + MAC + padding.
253
293
  size_t total = 0;
254
294
  int len;
255
295
  if (!EVP_DecryptUpdate(&ssl3_ctx->cipher_ctx, out, &len, in, (int)in_len)) {
@@ -262,9 +302,9 @@ static int aead_ssl3_open(const EVP_AEAD_CTX *ctx, uint8_t *out,
262
302
  total += len;
263
303
  assert(total == in_len);
264
304
 
265
- /* Remove CBC padding and MAC. This would normally be timing-sensitive, but
266
- * SSLv3 CBC ciphers are already broken. Support will be removed eventually.
267
- * https://www.openssl.org/~bodo/ssl-poodle.pdf */
305
+ // Remove CBC padding and MAC. This would normally be timing-sensitive, but
306
+ // SSLv3 CBC ciphers are already broken. Support will be removed eventually.
307
+ // https://www.openssl.org/~bodo/ssl-poodle.pdf
268
308
  size_t data_len;
269
309
  if (EVP_CIPHER_CTX_mode(&ssl3_ctx->cipher_ctx) == EVP_CIPH_CBC_MODE) {
270
310
  unsigned padding_length = out[total - 1];
@@ -272,7 +312,7 @@ static int aead_ssl3_open(const EVP_AEAD_CTX *ctx, uint8_t *out,
272
312
  OPENSSL_PUT_ERROR(CIPHER, CIPHER_R_BAD_DECRYPT);
273
313
  return 0;
274
314
  }
275
- /* The padding must be minimal. */
315
+ // The padding must be minimal.
276
316
  if (padding_length + 1 > EVP_CIPHER_CTX_block_size(&ssl3_ctx->cipher_ctx)) {
277
317
  OPENSSL_PUT_ERROR(CIPHER, CIPHER_R_BAD_DECRYPT);
278
318
  return 0;
@@ -282,7 +322,7 @@ static int aead_ssl3_open(const EVP_AEAD_CTX *ctx, uint8_t *out,
282
322
  data_len = total - mac_len;
283
323
  }
284
324
 
285
- /* Compute the MAC and compare against the one in the record. */
325
+ // Compute the MAC and compare against the one in the record.
286
326
  uint8_t mac[EVP_MAX_MD_SIZE];
287
327
  if (!ssl3_mac(ssl3_ctx, mac, NULL, ad, ad_len, out, data_len)) {
288
328
  return 0;
@@ -338,55 +378,71 @@ static int aead_null_sha1_ssl3_init(EVP_AEAD_CTX *ctx, const uint8_t *key,
338
378
  }
339
379
 
340
380
  static const EVP_AEAD aead_aes_128_cbc_sha1_ssl3 = {
341
- SHA_DIGEST_LENGTH + 16 + 16, /* key len (SHA1 + AES128 + IV) */
342
- 0, /* nonce len */
343
- 16 + SHA_DIGEST_LENGTH, /* overhead (padding + SHA1) */
344
- SHA_DIGEST_LENGTH, /* max tag length */
345
- NULL, /* init */
381
+ SHA_DIGEST_LENGTH + 16 + 16, // key len (SHA1 + AES128 + IV)
382
+ 0, // nonce len
383
+ 16 + SHA_DIGEST_LENGTH, // overhead (padding + SHA1)
384
+ SHA_DIGEST_LENGTH, // max tag length
385
+ 0, // seal_scatter_supports_extra_in
386
+
387
+ NULL, // init
346
388
  aead_aes_128_cbc_sha1_ssl3_init,
347
389
  aead_ssl3_cleanup,
348
- aead_ssl3_seal,
349
390
  aead_ssl3_open,
391
+ aead_ssl3_seal_scatter,
392
+ NULL, // open_gather
350
393
  aead_ssl3_get_iv,
394
+ aead_ssl3_tag_len,
351
395
  };
352
396
 
353
397
  static const EVP_AEAD aead_aes_256_cbc_sha1_ssl3 = {
354
- SHA_DIGEST_LENGTH + 32 + 16, /* key len (SHA1 + AES256 + IV) */
355
- 0, /* nonce len */
356
- 16 + SHA_DIGEST_LENGTH, /* overhead (padding + SHA1) */
357
- SHA_DIGEST_LENGTH, /* max tag length */
358
- NULL, /* init */
398
+ SHA_DIGEST_LENGTH + 32 + 16, // key len (SHA1 + AES256 + IV)
399
+ 0, // nonce len
400
+ 16 + SHA_DIGEST_LENGTH, // overhead (padding + SHA1)
401
+ SHA_DIGEST_LENGTH, // max tag length
402
+ 0, // seal_scatter_supports_extra_in
403
+
404
+ NULL, // init
359
405
  aead_aes_256_cbc_sha1_ssl3_init,
360
406
  aead_ssl3_cleanup,
361
- aead_ssl3_seal,
362
407
  aead_ssl3_open,
408
+ aead_ssl3_seal_scatter,
409
+ NULL, // open_gather
363
410
  aead_ssl3_get_iv,
411
+ aead_ssl3_tag_len,
364
412
  };
365
413
 
366
414
  static const EVP_AEAD aead_des_ede3_cbc_sha1_ssl3 = {
367
- SHA_DIGEST_LENGTH + 24 + 8, /* key len (SHA1 + 3DES + IV) */
368
- 0, /* nonce len */
369
- 8 + SHA_DIGEST_LENGTH, /* overhead (padding + SHA1) */
370
- SHA_DIGEST_LENGTH, /* max tag length */
371
- NULL, /* init */
415
+ SHA_DIGEST_LENGTH + 24 + 8, // key len (SHA1 + 3DES + IV)
416
+ 0, // nonce len
417
+ 8 + SHA_DIGEST_LENGTH, // overhead (padding + SHA1)
418
+ SHA_DIGEST_LENGTH, // max tag length
419
+ 0, // seal_scatter_supports_extra_in
420
+
421
+ NULL, // init
372
422
  aead_des_ede3_cbc_sha1_ssl3_init,
373
423
  aead_ssl3_cleanup,
374
- aead_ssl3_seal,
375
424
  aead_ssl3_open,
425
+ aead_ssl3_seal_scatter,
426
+ NULL, // open_gather
376
427
  aead_ssl3_get_iv,
428
+ aead_ssl3_tag_len,
377
429
  };
378
430
 
379
431
  static const EVP_AEAD aead_null_sha1_ssl3 = {
380
- SHA_DIGEST_LENGTH, /* key len */
381
- 0, /* nonce len */
382
- SHA_DIGEST_LENGTH, /* overhead (SHA1) */
383
- SHA_DIGEST_LENGTH, /* max tag length */
384
- NULL, /* init */
432
+ SHA_DIGEST_LENGTH, // key len
433
+ 0, // nonce len
434
+ SHA_DIGEST_LENGTH, // overhead (SHA1)
435
+ SHA_DIGEST_LENGTH, // max tag length
436
+ 0, // seal_scatter_supports_extra_in
437
+
438
+ NULL, // init
385
439
  aead_null_sha1_ssl3_init,
386
440
  aead_ssl3_cleanup,
387
- aead_ssl3_seal,
388
441
  aead_ssl3_open,
389
- NULL, /* get_iv */
442
+ aead_ssl3_seal_scatter,
443
+ NULL, // open_gather
444
+ NULL, // get_iv
445
+ aead_ssl3_tag_len,
390
446
  };
391
447
 
392
448
  const EVP_AEAD *EVP_aead_aes_128_cbc_sha1_ssl3(void) {
@@ -25,6 +25,7 @@
25
25
  #include <openssl/sha.h>
26
26
  #include <openssl/type_check.h>
27
27
 
28
+ #include "../fipsmodule/cipher/internal.h"
28
29
  #include "../internal.h"
29
30
  #include "internal.h"
30
31
 
@@ -32,12 +33,12 @@
32
33
  typedef struct {
33
34
  EVP_CIPHER_CTX cipher_ctx;
34
35
  HMAC_CTX hmac_ctx;
35
- /* mac_key is the portion of the key used for the MAC. It is retained
36
- * separately for the constant-time CBC code. */
36
+ // mac_key is the portion of the key used for the MAC. It is retained
37
+ // separately for the constant-time CBC code.
37
38
  uint8_t mac_key[EVP_MAX_MD_SIZE];
38
39
  uint8_t mac_key_len;
39
- /* implicit_iv is one iff this is a pre-TLS-1.1 CBC cipher without an explicit
40
- * IV. */
40
+ // implicit_iv is one iff this is a pre-TLS-1.1 CBC cipher without an explicit
41
+ // IV.
41
42
  char implicit_iv;
42
43
  } AEAD_TLS_CTX;
43
44
 
@@ -47,7 +48,6 @@ static void aead_tls_cleanup(EVP_AEAD_CTX *ctx) {
47
48
  AEAD_TLS_CTX *tls_ctx = (AEAD_TLS_CTX *)ctx->aead_state;
48
49
  EVP_CIPHER_CTX_cleanup(&tls_ctx->cipher_ctx);
49
50
  HMAC_CTX_cleanup(&tls_ctx->hmac_ctx);
50
- OPENSSL_cleanse(&tls_ctx->mac_key, sizeof(tls_ctx->mac_key));
51
51
  OPENSSL_free(tls_ctx);
52
52
  ctx->aead_state = NULL;
53
53
  }
@@ -98,28 +98,48 @@ static int aead_tls_init(EVP_AEAD_CTX *ctx, const uint8_t *key, size_t key_len,
98
98
  return 1;
99
99
  }
100
100
 
101
- static int aead_tls_seal(const EVP_AEAD_CTX *ctx, uint8_t *out,
102
- size_t *out_len, size_t max_out_len,
103
- const uint8_t *nonce, size_t nonce_len,
104
- const uint8_t *in, size_t in_len,
105
- const uint8_t *ad, size_t ad_len) {
101
+ static size_t aead_tls_tag_len(const EVP_AEAD_CTX *ctx, const size_t in_len,
102
+ const size_t extra_in_len) {
103
+ assert(extra_in_len == 0);
104
+ AEAD_TLS_CTX *tls_ctx = (AEAD_TLS_CTX *)ctx->aead_state;
105
+
106
+ const size_t hmac_len = HMAC_size(&tls_ctx->hmac_ctx);
107
+ if (EVP_CIPHER_CTX_mode(&tls_ctx->cipher_ctx) != EVP_CIPH_CBC_MODE) {
108
+ // The NULL cipher.
109
+ return hmac_len;
110
+ }
111
+
112
+ const size_t block_size = EVP_CIPHER_CTX_block_size(&tls_ctx->cipher_ctx);
113
+ // An overflow of |in_len + hmac_len| doesn't affect the result mod
114
+ // |block_size|, provided that |block_size| is a smaller power of two.
115
+ assert(block_size != 0 && (block_size & (block_size - 1)) == 0);
116
+ const size_t pad_len = block_size - (in_len + hmac_len) % block_size;
117
+ return hmac_len + pad_len;
118
+ }
119
+
120
+ static int aead_tls_seal_scatter(const EVP_AEAD_CTX *ctx, uint8_t *out,
121
+ uint8_t *out_tag, size_t *out_tag_len,
122
+ const size_t max_out_tag_len,
123
+ const uint8_t *nonce, const size_t nonce_len,
124
+ const uint8_t *in, const size_t in_len,
125
+ const uint8_t *extra_in,
126
+ const size_t extra_in_len, const uint8_t *ad,
127
+ const size_t ad_len) {
106
128
  AEAD_TLS_CTX *tls_ctx = (AEAD_TLS_CTX *)ctx->aead_state;
107
- size_t total = 0;
108
129
 
109
130
  if (!tls_ctx->cipher_ctx.encrypt) {
110
- /* Unlike a normal AEAD, a TLS AEAD may only be used in one direction. */
131
+ // Unlike a normal AEAD, a TLS AEAD may only be used in one direction.
111
132
  OPENSSL_PUT_ERROR(CIPHER, CIPHER_R_INVALID_OPERATION);
112
133
  return 0;
113
134
  }
114
135
 
115
- if (in_len + EVP_AEAD_max_overhead(ctx->aead) < in_len ||
116
- in_len > INT_MAX) {
117
- /* EVP_CIPHER takes int as input. */
136
+ if (in_len > INT_MAX) {
137
+ // EVP_CIPHER takes int as input.
118
138
  OPENSSL_PUT_ERROR(CIPHER, CIPHER_R_TOO_LARGE);
119
139
  return 0;
120
140
  }
121
141
 
122
- if (max_out_len < in_len + EVP_AEAD_max_overhead(ctx->aead)) {
142
+ if (max_out_tag_len < aead_tls_tag_len(ctx, in_len, extra_in_len)) {
123
143
  OPENSSL_PUT_ERROR(CIPHER, CIPHER_R_BUFFER_TOO_SMALL);
124
144
  return 0;
125
145
  }
@@ -134,14 +154,14 @@ static int aead_tls_seal(const EVP_AEAD_CTX *ctx, uint8_t *out,
134
154
  return 0;
135
155
  }
136
156
 
137
- /* To allow for CBC mode which changes cipher length, |ad| doesn't include the
138
- * length for legacy ciphers. */
157
+ // To allow for CBC mode which changes cipher length, |ad| doesn't include the
158
+ // length for legacy ciphers.
139
159
  uint8_t ad_extra[2];
140
160
  ad_extra[0] = (uint8_t)(in_len >> 8);
141
161
  ad_extra[1] = (uint8_t)(in_len & 0xff);
142
162
 
143
- /* Compute the MAC. This must be first in case the operation is being done
144
- * in-place. */
163
+ // Compute the MAC. This must be first in case the operation is being done
164
+ // in-place.
145
165
  uint8_t mac[EVP_MAX_MD_SIZE];
146
166
  unsigned mac_len;
147
167
  if (!HMAC_Init_ex(&tls_ctx->hmac_ctx, NULL, 0, NULL, NULL) ||
@@ -152,62 +172,80 @@ static int aead_tls_seal(const EVP_AEAD_CTX *ctx, uint8_t *out,
152
172
  return 0;
153
173
  }
154
174
 
155
- /* Configure the explicit IV. */
175
+ // Configure the explicit IV.
156
176
  if (EVP_CIPHER_CTX_mode(&tls_ctx->cipher_ctx) == EVP_CIPH_CBC_MODE &&
157
177
  !tls_ctx->implicit_iv &&
158
178
  !EVP_EncryptInit_ex(&tls_ctx->cipher_ctx, NULL, NULL, NULL, nonce)) {
159
179
  return 0;
160
180
  }
161
181
 
162
- /* Encrypt the input. */
182
+ // Encrypt the input.
163
183
  int len;
164
- if (!EVP_EncryptUpdate(&tls_ctx->cipher_ctx, out, &len, in,
165
- (int)in_len)) {
184
+ if (!EVP_EncryptUpdate(&tls_ctx->cipher_ctx, out, &len, in, (int)in_len)) {
166
185
  return 0;
167
186
  }
168
- total = len;
169
187
 
170
- /* Feed the MAC into the cipher. */
171
- if (!EVP_EncryptUpdate(&tls_ctx->cipher_ctx, out + total, &len, mac,
172
- (int)mac_len)) {
188
+ unsigned block_size = EVP_CIPHER_CTX_block_size(&tls_ctx->cipher_ctx);
189
+
190
+ // Feed the MAC into the cipher in two steps. First complete the final partial
191
+ // block from encrypting the input and split the result between |out| and
192
+ // |out_tag|. Then feed the rest.
193
+
194
+ const size_t early_mac_len =
195
+ (block_size - (in_len % block_size) % block_size);
196
+ if (early_mac_len != 0) {
197
+ assert(len + block_size - early_mac_len == in_len);
198
+ uint8_t buf[EVP_MAX_BLOCK_LENGTH];
199
+ int buf_len;
200
+ if (!EVP_EncryptUpdate(&tls_ctx->cipher_ctx, buf, &buf_len, mac,
201
+ (int)early_mac_len)) {
202
+ return 0;
203
+ }
204
+ assert(buf_len == (int)block_size);
205
+ OPENSSL_memcpy(out + len, buf, block_size - early_mac_len);
206
+ OPENSSL_memcpy(out_tag, buf + block_size - early_mac_len, early_mac_len);
207
+ }
208
+ size_t tag_len = early_mac_len;
209
+
210
+ if (!EVP_EncryptUpdate(&tls_ctx->cipher_ctx, out_tag + tag_len, &len,
211
+ mac + tag_len, mac_len - tag_len)) {
173
212
  return 0;
174
213
  }
175
- total += len;
214
+ tag_len += len;
176
215
 
177
- unsigned block_size = EVP_CIPHER_CTX_block_size(&tls_ctx->cipher_ctx);
178
216
  if (block_size > 1) {
179
217
  assert(block_size <= 256);
180
218
  assert(EVP_CIPHER_CTX_mode(&tls_ctx->cipher_ctx) == EVP_CIPH_CBC_MODE);
181
219
 
182
- /* Compute padding and feed that into the cipher. */
220
+ // Compute padding and feed that into the cipher.
183
221
  uint8_t padding[256];
184
222
  unsigned padding_len = block_size - ((in_len + mac_len) % block_size);
185
223
  OPENSSL_memset(padding, padding_len - 1, padding_len);
186
- if (!EVP_EncryptUpdate(&tls_ctx->cipher_ctx, out + total, &len, padding,
187
- (int)padding_len)) {
224
+ if (!EVP_EncryptUpdate(&tls_ctx->cipher_ctx, out_tag + tag_len, &len,
225
+ padding, (int)padding_len)) {
188
226
  return 0;
189
227
  }
190
- total += len;
228
+ tag_len += len;
191
229
  }
192
230
 
193
- if (!EVP_EncryptFinal_ex(&tls_ctx->cipher_ctx, out + total, &len)) {
231
+ if (!EVP_EncryptFinal_ex(&tls_ctx->cipher_ctx, out_tag + tag_len, &len)) {
194
232
  return 0;
195
233
  }
196
- total += len;
234
+ assert(len == 0); // Padding is explicit.
235
+ assert(tag_len == aead_tls_tag_len(ctx, in_len, extra_in_len));
197
236
 
198
- *out_len = total;
237
+ *out_tag_len = tag_len;
199
238
  return 1;
200
239
  }
201
240
 
202
- static int aead_tls_open(const EVP_AEAD_CTX *ctx, uint8_t *out,
203
- size_t *out_len, size_t max_out_len,
204
- const uint8_t *nonce, size_t nonce_len,
205
- const uint8_t *in, size_t in_len,
241
+ static int aead_tls_open(const EVP_AEAD_CTX *ctx, uint8_t *out, size_t *out_len,
242
+ size_t max_out_len, const uint8_t *nonce,
243
+ size_t nonce_len, const uint8_t *in, size_t in_len,
206
244
  const uint8_t *ad, size_t ad_len) {
207
245
  AEAD_TLS_CTX *tls_ctx = (AEAD_TLS_CTX *)ctx->aead_state;
208
246
 
209
247
  if (tls_ctx->cipher_ctx.encrypt) {
210
- /* Unlike a normal AEAD, a TLS AEAD may only be used in one direction. */
248
+ // Unlike a normal AEAD, a TLS AEAD may only be used in one direction.
211
249
  OPENSSL_PUT_ERROR(CIPHER, CIPHER_R_INVALID_OPERATION);
212
250
  return 0;
213
251
  }
@@ -218,8 +256,8 @@ static int aead_tls_open(const EVP_AEAD_CTX *ctx, uint8_t *out,
218
256
  }
219
257
 
220
258
  if (max_out_len < in_len) {
221
- /* This requires that the caller provide space for the MAC, even though it
222
- * will always be removed on return. */
259
+ // This requires that the caller provide space for the MAC, even though it
260
+ // will always be removed on return.
223
261
  OPENSSL_PUT_ERROR(CIPHER, CIPHER_R_BUFFER_TOO_SMALL);
224
262
  return 0;
225
263
  }
@@ -235,19 +273,19 @@ static int aead_tls_open(const EVP_AEAD_CTX *ctx, uint8_t *out,
235
273
  }
236
274
 
237
275
  if (in_len > INT_MAX) {
238
- /* EVP_CIPHER takes int as input. */
276
+ // EVP_CIPHER takes int as input.
239
277
  OPENSSL_PUT_ERROR(CIPHER, CIPHER_R_TOO_LARGE);
240
278
  return 0;
241
279
  }
242
280
 
243
- /* Configure the explicit IV. */
281
+ // Configure the explicit IV.
244
282
  if (EVP_CIPHER_CTX_mode(&tls_ctx->cipher_ctx) == EVP_CIPH_CBC_MODE &&
245
283
  !tls_ctx->implicit_iv &&
246
284
  !EVP_DecryptInit_ex(&tls_ctx->cipher_ctx, NULL, NULL, NULL, nonce)) {
247
285
  return 0;
248
286
  }
249
287
 
250
- /* Decrypt to get the plaintext + MAC + padding. */
288
+ // Decrypt to get the plaintext + MAC + padding.
251
289
  size_t total = 0;
252
290
  int len;
253
291
  if (!EVP_DecryptUpdate(&tls_ctx->cipher_ctx, out, &len, in, (int)in_len)) {
@@ -260,40 +298,41 @@ static int aead_tls_open(const EVP_AEAD_CTX *ctx, uint8_t *out,
260
298
  total += len;
261
299
  assert(total == in_len);
262
300
 
263
- /* Remove CBC padding. Code from here on is timing-sensitive with respect to
264
- * |padding_ok| and |data_plus_mac_len| for CBC ciphers. */
265
- unsigned padding_ok, data_plus_mac_len;
301
+ // Remove CBC padding. Code from here on is timing-sensitive with respect to
302
+ // |padding_ok| and |data_plus_mac_len| for CBC ciphers.
303
+ size_t data_plus_mac_len;
304
+ crypto_word_t padding_ok;
266
305
  if (EVP_CIPHER_CTX_mode(&tls_ctx->cipher_ctx) == EVP_CIPH_CBC_MODE) {
267
306
  if (!EVP_tls_cbc_remove_padding(
268
307
  &padding_ok, &data_plus_mac_len, out, total,
269
308
  EVP_CIPHER_CTX_block_size(&tls_ctx->cipher_ctx),
270
- (unsigned)HMAC_size(&tls_ctx->hmac_ctx))) {
271
- /* Publicly invalid. This can be rejected in non-constant time. */
309
+ HMAC_size(&tls_ctx->hmac_ctx))) {
310
+ // Publicly invalid. This can be rejected in non-constant time.
272
311
  OPENSSL_PUT_ERROR(CIPHER, CIPHER_R_BAD_DECRYPT);
273
312
  return 0;
274
313
  }
275
314
  } else {
276
- padding_ok = ~0u;
315
+ padding_ok = CONSTTIME_TRUE_W;
277
316
  data_plus_mac_len = total;
278
- /* |data_plus_mac_len| = |total| = |in_len| at this point. |in_len| has
279
- * already been checked against the MAC size at the top of the function. */
317
+ // |data_plus_mac_len| = |total| = |in_len| at this point. |in_len| has
318
+ // already been checked against the MAC size at the top of the function.
280
319
  assert(data_plus_mac_len >= HMAC_size(&tls_ctx->hmac_ctx));
281
320
  }
282
- unsigned data_len = data_plus_mac_len - HMAC_size(&tls_ctx->hmac_ctx);
321
+ size_t data_len = data_plus_mac_len - HMAC_size(&tls_ctx->hmac_ctx);
283
322
 
284
- /* At this point, if the padding is valid, the first |data_plus_mac_len| bytes
285
- * after |out| are the plaintext and MAC. Otherwise, |data_plus_mac_len| is
286
- * still large enough to extract a MAC, but it will be irrelevant. */
323
+ // At this point, if the padding is valid, the first |data_plus_mac_len| bytes
324
+ // after |out| are the plaintext and MAC. Otherwise, |data_plus_mac_len| is
325
+ // still large enough to extract a MAC, but it will be irrelevant.
287
326
 
288
- /* To allow for CBC mode which changes cipher length, |ad| doesn't include the
289
- * length for legacy ciphers. */
327
+ // To allow for CBC mode which changes cipher length, |ad| doesn't include the
328
+ // length for legacy ciphers.
290
329
  uint8_t ad_fixed[13];
291
330
  OPENSSL_memcpy(ad_fixed, ad, 11);
292
331
  ad_fixed[11] = (uint8_t)(data_len >> 8);
293
332
  ad_fixed[12] = (uint8_t)(data_len & 0xff);
294
333
  ad_len += 2;
295
334
 
296
- /* Compute the MAC and extract the one in the record. */
335
+ // Compute the MAC and extract the one in the record.
297
336
  uint8_t mac[EVP_MAX_MD_SIZE];
298
337
  size_t mac_len;
299
338
  uint8_t record_mac_tmp[EVP_MAX_MD_SIZE];
@@ -311,8 +350,8 @@ static int aead_tls_open(const EVP_AEAD_CTX *ctx, uint8_t *out,
311
350
  record_mac = record_mac_tmp;
312
351
  EVP_tls_cbc_copy_mac(record_mac, mac_len, out, data_plus_mac_len, total);
313
352
  } else {
314
- /* We should support the constant-time path for all CBC-mode ciphers
315
- * implemented. */
353
+ // We should support the constant-time path for all CBC-mode ciphers
354
+ // implemented.
316
355
  assert(EVP_CIPHER_CTX_mode(&tls_ctx->cipher_ctx) != EVP_CIPH_CBC_MODE);
317
356
 
318
357
  unsigned mac_len_u;
@@ -328,19 +367,19 @@ static int aead_tls_open(const EVP_AEAD_CTX *ctx, uint8_t *out,
328
367
  record_mac = &out[data_len];
329
368
  }
330
369
 
331
- /* Perform the MAC check and the padding check in constant-time. It should be
332
- * safe to simply perform the padding check first, but it would not be under a
333
- * different choice of MAC location on padding failure. See
334
- * EVP_tls_cbc_remove_padding. */
335
- unsigned good = constant_time_eq_int(CRYPTO_memcmp(record_mac, mac, mac_len),
336
- 0);
370
+ // Perform the MAC check and the padding check in constant-time. It should be
371
+ // safe to simply perform the padding check first, but it would not be under a
372
+ // different choice of MAC location on padding failure. See
373
+ // EVP_tls_cbc_remove_padding.
374
+ crypto_word_t good =
375
+ constant_time_eq_int(CRYPTO_memcmp(record_mac, mac, mac_len), 0);
337
376
  good &= padding_ok;
338
377
  if (!good) {
339
378
  OPENSSL_PUT_ERROR(CIPHER, CIPHER_R_BAD_DECRYPT);
340
379
  return 0;
341
380
  }
342
381
 
343
- /* End of timing-sensitive code. */
382
+ // End of timing-sensitive code.
344
383
 
345
384
  *out_len = data_len;
346
385
  return 1;
@@ -434,133 +473,173 @@ static int aead_null_sha1_tls_init(EVP_AEAD_CTX *ctx, const uint8_t *key,
434
473
  }
435
474
 
436
475
  static const EVP_AEAD aead_aes_128_cbc_sha1_tls = {
437
- SHA_DIGEST_LENGTH + 16, /* key len (SHA1 + AES128) */
438
- 16, /* nonce len (IV) */
439
- 16 + SHA_DIGEST_LENGTH, /* overhead (padding + SHA1) */
440
- SHA_DIGEST_LENGTH, /* max tag length */
441
- NULL, /* init */
476
+ SHA_DIGEST_LENGTH + 16, // key len (SHA1 + AES128)
477
+ 16, // nonce len (IV)
478
+ 16 + SHA_DIGEST_LENGTH, // overhead (padding + SHA1)
479
+ SHA_DIGEST_LENGTH, // max tag length
480
+ 0, // seal_scatter_supports_extra_in
481
+
482
+ NULL, // init
442
483
  aead_aes_128_cbc_sha1_tls_init,
443
484
  aead_tls_cleanup,
444
- aead_tls_seal,
445
485
  aead_tls_open,
446
- NULL, /* get_iv */
486
+ aead_tls_seal_scatter,
487
+ NULL, // open_gather
488
+ NULL, // get_iv
489
+ aead_tls_tag_len,
447
490
  };
448
491
 
449
492
  static const EVP_AEAD aead_aes_128_cbc_sha1_tls_implicit_iv = {
450
- SHA_DIGEST_LENGTH + 16 + 16, /* key len (SHA1 + AES128 + IV) */
451
- 0, /* nonce len */
452
- 16 + SHA_DIGEST_LENGTH, /* overhead (padding + SHA1) */
453
- SHA_DIGEST_LENGTH, /* max tag length */
454
- NULL, /* init */
493
+ SHA_DIGEST_LENGTH + 16 + 16, // key len (SHA1 + AES128 + IV)
494
+ 0, // nonce len
495
+ 16 + SHA_DIGEST_LENGTH, // overhead (padding + SHA1)
496
+ SHA_DIGEST_LENGTH, // max tag length
497
+ 0, // seal_scatter_supports_extra_in
498
+
499
+ NULL, // init
455
500
  aead_aes_128_cbc_sha1_tls_implicit_iv_init,
456
501
  aead_tls_cleanup,
457
- aead_tls_seal,
458
502
  aead_tls_open,
459
- aead_tls_get_iv, /* get_iv */
503
+ aead_tls_seal_scatter,
504
+ NULL, // open_gather
505
+ aead_tls_get_iv, // get_iv
506
+ aead_tls_tag_len,
460
507
  };
461
508
 
462
509
  static const EVP_AEAD aead_aes_128_cbc_sha256_tls = {
463
- SHA256_DIGEST_LENGTH + 16, /* key len (SHA256 + AES128) */
464
- 16, /* nonce len (IV) */
465
- 16 + SHA256_DIGEST_LENGTH, /* overhead (padding + SHA256) */
466
- SHA256_DIGEST_LENGTH, /* max tag length */
467
- NULL, /* init */
510
+ SHA256_DIGEST_LENGTH + 16, // key len (SHA256 + AES128)
511
+ 16, // nonce len (IV)
512
+ 16 + SHA256_DIGEST_LENGTH, // overhead (padding + SHA256)
513
+ SHA256_DIGEST_LENGTH, // max tag length
514
+ 0, // seal_scatter_supports_extra_in
515
+
516
+ NULL, // init
468
517
  aead_aes_128_cbc_sha256_tls_init,
469
518
  aead_tls_cleanup,
470
- aead_tls_seal,
471
519
  aead_tls_open,
472
- NULL, /* get_iv */
520
+ aead_tls_seal_scatter,
521
+ NULL, // open_gather
522
+ NULL, // get_iv
523
+ aead_tls_tag_len,
473
524
  };
474
525
 
475
526
  static const EVP_AEAD aead_aes_256_cbc_sha1_tls = {
476
- SHA_DIGEST_LENGTH + 32, /* key len (SHA1 + AES256) */
477
- 16, /* nonce len (IV) */
478
- 16 + SHA_DIGEST_LENGTH, /* overhead (padding + SHA1) */
479
- SHA_DIGEST_LENGTH, /* max tag length */
480
- NULL, /* init */
527
+ SHA_DIGEST_LENGTH + 32, // key len (SHA1 + AES256)
528
+ 16, // nonce len (IV)
529
+ 16 + SHA_DIGEST_LENGTH, // overhead (padding + SHA1)
530
+ SHA_DIGEST_LENGTH, // max tag length
531
+ 0, // seal_scatter_supports_extra_in
532
+
533
+ NULL, // init
481
534
  aead_aes_256_cbc_sha1_tls_init,
482
535
  aead_tls_cleanup,
483
- aead_tls_seal,
484
536
  aead_tls_open,
485
- NULL, /* get_iv */
537
+ aead_tls_seal_scatter,
538
+ NULL, // open_gather
539
+ NULL, // get_iv
540
+ aead_tls_tag_len,
486
541
  };
487
542
 
488
543
  static const EVP_AEAD aead_aes_256_cbc_sha1_tls_implicit_iv = {
489
- SHA_DIGEST_LENGTH + 32 + 16, /* key len (SHA1 + AES256 + IV) */
490
- 0, /* nonce len */
491
- 16 + SHA_DIGEST_LENGTH, /* overhead (padding + SHA1) */
492
- SHA_DIGEST_LENGTH, /* max tag length */
493
- NULL, /* init */
544
+ SHA_DIGEST_LENGTH + 32 + 16, // key len (SHA1 + AES256 + IV)
545
+ 0, // nonce len
546
+ 16 + SHA_DIGEST_LENGTH, // overhead (padding + SHA1)
547
+ SHA_DIGEST_LENGTH, // max tag length
548
+ 0, // seal_scatter_supports_extra_in
549
+
550
+ NULL, // init
494
551
  aead_aes_256_cbc_sha1_tls_implicit_iv_init,
495
552
  aead_tls_cleanup,
496
- aead_tls_seal,
497
553
  aead_tls_open,
498
- aead_tls_get_iv, /* get_iv */
554
+ aead_tls_seal_scatter,
555
+ NULL, // open_gather
556
+ aead_tls_get_iv, // get_iv
557
+ aead_tls_tag_len,
499
558
  };
500
559
 
501
560
  static const EVP_AEAD aead_aes_256_cbc_sha256_tls = {
502
- SHA256_DIGEST_LENGTH + 32, /* key len (SHA256 + AES256) */
503
- 16, /* nonce len (IV) */
504
- 16 + SHA256_DIGEST_LENGTH, /* overhead (padding + SHA256) */
505
- SHA256_DIGEST_LENGTH, /* max tag length */
506
- NULL, /* init */
561
+ SHA256_DIGEST_LENGTH + 32, // key len (SHA256 + AES256)
562
+ 16, // nonce len (IV)
563
+ 16 + SHA256_DIGEST_LENGTH, // overhead (padding + SHA256)
564
+ SHA256_DIGEST_LENGTH, // max tag length
565
+ 0, // seal_scatter_supports_extra_in
566
+
567
+ NULL, // init
507
568
  aead_aes_256_cbc_sha256_tls_init,
508
569
  aead_tls_cleanup,
509
- aead_tls_seal,
510
570
  aead_tls_open,
511
- NULL, /* get_iv */
571
+ aead_tls_seal_scatter,
572
+ NULL, // open_gather
573
+ NULL, // get_iv
574
+ aead_tls_tag_len,
512
575
  };
513
576
 
514
577
  static const EVP_AEAD aead_aes_256_cbc_sha384_tls = {
515
- SHA384_DIGEST_LENGTH + 32, /* key len (SHA384 + AES256) */
516
- 16, /* nonce len (IV) */
517
- 16 + SHA384_DIGEST_LENGTH, /* overhead (padding + SHA384) */
518
- SHA384_DIGEST_LENGTH, /* max tag length */
519
- NULL, /* init */
578
+ SHA384_DIGEST_LENGTH + 32, // key len (SHA384 + AES256)
579
+ 16, // nonce len (IV)
580
+ 16 + SHA384_DIGEST_LENGTH, // overhead (padding + SHA384)
581
+ SHA384_DIGEST_LENGTH, // max tag length
582
+ 0, // seal_scatter_supports_extra_in
583
+
584
+ NULL, // init
520
585
  aead_aes_256_cbc_sha384_tls_init,
521
586
  aead_tls_cleanup,
522
- aead_tls_seal,
523
587
  aead_tls_open,
524
- NULL, /* get_iv */
588
+ aead_tls_seal_scatter,
589
+ NULL, // open_gather
590
+ NULL, // get_iv
591
+ aead_tls_tag_len,
525
592
  };
526
593
 
527
594
  static const EVP_AEAD aead_des_ede3_cbc_sha1_tls = {
528
- SHA_DIGEST_LENGTH + 24, /* key len (SHA1 + 3DES) */
529
- 8, /* nonce len (IV) */
530
- 8 + SHA_DIGEST_LENGTH, /* overhead (padding + SHA1) */
531
- SHA_DIGEST_LENGTH, /* max tag length */
532
- NULL, /* init */
595
+ SHA_DIGEST_LENGTH + 24, // key len (SHA1 + 3DES)
596
+ 8, // nonce len (IV)
597
+ 8 + SHA_DIGEST_LENGTH, // overhead (padding + SHA1)
598
+ SHA_DIGEST_LENGTH, // max tag length
599
+ 0, // seal_scatter_supports_extra_in
600
+
601
+ NULL, // init
533
602
  aead_des_ede3_cbc_sha1_tls_init,
534
603
  aead_tls_cleanup,
535
- aead_tls_seal,
536
604
  aead_tls_open,
537
- NULL, /* get_iv */
605
+ aead_tls_seal_scatter,
606
+ NULL, // open_gather
607
+ NULL, // get_iv
608
+ aead_tls_tag_len,
538
609
  };
539
610
 
540
611
  static const EVP_AEAD aead_des_ede3_cbc_sha1_tls_implicit_iv = {
541
- SHA_DIGEST_LENGTH + 24 + 8, /* key len (SHA1 + 3DES + IV) */
542
- 0, /* nonce len */
543
- 8 + SHA_DIGEST_LENGTH, /* overhead (padding + SHA1) */
544
- SHA_DIGEST_LENGTH, /* max tag length */
545
- NULL, /* init */
612
+ SHA_DIGEST_LENGTH + 24 + 8, // key len (SHA1 + 3DES + IV)
613
+ 0, // nonce len
614
+ 8 + SHA_DIGEST_LENGTH, // overhead (padding + SHA1)
615
+ SHA_DIGEST_LENGTH, // max tag length
616
+ 0, // seal_scatter_supports_extra_in
617
+
618
+ NULL, // init
546
619
  aead_des_ede3_cbc_sha1_tls_implicit_iv_init,
547
620
  aead_tls_cleanup,
548
- aead_tls_seal,
549
621
  aead_tls_open,
550
- aead_tls_get_iv, /* get_iv */
622
+ aead_tls_seal_scatter,
623
+ NULL, // open_gather
624
+ aead_tls_get_iv, // get_iv
625
+ aead_tls_tag_len,
551
626
  };
552
627
 
553
628
  static const EVP_AEAD aead_null_sha1_tls = {
554
- SHA_DIGEST_LENGTH, /* key len */
555
- 0, /* nonce len */
556
- SHA_DIGEST_LENGTH, /* overhead (SHA1) */
557
- SHA_DIGEST_LENGTH, /* max tag length */
558
- NULL, /* init */
629
+ SHA_DIGEST_LENGTH, // key len
630
+ 0, // nonce len
631
+ SHA_DIGEST_LENGTH, // overhead (SHA1)
632
+ SHA_DIGEST_LENGTH, // max tag length
633
+ 0, // seal_scatter_supports_extra_in
634
+
635
+ NULL, // init
559
636
  aead_null_sha1_tls_init,
560
637
  aead_tls_cleanup,
561
- aead_tls_seal,
562
638
  aead_tls_open,
563
- NULL, /* get_iv */
639
+ aead_tls_seal_scatter,
640
+ NULL, // open_gather
641
+ NULL, // get_iv
642
+ aead_tls_tag_len,
564
643
  };
565
644
 
566
645
  const EVP_AEAD *EVP_aead_aes_128_cbc_sha1_tls(void) {