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
@@ -121,32 +121,39 @@ STACK_OF(CONF_VALUE) *i2v_GENERAL_NAME(X509V3_EXT_METHOD *method,
121
121
  int i;
122
122
  switch (gen->type) {
123
123
  case GEN_OTHERNAME:
124
- X509V3_add_value("othername", "<unsupported>", &ret);
124
+ if (!X509V3_add_value("othername", "<unsupported>", &ret))
125
+ return NULL;
125
126
  break;
126
127
 
127
128
  case GEN_X400:
128
- X509V3_add_value("X400Name", "<unsupported>", &ret);
129
+ if (!X509V3_add_value("X400Name", "<unsupported>", &ret))
130
+ return NULL;
129
131
  break;
130
132
 
131
133
  case GEN_EDIPARTY:
132
- X509V3_add_value("EdiPartyName", "<unsupported>", &ret);
134
+ if (!X509V3_add_value("EdiPartyName", "<unsupported>", &ret))
135
+ return NULL;
133
136
  break;
134
137
 
135
138
  case GEN_EMAIL:
136
- X509V3_add_value_uchar("email", gen->d.ia5->data, &ret);
139
+ if (!X509V3_add_value_uchar("email", gen->d.ia5->data, &ret))
140
+ return NULL;
137
141
  break;
138
142
 
139
143
  case GEN_DNS:
140
- X509V3_add_value_uchar("DNS", gen->d.ia5->data, &ret);
144
+ if (!X509V3_add_value_uchar("DNS", gen->d.ia5->data, &ret))
145
+ return NULL;
141
146
  break;
142
147
 
143
148
  case GEN_URI:
144
- X509V3_add_value_uchar("URI", gen->d.ia5->data, &ret);
149
+ if (!X509V3_add_value_uchar("URI", gen->d.ia5->data, &ret))
150
+ return NULL;
145
151
  break;
146
152
 
147
153
  case GEN_DIRNAME:
148
- X509_NAME_oneline(gen->d.dirn, oline, 256);
149
- X509V3_add_value("DirName", oline, &ret);
154
+ if (X509_NAME_oneline(gen->d.dirn, oline, 256) == NULL
155
+ || !X509V3_add_value("DirName", oline, &ret))
156
+ return NULL;
150
157
  break;
151
158
 
152
159
  case GEN_IPADD:
@@ -164,15 +171,18 @@ STACK_OF(CONF_VALUE) *i2v_GENERAL_NAME(X509V3_EXT_METHOD *method,
164
171
  strcat(oline, ":");
165
172
  }
166
173
  } else {
167
- X509V3_add_value("IP Address", "<invalid>", &ret);
174
+ if (!X509V3_add_value("IP Address", "<invalid>", &ret))
175
+ return NULL;
168
176
  break;
169
177
  }
170
- X509V3_add_value("IP Address", oline, &ret);
178
+ if (!X509V3_add_value("IP Address", oline, &ret))
179
+ return NULL;
171
180
  break;
172
181
 
173
182
  case GEN_RID:
174
183
  i2t_ASN1_OBJECT(oline, 256, gen->d.rid);
175
- X509V3_add_value("Registered ID", oline, &ret);
184
+ if (!X509V3_add_value("Registered ID", oline, &ret))
185
+ return NULL;
176
186
  break;
177
187
  }
178
188
  return ret;
@@ -468,9 +468,15 @@ static void print_notice(BIO *out, USERNOTICE *notice, int indent)
468
468
  num = sk_ASN1_INTEGER_value(ref->noticenos, i);
469
469
  if (i)
470
470
  BIO_puts(out, ", ");
471
- tmp = i2s_ASN1_INTEGER(NULL, num);
472
- BIO_puts(out, tmp);
473
- OPENSSL_free(tmp);
471
+ if (num == NULL)
472
+ BIO_puts(out, "(null)");
473
+ else {
474
+ tmp = i2s_ASN1_INTEGER(NULL, num);
475
+ if (tmp == NULL)
476
+ return;
477
+ BIO_puts(out, tmp);
478
+ OPENSSL_free(tmp);
479
+ }
474
480
  }
475
481
  BIO_puts(out, "\n");
476
482
  }
@@ -112,29 +112,31 @@ ASN1_ITEM_TEMPLATE_END(AUTHORITY_INFO_ACCESS)
112
112
 
113
113
  IMPLEMENT_ASN1_FUNCTIONS(AUTHORITY_INFO_ACCESS)
114
114
 
