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
@@ -0,0 +1,122 @@
1
+ /* ====================================================================
2
+ * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED.
3
+ *
4
+ * The Elliptic Curve Public-Key Crypto Library (ECC Code) included
5
+ * herein is developed by SUN MICROSYSTEMS, INC., and is contributed
6
+ * to the OpenSSL project.
7
+ *
8
+ * The ECC Code is licensed pursuant to the OpenSSL open source
9
+ * license provided below.
10
+ *
11
+ * The ECDH software is originally written by Douglas Stebila of
12
+ * Sun Microsystems Laboratories.
13
+ *
14
+ */
15
+ /* ====================================================================
16
+ * Copyright (c) 2000-2002 The OpenSSL Project. All rights reserved.
17
+ *
18
+ * Redistribution and use in source and binary forms, with or without
19
+ * modification, are permitted provided that the following conditions
20
+ * are met:
21
+ *
22
+ * 1. Redistributions of source code must retain the above copyright
23
+ * notice, this list of conditions and the following disclaimer.
24
+ *
25
+ * 2. Redistributions in binary form must reproduce the above copyright
26
+ * notice, this list of conditions and the following disclaimer in
27
+ * the documentation and/or other materials provided with the
28
+ * distribution.
29
+ *
30
+ * 3. All advertising materials mentioning features or use of this
31
+ * software must display the following acknowledgment:
32
+ * "This product includes software developed by the OpenSSL Project
33
+ * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)"
34
+ *
35
+ * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
36
+ * endorse or promote products derived from this software without
37
+ * prior written permission. For written permission, please contact
38
+ * licensing@OpenSSL.org.
39
+ *
40
+ * 5. Products derived from this software may not be called "OpenSSL"
41
+ * nor may "OpenSSL" appear in their names without prior written
42
+ * permission of the OpenSSL Project.
43
+ *
44
+ * 6. Redistributions of any form whatsoever must retain the following
45
+ * acknowledgment:
46
+ * "This product includes software developed by the OpenSSL Project
47
+ * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)"
48
+ *
49
+ * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
50
+ * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
51
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
52
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
53
+ * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
54
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
55
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
56
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
57
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
58
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
59
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
60
+ * OF THE POSSIBILITY OF SUCH DAMAGE.
61
+ * ====================================================================
62
+ *
63
+ * This product includes cryptographic software written by Eric Young
64
+ * (eay@cryptsoft.com). This product includes software written by Tim
65
+ * Hudson (tjh@cryptsoft.com). */
66
+
67
+ #include <openssl/ecdh.h>
68
+
69
+ #include <string.h>
70
+
71
+ #include <openssl/ec.h>
72
+ #include <openssl/ec_key.h>
73
+ #include <openssl/err.h>
74
+ #include <openssl/mem.h>
75
+ #include <openssl/sha.h>
76
+
77
+ #include "../ec/internal.h"
78
+
79
+
80
+ int ECDH_compute_key_fips(uint8_t *out, size_t out_len, const EC_POINT *pub_key,
81
+ const EC_KEY *priv_key) {
82
+ if (priv_key->priv_key == NULL) {
83
+ OPENSSL_PUT_ERROR(ECDH, ECDH_R_NO_PRIVATE_VALUE);
84
+ return 0;
85
+ }
86
+ const EC_SCALAR *const priv = &priv_key->priv_key->scalar;
87
+ const EC_GROUP *const group = EC_KEY_get0_group(priv_key);
88
+ if (EC_GROUP_cmp(group, pub_key->group, NULL) != 0) {
89
+ OPENSSL_PUT_ERROR(EC, EC_R_INCOMPATIBLE_OBJECTS);
90
+ return 0;
91
+ }
92
+
93
+ EC_RAW_POINT shared_point;
94
+ uint8_t buf[EC_MAX_BYTES];
95
+ size_t buflen;
96
+ if (!ec_point_mul_scalar(group, &shared_point, &pub_key->raw, priv) ||
97
+ !ec_point_get_affine_coordinate_bytes(group, buf, NULL, &buflen,
98
+ sizeof(buf), &shared_point)) {
99
+ OPENSSL_PUT_ERROR(ECDH, ECDH_R_POINT_ARITHMETIC_FAILURE);
100
+ return 0;
101
+ }
102
+
103
+ switch (out_len) {
104
+ case SHA224_DIGEST_LENGTH:
105
+ SHA224(buf, buflen, out);
106
+ break;
107
+ case SHA256_DIGEST_LENGTH:
108
+ SHA256(buf, buflen, out);
109
+ break;
110
+ case SHA384_DIGEST_LENGTH:
111
+ SHA384(buf, buflen, out);
112
+ break;
113
+ case SHA512_DIGEST_LENGTH:
114
+ SHA512(buf, buflen, out);
115
+ break;
116
+ default:
117
+ OPENSSL_PUT_ERROR(ECDH, ECDH_R_UNKNOWN_DIGEST_LENGTH);
118
+ return 0;
119
+ }
120
+
121
+ return 1;
122
+ }
@@ -66,107 +66,36 @@
66
66
  #include "../../internal.h"
