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
@@ -84,6 +84,12 @@ extern "C" {
84
84
 
85
85
 
86
86
  // EC key objects.
87
+ //
88
+ // An |EC_KEY| object represents a public or private EC key. A given object may
89
+ // be used concurrently on multiple threads by non-mutating functions, provided
90
+ // no other thread is concurrently calling a mutating function. Unless otherwise
91
+ // documented, functions which take a |const| pointer are non-mutating and
92
+ // functions which take a non-|const| pointer are mutating.
87
93
 
88
94
  // EC_KEY_new returns a fresh |EC_KEY| object or NULL on error.
89
95
  OPENSSL_EXPORT EC_KEY *EC_KEY_new(void);
@@ -102,7 +108,8 @@ OPENSSL_EXPORT void EC_KEY_free(EC_KEY *key);
102
108
  // EC_KEY_dup returns a fresh copy of |src| or NULL on error.
103
109
  OPENSSL_EXPORT EC_KEY *EC_KEY_dup(const EC_KEY *src);
104
110
 
105
- // EC_KEY_up_ref increases the reference count of |key| and returns one.
111
+ // EC_KEY_up_ref increases the reference count of |key| and returns one. It does
112
+ // not mutate |key| for thread-safety purposes and may be used concurrently.
106
113
  OPENSSL_EXPORT int EC_KEY_up_ref(EC_KEY *key);
107
114
 
108
115
  // EC_KEY_is_opaque returns one if |key| is opaque and doesn't expose its key
@@ -113,8 +120,8 @@ OPENSSL_EXPORT int EC_KEY_is_opaque(const EC_KEY *key);
113
120
  OPENSSL_EXPORT const EC_GROUP *EC_KEY_get0_group(const EC_KEY *key);
114
121
 
115
122
  // EC_KEY_set_group sets the |EC_GROUP| object that |key| will use to |group|.
116
- // It returns one on success and zero otherwise. If |key| already has a group,
117
- // it is an error to change to a different one.
123
+ // It returns one on success and zero if |key| is already configured with a
124
+ // different group.
118
125
  OPENSSL_EXPORT int EC_KEY_set_group(EC_KEY *key, const EC_GROUP *group);
119
126
 
120
127
  // EC_KEY_get0_private_key returns a pointer to the private key inside |key|.
@@ -123,7 +130,7 @@ OPENSSL_EXPORT const BIGNUM *EC_KEY_get0_private_key(const EC_KEY *key);
123
130
  // EC_KEY_set_private_key sets the private key of |key| to |priv|. It returns
124
131
  // one on success and zero otherwise. |key| must already have had a group
125
132
  // configured (see |EC_KEY_set_group| and |EC_KEY_new_by_curve_name|).
126
- OPENSSL_EXPORT int EC_KEY_set_private_key(EC_KEY *key, const BIGNUM *prv);
133
+ OPENSSL_EXPORT int EC_KEY_set_private_key(EC_KEY *key, const BIGNUM *priv);
127
134
 
128
135
  // EC_KEY_get0_public_key returns a pointer to the public key point inside
129
136
  // |key|.
@@ -167,8 +174,14 @@ OPENSSL_EXPORT int EC_KEY_check_fips(const EC_KEY *key);
167
174
  // EC_KEY_set_public_key_affine_coordinates sets the public key in |key| to
168
175
  // (|x|, |y|). It returns one on success and zero otherwise.
169
176
  OPENSSL_EXPORT int EC_KEY_set_public_key_affine_coordinates(EC_KEY *key,
170
- BIGNUM *x,
171
- BIGNUM *y);
177
+ const BIGNUM *x,
178
+ const BIGNUM *y);
179
+
180
+ // EC_KEY_key2buf encodes the public key in |key| to an allocated octet string
181
+ // and sets |*out_buf| to point to it. It returns the length of the encoded
182
+ // octet string or zero if an error occurred.
183
+ OPENSSL_EXPORT size_t EC_KEY_key2buf(EC_KEY *key, point_conversion_form_t form,
184
+ unsigned char **out_buf, BN_CTX *ctx);
172
185
 
173
186
 
174
187
  // Key generation.
@@ -182,6 +195,20 @@ OPENSSL_EXPORT int EC_KEY_generate_key(EC_KEY *key);
182
195
  // additional checks for FIPS compliance.
183
196
  OPENSSL_EXPORT int EC_KEY_generate_key_fips(EC_KEY *key);
184
197
 
