grpc 1.28.0 → 1.30.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of grpc might be problematic. Click here for more details.

Files changed (497) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +7694 -11190
  3. data/include/grpc/grpc.h +2 -2
  4. data/include/grpc/grpc_security.h +22 -9
  5. data/include/grpc/grpc_security_constants.h +1 -0
  6. data/include/grpc/impl/codegen/grpc_types.h +19 -21
  7. data/include/grpc/impl/codegen/port_platform.h +6 -2
  8. data/include/grpc/module.modulemap +24 -39
  9. data/src/core/ext/filters/client_channel/backend_metric.cc +7 -4
  10. data/src/core/ext/filters/client_channel/client_channel.cc +203 -236
  11. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +3 -2
  12. data/src/core/ext/filters/client_channel/health/health_check_client.cc +7 -22
  13. data/src/core/ext/filters/client_channel/health/health_check_client.h +3 -3
  14. data/src/core/ext/filters/client_channel/http_proxy.cc +17 -10
  15. data/src/core/ext/filters/client_channel/lb_policy.cc +19 -18
  16. data/src/core/ext/filters/client_channel/lb_policy.h +42 -33
  17. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +83 -0
  18. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +99 -0
  19. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +10 -4
  20. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +240 -301
  21. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +89 -0
  22. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h +40 -0
  23. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +11 -9
  24. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +3 -2
  25. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +871 -0
  26. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +1 -1
  27. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +5 -11
  28. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +734 -0
  29. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +84 -37
  30. data/src/core/ext/filters/client_channel/lb_policy/xds/eds.cc +938 -0
  31. data/src/core/ext/filters/client_channel/lb_policy/xds/lrs.cc +528 -0
  32. data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +1 -2
  33. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_routing.cc +834 -0
  34. data/src/core/ext/filters/client_channel/lb_policy_registry.cc +6 -2
  35. data/src/core/ext/filters/client_channel/local_subchannel_pool.h +2 -1
  36. data/src/core/ext/filters/client_channel/parse_address.cc +22 -21
  37. data/src/core/ext/filters/client_channel/resolver.cc +5 -8
  38. data/src/core/ext/filters/client_channel/resolver.h +12 -14
  39. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +73 -59
  40. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.cc +35 -35
  41. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +8 -7
  42. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_libuv.cc +16 -20
  43. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +4 -4
  44. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +72 -117
  45. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +184 -133
  46. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +5 -3
  47. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.cc +7 -4
  48. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +40 -43
  49. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +93 -102
  50. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +0 -4
  51. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +2 -2
  52. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +32 -5
  53. data/src/core/ext/filters/client_channel/resolver_factory.h +2 -2
  54. data/src/core/ext/filters/client_channel/resolver_registry.cc +6 -3
  55. data/src/core/ext/filters/client_channel/resolver_registry.h +8 -8
  56. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +16 -16
  57. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +19 -16
  58. data/src/core/ext/filters/client_channel/resolving_lb_policy.cc +20 -31
  59. data/src/core/ext/filters/client_channel/resolving_lb_policy.h +4 -3
  60. data/src/core/ext/filters/client_channel/server_address.cc +6 -9
  61. data/src/core/ext/filters/client_channel/server_address.h +6 -12
  62. data/src/core/ext/filters/client_channel/service_config.cc +104 -144
  63. data/src/core/ext/filters/client_channel/service_config.h +28 -98
  64. data/src/core/ext/filters/client_channel/service_config_call_data.h +68 -0
  65. data/src/core/ext/filters/client_channel/service_config_parser.cc +87 -0
  66. data/src/core/ext/filters/client_channel/service_config_parser.h +89 -0
  67. data/src/core/ext/filters/client_channel/subchannel.cc +54 -24
  68. data/src/core/ext/filters/client_channel/subchannel.h +35 -11
  69. data/src/core/ext/filters/client_channel/xds/xds_api.cc +348 -221
  70. data/src/core/ext/filters/client_channel/xds/xds_api.h +37 -37
  71. data/src/core/ext/filters/client_channel/xds/xds_bootstrap.cc +44 -49
  72. data/src/core/ext/filters/client_channel/xds/xds_bootstrap.h +4 -3
  73. data/src/core/ext/filters/client_channel/xds/xds_channel_secure.cc +4 -2
  74. data/src/core/ext/filters/client_channel/xds/xds_client.cc +532 -339
  75. data/src/core/ext/filters/client_channel/xds/xds_client.h +57 -22
  76. data/src/core/ext/filters/client_channel/xds/xds_client_stats.cc +11 -12
  77. data/src/core/ext/filters/client_channel/xds/xds_client_stats.h +31 -19
  78. data/src/core/ext/filters/http/client/http_client_filter.cc +23 -28
  79. data/src/core/ext/filters/http/client_authority_filter.cc +4 -4
  80. data/src/core/ext/filters/http/http_filters_plugin.cc +27 -12
  81. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +258 -221
  82. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +358 -0
  83. data/src/core/ext/filters/http/message_compress/message_decompress_filter.h +29 -0
  84. data/src/core/ext/filters/message_size/message_size_filter.cc +7 -10
  85. data/src/core/ext/filters/message_size/message_size_filter.h +4 -4
  86. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +4 -4
  87. data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +4 -6
  88. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +23 -22
  89. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +1 -0
  90. data/src/core/ext/transport/chttp2/transport/flow_control.cc +3 -3
  91. data/src/core/ext/transport/chttp2/transport/frame_goaway.h +2 -3
  92. data/src/core/ext/transport/chttp2/transport/frame_ping.h +2 -3
  93. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +2 -3
  94. data/src/core/ext/transport/chttp2/transport/frame_settings.h +2 -3
  95. data/src/core/ext/transport/chttp2/transport/frame_window_update.h +2 -3
  96. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +29 -16
  97. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +2 -3
  98. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +2 -3
  99. data/src/core/ext/transport/chttp2/transport/hpack_table.h +2 -2
  100. data/src/core/ext/transport/chttp2/transport/http2_settings.h +4 -5
  101. data/src/core/ext/transport/chttp2/transport/huffsyms.h +2 -3
  102. data/src/core/ext/transport/chttp2/transport/internal.h +14 -21
  103. data/src/core/ext/transport/chttp2/transport/stream_map.h +2 -3
  104. data/src/core/ext/transport/chttp2/transport/writing.cc +15 -8
  105. data/src/core/ext/transport/inproc/inproc_transport.cc +19 -0
  106. data/src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.c +4 -229
  107. data/src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.h +5 -875
  108. data/src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.c +114 -0
  109. data/src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.h +418 -0
  110. data/src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.c +72 -0
  111. data/src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.h +197 -0
  112. data/src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.c +105 -0
  113. data/src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.h +378 -0
  114. data/src/core/ext/upb-generated/envoy/api/v2/cds.upb.c +1 -0
  115. data/src/core/ext/upb-generated/envoy/api/v2/cluster.upb.c +21 -8
  116. data/src/core/ext/upb-generated/envoy/api/v2/cluster.upb.h +43 -7
  117. data/src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.c +1 -0
  118. data/src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upb.c +1 -0
  119. data/src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.c +1 -0
  120. data/src/core/ext/upb-generated/envoy/api/v2/core/address.upb.c +2 -1
  121. data/src/core/ext/upb-generated/envoy/api/v2/core/backoff.upb.c +35 -0
  122. data/src/core/ext/upb-generated/envoy/api/v2/core/backoff.upb.h +78 -0
  123. data/src/core/ext/upb-generated/envoy/api/v2/core/base.upb.c +47 -26
  124. data/src/core/ext/upb-generated/envoy/api/v2/core/base.upb.h +115 -65
  125. data/src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.c +1 -0
  126. data/src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.c +34 -0
  127. data/src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.h +72 -0
  128. data/src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.c +2 -1
  129. data/src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.c +24 -20
  130. data/src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.h +28 -13
  131. data/src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upb.c +1 -0
  132. data/src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.c +38 -18
  133. data/src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.h +88 -6
  134. data/src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upb.c +34 -0
  135. data/src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upb.h +89 -0
  136. data/src/core/ext/upb-generated/envoy/api/v2/discovery.upb.c +1 -0
  137. data/src/core/ext/upb-generated/envoy/api/v2/eds.upb.c +1 -0
  138. data/src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.c +1 -0
  139. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.c +1 -0
  140. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.c +9 -6
  141. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.h +12 -4
  142. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.c +1 -0
  143. data/src/core/ext/upb-generated/envoy/api/v2/lds.upb.c +1 -0
  144. data/src/core/ext/upb-generated/envoy/api/v2/listener.upb.c +15 -10
  145. data/src/core/ext/upb-generated/envoy/api/v2/listener.upb.h +16 -0
  146. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.c +1 -0
  147. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.c +2 -1
  148. data/src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.c +1 -0
  149. data/src/core/ext/upb-generated/envoy/api/v2/rds.upb.c +1 -0
  150. data/src/core/ext/upb-generated/envoy/api/v2/route.upb.c +1 -0
  151. data/src/core/ext/upb-generated/envoy/api/v2/route/route.upb.c +1 -0
  152. data/src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.c +63 -41
  153. data/src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.h +173 -77
  154. data/src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.c +1 -0
  155. data/src/core/ext/upb-generated/envoy/api/v2/srds.upb.c +1 -0
  156. data/src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.c +1 -0
  157. data/src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.c +48 -28
  158. data/src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.h +90 -30
  159. data/src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upb.c +1 -0
  160. data/src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.c +51 -0
  161. data/src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.h +125 -0
  162. data/src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.c +1 -0
  163. data/src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.c +4 -2
  164. data/src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.h +4 -0
  165. data/src/core/ext/upb-generated/envoy/type/http.upb.c +1 -0
  166. data/src/core/ext/upb-generated/envoy/type/matcher/regex.upb.c +16 -0
  167. data/src/core/ext/upb-generated/envoy/type/matcher/regex.upb.h +36 -0
  168. data/src/core/ext/upb-generated/envoy/type/matcher/string.upb.c +1 -0
  169. data/src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.c +1 -0
  170. data/src/core/ext/upb-generated/envoy/type/percent.upb.c +1 -0
  171. data/src/core/ext/upb-generated/envoy/type/range.upb.c +1 -0
  172. data/src/core/ext/upb-generated/envoy/type/semantic_version.upb.c +1 -0
  173. data/src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.c +1 -0
  174. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +9 -8
  175. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +30 -24
  176. data/src/core/ext/upb-generated/udpa/annotations/status.upb.c +28 -0
  177. data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +65 -0
  178. data/src/core/ext/upb-generated/validate/validate.upb.c +21 -20
  179. data/src/core/ext/upb-generated/validate/validate.upb.h +69 -63
  180. data/src/core/lib/channel/channel_args.cc +15 -14
  181. data/src/core/lib/channel/channel_args.h +3 -1
  182. data/src/core/lib/channel/channel_stack.h +20 -13
  183. data/src/core/lib/channel/channelz.cc +5 -6
  184. data/src/core/lib/channel/channelz.h +3 -2
  185. data/src/core/lib/channel/channelz_registry.cc +5 -3
  186. data/src/core/lib/channel/connected_channel.cc +7 -5
  187. data/src/core/lib/channel/context.h +1 -1
  188. data/src/core/lib/channel/handshaker.cc +11 -13
  189. data/src/core/lib/channel/handshaker.h +4 -2
  190. data/src/core/lib/channel/handshaker_registry.cc +5 -17
  191. data/src/core/lib/channel/status_util.cc +2 -3
  192. data/src/core/lib/compression/message_compress.cc +5 -1
  193. data/src/core/lib/debug/stats.cc +21 -27
  194. data/src/core/lib/debug/stats.h +3 -1
  195. data/src/core/lib/gpr/spinlock.h +2 -3
  196. data/src/core/lib/gpr/string.cc +2 -26
  197. data/src/core/lib/gpr/string.h +0 -16
  198. data/src/core/lib/gpr/sync_abseil.cc +2 -0
  199. data/src/core/lib/gpr/time.cc +4 -0
  200. data/src/core/lib/gpr/time_posix.cc +1 -1
  201. data/src/core/lib/gprpp/atomic.h +6 -6
  202. data/src/core/lib/gprpp/fork.cc +1 -1
  203. data/src/core/lib/gprpp/host_port.cc +29 -35
  204. data/src/core/lib/gprpp/host_port.h +14 -17
  205. data/src/core/lib/gprpp/map.h +5 -11
  206. data/src/core/lib/gprpp/ref_counted_ptr.h +5 -0
  207. data/src/core/lib/http/format_request.cc +46 -65
  208. data/src/core/lib/http/httpcli.cc +2 -3
  209. data/src/core/lib/http/httpcli.h +2 -3
  210. data/src/core/lib/http/httpcli_security_connector.cc +5 -5
  211. data/src/core/lib/http/parser.h +2 -3
  212. data/src/core/lib/iomgr/buffer_list.h +22 -21
  213. data/src/core/lib/iomgr/call_combiner.h +3 -2
  214. data/src/core/lib/iomgr/cfstream_handle.cc +3 -2
  215. data/src/core/lib/iomgr/closure.h +2 -3
  216. data/src/core/lib/iomgr/dualstack_socket_posix.cc +47 -0
  217. data/src/core/lib/iomgr/endpoint_cfstream.cc +2 -3
  218. data/src/core/lib/iomgr/endpoint_pair.h +2 -3
  219. data/src/core/lib/iomgr/error.cc +6 -9
  220. data/src/core/lib/iomgr/error.h +0 -1
  221. data/src/core/lib/iomgr/ev_apple.cc +356 -0
  222. data/src/core/lib/iomgr/ev_apple.h +43 -0
  223. data/src/core/lib/iomgr/ev_epoll1_linux.cc +20 -23
  224. data/src/core/lib/iomgr/ev_epollex_linux.cc +2 -3
  225. data/src/core/lib/iomgr/ev_poll_posix.cc +3 -3
  226. data/src/core/lib/iomgr/ev_posix.cc +2 -3
  227. data/src/core/lib/iomgr/exec_ctx.h +14 -2
  228. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +84 -20
  229. data/src/core/lib/iomgr/pollset_set_custom.cc +10 -10
  230. data/src/core/lib/{gprpp/optional.h → iomgr/pollset_uv.h} +11 -12
  231. data/src/core/lib/iomgr/port.h +1 -0
  232. data/src/core/lib/iomgr/python_util.h +46 -0
  233. data/src/core/lib/iomgr/resolve_address.h +4 -6
  234. data/src/core/lib/iomgr/resolve_address_custom.cc +29 -39
  235. data/src/core/lib/iomgr/resolve_address_custom.h +4 -2
  236. data/src/core/lib/iomgr/resolve_address_posix.cc +10 -11
  237. data/src/core/lib/iomgr/resolve_address_windows.cc +8 -17
  238. data/src/core/lib/iomgr/resource_quota.cc +4 -6
  239. data/src/core/lib/iomgr/sockaddr_utils.cc +23 -29
  240. data/src/core/lib/iomgr/sockaddr_utils.h +9 -14
  241. data/src/core/lib/iomgr/socket_factory_posix.h +2 -3
  242. data/src/core/lib/iomgr/socket_mutator.h +2 -3
  243. data/src/core/lib/iomgr/socket_utils_common_posix.cc +7 -26
  244. data/src/core/lib/iomgr/socket_utils_posix.h +3 -0
  245. data/src/core/lib/iomgr/tcp_client_cfstream.cc +5 -7
  246. data/src/core/lib/iomgr/tcp_client_posix.cc +8 -5
  247. data/src/core/lib/iomgr/tcp_client_windows.cc +2 -3
  248. data/src/core/lib/iomgr/tcp_custom.cc +2 -3
  249. data/src/core/lib/iomgr/tcp_server_custom.cc +5 -9
  250. data/src/core/lib/iomgr/tcp_server_posix.cc +5 -4
  251. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +5 -4
  252. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +8 -11
  253. data/src/core/lib/iomgr/tcp_uv.cc +3 -2
  254. data/src/core/lib/iomgr/time_averaged_stats.h +2 -3
  255. data/src/core/lib/iomgr/timer_generic.cc +2 -3
  256. data/src/core/lib/{gprpp/inlined_vector.h → iomgr/timer_generic.h} +19 -17
  257. data/src/core/lib/iomgr/timer_heap.h +2 -3
  258. data/src/core/lib/iomgr/udp_server.cc +9 -14
  259. data/src/core/lib/json/json.h +3 -2
  260. data/src/core/lib/json/json_reader.cc +5 -5
  261. data/src/core/lib/json/json_writer.cc +13 -12
  262. data/src/core/lib/security/credentials/composite/composite_credentials.cc +12 -0
  263. data/src/core/lib/security/credentials/composite/composite_credentials.h +6 -3
  264. data/src/core/lib/security/credentials/credentials.cc +0 -84
  265. data/src/core/lib/security/credentials/credentials.h +8 -59
  266. data/src/core/lib/security/credentials/fake/fake_credentials.h +4 -0
  267. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +3 -8
  268. data/src/core/lib/security/credentials/iam/iam_credentials.cc +8 -6
  269. data/src/core/lib/security/credentials/iam/iam_credentials.h +4 -0
  270. data/src/core/lib/security/credentials/jwt/json_token.cc +1 -1
  271. data/src/core/lib/security/credentials/jwt/json_token.h +2 -5
  272. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +12 -0
  273. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +8 -15
  274. data/src/core/lib/security/credentials/jwt/jwt_verifier.h +2 -3
  275. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +55 -27
  276. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +9 -3
  277. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +13 -0
  278. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +2 -0
  279. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +23 -13
  280. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +38 -11
  281. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +21 -6
  282. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +7 -7
  283. data/src/core/lib/security/security_connector/load_system_roots_linux.cc +3 -2
  284. data/src/core/lib/security/security_connector/local/local_security_connector.cc +1 -1
  285. data/src/core/lib/security/security_connector/security_connector.h +1 -1
  286. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +20 -25
  287. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.h +4 -6
  288. data/src/core/lib/security/security_connector/ssl_utils.cc +59 -12
  289. data/src/core/lib/security/security_connector/ssl_utils.h +12 -10
  290. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +77 -51
  291. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +27 -5
  292. data/src/core/lib/security/transport/client_auth_filter.cc +1 -2
  293. data/src/core/lib/slice/slice_intern.cc +2 -3
  294. data/src/core/lib/slice/slice_internal.h +14 -0
  295. data/src/core/lib/slice/slice_utils.h +9 -0
  296. data/src/core/lib/surface/byte_buffer_reader.cc +2 -47
  297. data/src/core/lib/surface/call.cc +2 -3
  298. data/src/core/lib/surface/call_log_batch.cc +50 -58
  299. data/src/core/lib/surface/channel.cc +53 -31
  300. data/src/core/lib/surface/channel.h +35 -4
  301. data/src/core/lib/surface/channel_ping.cc +2 -3
  302. data/src/core/lib/surface/completion_queue.cc +33 -33
  303. data/src/core/lib/surface/event_string.cc +18 -25
  304. data/src/core/lib/surface/event_string.h +3 -1
  305. data/src/core/lib/surface/init_secure.cc +1 -4
  306. data/src/core/lib/surface/server.cc +570 -369
  307. data/src/core/lib/surface/server.h +32 -0
  308. data/src/core/lib/surface/version.cc +2 -2
  309. data/src/core/lib/transport/byte_stream.h +7 -2
  310. data/src/core/lib/transport/connectivity_state.cc +7 -6
  311. data/src/core/lib/transport/connectivity_state.h +5 -3
  312. data/src/core/lib/transport/metadata.cc +3 -3
  313. data/src/core/lib/transport/metadata_batch.h +2 -3
  314. data/src/core/lib/transport/static_metadata.h +1 -1
  315. data/src/core/lib/transport/status_conversion.cc +6 -14
  316. data/src/core/lib/transport/transport.cc +2 -3
  317. data/src/core/lib/transport/transport.h +3 -2
  318. data/src/core/lib/transport/transport_op_string.cc +61 -102
  319. data/src/core/lib/uri/uri_parser.h +2 -3
  320. data/src/core/plugin_registry/grpc_plugin_registry.cc +20 -4
  321. data/src/core/tsi/alts/crypt/aes_gcm.cc +0 -2
  322. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +8 -1
  323. data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +8 -4
  324. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +32 -2
  325. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.h +9 -1
  326. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.h +2 -3
  327. data/src/core/tsi/fake_transport_security.cc +10 -15
  328. data/src/core/tsi/ssl/session_cache/ssl_session.h +0 -2
  329. data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +0 -2
  330. data/src/core/tsi/ssl_transport_security.cc +52 -39
  331. data/src/core/tsi/ssl_transport_security.h +8 -8
  332. data/src/core/tsi/ssl_types.h +0 -2
  333. data/src/core/tsi/transport_security.h +6 -9
  334. data/src/core/tsi/transport_security_grpc.h +2 -3
  335. data/src/core/tsi/transport_security_interface.h +3 -3
  336. data/src/ruby/ext/grpc/rb_call.c +9 -1
  337. data/src/ruby/lib/grpc/errors.rb +103 -42
  338. data/src/ruby/lib/grpc/generic/active_call.rb +2 -3
  339. data/src/ruby/lib/grpc/generic/interceptors.rb +4 -4
  340. data/src/ruby/lib/grpc/generic/rpc_server.rb +9 -10
  341. data/src/ruby/lib/grpc/generic/service.rb +5 -4
  342. data/src/ruby/lib/grpc/structs.rb +1 -1
  343. data/src/ruby/lib/grpc/version.rb +1 -1
  344. data/src/ruby/pb/generate_proto_ruby.sh +5 -3
  345. data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +11 -0
  346. data/src/ruby/pb/src/proto/grpc/testing/test_services_pb.rb +16 -0
  347. data/src/ruby/spec/debug_message_spec.rb +134 -0
  348. data/src/ruby/spec/generic/service_spec.rb +2 -0
  349. data/src/ruby/spec/pb/codegen/grpc/testing/package_options_ruby_style.proto +5 -0
  350. data/src/ruby/spec/pb/codegen/package_option_spec.rb +2 -0
  351. data/src/ruby/spec/testdata/ca.pem +18 -13
  352. data/src/ruby/spec/testdata/client.key +26 -14
  353. data/src/ruby/spec/testdata/client.pem +18 -12
  354. data/src/ruby/spec/testdata/server1.key +26 -14
  355. data/src/ruby/spec/testdata/server1.pem +20 -14
  356. data/third_party/abseil-cpp/absl/time/civil_time.cc +175 -0
  357. data/third_party/abseil-cpp/absl/time/civil_time.h +538 -0
  358. data/third_party/abseil-cpp/absl/time/clock.cc +569 -0
  359. data/third_party/abseil-cpp/absl/time/clock.h +74 -0
  360. data/third_party/abseil-cpp/absl/time/duration.cc +922 -0
  361. data/third_party/abseil-cpp/absl/time/format.cc +153 -0
  362. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time.h +332 -0
  363. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +622 -0
  364. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/time_zone.h +384 -0
  365. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/zone_info_source.h +102 -0
  366. data/third_party/abseil-cpp/absl/time/internal/cctz/src/civil_time_detail.cc +94 -0
  367. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_fixed.cc +140 -0
  368. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_fixed.h +52 -0
  369. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc +922 -0
  370. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_if.cc +45 -0
  371. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_if.h +76 -0
  372. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.cc +121 -0
  373. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.h +93 -0
  374. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.cc +958 -0
  375. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.h +138 -0
  376. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.cc +308 -0
  377. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.h +55 -0
  378. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +187 -0
  379. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_posix.cc +159 -0
  380. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_posix.h +132 -0
  381. data/third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +122 -0
  382. data/third_party/abseil-cpp/absl/time/internal/cctz/src/zone_info_source.cc +115 -0
  383. data/third_party/abseil-cpp/absl/time/internal/get_current_time_chrono.inc +31 -0
  384. data/third_party/abseil-cpp/absl/time/internal/get_current_time_posix.inc +24 -0
  385. data/third_party/abseil-cpp/absl/time/time.cc +499 -0
  386. data/third_party/abseil-cpp/absl/time/time.h +1584 -0
  387. data/third_party/boringssl-with-bazel/err_data.c +329 -297
  388. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/derive_key.c +1 -1
  389. data/third_party/boringssl-with-bazel/src/crypto/cpu-arm-linux.c +7 -5
  390. data/third_party/boringssl-with-bazel/src/crypto/cpu-intel.c +13 -4
  391. data/third_party/boringssl-with-bazel/src/crypto/crypto.c +11 -0
  392. data/third_party/boringssl-with-bazel/src/{third_party/fiat → crypto/curve25519}/curve25519.c +18 -26
  393. data/third_party/boringssl-with-bazel/src/{third_party/fiat → crypto/curve25519}/curve25519_tables.h +13 -21
  394. data/third_party/boringssl-with-bazel/src/{third_party/fiat → crypto/curve25519}/internal.h +14 -22
  395. data/third_party/boringssl-with-bazel/src/crypto/curve25519/spake25519.c +1 -1
  396. data/third_party/boringssl-with-bazel/src/crypto/dh/dh.c +15 -0
  397. data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa.c +10 -0
  398. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/hash_to_curve.c +425 -0
  399. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/internal.h +78 -0
  400. data/third_party/boringssl-with-bazel/src/crypto/ecdh_extra/ecdh_extra.c +2 -2
  401. data/third_party/boringssl-with-bazel/src/crypto/err/err.c +33 -32
  402. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/aes_nohw.c +1 -1
  403. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c +2 -1
  404. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/exponentiation.c +3 -3
  405. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +14 -11
  406. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/montgomery.c +8 -8
  407. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/mul.c +30 -154
  408. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digests.c +16 -0
  409. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec.c +289 -117
  410. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_key.c +13 -27
  411. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_montgomery.c +96 -55
  412. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/felem.c +25 -7
  413. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/internal.h +432 -160
  414. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/oct.c +63 -71
  415. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p224-64.c +5 -14
  416. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-x86_64-table.h +9481 -9485
  417. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-x86_64.c +80 -99
  418. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256.c +736 -0
  419. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256_table.h +297 -0
  420. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/scalar.c +90 -11
  421. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple.c +125 -148
  422. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple_mul.c +189 -3
  423. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/wnaf.c +61 -18
  424. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdh/ecdh.c +2 -2
  425. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c +20 -5
  426. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/fork_detect.c +137 -0
  427. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/fork_detect.h +49 -0
  428. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/getrandom_fillin.h +64 -0
  429. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/internal.h +41 -5
  430. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/rand.c +32 -17
  431. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/urandom.c +24 -114
  432. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/blinding.c +4 -0
  433. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/internal.h +1 -0
  434. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa.c +51 -38
  435. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +15 -1
  436. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha512.c +44 -35
  437. data/third_party/boringssl-with-bazel/src/crypto/mem.c +29 -12
  438. data/third_party/boringssl-with-bazel/src/crypto/obj/obj_dat.h +15 -1
  439. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/deterministic.c +6 -10
  440. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/windows.c +16 -0
  441. data/third_party/boringssl-with-bazel/src/crypto/thread_pthread.c +4 -0
  442. data/third_party/boringssl-with-bazel/src/crypto/thread_win.c +4 -0
  443. data/third_party/boringssl-with-bazel/src/crypto/trust_token/internal.h +278 -0
  444. data/third_party/boringssl-with-bazel/src/crypto/trust_token/pmbtoken.c +1474 -0
  445. data/third_party/boringssl-with-bazel/src/crypto/trust_token/trust_token.c +720 -0
  446. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_set.c +16 -0
  447. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +5 -0
  448. data/third_party/boringssl-with-bazel/src/crypto/x509/x509name.c +4 -3
  449. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +5 -1
  450. data/third_party/boringssl-with-bazel/src/include/openssl/crypto.h +9 -4
  451. data/third_party/boringssl-with-bazel/src/include/openssl/dh.h +20 -0
  452. data/third_party/boringssl-with-bazel/src/include/openssl/digest.h +1 -0
  453. data/third_party/boringssl-with-bazel/src/include/openssl/dsa.h +16 -0
  454. data/third_party/boringssl-with-bazel/src/include/openssl/ecdsa.h +6 -0
  455. data/third_party/boringssl-with-bazel/src/include/openssl/err.h +2 -0
  456. data/third_party/boringssl-with-bazel/src/include/openssl/nid.h +5 -0
  457. data/third_party/boringssl-with-bazel/src/include/openssl/rand.h +3 -17
  458. data/third_party/boringssl-with-bazel/src/include/openssl/rsa.h +31 -0
  459. data/third_party/boringssl-with-bazel/src/include/openssl/sha.h +26 -0
  460. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +172 -77
  461. data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +1 -0
  462. data/third_party/boringssl-with-bazel/src/include/openssl/trust_token.h +291 -0
  463. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +5 -3
  464. data/third_party/boringssl-with-bazel/src/include/openssl/x509_vfy.h +1 -0
  465. data/third_party/boringssl-with-bazel/src/ssl/d1_both.cc +0 -4
  466. data/third_party/boringssl-with-bazel/src/ssl/d1_lib.cc +3 -3
  467. data/third_party/boringssl-with-bazel/src/ssl/dtls_method.cc +13 -4
  468. data/third_party/boringssl-with-bazel/src/ssl/handoff.cc +146 -57
  469. data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +14 -3
  470. data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +28 -20
  471. data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +12 -4
  472. data/third_party/boringssl-with-bazel/src/ssl/internal.h +64 -47
  473. data/third_party/boringssl-with-bazel/src/ssl/s3_both.cc +10 -10
  474. data/third_party/boringssl-with-bazel/src/ssl/s3_lib.cc +2 -2
  475. data/third_party/boringssl-with-bazel/src/ssl/s3_pkt.cc +21 -21
  476. data/third_party/boringssl-with-bazel/src/ssl/ssl_asn1.cc +29 -0
  477. data/third_party/boringssl-with-bazel/src/ssl/ssl_cert.cc +4 -0
  478. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +6 -1
  479. data/third_party/boringssl-with-bazel/src/ssl/ssl_privkey.cc +13 -2
  480. data/third_party/boringssl-with-bazel/src/ssl/ssl_session.cc +64 -5
  481. data/third_party/boringssl-with-bazel/src/ssl/ssl_stat.cc +6 -0
  482. data/third_party/boringssl-with-bazel/src/ssl/t1_enc.cc +6 -2
  483. data/third_party/boringssl-with-bazel/src/ssl/t1_lib.cc +47 -53
  484. data/third_party/boringssl-with-bazel/src/ssl/tls13_both.cc +1 -1
  485. data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +98 -27
  486. data/third_party/boringssl-with-bazel/src/ssl/tls13_enc.cc +23 -75
  487. data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +50 -20
  488. data/third_party/boringssl-with-bazel/src/ssl/tls_method.cc +63 -25
  489. data/third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_32.h +245 -175
  490. data/third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_64.h +135 -75
  491. data/third_party/boringssl-with-bazel/src/third_party/fiat/p256_32.h +1593 -1672
  492. data/third_party/boringssl-with-bazel/src/third_party/fiat/p256_64.h +512 -503
  493. metadata +111 -37
  494. data/src/core/ext/filters/client_channel/lb_policy/xds/xds.cc +0 -1754
  495. data/src/core/lib/gprpp/string_view.h +0 -60
  496. data/src/core/tsi/grpc_shadow_boringssl.h +0 -3311
  497. data/third_party/boringssl-with-bazel/src/third_party/fiat/p256.c +0 -1063
