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
@@ -35,7 +35,10 @@ DECLARE_STACK_OF(X509_CRL)
35
35
 
36
36
  // PKCS7_get_raw_certificates parses a PKCS#7, SignedData structure from |cbs|
37
37
  // and appends the included certificates to |out_certs|. It returns one on
38
- // success and zero on error.
38
+ // success and zero on error. |cbs| is advanced passed the structure.
39
+ //
40
+ // Note that a SignedData structure may contain no certificates, in which case
41
+ // this function succeeds but does not append any certificates.
39
42
  OPENSSL_EXPORT int PKCS7_get_raw_certificates(
40
43
  STACK_OF(CRYPTO_BUFFER) *out_certs, CBS *cbs, CRYPTO_BUFFER_POOL *pool);
41
44
 
@@ -49,8 +52,11 @@ OPENSSL_EXPORT int PKCS7_bundle_certificates(
49
52
  CBB *out, const STACK_OF(X509) *certs);
50
53
 
51
54
  // PKCS7_get_CRLs parses a PKCS#7, SignedData structure from |cbs| and appends
52
- // the included CRLs to |out_crls|. It returns one on success and zero on
53
- // error.
55
+ // the included CRLs to |out_crls|. It returns one on success and zero on error.
56
+ // |cbs| is advanced passed the structure.
57
+ //
58
+ // Note that a SignedData structure may contain no CRLs, in which case this
59
+ // function succeeds but does not append any CRLs.
54
60
  OPENSSL_EXPORT int PKCS7_get_CRLs(STACK_OF(X509_CRL) *out_crls, CBS *cbs);
55
61
 
56
62
  // PKCS7_bundle_CRLs appends a PKCS#7, SignedData structure containing
@@ -60,18 +66,145 @@ OPENSSL_EXPORT int PKCS7_bundle_CRLs(CBB *out, const STACK_OF(X509_CRL) *crls);
60
66
  // PKCS7_get_PEM_certificates reads a PEM-encoded, PKCS#7, SignedData structure
61
67
  // from |pem_bio| and appends the included certificates to |out_certs|. It
62
68
  // returns one on success and zero on error.
69
+ //
70
+ // Note that a SignedData structure may contain no certificates, in which case
71
+ // this function succeeds but does not append any certificates.
63
72
  OPENSSL_EXPORT int PKCS7_get_PEM_certificates(STACK_OF(X509) *out_certs,
64
73
  BIO *pem_bio);
65
74
 
66
75
  // PKCS7_get_PEM_CRLs reads a PEM-encoded, PKCS#7, SignedData structure from
67
76
  // |pem_bio| and appends the included CRLs to |out_crls|. It returns one on
68
77
  // success and zero on error.
78
+ //
79
+ // Note that a SignedData structure may contain no CRLs, in which case this
80
+ // function succeeds but does not append any CRLs.
69
81
  OPENSSL_EXPORT int PKCS7_get_PEM_CRLs(STACK_OF(X509_CRL) *out_crls,
70
82
  BIO *pem_bio);
71
83
 
72
84
 
