grpc 1.24.0 → 1.25.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 (504) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +306 -243
  3. data/etc/roots.pem +0 -100
  4. data/include/grpc/grpc_security.h +44 -18
  5. data/include/grpc/impl/codegen/grpc_types.h +15 -0
  6. data/include/grpc/impl/codegen/port_platform.h +27 -11
  7. data/include/grpc/impl/codegen/sync_generic.h +1 -1
  8. data/src/boringssl/err_data.c +695 -650
  9. data/src/core/ext/filters/client_channel/client_channel.cc +257 -179
  10. data/src/core/ext/filters/client_channel/client_channel.h +24 -0
  11. data/src/core/ext/filters/client_channel/client_channel_channelz.cc +2 -3
  12. data/src/core/ext/filters/client_channel/client_channel_factory.h +1 -5
  13. data/src/core/ext/filters/client_channel/health/health_check_client.cc +18 -45
  14. data/src/core/ext/filters/client_channel/health/health_check_client.h +5 -13
  15. data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +1 -1
  16. data/src/core/ext/filters/client_channel/lb_policy.cc +2 -3
  17. data/src/core/ext/filters/client_channel/lb_policy.h +65 -55
  18. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +14 -14
  19. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +113 -36
  20. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +14 -19
  21. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +36 -13
  22. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +3 -10
  23. data/src/core/ext/filters/client_channel/lb_policy/xds/xds.cc +814 -1589
  24. data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +2 -5
  25. data/src/core/ext/filters/client_channel/lb_policy_factory.h +3 -6
  26. data/src/core/ext/filters/client_channel/resolver.cc +1 -2
  27. data/src/core/ext/filters/client_channel/resolver.h +8 -16
  28. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +25 -8
  29. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.cc +46 -12
  30. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +10 -17
  31. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_libuv.cc +7 -8
  32. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +4 -4
  33. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +111 -44
  34. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +22 -14
  35. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +1 -1
  36. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.cc +2 -2
  37. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +29 -10
  38. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +27 -36
  39. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +7 -10
  40. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +60 -16
  41. data/src/core/ext/filters/client_channel/resolver_factory.h +4 -8
  42. data/src/core/ext/filters/client_channel/resolver_registry.cc +1 -1
  43. data/src/core/ext/filters/client_channel/resolver_registry.h +1 -1
  44. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +7 -10
  45. data/src/core/ext/filters/client_channel/resolving_lb_policy.cc +7 -8
  46. data/src/core/ext/filters/client_channel/resolving_lb_policy.h +1 -1
  47. data/src/core/ext/filters/client_channel/retry_throttle.cc +5 -5
  48. data/src/core/ext/filters/client_channel/retry_throttle.h +1 -4
  49. data/src/core/ext/filters/client_channel/service_config.h +8 -8
  50. data/src/core/ext/filters/client_channel/subchannel.cc +53 -86
  51. data/src/core/ext/filters/client_channel/subchannel.h +7 -9
  52. data/src/core/ext/filters/client_channel/subchannel_interface.h +9 -13
  53. data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +3 -6
  54. data/src/core/ext/filters/client_channel/{lb_policy/xds/xds_load_balancer_api.cc → xds/xds_api.cc} +169 -52
  55. data/src/core/ext/filters/client_channel/xds/xds_api.h +171 -0
  56. data/src/core/ext/filters/client_channel/xds/xds_bootstrap.cc +450 -0
  57. data/src/core/ext/filters/client_channel/xds/xds_bootstrap.h +99 -0
  58. data/src/core/ext/filters/client_channel/{lb_policy/xds → xds}/xds_channel.h +8 -6
  59. data/src/core/ext/filters/client_channel/xds/xds_channel_args.h +26 -0
  60. data/src/core/ext/filters/client_channel/{lb_policy/xds → xds}/xds_channel_secure.cc +28 -11
  61. data/src/core/ext/filters/client_channel/xds/xds_client.cc +1413 -0
  62. data/src/core/ext/filters/client_channel/xds/xds_client.h +221 -0
  63. data/src/core/ext/filters/client_channel/{lb_policy/xds → xds}/xds_client_stats.cc +1 -5
  64. data/src/core/ext/filters/client_channel/{lb_policy/xds → xds}/xds_client_stats.h +3 -4
  65. data/src/core/ext/filters/deadline/deadline_filter.cc +20 -20
  66. data/src/core/ext/filters/http/client/http_client_filter.cc +15 -15
  67. data/src/core/ext/filters/http/client_authority_filter.cc +14 -14
  68. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +12 -12
  69. data/src/core/ext/filters/max_age/max_age_filter.cc +59 -50
  70. data/src/core/ext/filters/message_size/message_size_filter.cc +18 -18
  71. data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc +15 -14
  72. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +233 -175
  73. data/src/core/ext/transport/chttp2/transport/flow_control.h +21 -24
  74. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +253 -163
  75. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +24 -12
  76. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +2 -3
  77. data/src/core/ext/transport/chttp2/transport/internal.h +13 -15
  78. data/src/core/ext/transport/chttp2/transport/writing.cc +3 -0
  79. data/src/core/ext/transport/inproc/inproc_transport.cc +20 -13
  80. data/src/core/lib/channel/channel_args.cc +16 -0
  81. data/src/core/lib/channel/channel_args.h +22 -0
  82. data/src/core/lib/channel/channelz.cc +5 -6
  83. data/src/core/lib/channel/channelz.h +1 -1
  84. data/src/core/lib/channel/connected_channel.cc +20 -20
  85. data/src/core/lib/channel/handshaker.h +3 -4
  86. data/src/core/lib/channel/handshaker_factory.h +1 -3
  87. data/src/core/lib/debug/trace.h +3 -2
  88. data/src/core/lib/gprpp/arena.cc +3 -3
  89. data/src/core/lib/gprpp/arena.h +2 -3
  90. data/src/core/lib/gprpp/inlined_vector.h +9 -0
  91. data/src/core/lib/gprpp/map.h +3 -501
  92. data/src/core/lib/gprpp/memory.h +45 -41
  93. data/src/core/lib/gprpp/mpscq.cc +108 -0
  94. data/src/core/lib/gprpp/mpscq.h +98 -0
  95. data/src/core/lib/gprpp/orphanable.h +6 -11
  96. data/src/core/lib/gprpp/ref_counted.h +25 -19
  97. data/src/core/lib/gprpp/set.h +33 -0
  98. data/src/core/lib/gprpp/thd.h +2 -4
  99. data/src/core/lib/http/httpcli.cc +1 -1
  100. data/src/core/lib/http/httpcli_security_connector.cc +15 -11
  101. data/src/core/lib/http/parser.cc +1 -1
  102. data/src/core/lib/iomgr/buffer_list.cc +4 -5
  103. data/src/core/lib/iomgr/buffer_list.h +5 -6
  104. data/src/core/lib/iomgr/call_combiner.cc +4 -5
  105. data/src/core/lib/iomgr/call_combiner.h +2 -2
  106. data/src/core/lib/iomgr/cfstream_handle.h +3 -5
  107. data/src/core/lib/iomgr/closure.h +8 -3
  108. data/src/core/lib/iomgr/combiner.cc +45 -82
  109. data/src/core/lib/iomgr/combiner.h +32 -8
  110. data/src/core/lib/iomgr/endpoint_cfstream.cc +5 -3
  111. data/src/core/lib/iomgr/ev_epoll1_linux.cc +19 -15
  112. data/src/core/lib/iomgr/exec_ctx.h +4 -3
  113. data/src/core/lib/iomgr/executor.cc +4 -2
  114. data/src/core/lib/iomgr/executor.h +3 -0
  115. data/src/core/lib/iomgr/executor/mpmcqueue.h +3 -6
  116. data/src/core/lib/iomgr/executor/threadpool.cc +1 -2
  117. data/src/core/lib/iomgr/executor/threadpool.h +7 -11
  118. data/src/core/lib/iomgr/resource_quota.cc +55 -51
  119. data/src/core/lib/iomgr/resource_quota.h +13 -9
  120. data/src/core/lib/iomgr/socket_utils_common_posix.cc +13 -0
  121. data/src/core/lib/iomgr/socket_utils_posix.h +4 -0
  122. data/src/core/lib/iomgr/tcp_client_posix.cc +4 -11
  123. data/src/core/lib/iomgr/tcp_custom.cc +9 -7
  124. data/src/core/lib/iomgr/tcp_posix.cc +20 -16
  125. data/src/core/lib/iomgr/tcp_server.h +1 -4
  126. data/src/core/lib/iomgr/tcp_server_custom.cc +5 -5
  127. data/src/core/lib/iomgr/tcp_server_posix.cc +1 -1
  128. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +2 -11
  129. data/src/core/lib/iomgr/timer_custom.cc +2 -2
  130. data/src/core/lib/iomgr/udp_server.cc +3 -2
  131. data/src/core/lib/iomgr/udp_server.h +6 -12
  132. data/src/core/lib/json/json.h +1 -1
  133. data/src/core/lib/json/json_string.cc +2 -2
  134. data/src/core/lib/profiling/basic_timers.cc +2 -2
  135. data/src/core/lib/security/credentials/alts/alts_credentials.cc +2 -2
  136. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc +1 -1
  137. data/src/core/lib/security/credentials/credentials.h +4 -20
  138. data/src/core/lib/security/credentials/fake/fake_credentials.cc +4 -4
  139. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +1 -3
  140. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +64 -0
  141. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +4 -4
  142. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +9 -7
  143. data/src/core/lib/security/security_connector/load_system_roots_linux.cc +2 -0
  144. data/src/core/lib/security/security_connector/local/local_security_connector.cc +4 -4
  145. data/src/core/lib/security/security_connector/security_connector.cc +1 -0
  146. data/src/core/lib/security/security_connector/security_connector.h +19 -17
  147. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +8 -5
  148. data/src/core/lib/security/security_connector/ssl_utils.cc +2 -2
  149. data/src/core/lib/security/security_connector/ssl_utils.h +1 -1
  150. data/src/core/lib/security/security_connector/tls/spiffe_security_connector.cc +14 -6
  151. data/src/core/lib/security/security_connector/tls/spiffe_security_connector.h +4 -2
  152. data/src/core/lib/security/transport/client_auth_filter.cc +17 -17
  153. data/src/core/lib/security/transport/security_handshaker.cc +29 -13
  154. data/src/core/lib/security/transport/security_handshaker.h +4 -2
  155. data/src/core/lib/security/transport/server_auth_filter.cc +14 -14
  156. data/src/core/lib/slice/slice.cc +2 -10
  157. data/src/core/lib/slice/slice_hash_table.h +4 -6
  158. data/src/core/lib/slice/slice_intern.cc +42 -39
  159. data/src/core/lib/slice/slice_internal.h +3 -3
  160. data/src/core/lib/slice/slice_utils.h +21 -4
  161. data/src/core/lib/slice/slice_weak_hash_table.h +4 -6
  162. data/src/core/lib/surface/call.cc +3 -3
  163. data/src/core/lib/surface/channel.cc +7 -0
  164. data/src/core/lib/surface/completion_queue.cc +12 -11
  165. data/src/core/lib/surface/completion_queue.h +4 -2
  166. data/src/core/lib/surface/init.cc +1 -0
  167. data/src/core/lib/surface/lame_client.cc +33 -18
  168. data/src/core/lib/surface/server.cc +77 -76
  169. data/src/core/lib/surface/version.cc +1 -1
  170. data/src/core/lib/transport/byte_stream.h +3 -7
  171. data/src/core/lib/transport/connectivity_state.cc +112 -98
  172. data/src/core/lib/transport/connectivity_state.h +100 -50
  173. data/src/core/lib/transport/static_metadata.cc +276 -288
  174. data/src/core/lib/transport/static_metadata.h +73 -76
  175. data/src/core/lib/transport/status_conversion.cc +1 -1
  176. data/src/core/lib/transport/status_metadata.cc +1 -1
  177. data/src/core/lib/transport/transport.cc +2 -2
  178. data/src/core/lib/transport/transport.h +12 -4
  179. data/src/core/lib/transport/transport_op_string.cc +14 -11
  180. data/src/core/tsi/alts/frame_protector/alts_unseal_privacy_integrity_crypter.cc +1 -1
  181. data/src/core/tsi/alts/handshaker/alts_shared_resource.cc +1 -1
  182. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +5 -5
  183. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +12 -2
  184. data/src/core/tsi/fake_transport_security.cc +7 -5
  185. data/src/core/tsi/grpc_shadow_boringssl.h +2918 -2627
  186. data/src/core/tsi/local_transport_security.cc +8 -6
  187. data/src/core/tsi/ssl/session_cache/ssl_session.h +1 -3
  188. data/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc +1 -2
  189. data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +7 -5
  190. data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +4 -6
  191. data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +1 -2
  192. data/src/core/tsi/ssl_transport_security.cc +12 -12
  193. data/src/core/tsi/ssl_transport_security.h +2 -2
  194. data/src/core/tsi/transport_security_grpc.cc +7 -0
  195. data/src/core/tsi/transport_security_grpc.h +6 -0
  196. data/src/ruby/ext/grpc/extconf.rb +1 -0
  197. data/src/ruby/ext/grpc/rb_call.c +1 -1
  198. data/src/ruby/ext/grpc/rb_channel.c +1 -1
  199. data/src/ruby/lib/grpc/generic/bidi_call.rb +1 -1
  200. data/src/ruby/lib/grpc/generic/rpc_server.rb +1 -1
  201. data/src/ruby/lib/grpc/version.rb +1 -1
  202. data/src/ruby/spec/google_rpc_status_utils_spec.rb +2 -2
  203. data/third_party/boringssl/crypto/asn1/a_bool.c +18 -5
  204. data/third_party/boringssl/crypto/asn1/a_d2i_fp.c +17 -221
  205. data/third_party/boringssl/crypto/asn1/a_dup.c +0 -24
  206. data/third_party/boringssl/crypto/asn1/a_enum.c +2 -2
  207. data/third_party/boringssl/crypto/asn1/a_i2d_fp.c +10 -72
  208. data/third_party/boringssl/crypto/asn1/a_int.c +12 -71
  209. data/third_party/boringssl/crypto/asn1/a_mbstr.c +110 -216
  210. data/third_party/boringssl/crypto/asn1/a_object.c +16 -5
  211. data/third_party/boringssl/crypto/asn1/a_strnid.c +1 -0
  212. data/third_party/boringssl/crypto/asn1/asn1_lib.c +5 -1
  213. data/third_party/boringssl/crypto/asn1/tasn_enc.c +3 -1
  214. data/third_party/boringssl/crypto/base64/base64.c +2 -2
  215. data/third_party/boringssl/crypto/bio/bio.c +73 -9
  216. data/third_party/boringssl/crypto/bio/connect.c +4 -0
  217. data/third_party/boringssl/crypto/bio/fd.c +4 -0
  218. data/third_party/boringssl/crypto/bio/file.c +5 -2
  219. data/third_party/boringssl/crypto/bio/socket.c +4 -0
  220. data/third_party/boringssl/crypto/bio/socket_helper.c +4 -0
  221. data/third_party/boringssl/crypto/bn_extra/convert.c +11 -7
  222. data/third_party/boringssl/crypto/bytestring/ber.c +8 -4
  223. data/third_party/boringssl/crypto/bytestring/cbb.c +19 -7
  224. data/third_party/boringssl/crypto/bytestring/cbs.c +28 -15
  225. data/third_party/boringssl/crypto/bytestring/internal.h +28 -7
  226. data/third_party/boringssl/crypto/bytestring/unicode.c +155 -0
  227. data/third_party/boringssl/crypto/chacha/chacha.c +36 -19
  228. data/third_party/boringssl/crypto/chacha/internal.h +45 -0
  229. data/third_party/boringssl/crypto/cipher_extra/cipher_extra.c +29 -0
  230. data/third_party/boringssl/crypto/cipher_extra/e_aesccm.c +269 -25
  231. data/third_party/boringssl/crypto/cipher_extra/e_aesctrhmac.c +16 -14
  232. data/third_party/boringssl/crypto/cipher_extra/e_aesgcmsiv.c +54 -38
  233. data/third_party/boringssl/crypto/cipher_extra/e_chacha20poly1305.c +133 -41
  234. data/third_party/boringssl/crypto/cipher_extra/e_tls.c +23 -15
  235. data/third_party/boringssl/crypto/cipher_extra/tls_cbc.c +24 -15
  236. data/third_party/boringssl/crypto/cmac/cmac.c +62 -25
  237. data/third_party/boringssl/crypto/conf/conf.c +7 -0
  238. data/third_party/boringssl/crypto/cpu-arm-linux.c +4 -148
  239. data/third_party/boringssl/crypto/cpu-arm-linux.h +201 -0
  240. data/third_party/boringssl/crypto/cpu-intel.c +45 -51
  241. data/third_party/boringssl/crypto/crypto.c +39 -22
  242. data/third_party/boringssl/crypto/curve25519/spake25519.c +1 -1
  243. data/third_party/boringssl/crypto/dsa/dsa.c +77 -53
  244. data/third_party/boringssl/crypto/ec_extra/ec_asn1.c +20 -8
  245. data/third_party/boringssl/crypto/ec_extra/ec_derive.c +96 -0
  246. data/third_party/boringssl/crypto/{ecdh/ecdh.c → ecdh_extra/ecdh_extra.c} +20 -58
  247. data/third_party/boringssl/crypto/ecdsa_extra/ecdsa_asn1.c +1 -9
  248. data/third_party/boringssl/crypto/engine/engine.c +2 -1
  249. data/third_party/boringssl/crypto/err/err.c +2 -0
  250. data/third_party/boringssl/crypto/err/internal.h +2 -2
  251. data/third_party/boringssl/crypto/evp/evp.c +89 -8
  252. data/third_party/boringssl/crypto/evp/evp_asn1.c +56 -5
  253. data/third_party/boringssl/crypto/evp/evp_ctx.c +52 -14
  254. data/third_party/boringssl/crypto/evp/internal.h +18 -1
  255. data/third_party/boringssl/crypto/evp/p_dsa_asn1.c +5 -0
  256. data/third_party/boringssl/crypto/evp/p_ec.c +51 -3
  257. data/third_party/boringssl/crypto/evp/p_ec_asn1.c +6 -7
  258. data/third_party/boringssl/crypto/evp/p_ed25519.c +36 -3
  259. data/third_party/boringssl/crypto/evp/p_ed25519_asn1.c +76 -45
  260. data/third_party/boringssl/crypto/evp/p_rsa.c +3 -1
  261. data/third_party/boringssl/crypto/evp/p_rsa_asn1.c +5 -0
  262. data/third_party/boringssl/crypto/evp/p_x25519.c +110 -0
  263. data/third_party/boringssl/crypto/evp/p_x25519_asn1.c +249 -0
  264. data/third_party/boringssl/crypto/evp/scrypt.c +6 -2
  265. data/third_party/boringssl/crypto/fipsmodule/aes/aes.c +34 -274
  266. data/third_party/boringssl/crypto/fipsmodule/aes/internal.h +161 -21
  267. data/third_party/boringssl/crypto/fipsmodule/aes/key_wrap.c +111 -13
  268. data/third_party/boringssl/crypto/fipsmodule/aes/mode_wrappers.c +17 -21
  269. data/third_party/boringssl/crypto/fipsmodule/bcm.c +119 -7
  270. data/third_party/boringssl/crypto/fipsmodule/bn/bn.c +19 -2
  271. data/third_party/boringssl/crypto/fipsmodule/bn/cmp.c +2 -2
  272. data/third_party/boringssl/crypto/fipsmodule/bn/ctx.c +93 -160
  273. data/third_party/boringssl/crypto/fipsmodule/bn/div.c +48 -57
  274. data/third_party/boringssl/crypto/fipsmodule/bn/div_extra.c +87 -0
  275. data/third_party/boringssl/crypto/fipsmodule/bn/exponentiation.c +143 -211
  276. data/third_party/boringssl/crypto/fipsmodule/bn/gcd.c +0 -305
  277. data/third_party/boringssl/crypto/fipsmodule/bn/gcd_extra.c +325 -0
  278. data/third_party/boringssl/crypto/fipsmodule/bn/internal.h +168 -50
  279. data/third_party/boringssl/crypto/fipsmodule/bn/montgomery.c +68 -92
  280. data/third_party/boringssl/crypto/fipsmodule/bn/montgomery_inv.c +7 -6
  281. data/third_party/boringssl/crypto/fipsmodule/bn/mul.c +11 -14
  282. data/third_party/boringssl/crypto/fipsmodule/bn/prime.c +358 -443
  283. data/third_party/boringssl/crypto/fipsmodule/bn/random.c +25 -35
  284. data/third_party/boringssl/crypto/fipsmodule/bn/rsaz_exp.c +20 -25
  285. data/third_party/boringssl/crypto/fipsmodule/bn/rsaz_exp.h +76 -5
  286. data/third_party/boringssl/crypto/fipsmodule/bn/shift.c +14 -14
  287. data/third_party/boringssl/crypto/fipsmodule/cipher/cipher.c +7 -2
  288. data/third_party/boringssl/crypto/fipsmodule/cipher/e_aes.c +383 -516
  289. data/third_party/boringssl/crypto/fipsmodule/cipher/e_des.c +4 -0
  290. data/third_party/boringssl/crypto/fipsmodule/cipher/internal.h +3 -4
  291. data/third_party/boringssl/crypto/fipsmodule/delocate.h +3 -2
  292. data/third_party/boringssl/crypto/fipsmodule/digest/digest.c +32 -17
  293. data/third_party/boringssl/crypto/fipsmodule/digest/md32_common.h +3 -3
  294. data/third_party/boringssl/crypto/fipsmodule/ec/ec.c +228 -122
  295. data/third_party/boringssl/crypto/fipsmodule/ec/ec_key.c +34 -8
  296. data/third_party/boringssl/crypto/fipsmodule/ec/ec_montgomery.c +311 -98
  297. data/third_party/boringssl/crypto/fipsmodule/ec/felem.c +82 -0
  298. data/third_party/boringssl/crypto/fipsmodule/ec/internal.h +263 -97
  299. data/third_party/boringssl/crypto/fipsmodule/ec/oct.c +22 -59
  300. data/third_party/boringssl/crypto/fipsmodule/ec/p224-64.c +317 -234
  301. data/third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64-table.h +9473 -9475
  302. data/third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64.c +313 -109
  303. data/third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64.h +36 -0
  304. data/third_party/boringssl/crypto/fipsmodule/ec/scalar.c +96 -0
  305. data/third_party/boringssl/crypto/fipsmodule/ec/simple.c +126 -792
  306. data/third_party/boringssl/crypto/fipsmodule/ec/simple_mul.c +84 -0
  307. data/third_party/boringssl/crypto/fipsmodule/ec/util.c +163 -12
  308. data/third_party/boringssl/crypto/fipsmodule/ec/wnaf.c +84 -211
  309. data/third_party/boringssl/crypto/fipsmodule/ecdh/ecdh.c +122 -0
  310. data/third_party/boringssl/crypto/fipsmodule/ecdsa/ecdsa.c +60 -205
  311. data/third_party/boringssl/crypto/fipsmodule/fips_shared_support.c +32 -0
  312. data/third_party/boringssl/crypto/fipsmodule/is_fips.c +2 -0
  313. data/third_party/boringssl/crypto/fipsmodule/md4/md4.c +3 -1
  314. data/third_party/boringssl/crypto/fipsmodule/md5/internal.h +37 -0
  315. data/third_party/boringssl/crypto/fipsmodule/md5/md5.c +11 -8
  316. data/third_party/boringssl/crypto/fipsmodule/modes/cbc.c +35 -79
  317. data/third_party/boringssl/crypto/fipsmodule/modes/cfb.c +7 -39
  318. data/third_party/boringssl/crypto/fipsmodule/modes/ctr.c +7 -27
  319. data/third_party/boringssl/crypto/fipsmodule/modes/gcm.c +123 -309
  320. data/third_party/boringssl/crypto/fipsmodule/modes/internal.h +189 -126
  321. data/third_party/boringssl/crypto/fipsmodule/modes/ofb.c +3 -2
  322. data/third_party/boringssl/crypto/fipsmodule/rand/ctrdrbg.c +2 -2
  323. data/third_party/boringssl/crypto/fipsmodule/rand/internal.h +35 -0
  324. data/third_party/boringssl/crypto/fipsmodule/rand/rand.c +24 -19
  325. data/third_party/boringssl/crypto/fipsmodule/rand/urandom.c +256 -77
  326. data/third_party/boringssl/crypto/fipsmodule/rsa/padding.c +10 -7
  327. data/third_party/boringssl/crypto/fipsmodule/rsa/rsa.c +5 -1
  328. data/third_party/boringssl/crypto/fipsmodule/rsa/rsa_impl.c +131 -14
  329. data/third_party/boringssl/crypto/fipsmodule/self_check/self_check.c +83 -10
  330. data/third_party/boringssl/crypto/fipsmodule/sha/internal.h +53 -0
  331. data/third_party/boringssl/crypto/fipsmodule/sha/sha1.c +9 -13
  332. data/third_party/boringssl/crypto/fipsmodule/sha/sha256.c +18 -12
  333. data/third_party/boringssl/crypto/fipsmodule/sha/sha512.c +95 -168
  334. data/third_party/boringssl/crypto/hrss/hrss.c +2201 -0
  335. data/third_party/boringssl/crypto/hrss/internal.h +62 -0
  336. data/third_party/boringssl/crypto/internal.h +95 -20
  337. data/third_party/boringssl/crypto/lhash/lhash.c +45 -33
  338. data/third_party/boringssl/crypto/mem.c +39 -2
  339. data/third_party/boringssl/crypto/obj/obj.c +4 -4
  340. data/third_party/boringssl/crypto/obj/obj_dat.h +6181 -875
  341. data/third_party/boringssl/crypto/pem/pem_all.c +2 -3
  342. data/third_party/boringssl/crypto/pem/pem_info.c +144 -162
  343. data/third_party/boringssl/crypto/pem/pem_lib.c +53 -52
  344. data/third_party/boringssl/crypto/pem/pem_pkey.c +13 -21
  345. data/third_party/boringssl/crypto/pkcs7/pkcs7.c +15 -22
  346. data/third_party/boringssl/crypto/pkcs7/pkcs7_x509.c +168 -16
  347. data/third_party/boringssl/crypto/pkcs8/internal.h +11 -0
  348. data/third_party/boringssl/crypto/pkcs8/p5_pbev2.c +24 -15
  349. data/third_party/boringssl/crypto/pkcs8/pkcs8.c +42 -25
  350. data/third_party/boringssl/crypto/pkcs8/pkcs8_x509.c +559 -43
  351. data/third_party/boringssl/crypto/pool/internal.h +1 -1
  352. data/third_party/boringssl/crypto/pool/pool.c +21 -0
  353. data/third_party/boringssl/crypto/rand_extra/deterministic.c +8 -0
  354. data/third_party/boringssl/crypto/rand_extra/fuchsia.c +1 -14
  355. data/third_party/boringssl/crypto/refcount_lock.c +2 -2
  356. data/third_party/boringssl/crypto/rsa_extra/rsa_print.c +22 -0
  357. data/third_party/boringssl/crypto/siphash/siphash.c +80 -0
  358. data/third_party/boringssl/crypto/stack/stack.c +83 -32
  359. data/third_party/boringssl/crypto/thread_none.c +2 -2
  360. data/third_party/boringssl/crypto/thread_pthread.c +2 -2
  361. data/third_party/boringssl/crypto/thread_win.c +38 -19
  362. data/third_party/boringssl/crypto/x509/a_strex.c +22 -2
  363. data/third_party/boringssl/crypto/x509/asn1_gen.c +2 -1
  364. data/third_party/boringssl/crypto/x509/by_dir.c +7 -0
  365. data/third_party/boringssl/crypto/x509/by_file.c +12 -10
  366. data/third_party/boringssl/crypto/x509/t_crl.c +5 -8
  367. data/third_party/boringssl/crypto/x509/t_req.c +1 -3
  368. data/third_party/boringssl/crypto/x509/t_x509.c +5 -8
  369. data/third_party/boringssl/crypto/x509/x509_cmp.c +1 -1
  370. data/third_party/boringssl/crypto/x509/x509_def.c +1 -1
  371. data/third_party/boringssl/crypto/x509/x509_lu.c +114 -5
  372. data/third_party/boringssl/crypto/x509/x509_req.c +20 -0
  373. data/third_party/boringssl/crypto/x509/x509_set.c +5 -0
  374. data/third_party/boringssl/crypto/x509/x509_trs.c +1 -0
  375. data/third_party/boringssl/crypto/x509/x509_txt.c +4 -5
  376. data/third_party/boringssl/crypto/x509/x509_vfy.c +145 -138
  377. data/third_party/boringssl/crypto/x509/x509_vpm.c +2 -0
  378. data/third_party/boringssl/crypto/x509/x509cset.c +40 -0
  379. data/third_party/boringssl/crypto/x509/x509name.c +2 -3
  380. data/third_party/boringssl/crypto/x509/x_all.c +109 -210
  381. data/third_party/boringssl/crypto/x509/x_x509.c +6 -0
  382. data/third_party/boringssl/crypto/x509v3/ext_dat.h +1 -3
  383. data/third_party/boringssl/crypto/x509v3/internal.h +56 -0
  384. data/third_party/boringssl/crypto/x509v3/pcy_cache.c +2 -0
  385. data/third_party/boringssl/crypto/x509v3/pcy_node.c +1 -0
  386. data/third_party/boringssl/crypto/x509v3/pcy_tree.c +4 -2
  387. data/third_party/boringssl/crypto/x509v3/v3_akey.c +5 -2
  388. data/third_party/boringssl/crypto/x509v3/v3_alt.c +19 -13
  389. data/third_party/boringssl/crypto/x509v3/v3_conf.c +2 -1
  390. data/third_party/boringssl/crypto/x509v3/v3_cpols.c +3 -2
  391. data/third_party/boringssl/crypto/x509v3/v3_genn.c +1 -6
  392. data/third_party/boringssl/crypto/x509v3/v3_lib.c +1 -0
  393. data/third_party/boringssl/crypto/x509v3/v3_ocsp.c +68 -0
  394. data/third_party/boringssl/crypto/x509v3/v3_pci.c +2 -1
  395. data/third_party/boringssl/crypto/x509v3/v3_purp.c +47 -69
  396. data/third_party/boringssl/crypto/x509v3/v3_skey.c +5 -2
  397. data/third_party/boringssl/crypto/x509v3/v3_utl.c +69 -25
  398. data/third_party/boringssl/include/openssl/aead.h +45 -19
  399. data/third_party/boringssl/include/openssl/aes.h +32 -7
  400. data/third_party/boringssl/include/openssl/asn1.h +7 -77
  401. data/third_party/boringssl/include/openssl/base.h +120 -6
  402. data/third_party/boringssl/include/openssl/base64.h +4 -1
  403. data/third_party/boringssl/include/openssl/bio.h +112 -81
  404. data/third_party/boringssl/include/openssl/blowfish.h +3 -3
  405. data/third_party/boringssl/include/openssl/bn.h +55 -29
  406. data/third_party/boringssl/include/openssl/buf.h +2 -2
  407. data/third_party/boringssl/include/openssl/bytestring.h +54 -32
  408. data/third_party/boringssl/include/openssl/cast.h +2 -2
  409. data/third_party/boringssl/include/openssl/cipher.h +46 -16
  410. data/third_party/boringssl/include/openssl/cmac.h +6 -2
  411. data/third_party/boringssl/include/openssl/conf.h +3 -6
  412. data/third_party/boringssl/include/openssl/cpu.h +25 -9
  413. data/third_party/boringssl/include/openssl/crypto.h +32 -10
  414. data/third_party/boringssl/include/openssl/curve25519.h +4 -4
  415. data/third_party/boringssl/include/openssl/dh.h +3 -2
  416. data/third_party/boringssl/include/openssl/digest.h +21 -7
  417. data/third_party/boringssl/include/openssl/dsa.h +8 -2
  418. data/third_party/boringssl/include/openssl/e_os2.h +18 -0
  419. data/third_party/boringssl/include/openssl/ec.h +25 -21
  420. data/third_party/boringssl/include/openssl/ec_key.h +36 -8
  421. data/third_party/boringssl/include/openssl/ecdh.h +17 -0
  422. data/third_party/boringssl/include/openssl/ecdsa.h +3 -3
  423. data/third_party/boringssl/include/openssl/engine.h +4 -4
  424. data/third_party/boringssl/include/openssl/err.h +3 -0
  425. data/third_party/boringssl/include/openssl/evp.h +199 -42
  426. data/third_party/boringssl/include/openssl/hmac.h +4 -4
  427. data/third_party/boringssl/include/openssl/hrss.h +100 -0
  428. data/third_party/boringssl/include/openssl/lhash.h +131 -23
  429. data/third_party/boringssl/include/openssl/md4.h +6 -4
  430. data/third_party/boringssl/include/openssl/md5.h +6 -4
  431. data/third_party/boringssl/include/openssl/mem.h +6 -2
  432. data/third_party/boringssl/include/openssl/nid.h +3 -0
  433. data/third_party/boringssl/include/openssl/obj.h +3 -0
  434. data/third_party/boringssl/include/openssl/pem.h +102 -64
  435. data/third_party/boringssl/include/openssl/pkcs7.h +136 -3
  436. data/third_party/boringssl/include/openssl/pkcs8.h +42 -3
  437. data/third_party/boringssl/include/openssl/pool.h +13 -2
  438. data/third_party/boringssl/include/openssl/ripemd.h +5 -4
  439. data/third_party/boringssl/include/openssl/rsa.h +46 -15
  440. data/third_party/boringssl/include/openssl/sha.h +40 -28
  441. data/third_party/boringssl/include/openssl/siphash.h +37 -0
  442. data/third_party/boringssl/include/openssl/span.h +17 -9
  443. data/third_party/boringssl/include/openssl/ssl.h +766 -393
  444. data/third_party/boringssl/include/openssl/ssl3.h +4 -3
  445. data/third_party/boringssl/include/openssl/stack.h +134 -77
  446. data/third_party/boringssl/include/openssl/thread.h +1 -1
  447. data/third_party/boringssl/include/openssl/tls1.h +25 -9
  448. data/third_party/boringssl/include/openssl/type_check.h +14 -15
  449. data/third_party/boringssl/include/openssl/x509.h +28 -3
  450. data/third_party/boringssl/include/openssl/x509_vfy.h +98 -32
  451. data/third_party/boringssl/include/openssl/x509v3.h +17 -13
  452. data/third_party/boringssl/ssl/d1_both.cc +9 -18
  453. data/third_party/boringssl/ssl/d1_lib.cc +4 -3
  454. data/third_party/boringssl/ssl/d1_pkt.cc +4 -4
  455. data/third_party/boringssl/ssl/d1_srtp.cc +15 -15
  456. data/third_party/boringssl/ssl/dtls_method.cc +0 -1
  457. data/third_party/boringssl/ssl/dtls_record.cc +28 -28
  458. data/third_party/boringssl/ssl/handoff.cc +295 -91
  459. data/third_party/boringssl/ssl/handshake.cc +133 -72
  460. data/third_party/boringssl/ssl/handshake_client.cc +218 -189
  461. data/third_party/boringssl/ssl/handshake_server.cc +399 -272
  462. data/third_party/boringssl/ssl/internal.h +1413 -928
  463. data/third_party/boringssl/ssl/s3_both.cc +175 -36
  464. data/third_party/boringssl/ssl/s3_lib.cc +9 -13
  465. data/third_party/boringssl/ssl/s3_pkt.cc +63 -29
  466. data/third_party/boringssl/ssl/ssl_aead_ctx.cc +55 -35
  467. data/third_party/boringssl/ssl/ssl_asn1.cc +57 -73
  468. data/third_party/boringssl/ssl/ssl_buffer.cc +13 -12
  469. data/third_party/boringssl/ssl/ssl_cert.cc +313 -210
  470. data/third_party/boringssl/ssl/ssl_cipher.cc +159 -221
  471. data/third_party/boringssl/ssl/ssl_file.cc +2 -0
  472. data/third_party/boringssl/ssl/ssl_key_share.cc +164 -19
  473. data/third_party/boringssl/ssl/ssl_lib.cc +847 -555
  474. data/third_party/boringssl/ssl/ssl_privkey.cc +441 -111
  475. data/third_party/boringssl/ssl/ssl_session.cc +230 -178
  476. data/third_party/boringssl/ssl/ssl_transcript.cc +21 -142
  477. data/third_party/boringssl/ssl/ssl_versions.cc +88 -93
  478. data/third_party/boringssl/ssl/ssl_x509.cc +279 -218
  479. data/third_party/boringssl/ssl/t1_enc.cc +5 -96
  480. data/third_party/boringssl/ssl/t1_lib.cc +931 -678
  481. data/third_party/boringssl/ssl/tls13_both.cc +251 -121
  482. data/third_party/boringssl/ssl/tls13_client.cc +129 -73
  483. data/third_party/boringssl/ssl/tls13_enc.cc +350 -282
  484. data/third_party/boringssl/ssl/tls13_server.cc +259 -192
  485. data/third_party/boringssl/ssl/tls_method.cc +26 -21
  486. data/third_party/boringssl/ssl/tls_record.cc +42 -47
  487. data/third_party/boringssl/third_party/fiat/curve25519.c +261 -1324
  488. data/third_party/boringssl/third_party/fiat/curve25519_32.h +911 -0
  489. data/third_party/boringssl/third_party/fiat/curve25519_64.h +559 -0
  490. data/third_party/boringssl/third_party/fiat/p256.c +238 -999
  491. data/third_party/boringssl/third_party/fiat/p256_32.h +3226 -0
  492. data/third_party/boringssl/third_party/fiat/p256_64.h +1217 -0
  493. data/third_party/upb/upb/port_def.inc +1 -1
  494. data/third_party/upb/upb/table.c +2 -1
  495. metadata +71 -43
  496. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_load_balancer_api.h +0 -127
  497. data/src/core/lib/gpr/mpscq.cc +0 -117
  498. data/src/core/lib/gpr/mpscq.h +0 -88
  499. data/src/core/lib/gprpp/abstract.h +0 -47
  500. data/src/core/lib/gprpp/pair.h +0 -38
  501. data/third_party/boringssl/crypto/cipher_extra/e_ssl3.c +0 -460
  502. data/third_party/boringssl/crypto/fipsmodule/modes/ccm.c +0 -256
  503. data/third_party/boringssl/include/openssl/lhash_macros.h +0 -174
  504. data/third_party/boringssl/ssl/custom_extensions.cc +0 -265
