grpc 0.12.0 → 0.13.0.pre1.1

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 (673) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +5707 -22222
  3. data/include/grpc/byte_buffer.h +2 -83
  4. data/include/grpc/census.h +191 -121
  5. data/include/grpc/compression.h +14 -38
  6. data/include/grpc/grpc.h +88 -434
  7. data/include/grpc/grpc_security.h +76 -46
  8. data/include/grpc/grpc_zookeeper.h +1 -1
  9. data/include/grpc/impl/codegen/alloc.h +74 -0
  10. data/include/grpc/impl/codegen/atm.h +92 -0
  11. data/include/grpc/impl/codegen/atm_gcc_atomic.h +72 -0
  12. data/include/grpc/impl/codegen/atm_gcc_sync.h +87 -0
  13. data/include/grpc/impl/codegen/atm_win32.h +125 -0
  14. data/include/grpc/impl/codegen/byte_buffer.h +121 -0
  15. data/include/grpc/impl/codegen/compression_types.h +73 -0
  16. data/include/grpc/impl/codegen/connectivity_state.h +59 -0
  17. data/include/grpc/impl/codegen/grpc_types.h +373 -0
  18. data/include/grpc/impl/codegen/log.h +110 -0
  19. data/include/grpc/impl/codegen/port_platform.h +362 -0
  20. data/include/grpc/impl/codegen/propagation_bits.h +67 -0
  21. data/include/grpc/impl/codegen/slice.h +182 -0
  22. data/include/grpc/impl/codegen/slice_buffer.h +105 -0
  23. data/include/grpc/impl/codegen/status.h +163 -0
  24. data/include/grpc/impl/codegen/sync.h +316 -0
  25. data/include/grpc/impl/codegen/sync_generic.h +55 -0
  26. data/{src/core/census/context.h → include/grpc/impl/codegen/sync_posix.h} +11 -11
  27. data/include/grpc/impl/codegen/sync_win32.h +49 -0
  28. data/include/grpc/impl/codegen/time.h +132 -0
  29. data/include/grpc/status.h +2 -126
  30. data/include/grpc/support/alloc.h +2 -35
  31. data/include/grpc/support/atm.h +2 -55
  32. data/include/grpc/support/atm_gcc_atomic.h +5 -38
  33. data/include/grpc/support/atm_gcc_sync.h +2 -50
  34. data/include/grpc/support/atm_win32.h +2 -88
  35. data/include/grpc/support/avl.h +7 -7
  36. data/include/grpc/support/cmdline.h +15 -13
  37. data/include/grpc/support/cpu.h +5 -3
  38. data/include/grpc/support/histogram.h +23 -20
  39. data/include/grpc/support/host_port.h +5 -3
  40. data/include/grpc/support/log.h +2 -71
  41. data/include/grpc/support/log_win32.h +2 -2
  42. data/include/grpc/support/port_platform.h +2 -319
  43. data/include/grpc/support/slice.h +2 -145
  44. data/include/grpc/support/slice_buffer.h +2 -65
  45. data/include/grpc/support/string_util.h +3 -3
  46. data/include/grpc/support/subprocess.h +8 -6
  47. data/include/grpc/support/sync.h +2 -278
  48. data/include/grpc/support/sync_generic.h +2 -18
  49. data/include/grpc/support/sync_posix.h +2 -10
  50. data/include/grpc/support/sync_win32.h +2 -12
  51. data/include/grpc/support/thd.h +11 -11
  52. data/include/grpc/support/time.h +2 -91
  53. data/include/grpc/support/tls.h +1 -1
  54. data/include/grpc/support/tls_gcc.h +1 -1
  55. data/include/grpc/support/tls_msvc.h +1 -1
  56. data/include/grpc/support/tls_pthread.h +2 -2
  57. data/src/boringssl/err_data.c +1252 -0
  58. data/src/core/census/context.c +492 -8
  59. data/src/core/census/grpc_filter.c +3 -3
  60. data/src/core/census/initialize.c +4 -7
  61. data/src/core/census/operation.c +2 -2
  62. data/src/core/census/placeholders.c +109 -0
  63. data/src/core/census/rpc_metric_id.h +6 -6
  64. data/src/core/census/tracing.c +1 -1
  65. data/src/core/channel/channel_args.c +4 -3
  66. data/src/core/channel/channel_stack.c +1 -1
  67. data/src/core/channel/client_channel.c +18 -14
  68. data/src/core/channel/client_uchannel.c +3 -3
  69. data/src/core/channel/compress_filter.c +8 -8
  70. data/src/core/channel/http_client_filter.c +2 -2
  71. data/src/core/channel/http_server_filter.c +9 -9
  72. data/src/core/channel/subchannel_call_holder.c +12 -10
  73. data/src/core/client_config/lb_policies/pick_first.c +49 -31
  74. data/src/core/client_config/lb_policies/round_robin.c +7 -7
  75. data/src/core/client_config/resolvers/dns_resolver.c +3 -3
  76. data/src/core/client_config/resolvers/sockaddr_resolver.c +5 -5
  77. data/src/core/client_config/subchannel.c +36 -25
  78. data/src/core/compression/algorithm.c +3 -3
  79. data/src/core/httpcli/format_request.c +1 -1
  80. data/src/core/httpcli/httpcli.c +5 -5
  81. data/src/core/httpcli/httpcli_security_connector.c +2 -3
  82. data/src/core/httpcli/parser.c +7 -7
  83. data/src/core/httpcli/parser.h +1 -1
  84. data/src/core/iomgr/closure.c +7 -7
  85. data/src/core/iomgr/closure.h +6 -5
  86. data/src/core/iomgr/exec_ctx.c +12 -8
  87. data/src/core/iomgr/exec_ctx.h +12 -5
  88. data/src/core/iomgr/executor.c +4 -4
  89. data/src/core/iomgr/executor.h +2 -2
  90. data/src/core/iomgr/fd_posix.c +28 -17
  91. data/src/core/iomgr/fd_posix.h +7 -4
  92. data/src/core/iomgr/iocp_windows.c +6 -8
  93. data/src/core/iomgr/pollset_multipoller_with_epoll.c +70 -5
  94. data/src/core/iomgr/pollset_multipoller_with_poll_posix.c +4 -2
  95. data/src/core/iomgr/pollset_posix.c +15 -15
  96. data/src/core/iomgr/pollset_posix.h +4 -2
  97. data/src/core/iomgr/pollset_windows.c +3 -12
  98. data/src/core/iomgr/resolve_address_posix.c +2 -2
  99. data/src/core/iomgr/resolve_address_windows.c +2 -2
  100. data/src/core/iomgr/sockaddr_utils.c +6 -6
  101. data/src/core/iomgr/sockaddr_win32.h +1 -6
  102. data/src/core/iomgr/tcp_client_posix.c +7 -7
  103. data/src/core/iomgr/tcp_client_windows.c +4 -4
  104. data/src/core/iomgr/tcp_posix.c +14 -8
  105. data/src/core/iomgr/tcp_posix.h +7 -1
  106. data/src/core/iomgr/tcp_server.h +40 -20
  107. data/src/core/iomgr/tcp_server_posix.c +106 -49
  108. data/src/core/iomgr/tcp_server_windows.c +98 -49
  109. data/src/core/iomgr/tcp_windows.c +11 -15
  110. data/src/core/iomgr/timer.c +8 -8
  111. data/src/core/iomgr/timer.h +1 -1
  112. data/src/core/iomgr/timer_heap.c +10 -10
  113. data/src/core/iomgr/timer_heap.h +2 -2
  114. data/src/core/iomgr/udp_server.c +2 -12
  115. data/src/core/iomgr/udp_server.h +1 -9
  116. data/src/core/iomgr/workqueue.h +2 -4
  117. data/src/core/iomgr/workqueue_posix.c +3 -3
  118. data/src/core/json/json_reader.c +11 -12
  119. data/src/core/json/json_reader.h +4 -4
  120. data/src/core/json/json_string.c +19 -19
  121. data/src/core/json/json_writer.c +7 -9
  122. data/src/core/profiling/basic_timers.c +1 -1
  123. data/src/core/security/base64.c +9 -9
  124. data/src/core/security/client_auth_filter.c +4 -4
  125. data/src/core/security/credentials.c +5 -5
  126. data/src/core/security/google_default_credentials.c +3 -3
  127. data/src/core/security/handshake.c +6 -5
  128. data/src/core/security/json_token.c +13 -7
  129. data/src/core/security/jwt_verifier.c +3 -2
  130. data/src/core/security/secure_endpoint.c +16 -16
  131. data/src/core/security/security_connector.c +47 -17
  132. data/src/core/security/security_connector.h +5 -5
  133. data/src/core/security/server_auth_filter.c +3 -3
  134. data/src/core/security/server_secure_chttp2.c +30 -31
  135. data/src/core/statistics/census_interface.h +2 -2
  136. data/src/core/statistics/census_rpc_stats.h +3 -3
  137. data/src/core/support/alloc.c +1 -1
  138. data/src/core/support/cpu_posix.c +2 -2
  139. data/src/core/support/env_linux.c +12 -2
  140. data/src/core/support/env_win32.c +15 -7
  141. data/src/core/support/histogram.c +5 -5
  142. data/src/core/support/log_posix.c +1 -1
  143. data/src/core/support/log_win32.c +4 -3
  144. data/src/core/support/murmur_hash.c +11 -11
  145. data/src/core/support/murmur_hash.h +1 -1
  146. data/src/core/support/slice.c +11 -11
  147. data/src/core/support/slice_buffer.c +6 -6
  148. data/src/core/support/stack_lockfree.c +20 -10
  149. data/src/core/support/string.c +15 -15
  150. data/src/core/support/string.h +5 -5
  151. data/src/core/support/string_win32.c +5 -5
  152. data/src/core/support/subprocess_windows.c +141 -0
  153. data/src/core/support/sync.c +4 -4
  154. data/src/core/support/sync_posix.c +2 -2
  155. data/src/core/support/sync_win32.c +10 -5
  156. data/src/core/support/time.c +29 -29
  157. data/src/core/support/time_posix.c +15 -6
  158. data/src/core/support/time_precise.c +2 -2
  159. data/src/core/support/time_win32.c +18 -9
  160. data/src/core/support/tls_pthread.c +1 -1
  161. data/src/core/support/wrap_memcpy.c +53 -0
  162. data/src/core/surface/alarm.c +83 -0
  163. data/src/core/surface/byte_buffer_reader.c +1 -1
  164. data/src/core/surface/call.c +78 -69
  165. data/src/core/surface/call.h +2 -2
  166. data/src/core/surface/call_test_only.h +2 -2
  167. data/src/core/surface/channel.c +9 -9
  168. data/src/core/surface/channel.h +1 -1
  169. data/src/core/surface/channel_connectivity.c +3 -3
  170. data/src/core/surface/channel_create.c +3 -3
  171. data/src/core/surface/channel_ping.c +2 -2
  172. data/src/core/surface/completion_queue.c +11 -12
  173. data/src/core/surface/completion_queue.h +1 -1
  174. data/src/core/surface/init.c +7 -5
  175. data/src/core/surface/lame_client.c +3 -3
  176. data/src/core/surface/secure_channel_create.c +3 -3
  177. data/src/core/surface/server.c +28 -28
  178. data/src/core/surface/server_chttp2.c +8 -8
  179. data/src/core/surface/server_create.c +1 -4
  180. data/src/core/surface/validate_metadata.c +3 -3
  181. data/src/core/surface/version.c +2 -2
  182. data/src/core/transport/byte_stream.c +8 -6
  183. data/src/core/transport/byte_stream.h +6 -5
  184. data/src/core/transport/chttp2/bin_encoder.c +29 -29
  185. data/src/core/transport/chttp2/frame_data.c +29 -26
  186. data/src/core/transport/chttp2/frame_data.h +6 -6
  187. data/src/core/transport/chttp2/frame_goaway.c +30 -30
  188. data/src/core/transport/chttp2/frame_goaway.h +6 -6
  189. data/src/core/transport/chttp2/frame_ping.c +6 -6
  190. data/src/core/transport/chttp2/frame_ping.h +5 -5
  191. data/src/core/transport/chttp2/frame_rst_stream.c +18 -19
  192. data/src/core/transport/chttp2/frame_rst_stream.h +4 -4
  193. data/src/core/transport/chttp2/frame_settings.c +30 -30
  194. data/src/core/transport/chttp2/frame_settings.h +13 -13
  195. data/src/core/transport/chttp2/frame_window_update.c +17 -18
  196. data/src/core/transport/chttp2/frame_window_update.h +5 -7
  197. data/src/core/transport/chttp2/hpack_encoder.c +69 -73
  198. data/src/core/transport/chttp2/hpack_encoder.h +16 -16
  199. data/src/core/transport/chttp2/hpack_parser.c +167 -167
  200. data/src/core/transport/chttp2/hpack_parser.h +16 -16
  201. data/src/core/transport/chttp2/hpack_table.c +13 -13
  202. data/src/core/transport/chttp2/hpack_table.h +11 -11
  203. data/src/core/transport/chttp2/internal.h +97 -86
  204. data/src/core/transport/chttp2/parsing.c +25 -25
  205. data/src/core/transport/chttp2/stream_lists.c +26 -3
  206. data/src/core/transport/chttp2/stream_map.c +13 -14
  207. data/src/core/transport/chttp2/stream_map.h +6 -7
  208. data/src/core/transport/chttp2/timeout_encoding.c +19 -16
  209. data/src/core/transport/chttp2/varint.c +8 -9
  210. data/src/core/transport/chttp2/varint.h +7 -8
  211. data/src/core/transport/chttp2/writing.c +26 -23
  212. data/src/core/transport/chttp2_transport.c +133 -92
  213. data/src/core/transport/connectivity_state.c +6 -6
  214. data/src/core/transport/metadata.c +18 -18
  215. data/src/core/transport/metadata.h +5 -5
  216. data/src/core/transport/static_metadata.c +15 -16
  217. data/src/core/transport/static_metadata.h +5 -5
  218. data/src/core/transport/transport.c +5 -5
  219. data/src/core/transport/transport.h +14 -1
  220. data/src/core/tsi/fake_transport_security.c +7 -7
  221. data/src/core/tsi/ssl_transport_security.c +6 -4
  222. data/src/core/tsi/ssl_types.h +55 -0
  223. data/src/ruby/ext/grpc/extconf.rb +51 -14
  224. data/src/ruby/ext/grpc/rb_byte_buffer.c +3 -1
  225. data/src/ruby/ext/grpc/rb_call.c +6 -3
  226. data/src/ruby/ext/grpc/rb_call_credentials.c +4 -0
  227. data/src/ruby/ext/grpc/rb_channel.c +4 -2
  228. data/src/ruby/ext/grpc/rb_channel_args.c +3 -1
  229. data/src/ruby/ext/grpc/rb_channel_credentials.c +3 -1
  230. data/src/ruby/ext/grpc/rb_completion_queue.c +3 -1
  231. data/src/ruby/ext/grpc/rb_event_thread.c +5 -0
  232. data/src/ruby/ext/grpc/rb_grpc.c +11 -3
  233. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +560 -0
  234. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +843 -0
  235. data/src/ruby/ext/grpc/rb_loader.c +72 -0
  236. data/src/ruby/ext/grpc/rb_loader.h +40 -0
  237. data/src/ruby/ext/grpc/rb_server.c +3 -1
  238. data/src/ruby/ext/grpc/rb_server_credentials.c +4 -2
  239. data/src/ruby/lib/grpc/generic/bidi_call.rb +1 -1
  240. data/src/ruby/lib/grpc/generic/rpc_desc.rb +1 -1
  241. data/src/ruby/lib/grpc/generic/rpc_server.rb +1 -1
  242. data/src/ruby/lib/grpc/grpc.rb +34 -0
  243. data/src/ruby/lib/grpc/version.rb +1 -1
  244. data/src/ruby/spec/pb/health/checker_spec.rb +1 -1
  245. data/third_party/boringssl/crypto/aes/aes.c +1142 -0
  246. data/third_party/boringssl/crypto/aes/internal.h +87 -0
  247. data/third_party/boringssl/crypto/aes/mode_wrappers.c +108 -0
  248. data/third_party/boringssl/crypto/asn1/a_bitstr.c +255 -0
  249. data/third_party/boringssl/crypto/asn1/a_bool.c +112 -0
  250. data/third_party/boringssl/crypto/asn1/a_bytes.c +317 -0
  251. data/third_party/boringssl/crypto/asn1/a_d2i_fp.c +286 -0
  252. data/third_party/boringssl/crypto/asn1/a_dup.c +103 -0
  253. data/third_party/boringssl/crypto/asn1/a_enum.c +183 -0
  254. data/third_party/boringssl/crypto/asn1/a_gentm.c +255 -0
  255. data/third_party/boringssl/crypto/asn1/a_i2d_fp.c +154 -0
  256. data/third_party/boringssl/crypto/asn1/a_int.c +456 -0
  257. data/third_party/boringssl/crypto/asn1/a_mbstr.c +390 -0
  258. data/third_party/boringssl/crypto/asn1/a_object.c +412 -0
  259. data/third_party/boringssl/crypto/asn1/a_octet.c +70 -0
  260. data/third_party/boringssl/crypto/asn1/a_print.c +119 -0
  261. data/third_party/boringssl/crypto/asn1/a_strnid.c +286 -0
  262. data/third_party/boringssl/crypto/asn1/a_time.c +221 -0
  263. data/third_party/boringssl/crypto/asn1/a_type.c +160 -0
  264. data/third_party/boringssl/crypto/asn1/a_utctm.c +342 -0
  265. data/third_party/boringssl/crypto/asn1/a_utf8.c +210 -0
  266. data/third_party/boringssl/crypto/asn1/asn1_lib.c +510 -0
  267. data/third_party/boringssl/crypto/asn1/asn1_locl.h +73 -0
  268. data/third_party/boringssl/crypto/asn1/asn1_par.c +444 -0
  269. data/third_party/boringssl/crypto/asn1/asn_pack.c +104 -0
  270. data/third_party/boringssl/crypto/asn1/bio_asn1.c +496 -0
  271. data/third_party/boringssl/crypto/asn1/bio_ndef.c +254 -0
  272. data/third_party/boringssl/crypto/asn1/f_enum.c +206 -0
  273. data/third_party/boringssl/crypto/asn1/f_int.c +210 -0
  274. data/third_party/boringssl/crypto/asn1/f_string.c +204 -0
  275. data/third_party/boringssl/crypto/asn1/t_bitst.c +102 -0
  276. data/third_party/boringssl/crypto/asn1/t_pkey.c +112 -0
  277. data/third_party/boringssl/crypto/asn1/tasn_dec.c +1342 -0
  278. data/third_party/boringssl/crypto/asn1/tasn_enc.c +695 -0
  279. data/third_party/boringssl/crypto/asn1/tasn_fre.c +264 -0
  280. data/third_party/boringssl/crypto/asn1/tasn_new.c +398 -0
  281. data/third_party/boringssl/crypto/asn1/tasn_prn.c +642 -0
  282. data/third_party/boringssl/crypto/asn1/tasn_typ.c +137 -0
  283. data/third_party/boringssl/crypto/asn1/tasn_utl.c +266 -0
  284. data/third_party/boringssl/crypto/asn1/x_bignum.c +143 -0
  285. data/third_party/boringssl/crypto/asn1/x_long.c +182 -0
  286. data/third_party/boringssl/crypto/base64/base64.c +478 -0
  287. data/third_party/boringssl/crypto/bio/bio.c +608 -0
  288. data/third_party/boringssl/crypto/bio/bio_mem.c +327 -0
  289. data/third_party/boringssl/crypto/bio/buffer.c +496 -0
  290. data/third_party/boringssl/crypto/bio/connect.c +544 -0
  291. data/third_party/boringssl/crypto/bio/fd.c +270 -0
  292. data/third_party/boringssl/crypto/bio/file.c +349 -0
  293. data/third_party/boringssl/crypto/bio/hexdump.c +192 -0
  294. data/third_party/boringssl/crypto/bio/internal.h +108 -0
  295. data/third_party/boringssl/crypto/bio/pair.c +803 -0
  296. data/third_party/boringssl/crypto/bio/printf.c +119 -0
  297. data/third_party/boringssl/crypto/bio/socket.c +195 -0
  298. data/third_party/boringssl/crypto/bio/socket_helper.c +113 -0
  299. data/third_party/boringssl/crypto/bn/add.c +377 -0
  300. data/third_party/boringssl/crypto/bn/asm/x86_64-gcc.c +599 -0
  301. data/third_party/boringssl/crypto/bn/bn.c +341 -0
  302. data/third_party/boringssl/crypto/bn/bn_asn1.c +93 -0
  303. data/third_party/boringssl/crypto/bn/cmp.c +200 -0
  304. data/third_party/boringssl/crypto/bn/convert.c +597 -0
  305. data/third_party/boringssl/crypto/bn/ctx.c +311 -0
  306. data/third_party/boringssl/crypto/bn/div.c +625 -0
  307. data/third_party/boringssl/crypto/bn/exponentiation.c +1544 -0
  308. data/third_party/boringssl/crypto/bn/gcd.c +711 -0
  309. data/third_party/boringssl/crypto/bn/generic.c +1019 -0
  310. data/third_party/boringssl/crypto/bn/internal.h +294 -0
  311. data/third_party/boringssl/crypto/bn/kronecker.c +175 -0
  312. data/third_party/boringssl/crypto/bn/montgomery.c +561 -0
  313. data/third_party/boringssl/crypto/bn/mul.c +888 -0
  314. data/third_party/boringssl/crypto/bn/prime.c +845 -0
  315. data/third_party/boringssl/crypto/bn/random.c +326 -0
  316. data/third_party/boringssl/crypto/bn/rsaz_exp.c +326 -0
  317. data/third_party/boringssl/crypto/bn/rsaz_exp.h +56 -0
  318. data/third_party/boringssl/crypto/bn/shift.c +299 -0
  319. data/third_party/boringssl/crypto/bn/sqrt.c +505 -0
  320. data/third_party/boringssl/crypto/buf/buf.c +235 -0
  321. data/third_party/boringssl/crypto/bytestring/ber.c +221 -0
  322. data/third_party/boringssl/crypto/bytestring/cbb.c +411 -0
  323. data/third_party/boringssl/crypto/bytestring/cbs.c +415 -0
  324. data/third_party/boringssl/crypto/bytestring/internal.h +46 -0
  325. data/third_party/boringssl/crypto/chacha/chacha_generic.c +140 -0
  326. data/third_party/boringssl/crypto/chacha/chacha_vec.c +323 -0
  327. data/third_party/boringssl/crypto/cipher/aead.c +167 -0
  328. data/third_party/boringssl/crypto/cipher/cipher.c +652 -0
  329. data/third_party/boringssl/crypto/cipher/derive_key.c +154 -0
  330. data/third_party/boringssl/crypto/cipher/e_aes.c +1767 -0
  331. data/third_party/boringssl/crypto/cipher/e_chacha20poly1305.c +311 -0
  332. data/third_party/boringssl/crypto/cipher/e_des.c +207 -0
  333. data/third_party/boringssl/crypto/cipher/e_null.c +85 -0
  334. data/third_party/boringssl/crypto/cipher/e_rc2.c +443 -0
  335. data/third_party/boringssl/crypto/cipher/e_rc4.c +87 -0
  336. data/third_party/boringssl/crypto/cipher/e_ssl3.c +463 -0
  337. data/third_party/boringssl/crypto/cipher/e_tls.c +673 -0
  338. data/third_party/boringssl/crypto/cipher/internal.h +164 -0
  339. data/third_party/boringssl/crypto/cipher/tls_cbc.c +495 -0
  340. data/third_party/boringssl/crypto/cmac/cmac.c +239 -0
  341. data/third_party/boringssl/crypto/conf/conf.c +778 -0
  342. data/third_party/boringssl/crypto/conf/conf_def.h +127 -0
  343. data/third_party/boringssl/crypto/conf/internal.h +31 -0
  344. data/third_party/boringssl/crypto/cpu-arm.c +199 -0
  345. data/third_party/boringssl/crypto/cpu-intel.c +261 -0
  346. data/third_party/boringssl/crypto/crypto.c +140 -0
  347. data/third_party/boringssl/crypto/curve25519/curve25519.c +4897 -0
  348. data/third_party/boringssl/crypto/des/des.c +771 -0
  349. data/third_party/boringssl/crypto/des/internal.h +212 -0
  350. data/third_party/boringssl/crypto/dh/check.c +180 -0
  351. data/third_party/boringssl/crypto/dh/dh.c +463 -0
  352. data/third_party/boringssl/crypto/dh/dh_asn1.c +84 -0
  353. data/third_party/boringssl/crypto/dh/internal.h +80 -0
  354. data/third_party/boringssl/crypto/dh/params.c +301 -0
  355. data/third_party/boringssl/crypto/digest/digest.c +248 -0
  356. data/third_party/boringssl/crypto/digest/digests.c +321 -0
  357. data/third_party/boringssl/crypto/digest/internal.h +112 -0
  358. data/third_party/boringssl/crypto/digest/md32_common.h +322 -0
  359. data/third_party/boringssl/crypto/directory.h +66 -0
  360. data/third_party/boringssl/crypto/directory_posix.c +108 -0
  361. data/third_party/boringssl/crypto/directory_win.c +144 -0
  362. data/third_party/boringssl/crypto/dsa/dsa.c +908 -0
  363. data/third_party/boringssl/crypto/dsa/dsa_asn1.c +150 -0
  364. data/third_party/boringssl/crypto/dsa/internal.h +78 -0
  365. data/third_party/boringssl/crypto/ec/ec.c +889 -0
  366. data/third_party/boringssl/crypto/ec/ec_asn1.c +586 -0
  367. data/third_party/boringssl/crypto/ec/ec_key.c +482 -0
  368. data/third_party/boringssl/crypto/ec/ec_montgomery.c +280 -0
  369. data/third_party/boringssl/crypto/ec/internal.h +318 -0
  370. data/third_party/boringssl/crypto/ec/oct.c +416 -0
  371. data/third_party/boringssl/crypto/ec/p224-64.c +1305 -0
  372. data/third_party/boringssl/crypto/ec/p256-64.c +1878 -0
  373. data/third_party/boringssl/crypto/ec/p256-x86_64-table.h +9548 -0
  374. data/third_party/boringssl/crypto/ec/p256-x86_64.c +596 -0
  375. data/third_party/boringssl/crypto/ec/simple.c +1313 -0
  376. data/third_party/boringssl/crypto/ec/util-64.c +183 -0
  377. data/third_party/boringssl/crypto/ec/wnaf.c +449 -0
  378. data/third_party/boringssl/crypto/ecdh/ecdh.c +153 -0
  379. data/third_party/boringssl/crypto/ecdsa/ecdsa.c +496 -0
  380. data/third_party/boringssl/crypto/ecdsa/ecdsa_asn1.c +240 -0
  381. data/third_party/boringssl/crypto/engine/engine.c +96 -0
  382. data/third_party/boringssl/crypto/err/err.c +756 -0
  383. data/third_party/boringssl/crypto/evp/algorithm.c +153 -0
  384. data/third_party/boringssl/crypto/evp/digestsign.c +159 -0
  385. data/third_party/boringssl/crypto/evp/evp.c +411 -0
  386. data/third_party/boringssl/crypto/evp/evp_asn1.c +179 -0
  387. data/third_party/boringssl/crypto/evp/evp_ctx.c +477 -0
  388. data/third_party/boringssl/crypto/evp/internal.h +278 -0
  389. data/third_party/boringssl/crypto/evp/p_dsa_asn1.c +588 -0
  390. data/third_party/boringssl/crypto/evp/p_ec.c +283 -0
  391. data/third_party/boringssl/crypto/evp/p_ec_asn1.c +562 -0
  392. data/third_party/boringssl/crypto/evp/p_rsa.c +596 -0
  393. data/third_party/boringssl/crypto/evp/p_rsa_asn1.c +737 -0
  394. data/third_party/boringssl/crypto/evp/pbkdf.c +151 -0
  395. data/third_party/boringssl/crypto/evp/sign.c +151 -0
  396. data/third_party/boringssl/crypto/ex_data.c +294 -0
  397. data/third_party/boringssl/crypto/hkdf/hkdf.c +89 -0
  398. data/third_party/boringssl/crypto/hmac/hmac.c +213 -0
  399. data/third_party/boringssl/crypto/internal.h +532 -0
  400. data/third_party/boringssl/crypto/lhash/lhash.c +346 -0
  401. data/third_party/boringssl/crypto/md4/md4.c +225 -0
  402. data/third_party/boringssl/crypto/md5/md5.c +275 -0
  403. data/third_party/boringssl/crypto/mem.c +200 -0
  404. data/third_party/boringssl/crypto/modes/cbc.c +216 -0
  405. data/third_party/boringssl/crypto/modes/cfb.c +231 -0
  406. data/third_party/boringssl/crypto/modes/ctr.c +226 -0
  407. data/third_party/boringssl/crypto/modes/gcm.c +1252 -0
  408. data/third_party/boringssl/crypto/modes/internal.h +370 -0
  409. data/third_party/boringssl/crypto/modes/ofb.c +108 -0
  410. data/third_party/boringssl/crypto/obj/obj.c +664 -0
  411. data/third_party/boringssl/crypto/obj/obj_dat.h +5257 -0
  412. data/third_party/boringssl/crypto/obj/obj_xref.c +124 -0
  413. data/third_party/boringssl/crypto/obj/obj_xref.h +96 -0
  414. data/third_party/boringssl/crypto/pem/pem_all.c +281 -0
  415. data/third_party/boringssl/crypto/pem/pem_info.c +404 -0
  416. data/third_party/boringssl/crypto/pem/pem_lib.c +835 -0
  417. data/third_party/boringssl/crypto/pem/pem_oth.c +89 -0
  418. data/third_party/boringssl/crypto/pem/pem_pk8.c +244 -0
  419. data/third_party/boringssl/crypto/pem/pem_pkey.c +312 -0
  420. data/third_party/boringssl/crypto/pem/pem_x509.c +65 -0
  421. data/third_party/boringssl/crypto/pem/pem_xaux.c +66 -0
  422. data/third_party/boringssl/crypto/pkcs8/internal.h +83 -0
  423. data/third_party/boringssl/crypto/pkcs8/p5_pbe.c +150 -0
  424. data/third_party/boringssl/crypto/pkcs8/p5_pbev2.c +440 -0
  425. data/third_party/boringssl/crypto/pkcs8/p8_pkey.c +85 -0
  426. data/third_party/boringssl/crypto/pkcs8/pkcs8.c +1217 -0
  427. data/third_party/boringssl/crypto/poly1305/poly1305.c +331 -0
  428. data/third_party/boringssl/crypto/poly1305/poly1305_arm.c +301 -0
  429. data/third_party/boringssl/crypto/poly1305/poly1305_vec.c +892 -0
  430. data/third_party/boringssl/crypto/rand/internal.h +32 -0
  431. data/third_party/boringssl/crypto/rand/rand.c +239 -0
  432. data/third_party/boringssl/crypto/rand/urandom.c +223 -0
  433. data/third_party/boringssl/crypto/rand/windows.c +56 -0
  434. data/third_party/boringssl/crypto/rc4/rc4.c +283 -0
  435. data/third_party/boringssl/crypto/refcount_c11.c +67 -0
  436. data/third_party/boringssl/crypto/refcount_lock.c +53 -0
  437. data/third_party/boringssl/crypto/rsa/blinding.c +462 -0
  438. data/third_party/boringssl/crypto/rsa/internal.h +164 -0
  439. data/third_party/boringssl/crypto/rsa/padding.c +711 -0
  440. data/third_party/boringssl/crypto/rsa/rsa.c +808 -0
  441. data/third_party/boringssl/crypto/rsa/rsa_asn1.c +473 -0
  442. data/third_party/boringssl/crypto/rsa/rsa_impl.c +1138 -0
  443. data/third_party/boringssl/crypto/sha/sha1.c +337 -0
  444. data/third_party/boringssl/crypto/sha/sha256.c +327 -0
  445. data/third_party/boringssl/crypto/sha/sha512.c +607 -0
  446. data/third_party/boringssl/crypto/stack/stack.c +386 -0
  447. data/third_party/boringssl/crypto/test/scoped_types.h +137 -0
  448. data/third_party/boringssl/crypto/test/test_util.h +35 -0
  449. data/third_party/boringssl/crypto/thread.c +101 -0
  450. data/third_party/boringssl/crypto/thread_none.c +55 -0
  451. data/third_party/boringssl/crypto/thread_pthread.c +167 -0
  452. data/third_party/boringssl/crypto/thread_win.c +282 -0
  453. data/third_party/boringssl/crypto/time_support.c +212 -0
  454. data/third_party/boringssl/crypto/x509/a_digest.c +97 -0
  455. data/third_party/boringssl/crypto/x509/a_sign.c +136 -0
  456. data/third_party/boringssl/crypto/x509/a_strex.c +564 -0
  457. data/third_party/boringssl/crypto/x509/a_verify.c +133 -0
  458. data/third_party/boringssl/crypto/x509/asn1_gen.c +873 -0
  459. data/third_party/boringssl/crypto/x509/by_dir.c +491 -0
  460. data/third_party/boringssl/crypto/x509/by_file.c +295 -0
  461. data/third_party/boringssl/crypto/x509/charmap.h +15 -0
  462. data/third_party/boringssl/crypto/x509/i2d_pr.c +84 -0
  463. data/third_party/boringssl/crypto/x509/pkcs7.c +353 -0
  464. data/third_party/boringssl/crypto/x509/t_crl.c +129 -0
  465. data/third_party/boringssl/crypto/x509/t_req.c +246 -0
  466. data/third_party/boringssl/crypto/x509/t_x509.c +500 -0
  467. data/third_party/boringssl/crypto/x509/t_x509a.c +109 -0
  468. data/third_party/boringssl/crypto/x509/vpm_int.h +70 -0
  469. data/third_party/boringssl/crypto/x509/x509.c +152 -0
  470. data/third_party/boringssl/crypto/x509/x509_att.c +353 -0
  471. data/third_party/boringssl/crypto/x509/x509_cmp.c +490 -0
  472. data/third_party/boringssl/crypto/x509/x509_d2.c +105 -0
  473. data/third_party/boringssl/crypto/x509/x509_def.c +88 -0
  474. data/third_party/boringssl/crypto/x509/x509_ext.c +206 -0
  475. data/third_party/boringssl/crypto/x509/x509_lu.c +738 -0
  476. data/third_party/boringssl/crypto/x509/x509_obj.c +191 -0
  477. data/third_party/boringssl/crypto/x509/x509_r2x.c +113 -0
  478. data/third_party/boringssl/crypto/x509/x509_req.c +315 -0
  479. data/third_party/boringssl/crypto/x509/x509_set.c +154 -0
  480. data/third_party/boringssl/crypto/x509/x509_trs.c +304 -0
  481. data/third_party/boringssl/crypto/x509/x509_txt.c +209 -0
  482. data/third_party/boringssl/crypto/x509/x509_v3.c +271 -0
  483. data/third_party/boringssl/crypto/x509/x509_vfy.c +2456 -0
  484. data/third_party/boringssl/crypto/x509/x509_vpm.c +672 -0
  485. data/third_party/boringssl/crypto/x509/x509cset.c +172 -0
  486. data/third_party/boringssl/crypto/x509/x509name.c +381 -0
  487. data/third_party/boringssl/crypto/x509/x509rset.c +80 -0
  488. data/third_party/boringssl/crypto/x509/x509spki.c +135 -0
  489. data/third_party/boringssl/crypto/x509/x509type.c +128 -0
  490. data/third_party/boringssl/crypto/x509/x_algor.c +154 -0
  491. data/third_party/boringssl/crypto/x509/x_all.c +547 -0
  492. data/third_party/boringssl/crypto/x509/x_attrib.c +117 -0
  493. data/third_party/boringssl/crypto/x509/x_crl.c +560 -0
  494. data/third_party/boringssl/crypto/x509/x_exten.c +75 -0
  495. data/third_party/boringssl/crypto/x509/x_info.c +95 -0
  496. data/third_party/boringssl/crypto/x509/x_name.c +538 -0
  497. data/third_party/boringssl/crypto/x509/x_pkey.c +100 -0
  498. data/third_party/boringssl/crypto/x509/x_pubkey.c +384 -0
  499. data/third_party/boringssl/crypto/x509/x_req.c +112 -0
  500. data/third_party/boringssl/crypto/x509/x_sig.c +69 -0
  501. data/third_party/boringssl/crypto/x509/x_spki.c +78 -0
  502. data/third_party/boringssl/crypto/x509/x_val.c +69 -0
  503. data/third_party/boringssl/crypto/x509/x_x509.c +227 -0
  504. data/third_party/boringssl/crypto/x509/x_x509a.c +197 -0
  505. data/third_party/boringssl/crypto/x509v3/ext_dat.h +129 -0
  506. data/third_party/boringssl/crypto/x509v3/pcy_cache.c +299 -0
  507. data/third_party/boringssl/crypto/x509v3/pcy_data.c +137 -0
  508. data/third_party/boringssl/crypto/x509v3/pcy_int.h +212 -0
  509. data/third_party/boringssl/crypto/x509v3/pcy_lib.c +165 -0
  510. data/third_party/boringssl/crypto/x509v3/pcy_map.c +133 -0
  511. data/third_party/boringssl/crypto/x509v3/pcy_node.c +197 -0
  512. data/third_party/boringssl/crypto/x509v3/pcy_tree.c +876 -0
  513. data/third_party/boringssl/crypto/x509v3/v3_akey.c +212 -0
  514. data/third_party/boringssl/crypto/x509v3/v3_akeya.c +71 -0
  515. data/third_party/boringssl/crypto/x509v3/v3_alt.c +622 -0
  516. data/third_party/boringssl/crypto/x509v3/v3_bcons.c +126 -0
  517. data/third_party/boringssl/crypto/x509v3/v3_bitst.c +141 -0
  518. data/third_party/boringssl/crypto/x509v3/v3_conf.c +459 -0
  519. data/third_party/boringssl/crypto/x509v3/v3_cpols.c +475 -0
  520. data/third_party/boringssl/crypto/x509v3/v3_crld.c +616 -0
  521. data/third_party/boringssl/crypto/x509v3/v3_enum.c +98 -0
  522. data/third_party/boringssl/crypto/x509v3/v3_extku.c +145 -0
  523. data/third_party/boringssl/crypto/x509v3/v3_genn.c +252 -0
  524. data/third_party/boringssl/crypto/x509v3/v3_ia5.c +117 -0
  525. data/third_party/boringssl/crypto/x509v3/v3_info.c +200 -0
  526. data/third_party/boringssl/crypto/x509v3/v3_int.c +87 -0
  527. data/third_party/boringssl/crypto/x509v3/v3_lib.c +335 -0
  528. data/third_party/boringssl/crypto/x509v3/v3_ncons.c +510 -0
  529. data/third_party/boringssl/crypto/x509v3/v3_pci.c +335 -0
  530. data/third_party/boringssl/crypto/x509v3/v3_pcia.c +56 -0
  531. data/third_party/boringssl/crypto/x509v3/v3_pcons.c +142 -0
  532. data/third_party/boringssl/crypto/x509v3/v3_pku.c +109 -0
  533. data/third_party/boringssl/crypto/x509v3/v3_pmaps.c +156 -0
  534. data/third_party/boringssl/crypto/x509v3/v3_prn.c +207 -0
  535. data/third_party/boringssl/crypto/x509v3/v3_purp.c +805 -0
  536. data/third_party/boringssl/crypto/x509v3/v3_skey.c +148 -0
  537. data/third_party/boringssl/crypto/x509v3/v3_sxnet.c +266 -0
  538. data/third_party/boringssl/crypto/x509v3/v3_utl.c +1322 -0
  539. data/third_party/boringssl/include/openssl/aead.h +346 -0
  540. data/third_party/boringssl/include/openssl/aes.h +158 -0
  541. data/third_party/boringssl/include/openssl/arm_arch.h +127 -0
  542. data/third_party/boringssl/include/openssl/asn1.h +1168 -0
  543. data/third_party/boringssl/include/openssl/asn1_mac.h +75 -0
  544. data/third_party/boringssl/include/openssl/asn1t.h +906 -0
  545. data/third_party/boringssl/include/openssl/base.h +261 -0
  546. data/third_party/boringssl/include/openssl/base64.h +184 -0
  547. data/third_party/boringssl/include/openssl/bio.h +902 -0
  548. data/third_party/boringssl/include/openssl/blowfish.h +93 -0
  549. data/third_party/boringssl/include/openssl/bn.h +885 -0
  550. data/third_party/boringssl/include/openssl/buf.h +118 -0
  551. data/third_party/boringssl/include/openssl/buffer.h +18 -0
  552. data/third_party/boringssl/include/openssl/bytestring.h +360 -0
  553. data/third_party/boringssl/include/openssl/cast.h +96 -0
  554. data/third_party/boringssl/include/openssl/chacha.h +37 -0
  555. data/third_party/boringssl/include/openssl/cipher.h +571 -0
  556. data/third_party/boringssl/include/openssl/cmac.h +76 -0
  557. data/third_party/boringssl/include/openssl/conf.h +145 -0
  558. data/third_party/boringssl/include/openssl/cpu.h +184 -0
  559. data/third_party/boringssl/include/openssl/crypto.h +68 -0
  560. data/third_party/boringssl/include/openssl/curve25519.h +88 -0
  561. data/third_party/boringssl/include/openssl/des.h +177 -0
  562. data/third_party/boringssl/include/openssl/dh.h +238 -0
  563. data/third_party/boringssl/include/openssl/digest.h +258 -0
  564. data/third_party/boringssl/include/openssl/dsa.h +343 -0
  565. data/third_party/boringssl/include/openssl/dtls1.h +16 -0
  566. data/third_party/boringssl/include/openssl/ec.h +355 -0
  567. data/third_party/boringssl/include/openssl/ec_key.h +280 -0
  568. data/third_party/boringssl/include/openssl/ecdh.h +102 -0
  569. data/third_party/boringssl/include/openssl/ecdsa.h +206 -0
  570. data/third_party/boringssl/include/openssl/engine.h +98 -0
  571. data/third_party/boringssl/include/openssl/err.h +487 -0
  572. data/third_party/boringssl/include/openssl/evp.h +750 -0
  573. data/third_party/boringssl/include/openssl/ex_data.h +213 -0
  574. data/third_party/boringssl/include/openssl/hkdf.h +44 -0
  575. data/third_party/boringssl/include/openssl/hmac.h +160 -0
  576. data/third_party/boringssl/include/openssl/lhash.h +192 -0
  577. data/third_party/boringssl/include/openssl/lhash_macros.h +132 -0
  578. data/third_party/boringssl/include/openssl/md4.h +102 -0
  579. data/third_party/boringssl/include/openssl/md5.h +107 -0
  580. data/third_party/boringssl/include/openssl/mem.h +140 -0
  581. data/third_party/boringssl/include/openssl/obj.h +198 -0
  582. data/third_party/boringssl/include/openssl/obj_mac.h +4140 -0
  583. data/third_party/boringssl/include/openssl/objects.h +18 -0
  584. data/third_party/boringssl/include/openssl/opensslfeatures.h +60 -0
  585. data/third_party/boringssl/include/openssl/opensslv.h +18 -0
  586. data/third_party/boringssl/include/openssl/ossl_typ.h +18 -0
  587. data/third_party/boringssl/include/openssl/pem.h +521 -0
  588. data/third_party/boringssl/include/openssl/pkcs12.h +18 -0
  589. data/third_party/boringssl/include/openssl/pkcs7.h +16 -0
  590. data/third_party/boringssl/include/openssl/pkcs8.h +220 -0
  591. data/third_party/boringssl/include/openssl/poly1305.h +51 -0
  592. data/third_party/boringssl/include/openssl/pqueue.h +146 -0
  593. data/third_party/boringssl/include/openssl/rand.h +113 -0
  594. data/third_party/boringssl/include/openssl/rc4.h +90 -0
  595. data/third_party/boringssl/include/openssl/rsa.h +637 -0
  596. data/third_party/boringssl/include/openssl/safestack.h +16 -0
  597. data/third_party/boringssl/include/openssl/sha.h +256 -0
  598. data/third_party/boringssl/include/openssl/srtp.h +18 -0
  599. data/third_party/boringssl/include/openssl/ssl.h +4466 -0
  600. data/third_party/boringssl/include/openssl/ssl3.h +441 -0
  601. data/third_party/boringssl/include/openssl/stack.h +298 -0
  602. data/third_party/boringssl/include/openssl/stack_macros.h +4190 -0
  603. data/third_party/boringssl/include/openssl/thread.h +173 -0
  604. data/third_party/boringssl/include/openssl/time_support.h +90 -0
  605. data/third_party/boringssl/include/openssl/tls1.h +653 -0
  606. data/third_party/boringssl/include/openssl/type_check.h +91 -0
  607. data/third_party/boringssl/include/openssl/x509.h +1258 -0
  608. data/third_party/boringssl/include/openssl/x509_vfy.h +611 -0
  609. data/third_party/boringssl/include/openssl/x509v3.h +798 -0
  610. data/third_party/boringssl/ssl/custom_extensions.c +257 -0
  611. data/third_party/boringssl/ssl/d1_both.c +880 -0
  612. data/third_party/boringssl/ssl/d1_clnt.c +566 -0
  613. data/third_party/boringssl/ssl/d1_lib.c +340 -0
  614. data/third_party/boringssl/ssl/d1_meth.c +130 -0
  615. data/third_party/boringssl/ssl/d1_pkt.c +578 -0
  616. data/third_party/boringssl/ssl/d1_srtp.c +234 -0
  617. data/third_party/boringssl/ssl/d1_srvr.c +485 -0
  618. data/third_party/boringssl/ssl/dtls_record.c +308 -0
  619. data/third_party/boringssl/ssl/internal.h +1276 -0
  620. data/third_party/boringssl/ssl/pqueue/pqueue.c +197 -0
  621. data/third_party/boringssl/ssl/s3_both.c +571 -0
  622. data/third_party/boringssl/ssl/s3_clnt.c +2241 -0
  623. data/third_party/boringssl/ssl/s3_enc.c +494 -0
  624. data/third_party/boringssl/ssl/s3_lib.c +587 -0
  625. data/third_party/boringssl/ssl/s3_meth.c +166 -0
  626. data/third_party/boringssl/ssl/s3_pkt.c +732 -0
  627. data/third_party/boringssl/ssl/s3_srvr.c +2536 -0
  628. data/third_party/boringssl/ssl/ssl_aead_ctx.c +300 -0
  629. data/third_party/boringssl/ssl/ssl_asn1.c +718 -0
  630. data/third_party/boringssl/ssl/ssl_buffer.c +319 -0
  631. data/third_party/boringssl/ssl/ssl_cert.c +539 -0
  632. data/third_party/boringssl/ssl/ssl_cipher.c +2003 -0
  633. data/third_party/boringssl/ssl/ssl_file.c +633 -0
  634. data/third_party/boringssl/ssl/ssl_lib.c +2653 -0
  635. data/third_party/boringssl/ssl/ssl_rsa.c +423 -0
  636. data/third_party/boringssl/ssl/ssl_session.c +764 -0
  637. data/third_party/boringssl/ssl/ssl_stat.c +591 -0
  638. data/third_party/boringssl/ssl/t1_enc.c +708 -0
  639. data/third_party/boringssl/ssl/t1_lib.c +2905 -0
  640. data/third_party/boringssl/ssl/test/async_bio.h +45 -0
  641. data/third_party/boringssl/ssl/test/packeted_bio.h +44 -0
  642. data/third_party/boringssl/ssl/test/scoped_types.h +28 -0
  643. data/third_party/boringssl/ssl/test/test_config.h +108 -0
  644. data/third_party/boringssl/ssl/tls_record.c +342 -0
  645. data/third_party/zlib/adler32.c +179 -0
  646. data/third_party/zlib/compress.c +80 -0
  647. data/third_party/zlib/crc32.c +425 -0
  648. data/third_party/zlib/crc32.h +441 -0
  649. data/third_party/zlib/deflate.c +1967 -0
  650. data/third_party/zlib/deflate.h +346 -0
  651. data/third_party/zlib/gzclose.c +25 -0
  652. data/third_party/zlib/gzguts.h +209 -0
  653. data/third_party/zlib/gzlib.c +634 -0
  654. data/third_party/zlib/gzread.c +594 -0
  655. data/third_party/zlib/gzwrite.c +577 -0
  656. data/third_party/zlib/infback.c +640 -0
  657. data/third_party/zlib/inffast.c +340 -0
  658. data/third_party/zlib/inffast.h +11 -0
  659. data/third_party/zlib/inffixed.h +94 -0
  660. data/third_party/zlib/inflate.c +1512 -0
  661. data/third_party/zlib/inflate.h +122 -0
  662. data/third_party/zlib/inftrees.c +306 -0
  663. data/third_party/zlib/inftrees.h +62 -0
  664. data/third_party/zlib/trees.c +1226 -0
  665. data/third_party/zlib/trees.h +128 -0
  666. data/third_party/zlib/uncompr.c +59 -0
  667. data/third_party/zlib/zconf.h +511 -0
  668. data/third_party/zlib/zlib.h +1768 -0
  669. data/third_party/zlib/zutil.c +324 -0
  670. data/third_party/zlib/zutil.h +253 -0
  671. metadata +492 -25
  672. data/Rakefile +0 -63
  673. data/src/ruby/lib/grpc/grpc.so +0 -0
