grpc 1.28.0.pre2 → 1.31.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 (660) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +8313 -11862
  3. data/include/grpc/grpc.h +2 -2
  4. data/include/grpc/grpc_security.h +30 -9
  5. data/include/grpc/grpc_security_constants.h +4 -0
  6. data/include/grpc/impl/codegen/grpc_types.h +23 -23
  7. data/include/grpc/impl/codegen/port_platform.h +6 -34
  8. data/include/grpc/module.modulemap +24 -39
  9. data/src/core/ext/filters/client_channel/backend_metric.cc +18 -12
  10. data/src/core/ext/filters/client_channel/client_channel.cc +618 -482
  11. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +3 -2
  12. data/src/core/ext/filters/client_channel/config_selector.cc +62 -0
  13. data/src/core/ext/filters/client_channel/config_selector.h +93 -0
  14. data/src/core/ext/filters/client_channel/global_subchannel_pool.cc +24 -2
  15. data/src/core/ext/filters/client_channel/health/health_check_client.cc +9 -22
  16. data/src/core/ext/filters/client_channel/health/health_check_client.h +3 -3
  17. data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +6 -5
  18. data/src/core/ext/filters/client_channel/http_proxy.cc +23 -14
  19. data/src/core/ext/filters/client_channel/lb_policy.cc +19 -18
  20. data/src/core/ext/filters/client_channel/lb_policy.h +44 -33
  21. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +83 -0
  22. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +99 -0
  23. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +297 -0
  24. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h +83 -0
  25. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +311 -497
  26. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +89 -0
  27. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h +40 -0
  28. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +11 -9
  29. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +3 -2
  30. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +871 -0
  31. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +1 -1
  32. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +9 -17
  33. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +734 -0
  34. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +117 -41
  35. data/src/core/ext/filters/client_channel/lb_policy/xds/eds.cc +938 -0
  36. data/src/core/ext/filters/client_channel/lb_policy/xds/lrs.cc +528 -0
  37. data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +1 -2
  38. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_routing.cc +1142 -0
  39. data/src/core/ext/filters/client_channel/lb_policy_registry.cc +10 -7
  40. data/src/core/ext/filters/client_channel/local_subchannel_pool.h +2 -1
  41. data/src/core/ext/filters/client_channel/parse_address.cc +22 -21
  42. data/src/core/ext/filters/client_channel/resolver.cc +5 -8
  43. data/src/core/ext/filters/client_channel/resolver.h +12 -14
  44. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +78 -61
  45. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.cc +41 -40
  46. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +8 -7
  47. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_libuv.cc +22 -24
  48. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +12 -10
  49. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +79 -122
  50. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +199 -163
  51. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +5 -3
  52. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.cc +7 -4
  53. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +46 -45
  54. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +93 -102
  55. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +0 -4
  56. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +2 -2
  57. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +64 -12
  58. data/src/core/ext/filters/client_channel/resolver_factory.h +2 -2
  59. data/src/core/ext/filters/client_channel/resolver_registry.cc +19 -17
  60. data/src/core/ext/filters/client_channel/resolver_registry.h +8 -8
  61. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +21 -22
  62. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +19 -16
  63. data/src/core/ext/filters/client_channel/resolving_lb_policy.cc +73 -217
  64. data/src/core/ext/filters/client_channel/resolving_lb_policy.h +45 -27
  65. data/src/core/ext/filters/client_channel/server_address.cc +6 -9
  66. data/src/core/ext/filters/client_channel/server_address.h +6 -12
  67. data/src/core/ext/filters/client_channel/service_config.cc +104 -144
  68. data/src/core/ext/filters/client_channel/service_config.h +28 -98
  69. data/src/core/ext/filters/client_channel/service_config_call_data.h +68 -0
  70. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +142 -0
  71. data/src/core/ext/filters/client_channel/service_config_parser.cc +87 -0
  72. data/src/core/ext/filters/client_channel/service_config_parser.h +89 -0
  73. data/src/core/ext/filters/client_channel/subchannel.cc +55 -25
  74. data/src/core/ext/filters/client_channel/subchannel.h +35 -11
  75. data/src/core/ext/filters/client_channel/xds/xds_api.cc +1200 -246
  76. data/src/core/ext/filters/client_channel/xds/xds_api.h +130 -44
  77. data/src/core/ext/filters/client_channel/xds/xds_bootstrap.cc +90 -29
  78. data/src/core/ext/filters/client_channel/xds/xds_bootstrap.h +9 -4
  79. data/src/core/ext/filters/client_channel/xds/xds_channel_secure.cc +4 -2
  80. data/src/core/ext/filters/client_channel/xds/xds_client.cc +839 -431
  81. data/src/core/ext/filters/client_channel/xds/xds_client.h +84 -33
  82. data/src/core/ext/filters/client_channel/xds/xds_client_stats.cc +11 -12
  83. data/src/core/ext/filters/client_channel/xds/xds_client_stats.h +40 -28
  84. data/src/core/ext/filters/http/client/http_client_filter.cc +28 -33
  85. data/src/core/ext/filters/http/client_authority_filter.cc +4 -4
  86. data/src/core/ext/filters/http/http_filters_plugin.cc +28 -12
  87. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +258 -221
  88. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +399 -0
  89. data/src/core/ext/filters/http/message_compress/message_decompress_filter.h +31 -0
  90. data/src/core/ext/filters/message_size/message_size_filter.cc +61 -88
  91. data/src/core/ext/filters/message_size/message_size_filter.h +10 -4
  92. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +386 -350
  93. data/src/core/ext/transport/chttp2/server/chttp2_server.h +6 -2
  94. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc +1 -1
  95. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +7 -13
  96. data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc +7 -8
  97. data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +4 -6
  98. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +42 -26
  99. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +1 -0
  100. data/src/core/ext/transport/chttp2/transport/flow_control.cc +25 -30
  101. data/src/core/ext/transport/chttp2/transport/flow_control.h +14 -16
  102. data/src/core/ext/transport/chttp2/transport/frame_data.cc +9 -12
  103. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +4 -6
  104. data/src/core/ext/transport/chttp2/transport/frame_goaway.h +2 -3
  105. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +5 -6
  106. data/src/core/ext/transport/chttp2/transport/frame_ping.h +2 -3
  107. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +12 -13
  108. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +2 -3
  109. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +6 -7
  110. data/src/core/ext/transport/chttp2/transport/frame_settings.h +2 -3
  111. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +9 -12
  112. data/src/core/ext/transport/chttp2/transport/frame_window_update.h +2 -3
  113. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +29 -16
  114. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +2 -3
  115. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +25 -29
  116. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +2 -3
  117. data/src/core/ext/transport/chttp2/transport/hpack_table.cc +13 -17
  118. data/src/core/ext/transport/chttp2/transport/hpack_table.h +2 -2
  119. data/src/core/ext/transport/chttp2/transport/http2_settings.h +4 -5
  120. data/src/core/ext/transport/chttp2/transport/huffsyms.h +2 -3
  121. data/src/core/ext/transport/chttp2/transport/internal.h +27 -21
  122. data/src/core/ext/transport/chttp2/transport/parsing.cc +33 -43
  123. data/src/core/ext/transport/chttp2/transport/stream_map.h +2 -3
  124. data/src/core/ext/transport/chttp2/transport/writing.cc +24 -22
  125. data/src/core/ext/transport/inproc/inproc_transport.cc +54 -15
  126. data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.h +0 -1
  127. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.h +3 -4
  128. data/src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.c +4 -229
  129. data/src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.h +5 -876
  130. data/src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.c +114 -0
  131. data/src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.h +429 -0
  132. data/src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.c +72 -0
  133. data/src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.h +198 -0
  134. data/src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.c +105 -0
  135. data/src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.h +388 -0
  136. data/src/core/ext/upb-generated/envoy/api/v2/cds.upb.c +1 -0
  137. data/src/core/ext/upb-generated/envoy/api/v2/cds.upb.h +1 -2
  138. data/src/core/ext/upb-generated/envoy/api/v2/cluster.upb.c +23 -10
  139. data/src/core/ext/upb-generated/envoy/api/v2/cluster.upb.h +352 -310
  140. data/src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.c +1 -0
  141. data/src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.h +42 -34
  142. data/src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upb.c +1 -0
  143. data/src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upb.h +7 -7
  144. data/src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.c +1 -0
  145. data/src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.h +79 -61
  146. data/src/core/ext/upb-generated/envoy/api/v2/core/address.upb.c +2 -1
  147. data/src/core/ext/upb-generated/envoy/api/v2/core/address.upb.h +55 -49
  148. data/src/core/ext/upb-generated/envoy/api/v2/core/backoff.upb.c +35 -0
  149. data/src/core/ext/upb-generated/envoy/api/v2/core/backoff.upb.h +79 -0
  150. data/src/core/ext/upb-generated/envoy/api/v2/core/base.upb.c +48 -27
  151. data/src/core/ext/upb-generated/envoy/api/v2/core/base.upb.h +258 -214
  152. data/src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.c +1 -0
  153. data/src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.h +51 -45
  154. data/src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.c +34 -0
  155. data/src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.h +71 -0
  156. data/src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.c +2 -1
  157. data/src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.h +107 -100
  158. data/src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.c +24 -20
  159. data/src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.h +157 -122
  160. data/src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upb.c +1 -0
  161. data/src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upb.h +9 -9
  162. data/src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.c +38 -18
  163. data/src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.h +173 -73
  164. data/src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upb.c +34 -0
  165. data/src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upb.h +88 -0
  166. data/src/core/ext/upb-generated/envoy/api/v2/discovery.upb.c +2 -1
  167. data/src/core/ext/upb-generated/envoy/api/v2/discovery.upb.h +95 -101
  168. data/src/core/ext/upb-generated/envoy/api/v2/eds.upb.c +1 -0
  169. data/src/core/ext/upb-generated/envoy/api/v2/eds.upb.h +1 -2
  170. data/src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.c +2 -1
  171. data/src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.h +49 -65
  172. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.c +1 -0
  173. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.h +0 -1
  174. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.c +9 -6
  175. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.h +53 -38
  176. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.c +1 -0
  177. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.h +70 -62
  178. data/src/core/ext/upb-generated/envoy/api/v2/lds.upb.c +1 -0
  179. data/src/core/ext/upb-generated/envoy/api/v2/lds.upb.h +1 -2
  180. data/src/core/ext/upb-generated/envoy/api/v2/listener.upb.c +15 -10
  181. data/src/core/ext/upb-generated/envoy/api/v2/listener.upb.h +95 -63
  182. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.c +1 -0
  183. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.h +0 -1
  184. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.c +3 -2
  185. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.h +91 -80
  186. data/src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.c +1 -0
  187. data/src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.h +9 -10
  188. data/src/core/ext/upb-generated/envoy/api/v2/rds.upb.c +1 -0
  189. data/src/core/ext/upb-generated/envoy/api/v2/rds.upb.h +1 -2
  190. data/src/core/ext/upb-generated/envoy/api/v2/route.upb.c +1 -0
  191. data/src/core/ext/upb-generated/envoy/api/v2/route.upb.h +36 -31
  192. data/src/core/ext/upb-generated/envoy/api/v2/route/route.upb.c +1 -0
  193. data/src/core/ext/upb-generated/envoy/api/v2/route/route.upb.h +0 -1
  194. data/src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.c +68 -46
  195. data/src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.h +770 -722
  196. data/src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.c +1 -0
  197. data/src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.h +16 -15
  198. data/src/core/ext/upb-generated/envoy/api/v2/srds.upb.c +1 -0
  199. data/src/core/ext/upb-generated/envoy/api/v2/srds.upb.h +1 -2
  200. data/src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.c +2 -1
  201. data/src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.h +95 -88
  202. data/src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.c +48 -28
  203. data/src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.h +305 -210
  204. data/src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upb.c +1 -0
  205. data/src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upb.h +5 -5
  206. data/src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.c +51 -0
  207. data/src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.h +125 -0
  208. data/src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.c +1 -0
  209. data/src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.h +1 -2
  210. data/src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.c +4 -2
  211. data/src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.h +22 -16
  212. data/src/core/ext/upb-generated/envoy/type/http.upb.c +1 -0
  213. data/src/core/ext/upb-generated/envoy/type/http.upb.h +0 -1
  214. data/src/core/ext/upb-generated/envoy/type/matcher/regex.upb.c +16 -0
  215. data/src/core/ext/upb-generated/envoy/type/matcher/regex.upb.h +48 -11
  216. data/src/core/ext/upb-generated/envoy/type/matcher/string.upb.c +1 -0
  217. data/src/core/ext/upb-generated/envoy/type/matcher/string.upb.h +14 -14
  218. data/src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.c +1 -0
  219. data/src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.h +23 -23
  220. data/src/core/ext/upb-generated/envoy/type/percent.upb.c +1 -0
  221. data/src/core/ext/upb-generated/envoy/type/percent.upb.h +8 -9
  222. data/src/core/ext/upb-generated/envoy/type/range.upb.c +1 -0
  223. data/src/core/ext/upb-generated/envoy/type/range.upb.h +15 -16
  224. data/src/core/ext/upb-generated/envoy/type/semantic_version.upb.c +1 -0
  225. data/src/core/ext/upb-generated/envoy/type/semantic_version.upb.h +7 -8
  226. data/src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.c +1 -0
  227. data/src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.h +36 -35
  228. data/src/core/ext/upb-generated/gogoproto/gogo.upb.h +0 -1
  229. data/src/core/ext/upb-generated/google/api/annotations.upb.h +0 -1
  230. data/src/core/ext/upb-generated/google/api/http.upb.h +29 -28
  231. data/src/core/ext/upb-generated/google/protobuf/any.upb.h +5 -6
  232. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +12 -11
  233. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +421 -389
  234. data/src/core/ext/upb-generated/google/protobuf/duration.upb.h +5 -6
  235. data/src/core/ext/upb-generated/google/protobuf/empty.upb.h +1 -2
  236. data/src/core/ext/upb-generated/google/protobuf/struct.upb.c +1 -1
  237. data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +33 -54
  238. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.h +5 -6
  239. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.h +27 -28
  240. data/src/core/ext/upb-generated/google/rpc/status.upb.h +8 -8
  241. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c +1 -1
  242. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h +32 -45
  243. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c +4 -4
  244. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h +157 -178
  245. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h +14 -13
  246. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h +6 -7
  247. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h +59 -56
  248. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.h +11 -12
  249. data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.h +0 -1
  250. data/src/core/ext/upb-generated/udpa/annotations/status.upb.c +28 -0
  251. data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +64 -0
  252. data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.c +6 -6
  253. data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.h +41 -68
  254. data/src/core/ext/upb-generated/validate/validate.upb.c +21 -20
  255. data/src/core/ext/upb-generated/validate/validate.upb.h +569 -562
  256. data/src/core/lib/channel/channel_args.cc +15 -14
  257. data/src/core/lib/channel/channel_args.h +3 -1
  258. data/src/core/lib/channel/channel_stack.h +20 -13
  259. data/src/core/lib/channel/channel_trace.cc +2 -6
  260. data/src/core/lib/channel/channelz.cc +10 -21
  261. data/src/core/lib/channel/channelz.h +3 -2
  262. data/src/core/lib/channel/channelz_registry.cc +5 -3
  263. data/src/core/lib/channel/connected_channel.cc +7 -5
  264. data/src/core/lib/channel/context.h +1 -1
  265. data/src/core/lib/channel/handshaker.cc +11 -13
  266. data/src/core/lib/channel/handshaker.h +4 -2
  267. data/src/core/lib/channel/handshaker_registry.cc +5 -17
  268. data/src/core/lib/channel/status_util.cc +2 -3
  269. data/src/core/lib/compression/message_compress.cc +5 -1
  270. data/src/core/lib/debug/stats.cc +21 -27
  271. data/src/core/lib/debug/stats.h +3 -1
  272. data/src/core/lib/gpr/log_linux.cc +6 -8
  273. data/src/core/lib/gpr/log_posix.cc +6 -8
  274. data/src/core/lib/gpr/spinlock.h +2 -3
  275. data/src/core/lib/gpr/string.cc +10 -33
  276. data/src/core/lib/gpr/string.h +4 -18
  277. data/src/core/lib/gpr/sync_abseil.cc +2 -0
  278. data/src/core/lib/gpr/time.cc +4 -0
  279. data/src/core/lib/gpr/time_posix.cc +1 -1
  280. data/src/core/lib/gprpp/atomic.h +6 -6
  281. data/src/core/lib/gprpp/fork.cc +1 -1
  282. data/src/core/lib/gprpp/global_config_env.cc +8 -6
  283. data/src/core/lib/gprpp/host_port.cc +29 -35
  284. data/src/core/lib/gprpp/host_port.h +14 -17
  285. data/src/core/lib/gprpp/map.h +5 -11
  286. data/src/core/lib/gprpp/ref_counted_ptr.h +5 -0
  287. data/src/core/lib/gprpp/sync.h +9 -0
  288. data/src/core/lib/http/format_request.cc +46 -65
  289. data/src/core/lib/http/httpcli.cc +15 -13
  290. data/src/core/lib/http/httpcli.h +2 -3
  291. data/src/core/lib/http/httpcli_security_connector.cc +10 -10
  292. data/src/core/lib/http/parser.h +2 -3
  293. data/src/core/lib/iomgr/buffer_list.h +22 -21
  294. data/src/core/lib/iomgr/call_combiner.h +3 -2
  295. data/src/core/lib/iomgr/cfstream_handle.cc +4 -2
  296. data/src/core/lib/iomgr/closure.h +2 -3
  297. data/src/core/lib/iomgr/dualstack_socket_posix.cc +47 -0
  298. data/src/core/lib/iomgr/endpoint_cfstream.cc +2 -3
  299. data/src/core/lib/iomgr/endpoint_pair.h +2 -3
  300. data/src/core/lib/iomgr/endpoint_pair_posix.cc +10 -10
  301. data/src/core/lib/iomgr/error.cc +6 -9
  302. data/src/core/lib/iomgr/error.h +0 -1
  303. data/src/core/lib/iomgr/error_cfstream.cc +9 -8
  304. data/src/core/lib/iomgr/ev_apple.cc +356 -0
  305. data/src/core/lib/iomgr/ev_apple.h +43 -0
  306. data/src/core/lib/iomgr/ev_epoll1_linux.cc +25 -29
  307. data/src/core/lib/iomgr/ev_epollex_linux.cc +17 -24
  308. data/src/core/lib/iomgr/ev_poll_posix.cc +9 -8
  309. data/src/core/lib/iomgr/ev_posix.cc +4 -3
  310. data/src/core/lib/iomgr/exec_ctx.h +14 -2
  311. data/src/core/lib/iomgr/iomgr.cc +10 -0
  312. data/src/core/lib/iomgr/iomgr.h +10 -0
  313. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +84 -20
  314. data/src/core/lib/iomgr/is_epollexclusive_available.cc +14 -0
  315. data/src/core/lib/iomgr/pollset_set_custom.cc +10 -10
  316. data/src/core/lib/{gprpp/optional.h → iomgr/pollset_uv.h} +11 -12
  317. data/src/core/lib/iomgr/port.h +2 -21
  318. data/src/core/lib/iomgr/python_util.h +46 -0
  319. data/src/core/lib/iomgr/resolve_address.h +4 -6
  320. data/src/core/lib/iomgr/resolve_address_custom.cc +42 -57
  321. data/src/core/lib/iomgr/resolve_address_custom.h +4 -2
  322. data/src/core/lib/iomgr/resolve_address_posix.cc +10 -11
  323. data/src/core/lib/iomgr/resolve_address_windows.cc +16 -25
  324. data/src/core/lib/iomgr/resource_quota.cc +38 -37
  325. data/src/core/lib/iomgr/sockaddr_utils.cc +29 -33
  326. data/src/core/lib/iomgr/sockaddr_utils.h +10 -15
  327. data/src/core/lib/iomgr/socket_factory_posix.h +2 -3
  328. data/src/core/lib/iomgr/socket_mutator.h +2 -3
  329. data/src/core/lib/iomgr/socket_utils_common_posix.cc +102 -81
  330. data/src/core/lib/iomgr/socket_utils_posix.h +3 -0
  331. data/src/core/lib/iomgr/socket_windows.cc +4 -5
  332. data/src/core/lib/iomgr/tcp_client_cfstream.cc +14 -18
  333. data/src/core/lib/iomgr/tcp_client_custom.cc +6 -9
  334. data/src/core/lib/iomgr/tcp_client_posix.cc +30 -36
  335. data/src/core/lib/iomgr/tcp_client_windows.cc +10 -11
  336. data/src/core/lib/iomgr/tcp_custom.cc +3 -4
  337. data/src/core/lib/iomgr/tcp_custom.h +1 -1
  338. data/src/core/lib/iomgr/tcp_server.cc +3 -4
  339. data/src/core/lib/iomgr/tcp_server.h +7 -5
  340. data/src/core/lib/iomgr/tcp_server_custom.cc +11 -23
  341. data/src/core/lib/iomgr/tcp_server_posix.cc +38 -44
  342. data/src/core/lib/iomgr/tcp_server_utils_posix.h +3 -4
  343. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +7 -8
  344. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +10 -18
  345. data/src/core/lib/iomgr/tcp_server_windows.cc +16 -16
  346. data/src/core/lib/iomgr/tcp_uv.cc +3 -2
  347. data/src/core/lib/iomgr/time_averaged_stats.h +2 -3
  348. data/src/core/lib/iomgr/timer_generic.cc +15 -15
  349. data/src/core/lib/{gprpp/inlined_vector.h → iomgr/timer_generic.h} +19 -17
  350. data/src/core/lib/iomgr/timer_heap.h +2 -3
  351. data/src/core/lib/iomgr/udp_server.cc +32 -36
  352. data/src/core/lib/iomgr/udp_server.h +5 -2
  353. data/src/core/lib/iomgr/unix_sockets_posix.cc +9 -14
  354. data/src/core/lib/iomgr/unix_sockets_posix.h +3 -1
  355. data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +5 -2
  356. data/src/core/lib/json/json.h +3 -2
  357. data/src/core/lib/json/json_reader.cc +25 -26
  358. data/src/core/lib/json/json_writer.cc +13 -12
  359. data/src/core/lib/security/credentials/composite/composite_credentials.cc +12 -0
  360. data/src/core/lib/security/credentials/composite/composite_credentials.h +6 -3
  361. data/src/core/lib/security/credentials/credentials.cc +0 -84
  362. data/src/core/lib/security/credentials/credentials.h +13 -62
  363. data/src/core/lib/security/credentials/fake/fake_credentials.h +4 -0
  364. data/src/core/lib/security/credentials/google_default/credentials_generic.cc +8 -6
  365. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +15 -17
  366. data/src/core/lib/security/credentials/iam/iam_credentials.cc +8 -6
  367. data/src/core/lib/security/credentials/iam/iam_credentials.h +4 -0
  368. data/src/core/lib/security/credentials/jwt/json_token.cc +1 -1
  369. data/src/core/lib/security/credentials/jwt/json_token.h +2 -5
  370. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +7 -4
  371. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +12 -0
  372. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +8 -15
  373. data/src/core/lib/security/credentials/jwt/jwt_verifier.h +2 -3
  374. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +73 -54
  375. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +9 -3
  376. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +19 -6
  377. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +2 -0
  378. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +20 -0
  379. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +10 -0
  380. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +23 -13
  381. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +48 -11
  382. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +21 -6
  383. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +17 -17
  384. data/src/core/lib/security/security_connector/load_system_roots_linux.cc +3 -2
  385. data/src/core/lib/security/security_connector/local/local_security_connector.cc +1 -1
  386. data/src/core/lib/security/security_connector/security_connector.cc +2 -0
  387. data/src/core/lib/security/security_connector/security_connector.h +2 -2
  388. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +38 -36
  389. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.h +8 -5
  390. data/src/core/lib/security/security_connector/ssl_utils.cc +89 -21
  391. data/src/core/lib/security/security_connector/ssl_utils.h +18 -12
  392. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +101 -72
  393. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +27 -5
  394. data/src/core/lib/security/transport/auth_filters.h +0 -5
  395. data/src/core/lib/security/transport/client_auth_filter.cc +11 -11
  396. data/src/core/lib/security/util/json_util.cc +12 -13
  397. data/src/core/lib/slice/slice.cc +38 -1
  398. data/src/core/lib/slice/slice_intern.cc +2 -3
  399. data/src/core/lib/slice/slice_internal.h +15 -0
  400. data/src/core/lib/slice/slice_utils.h +9 -0
  401. data/src/core/lib/surface/byte_buffer_reader.cc +2 -47
  402. data/src/core/lib/surface/call.cc +42 -44
  403. data/src/core/lib/surface/call_log_batch.cc +50 -58
  404. data/src/core/lib/surface/channel.cc +53 -31
  405. data/src/core/lib/surface/channel.h +35 -4
  406. data/src/core/lib/surface/channel_ping.cc +2 -3
  407. data/src/core/lib/surface/completion_queue.cc +304 -47
  408. data/src/core/lib/surface/completion_queue.h +8 -0
  409. data/src/core/lib/surface/event_string.cc +18 -25
  410. data/src/core/lib/surface/event_string.h +3 -1
  411. data/src/core/lib/surface/init.cc +2 -0
  412. data/src/core/lib/surface/init_secure.cc +1 -4
  413. data/src/core/lib/surface/server.cc +971 -837
  414. data/src/core/lib/surface/server.h +66 -12
  415. data/src/core/lib/surface/version.cc +2 -2
  416. data/src/core/lib/transport/byte_stream.h +7 -2
  417. data/src/core/lib/transport/connectivity_state.cc +7 -6
  418. data/src/core/lib/transport/connectivity_state.h +5 -3
  419. data/src/core/lib/transport/metadata.cc +3 -3
  420. data/src/core/lib/transport/metadata_batch.h +2 -3
  421. data/src/core/lib/transport/static_metadata.h +1 -1
  422. data/src/core/lib/transport/status_conversion.cc +6 -14
  423. data/src/core/lib/transport/transport.cc +2 -3
  424. data/src/core/lib/transport/transport.h +9 -2
  425. data/src/core/lib/transport/transport_op_string.cc +61 -102
  426. data/src/core/lib/uri/uri_parser.cc +8 -15
  427. data/src/core/lib/uri/uri_parser.h +2 -3
  428. data/src/core/plugin_registry/grpc_plugin_registry.cc +24 -4
  429. data/src/core/tsi/alts/crypt/aes_gcm.cc +0 -2
  430. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +31 -14
  431. data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +8 -4
  432. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +34 -2
  433. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.h +9 -1
  434. data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +2 -0
  435. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.h +2 -3
  436. data/src/core/tsi/fake_transport_security.cc +10 -15
  437. data/src/core/tsi/ssl/session_cache/ssl_session.h +0 -2
  438. data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +0 -2
  439. data/src/core/tsi/ssl_transport_security.cc +154 -50
  440. data/src/core/tsi/ssl_transport_security.h +22 -10
  441. data/src/core/tsi/ssl_types.h +0 -2
  442. data/src/core/tsi/transport_security.h +6 -9
  443. data/src/core/tsi/transport_security_grpc.h +2 -3
  444. data/src/core/tsi/transport_security_interface.h +8 -3
  445. data/src/ruby/ext/grpc/extconf.rb +5 -2
  446. data/src/ruby/ext/grpc/rb_call.c +12 -3
  447. data/src/ruby/ext/grpc/rb_call.h +4 -0
  448. data/src/ruby/ext/grpc/rb_call_credentials.c +57 -12
  449. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +4 -0
  450. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +6 -0
  451. data/src/ruby/lib/grpc/errors.rb +103 -42
  452. data/src/ruby/lib/grpc/generic/active_call.rb +2 -3
  453. data/src/ruby/lib/grpc/generic/interceptors.rb +5 -5
  454. data/src/ruby/lib/grpc/generic/rpc_server.rb +9 -10
  455. data/src/ruby/lib/grpc/generic/service.rb +5 -4
  456. data/src/ruby/lib/grpc/structs.rb +1 -1
  457. data/src/ruby/lib/grpc/version.rb +1 -1
  458. data/src/ruby/pb/generate_proto_ruby.sh +5 -3
  459. data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +11 -0
  460. data/src/ruby/pb/src/proto/grpc/testing/test_services_pb.rb +16 -0
  461. data/src/ruby/spec/debug_message_spec.rb +134 -0
  462. data/src/ruby/spec/generic/service_spec.rb +2 -0
  463. data/src/ruby/spec/pb/codegen/grpc/testing/package_options_import2.proto +23 -0
  464. data/src/ruby/spec/pb/codegen/grpc/testing/package_options_ruby_style.proto +7 -0
  465. data/src/ruby/spec/pb/codegen/package_option_spec.rb +7 -1
  466. data/src/ruby/spec/support/services.rb +10 -4
  467. data/src/ruby/spec/testdata/ca.pem +18 -13
  468. data/src/ruby/spec/testdata/client.key +26 -14
  469. data/src/ruby/spec/testdata/client.pem +18 -12
  470. data/src/ruby/spec/testdata/server1.key +26 -14
  471. data/src/ruby/spec/testdata/server1.pem +20 -14
  472. data/third_party/abseil-cpp/absl/time/civil_time.cc +175 -0
  473. data/third_party/abseil-cpp/absl/time/civil_time.h +538 -0
  474. data/third_party/abseil-cpp/absl/time/clock.cc +569 -0
  475. data/third_party/abseil-cpp/absl/time/clock.h +74 -0
  476. data/third_party/abseil-cpp/absl/time/duration.cc +922 -0
  477. data/third_party/abseil-cpp/absl/time/format.cc +153 -0
  478. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time.h +332 -0
  479. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +622 -0
  480. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/time_zone.h +384 -0
  481. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/zone_info_source.h +102 -0
  482. data/third_party/abseil-cpp/absl/time/internal/cctz/src/civil_time_detail.cc +94 -0
  483. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_fixed.cc +140 -0
  484. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_fixed.h +52 -0
  485. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc +922 -0
  486. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_if.cc +45 -0
  487. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_if.h +76 -0
  488. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.cc +121 -0
  489. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.h +93 -0
  490. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.cc +958 -0
  491. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.h +138 -0
  492. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.cc +308 -0
  493. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.h +55 -0
  494. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +187 -0
  495. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_posix.cc +159 -0
  496. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_posix.h +132 -0
  497. data/third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +122 -0
  498. data/third_party/abseil-cpp/absl/time/internal/cctz/src/zone_info_source.cc +115 -0
  499. data/third_party/abseil-cpp/absl/time/internal/get_current_time_chrono.inc +31 -0
  500. data/third_party/abseil-cpp/absl/time/internal/get_current_time_posix.inc +24 -0
  501. data/third_party/abseil-cpp/absl/time/time.cc +499 -0
  502. data/third_party/abseil-cpp/absl/time/time.h +1584 -0
  503. data/third_party/boringssl-with-bazel/err_data.c +335 -297
  504. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bitstr.c +3 -3
  505. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_enum.c +3 -3
  506. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_int.c +1 -1
  507. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c +3 -3
  508. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_time.c +2 -2
  509. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_type.c +1 -1
  510. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c +1 -1
  511. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn_pack.c +1 -1
  512. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_enum.c +1 -1
  513. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_int.c +1 -1
  514. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_string.c +1 -1
  515. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/derive_key.c +1 -1
  516. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/tls_cbc.c +1 -0
  517. data/third_party/boringssl-with-bazel/src/crypto/cpu-arm-linux.c +7 -5
  518. data/third_party/boringssl-with-bazel/src/crypto/cpu-intel.c +13 -4
  519. data/third_party/boringssl-with-bazel/src/crypto/crypto.c +11 -0
  520. data/third_party/boringssl-with-bazel/src/{third_party/fiat → crypto/curve25519}/curve25519.c +18 -26
  521. data/third_party/boringssl-with-bazel/src/{third_party/fiat → crypto/curve25519}/curve25519_tables.h +13 -21
  522. data/third_party/boringssl-with-bazel/src/{third_party/fiat → crypto/curve25519}/internal.h +14 -22
  523. data/third_party/boringssl-with-bazel/src/crypto/curve25519/spake25519.c +1 -1
  524. data/third_party/boringssl-with-bazel/src/crypto/dh/dh.c +15 -0
  525. data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa.c +10 -0
  526. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/hash_to_curve.c +385 -0
  527. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/internal.h +56 -0
  528. data/third_party/boringssl-with-bazel/src/crypto/ecdh_extra/ecdh_extra.c +2 -2
  529. data/third_party/boringssl-with-bazel/src/crypto/err/err.c +33 -32
  530. data/third_party/boringssl-with-bazel/src/crypto/evp/evp_asn1.c +143 -0
  531. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/aes_nohw.c +1 -1
  532. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/mode_wrappers.c +17 -1
  533. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c +2 -1
  534. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/exponentiation.c +3 -3
  535. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +25 -12
  536. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/montgomery.c +8 -8
  537. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/mul.c +30 -154
  538. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digests.c +16 -0
  539. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec.c +289 -117
  540. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_key.c +13 -27
  541. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_montgomery.c +96 -55
  542. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/felem.c +25 -7
  543. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/internal.h +434 -161
  544. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/oct.c +63 -71
  545. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p224-64.c +18 -25
  546. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-x86_64-table.h +9481 -9485
  547. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-x86_64.c +104 -122
  548. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256.c +740 -0
  549. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256_table.h +297 -0
  550. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/scalar.c +90 -11
  551. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple.c +125 -148
  552. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple_mul.c +189 -3
  553. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/util.c +3 -3
  554. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/wnaf.c +61 -18
  555. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdh/ecdh.c +2 -2
  556. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c +20 -5
  557. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/fork_detect.c +137 -0
  558. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/fork_detect.h +49 -0
  559. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/getrandom_fillin.h +64 -0
  560. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/internal.h +41 -5
  561. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/rand.c +32 -17
  562. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/urandom.c +24 -114
  563. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/blinding.c +4 -0
  564. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/internal.h +1 -0
  565. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa.c +51 -38
  566. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +15 -1
  567. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +62 -0
  568. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha512.c +44 -35
  569. data/third_party/boringssl-with-bazel/src/crypto/mem.c +47 -16
  570. data/third_party/boringssl-with-bazel/src/crypto/obj/obj_dat.h +15 -1
  571. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/internal.h +7 -0
  572. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c +36 -5
  573. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/deterministic.c +6 -10
  574. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/windows.c +16 -0
  575. data/third_party/boringssl-with-bazel/src/crypto/thread_pthread.c +4 -0
  576. data/third_party/boringssl-with-bazel/src/crypto/thread_win.c +4 -0
  577. data/third_party/boringssl-with-bazel/src/crypto/trust_token/internal.h +249 -0
  578. data/third_party/boringssl-with-bazel/src/crypto/trust_token/pmbtoken.c +1227 -0
  579. data/third_party/boringssl-with-bazel/src/crypto/trust_token/trust_token.c +682 -0
  580. data/third_party/boringssl-with-bazel/src/crypto/x509/a_strex.c +4 -4
  581. data/third_party/boringssl-with-bazel/src/crypto/x509/algorithm.c +8 -0
  582. data/third_party/boringssl-with-bazel/src/crypto/x509/asn1_gen.c +4 -4
  583. data/third_party/boringssl-with-bazel/src/crypto/x509/x509.c +0 -67
  584. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_cmp.c +13 -6
  585. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_req.c +10 -0
  586. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_set.c +57 -0
  587. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_trs.c +4 -1
  588. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +33 -9
  589. data/third_party/boringssl-with-bazel/src/crypto/x509/x509cset.c +25 -0
  590. data/third_party/boringssl-with-bazel/src/crypto/x509/x509name.c +4 -3
  591. data/third_party/boringssl-with-bazel/src/crypto/x509/x_crl.c +35 -13
  592. data/third_party/boringssl-with-bazel/src/crypto/x509/x_pubkey.c +0 -154
  593. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509.c +28 -6
  594. data/third_party/boringssl-with-bazel/src/crypto/x509v3/internal.h +5 -0
  595. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c +74 -35
  596. data/third_party/boringssl-with-bazel/src/include/openssl/aes.h +16 -4
  597. data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +22 -22
  598. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +6 -2
  599. data/third_party/boringssl-with-bazel/src/include/openssl/crypto.h +9 -4
  600. data/third_party/boringssl-with-bazel/src/include/openssl/dh.h +20 -0
  601. data/third_party/boringssl-with-bazel/src/include/openssl/digest.h +1 -0
  602. data/third_party/boringssl-with-bazel/src/include/openssl/dsa.h +16 -0
  603. data/third_party/boringssl-with-bazel/src/include/openssl/ecdsa.h +6 -0
  604. data/third_party/boringssl-with-bazel/src/include/openssl/err.h +2 -0
  605. data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +69 -0
  606. data/third_party/boringssl-with-bazel/src/include/openssl/nid.h +5 -0
  607. data/third_party/boringssl-with-bazel/src/include/openssl/rand.h +3 -17
  608. data/third_party/boringssl-with-bazel/src/include/openssl/rsa.h +31 -0
  609. data/third_party/boringssl-with-bazel/src/include/openssl/sha.h +26 -0
  610. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +191 -79
  611. data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +1 -0
  612. data/third_party/boringssl-with-bazel/src/include/openssl/trust_token.h +282 -0
  613. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +791 -715
  614. data/third_party/boringssl-with-bazel/src/include/openssl/x509_vfy.h +1 -0
  615. data/third_party/boringssl-with-bazel/src/ssl/d1_both.cc +0 -4
  616. data/third_party/boringssl-with-bazel/src/ssl/d1_lib.cc +3 -3
  617. data/third_party/boringssl-with-bazel/src/ssl/dtls_method.cc +13 -4
  618. data/third_party/boringssl-with-bazel/src/ssl/handoff.cc +146 -57
  619. data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +23 -5
  620. data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +30 -22
  621. data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +21 -4
  622. data/third_party/boringssl-with-bazel/src/ssl/internal.h +74 -54
  623. data/third_party/boringssl-with-bazel/src/ssl/s3_both.cc +10 -10
  624. data/third_party/boringssl-with-bazel/src/ssl/s3_lib.cc +2 -2
  625. data/third_party/boringssl-with-bazel/src/ssl/s3_pkt.cc +21 -21
  626. data/third_party/boringssl-with-bazel/src/ssl/ssl_asn1.cc +29 -0
  627. data/third_party/boringssl-with-bazel/src/ssl/ssl_cert.cc +4 -0
  628. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +34 -1
  629. data/third_party/boringssl-with-bazel/src/ssl/ssl_privkey.cc +13 -2
  630. data/third_party/boringssl-with-bazel/src/ssl/ssl_session.cc +44 -5
  631. data/third_party/boringssl-with-bazel/src/ssl/ssl_stat.cc +6 -0
  632. data/third_party/boringssl-with-bazel/src/ssl/ssl_versions.cc +5 -5
  633. data/third_party/boringssl-with-bazel/src/ssl/t1_enc.cc +51 -26
  634. data/third_party/boringssl-with-bazel/src/ssl/t1_lib.cc +47 -53
  635. data/third_party/boringssl-with-bazel/src/ssl/tls13_both.cc +1 -1
  636. data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +129 -48
  637. data/third_party/boringssl-with-bazel/src/ssl/tls13_enc.cc +23 -75
  638. data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +55 -22
  639. data/third_party/boringssl-with-bazel/src/ssl/tls_method.cc +63 -25
  640. data/third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_32.h +245 -175
  641. data/third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_64.h +135 -75
  642. data/third_party/boringssl-with-bazel/src/third_party/fiat/p256_32.h +1593 -1672
  643. data/third_party/boringssl-with-bazel/src/third_party/fiat/p256_64.h +512 -503
  644. data/third_party/upb/upb/decode.c +467 -504
  645. data/third_party/upb/upb/encode.c +163 -121
  646. data/third_party/upb/upb/msg.c +130 -64
  647. data/third_party/upb/upb/msg.h +418 -14
  648. data/third_party/upb/upb/port_def.inc +35 -6
  649. data/third_party/upb/upb/port_undef.inc +8 -1
  650. data/third_party/upb/upb/table.c +53 -75
  651. data/third_party/upb/upb/table.int.h +11 -43
  652. data/third_party/upb/upb/upb.c +148 -124
  653. data/third_party/upb/upb/upb.h +65 -147
  654. data/third_party/upb/upb/upb.hpp +86 -0
  655. metadata +122 -41
  656. data/src/core/ext/filters/client_channel/lb_policy/xds/xds.cc +0 -1908
  657. data/src/core/lib/gprpp/string_view.h +0 -60
  658. data/src/core/tsi/grpc_shadow_boringssl.h +0 -3311
  659. data/third_party/boringssl-with-bazel/src/third_party/fiat/p256.c +0 -1063
  660. data/third_party/upb/upb/generated_util.h +0 -105
