grpc 1.24.0 → 1.25.0

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 (505) 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/ev_poll_posix.cc +3 -1
  113. data/src/core/lib/iomgr/exec_ctx.h +4 -3
  114. data/src/core/lib/iomgr/executor.cc +4 -2
  115. data/src/core/lib/iomgr/executor.h +3 -0
  116. data/src/core/lib/iomgr/executor/mpmcqueue.h +3 -6
  117. data/src/core/lib/iomgr/executor/threadpool.cc +1 -2
  118. data/src/core/lib/iomgr/executor/threadpool.h +7 -11
  119. data/src/core/lib/iomgr/resource_quota.cc +55 -51
  120. data/src/core/lib/iomgr/resource_quota.h +13 -9
  121. data/src/core/lib/iomgr/socket_utils_common_posix.cc +13 -0
  122. data/src/core/lib/iomgr/socket_utils_posix.h +4 -0
  123. data/src/core/lib/iomgr/tcp_client_posix.cc +4 -11
  124. data/src/core/lib/iomgr/tcp_custom.cc +9 -7
  125. data/src/core/lib/iomgr/tcp_posix.cc +20 -16
  126. data/src/core/lib/iomgr/tcp_server.h +1 -4
  127. data/src/core/lib/iomgr/tcp_server_custom.cc +5 -5
  128. data/src/core/lib/iomgr/tcp_server_posix.cc +1 -1
  129. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +2 -11
  130. data/src/core/lib/iomgr/timer_custom.cc +2 -2
  131. data/src/core/lib/iomgr/udp_server.cc +3 -2
  132. data/src/core/lib/iomgr/udp_server.h +6 -12
  133. data/src/core/lib/json/json.h +1 -1
  134. data/src/core/lib/json/json_string.cc +2 -2
  135. data/src/core/lib/profiling/basic_timers.cc +2 -2
  136. data/src/core/lib/security/credentials/alts/alts_credentials.cc +2 -2
  137. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc +1 -1
  138. data/src/core/lib/security/credentials/credentials.h +4 -20
  139. data/src/core/lib/security/credentials/fake/fake_credentials.cc +4 -4
  140. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +1 -3
  141. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +64 -0
  142. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +4 -4
  143. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +9 -7
  144. data/src/core/lib/security/security_connector/load_system_roots_linux.cc +2 -0
  145. data/src/core/lib/security/security_connector/local/local_security_connector.cc +4 -4
  146. data/src/core/lib/security/security_connector/security_connector.cc +1 -0
  147. data/src/core/lib/security/security_connector/security_connector.h +19 -17
  148. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +8 -5
  149. data/src/core/lib/security/security_connector/ssl_utils.cc +2 -2
  150. data/src/core/lib/security/security_connector/ssl_utils.h +1 -1
  151. data/src/core/lib/security/security_connector/tls/spiffe_security_connector.cc +14 -6
  152. data/src/core/lib/security/security_connector/tls/spiffe_security_connector.h +4 -2
  153. data/src/core/lib/security/transport/client_auth_filter.cc +17 -17
  154. data/src/core/lib/security/transport/security_handshaker.cc +29 -13
  155. data/src/core/lib/security/transport/security_handshaker.h +4 -2
  156. data/src/core/lib/security/transport/server_auth_filter.cc +14 -14
  157. data/src/core/lib/slice/slice.cc +2 -10
  158. data/src/core/lib/slice/slice_hash_table.h +4 -6
  159. data/src/core/lib/slice/slice_intern.cc +42 -39
  160. data/src/core/lib/slice/slice_internal.h +3 -3
  161. data/src/core/lib/slice/slice_utils.h +21 -4
  162. data/src/core/lib/slice/slice_weak_hash_table.h +4 -6
  163. data/src/core/lib/surface/call.cc +3 -3
  164. data/src/core/lib/surface/channel.cc +7 -0
  165. data/src/core/lib/surface/completion_queue.cc +12 -11
  166. data/src/core/lib/surface/completion_queue.h +4 -2
  167. data/src/core/lib/surface/init.cc +1 -0
  168. data/src/core/lib/surface/lame_client.cc +33 -18
  169. data/src/core/lib/surface/server.cc +77 -76
  170. data/src/core/lib/surface/version.cc +1 -1
  171. data/src/core/lib/transport/byte_stream.h +3 -7
  172. data/src/core/lib/transport/connectivity_state.cc +112 -98
  173. data/src/core/lib/transport/connectivity_state.h +100 -50
  174. data/src/core/lib/transport/static_metadata.cc +276 -288
  175. data/src/core/lib/transport/static_metadata.h +73 -76
  176. data/src/core/lib/transport/status_conversion.cc +1 -1
  177. data/src/core/lib/transport/status_metadata.cc +1 -1
  178. data/src/core/lib/transport/transport.cc +2 -2
  179. data/src/core/lib/transport/transport.h +12 -4
  180. data/src/core/lib/transport/transport_op_string.cc +14 -11
  181. data/src/core/tsi/alts/frame_protector/alts_unseal_privacy_integrity_crypter.cc +1 -1
  182. data/src/core/tsi/alts/handshaker/alts_shared_resource.cc +1 -1
  183. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +5 -5
  184. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +12 -2
  185. data/src/core/tsi/fake_transport_security.cc +7 -5
  186. data/src/core/tsi/grpc_shadow_boringssl.h +2918 -2627
  187. data/src/core/tsi/local_transport_security.cc +8 -6
  188. data/src/core/tsi/ssl/session_cache/ssl_session.h +1 -3
  189. data/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc +1 -2
  190. data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +7 -5
  191. data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +4 -6
  192. data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +1 -2
  193. data/src/core/tsi/ssl_transport_security.cc +12 -12
  194. data/src/core/tsi/ssl_transport_security.h +2 -2
  195. data/src/core/tsi/transport_security_grpc.cc +7 -0
  196. data/src/core/tsi/transport_security_grpc.h +6 -0
  197. data/src/ruby/ext/grpc/extconf.rb +1 -0
  198. data/src/ruby/ext/grpc/rb_call.c +1 -1
  199. data/src/ruby/ext/grpc/rb_channel.c +1 -1
  200. data/src/ruby/lib/grpc/generic/bidi_call.rb +1 -1
  201. data/src/ruby/lib/grpc/generic/rpc_server.rb +1 -1
  202. data/src/ruby/lib/grpc/version.rb +1 -1
  203. data/src/ruby/spec/google_rpc_status_utils_spec.rb +2 -2
  204. data/third_party/boringssl/crypto/asn1/a_bool.c +18 -5
  205. data/third_party/boringssl/crypto/asn1/a_d2i_fp.c +17 -221
  206. data/third_party/boringssl/crypto/asn1/a_dup.c +0 -24
  207. data/third_party/boringssl/crypto/asn1/a_enum.c +2 -2
  208. data/third_party/boringssl/crypto/asn1/a_i2d_fp.c +10 -72
  209. data/third_party/boringssl/crypto/asn1/a_int.c +12 -71
  210. data/third_party/boringssl/crypto/asn1/a_mbstr.c +110 -216
  211. data/third_party/boringssl/crypto/asn1/a_object.c +16 -5
  212. data/third_party/boringssl/crypto/asn1/a_strnid.c +1 -0
  213. data/third_party/boringssl/crypto/asn1/asn1_lib.c +5 -1
  214. data/third_party/boringssl/crypto/asn1/tasn_enc.c +3 -1
  215. data/third_party/boringssl/crypto/base64/base64.c +2 -2
  216. data/third_party/boringssl/crypto/bio/bio.c +73 -9
  217. data/third_party/boringssl/crypto/bio/connect.c +4 -0
  218. data/third_party/boringssl/crypto/bio/fd.c +4 -0
  219. data/third_party/boringssl/crypto/bio/file.c +5 -2
  220. data/third_party/boringssl/crypto/bio/socket.c +4 -0
  221. data/third_party/boringssl/crypto/bio/socket_helper.c +4 -0
  222. data/third_party/boringssl/crypto/bn_extra/convert.c +11 -7
  223. data/third_party/boringssl/crypto/bytestring/ber.c +8 -4
  224. data/third_party/boringssl/crypto/bytestring/cbb.c +19 -7
  225. data/third_party/boringssl/crypto/bytestring/cbs.c +28 -15
  226. data/third_party/boringssl/crypto/bytestring/internal.h +28 -7
  227. data/third_party/boringssl/crypto/bytestring/unicode.c +155 -0
  228. data/third_party/boringssl/crypto/chacha/chacha.c +36 -19
  229. data/third_party/boringssl/crypto/chacha/internal.h +45 -0
  230. data/third_party/boringssl/crypto/cipher_extra/cipher_extra.c +29 -0
  231. data/third_party/boringssl/crypto/cipher_extra/e_aesccm.c +269 -25
  232. data/third_party/boringssl/crypto/cipher_extra/e_aesctrhmac.c +16 -14
  233. data/third_party/boringssl/crypto/cipher_extra/e_aesgcmsiv.c +54 -38
  234. data/third_party/boringssl/crypto/cipher_extra/e_chacha20poly1305.c +133 -41
  235. data/third_party/boringssl/crypto/cipher_extra/e_tls.c +23 -15
  236. data/third_party/boringssl/crypto/cipher_extra/tls_cbc.c +24 -15
  237. data/third_party/boringssl/crypto/cmac/cmac.c +62 -25
  238. data/third_party/boringssl/crypto/conf/conf.c +7 -0
  239. data/third_party/boringssl/crypto/cpu-arm-linux.c +4 -148
  240. data/third_party/boringssl/crypto/cpu-arm-linux.h +201 -0
  241. data/third_party/boringssl/crypto/cpu-intel.c +45 -51
  242. data/third_party/boringssl/crypto/crypto.c +39 -22
  243. data/third_party/boringssl/crypto/curve25519/spake25519.c +1 -1
  244. data/third_party/boringssl/crypto/dsa/dsa.c +77 -53
  245. data/third_party/boringssl/crypto/ec_extra/ec_asn1.c +20 -8
  246. data/third_party/boringssl/crypto/ec_extra/ec_derive.c +96 -0
  247. data/third_party/boringssl/crypto/{ecdh/ecdh.c → ecdh_extra/ecdh_extra.c} +20 -58
  248. data/third_party/boringssl/crypto/ecdsa_extra/ecdsa_asn1.c +1 -9
  249. data/third_party/boringssl/crypto/engine/engine.c +2 -1
  250. data/third_party/boringssl/crypto/err/err.c +2 -0
  251. data/third_party/boringssl/crypto/err/internal.h +2 -2
  252. data/third_party/boringssl/crypto/evp/evp.c +89 -8
  253. data/third_party/boringssl/crypto/evp/evp_asn1.c +56 -5
  254. data/third_party/boringssl/crypto/evp/evp_ctx.c +52 -14
  255. data/third_party/boringssl/crypto/evp/internal.h +18 -1
  256. data/third_party/boringssl/crypto/evp/p_dsa_asn1.c +5 -0
  257. data/third_party/boringssl/crypto/evp/p_ec.c +51 -3
  258. data/third_party/boringssl/crypto/evp/p_ec_asn1.c +6 -7
  259. data/third_party/boringssl/crypto/evp/p_ed25519.c +36 -3
  260. data/third_party/boringssl/crypto/evp/p_ed25519_asn1.c +76 -45
  261. data/third_party/boringssl/crypto/evp/p_rsa.c +3 -1
  262. data/third_party/boringssl/crypto/evp/p_rsa_asn1.c +5 -0
  263. data/third_party/boringssl/crypto/evp/p_x25519.c +110 -0
  264. data/third_party/boringssl/crypto/evp/p_x25519_asn1.c +249 -0
  265. data/third_party/boringssl/crypto/evp/scrypt.c +6 -2
  266. data/third_party/boringssl/crypto/fipsmodule/aes/aes.c +34 -274
  267. data/third_party/boringssl/crypto/fipsmodule/aes/internal.h +161 -21
  268. data/third_party/boringssl/crypto/fipsmodule/aes/key_wrap.c +111 -13
  269. data/third_party/boringssl/crypto/fipsmodule/aes/mode_wrappers.c +17 -21
  270. data/third_party/boringssl/crypto/fipsmodule/bcm.c +119 -7
  271. data/third_party/boringssl/crypto/fipsmodule/bn/bn.c +19 -2
  272. data/third_party/boringssl/crypto/fipsmodule/bn/cmp.c +2 -2
  273. data/third_party/boringssl/crypto/fipsmodule/bn/ctx.c +93 -160
  274. data/third_party/boringssl/crypto/fipsmodule/bn/div.c +48 -57
  275. data/third_party/boringssl/crypto/fipsmodule/bn/div_extra.c +87 -0
  276. data/third_party/boringssl/crypto/fipsmodule/bn/exponentiation.c +143 -211
  277. data/third_party/boringssl/crypto/fipsmodule/bn/gcd.c +0 -305
  278. data/third_party/boringssl/crypto/fipsmodule/bn/gcd_extra.c +325 -0
  279. data/third_party/boringssl/crypto/fipsmodule/bn/internal.h +168 -50
  280. data/third_party/boringssl/crypto/fipsmodule/bn/montgomery.c +68 -92
  281. data/third_party/boringssl/crypto/fipsmodule/bn/montgomery_inv.c +7 -6
  282. data/third_party/boringssl/crypto/fipsmodule/bn/mul.c +11 -14
  283. data/third_party/boringssl/crypto/fipsmodule/bn/prime.c +358 -443
  284. data/third_party/boringssl/crypto/fipsmodule/bn/random.c +25 -35
  285. data/third_party/boringssl/crypto/fipsmodule/bn/rsaz_exp.c +20 -25
  286. data/third_party/boringssl/crypto/fipsmodule/bn/rsaz_exp.h +76 -5
  287. data/third_party/boringssl/crypto/fipsmodule/bn/shift.c +14 -14
  288. data/third_party/boringssl/crypto/fipsmodule/cipher/cipher.c +7 -2
  289. data/third_party/boringssl/crypto/fipsmodule/cipher/e_aes.c +383 -516
  290. data/third_party/boringssl/crypto/fipsmodule/cipher/e_des.c +4 -0
  291. data/third_party/boringssl/crypto/fipsmodule/cipher/internal.h +3 -4
  292. data/third_party/boringssl/crypto/fipsmodule/delocate.h +3 -2
  293. data/third_party/boringssl/crypto/fipsmodule/digest/digest.c +32 -17
  294. data/third_party/boringssl/crypto/fipsmodule/digest/md32_common.h +3 -3
  295. data/third_party/boringssl/crypto/fipsmodule/ec/ec.c +228 -122
  296. data/third_party/boringssl/crypto/fipsmodule/ec/ec_key.c +34 -8
  297. data/third_party/boringssl/crypto/fipsmodule/ec/ec_montgomery.c +311 -98
  298. data/third_party/boringssl/crypto/fipsmodule/ec/felem.c +82 -0
  299. data/third_party/boringssl/crypto/fipsmodule/ec/internal.h +263 -97
  300. data/third_party/boringssl/crypto/fipsmodule/ec/oct.c +22 -59
  301. data/third_party/boringssl/crypto/fipsmodule/ec/p224-64.c +317 -234
  302. data/third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64-table.h +9473 -9475
  303. data/third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64.c +313 -109
  304. data/third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64.h +36 -0
  305. data/third_party/boringssl/crypto/fipsmodule/ec/scalar.c +96 -0
  306. data/third_party/boringssl/crypto/fipsmodule/ec/simple.c +126 -792
  307. data/third_party/boringssl/crypto/fipsmodule/ec/simple_mul.c +84 -0
  308. data/third_party/boringssl/crypto/fipsmodule/ec/util.c +163 -12
  309. data/third_party/boringssl/crypto/fipsmodule/ec/wnaf.c +84 -211
  310. data/third_party/boringssl/crypto/fipsmodule/ecdh/ecdh.c +122 -0
  311. data/third_party/boringssl/crypto/fipsmodule/ecdsa/ecdsa.c +60 -205
  312. data/third_party/boringssl/crypto/fipsmodule/fips_shared_support.c +32 -0
  313. data/third_party/boringssl/crypto/fipsmodule/is_fips.c +2 -0
  314. data/third_party/boringssl/crypto/fipsmodule/md4/md4.c +3 -1
  315. data/third_party/boringssl/crypto/fipsmodule/md5/internal.h +37 -0
  316. data/third_party/boringssl/crypto/fipsmodule/md5/md5.c +11 -8
  317. data/third_party/boringssl/crypto/fipsmodule/modes/cbc.c +35 -79
  318. data/third_party/boringssl/crypto/fipsmodule/modes/cfb.c +7 -39
  319. data/third_party/boringssl/crypto/fipsmodule/modes/ctr.c +7 -27
  320. data/third_party/boringssl/crypto/fipsmodule/modes/gcm.c +123 -309
  321. data/third_party/boringssl/crypto/fipsmodule/modes/internal.h +189 -126
  322. data/third_party/boringssl/crypto/fipsmodule/modes/ofb.c +3 -2
  323. data/third_party/boringssl/crypto/fipsmodule/rand/ctrdrbg.c +2 -2
  324. data/third_party/boringssl/crypto/fipsmodule/rand/internal.h +35 -0
  325. data/third_party/boringssl/crypto/fipsmodule/rand/rand.c +24 -19
  326. data/third_party/boringssl/crypto/fipsmodule/rand/urandom.c +256 -77
  327. data/third_party/boringssl/crypto/fipsmodule/rsa/padding.c +10 -7
  328. data/third_party/boringssl/crypto/fipsmodule/rsa/rsa.c +5 -1
  329. data/third_party/boringssl/crypto/fipsmodule/rsa/rsa_impl.c +131 -14
  330. data/third_party/boringssl/crypto/fipsmodule/self_check/self_check.c +83 -10
  331. data/third_party/boringssl/crypto/fipsmodule/sha/internal.h +53 -0
  332. data/third_party/boringssl/crypto/fipsmodule/sha/sha1.c +9 -13
  333. data/third_party/boringssl/crypto/fipsmodule/sha/sha256.c +18 -12
  334. data/third_party/boringssl/crypto/fipsmodule/sha/sha512.c +95 -168
  335. data/third_party/boringssl/crypto/hrss/hrss.c +2201 -0
  336. data/third_party/boringssl/crypto/hrss/internal.h +62 -0
  337. data/third_party/boringssl/crypto/internal.h +95 -20
  338. data/third_party/boringssl/crypto/lhash/lhash.c +45 -33
  339. data/third_party/boringssl/crypto/mem.c +39 -2
  340. data/third_party/boringssl/crypto/obj/obj.c +4 -4
  341. data/third_party/boringssl/crypto/obj/obj_dat.h +6181 -875
  342. data/third_party/boringssl/crypto/pem/pem_all.c +2 -3
  343. data/third_party/boringssl/crypto/pem/pem_info.c +144 -162
  344. data/third_party/boringssl/crypto/pem/pem_lib.c +53 -52
  345. data/third_party/boringssl/crypto/pem/pem_pkey.c +13 -21
  346. data/third_party/boringssl/crypto/pkcs7/pkcs7.c +15 -22
  347. data/third_party/boringssl/crypto/pkcs7/pkcs7_x509.c +168 -16
  348. data/third_party/boringssl/crypto/pkcs8/internal.h +11 -0
  349. data/third_party/boringssl/crypto/pkcs8/p5_pbev2.c +24 -15
  350. data/third_party/boringssl/crypto/pkcs8/pkcs8.c +42 -25
  351. data/third_party/boringssl/crypto/pkcs8/pkcs8_x509.c +559 -43
  352. data/third_party/boringssl/crypto/pool/internal.h +1 -1
  353. data/third_party/boringssl/crypto/pool/pool.c +21 -0
  354. data/third_party/boringssl/crypto/rand_extra/deterministic.c +8 -0
  355. data/third_party/boringssl/crypto/rand_extra/fuchsia.c +1 -14
  356. data/third_party/boringssl/crypto/refcount_lock.c +2 -2
  357. data/third_party/boringssl/crypto/rsa_extra/rsa_print.c +22 -0
  358. data/third_party/boringssl/crypto/siphash/siphash.c +80 -0
  359. data/third_party/boringssl/crypto/stack/stack.c +83 -32
  360. data/third_party/boringssl/crypto/thread_none.c +2 -2
  361. data/third_party/boringssl/crypto/thread_pthread.c +2 -2
  362. data/third_party/boringssl/crypto/thread_win.c +38 -19
  363. data/third_party/boringssl/crypto/x509/a_strex.c +22 -2
  364. data/third_party/boringssl/crypto/x509/asn1_gen.c +2 -1
  365. data/third_party/boringssl/crypto/x509/by_dir.c +7 -0
  366. data/third_party/boringssl/crypto/x509/by_file.c +12 -10
  367. data/third_party/boringssl/crypto/x509/t_crl.c +5 -8
  368. data/third_party/boringssl/crypto/x509/t_req.c +1 -3
  369. data/third_party/boringssl/crypto/x509/t_x509.c +5 -8
  370. data/third_party/boringssl/crypto/x509/x509_cmp.c +1 -1
  371. data/third_party/boringssl/crypto/x509/x509_def.c +1 -1
  372. data/third_party/boringssl/crypto/x509/x509_lu.c +114 -5
  373. data/third_party/boringssl/crypto/x509/x509_req.c +20 -0
  374. data/third_party/boringssl/crypto/x509/x509_set.c +5 -0
  375. data/third_party/boringssl/crypto/x509/x509_trs.c +1 -0
  376. data/third_party/boringssl/crypto/x509/x509_txt.c +4 -5
  377. data/third_party/boringssl/crypto/x509/x509_vfy.c +145 -138
  378. data/third_party/boringssl/crypto/x509/x509_vpm.c +2 -0
  379. data/third_party/boringssl/crypto/x509/x509cset.c +40 -0
  380. data/third_party/boringssl/crypto/x509/x509name.c +2 -3
  381. data/third_party/boringssl/crypto/x509/x_all.c +109 -210
  382. data/third_party/boringssl/crypto/x509/x_x509.c +6 -0
  383. data/third_party/boringssl/crypto/x509v3/ext_dat.h +1 -3
  384. data/third_party/boringssl/crypto/x509v3/internal.h +56 -0
  385. data/third_party/boringssl/crypto/x509v3/pcy_cache.c +2 -0
  386. data/third_party/boringssl/crypto/x509v3/pcy_node.c +1 -0
  387. data/third_party/boringssl/crypto/x509v3/pcy_tree.c +4 -2
  388. data/third_party/boringssl/crypto/x509v3/v3_akey.c +5 -2
  389. data/third_party/boringssl/crypto/x509v3/v3_alt.c +19 -13
  390. data/third_party/boringssl/crypto/x509v3/v3_conf.c +2 -1
  391. data/third_party/boringssl/crypto/x509v3/v3_cpols.c +3 -2
  392. data/third_party/boringssl/crypto/x509v3/v3_genn.c +1 -6
  393. data/third_party/boringssl/crypto/x509v3/v3_lib.c +1 -0
  394. data/third_party/boringssl/crypto/x509v3/v3_ocsp.c +68 -0
  395. data/third_party/boringssl/crypto/x509v3/v3_pci.c +2 -1
  396. data/third_party/boringssl/crypto/x509v3/v3_purp.c +47 -69
  397. data/third_party/boringssl/crypto/x509v3/v3_skey.c +5 -2
  398. data/third_party/boringssl/crypto/x509v3/v3_utl.c +69 -25
  399. data/third_party/boringssl/include/openssl/aead.h +45 -19
  400. data/third_party/boringssl/include/openssl/aes.h +32 -7
  401. data/third_party/boringssl/include/openssl/asn1.h +7 -77
  402. data/third_party/boringssl/include/openssl/base.h +120 -6
  403. data/third_party/boringssl/include/openssl/base64.h +4 -1
  404. data/third_party/boringssl/include/openssl/bio.h +112 -81
  405. data/third_party/boringssl/include/openssl/blowfish.h +3 -3
  406. data/third_party/boringssl/include/openssl/bn.h +55 -29
  407. data/third_party/boringssl/include/openssl/buf.h +2 -2
  408. data/third_party/boringssl/include/openssl/bytestring.h +54 -32
  409. data/third_party/boringssl/include/openssl/cast.h +2 -2
  410. data/third_party/boringssl/include/openssl/cipher.h +46 -16
  411. data/third_party/boringssl/include/openssl/cmac.h +6 -2
  412. data/third_party/boringssl/include/openssl/conf.h +3 -6
  413. data/third_party/boringssl/include/openssl/cpu.h +25 -9
  414. data/third_party/boringssl/include/openssl/crypto.h +32 -10
  415. data/third_party/boringssl/include/openssl/curve25519.h +4 -4
  416. data/third_party/boringssl/include/openssl/dh.h +3 -2
  417. data/third_party/boringssl/include/openssl/digest.h +21 -7
  418. data/third_party/boringssl/include/openssl/dsa.h +8 -2
  419. data/third_party/boringssl/include/openssl/e_os2.h +18 -0
  420. data/third_party/boringssl/include/openssl/ec.h +25 -21
  421. data/third_party/boringssl/include/openssl/ec_key.h +36 -8
  422. data/third_party/boringssl/include/openssl/ecdh.h +17 -0
  423. data/third_party/boringssl/include/openssl/ecdsa.h +3 -3
  424. data/third_party/boringssl/include/openssl/engine.h +4 -4
  425. data/third_party/boringssl/include/openssl/err.h +3 -0
  426. data/third_party/boringssl/include/openssl/evp.h +199 -42
  427. data/third_party/boringssl/include/openssl/hmac.h +4 -4
  428. data/third_party/boringssl/include/openssl/hrss.h +100 -0
  429. data/third_party/boringssl/include/openssl/lhash.h +131 -23
  430. data/third_party/boringssl/include/openssl/md4.h +6 -4
  431. data/third_party/boringssl/include/openssl/md5.h +6 -4
  432. data/third_party/boringssl/include/openssl/mem.h +6 -2
  433. data/third_party/boringssl/include/openssl/nid.h +3 -0
  434. data/third_party/boringssl/include/openssl/obj.h +3 -0
  435. data/third_party/boringssl/include/openssl/pem.h +102 -64
  436. data/third_party/boringssl/include/openssl/pkcs7.h +136 -3
  437. data/third_party/boringssl/include/openssl/pkcs8.h +42 -3
  438. data/third_party/boringssl/include/openssl/pool.h +13 -2
  439. data/third_party/boringssl/include/openssl/ripemd.h +5 -4
  440. data/third_party/boringssl/include/openssl/rsa.h +46 -15
  441. data/third_party/boringssl/include/openssl/sha.h +40 -28
  442. data/third_party/boringssl/include/openssl/siphash.h +37 -0
  443. data/third_party/boringssl/include/openssl/span.h +17 -9
  444. data/third_party/boringssl/include/openssl/ssl.h +766 -393
  445. data/third_party/boringssl/include/openssl/ssl3.h +4 -3
  446. data/third_party/boringssl/include/openssl/stack.h +134 -77
  447. data/third_party/boringssl/include/openssl/thread.h +1 -1
  448. data/third_party/boringssl/include/openssl/tls1.h +25 -9
  449. data/third_party/boringssl/include/openssl/type_check.h +14 -15
  450. data/third_party/boringssl/include/openssl/x509.h +28 -3
  451. data/third_party/boringssl/include/openssl/x509_vfy.h +98 -32
  452. data/third_party/boringssl/include/openssl/x509v3.h +17 -13
  453. data/third_party/boringssl/ssl/d1_both.cc +9 -18
  454. data/third_party/boringssl/ssl/d1_lib.cc +4 -3
  455. data/third_party/boringssl/ssl/d1_pkt.cc +4 -4
  456. data/third_party/boringssl/ssl/d1_srtp.cc +15 -15
  457. data/third_party/boringssl/ssl/dtls_method.cc +0 -1
  458. data/third_party/boringssl/ssl/dtls_record.cc +28 -28
  459. data/third_party/boringssl/ssl/handoff.cc +295 -91
  460. data/third_party/boringssl/ssl/handshake.cc +133 -72
  461. data/third_party/boringssl/ssl/handshake_client.cc +218 -189
  462. data/third_party/boringssl/ssl/handshake_server.cc +399 -272
  463. data/third_party/boringssl/ssl/internal.h +1413 -928
  464. data/third_party/boringssl/ssl/s3_both.cc +175 -36
  465. data/third_party/boringssl/ssl/s3_lib.cc +9 -13
  466. data/third_party/boringssl/ssl/s3_pkt.cc +63 -29
  467. data/third_party/boringssl/ssl/ssl_aead_ctx.cc +55 -35
  468. data/third_party/boringssl/ssl/ssl_asn1.cc +57 -73
  469. data/third_party/boringssl/ssl/ssl_buffer.cc +13 -12
  470. data/third_party/boringssl/ssl/ssl_cert.cc +313 -210
  471. data/third_party/boringssl/ssl/ssl_cipher.cc +159 -221
  472. data/third_party/boringssl/ssl/ssl_file.cc +2 -0
  473. data/third_party/boringssl/ssl/ssl_key_share.cc +164 -19
  474. data/third_party/boringssl/ssl/ssl_lib.cc +847 -555
  475. data/third_party/boringssl/ssl/ssl_privkey.cc +441 -111
  476. data/third_party/boringssl/ssl/ssl_session.cc +230 -178
  477. data/third_party/boringssl/ssl/ssl_transcript.cc +21 -142
  478. data/third_party/boringssl/ssl/ssl_versions.cc +88 -93
  479. data/third_party/boringssl/ssl/ssl_x509.cc +279 -218
  480. data/third_party/boringssl/ssl/t1_enc.cc +5 -96
  481. data/third_party/boringssl/ssl/t1_lib.cc +931 -678
  482. data/third_party/boringssl/ssl/tls13_both.cc +251 -121
  483. data/third_party/boringssl/ssl/tls13_client.cc +129 -73
  484. data/third_party/boringssl/ssl/tls13_enc.cc +350 -282
  485. data/third_party/boringssl/ssl/tls13_server.cc +259 -192
  486. data/third_party/boringssl/ssl/tls_method.cc +26 -21
  487. data/third_party/boringssl/ssl/tls_record.cc +42 -47
  488. data/third_party/boringssl/third_party/fiat/curve25519.c +261 -1324
  489. data/third_party/boringssl/third_party/fiat/curve25519_32.h +911 -0
  490. data/third_party/boringssl/third_party/fiat/curve25519_64.h +559 -0
  491. data/third_party/boringssl/third_party/fiat/p256.c +238 -999
  492. data/third_party/boringssl/third_party/fiat/p256_32.h +3226 -0
  493. data/third_party/boringssl/third_party/fiat/p256_64.h +1217 -0
  494. data/third_party/upb/upb/port_def.inc +1 -1
  495. data/third_party/upb/upb/table.c +2 -1
  496. metadata +72 -44
  497. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_load_balancer_api.h +0 -127
  498. data/src/core/lib/gpr/mpscq.cc +0 -117
  499. data/src/core/lib/gpr/mpscq.h +0 -88
  500. data/src/core/lib/gprpp/abstract.h +0 -47
  501. data/src/core/lib/gprpp/pair.h +0 -38
  502. data/third_party/boringssl/crypto/cipher_extra/e_ssl3.c +0 -460
  503. data/third_party/boringssl/crypto/fipsmodule/modes/ccm.c +0 -256
  504. data/third_party/boringssl/include/openssl/lhash_macros.h +0 -174
  505. data/third_party/boringssl/ssl/custom_extensions.cc +0 -265
