grpc 1.24.0 → 1.25.0.pre1

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

Potentially problematic release.


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

Files changed (504) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +306 -243
  3. data/etc/roots.pem +0 -100
  4. data/include/grpc/grpc_security.h +44 -18
  5. data/include/grpc/impl/codegen/grpc_types.h +15 -0
  6. data/include/grpc/impl/codegen/port_platform.h +27 -11
  7. data/include/grpc/impl/codegen/sync_generic.h +1 -1
  8. data/src/boringssl/err_data.c +695 -650
  9. data/src/core/ext/filters/client_channel/client_channel.cc +257 -179
  10. data/src/core/ext/filters/client_channel/client_channel.h +24 -0
  11. data/src/core/ext/filters/client_channel/client_channel_channelz.cc +2 -3
  12. data/src/core/ext/filters/client_channel/client_channel_factory.h +1 -5
  13. data/src/core/ext/filters/client_channel/health/health_check_client.cc +18 -45
  14. data/src/core/ext/filters/client_channel/health/health_check_client.h +5 -13
  15. data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +1 -1
  16. data/src/core/ext/filters/client_channel/lb_policy.cc +2 -3
  17. data/src/core/ext/filters/client_channel/lb_policy.h +65 -55
  18. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +14 -14
  19. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +113 -36
  20. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +14 -19
  21. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +36 -13
  22. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +3 -10
  23. data/src/core/ext/filters/client_channel/lb_policy/xds/xds.cc +814 -1589
  24. data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +2 -5
  25. data/src/core/ext/filters/client_channel/lb_policy_factory.h +3 -6
  26. data/src/core/ext/filters/client_channel/resolver.cc +1 -2
  27. data/src/core/ext/filters/client_channel/resolver.h +8 -16
  28. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +25 -8
  29. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.cc +46 -12
  30. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +10 -17
  31. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_libuv.cc +7 -8
  32. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +4 -4
  33. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +111 -44
  34. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +22 -14
  35. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +1 -1
  36. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.cc +2 -2
  37. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +29 -10
  38. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +27 -36
  39. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +7 -10
  40. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +60 -16
  41. data/src/core/ext/filters/client_channel/resolver_factory.h +4 -8
  42. data/src/core/ext/filters/client_channel/resolver_registry.cc +1 -1
  43. data/src/core/ext/filters/client_channel/resolver_registry.h +1 -1
  44. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +7 -10
  45. data/src/core/ext/filters/client_channel/resolving_lb_policy.cc +7 -8
  46. data/src/core/ext/filters/client_channel/resolving_lb_policy.h +1 -1
  47. data/src/core/ext/filters/client_channel/retry_throttle.cc +5 -5
  48. data/src/core/ext/filters/client_channel/retry_throttle.h +1 -4
  49. data/src/core/ext/filters/client_channel/service_config.h +8 -8
  50. data/src/core/ext/filters/client_channel/subchannel.cc +53 -86
  51. data/src/core/ext/filters/client_channel/subchannel.h +7 -9
  52. data/src/core/ext/filters/client_channel/subchannel_interface.h +9 -13
  53. data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +3 -6
  54. data/src/core/ext/filters/client_channel/{lb_policy/xds/xds_load_balancer_api.cc → xds/xds_api.cc} +169 -52
  55. data/src/core/ext/filters/client_channel/xds/xds_api.h +171 -0
  56. data/src/core/ext/filters/client_channel/xds/xds_bootstrap.cc +450 -0
  57. data/src/core/ext/filters/client_channel/xds/xds_bootstrap.h +99 -0
  58. data/src/core/ext/filters/client_channel/{lb_policy/xds → xds}/xds_channel.h +8 -6
  59. data/src/core/ext/filters/client_channel/xds/xds_channel_args.h +26 -0
  60. data/src/core/ext/filters/client_channel/{lb_policy/xds → xds}/xds_channel_secure.cc +28 -11
  61. data/src/core/ext/filters/client_channel/xds/xds_client.cc +1413 -0
  62. data/src/core/ext/filters/client_channel/xds/xds_client.h +221 -0
  63. data/src/core/ext/filters/client_channel/{lb_policy/xds → xds}/xds_client_stats.cc +1 -5
  64. data/src/core/ext/filters/client_channel/{lb_policy/xds → xds}/xds_client_stats.h +3 -4
  65. data/src/core/ext/filters/deadline/deadline_filter.cc +20 -20
  66. data/src/core/ext/filters/http/client/http_client_filter.cc +15 -15
  67. data/src/core/ext/filters/http/client_authority_filter.cc +14 -14
  68. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +12 -12
  69. data/src/core/ext/filters/max_age/max_age_filter.cc +59 -50
  70. data/src/core/ext/filters/message_size/message_size_filter.cc +18 -18
  71. data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc +15 -14
  72. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +233 -175
  73. data/src/core/ext/transport/chttp2/transport/flow_control.h +21 -24
  74. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +253 -163
  75. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +24 -12
  76. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +2 -3
  77. data/src/core/ext/transport/chttp2/transport/internal.h +13 -15
  78. data/src/core/ext/transport/chttp2/transport/writing.cc +3 -0
  79. data/src/core/ext/transport/inproc/inproc_transport.cc +20 -13
  80. data/src/core/lib/channel/channel_args.cc +16 -0
  81. data/src/core/lib/channel/channel_args.h +22 -0
  82. data/src/core/lib/channel/channelz.cc +5 -6
  83. data/src/core/lib/channel/channelz.h +1 -1
  84. data/src/core/lib/channel/connected_channel.cc +20 -20
  85. data/src/core/lib/channel/handshaker.h +3 -4
  86. data/src/core/lib/channel/handshaker_factory.h +1 -3
  87. data/src/core/lib/debug/trace.h +3 -2
  88. data/src/core/lib/gprpp/arena.cc +3 -3
  89. data/src/core/lib/gprpp/arena.h +2 -3
  90. data/src/core/lib/gprpp/inlined_vector.h +9 -0
  91. data/src/core/lib/gprpp/map.h +3 -501
  92. data/src/core/lib/gprpp/memory.h +45 -41
  93. data/src/core/lib/gprpp/mpscq.cc +108 -0
  94. data/src/core/lib/gprpp/mpscq.h +98 -0
  95. data/src/core/lib/gprpp/orphanable.h +6 -11
  96. data/src/core/lib/gprpp/ref_counted.h +25 -19
  97. data/src/core/lib/gprpp/set.h +33 -0
  98. data/src/core/lib/gprpp/thd.h +2 -4
  99. data/src/core/lib/http/httpcli.cc +1 -1
  100. data/src/core/lib/http/httpcli_security_connector.cc +15 -11
  101. data/src/core/lib/http/parser.cc +1 -1
  102. data/src/core/lib/iomgr/buffer_list.cc +4 -5
  103. data/src/core/lib/iomgr/buffer_list.h +5 -6
  104. data/src/core/lib/iomgr/call_combiner.cc +4 -5
  105. data/src/core/lib/iomgr/call_combiner.h +2 -2
  106. data/src/core/lib/iomgr/cfstream_handle.h +3 -5
  107. data/src/core/lib/iomgr/closure.h +8 -3
  108. data/src/core/lib/iomgr/combiner.cc +45 -82
  109. data/src/core/lib/iomgr/combiner.h +32 -8
  110. data/src/core/lib/iomgr/endpoint_cfstream.cc +5 -3
  111. data/src/core/lib/iomgr/ev_epoll1_linux.cc +19 -15
  112. data/src/core/lib/iomgr/exec_ctx.h +4 -3
  113. data/src/core/lib/iomgr/executor.cc +4 -2
  114. data/src/core/lib/iomgr/executor.h +3 -0
  115. data/src/core/lib/iomgr/executor/mpmcqueue.h +3 -6
  116. data/src/core/lib/iomgr/executor/threadpool.cc +1 -2
  117. data/src/core/lib/iomgr/executor/threadpool.h +7 -11
  118. data/src/core/lib/iomgr/resource_quota.cc +55 -51
  119. data/src/core/lib/iomgr/resource_quota.h +13 -9
  120. data/src/core/lib/iomgr/socket_utils_common_posix.cc +13 -0
  121. data/src/core/lib/iomgr/socket_utils_posix.h +4 -0
  122. data/src/core/lib/iomgr/tcp_client_posix.cc +4 -11
  123. data/src/core/lib/iomgr/tcp_custom.cc +9 -7
  124. data/src/core/lib/iomgr/tcp_posix.cc +20 -16
  125. data/src/core/lib/iomgr/tcp_server.h +1 -4
  126. data/src/core/lib/iomgr/tcp_server_custom.cc +5 -5
  127. data/src/core/lib/iomgr/tcp_server_posix.cc +1 -1
  128. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +2 -11
  129. data/src/core/lib/iomgr/timer_custom.cc +2 -2
  130. data/src/core/lib/iomgr/udp_server.cc +3 -2
  131. data/src/core/lib/iomgr/udp_server.h +6 -12
  132. data/src/core/lib/json/json.h +1 -1
  133. data/src/core/lib/json/json_string.cc +2 -2
  134. data/src/core/lib/profiling/basic_timers.cc +2 -2
  135. data/src/core/lib/security/credentials/alts/alts_credentials.cc +2 -2
  136. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc +1 -1
  137. data/src/core/lib/security/credentials/credentials.h +4 -20
  138. data/src/core/lib/security/credentials/fake/fake_credentials.cc +4 -4
  139. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +1 -3
  140. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +64 -0
  141. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +4 -4
  142. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +9 -7
  143. data/src/core/lib/security/security_connector/load_system_roots_linux.cc +2 -0
  144. data/src/core/lib/security/security_connector/local/local_security_connector.cc +4 -4
  145. data/src/core/lib/security/security_connector/security_connector.cc +1 -0
  146. data/src/core/lib/security/security_connector/security_connector.h +19 -17
  147. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +8 -5
  148. data/src/core/lib/security/security_connector/ssl_utils.cc +2 -2
  149. data/src/core/lib/security/security_connector/ssl_utils.h +1 -1
  150. data/src/core/lib/security/security_connector/tls/spiffe_security_connector.cc +14 -6
  151. data/src/core/lib/security/security_connector/tls/spiffe_security_connector.h +4 -2
  152. data/src/core/lib/security/transport/client_auth_filter.cc +17 -17
  153. data/src/core/lib/security/transport/security_handshaker.cc +29 -13
  154. data/src/core/lib/security/transport/security_handshaker.h +4 -2
  155. data/src/core/lib/security/transport/server_auth_filter.cc +14 -14
  156. data/src/core/lib/slice/slice.cc +2 -10
  157. data/src/core/lib/slice/slice_hash_table.h +4 -6
  158. data/src/core/lib/slice/slice_intern.cc +42 -39
  159. data/src/core/lib/slice/slice_internal.h +3 -3
  160. data/src/core/lib/slice/slice_utils.h +21 -4
  161. data/src/core/lib/slice/slice_weak_hash_table.h +4 -6
  162. data/src/core/lib/surface/call.cc +3 -3
  163. data/src/core/lib/surface/channel.cc +7 -0
  164. data/src/core/lib/surface/completion_queue.cc +12 -11
  165. data/src/core/lib/surface/completion_queue.h +4 -2
  166. data/src/core/lib/surface/init.cc +1 -0
  167. data/src/core/lib/surface/lame_client.cc +33 -18
  168. data/src/core/lib/surface/server.cc +77 -76
  169. data/src/core/lib/surface/version.cc +1 -1
  170. data/src/core/lib/transport/byte_stream.h +3 -7
  171. data/src/core/lib/transport/connectivity_state.cc +112 -98
  172. data/src/core/lib/transport/connectivity_state.h +100 -50
  173. data/src/core/lib/transport/static_metadata.cc +276 -288
  174. data/src/core/lib/transport/static_metadata.h +73 -76
  175. data/src/core/lib/transport/status_conversion.cc +1 -1
  176. data/src/core/lib/transport/status_metadata.cc +1 -1
  177. data/src/core/lib/transport/transport.cc +2 -2
  178. data/src/core/lib/transport/transport.h +12 -4
  179. data/src/core/lib/transport/transport_op_string.cc +14 -11
  180. data/src/core/tsi/alts/frame_protector/alts_unseal_privacy_integrity_crypter.cc +1 -1
  181. data/src/core/tsi/alts/handshaker/alts_shared_resource.cc +1 -1
  182. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +5 -5
  183. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +12 -2
  184. data/src/core/tsi/fake_transport_security.cc +7 -5
  185. data/src/core/tsi/grpc_shadow_boringssl.h +2918 -2627
  186. data/src/core/tsi/local_transport_security.cc +8 -6
  187. data/src/core/tsi/ssl/session_cache/ssl_session.h +1 -3
  188. data/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc +1 -2
  189. data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +7 -5
  190. data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +4 -6
  191. data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +1 -2
  192. data/src/core/tsi/ssl_transport_security.cc +12 -12
  193. data/src/core/tsi/ssl_transport_security.h +2 -2
  194. data/src/core/tsi/transport_security_grpc.cc +7 -0
  195. data/src/core/tsi/transport_security_grpc.h +6 -0
  196. data/src/ruby/ext/grpc/extconf.rb +1 -0
  197. data/src/ruby/ext/grpc/rb_call.c +1 -1
  198. data/src/ruby/ext/grpc/rb_channel.c +1 -1
  199. data/src/ruby/lib/grpc/generic/bidi_call.rb +1 -1
  200. data/src/ruby/lib/grpc/generic/rpc_server.rb +1 -1
  201. data/src/ruby/lib/grpc/version.rb +1 -1
  202. data/src/ruby/spec/google_rpc_status_utils_spec.rb +2 -2
  203. data/third_party/boringssl/crypto/asn1/a_bool.c +18 -5
  204. data/third_party/boringssl/crypto/asn1/a_d2i_fp.c +17 -221
  205. data/third_party/boringssl/crypto/asn1/a_dup.c +0 -24
  206. data/third_party/boringssl/crypto/asn1/a_enum.c +2 -2
  207. data/third_party/boringssl/crypto/asn1/a_i2d_fp.c +10 -72
  208. data/third_party/boringssl/crypto/asn1/a_int.c +12 -71
  209. data/third_party/boringssl/crypto/asn1/a_mbstr.c +110 -216
  210. data/third_party/boringssl/crypto/asn1/a_object.c +16 -5
  211. data/third_party/boringssl/crypto/asn1/a_strnid.c +1 -0
  212. data/third_party/boringssl/crypto/asn1/asn1_lib.c +5 -1
  213. data/third_party/boringssl/crypto/asn1/tasn_enc.c +3 -1
  214. data/third_party/boringssl/crypto/base64/base64.c +2 -2
  215. data/third_party/boringssl/crypto/bio/bio.c +73 -9
  216. data/third_party/boringssl/crypto/bio/connect.c +4 -0
  217. data/third_party/boringssl/crypto/bio/fd.c +4 -0
  218. data/third_party/boringssl/crypto/bio/file.c +5 -2
  219. data/third_party/boringssl/crypto/bio/socket.c +4 -0
  220. data/third_party/boringssl/crypto/bio/socket_helper.c +4 -0
  221. data/third_party/boringssl/crypto/bn_extra/convert.c +11 -7
  222. data/third_party/boringssl/crypto/bytestring/ber.c +8 -4
  223. data/third_party/boringssl/crypto/bytestring/cbb.c +19 -7
  224. data/third_party/boringssl/crypto/bytestring/cbs.c +28 -15
  225. data/third_party/boringssl/crypto/bytestring/internal.h +28 -7
  226. data/third_party/boringssl/crypto/bytestring/unicode.c +155 -0
  227. data/third_party/boringssl/crypto/chacha/chacha.c +36 -19
  228. data/third_party/boringssl/crypto/chacha/internal.h +45 -0
  229. data/third_party/boringssl/crypto/cipher_extra/cipher_extra.c +29 -0
  230. data/third_party/boringssl/crypto/cipher_extra/e_aesccm.c +269 -25
  231. data/third_party/boringssl/crypto/cipher_extra/e_aesctrhmac.c +16 -14
  232. data/third_party/boringssl/crypto/cipher_extra/e_aesgcmsiv.c +54 -38
  233. data/third_party/boringssl/crypto/cipher_extra/e_chacha20poly1305.c +133 -41
  234. data/third_party/boringssl/crypto/cipher_extra/e_tls.c +23 -15
  235. data/third_party/boringssl/crypto/cipher_extra/tls_cbc.c +24 -15
  236. data/third_party/boringssl/crypto/cmac/cmac.c +62 -25
  237. data/third_party/boringssl/crypto/conf/conf.c +7 -0
  238. data/third_party/boringssl/crypto/cpu-arm-linux.c +4 -148
  239. data/third_party/boringssl/crypto/cpu-arm-linux.h +201 -0
  240. data/third_party/boringssl/crypto/cpu-intel.c +45 -51
  241. data/third_party/boringssl/crypto/crypto.c +39 -22
  242. data/third_party/boringssl/crypto/curve25519/spake25519.c +1 -1
  243. data/third_party/boringssl/crypto/dsa/dsa.c +77 -53
  244. data/third_party/boringssl/crypto/ec_extra/ec_asn1.c +20 -8
  245. data/third_party/boringssl/crypto/ec_extra/ec_derive.c +96 -0
  246. data/third_party/boringssl/crypto/{ecdh/ecdh.c → ecdh_extra/ecdh_extra.c} +20 -58
  247. data/third_party/boringssl/crypto/ecdsa_extra/ecdsa_asn1.c +1 -9
  248. data/third_party/boringssl/crypto/engine/engine.c +2 -1
  249. data/third_party/boringssl/crypto/err/err.c +2 -0
  250. data/third_party/boringssl/crypto/err/internal.h +2 -2
  251. data/third_party/boringssl/crypto/evp/evp.c +89 -8
  252. data/third_party/boringssl/crypto/evp/evp_asn1.c +56 -5
  253. data/third_party/boringssl/crypto/evp/evp_ctx.c +52 -14
  254. data/third_party/boringssl/crypto/evp/internal.h +18 -1
  255. data/third_party/boringssl/crypto/evp/p_dsa_asn1.c +5 -0
  256. data/third_party/boringssl/crypto/evp/p_ec.c +51 -3
  257. data/third_party/boringssl/crypto/evp/p_ec_asn1.c +6 -7
  258. data/third_party/boringssl/crypto/evp/p_ed25519.c +36 -3
  259. data/third_party/boringssl/crypto/evp/p_ed25519_asn1.c +76 -45
  260. data/third_party/boringssl/crypto/evp/p_rsa.c +3 -1
  261. data/third_party/boringssl/crypto/evp/p_rsa_asn1.c +5 -0
  262. data/third_party/boringssl/crypto/evp/p_x25519.c +110 -0
  263. data/third_party/boringssl/crypto/evp/p_x25519_asn1.c +249 -0
  264. data/third_party/boringssl/crypto/evp/scrypt.c +6 -2
  265. data/third_party/boringssl/crypto/fipsmodule/aes/aes.c +34 -274
  266. data/third_party/boringssl/crypto/fipsmodule/aes/internal.h +161 -21
  267. data/third_party/boringssl/crypto/fipsmodule/aes/key_wrap.c +111 -13
  268. data/third_party/boringssl/crypto/fipsmodule/aes/mode_wrappers.c +17 -21
  269. data/third_party/boringssl/crypto/fipsmodule/bcm.c +119 -7
  270. data/third_party/boringssl/crypto/fipsmodule/bn/bn.c +19 -2
  271. data/third_party/boringssl/crypto/fipsmodule/bn/cmp.c +2 -2
  272. data/third_party/boringssl/crypto/fipsmodule/bn/ctx.c +93 -160
  273. data/third_party/boringssl/crypto/fipsmodule/bn/div.c +48 -57
  274. data/third_party/boringssl/crypto/fipsmodule/bn/div_extra.c +87 -0
  275. data/third_party/boringssl/crypto/fipsmodule/bn/exponentiation.c +143 -211
  276. data/third_party/boringssl/crypto/fipsmodule/bn/gcd.c +0 -305
  277. data/third_party/boringssl/crypto/fipsmodule/bn/gcd_extra.c +325 -0
  278. data/third_party/boringssl/crypto/fipsmodule/bn/internal.h +168 -50
  279. data/third_party/boringssl/crypto/fipsmodule/bn/montgomery.c +68 -92
  280. data/third_party/boringssl/crypto/fipsmodule/bn/montgomery_inv.c +7 -6
  281. data/third_party/boringssl/crypto/fipsmodule/bn/mul.c +11 -14
  282. data/third_party/boringssl/crypto/fipsmodule/bn/prime.c +358 -443
  283. data/third_party/boringssl/crypto/fipsmodule/bn/random.c +25 -35
  284. data/third_party/boringssl/crypto/fipsmodule/bn/rsaz_exp.c +20 -25
  285. data/third_party/boringssl/crypto/fipsmodule/bn/rsaz_exp.h +76 -5
  286. data/third_party/boringssl/crypto/fipsmodule/bn/shift.c +14 -14
  287. data/third_party/boringssl/crypto/fipsmodule/cipher/cipher.c +7 -2
  288. data/third_party/boringssl/crypto/fipsmodule/cipher/e_aes.c +383 -516
  289. data/third_party/boringssl/crypto/fipsmodule/cipher/e_des.c +4 -0
  290. data/third_party/boringssl/crypto/fipsmodule/cipher/internal.h +3 -4
  291. data/third_party/boringssl/crypto/fipsmodule/delocate.h +3 -2
  292. data/third_party/boringssl/crypto/fipsmodule/digest/digest.c +32 -17
  293. data/third_party/boringssl/crypto/fipsmodule/digest/md32_common.h +3 -3
  294. data/third_party/boringssl/crypto/fipsmodule/ec/ec.c +228 -122
  295. data/third_party/boringssl/crypto/fipsmodule/ec/ec_key.c +34 -8
  296. data/third_party/boringssl/crypto/fipsmodule/ec/ec_montgomery.c +311 -98
  297. data/third_party/boringssl/crypto/fipsmodule/ec/felem.c +82 -0
  298. data/third_party/boringssl/crypto/fipsmodule/ec/internal.h +263 -97
  299. data/third_party/boringssl/crypto/fipsmodule/ec/oct.c +22 -59
  300. data/third_party/boringssl/crypto/fipsmodule/ec/p224-64.c +317 -234
  301. data/third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64-table.h +9473 -9475
  302. data/third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64.c +313 -109
  303. data/third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64.h +36 -0
  304. data/third_party/boringssl/crypto/fipsmodule/ec/scalar.c +96 -0
  305. data/third_party/boringssl/crypto/fipsmodule/ec/simple.c +126 -792
  306. data/third_party/boringssl/crypto/fipsmodule/ec/simple_mul.c +84 -0
  307. data/third_party/boringssl/crypto/fipsmodule/ec/util.c +163 -12
  308. data/third_party/boringssl/crypto/fipsmodule/ec/wnaf.c +84 -211
  309. data/third_party/boringssl/crypto/fipsmodule/ecdh/ecdh.c +122 -0
  310. data/third_party/boringssl/crypto/fipsmodule/ecdsa/ecdsa.c +60 -205
  311. data/third_party/boringssl/crypto/fipsmodule/fips_shared_support.c +32 -0
  312. data/third_party/boringssl/crypto/fipsmodule/is_fips.c +2 -0
  313. data/third_party/boringssl/crypto/fipsmodule/md4/md4.c +3 -1
  314. data/third_party/boringssl/crypto/fipsmodule/md5/internal.h +37 -0
  315. data/third_party/boringssl/crypto/fipsmodule/md5/md5.c +11 -8
  316. data/third_party/boringssl/crypto/fipsmodule/modes/cbc.c +35 -79
  317. data/third_party/boringssl/crypto/fipsmodule/modes/cfb.c +7 -39
  318. data/third_party/boringssl/crypto/fipsmodule/modes/ctr.c +7 -27
  319. data/third_party/boringssl/crypto/fipsmodule/modes/gcm.c +123 -309
  320. data/third_party/boringssl/crypto/fipsmodule/modes/internal.h +189 -126
  321. data/third_party/boringssl/crypto/fipsmodule/modes/ofb.c +3 -2
  322. data/third_party/boringssl/crypto/fipsmodule/rand/ctrdrbg.c +2 -2
  323. data/third_party/boringssl/crypto/fipsmodule/rand/internal.h +35 -0
  324. data/third_party/boringssl/crypto/fipsmodule/rand/rand.c +24 -19
  325. data/third_party/boringssl/crypto/fipsmodule/rand/urandom.c +256 -77
  326. data/third_party/boringssl/crypto/fipsmodule/rsa/padding.c +10 -7
  327. data/third_party/boringssl/crypto/fipsmodule/rsa/rsa.c +5 -1
  328. data/third_party/boringssl/crypto/fipsmodule/rsa/rsa_impl.c +131 -14
  329. data/third_party/boringssl/crypto/fipsmodule/self_check/self_check.c +83 -10
  330. data/third_party/boringssl/crypto/fipsmodule/sha/internal.h +53 -0
  331. data/third_party/boringssl/crypto/fipsmodule/sha/sha1.c +9 -13
  332. data/third_party/boringssl/crypto/fipsmodule/sha/sha256.c +18 -12
  333. data/third_party/boringssl/crypto/fipsmodule/sha/sha512.c +95 -168
  334. data/third_party/boringssl/crypto/hrss/hrss.c +2201 -0
  335. data/third_party/boringssl/crypto/hrss/internal.h +62 -0
  336. data/third_party/boringssl/crypto/internal.h +95 -20
  337. data/third_party/boringssl/crypto/lhash/lhash.c +45 -33
  338. data/third_party/boringssl/crypto/mem.c +39 -2
  339. data/third_party/boringssl/crypto/obj/obj.c +4 -4
  340. data/third_party/boringssl/crypto/obj/obj_dat.h +6181 -875
  341. data/third_party/boringssl/crypto/pem/pem_all.c +2 -3
  342. data/third_party/boringssl/crypto/pem/pem_info.c +144 -162
  343. data/third_party/boringssl/crypto/pem/pem_lib.c +53 -52
  344. data/third_party/boringssl/crypto/pem/pem_pkey.c +13 -21
  345. data/third_party/boringssl/crypto/pkcs7/pkcs7.c +15 -22
  346. data/third_party/boringssl/crypto/pkcs7/pkcs7_x509.c +168 -16
  347. data/third_party/boringssl/crypto/pkcs8/internal.h +11 -0
  348. data/third_party/boringssl/crypto/pkcs8/p5_pbev2.c +24 -15
  349. data/third_party/boringssl/crypto/pkcs8/pkcs8.c +42 -25
  350. data/third_party/boringssl/crypto/pkcs8/pkcs8_x509.c +559 -43
  351. data/third_party/boringssl/crypto/pool/internal.h +1 -1
  352. data/third_party/boringssl/crypto/pool/pool.c +21 -0
  353. data/third_party/boringssl/crypto/rand_extra/deterministic.c +8 -0
  354. data/third_party/boringssl/crypto/rand_extra/fuchsia.c +1 -14
  355. data/third_party/boringssl/crypto/refcount_lock.c +2 -2
  356. data/third_party/boringssl/crypto/rsa_extra/rsa_print.c +22 -0
  357. data/third_party/boringssl/crypto/siphash/siphash.c +80 -0
  358. data/third_party/boringssl/crypto/stack/stack.c +83 -32
  359. data/third_party/boringssl/crypto/thread_none.c +2 -2
  360. data/third_party/boringssl/crypto/thread_pthread.c +2 -2
  361. data/third_party/boringssl/crypto/thread_win.c +38 -19
  362. data/third_party/boringssl/crypto/x509/a_strex.c +22 -2
  363. data/third_party/boringssl/crypto/x509/asn1_gen.c +2 -1
  364. data/third_party/boringssl/crypto/x509/by_dir.c +7 -0
  365. data/third_party/boringssl/crypto/x509/by_file.c +12 -10
  366. data/third_party/boringssl/crypto/x509/t_crl.c +5 -8
  367. data/third_party/boringssl/crypto/x509/t_req.c +1 -3
  368. data/third_party/boringssl/crypto/x509/t_x509.c +5 -8
  369. data/third_party/boringssl/crypto/x509/x509_cmp.c +1 -1
  370. data/third_party/boringssl/crypto/x509/x509_def.c +1 -1
  371. data/third_party/boringssl/crypto/x509/x509_lu.c +114 -5
  372. data/third_party/boringssl/crypto/x509/x509_req.c +20 -0
  373. data/third_party/boringssl/crypto/x509/x509_set.c +5 -0
  374. data/third_party/boringssl/crypto/x509/x509_trs.c +1 -0
  375. data/third_party/boringssl/crypto/x509/x509_txt.c +4 -5
  376. data/third_party/boringssl/crypto/x509/x509_vfy.c +145 -138
  377. data/third_party/boringssl/crypto/x509/x509_vpm.c +2 -0
  378. data/third_party/boringssl/crypto/x509/x509cset.c +40 -0
  379. data/third_party/boringssl/crypto/x509/x509name.c +2 -3
  380. data/third_party/boringssl/crypto/x509/x_all.c +109 -210
  381. data/third_party/boringssl/crypto/x509/x_x509.c +6 -0
  382. data/third_party/boringssl/crypto/x509v3/ext_dat.h +1 -3
  383. data/third_party/boringssl/crypto/x509v3/internal.h +56 -0
  384. data/third_party/boringssl/crypto/x509v3/pcy_cache.c +2 -0
  385. data/third_party/boringssl/crypto/x509v3/pcy_node.c +1 -0
  386. data/third_party/boringssl/crypto/x509v3/pcy_tree.c +4 -2
  387. data/third_party/boringssl/crypto/x509v3/v3_akey.c +5 -2
  388. data/third_party/boringssl/crypto/x509v3/v3_alt.c +19 -13
  389. data/third_party/boringssl/crypto/x509v3/v3_conf.c +2 -1
  390. data/third_party/boringssl/crypto/x509v3/v3_cpols.c +3 -2
  391. data/third_party/boringssl/crypto/x509v3/v3_genn.c +1 -6
  392. data/third_party/boringssl/crypto/x509v3/v3_lib.c +1 -0
  393. data/third_party/boringssl/crypto/x509v3/v3_ocsp.c +68 -0
  394. data/third_party/boringssl/crypto/x509v3/v3_pci.c +2 -1
  395. data/third_party/boringssl/crypto/x509v3/v3_purp.c +47 -69
  396. data/third_party/boringssl/crypto/x509v3/v3_skey.c +5 -2
  397. data/third_party/boringssl/crypto/x509v3/v3_utl.c +69 -25
  398. data/third_party/boringssl/include/openssl/aead.h +45 -19
  399. data/third_party/boringssl/include/openssl/aes.h +32 -7
  400. data/third_party/boringssl/include/openssl/asn1.h +7 -77
  401. data/third_party/boringssl/include/openssl/base.h +120 -6
  402. data/third_party/boringssl/include/openssl/base64.h +4 -1
  403. data/third_party/boringssl/include/openssl/bio.h +112 -81
  404. data/third_party/boringssl/include/openssl/blowfish.h +3 -3
  405. data/third_party/boringssl/include/openssl/bn.h +55 -29
  406. data/third_party/boringssl/include/openssl/buf.h +2 -2
  407. data/third_party/boringssl/include/openssl/bytestring.h +54 -32
  408. data/third_party/boringssl/include/openssl/cast.h +2 -2
  409. data/third_party/boringssl/include/openssl/cipher.h +46 -16
  410. data/third_party/boringssl/include/openssl/cmac.h +6 -2
  411. data/third_party/boringssl/include/openssl/conf.h +3 -6
  412. data/third_party/boringssl/include/openssl/cpu.h +25 -9
  413. data/third_party/boringssl/include/openssl/crypto.h +32 -10
  414. data/third_party/boringssl/include/openssl/curve25519.h +4 -4
  415. data/third_party/boringssl/include/openssl/dh.h +3 -2
  416. data/third_party/boringssl/include/openssl/digest.h +21 -7
  417. data/third_party/boringssl/include/openssl/dsa.h +8 -2
  418. data/third_party/boringssl/include/openssl/e_os2.h +18 -0
  419. data/third_party/boringssl/include/openssl/ec.h +25 -21
  420. data/third_party/boringssl/include/openssl/ec_key.h +36 -8
  421. data/third_party/boringssl/include/openssl/ecdh.h +17 -0
  422. data/third_party/boringssl/include/openssl/ecdsa.h +3 -3
  423. data/third_party/boringssl/include/openssl/engine.h +4 -4
  424. data/third_party/boringssl/include/openssl/err.h +3 -0
  425. data/third_party/boringssl/include/openssl/evp.h +199 -42
  426. data/third_party/boringssl/include/openssl/hmac.h +4 -4
  427. data/third_party/boringssl/include/openssl/hrss.h +100 -0
  428. data/third_party/boringssl/include/openssl/lhash.h +131 -23
  429. data/third_party/boringssl/include/openssl/md4.h +6 -4
  430. data/third_party/boringssl/include/openssl/md5.h +6 -4
  431. data/third_party/boringssl/include/openssl/mem.h +6 -2
  432. data/third_party/boringssl/include/openssl/nid.h +3 -0
  433. data/third_party/boringssl/include/openssl/obj.h +3 -0
  434. data/third_party/boringssl/include/openssl/pem.h +102 -64
  435. data/third_party/boringssl/include/openssl/pkcs7.h +136 -3
  436. data/third_party/boringssl/include/openssl/pkcs8.h +42 -3
  437. data/third_party/boringssl/include/openssl/pool.h +13 -2
  438. data/third_party/boringssl/include/openssl/ripemd.h +5 -4
  439. data/third_party/boringssl/include/openssl/rsa.h +46 -15
  440. data/third_party/boringssl/include/openssl/sha.h +40 -28
  441. data/third_party/boringssl/include/openssl/siphash.h +37 -0
  442. data/third_party/boringssl/include/openssl/span.h +17 -9
  443. data/third_party/boringssl/include/openssl/ssl.h +766 -393
  444. data/third_party/boringssl/include/openssl/ssl3.h +4 -3
  445. data/third_party/boringssl/include/openssl/stack.h +134 -77
  446. data/third_party/boringssl/include/openssl/thread.h +1 -1
  447. data/third_party/boringssl/include/openssl/tls1.h +25 -9
  448. data/third_party/boringssl/include/openssl/type_check.h +14 -15
  449. data/third_party/boringssl/include/openssl/x509.h +28 -3
  450. data/third_party/boringssl/include/openssl/x509_vfy.h +98 -32
  451. data/third_party/boringssl/include/openssl/x509v3.h +17 -13
  452. data/third_party/boringssl/ssl/d1_both.cc +9 -18
  453. data/third_party/boringssl/ssl/d1_lib.cc +4 -3
  454. data/third_party/boringssl/ssl/d1_pkt.cc +4 -4
  455. data/third_party/boringssl/ssl/d1_srtp.cc +15 -15
  456. data/third_party/boringssl/ssl/dtls_method.cc +0 -1
  457. data/third_party/boringssl/ssl/dtls_record.cc +28 -28
  458. data/third_party/boringssl/ssl/handoff.cc +295 -91
  459. data/third_party/boringssl/ssl/handshake.cc +133 -72
  460. data/third_party/boringssl/ssl/handshake_client.cc +218 -189
  461. data/third_party/boringssl/ssl/handshake_server.cc +399 -272
  462. data/third_party/boringssl/ssl/internal.h +1413 -928
  463. data/third_party/boringssl/ssl/s3_both.cc +175 -36
  464. data/third_party/boringssl/ssl/s3_lib.cc +9 -13
  465. data/third_party/boringssl/ssl/s3_pkt.cc +63 -29
  466. data/third_party/boringssl/ssl/ssl_aead_ctx.cc +55 -35
  467. data/third_party/boringssl/ssl/ssl_asn1.cc +57 -73
  468. data/third_party/boringssl/ssl/ssl_buffer.cc +13 -12
  469. data/third_party/boringssl/ssl/ssl_cert.cc +313 -210
  470. data/third_party/boringssl/ssl/ssl_cipher.cc +159 -221
  471. data/third_party/boringssl/ssl/ssl_file.cc +2 -0
  472. data/third_party/boringssl/ssl/ssl_key_share.cc +164 -19
  473. data/third_party/boringssl/ssl/ssl_lib.cc +847 -555
  474. data/third_party/boringssl/ssl/ssl_privkey.cc +441 -111
  475. data/third_party/boringssl/ssl/ssl_session.cc +230 -178
  476. data/third_party/boringssl/ssl/ssl_transcript.cc +21 -142
  477. data/third_party/boringssl/ssl/ssl_versions.cc +88 -93
  478. data/third_party/boringssl/ssl/ssl_x509.cc +279 -218
  479. data/third_party/boringssl/ssl/t1_enc.cc +5 -96
  480. data/third_party/boringssl/ssl/t1_lib.cc +931 -678
  481. data/third_party/boringssl/ssl/tls13_both.cc +251 -121
  482. data/third_party/boringssl/ssl/tls13_client.cc +129 -73
  483. data/third_party/boringssl/ssl/tls13_enc.cc +350 -282
  484. data/third_party/boringssl/ssl/tls13_server.cc +259 -192
  485. data/third_party/boringssl/ssl/tls_method.cc +26 -21
  486. data/third_party/boringssl/ssl/tls_record.cc +42 -47
  487. data/third_party/boringssl/third_party/fiat/curve25519.c +261 -1324
  488. data/third_party/boringssl/third_party/fiat/curve25519_32.h +911 -0
  489. data/third_party/boringssl/third_party/fiat/curve25519_64.h +559 -0
  490. data/third_party/boringssl/third_party/fiat/p256.c +238 -999
  491. data/third_party/boringssl/third_party/fiat/p256_32.h +3226 -0
  492. data/third_party/boringssl/third_party/fiat/p256_64.h +1217 -0
  493. data/third_party/upb/upb/port_def.inc +1 -1
  494. data/third_party/upb/upb/table.c +2 -1
  495. metadata +71 -43
  496. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_load_balancer_api.h +0 -127
  497. data/src/core/lib/gpr/mpscq.cc +0 -117
  498. data/src/core/lib/gpr/mpscq.h +0 -88
  499. data/src/core/lib/gprpp/abstract.h +0 -47
  500. data/src/core/lib/gprpp/pair.h +0 -38
  501. data/third_party/boringssl/crypto/cipher_extra/e_ssl3.c +0 -460
  502. data/third_party/boringssl/crypto/fipsmodule/modes/ccm.c +0 -256
  503. data/third_party/boringssl/include/openssl/lhash_macros.h +0 -174
  504. data/third_party/boringssl/ssl/custom_extensions.cc +0 -265
@@ -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 */