@@ -0,0 +1,297 @@
1
+ /* Copyright (c) 2020, 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
+ // This file is generated by make_tables.go.
16
+
17
+ // Base point pre computation
18
+ // --------------------------
19
+ //
20
+ // Two different sorts of precomputed tables are used in the following code.
21
+ // Each contain various points on the curve, where each point is three field
22
+ // elements (x, y, z).
23
+ //
24
+ // For the base point table, z is usually 1 (0 for the point at infinity).
25
+ // This table has 2 * 16 elements, starting with the following:
26
+ // index | bits | point
27
+ // ------+---------+------------------------------
28
+ // 0 | 0 0 0 0 | 0G
29
+ // 1 | 0 0 0 1 | 1G
30
+ // 2 | 0 0 1 0 | 2^64G
31
+ // 3 | 0 0 1 1 | (2^64 + 1)G
32
+ // 4 | 0 1 0 0 | 2^128G
33
+ // 5 | 0 1 0 1 | (2^128 + 1)G
34
+ // 6 | 0 1 1 0 | (2^128 + 2^64)G
35
+ // 7 | 0 1 1 1 | (2^128 + 2^64 + 1)G
36
+ // 8 | 1 0 0 0 | 2^192G
37
+ // 9 | 1 0 0 1 | (2^192 + 1)G
38
+ // 10 | 1 0 1 0 | (2^192 + 2^64)G
39
+ // 11 | 1 0 1 1 | (2^192 + 2^64 + 1)G
40
+ // 12 | 1 1 0 0 | (2^192 + 2^128)G
41
+ // 13 | 1 1 0 1 | (2^192 + 2^128 + 1)G
42
+ // 14 | 1 1 1 0 | (2^192 + 2^128 + 2^64)G
43
+ // 15 | 1 1 1 1 | (2^192 + 2^128 + 2^64 + 1)G
44
+ // followed by a copy of this with each element multiplied by 2^32.
45
+ //
46
+ // The reason for this is so that we can clock bits into four different
47
+ // locations when doing simple scalar multiplies against the base point,
48
+ // and then another four locations using the second 16 elements.
49
+ //
50
+ // Tables for other points have table[i] = iG for i in 0 .. 16.
51
+
52
+ // fiat_p256_g_pre_comp is the table of precomputed base points
53
+ #if defined(BORINGSSL_NISTP256_64BIT)
54
+ static const fiat_p256_felem fiat_p256_g_pre_comp[2][15][2] = {
55
+ {{{0x79e730d418a9143c, 0x75ba95fc5fedb601, 0x79fb732b77622510,
56
+ 0x18905f76a53755c6},
57
+ {0xddf25357ce95560a, 0x8b4ab8e4ba19e45c, 0xd2e88688dd21f325,
58
+ 0x8571ff1825885d85}},
59
+ {{0x4f922fc516a0d2bb, 0x0d5cc16c1a623499, 0x9241cf3a57c62c8b,
60
+ 0x2f5e6961fd1b667f},
61
+ {0x5c15c70bf5a01797, 0x3d20b44d60956192, 0x04911b37071fdb52,
62
+ 0xf648f9168d6f0f7b}},
63
+ {{0x9e566847e137bbbc, 0xe434469e8a6a0bec, 0xb1c4276179d73463,
64
+ 0x5abe0285133d0015},
65
+ {0x92aa837cc04c7dab, 0x573d9f4c43260c07, 0x0c93156278e6cc37,
66
+ 0x94bb725b6b6f7383}},
67
+ {{0x62a8c244bfe20925, 0x91c19ac38fdce867, 0x5a96a5d5dd387063,
68
+ 0x61d587d421d324f6},
69
+ {0xe87673a2a37173ea, 0x2384800853778b65, 0x10f8441e05bab43e,
70
+ 0xfa11fe124621efbe}},
71
+ {{0x1c891f2b2cb19ffd, 0x01ba8d5bb1923c23, 0xb6d03d678ac5ca8e,
72
+ 0x586eb04c1f13bedc},
73
+ {0x0c35c6e527e8ed09, 0x1e81a33c1819ede2, 0x278fd6c056c652fa,
74
+ 0x19d5ac0870864f11}},
75
+ {{0x62577734d2b533d5, 0x673b8af6a1bdddc0, 0x577e7c9aa79ec293,
76
+ 0xbb6de651c3b266b1},
77
+ {0xe7e9303ab65259b3, 0xd6a0afd3d03a7480, 0xc5ac83d19b3cfc27,
78
+ 0x60b4619a5d18b99b}},
79
+ {{0xbd6a38e11ae5aa1c, 0xb8b7652b49e73658, 0x0b130014ee5f87ed,
80
+ 0x9d0f27b2aeebffcd},
81
+ {0xca9246317a730a55, 0x9c955b2fddbbc83a, 0x07c1dfe0ac019a71,
82
+ 0x244a566d356ec48d}},
83
+ {{0x56f8410ef4f8b16a, 0x97241afec47b266a, 0x0a406b8e6d9c87c1,
84
+ 0x803f3e02cd42ab1b},
85
+ {0x7f0309a804dbec69, 0xa83b85f73bbad05f, 0xc6097273ad8e197f,
86
+ 0xc097440e5067adc1}},
87
+ {{0x846a56f2c379ab34, 0xa8ee068b841df8d1, 0x20314459176c68ef,
88
+ 0xf1af32d5915f1f30},
89
+ {0x99c375315d75bd50, 0x837cffbaf72f67bc, 0x0613a41848d7723f,
90
+ 0x23d0f130e2d41c8b}},
91
+ {{0xed93e225d5be5a2b, 0x6fe799835934f3c6, 0x4314092622626ffc,
92
+ 0x50bbb4d97990216a},
93
+ {0x378191c6e57ec63e, 0x65422c40181dcdb2, 0x41a8099b0236e0f6,
94
+ 0x2b10011801fe49c3}},
95
+ {{0xfc68b5c59b391593, 0xc385f5a2598270fc, 0x7144f3aad19adcbb,
96
+ 0xdd55899983fbae0c},
97
+ {0x93b88b8e74b82ff4, 0xd2e03c4071e734c9, 0x9a7a9eaf43c0322a,
98
+ 0xe6e4c551149d6041}},
99
+ {{0x5fe14bfe80ec21fe, 0xf6ce116ac255be82, 0x98bc5a072f4a5d67,
100
+ 0xfad27148db7e63af},
101
+ {0x90c0b6ac29ab05b3, 0x37a9a83c4e251ae6, 0x0a7dc875c2aade7d,
102
+ 0x77387de39f0e1a84}},
103
+ {{0x1e9ecc49a56c0dd7, 0xa5cffcd846086c74, 0x8f7a1408f505aece,
104
+ 0xb37b85c0bef0c47e},
105
+ {0x3596b6e4cc0e6a8f, 0xfd6d4bbf6b388f23, 0xaba453fac39cef4e,
106
+ 0x9c135ac8f9f628d5}},
107
+ {{0x0a1c729495c8f8be, 0x2961c4803bf362bf, 0x9e418403df63d4ac,
108
+ 0xc109f9cb91ece900},
109
+ {0xc2d095d058945705, 0xb9083d96ddeb85c0, 0x84692b8d7a40449b,
110
+ 0x9bc3344f2eee1ee1}},
111
+ {{0x0d5ae35642913074, 0x55491b2748a542b1, 0x469ca665b310732a,
112
+ 0x29591d525f1a4cc1},
113
+ {0xe76f5b6bb84f983f, 0xbe7eef419f5f84e1, 0x1200d49680baa189,
114
+ 0x6376551f18ef332c}}},
115
+ {{{0x202886024147519a, 0xd0981eac26b372f0, 0xa9d4a7caa785ebc8,
116
+ 0xd953c50ddbdf58e9},
117
+ {0x9d6361ccfd590f8f, 0x72e9626b44e6c917, 0x7fd9611022eb64cf,
118
+ 0x863ebb7e9eb288f3}},
119
+ {{0x4fe7ee31b0e63d34, 0xf4600572a9e54fab, 0xc0493334d5e7b5a4,
120
+ 0x8589fb9206d54831},
121
+ {0xaa70f5cc6583553a, 0x0879094ae25649e5, 0xcc90450710044652,
122
+ 0xebb0696d02541c4f}},
123
+ {{0xabbaa0c03b89da99, 0xa6f2d79eb8284022, 0x27847862b81c05e8,
124
+ 0x337a4b5905e54d63},
125
+ {0x3c67500d21f7794a, 0x207005b77d6d7f61, 0x0a5a378104cfd6e8,
126
+ 0x0d65e0d5f4c2fbd6}},
127
+ {{0xd433e50f6d3549cf, 0x6f33696ffacd665e, 0x695bfdacce11fcb4,
128
+ 0x810ee252af7c9860},
129
+ {0x65450fe17159bb2c, 0xf7dfbebe758b357b, 0x2b057e74d69fea72,
130
+ 0xd485717a92731745}},
131
+ {{0xce1f69bbe83f7669, 0x09f8ae8272877d6b, 0x9548ae543244278d,
132
+ 0x207755dee3c2c19c},
133
+ {0x87bd61d96fef1945, 0x18813cefb12d28c3, 0x9fbcd1d672df64aa,
134
+ 0x48dc5ee57154b00d}},
135
+ {{0xef0f469ef49a3154, 0x3e85a5956e2b2e9a, 0x45aaec1eaa924a9c,
136
+ 0xaa12dfc8a09e4719},
137
+ {0x26f272274df69f1d, 0xe0e4c82ca2ff5e73, 0xb9d8ce73b7a9dd44,
138
+ 0x6c036e73e48ca901}},
139
+ {{0xe1e421e1a47153f0, 0xb86c3b79920418c9, 0x93bdce87705d7672,
140
+ 0xf25ae793cab79a77},
141
+ {0x1f3194a36d869d0c, 0x9d55c8824986c264, 0x49fb5ea3096e945e,
142
+ 0x39b8e65313db0a3e}},
143
+ {{0xe3417bc035d0b34a, 0x440b386b8327c0a7, 0x8fb7262dac0362d1,
144
+ 0x2c41114ce0cdf943},
145
+ {0x2ba5cef1ad95a0b1, 0xc09b37a867d54362, 0x26d6cdd201e486c9,
146
+ 0x20477abf42ff9297}},
147
+ {{0x0f121b41bc0a67d2, 0x62d4760a444d248a, 0x0e044f1d659b4737,
148
+ 0x08fde365250bb4a8},
149
+ {0xaceec3da848bf287, 0xc2a62182d3369d6e, 0x3582dfdc92449482,
150
+ 0x2f7e2fd2565d6cd7}},
151
+ {{0x0a0122b5178a876b, 0x51ff96ff085104b4, 0x050b31ab14f29f76,
152
+ 0x84abb28b5f87d4e6},
153
+ {0xd5ed439f8270790a, 0x2d6cb59d85e3f46b, 0x75f55c1b6c1e2212,
154
+ 0xe5436f6717655640}},
155
+ {{0xc2965ecc9aeb596d, 0x01ea03e7023c92b4, 0x4704b4b62e013961,
156
+ 0x0ca8fd3f905ea367},
157
+ {0x92523a42551b2b61, 0x1eb7a89c390fcd06, 0xe7f1d2be0392a63e,
158
+ 0x96dca2644ddb0c33}},
159
+ {{0x231c210e15339848, 0xe87a28e870778c8d, 0x9d1de6616956e170,
160
+ 0x4ac3c9382bb09c0b},
161
+ {0x19be05516998987d, 0x8b2376c4ae09f4d6, 0x1de0b7651a3f933d,
162
+ 0x380d94c7e39705f4}},
163
+ {{0x3685954b8c31c31d, 0x68533d005bf21a0c, 0x0bd7626e75c79ec9,
164
+ 0xca17754742c69d54},
165
+ {0xcc6edafff6d2dbb2, 0xfd0d8cbd174a9d18, 0x875e8793aa4578e8,
166
+ 0xa976a7139cab2ce6}},
167
+ {{0xce37ab11b43ea1db, 0x0a7ff1a95259d292, 0x851b02218f84f186,
168
+ 0xa7222beadefaad13},
169
+ {0xa2ac78ec2b0a9144, 0x5a024051f2fa59c5, 0x91d1eca56147ce38,
170
+ 0xbe94d523bc2ac690}},
171
+ {{0x2d8daefd79ec1a0f, 0x3bbcd6fdceb39c97, 0xf5575ffc58f61a95,
172
+ 0xdbd986c4adf7b420},
173
+ {0x81aa881415f39eb7, 0x6ee2fcf5b98d976c, 0x5465475dcf2f717d,
174
+ 0x8e24d3c46860bbd0}}}};
175
+ #else
176
+ static const fiat_p256_felem fiat_p256_g_pre_comp[2][15][2] = {
177
+ {{{0x18a9143c, 0x79e730d4, 0x5fedb601, 0x75ba95fc, 0x77622510, 0x79fb732b,
178
+ 0xa53755c6, 0x18905f76},
179
+ {0xce95560a, 0xddf25357, 0xba19e45c, 0x8b4ab8e4, 0xdd21f325, 0xd2e88688,
180
+ 0x25885d85, 0x8571ff18}},
181
+ {{0x16a0d2bb, 0x4f922fc5, 0x1a623499, 0x0d5cc16c, 0x57c62c8b, 0x9241cf3a,
182
+ 0xfd1b667f, 0x2f5e6961},
183
+ {0xf5a01797, 0x5c15c70b, 0x60956192, 0x3d20b44d, 0x071fdb52, 0x04911b37,
184
+ 0x8d6f0f7b, 0xf648f916}},
185
+ {{0xe137bbbc, 0x9e566847, 0x8a6a0bec, 0xe434469e, 0x79d73463, 0xb1c42761,
186
+ 0x133d0015, 0x5abe0285},
187
+ {0xc04c7dab, 0x92aa837c, 0x43260c07, 0x573d9f4c, 0x78e6cc37, 0x0c931562,
188
+ 0x6b6f7383, 0x94bb725b}},
189
+ {{0xbfe20925, 0x62a8c244, 0x8fdce867, 0x91c19ac3, 0xdd387063, 0x5a96a5d5,
190
+ 0x21d324f6, 0x61d587d4},
191
+ {0xa37173ea, 0xe87673a2, 0x53778b65, 0x23848008, 0x05bab43e, 0x10f8441e,
192
+ 0x4621efbe, 0xfa11fe12}},
193
+ {{0x2cb19ffd, 0x1c891f2b, 0xb1923c23, 0x01ba8d5b, 0x8ac5ca8e, 0xb6d03d67,
194
+ 0x1f13bedc, 0x586eb04c},
195
+ {0x27e8ed09, 0x0c35c6e5, 0x1819ede2, 0x1e81a33c, 0x56c652fa, 0x278fd6c0,
196
+ 0x70864f11, 0x19d5ac08}},
197
+ {{0xd2b533d5, 0x62577734, 0xa1bdddc0, 0x673b8af6, 0xa79ec293, 0x577e7c9a,
198
+ 0xc3b266b1, 0xbb6de651},
199
+ {0xb65259b3, 0xe7e9303a, 0xd03a7480, 0xd6a0afd3, 0x9b3cfc27, 0xc5ac83d1,
200
+ 0x5d18b99b, 0x60b4619a}},
201
+ {{0x1ae5aa1c, 0xbd6a38e1, 0x49e73658, 0xb8b7652b, 0xee5f87ed, 0x0b130014,
202
+ 0xaeebffcd, 0x9d0f27b2},
203
+ {0x7a730a55, 0xca924631, 0xddbbc83a, 0x9c955b2f, 0xac019a71, 0x07c1dfe0,
204
+ 0x356ec48d, 0x244a566d}},
205
+ {{0xf4f8b16a, 0x56f8410e, 0xc47b266a, 0x97241afe, 0x6d9c87c1, 0x0a406b8e,
206
+ 0xcd42ab1b, 0x803f3e02},
207
+ {0x04dbec69, 0x7f0309a8, 0x3bbad05f, 0xa83b85f7, 0xad8e197f, 0xc6097273,
208
+ 0x5067adc1, 0xc097440e}},
209
+ {{0xc379ab34, 0x846a56f2, 0x841df8d1, 0xa8ee068b, 0x176c68ef, 0x20314459,
210
+ 0x915f1f30, 0xf1af32d5},
211
+ {0x5d75bd50, 0x99c37531, 0xf72f67bc, 0x837cffba, 0x48d7723f, 0x0613a418,
212
+ 0xe2d41c8b, 0x23d0f130}},
213
+ {{0xd5be5a2b, 0xed93e225, 0x5934f3c6, 0x6fe79983, 0x22626ffc, 0x43140926,
214
+ 0x7990216a, 0x50bbb4d9},
215
+ {0xe57ec63e, 0x378191c6, 0x181dcdb2, 0x65422c40, 0x0236e0f6, 0x41a8099b,
216
+ 0x01fe49c3, 0x2b100118}},
217
+ {{0x9b391593, 0xfc68b5c5, 0x598270fc, 0xc385f5a2, 0xd19adcbb, 0x7144f3aa,
218
+ 0x83fbae0c, 0xdd558999},
219
+ {0x74b82ff4, 0x93b88b8e, 0x71e734c9, 0xd2e03c40, 0x43c0322a, 0x9a7a9eaf,
220
+ 0x149d6041, 0xe6e4c551}},
221
+ {{0x80ec21fe, 0x5fe14bfe, 0xc255be82, 0xf6ce116a, 0x2f4a5d67, 0x98bc5a07,
222
+ 0xdb7e63af, 0xfad27148},
223
+ {0x29ab05b3, 0x90c0b6ac, 0x4e251ae6, 0x37a9a83c, 0xc2aade7d, 0x0a7dc875,
224
+ 0x9f0e1a84, 0x77387de3}},
225
+ {{0xa56c0dd7, 0x1e9ecc49, 0x46086c74, 0xa5cffcd8, 0xf505aece, 0x8f7a1408,
226
+ 0xbef0c47e, 0xb37b85c0},
227
+ {0xcc0e6a8f, 0x3596b6e4, 0x6b388f23, 0xfd6d4bbf, 0xc39cef4e, 0xaba453fa,
228
+ 0xf9f628d5, 0x9c135ac8}},
229
+ {{0x95c8f8be, 0x0a1c7294, 0x3bf362bf, 0x2961c480, 0xdf63d4ac, 0x9e418403,
230
+ 0x91ece900, 0xc109f9cb},
231
+ {0x58945705, 0xc2d095d0, 0xddeb85c0, 0xb9083d96, 0x7a40449b, 0x84692b8d,
232
+ 0x2eee1ee1, 0x9bc3344f}},
233
+ {{0x42913074, 0x0d5ae356, 0x48a542b1, 0x55491b27, 0xb310732a, 0x469ca665,
234
+ 0x5f1a4cc1, 0x29591d52},
235
+ {0xb84f983f, 0xe76f5b6b, 0x9f5f84e1, 0xbe7eef41, 0x80baa189, 0x1200d496,
236
+ 0x18ef332c, 0x6376551f}}},
237
+ {{{0x4147519a, 0x20288602, 0x26b372f0, 0xd0981eac, 0xa785ebc8, 0xa9d4a7ca,
238
+ 0xdbdf58e9, 0xd953c50d},
239
+ {0xfd590f8f, 0x9d6361cc, 0x44e6c917, 0x72e9626b, 0x22eb64cf, 0x7fd96110,
240
+ 0x9eb288f3, 0x863ebb7e}},
241
+ {{0xb0e63d34, 0x4fe7ee31, 0xa9e54fab, 0xf4600572, 0xd5e7b5a4, 0xc0493334,
242
+ 0x06d54831, 0x8589fb92},
243
+ {0x6583553a, 0xaa70f5cc, 0xe25649e5, 0x0879094a, 0x10044652, 0xcc904507,
244
+ 0x02541c4f, 0xebb0696d}},
245
+ {{0x3b89da99, 0xabbaa0c0, 0xb8284022, 0xa6f2d79e, 0xb81c05e8, 0x27847862,
246
+ 0x05e54d63, 0x337a4b59},
247
+ {0x21f7794a, 0x3c67500d, 0x7d6d7f61, 0x207005b7, 0x04cfd6e8, 0x0a5a3781,
248
+ 0xf4c2fbd6, 0x0d65e0d5}},
249
+ {{0x6d3549cf, 0xd433e50f, 0xfacd665e, 0x6f33696f, 0xce11fcb4, 0x695bfdac,
250
+ 0xaf7c9860, 0x810ee252},
251
+ {0x7159bb2c, 0x65450fe1, 0x758b357b, 0xf7dfbebe, 0xd69fea72, 0x2b057e74,
252
+ 0x92731745, 0xd485717a}},
253
+ {{0xe83f7669, 0xce1f69bb, 0x72877d6b, 0x09f8ae82, 0x3244278d, 0x9548ae54,
254
+ 0xe3c2c19c, 0x207755de},
255
+ {0x6fef1945, 0x87bd61d9, 0xb12d28c3, 0x18813cef, 0x72df64aa, 0x9fbcd1d6,
256
+ 0x7154b00d, 0x48dc5ee5}},
257
+ {{0xf49a3154, 0xef0f469e, 0x6e2b2e9a, 0x3e85a595, 0xaa924a9c, 0x45aaec1e,
258
+ 0xa09e4719, 0xaa12dfc8},
259
+ {0x4df69f1d, 0x26f27227, 0xa2ff5e73, 0xe0e4c82c, 0xb7a9dd44, 0xb9d8ce73,
260
+ 0xe48ca901, 0x6c036e73}},
261
+ {{0xa47153f0, 0xe1e421e1, 0x920418c9, 0xb86c3b79, 0x705d7672, 0x93bdce87,
262
+ 0xcab79a77, 0xf25ae793},
263
+ {0x6d869d0c, 0x1f3194a3, 0x4986c264, 0x9d55c882, 0x096e945e, 0x49fb5ea3,
264
+ 0x13db0a3e, 0x39b8e653}},
265
+ {{0x35d0b34a, 0xe3417bc0, 0x8327c0a7, 0x440b386b, 0xac0362d1, 0x8fb7262d,
266
+ 0xe0cdf943, 0x2c41114c},
267
+ {0xad95a0b1, 0x2ba5cef1, 0x67d54362, 0xc09b37a8, 0x01e486c9, 0x26d6cdd2,
268
+ 0x42ff9297, 0x20477abf}},
269
+ {{0xbc0a67d2, 0x0f121b41, 0x444d248a, 0x62d4760a, 0x659b4737, 0x0e044f1d,
270
+ 0x250bb4a8, 0x08fde365},
271
+ {0x848bf287, 0xaceec3da, 0xd3369d6e, 0xc2a62182, 0x92449482, 0x3582dfdc,
272
+ 0x565d6cd7, 0x2f7e2fd2}},
273
+ {{0x178a876b, 0x0a0122b5, 0x085104b4, 0x51ff96ff, 0x14f29f76, 0x050b31ab,
274
+ 0x5f87d4e6, 0x84abb28b},
275
+ {0x8270790a, 0xd5ed439f, 0x85e3f46b, 0x2d6cb59d, 0x6c1e2212, 0x75f55c1b,
276
+ 0x17655640, 0xe5436f67}},
277
+ {{0x9aeb596d, 0xc2965ecc, 0x023c92b4, 0x01ea03e7, 0x2e013961, 0x4704b4b6,
278
+ 0x905ea367, 0x0ca8fd3f},
279
+ {0x551b2b61, 0x92523a42, 0x390fcd06, 0x1eb7a89c, 0x0392a63e, 0xe7f1d2be,
280
+ 0x4ddb0c33, 0x96dca264}},
281
+ {{0x15339848, 0x231c210e, 0x70778c8d, 0xe87a28e8, 0x6956e170, 0x9d1de661,
282
+ 0x2bb09c0b, 0x4ac3c938},
283
+ {0x6998987d, 0x19be0551, 0xae09f4d6, 0x8b2376c4, 0x1a3f933d, 0x1de0b765,
284
+ 0xe39705f4, 0x380d94c7}},
285
+ {{0x8c31c31d, 0x3685954b, 0x5bf21a0c, 0x68533d00, 0x75c79ec9, 0x0bd7626e,
286
+ 0x42c69d54, 0xca177547},
287
+ {0xf6d2dbb2, 0xcc6edaff, 0x174a9d18, 0xfd0d8cbd, 0xaa4578e8, 0x875e8793,
288
+ 0x9cab2ce6, 0xa976a713}},
289
+ {{0xb43ea1db, 0xce37ab11, 0x5259d292, 0x0a7ff1a9, 0x8f84f186, 0x851b0221,
290
+ 0xdefaad13, 0xa7222bea},
291
+ {0x2b0a9144, 0xa2ac78ec, 0xf2fa59c5, 0x5a024051, 0x6147ce38, 0x91d1eca5,
292
+ 0xbc2ac690, 0xbe94d523}},
293
+ {{0x79ec1a0f, 0x2d8daefd, 0xceb39c97, 0x3bbcd6fd, 0x58f61a95, 0xf5575ffc,
294
+ 0xadf7b420, 0xdbd986c4},
295
+ {0x15f39eb7, 0x81aa8814, 0xb98d976c, 0x6ee2fcf5, 0xcf2f717d, 0x5465475d,
296
+ 0x6860bbd0, 0x8e24d3c4}}}};
297
+ #endif
@@ -51,6 +51,45 @@ int ec_random_nonzero_scalar(const EC_GROUP *group, EC_SCALAR *out,
51
51
  additional_data);
52
52
  }
53
53
 
54
+ void ec_scalar_to_bytes(const EC_GROUP *group, uint8_t *out, size_t *out_len,
55
+ const EC_SCALAR *in) {
56
+ size_t len = BN_num_bytes(&group->order);
57
+ for (size_t i = 0; i < len; i++) {
58
+ out[len - i - 1] = in->bytes[i];
59
+ }
60
+ *out_len = len;
61
+ }
62
+
63
+ int ec_scalar_from_bytes(const EC_GROUP *group, EC_SCALAR *out,
64
+ const uint8_t *in, size_t len) {
65
+ if (len != BN_num_bytes(&group->order)) {
66
+ OPENSSL_PUT_ERROR(EC, EC_R_INVALID_SCALAR);
67
+ return 0;
68
+ }
69
+
70
+ OPENSSL_memset(out, 0, sizeof(EC_SCALAR));
71
+
72
+ for (size_t i = 0; i < len; i++) {
73
+ out->bytes[i] = in[len - i - 1];
74
+ }
75
+
76
+ if (!bn_less_than_words(out->words, group->order.d, group->order.width)) {
77
+ OPENSSL_PUT_ERROR(EC, EC_R_INVALID_SCALAR);
78
+ return 0;
79
+ }
80
+
81
+ return 1;
82
+ }
83
+
84
+ void ec_scalar_reduce(const EC_GROUP *group, EC_SCALAR *out,
85
+ const BN_ULONG *words, size_t num) {
86
+ // Convert "from" Montgomery form so the value is reduced modulo the order.
87
+ bn_from_montgomery_small(out->words, group->order.width, words, num,
88
+ group->order_mont);
89
+ // Convert "to" Montgomery form to remove the R^-1 factor added.
90
+ ec_scalar_to_montgomery(group, out, out);
91
+ }
92
+
54
93
  void ec_scalar_add(const EC_GROUP *group, EC_SCALAR *r, const EC_SCALAR *a,
55
94
  const EC_SCALAR *b) {
56
95
  const BIGNUM *order = &group->order;
@@ -59,6 +98,26 @@ void ec_scalar_add(const EC_GROUP *group, EC_SCALAR *r, const EC_SCALAR *a,
59
98
  OPENSSL_cleanse(tmp, sizeof(tmp));
60
99
  }
61
100
 
101
+ void ec_scalar_sub(const EC_GROUP *group, EC_SCALAR *r, const EC_SCALAR *a,
102
+ const EC_SCALAR *b) {
103
+ const BIGNUM *order = &group->order;
104
+ BN_ULONG tmp[EC_MAX_WORDS];
105
+ bn_mod_sub_words(r->words, a->words, b->words, order->d, tmp, order->width);
106
+ OPENSSL_cleanse(tmp, sizeof(tmp));
107
+ }
108
+
109
+ void ec_scalar_neg(const EC_GROUP *group, EC_SCALAR *r, const EC_SCALAR *a) {
110
+ EC_SCALAR zero;
111
+ OPENSSL_memset(&zero, 0, sizeof(EC_SCALAR));
112
+ ec_scalar_sub(group, r, &zero, a);
113
+ }
114
+
115
+ void ec_scalar_select(const EC_GROUP *group, EC_SCALAR *out, BN_ULONG mask,
116
+ const EC_SCALAR *a, const EC_SCALAR *b) {
117
+ const BIGNUM *order = &group->order;
118
+ bn_select_words(out->words, mask, a->words, b->words, order->width);
119
+ }
120
+
62
121
  void ec_scalar_to_montgomery(const EC_GROUP *group, EC_SCALAR *r,
63
122
  const EC_SCALAR *a) {
64
123
  const BIGNUM *order = &group->order;
@@ -68,7 +127,8 @@ void ec_scalar_to_montgomery(const EC_GROUP *group, EC_SCALAR *r,
68
127
  void ec_scalar_from_montgomery(const EC_GROUP *group, EC_SCALAR *r,
69
128
  const EC_SCALAR *a) {
70
129
  const BIGNUM *order = &group->order;
71
- bn_from_montgomery_small(r->words, a->words, order->width, group->order_mont);
130
+ bn_from_montgomery_small(r->words, order->width, a->words, order->width,
131
+ group->order_mont);
72
132
  }
73
133
 
74
134
  void ec_scalar_mul_montgomery(const EC_GROUP *group, EC_SCALAR *r,
@@ -78,19 +138,38 @@ void ec_scalar_mul_montgomery(const EC_GROUP *group, EC_SCALAR *r,
78
138
  group->order_mont);
79
139
  }
80
140
 
81
- void ec_simple_scalar_inv_montgomery(const EC_GROUP *group, EC_SCALAR *r,
82
- const EC_SCALAR *a) {
141
+ void ec_simple_scalar_inv0_montgomery(const EC_GROUP *group, EC_SCALAR *r,
142
+ const EC_SCALAR *a) {
83
143
  const BIGNUM *order = &group->order;
84
- bn_mod_inverse_prime_mont_small(r->words, a->words, order->width,
85
- group->order_mont);
144
+ bn_mod_inverse0_prime_mont_small(r->words, a->words, order->width,
145
+ group->order_mont);
86
146
  }
87
147
 
88
- void ec_scalar_inv_montgomery(const EC_GROUP *group, EC_SCALAR *r,
89
- const EC_SCALAR *a) {
90
- group->meth->scalar_inv_montgomery(group, r, a);
148
+ int ec_simple_scalar_to_montgomery_inv_vartime(const EC_GROUP *group,
149
+ EC_SCALAR *r,
150
+ const EC_SCALAR *a) {
151
+ if (ec_scalar_is_zero(group, a)) {
152
+ return 0;
153
+ }
154
+
155
+ // This implementation (in fact) runs in constant time,
156
+ // even though for this interface it is not mandatory.
157
+
158
+ // r = a^-1 in the Montgomery domain. This is
159
+ // |ec_scalar_to_montgomery| followed by |ec_scalar_inv0_montgomery|, but
160
+ // |ec_scalar_inv0_montgomery| followed by |ec_scalar_from_montgomery| is
161
+ // equivalent and slightly more efficient.
162
+ ec_scalar_inv0_montgomery(group, r, a);
163
+ ec_scalar_from_montgomery(group, r, r);
164
+ return 1;
165
+ }
166
+
167
+ void ec_scalar_inv0_montgomery(const EC_GROUP *group, EC_SCALAR *r,
168
+ const EC_SCALAR *a) {
169
+ group->meth->scalar_inv0_montgomery(group, r, a);
91
170
  }
92
171
 
93
- int ec_scalar_inv_montgomery_vartime(const EC_GROUP *group, EC_SCALAR *r,
94
- const EC_SCALAR *a) {
95
- return group->meth->scalar_inv_montgomery_vartime(group, r, a);
172
+ int ec_scalar_to_montgomery_inv_vartime(const EC_GROUP *group, EC_SCALAR *r,
173
+ const EC_SCALAR *a) {
174
+ return group->meth->scalar_to_montgomery_inv_vartime(group, r, a);
96
175
  }
@@ -101,22 +101,13 @@ void ec_GFp_simple_group_finish(EC_GROUP *group) {
101
101
  int ec_GFp_simple_group_set_curve(EC_GROUP *group, const BIGNUM *p,
102
102
  const BIGNUM *a, const BIGNUM *b,
103
103
  BN_CTX *ctx) {
104
- int ret = 0;
105
- BN_CTX *new_ctx = NULL;
106
-
107
104
  // p must be a prime > 3
108
105
  if (BN_num_bits(p) <= 2 || !BN_is_odd(p)) {
109
106
  OPENSSL_PUT_ERROR(EC, EC_R_INVALID_FIELD);
110
107
  return 0;
111
108
  }
112
109
 
113
- if (ctx == NULL) {
114
- ctx = new_ctx = BN_CTX_new();
115
- if (ctx == NULL) {
116
- return 0;
117
- }
118
- }
119
-
110
+ int ret = 0;
120
111
  BN_CTX_start(ctx);
121
112
  BIGNUM *tmp = BN_CTX_get(ctx);
122
113
  if (tmp == NULL) {
@@ -131,33 +122,23 @@ int ec_GFp_simple_group_set_curve(EC_GROUP *group, const BIGNUM *p,
131
122
  // Store the field in minimal form, so it can be used with |BN_ULONG| arrays.
132
123
  bn_set_minimal_width(&group->field);
133
124
 
134
- // group->a
135
- if (!BN_nnmod(tmp, a, &group->field, ctx) ||
136
- !ec_bignum_to_felem(group, &group->a, tmp)) {
125
+ if (!ec_bignum_to_felem(group, &group->a, a) ||
126
+ !ec_bignum_to_felem(group, &group->b, b) ||
127
+ !ec_bignum_to_felem(group, &group->one, BN_value_one())) {
137
128
  goto err;
138
129
  }
139
130
 
140
131
  // group->a_is_minus3
141
- if (!BN_add_word(tmp, 3)) {
132
+ if (!BN_copy(tmp, a) ||
133
+ !BN_add_word(tmp, 3)) {
142
134
  goto err;
143
135
  }
144
136
  group->a_is_minus3 = (0 == BN_cmp(tmp, &group->field));
145
137
 
146
- // group->b
147
- if (!BN_nnmod(tmp, b, &group->field, ctx) ||
148
- !ec_bignum_to_felem(group, &group->b, tmp)) {
149
- goto err;
150
- }
151
-
152
- if (!ec_bignum_to_felem(group, &group->one, BN_value_one())) {
153
- goto err;
154
- }
155
-
156
138
  ret = 1;
157
139
 
158
140
  err:
159
141
  BN_CTX_end(ctx);
160
- BN_CTX_free(new_ctx);
161
142
  return ret;
162
143
  }
163
144
 
@@ -190,24 +171,6 @@ void ec_GFp_simple_point_set_to_infinity(const EC_GROUP *group,
190
171
  ec_GFp_simple_point_init(point);
191
172
  }
192
173
 
193
- int ec_GFp_simple_point_set_affine_coordinates(const EC_GROUP *group,
194
- EC_RAW_POINT *point,
195
- const BIGNUM *x,
196
- const BIGNUM *y) {
197
- if (x == NULL || y == NULL) {
198
- OPENSSL_PUT_ERROR(EC, ERR_R_PASSED_NULL_PARAMETER);
199
- return 0;
200
- }
201
-
202
- if (!ec_bignum_to_felem(group, &point->X, x) ||
203
- !ec_bignum_to_felem(group, &point->Y, y)) {
204
- return 0;
205
- }
206
- OPENSSL_memcpy(&point->Z, &group->one, sizeof(EC_FELEM));
207
-
208
- return 1;
209
- }
210
-
211
174
  void ec_GFp_simple_invert(const EC_GROUP *group, EC_RAW_POINT *point) {
212
175
  ec_felem_neg(group, &point->Y, &point->Y);
213
176
  }
@@ -219,10 +182,6 @@ int ec_GFp_simple_is_at_infinity(const EC_GROUP *group,
219
182
 
220
183
  int ec_GFp_simple_is_on_curve(const EC_GROUP *group,
221
184
  const EC_RAW_POINT *point) {
222
- if (ec_GFp_simple_is_at_infinity(group, point)) {
223
- return 1;
224
- }
225
-
226
185
  // We have a curve defined by a Weierstrass equation
227
186
  // y^2 = x^3 + a*x + b.
228
187
  // The point to consider is given in Jacobian projective coordinates
@@ -231,6 +190,9 @@ int ec_GFp_simple_is_on_curve(const EC_GROUP *group,
231
190
  // into
232
191
  // Y^2 = X^3 + a*X*Z^4 + b*Z^6.
233
192
  // To test this, we add up the right-hand side in 'rh'.
193
+ //
194
+ // This function may be used when double-checking the secret result of a point
195
+ // multiplication, so we proceed in constant-time.
234
196
 
235
197
  void (*const felem_mul)(const EC_GROUP *, EC_FELEM *r, const EC_FELEM *a,
236
198
  const EC_FELEM *b) = group->meth->felem_mul;
@@ -242,128 +204,114 @@ int ec_GFp_simple_is_on_curve(const EC_GROUP *group,
242
204
  felem_sqr(group, &rh, &point->X);
243
205
 
244
206
  EC_FELEM tmp, Z4, Z6;
245
- if (!ec_felem_equal(group, &point->Z, &group->one)) {
246
- felem_sqr(group, &tmp, &point->Z);
247
- felem_sqr(group, &Z4, &tmp);
248
- felem_mul(group, &Z6, &Z4, &tmp);
249
-
250
- // rh := (rh + a*Z^4)*X
251
- if (group->a_is_minus3) {
252
- ec_felem_add(group, &tmp, &Z4, &Z4);
253
- ec_felem_add(group, &tmp, &tmp, &Z4);
254
- ec_felem_sub(group, &rh, &rh, &tmp);
255
- felem_mul(group, &rh, &rh, &point->X);
256
- } else {
257
- felem_mul(group, &tmp, &Z4, &group->a);
258
- ec_felem_add(group, &rh, &rh, &tmp);
259
- felem_mul(group, &rh, &rh, &point->X);
260
- }
261
-
262
- // rh := rh + b*Z^6
263
- felem_mul(group, &tmp, &group->b, &Z6);
264
- ec_felem_add(group, &rh, &rh, &tmp);
207
+ felem_sqr(group, &tmp, &point->Z);
208
+ felem_sqr(group, &Z4, &tmp);
209
+ felem_mul(group, &Z6, &Z4, &tmp);
210
+
211
+ // rh := rh + a*Z^4
212
+ if (group->a_is_minus3) {
213
+ ec_felem_add(group, &tmp, &Z4, &Z4);
214
+ ec_felem_add(group, &tmp, &tmp, &Z4);
215
+ ec_felem_sub(group, &rh, &rh, &tmp);
265
216
  } else {
266
- // rh := (rh + a)*X
267
- ec_felem_add(group, &rh, &rh, &group->a);
268
- felem_mul(group, &rh, &rh, &point->X);
269
- // rh := rh + b
270
- ec_felem_add(group, &rh, &rh, &group->b);
217
+ felem_mul(group, &tmp, &Z4, &group->a);
218
+ ec_felem_add(group, &rh, &rh, &tmp);
271
219
  }
272
220
 
221
+ // rh := (rh + a*Z^4)*X
222
+ felem_mul(group, &rh, &rh, &point->X);
223
+
224
+ // rh := rh + b*Z^6
225
+ felem_mul(group, &tmp, &group->b, &Z6);
226
+ ec_felem_add(group, &rh, &rh, &tmp);
227
+
273
228
  // 'lh' := Y^2
274
229
  felem_sqr(group, &tmp, &point->Y);
275
- return ec_felem_equal(group, &tmp, &rh);
276
- }
277
230
 
278
- int ec_GFp_simple_cmp(const EC_GROUP *group, const EC_RAW_POINT *a,
279
- const EC_RAW_POINT *b) {
280
- // Note this function returns zero if |a| and |b| are equal and 1 if they are
281
- // not equal.
282
- if (ec_GFp_simple_is_at_infinity(group, a)) {
283
- return ec_GFp_simple_is_at_infinity(group, b) ? 0 : 1;
284
- }
231
+ ec_felem_sub(group, &tmp, &tmp, &rh);
232
+ BN_ULONG not_equal = ec_felem_non_zero_mask(group, &tmp);
285
233
 
286
- if (ec_GFp_simple_is_at_infinity(group, b)) {
287
- return 1;
288
- }
234
+ // If Z = 0, the point is infinity, which is always on the curve.
235
+ BN_ULONG not_infinity = ec_felem_non_zero_mask(group, &point->Z);
289
236
 
290
- int a_Z_is_one = ec_felem_equal(group, &a->Z, &group->one);
291
- int b_Z_is_one = ec_felem_equal(group, &b->Z, &group->one);
237
+ return 1 & ~(not_infinity & not_equal);
238
+ }
292
239
 
293
- if (a_Z_is_one && b_Z_is_one) {
294
- return !ec_felem_equal(group, &a->X, &b->X) ||
295
- !ec_felem_equal(group, &a->Y, &b->Y);
296
- }
240
+ int ec_GFp_simple_points_equal(const EC_GROUP *group, const EC_RAW_POINT *a,
241
+ const EC_RAW_POINT *b) {
242
+ // This function is implemented in constant-time for two reasons. First,
243
+ // although EC points are usually public, their Jacobian Z coordinates may be
244
+ // secret, or at least are not obviously public. Second, more complex
245
+ // protocols will sometimes manipulate secret points.
246
+ //
247
+ // This does mean that we pay a 6M+2S Jacobian comparison when comparing two
248
+ // publicly affine points costs no field operations at all. If needed, we can
249
+ // restore this optimization by keeping better track of affine vs. Jacobian
250
+ // forms. See https://crbug.com/boringssl/326.
251
+
252
+ // If neither |a| or |b| is infinity, we have to decide whether
253
+ // (X_a/Z_a^2, Y_a/Z_a^3) = (X_b/Z_b^2, Y_b/Z_b^3),
254
+ // or equivalently, whether
255
+ // (X_a*Z_b^2, Y_a*Z_b^3) = (X_b*Z_a^2, Y_b*Z_a^3).
297
256
 
298
257
  void (*const felem_mul)(const EC_GROUP *, EC_FELEM *r, const EC_FELEM *a,
299
258
  const EC_FELEM *b) = group->meth->felem_mul;
300
259
  void (*const felem_sqr)(const EC_GROUP *, EC_FELEM *r, const EC_FELEM *a) =
301
260
  group->meth->felem_sqr;
302
261
 
303
- // We have to decide whether
304
- // (X_a/Z_a^2, Y_a/Z_a^3) = (X_b/Z_b^2, Y_b/Z_b^3),
305
- // or equivalently, whether
306
- // (X_a*Z_b^2, Y_a*Z_b^3) = (X_b*Z_a^2, Y_b*Z_a^3).
307
-
308
262
  EC_FELEM tmp1, tmp2, Za23, Zb23;
309
- const EC_FELEM *tmp1_, *tmp2_;
310
- if (!b_Z_is_one) {
311
- felem_sqr(group, &Zb23, &b->Z);
312
- felem_mul(group, &tmp1, &a->X, &Zb23);
313
- tmp1_ = &tmp1;
314
- } else {
315
- tmp1_ = &a->X;
316
- }
317
- if (!a_Z_is_one) {
318
- felem_sqr(group, &Za23, &a->Z);
319
- felem_mul(group, &tmp2, &b->X, &Za23);
320
- tmp2_ = &tmp2;
321
- } else {
322
- tmp2_ = &b->X;
323
- }
263
+ felem_sqr(group, &Zb23, &b->Z); // Zb23 = Z_b^2
264
+ felem_mul(group, &tmp1, &a->X, &Zb23); // tmp1 = X_a * Z_b^2
265
+ felem_sqr(group, &Za23, &a->Z); // Za23 = Z_a^2
266
+ felem_mul(group, &tmp2, &b->X, &Za23); // tmp2 = X_b * Z_a^2
267
+ ec_felem_sub(group, &tmp1, &tmp1, &tmp2);
268
+ const BN_ULONG x_not_equal = ec_felem_non_zero_mask(group, &tmp1);
269
+
270
+ felem_mul(group, &Zb23, &Zb23, &b->Z); // Zb23 = Z_b^3
271
+ felem_mul(group, &tmp1, &a->Y, &Zb23); // tmp1 = Y_a * Z_b^3
272
+ felem_mul(group, &Za23, &Za23, &a->Z); // Za23 = Z_a^3
273
+ felem_mul(group, &tmp2, &b->Y, &Za23); // tmp2 = Y_b * Z_a^3
274
+ ec_felem_sub(group, &tmp1, &tmp1, &tmp2);
275
+ const BN_ULONG y_not_equal = ec_felem_non_zero_mask(group, &tmp1);
276
+ const BN_ULONG x_and_y_equal = ~(x_not_equal | y_not_equal);
277
+
278
+ const BN_ULONG a_not_infinity = ec_felem_non_zero_mask(group, &a->Z);
279
+ const BN_ULONG b_not_infinity = ec_felem_non_zero_mask(group, &b->Z);
280
+ const BN_ULONG a_and_b_infinity = ~(a_not_infinity | b_not_infinity);
281
+
282
+ const BN_ULONG equal =
283
+ a_and_b_infinity | (a_not_infinity & b_not_infinity & x_and_y_equal);
284
+ return equal & 1;
285
+ }
324
286
 
325
- // Compare X_a*Z_b^2 with X_b*Z_a^2.
326
- if (!ec_felem_equal(group, tmp1_, tmp2_)) {
327
- return 1; // The points differ.
328
- }
287
+ int ec_affine_jacobian_equal(const EC_GROUP *group, const EC_AFFINE *a,
288
+ const EC_RAW_POINT *b) {
289
+ // If |b| is not infinity, we have to decide whether
290
+ // (X_a, Y_a) = (X_b/Z_b^2, Y_b/Z_b^3),
291
+ // or equivalently, whether
292
+ // (X_a*Z_b^2, Y_a*Z_b^3) = (X_b, Y_b).
329
293
 
330
- if (!b_Z_is_one) {
331
- felem_mul(group, &Zb23, &Zb23, &b->Z);
332
- felem_mul(group, &tmp1, &a->Y, &Zb23);
333
- // tmp1_ = &tmp1
334
- } else {
335
- tmp1_ = &a->Y;
336
- }
337
- if (!a_Z_is_one) {
338
- felem_mul(group, &Za23, &Za23, &a->Z);
339
- felem_mul(group, &tmp2, &b->Y, &Za23);
340
- // tmp2_ = &tmp2
341
- } else {
342
- tmp2_ = &b->Y;
343
- }
294
+ void (*const felem_mul)(const EC_GROUP *, EC_FELEM *r, const EC_FELEM *a,
295
+ const EC_FELEM *b) = group->meth->felem_mul;
296
+ void (*const felem_sqr)(const EC_GROUP *, EC_FELEM *r, const EC_FELEM *a) =
297
+ group->meth->felem_sqr;
344
298
 
345
- // Compare Y_a*Z_b^3 with Y_b*Z_a^3.
346
- if (!ec_felem_equal(group, tmp1_, tmp2_)) {
347
- return 1; // The points differ.
348
- }
299
+ EC_FELEM tmp, Zb2;
300
+ felem_sqr(group, &Zb2, &b->Z); // Zb2 = Z_b^2
301
+ felem_mul(group, &tmp, &a->X, &Zb2); // tmp = X_a * Z_b^2
302
+ ec_felem_sub(group, &tmp, &tmp, &b->X);
303
+ const BN_ULONG x_not_equal = ec_felem_non_zero_mask(group, &tmp);
349
304
 
350
- // The points are equal.
351
- return 0;
352
- }
305
+ felem_mul(group, &tmp, &a->Y, &Zb2); // tmp = Y_a * Z_b^2
306
+ felem_mul(group, &tmp, &tmp, &b->Z); // tmp = Y_a * Z_b^3
307
+ ec_felem_sub(group, &tmp, &tmp, &b->Y);
308
+ const BN_ULONG y_not_equal = ec_felem_non_zero_mask(group, &tmp);
309
+ const BN_ULONG x_and_y_equal = ~(x_not_equal | y_not_equal);
353
310
 
354
- int ec_GFp_simple_mont_inv_mod_ord_vartime(const EC_GROUP *group,
355
- EC_SCALAR *out,
356
- const EC_SCALAR *in) {
357
- // This implementation (in fact) runs in constant time,
358
- // even though for this interface it is not mandatory.
359
-
360
- // out = in^-1 in the Montgomery domain. This is
361
- // |ec_scalar_to_montgomery| followed by |ec_scalar_inv_montgomery|, but
362
- // |ec_scalar_inv_montgomery| followed by |ec_scalar_from_montgomery| is
363
- // equivalent and slightly more efficient.
364
- ec_scalar_inv_montgomery(group, out, in);
365
- ec_scalar_from_montgomery(group, out, out);
366
- return 1;
311
+ const BN_ULONG b_not_infinity = ec_felem_non_zero_mask(group, &b->Z);
312
+
313
+ const BN_ULONG equal = b_not_infinity & x_and_y_equal;
314
+ return equal & 1;
367
315
  }
368
316
 
369
317
  int ec_GFp_simple_cmp_x_coordinate(const EC_GROUP *group, const EC_RAW_POINT *p,
@@ -378,3 +326,32 @@ int ec_GFp_simple_cmp_x_coordinate(const EC_GROUP *group, const EC_RAW_POINT *p,
378
326
  return ec_get_x_coordinate_as_scalar(group, &x, p) &&
379
327
  ec_scalar_equal_vartime(group, &x, r);
380
328
  }
329
+
330
+ void ec_GFp_simple_felem_to_bytes(const EC_GROUP *group, uint8_t *out,
331
+ size_t *out_len, const EC_FELEM *in) {
332
+ size_t len = BN_num_bytes(&group->field);
333
+ for (size_t i = 0; i < len; i++) {
334
+ out[i] = in->bytes[len - 1 - i];
335
+ }
336
+ *out_len = len;
337
+ }
338
+
339
+ int ec_GFp_simple_felem_from_bytes(const EC_GROUP *group, EC_FELEM *out,
340
+ const uint8_t *in, size_t len) {
341
+ if (len != BN_num_bytes(&group->field)) {
342
+ OPENSSL_PUT_ERROR(EC, EC_R_DECODE_ERROR);
343
+ return 0;
344
+ }
345
+
346
+ OPENSSL_memset(out, 0, sizeof(EC_FELEM));
347
+ for (size_t i = 0; i < len; i++) {
348
+ out->bytes[i] = in[len - 1 - i];
349
+ }
350
+
351
+ if (!bn_less_than_words(out->words, group->field.d, group->field.width)) {
352
+ OPENSSL_PUT_ERROR(EC, EC_R_DECODE_ERROR);
353
+ return 0;
354
+ }
355
+
356
+ return 1;
357
+ }