85
+ // Deprecated functions.
86
+ //
87
+ // These functions are a compatibility layer over a subset of OpenSSL's PKCS#7
88
+ // API. It intentionally does not implement the whole thing, only the minimum
89
+ // needed to build cryptography.io.
90
+
91
+ typedef struct {
92
+ STACK_OF(X509) *cert;
93
+ STACK_OF(X509_CRL) *crl;
94
+ } PKCS7_SIGNED;
95
+
96
+ typedef struct {
97
+ STACK_OF(X509) *cert;
98
+ STACK_OF(X509_CRL) *crl;
99
+ } PKCS7_SIGN_ENVELOPE;
100
+
101
+ typedef void PKCS7_ENVELOPE;
102
+ typedef void PKCS7_DIGEST;
103
+ typedef void PKCS7_ENCRYPT;
104
+
105
+ typedef struct {
106
+ uint8_t *ber_bytes;
107
+ size_t ber_len;
108
+
109
+ // Unlike OpenSSL, the following fields are immutable. They filled in when the
110
+ // object is parsed and ignored in serialization.
111
+ ASN1_OBJECT *type;
112
+ union {
113
+ char *ptr;
114
+ ASN1_OCTET_STRING *data;
115
+ PKCS7_SIGNED *sign;
116
+ PKCS7_ENVELOPE *enveloped;
117
+ PKCS7_SIGN_ENVELOPE *signed_and_enveloped;
118
+ PKCS7_DIGEST *digest;
119
+ PKCS7_ENCRYPT *encrypted;
120
+ ASN1_TYPE *other;
121
+ } d;
122
+ } PKCS7;
123
+
124
+ // d2i_PKCS7 parses a BER-encoded, PKCS#7 signed data ContentInfo structure from
125
+ // |len| bytes at |*inp|. If |out| is not NULL then, on exit, a pointer to the
126
+ // result is in |*out|. Note that, even if |*out| is already non-NULL on entry,
127
+ // it will not be written to. Rather, a fresh |PKCS7| is allocated and the
128
+ // previous one is freed. On successful exit, |*inp| is advanced past the BER
129
+ // structure. It returns the result or NULL on error.
130
+ OPENSSL_EXPORT PKCS7 *d2i_PKCS7(PKCS7 **out, const uint8_t **inp,
131
+ size_t len);
132
+
133
+ // d2i_PKCS7_bio behaves like |d2i_PKCS7| but reads the input from |bio|. If
134
+ // the length of the object is indefinite the full contents of |bio| are read.
135
+ //
136
+ // If the function fails then some unknown amount of data may have been read
137
+ // from |bio|.
138
+ OPENSSL_EXPORT PKCS7 *d2i_PKCS7_bio(BIO *bio, PKCS7 **out);
139
+
140
+ // i2d_PKCS7 is a dummy function which copies the contents of |p7|. If |out| is
141
+ // not NULL then the result is written to |*out| and |*out| is advanced just
142
+ // past the output. It returns the number of bytes in the result, whether
143
+ // written or not, or a negative value on error.
144
+ OPENSSL_EXPORT int i2d_PKCS7(const PKCS7 *p7, uint8_t **out);
145
+
146
+ // i2d_PKCS7_bio writes |p7| to |bio|. It returns one on success and zero on
147
+ // error.
148
+ OPENSSL_EXPORT int i2d_PKCS7_bio(BIO *bio, const PKCS7 *p7);
149
+
150
+ // PKCS7_free releases memory associated with |p7|.
151
+ OPENSSL_EXPORT void PKCS7_free(PKCS7 *p7);
152
+
153
+ // PKCS7_type_is_data returns zero.
154
+ OPENSSL_EXPORT int PKCS7_type_is_data(const PKCS7 *p7);
155
+
156
+ // PKCS7_type_is_digest returns zero.
157
+ OPENSSL_EXPORT int PKCS7_type_is_digest(const PKCS7 *p7);
158
+
159
+ // PKCS7_type_is_encrypted returns zero.
160
+ OPENSSL_EXPORT int PKCS7_type_is_encrypted(const PKCS7 *p7);
161
+
162
+ // PKCS7_type_is_enveloped returns zero.
163
+ OPENSSL_EXPORT int PKCS7_type_is_enveloped(const PKCS7 *p7);
164
+
165
+ // PKCS7_type_is_signed returns one. (We only supporte signed data
166
+ // ContentInfos.)
167
+ OPENSSL_EXPORT int PKCS7_type_is_signed(const PKCS7 *p7);
168
+
169
+ // PKCS7_type_is_signedAndEnveloped returns zero.
170
+ OPENSSL_EXPORT int PKCS7_type_is_signedAndEnveloped(const PKCS7 *p7);
171
+
172
+ // PKCS7_DETACHED indicates that the PKCS#7 file specifies its data externally.
173
+ #define PKCS7_DETACHED 0x40
174
+
175
+ // The following flags cause |PKCS7_sign| to fail.
176
+ #define PKCS7_TEXT 0x1
177
+ #define PKCS7_NOCERTS 0x2
178
+ #define PKCS7_NOSIGS 0x4
179
+ #define PKCS7_NOCHAIN 0x8
180
+ #define PKCS7_NOINTERN 0x10
181
+ #define PKCS7_NOVERIFY 0x20
182
+ #define PKCS7_BINARY 0x80
183
+ #define PKCS7_NOATTR 0x100
184
+ #define PKCS7_NOSMIMECAP 0x200
185
+ #define PKCS7_STREAM 0x1000
186
+
187
+ // PKCS7_sign assembles |certs| into a PKCS#7 signed data ContentInfo with
188
+ // external data and no signatures. It returns a newly-allocated |PKCS7| on
189
+ // success or NULL on error. |sign_cert| and |pkey| must be NULL. |data| is
190
+ // ignored. |flags| must be equal to |PKCS7_DETACHED|.
191
+ //
192
+ // Note this function only implements a subset of the corresponding OpenSSL
193
+ // function. It is provided for backwards compatibility only.
194
+ OPENSSL_EXPORT PKCS7 *PKCS7_sign(X509 *sign_cert, EVP_PKEY *pkey,
195
+ STACK_OF(X509) *certs, BIO *data, int flags);
196
+
197
+
73
198
  #if defined(__cplusplus)