198
+ // EC_KEY_derive_from_secret deterministically derives a private key for |group|
199
+ // from an input secret using HKDF-SHA256. It returns a newly-allocated |EC_KEY|
200
+ // on success or NULL on error. |secret| must not be used in any other
201
+ // algorithm. If using a base secret for multiple operations, derive separate
202
+ // values with a KDF such as HKDF first.
203
+ //
204
+ // Note this function implements an arbitrary derivation scheme, rather than any
205
+ // particular standard one. New protocols are recommended to use X25519 and
206
+ // Ed25519, which have standard byte import functions. See
207
+ // |X25519_public_from_private| and |ED25519_keypair_from_seed|.
208
+ OPENSSL_EXPORT EC_KEY *EC_KEY_derive_from_secret(const EC_GROUP *group,
209
+ const uint8_t *secret,
210
+ size_t secret_len);
211
+
185
212
 
186
213
  // Serialisation.
187
214
 
@@ -329,11 +356,12 @@ OPENSSL_EXPORT int i2o_ECPublicKey(const EC_KEY *key, unsigned char **outp);
329
356
 
330
357
  extern "C++" {
331
358
 
332
- namespace bssl {
359
+ BSSL_NAMESPACE_BEGIN
333
360
 
334
361
  BORINGSSL_MAKE_DELETER(EC_KEY, EC_KEY_free)
362
+ BORINGSSL_MAKE_UP_REF(EC_KEY, EC_KEY_up_ref)
335
363
 
336
- } // namespace bssl
364
+ BSSL_NAMESPACE_END
337
365
 
338
366
  } // extern C++
339
367
 
@@ -89,6 +89,22 @@ OPENSSL_EXPORT int ECDH_compute_key(
89
89
  void *out, size_t outlen, const EC_POINT *pub_key, const EC_KEY *priv_key,
90
90
  void *(*kdf)(const void *in, size_t inlen, void *out, size_t *outlen));
91
91
 
92
+ // ECDH_compute_key_fips calculates the shared key between |pub_key| and
93
+ // |priv_key| and hashes it with the appropriate SHA function for |out_len|. The
94
+ // only value values for |out_len| are thus 24 (SHA-224), 32 (SHA-256), 48
95
+ // (SHA-384), and 64 (SHA-512). It returns one on success and zero on error.
96
+ //
97
+ // Note that the return value is different to |ECDH_compute_key|: it returns an
98
+ // error flag (as is common for BoringSSL) rather than the number of bytes
99
+ // written.
100
+ //
101
+ // This function allows the FIPS module to compute an ECDH and KDF within the
102
+ // module boundary without taking an arbitrary function pointer for the KDF,
103
+ // which isn't very FIPSy.
104
+ OPENSSL_EXPORT int ECDH_compute_key_fips(uint8_t *out, size_t out_len,
105
+ const EC_POINT *pub_key,
106
+ const EC_KEY *priv_key);
107
+
92
108
 
93
109
  #if defined(__cplusplus)
94
110
  } // extern C
