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
@@ -59,30 +59,6 @@
59
59
  #include <openssl/err.h>
60
60
  #include <openssl/mem.h>
61
61
 
62
- void *ASN1_dup(i2d_of_void *i2d, d2i_of_void *d2i, void *x)
63
- {
64
- unsigned char *b, *p;
65
- const unsigned char *p2;
66
- int i;
67
- char *ret;
68
-
69
- if (x == NULL)
70
- return (NULL);
71
-
72
- i = i2d(x, NULL);
73
- b = OPENSSL_malloc(i + 10);
74
- if (b == NULL) {
75
- OPENSSL_PUT_ERROR(ASN1, ERR_R_MALLOC_FAILURE);
76
- return (NULL);
77
- }
78
- p = b;
79
- i = i2d(x, &p);
80
- p2 = b;
81
- ret = d2i(NULL, &p2, i);
82
- OPENSSL_free(b);
83
- return (ret);
84
- }
85
-
86
62
  /*
87
63
  * ASN1_ITEM version of dup: this follows the model above except we don't
88
64
  * need to allocate the buffer. At some point this could be rewritten to
@@ -120,8 +120,8 @@ long ASN1_ENUMERATED_get(ASN1_ENUMERATED *a)
120
120
  else if (i != V_ASN1_ENUMERATED)
121
121
  return -1;
122
122
 
123
- OPENSSL_COMPILE_ASSERT(sizeof(uint64_t) >= sizeof(long),
124
- long_larger_than_uint64_t);
123
+ OPENSSL_STATIC_ASSERT(sizeof(uint64_t) >= sizeof(long),
124
+ "long larger than uint64_t");
125
125
 
126
126
  if (a->length > (int)sizeof(uint64_t)) {
127
127
  /* hmm... a bit ugly */
@@ -56,95 +56,33 @@
56
56
 
57
57
  #include <openssl/asn1.h>
58
58
 
59
+ #include <openssl/bio.h>
59
60
  #include <openssl/err.h>
60
61
  #include <openssl/mem.h>
61
62
 
62
- int ASN1_i2d_fp(i2d_of_void *i2d, FILE *out, void *x)
63
- {
64
- BIO *b;
65
- int ret;
66
-
67
- if ((b = BIO_new(BIO_s_file())) == NULL) {
68
- OPENSSL_PUT_ERROR(ASN1, ERR_R_BUF_LIB);
69
- return (0);
70
- }
71
- BIO_set_fp(b, out, BIO_NOCLOSE);
72
- ret = ASN1_i2d_bio(i2d, b, x);
73
- BIO_free(b);
74
- return (ret);
75
- }
76
-
77
- int ASN1_i2d_bio(i2d_of_void *i2d, BIO *out, void *x)
78
- {
79
- char *b;
80
- unsigned char *p;
81
- int i, j = 0, n, ret = 1;
82
-
83
- n = i2d(x, NULL);
84
- if (n <= 0)
85
- return 0;
86
-
87
- b = (char *)OPENSSL_malloc(n);
88
- if (b == NULL) {
89
- OPENSSL_PUT_ERROR(ASN1, ERR_R_MALLOC_FAILURE);
90
- return (0);
91
- }
92
-
93
- p = (unsigned char *)b;
94
- i2d(x, &p);
95
-
96
- for (;;) {
97
- i = BIO_write(out, &(b[j]), n);
98
- if (i == n)
99
- break;
100
- if (i <= 0) {
101
- ret = 0;
102
- break;
103
- }
104
- j += i;
105
- n -= i;
106
- }
107
- OPENSSL_free(b);
108
- return (ret);
109
- }
110
63
 
111
64
  int ASN1_item_i2d_fp(const ASN1_ITEM *it, FILE *out, void *x)
