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
@@ -113,9 +113,7 @@
113
113
  #include <openssl/dsa.h>
114
114
  #include <openssl/evp.h>
115
115
  #include <openssl/pem.h>
116
- /*
117
- * #include <openssl/pkcs7.h>
118
- */
116
+ #include <openssl/pkcs7.h>
119
117
  #include <openssl/rsa.h>
120
118
  #include <openssl/x509.h>
121
119
 
@@ -127,6 +125,7 @@ IMPLEMENT_PEM_rw(X509_REQ, X509_REQ, PEM_STRING_X509_REQ, X509_REQ)
127
125
 
128
126
  IMPLEMENT_PEM_write(X509_REQ_NEW, X509_REQ, PEM_STRING_X509_REQ_OLD, X509_REQ)
129
127
  IMPLEMENT_PEM_rw(X509_CRL, X509_CRL, PEM_STRING_X509_CRL, X509_CRL)
128
+ IMPLEMENT_PEM_rw(PKCS7, PKCS7, PEM_STRING_PKCS7, PKCS7)
130
129
 
131
130
  /*
132
131
  * We treat RSA or DSA private keys as a special case. For private keys we
@@ -75,221 +75,203 @@
75
75
  STACK_OF(X509_INFO) *PEM_X509_INFO_read(FILE *fp, STACK_OF(X509_INFO) *sk,
76
76
  pem_password_cb *cb, void *u)
77
77
  {
78
- BIO *b;
79
- STACK_OF(X509_INFO) *ret;
80
-
81
- if ((b = BIO_new(BIO_s_file())) == NULL) {
78
+ BIO *b = BIO_new_fp(fp, BIO_NOCLOSE);
79
+ if (b == NULL) {
82
80
  OPENSSL_PUT_ERROR(PEM, ERR_R_BUF_LIB);
83
- return (0);
81
+ return 0;
84
82
  }
85
- BIO_set_fp(b, fp, BIO_NOCLOSE);
86
- ret = PEM_X509_INFO_read_bio(b, sk, cb, u);
83
+ STACK_OF(X509_INFO) *ret = PEM_X509_INFO_read_bio(b, sk, cb, u);
87
84
  BIO_free(b);
88
- return (ret);
85
+ return ret;
89
86
  }
90
87
  #endif
91
88
 
89
+ enum parse_result_t {
90
+ parse_ok,
91
+ parse_error,
92
+ parse_new_entry,
93
+ };
94
+
95
+ static enum parse_result_t parse_x509(X509_INFO *info, const uint8_t *data,
96
+ size_t len, int key_type)
97
+ {
98
+ if (info->x509 != NULL) {
99
+ return parse_new_entry;
100
+ }
101
+ info->x509 = d2i_X509(NULL, &data, len);
102
+ return info->x509 != NULL ? parse_ok : parse_error;
103
+ }
104
+
105
+ static enum parse_result_t parse_x509_aux(X509_INFO *info, const uint8_t *data,
106
+ size_t len, int key_type)
107
+ {
108
+ if (info->x509 != NULL) {
109
+ return parse_new_entry;
110
+ }
111
+ info->x509 = d2i_X509_AUX(NULL, &data, len);
112
+ return info->x509 != NULL ? parse_ok : parse_error;
113
+ }
114
+
115
+ static enum parse_result_t parse_crl(X509_INFO *info, const uint8_t *data,
116
+ size_t len, int key_type)
117
+ {
118
+ if (info->crl != NULL) {
119
+ return parse_new_entry;
120
+ }
121
+ info->crl = d2i_X509_CRL(NULL, &data, len);
122
+ return info->crl != NULL ? parse_ok : parse_error;
123
+ }
124
+
125
+ static enum parse_result_t parse_key(X509_INFO *info, const uint8_t *data,
126
+ size_t len, int key_type)
127
+ {
128
+ if (info->x_pkey != NULL) {
129
+ return parse_new_entry;
130
+ }
131
+ info->x_pkey = X509_PKEY_new();
132
+ if (info->x_pkey == NULL) {
133
+ return parse_error;
134
+ }
135
+ info->x_pkey->dec_pkey = d2i_PrivateKey(key_type, NULL, &data, len);
136
+ return info->x_pkey->dec_pkey != NULL ? parse_ok : parse_error;
137
+ }
138
+
92
139
  STACK_OF(X509_INFO) *PEM_X509_INFO_read_bio(BIO *bp, STACK_OF(X509_INFO) *sk,
93
140
  pem_password_cb *cb, void *u)
94
141
  {
95
- X509_INFO *xi = NULL;
142
+ X509_INFO *info = NULL;
96
143
  char *name = NULL, *header = NULL;
97
- void *pp;
98
144
  unsigned char *data = NULL;
99
- const unsigned char *p;
100
- long len, error = 0;
145
+ long len;
101
146
  int ok = 0;
102
147
  STACK_OF(X509_INFO) *ret = NULL;
103
- unsigned int i, raw, ptype;
104
- d2i_of_void *d2i = 0;
105
148
 
106
149
  if (sk == NULL) {
107
- if ((ret = sk_X509_INFO_new_null()) == NULL) {
150
+ ret = sk_X509_INFO_new_null();
151
+ if (ret == NULL) {
108
152
  OPENSSL_PUT_ERROR(PEM, ERR_R_MALLOC_FAILURE);
109
- goto err;
153
+ return NULL;
110
154
  }
111
- } else
155
+ } else {
112
156
  ret = sk;
157
+ }
158
+ size_t orig_num = sk_X509_INFO_num(ret);
113
159
 
114
- if ((xi = X509_INFO_new()) == NULL)
160
+ info = X509_INFO_new();
161
+ if (info == NULL) {
115
162
  goto err;
163
+ }
164
+
116
165
  for (;;) {
117
- raw = 0;
118
- ptype = 0;
119
- i = PEM_read_bio(bp, &name, &header, &data, &len);
120
- if (i == 0) {
121
- error = ERR_GET_REASON(ERR_peek_last_error());
122
- if (error == PEM_R_NO_START_LINE) {
166
+ if (!PEM_read_bio(bp, &name, &header, &data, &len)) {
167
+ uint32_t error = ERR_peek_last_error();
168
+ if (ERR_GET_LIB(error) == ERR_LIB_PEM &&
169
+ ERR_GET_REASON(error) == PEM_R_NO_START_LINE) {
123
170
  ERR_clear_error();
124
171
  break;
125
172
  }
126
173
  goto err;
127
174
  }
128
- start:
129
- if ((strcmp(name, PEM_STRING_X509) == 0) ||
130
- (strcmp(name, PEM_STRING_X509_OLD) == 0)) {
131
- d2i = (D2I_OF(void)) d2i_X509;
132
- if (xi->x509 != NULL) {
133
- if (!sk_X509_INFO_push(ret, xi))
134
- goto err;
135
- if ((xi = X509_INFO_new()) == NULL)
136
- goto err;
137
- goto start;
138
- }
139
- pp = &(xi->x509);
140
- } else if ((strcmp(name, PEM_STRING_X509_TRUSTED) == 0)) {
141
- d2i = (D2I_OF(void)) d2i_X509_AUX;
142
- if (xi->x509 != NULL) {
143
- if (!sk_X509_INFO_push(ret, xi))
144
- goto err;
145
- if ((xi = X509_INFO_new()) == NULL)
146
- goto err;
147
- goto start;
148
- }
149
- pp = &(xi->x509);
175
+
176
+ enum parse_result_t (*parse_function)(X509_INFO *, const uint8_t *,
177
+ size_t, int) = NULL;
178
+ int key_type = EVP_PKEY_NONE;
179
+ if (strcmp(name, PEM_STRING_X509) == 0 ||
180
+ strcmp(name, PEM_STRING_X509_OLD) == 0) {
181
+ parse_function = parse_x509;
182
+ } else if (strcmp(name, PEM_STRING_X509_TRUSTED) == 0) {
183
+ parse_function = parse_x509_aux;
150
184
  } else if (strcmp(name, PEM_STRING_X509_CRL) == 0) {
151
- d2i = (D2I_OF(void)) d2i_X509_CRL;
152
- if (xi->crl != NULL) {
153
- if (!sk_X509_INFO_push(ret, xi))
154
- goto err;
155
- if ((xi = X509_INFO_new()) == NULL)
156
- goto err;
157
- goto start;
158
- }
159
- pp = &(xi->crl);
185
+ parse_function = parse_crl;
160
186
  } else if (strcmp(name, PEM_STRING_RSA) == 0) {
161
- d2i = (D2I_OF(void)) d2i_RSAPrivateKey;
162
- if (xi->x_pkey != NULL) {
163
- if (!sk_X509_INFO_push(ret, xi))
164
- goto err;
165
- if ((xi = X509_INFO_new()) == NULL)
166
- goto err;
167
- goto start;
168
- }
169
-
170
- xi->enc_data = NULL;
171
- xi->enc_len = 0;
187
+ parse_function = parse_key;
188
+ key_type = EVP_PKEY_RSA;
189
+ } else if (strcmp(name, PEM_STRING_DSA) == 0) {
190
+ parse_function = parse_key;
191
+ key_type = EVP_PKEY_DSA;
192
+ } else if (strcmp(name, PEM_STRING_ECPRIVATEKEY) == 0) {
193
+ parse_function = parse_key;
194
+ key_type = EVP_PKEY_EC;
195
+ }
172
196
 
173
- xi->x_pkey = X509_PKEY_new();
174
- ptype = EVP_PKEY_RSA;
175
- pp = &xi->x_pkey->dec_pkey;
176
- if ((int)strlen(header) > 10) /* assume encrypted */
177
- raw = 1;
178
- } else
179
- #ifndef OPENSSL_NO_DSA
180
- if (strcmp(name, PEM_STRING_DSA) == 0) {
181
- d2i = (D2I_OF(void)) d2i_DSAPrivateKey;
182
- if (xi->x_pkey != NULL) {
183
- if (!sk_X509_INFO_push(ret, xi))
197
+ /* If a private key has a header, assume it is encrypted. */
198
+ if (key_type != EVP_PKEY_NONE && strlen(header) > 10) {
199
+ if (info->x_pkey != NULL) {
200
+ if (!sk_X509_INFO_push(ret, info)) {
184
201
  goto err;
185
- if ((xi = X509_INFO_new()) == NULL)
202
+ }
203
+ info = X509_INFO_new();
204
+ if (info == NULL) {
186
205
  goto err;
187
- goto start;
206
+ }
188
207
  }
189
-
190
- xi->enc_data = NULL;
191
- xi->enc_len = 0;
192
-
193
- xi->x_pkey = X509_PKEY_new();
194
- ptype = EVP_PKEY_DSA;
195
- pp = &xi->x_pkey->dec_pkey;
196
- if ((int)strlen(header) > 10) /* assume encrypted */
197
- raw = 1;
198
- } else
199
- #endif
200
- if (strcmp(name, PEM_STRING_ECPRIVATEKEY) == 0) {
201
- d2i = (D2I_OF(void)) d2i_ECPrivateKey;
202
- if (xi->x_pkey != NULL) {
203
- if (!sk_X509_INFO_push(ret, xi))
204
- goto err;
205
- if ((xi = X509_INFO_new()) == NULL)
206
- goto err;
207
- goto start;
208
+ /* Historically, raw entries pushed an empty key. */
209
+ info->x_pkey = X509_PKEY_new();
210
+ if (info->x_pkey == NULL ||
211
+ !PEM_get_EVP_CIPHER_INFO(header, &info->enc_cipher)) {
212
+ goto err;
208
213
  }
209
-
210
- xi->enc_data = NULL;
211
- xi->enc_len = 0;
212
-
213
- xi->x_pkey = X509_PKEY_new();
214
- ptype = EVP_PKEY_EC;
215
- pp = &xi->x_pkey->dec_pkey;
216
- if ((int)strlen(header) > 10) /* assume encrypted */
217
- raw = 1;
218
- } else {
219
- d2i = NULL;
220
- pp = NULL;
221
- }
222
-
223
- if (d2i != NULL) {
224
- if (!raw) {
225
- EVP_CIPHER_INFO cipher;
226
-
227
- if (!PEM_get_EVP_CIPHER_INFO(header, &cipher))
228
- goto err;
229
- if (!PEM_do_header(&cipher, data, &len, cb, u))
230
- goto err;
231
- p = data;
232
- if (ptype) {
233
- if (!d2i_PrivateKey(ptype, pp, &p, len)) {
234
- OPENSSL_PUT_ERROR(PEM, ERR_R_ASN1_LIB);
235
- goto err;
236
- }
237
- } else if (d2i(pp, &p, len) == NULL) {
238
- OPENSSL_PUT_ERROR(PEM, ERR_R_ASN1_LIB);
214
+ info->enc_data = (char *)data;
215
+ info->enc_len = (int)len;
216
+ data = NULL;
217
+ } else if (parse_function != NULL) {
218
+ EVP_CIPHER_INFO cipher;
219
+ if (!PEM_get_EVP_CIPHER_INFO(header, &cipher) ||
220
+ !PEM_do_header(&cipher, data, &len, cb, u)) {
221
+ goto err;
222
+ }
223
+ enum parse_result_t result =
224
+ parse_function(info, data, len, key_type);
225
+ if (result == parse_new_entry) {
226
+ if (!sk_X509_INFO_push(ret, info)) {
239
227
  goto err;
240
228
  }
241
- } else { /* encrypted RSA data */
242
- if (!PEM_get_EVP_CIPHER_INFO(header, &xi->enc_cipher))
229
+ info = X509_INFO_new();
230
+ if (info == NULL) {
243
231
  goto err;
244
- xi->enc_data = (char *)data;
245
- xi->enc_len = (int)len;
246
- data = NULL;
232
+ }
233
+ result = parse_function(info, data, len, key_type);
234
+ }
235
+ if (result != parse_ok) {
236
+ OPENSSL_PUT_ERROR(PEM, ERR_R_ASN1_LIB);
237
+ goto err;
247
238
  }
248
- } else {
249
- /* unknown */
250
239
  }
251
- if (name != NULL)
252
- OPENSSL_free(name);
253
- if (header != NULL)
254
- OPENSSL_free(header);
255
- if (data != NULL)
256
- OPENSSL_free(data);
240
+ OPENSSL_free(name);
241
+ OPENSSL_free(header);
242
+ OPENSSL_free(data);
257
243
  name = NULL;
258
244
  header = NULL;
259
245
  data = NULL;
260
246
  }
261
247
 
262
- /*
263
- * if the last one hasn't been pushed yet and there is anything in it
264
- * then add it to the stack ...
265
- */
266
- if ((xi->x509 != NULL) || (xi->crl != NULL) ||
267
- (xi->x_pkey != NULL) || (xi->enc_data != NULL)) {
268
- if (!sk_X509_INFO_push(ret, xi))
248
+ /* Push the last entry on the stack if not empty. */
249
+ if (info->x509 != NULL || info->crl != NULL ||
250
+ info->x_pkey != NULL || info->enc_data != NULL) {
251
+ if (!sk_X509_INFO_push(ret, info)) {
269
252
  goto err;
270
- xi = NULL;
253
+ }
254
+ info = NULL;
271
255
  }
256
+
272
257
  ok = 1;
258
+
273
259
  err:
274
- if (xi != NULL)
275
- X509_INFO_free(xi);
260
+ X509_INFO_free(info);
276
261
  if (!ok) {
277
- for (i = 0; i < sk_X509_INFO_num(ret); i++) {
278
- xi = sk_X509_INFO_value(ret, i);
279
- X509_INFO_free(xi);
262
+ while (sk_X509_INFO_num(ret) > orig_num) {
263
+ X509_INFO_free(sk_X509_INFO_pop(ret));
280
264
  }
281
- if (ret != sk)
265
+ if (ret != sk) {
282
266
  sk_X509_INFO_free(ret);
267
+ }
283
268
  ret = NULL;
284
269
  }
285
270
 
286
- if (name != NULL)
287
- OPENSSL_free(name);
288
- if (header != NULL)
289
- OPENSSL_free(header);
290
- if (data != NULL)
291
- OPENSSL_free(data);
292
- return (ret);
271
+ OPENSSL_free(name);
272
+ OPENSSL_free(header);
273
+ OPENSSL_free(data);
274
+ return ret;
293
275
  }
294
276
 
295
277
  /* A TJH addition */
@@ -121,17 +121,14 @@ void PEM_dek_info(char *buf, const char *type, int len, char *str)
121
121
  void *PEM_ASN1_read(d2i_of_void *d2i, const char *name, FILE *fp, void **x,
122
122
  pem_password_cb *cb, void *u)
123
123
  {
124
- BIO *b;
125
- void *ret;
126
-
127
- if ((b = BIO_new(BIO_s_file())) == NULL) {
124
+ BIO *b = BIO_new_fp(fp, BIO_NOCLOSE);
125
+ if (b == NULL) {
128
126
  OPENSSL_PUT_ERROR(PEM, ERR_R_BUF_LIB);
129
- return (0);
127
+ return NULL;
130
128
  }
131
- BIO_set_fp(b, fp, BIO_NOCLOSE);
132
- ret = PEM_ASN1_read_bio(d2i, name, b, x, cb, u);
129
+ void *ret = PEM_ASN1_read_bio(d2i, name, b, x, cb, u);
133
130
  BIO_free(b);
134
- return (ret);
131
+ return ret;
135
132
  }
136
133
  #endif
137
134
 
@@ -188,6 +185,26 @@ static int check_pem(const char *nm, const char *name)
188
185
  return 0;
189
186
  }
190
187
 
188
+ static const EVP_CIPHER *cipher_by_name(const char *name)
189
+ {
190
+ /* This is similar to the (deprecated) function |EVP_get_cipherbyname|. Note
191
+ * the PEM code assumes that ciphers have at least 8 bytes of IV, at most 20
192
+ * bytes of overhead and generally behave like CBC mode. */
193
+ if (0 == strcmp(name, SN_des_cbc)) {
194
+ return EVP_des_cbc();
195
+ } else if (0 == strcmp(name, SN_des_ede3_cbc)) {
196
+ return EVP_des_ede3_cbc();
197
+ } else if (0 == strcmp(name, SN_aes_128_cbc)) {
198
+ return EVP_aes_128_cbc();
199
+ } else if (0 == strcmp(name, SN_aes_192_cbc)) {
200
+ return EVP_aes_192_cbc();
201
+ } else if (0 == strcmp(name, SN_aes_256_cbc)) {
202
+ return EVP_aes_256_cbc();
203
+ } else {
204
+ return NULL;
205
+ }
206
+ }
207
+
191
208
  int PEM_bytes_read_bio(unsigned char **pdata, long *plen, char **pnm,
192
209
  const char *name, BIO *bp, pem_password_cb *cb,
193
210
  void *u)
@@ -200,8 +217,11 @@ int PEM_bytes_read_bio(unsigned char **pdata, long *plen, char **pnm,
200
217
 
201
218
  for (;;) {
202
219
  if (!PEM_read_bio(bp, &nm, &header, &data, &len)) {
203
- if (ERR_GET_REASON(ERR_peek_error()) == PEM_R_NO_START_LINE)
220
+ uint32_t error = ERR_peek_error();
221
+ if (ERR_GET_LIB(error) == ERR_LIB_PEM &&
222
+ ERR_GET_REASON(error) == PEM_R_NO_START_LINE) {
204
223
  ERR_add_error_data(2, "Expecting: ", name);
224
+ }
205
225
  return 0;
206
226
  }
207
227
  if (check_pem(nm, name))
@@ -237,17 +257,14 @@ int PEM_ASN1_write(i2d_of_void *i2d, const char *name, FILE *fp,
237
257
  void *x, const EVP_CIPHER *enc, unsigned char *kstr,
238
258
  int klen, pem_password_cb *callback, void *u)
239
259
  {
240
- BIO *b;
241
- int ret;
242
-
243
- if ((b = BIO_new(BIO_s_file())) == NULL) {
260
+ BIO *b = BIO_new_fp(fp, BIO_NOCLOSE);
261
+ if (b == NULL) {
244
262
  OPENSSL_PUT_ERROR(PEM, ERR_R_BUF_LIB);
245
- return (0);
263
+ return 0;
246
264
  }
247
- BIO_set_fp(b, fp, BIO_NOCLOSE);
248
- ret = PEM_ASN1_write_bio(i2d, name, b, x, enc, kstr, klen, callback, u);
265
+ int ret = PEM_ASN1_write_bio(i2d, name, b, x, enc, kstr, klen, callback, u);
249
266
  BIO_free(b);
250
- return (ret);
267
+ return ret;
251
268
  }
252
269
  #endif
253
270
 
@@ -265,7 +282,9 @@ int PEM_ASN1_write_bio(i2d_of_void *i2d, const char *name, BIO *bp,
265
282
 
266
283
  if (enc != NULL) {
267
284
  objstr = OBJ_nid2sn(EVP_CIPHER_nid(enc));
268
- if (objstr == NULL || EVP_CIPHER_iv_length(enc) == 0) {
285
+ if (objstr == NULL ||
286
+ cipher_by_name(objstr) == NULL ||
287
+ EVP_CIPHER_iv_length(enc) < 8) {
269
288
  OPENSSL_PUT_ERROR(PEM, PEM_R_UNSUPPORTED_CIPHER);
270
289
  goto err;
271
290
  }
@@ -393,26 +412,6 @@ int PEM_do_header(EVP_CIPHER_INFO *cipher, unsigned char *data, long *plen,
393
412
  return (1);
394
413
  }
395
414
 
396
- static const EVP_CIPHER *cipher_by_name(const char *name)
397
- {
398
- /* This is similar to the (deprecated) function |EVP_get_cipherbyname|. */
399
- if (0 == strcmp(name, SN_rc4)) {
400
- return EVP_rc4();
401
- } else if (0 == strcmp(name, SN_des_cbc)) {
402
- return EVP_des_cbc();
403
- } else if (0 == strcmp(name, SN_des_ede3_cbc)) {
404
- return EVP_des_ede3_cbc();
405
- } else if (0 == strcmp(name, SN_aes_128_cbc)) {
406
- return EVP_aes_128_cbc();
407
- } else if (0 == strcmp(name, SN_aes_192_cbc)) {
408
- return EVP_aes_192_cbc();
409
- } else if (0 == strcmp(name, SN_aes_256_cbc)) {
410
- return EVP_aes_256_cbc();
411
- } else {
412
- return NULL;
413
- }
414
- }
415
-
416
415
  int PEM_get_EVP_CIPHER_INFO(char *header, EVP_CIPHER_INFO *cipher)
417
416
  {
418
417
  const EVP_CIPHER *enc = NULL;
@@ -420,6 +419,7 @@ int PEM_get_EVP_CIPHER_INFO(char *header, EVP_CIPHER_INFO *cipher)
420
419
  char **header_pp = &header;
421
420
 
422
421
  cipher->cipher = NULL;
422
+ OPENSSL_memset(cipher->iv, 0, sizeof(cipher->iv));
423
423
  if ((header == NULL) || (*header == '\0') || (*header == '\n'))
424
424
  return (1);
425
425
  if (strncmp(header, "Proc-Type: ", 11) != 0) {
@@ -466,6 +466,13 @@ int PEM_get_EVP_CIPHER_INFO(char *header, EVP_CIPHER_INFO *cipher)
466
466
  OPENSSL_PUT_ERROR(PEM, PEM_R_UNSUPPORTED_ENCRYPTION);
467
467
  return (0);
468
468
  }
469
+ // The IV parameter must be at least 8 bytes long to be used as the salt in
470
+ // the KDF. (This should not happen given |cipher_by_name|.)
471
+ if (EVP_CIPHER_iv_length(enc) < 8) {
472
+ assert(0);
473
+ OPENSSL_PUT_ERROR(PEM, PEM_R_UNSUPPORTED_ENCRYPTION);
474
+ return 0;
475
+ }
469
476
  if (!load_iv(header_pp, &(cipher->iv[0]), EVP_CIPHER_iv_length(enc)))
470
477
  return (0);
471
478
 
@@ -504,15 +511,12 @@ static int load_iv(char **fromp, unsigned char *to, int num)
504
511
  int PEM_write(FILE *fp, const char *name, const char *header,
505
512
  const unsigned char *data, long len)
506
513
  {
507
- BIO *b;
508
- int ret;
509
-
510
- if ((b = BIO_new(BIO_s_file())) == NULL) {
514
+ BIO *b = BIO_new_fp(fp, BIO_NOCLOSE);
515
+ if (b == NULL) {
511
516
  OPENSSL_PUT_ERROR(PEM, ERR_R_BUF_LIB);
512
- return (0);
517
+ return 0;
513
518
  }
514
- BIO_set_fp(b, fp, BIO_NOCLOSE);
515
- ret = PEM_write_bio(b, name, header, data, len);
519
+ int ret = PEM_write_bio(b, name, header, data, len);
516
520
  BIO_free(b);
517
521
  return (ret);
518
522
  }
@@ -578,15 +582,12 @@ int PEM_write_bio(BIO *bp, const char *name, const char *header,
578
582
  int PEM_read(FILE *fp, char **name, char **header, unsigned char **data,
579
583
  long *len)
580
584
  {
581
- BIO *b;
582
- int ret;
583
-
584
- if ((b = BIO_new(BIO_s_file())) == NULL) {
585
+ BIO *b = BIO_new_fp(fp, BIO_NOCLOSE);
586
+ if (b == NULL) {
585
587
  OPENSSL_PUT_ERROR(PEM, ERR_R_BUF_LIB);
586
- return (0);
588
+ return 0;
587
589
  }
588
- BIO_set_fp(b, fp, BIO_NOCLOSE);
589
- ret = PEM_read_bio(b, name, header, data, len);
590
+ int ret = PEM_read_bio(b, name, header, data, len);
590
591
  BIO_free(b);
591
592
  return (ret);
592
593
  }