grpc 1.12.0 → 1.13.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 (245) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +314 -23
  3. data/include/grpc/impl/codegen/fork.h +4 -4
  4. data/include/grpc/impl/codegen/grpc_types.h +1 -1
  5. data/include/grpc/impl/codegen/port_platform.h +3 -0
  6. data/src/boringssl/err_data.c +256 -246
  7. data/src/core/ext/filters/client_channel/channel_connectivity.cc +1 -1
  8. data/src/core/ext/filters/client_channel/client_channel.cc +367 -272
  9. data/src/core/ext/filters/client_channel/lb_policy.h +1 -3
  10. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +11 -9
  11. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +42 -32
  12. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h +36 -0
  13. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc +36 -102
  14. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +37 -32
  15. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +22 -19
  16. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +1 -1
  17. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +1 -1
  18. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +1 -1
  19. data/src/core/ext/filters/client_channel/resolver.h +1 -3
  20. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +3 -3
  21. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +2 -2
  22. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +0 -1
  23. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +4 -4
  24. data/src/core/ext/filters/client_channel/subchannel.cc +3 -3
  25. data/src/core/ext/filters/http/client_authority_filter.cc +5 -4
  26. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +4 -4
  27. data/src/core/ext/filters/http/server/http_server_filter.cc +123 -131
  28. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +1 -1
  29. data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +9 -8
  30. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +19 -19
  31. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +10 -6
  32. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +4 -3
  33. data/src/core/ext/transport/chttp2/transport/parsing.cc +14 -12
  34. data/src/core/ext/transport/chttp2/transport/writing.cc +6 -6
  35. data/src/core/lib/channel/channel_stack.cc +0 -5
  36. data/src/core/lib/channel/channel_stack.h +1 -1
  37. data/src/core/lib/channel/channel_stack_builder.cc +0 -3
  38. data/src/core/lib/channel/channel_stack_builder.h +0 -2
  39. data/src/core/lib/channel/channel_trace.cc +3 -3
  40. data/src/core/lib/channel/channelz_registry.cc +77 -0
  41. data/src/core/lib/channel/channelz_registry.h +99 -0
  42. data/src/core/lib/channel/handshaker.cc +20 -1
  43. data/src/core/lib/debug/stats.h +7 -0
  44. data/src/core/lib/debug/stats_data.cc +5 -0
  45. data/src/core/lib/debug/stats_data.h +120 -0
  46. data/src/core/lib/debug/trace.h +11 -9
  47. data/src/core/lib/gprpp/fork.cc +260 -0
  48. data/src/core/lib/gprpp/fork.h +79 -0
  49. data/src/core/lib/gprpp/memory.h +12 -0
  50. data/src/core/lib/gprpp/orphanable.h +2 -6
  51. data/src/core/lib/gprpp/ref_counted.h +2 -6
  52. data/src/core/lib/gprpp/thd.h +0 -3
  53. data/src/core/lib/gprpp/thd_posix.cc +4 -53
  54. data/src/core/lib/gprpp/thd_windows.cc +0 -7
  55. data/src/core/lib/http/httpcli_security_connector.cc +1 -3
  56. data/src/core/lib/iomgr/combiner.cc +19 -2
  57. data/src/core/lib/iomgr/combiner.h +1 -1
  58. data/src/core/lib/iomgr/ev_epoll1_linux.cc +2 -2
  59. data/src/core/lib/iomgr/ev_epollex_linux.cc +59 -3
  60. data/src/core/lib/iomgr/ev_epollsig_linux.cc +1 -1
  61. data/src/core/lib/iomgr/ev_poll_posix.cc +2 -2
  62. data/src/core/lib/iomgr/ev_posix.cc +11 -4
  63. data/src/core/lib/iomgr/ev_posix.h +6 -0
  64. data/src/core/lib/iomgr/exec_ctx.cc +9 -9
  65. data/src/core/lib/iomgr/exec_ctx.h +39 -20
  66. data/src/core/lib/iomgr/fork_posix.cc +30 -18
  67. data/src/core/lib/iomgr/iomgr_posix.cc +2 -2
  68. data/src/core/lib/iomgr/polling_entity.cc +11 -2
  69. data/src/core/lib/iomgr/pollset_custom.cc +2 -2
  70. data/src/core/lib/iomgr/port.h +38 -1
  71. data/src/core/lib/iomgr/resolve_address.h +1 -1
  72. data/src/core/lib/iomgr/resolve_address_posix.cc +1 -1
  73. data/src/core/lib/iomgr/resource_quota.cc +1 -1
  74. data/src/core/lib/iomgr/sockaddr_posix.h +1 -1
  75. data/src/core/lib/iomgr/socket_factory_posix.cc +1 -1
  76. data/src/core/lib/iomgr/socket_utils_common_posix.cc +1 -1
  77. data/src/core/lib/iomgr/tcp_client_custom.cc +3 -3
  78. data/src/core/lib/iomgr/tcp_client_posix.cc +3 -2
  79. data/src/core/lib/iomgr/tcp_custom.cc +1 -1
  80. data/src/core/lib/iomgr/tcp_posix.cc +18 -10
  81. data/src/core/lib/iomgr/tcp_server_posix.cc +9 -8
  82. data/src/core/lib/iomgr/tcp_server_utils_posix.h +1 -1
  83. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +16 -4
  84. data/src/core/lib/iomgr/timer.h +1 -1
  85. data/src/core/lib/iomgr/timer_generic.cc +113 -41
  86. data/src/core/lib/iomgr/timer_manager.cc +1 -1
  87. data/src/core/lib/security/credentials/credentials.h +1 -0
  88. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +88 -115
  89. data/src/core/lib/security/credentials/google_default/google_default_credentials.h +16 -0
  90. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +10 -6
  91. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +1 -1
  92. data/src/core/lib/security/security_connector/alts_security_connector.cc +2 -1
  93. data/src/core/lib/security/security_connector/security_connector.cc +7 -7
  94. data/src/core/lib/security/transport/security_handshaker.cc +1 -0
  95. data/src/core/lib/security/util/json_util.cc +4 -0
  96. data/src/core/lib/slice/slice_buffer.cc +15 -3
  97. data/src/core/lib/surface/call.cc +31 -17
  98. data/src/core/lib/surface/call.h +5 -0
  99. data/src/core/lib/surface/channel.cc +2 -5
  100. data/src/core/lib/surface/completion_queue.cc +1 -3
  101. data/src/core/lib/surface/completion_queue.h +0 -1
  102. data/src/core/lib/surface/init.cc +7 -8
  103. data/src/core/lib/surface/version.cc +2 -2
  104. data/src/core/lib/transport/byte_stream.cc +1 -1
  105. data/src/core/lib/transport/transport.cc +2 -1
  106. data/src/core/lib/transport/transport.h +4 -8
  107. data/src/core/lib/transport/transport_op_string.cc +1 -1
  108. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +19 -7
  109. data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +10 -0
  110. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +28 -2
  111. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker_private.h +3 -0
  112. data/src/core/tsi/fake_transport_security.cc +1 -0
  113. data/src/core/tsi/ssl_transport_security.cc +238 -110
  114. data/src/core/tsi/transport_security.cc +14 -0
  115. data/src/core/tsi/transport_security.h +2 -0
  116. data/src/core/tsi/transport_security_interface.h +11 -1
  117. data/src/ruby/bin/math_client.rb +17 -9
  118. data/src/ruby/lib/grpc/generic/rpc_server.rb +2 -1
  119. data/src/ruby/lib/grpc/version.rb +1 -1
  120. data/src/ruby/pb/grpc/health/v1/health_services_pb.rb +4 -1
  121. data/third_party/boringssl/crypto/asn1/a_int.c +33 -28
  122. data/third_party/boringssl/crypto/asn1/a_mbstr.c +24 -22
  123. data/third_party/boringssl/crypto/asn1/a_utf8.c +13 -11
  124. data/third_party/boringssl/crypto/asn1/asn1_locl.h +3 -0
  125. data/third_party/boringssl/crypto/bio/fd.c +1 -0
  126. data/third_party/boringssl/crypto/bio/file.c +2 -0
  127. data/third_party/boringssl/crypto/bn_extra/convert.c +6 -5
  128. data/third_party/boringssl/crypto/bytestring/ber.c +1 -4
  129. data/third_party/boringssl/crypto/bytestring/cbb.c +116 -16
  130. data/third_party/boringssl/crypto/bytestring/cbs.c +150 -20
  131. data/third_party/boringssl/crypto/cipher_extra/e_aesccm.c +171 -0
  132. data/third_party/boringssl/crypto/cipher_extra/e_rc2.c +2 -0
  133. data/third_party/boringssl/crypto/cipher_extra/e_tls.c +1 -2
  134. data/third_party/boringssl/crypto/cpu-aarch64-fuchsia.c +55 -0
  135. data/third_party/boringssl/crypto/cpu-aarch64-linux.c +2 -1
  136. data/third_party/boringssl/crypto/dsa/dsa.c +16 -54
  137. data/third_party/boringssl/crypto/fipsmodule/bcm.c +11 -542
  138. data/third_party/boringssl/crypto/fipsmodule/bn/add.c +33 -64
  139. data/third_party/boringssl/crypto/fipsmodule/bn/asm/x86_64-gcc.c +4 -3
  140. data/third_party/boringssl/crypto/fipsmodule/bn/bn.c +122 -70
  141. data/third_party/boringssl/crypto/fipsmodule/bn/bytes.c +32 -71
  142. data/third_party/boringssl/crypto/fipsmodule/bn/cmp.c +58 -112
  143. data/third_party/boringssl/crypto/fipsmodule/bn/div.c +198 -122
  144. data/third_party/boringssl/crypto/fipsmodule/bn/exponentiation.c +31 -65
  145. data/third_party/boringssl/crypto/fipsmodule/bn/generic.c +2 -1
  146. data/third_party/boringssl/crypto/fipsmodule/bn/internal.h +98 -15
  147. data/third_party/boringssl/crypto/fipsmodule/bn/jacobi.c +1 -1
  148. data/third_party/boringssl/crypto/fipsmodule/bn/montgomery.c +124 -81
  149. data/third_party/boringssl/crypto/fipsmodule/bn/montgomery_inv.c +8 -30
  150. data/third_party/boringssl/crypto/fipsmodule/bn/mul.c +303 -347
  151. data/third_party/boringssl/crypto/fipsmodule/bn/prime.c +2 -3
  152. data/third_party/boringssl/crypto/fipsmodule/bn/random.c +3 -4
  153. data/third_party/boringssl/crypto/fipsmodule/bn/rsaz_exp.c +199 -222
  154. data/third_party/boringssl/crypto/fipsmodule/bn/rsaz_exp.h +27 -47
  155. data/third_party/boringssl/crypto/fipsmodule/bn/shift.c +45 -28
  156. data/third_party/boringssl/crypto/fipsmodule/bn/sqrt.c +1 -1
  157. data/third_party/boringssl/crypto/fipsmodule/cipher/e_aes.c +10 -10
  158. data/third_party/boringssl/crypto/fipsmodule/des/internal.h +2 -0
  159. data/third_party/boringssl/crypto/fipsmodule/ec/ec.c +78 -47
  160. data/third_party/boringssl/crypto/fipsmodule/ec/ec_key.c +35 -54
  161. data/third_party/boringssl/crypto/fipsmodule/ec/ec_montgomery.c +3 -10
  162. data/third_party/boringssl/crypto/fipsmodule/ec/internal.h +36 -22
  163. data/third_party/boringssl/crypto/fipsmodule/ec/oct.c +59 -90
  164. data/third_party/boringssl/crypto/fipsmodule/ec/p224-64.c +29 -48
  165. data/third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64.c +17 -26
  166. data/third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64.h +15 -11
  167. data/third_party/boringssl/crypto/fipsmodule/ec/simple.c +45 -51
  168. data/third_party/boringssl/crypto/fipsmodule/ec/{util-64.c → util.c} +0 -5
  169. data/third_party/boringssl/crypto/fipsmodule/ec/wnaf.c +144 -264
  170. data/third_party/boringssl/crypto/fipsmodule/ecdsa/ecdsa.c +78 -56
  171. data/third_party/boringssl/crypto/fipsmodule/modes/ccm.c +256 -0
  172. data/third_party/boringssl/crypto/fipsmodule/modes/internal.h +36 -32
  173. data/third_party/boringssl/crypto/fipsmodule/rand/ctrdrbg.c +9 -7
  174. data/third_party/boringssl/crypto/fipsmodule/rsa/rsa.c +16 -10
  175. data/third_party/boringssl/crypto/fipsmodule/rsa/rsa_impl.c +255 -102
  176. data/third_party/boringssl/crypto/fipsmodule/self_check/self_check.c +581 -0
  177. data/third_party/boringssl/crypto/fipsmodule/tls/internal.h +39 -0
  178. data/third_party/boringssl/crypto/fipsmodule/tls/kdf.c +165 -0
  179. data/third_party/boringssl/crypto/internal.h +65 -2
  180. data/third_party/boringssl/crypto/mem.c +0 -2
  181. data/third_party/boringssl/crypto/obj/obj.c +6 -73
  182. data/third_party/boringssl/crypto/thread_pthread.c +35 -5
  183. data/third_party/boringssl/crypto/x509/a_strex.c +11 -11
  184. data/third_party/boringssl/crypto/x509/x_name.c +13 -0
  185. data/third_party/boringssl/include/openssl/aead.h +4 -0
  186. data/third_party/boringssl/include/openssl/asn1.h +1 -3
  187. data/third_party/boringssl/include/openssl/base.h +1 -14
  188. data/third_party/boringssl/include/openssl/bio.h +1 -1
  189. data/third_party/boringssl/include/openssl/bn.h +49 -15
  190. data/third_party/boringssl/include/openssl/bytestring.h +49 -24
  191. data/third_party/boringssl/include/openssl/crypto.h +4 -0
  192. data/third_party/boringssl/include/openssl/ec_key.h +7 -3
  193. data/third_party/boringssl/include/openssl/err.h +9 -9
  194. data/third_party/boringssl/include/openssl/evp.h +1 -1
  195. data/third_party/boringssl/include/openssl/rsa.h +34 -10
  196. data/third_party/boringssl/include/openssl/ssl.h +160 -17
  197. data/third_party/boringssl/include/openssl/stack.h +1 -1
  198. data/third_party/boringssl/include/openssl/tls1.h +10 -2
  199. data/third_party/boringssl/include/openssl/x509.h +3 -0
  200. data/third_party/boringssl/ssl/d1_both.cc +16 -2
  201. data/third_party/boringssl/ssl/dtls_method.cc +1 -1
  202. data/third_party/boringssl/ssl/handoff.cc +285 -0
  203. data/third_party/boringssl/ssl/handshake.cc +26 -12
  204. data/third_party/boringssl/ssl/handshake_client.cc +65 -31
  205. data/third_party/boringssl/ssl/handshake_server.cc +14 -2
  206. data/third_party/boringssl/ssl/internal.h +132 -79
  207. data/third_party/boringssl/ssl/s3_both.cc +2 -2
  208. data/third_party/boringssl/ssl/s3_lib.cc +3 -1
  209. data/third_party/boringssl/ssl/s3_pkt.cc +0 -18
  210. data/third_party/boringssl/ssl/ssl_aead_ctx.cc +1 -4
  211. data/third_party/boringssl/ssl/ssl_asn1.cc +47 -43
  212. data/third_party/boringssl/ssl/ssl_cipher.cc +8 -8
  213. data/third_party/boringssl/ssl/ssl_key_share.cc +3 -1
  214. data/third_party/boringssl/ssl/ssl_lib.cc +83 -14
  215. data/third_party/boringssl/ssl/ssl_privkey.cc +6 -0
  216. data/third_party/boringssl/ssl/ssl_stat.cc +6 -6
  217. data/third_party/boringssl/ssl/ssl_versions.cc +12 -85
  218. data/third_party/boringssl/ssl/ssl_x509.cc +59 -61
  219. data/third_party/boringssl/ssl/t1_enc.cc +73 -124
  220. data/third_party/boringssl/ssl/t1_lib.cc +367 -41
  221. data/third_party/boringssl/ssl/tls13_both.cc +8 -0
  222. data/third_party/boringssl/ssl/tls13_client.cc +98 -184
  223. data/third_party/boringssl/ssl/tls13_enc.cc +88 -158
  224. data/third_party/boringssl/ssl/tls13_server.cc +91 -137
  225. data/third_party/boringssl/ssl/tls_method.cc +0 -17
  226. data/third_party/boringssl/ssl/tls_record.cc +1 -10
  227. data/third_party/boringssl/third_party/fiat/curve25519.c +921 -2753
  228. data/third_party/boringssl/third_party/fiat/curve25519_tables.h +7880 -0
  229. data/third_party/boringssl/third_party/fiat/internal.h +32 -20
  230. data/third_party/boringssl/third_party/fiat/p256.c +1824 -0
  231. metadata +64 -64
  232. data/src/core/lib/channel/channel_trace_registry.cc +0 -80
  233. data/src/core/lib/channel/channel_trace_registry.h +0 -43
  234. data/src/core/lib/gpr/fork.cc +0 -78
  235. data/src/core/lib/gpr/fork.h +0 -35
  236. data/src/core/tsi/transport_security_adapter.cc +0 -235
  237. data/src/core/tsi/transport_security_adapter.h +0 -41
  238. data/src/ruby/bin/apis/google/protobuf/empty.rb +0 -29
  239. data/src/ruby/bin/apis/pubsub_demo.rb +0 -241
  240. data/src/ruby/bin/apis/tech/pubsub/proto/pubsub.rb +0 -159
  241. data/src/ruby/bin/apis/tech/pubsub/proto/pubsub_services.rb +0 -88
  242. data/src/ruby/pb/test/client.rb +0 -764
  243. data/src/ruby/pb/test/server.rb +0 -252
  244. data/third_party/boringssl/crypto/curve25519/x25519-x86_64.c +0 -247
  245. data/third_party/boringssl/crypto/fipsmodule/ec/p256-64.c +0 -1674