@@ -97,5 +113,6 @@ OPENSSL_EXPORT int ECDH_compute_key(
97
113
  #define ECDH_R_KDF_FAILED 100
98
114
  #define ECDH_R_NO_PRIVATE_VALUE 101
99
115
  #define ECDH_R_POINT_ARITHMETIC_FAILURE 102
116
+ #define ECDH_R_UNKNOWN_DIGEST_LENGTH 103
100
117
 
101
118
  #endif // OPENSSL_HEADER_ECDH_H
@@ -86,7 +86,7 @@ OPENSSL_EXPORT int ECDSA_verify(int type, const uint8_t *digest,
86
86
  size_t sig_len, const EC_KEY *key);
87
87
 
88
88
  // ECDSA_size returns the maximum size of an ECDSA signature using |key|. It
89
- // returns zero on error.
89
+ // returns zero if |key| is NULL or if it doesn't have a group set.
90
90
  OPENSSL_EXPORT size_t ECDSA_size(const EC_KEY *key);
91
91
 
92
92
 
@@ -179,11 +179,11 @@ OPENSSL_EXPORT int i2d_ECDSA_SIG(const ECDSA_SIG *sig, uint8_t **outp);
179
179
 
180
180
  extern "C++" {
181
181
 
182
- namespace bssl {
182
+ BSSL_NAMESPACE_BEGIN
183
183
 
184
184
  BORINGSSL_MAKE_DELETER(ECDSA_SIG, ECDSA_SIG_free)
185
185
 
186
- } // namespace bssl
186
+ BSSL_NAMESPACE_END
187
187
 
188
188
  } // extern C++
189
189
 
@@ -40,8 +40,8 @@ extern "C" {
40
40
  OPENSSL_EXPORT ENGINE *ENGINE_new(void);
41
41
 
42
42
  // ENGINE_free decrements the reference counts for all methods linked from
43
- // |engine| and frees |engine| itself.
44
- OPENSSL_EXPORT void ENGINE_free(ENGINE *engine);
43
+ // |engine| and frees |engine| itself. It returns one.
44
+ OPENSSL_EXPORT int ENGINE_free(ENGINE *engine);
45
45
 
46
46
 
47
47
  // Method accessors.
@@ -94,11 +94,11 @@ struct openssl_method_common_st {
94
94
 
95
95
  extern "C++" {
96
96
 
97
- namespace bssl {
97
+ BSSL_NAMESPACE_BEGIN
98
98
 
99
99
  BORINGSSL_MAKE_DELETER(ENGINE, ENGINE_free)
100
100
 
101
- } // namespace bssl
101
+ BSSL_NAMESPACE_END
102
102
 
103
103
  } // extern C++
104
104
 
@@ -152,6 +152,9 @@ OPENSSL_EXPORT void ERR_load_ERR_strings(void);
152
152
  // ERR_load_crypto_strings does nothing.
153
153
  OPENSSL_EXPORT void ERR_load_crypto_strings(void);
154
154
 
155
+ // ERR_load_RAND_strings does nothing.
156
+ OPENSSL_EXPORT void ERR_load_RAND_strings(void);
157
+
155
158
  // ERR_free_strings does nothing.
156
159
  OPENSSL_EXPORT void ERR_free_strings(void);
157
160
 
@@ -80,6 +80,12 @@ extern "C" {
80
80
 
81
81
 
82
82
  // Public key objects.
83
+ //
84
+ // An |EVP_PKEY| object represents a public or private key. A given object may
85
+ // be used concurrently on multiple threads by non-mutating functions, provided
86
+ // no other thread is concurrently calling a mutating function. Unless otherwise
87
+ // documented, functions which take a |const| pointer are non-mutating and
88
+ // functions which take a non-|const| pointer are mutating.
83
89
 
84
90
  // EVP_PKEY_new creates a new, empty public-key object and returns it or NULL
85
91
  // on allocation failure.
@@ -89,7 +95,9 @@ OPENSSL_EXPORT EVP_PKEY *EVP_PKEY_new(void);
89
95
  // itself.
90
96
  OPENSSL_EXPORT void EVP_PKEY_free(EVP_PKEY *pkey);
91
97
 
92
- // EVP_PKEY_up_ref increments the reference count of |pkey| and returns one.
98
+ // EVP_PKEY_up_ref increments the reference count of |pkey| and returns one. It
99
+ // does not mutate |pkey| for thread-safety purposes and may be used
100
+ // concurrently.
93
101
  OPENSSL_EXPORT int EVP_PKEY_up_ref(EVP_PKEY *pkey);
94
102
 
95
103
  // EVP_PKEY_is_opaque returns one if |pkey| is opaque. Opaque keys are backed by
@@ -121,7 +129,7 @@ OPENSSL_EXPORT int EVP_PKEY_size(const EVP_PKEY *pkey);
121
129
  // EVP_PKEY_bits returns the "size", in bits, of |pkey|. For an RSA key, this
122
130
  // returns the bit length of the modulus. For an EC key, this returns the bit
123
131
  // length of the group order.
124
- OPENSSL_EXPORT int EVP_PKEY_bits(EVP_PKEY *pkey);
132
+ OPENSSL_EXPORT int EVP_PKEY_bits(const EVP_PKEY *pkey);
125
133
 
126
134
  // EVP_PKEY_id returns the type of |pkey|, which is one of the |EVP_PKEY_*|
127
135
  // values.
@@ -136,51 +144,48 @@ OPENSSL_EXPORT int EVP_PKEY_type(int nid);
136
144
  //
137
145
  // The following functions get and set the underlying public key in an
138
146
  // |EVP_PKEY| object. The |set1| functions take an additional reference to the
139
- // underlying key and return one on success or zero on error. The |assign|
140
- // functions adopt the caller's reference. The |get1| functions return a fresh
141
- // reference to the underlying object or NULL if |pkey| is not of the correct
142
- // type. The |get0| functions behave the same but return a non-owning
143
- // pointer.
147
+ // underlying key and return one on success or zero if |key| is NULL. The
148
+ // |assign| functions adopt the caller's reference and return one on success or
149
+ // zero if |key| is NULL. The |get1| functions return a fresh reference to the
150
+ // underlying object or NULL if |pkey| is not of the correct type. The |get0|
151
+ // functions behave the same but return a non-owning pointer.
152
+ //
153
+ // The |get0| and |get1| functions take |const| pointers and are thus
154
+ // non-mutating for thread-safety purposes, but mutating functions on the
155
+ // returned lower-level objects are considered to also mutate the |EVP_PKEY| and
156
+ // may not be called concurrently with other operations on the |EVP_PKEY|.
144
157
 
145
158
  OPENSSL_EXPORT int EVP_PKEY_set1_RSA(EVP_PKEY *pkey, RSA *key);
146
159
  OPENSSL_EXPORT int EVP_PKEY_assign_RSA(EVP_PKEY *pkey, RSA *key);
147
- OPENSSL_EXPORT RSA *EVP_PKEY_get0_RSA(EVP_PKEY *pkey);
148
- OPENSSL_EXPORT RSA *EVP_PKEY_get1_RSA(EVP_PKEY *pkey);
160
+ OPENSSL_EXPORT RSA *EVP_PKEY_get0_RSA(const EVP_PKEY *pkey);
161
+ OPENSSL_EXPORT RSA *EVP_PKEY_get1_RSA(const EVP_PKEY *pkey);
149
162
 
150
163
  OPENSSL_EXPORT int EVP_PKEY_set1_DSA(EVP_PKEY *pkey, DSA *key);
151
164
  OPENSSL_EXPORT int EVP_PKEY_assign_DSA(EVP_PKEY *pkey, DSA *key);
152
- OPENSSL_EXPORT DSA *EVP_PKEY_get0_DSA(EVP_PKEY *pkey);
153
- OPENSSL_EXPORT DSA *EVP_PKEY_get1_DSA(EVP_PKEY *pkey);
165
+ OPENSSL_EXPORT DSA *EVP_PKEY_get0_DSA(const EVP_PKEY *pkey);
166
+ OPENSSL_EXPORT DSA *EVP_PKEY_get1_DSA(const EVP_PKEY *pkey);
154
167
 
155
168
  OPENSSL_EXPORT int EVP_PKEY_set1_EC_KEY(EVP_PKEY *pkey, EC_KEY *key);
156
169
  OPENSSL_EXPORT int EVP_PKEY_assign_EC_KEY(EVP_PKEY *pkey, EC_KEY *key);
157
- OPENSSL_EXPORT EC_KEY *EVP_PKEY_get0_EC_KEY(EVP_PKEY *pkey);
158
- OPENSSL_EXPORT EC_KEY *EVP_PKEY_get1_EC_KEY(EVP_PKEY *pkey);
159
-
160
- // EVP_PKEY_new_ed25519_public returns a newly allocated |EVP_PKEY| wrapping an
161
- // Ed25519 public key, or NULL on allocation error.
162
- OPENSSL_EXPORT EVP_PKEY *EVP_PKEY_new_ed25519_public(
163
- const uint8_t public_key[32]);
164
-
165
- // EVP_PKEY_new_ed25519_private returns a newly allocated |EVP_PKEY| wrapping an
166
- // Ed25519 private key, or NULL on allocation error.
167
- OPENSSL_EXPORT EVP_PKEY *EVP_PKEY_new_ed25519_private(
168
- const uint8_t private_key[64]);
170
+ OPENSSL_EXPORT EC_KEY *EVP_PKEY_get0_EC_KEY(const EVP_PKEY *pkey);
171
+ OPENSSL_EXPORT EC_KEY *EVP_PKEY_get1_EC_KEY(const EVP_PKEY *pkey);
169
172
 
170
173
  #define EVP_PKEY_NONE NID_undef
171
174
  #define EVP_PKEY_RSA NID_rsaEncryption
175
+ #define EVP_PKEY_RSA_PSS NID_rsassaPss
172
176
  #define EVP_PKEY_DSA NID_dsa
173
177
  #define EVP_PKEY_EC NID_X9_62_id_ecPublicKey
174
178
  #define EVP_PKEY_ED25519 NID_ED25519
179
+ #define EVP_PKEY_X25519 NID_X25519
175
180
 
176
181
  // EVP_PKEY_assign sets the underlying key of |pkey| to |key|, which must be of
177
- // the given type. The |type| argument should be one of the |EVP_PKEY_*|
178
- // values.
182
+ // the given type. It returns one if successful or zero if the |type| argument
183
+ // is not one of the |EVP_PKEY_*| values or if |key| is NULL.
179
184
  OPENSSL_EXPORT int EVP_PKEY_assign(EVP_PKEY *pkey, int type, void *key);
180
185
 
181
- // EVP_PKEY_set_type sets the type of |pkey| to |type|, which should be one of
182
- // the |EVP_PKEY_*| values. It returns one if successful or zero otherwise. If
183
- // |pkey| is NULL, it simply reports whether the type is known.
186
+ // EVP_PKEY_set_type sets the type of |pkey| to |type|. It returns one if
187
+ // successful or zero if the |type| argument is not one of the |EVP_PKEY_*|
188
+ // values. If |pkey| is NULL, it simply reports whether the type is known.
184
189
  OPENSSL_EXPORT int EVP_PKEY_set_type(EVP_PKEY *pkey, int type);
185
190
 
186
191
  // EVP_PKEY_cmp_parameters compares the parameters of |a| and |b|. It returns
@@ -195,7 +200,8 @@ OPENSSL_EXPORT int EVP_PKEY_cmp_parameters(const EVP_PKEY *a,
195
200
 
196
201
  // EVP_parse_public_key decodes a DER-encoded SubjectPublicKeyInfo structure
197
202
  // (RFC 5280) from |cbs| and advances |cbs|. It returns a newly-allocated
198
- // |EVP_PKEY| or NULL on error.
203
+ // |EVP_PKEY| or NULL on error. If the key is an EC key, the curve is guaranteed
204
+ // to be set.
199
205
  //
200
206
  // The caller must check the type of the parsed public key to ensure it is
201
207
  // suitable and validate other desired key properties such as RSA modulus size
@@ -226,6 +232,48 @@ OPENSSL_EXPORT EVP_PKEY *EVP_parse_private_key(CBS *cbs);
226
232
  OPENSSL_EXPORT int EVP_marshal_private_key(CBB *cbb, const EVP_PKEY *key);
227
233
 
228
234
 
235
+ // Raw keys
236
+ //
237
+ // Some keys types support a "raw" serialization. Currently the only supported
238
+ // raw format is Ed25519, where the public key and private key formats are those
239
+ // specified in RFC 8032. Note the RFC 8032 private key format is the 32-byte
240
+ // prefix of |ED25519_sign|'s 64-byte private key.
241
+
242
+ // EVP_PKEY_new_raw_private_key returns a newly allocated |EVP_PKEY| wrapping a
243
+ // private key of the specified type. It returns one on success and zero on
244
+ // error.
245
+ OPENSSL_EXPORT EVP_PKEY *EVP_PKEY_new_raw_private_key(int type, ENGINE *unused,
246
+ const uint8_t *in,
247
+ size_t len);
248
+
249
+ // EVP_PKEY_new_raw_public_key returns a newly allocated |EVP_PKEY| wrapping a
250
+ // public key of the specified type. It returns one on success and zero on
251
+ // error.
252
+ OPENSSL_EXPORT EVP_PKEY *EVP_PKEY_new_raw_public_key(int type, ENGINE *unused,
253
+ const uint8_t *in,
254
+ size_t len);
255
+
256
+ // EVP_PKEY_get_raw_private_key outputs the private key for |pkey| in raw form.
257
+ // If |out| is NULL, it sets |*out_len| to the size of the raw private key.
258
+ // Otherwise, it writes at most |*out_len| bytes to |out| and sets |*out_len| to
259
+ // the number of bytes written.
260
+ //
261
+ // It returns one on success and zero if |pkey| has no private key, the key
262
+ // type does not support a raw format, or the buffer is too small.
263
+ OPENSSL_EXPORT int EVP_PKEY_get_raw_private_key(const EVP_PKEY *pkey,
264
+ uint8_t *out, size_t *out_len);
265
+
266
+ // EVP_PKEY_get_raw_public_key outputs the public key for |pkey| in raw form.
267
+ // If |out| is NULL, it sets |*out_len| to the size of the raw public key.
268
+ // Otherwise, it writes at most |*out_len| bytes to |out| and sets |*out_len| to
269
+ // the number of bytes written.
270
+ //
271
+ // It returns one on success and zero if |pkey| has no public key, the key
272
+ // type does not support a raw format, or the buffer is too small.
273
+ OPENSSL_EXPORT int EVP_PKEY_get_raw_public_key(const EVP_PKEY *pkey,
274
+ uint8_t *out, size_t *out_len);
275
+
276
+
229
277
  // Signing
230
278
 
231
279
  // EVP_DigestSignInit sets up |ctx| for a signing operation with |type| and
@@ -238,6 +286,9 @@ OPENSSL_EXPORT int EVP_marshal_private_key(CBB *cbb, const EVP_PKEY *key);
238
286
  // Ed25519, |type| should be NULL. The |EVP_MD_CTX| itself is unused but is
239
287
  // present so the API is uniform. See |EVP_DigestSign|.
240
288
  //
289
+ // This function does not mutate |pkey| for thread-safety purposes and may be
290
+ // used concurrently with other non-mutating functions on |pkey|.
291
+ //
241
292
  // It returns one on success, or zero on error.
242
293
  OPENSSL_EXPORT int EVP_DigestSignInit(EVP_MD_CTX *ctx, EVP_PKEY_CTX **pctx,
243
294
  const EVP_MD *type, ENGINE *e,
@@ -291,6 +342,9 @@ OPENSSL_EXPORT int EVP_DigestSign(EVP_MD_CTX *ctx, uint8_t *out_sig,
291
342
  // Ed25519, |type| should be NULL. The |EVP_MD_CTX| itself is unused but is
292
343
  // present so the API is uniform. See |EVP_DigestVerify|.
293
344
  //
345
+ // This function does not mutate |pkey| for thread-safety purposes and may be
346
+ // used concurrently with other non-mutating functions on |pkey|.
347
+ //
294
348
  // It returns one on success, or zero on error.
295
349
  OPENSSL_EXPORT int EVP_DigestVerifyInit(EVP_MD_CTX *ctx, EVP_PKEY_CTX **pctx,
296
350
  const EVP_MD *type, ENGINE *e,
@@ -351,7 +405,9 @@ OPENSSL_EXPORT int EVP_SignUpdate(EVP_MD_CTX *ctx, const void *data,
351
405
  // It returns one on success and zero otherwise.
352
406
  //
353
407
  // It does not modify |ctx|, thus it's possible to continue to use |ctx| in
354
- // order to sign a longer message.
408
+ // order to sign a longer message. It also does not mutate |pkey| for
409
+ // thread-safety purposes and may be used concurrently with other non-mutating
410
+ // functions on |pkey|.
355
411
  OPENSSL_EXPORT int EVP_SignFinal(const EVP_MD_CTX *ctx, uint8_t *sig,
356
412
  unsigned int *out_sig_len, EVP_PKEY *pkey);
357
413
 
@@ -384,7 +440,9 @@ OPENSSL_EXPORT int EVP_VerifyUpdate(EVP_MD_CTX *ctx, const void *data,
384
440
  // It returns one on success and zero otherwise.
385
441
  //
386
442
  // It does not modify |ctx|, thus it's possible to continue to use |ctx| in
387
- // order to sign a longer message.
443
+ // order to verify a longer message. It also does not mutate |pkey| for
444
+ // thread-safety purposes and may be used concurrently with other non-mutating
445
+ // functions on |pkey|.
388
446
  OPENSSL_EXPORT int EVP_VerifyFinal(EVP_MD_CTX *ctx, const uint8_t *sig,
389
447
  size_t sig_len, EVP_PKEY *pkey);
390
448
 
@@ -415,7 +473,7 @@ OPENSSL_EXPORT int EVP_PKEY_print_params(BIO *out, const EVP_PKEY *pkey,
415
473
 
416
474
  // PKCS5_PBKDF2_HMAC computes |iterations| iterations of PBKDF2 of |password|
417
475
  // and |salt|, using |digest|, and outputs |key_len| bytes to |out_key|. It
418
- // returns one on success and zero on error.
476
+ // returns one on success and zero on allocation failure or if iterations is 0.
419
477
  OPENSSL_EXPORT int PKCS5_PBKDF2_HMAC(const char *password, size_t password_len,
420
478
  const uint8_t *salt, size_t salt_len,
421
479
  unsigned iterations, const EVP_MD *digest,
@@ -431,12 +489,20 @@ OPENSSL_EXPORT int PKCS5_PBKDF2_HMAC_SHA1(const char *password,
431
489
 
432
490
  // EVP_PBE_scrypt expands |password| into a secret key of length |key_len| using
433
491
  // scrypt, as described in RFC 7914, and writes the result to |out_key|. It
434
- // returns one on success and zero on error.
492
+ // returns one on success and zero on allocation failure, if the memory required
493
+ // for the operation exceeds |max_mem|, or if any of the parameters are invalid
494
+ // as described below.
435
495
  //
436
496
  // |N|, |r|, and |p| are as described in RFC 7914 section 6. They determine the
437
- // cost of the operation. If the memory required exceeds |max_mem|, the
438
- // operation will fail instead. If |max_mem| is zero, a defult limit of 32MiB
439
- // will be used.
497
+ // cost of the operation. If |max_mem| is zero, a defult limit of 32MiB will be
498
+ // used.
499
+ //
500
+ // The parameters are considered invalid under any of the following conditions:
501
+ // - |r| or |p| are zero
502
+ // - |p| > (2^30 - 1) / |r|
503
+ // - |N| is not a power of two
504
+ // - |N| > 2^32
505
+ // - |N| > 2^(128 * |r| / 8)
440
506
  OPENSSL_EXPORT int EVP_PBE_scrypt(const char *password, size_t password_len,
441
507
  const uint8_t *salt, size_t salt_len,
442
508
  uint64_t N, uint64_t r, uint64_t p,
@@ -613,9 +679,23 @@ OPENSSL_EXPORT int EVP_PKEY_derive(EVP_PKEY_CTX *ctx, uint8_t *key,
613
679
  OPENSSL_EXPORT int EVP_PKEY_keygen_init(EVP_PKEY_CTX *ctx);
614
680
 
615
681
  // EVP_PKEY_keygen performs a key generation operation using the values from
616
- // |ctx| and sets |*ppkey| to a fresh |EVP_PKEY| containing the resulting key.
682
+ // |ctx|. If |*out_pkey| is non-NULL, it overwrites |*out_pkey| with the
683
+ // resulting key. Otherwise, it sets |*out_pkey| to a newly-allocated |EVP_PKEY|
684
+ // containing the result. It returns one on success or zero on error.
685
+ OPENSSL_EXPORT int EVP_PKEY_keygen(EVP_PKEY_CTX *ctx, EVP_PKEY **out_pkey);
686
+
687
+ // EVP_PKEY_paramgen_init initialises an |EVP_PKEY_CTX| for a parameter
688
+ // generation operation. It should be called before |EVP_PKEY_paramgen|.
689
+ //
617
690
  // It returns one on success or zero on error.
618
- OPENSSL_EXPORT int EVP_PKEY_keygen(EVP_PKEY_CTX *ctx, EVP_PKEY **ppkey);
691
+ OPENSSL_EXPORT int EVP_PKEY_paramgen_init(EVP_PKEY_CTX *ctx);
692
+
693
+ // EVP_PKEY_paramgen performs a parameter generation using the values from
694
+ // |ctx|. If |*out_pkey| is non-NULL, it overwrites |*out_pkey| with the
695
+ // resulting parameters, but no key. Otherwise, it sets |*out_pkey| to a
696
+ // newly-allocated |EVP_PKEY| containing the result. It returns one on success
697
+ // or zero on error.
698
+ OPENSSL_EXPORT int EVP_PKEY_paramgen(EVP_PKEY_CTX *ctx, EVP_PKEY **out_pkey);
619
699
 
620
700
 
621
701
  // Generic control functions.
@@ -713,6 +793,15 @@ OPENSSL_EXPORT int EVP_PKEY_CTX_get0_rsa_oaep_label(EVP_PKEY_CTX *ctx,
713
793
  const uint8_t **out_label);
714
794
 
715
795
 
796
+ // EC specific control functions.
797
+
798
+ // EVP_PKEY_CTX_set_ec_paramgen_curve_nid sets the curve used for
799
+ // |EVP_PKEY_keygen| or |EVP_PKEY_paramgen| operations to |nid|. It returns one
800
+ // on success and zero on error.
801
+ OPENSSL_EXPORT int EVP_PKEY_CTX_set_ec_paramgen_curve_nid(EVP_PKEY_CTX *ctx,
802
+ int nid);
803
+
804
+
716
805
  // Deprecated functions.
717
806
 
718
807
  // EVP_PKEY_DH is defined for compatibility, but it is impossible to create an
@@ -769,7 +858,7 @@ OPENSSL_EXPORT int i2d_PrivateKey(const EVP_PKEY *key, uint8_t **outp);
769
858
  // EC keys are serialized as an EC point per SEC 1.
770
859
  //
771
860
  // Use |RSA_marshal_public_key| or |EC_POINT_point2cbb| instead.
772
- OPENSSL_EXPORT int i2d_PublicKey(EVP_PKEY *key, uint8_t **outp);
861
+ OPENSSL_EXPORT int i2d_PublicKey(const EVP_PKEY *key, uint8_t **outp);
773
862
 
774
863
  // d2i_PrivateKey parses an ASN.1, DER-encoded, private key from |len| bytes at
775
864
  // |*inp|. If |out| is not NULL then, on exit, a pointer to the result is in
@@ -793,8 +882,73 @@ OPENSSL_EXPORT EVP_PKEY *d2i_PrivateKey(int type, EVP_PKEY **out,
793
882
  OPENSSL_EXPORT EVP_PKEY *d2i_AutoPrivateKey(EVP_PKEY **out, const uint8_t **inp,
794
883
  long len);
795
884
 
885
+ // d2i_PublicKey parse a public key from |len| bytes at |*inp| in a type-
886
+ // specific format specified by |type|. If |out| is not NULL then, on exit, a
887
+ // pointer to the result is in |*out|. Note that, even if |*out| is already non-
888
+ // NULL on entry, it will not be written to. Rather, a fresh |EVP_PKEY| is
889
+ // allocated and the previous one is freed. On successful exit, |*inp| is
890
+ // advanced past the decoded key. It returns the result or NULL on error.
891
+ //
892
+ // RSA keys are parsed as a DER-encoded RSAPublicKey (RFC 3447) structure.
893
+ // Parsing EC keys is not supported by this function.
894
+ //
895
+ // Use |RSA_parse_public_key| instead.
896
+ OPENSSL_EXPORT EVP_PKEY *d2i_PublicKey(int type, EVP_PKEY **out,
897
+ const uint8_t **inp, long len);
898
+
796
899
  // EVP_PKEY_get0_DH returns NULL.
797
- OPENSSL_EXPORT DH *EVP_PKEY_get0_DH(EVP_PKEY *pkey);
900
+ OPENSSL_EXPORT DH *EVP_PKEY_get0_DH(const EVP_PKEY *pkey);
901
+
902
+ // EVP_PKEY_get1_DH returns NULL.
903
+ OPENSSL_EXPORT DH *EVP_PKEY_get1_DH(const EVP_PKEY *pkey);
904
+
905
+ // EVP_PKEY_CTX_set_ec_param_enc returns one if |encoding| is
906
+ // |OPENSSL_EC_NAMED_CURVE| or zero with an error otherwise.
907
+ OPENSSL_EXPORT int EVP_PKEY_CTX_set_ec_param_enc(EVP_PKEY_CTX *ctx,
908
+ int encoding);
909
+
910
+ // EVP_PKEY_set1_tls_encodedpoint replaces |pkey| with a public key encoded by
911
+ // |in|. It returns one on success and zero on error.
912
+ //
913
+ // This function only works on X25519 keys.
914
+ OPENSSL_EXPORT int EVP_PKEY_set1_tls_encodedpoint(EVP_PKEY *pkey,
915
+ const uint8_t *in,
916
+ size_t len);
917
+
918
+ // EVP_PKEY_get1_tls_encodedpoint sets |*out_ptr| to a newly-allocated buffer
919
+ // containing the raw encoded public key for |pkey|. The caller must call
920
+ // |OPENSSL_free| to release this buffer. The function returns the length of the
921
+ // buffer on success and zero on error.
922
+ //
923
+ // This function only works on X25519 keys.
924
+ OPENSSL_EXPORT size_t EVP_PKEY_get1_tls_encodedpoint(const EVP_PKEY *pkey,
925
+ uint8_t **out_ptr);
926
+
927
+ // EVP_PKEY_base_id calls |EVP_PKEY_id|.
928
+ OPENSSL_EXPORT int EVP_PKEY_base_id(const EVP_PKEY *pkey);
929
+
930
+
931
+ // Preprocessor compatibility section (hidden).
932
+ //
933
+ // Historically, a number of APIs were implemented in OpenSSL as macros and
934
+ // constants to 'ctrl' functions. To avoid breaking #ifdefs in consumers, this
935
+ // section defines a number of legacy macros.
936
+
937
+ // |BORINGSSL_PREFIX| already makes each of these symbols into macros, so there
938
+ // is no need to define conflicting macros.
939
+ #if !defined(BORINGSSL_PREFIX)
940
+ #define EVP_PKEY_CTX_set_rsa_oaep_md EVP_PKEY_CTX_set_rsa_oaep_md
941
+ #define EVP_PKEY_CTX_set0_rsa_oaep_label EVP_PKEY_CTX_set0_rsa_oaep_label
942
+ #endif
943
+
944
+
945
+ // Nodejs compatibility section (hidden).
946
+ //
947
+ // These defines exist for node.js, with the hope that we can eliminate the
948
+ // need for them over time.
949
+
950
+ #define EVPerr(function, reason) \
951
+ ERR_put_error(ERR_LIB_EVP, 0, reason, __FILE__, __LINE__)
798
952
 
799
953
 
800
954
  // Private structures.
@@ -824,12 +978,13 @@ struct evp_pkey_st {
824
978
  } // extern C
825
979
 
826
980
  extern "C++" {
827
- namespace bssl {
981
+ BSSL_NAMESPACE_BEGIN
828
982
 
829
983
  BORINGSSL_MAKE_DELETER(EVP_PKEY, EVP_PKEY_free)
984
+ BORINGSSL_MAKE_UP_REF(EVP_PKEY, EVP_PKEY_up_ref)
830
985
  BORINGSSL_MAKE_DELETER(EVP_PKEY_CTX, EVP_PKEY_CTX_free)
831
986
 
832
- } // namespace bssl
987
+ BSSL_NAMESPACE_END
833
988
 
834
989
  } // extern C++
835
990
 
@@ -869,5 +1024,7 @@ BORINGSSL_MAKE_DELETER(EVP_PKEY_CTX, EVP_PKEY_CTX_free)
869
1024
  #define EVP_R_INVALID_SIGNATURE 131
870
1025
  #define EVP_R_MEMORY_LIMIT_EXCEEDED 132
871
1026
  #define EVP_R_INVALID_PARAMETERS 133
1027
+ #define EVP_R_INVALID_PEER_KEY 134
1028
+ #define EVP_R_NOT_XOF_OR_INVALID_LENGTH 135
872
1029
 
873
1030
  #endif // OPENSSL_HEADER_EVP_H