@@ -12,10 +12,6 @@
12
12
  * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
13
13
  * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */
14
14
 
15
- #if !defined(__STDC_FORMAT_MACROS)
16
- #define __STDC_FORMAT_MACROS
17
- #endif
18
-
19
15
  #include <openssl/buf.h>
20
16
  #include <openssl/mem.h>
21
17
  #include <openssl/bytestring.h>
@@ -92,8 +88,8 @@ int CBS_mem_equal(const CBS *cbs, const uint8_t *data, size_t len) {
92
88
  return CRYPTO_memcmp(cbs->data, data, len) == 0;
93
89
  }
94
90
 
95
- static int cbs_get_u(CBS *cbs, uint32_t *out, size_t len) {
96
- uint32_t result = 0;
91
+ static int cbs_get_u(CBS *cbs, uint64_t *out, size_t len) {
92
+ uint64_t result = 0;
97
93
  const uint8_t *data;
98
94
 
99
95
  if (!cbs_get(cbs, &data, len)) {
@@ -117,7 +113,7 @@ int CBS_get_u8(CBS *cbs, uint8_t *out) {
117
113
  }
118
114
 
119
115
  int CBS_get_u16(CBS *cbs, uint16_t *out) {
120
- uint32_t v;
116
+ uint64_t v;
121
117
  if (!cbs_get_u(cbs, &v, 2)) {
122
118
  return 0;
123
119
  }
@@ -126,11 +122,25 @@ int CBS_get_u16(CBS *cbs, uint16_t *out) {
126
122
  }
127
123
 
128
124
  int CBS_get_u24(CBS *cbs, uint32_t *out) {
129
- return cbs_get_u(cbs, out, 3);
125
+ uint64_t v;
126
+ if (!cbs_get_u(cbs, &v, 3)) {
127
+ return 0;
128
+ }
129
+ *out = v;
130
+ return 1;
130
131
  }
131
132
 
132
133
  int CBS_get_u32(CBS *cbs, uint32_t *out) {
133
- return cbs_get_u(cbs, out, 4);
134
+ uint64_t v;
135
+ if (!cbs_get_u(cbs, &v, 4)) {
136
+ return 0;
137
+ }
138
+ *out = v;
139
+ return 1;
140
+ }
141
+
142
+ int CBS_get_u64(CBS *cbs, uint64_t *out) {
143
+ return cbs_get_u(cbs, out, 8);
134
144
  }
135
145
 
136
146
  int CBS_get_last_u8(CBS *cbs, uint8_t *out) {
@@ -161,10 +171,13 @@ int CBS_copy_bytes(CBS *cbs, uint8_t *out, size_t len) {
161
171
  }
162
172
 
163
173
  static int cbs_get_length_prefixed(CBS *cbs, CBS *out, size_t len_len) {
164
- uint32_t len;
174
+ uint64_t len;
165
175
  if (!cbs_get_u(cbs, &len, len_len)) {
166
176
  return 0;
167
177
  }
178
+ // If |len_len| <= 3 then we know that |len| will fit into a |size_t|, even on
179
+ // 32-bit systems.
180
+ assert(len_len <= 3);
168
181
  return CBS_get_bytes(cbs, out, len);
169
182
  }
170
183
 
@@ -278,7 +291,7 @@ static int cbs_get_any_asn1_element(CBS *cbs, CBS *out, unsigned *out_tag,
278
291
  // encode the number of subsequent octets used to encode the length (ITU-T
279
292
  // X.690 clause 8.1.3.5.b).
280
293
  const size_t num_bytes = length_byte & 0x7f;
281
- uint32_t len32;
294
+ uint64_t len64;
282
295
 
283
296
  if (ber_ok && (tag & CBS_ASN1_CONSTRUCTED) != 0 && num_bytes == 0) {
284
297
  // indefinite length
@@ -294,20 +307,20 @@ static int cbs_get_any_asn1_element(CBS *cbs, CBS *out, unsigned *out_tag,
294
307
  if (num_bytes == 0 || num_bytes > 4) {
295
308
  return 0;
296
309
  }
297
- if (!cbs_get_u(&header, &len32, num_bytes)) {
310
+ if (!cbs_get_u(&header, &len64, num_bytes)) {
298
311
  return 0;
299
312
  }
300
313
  // ITU-T X.690 section 10.1 (DER length forms) requires encoding the length
301
314
  // with the minimum number of octets.
302
- if (len32 < 128) {
315
+ if (len64 < 128) {
303
316
  // Length should have used short-form encoding.
304
317
  return 0;
305
318
  }
306
- if ((len32 >> ((num_bytes-1)*8)) == 0) {
319
+ if ((len64 >> ((num_bytes-1)*8)) == 0) {
307
320
  // Length should have been at least one byte shorter.
308
321
  return 0;
309
322
  }
310
- len = len32;
323
+ len = len64;
311
324
  if (len + header_len + num_bytes < len) {
312
325
  // Overflow.
313
326
  return 0;
@@ -24,12 +24,10 @@ extern "C" {
24
24
 
25
25
  // CBS_asn1_ber_to_der reads a BER element from |in|. If it finds
26
26
  // indefinite-length elements or constructed strings then it converts the BER
27
- // data to DER and sets |*out| and |*out_length| to describe a malloced buffer
28
- // containing the DER data. Additionally, |*in| will be advanced over the BER
29
- // element.
30
- //
31
- // If it doesn't find any indefinite-length elements or constructed strings then
32
- // it sets |*out| to NULL and |*in| is unmodified.
27
+ // data to DER, sets |out| to the converted contents and |*out_storage| to a
28
+ // buffer which the caller must release with |OPENSSL_free|. Otherwise, it sets
29
+ // |out| to the original BER element in |in| and |*out_storage| to NULL.
30
+ // Additionally, |*in| will be advanced over the BER element.
33
31
  //
34
32
  // This function should successfully process any valid BER input, however it
35
33
  // will not convert all of BER's deviations from DER. BER is ambiguous between
@@ -39,7 +37,8 @@ extern "C" {
39
37
  // must also account for BER variations in the contents of a primitive.
40
38
  //
41
39
  // It returns one on success and zero otherwise.
42
- OPENSSL_EXPORT int CBS_asn1_ber_to_der(CBS *in, uint8_t **out, size_t *out_len);
40
+ OPENSSL_EXPORT int CBS_asn1_ber_to_der(CBS *in, CBS *out,
41
+ uint8_t **out_storage);
43
42
 
44
43
  // CBS_get_asn1_implicit_string parses a BER string of primitive type
45
44
  // |inner_tag| implicitly-tagged with |outer_tag|. It sets |out| to the
@@ -68,6 +67,28 @@ OPENSSL_EXPORT int CBS_get_asn1_implicit_string(CBS *in, CBS *out,
68
67
  int CBB_finish_i2d(CBB *cbb, uint8_t **outp);
69
68
 
70
69
 
70
+ // Unicode utilities.
71
+
72
+ // The following functions read one Unicode code point from |cbs| with the
73
+ // corresponding encoding and store it in |*out|. They return one on success and
74
+ // zero on error.
75
+ OPENSSL_EXPORT int cbs_get_utf8(CBS *cbs, uint32_t *out);
76
+ OPENSSL_EXPORT int cbs_get_latin1(CBS *cbs, uint32_t *out);
77
+ OPENSSL_EXPORT int cbs_get_ucs2_be(CBS *cbs, uint32_t *out);
78
+ OPENSSL_EXPORT int cbs_get_utf32_be(CBS *cbs, uint32_t *out);
79
+
80
+ // cbb_get_utf8_len returns the number of bytes needed to represent |u| in
81
+ // UTF-8.
82
+ OPENSSL_EXPORT size_t cbb_get_utf8_len(uint32_t u);
83
+
84
+ // The following functions encode |u| to |cbb| with the corresponding
85
+ // encoding. They return one on success and zero on error.
86
+ OPENSSL_EXPORT int cbb_add_utf8(CBB *cbb, uint32_t u);
87
+ OPENSSL_EXPORT int cbb_add_latin1(CBB *cbb, uint32_t u);
88
+ OPENSSL_EXPORT int cbb_add_ucs2_be(CBB *cbb, uint32_t u);
89
+ OPENSSL_EXPORT int cbb_add_utf32_be(CBB *cbb, uint32_t u);
90
+
91
+
71
92
  #if defined(__cplusplus)
72
93
  } // extern C
73
94
  #endif
@@ -0,0 +1,155 @@
1
+ /* Copyright (c) 2018, Google Inc.
2
+ *
3
+ * Permission to use, copy, modify, and/or distribute this software for any
4
+ * purpose with or without fee is hereby granted, provided that the above
5
+ * copyright notice and this permission notice appear in all copies.
6
+ *
7
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
8
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
9
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
10
+ * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
11
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
12
+ * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
13
+ * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */
14
+
15
+ #include <openssl/bytestring.h>
16
+
17
+ #include "internal.h"
18
+
19
+
20
+ static int is_valid_code_point(uint32_t v) {
21
+ // References in the following are to Unicode 9.0.0.
22
+ if (// The Unicode space runs from zero to 0x10ffff (3.4 D9).
23
+ v > 0x10ffff ||
24
+ // Values 0x...fffe, 0x...ffff, and 0xfdd0-0xfdef are permanently reserved
25
+ // (3.4 D14)
26
+ (v & 0xfffe) == 0xfffe ||
27
+ (v >= 0xfdd0 && v <= 0xfdef) ||
28
+ // Surrogate code points are invalid (3.2 C1).
29
+ (v >= 0xd800 && v <= 0xdfff)) {
30
+ return 0;
31
+ }
32
+ return 1;
33
+ }
34
+
35
+ // BOTTOM_BITS returns a byte with the bottom |n| bits set.
36
+ #define BOTTOM_BITS(n) (uint8_t)((1u << (n)) - 1)
37
+
38
+ // TOP_BITS returns a byte with the top |n| bits set.
39
+ #define TOP_BITS(n) ((uint8_t)~BOTTOM_BITS(8 - (n)))
40
+
41
+ int cbs_get_utf8(CBS *cbs, uint32_t *out) {
42
+ uint8_t c;
43
+ if (!CBS_get_u8(cbs, &c)) {
44
+ return 0;
45
+ }
46
+ if (c <= 0x7f) {
47
+ *out = c;
48
+ return 1;
49
+ }
50
+ uint32_t v, lower_bound;
51
+ size_t len;
52
+ if ((c & TOP_BITS(3)) == TOP_BITS(2)) {
53
+ v = c & BOTTOM_BITS(5);
54
+ len = 1;
55
+ lower_bound = 0x80;
56
+ } else if ((c & TOP_BITS(4)) == TOP_BITS(3)) {
57
+ v = c & BOTTOM_BITS(4);
58
+ len = 2;
59
+ lower_bound = 0x800;
60
+ } else if ((c & TOP_BITS(5)) == TOP_BITS(4)) {
61
+ v = c & BOTTOM_BITS(3);
62
+ len = 3;
63
+ lower_bound = 0x10000;
64
+ } else {
65
+ return 0;
66
+ }
67
+ for (size_t i = 0; i < len; i++) {
68
+ if (!CBS_get_u8(cbs, &c) ||
69
+ (c & TOP_BITS(2)) != TOP_BITS(1)) {
70
+ return 0;
71
+ }
72
+ v <<= 6;
73
+ v |= c & BOTTOM_BITS(6);
74
+ }
75
+ if (!is_valid_code_point(v) ||
76
+ v < lower_bound) {
77
+ return 0;
78
+ }
79
+ *out = v;
80
+ return 1;
81
+ }
82
+
83
+ int cbs_get_latin1(CBS *cbs, uint32_t *out) {
84
+ uint8_t c;
85
+ if (!CBS_get_u8(cbs, &c)) {
86
+ return 0;
87
+ }
88
+ *out = c;
89
+ return 1;
90
+ }
91
+
92
+ int cbs_get_ucs2_be(CBS *cbs, uint32_t *out) {
93
+ // Note UCS-2 (used by BMPString) does not support surrogates.
94
+ uint16_t c;
95
+ if (!CBS_get_u16(cbs, &c) ||
96
+ !is_valid_code_point(c)) {
97
+ return 0;
98
+ }
99
+ *out = c;
100
+ return 1;
101
+ }
102
+
103
+ int cbs_get_utf32_be(CBS *cbs, uint32_t *out) {
104
+ return CBS_get_u32(cbs, out) && is_valid_code_point(*out);
105
+ }
106
+
107
+ size_t cbb_get_utf8_len(uint32_t u) {
108
+ if (u <= 0x7f) {
109
+ return 1;
110
+ }
111
+ if (u <= 0x7ff) {
112
+ return 2;
113
+ }
114
+ if (u <= 0xffff) {
115
+ return 3;
116
+ }
117
+ return 4;
118
+ }
119
+
120
+ int cbb_add_utf8(CBB *cbb, uint32_t u) {
121
+ if (!is_valid_code_point(u)) {
122
+ return 0;
123
+ }
124
+ if (u <= 0x7f) {
125
+ return CBB_add_u8(cbb, (uint8_t)u);
126
+ }
127
+ if (u <= 0x7ff) {
128
+ return CBB_add_u8(cbb, TOP_BITS(2) | (u >> 6)) &&
129
+ CBB_add_u8(cbb, TOP_BITS(1) | (u & BOTTOM_BITS(6)));
130
+ }
131
+ if (u <= 0xffff) {
132
+ return CBB_add_u8(cbb, TOP_BITS(3) | (u >> 12)) &&
133
+ CBB_add_u8(cbb, TOP_BITS(1) | ((u >> 6) & BOTTOM_BITS(6))) &&
134
+ CBB_add_u8(cbb, TOP_BITS(1) | (u & BOTTOM_BITS(6)));
135
+ }
136
+ if (u <= 0x10ffff) {
137
+ return CBB_add_u8(cbb, TOP_BITS(4) | (u >> 18)) &&
138
+ CBB_add_u8(cbb, TOP_BITS(1) | ((u >> 12) & BOTTOM_BITS(6))) &&
139
+ CBB_add_u8(cbb, TOP_BITS(1) | ((u >> 6) & BOTTOM_BITS(6))) &&
140
+ CBB_add_u8(cbb, TOP_BITS(1) | (u & BOTTOM_BITS(6)));
141
+ }
142
+ return 0;
143
+ }
144
+
145
+ int cbb_add_latin1(CBB *cbb, uint32_t u) {
146
+ return u <= 0xff && CBB_add_u8(cbb, (uint8_t)u);
147
+ }
148
+
149
+ int cbb_add_ucs2_be(CBB *cbb, uint32_t u) {
150
+ return u <= 0xffff && is_valid_code_point(u) && CBB_add_u16(cbb, (uint16_t)u);
151
+ }
152
+
153
+ int cbb_add_utf32_be(CBB *cbb, uint32_t u) {
154
+ return is_valid_code_point(u) && CBB_add_u32(cbb, u);
155
+ }
@@ -22,19 +22,49 @@
22
22
  #include <openssl/cpu.h>
23
23
 
24
24
  #include "../internal.h"
25
+ #include "internal.h"
25
26
 
26
27
 
27
28
  #define U8TO32_LITTLE(p) \
28
29
  (((uint32_t)((p)[0])) | ((uint32_t)((p)[1]) << 8) | \
29
30
  ((uint32_t)((p)[2]) << 16) | ((uint32_t)((p)[3]) << 24))
30
31
 
31
- #if !defined(OPENSSL_NO_ASM) && \
32
- (defined(OPENSSL_X86) || defined(OPENSSL_X86_64) || \
33
- defined(OPENSSL_ARM) || defined(OPENSSL_AARCH64))
32
+ // sigma contains the ChaCha constants, which happen to be an ASCII string.
33
+ static const uint8_t sigma[16] = { 'e', 'x', 'p', 'a', 'n', 'd', ' ', '3',
34
+ '2', '-', 'b', 'y', 't', 'e', ' ', 'k' };
35
+
36
+ #define ROTATE(v, n) (((v) << (n)) | ((v) >> (32 - (n))))
37
+
38
+ // QUARTERROUND updates a, b, c, d with a ChaCha "quarter" round.
39
+ #define QUARTERROUND(a, b, c, d) \
40
+ x[a] += x[b]; x[d] = ROTATE(x[d] ^ x[a], 16); \
41
+ x[c] += x[d]; x[b] = ROTATE(x[b] ^ x[c], 12); \
42
+ x[a] += x[b]; x[d] = ROTATE(x[d] ^ x[a], 8); \
43
+ x[c] += x[d]; x[b] = ROTATE(x[b] ^ x[c], 7);
34
44
 
35
- // ChaCha20_ctr32 is defined in asm/chacha-*.pl.
36
- void ChaCha20_ctr32(uint8_t *out, const uint8_t *in, size_t in_len,
37
- const uint32_t key[8], const uint32_t counter[4]);
45
+ void CRYPTO_hchacha20(uint8_t out[32], const uint8_t key[32],
46
+ const uint8_t nonce[16]) {
47
+ uint32_t x[16];
48
+ OPENSSL_memcpy(x, sigma, sizeof(sigma));
49
+ OPENSSL_memcpy(&x[4], key, 32);
50
+ OPENSSL_memcpy(&x[12], nonce, 16);
51
+
52
+ for (size_t i = 0; i < 20; i += 2) {
53
+ QUARTERROUND(0, 4, 8, 12)
54
+ QUARTERROUND(1, 5, 9, 13)
55
+ QUARTERROUND(2, 6, 10, 14)
56
+ QUARTERROUND(3, 7, 11, 15)
57
+ QUARTERROUND(0, 5, 10, 15)
58
+ QUARTERROUND(1, 6, 11, 12)
59
+ QUARTERROUND(2, 7, 8, 13)
60
+ QUARTERROUND(3, 4, 9, 14)
61
+ }
62
+
63
+ OPENSSL_memcpy(out, &x[0], sizeof(uint32_t) * 4);
64
+ OPENSSL_memcpy(&out[16], &x[12], sizeof(uint32_t) * 4);
65
+ }
66
+
67
+ #if defined(CHACHA20_ASM)
38
68
 
39
69
  void CRYPTO_chacha_20(uint8_t *out, const uint8_t *in, size_t in_len,
40
70
  const uint8_t key[32], const uint8_t nonce[12],
@@ -69,12 +99,6 @@ void CRYPTO_chacha_20(uint8_t *out, const uint8_t *in, size_t in_len,
69
99
 
70
100
  #else
71
101
 
72
- // sigma contains the ChaCha constants, which happen to be an ASCII string.
73
- static const uint8_t sigma[16] = { 'e', 'x', 'p', 'a', 'n', 'd', ' ', '3',
74
- '2', '-', 'b', 'y', 't', 'e', ' ', 'k' };
75
-
76
- #define ROTATE(v, n) (((v) << (n)) | ((v) >> (32 - (n))))
77
-
78
102
  #define U32TO8_LITTLE(p, v) \
79
103
  { \
80
104
  (p)[0] = (v >> 0) & 0xff; \
@@ -83,13 +107,6 @@ static const uint8_t sigma[16] = { 'e', 'x', 'p', 'a', 'n', 'd', ' ', '3',
83
107
  (p)[3] = (v >> 24) & 0xff; \
84
108
  }
85
109
 
86
- // QUARTERROUND updates a, b, c, d with a ChaCha "quarter" round.
87
- #define QUARTERROUND(a, b, c, d) \
88
- x[a] += x[b]; x[d] = ROTATE(x[d] ^ x[a], 16); \
89
- x[c] += x[d]; x[b] = ROTATE(x[b] ^ x[c], 12); \
90
- x[a] += x[b]; x[d] = ROTATE(x[d] ^ x[a], 8); \
91
- x[c] += x[d]; x[b] = ROTATE(x[b] ^ x[c], 7);
92
-
93
110
  // chacha_core performs 20 rounds of ChaCha on the input words in
94
111
  // |input| and writes the 64 output bytes to |output|.
95
112
  static void chacha_core(uint8_t output[64], const uint32_t input[16]) {
@@ -0,0 +1,45 @@
1
+ /* Copyright (c) 2018, Google Inc.
2
+ *
3
+ * Permission to use, copy, modify, and/or distribute this software for any
4
+ * purpose with or without fee is hereby granted, provided that the above
5
+ * copyright notice and this permission notice appear in all copies.
6
+ *
7
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
8
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
9
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
10
+ * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
11
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
12
+ * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
13
+ * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */
14
+
15
+ #ifndef OPENSSL_HEADER_CHACHA_INTERNAL
16
+ #define OPENSSL_HEADER_CHACHA_INTERNAL
17
+
18
+ #include <openssl/base.h>
19
+
20
+ #if defined(__cplusplus)
21
+ extern "C" {
22
+ #endif
23
+
24
+
25
+ // CRYPTO_hchacha20 computes the HChaCha20 function, which should only be used
26
+ // as part of XChaCha20.
27
+ void CRYPTO_hchacha20(uint8_t out[32], const uint8_t key[32],
28
+ const uint8_t nonce[16]);
29
+
30
+ #if !defined(OPENSSL_NO_ASM) && \
31
+ (defined(OPENSSL_X86) || defined(OPENSSL_X86_64) || \
32
+ defined(OPENSSL_ARM) || defined(OPENSSL_AARCH64))
33
+ #define CHACHA20_ASM
34
+
35
+ // ChaCha20_ctr32 is defined in asm/chacha-*.pl.
36
+ void ChaCha20_ctr32(uint8_t *out, const uint8_t *in, size_t in_len,
37
+ const uint32_t key[8], const uint32_t counter[4]);
38
+ #endif
39
+
40
+
41
+ #if defined(__cplusplus)
42
+ } // extern C
43
+ #endif
44
+
45
+ #endif // OPENSSL_HEADER_CHACHA_INTERNAL
@@ -94,20 +94,49 @@ const EVP_CIPHER *EVP_get_cipherbyname(const char *name) {
94
94
  } else if (OPENSSL_strcasecmp(name, "des-cbc") == 0) {
95
95
  return EVP_des_cbc();
96
96
  } else if (OPENSSL_strcasecmp(name, "des-ede3-cbc") == 0 ||
97
+ // This is not a name used by OpenSSL, but tcpdump registers it
98
+ // with |EVP_add_cipher_alias|. Our |EVP_add_cipher_alias| is a
99
+ // no-op, so we support the name here.
97
100
  OPENSSL_strcasecmp(name, "3des") == 0) {
98
101
  return EVP_des_ede3_cbc();
99
102
  } else if (OPENSSL_strcasecmp(name, "aes-128-cbc") == 0) {
100
103
  return EVP_aes_128_cbc();
104
+ } else if (OPENSSL_strcasecmp(name, "aes-192-cbc") == 0) {
105
+ return EVP_aes_192_cbc();
101
106
  } else if (OPENSSL_strcasecmp(name, "aes-256-cbc") == 0) {
102
107
  return EVP_aes_256_cbc();
103
108
  } else if (OPENSSL_strcasecmp(name, "aes-128-ctr") == 0) {
104
109
  return EVP_aes_128_ctr();
110
+ } else if (OPENSSL_strcasecmp(name, "aes-192-ctr") == 0) {
111
+ return EVP_aes_192_ctr();
105
112
  } else if (OPENSSL_strcasecmp(name, "aes-256-ctr") == 0) {
106
113
  return EVP_aes_256_ctr();
107
114
  } else if (OPENSSL_strcasecmp(name, "aes-128-ecb") == 0) {
108
115
  return EVP_aes_128_ecb();
116
+ } else if (OPENSSL_strcasecmp(name, "aes-192-ecb") == 0) {
117
+ return EVP_aes_192_ecb();
109
118
  } else if (OPENSSL_strcasecmp(name, "aes-256-ecb") == 0) {
110
119
  return EVP_aes_256_ecb();
120
+ } else if (OPENSSL_strcasecmp(name, "aes-128-gcm") == 0) {
121
+ return EVP_aes_128_gcm();
122
+ } else if (OPENSSL_strcasecmp(name, "aes-192-gcm") == 0) {
123
+ return EVP_aes_192_gcm();
124
+ } else if (OPENSSL_strcasecmp(name, "aes-256-gcm") == 0) {
125
+ return EVP_aes_256_gcm();
126
+ } else if (OPENSSL_strcasecmp(name, "aes-128-ofb") == 0) {
127
+ return EVP_aes_128_ofb();
128
+ } else if (OPENSSL_strcasecmp(name, "aes-192-ofb") == 0) {
129
+ return EVP_aes_192_ofb();
130
+ } else if (OPENSSL_strcasecmp(name, "aes-256-ofb") == 0) {
131
+ return EVP_aes_256_ofb();
132
+ } else if (OPENSSL_strcasecmp(name, "des-ecb") == 0) {
133
+ return EVP_des_ecb();
134
+ } else if (OPENSSL_strcasecmp(name, "des-ede") == 0) {
135
+ return EVP_des_ede();
136
+ } else if (OPENSSL_strcasecmp(name, "des-ede-cbc") == 0) {
137
+ return EVP_des_ede_cbc();
138
+ } else if (OPENSSL_strcasecmp(name, "rc2-cbc") == 0) {
139
+ return EVP_rc2_cbc();
111
140
  }
112
141
 
113
142
  return NULL;