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
@@ -155,31 +155,26 @@ int PEM_write_bio_PrivateKey(BIO *bp, EVP_PKEY *x, const EVP_CIPHER *enc,
155
155
  EVP_PKEY *PEM_read_PrivateKey(FILE *fp, EVP_PKEY **x, pem_password_cb *cb,
156
156
  void *u)
157
157
  {
158
- BIO *b;
159
- EVP_PKEY *ret;
160
-
161
- if ((b = BIO_new(BIO_s_file())) == NULL) {
158
+ BIO *b = BIO_new_fp(fp, BIO_NOCLOSE);
159
+ if (b == NULL) {
162
160
  OPENSSL_PUT_ERROR(PEM, ERR_R_BUF_LIB);
163
- return (0);
161
+ return NULL;
164
162
  }
165
- BIO_set_fp(b, fp, BIO_NOCLOSE);
166
- ret = PEM_read_bio_PrivateKey(b, x, cb, u);
163
+ EVP_PKEY *ret = PEM_read_bio_PrivateKey(b, x, cb, u);
167
164
  BIO_free(b);
168
- return (ret);
165
+ return ret;
169
166
  }
170
167
 
171
168
  int PEM_write_PrivateKey(FILE *fp, EVP_PKEY *x, const EVP_CIPHER *enc,
172
169
  unsigned char *kstr, int klen,
173
170
  pem_password_cb *cb, void *u)
174
171
  {
175
- BIO *b;
176
- int ret;
177
-
178
- if ((b = BIO_new_fp(fp, BIO_NOCLOSE)) == NULL) {
172
+ BIO *b = BIO_new_fp(fp, BIO_NOCLOSE);
173
+ if (b == NULL) {
179
174
  OPENSSL_PUT_ERROR(PEM, ERR_R_BUF_LIB);
180
175
  return 0;
181
176
  }
182
- ret = PEM_write_bio_PrivateKey(b, x, enc, kstr, klen, cb, u);
177
+ int ret = PEM_write_bio_PrivateKey(b, x, enc, kstr, klen, cb, u);
183
178
  BIO_free(b);
184
179
  return ret;
185
180
  }
@@ -212,16 +207,13 @@ DH *PEM_read_bio_DHparams(BIO *bp, DH **x, pem_password_cb *cb, void *u)
212
207
  #ifndef OPENSSL_NO_FP_API
213
208
  DH *PEM_read_DHparams(FILE *fp, DH **x, pem_password_cb *cb, void *u)
214
209
  {
215
- BIO *b;
216
- DH *ret;
217
-
218
- if ((b = BIO_new(BIO_s_file())) == NULL) {
210
+ BIO *b = BIO_new_fp(fp, BIO_NOCLOSE);
211
+ if (b == NULL) {
219
212
  OPENSSL_PUT_ERROR(PEM, ERR_R_BUF_LIB);
220
- return (0);
213
+ return NULL;
221
214
  }
222
- BIO_set_fp(b, fp, BIO_NOCLOSE);
223
- ret = PEM_read_bio_DHparams(b, x, cb, u);
215
+ DH *ret = PEM_read_bio_DHparams(b, x, cb, u);
224
216
  BIO_free(b);
225
- return (ret);
217
+ return ret;
226
218
  }
227
219
  #endif
@@ -41,23 +41,14 @@ static const uint8_t kPKCS7SignedData[] = {0x2a, 0x86, 0x48, 0x86, 0xf7,
41
41
  // It returns one on success or zero on error. On error, |*der_bytes| is
42
42
  // NULL.
43
43
  int pkcs7_parse_header(uint8_t **der_bytes, CBS *out, CBS *cbs) {
44
- size_t der_len;
45
44
  CBS in, content_info, content_type, wrapped_signed_data, signed_data;
46
45
  uint64_t version;
47
46
 
48
47
  // The input may be in BER format.
49
48
  *der_bytes = NULL;
50
- if (!CBS_asn1_ber_to_der(cbs, der_bytes, &der_len)) {
51
- return 0;
52
- }
53
- if (*der_bytes != NULL) {
54
- CBS_init(&in, *der_bytes, der_len);
55
- } else {
56
- CBS_init(&in, CBS_data(cbs), CBS_len(cbs));
57
- }
58
-
59
- // See https://tools.ietf.org/html/rfc2315#section-7
60
- if (!CBS_get_asn1(&in, &content_info, CBS_ASN1_SEQUENCE) ||
49
+ if (!CBS_asn1_ber_to_der(cbs, &in, der_bytes) ||
50
+ // See https://tools.ietf.org/html/rfc2315#section-7
51
+ !CBS_get_asn1(&in, &content_info, CBS_ASN1_SEQUENCE) ||
61
52
  !CBS_get_asn1(&content_info, &content_type, CBS_ASN1_OBJECT)) {
62
53
  goto err;
63
54
  }
@@ -96,20 +87,21 @@ int PKCS7_get_raw_certificates(STACK_OF(CRYPTO_BUFFER) *out_certs, CBS *cbs,
96
87
  CRYPTO_BUFFER_POOL *pool) {
97
88
  CBS signed_data, certificates;
98
89
  uint8_t *der_bytes = NULL;
99
- int ret = 0;
90
+ int ret = 0, has_certificates;
100
91
  const size_t initial_certs_len = sk_CRYPTO_BUFFER_num(out_certs);
101
92
 
102
- if (!pkcs7_parse_header(&der_bytes, &signed_data, cbs)) {
103
- return 0;
104
- }
105
-
106
93
  // See https://tools.ietf.org/html/rfc2315#section-9.1
107
- if (!CBS_get_asn1(&signed_data, &certificates,
108
- CBS_ASN1_CONTEXT_SPECIFIC | CBS_ASN1_CONSTRUCTED | 0)) {
109
- OPENSSL_PUT_ERROR(PKCS7, PKCS7_R_NO_CERTIFICATES_INCLUDED);
94
+ if (!pkcs7_parse_header(&der_bytes, &signed_data, cbs) ||
95
+ !CBS_get_optional_asn1(
96
+ &signed_data, &certificates, &has_certificates,
97
+ CBS_ASN1_CONTEXT_SPECIFIC | CBS_ASN1_CONSTRUCTED | 0)) {
110
98
  goto err;
111
99
  }
112
100
 
101
+ if (!has_certificates) {
102
+ CBS_init(&certificates, NULL, 0);
103
+ }
104
+
113
105
  while (CBS_len(&certificates) > 0) {
114
106
  CBS cert;
115
107
  if (!CBS_get_asn1_element(&certificates, &cert, CBS_ASN1_SEQUENCE)) {
@@ -142,7 +134,7 @@ err:
142
134
  int pkcs7_bundle(CBB *out, int (*cb)(CBB *out, const void *arg),
143
135
  const void *arg) {
144
136
  CBB outer_seq, oid, wrapped_seq, seq, version_bytes, digest_algos_set,
145
- content_info;
137
+ content_info, signer_infos;
146
138
 
147
139
  // See https://tools.ietf.org/html/rfc2315#section-7
148
140
  if (!CBB_add_asn1(out, &outer_seq, CBS_ASN1_SEQUENCE) ||
@@ -158,7 +150,8 @@ int pkcs7_bundle(CBB *out, int (*cb)(CBB *out, const void *arg),
158
150
  !CBB_add_asn1(&seq, &content_info, CBS_ASN1_SEQUENCE) ||
159
151
  !CBB_add_asn1(&content_info, &oid, CBS_ASN1_OBJECT) ||
160
152
  !CBB_add_bytes(&oid, kPKCS7Data, sizeof(kPKCS7Data)) ||
161
- !cb(&seq, arg)) {
153
+ !cb(&seq, arg) ||
154
+ !CBB_add_asn1(&seq, &signer_infos, CBS_ASN1_SET)) {
162
155
  return 0;
163
156
  }
164
157
 
@@ -26,6 +26,7 @@
26
26
  #include <openssl/x509.h>
27
27
 
28
28
  #include "internal.h"
29
+ #include "../internal.h"
29
30
 
30
31
 
31
32
  int PKCS7_get_certificates(STACK_OF(X509) *out_certs, CBS *cbs) {
@@ -64,28 +65,24 @@ err:
64
65
  int PKCS7_get_CRLs(STACK_OF(X509_CRL) *out_crls, CBS *cbs) {
65
66
  CBS signed_data, crls;
66
67
  uint8_t *der_bytes = NULL;
67
- int ret = 0;
68
+ int ret = 0, has_crls;
68
69
  const size_t initial_crls_len = sk_X509_CRL_num(out_crls);
69
70
 
70
- if (!pkcs7_parse_header(&der_bytes, &signed_data, cbs)) {
71
- return 0;
72
- }
73
-
74
71
  // See https://tools.ietf.org/html/rfc2315#section-9.1
75
-
76
- // Even if only CRLs are included, there may be an empty certificates block.
77
- // OpenSSL does this, for example.
78
- if (CBS_peek_asn1_tag(&signed_data,
79
- CBS_ASN1_CONTEXT_SPECIFIC | CBS_ASN1_CONSTRUCTED | 0) &&
80
- !CBS_get_asn1(&signed_data, NULL /* certificates */,
81
- CBS_ASN1_CONTEXT_SPECIFIC | CBS_ASN1_CONSTRUCTED | 0)) {
72
+ if (!pkcs7_parse_header(&der_bytes, &signed_data, cbs) ||
73
+ // Even if only CRLs are included, there may be an empty certificates
74
+ // block. OpenSSL does this, for example.
75
+ !CBS_get_optional_asn1(
76
+ &signed_data, NULL, NULL,
77
+ CBS_ASN1_CONTEXT_SPECIFIC | CBS_ASN1_CONSTRUCTED | 0) ||
78
+ !CBS_get_optional_asn1(
79
+ &signed_data, &crls, &has_crls,
80
+ CBS_ASN1_CONTEXT_SPECIFIC | CBS_ASN1_CONSTRUCTED | 1)) {
82
81
  goto err;
83
82
  }
84
83
 
85
- if (!CBS_get_asn1(&signed_data, &crls,
86
- CBS_ASN1_CONTEXT_SPECIFIC | CBS_ASN1_CONSTRUCTED | 1)) {
87
- OPENSSL_PUT_ERROR(PKCS7, PKCS7_R_NO_CRLS_INCLUDED);
88
- goto err;
84
+ if (!has_crls) {
85
+ CBS_init(&crls, NULL, 0);
89
86
  }
90
87
 
91
88
  while (CBS_len(&crls) > 0) {
@@ -231,3 +228,158 @@ static int pkcs7_bundle_crls_cb(CBB *out, const void *arg) {
231
228
  int PKCS7_bundle_CRLs(CBB *out, const STACK_OF(X509_CRL) *crls) {
232
229
  return pkcs7_bundle(out, pkcs7_bundle_crls_cb, crls);
233
230
  }
231
+
232
+ static PKCS7 *pkcs7_new(CBS *cbs) {
233
+ PKCS7 *ret = OPENSSL_malloc(sizeof(PKCS7));
234
+ if (ret == NULL) {
235
+ return NULL;
236
+ }
237
+ OPENSSL_memset(ret, 0, sizeof(PKCS7));
238
+ ret->type = (ASN1_OBJECT *)OBJ_nid2obj(NID_pkcs7_signed);
239
+ ret->d.sign = OPENSSL_malloc(sizeof(PKCS7_SIGNED));
240
+ if (ret->d.sign == NULL) {
241
+ goto err;
242
+ }
243
+ ret->d.sign->cert = sk_X509_new_null();
244
+ ret->d.sign->crl = sk_X509_CRL_new_null();
245
+ CBS copy = *cbs, copy2 = *cbs;
246
+ if (ret->d.sign->cert == NULL || ret->d.sign->crl == NULL ||
247
+ !PKCS7_get_certificates(ret->d.sign->cert, &copy) ||
248
+ !PKCS7_get_CRLs(ret->d.sign->crl, cbs)) {
249
+ goto err;
250
+ }
251
+
252
+ if (sk_X509_num(ret->d.sign->cert) == 0) {
253
+ sk_X509_free(ret->d.sign->cert);
254
+ ret->d.sign->cert = NULL;
255
+ }
256
+
257
+ if (sk_X509_CRL_num(ret->d.sign->crl) == 0) {
258
+ sk_X509_CRL_free(ret->d.sign->crl);
259
+ ret->d.sign->crl = NULL;
260
+ }
261
+
262
+ ret->ber_len = CBS_len(&copy2) - CBS_len(cbs);
263
+ ret->ber_bytes = BUF_memdup(CBS_data(&copy2), ret->ber_len);
264
+ if (ret->ber_bytes == NULL) {
265
+ goto err;
266
+ }
267
+
268
+ return ret;
269
+
270
+ err:
271
+ PKCS7_free(ret);
272
+ return NULL;
273
+ }
274
+
275
+ PKCS7 *d2i_PKCS7(PKCS7 **out, const uint8_t **inp,
276
+ size_t len) {
277
+ CBS cbs;
278
+ CBS_init(&cbs, *inp, len);
279
+ PKCS7 *ret = pkcs7_new(&cbs);
280
+ if (ret == NULL) {
281
+ return NULL;
282
+ }
283
+ *inp = CBS_data(&cbs);
284
+ if (out != NULL) {
285
+ PKCS7_free(*out);
286
+ *out = ret;
287
+ }
288
+ return ret;
289
+ }
290
+
291
+ PKCS7 *d2i_PKCS7_bio(BIO *bio, PKCS7 **out) {
292
+ // Use a generous bound, to allow for PKCS#7 files containing large root sets.
293
+ static const size_t kMaxSize = 4 * 1024 * 1024;
294
+ uint8_t *data;
295
+ size_t len;
296
+ if (!BIO_read_asn1(bio, &data, &len, kMaxSize)) {
297
+ return NULL;
298
+ }
299
+
300
+ CBS cbs;
301
+ CBS_init(&cbs, data, len);
302
+ PKCS7 *ret = pkcs7_new(&cbs);
303
+ OPENSSL_free(data);
304
+ if (out != NULL && ret != NULL) {
305
+ PKCS7_free(*out);
306
+ *out = ret;
307
+ }
308
+ return ret;
309
+ }
310
+
311
+ int i2d_PKCS7(const PKCS7 *p7, uint8_t **out) {
312
+ if (p7->ber_len > INT_MAX) {
313
+ OPENSSL_PUT_ERROR(PKCS8, ERR_R_OVERFLOW);
314
+ return -1;
315
+ }
316
+
317
+ if (out == NULL) {
318
+ return (int)p7->ber_len;
319
+ }
320
+
321
+ if (*out == NULL) {
322
+ *out = OPENSSL_malloc(p7->ber_len);
323
+ if (*out == NULL) {
324
+ OPENSSL_PUT_ERROR(PKCS8, ERR_R_MALLOC_FAILURE);
325
+ return -1;
326
+ }
327
+ OPENSSL_memcpy(*out, p7->ber_bytes, p7->ber_len);
328
+ } else {
329
+ OPENSSL_memcpy(*out, p7->ber_bytes, p7->ber_len);
330
+ *out += p7->ber_len;
331
+ }
332
+ return (int)p7->ber_len;
333
+ }
334
+
335
+ int i2d_PKCS7_bio(BIO *bio, const PKCS7 *p7) {
336
+ return BIO_write_all(bio, p7->ber_bytes, p7->ber_len);
337
+ }
338
+
339
+ void PKCS7_free(PKCS7 *p7) {
340
+ if (p7 == NULL) {
341
+ return;
342
+ }
343
+
344
+ OPENSSL_free(p7->ber_bytes);
345
+ ASN1_OBJECT_free(p7->type);
346
+ // We only supported signed data.
347
+ if (p7->d.sign != NULL) {
348
+ sk_X509_pop_free(p7->d.sign->cert, X509_free);
349
+ sk_X509_CRL_pop_free(p7->d.sign->crl, X509_CRL_free);
350
+ OPENSSL_free(p7->d.sign);
351
+ }
352
+ OPENSSL_free(p7);
353
+ }
354
+
355
+ // We only support signed data, so these getters are no-ops.
356
+ int PKCS7_type_is_data(const PKCS7 *p7) { return 0; }
357
+ int PKCS7_type_is_digest(const PKCS7 *p7) { return 0; }
358
+ int PKCS7_type_is_encrypted(const PKCS7 *p7) { return 0; }
359
+ int PKCS7_type_is_enveloped(const PKCS7 *p7) { return 0; }
360
+ int PKCS7_type_is_signed(const PKCS7 *p7) { return 1; }
361
+ int PKCS7_type_is_signedAndEnveloped(const PKCS7 *p7) { return 0; }
362
+
363
+ PKCS7 *PKCS7_sign(X509 *sign_cert, EVP_PKEY *pkey, STACK_OF(X509) *certs,
364
+ BIO *data, int flags) {
365
+ if (sign_cert != NULL || pkey != NULL || flags != PKCS7_DETACHED) {
366
+ OPENSSL_PUT_ERROR(PKCS7, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
367
+ return NULL;
368
+ }
369
+
370
+ uint8_t *der;
371
+ size_t len;
372
+ CBB cbb;
373
+ if (!CBB_init(&cbb, 2048) ||
374
+ !PKCS7_bundle_certificates(&cbb, certs) ||
375
+ !CBB_finish(&cbb, &der, &len)) {
376
+ CBB_cleanup(&cbb);
377
+ return NULL;
378
+ }
379
+
380
+ CBS cbs;
381
+ CBS_init(&cbs, der, len);
382
+ PKCS7 *ret = pkcs7_new(&cbs);
383
+ OPENSSL_free(der);
384
+ return ret;
385
+ }
@@ -83,6 +83,13 @@ int pkcs12_key_gen(const char *pass, size_t pass_len, const uint8_t *salt,
83
83
  size_t salt_len, uint8_t id, unsigned iterations,
84
84
  size_t out_len, uint8_t *out, const EVP_MD *md);
85
85
 
86
+ // pkcs12_pbe_encrypt_init configures |ctx| for encrypting with a PBES1 scheme
87
+ // defined in PKCS#12. It writes the corresponding AlgorithmIdentifier to |out|.
88
+ int pkcs12_pbe_encrypt_init(CBB *out, EVP_CIPHER_CTX *ctx, int alg,
89
+ unsigned iterations, const char *pass,
90
+ size_t pass_len, const uint8_t *salt,
91
+ size_t salt_len);
92
+
86
93
  struct pbe_suite {
87
94
  int pbe_nid;
88
95
  uint8_t oid[10];
@@ -112,6 +119,10 @@ int PKCS5_pbe2_encrypt_init(CBB *out, EVP_CIPHER_CTX *ctx,
112
119
  const char *pass, size_t pass_len,
113
120
  const uint8_t *salt, size_t salt_len);
114
121
 
122
+ // pkcs12_iterations_acceptable returns one if |iterations| is a reasonable
123
+ // number of PBKDF2 iterations and zero otherwise.
124
+ int pkcs12_iterations_acceptable(uint64_t iterations);
125
+
115
126
 
116
127
  #if defined(__cplusplus)
117
128
  } // extern C
@@ -81,6 +81,10 @@ static const uint8_t kPBES2[] = {0x2a, 0x86, 0x48, 0x86, 0xf7,
81
81
  static const uint8_t kHMACWithSHA1[] = {0x2a, 0x86, 0x48, 0x86,
82
82
  0xf7, 0x0d, 0x02, 0x07};
83
83
 
84
+ // 1.2.840.113549.2.9
85
+ static const uint8_t kHMACWithSHA256[] = {0x2a, 0x86, 0x48, 0x86,
86
+ 0xf7, 0x0d, 0x02, 0x09};
87
+
84
88
  static const struct {
85
89
  uint8_t oid[9];
86
90
  uint8_t oid_len;
@@ -140,18 +144,18 @@ static int add_cipher_oid(CBB *out, int nid) {
140
144
  }
141
145
 
142
146
  static int pkcs5_pbe2_cipher_init(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher,
143
- unsigned iterations, const char *pass,
144
- size_t pass_len, const uint8_t *salt,
145
- size_t salt_len, const uint8_t *iv,
146
- size_t iv_len, int enc) {
147
+ const EVP_MD *pbkdf2_md, unsigned iterations,
148
+ const char *pass, size_t pass_len,
149
+ const uint8_t *salt, size_t salt_len,
150
+ const uint8_t *iv, size_t iv_len, int enc) {
147
151
  if (iv_len != EVP_CIPHER_iv_length(cipher)) {
148
152
  OPENSSL_PUT_ERROR(PKCS8, PKCS8_R_ERROR_SETTING_CIPHER_PARAMS);
149
153
  return 0;
150
154
  }
151
155
 
152
156
  uint8_t key[EVP_MAX_KEY_LENGTH];
153
- int ret = PKCS5_PBKDF2_HMAC_SHA1(pass, pass_len, salt, salt_len, iterations,
154
- EVP_CIPHER_key_length(cipher), key) &&
157
+ int ret = PKCS5_PBKDF2_HMAC(pass, pass_len, salt, salt_len, iterations,
158
+ pbkdf2_md, EVP_CIPHER_key_length(cipher), key) &&
155
159
  EVP_CipherInit_ex(ctx, cipher, NULL /* engine */, key, iv, enc);
156
160
  OPENSSL_cleanse(key, EVP_MAX_KEY_LENGTH);
157
161
  return ret;
@@ -201,9 +205,9 @@ int PKCS5_pbe2_encrypt_init(CBB *out, EVP_CIPHER_CTX *ctx,
201
205
  return 0;
202
206
  }
203
207
 
204
- return pkcs5_pbe2_cipher_init(ctx, cipher, iterations, pass, pass_len, salt,
205
- salt_len, iv, EVP_CIPHER_iv_length(cipher),
206
- 1 /* encrypt */);
208
+ return pkcs5_pbe2_cipher_init(ctx, cipher, EVP_sha1(), iterations, pass,
209
+ pass_len, salt, salt_len, iv,
210
+ EVP_CIPHER_iv_length(cipher), 1 /* encrypt */);
207
211
  }
208
212
 
209
213
  int PKCS5_pbe2_decrypt_init(const struct pbe_suite *suite, EVP_CIPHER_CTX *ctx,
@@ -244,7 +248,7 @@ int PKCS5_pbe2_decrypt_init(const struct pbe_suite *suite, EVP_CIPHER_CTX *ctx,
244
248
  return 0;
245
249
  }
246
250
 
247
- if (iterations == 0 || iterations > UINT_MAX) {
251
+ if (!pkcs12_iterations_acceptable(iterations)) {
248
252
  OPENSSL_PUT_ERROR(PKCS8, PKCS8_R_BAD_ITERATION_COUNT);
249
253
  return 0;
250
254
  }
@@ -264,6 +268,7 @@ int PKCS5_pbe2_decrypt_init(const struct pbe_suite *suite, EVP_CIPHER_CTX *ctx,
264
268
  }
265
269
  }
266
270
 
271
+ const EVP_MD *md = EVP_sha1();
267
272
  if (CBS_len(&pbkdf2_params) != 0) {
268
273
  CBS alg_id, prf;
269
274
  if (!CBS_get_asn1(&pbkdf2_params, &alg_id, CBS_ASN1_SEQUENCE) ||
@@ -273,14 +278,18 @@ int PKCS5_pbe2_decrypt_init(const struct pbe_suite *suite, EVP_CIPHER_CTX *ctx,
273
278
  return 0;
274
279
  }
275
280
 
276
- // We only support hmacWithSHA1. It is the DEFAULT, so DER requires it be
277
- // omitted, but we match OpenSSL in tolerating it being present.
278
- if (!CBS_mem_equal(&prf, kHMACWithSHA1, sizeof(kHMACWithSHA1))) {
281
+ if (CBS_mem_equal(&prf, kHMACWithSHA1, sizeof(kHMACWithSHA1))) {
282
+ // hmacWithSHA1 is the DEFAULT, so DER requires it be omitted, but we
283
+ // match OpenSSL in tolerating it being present.
284
+ md = EVP_sha1();
285
+ } else if (CBS_mem_equal(&prf, kHMACWithSHA256, sizeof(kHMACWithSHA256))) {
286
+ md = EVP_sha256();
287
+ } else {
279
288
  OPENSSL_PUT_ERROR(PKCS8, PKCS8_R_UNSUPPORTED_PRF);
280
289
  return 0;
281
290
  }
282
291
 
283
- // hmacWithSHA1 has a NULL parameter.
292
+ // All supported PRFs use a NULL parameter.
284
293
  CBS null;
285
294
  if (!CBS_get_asn1(&alg_id, &null, CBS_ASN1_NULL) ||
286
295
  CBS_len(&null) != 0 ||
@@ -301,7 +310,7 @@ int PKCS5_pbe2_decrypt_init(const struct pbe_suite *suite, EVP_CIPHER_CTX *ctx,
301
310
  return 0;
302
311
  }
303
312
 
304
- return pkcs5_pbe2_cipher_init(ctx, cipher, (unsigned)iterations, pass,
313
+ return pkcs5_pbe2_cipher_init(ctx, cipher, md, (unsigned)iterations, pass,
305
314
  pass_len, CBS_data(&salt), CBS_len(&salt),
306
315
  CBS_data(&iv), CBS_len(&iv), 0 /* decrypt */);
307
316
  }