@@ -31,7 +31,7 @@
31
31
  #define FUZZER_MODE false
32
32
  #endif
33
33
 
34
- namespace bssl {
34
+ BSSL_NAMESPACE_BEGIN
35
35
 
36
36
  SSLAEADContext::SSLAEADContext(uint16_t version_arg, bool is_dtls_arg,
37
37
  const SSL_CIPHER *cipher_arg)
@@ -40,10 +40,9 @@ SSLAEADContext::SSLAEADContext(uint16_t version_arg, bool is_dtls_arg,
40
40
  is_dtls_(is_dtls_arg),
41
41
  variable_nonce_included_in_record_(false),
42
42
  random_variable_nonce_(false),
43
+ xor_fixed_nonce_(false),
43
44
  omit_length_in_ad_(false),
44
- omit_version_in_ad_(false),
45
- omit_ad_(false),
46
- xor_fixed_nonce_(false) {
45
+ ad_is_header_(false) {
47
46
  OPENSSL_memset(fixed_nonce_, 0, sizeof(fixed_nonce_));
48
47
  }
49
48
 
@@ -55,7 +54,7 @@ UniquePtr<SSLAEADContext> SSLAEADContext::CreateNullCipher(bool is_dtls) {
55
54
  }
56
55
 
57
56
  UniquePtr<SSLAEADContext> SSLAEADContext::Create(
58
- enum evp_aead_direction_t direction, uint16_t version, int is_dtls,
57
+ enum evp_aead_direction_t direction, uint16_t version, bool is_dtls,
59
58
  const SSL_CIPHER *cipher, Span<const uint8_t> enc_key,
60
59
  Span<const uint8_t> mac_key, Span<const uint8_t> fixed_iv) {
61
60
  const EVP_AEAD *aead;
@@ -134,7 +133,7 @@ UniquePtr<SSLAEADContext> SSLAEADContext::Create(
134
133
  aead_ctx->xor_fixed_nonce_ = true;
135
134
  aead_ctx->variable_nonce_len_ = 8;
136
135
  aead_ctx->variable_nonce_included_in_record_ = false;
137
- aead_ctx->omit_ad_ = true;
136
+ aead_ctx->ad_is_header_ = true;
138
137
  assert(fixed_iv.size() >= aead_ctx->variable_nonce_len_);
139
138
  }
140
139
  } else {
@@ -142,12 +141,16 @@ UniquePtr<SSLAEADContext> SSLAEADContext::Create(
142
141
  aead_ctx->variable_nonce_included_in_record_ = true;
143
142
  aead_ctx->random_variable_nonce_ = true;
144
143
  aead_ctx->omit_length_in_ad_ = true;
145
- aead_ctx->omit_version_in_ad_ = (protocol_version == SSL3_VERSION);
146
144
  }
147
145
 
148
146
  return aead_ctx;
149
147
  }
150
148
 
149
+ UniquePtr<SSLAEADContext> SSLAEADContext::CreatePlaceholderForQUIC(
150
+ uint16_t version, const SSL_CIPHER *cipher) {
151
+ return MakeUnique<SSLAEADContext>(version, false, cipher);
152
+ }
153
+
151
154
  void SSLAEADContext::SetVersionIfNullCipher(uint16_t version) {
152
155
  if (is_null_cipher()) {
153
156
  version_ = version;
@@ -193,6 +196,22 @@ bool SSLAEADContext::SuffixLen(size_t *out_suffix_len, const size_t in_len,
193
196
  extra_in_len);
194
197
  }
195
198
 
199
+ bool SSLAEADContext::CiphertextLen(size_t *out_len, const size_t in_len,
200
+ const size_t extra_in_len) const {
201
+ size_t len;
202
+ if (!SuffixLen(&len, in_len, extra_in_len)) {
203
+ return false;
204
+ }
205
+ len += ExplicitNonceLen();
206
+ len += in_len;
207
+ if (len < in_len || len >= 0xffff) {
208
+ OPENSSL_PUT_ERROR(SSL, ERR_R_OVERFLOW);
209
+ return false;
210
+ }
211
+ *out_len = len;
212
+ return true;
213
+ }
214
+
196
215
  size_t SSLAEADContext::MaxOverhead() const {
197
216
  return ExplicitNonceLen() +
198
217
  (is_null_cipher() || FUZZER_MODE
@@ -200,31 +219,28 @@ size_t SSLAEADContext::MaxOverhead() const {
200
219
  : EVP_AEAD_max_overhead(EVP_AEAD_CTX_aead(ctx_.get())));
201
220
  }
202
221
 
203
- size_t SSLAEADContext::GetAdditionalData(uint8_t out[13], uint8_t type,
204
- uint16_t record_version,
205
- const uint8_t seqnum[8],
206
- size_t plaintext_len) {
207
- if (omit_ad_) {
208
- return 0;
222
+ Span<const uint8_t> SSLAEADContext::GetAdditionalData(
223
+ uint8_t storage[13], uint8_t type, uint16_t record_version,
224
+ const uint8_t seqnum[8], size_t plaintext_len, Span<const uint8_t> header) {
225
+ if (ad_is_header_) {
226
+ return header;
209
227
  }
210
228
 
211
- OPENSSL_memcpy(out, seqnum, 8);
229
+ OPENSSL_memcpy(storage, seqnum, 8);
212
230
  size_t len = 8;
213
- out[len++] = type;
214
- if (!omit_version_in_ad_) {
215
- out[len++] = static_cast<uint8_t>((record_version >> 8));
216
- out[len++] = static_cast<uint8_t>(record_version);
217
- }
231
+ storage[len++] = type;
232
+ storage[len++] = static_cast<uint8_t>((record_version >> 8));
233
+ storage[len++] = static_cast<uint8_t>(record_version);
218
234
  if (!omit_length_in_ad_) {
219
- out[len++] = static_cast<uint8_t>((plaintext_len >> 8));
220
- out[len++] = static_cast<uint8_t>(plaintext_len);
235
+ storage[len++] = static_cast<uint8_t>((plaintext_len >> 8));
236
+ storage[len++] = static_cast<uint8_t>(plaintext_len);
221
237
  }
222
- return len;
238
+ return MakeConstSpan(storage, len);
223
239
  }
224
240
 
225
241
  bool SSLAEADContext::Open(Span<uint8_t> *out, uint8_t type,
226
242
  uint16_t record_version, const uint8_t seqnum[8],
227
- Span<uint8_t> in) {
243
+ Span<const uint8_t> header, Span<uint8_t> in) {
228
244
  if (is_null_cipher() || FUZZER_MODE) {
229
245
  // Handle the initial NULL cipher.
230
246
  *out = in;
@@ -243,9 +259,10 @@ bool SSLAEADContext::Open(Span<uint8_t> *out, uint8_t type,
243
259
  }
244
260
  plaintext_len = in.size() - overhead;
245
261
  }
246
- uint8_t ad[13];
247
- size_t ad_len =
248
- GetAdditionalData(ad, type, record_version, seqnum, plaintext_len);
262
+
263
+ uint8_t ad_storage[13];
264
+ Span<const uint8_t> ad = GetAdditionalData(ad_storage, type, record_version,
265
+ seqnum, plaintext_len, header);
249
266
 
250
267
  // Assemble the nonce.
251
268
  uint8_t nonce[EVP_AEAD_MAX_NONCE_LENGTH];
@@ -286,7 +303,8 @@ bool SSLAEADContext::Open(Span<uint8_t> *out, uint8_t type,
286
303
  // Decrypt in-place.
287
304
  size_t len;
288
305
  if (!EVP_AEAD_CTX_open(ctx_.get(), in.data(), &len, in.size(), nonce,
289
- nonce_len, in.data(), in.size(), ad, ad_len)) {
306
+ nonce_len, in.data(), in.size(), ad.data(),
307
+ ad.size())) {
290
308
  return false;
291
309
  }
292
310
  *out = in.subspan(0, len);
@@ -296,7 +314,8 @@ bool SSLAEADContext::Open(Span<uint8_t> *out, uint8_t type,
296
314
  bool SSLAEADContext::SealScatter(uint8_t *out_prefix, uint8_t *out,
297
315
  uint8_t *out_suffix, uint8_t type,
298
316
  uint16_t record_version,
299
- const uint8_t seqnum[8], const uint8_t *in,
317
+ const uint8_t seqnum[8],
318
+ Span<const uint8_t> header, const uint8_t *in,
300
319
  size_t in_len, const uint8_t *extra_in,
301
320
  size_t extra_in_len) {
302
321
  const size_t prefix_len = ExplicitNonceLen();
@@ -319,8 +338,9 @@ bool SSLAEADContext::SealScatter(uint8_t *out_prefix, uint8_t *out,
319
338
  return true;
320
339
  }
321
340
 
322
- uint8_t ad[13];
323
- size_t ad_len = GetAdditionalData(ad, type, record_version, seqnum, in_len);
341
+ uint8_t ad_storage[13];
342
+ Span<const uint8_t> ad = GetAdditionalData(ad_storage, type, record_version,
343
+ seqnum, in_len, header);
324
344
 
325
345
  // Assemble the nonce.
326
346
  uint8_t nonce[EVP_AEAD_MAX_NONCE_LENGTH];
@@ -371,15 +391,15 @@ bool SSLAEADContext::SealScatter(uint8_t *out_prefix, uint8_t *out,
371
391
  size_t written_suffix_len;
372
392
  bool result = !!EVP_AEAD_CTX_seal_scatter(
373
393
  ctx_.get(), out, out_suffix, &written_suffix_len, suffix_len, nonce,
374
- nonce_len, in, in_len, extra_in, extra_in_len, ad, ad_len);
394
+ nonce_len, in, in_len, extra_in, extra_in_len, ad.data(), ad.size());
375
395
  assert(!result || written_suffix_len == suffix_len);
376
396
  return result;
377
397
  }
378
398
 
379
399
  bool SSLAEADContext::Seal(uint8_t *out, size_t *out_len, size_t max_out_len,
380
400
  uint8_t type, uint16_t record_version,
381
- const uint8_t seqnum[8], const uint8_t *in,
382
- size_t in_len) {
401
+ const uint8_t seqnum[8], Span<const uint8_t> header,
402
+ const uint8_t *in, size_t in_len) {
383
403
  const size_t prefix_len = ExplicitNonceLen();
384
404
  size_t suffix_len;
385
405
  if (!SuffixLen(&suffix_len, in_len, 0)) {
@@ -397,7 +417,7 @@ bool SSLAEADContext::Seal(uint8_t *out, size_t *out_len, size_t max_out_len,
397
417
  }
398
418
 
399
419
  if (!SealScatter(out, out + prefix_len, out + prefix_len + in_len, type,
400
- record_version, seqnum, in, in_len, 0, 0)) {
420
+ record_version, seqnum, header, in, in_len, 0, 0)) {
401
421
  return false;
402
422
  }
403
423
  *out_len = prefix_len + in_len + suffix_len;
@@ -409,4 +429,4 @@ bool SSLAEADContext::GetIV(const uint8_t **out_iv, size_t *out_iv_len) const {
409
429
  EVP_AEAD_CTX_get_iv(ctx_.get(), out_iv, out_iv_len);
410
430
  }
411
431
 
412
- } // namespace bssl
432
+ BSSL_NAMESPACE_END
@@ -80,13 +80,6 @@
80
80
  * OTHER ENTITY BASED ON INFRINGEMENT OF INTELLECTUAL PROPERTY RIGHTS OR
81
81
  * OTHERWISE. */
82
82
 
83
- // Per C99, various stdint.h macros are unavailable in C++ unless some macros
84
- // are defined. C++11 overruled this decision, but older Android NDKs still
85
- // require it.
86
- #if !defined(__STDC_LIMIT_MACROS)
87
- #define __STDC_LIMIT_MACROS
88
- #endif
89
-
90
83
  #include <openssl/ssl.h>
91
84
 
92
85
  #include <limits.h>
@@ -104,7 +97,7 @@
104
97
  #include "internal.h"
105
98
 
106
99
 
107
- namespace bssl {
100
+ BSSL_NAMESPACE_BEGIN
108
101
 
109
102
  // An SSL_SESSION is serialized as the following ASN.1 structure:
110
103
  //
@@ -224,8 +217,8 @@ static int SSL_SESSION_to_bytes_full(const SSL_SESSION *in, CBB *cbb,
224
217
 
225
218
  // The peer certificate is only serialized if the SHA-256 isn't
226
219
  // serialized instead.
227
- if (sk_CRYPTO_BUFFER_num(in->certs) > 0 && !in->peer_sha256_valid) {
228
- const CRYPTO_BUFFER *buffer = sk_CRYPTO_BUFFER_value(in->certs, 0);
220
+ if (sk_CRYPTO_BUFFER_num(in->certs.get()) > 0 && !in->peer_sha256_valid) {
221
+ const CRYPTO_BUFFER *buffer = sk_CRYPTO_BUFFER_value(in->certs.get(), 0);
229
222
  if (!CBB_add_asn1(&session, &child, kPeerTag) ||
230
223
  !CBB_add_bytes(&child, CRYPTO_BUFFER_data(buffer),
231
224
  CRYPTO_BUFFER_len(buffer))) {
@@ -252,25 +245,26 @@ static int SSL_SESSION_to_bytes_full(const SSL_SESSION *in, CBB *cbb,
252
245
 
253
246
  if (in->psk_identity) {
254
247
  if (!CBB_add_asn1(&session, &child, kPSKIdentityTag) ||
255
- !CBB_add_asn1_octet_string(&child, (const uint8_t *)in->psk_identity,
256
- strlen(in->psk_identity))) {
248
+ !CBB_add_asn1_octet_string(&child,
249
+ (const uint8_t *)in->psk_identity.get(),
250
+ strlen(in->psk_identity.get()))) {
257
251
  OPENSSL_PUT_ERROR(SSL, ERR_R_MALLOC_FAILURE);
258
252
  return 0;
259
253
  }
260
254
  }
261
255
 
262
- if (in->tlsext_tick_lifetime_hint > 0) {
256
+ if (in->ticket_lifetime_hint > 0) {
263
257
  if (!CBB_add_asn1(&session, &child, kTicketLifetimeHintTag) ||
264
- !CBB_add_asn1_uint64(&child, in->tlsext_tick_lifetime_hint)) {
258
+ !CBB_add_asn1_uint64(&child, in->ticket_lifetime_hint)) {
265
259
  OPENSSL_PUT_ERROR(SSL, ERR_R_MALLOC_FAILURE);
266
260
  return 0;
267
261
  }
268
262
  }
269
263
 
270
- if (in->tlsext_tick && !for_ticket) {
264
+ if (!in->ticket.empty() && !for_ticket) {
271
265
  if (!CBB_add_asn1(&session, &child, kTicketTag) ||
272
- !CBB_add_asn1_octet_string(&child, in->tlsext_tick,
273
- in->tlsext_ticklen)) {
266
+ !CBB_add_asn1_octet_string(&child, in->ticket.data(),
267
+ in->ticket.size())) {
274
268
  OPENSSL_PUT_ERROR(SSL, ERR_R_MALLOC_FAILURE);
275
269
  return 0;
276
270
  }
@@ -297,8 +291,8 @@ static int SSL_SESSION_to_bytes_full(const SSL_SESSION *in, CBB *cbb,
297
291
  if (in->signed_cert_timestamp_list != nullptr) {
298
292
  if (!CBB_add_asn1(&session, &child, kSignedCertTimestampListTag) ||
299
293
  !CBB_add_asn1_octet_string(
300
- &child, CRYPTO_BUFFER_data(in->signed_cert_timestamp_list),
301
- CRYPTO_BUFFER_len(in->signed_cert_timestamp_list))) {
294
+ &child, CRYPTO_BUFFER_data(in->signed_cert_timestamp_list.get()),
295
+ CRYPTO_BUFFER_len(in->signed_cert_timestamp_list.get()))) {
302
296
  OPENSSL_PUT_ERROR(SSL, ERR_R_MALLOC_FAILURE);
303
297
  return 0;
304
298
  }
@@ -306,9 +300,9 @@ static int SSL_SESSION_to_bytes_full(const SSL_SESSION *in, CBB *cbb,
306
300
 
307
301
  if (in->ocsp_response != nullptr) {
308
302
  if (!CBB_add_asn1(&session, &child, kOCSPResponseTag) ||
309
- !CBB_add_asn1_octet_string(&child,
310
- CRYPTO_BUFFER_data(in->ocsp_response),
311
- CRYPTO_BUFFER_len(in->ocsp_response))) {
303
+ !CBB_add_asn1_octet_string(
304
+ &child, CRYPTO_BUFFER_data(in->ocsp_response.get()),
305
+ CRYPTO_BUFFER_len(in->ocsp_response.get()))) {
312
306
  OPENSSL_PUT_ERROR(SSL, ERR_R_MALLOC_FAILURE);
313
307
  return 0;
314
308
  }
@@ -333,13 +327,13 @@ static int SSL_SESSION_to_bytes_full(const SSL_SESSION *in, CBB *cbb,
333
327
  // serialized instead.
334
328
  if (in->certs != NULL &&
335
329
  !in->peer_sha256_valid &&
336
- sk_CRYPTO_BUFFER_num(in->certs) >= 2) {
330
+ sk_CRYPTO_BUFFER_num(in->certs.get()) >= 2) {
337
331
  if (!CBB_add_asn1(&session, &child, kCertChainTag)) {
338
332
  OPENSSL_PUT_ERROR(SSL, ERR_R_MALLOC_FAILURE);
339
333
  return 0;
340
334
  }
341
- for (size_t i = 1; i < sk_CRYPTO_BUFFER_num(in->certs); i++) {
342
- const CRYPTO_BUFFER *buffer = sk_CRYPTO_BUFFER_value(in->certs, i);
335
+ for (size_t i = 1; i < sk_CRYPTO_BUFFER_num(in->certs.get()); i++) {
336
+ const CRYPTO_BUFFER *buffer = sk_CRYPTO_BUFFER_value(in->certs.get(), i);
343
337
  if (!CBB_add_bytes(&child, CRYPTO_BUFFER_data(buffer),
344
338
  CRYPTO_BUFFER_len(buffer))) {
345
339
  OPENSSL_PUT_ERROR(SSL, ERR_R_MALLOC_FAILURE);
@@ -386,10 +380,10 @@ static int SSL_SESSION_to_bytes_full(const SSL_SESSION *in, CBB *cbb,
386
380
  return 0;
387
381
  }
388
382
 
389
- if (in->early_alpn) {
383
+ if (!in->early_alpn.empty()) {
390
384
  if (!CBB_add_asn1(&session, &child, kEarlyALPNTag) ||
391
- !CBB_add_asn1_octet_string(&child, (const uint8_t *)in->early_alpn,
392
- in->early_alpn_len)) {
385
+ !CBB_add_asn1_octet_string(&child, in->early_alpn.data(),
386
+ in->early_alpn.size())) {
393
387
  OPENSSL_PUT_ERROR(SSL, ERR_R_MALLOC_FAILURE);
394
388
  return 0;
395
389
  }
@@ -398,13 +392,11 @@ static int SSL_SESSION_to_bytes_full(const SSL_SESSION *in, CBB *cbb,
398
392
  return CBB_flush(cbb);
399
393
  }
400
394
 
401
- // SSL_SESSION_parse_string gets an optional ASN.1 OCTET STRING
402
- // explicitly tagged with |tag| from |cbs| and saves it in |*out|. On
403
- // entry, if |*out| is not NULL, it frees the existing contents. If
404
- // the element was not found, it sets |*out| to NULL. It returns one
405
- // on success, whether or not the element was found, and zero on
406
- // decode error.
407
- static int SSL_SESSION_parse_string(CBS *cbs, char **out, unsigned tag) {
395
+ // SSL_SESSION_parse_string gets an optional ASN.1 OCTET STRING explicitly
396
+ // tagged with |tag| from |cbs| and saves it in |*out|. If the element was not
397
+ // found, it sets |*out| to NULL. It returns one on success, whether or not the
398
+ // element was found, and zero on decode error.
399
+ static int SSL_SESSION_parse_string(CBS *cbs, UniquePtr<char> *out, unsigned tag) {
408
400
  CBS value;
409
401
  int present;
410
402
  if (!CBS_get_optional_asn1_octet_string(cbs, &value, &present, tag)) {
@@ -416,38 +408,33 @@ static int SSL_SESSION_parse_string(CBS *cbs, char **out, unsigned tag) {
416
408
  OPENSSL_PUT_ERROR(SSL, SSL_R_INVALID_SSL_SESSION);
417
409
  return 0;
418
410
  }
419
- if (!CBS_strdup(&value, out)) {
411
+ char *raw = nullptr;
412
+ if (!CBS_strdup(&value, &raw)) {
420
413
  OPENSSL_PUT_ERROR(SSL, ERR_R_MALLOC_FAILURE);
421
414
  return 0;
422
415
  }
416
+ out->reset(raw);
423
417
  } else {
424
- OPENSSL_free(*out);
425
- *out = NULL;
418
+ out->reset();
426
419
  }
427
420
  return 1;
428
421
  }
429
422
 
430
- // SSL_SESSION_parse_string gets an optional ASN.1 OCTET STRING
431
- // explicitly tagged with |tag| from |cbs| and stows it in |*out_ptr|
432
- // and |*out_len|. If |*out_ptr| is not NULL, it frees the existing
433
- // contents. On entry, if the element was not found, it sets
434
- // |*out_ptr| to NULL. It returns one on success, whether or not the
435
- // element was found, and zero on decode error.
436
- static int SSL_SESSION_parse_octet_string(CBS *cbs, uint8_t **out_ptr,
437
- size_t *out_len, unsigned tag) {
423
+ // SSL_SESSION_parse_octet_string gets an optional ASN.1 OCTET STRING explicitly
424
+ // tagged with |tag| from |cbs| and stows it in |*out|. It returns one on
425
+ // success, whether or not the element was found, and zero on decode error.
426
+ static bool SSL_SESSION_parse_octet_string(CBS *cbs, Array<uint8_t> *out,
427
+ unsigned tag) {
438
428
  CBS value;
439
429
  if (!CBS_get_optional_asn1_octet_string(cbs, &value, NULL, tag)) {
440
430
  OPENSSL_PUT_ERROR(SSL, SSL_R_INVALID_SSL_SESSION);
441
- return 0;
431
+ return false;
442
432
  }
443
- if (!CBS_stow(&value, out_ptr, out_len)) {
444
- OPENSSL_PUT_ERROR(SSL, ERR_R_MALLOC_FAILURE);
445
- return 0;
446
- }
447
- return 1;
433
+ return out->CopyFrom(value);
448
434
  }
449
435
 
450
- static int SSL_SESSION_parse_crypto_buffer(CBS *cbs, CRYPTO_BUFFER **out,
436
+ static int SSL_SESSION_parse_crypto_buffer(CBS *cbs,
437
+ UniquePtr<CRYPTO_BUFFER> *out,
451
438
  unsigned tag,
452
439
  CRYPTO_BUFFER_POOL *pool) {
453
440
  if (!CBS_peek_asn1_tag(cbs, tag)) {
@@ -461,8 +448,7 @@ static int SSL_SESSION_parse_crypto_buffer(CBS *cbs, CRYPTO_BUFFER **out,
461
448
  OPENSSL_PUT_ERROR(SSL, SSL_R_INVALID_SSL_SESSION);
462
449
  return 0;
463
450
  }
464
- CRYPTO_BUFFER_free(*out);
465
- *out = CRYPTO_BUFFER_new_from_CBS(&value, pool);
451
+ out->reset(CRYPTO_BUFFER_new_from_CBS(&value, pool));
466
452
  if (*out == nullptr) {
467
453
  OPENSSL_PUT_ERROR(SSL, ERR_R_MALLOC_FAILURE);
468
454
  return 0;
@@ -617,10 +603,9 @@ UniquePtr<SSL_SESSION> SSL_SESSION_parse(CBS *cbs,
617
603
 
618
604
  if (!SSL_SESSION_parse_string(&session, &ret->psk_identity,
619
605
  kPSKIdentityTag) ||
620
- !SSL_SESSION_parse_u32(&session, &ret->tlsext_tick_lifetime_hint,
606
+ !SSL_SESSION_parse_u32(&session, &ret->ticket_lifetime_hint,
621
607
  kTicketLifetimeHintTag, 0) ||
622
- !SSL_SESSION_parse_octet_string(&session, &ret->tlsext_tick,
623
- &ret->tlsext_ticklen, kTicketTag)) {
608
+ !SSL_SESSION_parse_octet_string(&session, &ret->ticket, kTicketTag)) {
624
609
  return nullptr;
625
610
  }
626
611
 
@@ -680,8 +665,8 @@ UniquePtr<SSL_SESSION> SSL_SESSION_parse(CBS *cbs,
680
665
  return nullptr;
681
666
  }
682
667
  if (has_peer || has_cert_chain) {
683
- ret->certs = sk_CRYPTO_BUFFER_new_null();
684
- if (ret->certs == NULL) {
668
+ ret->certs.reset(sk_CRYPTO_BUFFER_new_null());
669
+ if (ret->certs == nullptr) {
685
670
  OPENSSL_PUT_ERROR(SSL, ERR_R_MALLOC_FAILURE);
686
671
  return nullptr;
687
672
  }
@@ -689,7 +674,7 @@ UniquePtr<SSL_SESSION> SSL_SESSION_parse(CBS *cbs,
689
674
  if (has_peer) {
690
675
  UniquePtr<CRYPTO_BUFFER> buffer(CRYPTO_BUFFER_new_from_CBS(&peer, pool));
691
676
  if (!buffer ||
692
- !PushToStack(ret->certs, std::move(buffer))) {
677
+ !PushToStack(ret->certs.get(), std::move(buffer))) {
693
678
  OPENSSL_PUT_ERROR(SSL, ERR_R_MALLOC_FAILURE);
694
679
  return nullptr;
695
680
  }
@@ -703,21 +688,15 @@ UniquePtr<SSL_SESSION> SSL_SESSION_parse(CBS *cbs,
703
688
  return nullptr;
704
689
  }
705
690
 
706
- CRYPTO_BUFFER *buffer = CRYPTO_BUFFER_new_from_CBS(&cert, pool);
707
- if (buffer == NULL ||
708
- !sk_CRYPTO_BUFFER_push(ret->certs, buffer)) {
709
- CRYPTO_BUFFER_free(buffer);
691
+ UniquePtr<CRYPTO_BUFFER> buffer(CRYPTO_BUFFER_new_from_CBS(&cert, pool));
692
+ if (buffer == nullptr ||
693
+ !PushToStack(ret->certs.get(), std::move(buffer))) {
710
694
  OPENSSL_PUT_ERROR(SSL, ERR_R_MALLOC_FAILURE);
711
695
  return nullptr;
712
696
  }
713
697
  }
714
698
  }
715
699
 
716
- if (!x509_method->session_cache_objects(ret.get())) {
717
- OPENSSL_PUT_ERROR(SSL, SSL_R_INVALID_SSL_SESSION);
718
- return nullptr;
719
- }
720
-
721
700
  CBS age_add;
722
701
  int age_add_present;
723
702
  if (!CBS_get_optional_asn1_octet_string(&session, &age_add, &age_add_present,
@@ -727,7 +706,7 @@ UniquePtr<SSL_SESSION> SSL_SESSION_parse(CBS *cbs,
727
706
  CBS_len(&age_add) != 0) {
728
707
  return nullptr;
729
708
  }
730
- ret->ticket_age_add_valid = age_add_present;
709
+ ret->ticket_age_add_valid = age_add_present != 0;
731
710
 
732
711
  int is_server;
733
712
  if (!CBS_get_optional_asn1_bool(&session, &is_server, kIsServerTag,
@@ -747,12 +726,17 @@ UniquePtr<SSL_SESSION> SSL_SESSION_parse(CBS *cbs,
747
726
  !SSL_SESSION_parse_u32(&session, &ret->auth_timeout, kAuthTimeoutTag,
748
727
  ret->timeout) ||
749
728
  !SSL_SESSION_parse_octet_string(&session, &ret->early_alpn,
750
- &ret->early_alpn_len, kEarlyALPNTag) ||
729
+ kEarlyALPNTag) ||
751
730
  CBS_len(&session) != 0) {
752
731
  OPENSSL_PUT_ERROR(SSL, SSL_R_INVALID_SSL_SESSION);
753
732
  return nullptr;
754
733
  }
755
734
 
735
+ if (!x509_method->session_cache_objects(ret.get())) {
736
+ OPENSSL_PUT_ERROR(SSL, SSL_R_INVALID_SSL_SESSION);
737
+ return nullptr;
738
+ }
739
+
756
740
  return ret;
757
741
  }
758
742
 
@@ -760,7 +744,7 @@ int ssl_session_serialize(const SSL_SESSION *in, CBB *cbb) {
760
744
  return SSL_SESSION_to_bytes_full(in, cbb, 0);
761
745
  }
762
746
 
763
- } // namespace bssl
747
+ BSSL_NAMESPACE_END
764
748
 
765
749
  using namespace bssl;
766
750