grpc 1.9.1 → 1.10.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 (637) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +2654 -953
  3. data/etc/roots.pem +282 -683
  4. data/include/grpc/compression.h +9 -26
  5. data/include/grpc/grpc.h +10 -24
  6. data/include/grpc/grpc_security.h +7 -1
  7. data/include/grpc/impl/codegen/compression_types.h +5 -62
  8. data/include/grpc/impl/codegen/grpc_types.h +10 -6
  9. data/include/grpc/module.modulemap +1 -10
  10. data/include/grpc/support/alloc.h +3 -2
  11. data/include/grpc/support/log.h +1 -2
  12. data/{src/core/lib/gpr/thd_internal.h → include/grpc/support/thd_id.h} +23 -9
  13. data/src/boringssl/err_data.c +550 -496
  14. data/src/core/ext/census/grpc_context.cc +2 -1
  15. data/src/core/ext/filters/client_channel/backup_poller.cc +5 -4
  16. data/src/core/ext/filters/client_channel/channel_connectivity.cc +7 -7
  17. data/src/core/ext/filters/client_channel/client_channel.cc +162 -172
  18. data/src/core/ext/filters/client_channel/client_channel_factory.cc +4 -2
  19. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +10 -10
  20. data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +18 -14
  21. data/src/core/ext/filters/client_channel/http_proxy.cc +3 -1
  22. data/src/core/ext/filters/client_channel/lb_policy.cc +21 -105
  23. data/src/core/ext/filters/client_channel/lb_policy.h +166 -170
  24. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +41 -36
  25. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +1452 -1459
  26. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.h +1 -1
  27. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +3 -2
  28. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc +7 -8
  29. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +27 -27
  30. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +279 -304
  31. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +358 -330
  32. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.cc +30 -41
  33. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +7 -14
  34. data/src/core/ext/filters/client_channel/lb_policy_factory.cc +8 -21
  35. data/src/core/ext/filters/client_channel/lb_policy_factory.h +23 -27
  36. data/src/core/ext/filters/client_channel/lb_policy_registry.cc +58 -33
  37. data/src/core/ext/filters/client_channel/lb_policy_registry.h +25 -12
  38. data/src/core/ext/filters/client_channel/parse_address.cc +10 -8
  39. data/src/core/ext/filters/client_channel/proxy_mapper_registry.cc +2 -2
  40. data/src/core/ext/filters/client_channel/resolver.cc +6 -52
  41. data/src/core/ext/filters/client_channel/resolver.h +98 -55
  42. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +266 -237
  43. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +5 -5
  44. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +31 -27
  45. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +244 -207
  46. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +161 -148
  47. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +47 -31
  48. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +126 -126
  49. data/src/core/ext/filters/client_channel/resolver_factory.h +33 -32
  50. data/src/core/ext/filters/client_channel/resolver_registry.cc +110 -90
  51. data/src/core/ext/filters/client_channel/resolver_registry.h +49 -36
  52. data/src/core/ext/filters/client_channel/retry_throttle.cc +29 -22
  53. data/src/core/ext/filters/client_channel/subchannel.cc +173 -173
  54. data/src/core/ext/filters/client_channel/subchannel.h +38 -45
  55. data/src/core/ext/filters/client_channel/subchannel_index.cc +44 -40
  56. data/src/core/ext/filters/client_channel/uri_parser.cc +3 -3
  57. data/src/core/ext/filters/deadline/deadline_filter.cc +27 -18
  58. data/src/core/ext/filters/http/client/http_client_filter.cc +26 -23
  59. data/src/core/ext/filters/http/http_filters_plugin.cc +3 -2
  60. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +78 -110
  61. data/src/core/ext/filters/http/server/http_server_filter.cc +29 -26
  62. data/src/core/ext/filters/load_reporting/server_load_reporting_filter.cc +9 -11
  63. data/src/core/ext/filters/load_reporting/server_load_reporting_plugin.cc +2 -1
  64. data/src/core/ext/filters/max_age/max_age_filter.cc +14 -14
  65. data/src/core/ext/filters/message_size/message_size_filter.cc +20 -18
  66. data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc +4 -4
  67. data/src/core/ext/filters/workarounds/workaround_utils.cc +4 -4
  68. data/src/core/ext/transport/chttp2/alpn/alpn.cc +2 -1
  69. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +10 -10
  70. data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +4 -4
  71. data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +11 -12
  72. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +16 -13
  73. data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +36 -9
  74. data/src/core/ext/transport/chttp2/transport/bin_decoder.h +3 -0
  75. data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +17 -14
  76. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +139 -145
  77. data/src/core/ext/transport/chttp2/transport/flow_control.cc +16 -14
  78. data/src/core/ext/transport/chttp2/transport/flow_control.h +8 -7
  79. data/src/core/ext/transport/chttp2/transport/frame_data.cc +35 -33
  80. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +27 -25
  81. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +12 -12
  82. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +16 -15
  83. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +19 -19
  84. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +11 -11
  85. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +23 -22
  86. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +35 -35
  87. data/src/core/ext/transport/chttp2/transport/hpack_table.cc +10 -7
  88. data/src/core/ext/transport/chttp2/transport/http2_settings.cc +2 -2
  89. data/src/core/ext/transport/chttp2/transport/incoming_metadata.cc +2 -2
  90. data/src/core/ext/transport/chttp2/transport/internal.h +1 -1
  91. data/src/core/ext/transport/chttp2/transport/parsing.cc +35 -39
  92. data/src/core/ext/transport/chttp2/transport/stream_map.cc +8 -7
  93. data/src/core/ext/transport/chttp2/transport/varint.cc +5 -5
  94. data/src/core/ext/transport/chttp2/transport/writing.cc +18 -18
  95. data/src/core/ext/transport/inproc/inproc_transport.cc +43 -23
  96. data/src/core/lib/{gpr → avl}/avl.cc +61 -57
  97. data/{include/grpc/support → src/core/lib/avl}/avl.h +25 -35
  98. data/src/core/lib/backoff/backoff.cc +6 -5
  99. data/src/core/lib/channel/channel_args.cc +23 -109
  100. data/src/core/lib/channel/channel_args.h +5 -31
  101. data/src/core/lib/channel/channel_stack.cc +11 -8
  102. data/src/core/lib/channel/channel_stack_builder.cc +10 -7
  103. data/src/core/lib/channel/connected_channel.cc +18 -17
  104. data/src/core/lib/channel/handshaker.cc +8 -8
  105. data/src/core/lib/channel/handshaker_registry.cc +3 -2
  106. data/src/core/lib/compression/algorithm_metadata.h +13 -6
  107. data/src/core/lib/compression/compression.cc +72 -183
  108. data/src/core/lib/compression/compression_internal.cc +274 -0
  109. data/src/core/lib/compression/compression_internal.h +86 -0
  110. data/src/core/lib/compression/message_compress.cc +15 -15
  111. data/src/core/lib/compression/message_compress.h +4 -3
  112. data/src/core/lib/compression/stream_compression_gzip.cc +8 -8
  113. data/src/core/lib/compression/stream_compression_identity.cc +1 -1
  114. data/src/core/lib/debug/stats.cc +10 -8
  115. data/src/core/lib/debug/stats_data.cc +2 -1
  116. data/src/core/lib/debug/trace.cc +3 -3
  117. data/src/core/lib/gpr/alloc.cc +7 -11
  118. data/src/core/lib/gpr/arena.cc +34 -12
  119. data/src/core/lib/gpr/atm.cc +2 -1
  120. data/src/core/lib/gpr/cpu_linux.cc +3 -3
  121. data/src/core/lib/gpr/cpu_posix.cc +2 -1
  122. data/src/core/lib/gpr/env.h +1 -1
  123. data/src/core/lib/gpr/env_linux.cc +1 -1
  124. data/src/core/lib/gpr/env_windows.cc +4 -4
  125. data/src/core/lib/gpr/fork.cc +16 -2
  126. data/src/core/lib/gpr/host_port.cc +5 -4
  127. data/{include/grpc/support → src/core/lib/gpr}/host_port.h +5 -13
  128. data/src/core/lib/gpr/log.cc +5 -4
  129. data/src/core/lib/gpr/log_linux.cc +1 -1
  130. data/src/core/lib/gpr/mpscq.cc +1 -0
  131. data/src/core/lib/gpr/murmur_hash.cc +4 -4
  132. data/src/core/lib/gpr/string.cc +19 -16
  133. data/src/core/lib/gpr/string_posix.cc +3 -3
  134. data/src/core/lib/gpr/sync_posix.cc +5 -9
  135. data/src/core/lib/gpr/thd.cc +3 -3
  136. data/{include/grpc/support → src/core/lib/gpr}/thd.h +20 -28
  137. data/src/core/lib/gpr/thd_posix.cc +6 -4
  138. data/src/core/lib/gpr/thd_windows.cc +3 -1
  139. data/src/core/lib/gpr/time.cc +6 -4
  140. data/src/core/lib/gpr/time_posix.cc +2 -2
  141. data/{include/grpc/support → src/core/lib/gpr}/tls.h +6 -6
  142. data/{include/grpc/support → src/core/lib/gpr}/tls_gcc.h +3 -3
  143. data/{include/grpc/support → src/core/lib/gpr}/tls_msvc.h +3 -3
  144. data/src/core/lib/gpr/tls_pthread.cc +1 -1
  145. data/{include/grpc/support → src/core/lib/gpr}/tls_pthread.h +3 -3
  146. data/{include/grpc/support → src/core/lib/gpr}/useful.h +3 -3
  147. data/src/core/lib/{gpr++ → gprpp}/abstract.h +3 -3
  148. data/src/core/lib/{gpr++ → gprpp}/atomic.h +5 -5
  149. data/src/core/lib/{gpr++ → gprpp}/atomic_with_atm.h +3 -3
  150. data/src/core/lib/{gpr++ → gprpp}/atomic_with_std.h +3 -3
  151. data/src/core/lib/{gpr++ → gprpp}/debug_location.h +3 -3
  152. data/src/core/lib/{gpr++ → gprpp}/inlined_vector.h +44 -22
  153. data/src/core/lib/{gpr++ → gprpp}/manual_constructor.h +2 -2
  154. data/src/core/lib/{gpr++ → gprpp}/memory.h +14 -5
  155. data/src/core/lib/{gpr++ → gprpp}/orphanable.h +39 -14
  156. data/src/core/lib/{gpr++ → gprpp}/ref_counted.h +42 -10
  157. data/src/core/lib/{gpr++ → gprpp}/ref_counted_ptr.h +18 -8
  158. data/src/core/lib/http/format_request.cc +3 -3
  159. data/src/core/lib/http/httpcli.cc +6 -7
  160. data/src/core/lib/http/httpcli_security_connector.cc +10 -10
  161. data/src/core/lib/http/parser.cc +16 -12
  162. data/src/core/lib/iomgr/call_combiner.cc +12 -13
  163. data/src/core/lib/iomgr/closure.h +4 -6
  164. data/src/core/lib/iomgr/combiner.cc +10 -21
  165. data/src/core/lib/iomgr/error.cc +50 -55
  166. data/src/core/lib/iomgr/ev_epoll1_linux.cc +41 -52
  167. data/src/core/lib/iomgr/ev_epollex_linux.cc +80 -28
  168. data/src/core/lib/iomgr/ev_epollsig_linux.cc +23 -30
  169. data/src/core/lib/iomgr/ev_poll_posix.cc +52 -46
  170. data/src/core/lib/iomgr/ev_posix.cc +47 -6
  171. data/src/core/lib/iomgr/exec_ctx.cc +10 -10
  172. data/src/core/lib/iomgr/exec_ctx.h +1 -1
  173. data/src/core/lib/iomgr/executor.cc +16 -13
  174. data/src/core/lib/iomgr/fork_posix.cc +1 -3
  175. data/src/core/lib/iomgr/gethostname_host_name_max.cc +1 -1
  176. data/src/core/lib/iomgr/iocp_windows.cc +1 -2
  177. data/src/core/lib/iomgr/iomgr.cc +2 -2
  178. data/src/core/lib/iomgr/iomgr_uv.cc +2 -0
  179. data/src/core/lib/iomgr/iomgr_uv.h +1 -1
  180. data/src/core/lib/iomgr/is_epollexclusive_available.cc +5 -4
  181. data/src/core/lib/iomgr/load_file.cc +3 -3
  182. data/src/core/lib/iomgr/pollset_windows.cc +1 -1
  183. data/src/core/lib/iomgr/resolve_address_posix.cc +10 -9
  184. data/src/core/lib/iomgr/resolve_address_uv.cc +2 -2
  185. data/src/core/lib/iomgr/resolve_address_windows.cc +3 -2
  186. data/src/core/lib/iomgr/resource_quota.cc +36 -34
  187. data/src/core/lib/iomgr/sockaddr_utils.cc +39 -23
  188. data/src/core/lib/iomgr/socket_factory_posix.cc +5 -5
  189. data/src/core/lib/iomgr/socket_mutator.cc +7 -7
  190. data/src/core/lib/iomgr/socket_utils_common_posix.cc +7 -4
  191. data/src/core/lib/iomgr/socket_utils_linux.cc +3 -2
  192. data/src/core/lib/iomgr/tcp_client_posix.cc +7 -6
  193. data/src/core/lib/iomgr/tcp_client_windows.cc +0 -1
  194. data/src/core/lib/iomgr/tcp_posix.cc +47 -55
  195. data/src/core/lib/iomgr/tcp_server_posix.cc +12 -10
  196. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +7 -5
  197. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +4 -3
  198. data/src/core/lib/iomgr/tcp_windows.cc +1 -1
  199. data/src/core/lib/iomgr/timer_generic.cc +16 -14
  200. data/src/core/lib/iomgr/timer_heap.cc +8 -7
  201. data/src/core/lib/iomgr/timer_manager.cc +4 -3
  202. data/src/core/lib/iomgr/udp_server.cc +24 -16
  203. data/src/core/lib/iomgr/unix_sockets_posix.cc +15 -10
  204. data/src/core/lib/iomgr/wakeup_fd_cv.cc +6 -5
  205. data/src/core/lib/iomgr/wakeup_fd_eventfd.cc +1 -2
  206. data/src/core/lib/json/json.cc +1 -1
  207. data/src/core/lib/json/json_reader.cc +8 -6
  208. data/src/core/lib/json/json_string.cc +19 -18
  209. data/src/core/lib/json/json_writer.cc +10 -8
  210. data/src/core/lib/profiling/basic_timers.cc +1 -1
  211. data/src/core/lib/profiling/timers.h +3 -20
  212. data/src/core/lib/security/context/security_context.cc +16 -14
  213. data/src/core/lib/security/credentials/composite/composite_credentials.cc +17 -14
  214. data/src/core/lib/security/credentials/credentials.cc +9 -8
  215. data/src/core/lib/security/credentials/credentials.h +1 -1
  216. data/src/core/lib/security/credentials/credentials_metadata.cc +2 -2
  217. data/src/core/lib/security/credentials/fake/fake_credentials.cc +12 -13
  218. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +7 -4
  219. data/src/core/lib/security/credentials/iam/iam_credentials.cc +5 -3
  220. data/src/core/lib/security/credentials/jwt/json_token.cc +4 -3
  221. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +7 -7
  222. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +21 -18
  223. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +23 -18
  224. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +11 -7
  225. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +22 -21
  226. data/src/core/lib/security/{transport → security_connector}/security_connector.cc +46 -43
  227. data/src/core/lib/security/{transport → security_connector}/security_connector.h +3 -3
  228. data/src/core/lib/security/transport/client_auth_filter.cc +32 -34
  229. data/src/core/lib/security/transport/lb_targets_info.cc +7 -5
  230. data/src/core/lib/security/transport/secure_endpoint.cc +21 -21
  231. data/src/core/lib/security/transport/security_handshaker.cc +19 -18
  232. data/src/core/lib/security/transport/security_handshaker.h +1 -1
  233. data/src/core/lib/security/transport/server_auth_filter.cc +21 -21
  234. data/src/core/lib/slice/b64.cc +19 -16
  235. data/src/core/lib/slice/percent_encoding.cc +5 -5
  236. data/src/core/lib/slice/slice.cc +35 -33
  237. data/src/core/lib/slice/slice_buffer.cc +16 -14
  238. data/src/core/lib/slice/slice_hash_table.cc +3 -2
  239. data/src/core/lib/slice/slice_intern.cc +21 -25
  240. data/src/core/lib/slice/slice_string_helpers.cc +45 -9
  241. data/src/core/lib/slice/slice_string_helpers.h +6 -0
  242. data/src/core/lib/surface/byte_buffer.cc +2 -2
  243. data/src/core/lib/surface/byte_buffer_reader.cc +6 -3
  244. data/src/core/lib/surface/call.cc +171 -260
  245. data/src/core/lib/surface/call_test_only.h +1 -13
  246. data/src/core/lib/surface/channel.cc +20 -43
  247. data/src/core/lib/surface/channel_init.cc +7 -7
  248. data/src/core/lib/surface/channel_ping.cc +2 -2
  249. data/src/core/lib/surface/completion_queue.cc +69 -75
  250. data/src/core/lib/surface/init.cc +4 -5
  251. data/src/core/lib/surface/init_secure.cc +1 -1
  252. data/src/core/lib/surface/lame_client.cc +1 -1
  253. data/src/core/lib/surface/server.cc +64 -59
  254. data/src/core/lib/surface/version.cc +2 -2
  255. data/src/core/lib/transport/bdp_estimator.cc +6 -5
  256. data/src/core/lib/transport/byte_stream.cc +23 -14
  257. data/src/core/lib/transport/byte_stream.h +1 -1
  258. data/src/core/lib/transport/connectivity_state.cc +9 -13
  259. data/src/core/lib/transport/error_utils.cc +10 -7
  260. data/src/core/lib/transport/metadata.cc +27 -26
  261. data/src/core/lib/transport/metadata.h +1 -1
  262. data/src/core/lib/transport/pid_controller.cc +2 -1
  263. data/src/core/lib/transport/service_config.cc +5 -5
  264. data/src/core/lib/transport/static_metadata.cc +225 -222
  265. data/src/core/lib/transport/static_metadata.h +77 -76
  266. data/src/core/lib/transport/timeout_encoding.cc +3 -2
  267. data/src/core/lib/transport/transport.cc +6 -5
  268. data/src/core/lib/transport/transport_op_string.cc +0 -1
  269. data/src/core/plugin_registry/grpc_plugin_registry.cc +4 -4
  270. data/src/core/tsi/alts_transport_security.cc +61 -0
  271. data/src/core/tsi/{gts_transport_security.h → alts_transport_security.h} +16 -8
  272. data/src/core/tsi/fake_transport_security.cc +59 -43
  273. data/src/core/tsi/ssl_transport_security.cc +122 -107
  274. data/src/core/tsi/transport_security.cc +3 -3
  275. data/src/core/tsi/transport_security_adapter.cc +16 -10
  276. data/src/ruby/bin/apis/pubsub_demo.rb +1 -1
  277. data/src/ruby/ext/grpc/rb_channel.c +3 -4
  278. data/src/ruby/ext/grpc/rb_compression_options.c +13 -3
  279. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +4 -76
  280. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +8 -120
  281. data/src/ruby/ext/grpc/rb_server.c +52 -28
  282. data/src/ruby/lib/grpc/generic/rpc_server.rb +7 -4
  283. data/src/ruby/lib/grpc/version.rb +1 -1
  284. data/src/ruby/pb/test/client.rb +1 -1
  285. data/src/ruby/pb/test/server.rb +1 -1
  286. data/src/ruby/spec/client_server_spec.rb +4 -2
  287. data/src/ruby/spec/generic/active_call_spec.rb +2 -1
  288. data/src/ruby/spec/generic/client_stub_spec.rb +32 -8
  289. data/src/ruby/spec/server_spec.rb +26 -7
  290. data/third_party/boringssl/crypto/asn1/a_bitstr.c +7 -2
  291. data/third_party/boringssl/crypto/asn1/a_d2i_fp.c +15 -0
  292. data/third_party/boringssl/crypto/asn1/a_gentm.c +1 -1
  293. data/third_party/boringssl/crypto/asn1/a_print.c +0 -28
  294. data/third_party/boringssl/crypto/asn1/a_strnid.c +3 -0
  295. data/third_party/boringssl/crypto/asn1/a_time.c +17 -9
  296. data/third_party/boringssl/crypto/asn1/a_utctm.c +1 -1
  297. data/third_party/boringssl/crypto/asn1/asn1_lib.c +5 -49
  298. data/third_party/boringssl/crypto/asn1/asn1_locl.h +1 -1
  299. data/third_party/boringssl/crypto/asn1/tasn_dec.c +9 -9
  300. data/third_party/boringssl/crypto/asn1/tasn_enc.c +0 -6
  301. data/third_party/boringssl/crypto/asn1/time_support.c +5 -5
  302. data/third_party/boringssl/crypto/base64/base64.c +65 -43
  303. data/third_party/boringssl/crypto/bio/bio.c +134 -110
  304. data/third_party/boringssl/crypto/bio/bio_mem.c +9 -9
  305. data/third_party/boringssl/crypto/bio/connect.c +17 -17
  306. data/third_party/boringssl/crypto/bio/fd.c +2 -1
  307. data/third_party/boringssl/crypto/bio/file.c +14 -14
  308. data/third_party/boringssl/crypto/bio/hexdump.c +15 -16
  309. data/third_party/boringssl/crypto/bio/internal.h +14 -14
  310. data/third_party/boringssl/crypto/bio/pair.c +45 -45
  311. data/third_party/boringssl/crypto/bio/printf.c +6 -10
  312. data/third_party/boringssl/crypto/{bn → bn_extra}/bn_asn1.c +9 -9
  313. data/third_party/boringssl/crypto/{bn → bn_extra}/convert.c +18 -223
  314. data/third_party/boringssl/crypto/buf/buf.c +20 -44
  315. data/third_party/boringssl/crypto/bytestring/ber.c +35 -35
  316. data/third_party/boringssl/crypto/bytestring/cbb.c +24 -24
  317. data/third_party/boringssl/crypto/bytestring/cbs.c +33 -37
  318. data/third_party/boringssl/crypto/bytestring/internal.h +38 -38
  319. data/third_party/boringssl/crypto/chacha/chacha.c +7 -7
  320. data/third_party/boringssl/crypto/{asn1/t_bitst.c → cipher_extra/cipher_extra.c} +49 -38
  321. data/third_party/boringssl/crypto/{cipher → cipher_extra}/derive_key.c +0 -2
  322. data/third_party/boringssl/crypto/cipher_extra/e_aesctrhmac.c +281 -0
  323. data/third_party/boringssl/crypto/cipher_extra/e_aesgcmsiv.c +867 -0
  324. data/third_party/boringssl/crypto/cipher_extra/e_chacha20poly1305.c +326 -0
  325. data/third_party/boringssl/crypto/{cipher → cipher_extra}/e_null.c +0 -1
  326. data/third_party/boringssl/crypto/{cipher → cipher_extra}/e_rc2.c +22 -10
  327. data/third_party/boringssl/crypto/{cipher → cipher_extra}/e_rc4.c +0 -0
  328. data/third_party/boringssl/crypto/{cipher → cipher_extra}/e_ssl3.c +120 -64
  329. data/third_party/boringssl/crypto/{cipher → cipher_extra}/e_tls.c +220 -141
  330. data/third_party/boringssl/crypto/{asn1/x_bignum.c → cipher_extra/internal.h} +61 -86
  331. data/third_party/boringssl/crypto/cipher_extra/tls_cbc.c +482 -0
  332. data/third_party/boringssl/crypto/cmac/cmac.c +20 -20
  333. data/third_party/boringssl/crypto/conf/conf.c +32 -20
  334. data/third_party/boringssl/crypto/conf/internal.h +3 -3
  335. data/third_party/boringssl/crypto/cpu-aarch64-linux.c +5 -5
  336. data/third_party/boringssl/crypto/cpu-arm-linux.c +44 -41
  337. data/third_party/boringssl/crypto/cpu-intel.c +68 -43
  338. data/third_party/boringssl/crypto/cpu-ppc64le.c +5 -7
  339. data/third_party/boringssl/crypto/crypto.c +54 -32
  340. data/third_party/boringssl/crypto/curve25519/curve25519.c +269 -269
  341. data/third_party/boringssl/crypto/curve25519/internal.h +28 -8
  342. data/third_party/boringssl/crypto/curve25519/spake25519.c +180 -106
  343. data/third_party/boringssl/crypto/curve25519/x25519-x86_64.c +9 -9
  344. data/third_party/boringssl/crypto/dh/check.c +33 -34
  345. data/third_party/boringssl/crypto/dh/dh.c +72 -36
  346. data/third_party/boringssl/crypto/dh/dh_asn1.c +1 -1
  347. data/third_party/boringssl/crypto/dh/params.c +1 -161
  348. data/third_party/boringssl/crypto/digest_extra/digest_extra.c +240 -0
  349. data/third_party/boringssl/crypto/dsa/dsa.c +127 -87
  350. data/third_party/boringssl/crypto/dsa/dsa_asn1.c +1 -1
  351. data/third_party/boringssl/crypto/{ec → ec_extra}/ec_asn1.c +83 -70
  352. data/third_party/boringssl/crypto/ecdh/ecdh.c +1 -1
  353. data/third_party/boringssl/crypto/{ecdsa → ecdsa_extra}/ecdsa_asn1.c +86 -31
  354. data/third_party/boringssl/crypto/engine/engine.c +6 -6
  355. data/third_party/boringssl/crypto/err/err.c +197 -106
  356. data/third_party/boringssl/crypto/err/internal.h +58 -0
  357. data/third_party/boringssl/crypto/evp/digestsign.c +86 -14
  358. data/third_party/boringssl/crypto/evp/evp.c +6 -11
  359. data/third_party/boringssl/crypto/evp/evp_asn1.c +17 -17
  360. data/third_party/boringssl/crypto/evp/evp_ctx.c +15 -11
  361. data/third_party/boringssl/crypto/evp/internal.h +66 -51
  362. data/third_party/boringssl/crypto/evp/p_dsa_asn1.c +11 -11
  363. data/third_party/boringssl/crypto/evp/p_ec.c +10 -8
  364. data/third_party/boringssl/crypto/evp/p_ec_asn1.c +11 -12
  365. data/third_party/boringssl/crypto/evp/p_ed25519.c +71 -0
  366. data/third_party/boringssl/crypto/evp/p_ed25519_asn1.c +190 -0
  367. data/third_party/boringssl/crypto/evp/p_rsa.c +50 -95
  368. data/third_party/boringssl/crypto/evp/p_rsa_asn1.c +28 -18
  369. data/third_party/boringssl/crypto/evp/pbkdf.c +49 -56
  370. data/third_party/boringssl/crypto/evp/print.c +5 -36
  371. data/third_party/boringssl/crypto/evp/scrypt.c +209 -0
  372. data/third_party/boringssl/crypto/ex_data.c +15 -45
  373. data/third_party/boringssl/crypto/fipsmodule/aes/internal.h +100 -0
  374. data/third_party/boringssl/crypto/fipsmodule/bcm.c +679 -0
  375. data/third_party/boringssl/crypto/{bn → fipsmodule/bn}/internal.h +40 -27
  376. data/third_party/boringssl/crypto/{bn → fipsmodule/bn}/rsaz_exp.h +0 -0
  377. data/third_party/boringssl/crypto/{cipher → fipsmodule/cipher}/internal.h +34 -67
  378. data/third_party/boringssl/crypto/fipsmodule/delocate.h +88 -0
  379. data/third_party/boringssl/crypto/{des → fipsmodule/des}/internal.h +18 -4
  380. data/third_party/boringssl/crypto/{digest → fipsmodule/digest}/internal.h +18 -18
  381. data/third_party/boringssl/crypto/{digest → fipsmodule/digest}/md32_common.h +58 -64
  382. data/third_party/boringssl/crypto/{ec → fipsmodule/ec}/internal.h +58 -52
  383. data/third_party/boringssl/crypto/{ec → fipsmodule/ec}/p256-x86_64-table.h +11 -11
  384. data/third_party/boringssl/crypto/{ec → fipsmodule/ec}/p256-x86_64.h +32 -32
  385. data/third_party/boringssl/crypto/{rand/internal.h → fipsmodule/is_fips.c} +10 -15
  386. data/third_party/boringssl/crypto/{modes → fipsmodule/modes}/internal.h +112 -119
  387. data/third_party/boringssl/crypto/fipsmodule/rand/internal.h +92 -0
  388. data/third_party/boringssl/crypto/{rsa → fipsmodule/rsa}/internal.h +36 -49
  389. data/third_party/boringssl/crypto/hkdf/hkdf.c +6 -6
  390. data/third_party/boringssl/crypto/internal.h +301 -233
  391. data/third_party/boringssl/crypto/lhash/lhash.c +26 -45
  392. data/third_party/boringssl/crypto/mem.c +76 -33
  393. data/third_party/boringssl/crypto/obj/obj.c +44 -28
  394. data/third_party/boringssl/crypto/obj/obj_dat.h +102 -34
  395. data/third_party/boringssl/crypto/obj/obj_xref.c +6 -6
  396. data/third_party/boringssl/crypto/pem/pem_info.c +3 -5
  397. data/third_party/boringssl/crypto/pem/pem_lib.c +1 -6
  398. data/third_party/boringssl/crypto/pem/pem_pk8.c +1 -0
  399. data/third_party/boringssl/crypto/pem/pem_pkey.c +1 -1
  400. data/third_party/boringssl/crypto/pem/pem_xaux.c +0 -2
  401. data/third_party/boringssl/crypto/pkcs7/internal.h +49 -0
  402. data/third_party/boringssl/crypto/pkcs7/pkcs7.c +166 -0
  403. data/third_party/boringssl/crypto/{x509/pkcs7.c → pkcs7/pkcs7_x509.c} +27 -147
  404. data/third_party/boringssl/crypto/pkcs8/internal.h +34 -16
  405. data/third_party/boringssl/crypto/pkcs8/p5_pbev2.c +120 -39
  406. data/third_party/boringssl/crypto/pkcs8/pkcs8.c +144 -857
  407. data/third_party/boringssl/crypto/pkcs8/pkcs8_x509.c +789 -0
  408. data/third_party/boringssl/crypto/poly1305/internal.h +4 -3
  409. data/third_party/boringssl/crypto/poly1305/poly1305.c +14 -14
  410. data/third_party/boringssl/crypto/poly1305/poly1305_arm.c +11 -11
  411. data/third_party/boringssl/crypto/poly1305/poly1305_vec.c +41 -41
  412. data/third_party/boringssl/crypto/pool/internal.h +2 -2
  413. data/third_party/boringssl/crypto/pool/pool.c +15 -15
  414. data/third_party/boringssl/crypto/{rand → rand_extra}/deterministic.c +7 -7
  415. data/third_party/boringssl/crypto/rand_extra/forkunsafe.c +46 -0
  416. data/third_party/boringssl/crypto/{rand → rand_extra}/fuchsia.c +7 -7
  417. data/third_party/boringssl/crypto/rand_extra/rand_extra.c +70 -0
  418. data/third_party/boringssl/crypto/{rand → rand_extra}/windows.c +5 -5
  419. data/third_party/boringssl/crypto/refcount_c11.c +2 -2
  420. data/third_party/boringssl/crypto/refcount_lock.c +1 -1
  421. data/third_party/boringssl/crypto/{rsa → rsa_extra}/rsa_asn1.c +12 -120
  422. data/third_party/boringssl/crypto/stack/stack.c +13 -13
  423. data/third_party/boringssl/crypto/thread_none.c +1 -1
  424. data/third_party/boringssl/crypto/thread_pthread.c +1 -1
  425. data/third_party/boringssl/crypto/thread_win.c +40 -40
  426. data/third_party/boringssl/crypto/x509/a_sign.c +5 -12
  427. data/third_party/boringssl/crypto/x509/a_verify.c +6 -18
  428. data/third_party/boringssl/crypto/x509/algorithm.c +22 -6
  429. data/third_party/boringssl/crypto/x509/asn1_gen.c +30 -7
  430. data/third_party/boringssl/crypto/x509/by_dir.c +2 -2
  431. data/third_party/boringssl/crypto/x509/by_file.c +2 -2
  432. data/third_party/boringssl/crypto/x509/rsa_pss.c +5 -5
  433. data/third_party/boringssl/crypto/x509/t_x509.c +2 -1
  434. data/third_party/boringssl/crypto/x509/x509_def.c +5 -0
  435. data/third_party/boringssl/crypto/x509/x509_lu.c +35 -4
  436. data/third_party/boringssl/crypto/x509/x509_set.c +10 -0
  437. data/third_party/boringssl/crypto/x509/x509_vfy.c +20 -17
  438. data/third_party/boringssl/crypto/x509/x_name.c +13 -16
  439. data/third_party/boringssl/crypto/x509/x_x509.c +3 -3
  440. data/third_party/boringssl/crypto/x509/x_x509a.c +0 -7
  441. data/third_party/boringssl/crypto/x509v3/ext_dat.h +8 -0
  442. data/third_party/boringssl/crypto/x509v3/pcy_int.h +2 -2
  443. data/third_party/boringssl/crypto/x509v3/pcy_lib.c +0 -9
  444. data/third_party/boringssl/crypto/x509v3/pcy_node.c +1 -1
  445. data/third_party/boringssl/crypto/x509v3/pcy_tree.c +25 -15
  446. data/third_party/boringssl/crypto/x509v3/v3_alt.c +21 -11
  447. data/third_party/boringssl/crypto/x509v3/v3_cpols.c +9 -3
  448. data/third_party/boringssl/crypto/x509v3/v3_info.c +22 -14
  449. data/third_party/boringssl/crypto/x509v3/v3_ncons.c +27 -11
  450. data/third_party/boringssl/crypto/x509v3/v3_pci.c +0 -33
  451. data/third_party/boringssl/crypto/x509v3/v3_utl.c +4 -4
  452. data/third_party/boringssl/include/openssl/aead.h +280 -191
  453. data/third_party/boringssl/include/openssl/aes.h +50 -50
  454. data/third_party/boringssl/include/openssl/arm_arch.h +12 -12
  455. data/third_party/boringssl/include/openssl/asn1.h +14 -77
  456. data/third_party/boringssl/include/openssl/asn1t.h +11 -15
  457. data/third_party/boringssl/include/openssl/base.h +78 -51
  458. data/third_party/boringssl/include/openssl/base64.h +68 -68
  459. data/third_party/boringssl/include/openssl/bio.h +472 -406
  460. data/third_party/boringssl/include/openssl/blowfish.h +1 -1
  461. data/third_party/boringssl/include/openssl/bn.h +454 -435
  462. data/third_party/boringssl/include/openssl/buf.h +27 -27
  463. data/third_party/boringssl/include/openssl/bytestring.h +282 -267
  464. data/third_party/boringssl/include/openssl/cast.h +2 -2
  465. data/third_party/boringssl/include/openssl/chacha.h +5 -5
  466. data/third_party/boringssl/include/openssl/cipher.h +209 -200
  467. data/third_party/boringssl/include/openssl/cmac.h +27 -27
  468. data/third_party/boringssl/include/openssl/conf.h +49 -46
  469. data/third_party/boringssl/include/openssl/cpu.h +60 -45
  470. data/third_party/boringssl/include/openssl/crypto.h +59 -35
  471. data/third_party/boringssl/include/openssl/curve25519.h +97 -92
  472. data/third_party/boringssl/include/openssl/des.h +25 -25
  473. data/third_party/boringssl/include/openssl/dh.h +98 -97
  474. data/third_party/boringssl/include/openssl/digest.h +143 -114
  475. data/third_party/boringssl/include/openssl/dsa.h +217 -202
  476. data/third_party/boringssl/include/openssl/ec.h +132 -131
  477. data/third_party/boringssl/include/openssl/ec_key.h +132 -128
  478. data/third_party/boringssl/include/openssl/ecdh.h +9 -9
  479. data/third_party/boringssl/include/openssl/ecdsa.h +66 -66
  480. data/third_party/boringssl/include/openssl/engine.h +38 -38
  481. data/third_party/boringssl/include/openssl/err.h +189 -219
  482. data/third_party/boringssl/include/openssl/evp.h +473 -397
  483. data/third_party/boringssl/include/openssl/ex_data.h +46 -56
  484. data/third_party/boringssl/include/openssl/hkdf.h +17 -17
  485. data/third_party/boringssl/include/openssl/hmac.h +55 -43
  486. data/third_party/boringssl/include/openssl/is_boringssl.h +16 -0
  487. data/third_party/boringssl/include/openssl/lhash.h +67 -67
  488. data/third_party/boringssl/include/openssl/lhash_macros.h +4 -4
  489. data/third_party/boringssl/include/openssl/md4.h +14 -14
  490. data/third_party/boringssl/include/openssl/md5.h +14 -14
  491. data/third_party/boringssl/include/openssl/mem.h +39 -33
  492. data/third_party/boringssl/include/openssl/nid.h +43 -0
  493. data/third_party/boringssl/include/openssl/obj.h +93 -87
  494. data/third_party/boringssl/include/openssl/opensslconf.h +8 -1
  495. data/third_party/boringssl/include/openssl/pem.h +2 -122
  496. data/third_party/boringssl/include/openssl/pkcs7.h +68 -2
  497. data/third_party/boringssl/include/openssl/pkcs8.h +81 -66
  498. data/third_party/boringssl/include/openssl/poly1305.h +11 -11
  499. data/third_party/boringssl/include/openssl/pool.h +29 -25
  500. data/third_party/boringssl/include/openssl/rand.h +48 -45
  501. data/third_party/boringssl/include/openssl/rc4.h +9 -9
  502. data/third_party/boringssl/include/openssl/ripemd.h +13 -13
  503. data/third_party/boringssl/include/openssl/rsa.h +371 -340
  504. data/third_party/boringssl/include/openssl/sha.h +71 -71
  505. data/third_party/boringssl/include/openssl/span.h +191 -0
  506. data/third_party/boringssl/include/openssl/ssl.h +2639 -2519
  507. data/third_party/boringssl/include/openssl/ssl3.h +39 -122
  508. data/third_party/boringssl/include/openssl/stack.h +355 -164
  509. data/third_party/boringssl/include/openssl/thread.h +43 -43
  510. data/third_party/boringssl/include/openssl/tls1.h +60 -63
  511. data/third_party/boringssl/include/openssl/type_check.h +10 -14
  512. data/third_party/boringssl/include/openssl/x509.h +41 -116
  513. data/third_party/boringssl/include/openssl/x509_vfy.h +17 -25
  514. data/third_party/boringssl/include/openssl/x509v3.h +27 -21
  515. data/third_party/boringssl/ssl/{bio_ssl.c → bio_ssl.cc} +9 -5
  516. data/third_party/boringssl/ssl/{custom_extensions.c → custom_extensions.cc} +19 -12
  517. data/third_party/boringssl/ssl/{d1_both.c → d1_both.cc} +224 -193
  518. data/third_party/boringssl/ssl/{d1_lib.c → d1_lib.cc} +86 -79
  519. data/third_party/boringssl/ssl/{d1_pkt.c → d1_pkt.cc} +55 -87
  520. data/third_party/boringssl/ssl/{d1_srtp.c → d1_srtp.cc} +12 -16
  521. data/third_party/boringssl/ssl/{dtls_method.c → dtls_method.cc} +33 -50
  522. data/third_party/boringssl/ssl/{dtls_record.c → dtls_record.cc} +76 -64
  523. data/third_party/boringssl/ssl/handshake.cc +547 -0
  524. data/third_party/boringssl/ssl/handshake_client.cc +1828 -0
  525. data/third_party/boringssl/ssl/handshake_server.cc +1672 -0
  526. data/third_party/boringssl/ssl/internal.h +2027 -1280
  527. data/third_party/boringssl/ssl/s3_both.cc +603 -0
  528. data/third_party/boringssl/ssl/{s3_lib.c → s3_lib.cc} +22 -10
  529. data/third_party/boringssl/ssl/{s3_pkt.c → s3_pkt.cc} +171 -75
  530. data/third_party/boringssl/ssl/ssl_aead_ctx.cc +415 -0
  531. data/third_party/boringssl/ssl/{ssl_asn1.c → ssl_asn1.cc} +257 -261
  532. data/third_party/boringssl/ssl/{ssl_buffer.c → ssl_buffer.cc} +81 -97
  533. data/third_party/boringssl/ssl/{ssl_cert.c → ssl_cert.cc} +304 -414
  534. data/third_party/boringssl/ssl/{ssl_cipher.c → ssl_cipher.cc} +427 -505
  535. data/third_party/boringssl/ssl/{ssl_file.c → ssl_file.cc} +24 -16
  536. data/third_party/boringssl/ssl/ssl_key_share.cc +245 -0
  537. data/third_party/boringssl/ssl/{ssl_lib.c → ssl_lib.cc} +665 -828
  538. data/third_party/boringssl/ssl/ssl_privkey.cc +518 -0
  539. data/third_party/boringssl/ssl/{ssl_session.c → ssl_session.cc} +596 -471
  540. data/third_party/boringssl/ssl/{ssl_stat.c → ssl_stat.cc} +5 -224
  541. data/third_party/boringssl/ssl/{ssl_transcript.c → ssl_transcript.cc} +117 -140
  542. data/third_party/boringssl/ssl/ssl_versions.cc +439 -0
  543. data/third_party/boringssl/ssl/{ssl_x509.c → ssl_x509.cc} +751 -267
  544. data/third_party/boringssl/ssl/{t1_enc.c → t1_enc.cc} +120 -161
  545. data/third_party/boringssl/ssl/{t1_lib.c → t1_lib.cc} +859 -966
  546. data/third_party/boringssl/ssl/{tls13_both.c → tls13_both.cc} +202 -284
  547. data/third_party/boringssl/ssl/tls13_client.cc +842 -0
  548. data/third_party/boringssl/ssl/{tls13_enc.c → tls13_enc.cc} +108 -90
  549. data/third_party/boringssl/ssl/tls13_server.cc +967 -0
  550. data/third_party/boringssl/ssl/{tls_method.c → tls_method.cc} +94 -73
  551. data/third_party/boringssl/ssl/tls_record.cc +675 -0
  552. metadata +117 -168
  553. data/include/grpc/support/cmdline.h +0 -88
  554. data/include/grpc/support/subprocess.h +0 -44
  555. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h +0 -29
  556. data/src/core/ext/filters/client_channel/resolver_factory.cc +0 -40
  557. data/src/core/lib/gpr/cmdline.cc +0 -330
  558. data/src/core/lib/gpr/subprocess_posix.cc +0 -99
  559. data/src/core/lib/gpr/subprocess_windows.cc +0 -126
  560. data/src/core/lib/surface/alarm.cc +0 -137
  561. data/src/core/lib/surface/alarm_internal.h +0 -40
  562. data/src/core/tsi/gts_transport_security.cc +0 -40
  563. data/third_party/boringssl/crypto/aes/aes.c +0 -1142
  564. data/third_party/boringssl/crypto/aes/internal.h +0 -87
  565. data/third_party/boringssl/crypto/aes/key_wrap.c +0 -138
  566. data/third_party/boringssl/crypto/aes/mode_wrappers.c +0 -112
  567. data/third_party/boringssl/crypto/asn1/x_long.c +0 -200
  568. data/third_party/boringssl/crypto/bn/add.c +0 -377
  569. data/third_party/boringssl/crypto/bn/asm/x86_64-gcc.c +0 -532
  570. data/third_party/boringssl/crypto/bn/bn.c +0 -365
  571. data/third_party/boringssl/crypto/bn/cmp.c +0 -239
  572. data/third_party/boringssl/crypto/bn/ctx.c +0 -313
  573. data/third_party/boringssl/crypto/bn/div.c +0 -728
  574. data/third_party/boringssl/crypto/bn/exponentiation.c +0 -1240
  575. data/third_party/boringssl/crypto/bn/gcd.c +0 -635
  576. data/third_party/boringssl/crypto/bn/generic.c +0 -707
  577. data/third_party/boringssl/crypto/bn/kronecker.c +0 -176
  578. data/third_party/boringssl/crypto/bn/montgomery.c +0 -409
  579. data/third_party/boringssl/crypto/bn/montgomery_inv.c +0 -207
  580. data/third_party/boringssl/crypto/bn/mul.c +0 -871
  581. data/third_party/boringssl/crypto/bn/prime.c +0 -861
  582. data/third_party/boringssl/crypto/bn/random.c +0 -343
  583. data/third_party/boringssl/crypto/bn/rsaz_exp.c +0 -254
  584. data/third_party/boringssl/crypto/bn/shift.c +0 -307
  585. data/third_party/boringssl/crypto/bn/sqrt.c +0 -506
  586. data/third_party/boringssl/crypto/cipher/aead.c +0 -156
  587. data/third_party/boringssl/crypto/cipher/cipher.c +0 -657
  588. data/third_party/boringssl/crypto/cipher/e_aes.c +0 -1771
  589. data/third_party/boringssl/crypto/cipher/e_chacha20poly1305.c +0 -276
  590. data/third_party/boringssl/crypto/cipher/e_des.c +0 -205
  591. data/third_party/boringssl/crypto/cipher/tls_cbc.c +0 -482
  592. data/third_party/boringssl/crypto/des/des.c +0 -771
  593. data/third_party/boringssl/crypto/digest/digest.c +0 -251
  594. data/third_party/boringssl/crypto/digest/digests.c +0 -358
  595. data/third_party/boringssl/crypto/ec/ec.c +0 -847
  596. data/third_party/boringssl/crypto/ec/ec_key.c +0 -479
  597. data/third_party/boringssl/crypto/ec/ec_montgomery.c +0 -303
  598. data/third_party/boringssl/crypto/ec/oct.c +0 -416
  599. data/third_party/boringssl/crypto/ec/p224-64.c +0 -1143
  600. data/third_party/boringssl/crypto/ec/p256-64.c +0 -1701
  601. data/third_party/boringssl/crypto/ec/p256-x86_64.c +0 -561
  602. data/third_party/boringssl/crypto/ec/simple.c +0 -1118
  603. data/third_party/boringssl/crypto/ec/util-64.c +0 -109
  604. data/third_party/boringssl/crypto/ec/wnaf.c +0 -458
  605. data/third_party/boringssl/crypto/ecdsa/ecdsa.c +0 -479
  606. data/third_party/boringssl/crypto/hmac/hmac.c +0 -215
  607. data/third_party/boringssl/crypto/md4/md4.c +0 -236
  608. data/third_party/boringssl/crypto/md5/md5.c +0 -285
  609. data/third_party/boringssl/crypto/modes/cbc.c +0 -212
  610. data/third_party/boringssl/crypto/modes/cfb.c +0 -230
  611. data/third_party/boringssl/crypto/modes/ctr.c +0 -219
  612. data/third_party/boringssl/crypto/modes/gcm.c +0 -1071
  613. data/third_party/boringssl/crypto/modes/ofb.c +0 -95
  614. data/third_party/boringssl/crypto/modes/polyval.c +0 -94
  615. data/third_party/boringssl/crypto/pkcs8/p8_pkey.c +0 -85
  616. data/third_party/boringssl/crypto/rand/rand.c +0 -244
  617. data/third_party/boringssl/crypto/rand/urandom.c +0 -335
  618. data/third_party/boringssl/crypto/rsa/blinding.c +0 -265
  619. data/third_party/boringssl/crypto/rsa/padding.c +0 -708
  620. data/third_party/boringssl/crypto/rsa/rsa.c +0 -830
  621. data/third_party/boringssl/crypto/rsa/rsa_impl.c +0 -1100
  622. data/third_party/boringssl/crypto/sha/sha1-altivec.c +0 -346
  623. data/third_party/boringssl/crypto/sha/sha1.c +0 -355
  624. data/third_party/boringssl/crypto/sha/sha256.c +0 -329
  625. data/third_party/boringssl/crypto/sha/sha512.c +0 -609
  626. data/third_party/boringssl/crypto/x509/x509type.c +0 -126
  627. data/third_party/boringssl/include/openssl/stack_macros.h +0 -3987
  628. data/third_party/boringssl/ssl/handshake_client.c +0 -1883
  629. data/third_party/boringssl/ssl/handshake_server.c +0 -1950
  630. data/third_party/boringssl/ssl/s3_both.c +0 -895
  631. data/third_party/boringssl/ssl/ssl_aead_ctx.c +0 -335
  632. data/third_party/boringssl/ssl/ssl_ecdh.c +0 -465
  633. data/third_party/boringssl/ssl/ssl_privkey.c +0 -683
  634. data/third_party/boringssl/ssl/ssl_privkey_cc.cc +0 -76
  635. data/third_party/boringssl/ssl/tls13_client.c +0 -712
  636. data/third_party/boringssl/ssl/tls13_server.c +0 -680
  637. data/third_party/boringssl/ssl/tls_record.c +0 -556