74
199
  } // extern C
200
+
201
+ extern "C++" {
202
+ BSSL_NAMESPACE_BEGIN
203
+
204
+ BORINGSSL_MAKE_DELETER(PKCS7, PKCS7_free)
205
+
206
+ BSSL_NAMESPACE_END
207
+ } // extern C++
75
208
  #endif
76
209
 
77
210
  #define PKCS7_R_BAD_PKCS7_VERSION 100
@@ -152,14 +152,34 @@ OPENSSL_EXPORT PKCS12* d2i_PKCS12_bio(BIO *bio, PKCS12 **out_p12);
152
152
  // d2i_PKCS12_fp acts like |d2i_PKCS12| but reads from a |FILE|.
153
153
  OPENSSL_EXPORT PKCS12* d2i_PKCS12_fp(FILE *fp, PKCS12 **out_p12);
154
154
 
155
+ // i2d_PKCS12 is a dummy function which copies the contents of |p12|. If |out|
156
+ // is not NULL then the result is written to |*out| and |*out| is advanced just
157
+ // past the output. It returns the number of bytes in the result, whether
158
+ // written or not, or a negative value on error.
159
+ OPENSSL_EXPORT int i2d_PKCS12(const PKCS12 *p12, uint8_t **out);
160
+
161
+ // i2d_PKCS12_bio writes the contents of |p12| to |bio|. It returns one on
162
+ // success and zero on error.
163
+ OPENSSL_EXPORT int i2d_PKCS12_bio(BIO *bio, const PKCS12 *p12);
164
+
165
+ // i2d_PKCS12_fp writes the contents of |p12| to |fp|. It returns one on
166
+ // success and zero on error.
167
+ OPENSSL_EXPORT int i2d_PKCS12_fp(FILE *fp, const PKCS12 *p12);
168
+
155
169
  // PKCS12_parse calls |PKCS12_get_key_and_certs| on the ASN.1 data stored in
156
170
  // |p12|. The |out_pkey| and |out_cert| arguments must not be NULL and, on
157
- // successful exit, the private key and first certificate will be stored in
171
+ // successful exit, the private key and matching certificate will be stored in
158
172
  // them. The |out_ca_certs| argument may be NULL but, if not, then any extra
159
173
  // certificates will be appended to |*out_ca_certs|. If |*out_ca_certs| is NULL
