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
@@ -159,8 +159,8 @@ EC_KEY *EC_KEY_parse_private_key(CBS *cbs, const EC_GROUP *group) {
159
159
  (point_conversion_form_t)(CBS_data(&public_key)[0] & ~0x01);
160
160
  } else {
161
161
  // Compute the public key instead.
162
- if (!ec_point_mul_scalar(group, ret->pub_key, &ret->priv_key->scalar, NULL,
163
- NULL, NULL)) {
162
+ if (!ec_point_mul_scalar_base(group, &ret->pub_key->raw,
163
+ &ret->priv_key->scalar)) {
164
164
  goto err;
165
165
  }
166
166
  // Remember the original private-key-only encoding.
@@ -264,7 +264,8 @@ static int parse_explicit_prime_curve(CBS *in, CBS *out_prime, CBS *out_a,
264
264
  CBS *out_base_y, CBS *out_order) {
265
265
  // See RFC 3279, section 2.3.5. Note that RFC 3279 calls this structure an
266
266
  // ECParameters while RFC 5480 calls it a SpecifiedECDomain.
267
- CBS params, field_id, field_type, curve, base;
267
+ CBS params, field_id, field_type, curve, base, cofactor;
268
+ int has_cofactor;
268
269
  uint64_t version;
269
270
  if (!CBS_get_asn1(in, &params, CBS_ASN1_SEQUENCE) ||
270
271
  !CBS_get_asn1_uint64(&params, &version) ||
@@ -272,7 +273,8 @@ static int parse_explicit_prime_curve(CBS *in, CBS *out_prime, CBS *out_a,
272
273
  !CBS_get_asn1(&params, &field_id, CBS_ASN1_SEQUENCE) ||
273
274
  !CBS_get_asn1(&field_id, &field_type, CBS_ASN1_OBJECT) ||
274
275
  CBS_len(&field_type) != sizeof(kPrimeField) ||
275
- OPENSSL_memcmp(CBS_data(&field_type), kPrimeField, sizeof(kPrimeField)) != 0 ||
276
+ OPENSSL_memcmp(CBS_data(&field_type), kPrimeField, sizeof(kPrimeField)) !=
277
+ 0 ||
276
278
  !CBS_get_asn1(&field_id, out_prime, CBS_ASN1_INTEGER) ||
277
279
  !is_unsigned_integer(out_prime) ||
278
280
  CBS_len(&field_id) != 0 ||
@@ -280,16 +282,26 @@ static int parse_explicit_prime_curve(CBS *in, CBS *out_prime, CBS *out_a,
280
282
  !CBS_get_asn1(&curve, out_a, CBS_ASN1_OCTETSTRING) ||
281
283
  !CBS_get_asn1(&curve, out_b, CBS_ASN1_OCTETSTRING) ||
282
284
  // |curve| has an optional BIT STRING seed which we ignore.
285
+ !CBS_get_optional_asn1(&curve, NULL, NULL, CBS_ASN1_BITSTRING) ||
286
+ CBS_len(&curve) != 0 ||
283
287
  !CBS_get_asn1(&params, &base, CBS_ASN1_OCTETSTRING) ||
284
288
  !CBS_get_asn1(&params, out_order, CBS_ASN1_INTEGER) ||
285
- !is_unsigned_integer(out_order)) {
289
+ !is_unsigned_integer(out_order) ||
290
+ !CBS_get_optional_asn1(&params, &cofactor, &has_cofactor,
291
+ CBS_ASN1_INTEGER) ||
292
+ CBS_len(&params) != 0) {
286
293
  OPENSSL_PUT_ERROR(EC, EC_R_DECODE_ERROR);
287
294
  return 0;
288
295
  }
289
296
 
290
- // |params| has an optional cofactor which we ignore. With the optional seed
291
- // in |curve|, a group already has arbitrarily many encodings. Parse enough to
292
- // uniquely determine the curve.
297
+ if (has_cofactor) {
298
+ // We only support prime-order curves so the cofactor must be one.
299
+ if (CBS_len(&cofactor) != 1 ||
300
+ CBS_data(&cofactor)[0] != 1) {
301
+ OPENSSL_PUT_ERROR(EC, EC_R_UNKNOWN_GROUP);
302
+ return 0;
303
+ }
304
+ }
293
305
 
294
306
  // Require that the base point use uncompressed form.
295
307
  uint8_t form;
@@ -0,0 +1,96 @@
1
+ /* Copyright (c) 2019, Google Inc.
2
+ *
3
+ * Permission to use, copy, modify, and/or distribute this software for any
4
+ * purpose with or without fee is hereby granted, provided that the above
5
+ * copyright notice and this permission notice appear in all copies.
6
+ *
7
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
8
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
9
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
10
+ * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
11
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
12
+ * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
13
+ * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */
14
+
15
+ #include <openssl/ec_key.h>
16
+
17
+ #include <string.h>
18
+
19
+ #include <openssl/buf.h>
20
+ #include <openssl/ec.h>
21
+ #include <openssl/err.h>
22
+ #include <openssl/digest.h>
23
+ #include <openssl/hkdf.h>
24
+ #include <openssl/mem.h>
25
+
26
+ #include "../fipsmodule/ec/internal.h"
27
+
28
+
29
+ EC_KEY *EC_KEY_derive_from_secret(const EC_GROUP *group, const uint8_t *secret,
30
+ size_t secret_len) {
31
+ #define EC_KEY_DERIVE_MAX_NAME_LEN 16
32
+ const char *name = EC_curve_nid2nist(EC_GROUP_get_curve_name(group));
33
+ if (name == NULL || strlen(name) > EC_KEY_DERIVE_MAX_NAME_LEN) {
34
+ OPENSSL_PUT_ERROR(EC, EC_R_UNKNOWN_GROUP);
35
+ return NULL;
36
+ }
37
+
38
+ // Assemble a label string to provide some key separation in case |secret| is
39
+ // misused, but ultimately it's on the caller to ensure |secret| is suitably
40
+ // separated.
41
+ static const char kLabel[] = "derive EC key ";
42
+ char info[sizeof(kLabel) + EC_KEY_DERIVE_MAX_NAME_LEN];
43
+ BUF_strlcpy(info, kLabel, sizeof(info));
44
+ BUF_strlcat(info, name, sizeof(info));
45
+
46
+ // Generate 128 bits beyond the group order so the bias is at most 2^-128.
47
+ #define EC_KEY_DERIVE_EXTRA_BITS 128
48
+ #define EC_KEY_DERIVE_EXTRA_BYTES (EC_KEY_DERIVE_EXTRA_BITS / 8)
49
+
50
+ if (EC_GROUP_order_bits(group) <= EC_KEY_DERIVE_EXTRA_BITS + 8) {
51
+ // The reduction strategy below requires the group order be large enough.
52
+ // (The actual bound is a bit tighter, but our curves are much larger than
53
+ // 128-bit.)
54
+ OPENSSL_PUT_ERROR(EC, ERR_R_INTERNAL_ERROR);
55
+ return NULL;
56
+ }
57
+
58
+ uint8_t derived[EC_KEY_DERIVE_EXTRA_BYTES + EC_MAX_BYTES];
59
+ size_t derived_len = BN_num_bytes(&group->order) + EC_KEY_DERIVE_EXTRA_BYTES;
60
+ assert(derived_len <= sizeof(derived));
61
+ if (!HKDF(derived, derived_len, EVP_sha256(), secret, secret_len,
62
+ /*salt=*/NULL, /*salt_len=*/0, (const uint8_t *)info,
63
+ strlen(info))) {
64
+ return NULL;
65
+ }
66
+
67
+ EC_KEY *key = EC_KEY_new();
68
+ BN_CTX *ctx = BN_CTX_new();
69
+ BIGNUM *priv = BN_bin2bn(derived, derived_len, NULL);
70
+ EC_POINT *pub = EC_POINT_new(group);
71
+ if (key == NULL || ctx == NULL || priv == NULL || pub == NULL ||
72
+ // Reduce |priv| with Montgomery reduction. First, convert "from"
73
+ // Montgomery form to compute |priv| * R^-1 mod |order|. This requires
74
+ // |priv| be under order * R, which is true if the group order is large
75
+ // enough. 2^(num_bytes(order)) < 2^8 * order, so:
76
+ //
77
+ // priv < 2^8 * order * 2^128 < order * order < order * R
78
+ !BN_from_montgomery(priv, priv, group->order_mont, ctx) ||
79
+ // Multiply by R^2 and do another Montgomery reduction to compute
80
+ // priv * R^-1 * R^2 * R^-1 = priv mod order.
81
+ !BN_to_montgomery(priv, priv, group->order_mont, ctx) ||
82
+ !EC_POINT_mul(group, pub, priv, NULL, NULL, ctx) ||
83
+ !EC_KEY_set_group(key, group) || !EC_KEY_set_public_key(key, pub) ||
84
+ !EC_KEY_set_private_key(key, priv)) {
85
+ EC_KEY_free(key);
86
+ key = NULL;
87
+ goto err;
88
+ }
89
+
90
+ err:
91
+ OPENSSL_cleanse(derived, sizeof(derived));
92
+ BN_CTX_free(ctx);
93
+ BN_free(priv);
94
+ EC_POINT_free(pub);
95
+ return key;
96
+ }
@@ -69,7 +69,6 @@
69
69
  #include <limits.h>
70
70
  #include <string.h>
71
71
 
72
- #include <openssl/bn.h>
73
72
  #include <openssl/digest.h>
74
73
  #include <openssl/err.h>
75
74
  #include <openssl/mem.h>
@@ -78,85 +77,48 @@
78
77
  #include "../internal.h"
79
78
 
80
79
 
81
- int ECDH_compute_key(void *out, size_t outlen, const EC_POINT *pub_key,
80
+ int ECDH_compute_key(void *out, size_t out_len, const EC_POINT *pub_key,
82
81
  const EC_KEY *priv_key,
83
82
  void *(*kdf)(const void *in, size_t inlen, void *out,
84
- size_t *outlen)) {
83
+ size_t *out_len)) {
85
84
  if (priv_key->priv_key == NULL) {
86
85
  OPENSSL_PUT_ERROR(ECDH, ECDH_R_NO_PRIVATE_VALUE);
87
86
  return -1;
88
87
  }
89
88
  const EC_SCALAR *const priv = &priv_key->priv_key->scalar;
90
-
91
- BN_CTX *ctx = BN_CTX_new();
92
- if (ctx == NULL) {
93
- return -1;
94
- }
95
- BN_CTX_start(ctx);
96
-
97
- int ret = -1;
98
- size_t buflen = 0;
99
- uint8_t *buf = NULL;
100
-
101
89
  const EC_GROUP *const group = EC_KEY_get0_group(priv_key);
102
- EC_POINT *tmp = EC_POINT_new(group);
103
- if (tmp == NULL) {
104
- OPENSSL_PUT_ERROR(ECDH, ERR_R_MALLOC_FAILURE);
105
- goto err;
106
- }
107
-
108
- if (!ec_point_mul_scalar(group, tmp, NULL, pub_key, priv, ctx)) {
109
- OPENSSL_PUT_ERROR(ECDH, ECDH_R_POINT_ARITHMETIC_FAILURE);
110
- goto err;
111
- }
112
-
113
- BIGNUM *x = BN_CTX_get(ctx);
114
- if (!x) {
115
- OPENSSL_PUT_ERROR(ECDH, ERR_R_MALLOC_FAILURE);
116
- goto err;
90
+ if (EC_GROUP_cmp(group, pub_key->group, NULL) != 0) {
91
+ OPENSSL_PUT_ERROR(EC, EC_R_INCOMPATIBLE_OBJECTS);
92
+ return -1;
117
93
  }
118
94
 
119
- if (!EC_POINT_get_affine_coordinates_GFp(group, tmp, x, NULL, ctx)) {
95
+ EC_RAW_POINT shared_point;
96
+ uint8_t buf[EC_MAX_BYTES];
97
+ size_t buf_len;
98
+ if (!ec_point_mul_scalar(group, &shared_point, &pub_key->raw, priv) ||
99
+ !ec_point_get_affine_coordinate_bytes(group, buf, NULL, &buf_len,
100
+ sizeof(buf), &shared_point)) {
120
101
  OPENSSL_PUT_ERROR(ECDH, ECDH_R_POINT_ARITHMETIC_FAILURE);
121
- goto err;
122
- }
123
-
124
- buflen = (EC_GROUP_get_degree(group) + 7) / 8;
125
- buf = OPENSSL_malloc(buflen);
126
- if (buf == NULL) {
127
- OPENSSL_PUT_ERROR(ECDH, ERR_R_MALLOC_FAILURE);
128
- goto err;
129
- }
130
-
131
- if (!BN_bn2bin_padded(buf, buflen, x)) {
132
- OPENSSL_PUT_ERROR(ECDH, ERR_R_INTERNAL_ERROR);
133
- goto err;
102
+ return -1;
134
103
  }
135
104
 
136
105
  if (kdf != NULL) {
137
- if (kdf(buf, buflen, out, &outlen) == NULL) {
106
+ if (kdf(buf, buf_len, out, &out_len) == NULL) {
138
107
  OPENSSL_PUT_ERROR(ECDH, ECDH_R_KDF_FAILED);
139
- goto err;
108
+ return -1;
140
109
  }
141
110
  } else {
142
111
  // no KDF, just copy as much as we can
143
- if (buflen < outlen) {
144
- outlen = buflen;
112
+ if (buf_len < out_len) {
113
+ out_len = buf_len;
145
114
  }
146
- OPENSSL_memcpy(out, buf, outlen);
115
+ OPENSSL_memcpy(out, buf, out_len);
147
116
  }
148
117
 
149
- if (outlen > INT_MAX) {
118
+ if (out_len > INT_MAX) {
150
119
  OPENSSL_PUT_ERROR(ECDH, ERR_R_OVERFLOW);
151
- goto err;
120
+ return -1;
152
121
  }
153
122
 
154
- ret = (int)outlen;
155
-
156
- err:
157
- OPENSSL_free(buf);
158
- EC_POINT_free(tmp);
159
- BN_CTX_end(ctx);
160
- BN_CTX_free(ctx);
161
- return ret;
123
+ return (int)out_len;
162
124
  }
@@ -74,15 +74,7 @@ int ECDSA_sign(int type, const uint8_t *digest, size_t digest_len, uint8_t *sig,
74
74
  }
75
75
 
76
76
  int ret = 0;
77
- ECDSA_SIG *s = NULL;
78
-
79
- if (eckey->ecdsa_meth && eckey->ecdsa_meth->sign) {
80
- OPENSSL_PUT_ERROR(ECDSA, ECDSA_R_NOT_IMPLEMENTED);
81
- *sig_len = 0;
82
- goto err;
83
- }
84
-
85
- s = ECDSA_do_sign(digest, digest_len, eckey);
77
+ ECDSA_SIG *s = ECDSA_do_sign(digest, digest_len, eckey);
86
78
  if (s == NULL) {
87
79
  *sig_len = 0;
88
80
  goto err;
@@ -41,9 +41,10 @@ ENGINE *ENGINE_new(void) {
41
41
  return engine;
42
42
  }
43
43
 
44
- void ENGINE_free(ENGINE *engine) {
44
+ int ENGINE_free(ENGINE *engine) {
45
45
  // Methods are currently required to be static so are not unref'ed.
46
46
  OPENSSL_free(engine);
47
+ return 1;
47
48
  }
48
49
 
49
50
  // set_method takes a pointer to a method and its given size and sets
@@ -781,6 +781,8 @@ void ERR_load_BIO_strings(void) {}
781
781
 
782
782
  void ERR_load_ERR_strings(void) {}
783
783
 
784
+ void ERR_load_RAND_strings(void) {}
785
+
784
786
  struct err_save_state_st {
785
787
  struct err_error_st *errors;
786
788
  size_t num_errors;
@@ -46,11 +46,11 @@ OPENSSL_EXPORT void ERR_restore_state(const ERR_SAVE_STATE *state);
46
46
 
47
47
  extern "C++" {
48
48
 
49
- namespace bssl {
49
+ BSSL_NAMESPACE_BEGIN
50
50
 
51
51
  BORINGSSL_MAKE_DELETER(ERR_SAVE_STATE, ERR_SAVE_STATE_free)
52
52
 
53
- } // namespace bssl
53
+ BSSL_NAMESPACE_END
54
54
 
55
55
  } // extern C++
56
56
  #endif
@@ -71,6 +71,11 @@
71
71
  #include "../internal.h"
72
72
 
73
73
 
74
+ // Node depends on |EVP_R_NOT_XOF_OR_INVALID_LENGTH|.
75
+ //
76
+ // TODO(davidben): Fix Node to not touch the error queue itself and remove this.
77
+ OPENSSL_DECLARE_ERROR_REASON(EVP, NOT_XOF_OR_INVALID_LENGTH)
78
+
74
79
  EVP_PKEY *EVP_PKEY_new(void) {
75
80
  EVP_PKEY *ret;
76
81
 
@@ -176,7 +181,7 @@ int EVP_PKEY_size(const EVP_PKEY *pkey) {
176
181
  return 0;
177
182
  }
178
183
 
179
- int EVP_PKEY_bits(EVP_PKEY *pkey) {
184
+ int EVP_PKEY_bits(const EVP_PKEY *pkey) {
180
185
  if (pkey && pkey->ameth && pkey->ameth->pkey_bits) {
181
186
  return pkey->ameth->pkey_bits(pkey);
182
187
  }
@@ -200,6 +205,8 @@ static const EVP_PKEY_ASN1_METHOD *evp_pkey_asn1_find(int nid) {
200
205
  return &dsa_asn1_meth;
201
206
  case EVP_PKEY_ED25519:
202
207
  return &ed25519_asn1_meth;
208
+ case EVP_PKEY_X25519:
209
+ return &x25519_asn1_meth;
203
210
  default:
204
211
  return NULL;
205
212
  }
@@ -225,7 +232,7 @@ int EVP_PKEY_assign_RSA(EVP_PKEY *pkey, RSA *key) {
225
232
  return EVP_PKEY_assign(pkey, EVP_PKEY_RSA, key);
226
233
  }
227
234
 
228
- RSA *EVP_PKEY_get0_RSA(EVP_PKEY *pkey) {
235
+ RSA *EVP_PKEY_get0_RSA(const EVP_PKEY *pkey) {
229
236
  if (pkey->type != EVP_PKEY_RSA) {
230
237
  OPENSSL_PUT_ERROR(EVP, EVP_R_EXPECTING_AN_RSA_KEY);
231
238
  return NULL;
@@ -233,7 +240,7 @@ RSA *EVP_PKEY_get0_RSA(EVP_PKEY *pkey) {
233
240
  return pkey->pkey.rsa;
234
241
  }
235
242
 
236
- RSA *EVP_PKEY_get1_RSA(EVP_PKEY *pkey) {
243
+ RSA *EVP_PKEY_get1_RSA(const EVP_PKEY *pkey) {
237
244
  RSA *rsa = EVP_PKEY_get0_RSA(pkey);
238
245
  if (rsa != NULL) {
239
246
  RSA_up_ref(rsa);
@@ -253,7 +260,7 @@ int EVP_PKEY_assign_DSA(EVP_PKEY *pkey, DSA *key) {
253
260
  return EVP_PKEY_assign(pkey, EVP_PKEY_DSA, key);
254
261
  }
255
262
 
256
- DSA *EVP_PKEY_get0_DSA(EVP_PKEY *pkey) {
263
+ DSA *EVP_PKEY_get0_DSA(const EVP_PKEY *pkey) {
257
264
  if (pkey->type != EVP_PKEY_DSA) {
258
265
  OPENSSL_PUT_ERROR(EVP, EVP_R_EXPECTING_A_DSA_KEY);
259
266
  return NULL;
@@ -261,7 +268,7 @@ DSA *EVP_PKEY_get0_DSA(EVP_PKEY *pkey) {
261
268
  return pkey->pkey.dsa;
262
269
  }
263
270
 
264
- DSA *EVP_PKEY_get1_DSA(EVP_PKEY *pkey) {
271
+ DSA *EVP_PKEY_get1_DSA(const EVP_PKEY *pkey) {
265
272
  DSA *dsa = EVP_PKEY_get0_DSA(pkey);
266
273
  if (dsa != NULL) {
267
274
  DSA_up_ref(dsa);
@@ -281,7 +288,7 @@ int EVP_PKEY_assign_EC_KEY(EVP_PKEY *pkey, EC_KEY *key) {
281
288
  return EVP_PKEY_assign(pkey, EVP_PKEY_EC, key);
282
289
  }
283
290
 
284
- EC_KEY *EVP_PKEY_get0_EC_KEY(EVP_PKEY *pkey) {
291
+ EC_KEY *EVP_PKEY_get0_EC_KEY(const EVP_PKEY *pkey) {
285
292
  if (pkey->type != EVP_PKEY_EC) {
286
293
  OPENSSL_PUT_ERROR(EVP, EVP_R_EXPECTING_AN_EC_KEY_KEY);
287
294
  return NULL;
@@ -289,7 +296,7 @@ EC_KEY *EVP_PKEY_get0_EC_KEY(EVP_PKEY *pkey) {
289
296
  return pkey->pkey.ec;
290
297
  }
291
298
 
292
- EC_KEY *EVP_PKEY_get1_EC_KEY(EVP_PKEY *pkey) {
299
+ EC_KEY *EVP_PKEY_get1_EC_KEY(const EVP_PKEY *pkey) {
293
300
  EC_KEY *ec_key = EVP_PKEY_get0_EC_KEY(pkey);
294
301
  if (ec_key != NULL) {
295
302
  EC_KEY_up_ref(ec_key);
@@ -297,7 +304,8 @@ EC_KEY *EVP_PKEY_get1_EC_KEY(EVP_PKEY *pkey) {
297
304
  return ec_key;
298
305
  }
299
306
 
300
- DH *EVP_PKEY_get0_DH(EVP_PKEY *pkey) { return NULL; }
307
+ DH *EVP_PKEY_get0_DH(const EVP_PKEY *pkey) { return NULL; }
308
+ DH *EVP_PKEY_get1_DH(const EVP_PKEY *pkey) { return NULL; }
301
309
 
302
310
  int EVP_PKEY_assign(EVP_PKEY *pkey, int type, void *key) {
303
311
  if (!EVP_PKEY_set_type(pkey, type)) {
@@ -329,7 +337,73 @@ int EVP_PKEY_set_type(EVP_PKEY *pkey, int type) {
329
337
  return 1;
330
338
  }
331
339
 
340
+ EVP_PKEY *EVP_PKEY_new_raw_private_key(int type, ENGINE *unused,
341
+ const uint8_t *in, size_t len) {
342
+ EVP_PKEY *ret = EVP_PKEY_new();
343
+ if (ret == NULL ||
344
+ !EVP_PKEY_set_type(ret, type)) {
345
+ goto err;
346
+ }
347
+
348
+ if (ret->ameth->set_priv_raw == NULL) {
349
+ OPENSSL_PUT_ERROR(EVP, EVP_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE);
350
+ goto err;
351
+ }
352
+
353
+ if (!ret->ameth->set_priv_raw(ret, in, len)) {
354
+ goto err;
355
+ }
356
+
357
+ return ret;
358
+
359
+ err:
360
+ EVP_PKEY_free(ret);
361
+ return NULL;
362
+ }
363
+
364
+ EVP_PKEY *EVP_PKEY_new_raw_public_key(int type, ENGINE *unused,
365
+ const uint8_t *in, size_t len) {
366
+ EVP_PKEY *ret = EVP_PKEY_new();
367
+ if (ret == NULL ||
368
+ !EVP_PKEY_set_type(ret, type)) {
369
+ goto err;
370
+ }
332
371
 
372
+ if (ret->ameth->set_pub_raw == NULL) {
373
+ OPENSSL_PUT_ERROR(EVP, EVP_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE);
374
+ goto err;
375
+ }
376
+
377
+ if (!ret->ameth->set_pub_raw(ret, in, len)) {
378
+ goto err;
379
+ }
380
+
381
+ return ret;
382
+
383
+ err:
384
+ EVP_PKEY_free(ret);
385
+ return NULL;
386
+ }
387
+
388
+ int EVP_PKEY_get_raw_private_key(const EVP_PKEY *pkey, uint8_t *out,
389
+ size_t *out_len) {
390
+ if (pkey->ameth->get_priv_raw == NULL) {
391
+ OPENSSL_PUT_ERROR(EVP, EVP_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE);
392
+ return 0;
393
+ }
394
+
395
+ return pkey->ameth->get_priv_raw(pkey, out, out_len);
396
+ }
397
+
398
+ int EVP_PKEY_get_raw_public_key(const EVP_PKEY *pkey, uint8_t *out,
399
+ size_t *out_len) {
400
+ if (pkey->ameth->get_pub_raw == NULL) {
401
+ OPENSSL_PUT_ERROR(EVP, EVP_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE);
402
+ return 0;
403
+ }
404
+
405
+ return pkey->ameth->get_pub_raw(pkey, out, out_len);
406
+ }
333
407
 
334
408
  int EVP_PKEY_cmp_parameters(const EVP_PKEY *a, const EVP_PKEY *b) {
335
409
  if (a->type != b->type) {
@@ -360,3 +434,10 @@ void OpenSSL_add_all_ciphers(void) {}
360
434
  void OpenSSL_add_all_digests(void) {}
361
435
 
362
436
  void EVP_cleanup(void) {}
437
+
438
+ int EVP_PKEY_base_id(const EVP_PKEY *pkey) {
439
+ // OpenSSL has two notions of key type because it supports multiple OIDs for
440
+ // the same algorithm: NID_rsa vs NID_rsaEncryption and five distinct spelling
441
+ // of DSA. We do not support these, so the base ID is simply the ID.
442
+ return EVP_PKEY_id(pkey);
443
+ }