67
67
 
68
68
 
69
- // EC_LOOSE_SCALAR is like |EC_SCALAR| but is bounded by 2^|BN_num_bits(order)|
70
- // rather than |order|.
71
- typedef union {
72
- // bytes is the representation of the scalar in little-endian order.
73
- uint8_t bytes[EC_MAX_SCALAR_BYTES];
74
- BN_ULONG words[EC_MAX_SCALAR_WORDS];
75
- } EC_LOOSE_SCALAR;
76
-
77
- static void scalar_add_loose(const EC_GROUP *group, EC_LOOSE_SCALAR *r,
78
- const EC_LOOSE_SCALAR *a, const EC_SCALAR *b) {
79
- // Add and subtract one copy of |order| if necessary. We have:
80
- // |a| + |b| < 2^BN_num_bits(order) + order
81
- // so this leaves |r| < 2^BN_num_bits(order).
82
- const BIGNUM *order = &group->order;
83
- BN_ULONG carry = bn_add_words(r->words, a->words, b->words, order->width);
84
- EC_LOOSE_SCALAR tmp;
85
- BN_ULONG v =
86
- bn_sub_words(tmp.words, r->words, order->d, order->width) - carry;
87
- bn_select_words(r->words, 0u - v, r->words /* tmp < 0 */,
88
- tmp.words /* tmp >= 0 */, order->width);
89
- }
90
-
91
- static int scalar_mod_mul_montgomery(const EC_GROUP *group, EC_SCALAR *r,
92
- const EC_SCALAR *a, const EC_SCALAR *b) {
93
- const BIGNUM *order = &group->order;
94
- return bn_mod_mul_montgomery_small(r->words, order->width, a->words,
95
- order->width, b->words, order->width,
96
- group->order_mont);
97
- }
98
-
99
- static int scalar_mod_mul_montgomery_loose(const EC_GROUP *group, EC_SCALAR *r,
100
- const EC_LOOSE_SCALAR *a,
101
- const EC_SCALAR *b) {
102
- // Although |a| is loose, |bn_mod_mul_montgomery_small| only requires the
103
- // product not exceed R * |order|. |b| is fully reduced and |a| <
104
- // 2^BN_num_bits(order) <= R, so this holds.
105
- const BIGNUM *order = &group->order;
106
- return bn_mod_mul_montgomery_small(r->words, order->width, a->words,
107
- order->width, b->words, order->width,
108
- group->order_mont);
109
- }
110
-
111
69
  // digest_to_scalar interprets |digest_len| bytes from |digest| as a scalar for
112
70
  // ECDSA. Note this value is not fully reduced modulo the order, only the
113
71
  // correct number of bits.