@@ -0,0 +1,166 @@
1
+ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
2
+ * All rights reserved.
3
+ *
4
+ * This package is an SSL implementation written
5
+ * by Eric Young (eay@cryptsoft.com).
6
+ * The implementation was written so as to conform with Netscapes SSL.
7
+ *
8
+ * This library is free for commercial and non-commercial use as long as
9
+ * the following conditions are aheared to. The following conditions
10
+ * apply to all code found in this distribution, be it the RC4, RSA,
11
+ * lhash, DES, etc., code; not just the SSL code. The SSL documentation
12
+ * included with this distribution is covered by the same copyright terms
13
+ * except that the holder is Tim Hudson (tjh@cryptsoft.com).
14
+ *
15
+ * Copyright remains Eric Young's, and as such any Copyright notices in
16
+ * the code are not to be removed.
17
+ * If this package is used in a product, Eric Young should be given attribution
18
+ * as the author of the parts of the library used.
19
+ * This can be in the form of a textual message at program startup or
20
+ * in documentation (online or textual) provided with the package.
21
+ *
22
+ * Redistribution and use in source and binary forms, with or without
23
+ * modification, are permitted provided that the following conditions
24
+ * are met:
25
+ * 1. Redistributions of source code must retain the copyright
26
+ * notice, this list of conditions and the following disclaimer.
27
+ * 2. Redistributions in binary form must reproduce the above copyright
28
+ * notice, this list of conditions and the following disclaimer in the
29
+ * documentation and/or other materials provided with the distribution.
30
+ * 3. All advertising materials mentioning features or use of this software
31
+ * must display the following acknowledgement:
32
+ * "This product includes cryptographic software written by
33
+ * Eric Young (eay@cryptsoft.com)"
34
+ * The word 'cryptographic' can be left out if the rouines from the library
35
+ * being used are not cryptographic related :-).
36
+ * 4. If you include any Windows specific code (or a derivative thereof) from
37
+ * the apps directory (application code) you must include an acknowledgement:
38
+ * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
39
+ *
40
+ * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
41
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
42
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
43
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
44
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
45
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
46
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
47
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
48
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
49
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
50
+ * SUCH DAMAGE.
51
+ *
52
+ * The licence and distribution terms for any publically available version or
53
+ * derivative of this code cannot be changed. i.e. this code cannot simply be
54
+ * copied and put under another distribution licence
55
+ * [including the GNU Public Licence.] */
56
+
57
+ #include <openssl/ssl.h>
58
+
59
+ #include "internal.h"
60
+
61
+
62
+ static const SSL_PROTOCOL_METHOD TLS_protocol_method = {
63
+ 0 /* is_dtls */,
64
+ ssl3_new,
65
+ ssl3_free,
66
+ ssl3_accept,
67
+ ssl3_connect,
68
+ ssl3_get_message,
69
+ ssl3_read_app_data,
70
+ ssl3_read_change_cipher_spec,
71
+ ssl3_read_close_notify,
72
+ ssl3_write_app_data,
73
+ ssl3_dispatch_alert,
74
+ ssl3_supports_cipher,
75
+ SSL3_HM_HEADER_LENGTH,
76
+ ssl3_set_handshake_header,
77
+ ssl3_handshake_write,
78
+ };
79
+
80
+ const SSL_METHOD *TLS_method(void) {
81
+ static const SSL_METHOD method = {
82
+ 0,
83
+ &TLS_protocol_method,
84
+ };
85
+ return &method;
86
+ }
87
+
88
+ const SSL_METHOD *SSLv23_method(void) {
89
+ return TLS_method();
90
+ }
91
+
92
+ /* Legacy version-locked methods. */
93
+
94
+ const SSL_METHOD *TLSv1_2_method(void) {
95
+ static const SSL_METHOD method = {
96
+ TLS1_2_VERSION,
97
+ &TLS_protocol_method,
98
+ };
99
+ return &method;
100
+ }
101
+
102
+ const SSL_METHOD *TLSv1_1_method(void) {
103
+ static const SSL_METHOD method = {
104
+ TLS1_1_VERSION,
105
+ &TLS_protocol_method,
106
+ };
107
+ return &method;
108
+ }
109
+
110
+ const SSL_METHOD *TLSv1_method(void) {
111
+ static const SSL_METHOD method = {
112
+ TLS1_VERSION,
113
+ &TLS_protocol_method,
114
+ };
115
+ return &method;
116
+ }
117
+
118
+ const SSL_METHOD *SSLv3_method(void) {
119
+ static const SSL_METHOD method = {
120
+ SSL3_VERSION,
121
+ &TLS_protocol_method,
122
+ };
123
+ return &method;
124
+ }
125
+
126
+ /* Legacy side-specific methods. */
127
+
128
+ const SSL_METHOD *TLSv1_2_server_method(void) {
129
+ return TLSv1_2_method();
130
+ }
131
+
132
+ const SSL_METHOD *TLSv1_1_server_method(void) {
133
+ return TLSv1_1_method();
134
+ }
135
+
136
+ const SSL_METHOD *TLSv1_server_method(void) {
137
+ return TLSv1_method();
138
+ }
139
+
140
+ const SSL_METHOD *SSLv3_server_method(void) {
141
+ return SSLv3_method();
142
+ }
143
+
144
+ const SSL_METHOD *TLSv1_2_client_method(void) {
145
+ return TLSv1_2_method();
146
+ }
147
+
148
+ const SSL_METHOD *TLSv1_1_client_method(void) {
149
+ return TLSv1_1_method();
150
+ }
151
+
152
+ const SSL_METHOD *TLSv1_client_method(void) {
153
+ return TLSv1_method();
154
+ }
155
+
156
+ const SSL_METHOD *SSLv3_client_method(void) {
157
+ return SSLv3_method();
158
+ }
159
+
160
+ const SSL_METHOD *SSLv23_server_method(void) {
161
+ return SSLv23_method();
162
+ }
163
+
164
+ const SSL_METHOD *SSLv23_client_method(void) {
165
+ return SSLv23_method();
166
+ }
@@ -0,0 +1,732 @@
1
+ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
2
+ * All rights reserved.
3
+ *
4
+ * This package is an SSL implementation written
5
+ * by Eric Young (eay@cryptsoft.com).
6
+ * The implementation was written so as to conform with Netscapes SSL.
7
+ *
8
+ * This library is free for commercial and non-commercial use as long as
9
+ * the following conditions are aheared to. The following conditions
10
+ * apply to all code found in this distribution, be it the RC4, RSA,
11
+ * lhash, DES, etc., code; not just the SSL code. The SSL documentation
12
+ * included with this distribution is covered by the same copyright terms
13
+ * except that the holder is Tim Hudson (tjh@cryptsoft.com).
14
+ *
15
+ * Copyright remains Eric Young's, and as such any Copyright notices in
16
+ * the code are not to be removed.
17
+ * If this package is used in a product, Eric Young should be given attribution
18
+ * as the author of the parts of the library used.
19
+ * This can be in the form of a textual message at program startup or
20
+ * in documentation (online or textual) provided with the package.
21
+ *
22
+ * Redistribution and use in source and binary forms, with or without
23
+ * modification, are permitted provided that the following conditions
24
+ * are met:
25
+ * 1. Redistributions of source code must retain the copyright
26
+ * notice, this list of conditions and the following disclaimer.
27
+ * 2. Redistributions in binary form must reproduce the above copyright
28
+ * notice, this list of conditions and the following disclaimer in the
29
+ * documentation and/or other materials provided with the distribution.
30
+ * 3. All advertising materials mentioning features or use of this software
31
+ * must display the following acknowledgement:
32
+ * "This product includes cryptographic software written by
33
+ * Eric Young (eay@cryptsoft.com)"
34
+ * The word 'cryptographic' can be left out if the rouines from the library
35
+ * being used are not cryptographic related :-).
36
+ * 4. If you include any Windows specific code (or a derivative thereof) from
37
+ * the apps directory (application code) you must include an acknowledgement:
38
+ * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
39
+ *
40
+ * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
41
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
42
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
43
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
44
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
45
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
46
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
47
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
48
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
49
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
50
+ * SUCH DAMAGE.
51
+ *
52
+ * The licence and distribution terms for any publically available version or
53
+ * derivative of this code cannot be changed. i.e. this code cannot simply be
54
+ * copied and put under another distribution licence
55
+ * [including the GNU Public Licence.]
56
+ */
57
+ /* ====================================================================
58
+ * Copyright (c) 1998-2002 The OpenSSL Project. All rights reserved.
59
+ *
60
+ * Redistribution and use in source and binary forms, with or without
61
+ * modification, are permitted provided that the following conditions
62
+ * are met:
63
+ *
64
+ * 1. Redistributions of source code must retain the above copyright
65
+ * notice, this list of conditions and the following disclaimer.
66
+ *
67
+ * 2. Redistributions in binary form must reproduce the above copyright
68
+ * notice, this list of conditions and the following disclaimer in
69
+ * the documentation and/or other materials provided with the
70
+ * distribution.
71
+ *
72
+ * 3. All advertising materials mentioning features or use of this
73
+ * software must display the following acknowledgment:
74
+ * "This product includes software developed by the OpenSSL Project
75
+ * for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
76
+ *
77
+ * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
78
+ * endorse or promote products derived from this software without
79
+ * prior written permission. For written permission, please contact
80
+ * openssl-core@openssl.org.
81
+ *
82
+ * 5. Products derived from this software may not be called "OpenSSL"
83
+ * nor may "OpenSSL" appear in their names without prior written
84
+ * permission of the OpenSSL Project.
85
+ *
86
+ * 6. Redistributions of any form whatsoever must retain the following
87
+ * acknowledgment:
88
+ * "This product includes software developed by the OpenSSL Project
89
+ * for use in the OpenSSL Toolkit (http://www.openssl.org/)"
90
+ *
91
+ * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
92
+ * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
93
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
94
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
95
+ * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
96
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
97
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
98
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
99
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
100
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
101
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
102
+ * OF THE POSSIBILITY OF SUCH DAMAGE.
103
+ * ====================================================================
104
+ *
105
+ * This product includes cryptographic software written by Eric Young
106
+ * (eay@cryptsoft.com). This product includes software written by Tim
107
+ * Hudson (tjh@cryptsoft.com). */
108
+
109
+ #include <openssl/ssl.h>
110
+
111
+ #include <assert.h>
112
+ #include <limits.h>
113
+ #include <stdio.h>
114
+ #include <string.h>
115
+
116
+ #include <openssl/buf.h>
117
+ #include <openssl/err.h>
118
+ #include <openssl/evp.h>
119
+ #include <openssl/mem.h>
120
+ #include <openssl/rand.h>
121
+
122
+ #include "internal.h"
123
+
124
+
125
+ static int do_ssl3_write(SSL *s, int type, const uint8_t *buf, unsigned len);
126
+
127
+ /* kMaxWarningAlerts is the number of consecutive warning alerts that will be
128
+ * processed. */
129
+ static const uint8_t kMaxWarningAlerts = 4;
130
+
131
+ /* ssl3_get_record reads a new input record. On success, it places it in
132
+ * |ssl->s3->rrec| and returns one. Otherwise it returns <= 0 on error or if
133
+ * more data is needed. */
134
+ static int ssl3_get_record(SSL *ssl) {
135
+ int ret;
136
+ again:
137
+ /* Ensure the buffer is large enough to decrypt in-place. */
138
+ ret = ssl_read_buffer_extend_to(ssl, ssl_record_prefix_len(ssl));
139
+ if (ret <= 0) {
140
+ return ret;
141
+ }
142
+ assert(ssl_read_buffer_len(ssl) >= ssl_record_prefix_len(ssl));
143
+
144
+ uint8_t *out = ssl_read_buffer(ssl) + ssl_record_prefix_len(ssl);
145
+ size_t max_out = ssl_read_buffer_len(ssl) - ssl_record_prefix_len(ssl);
146
+ uint8_t type, alert;
147
+ size_t len, consumed;
148
+ switch (tls_open_record(ssl, &type, out, &len, &consumed, &alert, max_out,
149
+ ssl_read_buffer(ssl), ssl_read_buffer_len(ssl))) {
150
+ case ssl_open_record_success:
151
+ ssl_read_buffer_consume(ssl, consumed);
152
+
153
+ if (len > 0xffff) {
154
+ OPENSSL_PUT_ERROR(SSL, ERR_R_OVERFLOW);
155
+ return -1;
156
+ }
157
+
158
+ SSL3_RECORD *rr = &ssl->s3->rrec;
159
+ rr->type = type;
160
+ rr->length = (uint16_t)len;
161
+ rr->data = out;
162
+ return 1;
163
+
164
+ case ssl_open_record_partial:
165
+ ret = ssl_read_buffer_extend_to(ssl, consumed);
166
+ if (ret <= 0) {
167
+ return ret;
168
+ }
169
+ goto again;
170
+
171
+ case ssl_open_record_discard:
172
+ ssl_read_buffer_consume(ssl, consumed);
173
+ goto again;
174
+
175
+ case ssl_open_record_error:
176
+ ssl3_send_alert(ssl, SSL3_AL_FATAL, alert);
177
+ return -1;
178
+ }
179
+
180
+ assert(0);
181
+ OPENSSL_PUT_ERROR(SSL, ERR_R_INTERNAL_ERROR);
182
+ return -1;
183
+ }
184
+
185
+ int ssl3_write_app_data(SSL *ssl, const void *buf, int len) {
186
+ return ssl3_write_bytes(ssl, SSL3_RT_APPLICATION_DATA, buf, len);
187
+ }
188
+
189
+ /* Call this to write data in records of type |type|. It will return <= 0 if
190
+ * not all data has been sent or non-blocking IO. */
191
+ int ssl3_write_bytes(SSL *s, int type, const void *buf_, int len) {
192
+ const uint8_t *buf = buf_;
193
+ unsigned int tot, n, nw;
194
+ int i;
195
+
196
+ s->rwstate = SSL_NOTHING;
197
+ assert(s->s3->wnum <= INT_MAX);
198
+ tot = s->s3->wnum;
199
+ s->s3->wnum = 0;
200
+
201
+ if (!s->in_handshake && SSL_in_init(s) && !SSL_in_false_start(s)) {
202
+ i = s->handshake_func(s);
203
+ if (i < 0) {
204
+ return i;
205
+ }
206
+ if (i == 0) {
207
+ OPENSSL_PUT_ERROR(SSL, SSL_R_SSL_HANDSHAKE_FAILURE);
208
+ return -1;
209
+ }
210
+ }
211
+
212
+ /* Ensure that if we end up with a smaller value of data to write out than
213
+ * the the original len from a write which didn't complete for non-blocking
214
+ * I/O and also somehow ended up avoiding the check for this in
215
+ * ssl3_write_pending/SSL_R_BAD_WRITE_RETRY as it must never be possible to
216
+ * end up with (len-tot) as a large number that will then promptly send
217
+ * beyond the end of the users buffer ... so we trap and report the error in
218
+ * a way the user will notice. */
219
+ if (len < 0 || (size_t)len < tot) {
220
+ OPENSSL_PUT_ERROR(SSL, SSL_R_BAD_LENGTH);
221
+ return -1;
222
+ }
223
+
224
+ n = (len - tot);
225
+ for (;;) {
226
+ /* max contains the maximum number of bytes that we can put into a
227
+ * record. */
228
+ unsigned max = s->max_send_fragment;
229
+ if (n > max) {
230
+ nw = max;
231
+ } else {
232
+ nw = n;
233
+ }
234
+
235
+ i = do_ssl3_write(s, type, &buf[tot], nw);
236
+ if (i <= 0) {
237
+ s->s3->wnum = tot;
238
+ return i;
239
+ }
240
+
241
+ if (i == (int)n || (type == SSL3_RT_APPLICATION_DATA &&
242
+ (s->mode & SSL_MODE_ENABLE_PARTIAL_WRITE))) {
243
+ return tot + i;
244
+ }
245
+
246
+ n -= i;
247
+ tot += i;
248
+ }
249
+ }
250
+
251
+ static int ssl3_write_pending(SSL *s, int type, const uint8_t *buf,
252
+ unsigned int len) {
253
+ if (s->s3->wpend_tot > (int)len ||
254
+ (s->s3->wpend_buf != buf &&
255
+ !(s->mode & SSL_MODE_ACCEPT_MOVING_WRITE_BUFFER)) ||
256
+ s->s3->wpend_type != type) {
257
+ OPENSSL_PUT_ERROR(SSL, SSL_R_BAD_WRITE_RETRY);
258
+ return -1;
259
+ }
260
+
261
+ int ret = ssl_write_buffer_flush(s);
262
+ if (ret <= 0) {
263
+ return ret;
264
+ }
265
+ return s->s3->wpend_ret;
266
+ }
267
+
268
+ /* do_ssl3_write writes an SSL record of the given type. */
269
+ static int do_ssl3_write(SSL *s, int type, const uint8_t *buf, unsigned len) {
270
+ /* If there is still data from the previous record, flush it. */
271
+ if (ssl_write_buffer_is_pending(s)) {
272
+ return ssl3_write_pending(s, type, buf, len);
273
+ }
274
+
275
+ /* If we have an alert to send, lets send it */
276
+ if (s->s3->alert_dispatch) {
277
+ int ret = s->method->ssl_dispatch_alert(s);
278
+ if (ret <= 0) {
279
+ return ret;
280
+ }
281
+ /* if it went, fall through and send more stuff */
282
+ }
283
+
284
+ if (len > SSL3_RT_MAX_PLAIN_LENGTH) {
285
+ OPENSSL_PUT_ERROR(SSL, ERR_R_INTERNAL_ERROR);
286
+ return -1;
287
+ }
288
+
289
+ if (len == 0) {
290
+ return 0;
291
+ }
292
+
293
+ size_t max_out = len + ssl_max_seal_overhead(s);
294
+ if (max_out < len) {
295
+ OPENSSL_PUT_ERROR(SSL, ERR_R_OVERFLOW);
296
+ return -1;
297
+ }
298
+ uint8_t *out;
299
+ size_t ciphertext_len;
300
+ if (!ssl_write_buffer_init(s, &out, max_out) ||
301
+ !tls_seal_record(s, out, &ciphertext_len, max_out, type, buf, len)) {
302
+ return -1;
303
+ }
304
+ ssl_write_buffer_set_len(s, ciphertext_len);
305
+
306
+ /* memorize arguments so that ssl3_write_pending can detect bad write retries
307
+ * later */
308
+ s->s3->wpend_tot = len;
309
+ s->s3->wpend_buf = buf;
310
+ s->s3->wpend_type = type;
311
+ s->s3->wpend_ret = len;
312
+
313
+ /* we now just need to write the buffer */
314
+ return ssl3_write_pending(s, type, buf, len);
315
+ }
316
+
317
+ int ssl3_read_app_data(SSL *ssl, uint8_t *buf, int len, int peek) {
318
+ return ssl3_read_bytes(ssl, SSL3_RT_APPLICATION_DATA, buf, len, peek);
319
+ }
320
+
321
+ int ssl3_read_change_cipher_spec(SSL *ssl) {
322
+ uint8_t byte;
323
+ int ret = ssl3_read_bytes(ssl, SSL3_RT_CHANGE_CIPHER_SPEC, &byte, 1 /* len */,
324
+ 0 /* no peek */);
325
+ if (ret <= 0) {
326
+ return ret;
327
+ }
328
+ assert(ret == 1);
329
+
330
+ if (ssl->s3->rrec.length != 0 || byte != SSL3_MT_CCS) {
331
+ OPENSSL_PUT_ERROR(SSL, SSL_R_BAD_CHANGE_CIPHER_SPEC);
332
+ ssl3_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_ILLEGAL_PARAMETER);
333
+ return -1;
334
+ }
335
+
336
+ if (ssl->msg_callback != NULL) {
337
+ ssl->msg_callback(0, ssl->version, SSL3_RT_CHANGE_CIPHER_SPEC, &byte, 1,
338
+ ssl, ssl->msg_callback_arg);
339
+ }
340
+
341
+ return 1;
342
+ }
343
+
344
+ void ssl3_read_close_notify(SSL *ssl) {
345
+ ssl3_read_bytes(ssl, 0, NULL, 0, 0);
346
+ }
347
+
348
+ static int ssl3_can_renegotiate(SSL *ssl) {
349
+ switch (ssl->renegotiate_mode) {
350
+ case ssl_renegotiate_never:
351
+ return 0;
352
+ case ssl_renegotiate_once:
353
+ return ssl->s3->total_renegotiations == 0;
354
+ case ssl_renegotiate_freely:
355
+ return 1;
356
+ case ssl_renegotiate_ignore:
357
+ return 1;
358
+ }
359
+
360
+ assert(0);
361
+ return 0;
362
+ }
363
+
364
+ /* Return up to 'len' payload bytes received in 'type' records.
365
+ * 'type' is one of the following:
366
+ *
367
+ * - SSL3_RT_HANDSHAKE (when ssl3_get_message calls us)
368
+ * - SSL3_RT_CHANGE_CIPHER_SPEC (when ssl3_read_change_cipher_spec calls us)
369
+ * - SSL3_RT_APPLICATION_DATA (when ssl3_read_app_data calls us)
370
+ * - 0 (during a shutdown, no data has to be returned)
371
+ *
372
+ * If we don't have stored data to work from, read a SSL/TLS record first
373
+ * (possibly multiple records if we still don't have anything to return).
374
+ *
375
+ * This function must handle any surprises the peer may have for us, such as
376
+ * Alert records (e.g. close_notify) or renegotiation requests. */
377
+ int ssl3_read_bytes(SSL *s, int type, uint8_t *buf, int len, int peek) {
378
+ int al, i, ret;
379
+ unsigned int n;
380
+ SSL3_RECORD *rr;
381
+ void (*cb)(const SSL *ssl, int type, int value) = NULL;
382
+
383
+ if ((type && type != SSL3_RT_APPLICATION_DATA && type != SSL3_RT_HANDSHAKE &&
384
+ type != SSL3_RT_CHANGE_CIPHER_SPEC) ||
385
+ (peek && type != SSL3_RT_APPLICATION_DATA)) {
386
+ OPENSSL_PUT_ERROR(SSL, ERR_R_INTERNAL_ERROR);
387
+ return -1;
388
+ }
389
+
390
+ /* This may require multiple iterations. False Start will cause
391
+ * |s->handshake_func| to signal success one step early, but the handshake
392
+ * must be completely finished before other modes are accepted.
393
+ *
394
+ * TODO(davidben): Move this check up to a higher level. */
395
+ while (!s->in_handshake && SSL_in_init(s)) {
396
+ assert(type == SSL3_RT_APPLICATION_DATA);
397
+ i = s->handshake_func(s);
398
+ if (i < 0) {
399
+ return i;
400
+ }
401
+ if (i == 0) {
402
+ OPENSSL_PUT_ERROR(SSL, SSL_R_SSL_HANDSHAKE_FAILURE);
403
+ return -1;
404
+ }
405
+ }
406
+
407
+ start:
408
+ s->rwstate = SSL_NOTHING;
409
+
410
+ /* s->s3->rrec.type - is the type of record
411
+ * s->s3->rrec.data - data
412
+ * s->s3->rrec.off - offset into 'data' for next read
413
+ * s->s3->rrec.length - number of bytes. */
414
+ rr = &s->s3->rrec;
415
+
416
+ /* get new packet if necessary */
417
+ if (rr->length == 0) {
418
+ ret = ssl3_get_record(s);
419
+ if (ret <= 0) {
420
+ return ret;
421
+ }
422
+ }
423
+
424
+ /* we now have a packet which can be read and processed */
425
+
426
+ /* If the other end has shut down, throw anything we read away (even in
427
+ * 'peek' mode) */
428
+ if (s->shutdown & SSL_RECEIVED_SHUTDOWN) {
429
+ rr->length = 0;
430
+ s->rwstate = SSL_NOTHING;
431
+ return 0;
432
+ }
433
+
434
+ if (type != 0 && type == rr->type) {
435
+ s->s3->warning_alert_count = 0;
436
+
437
+ /* Make sure that we are not getting application data when we are doing a
438
+ * handshake for the first time. */
439
+ if (SSL_in_init(s) && type == SSL3_RT_APPLICATION_DATA &&
440
+ s->aead_read_ctx == NULL) {
441
+ /* TODO(davidben): Is this check redundant with the handshake_func
442
+ * check? */
443
+ al = SSL_AD_UNEXPECTED_MESSAGE;
444
+ OPENSSL_PUT_ERROR(SSL, SSL_R_APP_DATA_IN_HANDSHAKE);
445
+ goto f_err;
446
+ }
447
+
448
+ /* Discard empty records. */
449
+ if (rr->length == 0) {
450
+ goto start;
451
+ }
452
+
453
+ if (len <= 0) {
454
+ return len;
455
+ }
456
+
457
+ if ((unsigned int)len > rr->length) {
458
+ n = rr->length;
459
+ } else {
460
+ n = (unsigned int)len;
461
+ }
462
+
463
+ memcpy(buf, rr->data, n);
464
+ if (!peek) {
465
+ rr->length -= n;
466
+ rr->data += n;
467
+ if (rr->length == 0) {
468
+ /* The record has been consumed, so we may now clear the buffer. */
469
+ ssl_read_buffer_discard(s);
470
+ }
471
+ }
472
+
473
+ return n;
474
+ }
475
+
476
+ /* Process unexpected records. */
477
+
478
+ if (type == SSL3_RT_APPLICATION_DATA && rr->type == SSL3_RT_HANDSHAKE) {
479
+ /* If peer renegotiations are disabled, all out-of-order handshake records
480
+ * are fatal. Renegotiations as a server are never supported. */
481
+ if (s->server || !ssl3_can_renegotiate(s)) {
482
+ al = SSL_AD_NO_RENEGOTIATION;
483
+ OPENSSL_PUT_ERROR(SSL, SSL_R_NO_RENEGOTIATION);
484
+ goto f_err;
485
+ }
486
+
487
+ /* This must be a HelloRequest, possibly fragmented over multiple records.
488
+ * Consume data from the handshake protocol until it is complete. */
489
+ static const uint8_t kHelloRequest[] = {SSL3_MT_HELLO_REQUEST, 0, 0, 0};
490
+ while (s->s3->hello_request_len < sizeof(kHelloRequest)) {
491
+ if (rr->length == 0) {
492
+ /* Get a new record. */
493
+ goto start;
494
+ }
495
+ if (rr->data[0] != kHelloRequest[s->s3->hello_request_len]) {
496
+ al = SSL_AD_DECODE_ERROR;
497
+ OPENSSL_PUT_ERROR(SSL, SSL_R_BAD_HELLO_REQUEST);
498
+ goto f_err;
499
+ }
500
+ rr->data++;
501
+ rr->length--;
502
+ s->s3->hello_request_len++;
503
+ }
504
+ s->s3->hello_request_len = 0;
505
+
506
+ if (s->msg_callback) {
507
+ s->msg_callback(0, s->version, SSL3_RT_HANDSHAKE, kHelloRequest,
508
+ sizeof(kHelloRequest), s, s->msg_callback_arg);
509
+ }
510
+
511
+ if (!SSL_is_init_finished(s) || !s->s3->initial_handshake_complete) {
512
+ /* This cannot happen. If a handshake is in progress, |type| must be
513
+ * |SSL3_RT_HANDSHAKE|. */
514
+ assert(0);
515
+ OPENSSL_PUT_ERROR(SSL, ERR_R_INTERNAL_ERROR);
516
+ goto err;
517
+ }
518
+
519
+ if (s->renegotiate_mode == ssl_renegotiate_ignore) {
520
+ goto start;
521
+ }
522
+
523
+ /* Renegotiation is only supported at quiescent points in the application
524
+ * protocol, namely in HTTPS, just before reading the HTTP response. Require
525
+ * the record-layer be idle and avoid complexities of sending a handshake
526
+ * record while an application_data record is being written. */
527
+ if (ssl_write_buffer_is_pending(s)) {
528
+ al = SSL_AD_NO_RENEGOTIATION;
529
+ OPENSSL_PUT_ERROR(SSL, SSL_R_NO_RENEGOTIATION);
530
+ goto f_err;
531
+ }
532
+
533
+ /* Begin a new handshake. */
534
+ s->s3->total_renegotiations++;
535
+ s->state = SSL_ST_CONNECT;
536
+ i = s->handshake_func(s);
537
+ if (i < 0) {
538
+ return i;
539
+ }
540
+ if (i == 0) {
541
+ OPENSSL_PUT_ERROR(SSL, SSL_R_SSL_HANDSHAKE_FAILURE);
542
+ return -1;
543
+ }
544
+
545
+ /* The handshake completed synchronously. Continue reading records. */
546
+ goto start;
547
+ }
548
+
549
+ /* If an alert record, process one alert out of the record. Note that we allow
550
+ * a single record to contain multiple alerts. */
551
+ if (rr->type == SSL3_RT_ALERT) {
552
+ /* Alerts may not be fragmented. */
553
+ if (rr->length < 2) {
554
+ al = SSL_AD_DECODE_ERROR;
555
+ OPENSSL_PUT_ERROR(SSL, SSL_R_BAD_ALERT);
556
+ goto f_err;
557
+ }
558
+
559
+ if (s->msg_callback) {
560
+ s->msg_callback(0, s->version, SSL3_RT_ALERT, rr->data, 2, s,
561
+ s->msg_callback_arg);
562
+ }
563
+ const uint8_t alert_level = rr->data[0];
564
+ const uint8_t alert_descr = rr->data[1];
565
+ rr->length -= 2;
566
+ rr->data += 2;
567
+
568
+ if (s->info_callback != NULL) {
569
+ cb = s->info_callback;
570
+ } else if (s->ctx->info_callback != NULL) {
571
+ cb = s->ctx->info_callback;
572
+ }
573
+
574
+ if (cb != NULL) {
575
+ uint16_t alert = (alert_level << 8) | alert_descr;
576
+ cb(s, SSL_CB_READ_ALERT, alert);
577
+ }
578
+
579
+ if (alert_level == SSL3_AL_WARNING) {
580
+ s->s3->warn_alert = alert_descr;
581
+ if (alert_descr == SSL_AD_CLOSE_NOTIFY) {
582
+ s->shutdown |= SSL_RECEIVED_SHUTDOWN;
583
+ return 0;
584
+ }
585
+
586
+ /* This is a warning but we receive it if we requested renegotiation and
587
+ * the peer denied it. Terminate with a fatal alert because if
588
+ * application tried to renegotiatie it presumably had a good reason and
589
+ * expects it to succeed.
590
+ *
591
+ * In future we might have a renegotiation where we don't care if the
592
+ * peer refused it where we carry on. */
593
+ else if (alert_descr == SSL_AD_NO_RENEGOTIATION) {
594
+ al = SSL_AD_HANDSHAKE_FAILURE;
595
+ OPENSSL_PUT_ERROR(SSL, SSL_R_NO_RENEGOTIATION);
596
+ goto f_err;
597
+ }
598
+
599
+ s->s3->warning_alert_count++;
600
+ if (s->s3->warning_alert_count > kMaxWarningAlerts) {
601
+ al = SSL_AD_UNEXPECTED_MESSAGE;
602
+ OPENSSL_PUT_ERROR(SSL, SSL_R_TOO_MANY_WARNING_ALERTS);
603
+ goto f_err;
604
+ }
605
+ } else if (alert_level == SSL3_AL_FATAL) {
606
+ char tmp[16];
607
+
608
+ s->rwstate = SSL_NOTHING;
609
+ s->s3->fatal_alert = alert_descr;
610
+ OPENSSL_PUT_ERROR(SSL, SSL_AD_REASON_OFFSET + alert_descr);
611
+ BIO_snprintf(tmp, sizeof(tmp), "%d", alert_descr);
612
+ ERR_add_error_data(2, "SSL alert number ", tmp);
613
+ s->shutdown |= SSL_RECEIVED_SHUTDOWN;
614
+ SSL_CTX_remove_session(s->ctx, s->session);
615
+ return 0;
616
+ } else {
617
+ al = SSL_AD_ILLEGAL_PARAMETER;
618
+ OPENSSL_PUT_ERROR(SSL, SSL_R_UNKNOWN_ALERT_TYPE);
619
+ goto f_err;
620
+ }
621
+
622
+ goto start;
623
+ }
624
+
625
+ if (s->shutdown & SSL_SENT_SHUTDOWN) {
626
+ /* close_notify has been sent, so discard all records other than alerts. */
627
+ rr->length = 0;
628
+ goto start;
629
+ }
630
+
631
+ al = SSL_AD_UNEXPECTED_MESSAGE;
632
+ OPENSSL_PUT_ERROR(SSL, SSL_R_UNEXPECTED_RECORD);
633
+
634
+ f_err:
635
+ ssl3_send_alert(s, SSL3_AL_FATAL, al);
636
+ err:
637
+ return -1;
638
+ }
639
+
640
+ int ssl3_do_change_cipher_spec(SSL *s) {
641
+ int i;
642
+
643
+ if (s->state & SSL_ST_ACCEPT) {
644
+ i = SSL3_CHANGE_CIPHER_SERVER_READ;
645
+ } else {
646
+ i = SSL3_CHANGE_CIPHER_CLIENT_READ;
647
+ }
648
+
649
+ if (s->s3->tmp.key_block == NULL) {
650
+ if (s->session == NULL || s->session->master_key_length == 0) {
651
+ /* might happen if dtls1_read_bytes() calls this */
652
+ OPENSSL_PUT_ERROR(SSL, SSL_R_CCS_RECEIVED_EARLY);
653
+ return 0;
654
+ }
655
+
656
+ s->session->cipher = s->s3->tmp.new_cipher;
657
+ if (!s->enc_method->setup_key_block(s)) {
658
+ return 0;
659
+ }
660
+ }
661
+
662
+ if (!s->enc_method->change_cipher_state(s, i)) {
663
+ return 0;
664
+ }
665
+
666
+ return 1;
667
+ }
668
+
669
+ int ssl3_send_alert(SSL *s, int level, int desc) {
670
+ /* Map tls/ssl alert value to correct one */
671
+ desc = s->enc_method->alert_value(desc);
672
+ if (s->version == SSL3_VERSION && desc == SSL_AD_PROTOCOL_VERSION) {
673
+ /* SSL 3.0 does not have protocol_version alerts */
674
+ desc = SSL_AD_HANDSHAKE_FAILURE;
675
+ }
676
+ if (desc < 0) {
677
+ return -1;
678
+ }
679
+
680
+ /* If a fatal one, remove from cache */
681
+ if (level == 2 && s->session != NULL) {
682
+ SSL_CTX_remove_session(s->ctx, s->session);
683
+ }
684
+
685
+ s->s3->alert_dispatch = 1;
686
+ s->s3->send_alert[0] = level;
687
+ s->s3->send_alert[1] = desc;
688
+ if (!ssl_write_buffer_is_pending(s)) {
689
+ /* Nothing is being written out, so the alert may be dispatched
690
+ * immediately. */
691
+ return s->method->ssl_dispatch_alert(s);
692
+ }
693
+
694
+ /* else data is still being written out, we will get written some time in the
695
+ * future */
696
+ return -1;
697
+ }
698
+
699
+ int ssl3_dispatch_alert(SSL *s) {
700
+ int i, j;
701
+ void (*cb)(const SSL *ssl, int type, int value) = NULL;
702
+
703
+ s->s3->alert_dispatch = 0;
704
+ i = do_ssl3_write(s, SSL3_RT_ALERT, &s->s3->send_alert[0], 2);
705
+ if (i <= 0) {
706
+ s->s3->alert_dispatch = 1;
707
+ } else {
708
+ /* Alert sent to BIO. If it is important, flush it now. If the message
709
+ * does not get sent due to non-blocking IO, we will not worry too much. */
710
+ if (s->s3->send_alert[0] == SSL3_AL_FATAL) {
711
+ BIO_flush(s->wbio);
712
+ }
713
+
714
+ if (s->msg_callback) {
715
+ s->msg_callback(1, s->version, SSL3_RT_ALERT, s->s3->send_alert, 2, s,
716
+ s->msg_callback_arg);
717
+ }
718
+
719
+ if (s->info_callback != NULL) {
720
+ cb = s->info_callback;
721
+ } else if (s->ctx->info_callback != NULL) {
722
+ cb = s->ctx->info_callback;
723
+ }
724
+
725
+ if (cb != NULL) {
726
+ j = (s->s3->send_alert[0] << 8) | s->s3->send_alert[1];
727
+ cb(s, SSL_CB_WRITE_ALERT, j);
728
+ }
729
+ }
730
+
731
+ return i;
732
+ }