115
- static STACK_OF(CONF_VALUE) *i2v_AUTHORITY_INFO_ACCESS(X509V3_EXT_METHOD
116
- *method, AUTHORITY_INFO_ACCESS
117
- *ainfo, STACK_OF(CONF_VALUE)
118
- *ret)
115
+ static STACK_OF(CONF_VALUE) *i2v_AUTHORITY_INFO_ACCESS(
116
+ X509V3_EXT_METHOD *method, AUTHORITY_INFO_ACCESS *ainfo,
117
+ STACK_OF(CONF_VALUE) *ret)
119
118
  {
120
119
  ACCESS_DESCRIPTION *desc;
121
120
  size_t i;
122
121
  int nlen;
123
122
  char objtmp[80], *ntmp;
124
123
  CONF_VALUE *vtmp;
124
+ STACK_OF(CONF_VALUE) *tret = ret;
125
+
125
126
  for (i = 0; i < sk_ACCESS_DESCRIPTION_num(ainfo); i++) {
127
+ STACK_OF(CONF_VALUE) *tmp;
128
+
126
129
  desc = sk_ACCESS_DESCRIPTION_value(ainfo, i);
127
- ret = i2v_GENERAL_NAME(method, desc->location, ret);
128
- if (!ret)
129
- break;
130
- vtmp = sk_CONF_VALUE_value(ret, i);
130
+ tmp = i2v_GENERAL_NAME(method, desc->location, tret);
131
+ if (tmp == NULL)
132
+ goto err;
133
+ tret = tmp;
134
+ vtmp = sk_CONF_VALUE_value(tret, i);
131
135
  i2t_ASN1_OBJECT(objtmp, sizeof objtmp, desc->method);
132
136
  nlen = strlen(objtmp) + strlen(vtmp->name) + 5;
133
137
  ntmp = OPENSSL_malloc(nlen);
134
- if (!ntmp) {
135
- OPENSSL_PUT_ERROR(X509V3, ERR_R_MALLOC_FAILURE);
136
- return NULL;
137
- }
138
+ if (ntmp == NULL)
139
+ goto err;
138
140
  BUF_strlcpy(ntmp, objtmp, nlen);
139
141
  BUF_strlcat(ntmp, " - ", nlen);
140
142
  BUF_strlcat(ntmp, vtmp->name, nlen);
@@ -142,9 +144,15 @@ static STACK_OF(CONF_VALUE) *i2v_AUTHORITY_INFO_ACCESS(X509V3_EXT_METHOD
142
144
  vtmp->name = ntmp;
143
145
 
144
146
  }
145
- if (!ret)
147
+ if (ret == NULL && tret == NULL)
146
148
  return sk_CONF_VALUE_new_null();
147
- return ret;
149
+
150
+ return tret;
151
+ err:
152
+ OPENSSL_PUT_ERROR(X509V3, ERR_R_MALLOC_FAILURE);
153
+ if (ret == NULL && tret != NULL)
154
+ sk_CONF_VALUE_pop_free(tret, X509V3_conf_free);
155
+ return NULL;
148
156
  }
149
157
 
150
158
  static AUTHORITY_INFO_ACCESS *v2i_AUTHORITY_INFO_ACCESS(X509V3_EXT_METHOD
@@ -214,17 +214,18 @@ static int print_nc_ipadd(BIO *bp, ASN1_OCTET_STRING *ip)
214
214
  return 1;
215
215
  }
216
216
 
217
- /*
218
- * Check a certificate conforms to a specified set of constraints. Return
219
- * values: X509_V_OK: All constraints obeyed.
220
- * X509_V_ERR_PERMITTED_VIOLATION: Permitted subtree violation.
221
- * X509_V_ERR_EXCLUDED_VIOLATION: Excluded subtree violation.
222
- * X509_V_ERR_SUBTREE_MINMAX: Min or max values present and matching type.
223
- * X509_V_ERR_UNSUPPORTED_CONSTRAINT_TYPE: Unsupported constraint type.
224
- * X509_V_ERR_UNSUPPORTED_CONSTRAINT_SYNTAX: bad unsupported constraint
225
- * syntax. X509_V_ERR_UNSUPPORTED_NAME_SYNTAX: bad or unsupported syntax of
226
- * name
227
- *
217
+ /*-
218
+ * Check a certificate conforms to a specified set of constraints.
219
+ * Return values:
220
+ * X509_V_OK: All constraints obeyed.
221
+ * X509_V_ERR_PERMITTED_VIOLATION: Permitted subtree violation.
222
+ * X509_V_ERR_EXCLUDED_VIOLATION: Excluded subtree violation.
223
+ * X509_V_ERR_SUBTREE_MINMAX: Min or max values present and matching type.
224
+ * X509_V_ERR_UNSPECIFIED: Unspecified error.
225
+ * X509_V_ERR_UNSUPPORTED_CONSTRAINT_TYPE: Unsupported constraint type.
226
+ * X509_V_ERR_UNSUPPORTED_CONSTRAINT_SYNTAX: Bad or unsupported constraint
227
+ * syntax.
228
+ * X509_V_ERR_UNSUPPORTED_NAME_SYNTAX: Bad or unsupported syntax of name.
228
229
  */
229
230
 
230
231
  int NAME_CONSTRAINTS_check(X509 *x, NAME_CONSTRAINTS *nc)
@@ -235,6 +236,21 @@ int NAME_CONSTRAINTS_check(X509 *x, NAME_CONSTRAINTS *nc)
235
236
 
236
237
  nm = X509_get_subject_name(x);
237
238
 
239
+ /* Guard against certificates with an excessive number of names or
240
+ * constraints causing a computationally expensive name constraints
241
+ * check. */
242
+ size_t name_count =
243
+ X509_NAME_entry_count(nm) + sk_GENERAL_NAME_num(x->altname);
244
+ size_t constraint_count = sk_GENERAL_SUBTREE_num(nc->permittedSubtrees) +
245
+ sk_GENERAL_SUBTREE_num(nc->excludedSubtrees);
246
+ size_t check_count = constraint_count * name_count;
247
+ if (name_count < (size_t)X509_NAME_entry_count(nm) ||
248
+ constraint_count < sk_GENERAL_SUBTREE_num(nc->permittedSubtrees) ||
249
+ (constraint_count && check_count / constraint_count != name_count) ||
250
+ check_count > 1 << 20) {
251
+ return X509_V_ERR_UNSPECIFIED;
252
+ }
253
+
238
254
  if (X509_NAME_entry_count(nm) > 0) {
239
255
  GENERAL_NAME gntmp;
240
256
  gntmp.type = GEN_DIRNAME;
@@ -35,7 +35,6 @@
35
35
  * SUCH DAMAGE.
36
36
  */
37
37
 
38
- #include <stdio.h>
39
38
  #include <string.h>
40
39
 
41
40
  #include <openssl/conf.h>
@@ -153,38 +152,6 @@ static int process_pci_value(CONF_VALUE *val,
153
152
  goto err;
154
153
  }
155
154
  OPENSSL_free(tmp_data2);
156
- } else if (strncmp(val->value, "file:", 5) == 0) {
157
- unsigned char buf[2048];
158
- int n;
159
- BIO *b = BIO_new_file(val->value + 5, "r");
160
- if (!b) {
161
- OPENSSL_PUT_ERROR(X509V3, ERR_R_BIO_LIB);
162
- X509V3_conf_err(val);
163
- goto err;
164
- }
165
- while ((n = BIO_read(b, buf, sizeof(buf))) > 0
166
- || (n == 0 && BIO_should_retry(b))) {
167
- if (!n)
168
- continue;
169
-
170
- tmp_data = OPENSSL_realloc((*policy)->data,
171
- (*policy)->length + n + 1);
172
-
173
- if (!tmp_data)
174
- break;
175
-
176
- (*policy)->data = tmp_data;
177
- OPENSSL_memcpy(&(*policy)->data[(*policy)->length], buf, n);
178
- (*policy)->length += n;
179
- (*policy)->data[(*policy)->length] = '\0';
180
- }
181
- BIO_free_all(b);
182
-
183
- if (n < 0) {
184
- OPENSSL_PUT_ERROR(X509V3, ERR_R_BIO_LIB);
185
- X509V3_conf_err(val);
186
- goto err;
187
- }
188
155
  } else if (strncmp(val->value, "text:", 5) == 0) {
189
156
  val_len = strlen(val->value + 5);
190
157
  tmp_data = OPENSSL_realloc((*policy)->data,
@@ -454,15 +454,13 @@ unsigned char *string_to_hex(const char *str, long *len)
454
454
  OPENSSL_free(hexbuf);
455
455
  return NULL;
456
456
  }
457
- if (isupper(ch))
458
- ch = tolower(ch);
459
- if (isupper(cl))
460
- cl = tolower(cl);
461
457
 
462
458
  if ((ch >= '0') && (ch <= '9'))
463
459
  ch -= '0';
464
460
  else if ((ch >= 'a') && (ch <= 'f'))
465
461
  ch -= 'a' - 10;
462
+ else if ((ch >= 'A') && (ch <= 'F'))
463
+ ch -= 'A' - 10;
466
464
  else
467
465
  goto badhex;
468
466
 
@@ -470,6 +468,8 @@ unsigned char *string_to_hex(const char *str, long *len)
470
468
  cl -= '0';
471
469
  else if ((cl >= 'a') && (cl <= 'f'))
472
470
  cl -= 'a' - 10;
471
+ else if ((cl >= 'A') && (cl <= 'F'))
472
+ cl -= 'A' - 10;
473
473
  else
474
474
  goto badhex;
475
475
 
@@ -22,242 +22,312 @@ extern "C" {
22
22
  #endif
23
23
 
24
24
 
25
- /* Authenticated Encryption with Additional Data.
26
- *
27
- * AEAD couples confidentiality and integrity in a single primitive. AEAD
28
- * algorithms take a key and then can seal and open individual messages. Each
29
- * message has a unique, per-message nonce and, optionally, additional data
30
- * which is authenticated but not included in the ciphertext.
31
- *
32
- * The |EVP_AEAD_CTX_init| function initialises an |EVP_AEAD_CTX| structure and
33
- * performs any precomputation needed to use |aead| with |key|. The length of
34
- * the key, |key_len|, is given in bytes.
35
- *
36
- * The |tag_len| argument contains the length of the tags, in bytes, and allows
37
- * for the processing of truncated authenticators. A zero value indicates that
38
- * the default tag length should be used and this is defined as
39
- * |EVP_AEAD_DEFAULT_TAG_LENGTH| in order to make the code clear. Using
40
- * truncated tags increases an attacker's chance of creating a valid forgery.
41
- * Be aware that the attacker's chance may increase more than exponentially as
42
- * would naively be expected.
43
- *
44
- * When no longer needed, the initialised |EVP_AEAD_CTX| structure must be
45
- * passed to |EVP_AEAD_CTX_cleanup|, which will deallocate any memory used.
46
- *
47
- * With an |EVP_AEAD_CTX| in hand, one can seal and open messages. These
48
- * operations are intended to meet the standard notions of privacy and
49
- * authenticity for authenticated encryption. For formal definitions see
50
- * Bellare and Namprempre, "Authenticated encryption: relations among notions
51
- * and analysis of the generic composition paradigm," Lecture Notes in Computer
52
- * Science B<1976> (2000), 531–545,
53
- * http://www-cse.ucsd.edu/~mihir/papers/oem.html.
54
- *
55
- * When sealing messages, a nonce must be given. The length of the nonce is
56
- * fixed by the AEAD in use and is returned by |EVP_AEAD_nonce_length|. *The
57
- * nonce must be unique for all messages with the same key*. This is critically
58
- * important - nonce reuse may completely undermine the security of the AEAD.
59
- * Nonces may be predictable and public, so long as they are unique. Uniqueness
60
- * may be achieved with a simple counter or, if large enough, may be generated
61
- * randomly. The nonce must be passed into the "open" operation by the receiver
62
- * so must either be implicit (e.g. a counter), or must be transmitted along
63
- * with the sealed message.
64
- *
65
- * The "seal" and "open" operations are atomic - an entire message must be
66
- * encrypted or decrypted in a single call. Large messages may have to be split
67
- * up in order to accommodate this. When doing so, be mindful of the need not to
68
- * repeat nonces and the possibility that an attacker could duplicate, reorder
69
- * or drop message chunks. For example, using a single key for a given (large)
70
- * message and sealing chunks with nonces counting from zero would be secure as
71
- * long as the number of chunks was securely transmitted. (Otherwise an
72
- * attacker could truncate the message by dropping chunks from the end.)
73
- *
74
- * The number of chunks could be transmitted by prefixing it to the plaintext,
75
- * for example. This also assumes that no other message would ever use the same
76
- * key otherwise the rule that nonces must be unique for a given key would be
77
- * violated.
78
- *
79
- * The "seal" and "open" operations also permit additional data to be
80
- * authenticated via the |ad| parameter. This data is not included in the
81
- * ciphertext and must be identical for both the "seal" and "open" call. This
82
- * permits implicit context to be authenticated but may be empty if not needed.
83
- *
84
- * The "seal" and "open" operations may work in-place if the |out| and |in|
85
- * arguments are equal. Otherwise, if |out| and |in| alias, input data may be
86
- * overwritten before it is read. This situation will cause an error.
87
- *
88
- * The "seal" and "open" operations return one on success and zero on error. */
89
-
90
-
91
- /* AEAD algorithms. */
92
-
93
- /* EVP_aead_aes_128_gcm is AES-128 in Galois Counter Mode. */
25
+ // Authenticated Encryption with Additional Data.
26
+ //
27
+ // AEAD couples confidentiality and integrity in a single primitive. AEAD
28
+ // algorithms take a key and then can seal and open individual messages. Each
29
+ // message has a unique, per-message nonce and, optionally, additional data
30
+ // which is authenticated but not included in the ciphertext.
31
+ //
32
+ // The |EVP_AEAD_CTX_init| function initialises an |EVP_AEAD_CTX| structure and
33
+ // performs any precomputation needed to use |aead| with |key|. The length of
34
+ // the key, |key_len|, is given in bytes.
35
+ //
36
+ // The |tag_len| argument contains the length of the tags, in bytes, and allows
37
+ // for the processing of truncated authenticators. A zero value indicates that
38
+ // the default tag length should be used and this is defined as
39
+ // |EVP_AEAD_DEFAULT_TAG_LENGTH| in order to make the code clear. Using
40
+ // truncated tags increases an attacker's chance of creating a valid forgery.
41
+ // Be aware that the attacker's chance may increase more than exponentially as
42
+ // would naively be expected.
43
+ //
44
+ // When no longer needed, the initialised |EVP_AEAD_CTX| structure must be
45
+ // passed to |EVP_AEAD_CTX_cleanup|, which will deallocate any memory used.
46
+ //
47
+ // With an |EVP_AEAD_CTX| in hand, one can seal and open messages. These
48
+ // operations are intended to meet the standard notions of privacy and
49
+ // authenticity for authenticated encryption. For formal definitions see
50
+ // Bellare and Namprempre, "Authenticated encryption: relations among notions
51
+ // and analysis of the generic composition paradigm," Lecture Notes in Computer
52
+ // Science B<1976> (2000), 531–545,
53
+ // http://www-cse.ucsd.edu/~mihir/papers/oem.html.
54
+ //
55
+ // When sealing messages, a nonce must be given. The length of the nonce is
56
+ // fixed by the AEAD in use and is returned by |EVP_AEAD_nonce_length|. *The
57
+ // nonce must be unique for all messages with the same key*. This is critically
58
+ // important - nonce reuse may completely undermine the security of the AEAD.
59
+ // Nonces may be predictable and public, so long as they are unique. Uniqueness
60
+ // may be achieved with a simple counter or, if large enough, may be generated
61
+ // randomly. The nonce must be passed into the "open" operation by the receiver
62
+ // so must either be implicit (e.g. a counter), or must be transmitted along
63
+ // with the sealed message.
64
+ //
65
+ // The "seal" and "open" operations are atomic - an entire message must be
66
+ // encrypted or decrypted in a single call. Large messages may have to be split
67
+ // up in order to accommodate this. When doing so, be mindful of the need not to
68
+ // repeat nonces and the possibility that an attacker could duplicate, reorder
69
+ // or drop message chunks. For example, using a single key for a given (large)
70
+ // message and sealing chunks with nonces counting from zero would be secure as
71
+ // long as the number of chunks was securely transmitted. (Otherwise an
72
+ // attacker could truncate the message by dropping chunks from the end.)
73
+ //
74
+ // The number of chunks could be transmitted by prefixing it to the plaintext,
75
+ // for example. This also assumes that no other message would ever use the same
76
+ // key otherwise the rule that nonces must be unique for a given key would be
77
+ // violated.
78
+ //
79
+ // The "seal" and "open" operations also permit additional data to be
80
+ // authenticated via the |ad| parameter. This data is not included in the
81
+ // ciphertext and must be identical for both the "seal" and "open" call. This
82
+ // permits implicit context to be authenticated but may be empty if not needed.
83
+ //
84
+ // The "seal" and "open" operations may work in-place if the |out| and |in|
85
+ // arguments are equal. Otherwise, if |out| and |in| alias, input data may be
86
+ // overwritten before it is read. This situation will cause an error.
87
+ //
88
+ // The "seal" and "open" operations return one on success and zero on error.
89
+
90
+
91
+ // AEAD algorithms.
92
+
93
+ // EVP_aead_aes_128_gcm is AES-128 in Galois Counter Mode.
94
94
  OPENSSL_EXPORT const EVP_AEAD *EVP_aead_aes_128_gcm(void);
95
95
 
96
- /* EVP_aead_aes_256_gcm is AES-256 in Galois Counter Mode. */
96
+ // EVP_aead_aes_256_gcm is AES-256 in Galois Counter Mode.
97
97
  OPENSSL_EXPORT const EVP_AEAD *EVP_aead_aes_256_gcm(void);
98
98
 
99
- /* EVP_aead_chacha20_poly1305 is the AEAD built from ChaCha20 and
100
- * Poly1305 as described in RFC 7539. */
99
+ // EVP_aead_chacha20_poly1305 is the AEAD built from ChaCha20 and
100
+ // Poly1305 as described in RFC 7539.
101
101
  OPENSSL_EXPORT const EVP_AEAD *EVP_aead_chacha20_poly1305(void);
102
102
 
103
- /* EVP_aead_aes_128_ctr_hmac_sha256 is AES-128 in CTR mode with HMAC-SHA256 for
104
- * authentication. The nonce is 12 bytes; the bottom 32-bits are used as the
105
- * block counter, thus the maximum plaintext size is 64GB. */
103
+ // EVP_aead_aes_128_ctr_hmac_sha256 is AES-128 in CTR mode with HMAC-SHA256 for
104
+ // authentication. The nonce is 12 bytes; the bottom 32-bits are used as the
105
+ // block counter, thus the maximum plaintext size is 64GB.
106
106
  OPENSSL_EXPORT const EVP_AEAD *EVP_aead_aes_128_ctr_hmac_sha256(void);
107
107
 
108
- /* EVP_aead_aes_256_ctr_hmac_sha256 is AES-256 in CTR mode with HMAC-SHA256 for
109
- * authentication. See |EVP_aead_aes_128_ctr_hmac_sha256| for details. */
108
+ // EVP_aead_aes_256_ctr_hmac_sha256 is AES-256 in CTR mode with HMAC-SHA256 for
109
+ // authentication. See |EVP_aead_aes_128_ctr_hmac_sha256| for details.
110
110
  OPENSSL_EXPORT const EVP_AEAD *EVP_aead_aes_256_ctr_hmac_sha256(void);
111
111
 
112
- /* EVP_aead_aes_128_gcm_siv is AES-128 in GCM-SIV mode. See
113
- * https://tools.ietf.org/html/draft-irtf-cfrg-gcmsiv-02 */
112
+ // EVP_aead_aes_128_gcm_siv is AES-128 in GCM-SIV mode. See
113
+ // https://tools.ietf.org/html/draft-irtf-cfrg-gcmsiv-02
114
114
  OPENSSL_EXPORT const EVP_AEAD *EVP_aead_aes_128_gcm_siv(void);
115
115
 
116
- /* EVP_aead_aes_256_gcm_siv is AES-256 in GCM-SIV mode. See
117
- * https://tools.ietf.org/html/draft-irtf-cfrg-gcmsiv-02 */
116
+ // EVP_aead_aes_256_gcm_siv is AES-256 in GCM-SIV mode. See
117
+ // https://tools.ietf.org/html/draft-irtf-cfrg-gcmsiv-02
118
118
  OPENSSL_EXPORT const EVP_AEAD *EVP_aead_aes_256_gcm_siv(void);
119
119
 
120
- /* EVP_has_aes_hardware returns one if we enable hardware support for fast and
121
- * constant-time AES-GCM. */
120
+ // EVP_has_aes_hardware returns one if we enable hardware support for fast and
121
+ // constant-time AES-GCM.
122
122
  OPENSSL_EXPORT int EVP_has_aes_hardware(void);
123
123
 
124
124
 
125
- /* Utility functions. */
125
+ // Utility functions.
126
126
 
127
- /* EVP_AEAD_key_length returns the length, in bytes, of the keys used by
128
- * |aead|. */
127
+ // EVP_AEAD_key_length returns the length, in bytes, of the keys used by
128
+ // |aead|.
129
129
  OPENSSL_EXPORT size_t EVP_AEAD_key_length(const EVP_AEAD *aead);
130
130
 
131
- /* EVP_AEAD_nonce_length returns the length, in bytes, of the per-message nonce
132
- * for |aead|. */
131
+ // EVP_AEAD_nonce_length returns the length, in bytes, of the per-message nonce
132
+ // for |aead|.
133
133
  OPENSSL_EXPORT size_t EVP_AEAD_nonce_length(const EVP_AEAD *aead);
134
134
 
135
- /* EVP_AEAD_max_overhead returns the maximum number of additional bytes added
136
- * by the act of sealing data with |aead|. */
135
+ // EVP_AEAD_max_overhead returns the maximum number of additional bytes added
136
+ // by the act of sealing data with |aead|.
137
137
  OPENSSL_EXPORT size_t EVP_AEAD_max_overhead(const EVP_AEAD *aead);
138
138
 
139
- /* EVP_AEAD_max_tag_len returns the maximum tag length when using |aead|. This
140
- * is the largest value that can be passed as |tag_len| to
141
- * |EVP_AEAD_CTX_init|. */
139
+ // EVP_AEAD_max_tag_len returns the maximum tag length when using |aead|. This
140
+ // is the largest value that can be passed as |tag_len| to
141
+ // |EVP_AEAD_CTX_init|.
142
142
  OPENSSL_EXPORT size_t EVP_AEAD_max_tag_len(const EVP_AEAD *aead);
143
143
 
144
144
 
145
- /* AEAD operations. */
145
+ // AEAD operations.
146
146
 
147
- /* An EVP_AEAD_CTX represents an AEAD algorithm configured with a specific key
148
- * and message-independent IV. */
147
+ // An EVP_AEAD_CTX represents an AEAD algorithm configured with a specific key
148
+ // and message-independent IV.
149
149
  typedef struct evp_aead_ctx_st {
150
150
  const EVP_AEAD *aead;
151
- /* aead_state is an opaque pointer to whatever state the AEAD needs to
152
- * maintain. */
151
+ // aead_state is an opaque pointer to whatever state the AEAD needs to
152
+ // maintain.
153
153
  void *aead_state;
154
+ // tag_len may contain the actual length of the authentication tag if it is
155
+ // known at initialization time.
156
+ uint8_t tag_len;
154
157
  } EVP_AEAD_CTX;
155
158
 
156
- /* EVP_AEAD_MAX_KEY_LENGTH contains the maximum key length used by
157
- * any AEAD defined in this header. */
159
+ // EVP_AEAD_MAX_KEY_LENGTH contains the maximum key length used by
160
+ // any AEAD defined in this header.
158
161
  #define EVP_AEAD_MAX_KEY_LENGTH 80
159
162
 
160
- /* EVP_AEAD_MAX_NONCE_LENGTH contains the maximum nonce length used by
161
- * any AEAD defined in this header. */
163
+ // EVP_AEAD_MAX_NONCE_LENGTH contains the maximum nonce length used by
164
+ // any AEAD defined in this header.
162
165
  #define EVP_AEAD_MAX_NONCE_LENGTH 16
163
166
 
164
- /* EVP_AEAD_MAX_OVERHEAD contains the maximum overhead used by any AEAD
165
- * defined in this header. */
167
+ // EVP_AEAD_MAX_OVERHEAD contains the maximum overhead used by any AEAD
168
+ // defined in this header.
166
169
  #define EVP_AEAD_MAX_OVERHEAD 64
167
170
 
168
- /* EVP_AEAD_DEFAULT_TAG_LENGTH is a magic value that can be passed to
169
- * EVP_AEAD_CTX_init to indicate that the default tag length for an AEAD should
170
- * be used. */
171
+ // EVP_AEAD_DEFAULT_TAG_LENGTH is a magic value that can be passed to
172
+ // EVP_AEAD_CTX_init to indicate that the default tag length for an AEAD should
173
+ // be used.
171
174
  #define EVP_AEAD_DEFAULT_TAG_LENGTH 0
172
175
 
173
- /* EVP_AEAD_CTX_zero sets an uninitialized |ctx| to the zero state. It must be
174
- * initialized with |EVP_AEAD_CTX_init| before use. It is safe, but not
175
- * necessary, to call |EVP_AEAD_CTX_cleanup| in this state. This may be used for
176
- * more uniform cleanup of |EVP_AEAD_CTX|. */
176
+ // EVP_AEAD_CTX_zero sets an uninitialized |ctx| to the zero state. It must be
177
+ // initialized with |EVP_AEAD_CTX_init| before use. It is safe, but not
178
+ // necessary, to call |EVP_AEAD_CTX_cleanup| in this state. This may be used for
179
+ // more uniform cleanup of |EVP_AEAD_CTX|.
177
180
  OPENSSL_EXPORT void EVP_AEAD_CTX_zero(EVP_AEAD_CTX *ctx);
178
181
 
179
- /* EVP_AEAD_CTX_init initializes |ctx| for the given AEAD algorithm. The |impl|
180
- * argument is ignored and should be NULL. Authentication tags may be truncated
181
- * by passing a size as |tag_len|. A |tag_len| of zero indicates the default
182
- * tag length and this is defined as EVP_AEAD_DEFAULT_TAG_LENGTH for
183
- * readability.
184
- *
185
- * Returns 1 on success. Otherwise returns 0 and pushes to the error stack. In
186
- * the error case, you do not need to call |EVP_AEAD_CTX_cleanup|, but it's
187
- * harmless to do so. */
182
+ // EVP_AEAD_CTX_new allocates an |EVP_AEAD_CTX|, calls |EVP_AEAD_CTX_init| and
183
+ // returns the |EVP_AEAD_CTX|, or NULL on error.
184
+ OPENSSL_EXPORT EVP_AEAD_CTX *EVP_AEAD_CTX_new(const EVP_AEAD *aead,
185
+ const uint8_t *key,
186
+ size_t key_len, size_t tag_len);
187
+
188
+ // EVP_AEAD_CTX_free calls |EVP_AEAD_CTX_cleanup| and |OPENSSL_free| on
189
+ // |ctx|.
190
+ OPENSSL_EXPORT void EVP_AEAD_CTX_free(EVP_AEAD_CTX *ctx);
191
+
192
+ // EVP_AEAD_CTX_init initializes |ctx| for the given AEAD algorithm. The |impl|
193
+ // argument is ignored and should be NULL. Authentication tags may be truncated
194
+ // by passing a size as |tag_len|. A |tag_len| of zero indicates the default
195
+ // tag length and this is defined as EVP_AEAD_DEFAULT_TAG_LENGTH for
196
+ // readability.
197
+ //
198
+ // Returns 1 on success. Otherwise returns 0 and pushes to the error stack. In
199
+ // the error case, you do not need to call |EVP_AEAD_CTX_cleanup|, but it's
200
+ // harmless to do so.
188
201
  OPENSSL_EXPORT int EVP_AEAD_CTX_init(EVP_AEAD_CTX *ctx, const EVP_AEAD *aead,
189
202
  const uint8_t *key, size_t key_len,
190
203
  size_t tag_len, ENGINE *impl);
191
204
 
192
- /* EVP_AEAD_CTX_cleanup frees any data allocated by |ctx|. It is a no-op to
193
- * call |EVP_AEAD_CTX_cleanup| on a |EVP_AEAD_CTX| that has been |memset| to
194
- * all zeros. */
205
+ // EVP_AEAD_CTX_cleanup frees any data allocated by |ctx|. It is a no-op to
206
+ // call |EVP_AEAD_CTX_cleanup| on a |EVP_AEAD_CTX| that has been |memset| to
207
+ // all zeros.
195
208
  OPENSSL_EXPORT void EVP_AEAD_CTX_cleanup(EVP_AEAD_CTX *ctx);
196
209
 
197
- /* EVP_AEAD_CTX_seal encrypts and authenticates |in_len| bytes from |in| and
198
- * authenticates |ad_len| bytes from |ad| and writes the result to |out|. It
199
- * returns one on success and zero otherwise.
200
- *
201
- * This function may be called (with the same |EVP_AEAD_CTX|) concurrently with
202
- * itself or |EVP_AEAD_CTX_open|.
203
- *
204
- * At most |max_out_len| bytes are written to |out| and, in order to ensure
205
- * success, |max_out_len| should be |in_len| plus the result of
206
- * |EVP_AEAD_max_overhead|. On successful return, |*out_len| is set to the
207
- * actual number of bytes written.
208
- *
209
- * The length of |nonce|, |nonce_len|, must be equal to the result of
210
- * |EVP_AEAD_nonce_length| for this AEAD.
211
- *
212
- * |EVP_AEAD_CTX_seal| never results in a partial output. If |max_out_len| is
213
- * insufficient, zero will be returned. (In this case, |*out_len| is set to
214
- * zero.)
215
- *
216
- * If |in| and |out| alias then |out| must be == |in|. */
210
+ // EVP_AEAD_CTX_seal encrypts and authenticates |in_len| bytes from |in| and
211
+ // authenticates |ad_len| bytes from |ad| and writes the result to |out|. It
212
+ // returns one on success and zero otherwise.
213
+ //
214
+ // This function may be called concurrently with itself or any other seal/open
215
+ // function on the same |EVP_AEAD_CTX|.
216
+ //
217
+ // At most |max_out_len| bytes are written to |out| and, in order to ensure
218
+ // success, |max_out_len| should be |in_len| plus the result of
219
+ // |EVP_AEAD_max_overhead|. On successful return, |*out_len| is set to the
220
+ // actual number of bytes written.
221
+ //
222
+ // The length of |nonce|, |nonce_len|, must be equal to the result of
223
+ // |EVP_AEAD_nonce_length| for this AEAD.
224
+ //
225
+ // |EVP_AEAD_CTX_seal| never results in a partial output. If |max_out_len| is
226
+ // insufficient, zero will be returned. If any error occurs, |out| will be
227
+ // filled with zero bytes and |*out_len| set to zero.
228
+ //
229
+ // If |in| and |out| alias then |out| must be == |in|.
217
230
  OPENSSL_EXPORT int EVP_AEAD_CTX_seal(const EVP_AEAD_CTX *ctx, uint8_t *out,
218
231
  size_t *out_len, size_t max_out_len,
219
232
  const uint8_t *nonce, size_t nonce_len,
220
233
  const uint8_t *in, size_t in_len,
221
234
  const uint8_t *ad, size_t ad_len);
222
235
 
223
- /* EVP_AEAD_CTX_open authenticates |in_len| bytes from |in| and |ad_len| bytes
224
- * from |ad| and decrypts at most |in_len| bytes into |out|. It returns one on
225
- * success and zero otherwise.
226
- *
227
- * This function may be called (with the same |EVP_AEAD_CTX|) concurrently with
228
- * itself or |EVP_AEAD_CTX_seal|.
229
- *
230
- * At most |in_len| bytes are written to |out|. In order to ensure success,
231
- * |max_out_len| should be at least |in_len|. On successful return, |*out_len|
232
- * is set to the the actual number of bytes written.
233
- *
234
- * The length of |nonce|, |nonce_len|, must be equal to the result of
235
- * |EVP_AEAD_nonce_length| for this AEAD.
236
- *
237
- * |EVP_AEAD_CTX_open| never results in a partial output. If |max_out_len| is
238
- * insufficient, zero will be returned. (In this case, |*out_len| is set to
239
- * zero.)
240
- *
241
- * If |in| and |out| alias then |out| must be == |in|. */
236
+ // EVP_AEAD_CTX_open authenticates |in_len| bytes from |in| and |ad_len| bytes
237
+ // from |ad| and decrypts at most |in_len| bytes into |out|. It returns one on
238
+ // success and zero otherwise.
239
+ //
240
+ // This function may be called concurrently with itself or any other seal/open
241
+ // function on the same |EVP_AEAD_CTX|.
242
+ //
243
+ // At most |in_len| bytes are written to |out|. In order to ensure success,
244
+ // |max_out_len| should be at least |in_len|. On successful return, |*out_len|
245
+ // is set to the the actual number of bytes written.
246
+ //
247
+ // The length of |nonce|, |nonce_len|, must be equal to the result of
248
+ // |EVP_AEAD_nonce_length| for this AEAD.
249
+ //
250
+ // |EVP_AEAD_CTX_open| never results in a partial output. If |max_out_len| is
251
+ // insufficient, zero will be returned. If any error occurs, |out| will be
252
+ // filled with zero bytes and |*out_len| set to zero.
253
+ //
254
+ // If |in| and |out| alias then |out| must be == |in|.
242
255
  OPENSSL_EXPORT int EVP_AEAD_CTX_open(const EVP_AEAD_CTX *ctx, uint8_t *out,
243
256
  size_t *out_len, size_t max_out_len,
244
257
  const uint8_t *nonce, size_t nonce_len,
245
258
  const uint8_t *in, size_t in_len,
246
259
  const uint8_t *ad, size_t ad_len);
247
260
 
248
- /* EVP_AEAD_CTX_aead returns the underlying AEAD for |ctx|, or NULL if one has
249
- * not been set. */
261
+ // EVP_AEAD_CTX_seal_scatter encrypts and authenticates |in_len| bytes from |in|
262
+ // and authenticates |ad_len| bytes from |ad|. It writes |in_len| bytes of
263
+ // ciphertext to |out| and the authentication tag to |out_tag|. It returns one
264
+ // on success and zero otherwise.
265
+ //
266
+ // This function may be called concurrently with itself or any other seal/open
267
+ // function on the same |EVP_AEAD_CTX|.
268
+ //
269
+ // Exactly |in_len| bytes are written to |out|, and up to
270
+ // |EVP_AEAD_max_overhead+extra_in_len| bytes to |out_tag|. On successful
271
+ // return, |*out_tag_len| is set to the actual number of bytes written to
272
+ // |out_tag|.
273
+ //
274
+ // |extra_in| may point to an additional plaintext input buffer if the cipher
275
+ // supports it. If present, |extra_in_len| additional bytes of plaintext are
276
+ // encrypted and authenticated, and the ciphertext is written (before the tag)
277
+ // to |out_tag|. |max_out_tag_len| must be sized to allow for the additional
278
+ // |extra_in_len| bytes.
279
+ //
280
+ // The length of |nonce|, |nonce_len|, must be equal to the result of
281
+ // |EVP_AEAD_nonce_length| for this AEAD.
282
+ //
283
+ // |EVP_AEAD_CTX_seal_scatter| never results in a partial output. If
284
+ // |max_out_tag_len| is insufficient, zero will be returned. If any error
285
+ // occurs, |out| and |out_tag| will be filled with zero bytes and |*out_tag_len|
286
+ // set to zero.
287
+ //
288
+ // If |in| and |out| alias then |out| must be == |in|. |out_tag| may not alias
289
+ // any other argument.
290
+ OPENSSL_EXPORT int EVP_AEAD_CTX_seal_scatter(
291
+ const EVP_AEAD_CTX *ctx, uint8_t *out,
292
+ uint8_t *out_tag, size_t *out_tag_len, size_t max_out_tag_len,
293
+ const uint8_t *nonce, size_t nonce_len,
294
+ const uint8_t *in, size_t in_len,
295
+ const uint8_t *extra_in, size_t extra_in_len,
296
+ const uint8_t *ad, size_t ad_len);
297
+
298
+ // EVP_AEAD_CTX_open_gather decrypts and authenticates |in_len| bytes from |in|
299
+ // and authenticates |ad_len| bytes from |ad| using |in_tag_len| bytes of
300
+ // authentication tag from |in_tag|. If successful, it writes |in_len| bytes of
301
+ // plaintext to |out|. It returns one on success and zero otherwise.
302
+ //
303
+ // This function may be called concurrently with itself or any other seal/open
304
+ // function on the same |EVP_AEAD_CTX|.
305
+ //
306
+ // The length of |nonce|, |nonce_len|, must be equal to the result of
307
+ // |EVP_AEAD_nonce_length| for this AEAD.
308
+ //
309
+ // |EVP_AEAD_CTX_open_gather| never results in a partial output. If any error
310
+ // occurs, |out| will be filled with zero bytes.
311
+ //
312
+ // If |in| and |out| alias then |out| must be == |in|.
313
+ OPENSSL_EXPORT int EVP_AEAD_CTX_open_gather(
314
+ const EVP_AEAD_CTX *ctx, uint8_t *out, const uint8_t *nonce,
315
+ size_t nonce_len, const uint8_t *in, size_t in_len, const uint8_t *in_tag,
316
+ size_t in_tag_len, const uint8_t *ad, size_t ad_len);
317
+
318
+ // EVP_AEAD_CTX_aead returns the underlying AEAD for |ctx|, or NULL if one has
319
+ // not been set.
250
320
  OPENSSL_EXPORT const EVP_AEAD *EVP_AEAD_CTX_aead(const EVP_AEAD_CTX *ctx);
251
321
 
252
322
 
253
- /* TLS-specific AEAD algorithms.
254
- *
255
- * These AEAD primitives do not meet the definition of generic AEADs. They are
256
- * all specific to TLS and should not be used outside of that context. They must
257
- * be initialized with |EVP_AEAD_CTX_init_with_direction|, are stateful, and may
258
- * not be used concurrently. Any nonces are used as IVs, so they must be
259
- * unpredictable. They only accept an |ad| parameter of length 11 (the standard
260
- * TLS one with length omitted). */
323
+ // TLS-specific AEAD algorithms.
324
+ //
325
+ // These AEAD primitives do not meet the definition of generic AEADs. They are
326
+ // all specific to TLS and should not be used outside of that context. They must
327
+ // be initialized with |EVP_AEAD_CTX_init_with_direction|, are stateful, and may
328
+ // not be used concurrently. Any nonces are used as IVs, so they must be
329
+ // unpredictable. They only accept an |ad| parameter of length 11 (the standard
330
+ // TLS one with length omitted).
261
331
 
262
332
  OPENSSL_EXPORT const EVP_AEAD *EVP_aead_aes_128_cbc_sha1_tls(void);
263
333
  OPENSSL_EXPORT const EVP_AEAD *EVP_aead_aes_128_cbc_sha1_tls_implicit_iv(void);
@@ -273,14 +343,22 @@ OPENSSL_EXPORT const EVP_AEAD *EVP_aead_des_ede3_cbc_sha1_tls_implicit_iv(void);
273
343
 
274
344
  OPENSSL_EXPORT const EVP_AEAD *EVP_aead_null_sha1_tls(void);
275
345
 
346
+ // EVP_aead_aes_128_gcm_tls12 is AES-128 in Galois Counter Mode using the TLS
347
+ // 1.2 nonce construction.
348
+ OPENSSL_EXPORT const EVP_AEAD *EVP_aead_aes_128_gcm_tls12(void);
349
+
350
+ // EVP_aead_aes_256_gcm_tls12 is AES-256 in Galois Counter Mode using the TLS
351
+ // 1.2 nonce construction.
352
+ OPENSSL_EXPORT const EVP_AEAD *EVP_aead_aes_256_gcm_tls12(void);
276
353
 
277
- /* SSLv3-specific AEAD algorithms.
278
- *
279
- * These AEAD primitives do not meet the definition of generic AEADs. They are
280
- * all specific to SSLv3 and should not be used outside of that context. They
281
- * must be initialized with |EVP_AEAD_CTX_init_with_direction|, are stateful,
282
- * and may not be used concurrently. They only accept an |ad| parameter of
283
- * length 9 (the standard TLS one with length and version omitted). */
354
+
355
+ // SSLv3-specific AEAD algorithms.
356
+ //
357
+ // These AEAD primitives do not meet the definition of generic AEADs. They are
358
+ // all specific to SSLv3 and should not be used outside of that context. They
359
+ // must be initialized with |EVP_AEAD_CTX_init_with_direction|, are stateful,
360
+ // and may not be used concurrently. They only accept an |ad| parameter of
361
+ // length 9 (the standard TLS one with length and version omitted).
284
362
 
285
363
  OPENSSL_EXPORT const EVP_AEAD *EVP_aead_aes_128_cbc_sha1_ssl3(void);
286
364
  OPENSSL_EXPORT const EVP_AEAD *EVP_aead_aes_256_cbc_sha1_ssl3(void);
@@ -288,32 +366,41 @@ OPENSSL_EXPORT const EVP_AEAD *EVP_aead_des_ede3_cbc_sha1_ssl3(void);
288
366
  OPENSSL_EXPORT const EVP_AEAD *EVP_aead_null_sha1_ssl3(void);
289
367
 
290
368
 
291
- /* Obscure functions. */
369
+ // Obscure functions.
292
370
 
293
- /* evp_aead_direction_t denotes the direction of an AEAD operation. */
371
+ // evp_aead_direction_t denotes the direction of an AEAD operation.
294
372
  enum evp_aead_direction_t {
295
373
  evp_aead_open,
296
374
  evp_aead_seal,
297
375
  };
298
376
 
299
- /* EVP_AEAD_CTX_init_with_direction calls |EVP_AEAD_CTX_init| for normal
300
- * AEADs. For TLS-specific and SSL3-specific AEADs, it initializes |ctx| for a
301
- * given direction. */
377
+ // EVP_AEAD_CTX_init_with_direction calls |EVP_AEAD_CTX_init| for normal
378
+ // AEADs. For TLS-specific and SSL3-specific AEADs, it initializes |ctx| for a
379
+ // given direction.
302
380
  OPENSSL_EXPORT int EVP_AEAD_CTX_init_with_direction(
303
381
  EVP_AEAD_CTX *ctx, const EVP_AEAD *aead, const uint8_t *key, size_t key_len,
304
382
  size_t tag_len, enum evp_aead_direction_t dir);
305
383
 
306
- /* EVP_AEAD_CTX_get_iv sets |*out_len| to the length of the IV for |ctx| and
307
- * sets |*out_iv| to point to that many bytes of the current IV. This is only
308
- * meaningful for AEADs with implicit IVs (i.e. CBC mode in SSLv3 and TLS 1.0).
309
- *
310
- * It returns one on success or zero on error. */
384
+ // EVP_AEAD_CTX_get_iv sets |*out_len| to the length of the IV for |ctx| and
385
+ // sets |*out_iv| to point to that many bytes of the current IV. This is only
386
+ // meaningful for AEADs with implicit IVs (i.e. CBC mode in SSLv3 and TLS 1.0).
387
+ //
388
+ // It returns one on success or zero on error.
311
389
  OPENSSL_EXPORT int EVP_AEAD_CTX_get_iv(const EVP_AEAD_CTX *ctx,
312
390
  const uint8_t **out_iv, size_t *out_len);
313
391
 
392
+ // EVP_AEAD_CTX_tag_len computes the exact byte length of the tag written by
393
+ // |EVP_AEAD_CTX_seal_scatter| and writes it to |*out_tag_len|. It returns one
394
+ // on success or zero on error. |in_len| and |extra_in_len| must equal the
395
+ // arguments of the same names passed to |EVP_AEAD_CTX_seal_scatter|.
396
+ OPENSSL_EXPORT int EVP_AEAD_CTX_tag_len(const EVP_AEAD_CTX *ctx,
397
+ size_t *out_tag_len,
398
+ const size_t in_len,
399
+ const size_t extra_in_len);
400
+
314
401
 
315
402
  #if defined(__cplusplus)
316
- } /* extern C */
403
+ } // extern C
317
404
 
318
405
  #if !defined(BORINGSSL_NO_CXX)
319
406
  extern "C++" {
@@ -324,6 +411,8 @@ using ScopedEVP_AEAD_CTX =
324
411
  internal::StackAllocated<EVP_AEAD_CTX, void, EVP_AEAD_CTX_zero,
325
412
  EVP_AEAD_CTX_cleanup>;
326
413
 
414
+ BORINGSSL_MAKE_DELETER(EVP_AEAD_CTX, EVP_AEAD_CTX_free)
415
+
327
416
  } // namespace bssl
328
417
 
329
418
  } // extern C++
@@ -331,4 +420,4 @@ using ScopedEVP_AEAD_CTX =
331
420
 
332
421
  #endif
333
422
 
334
- #endif /* OPENSSL_HEADER_AEAD_H */
423
+ #endif // OPENSSL_HEADER_AEAD_H