114
- static void digest_to_scalar(const EC_GROUP *group, EC_LOOSE_SCALAR *out,
72
+ static void digest_to_scalar(const EC_GROUP *group, EC_SCALAR *out,
115
73
  const uint8_t *digest, size_t digest_len) {
116
74
  const BIGNUM *order = &group->order;
117
75
  size_t num_bits = BN_num_bits(order);
118
76
  // Need to truncate digest if it is too long: first truncate whole bytes.
119
- if (8 * digest_len > num_bits) {
120
- digest_len = (num_bits + 7) / 8;
77
+ size_t num_bytes = (num_bits + 7) / 8;
78
+ if (digest_len > num_bytes) {
79
+ digest_len = num_bytes;
121
80
  }
122
81
  OPENSSL_memset(out, 0, sizeof(EC_SCALAR));
123
82
  for (size_t i = 0; i < digest_len; i++) {
124
83
  out->bytes[i] = digest[digest_len - 1 - i];
125
84
  }
126
85
 
127
- // If still too long truncate remaining bits with a shift
86
+ // If it is still too long, truncate remaining bits with a shift.
128
87
  if (8 * digest_len > num_bits) {
129
- size_t shift = 8 - (num_bits & 0x7);
130
- for (int i = 0; i < order->width - 1; i++) {
131
- out->words[i] =
132
- (out->words[i] >> shift) | (out->words[i + 1] << (BN_BITS2 - shift));
133
- }
134
- out->words[order->width - 1] >>= shift;
88
+ bn_rshift_words(out->words, out->words, 8 - (num_bits & 0x7), order->width);
135
89
  }
136
- }
137
90
 
138
- // field_element_to_scalar reduces |r| modulo |group->order|. |r| must
139
- // previously have been reduced modulo |group->field|.
140
- static int field_element_to_scalar(const EC_GROUP *group, BIGNUM *r) {
141
- // We must have p < 2×order, assuming p is not tiny (p >= 17). Thus rather we
142
- // can reduce by performing at most one subtraction.
91
+ // |out| now has the same bit width as |order|, but this only bounds by
92
+ // 2*|order|. Subtract the order if out of range.
143
93
  //
144
- // Proof: We only work with prime order curves, so the number of points on
145
- // the curve is the order. Thus Hasse's theorem gives:
146
- //
147
- // |order - (p + 1)| <= 2×sqrt(p)
148
- // p + 1 - order <= 2×sqrt(p)
149
- // p + 1 - 2×sqrt(p) <= order
150
- // p + 1 - 2×(p/4) < order (p/4 > sqrt(p) for p >= 17)
151
- // p/2 < p/2 + 1 < order
152
- // p < 2×order
153
- //
154
- // Additionally, one can manually check this property for built-in curves. It
155
- // is enforced for legacy custom curves in |EC_GROUP_set_generator|.
156
- //
157
- // TODO(davidben): Introduce |EC_FIELD_ELEMENT|, make this a function from
158
- // |EC_FIELD_ELEMENT| to |EC_SCALAR|, and cut out the |BIGNUM|. Does this need
159
- // to be constant-time for signing? |r| is the x-coordinate for kG, which is
160
- // public unless k was rerolled because |s| was zero.
161
- assert(!BN_is_negative(r));
162
- assert(BN_cmp(r, &group->field) < 0);
163
- if (BN_cmp(r, &group->order) >= 0 &&
164
- !BN_sub(r, r, &group->order)) {
165
- return 0;
166
- }
167
- assert(!BN_is_negative(r));
168
- assert(BN_cmp(r, &group->order) < 0);
169
- return 1;
94
+ // Montgomery multiplication accepts the looser bounds, so this isn't strictly
95
+ // necessary, but it is a cleaner abstraction and has no performance impact.
96
+ BN_ULONG tmp[EC_MAX_WORDS];
97
+ bn_reduce_once_in_place(out->words, 0 /* no carry */, order->d, tmp,
98
+ order->width);
170
99
  }
171
100
 
172
101
  ECDSA_SIG *ECDSA_SIG_new(void) {
@@ -223,111 +152,56 @@ int ECDSA_do_verify(const uint8_t *digest, size_t digest_len,
223
152
  return 0;
224
153
  }
225
154
 
226
- BN_CTX *ctx = BN_CTX_new();
227
- if (!ctx) {
228
- OPENSSL_PUT_ERROR(ECDSA, ERR_R_MALLOC_FAILURE);
229
- return 0;
230
- }
231
- int ret = 0;
232
- EC_POINT *point = NULL;
233
- BN_CTX_start(ctx);
234
- BIGNUM *X = BN_CTX_get(ctx);
235
- if (X == NULL) {
236
- OPENSSL_PUT_ERROR(ECDSA, ERR_R_BN_LIB);
237
- goto err;
238
- }
239
-
240
- EC_SCALAR r, s, u1, u2, s_inv_mont;
241
- EC_LOOSE_SCALAR m;
242
- const BIGNUM *order = EC_GROUP_get0_order(group);
155
+ EC_SCALAR r, s, u1, u2, s_inv_mont, m;
243
156
  if (BN_is_zero(sig->r) ||
244
157
  !ec_bignum_to_scalar(group, &r, sig->r) ||
245
158
  BN_is_zero(sig->s) ||
246
159
  !ec_bignum_to_scalar(group, &s, sig->s)) {
247
160
  OPENSSL_PUT_ERROR(ECDSA, ECDSA_R_BAD_SIGNATURE);
248
- goto err;
249
- }
250
- // s_inv_mont = s^-1 mod order. We convert the result to Montgomery form for
251
- // the products below.
252
- int no_inverse;
253
- if (!BN_mod_inverse_odd(X, &no_inverse, sig->s, order, ctx) ||
254
- // TODO(davidben): Add a words version of |BN_mod_inverse_odd| and write
255
- // into |s_inv_mont| directly.
256
- !ec_bignum_to_scalar_unchecked(group, &s_inv_mont, X) ||
257
- !bn_to_montgomery_small(s_inv_mont.words, order->width, s_inv_mont.words,
258
- order->width, group->order_mont)) {
259
- goto err;
161
+ return 0;
260
162
  }
163
+
164
+ // s_inv_mont = s^-1 in the Montgomery domain. This is
165
+ ec_scalar_inv_montgomery_vartime(group, &s_inv_mont, &s);
166
+
261
167
  // u1 = m * s^-1 mod order
262
168
  // u2 = r * s^-1 mod order
263
169
  //
264
170
  // |s_inv_mont| is in Montgomery form while |m| and |r| are not, so |u1| and
265
171
  // |u2| will be taken out of Montgomery form, as desired.
266
172
  digest_to_scalar(group, &m, digest, digest_len);
267
- if (!scalar_mod_mul_montgomery_loose(group, &u1, &m, &s_inv_mont) ||
268
- !scalar_mod_mul_montgomery(group, &u2, &r, &s_inv_mont)) {
269
- goto err;
270
- }
173
+ ec_scalar_mul_montgomery(group, &u1, &m, &s_inv_mont);
174
+ ec_scalar_mul_montgomery(group, &u2, &r, &s_inv_mont);
271
175
 
272
- point = EC_POINT_new(group);
273
- if (point == NULL) {
274
- OPENSSL_PUT_ERROR(ECDSA, ERR_R_MALLOC_FAILURE);
275
- goto err;
276
- }
277
- if (!ec_point_mul_scalar_public(group, point, &u1, pub_key, &u2, ctx)) {
176
+ EC_RAW_POINT point;
177
+ if (!ec_point_mul_scalar_public(group, &point, &u1, &pub_key->raw, &u2)) {
278
178
  OPENSSL_PUT_ERROR(ECDSA, ERR_R_EC_LIB);
279
- goto err;
280
- }
281
- if (!EC_POINT_get_affine_coordinates_GFp(group, point, X, NULL, ctx)) {
282
- OPENSSL_PUT_ERROR(ECDSA, ERR_R_EC_LIB);
283
- goto err;
284
- }
285
- if (!field_element_to_scalar(group, X)) {
286
- OPENSSL_PUT_ERROR(ECDSA, ERR_R_BN_LIB);
287
- goto err;
179
+ return 0;
288
180
  }
289
- // The signature is correct iff |X| is equal to |sig->r|.
290
- if (BN_ucmp(X, sig->r) != 0) {
181
+
182
+ if (!ec_cmp_x_coordinate(group, &point, &r)) {
291
183
  OPENSSL_PUT_ERROR(ECDSA, ECDSA_R_BAD_SIGNATURE);
292
- goto err;
184
+ return 0;
293
185
  }
294
186
 
295
- ret = 1;
296
-
297
- err:
298
- BN_CTX_end(ctx);
299
- BN_CTX_free(ctx);
300
- EC_POINT_free(point);
301
- return ret;
187
+ return 1;
302
188
  }
303
189
 
304
- static int ecdsa_sign_setup(const EC_KEY *eckey, BN_CTX *ctx,
305
- EC_SCALAR *out_kinv_mont, BIGNUM **rp,
306
- const uint8_t *digest, size_t digest_len,
307
- const EC_SCALAR *priv_key) {
308
- EC_POINT *tmp_point = NULL;
309
- int ret = 0;
310
- EC_SCALAR k;
311
- BIGNUM *r = BN_new(); // this value is later returned in *rp
312
- if (r == NULL) {
313
- OPENSSL_PUT_ERROR(ECDSA, ERR_R_MALLOC_FAILURE);
314
- goto err;
315
- }
316
- const EC_GROUP *group = EC_KEY_get0_group(eckey);
317
- const BIGNUM *order = EC_GROUP_get0_order(group);
318
- tmp_point = EC_POINT_new(group);
319
- if (tmp_point == NULL) {
320
- OPENSSL_PUT_ERROR(ECDSA, ERR_R_EC_LIB);
321
- goto err;
322
- }
323
-
190
+ static int ecdsa_sign_setup(const EC_KEY *eckey, EC_SCALAR *out_kinv_mont,
191
+ EC_SCALAR *out_r, const uint8_t *digest,
192
+ size_t digest_len, const EC_SCALAR *priv_key) {
324
193
  // Check that the size of the group order is FIPS compliant (FIPS 186-4
325
194
  // B.5.2).
195
+ const EC_GROUP *group = EC_KEY_get0_group(eckey);
196
+ const BIGNUM *order = EC_GROUP_get0_order(group);
326
197
  if (BN_num_bits(order) < 160) {
327
198
  OPENSSL_PUT_ERROR(ECDSA, EC_R_INVALID_GROUP_ORDER);
328
- goto err;
199
+ return 0;
329
200
  }
330
201
 
202
+ int ret = 0;
203
+ EC_SCALAR k;
204
+ EC_RAW_POINT tmp_point;
331
205
  do {
332
206
  // Include the private key and message digest in the k generation.
333
207
  if (eckey->fixed_k != NULL) {
@@ -337,8 +211,8 @@ static int ecdsa_sign_setup(const EC_KEY *eckey, BN_CTX *ctx,
337
211
  } else {
338
212
  // Pass a SHA512 hash of the private key and digest as additional data
339
213
  // into the RBG. This is a hardening measure against entropy failure.
340
- OPENSSL_COMPILE_ASSERT(SHA512_DIGEST_LENGTH >= 32,
341
- additional_data_is_too_large_for_sha512);
214
+ OPENSSL_STATIC_ASSERT(SHA512_DIGEST_LENGTH >= 32,
215
+ "additional_data is too large for SHA-512");
342
216
  SHA512_CTX sha;
343
217
  uint8_t additional_data[SHA512_DIGEST_LENGTH];
344
218
  SHA512_Init(&sha);
@@ -350,37 +224,24 @@ static int ecdsa_sign_setup(const EC_KEY *eckey, BN_CTX *ctx,
350
224
  }
351
225
  }
352
226
 
353
- // Compute k^-1. We leave it in the Montgomery domain as an optimization for
354
- // later operations.
355
- if (!bn_to_montgomery_small(out_kinv_mont->words, order->width, k.words,
356
- order->width, group->order_mont) ||
357
- !bn_mod_inverse_prime_mont_small(out_kinv_mont->words, order->width,
358
- out_kinv_mont->words, order->width,
359
- group->order_mont)) {
360
- goto err;
361
- }
227
+ // Compute k^-1 in the Montgomery domain. This is |ec_scalar_to_montgomery|
228
+ // followed by |ec_scalar_inv_montgomery|, but |ec_scalar_inv_montgomery|
229
+ // followed by |ec_scalar_from_montgomery| is equivalent and slightly more
230
+ // efficient.
231
+ ec_scalar_inv_montgomery(group, out_kinv_mont, &k);
232
+ ec_scalar_from_montgomery(group, out_kinv_mont, out_kinv_mont);
362
233
 
363
234
  // Compute r, the x-coordinate of generator * k.
364
- if (!ec_point_mul_scalar(group, tmp_point, &k, NULL, NULL, ctx) ||
365
- !EC_POINT_get_affine_coordinates_GFp(group, tmp_point, r, NULL,
366
- ctx)) {
367
- goto err;
368
- }
369
-
370
- if (!field_element_to_scalar(group, r)) {
235
+ if (!ec_point_mul_scalar_base(group, &tmp_point, &k) ||
236
+ !ec_get_x_coordinate_as_scalar(group, out_r, &tmp_point)) {
371
237
  goto err;
372
238
  }
373
- } while (BN_is_zero(r));
239
+ } while (ec_scalar_is_zero(group, out_r));
374
240
 
375
- BN_clear_free(*rp);
376
- *rp = r;
377
- r = NULL;
378
241
  ret = 1;
379
242
 
380
243
  err:
381
244
  OPENSSL_cleanse(&k, sizeof(k));
382
- BN_clear_free(r);
383
- EC_POINT_free(tmp_point);
384
245
  return ret;
385
246
  }
386
247
 
@@ -401,38 +262,33 @@ ECDSA_SIG *ECDSA_do_sign(const uint8_t *digest, size_t digest_len,
401
262
 
402
263
  int ok = 0;
403
264
  ECDSA_SIG *ret = ECDSA_SIG_new();
404
- BN_CTX *ctx = BN_CTX_new();
405
- EC_SCALAR kinv_mont, r_mont, s;
406
- EC_LOOSE_SCALAR m, tmp;
407
- if (ret == NULL || ctx == NULL) {
265
+ EC_SCALAR kinv_mont, r_mont, s, m, tmp;
266
+ if (ret == NULL) {
408
267
  OPENSSL_PUT_ERROR(ECDSA, ERR_R_MALLOC_FAILURE);
409
268
  return NULL;
410
269
  }
411
270
 
412
271
  digest_to_scalar(group, &m, digest, digest_len);
413
272
  for (;;) {
414
- if (!ecdsa_sign_setup(eckey, ctx, &kinv_mont, &ret->r, digest, digest_len,
415
- priv_key)) {
273
+ if (!ecdsa_sign_setup(eckey, &kinv_mont, &r_mont, digest, digest_len,
274
+ priv_key) ||
275
+ !bn_set_words(ret->r, r_mont.words, order->width)) {
416
276
  goto err;
417
277
  }
418
278
 
419
279
  // Compute priv_key * r (mod order). Note if only one parameter is in the
420
- // Montgomery domain, |scalar_mod_mul_montgomery| will compute the answer in
421
- // the normal domain.
422
- if (!ec_bignum_to_scalar(group, &r_mont, ret->r) ||
423
- !bn_to_montgomery_small(r_mont.words, order->width, r_mont.words,
424
- order->width, group->order_mont) ||
425
- !scalar_mod_mul_montgomery(group, &s, priv_key, &r_mont)) {
426
- goto err;
427
- }
280
+ // Montgomery domain, |ec_scalar_mod_mul_montgomery| will compute the answer
281
+ // in the normal domain.
282
+ ec_scalar_to_montgomery(group, &r_mont, &r_mont);
283
+ ec_scalar_mul_montgomery(group, &s, priv_key, &r_mont);
428
284
 
429
285
  // Compute tmp = m + priv_key * r.
430
- scalar_add_loose(group, &tmp, &m, &s);
286
+ ec_scalar_add(group, &tmp, &m, &s);
431
287
 
432
288
  // Finally, multiply s by k^-1. That was retained in Montgomery form, so the
433
289
  // same technique as the previous multiplication works.
434
- if (!scalar_mod_mul_montgomery_loose(group, &s, &tmp, &kinv_mont) ||
435
- !bn_set_words(ret->s, s.words, order->width)) {
290
+ ec_scalar_mul_montgomery(group, &s, &tmp, &kinv_mont);
291
+ if (!bn_set_words(ret->s, s.words, order->width)) {
436
292
  goto err;
437
293
  }
438
294
  if (!BN_is_zero(ret->s)) {
@@ -448,7 +304,6 @@ err:
448
304
  ECDSA_SIG_free(ret);
449
305
  ret = NULL;
450
306
  }
451
- BN_CTX_free(ctx);
452
307
  OPENSSL_cleanse(&kinv_mont, sizeof(kinv_mont));
453
308
  OPENSSL_cleanse(&r_mont, sizeof(r_mont));
454
309
  OPENSSL_cleanse(&s, sizeof(s));