@@ -1,252 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- # Copyright 2015 gRPC authors.
4
- #
5
- # Licensed under the Apache License, Version 2.0 (the "License");
6
- # you may not use this file except in compliance with the License.
7
- # You may obtain a copy of the License at
8
- #
9
- # http://www.apache.org/licenses/LICENSE-2.0
10
- #
11
- # Unless required by applicable law or agreed to in writing, software
12
- # distributed under the License is distributed on an "AS IS" BASIS,
13
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
- # See the License for the specific language governing permissions and
15
- # limitations under the License.
16
-
17
- # interop_server is a Testing app that runs a gRPC interop testing server.
18
- #
19
- # It helps validate interoperation b/w gRPC in different environments
20
- #
21
- # Helps validate interoperation b/w different gRPC implementations.
22
- #
23
- # Usage: $ path/to/interop_server.rb --port
24
-
25
- this_dir = File.expand_path(File.dirname(__FILE__))
26
- lib_dir = File.join(File.dirname(File.dirname(this_dir)), 'lib')
27
- pb_dir = File.dirname(this_dir)
28
- $LOAD_PATH.unshift(lib_dir) unless $LOAD_PATH.include?(lib_dir)
29
- $LOAD_PATH.unshift(pb_dir) unless $LOAD_PATH.include?(pb_dir)
30
- $LOAD_PATH.unshift(this_dir) unless $LOAD_PATH.include?(this_dir)
31
-
32
- require 'forwardable'
33
- require 'logger'
34
- require 'optparse'
35
-
36
- require 'grpc'
37
-
38
- require_relative '../src/proto/grpc/testing/empty_pb'
39
- require_relative '../src/proto/grpc/testing/messages_pb'
40
- require_relative '../src/proto/grpc/testing/test_services_pb'
41
-
42
- # DebugIsTruncated extends the default Logger to truncate debug messages
43
- class DebugIsTruncated < Logger
44
- def debug(s)
45
- super(truncate(s, 1024))
46
- end
47
-
48
- # Truncates a given +text+ after a given <tt>length</tt> if +text+ is longer than <tt>length</tt>:
49
- #
50
- # 'Once upon a time in a world far far away'.truncate(27)
51
- # # => "Once upon a time in a wo..."
52
- #
53
- # Pass a string or regexp <tt>:separator</tt> to truncate +text+ at a natural break:
54
- #
55
- # 'Once upon a time in a world far far away'.truncate(27, separator: ' ')
56
- # # => "Once upon a time in a..."
57
- #
58
- # 'Once upon a time in a world far far away'.truncate(27, separator: /\s/)
59
- # # => "Once upon a time in a..."
60
- #
61
- # The last characters will be replaced with the <tt>:omission</tt> string (defaults to "...")
62
- # for a total length not exceeding <tt>length</tt>:
63
- #
64
- # 'And they found that many people were sleeping better.'.truncate(25, omission: '... (continued)')
65
- # # => "And they f... (continued)"
66
- def truncate(s, truncate_at, options = {})
67
- return s unless s.length > truncate_at
68
- omission = options[:omission] || '...'
69
- with_extra_room = truncate_at - omission.length
70
- stop = \
71
- if options[:separator]
72
- rindex(options[:separator], with_extra_room) || with_extra_room
73
- else
74
- with_extra_room
75
- end
76
- "#{s[0, stop]}#{omission}"
77
- end
78
- end
79
-
80
- # RubyLogger defines a logger for gRPC based on the standard ruby logger.
81
- module RubyLogger
82
- def logger
83
- LOGGER
84
- end
85
-
86
- LOGGER = DebugIsTruncated.new(STDOUT)
87
- LOGGER.level = Logger::WARN
88
- end
89
-
90
- # GRPC is the general RPC module
91
- module GRPC
92
- # Inject the noop #logger if no module-level logger method has been injected.
93
- extend RubyLogger
94
- end
95
-
96
- # loads the certificates by the test server.
97
- def load_test_certs
98
- this_dir = File.expand_path(File.dirname(__FILE__))
99
- data_dir = File.join(File.dirname(File.dirname(this_dir)), 'spec/testdata')
100
- files = ['ca.pem', 'server1.key', 'server1.pem']
101
- files.map { |f| File.open(File.join(data_dir, f)).read }
102
- end
103
-
104
- # creates a ServerCredentials from the test certificates.
105
- def test_server_creds
106
- certs = load_test_certs
107
- GRPC::Core::ServerCredentials.new(
108
- nil, [{private_key: certs[1], cert_chain: certs[2]}], false)
109
- end
110
-
111
- # produces a string of null chars (\0) of length l.
112
- def nulls(l)
113
- fail 'requires #{l} to be +ve' if l < 0
114
- [].pack('x' * l).force_encoding('ascii-8bit')
115
- end
116
-
117
- def maybe_echo_metadata(_call)
118
-
119
- # these are consistent for all interop tests
120
- initial_metadata_key = "x-grpc-test-echo-initial"
121
- trailing_metadata_key = "x-grpc-test-echo-trailing-bin"
122
-
123
- if _call.metadata.has_key?(initial_metadata_key)
124
- _call.metadata_to_send[initial_metadata_key] = _call.metadata[initial_metadata_key]
125
- end
126
- if _call.metadata.has_key?(trailing_metadata_key)
127
- _call.output_metadata[trailing_metadata_key] = _call.metadata[trailing_metadata_key]
128
- end
129
- end
130
-
131
- def maybe_echo_status_and_message(req)
132
- unless req.response_status.nil?
133
- fail GRPC::BadStatus.new_status_exception(
134
- req.response_status.code, req.response_status.message)
135
- end
136
- end
137
-
138
- # A FullDuplexEnumerator passes requests to a block and yields generated responses
139
- class FullDuplexEnumerator
140
- include Grpc::Testing
141
- include Grpc::Testing::PayloadType
142
-
143
- def initialize(requests)
144
- @requests = requests
145
- end
146
- def each_item
147
- return enum_for(:each_item) unless block_given?
148
- GRPC.logger.info('interop-server: started receiving')
149
- begin
150
- cls = StreamingOutputCallResponse
151
- @requests.each do |req|
152
- maybe_echo_status_and_message(req)
153
- req.response_parameters.each do |params|
154
- resp_size = params.size
155
- GRPC.logger.info("read a req, response size is #{resp_size}")
156
- yield cls.new(payload: Payload.new(type: req.response_type,
157
- body: nulls(resp_size)))
158
- end
159
- end
160
- GRPC.logger.info('interop-server: finished receiving')
161
- rescue StandardError => e
162
- GRPC.logger.info('interop-server: failed')
163
- GRPC.logger.warn(e)
164
- fail e
165
- end
166
- end
167
- end
168
-
169
- # A runnable implementation of the schema-specified testing service, with each
170
- # service method implemented as required by the interop testing spec.
171
- class TestTarget < Grpc::Testing::TestService::Service
172
- include Grpc::Testing
173
- include Grpc::Testing::PayloadType
174
-
175
- def empty_call(_empty, _call)
176
- Empty.new
177
- end
178
-
179
- def unary_call(simple_req, _call)
180
- maybe_echo_metadata(_call)
181
- maybe_echo_status_and_message(simple_req)
182
- req_size = simple_req.response_size
183
- SimpleResponse.new(payload: Payload.new(type: :COMPRESSABLE,
184
- body: nulls(req_size)))
185
- end
186
-
187
- def streaming_input_call(call)
188
- sizes = call.each_remote_read.map { |x| x.payload.body.length }
189
- sum = sizes.inject(0) { |s, x| s + x }
190
- StreamingInputCallResponse.new(aggregated_payload_size: sum)
191
- end
192
-
193
- def streaming_output_call(req, _call)
194
- cls = StreamingOutputCallResponse
195
- req.response_parameters.map do |p|
196
- cls.new(payload: Payload.new(type: req.response_type,
197
- body: nulls(p.size)))
198
- end
199
- end
200
-
201
- def full_duplex_call(reqs, _call)
202
- maybe_echo_metadata(_call)
203
- # reqs is a lazy Enumerator of the requests sent by the client.
204
- FullDuplexEnumerator.new(reqs).each_item
205
- end
206
-
207
- def half_duplex_call(reqs)
208
- # TODO: update with unique behaviour of the half_duplex_call if that's
209
- # ever required by any of the tests.
210
- full_duplex_call(reqs)
211
- end
212
- end
213
-
214
- # validates the command line options, returning them as a Hash.
215
- def parse_options
216
- options = {
217
- 'port' => nil,
218
- 'secure' => false
219
- }
220
- OptionParser.new do |opts|
221
- opts.banner = 'Usage: --port port'
222
- opts.on('--port PORT', 'server port') do |v|
223
- options['port'] = v
224
- end
225
- opts.on('--use_tls USE_TLS', ['false', 'true'],
226
- 'require a secure connection?') do |v|
227
- options['secure'] = v == 'true'
228
- end
229
- end.parse!
230
-
231
- if options['port'].nil?
232
- fail(OptionParser::MissingArgument, 'please specify --port')
233
- end
234
- options
235
- end
236
-
237
- def main
238
- opts = parse_options
239
- host = "0.0.0.0:#{opts['port']}"
240
- s = GRPC::RpcServer.new
241
- if opts['secure']
242
- s.add_http2_port(host, test_server_creds)
243
- GRPC.logger.info("... running securely on #{host}")
244
- else
245
- s.add_http2_port(host, :this_port_is_insecure)
246
- GRPC.logger.info("... running insecurely on #{host}")
247
- end
248
- s.handle(TestTarget)
249
- s.run_till_terminated
250
- end
251
-
252
- main
@@ -1,247 +0,0 @@
1
- /* Copyright (c) 2015, Google Inc.
2
- *
3
- * Permission to use, copy, modify, and/or distribute this software for any
4
- * purpose with or without fee is hereby granted, provided that the above
5
- * copyright notice and this permission notice appear in all copies.
6
- *
7
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
8
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
9
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
10
- * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
11
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
12
- * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
13
- * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */
14
-
15
- // This code is mostly taken from the ref10 version of Ed25519 in SUPERCOP
16
- // 20141124 (http://bench.cr.yp.to/supercop.html). That code is released as
17
- // public domain but this file has the ISC license just to keep licencing
18
- // simple.
19
- //
20
- // The field functions are shared by Ed25519 and X25519 where possible.
21
-
22
- #include <openssl/curve25519.h>
23
-
24
- #include <string.h>
25
-
26
- #include "../internal.h"
27
- #include "../../third_party/fiat/internal.h"
28
-
29
-
30
- #if defined(BORINGSSL_X25519_X86_64)
31
-
32
- typedef struct { uint64_t v[5]; } fe25519;
33
-
34
- // These functions are defined in asm/x25519-x86_64.S
35
- void x25519_x86_64_work_cswap(fe25519 *, uint64_t);
36
- void x25519_x86_64_mul(fe25519 *out, const fe25519 *a, const fe25519 *b);
37
- void x25519_x86_64_square(fe25519 *out, const fe25519 *a);
38
- void x25519_x86_64_freeze(fe25519 *);
39
- void x25519_x86_64_ladderstep(fe25519 *work);
40
-
41
- static void fe25519_setint(fe25519 *r, unsigned v) {
42
- r->v[0] = v;
43
- r->v[1] = 0;
44
- r->v[2] = 0;
45
- r->v[3] = 0;
46
- r->v[4] = 0;
47
- }
48
-
49
- // Assumes input x being reduced below 2^255
50
- static void fe25519_pack(unsigned char r[32], const fe25519 *x) {
51
- fe25519 t;
52
- t = *x;
53
- x25519_x86_64_freeze(&t);
54
-
55
- r[0] = (uint8_t)(t.v[0] & 0xff);
56
- r[1] = (uint8_t)((t.v[0] >> 8) & 0xff);
57
- r[2] = (uint8_t)((t.v[0] >> 16) & 0xff);
58
- r[3] = (uint8_t)((t.v[0] >> 24) & 0xff);
59
- r[4] = (uint8_t)((t.v[0] >> 32) & 0xff);
60
- r[5] = (uint8_t)((t.v[0] >> 40) & 0xff);
61
- r[6] = (uint8_t)((t.v[0] >> 48));
62
-
63
- r[6] ^= (uint8_t)((t.v[1] << 3) & 0xf8);
64
- r[7] = (uint8_t)((t.v[1] >> 5) & 0xff);
65
- r[8] = (uint8_t)((t.v[1] >> 13) & 0xff);
66
- r[9] = (uint8_t)((t.v[1] >> 21) & 0xff);
67
- r[10] = (uint8_t)((t.v[1] >> 29) & 0xff);
68
- r[11] = (uint8_t)((t.v[1] >> 37) & 0xff);
69
- r[12] = (uint8_t)((t.v[1] >> 45));
70
-
71
- r[12] ^= (uint8_t)((t.v[2] << 6) & 0xc0);
72
- r[13] = (uint8_t)((t.v[2] >> 2) & 0xff);
73
- r[14] = (uint8_t)((t.v[2] >> 10) & 0xff);
74
- r[15] = (uint8_t)((t.v[2] >> 18) & 0xff);
75
- r[16] = (uint8_t)((t.v[2] >> 26) & 0xff);
76
- r[17] = (uint8_t)((t.v[2] >> 34) & 0xff);
77
- r[18] = (uint8_t)((t.v[2] >> 42) & 0xff);
78
- r[19] = (uint8_t)((t.v[2] >> 50));
79
-
80
- r[19] ^= (uint8_t)((t.v[3] << 1) & 0xfe);
81
- r[20] = (uint8_t)((t.v[3] >> 7) & 0xff);
82
- r[21] = (uint8_t)((t.v[3] >> 15) & 0xff);
83
- r[22] = (uint8_t)((t.v[3] >> 23) & 0xff);
84
- r[23] = (uint8_t)((t.v[3] >> 31) & 0xff);
85
- r[24] = (uint8_t)((t.v[3] >> 39) & 0xff);
86
- r[25] = (uint8_t)((t.v[3] >> 47));
87
-
88
- r[25] ^= (uint8_t)((t.v[4] << 4) & 0xf0);
89
- r[26] = (uint8_t)((t.v[4] >> 4) & 0xff);
90
- r[27] = (uint8_t)((t.v[4] >> 12) & 0xff);
91
- r[28] = (uint8_t)((t.v[4] >> 20) & 0xff);
92
- r[29] = (uint8_t)((t.v[4] >> 28) & 0xff);
93
- r[30] = (uint8_t)((t.v[4] >> 36) & 0xff);
94
- r[31] = (uint8_t)((t.v[4] >> 44));
95
- }
96
-
97
- static void fe25519_unpack(fe25519 *r, const uint8_t x[32]) {
98
- r->v[0] = x[0];
99
- r->v[0] += (uint64_t)x[1] << 8;
100
- r->v[0] += (uint64_t)x[2] << 16;
101
- r->v[0] += (uint64_t)x[3] << 24;
102
- r->v[0] += (uint64_t)x[4] << 32;
103
- r->v[0] += (uint64_t)x[5] << 40;
104
- r->v[0] += ((uint64_t)x[6] & 7) << 48;
105
-
106
- r->v[1] = x[6] >> 3;
107
- r->v[1] += (uint64_t)x[7] << 5;
108
- r->v[1] += (uint64_t)x[8] << 13;
109
- r->v[1] += (uint64_t)x[9] << 21;
110
- r->v[1] += (uint64_t)x[10] << 29;
111
- r->v[1] += (uint64_t)x[11] << 37;
112
- r->v[1] += ((uint64_t)x[12] & 63) << 45;
113
-
114
- r->v[2] = x[12] >> 6;
115
- r->v[2] += (uint64_t)x[13] << 2;
116
- r->v[2] += (uint64_t)x[14] << 10;
117
- r->v[2] += (uint64_t)x[15] << 18;
118
- r->v[2] += (uint64_t)x[16] << 26;
119
- r->v[2] += (uint64_t)x[17] << 34;
120
- r->v[2] += (uint64_t)x[18] << 42;
121
- r->v[2] += ((uint64_t)x[19] & 1) << 50;
122
-
123
- r->v[3] = x[19] >> 1;
124
- r->v[3] += (uint64_t)x[20] << 7;
125
- r->v[3] += (uint64_t)x[21] << 15;
126
- r->v[3] += (uint64_t)x[22] << 23;
127
- r->v[3] += (uint64_t)x[23] << 31;
128
- r->v[3] += (uint64_t)x[24] << 39;
129
- r->v[3] += ((uint64_t)x[25] & 15) << 47;
130
-
131
- r->v[4] = x[25] >> 4;
132
- r->v[4] += (uint64_t)x[26] << 4;
133
- r->v[4] += (uint64_t)x[27] << 12;
134
- r->v[4] += (uint64_t)x[28] << 20;
135
- r->v[4] += (uint64_t)x[29] << 28;
136
- r->v[4] += (uint64_t)x[30] << 36;
137
- r->v[4] += ((uint64_t)x[31] & 127) << 44;
138
- }
139
-
140
- static void fe25519_invert(fe25519 *r, const fe25519 *x) {
141
- fe25519 z2;
142
- fe25519 z9;
143
- fe25519 z11;
144
- fe25519 z2_5_0;
145
- fe25519 z2_10_0;
146
- fe25519 z2_20_0;
147
- fe25519 z2_50_0;
148
- fe25519 z2_100_0;
149
- fe25519 t;
150
- int i;
151
-
152
- /* 2 */ x25519_x86_64_square(&z2, x);
153
- /* 4 */ x25519_x86_64_square(&t, &z2);
154
- /* 8 */ x25519_x86_64_square(&t, &t);
155
- /* 9 */ x25519_x86_64_mul(&z9, &t, x);
156
- /* 11 */ x25519_x86_64_mul(&z11, &z9, &z2);
157
- /* 22 */ x25519_x86_64_square(&t, &z11);
158
- /* 2^5 - 2^0 = 31 */ x25519_x86_64_mul(&z2_5_0, &t, &z9);
159
-
160
- /* 2^6 - 2^1 */ x25519_x86_64_square(&t, &z2_5_0);
161
- /* 2^20 - 2^10 */ for (i = 1; i < 5; i++) { x25519_x86_64_square(&t, &t); }
162
- /* 2^10 - 2^0 */ x25519_x86_64_mul(&z2_10_0, &t, &z2_5_0);
163
-
164
- /* 2^11 - 2^1 */ x25519_x86_64_square(&t, &z2_10_0);
165
- /* 2^20 - 2^10 */ for (i = 1; i < 10; i++) { x25519_x86_64_square(&t, &t); }
166
- /* 2^20 - 2^0 */ x25519_x86_64_mul(&z2_20_0, &t, &z2_10_0);
167
-
168
- /* 2^21 - 2^1 */ x25519_x86_64_square(&t, &z2_20_0);
169
- /* 2^40 - 2^20 */ for (i = 1; i < 20; i++) { x25519_x86_64_square(&t, &t); }
170
- /* 2^40 - 2^0 */ x25519_x86_64_mul(&t, &t, &z2_20_0);
171
-
172
- /* 2^41 - 2^1 */ x25519_x86_64_square(&t, &t);
173
- /* 2^50 - 2^10 */ for (i = 1; i < 10; i++) { x25519_x86_64_square(&t, &t); }
174
- /* 2^50 - 2^0 */ x25519_x86_64_mul(&z2_50_0, &t, &z2_10_0);
175
-
176
- /* 2^51 - 2^1 */ x25519_x86_64_square(&t, &z2_50_0);
177
- /* 2^100 - 2^50 */ for (i = 1; i < 50; i++) { x25519_x86_64_square(&t, &t); }
178
- /* 2^100 - 2^0 */ x25519_x86_64_mul(&z2_100_0, &t, &z2_50_0);
179
-
180
- /* 2^101 - 2^1 */ x25519_x86_64_square(&t, &z2_100_0);
181
- /* 2^200 - 2^100 */ for (i = 1; i < 100; i++) {
182
- x25519_x86_64_square(&t, &t);
183
- }
184
- /* 2^200 - 2^0 */ x25519_x86_64_mul(&t, &t, &z2_100_0);
185
-
186
- /* 2^201 - 2^1 */ x25519_x86_64_square(&t, &t);
187
- /* 2^250 - 2^50 */ for (i = 1; i < 50; i++) { x25519_x86_64_square(&t, &t); }
188
- /* 2^250 - 2^0 */ x25519_x86_64_mul(&t, &t, &z2_50_0);
189
-
190
- /* 2^251 - 2^1 */ x25519_x86_64_square(&t, &t);
191
- /* 2^252 - 2^2 */ x25519_x86_64_square(&t, &t);
192
- /* 2^253 - 2^3 */ x25519_x86_64_square(&t, &t);
193
-
194
- /* 2^254 - 2^4 */ x25519_x86_64_square(&t, &t);
195
-
196
- /* 2^255 - 2^5 */ x25519_x86_64_square(&t, &t);
197
- /* 2^255 - 21 */ x25519_x86_64_mul(r, &t, &z11);
198
- }
199
-
200
- static void mladder(fe25519 *xr, fe25519 *zr, const uint8_t s[32]) {
201
- fe25519 work[5];
202
-
203
- work[0] = *xr;
204
- fe25519_setint(work + 1, 1);
205
- fe25519_setint(work + 2, 0);
206
- work[3] = *xr;
207
- fe25519_setint(work + 4, 1);
208
-
209
- int i, j;
210
- uint8_t prevbit = 0;
211
-
212
- j = 6;
213
- for (i = 31; i >= 0; i--) {
214
- while (j >= 0) {
215
- const uint8_t bit = 1 & (s[i] >> j);
216
- const uint64_t swap = bit ^ prevbit;
217
- prevbit = bit;
218
- x25519_x86_64_work_cswap(work + 1, swap);
219
- x25519_x86_64_ladderstep(work);
220
- j -= 1;
221
- }
222
- j = 7;
223
- }
224
-
225
- *xr = work[1];
226
- *zr = work[2];
227
- }
228
-
229
- void x25519_x86_64(uint8_t out[32], const uint8_t scalar[32],
230
- const uint8_t point[32]) {
231
- uint8_t e[32];
232
- OPENSSL_memcpy(e, scalar, sizeof(e));
233
-
234
- e[0] &= 248;
235
- e[31] &= 127;
236
- e[31] |= 64;
237
-
238
- fe25519 t;
239
- fe25519 z;
240
- fe25519_unpack(&t, point);
241
- mladder(&t, &z, e);
242
- fe25519_invert(&z, &z);
243
- x25519_x86_64_mul(&t, &t, &z);
244
- fe25519_pack(out, &t);
245
- }
246
-
247
- #endif // BORINGSSL_X25519_X86_64