160
174
  // then it will be set to a freshly allocated stack containing the extra certs.
161
175
  //
176
+ // Note if |p12| does not contain a private key, both |*out_pkey| and
177
+ // |*out_cert| will be set to NULL and all certificates will be returned via
178
+ // |*out_ca_certs|.
179
+ //
162
180
  // It returns one on success and zero on error.
181
+ //
182
+ // Use |PKCS12_get_key_and_certs| instead.
163
183
  OPENSSL_EXPORT int PKCS12_parse(const PKCS12 *p12, const char *password,
164
184
  EVP_PKEY **out_pkey, X509 **out_cert,
165
185
  STACK_OF(X509) **out_ca_certs);
@@ -175,6 +195,23 @@ OPENSSL_EXPORT int PKCS12_parse(const PKCS12 *p12, const char *password,
175
195
  OPENSSL_EXPORT int PKCS12_verify_mac(const PKCS12 *p12, const char *password,
176
196
  int password_len);
177
197
 
198
+ // PKCS12_create returns a newly-allocated |PKCS12| object containing |pkey|,
199
+ // |cert|, and |chain|, encrypted with the specified password. |name|, if not
200
+ // NULL, specifies a user-friendly name to encode with the key and
201
+ // certificate. The key and certificates are encrypted with |key_nid| and
202
+ // |cert_nid|, respectively, using |iterations| iterations in the
203
+ // KDF. |mac_iterations| is the number of iterations when deriving the MAC
204
+ // key. |key_type| must be zero. |pkey| and |cert| may be NULL to omit them.
205
+ //
206
+ // Each of |key_nid|, |cert_nid|, |iterations|, and |mac_iterations| may be zero
207
+ // to use defaults, which are |NID_pbe_WithSHA1And3_Key_TripleDES_CBC|,
208
+ // |NID_pbe_WithSHA1And40BitRC2_CBC|, 2048, and one, respectively.
209
+ OPENSSL_EXPORT PKCS12 *PKCS12_create(const char *password, const char *name,
210
+ const EVP_PKEY *pkey, X509 *cert,
211
+ const STACK_OF(X509) *chain, int key_nid,
212
+ int cert_nid, int iterations,
213
+ int mac_iterations, int key_type);
214
+
178
215
  // PKCS12_free frees |p12| and its contents.
179
216
  OPENSSL_EXPORT void PKCS12_free(PKCS12 *p12);
180
217
 
@@ -184,12 +221,12 @@ OPENSSL_EXPORT void PKCS12_free(PKCS12 *p12);
184
221
 
185
222
  extern "C++" {
186
223
 
187
- namespace bssl {
224
+ BSSL_NAMESPACE_BEGIN
188
225
 
189
226
  BORINGSSL_MAKE_DELETER(PKCS12, PKCS12_free)
190
227
  BORINGSSL_MAKE_DELETER(PKCS8_PRIV_KEY_INFO, PKCS8_PRIV_KEY_INFO_free)
191
228
 
192
- } // namespace bssl
229
+ BSSL_NAMESPACE_END
193
230
 
194
231
  } // extern C++
195
232
 
@@ -226,5 +263,7 @@ BORINGSSL_MAKE_DELETER(PKCS8_PRIV_KEY_INFO, PKCS8_PRIV_KEY_INFO_free)
226
263
  #define PKCS8_R_UNSUPPORTED_KEY_DERIVATION_FUNCTION 128
227
264
  #define PKCS8_R_BAD_ITERATION_COUNT 129
228
265
  #define PKCS8_R_UNSUPPORTED_PRF 130
266
+ #define PKCS8_R_INVALID_CHARACTERS 131
267
+ #define PKCS8_R_UNSUPPORTED_OPTIONS 132
229
268
 
230
269
  #endif // OPENSSL_HEADER_PKCS8_H
@@ -48,6 +48,16 @@ OPENSSL_EXPORT void CRYPTO_BUFFER_POOL_free(CRYPTO_BUFFER_POOL *pool);
48
48
  OPENSSL_EXPORT CRYPTO_BUFFER *CRYPTO_BUFFER_new(const uint8_t *data, size_t len,
49
49
  CRYPTO_BUFFER_POOL *pool);
50
50
 
51
+ // CRYPTO_BUFFER_alloc creates an unpooled |CRYPTO_BUFFER| of the given size and
52
+ // writes the underlying data pointer to |*out_data|. It returns NULL on error.
53
+ //
54
+ // After calling this function, |len| bytes of contents must be written to
55
+ // |out_data| before passing the returned pointer to any other BoringSSL
56
+ // functions. Once initialized, the |CRYPTO_BUFFER| should be treated as
57
+ // immutable.
58
+ OPENSSL_EXPORT CRYPTO_BUFFER *CRYPTO_BUFFER_alloc(uint8_t **out_data,
59
+ size_t len);
60
+
51
61
  // CRYPTO_BUFFER_new_from_CBS acts the same as |CRYPTO_BUFFER_new|.
52
62
  OPENSSL_EXPORT CRYPTO_BUFFER *CRYPTO_BUFFER_new_from_CBS(
53
63
  CBS *cbs, CRYPTO_BUFFER_POOL *pool);
@@ -77,12 +87,13 @@ OPENSSL_EXPORT void CRYPTO_BUFFER_init_CBS(const CRYPTO_BUFFER *buf, CBS *out);
77
87
 
78
88
  extern "C++" {
79
89
 
80
- namespace bssl {
90
+ BSSL_NAMESPACE_BEGIN
81
91
 
82
92
  BORINGSSL_MAKE_DELETER(CRYPTO_BUFFER_POOL, CRYPTO_BUFFER_POOL_free)
83
93
  BORINGSSL_MAKE_DELETER(CRYPTO_BUFFER, CRYPTO_BUFFER_free)
94
+ BORINGSSL_MAKE_UP_REF(CRYPTO_BUFFER, CRYPTO_BUFFER_up_ref)
84
95
 
85
- } // namespace bssl
96
+ BSSL_NAMESPACE_END
86
97
 
87
98
  } // extern C++
88
99
 
@@ -83,21 +83,22 @@ OPENSSL_EXPORT int RIPEMD160_Update(RIPEMD160_CTX *ctx, const void *data,
83
83
  size_t len);
84
84
 
85
85
  // RIPEMD160_Final adds the final padding to |ctx| and writes the resulting
86
- // digest to |md|, which must have at least |RIPEMD160_DIGEST_LENGTH| bytes of
86
+ // digest to |out|, which must have at least |RIPEMD160_DIGEST_LENGTH| bytes of
87
87
  // space. It returns one.
88
- OPENSSL_EXPORT int RIPEMD160_Final(uint8_t *md, RIPEMD160_CTX *ctx);
88
+ OPENSSL_EXPORT int RIPEMD160_Final(uint8_t out[RIPEMD160_DIGEST_LENGTH],
89
+ RIPEMD160_CTX *ctx);
89
90
 
90
91
  // RIPEMD160 writes the digest of |len| bytes from |data| to |out| and returns
91
92
  // |out|. There must be at least |RIPEMD160_DIGEST_LENGTH| bytes of space in
92
93
  // |out|.
93
94
  OPENSSL_EXPORT uint8_t *RIPEMD160(const uint8_t *data, size_t len,
94
- uint8_t *out);
95
+ uint8_t out[RIPEMD160_DIGEST_LENGTH]);
95
96
 