112
65
  {
113
- BIO *b;
114
- int ret;
115
-
116
- if ((b = BIO_new(BIO_s_file())) == NULL) {
66
+ BIO *b = BIO_new_fp(out, BIO_NOCLOSE);
67
+ if (b == NULL) {
117
68
  OPENSSL_PUT_ERROR(ASN1, ERR_R_BUF_LIB);
118
- return (0);
69
+ return 0;
119
70
  }
120
- BIO_set_fp(b, out, BIO_NOCLOSE);
121
- ret = ASN1_item_i2d_bio(it, b, x);
71
+ int ret = ASN1_item_i2d_bio(it, b, x);
122
72
  BIO_free(b);
123
- return (ret);
73
+ return ret;
124
74
  }
125
75
 
126
76
  int ASN1_item_i2d_bio(const ASN1_ITEM *it, BIO *out, void *x)
127
77
  {
128
78
  unsigned char *b = NULL;
129
- int i, j = 0, n, ret = 1;
130
-
131
- n = ASN1_item_i2d(x, &b, it);
79
+ int n = ASN1_item_i2d(x, &b, it);
132
80
  if (b == NULL) {
133
81
  OPENSSL_PUT_ERROR(ASN1, ERR_R_MALLOC_FAILURE);
134
- return (0);
82
+ return 0;
135
83
  }
136
84
 
137
- for (;;) {
138
- i = BIO_write(out, &(b[j]), n);
139
- if (i == n)
140
- break;
141
- if (i <= 0) {
142
- ret = 0;
143
- break;
144
- }
145
- j += i;
146
- n -= i;
147
- }
85
+ int ret = BIO_write_all(out, b, n);
148
86
  OPENSSL_free(b);
149
- return (ret);
87
+ return ret;
150
88
  }
@@ -195,6 +195,16 @@ ASN1_INTEGER *c2i_ASN1_INTEGER(ASN1_INTEGER **a, const unsigned char **pp,
195
195
  unsigned char *to, *s;
196
196
  int i;
197
197
 
198
+ /*
199
+ * This function can handle lengths up to INT_MAX - 1, but the rest of the
200
+ * legacy ASN.1 code mixes integer types, so avoid exposing it to
201
+ * ASN1_INTEGERS with larger lengths.
202
+ */
203
+ if (len < 0 || len > INT_MAX / 2) {
204
+ OPENSSL_PUT_ERROR(ASN1, ASN1_R_TOO_LONG);
205
+ return NULL;
206
+ }
207
+
198
208
  if ((a == NULL) || ((*a) == NULL)) {
199
209
  if ((ret = M_ASN1_INTEGER_new()) == NULL)
200
210
  return (NULL);
@@ -276,75 +286,6 @@ ASN1_INTEGER *c2i_ASN1_INTEGER(ASN1_INTEGER **a, const unsigned char **pp,
276
286
  return (NULL);
277
287
  }
278
288
 
279
- /*
280
- * This is a version of d2i_ASN1_INTEGER that ignores the sign bit of ASN1
281
- * integers: some broken software can encode a positive INTEGER with its MSB
282
- * set as negative (it doesn't add a padding zero).
283
- */
284
-
285
- ASN1_INTEGER *d2i_ASN1_UINTEGER(ASN1_INTEGER **a, const unsigned char **pp,
286
- long length)
287
- {
288
- ASN1_INTEGER *ret = NULL;
289
- const unsigned char *p;
290
- unsigned char *s;
291
- long len;
292
- int inf, tag, xclass;
293
- int i;
294
-
295
- if ((a == NULL) || ((*a) == NULL)) {
296
- if ((ret = M_ASN1_INTEGER_new()) == NULL)
297
- return (NULL);
298
- ret->type = V_ASN1_INTEGER;
299
- } else
300
- ret = (*a);
301
-
302
- p = *pp;
303
- inf = ASN1_get_object(&p, &len, &tag, &xclass, length);
304
- if (inf & 0x80) {
305
- i = ASN1_R_BAD_OBJECT_HEADER;
306
- goto err;
307
- }
308
-
309
- if (tag != V_ASN1_INTEGER) {
310
- i = ASN1_R_EXPECTING_AN_INTEGER;
311
- goto err;
312
- }
313
-
314
- /*
315
- * We must OPENSSL_malloc stuff, even for 0 bytes otherwise it signifies
316
- * a missing NULL parameter.
317
- */
318
- s = (unsigned char *)OPENSSL_malloc((int)len + 1);
319
- if (s == NULL) {
320
- i = ERR_R_MALLOC_FAILURE;
321
- goto err;
322
- }
323
- ret->type = V_ASN1_INTEGER;
324
- if (len) {
325
- if ((*p == 0) && (len != 1)) {
326
- p++;
327
- len--;
328
- }
329
- OPENSSL_memcpy(s, p, (int)len);
330
- p += len;
331
- }
332
-
333
- if (ret->data != NULL)
334
- OPENSSL_free(ret->data);
335
- ret->data = s;
336
- ret->length = (int)len;
337
- if (a != NULL)
338
- (*a) = ret;
339
- *pp = p;
340
- return (ret);
341
- err:
342
- OPENSSL_PUT_ERROR(ASN1, i);
343
- if ((ret != NULL) && ((a == NULL) || (*a != ret)))
344
- M_ASN1_INTEGER_free(ret);
345
- return (NULL);
346
- }
347
-
348
289
  int ASN1_INTEGER_set(ASN1_INTEGER *a, long v)
349
290
  {
350
291
  if (v >= 0) {
@@ -400,8 +341,8 @@ long ASN1_INTEGER_get(const ASN1_INTEGER *a)
400
341
  else if (i != V_ASN1_INTEGER)
401
342
  return -1;
402
343
 
403
- OPENSSL_COMPILE_ASSERT(sizeof(uint64_t) >= sizeof(long),
404
- long_larger_than_uint64_t);
344
+ OPENSSL_STATIC_ASSERT(sizeof(uint64_t) >= sizeof(long),
345
+ "long larger than uint64_t");
405
346
 
406
347
  if (a->length > (int)sizeof(uint64_t)) {
407
348
  /* hmm... a bit ugly, return all ones */
@@ -56,23 +56,16 @@
56
56
 
57
57
  #include <openssl/asn1.h>
58
58
 
59
+ #include <limits.h>
59
60
  #include <string.h>
60
61
 
62
+ #include <openssl/bytestring.h>
61
63
  #include <openssl/err.h>
62
64
  #include <openssl/mem.h>
63
65
 
64
66
  #include "asn1_locl.h"
67
+ #include "../bytestring/internal.h"
65
68
 
66
- static int traverse_string(const unsigned char *p, int len, int inform,
67
- int (*rfunc) (uint32_t value, void *in),
68
- void *arg);
69
- static int in_utf8(uint32_t value, void *arg);
70
- static int out_utf8(uint32_t value, void *arg);
71
- static int type_str(uint32_t value, void *arg);
72
- static int cpy_asc(uint32_t value, void *arg);
73
- static int cpy_bmp(uint32_t value, void *arg);
74
- static int cpy_univ(uint32_t value, void *arg);
75
- static int cpy_utf8(uint32_t value, void *arg);
76
69
  static int is_printable(uint32_t value);
77
70
 
78
71
  /*
@@ -90,55 +83,45 @@ int ASN1_mbstring_copy(ASN1_STRING **out, const unsigned char *in, int len,
90
83
  return ASN1_mbstring_ncopy(out, in, len, inform, mask, 0, 0);
91
84
  }
92
85
 
86
+ OPENSSL_DECLARE_ERROR_REASON(ASN1, INVALID_BMPSTRING)
87
+ OPENSSL_DECLARE_ERROR_REASON(ASN1, INVALID_UNIVERSALSTRING)
88
+ OPENSSL_DECLARE_ERROR_REASON(ASN1, INVALID_UTF8STRING)
89
+
93
90
  int ASN1_mbstring_ncopy(ASN1_STRING **out, const unsigned char *in, int len,
94
91
  int inform, unsigned long mask,
95
92
  long minsize, long maxsize)
96
93
  {
97
94
  int str_type;
98
- int ret;
99
95
  char free_out;
100
- int outform, outlen = 0;
101
96
  ASN1_STRING *dest;
102
- unsigned char *p;
103
- int nchar;
97
+ size_t nchar = 0;
104
98
  char strbuf[32];
105
- int (*cpyfunc) (uint32_t, void *) = NULL;
106
99
  if (len == -1)
107
100
  len = strlen((const char *)in);
108
101
  if (!mask)
109
102
  mask = DIRSTRING_TYPE;
110
103
 
111
- /* First do a string check and work out the number of characters */
104
+ int (*decode_func)(CBS *, uint32_t*);
105
+ int error;
112
106
  switch (inform) {
113
-
114
107
  case MBSTRING_BMP:
115
- if (len & 1) {
116
- OPENSSL_PUT_ERROR(ASN1, ASN1_R_INVALID_BMPSTRING_LENGTH);
117
- return -1;
118
- }
119
- nchar = len >> 1;
108
+ decode_func = cbs_get_ucs2_be;
109
+ error = ASN1_R_INVALID_BMPSTRING;
120
110
  break;
121
111
 
122
112
  case MBSTRING_UNIV:
123
- if (len & 3) {
124
- OPENSSL_PUT_ERROR(ASN1, ASN1_R_INVALID_UNIVERSALSTRING_LENGTH);
125
- return -1;
126
- }
127
- nchar = len >> 2;
113
+ decode_func = cbs_get_utf32_be;
114
+ error = ASN1_R_INVALID_UNIVERSALSTRING;
128
115
  break;
129
116
 
130
117
  case MBSTRING_UTF8:
131
- nchar = 0;
132
- /* This counts the characters and does utf8 syntax checking */
133
- ret = traverse_string(in, len, MBSTRING_UTF8, in_utf8, &nchar);
134
- if (ret < 0) {
135
- OPENSSL_PUT_ERROR(ASN1, ASN1_R_INVALID_UTF8STRING);
136
- return -1;
137
- }
118
+ decode_func = cbs_get_utf8;
119
+ error = ASN1_R_INVALID_UTF8STRING;
138
120
  break;
139
121
 
140
122
  case MBSTRING_ASC:
141
- nchar = len;
123
+ decode_func = cbs_get_latin1;
124
+ error = ERR_R_INTERNAL_ERROR; // Latin-1 inputs are never invalid.
142
125
  break;
143
126
 
144
127
  default:
@@ -146,44 +129,92 @@ int ASN1_mbstring_ncopy(ASN1_STRING **out, const unsigned char *in, int len,
146
129
  return -1;
147
130
  }
148
131
 
149
- if ((minsize > 0) && (nchar < minsize)) {
132
+ /* Check |minsize| and |maxsize| and work out the minimal type, if any. */
133
+ CBS cbs;
134
+ CBS_init(&cbs, in, len);
135
+ size_t utf8_len = 0;
136
+ while (CBS_len(&cbs) != 0) {
137
+ uint32_t c;
138
+ if (!decode_func(&cbs, &c)) {
139
+ OPENSSL_PUT_ERROR(ASN1, error);
140
+ return -1;
141
+ }
142
+ if (nchar == 0 &&
143
+ (inform == MBSTRING_BMP || inform == MBSTRING_UNIV) &&
144
+ c == 0xfeff) {
145
+ /* Reject byte-order mark. We could drop it but that would mean
146
+ * adding ambiguity around whether a BOM was included or not when
147
+ * matching strings.
148
+ *
149
+ * For a little-endian UCS-2 string, the BOM will appear as 0xfffe
150
+ * and will be rejected as noncharacter, below. */
151
+ OPENSSL_PUT_ERROR(ASN1, ASN1_R_ILLEGAL_CHARACTERS);
152
+ return -1;
153
+ }
154
+
155
+ /* Update which output formats are still possible. */
156
+ if ((mask & B_ASN1_PRINTABLESTRING) && !is_printable(c)) {
157
+ mask &= ~B_ASN1_PRINTABLESTRING;
158
+ }
159
+ if ((mask & B_ASN1_IA5STRING) && (c > 127)) {
160
+ mask &= ~B_ASN1_IA5STRING;
161
+ }
162
+ if ((mask & B_ASN1_T61STRING) && (c > 0xff)) {
163
+ mask &= ~B_ASN1_T61STRING;
164
+ }
165
+ if ((mask & B_ASN1_BMPSTRING) && (c > 0xffff)) {
166
+ mask &= ~B_ASN1_BMPSTRING;
167
+ }
168
+ if (!mask) {
169
+ OPENSSL_PUT_ERROR(ASN1, ASN1_R_ILLEGAL_CHARACTERS);
170
+ return -1;
171
+ }
172
+
173
+ nchar++;
174
+ utf8_len += cbb_get_utf8_len(c);
175
+ }
176
+
177
+ if (minsize > 0 && nchar < (size_t)minsize) {
150
178
  OPENSSL_PUT_ERROR(ASN1, ASN1_R_STRING_TOO_SHORT);
151
179
  BIO_snprintf(strbuf, sizeof strbuf, "%ld", minsize);
152
180
  ERR_add_error_data(2, "minsize=", strbuf);
153
181
  return -1;
154
182
  }
155
183
 
156
- if ((maxsize > 0) && (nchar > maxsize)) {
184
+ if (maxsize > 0 && nchar > (size_t)maxsize) {
157
185
  OPENSSL_PUT_ERROR(ASN1, ASN1_R_STRING_TOO_LONG);
158
186
  BIO_snprintf(strbuf, sizeof strbuf, "%ld", maxsize);
159
187
  ERR_add_error_data(2, "maxsize=", strbuf);
160
188
  return -1;
161
189
  }
162
190
 
163
- /* Now work out minimal type (if any) */
164
- if (traverse_string(in, len, inform, type_str, &mask) < 0) {
165
- OPENSSL_PUT_ERROR(ASN1, ASN1_R_ILLEGAL_CHARACTERS);
166
- return -1;
167
- }
168
-
169
191
  /* Now work out output format and string type */
170
- outform = MBSTRING_ASC;
171
- if (mask & B_ASN1_PRINTABLESTRING)
192
+ int (*encode_func)(CBB *, uint32_t) = cbb_add_latin1;
193
+ size_t size_estimate = nchar;
194
+ int outform = MBSTRING_ASC;
195
+ if (mask & B_ASN1_PRINTABLESTRING) {
172
196
  str_type = V_ASN1_PRINTABLESTRING;
173
- else if (mask & B_ASN1_IA5STRING)
197
+ } else if (mask & B_ASN1_IA5STRING) {
174
198
  str_type = V_ASN1_IA5STRING;
175
- else if (mask & B_ASN1_T61STRING)
199
+ } else if (mask & B_ASN1_T61STRING) {
176
200
  str_type = V_ASN1_T61STRING;
177
- else if (mask & B_ASN1_BMPSTRING) {
201
+ } else if (mask & B_ASN1_BMPSTRING) {
178
202
  str_type = V_ASN1_BMPSTRING;
179
203
  outform = MBSTRING_BMP;
204
+ encode_func = cbb_add_ucs2_be;
205
+ size_estimate = 2 * nchar;
180
206
  } else if (mask & B_ASN1_UNIVERSALSTRING) {
181
207
  str_type = V_ASN1_UNIVERSALSTRING;
208
+ encode_func = cbb_add_utf32_be;
209
+ size_estimate = 4 * nchar;
182
210
  outform = MBSTRING_UNIV;
183
211
  } else {
184
212
  str_type = V_ASN1_UTF8STRING;
185
213
  outform = MBSTRING_UTF8;
214
+ encode_func = cbb_add_utf8;
215
+ size_estimate = utf8_len;
186
216
  }
217
+
187
218
  if (!out)
188
219
  return str_type;
189
220
  if (*out) {
@@ -204,6 +235,7 @@ int ASN1_mbstring_ncopy(ASN1_STRING **out, const unsigned char *in, int len,
204
235
  }
205
236
  *out = dest;
206
237
  }
238
+
207
239
  /* If both the same type just copy across */
208
240
  if (inform == outform) {
209
241
  if (!ASN1_STRING_set(dest, in, len)) {
@@ -213,179 +245,41 @@ int ASN1_mbstring_ncopy(ASN1_STRING **out, const unsigned char *in, int len,
213
245
  return str_type;
214
246
  }
215
247
 
216
- /* Work out how much space the destination will need */
217
- switch (outform) {
218
- case MBSTRING_ASC:
219
- outlen = nchar;
220
- cpyfunc = cpy_asc;
221
- break;
222
-
223
- case MBSTRING_BMP:
224
- outlen = nchar << 1;
225
- cpyfunc = cpy_bmp;
226
- break;
227
-
228
- case MBSTRING_UNIV:
229
- outlen = nchar << 2;
230
- cpyfunc = cpy_univ;
231
- break;
232
-
233
- case MBSTRING_UTF8:
234
- outlen = 0;
235
- traverse_string(in, len, inform, out_utf8, &outlen);
236
- cpyfunc = cpy_utf8;
237
- break;
238
- }
239
- if (!(p = OPENSSL_malloc(outlen + 1))) {
240
- if (free_out)
241
- ASN1_STRING_free(dest);
248
+ CBB cbb;
249
+ if (!CBB_init(&cbb, size_estimate + 1)) {
242
250
  OPENSSL_PUT_ERROR(ASN1, ERR_R_MALLOC_FAILURE);
243
- return -1;
251
+ goto err;
244
252
  }
245
- dest->length = outlen;
246
- dest->data = p;
247
- p[outlen] = 0;
248
- traverse_string(in, len, inform, cpyfunc, &p);
249
- return str_type;
250
- }
251
-
252
- /*
253
- * This function traverses a string and passes the value of each character to
254
- * an optional function along with a void * argument.
255
- */
256
-
257
- static int traverse_string(const unsigned char *p, int len, int inform,
258
- int (*rfunc) (uint32_t value, void *in),
259
- void *arg)
260
- {
261
- uint32_t value;
262
- int ret;
263
- while (len) {
264
- if (inform == MBSTRING_ASC) {
265
- value = *p++;
266
- len--;
267
- } else if (inform == MBSTRING_BMP) {
268
- value = *p++ << 8;
269
- value |= *p++;
270
- len -= 2;
271
- } else if (inform == MBSTRING_UNIV) {
272
- value = ((uint32_t)*p++) << 24;
273
- value |= ((uint32_t)*p++) << 16;
274
- value |= *p++ << 8;
275
- value |= *p++;
276
- len -= 4;
277
- } else {
278
- ret = UTF8_getc(p, len, &value);
279
- if (ret < 0)
280
- return -1;
281
- len -= ret;
282
- p += ret;
283
- }
284
- if (rfunc) {
285
- ret = rfunc(value, arg);
286
- if (ret <= 0)
287
- return ret;
253
+ CBS_init(&cbs, in, len);
254
+ while (CBS_len(&cbs) != 0) {
255
+ uint32_t c;
256
+ if (!decode_func(&cbs, &c) ||
257
+ !encode_func(&cbb, c)) {
258
+ OPENSSL_PUT_ERROR(ASN1, ERR_R_INTERNAL_ERROR);
259
+ goto err;
288
260
  }
289
261
  }
290
- return 1;
291
- }
292
-
293
- /* Various utility functions for traverse_string */
294
-
295
- /* Just count number of characters */
296
-
297
- static int in_utf8(uint32_t value, void *arg)
298
- {
299
- int *nchar;
300
- nchar = arg;
301
- (*nchar)++;
302
- return 1;
303
- }
304
-
305
- /* Determine size of output as a UTF8 String */
306
-
307
- static int out_utf8(uint32_t value, void *arg)
308
- {
309
- int *outlen;
310
- outlen = arg;
311
- *outlen += UTF8_putc(NULL, -1, value);
312
- return 1;
313
- }
314
-
315
- /*
316
- * Determine the "type" of a string: check each character against a supplied
317
- * "mask".
318
- */
319
-
320
- static int type_str(uint32_t value, void *arg)
321
- {
322
- unsigned long types;
323
- types = *((unsigned long *)arg);
324
- if ((types & B_ASN1_PRINTABLESTRING) && !is_printable(value))
325
- types &= ~B_ASN1_PRINTABLESTRING;
326
- if ((types & B_ASN1_IA5STRING) && (value > 127))
327
- types &= ~B_ASN1_IA5STRING;
328
- if ((types & B_ASN1_T61STRING) && (value > 0xff))
329
- types &= ~B_ASN1_T61STRING;
330
- if ((types & B_ASN1_BMPSTRING) && (value > 0xffff))
331
- types &= ~B_ASN1_BMPSTRING;
332
- if (!types)
333
- return -1;
334
- *((unsigned long *)arg) = types;
335
- return 1;
336
- }
337
-
338
- /* Copy one byte per character ASCII like strings */
339
-
340
- static int cpy_asc(uint32_t value, void *arg)
341
- {
342
- unsigned char **p, *q;
343
- p = arg;
344
- q = *p;
345
- *q = (unsigned char)value;
346
- (*p)++;
347
- return 1;
348
- }
349
-
350
- /* Copy two byte per character BMPStrings */
351
-
352
- static int cpy_bmp(uint32_t value, void *arg)
353
- {
354
- unsigned char **p, *q;
355
- p = arg;
356
- q = *p;
357
- *q++ = (unsigned char)((value >> 8) & 0xff);
358
- *q = (unsigned char)(value & 0xff);
359
- *p += 2;
360
- return 1;
361
- }
362
-
363
- /* Copy four byte per character UniversalStrings */
364
-
365
- static int cpy_univ(uint32_t value, void *arg)
366
- {
367
- unsigned char **p, *q;
368
- p = arg;
369
- q = *p;
370
- *q++ = (unsigned char)((value >> 24) & 0xff);
371
- *q++ = (unsigned char)((value >> 16) & 0xff);
372
- *q++ = (unsigned char)((value >> 8) & 0xff);
373
- *q = (unsigned char)(value & 0xff);
374
- *p += 4;
375
- return 1;
376
- }
377
-
378
- /* Copy to a UTF8String */
262
+ uint8_t *data = NULL;
263
+ size_t data_len;
264
+ if (/* OpenSSL historically NUL-terminated this value with a single byte,
265
+ * even for |MBSTRING_BMP| and |MBSTRING_UNIV|. */
266
+ !CBB_add_u8(&cbb, 0) ||
267
+ !CBB_finish(&cbb, &data, &data_len) ||
268
+ data_len < 1 ||
269
+ data_len > INT_MAX) {
270
+ OPENSSL_PUT_ERROR(ASN1, ERR_R_INTERNAL_ERROR);
271
+ OPENSSL_free(data);
272
+ goto err;
273
+ }
274
+ dest->length = (int)(data_len - 1);
275
+ dest->data = data;
276
+ return str_type;
379
277
 
380
- static int cpy_utf8(uint32_t value, void *arg)
381
- {
382
- unsigned char **p;
383
- int ret;
384
- p = arg;
385
- /* We already know there is enough room so pass 0xff as the length */
386
- ret = UTF8_putc(*p, 0xff, value);
387
- *p += ret;
388
- return 1;
278
+ err:
279
+ if (free_out)
280
+ ASN1_STRING_free(dest);
281
+ CBB_cleanup(&cbb);
282
+ return -1;
389
283
  }
390
284
 
391
285
  /* Return 1 if the character is permitted in a PrintableString */