@@ -1,1118 +0,0 @@
1
- /* Originally written by Bodo Moeller for the OpenSSL project.
2
- * ====================================================================
3
- * Copyright (c) 1998-2005 The OpenSSL Project. All rights reserved.
4
- *
5
- * Redistribution and use in source and binary forms, with or without
6
- * modification, are permitted provided that the following conditions
7
- * are met:
8
- *
9
- * 1. Redistributions of source code must retain the above copyright
10
- * notice, this list of conditions and the following disclaimer.
11
- *
12
- * 2. Redistributions in binary form must reproduce the above copyright
13
- * notice, this list of conditions and the following disclaimer in
14
- * the documentation and/or other materials provided with the
15
- * distribution.
16
- *
17
- * 3. All advertising materials mentioning features or use of this
18
- * software must display the following acknowledgment:
19
- * "This product includes software developed by the OpenSSL Project
20
- * for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
21
- *
22
- * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
23
- * endorse or promote products derived from this software without
24
- * prior written permission. For written permission, please contact
25
- * openssl-core@openssl.org.
26
- *
27
- * 5. Products derived from this software may not be called "OpenSSL"
28
- * nor may "OpenSSL" appear in their names without prior written
29
- * permission of the OpenSSL Project.
30
- *
31
- * 6. Redistributions of any form whatsoever must retain the following
32
- * acknowledgment:
33
- * "This product includes software developed by the OpenSSL Project
34
- * for use in the OpenSSL Toolkit (http://www.openssl.org/)"
35
- *
36
- * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
37
- * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
38
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
39
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
40
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
41
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
42
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
43
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
44
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
45
- * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
46
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
47
- * OF THE POSSIBILITY OF SUCH DAMAGE.
48
- * ====================================================================
49
- *
50
- * This product includes cryptographic software written by Eric Young
51
- * (eay@cryptsoft.com). This product includes software written by Tim
52
- * Hudson (tjh@cryptsoft.com).
53
- *
54
- */
55
- /* ====================================================================
56
- * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED.
57
- *
58
- * Portions of the attached software ("Contribution") are developed by
59
- * SUN MICROSYSTEMS, INC., and are contributed to the OpenSSL project.
60
- *
61
- * The Contribution is licensed pursuant to the OpenSSL open source
62
- * license provided above.
63
- *
64
- * The elliptic curve binary polynomial software is originally written by
65
- * Sheueling Chang Shantz and Douglas Stebila of Sun Microsystems
66
- * Laboratories. */
67
-
68
- #include <openssl/ec.h>
69
-
70
- #include <string.h>
71
-
72
- #include <openssl/bn.h>
73
- #include <openssl/err.h>
74
- #include <openssl/mem.h>
75
-
76
- #include "internal.h"
77
- #include "../internal.h"
78
-
79
-
80
- /* Most method functions in this file are designed to work with non-trivial
81
- * representations of field elements if necessary (see ecp_mont.c): while
82
- * standard modular addition and subtraction are used, the field_mul and
83
- * field_sqr methods will be used for multiplication, and field_encode and
84
- * field_decode (if defined) will be used for converting between
85
- * representations.
86
- *
87
- * Functions here specifically assume that if a non-trivial representation is
88
- * used, it is a Montgomery representation (i.e. 'encoding' means multiplying
89
- * by some factor R). */
90
-
91
- int ec_GFp_simple_group_init(EC_GROUP *group) {
92
- BN_init(&group->field);
93
- BN_init(&group->a);
94
- BN_init(&group->b);
95
- BN_init(&group->one);
96
- group->a_is_minus3 = 0;
97
- return 1;
98
- }
99
-
100
- void ec_GFp_simple_group_finish(EC_GROUP *group) {
101
- BN_free(&group->field);
102
- BN_free(&group->a);
103
- BN_free(&group->b);
104
- BN_free(&group->one);
105
- }
106
-
107
- int ec_GFp_simple_group_copy(EC_GROUP *dest, const EC_GROUP *src) {
108
- if (!BN_copy(&dest->field, &src->field) ||
109
- !BN_copy(&dest->a, &src->a) ||
110
- !BN_copy(&dest->b, &src->b) ||
111
- !BN_copy(&dest->one, &src->one)) {
112
- return 0;
113
- }
114
-
115
- dest->a_is_minus3 = src->a_is_minus3;
116
- return 1;
117
- }
118
-
119
- int ec_GFp_simple_group_set_curve(EC_GROUP *group, const BIGNUM *p,
120
- const BIGNUM *a, const BIGNUM *b,
121
- BN_CTX *ctx) {
122
- int ret = 0;
123
- BN_CTX *new_ctx = NULL;
124
- BIGNUM *tmp_a;
125
-
126
- /* p must be a prime > 3 */
127
- if (BN_num_bits(p) <= 2 || !BN_is_odd(p)) {
128
- OPENSSL_PUT_ERROR(EC, EC_R_INVALID_FIELD);
129
- return 0;
130
- }
131
-
132
- if (ctx == NULL) {
133
- ctx = new_ctx = BN_CTX_new();
134
- if (ctx == NULL) {
135
- return 0;
136
- }
137
- }
138
-
139
- BN_CTX_start(ctx);
140
- tmp_a = BN_CTX_get(ctx);
141
- if (tmp_a == NULL) {
142
- goto err;
143
- }
144
-
145
- /* group->field */
146
- if (!BN_copy(&group->field, p)) {
147
- goto err;
148
- }
149
- BN_set_negative(&group->field, 0);
150
-
151
- /* group->a */
152
- if (!BN_nnmod(tmp_a, a, p, ctx)) {
153
- goto err;
154
- }
155
- if (group->meth->field_encode) {
156
- if (!group->meth->field_encode(group, &group->a, tmp_a, ctx)) {
157
- goto err;
158
- }
159
- } else if (!BN_copy(&group->a, tmp_a)) {
160
- goto err;
161
- }
162
-
163
- /* group->b */
164
- if (!BN_nnmod(&group->b, b, p, ctx)) {
165
- goto err;
166
- }
167
- if (group->meth->field_encode &&
168
- !group->meth->field_encode(group, &group->b, &group->b, ctx)) {
169
- goto err;
170
- }
171
-
172
- /* group->a_is_minus3 */
173
- if (!BN_add_word(tmp_a, 3)) {
174
- goto err;
175
- }
176
- group->a_is_minus3 = (0 == BN_cmp(tmp_a, &group->field));
177
-
178
- if (group->meth->field_encode != NULL) {
179
- if (!group->meth->field_encode(group, &group->one, BN_value_one(), ctx)) {
180
- goto err;
181
- }
182
- } else if (!BN_copy(&group->one, BN_value_one())) {
183
- goto err;
184
- }
185
-
186
- ret = 1;
187
-
188
- err:
189
- BN_CTX_end(ctx);
190
- BN_CTX_free(new_ctx);
191
- return ret;
192
- }
193
-
194
- int ec_GFp_simple_group_get_curve(const EC_GROUP *group, BIGNUM *p, BIGNUM *a,
195
- BIGNUM *b, BN_CTX *ctx) {
196
- int ret = 0;
197
- BN_CTX *new_ctx = NULL;
198
-
199
- if (p != NULL && !BN_copy(p, &group->field)) {
200
- return 0;
201
- }
202
-
203
- if (a != NULL || b != NULL) {
204
- if (group->meth->field_decode) {
205
- if (ctx == NULL) {
206
- ctx = new_ctx = BN_CTX_new();
207
- if (ctx == NULL) {
208
- return 0;
209
- }
210
- }
211
- if (a != NULL && !group->meth->field_decode(group, a, &group->a, ctx)) {
212
- goto err;
213
- }
214
- if (b != NULL && !group->meth->field_decode(group, b, &group->b, ctx)) {
215
- goto err;
216
- }
217
- } else {
218
- if (a != NULL && !BN_copy(a, &group->a)) {
219
- goto err;
220
- }
221
- if (b != NULL && !BN_copy(b, &group->b)) {
222
- goto err;
223
- }
224
- }
225
- }
226
-
227
- ret = 1;
228
-
229
- err:
230
- BN_CTX_free(new_ctx);
231
- return ret;
232
- }
233
-
234
- unsigned ec_GFp_simple_group_get_degree(const EC_GROUP *group) {
235
- return BN_num_bits(&group->field);
236
- }
237
-
238
- int ec_GFp_simple_point_init(EC_POINT *point) {
239
- BN_init(&point->X);
240
- BN_init(&point->Y);
241
- BN_init(&point->Z);
242
-
243
- return 1;
244
- }
245
-
246
- void ec_GFp_simple_point_finish(EC_POINT *point) {
247
- BN_free(&point->X);
248
- BN_free(&point->Y);
249
- BN_free(&point->Z);
250
- }
251
-
252
- void ec_GFp_simple_point_clear_finish(EC_POINT *point) {
253
- BN_clear_free(&point->X);
254
- BN_clear_free(&point->Y);
255
- BN_clear_free(&point->Z);
256
- }
257
-
258
- int ec_GFp_simple_point_copy(EC_POINT *dest, const EC_POINT *src) {
259
- if (!BN_copy(&dest->X, &src->X) ||
260
- !BN_copy(&dest->Y, &src->Y) ||
261
- !BN_copy(&dest->Z, &src->Z)) {
262
- return 0;
263
- }
264
-
265
- return 1;
266
- }
267
-
268
- int ec_GFp_simple_point_set_to_infinity(const EC_GROUP *group,
269
- EC_POINT *point) {
270
- BN_zero(&point->Z);
271
- return 1;
272
- }
273
-
274
- static int set_Jprojective_coordinate_GFp(const EC_GROUP *group, BIGNUM *out,
275
- const BIGNUM *in, BN_CTX *ctx) {
276
- if (in == NULL) {
277
- return 1;
278
- }
279
- if (BN_is_negative(in) ||
280
- BN_cmp(in, &group->field) >= 0) {
281
- OPENSSL_PUT_ERROR(EC, EC_R_COORDINATES_OUT_OF_RANGE);
282
- return 0;
283
- }
284
- if (group->meth->field_encode) {
285
- return group->meth->field_encode(group, out, in, ctx);
286
- }
287
- return BN_copy(out, in) != NULL;
288
- }
289
-
290
- int ec_GFp_simple_set_Jprojective_coordinates_GFp(
291
- const EC_GROUP *group, EC_POINT *point, const BIGNUM *x, const BIGNUM *y,
292
- const BIGNUM *z, BN_CTX *ctx) {
293
- BN_CTX *new_ctx = NULL;
294
- int ret = 0;
295
-
296
- if (ctx == NULL) {
297
- ctx = new_ctx = BN_CTX_new();
298
- if (ctx == NULL) {
299
- return 0;
300
- }
301
- }
302
-
303
- if (!set_Jprojective_coordinate_GFp(group, &point->X, x, ctx) ||
304
- !set_Jprojective_coordinate_GFp(group, &point->Y, y, ctx) ||
305
- !set_Jprojective_coordinate_GFp(group, &point->Z, z, ctx)) {
306
- goto err;
307
- }
308
-
309
- ret = 1;
310
-
311
- err:
312
- BN_CTX_free(new_ctx);
313
- return ret;
314
- }
315
-
316
- int ec_GFp_simple_get_Jprojective_coordinates_GFp(const EC_GROUP *group,
317
- const EC_POINT *point,
318
- BIGNUM *x, BIGNUM *y,
319
- BIGNUM *z, BN_CTX *ctx) {
320
- BN_CTX *new_ctx = NULL;
321
- int ret = 0;
322
-
323
- if (group->meth->field_decode != 0) {
324
- if (ctx == NULL) {
325
- ctx = new_ctx = BN_CTX_new();
326
- if (ctx == NULL) {
327
- return 0;
328
- }
329
- }
330
-
331
- if (x != NULL && !group->meth->field_decode(group, x, &point->X, ctx)) {
332
- goto err;
333
- }
334
- if (y != NULL && !group->meth->field_decode(group, y, &point->Y, ctx)) {
335
- goto err;
336
- }
337
- if (z != NULL && !group->meth->field_decode(group, z, &point->Z, ctx)) {
338
- goto err;
339
- }
340
- } else {
341
- if (x != NULL && !BN_copy(x, &point->X)) {
342
- goto err;
343
- }
344
- if (y != NULL && !BN_copy(y, &point->Y)) {
345
- goto err;
346
- }
347
- if (z != NULL && !BN_copy(z, &point->Z)) {
348
- goto err;
349
- }
350
- }
351
-
352
- ret = 1;
353
-
354
- err:
355
- BN_CTX_free(new_ctx);
356
- return ret;
357
- }
358
-
359
- int ec_GFp_simple_point_set_affine_coordinates(const EC_GROUP *group,
360
- EC_POINT *point, const BIGNUM *x,
361
- const BIGNUM *y, BN_CTX *ctx) {
362
- if (x == NULL || y == NULL) {
363
- /* unlike for projective coordinates, we do not tolerate this */
364
- OPENSSL_PUT_ERROR(EC, ERR_R_PASSED_NULL_PARAMETER);
365
- return 0;
366
- }
367
-
368
- return ec_point_set_Jprojective_coordinates_GFp(group, point, x, y,
369
- BN_value_one(), ctx);
370
- }
371
-
372
- int ec_GFp_simple_add(const EC_GROUP *group, EC_POINT *r, const EC_POINT *a,
373
- const EC_POINT *b, BN_CTX *ctx) {
374
- int (*field_mul)(const EC_GROUP *, BIGNUM *, const BIGNUM *, const BIGNUM *,
375
- BN_CTX *);
376
- int (*field_sqr)(const EC_GROUP *, BIGNUM *, const BIGNUM *, BN_CTX *);
377
- const BIGNUM *p;
378
- BN_CTX *new_ctx = NULL;
379
- BIGNUM *n0, *n1, *n2, *n3, *n4, *n5, *n6;
380
- int ret = 0;
381
-
382
- if (a == b) {
383
- return EC_POINT_dbl(group, r, a, ctx);
384
- }
385
- if (EC_POINT_is_at_infinity(group, a)) {
386
- return EC_POINT_copy(r, b);
387
- }
388
- if (EC_POINT_is_at_infinity(group, b)) {
389
- return EC_POINT_copy(r, a);
390
- }
391
-
392
- field_mul = group->meth->field_mul;
393
- field_sqr = group->meth->field_sqr;
394
- p = &group->field;
395
-
396
- if (ctx == NULL) {
397
- ctx = new_ctx = BN_CTX_new();
398
- if (ctx == NULL) {
399
- return 0;
400
- }
401
- }
402
-
403
- BN_CTX_start(ctx);
404
- n0 = BN_CTX_get(ctx);
405
- n1 = BN_CTX_get(ctx);
406
- n2 = BN_CTX_get(ctx);
407
- n3 = BN_CTX_get(ctx);
408
- n4 = BN_CTX_get(ctx);
409
- n5 = BN_CTX_get(ctx);
410
- n6 = BN_CTX_get(ctx);
411
- if (n6 == NULL) {
412
- goto end;
413
- }
414
-
415
- /* Note that in this function we must not read components of 'a' or 'b'
416
- * once we have written the corresponding components of 'r'.
417
- * ('r' might be one of 'a' or 'b'.)
418
- */
419
-
420
- /* n1, n2 */
421
- int b_Z_is_one = BN_cmp(&b->Z, &group->one) == 0;
422
-
423
- if (b_Z_is_one) {
424
- if (!BN_copy(n1, &a->X) || !BN_copy(n2, &a->Y)) {
425
- goto end;
426
- }
427
- /* n1 = X_a */
428
- /* n2 = Y_a */
429
- } else {
430
- if (!field_sqr(group, n0, &b->Z, ctx) ||
431
- !field_mul(group, n1, &a->X, n0, ctx)) {
432
- goto end;
433
- }
434
- /* n1 = X_a * Z_b^2 */
435
-
436
- if (!field_mul(group, n0, n0, &b->Z, ctx) ||
437
- !field_mul(group, n2, &a->Y, n0, ctx)) {
438
- goto end;
439
- }
440
- /* n2 = Y_a * Z_b^3 */
441
- }
442
-
443
- /* n3, n4 */
444
- int a_Z_is_one = BN_cmp(&a->Z, &group->one) == 0;
445
- if (a_Z_is_one) {
446
- if (!BN_copy(n3, &b->X) || !BN_copy(n4, &b->Y)) {
447
- goto end;
448
- }
449
- /* n3 = X_b */
450
- /* n4 = Y_b */
451
- } else {
452
- if (!field_sqr(group, n0, &a->Z, ctx) ||
453
- !field_mul(group, n3, &b->X, n0, ctx)) {
454
- goto end;
455
- }
456
- /* n3 = X_b * Z_a^2 */
457
-
458
- if (!field_mul(group, n0, n0, &a->Z, ctx) ||
459
- !field_mul(group, n4, &b->Y, n0, ctx)) {
460
- goto end;
461
- }
462
- /* n4 = Y_b * Z_a^3 */
463
- }
464
-
465
- /* n5, n6 */
466
- if (!BN_mod_sub_quick(n5, n1, n3, p) ||
467
- !BN_mod_sub_quick(n6, n2, n4, p)) {
468
- goto end;
469
- }
470
- /* n5 = n1 - n3 */
471
- /* n6 = n2 - n4 */
472
-
473
- if (BN_is_zero(n5)) {
474
- if (BN_is_zero(n6)) {
475
- /* a is the same point as b */
476
- BN_CTX_end(ctx);
477
- ret = EC_POINT_dbl(group, r, a, ctx);
478
- ctx = NULL;
479
- goto end;
480
- } else {
481
- /* a is the inverse of b */
482
- BN_zero(&r->Z);
483
- ret = 1;
484
- goto end;
485
- }
486
- }
487
-
488
- /* 'n7', 'n8' */
489
- if (!BN_mod_add_quick(n1, n1, n3, p) ||
490
- !BN_mod_add_quick(n2, n2, n4, p)) {
491
- goto end;
492
- }
493
- /* 'n7' = n1 + n3 */
494
- /* 'n8' = n2 + n4 */
495
-
496
- /* Z_r */
497
- if (a_Z_is_one && b_Z_is_one) {
498
- if (!BN_copy(&r->Z, n5)) {
499
- goto end;
500
- }
501
- } else {
502
- if (a_Z_is_one) {
503
- if (!BN_copy(n0, &b->Z)) {
504
- goto end;
505
- }
506
- } else if (b_Z_is_one) {
507
- if (!BN_copy(n0, &a->Z)) {
508
- goto end;
509
- }
510
- } else if (!field_mul(group, n0, &a->Z, &b->Z, ctx)) {
511
- goto end;
512
- }
513
- if (!field_mul(group, &r->Z, n0, n5, ctx)) {
514
- goto end;
515
- }
516
- }
517
-
518
- /* Z_r = Z_a * Z_b * n5 */
519
-
520
- /* X_r */
521
- if (!field_sqr(group, n0, n6, ctx) ||
522
- !field_sqr(group, n4, n5, ctx) ||
523
- !field_mul(group, n3, n1, n4, ctx) ||
524
- !BN_mod_sub_quick(&r->X, n0, n3, p)) {
525
- goto end;
526
- }
527
- /* X_r = n6^2 - n5^2 * 'n7' */
528
-
529
- /* 'n9' */
530
- if (!BN_mod_lshift1_quick(n0, &r->X, p) ||
531
- !BN_mod_sub_quick(n0, n3, n0, p)) {
532
- goto end;
533
- }
534
- /* n9 = n5^2 * 'n7' - 2 * X_r */
535
-
536
- /* Y_r */
537
- if (!field_mul(group, n0, n0, n6, ctx) ||
538
- !field_mul(group, n5, n4, n5, ctx)) {
539
- goto end; /* now n5 is n5^3 */
540
- }
541
- if (!field_mul(group, n1, n2, n5, ctx) ||
542
- !BN_mod_sub_quick(n0, n0, n1, p)) {
543
- goto end;
544
- }
545
- if (BN_is_odd(n0) && !BN_add(n0, n0, p)) {
546
- goto end;
547
- }
548
- /* now 0 <= n0 < 2*p, and n0 is even */
549
- if (!BN_rshift1(&r->Y, n0)) {
550
- goto end;
551
- }
552
- /* Y_r = (n6 * 'n9' - 'n8' * 'n5^3') / 2 */
553
-
554
- ret = 1;
555
-
556
- end:
557
- if (ctx) {
558
- /* otherwise we already called BN_CTX_end */
559
- BN_CTX_end(ctx);
560
- }
561
- BN_CTX_free(new_ctx);
562
- return ret;
563
- }
564
-
565
- int ec_GFp_simple_dbl(const EC_GROUP *group, EC_POINT *r, const EC_POINT *a,
566
- BN_CTX *ctx) {
567
- int (*field_mul)(const EC_GROUP *, BIGNUM *, const BIGNUM *, const BIGNUM *,
568
- BN_CTX *);
569
- int (*field_sqr)(const EC_GROUP *, BIGNUM *, const BIGNUM *, BN_CTX *);
570
- const BIGNUM *p;
571
- BN_CTX *new_ctx = NULL;
572
- BIGNUM *n0, *n1, *n2, *n3;
573
- int ret = 0;
574
-
575
- if (EC_POINT_is_at_infinity(group, a)) {
576
- BN_zero(&r->Z);
577
- return 1;
578
- }
579
-
580
- field_mul = group->meth->field_mul;
581
- field_sqr = group->meth->field_sqr;
582
- p = &group->field;
583
-
584
- if (ctx == NULL) {
585
- ctx = new_ctx = BN_CTX_new();
586
- if (ctx == NULL) {
587
- return 0;
588
- }
589
- }
590
-
591
- BN_CTX_start(ctx);
592
- n0 = BN_CTX_get(ctx);
593
- n1 = BN_CTX_get(ctx);
594
- n2 = BN_CTX_get(ctx);
595
- n3 = BN_CTX_get(ctx);
596
- if (n3 == NULL) {
597
- goto err;
598
- }
599
-
600
- /* Note that in this function we must not read components of 'a'
601
- * once we have written the corresponding components of 'r'.
602
- * ('r' might the same as 'a'.)
603
- */
604
-
605
- /* n1 */
606
- if (BN_cmp(&a->Z, &group->one) == 0) {
607
- if (!field_sqr(group, n0, &a->X, ctx) ||
608
- !BN_mod_lshift1_quick(n1, n0, p) ||
609
- !BN_mod_add_quick(n0, n0, n1, p) ||
610
- !BN_mod_add_quick(n1, n0, &group->a, p)) {
611
- goto err;
612
- }
613
- /* n1 = 3 * X_a^2 + a_curve */
614
- } else if (group->a_is_minus3) {
615
- if (!field_sqr(group, n1, &a->Z, ctx) ||
616
- !BN_mod_add_quick(n0, &a->X, n1, p) ||
617
- !BN_mod_sub_quick(n2, &a->X, n1, p) ||
618
- !field_mul(group, n1, n0, n2, ctx) ||
619
- !BN_mod_lshift1_quick(n0, n1, p) ||
620
- !BN_mod_add_quick(n1, n0, n1, p)) {
621
- goto err;
622
- }
623
- /* n1 = 3 * (X_a + Z_a^2) * (X_a - Z_a^2)
624
- * = 3 * X_a^2 - 3 * Z_a^4 */
625
- } else {
626
- if (!field_sqr(group, n0, &a->X, ctx) ||
627
- !BN_mod_lshift1_quick(n1, n0, p) ||
628
- !BN_mod_add_quick(n0, n0, n1, p) ||
629
- !field_sqr(group, n1, &a->Z, ctx) ||
630
- !field_sqr(group, n1, n1, ctx) ||
631
- !field_mul(group, n1, n1, &group->a, ctx) ||
632
- !BN_mod_add_quick(n1, n1, n0, p)) {
633
- goto err;
634
- }
635
- /* n1 = 3 * X_a^2 + a_curve * Z_a^4 */
636
- }
637
-
638
- /* Z_r */
639
- if (BN_cmp(&a->Z, &group->one) == 0) {
640
- if (!BN_copy(n0, &a->Y)) {
641
- goto err;
642
- }
643
- } else if (!field_mul(group, n0, &a->Y, &a->Z, ctx)) {
644
- goto err;
645
- }
646
- if (!BN_mod_lshift1_quick(&r->Z, n0, p)) {
647
- goto err;
648
- }
649
- /* Z_r = 2 * Y_a * Z_a */
650
-
651
- /* n2 */
652
- if (!field_sqr(group, n3, &a->Y, ctx) ||
653
- !field_mul(group, n2, &a->X, n3, ctx) ||
654
- !BN_mod_lshift_quick(n2, n2, 2, p)) {
655
- goto err;
656
- }
657
- /* n2 = 4 * X_a * Y_a^2 */
658
-
659
- /* X_r */
660
- if (!BN_mod_lshift1_quick(n0, n2, p) ||
661
- !field_sqr(group, &r->X, n1, ctx) ||
662
- !BN_mod_sub_quick(&r->X, &r->X, n0, p)) {
663
- goto err;
664
- }
665
- /* X_r = n1^2 - 2 * n2 */
666
-
667
- /* n3 */
668
- if (!field_sqr(group, n0, n3, ctx) ||
669
- !BN_mod_lshift_quick(n3, n0, 3, p)) {
670
- goto err;
671
- }
672
- /* n3 = 8 * Y_a^4 */
673
-
674
- /* Y_r */
675
- if (!BN_mod_sub_quick(n0, n2, &r->X, p) ||
676
- !field_mul(group, n0, n1, n0, ctx) ||
677
- !BN_mod_sub_quick(&r->Y, n0, n3, p)) {
678
- goto err;
679
- }
680
- /* Y_r = n1 * (n2 - X_r) - n3 */
681
-
682
- ret = 1;
683
-
684
- err:
685
- BN_CTX_end(ctx);
686
- BN_CTX_free(new_ctx);
687
- return ret;
688
- }
689
-
690
- int ec_GFp_simple_invert(const EC_GROUP *group, EC_POINT *point, BN_CTX *ctx) {
691
- if (EC_POINT_is_at_infinity(group, point) || BN_is_zero(&point->Y)) {
692
- /* point is its own inverse */
693
- return 1;
694
- }
695
-
696
- return BN_usub(&point->Y, &group->field, &point->Y);
697
- }
698
-
699
- int ec_GFp_simple_is_at_infinity(const EC_GROUP *group, const EC_POINT *point) {
700
- return BN_is_zero(&point->Z);
701
- }
702
-
703
- int ec_GFp_simple_is_on_curve(const EC_GROUP *group, const EC_POINT *point,
704
- BN_CTX *ctx) {
705
- int (*field_mul)(const EC_GROUP *, BIGNUM *, const BIGNUM *, const BIGNUM *,
706
- BN_CTX *);
707
- int (*field_sqr)(const EC_GROUP *, BIGNUM *, const BIGNUM *, BN_CTX *);
708
- const BIGNUM *p;
709
- BN_CTX *new_ctx = NULL;
710
- BIGNUM *rh, *tmp, *Z4, *Z6;
711
- int ret = 0;
712
-
713
- if (EC_POINT_is_at_infinity(group, point)) {
714
- return 1;
715
- }
716
-
717
- field_mul = group->meth->field_mul;
718
- field_sqr = group->meth->field_sqr;
719
- p = &group->field;
720
-
721
- if (ctx == NULL) {
722
- ctx = new_ctx = BN_CTX_new();
723
- if (ctx == NULL) {
724
- return 0;
725
- }
726
- }
727
-
728
- BN_CTX_start(ctx);
729
- rh = BN_CTX_get(ctx);
730
- tmp = BN_CTX_get(ctx);
731
- Z4 = BN_CTX_get(ctx);
732
- Z6 = BN_CTX_get(ctx);
733
- if (Z6 == NULL) {
734
- goto err;
735
- }
736
-
737
- /* We have a curve defined by a Weierstrass equation
738
- * y^2 = x^3 + a*x + b.
739
- * The point to consider is given in Jacobian projective coordinates
740
- * where (X, Y, Z) represents (x, y) = (X/Z^2, Y/Z^3).
741
- * Substituting this and multiplying by Z^6 transforms the above equation
742
- * into
743
- * Y^2 = X^3 + a*X*Z^4 + b*Z^6.
744
- * To test this, we add up the right-hand side in 'rh'.
745
- */
746
-
747
- /* rh := X^2 */
748
- if (!field_sqr(group, rh, &point->X, ctx)) {
749
- goto err;
750
- }
751
-
752
- if (BN_cmp(&point->Z, &group->one) != 0) {
753
- if (!field_sqr(group, tmp, &point->Z, ctx) ||
754
- !field_sqr(group, Z4, tmp, ctx) ||
755
- !field_mul(group, Z6, Z4, tmp, ctx)) {
756
- goto err;
757
- }
758
-
759
- /* rh := (rh + a*Z^4)*X */
760
- if (group->a_is_minus3) {
761
- if (!BN_mod_lshift1_quick(tmp, Z4, p) ||
762
- !BN_mod_add_quick(tmp, tmp, Z4, p) ||
763
- !BN_mod_sub_quick(rh, rh, tmp, p) ||
764
- !field_mul(group, rh, rh, &point->X, ctx)) {
765
- goto err;
766
- }
767
- } else {
768
- if (!field_mul(group, tmp, Z4, &group->a, ctx) ||
769
- !BN_mod_add_quick(rh, rh, tmp, p) ||
770
- !field_mul(group, rh, rh, &point->X, ctx)) {
771
- goto err;
772
- }
773
- }
774
-
775
- /* rh := rh + b*Z^6 */
776
- if (!field_mul(group, tmp, &group->b, Z6, ctx) ||
777
- !BN_mod_add_quick(rh, rh, tmp, p)) {
778
- goto err;
779
- }
780
- } else {
781
- /* rh := (rh + a)*X */
782
- if (!BN_mod_add_quick(rh, rh, &group->a, p) ||
783
- !field_mul(group, rh, rh, &point->X, ctx)) {
784
- goto err;
785
- }
786
- /* rh := rh + b */
787
- if (!BN_mod_add_quick(rh, rh, &group->b, p)) {
788
- goto err;
789
- }
790
- }
791
-
792
- /* 'lh' := Y^2 */
793
- if (!field_sqr(group, tmp, &point->Y, ctx)) {
794
- goto err;
795
- }
796
-
797
- ret = (0 == BN_ucmp(tmp, rh));
798
-
799
- err:
800
- BN_CTX_end(ctx);
801
- BN_CTX_free(new_ctx);
802
- return ret;
803
- }
804
-
805
- int ec_GFp_simple_cmp(const EC_GROUP *group, const EC_POINT *a,
806
- const EC_POINT *b, BN_CTX *ctx) {
807
- /* return values:
808
- * -1 error
809
- * 0 equal (in affine coordinates)
810
- * 1 not equal
811
- */
812
-
813
- int (*field_mul)(const EC_GROUP *, BIGNUM *, const BIGNUM *, const BIGNUM *,
814
- BN_CTX *);
815
- int (*field_sqr)(const EC_GROUP *, BIGNUM *, const BIGNUM *, BN_CTX *);
816
- BN_CTX *new_ctx = NULL;
817
- BIGNUM *tmp1, *tmp2, *Za23, *Zb23;
818
- const BIGNUM *tmp1_, *tmp2_;
819
- int ret = -1;
820
-
821
- if (EC_POINT_is_at_infinity(group, a)) {
822
- return EC_POINT_is_at_infinity(group, b) ? 0 : 1;
823
- }
824
-
825
- if (EC_POINT_is_at_infinity(group, b)) {
826
- return 1;
827
- }
828
-
829
- int a_Z_is_one = BN_cmp(&a->Z, &group->one) == 0;
830
- int b_Z_is_one = BN_cmp(&b->Z, &group->one) == 0;
831
-
832
- if (a_Z_is_one && b_Z_is_one) {
833
- return ((BN_cmp(&a->X, &b->X) == 0) && BN_cmp(&a->Y, &b->Y) == 0) ? 0 : 1;
834
- }
835
-
836
- field_mul = group->meth->field_mul;
837
- field_sqr = group->meth->field_sqr;
838
-
839
- if (ctx == NULL) {
840
- ctx = new_ctx = BN_CTX_new();
841
- if (ctx == NULL) {
842
- return -1;
843
- }
844
- }
845
-
846
- BN_CTX_start(ctx);
847
- tmp1 = BN_CTX_get(ctx);
848
- tmp2 = BN_CTX_get(ctx);
849
- Za23 = BN_CTX_get(ctx);
850
- Zb23 = BN_CTX_get(ctx);
851
- if (Zb23 == NULL) {
852
- goto end;
853
- }
854
-
855
- /* We have to decide whether
856
- * (X_a/Z_a^2, Y_a/Z_a^3) = (X_b/Z_b^2, Y_b/Z_b^3),
857
- * or equivalently, whether
858
- * (X_a*Z_b^2, Y_a*Z_b^3) = (X_b*Z_a^2, Y_b*Z_a^3).
859
- */
860
-
861
- if (!b_Z_is_one) {
862
- if (!field_sqr(group, Zb23, &b->Z, ctx) ||
863
- !field_mul(group, tmp1, &a->X, Zb23, ctx)) {
864
- goto end;
865
- }
866
- tmp1_ = tmp1;
867
- } else {
868
- tmp1_ = &a->X;
869
- }
870
- if (!a_Z_is_one) {
871
- if (!field_sqr(group, Za23, &a->Z, ctx) ||
872
- !field_mul(group, tmp2, &b->X, Za23, ctx)) {
873
- goto end;
874
- }
875
- tmp2_ = tmp2;
876
- } else {
877
- tmp2_ = &b->X;
878
- }
879
-
880
- /* compare X_a*Z_b^2 with X_b*Z_a^2 */
881
- if (BN_cmp(tmp1_, tmp2_) != 0) {
882
- ret = 1; /* points differ */
883
- goto end;
884
- }
885
-
886
-
887
- if (!b_Z_is_one) {
888
- if (!field_mul(group, Zb23, Zb23, &b->Z, ctx) ||
889
- !field_mul(group, tmp1, &a->Y, Zb23, ctx)) {
890
- goto end;
891
- }
892
- /* tmp1_ = tmp1 */
893
- } else {
894
- tmp1_ = &a->Y;
895
- }
896
- if (!a_Z_is_one) {
897
- if (!field_mul(group, Za23, Za23, &a->Z, ctx) ||
898
- !field_mul(group, tmp2, &b->Y, Za23, ctx)) {
899
- goto end;
900
- }
901
- /* tmp2_ = tmp2 */
902
- } else {
903
- tmp2_ = &b->Y;
904
- }
905
-
906
- /* compare Y_a*Z_b^3 with Y_b*Z_a^3 */
907
- if (BN_cmp(tmp1_, tmp2_) != 0) {
908
- ret = 1; /* points differ */
909
- goto end;
910
- }
911
-
912
- /* points are equal */
913
- ret = 0;
914
-
915
- end:
916
- BN_CTX_end(ctx);
917
- BN_CTX_free(new_ctx);
918
- return ret;
919
- }
920
-
921
- int ec_GFp_simple_make_affine(const EC_GROUP *group, EC_POINT *point,
922
- BN_CTX *ctx) {
923
- BN_CTX *new_ctx = NULL;
924
- BIGNUM *x, *y;
925
- int ret = 0;
926
-
927
- if (BN_cmp(&point->Z, &group->one) == 0 ||
928
- EC_POINT_is_at_infinity(group, point)) {
929
- return 1;
930
- }
931
-
932
- if (ctx == NULL) {
933
- ctx = new_ctx = BN_CTX_new();
934
- if (ctx == NULL) {
935
- return 0;
936
- }
937
- }
938
-
939
- BN_CTX_start(ctx);
940
- x = BN_CTX_get(ctx);
941
- y = BN_CTX_get(ctx);
942
- if (y == NULL) {
943
- goto err;
944
- }
945
-
946
- if (!EC_POINT_get_affine_coordinates_GFp(group, point, x, y, ctx) ||
947
- !EC_POINT_set_affine_coordinates_GFp(group, point, x, y, ctx)) {
948
- goto err;
949
- }
950
- if (BN_cmp(&point->Z, &group->one) != 0) {
951
- OPENSSL_PUT_ERROR(EC, ERR_R_INTERNAL_ERROR);
952
- goto err;
953
- }
954
-
955
- ret = 1;
956
-
957
- err:
958
- BN_CTX_end(ctx);
959
- BN_CTX_free(new_ctx);
960
- return ret;
961
- }
962
-
963
- int ec_GFp_simple_points_make_affine(const EC_GROUP *group, size_t num,
964
- EC_POINT *points[], BN_CTX *ctx) {
965
- BN_CTX *new_ctx = NULL;
966
- BIGNUM *tmp, *tmp_Z;
967
- BIGNUM **prod_Z = NULL;
968
- int ret = 0;
969
-
970
- if (num == 0) {
971
- return 1;
972
- }
973
-
974
- if (ctx == NULL) {
975
- ctx = new_ctx = BN_CTX_new();
976
- if (ctx == NULL) {
977
- return 0;
978
- }
979
- }
980
-
981
- BN_CTX_start(ctx);
982
- tmp = BN_CTX_get(ctx);
983
- tmp_Z = BN_CTX_get(ctx);
984
- if (tmp == NULL || tmp_Z == NULL) {
985
- goto err;
986
- }
987
-
988
- prod_Z = OPENSSL_malloc(num * sizeof(prod_Z[0]));
989
- if (prod_Z == NULL) {
990
- goto err;
991
- }
992
- OPENSSL_memset(prod_Z, 0, num * sizeof(prod_Z[0]));
993
- for (size_t i = 0; i < num; i++) {
994
- prod_Z[i] = BN_new();
995
- if (prod_Z[i] == NULL) {
996
- goto err;
997
- }
998
- }
999
-
1000
- /* Set each prod_Z[i] to the product of points[0]->Z .. points[i]->Z,
1001
- * skipping any zero-valued inputs (pretend that they're 1). */
1002
-
1003
- if (!BN_is_zero(&points[0]->Z)) {
1004
- if (!BN_copy(prod_Z[0], &points[0]->Z)) {
1005
- goto err;
1006
- }
1007
- } else {
1008
- if (BN_copy(prod_Z[0], &group->one) == NULL) {
1009
- goto err;
1010
- }
1011
- }
1012
-
1013
- for (size_t i = 1; i < num; i++) {
1014
- if (!BN_is_zero(&points[i]->Z)) {
1015
- if (!group->meth->field_mul(group, prod_Z[i], prod_Z[i - 1],
1016
- &points[i]->Z, ctx)) {
1017
- goto err;
1018
- }
1019
- } else {
1020
- if (!BN_copy(prod_Z[i], prod_Z[i - 1])) {
1021
- goto err;
1022
- }
1023
- }
1024
- }
1025
-
1026
- /* Now use a single explicit inversion to replace every non-zero points[i]->Z
1027
- * by its inverse. We use |BN_mod_inverse_odd| instead of doing a constant-
1028
- * time inversion using Fermat's Little Theorem because this function is
1029
- * usually only used for converting multiples of a public key point to
1030
- * affine, and a public key point isn't secret. If we were to use Fermat's
1031
- * Little Theorem then the cost of the inversion would usually be so high
1032
- * that converting the multiples to affine would be counterproductive. */
1033
- int no_inverse;
1034
- if (!BN_mod_inverse_odd(tmp, &no_inverse, prod_Z[num - 1], &group->field,
1035
- ctx)) {
1036
- OPENSSL_PUT_ERROR(EC, ERR_R_BN_LIB);
1037
- goto err;
1038
- }
1039
-
1040
- if (group->meth->field_encode != NULL) {
1041
- /* In the Montgomery case, we just turned R*H (representing H)
1042
- * into 1/(R*H), but we need R*(1/H) (representing 1/H);
1043
- * i.e. we need to multiply by the Montgomery factor twice. */
1044
- if (!group->meth->field_encode(group, tmp, tmp, ctx) ||
1045
- !group->meth->field_encode(group, tmp, tmp, ctx)) {
1046
- goto err;
1047
- }
1048
- }
1049
-
1050
- for (size_t i = num - 1; i > 0; --i) {
1051
- /* Loop invariant: tmp is the product of the inverses of
1052
- * points[0]->Z .. points[i]->Z (zero-valued inputs skipped). */
1053
- if (BN_is_zero(&points[i]->Z)) {
1054
- continue;
1055
- }
1056
-
1057
- /* Set tmp_Z to the inverse of points[i]->Z (as product
1058
- * of Z inverses 0 .. i, Z values 0 .. i - 1). */
1059
- if (!group->meth->field_mul(group, tmp_Z, prod_Z[i - 1], tmp, ctx) ||
1060
- /* Update tmp to satisfy the loop invariant for i - 1. */
1061
- !group->meth->field_mul(group, tmp, tmp, &points[i]->Z, ctx) ||
1062
- /* Replace points[i]->Z by its inverse. */
1063
- !BN_copy(&points[i]->Z, tmp_Z)) {
1064
- goto err;
1065
- }
1066
- }
1067
-
1068
- /* Replace points[0]->Z by its inverse. */
1069
- if (!BN_is_zero(&points[0]->Z) && !BN_copy(&points[0]->Z, tmp)) {
1070
- goto err;
1071
- }
1072
-
1073
- /* Finally, fix up the X and Y coordinates for all points. */
1074
- for (size_t i = 0; i < num; i++) {
1075
- EC_POINT *p = points[i];
1076
-
1077
- if (!BN_is_zero(&p->Z)) {
1078
- /* turn (X, Y, 1/Z) into (X/Z^2, Y/Z^3, 1). */
1079
- if (!group->meth->field_sqr(group, tmp, &p->Z, ctx) ||
1080
- !group->meth->field_mul(group, &p->X, &p->X, tmp, ctx) ||
1081
- !group->meth->field_mul(group, tmp, tmp, &p->Z, ctx) ||
1082
- !group->meth->field_mul(group, &p->Y, &p->Y, tmp, ctx)) {
1083
- goto err;
1084
- }
1085
-
1086
- if (BN_copy(&p->Z, &group->one) == NULL) {
1087
- goto err;
1088
- }
1089
- }
1090
- }
1091
-
1092
- ret = 1;
1093
-
1094
- err:
1095
- BN_CTX_end(ctx);
1096
- BN_CTX_free(new_ctx);
1097
- if (prod_Z != NULL) {
1098
- for (size_t i = 0; i < num; i++) {
1099
- if (prod_Z[i] == NULL) {
1100
- break;
1101
- }
1102
- BN_clear_free(prod_Z[i]);
1103
- }
1104
- OPENSSL_free(prod_Z);
1105
- }
1106
-
1107
- return ret;
1108
- }
1109
-
1110
- int ec_GFp_simple_field_mul(const EC_GROUP *group, BIGNUM *r, const BIGNUM *a,
1111
- const BIGNUM *b, BN_CTX *ctx) {
1112
- return BN_mod_mul(r, a, b, &group->field, ctx);
1113
- }
1114
-
1115
- int ec_GFp_simple_field_sqr(const EC_GROUP *group, BIGNUM *r, const BIGNUM *a,
1116
- BN_CTX *ctx) {
1117
- return BN_mod_sqr(r, a, &group->field, ctx);
1118
- }