96
97
  // RIPEMD160_Transform is a low-level function that performs a single,
97
98
  // RIPEMD160 block transformation using the state from |ctx| and 64 bytes from
98
99
  // |block|.
99
100
  OPENSSL_EXPORT void RIPEMD160_Transform(RIPEMD160_CTX *ctx,
100
- const uint8_t *block);
101
+ const uint8_t block[RIPEMD160_CBLOCK]);
101
102
 
102
103
 
103
104
  #if defined(__cplusplus)
@@ -72,8 +72,14 @@ extern "C" {
72
72
 
73
73
 
74
74
  // Allocation and destruction.
75
+ //
76
+ // An |RSA| object represents a public or private RSA key. A given object may be
77
+ // used concurrently on multiple threads by non-mutating functions, provided no
78
+ // other thread is concurrently calling a mutating function. Unless otherwise
79
+ // documented, functions which take a |const| pointer are non-mutating and
80
+ // functions which take a non-|const| pointer are mutating.
75
81
 
76
- // RSA_new returns a new, empty RSA object or NULL on error.
82
+ // RSA_new returns a new, empty |RSA| object or NULL on error.
77
83
  OPENSSL_EXPORT RSA *RSA_new(void);
78
84
 
79
85
  // RSA_new_method acts the same as |RSA_new| but takes an explicit |ENGINE|.
@@ -83,7 +89,8 @@ OPENSSL_EXPORT RSA *RSA_new_method(const ENGINE *engine);
83
89
  // reference count drops to zero.
84
90
  OPENSSL_EXPORT void RSA_free(RSA *rsa);
85
91
 
86
- // RSA_up_ref increments the reference count of |rsa| and returns one.
92
+ // RSA_up_ref increments the reference count of |rsa| and returns one. It does
93
+ // not mutate |rsa| for thread-safety purposes and may be used concurrently.
87
94
  OPENSSL_EXPORT int RSA_up_ref(RSA *rsa);
88
95
 
89
96
 
@@ -154,7 +161,7 @@ OPENSSL_EXPORT int RSA_set0_crt_params(RSA *rsa, BIGNUM *dmp1, BIGNUM *dmq1,
154
161
  // with event=3 when a suitable value for |p| is found.
155
162
  //
156
163
  // It returns one on success or zero on error.
157
- OPENSSL_EXPORT int RSA_generate_key_ex(RSA *rsa, int bits, BIGNUM *e,
164
+ OPENSSL_EXPORT int RSA_generate_key_ex(RSA *rsa, int bits, const BIGNUM *e,
158
165
  BN_GENCB *cb);
159
166
 
160
167
  // RSA_generate_key_fips behaves like |RSA_generate_key_ex| but performs
@@ -164,12 +171,23 @@ OPENSSL_EXPORT int RSA_generate_key_fips(RSA *rsa, int bits, BN_GENCB *cb);
164
171
 
165
172
 
166
173
  // Encryption / Decryption
174
+ //
175
+ // These functions are considered non-mutating for thread-safety purposes and
176
+ // may be used concurrently.
167
177
 
168
- // Padding types for encryption.
178
+ // RSA_PKCS1_PADDING denotes PKCS#1 v1.5 padding. When used with encryption,
179
+ // this is RSAES-PKCS1-v1_5. When used with signing, this is RSASSA-PKCS1-v1_5.
169
180
  #define RSA_PKCS1_PADDING 1
181
+
182
+ // RSA_NO_PADDING denotes a raw RSA operation.
170
183
  #define RSA_NO_PADDING 3
184
+
185
+ // RSA_PKCS1_OAEP_PADDING denotes the RSAES-OAEP encryption scheme.
171
186
  #define RSA_PKCS1_OAEP_PADDING 4
172
- // RSA_PKCS1_PSS_PADDING can only be used via the EVP interface.
187
+
188
+ // RSA_PKCS1_PSS_PADDING denotes the RSASSA-PSS signature scheme. This value may
189
+ // not be passed into |RSA_sign_raw|, only |EVP_PKEY_CTX_set_rsa_padding|. See
190
+ // also |RSA_sign_pss_mgf1| and |RSA_verify_pss_mgf1|.
173
191
  #define RSA_PKCS1_PSS_PADDING 6
174
192
 
175
193
  // RSA_encrypt encrypts |in_len| bytes from |in| to the public key from |rsa|
@@ -231,6 +249,9 @@ OPENSSL_EXPORT int RSA_private_decrypt(size_t flen, const uint8_t *from,
231
249
 
232
250
 
233
251
  // Signing / Verification
252
+ //
253
+ // These functions are considered non-mutating for thread-safety purposes and
254
+ // may be used concurrently.
234
255
 
235
256
  // RSA_sign signs |in_len| bytes of digest from |in| with |rsa| using
236
257
  // RSASSA-PKCS1-v1_5. It writes, at most, |RSA_size(rsa)| bytes to |out|. On
@@ -272,7 +293,8 @@ OPENSSL_EXPORT int RSA_sign_pss_mgf1(RSA *rsa, size_t *out_len, uint8_t *out,
272
293
  //
273
294
  // The |padding| argument must be one of the |RSA_*_PADDING| values. If in
274
295
  // doubt, |RSA_PKCS1_PADDING| is the most common but |RSA_PKCS1_PSS_PADDING|
275
- // (via the |EVP_PKEY| interface) is preferred for new protocols.
296
+ // (via |RSA_sign_pss_mgf1| or the |EVP_PKEY| interface) is preferred for new
297
+ // protocols.
276
298
  OPENSSL_EXPORT int RSA_sign_raw(RSA *rsa, size_t *out_len, uint8_t *out,
277
299
  size_t max_out, const uint8_t *in,
278
300
  size_t in_len, int padding);
@@ -317,7 +339,8 @@ OPENSSL_EXPORT int RSA_verify_pss_mgf1(RSA *rsa, const uint8_t *msg,
317
339
  //
318
340
  // The |padding| argument must be one of the |RSA_*_PADDING| values. If in
319
341
  // doubt, |RSA_PKCS1_PADDING| is the most common but |RSA_PKCS1_PSS_PADDING|
320
- // (via the |EVP_PKEY| interface) is preferred for new protocols.
342
+ // (via |RSA_verify_pss_mgf1| or the |EVP_PKEY| interface) is preferred for new
343
+ // protocols.
321
344
  OPENSSL_EXPORT int RSA_verify_raw(RSA *rsa, size_t *out_len, uint8_t *out,
322
345
  size_t max_out, const uint8_t *in,
323
346
  size_t in_len, int padding);
@@ -372,8 +395,9 @@ OPENSSL_EXPORT RSA *RSAPrivateKey_dup(const RSA *rsa);
372
395
  // returns zero then a more detailed error is available on the error queue.
373
396
  OPENSSL_EXPORT int RSA_check_key(const RSA *rsa);
374
397
 
375
- // RSA_check_fips performs public key validity tests on |key|. It returns one
376
- // if they pass and zero otherwise. Opaque keys always fail.
398
+ // RSA_check_fips performs public key validity tests on |key|. It returns one if
399
+ // they pass and zero otherwise. Opaque keys always fail. This function does not
400
+ // mutate |rsa| for thread-safety purposes and may be used concurrently.
377
401
  OPENSSL_EXPORT int RSA_check_fips(RSA *key);
378
402
 
379
403
  // RSA_verify_PKCS1_PSS_mgf1 verifies that |EM| is a correct PSS padding of
@@ -390,7 +414,8 @@ OPENSSL_EXPORT int RSA_check_fips(RSA *key);
390
414
  //
391
415
  // This function implements only the low-level padding logic. Use
392
416
  // |RSA_verify_pss_mgf1| instead.
393
- OPENSSL_EXPORT int RSA_verify_PKCS1_PSS_mgf1(RSA *rsa, const uint8_t *mHash,
417
+ OPENSSL_EXPORT int RSA_verify_PKCS1_PSS_mgf1(const RSA *rsa,
418
+ const uint8_t *mHash,
394
419
  const EVP_MD *Hash,
395
420
  const EVP_MD *mgf1Hash,
396
421
  const uint8_t *EM, int sLen);
@@ -407,7 +432,7 @@ OPENSSL_EXPORT int RSA_verify_PKCS1_PSS_mgf1(RSA *rsa, const uint8_t *mHash,
407
432
  //
408
433
  // This function implements only the low-level padding logic. Use
409
434
  // |RSA_sign_pss_mgf1| instead.
410
- OPENSSL_EXPORT int RSA_padding_add_PKCS1_PSS_mgf1(RSA *rsa, uint8_t *EM,
435
+ OPENSSL_EXPORT int RSA_padding_add_PKCS1_PSS_mgf1(const RSA *rsa, uint8_t *EM,
411
436
  const uint8_t *mHash,
412
437
  const EVP_MD *Hash,
413
438
  const EVP_MD *mgf1Hash,
@@ -567,7 +592,7 @@ OPENSSL_EXPORT int i2d_RSAPrivateKey(const RSA *in, uint8_t **outp);
567
592
  //
568
593
  // This function implements only the low-level padding logic. Use
569
594
  // |RSA_sign_pss_mgf1| instead.
570
- OPENSSL_EXPORT int RSA_padding_add_PKCS1_PSS(RSA *rsa, uint8_t *EM,
595
+ OPENSSL_EXPORT int RSA_padding_add_PKCS1_PSS(const RSA *rsa, uint8_t *EM,
571
596
  const uint8_t *mHash,
572
597
  const EVP_MD *Hash, int sLen);
573
598
 
@@ -576,7 +601,7 @@ OPENSSL_EXPORT int RSA_padding_add_PKCS1_PSS(RSA *rsa, uint8_t *EM,
576
601
  //
577
602
  // This function implements only the low-level padding logic. Use
578
603
  // |RSA_verify_pss_mgf1| instead.
579
- OPENSSL_EXPORT int RSA_verify_PKCS1_PSS(RSA *rsa, const uint8_t *mHash,
604
+ OPENSSL_EXPORT int RSA_verify_PKCS1_PSS(const RSA *rsa, const uint8_t *mHash,
580
605
  const EVP_MD *Hash, const uint8_t *EM,
581
606
  int sLen);
582
607
 
@@ -589,6 +614,10 @@ OPENSSL_EXPORT int RSA_padding_add_PKCS1_OAEP(uint8_t *to, size_t to_len,
589
614
  const uint8_t *param,
590
615
  size_t param_len);
591
616
 
617
+ // RSA_print prints a textual representation of |rsa| to |bio|. It returns one
618
+ // on success or zero otherwise.
619
+ OPENSSL_EXPORT int RSA_print(BIO *bio, const RSA *rsa, int indent);
620
+
592
621
 
593
622
  struct rsa_meth_st {
594
623
  struct openssl_method_common_st common;
@@ -694,11 +723,12 @@ struct rsa_st {
694
723
 
695
724
  extern "C++" {
696
725
 
697
- namespace bssl {
726
+ BSSL_NAMESPACE_BEGIN
698
727
 
699
728
  BORINGSSL_MAKE_DELETER(RSA, RSA_free)
729
+ BORINGSSL_MAKE_UP_REF(RSA, RSA_up_ref)
700
730
 
701
- } // namespace bssl
731
+ BSSL_NAMESPACE_END
702
732
 
703
733
  } // extern C++
704
734
 
@@ -752,5 +782,6 @@ BORINGSSL_MAKE_DELETER(RSA, RSA_free)
752
782
  #define RSA_R_WRONG_SIGNATURE_LENGTH 145
753
783
  #define RSA_R_PUBLIC_KEY_VALIDATION_FAILED 146
754
784
  #define RSA_R_D_OUT_OF_RANGE 147
785
+ #define RSA_R_BLOCK_TYPE_IS_NOT_02 148
755
786
 
756
787
  #endif // OPENSSL_HEADER_RSA_H