@@ -67,62 +67,100 @@
67
67
 
68
68
  BSSL_NAMESPACE_BEGIN
69
69
 
70
- static void ssl3_on_handshake_complete(SSL *ssl) {
70
+ static void tls_on_handshake_complete(SSL *ssl) {
71
71
  // The handshake should have released its final message.
72
72
  assert(!ssl->s3->has_message);
73
73
 
74
74
  // During the handshake, |hs_buf| is retained. Release if it there is no
75
- // excess in it. There may be excess left if there server sent Finished and
76
- // HelloRequest in the same record.
77
- //
78
- // TODO(davidben): SChannel does not support this. Reject this case.
75
+ // excess in it. There should not be any excess because the handshake logic
76
+ // rejects unprocessed data after each Finished message. Note this means we do
77
+ // not allow a TLS 1.2 HelloRequest to be packed into the same record as
78
+ // Finished. (Schannel also rejects this.)
79
+ assert(!ssl->s3->hs_buf || ssl->s3->hs_buf->length == 0);
79
80
  if (ssl->s3->hs_buf && ssl->s3->hs_buf->length == 0) {
80
81
  ssl->s3->hs_buf.reset();
81
82
  }
82
83
  }
83
84
 
84
- static bool ssl3_set_read_state(SSL *ssl, UniquePtr<SSLAEADContext> aead_ctx) {
85
+ static bool tls_set_read_state(SSL *ssl, ssl_encryption_level_t level,
86
+ UniquePtr<SSLAEADContext> aead_ctx,
87
+ Span<const uint8_t> secret_for_quic) {
85
88
  // Cipher changes are forbidden if the current epoch has leftover data.
86
89
  if (tls_has_unprocessed_handshake_data(ssl)) {
87
- OPENSSL_PUT_ERROR(SSL, SSL_R_BUFFERED_MESSAGES_ON_CIPHER_CHANGE);
90
+ OPENSSL_PUT_ERROR(SSL, SSL_R_EXCESS_HANDSHAKE_DATA);
88
91
  ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_UNEXPECTED_MESSAGE);
89
92
  return false;
90
93
  }
91
94
 
95
+ if (ssl->quic_method != nullptr) {
96
+ if (!ssl->quic_method->set_read_secret(ssl, level, aead_ctx->cipher(),
97
+ secret_for_quic.data(),
98
+ secret_for_quic.size())) {
99
+ return false;
100
+ }
101
+
102
+ // QUIC only uses |ssl| for handshake messages, which never use early data
103
+ // keys, so we return without installing anything. This avoids needing to
104
+ // have two secrets active at once in 0-RTT.
105
+ if (level == ssl_encryption_early_data) {
106
+ return true;
107
+ }
108
+ }
109
+
92
110
  OPENSSL_memset(ssl->s3->read_sequence, 0, sizeof(ssl->s3->read_sequence));
93
111
  ssl->s3->aead_read_ctx = std::move(aead_ctx);
112
+ ssl->s3->read_level = level;
94
113
  return true;
95
114
  }
96
115
 
97
- static bool ssl3_set_write_state(SSL *ssl, UniquePtr<SSLAEADContext> aead_ctx) {
116
+ static bool tls_set_write_state(SSL *ssl, ssl_encryption_level_t level,
117
+ UniquePtr<SSLAEADContext> aead_ctx,
118
+ Span<const uint8_t> secret_for_quic) {
98
119
  if (!tls_flush_pending_hs_data(ssl)) {
99
120
  return false;
100
121
  }
101
122
 
123
+ if (ssl->quic_method != nullptr) {
124
+ if (!ssl->quic_method->set_write_secret(ssl, level, aead_ctx->cipher(),
125
+ secret_for_quic.data(),
126
+ secret_for_quic.size())) {
127
+ return false;
128
+ }
129
+
130
+ // QUIC only uses |ssl| for handshake messages, which never use early data
131
+ // keys, so we return without installing anything. This avoids needing to
132
+ // have two secrets active at once in 0-RTT.
133
+ if (level == ssl_encryption_early_data) {
134
+ return true;
135
+ }
136
+ }
137
+
102
138
  OPENSSL_memset(ssl->s3->write_sequence, 0, sizeof(ssl->s3->write_sequence));
103
139
  ssl->s3->aead_write_ctx = std::move(aead_ctx);
140
+ ssl->s3->write_level = level;
104
141
  return true;
105
142
  }
106
143
 
107
144
  static const SSL_PROTOCOL_METHOD kTLSProtocolMethod = {
108
145
  false /* is_dtls */,
109
- ssl3_new,
110
- ssl3_free,
111
- ssl3_get_message,
112
- ssl3_next_message,
113
- ssl3_open_handshake,
114
- ssl3_open_change_cipher_spec,
115
- ssl3_open_app_data,
116
- ssl3_write_app_data,
117
- ssl3_dispatch_alert,
118
- ssl3_init_message,
119
- ssl3_finish_message,
120
- ssl3_add_message,
121
- ssl3_add_change_cipher_spec,
122
- ssl3_flush_flight,
123
- ssl3_on_handshake_complete,
124
- ssl3_set_read_state,
125
- ssl3_set_write_state,
146
+ tls_new,
147
+ tls_free,
148
+ tls_get_message,
149
+ tls_next_message,
150
+ tls_has_unprocessed_handshake_data,
151
+ tls_open_handshake,
152
+ tls_open_change_cipher_spec,
153
+ tls_open_app_data,
154
+ tls_write_app_data,
155
+ tls_dispatch_alert,
156
+ tls_init_message,
157
+ tls_finish_message,
158
+ tls_add_message,
159
+ tls_add_change_cipher_spec,
160
+ tls_flush_flight,
161
+ tls_on_handshake_complete,
162
+ tls_set_read_state,
163
+ tls_set_write_state,
126
164
  };
127
165
 
128
166
  static bool ssl_noop_x509_check_client_CA_names(
@@ -1,17 +1,28 @@
1
- /* Autogenerated */
1
+ /* Autogenerated: src/ExtractionOCaml/unsaturated_solinas --static 25519 10 '2^255 - 19' 32 carry_mul carry_square carry add sub opp selectznz to_bytes from_bytes carry_scmul121666 */
2
2
  /* curve description: 25519 */
3
- /* requested operations: carry_mul, carry_square, carry_scmul121666, carry, add, sub, opp, selectznz, to_bytes, from_bytes */
3
+ /* requested operations: carry_mul, carry_square, carry, add, sub, opp, selectznz, to_bytes, from_bytes, carry_scmul121666 */
4
4
  /* n = 10 (from "10") */
5
- /* s = 0x8000000000000000000000000000000000000000000000000000000000000000 (from "2^255") */
6
- /* c = [(1, 19)] (from "1,19") */
5
+ /* s-c = 2^255 - [(1, 19)] (from "2^255 - 19") */
7
6
  /* machine_wordsize = 32 (from "32") */
8
7
 
8
+ /* Computed values: */
9
+ /* carry_chain = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1] */
10
+
9
11
  #include <stdint.h>
10
12
  typedef unsigned char fiat_25519_uint1;
11
13
  typedef signed char fiat_25519_int1;
12
14
 
15
+ #if (-1 & 3) != 3
16
+ #error "This code only works on a two's complement system"
17
+ #endif
18
+
13
19
 
14
20
  /*
21
+ * The function fiat_25519_addcarryx_u26 is an addition with carry.
22
+ * Postconditions:
23
+ * out1 = (arg1 + arg2 + arg3) mod 2^26
24
+ * out2 = ⌊(arg1 + arg2 + arg3) / 2^26⌋
25
+ *
15
26
  * Input Bounds:
16
27
  * arg1: [0x0 ~> 0x1]
17
28
  * arg2: [0x0 ~> 0x3ffffff]
@@ -29,6 +40,11 @@ static void fiat_25519_addcarryx_u26(uint32_t* out1, fiat_25519_uint1* out2, fia
29
40
  }
30
41
 
31
42
  /*
43
+ * The function fiat_25519_subborrowx_u26 is a subtraction with borrow.
44
+ * Postconditions:
45
+ * out1 = (-arg1 + arg2 + -arg3) mod 2^26
46
+ * out2 = -⌊(-arg1 + arg2 + -arg3) / 2^26⌋
47
+ *
32
48
  * Input Bounds:
33
49
  * arg1: [0x0 ~> 0x1]
34
50
  * arg2: [0x0 ~> 0x3ffffff]
@@ -46,6 +62,11 @@ static void fiat_25519_subborrowx_u26(uint32_t* out1, fiat_25519_uint1* out2, fi
46
62
  }
47
63
 
48
64
  /*
65
+ * The function fiat_25519_addcarryx_u25 is an addition with carry.
66
+ * Postconditions:
67
+ * out1 = (arg1 + arg2 + arg3) mod 2^25
68
+ * out2 = ⌊(arg1 + arg2 + arg3) / 2^25⌋
69
+ *
49
70
  * Input Bounds:
50
71
  * arg1: [0x0 ~> 0x1]
51
72
  * arg2: [0x0 ~> 0x1ffffff]
@@ -63,6 +84,11 @@ static void fiat_25519_addcarryx_u25(uint32_t* out1, fiat_25519_uint1* out2, fia
63
84
  }
64
85
 
65
86
  /*
87
+ * The function fiat_25519_subborrowx_u25 is a subtraction with borrow.
88
+ * Postconditions:
89
+ * out1 = (-arg1 + arg2 + -arg3) mod 2^25
90
+ * out2 = -⌊(-arg1 + arg2 + -arg3) / 2^25⌋
91
+ *
66
92
  * Input Bounds:
67
93
  * arg1: [0x0 ~> 0x1]
68
94
  * arg2: [0x0 ~> 0x1ffffff]
@@ -80,6 +106,10 @@ static void fiat_25519_subborrowx_u25(uint32_t* out1, fiat_25519_uint1* out2, fi
80
106
  }
81
107
 
82
108
  /*
109
+ * The function fiat_25519_cmovznz_u32 is a single-word conditional move.
110
+ * Postconditions:
111
+ * out1 = (if arg1 = 0 then arg2 else arg3)
112
+ *
83
113
  * Input Bounds:
84
114
  * arg1: [0x0 ~> 0x1]
85
115
  * arg2: [0x0 ~> 0xffffffff]
@@ -101,6 +131,10 @@ static void fiat_25519_cmovznz_u32(uint32_t* out1, fiat_25519_uint1 arg1, uint32
101
131
  }
102
132
 
103
133
  /*
134
+ * The function fiat_25519_carry_mul multiplies two field elements and reduces the result.
135
+ * Postconditions:
136
+ * eval out1 mod m = (eval arg1 * eval arg2) mod m
137
+ *
104
138
  * Input Bounds:
105
139
  * arg1: [[0x0 ~> 0xd333332], [0x0 ~> 0x6999999], [0x0 ~> 0xd333332], [0x0 ~> 0x6999999], [0x0 ~> 0xd333332], [0x0 ~> 0x6999999], [0x0 ~> 0xd333332], [0x0 ~> 0x6999999], [0x0 ~> 0xd333332], [0x0 ~> 0x6999999]]
106
140
  * arg2: [[0x0 ~> 0xd333332], [0x0 ~> 0x6999999], [0x0 ~> 0xd333332], [0x0 ~> 0x6999999], [0x0 ~> 0xd333332], [0x0 ~> 0x6999999], [0x0 ~> 0xd333332], [0x0 ~> 0x6999999], [0x0 ~> 0xd333332], [0x0 ~> 0x6999999]]
@@ -108,65 +142,65 @@ static void fiat_25519_cmovznz_u32(uint32_t* out1, fiat_25519_uint1 arg1, uint32
108
142
  * out1: [[0x0 ~> 0x4666666], [0x0 ~> 0x2333333], [0x0 ~> 0x4666666], [0x0 ~> 0x2333333], [0x0 ~> 0x4666666], [0x0 ~> 0x2333333], [0x0 ~> 0x4666666], [0x0 ~> 0x2333333], [0x0 ~> 0x4666666], [0x0 ~> 0x2333333]]
109
143
  */
110
144
  static void fiat_25519_carry_mul(uint32_t out1[10], const uint32_t arg1[10], const uint32_t arg2[10]) {
111
- uint64_t x1 = ((uint64_t)(arg1[9]) * ((arg2[9]) * ((uint32_t)0x2 * UINT8_C(0x13))));
112
- uint64_t x2 = ((uint64_t)(arg1[9]) * ((arg2[8]) * (uint32_t)UINT8_C(0x13)));
113
- uint64_t x3 = ((uint64_t)(arg1[9]) * ((arg2[7]) * ((uint32_t)0x2 * UINT8_C(0x13))));
114
- uint64_t x4 = ((uint64_t)(arg1[9]) * ((arg2[6]) * (uint32_t)UINT8_C(0x13)));
115
- uint64_t x5 = ((uint64_t)(arg1[9]) * ((arg2[5]) * ((uint32_t)0x2 * UINT8_C(0x13))));
116
- uint64_t x6 = ((uint64_t)(arg1[9]) * ((arg2[4]) * (uint32_t)UINT8_C(0x13)));
117
- uint64_t x7 = ((uint64_t)(arg1[9]) * ((arg2[3]) * ((uint32_t)0x2 * UINT8_C(0x13))));
118
- uint64_t x8 = ((uint64_t)(arg1[9]) * ((arg2[2]) * (uint32_t)UINT8_C(0x13)));
119
- uint64_t x9 = ((uint64_t)(arg1[9]) * ((arg2[1]) * ((uint32_t)0x2 * UINT8_C(0x13))));
120
- uint64_t x10 = ((uint64_t)(arg1[8]) * ((arg2[9]) * (uint32_t)UINT8_C(0x13)));
121
- uint64_t x11 = ((uint64_t)(arg1[8]) * ((arg2[8]) * (uint32_t)UINT8_C(0x13)));
122
- uint64_t x12 = ((uint64_t)(arg1[8]) * ((arg2[7]) * (uint32_t)UINT8_C(0x13)));
123
- uint64_t x13 = ((uint64_t)(arg1[8]) * ((arg2[6]) * (uint32_t)UINT8_C(0x13)));
124
- uint64_t x14 = ((uint64_t)(arg1[8]) * ((arg2[5]) * (uint32_t)UINT8_C(0x13)));
125
- uint64_t x15 = ((uint64_t)(arg1[8]) * ((arg2[4]) * (uint32_t)UINT8_C(0x13)));
126
- uint64_t x16 = ((uint64_t)(arg1[8]) * ((arg2[3]) * (uint32_t)UINT8_C(0x13)));
127
- uint64_t x17 = ((uint64_t)(arg1[8]) * ((arg2[2]) * (uint32_t)UINT8_C(0x13)));
128
- uint64_t x18 = ((uint64_t)(arg1[7]) * ((arg2[9]) * ((uint32_t)0x2 * UINT8_C(0x13))));
129
- uint64_t x19 = ((uint64_t)(arg1[7]) * ((arg2[8]) * (uint32_t)UINT8_C(0x13)));
130
- uint64_t x20 = ((uint64_t)(arg1[7]) * ((arg2[7]) * ((uint32_t)0x2 * UINT8_C(0x13))));
131
- uint64_t x21 = ((uint64_t)(arg1[7]) * ((arg2[6]) * (uint32_t)UINT8_C(0x13)));
132
- uint64_t x22 = ((uint64_t)(arg1[7]) * ((arg2[5]) * ((uint32_t)0x2 * UINT8_C(0x13))));
133
- uint64_t x23 = ((uint64_t)(arg1[7]) * ((arg2[4]) * (uint32_t)UINT8_C(0x13)));
134
- uint64_t x24 = ((uint64_t)(arg1[7]) * ((arg2[3]) * ((uint32_t)0x2 * UINT8_C(0x13))));
135
- uint64_t x25 = ((uint64_t)(arg1[6]) * ((arg2[9]) * (uint32_t)UINT8_C(0x13)));
136
- uint64_t x26 = ((uint64_t)(arg1[6]) * ((arg2[8]) * (uint32_t)UINT8_C(0x13)));
137
- uint64_t x27 = ((uint64_t)(arg1[6]) * ((arg2[7]) * (uint32_t)UINT8_C(0x13)));
138
- uint64_t x28 = ((uint64_t)(arg1[6]) * ((arg2[6]) * (uint32_t)UINT8_C(0x13)));
139
- uint64_t x29 = ((uint64_t)(arg1[6]) * ((arg2[5]) * (uint32_t)UINT8_C(0x13)));
140
- uint64_t x30 = ((uint64_t)(arg1[6]) * ((arg2[4]) * (uint32_t)UINT8_C(0x13)));
141
- uint64_t x31 = ((uint64_t)(arg1[5]) * ((arg2[9]) * ((uint32_t)0x2 * UINT8_C(0x13))));
142
- uint64_t x32 = ((uint64_t)(arg1[5]) * ((arg2[8]) * (uint32_t)UINT8_C(0x13)));
143
- uint64_t x33 = ((uint64_t)(arg1[5]) * ((arg2[7]) * ((uint32_t)0x2 * UINT8_C(0x13))));
144
- uint64_t x34 = ((uint64_t)(arg1[5]) * ((arg2[6]) * (uint32_t)UINT8_C(0x13)));
145
- uint64_t x35 = ((uint64_t)(arg1[5]) * ((arg2[5]) * ((uint32_t)0x2 * UINT8_C(0x13))));
146
- uint64_t x36 = ((uint64_t)(arg1[4]) * ((arg2[9]) * (uint32_t)UINT8_C(0x13)));
147
- uint64_t x37 = ((uint64_t)(arg1[4]) * ((arg2[8]) * (uint32_t)UINT8_C(0x13)));
148
- uint64_t x38 = ((uint64_t)(arg1[4]) * ((arg2[7]) * (uint32_t)UINT8_C(0x13)));
149
- uint64_t x39 = ((uint64_t)(arg1[4]) * ((arg2[6]) * (uint32_t)UINT8_C(0x13)));
150
- uint64_t x40 = ((uint64_t)(arg1[3]) * ((arg2[9]) * ((uint32_t)0x2 * UINT8_C(0x13))));
151
- uint64_t x41 = ((uint64_t)(arg1[3]) * ((arg2[8]) * (uint32_t)UINT8_C(0x13)));
152
- uint64_t x42 = ((uint64_t)(arg1[3]) * ((arg2[7]) * ((uint32_t)0x2 * UINT8_C(0x13))));
153
- uint64_t x43 = ((uint64_t)(arg1[2]) * ((arg2[9]) * (uint32_t)UINT8_C(0x13)));
154
- uint64_t x44 = ((uint64_t)(arg1[2]) * ((arg2[8]) * (uint32_t)UINT8_C(0x13)));
155
- uint64_t x45 = ((uint64_t)(arg1[1]) * ((arg2[9]) * ((uint32_t)0x2 * UINT8_C(0x13))));
145
+ uint64_t x1 = ((uint64_t)(arg1[9]) * ((arg2[9]) * UINT8_C(0x26)));
146
+ uint64_t x2 = ((uint64_t)(arg1[9]) * ((arg2[8]) * UINT8_C(0x13)));
147
+ uint64_t x3 = ((uint64_t)(arg1[9]) * ((arg2[7]) * UINT8_C(0x26)));
148
+ uint64_t x4 = ((uint64_t)(arg1[9]) * ((arg2[6]) * UINT8_C(0x13)));
149
+ uint64_t x5 = ((uint64_t)(arg1[9]) * ((arg2[5]) * UINT8_C(0x26)));
150
+ uint64_t x6 = ((uint64_t)(arg1[9]) * ((arg2[4]) * UINT8_C(0x13)));
151
+ uint64_t x7 = ((uint64_t)(arg1[9]) * ((arg2[3]) * UINT8_C(0x26)));
152
+ uint64_t x8 = ((uint64_t)(arg1[9]) * ((arg2[2]) * UINT8_C(0x13)));
153
+ uint64_t x9 = ((uint64_t)(arg1[9]) * ((arg2[1]) * UINT8_C(0x26)));
154
+ uint64_t x10 = ((uint64_t)(arg1[8]) * ((arg2[9]) * UINT8_C(0x13)));
155
+ uint64_t x11 = ((uint64_t)(arg1[8]) * ((arg2[8]) * UINT8_C(0x13)));
156
+ uint64_t x12 = ((uint64_t)(arg1[8]) * ((arg2[7]) * UINT8_C(0x13)));
157
+ uint64_t x13 = ((uint64_t)(arg1[8]) * ((arg2[6]) * UINT8_C(0x13)));
158
+ uint64_t x14 = ((uint64_t)(arg1[8]) * ((arg2[5]) * UINT8_C(0x13)));
159
+ uint64_t x15 = ((uint64_t)(arg1[8]) * ((arg2[4]) * UINT8_C(0x13)));
160
+ uint64_t x16 = ((uint64_t)(arg1[8]) * ((arg2[3]) * UINT8_C(0x13)));
161
+ uint64_t x17 = ((uint64_t)(arg1[8]) * ((arg2[2]) * UINT8_C(0x13)));
162
+ uint64_t x18 = ((uint64_t)(arg1[7]) * ((arg2[9]) * UINT8_C(0x26)));
163
+ uint64_t x19 = ((uint64_t)(arg1[7]) * ((arg2[8]) * UINT8_C(0x13)));
164
+ uint64_t x20 = ((uint64_t)(arg1[7]) * ((arg2[7]) * UINT8_C(0x26)));
165
+ uint64_t x21 = ((uint64_t)(arg1[7]) * ((arg2[6]) * UINT8_C(0x13)));
166
+ uint64_t x22 = ((uint64_t)(arg1[7]) * ((arg2[5]) * UINT8_C(0x26)));
167
+ uint64_t x23 = ((uint64_t)(arg1[7]) * ((arg2[4]) * UINT8_C(0x13)));
168
+ uint64_t x24 = ((uint64_t)(arg1[7]) * ((arg2[3]) * UINT8_C(0x26)));
169
+ uint64_t x25 = ((uint64_t)(arg1[6]) * ((arg2[9]) * UINT8_C(0x13)));
170
+ uint64_t x26 = ((uint64_t)(arg1[6]) * ((arg2[8]) * UINT8_C(0x13)));
171
+ uint64_t x27 = ((uint64_t)(arg1[6]) * ((arg2[7]) * UINT8_C(0x13)));
172
+ uint64_t x28 = ((uint64_t)(arg1[6]) * ((arg2[6]) * UINT8_C(0x13)));
173
+ uint64_t x29 = ((uint64_t)(arg1[6]) * ((arg2[5]) * UINT8_C(0x13)));
174
+ uint64_t x30 = ((uint64_t)(arg1[6]) * ((arg2[4]) * UINT8_C(0x13)));
175
+ uint64_t x31 = ((uint64_t)(arg1[5]) * ((arg2[9]) * UINT8_C(0x26)));
176
+ uint64_t x32 = ((uint64_t)(arg1[5]) * ((arg2[8]) * UINT8_C(0x13)));
177
+ uint64_t x33 = ((uint64_t)(arg1[5]) * ((arg2[7]) * UINT8_C(0x26)));
178
+ uint64_t x34 = ((uint64_t)(arg1[5]) * ((arg2[6]) * UINT8_C(0x13)));
179
+ uint64_t x35 = ((uint64_t)(arg1[5]) * ((arg2[5]) * UINT8_C(0x26)));
180
+ uint64_t x36 = ((uint64_t)(arg1[4]) * ((arg2[9]) * UINT8_C(0x13)));
181
+ uint64_t x37 = ((uint64_t)(arg1[4]) * ((arg2[8]) * UINT8_C(0x13)));
182
+ uint64_t x38 = ((uint64_t)(arg1[4]) * ((arg2[7]) * UINT8_C(0x13)));
183
+ uint64_t x39 = ((uint64_t)(arg1[4]) * ((arg2[6]) * UINT8_C(0x13)));
184
+ uint64_t x40 = ((uint64_t)(arg1[3]) * ((arg2[9]) * UINT8_C(0x26)));
185
+ uint64_t x41 = ((uint64_t)(arg1[3]) * ((arg2[8]) * UINT8_C(0x13)));
186
+ uint64_t x42 = ((uint64_t)(arg1[3]) * ((arg2[7]) * UINT8_C(0x26)));
187
+ uint64_t x43 = ((uint64_t)(arg1[2]) * ((arg2[9]) * UINT8_C(0x13)));
188
+ uint64_t x44 = ((uint64_t)(arg1[2]) * ((arg2[8]) * UINT8_C(0x13)));
189
+ uint64_t x45 = ((uint64_t)(arg1[1]) * ((arg2[9]) * UINT8_C(0x26)));
156
190
  uint64_t x46 = ((uint64_t)(arg1[9]) * (arg2[0]));
157
191
  uint64_t x47 = ((uint64_t)(arg1[8]) * (arg2[1]));
158
192
  uint64_t x48 = ((uint64_t)(arg1[8]) * (arg2[0]));
159
193
  uint64_t x49 = ((uint64_t)(arg1[7]) * (arg2[2]));
160
- uint64_t x50 = ((uint64_t)(arg1[7]) * ((arg2[1]) * (uint32_t)0x2));
194
+ uint64_t x50 = ((uint64_t)(arg1[7]) * ((arg2[1]) * 0x2));
161
195
  uint64_t x51 = ((uint64_t)(arg1[7]) * (arg2[0]));
162
196
  uint64_t x52 = ((uint64_t)(arg1[6]) * (arg2[3]));
163
197
  uint64_t x53 = ((uint64_t)(arg1[6]) * (arg2[2]));
164
198
  uint64_t x54 = ((uint64_t)(arg1[6]) * (arg2[1]));
165
199
  uint64_t x55 = ((uint64_t)(arg1[6]) * (arg2[0]));
166
200
  uint64_t x56 = ((uint64_t)(arg1[5]) * (arg2[4]));
167
- uint64_t x57 = ((uint64_t)(arg1[5]) * ((arg2[3]) * (uint32_t)0x2));
201
+ uint64_t x57 = ((uint64_t)(arg1[5]) * ((arg2[3]) * 0x2));
168
202
  uint64_t x58 = ((uint64_t)(arg1[5]) * (arg2[2]));
169
- uint64_t x59 = ((uint64_t)(arg1[5]) * ((arg2[1]) * (uint32_t)0x2));
203
+ uint64_t x59 = ((uint64_t)(arg1[5]) * ((arg2[1]) * 0x2));
170
204
  uint64_t x60 = ((uint64_t)(arg1[5]) * (arg2[0]));
171
205
  uint64_t x61 = ((uint64_t)(arg1[4]) * (arg2[5]));
172
206
  uint64_t x62 = ((uint64_t)(arg1[4]) * (arg2[4]));
@@ -175,11 +209,11 @@ static void fiat_25519_carry_mul(uint32_t out1[10], const uint32_t arg1[10], con
175
209
  uint64_t x65 = ((uint64_t)(arg1[4]) * (arg2[1]));
176
210
  uint64_t x66 = ((uint64_t)(arg1[4]) * (arg2[0]));
177
211
  uint64_t x67 = ((uint64_t)(arg1[3]) * (arg2[6]));
178
- uint64_t x68 = ((uint64_t)(arg1[3]) * ((arg2[5]) * (uint32_t)0x2));
212
+ uint64_t x68 = ((uint64_t)(arg1[3]) * ((arg2[5]) * 0x2));
179
213
  uint64_t x69 = ((uint64_t)(arg1[3]) * (arg2[4]));
180
- uint64_t x70 = ((uint64_t)(arg1[3]) * ((arg2[3]) * (uint32_t)0x2));
214
+ uint64_t x70 = ((uint64_t)(arg1[3]) * ((arg2[3]) * 0x2));
181
215
  uint64_t x71 = ((uint64_t)(arg1[3]) * (arg2[2]));
182
- uint64_t x72 = ((uint64_t)(arg1[3]) * ((arg2[1]) * (uint32_t)0x2));
216
+ uint64_t x72 = ((uint64_t)(arg1[3]) * ((arg2[1]) * 0x2));
183
217
  uint64_t x73 = ((uint64_t)(arg1[3]) * (arg2[0]));
184
218
  uint64_t x74 = ((uint64_t)(arg1[2]) * (arg2[7]));
185
219
  uint64_t x75 = ((uint64_t)(arg1[2]) * (arg2[6]));
@@ -190,13 +224,13 @@ static void fiat_25519_carry_mul(uint32_t out1[10], const uint32_t arg1[10], con
190
224
  uint64_t x80 = ((uint64_t)(arg1[2]) * (arg2[1]));
191
225
  uint64_t x81 = ((uint64_t)(arg1[2]) * (arg2[0]));
192
226
  uint64_t x82 = ((uint64_t)(arg1[1]) * (arg2[8]));
193
- uint64_t x83 = ((uint64_t)(arg1[1]) * ((arg2[7]) * (uint32_t)0x2));
227
+ uint64_t x83 = ((uint64_t)(arg1[1]) * ((arg2[7]) * 0x2));
194
228
  uint64_t x84 = ((uint64_t)(arg1[1]) * (arg2[6]));
195
- uint64_t x85 = ((uint64_t)(arg1[1]) * ((arg2[5]) * (uint32_t)0x2));
229
+ uint64_t x85 = ((uint64_t)(arg1[1]) * ((arg2[5]) * 0x2));
196
230
  uint64_t x86 = ((uint64_t)(arg1[1]) * (arg2[4]));
197
- uint64_t x87 = ((uint64_t)(arg1[1]) * ((arg2[3]) * (uint32_t)0x2));
231
+ uint64_t x87 = ((uint64_t)(arg1[1]) * ((arg2[3]) * 0x2));
198
232
  uint64_t x88 = ((uint64_t)(arg1[1]) * (arg2[2]));
199
- uint64_t x89 = ((uint64_t)(arg1[1]) * ((arg2[1]) * (uint32_t)0x2));
233
+ uint64_t x89 = ((uint64_t)(arg1[1]) * ((arg2[1]) * 0x2));
200
234
  uint64_t x90 = ((uint64_t)(arg1[1]) * (arg2[0]));
201
235
  uint64_t x91 = ((uint64_t)(arg1[0]) * (arg2[9]));
202
236
  uint64_t x92 = ((uint64_t)(arg1[0]) * (arg2[8]));
@@ -247,12 +281,12 @@ static void fiat_25519_carry_mul(uint32_t out1[10], const uint32_t arg1[10], con
247
281
  uint64_t x137 = (x135 + x104);
248
282
  uint64_t x138 = (x137 >> 25);
249
283
  uint32_t x139 = (uint32_t)(x137 & UINT32_C(0x1ffffff));
250
- uint64_t x140 = (x138 * (uint64_t)UINT8_C(0x13));
284
+ uint64_t x140 = (x138 * UINT8_C(0x13));
251
285
  uint64_t x141 = (x103 + x140);
252
286
  uint32_t x142 = (uint32_t)(x141 >> 26);
253
287
  uint32_t x143 = (uint32_t)(x141 & UINT32_C(0x3ffffff));
254
288
  uint32_t x144 = (x142 + x115);
255
- uint32_t x145 = (x144 >> 25);
289
+ fiat_25519_uint1 x145 = (fiat_25519_uint1)(x144 >> 25);
256
290
  uint32_t x146 = (x144 & UINT32_C(0x1ffffff));
257
291
  uint32_t x147 = (x145 + x118);
258
292
  out1[0] = x143;
@@ -268,58 +302,62 @@ static void fiat_25519_carry_mul(uint32_t out1[10], const uint32_t arg1[10], con
268
302
  }
269
303
 
270
304
  /*
305
+ * The function fiat_25519_carry_square squares a field element and reduces the result.
306
+ * Postconditions:
307
+ * eval out1 mod m = (eval arg1 * eval arg1) mod m
308
+ *
271
309
  * Input Bounds:
272
310
  * arg1: [[0x0 ~> 0xd333332], [0x0 ~> 0x6999999], [0x0 ~> 0xd333332], [0x0 ~> 0x6999999], [0x0 ~> 0xd333332], [0x0 ~> 0x6999999], [0x0 ~> 0xd333332], [0x0 ~> 0x6999999], [0x0 ~> 0xd333332], [0x0 ~> 0x6999999]]
273
311
  * Output Bounds:
274
312
  * out1: [[0x0 ~> 0x4666666], [0x0 ~> 0x2333333], [0x0 ~> 0x4666666], [0x0 ~> 0x2333333], [0x0 ~> 0x4666666], [0x0 ~> 0x2333333], [0x0 ~> 0x4666666], [0x0 ~> 0x2333333], [0x0 ~> 0x4666666], [0x0 ~> 0x2333333]]
275
313
  */
276
314
  static void fiat_25519_carry_square(uint32_t out1[10], const uint32_t arg1[10]) {
277
- uint32_t x1 = ((arg1[9]) * (uint32_t)UINT8_C(0x13));
278
- uint32_t x2 = (x1 * (uint32_t)0x2);
279
- uint32_t x3 = ((arg1[9]) * (uint32_t)0x2);
280
- uint32_t x4 = ((arg1[8]) * (uint32_t)UINT8_C(0x13));
281
- uint64_t x5 = (x4 * (uint64_t)0x2);
282
- uint32_t x6 = ((arg1[8]) * (uint32_t)0x2);
283
- uint32_t x7 = ((arg1[7]) * (uint32_t)UINT8_C(0x13));
284
- uint32_t x8 = (x7 * (uint32_t)0x2);
285
- uint32_t x9 = ((arg1[7]) * (uint32_t)0x2);
286
- uint32_t x10 = ((arg1[6]) * (uint32_t)UINT8_C(0x13));
287
- uint64_t x11 = (x10 * (uint64_t)0x2);
288
- uint32_t x12 = ((arg1[6]) * (uint32_t)0x2);
289
- uint32_t x13 = ((arg1[5]) * (uint32_t)UINT8_C(0x13));
290
- uint32_t x14 = ((arg1[5]) * (uint32_t)0x2);
291
- uint32_t x15 = ((arg1[4]) * (uint32_t)0x2);
292
- uint32_t x16 = ((arg1[3]) * (uint32_t)0x2);
293
- uint32_t x17 = ((arg1[2]) * (uint32_t)0x2);
294
- uint32_t x18 = ((arg1[1]) * (uint32_t)0x2);
295
- uint64_t x19 = ((uint64_t)(arg1[9]) * (x1 * (uint32_t)0x2));
315
+ uint32_t x1 = ((arg1[9]) * UINT8_C(0x13));
316
+ uint32_t x2 = (x1 * 0x2);
317
+ uint32_t x3 = ((arg1[9]) * 0x2);
318
+ uint32_t x4 = ((arg1[8]) * UINT8_C(0x13));
319
+ uint64_t x5 = ((uint64_t)x4 * 0x2);
320
+ uint32_t x6 = ((arg1[8]) * 0x2);
321
+ uint32_t x7 = ((arg1[7]) * UINT8_C(0x13));
322
+ uint32_t x8 = (x7 * 0x2);
323
+ uint32_t x9 = ((arg1[7]) * 0x2);
324
+ uint32_t x10 = ((arg1[6]) * UINT8_C(0x13));
325
+ uint64_t x11 = ((uint64_t)x10 * 0x2);
326
+ uint32_t x12 = ((arg1[6]) * 0x2);
327
+ uint32_t x13 = ((arg1[5]) * UINT8_C(0x13));
328
+ uint32_t x14 = ((arg1[5]) * 0x2);
329
+ uint32_t x15 = ((arg1[4]) * 0x2);
330
+ uint32_t x16 = ((arg1[3]) * 0x2);
331
+ uint32_t x17 = ((arg1[2]) * 0x2);
332
+ uint32_t x18 = ((arg1[1]) * 0x2);
333
+ uint64_t x19 = ((uint64_t)(arg1[9]) * (x1 * 0x2));
296
334
  uint64_t x20 = ((uint64_t)(arg1[8]) * x2);
297
335
  uint64_t x21 = ((uint64_t)(arg1[8]) * x4);
298
- uint64_t x22 = ((arg1[7]) * (x2 * (uint64_t)0x2));
336
+ uint64_t x22 = ((arg1[7]) * ((uint64_t)x2 * 0x2));
299
337
  uint64_t x23 = ((arg1[7]) * x5);
300
- uint64_t x24 = ((uint64_t)(arg1[7]) * (x7 * (uint32_t)0x2));
338
+ uint64_t x24 = ((uint64_t)(arg1[7]) * (x7 * 0x2));
301
339
  uint64_t x25 = ((uint64_t)(arg1[6]) * x2);
302
340
  uint64_t x26 = ((arg1[6]) * x5);
303
341
  uint64_t x27 = ((uint64_t)(arg1[6]) * x8);
304
342
  uint64_t x28 = ((uint64_t)(arg1[6]) * x10);
305
- uint64_t x29 = ((arg1[5]) * (x2 * (uint64_t)0x2));
343
+ uint64_t x29 = ((arg1[5]) * ((uint64_t)x2 * 0x2));
306
344
  uint64_t x30 = ((arg1[5]) * x5);
307
- uint64_t x31 = ((arg1[5]) * (x8 * (uint64_t)0x2));
345
+ uint64_t x31 = ((arg1[5]) * ((uint64_t)x8 * 0x2));
308
346
  uint64_t x32 = ((arg1[5]) * x11);
309
- uint64_t x33 = ((uint64_t)(arg1[5]) * (x13 * (uint32_t)0x2));
347
+ uint64_t x33 = ((uint64_t)(arg1[5]) * (x13 * 0x2));
310
348
  uint64_t x34 = ((uint64_t)(arg1[4]) * x2);
311
349
  uint64_t x35 = ((arg1[4]) * x5);
312
350
  uint64_t x36 = ((uint64_t)(arg1[4]) * x8);
313
351
  uint64_t x37 = ((arg1[4]) * x11);
314
352
  uint64_t x38 = ((uint64_t)(arg1[4]) * x14);
315
353
  uint64_t x39 = ((uint64_t)(arg1[4]) * (arg1[4]));
316
- uint64_t x40 = ((arg1[3]) * (x2 * (uint64_t)0x2));
354
+ uint64_t x40 = ((arg1[3]) * ((uint64_t)x2 * 0x2));
317
355
  uint64_t x41 = ((arg1[3]) * x5);
318
- uint64_t x42 = ((arg1[3]) * (x8 * (uint64_t)0x2));
356
+ uint64_t x42 = ((arg1[3]) * ((uint64_t)x8 * 0x2));
319
357
  uint64_t x43 = ((uint64_t)(arg1[3]) * x12);
320
- uint64_t x44 = ((uint64_t)(arg1[3]) * (x14 * (uint32_t)0x2));
358
+ uint64_t x44 = ((uint64_t)(arg1[3]) * (x14 * 0x2));
321
359
  uint64_t x45 = ((uint64_t)(arg1[3]) * x15);
322
- uint64_t x46 = ((uint64_t)(arg1[3]) * ((arg1[3]) * (uint32_t)0x2));
360
+ uint64_t x46 = ((uint64_t)(arg1[3]) * ((arg1[3]) * 0x2));
323
361
  uint64_t x47 = ((uint64_t)(arg1[2]) * x2);
324
362
  uint64_t x48 = ((arg1[2]) * x5);
325
363
  uint64_t x49 = ((uint64_t)(arg1[2]) * x9);
@@ -328,15 +366,15 @@ static void fiat_25519_carry_square(uint32_t out1[10], const uint32_t arg1[10])
328
366
  uint64_t x52 = ((uint64_t)(arg1[2]) * x15);
329
367
  uint64_t x53 = ((uint64_t)(arg1[2]) * x16);
330
368
  uint64_t x54 = ((uint64_t)(arg1[2]) * (arg1[2]));
331
- uint64_t x55 = ((arg1[1]) * (x2 * (uint64_t)0x2));
369
+ uint64_t x55 = ((arg1[1]) * ((uint64_t)x2 * 0x2));
332
370
  uint64_t x56 = ((uint64_t)(arg1[1]) * x6);
333
- uint64_t x57 = ((uint64_t)(arg1[1]) * (x9 * (uint32_t)0x2));
371
+ uint64_t x57 = ((uint64_t)(arg1[1]) * (x9 * 0x2));
334
372
  uint64_t x58 = ((uint64_t)(arg1[1]) * x12);
335
- uint64_t x59 = ((uint64_t)(arg1[1]) * (x14 * (uint32_t)0x2));
373
+ uint64_t x59 = ((uint64_t)(arg1[1]) * (x14 * 0x2));
336
374
  uint64_t x60 = ((uint64_t)(arg1[1]) * x15);
337
- uint64_t x61 = ((uint64_t)(arg1[1]) * (x16 * (uint32_t)0x2));
375
+ uint64_t x61 = ((uint64_t)(arg1[1]) * (x16 * 0x2));
338
376
  uint64_t x62 = ((uint64_t)(arg1[1]) * x17);
339
- uint64_t x63 = ((uint64_t)(arg1[1]) * ((arg1[1]) * (uint32_t)0x2));
377
+ uint64_t x63 = ((uint64_t)(arg1[1]) * ((arg1[1]) * 0x2));
340
378
  uint64_t x64 = ((uint64_t)(arg1[0]) * x3);
341
379
  uint64_t x65 = ((uint64_t)(arg1[0]) * x6);
342
380
  uint64_t x66 = ((uint64_t)(arg1[0]) * x9);
@@ -386,12 +424,12 @@ static void fiat_25519_carry_square(uint32_t out1[10], const uint32_t arg1[10])
386
424
  uint64_t x110 = (x108 + x77);
387
425
  uint64_t x111 = (x110 >> 25);
388
426
  uint32_t x112 = (uint32_t)(x110 & UINT32_C(0x1ffffff));
389
- uint64_t x113 = (x111 * (uint64_t)UINT8_C(0x13));
427
+ uint64_t x113 = (x111 * UINT8_C(0x13));
390
428
  uint64_t x114 = (x76 + x113);
391
429
  uint32_t x115 = (uint32_t)(x114 >> 26);
392
430
  uint32_t x116 = (uint32_t)(x114 & UINT32_C(0x3ffffff));
393
431
  uint32_t x117 = (x115 + x88);
394
- uint32_t x118 = (x117 >> 25);
432
+ fiat_25519_uint1 x118 = (fiat_25519_uint1)(x117 >> 25);
395
433
  uint32_t x119 = (x117 & UINT32_C(0x1ffffff));
396
434
  uint32_t x120 = (x118 + x91);
397
435
  out1[0] = x116;
@@ -407,72 +445,10 @@ static void fiat_25519_carry_square(uint32_t out1[10], const uint32_t arg1[10])
407
445
  }
408
446
 
409
447
  /*
410
- * Input Bounds:
411
- * arg1: [[0x0 ~> 0xd333332], [0x0 ~> 0x6999999], [0x0 ~> 0xd333332], [0x0 ~> 0x6999999], [0x0 ~> 0xd333332], [0x0 ~> 0x6999999], [0x0 ~> 0xd333332], [0x0 ~> 0x6999999], [0x0 ~> 0xd333332], [0x0 ~> 0x6999999]]
412
- * Output Bounds:
413
- * out1: [[0x0 ~> 0x4666666], [0x0 ~> 0x2333333], [0x0 ~> 0x4666666], [0x0 ~> 0x2333333], [0x0 ~> 0x4666666], [0x0 ~> 0x2333333], [0x0 ~> 0x4666666], [0x0 ~> 0x2333333], [0x0 ~> 0x4666666], [0x0 ~> 0x2333333]]
414
- */
415
- static void fiat_25519_carry_scmul_121666(uint32_t out1[10], const uint32_t arg1[10]) {
416
- uint64_t x1 = ((uint64_t)UINT32_C(0x1db42) * (arg1[9]));
417
- uint64_t x2 = ((uint64_t)UINT32_C(0x1db42) * (arg1[8]));
418
- uint64_t x3 = ((uint64_t)UINT32_C(0x1db42) * (arg1[7]));
419
- uint64_t x4 = ((uint64_t)UINT32_C(0x1db42) * (arg1[6]));
420
- uint64_t x5 = ((uint64_t)UINT32_C(0x1db42) * (arg1[5]));
421
- uint64_t x6 = ((uint64_t)UINT32_C(0x1db42) * (arg1[4]));
422
- uint64_t x7 = ((uint64_t)UINT32_C(0x1db42) * (arg1[3]));
423
- uint64_t x8 = ((uint64_t)UINT32_C(0x1db42) * (arg1[2]));
424
- uint64_t x9 = ((uint64_t)UINT32_C(0x1db42) * (arg1[1]));
425
- uint64_t x10 = ((uint64_t)UINT32_C(0x1db42) * (arg1[0]));
426
- uint32_t x11 = (uint32_t)(x10 >> 26);
427
- uint32_t x12 = (uint32_t)(x10 & UINT32_C(0x3ffffff));
428
- uint64_t x13 = (x11 + x9);
429
- uint32_t x14 = (uint32_t)(x13 >> 25);
430
- uint32_t x15 = (uint32_t)(x13 & UINT32_C(0x1ffffff));
431
- uint64_t x16 = (x14 + x8);
432
- uint32_t x17 = (uint32_t)(x16 >> 26);
433
- uint32_t x18 = (uint32_t)(x16 & UINT32_C(0x3ffffff));
434
- uint64_t x19 = (x17 + x7);
435
- uint32_t x20 = (uint32_t)(x19 >> 25);
436
- uint32_t x21 = (uint32_t)(x19 & UINT32_C(0x1ffffff));
437
- uint64_t x22 = (x20 + x6);
438
- uint32_t x23 = (uint32_t)(x22 >> 26);
439
- uint32_t x24 = (uint32_t)(x22 & UINT32_C(0x3ffffff));
440
- uint64_t x25 = (x23 + x5);
441
- uint32_t x26 = (uint32_t)(x25 >> 25);
442
- uint32_t x27 = (uint32_t)(x25 & UINT32_C(0x1ffffff));
443
- uint64_t x28 = (x26 + x4);
444
- uint32_t x29 = (uint32_t)(x28 >> 26);
445
- uint32_t x30 = (uint32_t)(x28 & UINT32_C(0x3ffffff));
446
- uint64_t x31 = (x29 + x3);
447
- uint32_t x32 = (uint32_t)(x31 >> 25);
448
- uint32_t x33 = (uint32_t)(x31 & UINT32_C(0x1ffffff));
449
- uint64_t x34 = (x32 + x2);
450
- uint32_t x35 = (uint32_t)(x34 >> 26);
451
- uint32_t x36 = (uint32_t)(x34 & UINT32_C(0x3ffffff));
452
- uint64_t x37 = (x35 + x1);
453
- uint32_t x38 = (uint32_t)(x37 >> 25);
454
- uint32_t x39 = (uint32_t)(x37 & UINT32_C(0x1ffffff));
455
- uint32_t x40 = (x38 * (uint32_t)UINT8_C(0x13));
456
- uint32_t x41 = (x12 + x40);
457
- uint32_t x42 = (x41 >> 26);
458
- uint32_t x43 = (x41 & UINT32_C(0x3ffffff));
459
- uint32_t x44 = (x42 + x15);
460
- uint32_t x45 = (x44 >> 25);
461
- uint32_t x46 = (x44 & UINT32_C(0x1ffffff));
462
- uint32_t x47 = (x45 + x18);
463
- out1[0] = x43;
464
- out1[1] = x46;
465
- out1[2] = x47;
466
- out1[3] = x21;
467
- out1[4] = x24;
468
- out1[5] = x27;
469
- out1[6] = x30;
470
- out1[7] = x33;
471
- out1[8] = x36;
472
- out1[9] = x39;
473
- }
474
-
475
- /*
448
+ * The function fiat_25519_carry reduces a field element.
449
+ * Postconditions:
450
+ * eval out1 mod m = eval arg1 mod m
451
+ *
476
452
  * Input Bounds:
477
453
  * arg1: [[0x0 ~> 0xd333332], [0x0 ~> 0x6999999], [0x0 ~> 0xd333332], [0x0 ~> 0x6999999], [0x0 ~> 0xd333332], [0x0 ~> 0x6999999], [0x0 ~> 0xd333332], [0x0 ~> 0x6999999], [0x0 ~> 0xd333332], [0x0 ~> 0x6999999]]
478
454
  * Output Bounds:
@@ -489,11 +465,11 @@ static void fiat_25519_carry(uint32_t out1[10], const uint32_t arg1[10]) {
489
465
  uint32_t x8 = ((x7 >> 26) + (arg1[7]));
490
466
  uint32_t x9 = ((x8 >> 25) + (arg1[8]));
491
467
  uint32_t x10 = ((x9 >> 26) + (arg1[9]));
492
- uint32_t x11 = ((x1 & UINT32_C(0x3ffffff)) + ((x10 >> 25) * (uint32_t)UINT8_C(0x13)));
493
- uint32_t x12 = ((x11 >> 26) + (x2 & UINT32_C(0x1ffffff)));
468
+ uint32_t x11 = ((x1 & UINT32_C(0x3ffffff)) + ((x10 >> 25) * UINT8_C(0x13)));
469
+ uint32_t x12 = ((fiat_25519_uint1)(x11 >> 26) + (x2 & UINT32_C(0x1ffffff)));
494
470
  uint32_t x13 = (x11 & UINT32_C(0x3ffffff));
495
471
  uint32_t x14 = (x12 & UINT32_C(0x1ffffff));
496
- uint32_t x15 = ((x12 >> 25) + (x3 & UINT32_C(0x3ffffff)));
472
+ uint32_t x15 = ((fiat_25519_uint1)(x12 >> 25) + (x3 & UINT32_C(0x3ffffff)));
497
473
  uint32_t x16 = (x4 & UINT32_C(0x1ffffff));
498
474
  uint32_t x17 = (x5 & UINT32_C(0x3ffffff));
499
475
  uint32_t x18 = (x6 & UINT32_C(0x1ffffff));
@@ -514,6 +490,10 @@ static void fiat_25519_carry(uint32_t out1[10], const uint32_t arg1[10]) {
514
490
  }
515
491
 
516
492
  /*
493
+ * The function fiat_25519_add adds two field elements.
494
+ * Postconditions:
495
+ * eval out1 mod m = (eval arg1 + eval arg2) mod m
496
+ *
517
497
  * Input Bounds:
518
498
  * arg1: [[0x0 ~> 0x4666666], [0x0 ~> 0x2333333], [0x0 ~> 0x4666666], [0x0 ~> 0x2333333], [0x0 ~> 0x4666666], [0x0 ~> 0x2333333], [0x0 ~> 0x4666666], [0x0 ~> 0x2333333], [0x0 ~> 0x4666666], [0x0 ~> 0x2333333]]
519
499
  * arg2: [[0x0 ~> 0x4666666], [0x0 ~> 0x2333333], [0x0 ~> 0x4666666], [0x0 ~> 0x2333333], [0x0 ~> 0x4666666], [0x0 ~> 0x2333333], [0x0 ~> 0x4666666], [0x0 ~> 0x2333333], [0x0 ~> 0x4666666], [0x0 ~> 0x2333333]]
@@ -544,6 +524,10 @@ static void fiat_25519_add(uint32_t out1[10], const uint32_t arg1[10], const uin
544
524
  }
545
525
 
546
526
  /*
527
+ * The function fiat_25519_sub subtracts two field elements.
528
+ * Postconditions:
529
+ * eval out1 mod m = (eval arg1 - eval arg2) mod m
530
+ *
547
531
  * Input Bounds:
548
532
  * arg1: [[0x0 ~> 0x4666666], [0x0 ~> 0x2333333], [0x0 ~> 0x4666666], [0x0 ~> 0x2333333], [0x0 ~> 0x4666666], [0x0 ~> 0x2333333], [0x0 ~> 0x4666666], [0x0 ~> 0x2333333], [0x0 ~> 0x4666666], [0x0 ~> 0x2333333]]
549
533
  * arg2: [[0x0 ~> 0x4666666], [0x0 ~> 0x2333333], [0x0 ~> 0x4666666], [0x0 ~> 0x2333333], [0x0 ~> 0x4666666], [0x0 ~> 0x2333333], [0x0 ~> 0x4666666], [0x0 ~> 0x2333333], [0x0 ~> 0x4666666], [0x0 ~> 0x2333333]]
@@ -574,6 +558,10 @@ static void fiat_25519_sub(uint32_t out1[10], const uint32_t arg1[10], const uin
574
558
  }
575
559
 
576
560
  /*
561
+ * The function fiat_25519_opp negates a field element.
562
+ * Postconditions:
563
+ * eval out1 mod m = -eval arg1 mod m
564
+ *
577
565
  * Input Bounds:
578
566
  * arg1: [[0x0 ~> 0x4666666], [0x0 ~> 0x2333333], [0x0 ~> 0x4666666], [0x0 ~> 0x2333333], [0x0 ~> 0x4666666], [0x0 ~> 0x2333333], [0x0 ~> 0x4666666], [0x0 ~> 0x2333333], [0x0 ~> 0x4666666], [0x0 ~> 0x2333333]]
579
567
  * Output Bounds:
@@ -603,6 +591,10 @@ static void fiat_25519_opp(uint32_t out1[10], const uint32_t arg1[10]) {
603
591
  }
604
592
 
605
593
  /*
594
+ * The function fiat_25519_selectznz is a multi-limb conditional select.
595
+ * Postconditions:
596
+ * eval out1 = (if arg1 = 0 then eval arg2 else eval arg3)
597
+ *
606
598
  * Input Bounds:
607
599
  * arg1: [0x0 ~> 0x1]
608
600
  * arg2: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]]
@@ -644,6 +636,10 @@ static void fiat_25519_selectznz(uint32_t out1[10], fiat_25519_uint1 arg1, const
644
636
  }
645
637
 
646
638
  /*
639
+ * The function fiat_25519_to_bytes serializes a field element to bytes in little-endian order.
640
+ * Postconditions:
641
+ * out1 = map (λ x, ⌊((eval arg1 mod m) mod 2^(8 * (x + 1))) / 2^(8 * x)⌋) [0..31]
642
+ *
647
643
  * Input Bounds:
648
644
  * arg1: [[0x0 ~> 0x4666666], [0x0 ~> 0x2333333], [0x0 ~> 0x4666666], [0x0 ~> 0x2333333], [0x0 ~> 0x4666666], [0x0 ~> 0x2333333], [0x0 ~> 0x4666666], [0x0 ~> 0x2333333], [0x0 ~> 0x4666666], [0x0 ~> 0x2333333]]
649
645
  * Output Bounds:
@@ -684,34 +680,34 @@ static void fiat_25519_to_bytes(uint8_t out1[32], const uint32_t arg1[10]) {
684
680
  fiat_25519_cmovznz_u32(&x21, x20, 0x0, UINT32_C(0xffffffff));
685
681
  uint32_t x22;
686
682
  fiat_25519_uint1 x23;
687
- fiat_25519_addcarryx_u26(&x22, &x23, 0x0, (x21 & UINT32_C(0x3ffffed)), x1);
683
+ fiat_25519_addcarryx_u26(&x22, &x23, 0x0, x1, (x21 & UINT32_C(0x3ffffed)));
688
684
  uint32_t x24;
689
685
  fiat_25519_uint1 x25;
690
- fiat_25519_addcarryx_u25(&x24, &x25, x23, (x21 & UINT32_C(0x1ffffff)), x3);
686
+ fiat_25519_addcarryx_u25(&x24, &x25, x23, x3, (x21 & UINT32_C(0x1ffffff)));
691
687
  uint32_t x26;
692
688
  fiat_25519_uint1 x27;
693
- fiat_25519_addcarryx_u26(&x26, &x27, x25, (x21 & UINT32_C(0x3ffffff)), x5);
689
+ fiat_25519_addcarryx_u26(&x26, &x27, x25, x5, (x21 & UINT32_C(0x3ffffff)));
694
690
  uint32_t x28;
695
691
  fiat_25519_uint1 x29;
696
- fiat_25519_addcarryx_u25(&x28, &x29, x27, (x21 & UINT32_C(0x1ffffff)), x7);
692
+ fiat_25519_addcarryx_u25(&x28, &x29, x27, x7, (x21 & UINT32_C(0x1ffffff)));
697
693
  uint32_t x30;
698
694
  fiat_25519_uint1 x31;
699
- fiat_25519_addcarryx_u26(&x30, &x31, x29, (x21 & UINT32_C(0x3ffffff)), x9);
695
+ fiat_25519_addcarryx_u26(&x30, &x31, x29, x9, (x21 & UINT32_C(0x3ffffff)));
700
696
  uint32_t x32;
701
697
  fiat_25519_uint1 x33;
702
- fiat_25519_addcarryx_u25(&x32, &x33, x31, (x21 & UINT32_C(0x1ffffff)), x11);
698
+ fiat_25519_addcarryx_u25(&x32, &x33, x31, x11, (x21 & UINT32_C(0x1ffffff)));
703
699
  uint32_t x34;
704
700
  fiat_25519_uint1 x35;
705
- fiat_25519_addcarryx_u26(&x34, &x35, x33, (x21 & UINT32_C(0x3ffffff)), x13);
701
+ fiat_25519_addcarryx_u26(&x34, &x35, x33, x13, (x21 & UINT32_C(0x3ffffff)));
706
702
  uint32_t x36;
707
703
  fiat_25519_uint1 x37;
708
- fiat_25519_addcarryx_u25(&x36, &x37, x35, (x21 & UINT32_C(0x1ffffff)), x15);
704
+ fiat_25519_addcarryx_u25(&x36, &x37, x35, x15, (x21 & UINT32_C(0x1ffffff)));
709
705
  uint32_t x38;
710
706
  fiat_25519_uint1 x39;
711
- fiat_25519_addcarryx_u26(&x38, &x39, x37, (x21 & UINT32_C(0x3ffffff)), x17);
707
+ fiat_25519_addcarryx_u26(&x38, &x39, x37, x17, (x21 & UINT32_C(0x3ffffff)));
712
708
  uint32_t x40;
713
709
  fiat_25519_uint1 x41;
714
- fiat_25519_addcarryx_u25(&x40, &x41, x39, (x21 & UINT32_C(0x1ffffff)), x19);
710
+ fiat_25519_addcarryx_u25(&x40, &x41, x39, x19, (x21 & UINT32_C(0x1ffffff)));
715
711
  uint32_t x42 = (x40 << 6);
716
712
  uint32_t x43 = (x38 << 4);
717
713
  uint32_t x44 = (x36 << 3);
@@ -824,6 +820,10 @@ static void fiat_25519_to_bytes(uint8_t out1[32], const uint32_t arg1[10]) {
824
820
  }
825
821
 
826
822
  /*
823
+ * The function fiat_25519_from_bytes deserializes a field element from bytes in little-endian order.
824
+ * Postconditions:
825
+ * eval out1 mod m = bytes_eval arg1 mod m
826
+ *
827
827
  * Input Bounds:
828
828
  * arg1: [[0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0x7f]]
829
829
  * Output Bounds:
@@ -909,3 +909,73 @@ static void fiat_25519_from_bytes(uint32_t out1[10], const uint8_t arg1[32]) {
909
909
  out1[9] = x67;
910
910
  }
911
911
 
912
+ /*
913
+ * The function fiat_25519_carry_scmul_121666 multiplies a field element by 121666 and reduces the result.
914
+ * Postconditions:
915
+ * eval out1 mod m = (121666 * eval arg1) mod m
916
+ *
917
+ * Input Bounds:
918
+ * arg1: [[0x0 ~> 0xd333332], [0x0 ~> 0x6999999], [0x0 ~> 0xd333332], [0x0 ~> 0x6999999], [0x0 ~> 0xd333332], [0x0 ~> 0x6999999], [0x0 ~> 0xd333332], [0x0 ~> 0x6999999], [0x0 ~> 0xd333332], [0x0 ~> 0x6999999]]
919
+ * Output Bounds:
920
+ * out1: [[0x0 ~> 0x4666666], [0x0 ~> 0x2333333], [0x0 ~> 0x4666666], [0x0 ~> 0x2333333], [0x0 ~> 0x4666666], [0x0 ~> 0x2333333], [0x0 ~> 0x4666666], [0x0 ~> 0x2333333], [0x0 ~> 0x4666666], [0x0 ~> 0x2333333]]
921
+ */
922
+ static void fiat_25519_carry_scmul_121666(uint32_t out1[10], const uint32_t arg1[10]) {
923
+ uint64_t x1 = ((uint64_t)UINT32_C(0x1db42) * (arg1[9]));
924
+ uint64_t x2 = ((uint64_t)UINT32_C(0x1db42) * (arg1[8]));
925
+ uint64_t x3 = ((uint64_t)UINT32_C(0x1db42) * (arg1[7]));
926
+ uint64_t x4 = ((uint64_t)UINT32_C(0x1db42) * (arg1[6]));
927
+ uint64_t x5 = ((uint64_t)UINT32_C(0x1db42) * (arg1[5]));
928
+ uint64_t x6 = ((uint64_t)UINT32_C(0x1db42) * (arg1[4]));
929
+ uint64_t x7 = ((uint64_t)UINT32_C(0x1db42) * (arg1[3]));
930
+ uint64_t x8 = ((uint64_t)UINT32_C(0x1db42) * (arg1[2]));
931
+ uint64_t x9 = ((uint64_t)UINT32_C(0x1db42) * (arg1[1]));
932
+ uint64_t x10 = ((uint64_t)UINT32_C(0x1db42) * (arg1[0]));
933
+ uint32_t x11 = (uint32_t)(x10 >> 26);
934
+ uint32_t x12 = (uint32_t)(x10 & UINT32_C(0x3ffffff));
935
+ uint64_t x13 = (x11 + x9);
936
+ uint32_t x14 = (uint32_t)(x13 >> 25);
937
+ uint32_t x15 = (uint32_t)(x13 & UINT32_C(0x1ffffff));
938
+ uint64_t x16 = (x14 + x8);
939
+ uint32_t x17 = (uint32_t)(x16 >> 26);
940
+ uint32_t x18 = (uint32_t)(x16 & UINT32_C(0x3ffffff));
941
+ uint64_t x19 = (x17 + x7);
942
+ uint32_t x20 = (uint32_t)(x19 >> 25);
943
+ uint32_t x21 = (uint32_t)(x19 & UINT32_C(0x1ffffff));
944
+ uint64_t x22 = (x20 + x6);
945
+ uint32_t x23 = (uint32_t)(x22 >> 26);
946
+ uint32_t x24 = (uint32_t)(x22 & UINT32_C(0x3ffffff));
947
+ uint64_t x25 = (x23 + x5);
948
+ uint32_t x26 = (uint32_t)(x25 >> 25);
949
+ uint32_t x27 = (uint32_t)(x25 & UINT32_C(0x1ffffff));
950
+ uint64_t x28 = (x26 + x4);
951
+ uint32_t x29 = (uint32_t)(x28 >> 26);
952
+ uint32_t x30 = (uint32_t)(x28 & UINT32_C(0x3ffffff));
953
+ uint64_t x31 = (x29 + x3);
954
+ uint32_t x32 = (uint32_t)(x31 >> 25);
955
+ uint32_t x33 = (uint32_t)(x31 & UINT32_C(0x1ffffff));
956
+ uint64_t x34 = (x32 + x2);
957
+ uint32_t x35 = (uint32_t)(x34 >> 26);
958
+ uint32_t x36 = (uint32_t)(x34 & UINT32_C(0x3ffffff));
959
+ uint64_t x37 = (x35 + x1);
960
+ uint32_t x38 = (uint32_t)(x37 >> 25);
961
+ uint32_t x39 = (uint32_t)(x37 & UINT32_C(0x1ffffff));
962
+ uint32_t x40 = (x38 * UINT8_C(0x13));
963
+ uint32_t x41 = (x12 + x40);
964
+ fiat_25519_uint1 x42 = (fiat_25519_uint1)(x41 >> 26);
965
+ uint32_t x43 = (x41 & UINT32_C(0x3ffffff));
966
+ uint32_t x44 = (x42 + x15);
967
+ fiat_25519_uint1 x45 = (fiat_25519_uint1)(x44 >> 25);
968
+ uint32_t x46 = (x44 & UINT32_C(0x1ffffff));
969
+ uint32_t x47 = (x45 + x18);
970
+ out1[0] = x43;
971
+ out1[1] = x46;
972
+ out1[2] = x47;
973
+ out1[3] = x21;
974
+ out1[4] = x24;
975
+ out1[5] = x27;
976
+ out1[6] = x30;
977
+ out1[7] = x33;
978
+ out1[8] = x36;
979
+ out1[9] = x39;
980
+ }
981
+