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,319 @@
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
+ #include <openssl/ssl.h>
16
+
17
+ #include <assert.h>
18
+ #include <limits.h>
19
+ #include <stdlib.h>
20
+ #include <string.h>
21
+
22
+ #include <openssl/bio.h>
23
+ #include <openssl/err.h>
24
+ #include <openssl/mem.h>
25
+ #include <openssl/type_check.h>
26
+
27
+ #include "internal.h"
28
+
29
+
30
+ OPENSSL_COMPILE_ASSERT(0xffff <= INT_MAX, uint16_fits_in_int);
31
+
32
+ OPENSSL_COMPILE_ASSERT((SSL3_ALIGN_PAYLOAD & (SSL3_ALIGN_PAYLOAD - 1)) == 0,
33
+ align_to_a_power_of_two);
34
+
35
+ /* setup_buffer initializes |buf| with capacity |cap|, aligned such that data
36
+ * written after |header_len| is aligned to a |SSL3_ALIGN_PAYLOAD|-byte
37
+ * boundary. It returns one on success and zero on error. */
38
+ static int setup_buffer(SSL3_BUFFER *buf, size_t header_len, size_t cap) {
39
+ if (buf->buf != NULL || cap > 0xffff) {
40
+ OPENSSL_PUT_ERROR(SSL, ERR_R_INTERNAL_ERROR);
41
+ return 0;
42
+ }
43
+
44
+ /* Add up to |SSL3_ALIGN_PAYLOAD| - 1 bytes of slack for alignment. */
45
+ buf->buf = OPENSSL_malloc(cap + SSL3_ALIGN_PAYLOAD - 1);
46
+ if (buf->buf == NULL) {
47
+ OPENSSL_PUT_ERROR(SSL, ERR_R_MALLOC_FAILURE);
48
+ return 0;
49
+ }
50
+
51
+ /* Arrange the buffer such that the record body is aligned. */
52
+ buf->offset = (0 - header_len - (uintptr_t)buf->buf) &
53
+ (SSL3_ALIGN_PAYLOAD - 1);
54
+ buf->len = 0;
55
+ buf->cap = cap;
56
+ return 1;
57
+ }
58
+
59
+ static void consume_buffer(SSL3_BUFFER *buf, size_t len) {
60
+ if (len > buf->len) {
61
+ abort();
62
+ }
63
+ buf->offset += (uint16_t)len;
64
+ buf->len -= (uint16_t)len;
65
+ buf->cap -= (uint16_t)len;
66
+ }
67
+
68
+ static void clear_buffer(SSL3_BUFFER *buf) {
69
+ OPENSSL_free(buf->buf);
70
+ memset(buf, 0, sizeof(SSL3_BUFFER));
71
+ }
72
+
73
+ OPENSSL_COMPILE_ASSERT(DTLS1_RT_HEADER_LENGTH + SSL3_RT_MAX_ENCRYPTED_LENGTH <=
74
+ 0xffff,
75
+ maximum_read_buffer_too_large);
76
+
77
+ /* setup_read_buffer initializes the read buffer if not already initialized. It
78
+ * returns one on success and zero on failure. */
79
+ static int setup_read_buffer(SSL *ssl) {
80
+ SSL3_BUFFER *buf = &ssl->s3->read_buffer;
81
+
82
+ if (buf->buf != NULL) {
83
+ return 1;
84
+ }
85
+
86
+ size_t header_len = ssl_record_prefix_len(ssl);
87
+ size_t cap = SSL3_RT_MAX_ENCRYPTED_LENGTH;
88
+ if (SSL_IS_DTLS(ssl)) {
89
+ cap += DTLS1_RT_HEADER_LENGTH;
90
+ } else {
91
+ cap += SSL3_RT_HEADER_LENGTH;
92
+ }
93
+
94
+ return setup_buffer(buf, header_len, cap);
95
+ }
96
+
97
+ uint8_t *ssl_read_buffer(SSL *ssl) {
98
+ return ssl->s3->read_buffer.buf + ssl->s3->read_buffer.offset;
99
+ }
100
+
101
+ size_t ssl_read_buffer_len(const SSL *ssl) {
102
+ return ssl->s3->read_buffer.len;
103
+ }
104
+
105
+ static int dtls_read_buffer_next_packet(SSL *ssl) {
106
+ SSL3_BUFFER *buf = &ssl->s3->read_buffer;
107
+
108
+ if (buf->len > 0) {
109
+ /* It is an error to call |dtls_read_buffer_extend| when the read buffer is
110
+ * not empty. */
111
+ OPENSSL_PUT_ERROR(SSL, ERR_R_INTERNAL_ERROR);
112
+ return -1;
113
+ }
114
+
115
+ /* Read a single packet from |ssl->rbio|. |buf->cap| must fit in an int. */
116
+ ssl->rwstate = SSL_READING;
117
+ int ret = BIO_read(ssl->rbio, buf->buf + buf->offset, (int)buf->cap);
118
+ if (ret <= 0) {
119
+ return ret;
120
+ }
121
+ ssl->rwstate = SSL_NOTHING;
122
+ /* |BIO_read| was bound by |buf->cap|, so this cannot overflow. */
123
+ buf->len = (uint16_t)ret;
124
+ return 1;
125
+ }
126
+
127
+ static int tls_read_buffer_extend_to(SSL *ssl, size_t len) {
128
+ SSL3_BUFFER *buf = &ssl->s3->read_buffer;
129
+
130
+ if (len > buf->cap) {
131
+ OPENSSL_PUT_ERROR(SSL, SSL_R_BUFFER_TOO_SMALL);
132
+ return -1;
133
+ }
134
+
135
+ /* Read until the target length is reached. */
136
+ while (buf->len < len) {
137
+ /* The amount of data to read is bounded by |buf->cap|, which must fit in an
138
+ * int. */
139
+ ssl->rwstate = SSL_READING;
140
+ int ret = BIO_read(ssl->rbio, buf->buf + buf->offset + buf->len,
141
+ (int)(len - buf->len));
142
+ if (ret <= 0) {
143
+ return ret;
144
+ }
145
+ ssl->rwstate = SSL_NOTHING;
146
+ /* |BIO_read| was bound by |buf->cap - buf->len|, so this cannot
147
+ * overflow. */
148
+ buf->len += (uint16_t)ret;
149
+ }
150
+
151
+ return 1;
152
+ }
153
+
154
+ int ssl_read_buffer_extend_to(SSL *ssl, size_t len) {
155
+ /* |ssl_read_buffer_extend_to| implicitly discards any consumed data. */
156
+ ssl_read_buffer_discard(ssl);
157
+
158
+ if (!setup_read_buffer(ssl)) {
159
+ return -1;
160
+ }
161
+
162
+ if (ssl->rbio == NULL) {
163
+ OPENSSL_PUT_ERROR(SSL, SSL_R_BIO_NOT_SET);
164
+ return -1;
165
+ }
166
+
167
+ ERR_clear_system_error();
168
+
169
+ int ret;
170
+ if (SSL_IS_DTLS(ssl)) {
171
+ /* |len| is ignored for a datagram transport. */
172
+ ret = dtls_read_buffer_next_packet(ssl);
173
+ } else {
174
+ ret = tls_read_buffer_extend_to(ssl, len);
175
+ }
176
+
177
+ if (ret <= 0) {
178
+ /* If the buffer was empty originally and remained empty after attempting to
179
+ * extend it, release the buffer until the next attempt. */
180
+ ssl_read_buffer_discard(ssl);
181
+ }
182
+ return ret;
183
+ }
184
+
185
+ void ssl_read_buffer_consume(SSL *ssl, size_t len) {
186
+ SSL3_BUFFER *buf = &ssl->s3->read_buffer;
187
+
188
+ consume_buffer(buf, len);
189
+ if (!SSL_IS_DTLS(ssl)) {
190
+ /* The TLS stack never reads beyond the current record, so there will never
191
+ * be unconsumed data. If read-ahead is ever reimplemented,
192
+ * |ssl_read_buffer_discard| will require a |memcpy| to shift the excess
193
+ * back to the front of the buffer, to ensure there is enough space for the
194
+ * next record. */
195
+ assert(buf->len == 0);
196
+ }
197
+ }
198
+
199
+ void ssl_read_buffer_discard(SSL *ssl) {
200
+ if (ssl->s3->read_buffer.len == 0) {
201
+ ssl_read_buffer_clear(ssl);
202
+ }
203
+ }
204
+
205
+ void ssl_read_buffer_clear(SSL *ssl) {
206
+ clear_buffer(&ssl->s3->read_buffer);
207
+ }
208
+
209
+
210
+ int ssl_write_buffer_is_pending(const SSL *ssl) {
211
+ return ssl->s3->write_buffer.len > 0;
212
+ }
213
+
214
+ OPENSSL_COMPILE_ASSERT(SSL3_RT_HEADER_LENGTH * 2 +
215
+ SSL3_RT_SEND_MAX_ENCRYPTED_OVERHEAD * 2 +
216
+ SSL3_RT_MAX_PLAIN_LENGTH <= 0xffff,
217
+ maximum_tls_write_buffer_too_large);
218
+
219
+ OPENSSL_COMPILE_ASSERT(DTLS1_RT_HEADER_LENGTH +
220
+ SSL3_RT_SEND_MAX_ENCRYPTED_OVERHEAD +
221
+ SSL3_RT_MAX_PLAIN_LENGTH <= 0xffff,
222
+ maximum_dtls_write_buffer_too_large);
223
+
224
+ int ssl_write_buffer_init(SSL *ssl, uint8_t **out_ptr, size_t max_len) {
225
+ SSL3_BUFFER *buf = &ssl->s3->write_buffer;
226
+
227
+ if (buf->buf != NULL) {
228
+ OPENSSL_PUT_ERROR(SSL, ERR_R_INTERNAL_ERROR);
229
+ return 0;
230
+ }
231
+
232
+ size_t header_len = ssl_seal_prefix_len(ssl);
233
+
234
+ /* TODO(davidben): This matches the original behavior in keeping the malloc
235
+ * size consistent. Does this matter? |cap| could just be |max_len|. */
236
+ size_t cap = SSL3_RT_MAX_PLAIN_LENGTH + SSL3_RT_SEND_MAX_ENCRYPTED_OVERHEAD;
237
+ if (SSL_IS_DTLS(ssl)) {
238
+ cap += DTLS1_RT_HEADER_LENGTH;
239
+ } else {
240
+ cap += SSL3_RT_HEADER_LENGTH;
241
+ if (ssl->mode & SSL_MODE_CBC_RECORD_SPLITTING) {
242
+ cap += SSL3_RT_HEADER_LENGTH + SSL3_RT_SEND_MAX_ENCRYPTED_OVERHEAD;
243
+ }
244
+ }
245
+
246
+ if (max_len > cap) {
247
+ OPENSSL_PUT_ERROR(SSL, SSL_R_BUFFER_TOO_SMALL);
248
+ return 0;
249
+ }
250
+
251
+ if (!setup_buffer(buf, header_len, cap)) {
252
+ return 0;
253
+ }
254
+ *out_ptr = buf->buf + buf->offset;
255
+ return 1;
256
+ }
257
+
258
+ void ssl_write_buffer_set_len(SSL *ssl, size_t len) {
259
+ SSL3_BUFFER *buf = &ssl->s3->write_buffer;
260
+
261
+ if (len > buf->cap) {
262
+ abort();
263
+ }
264
+ buf->len = len;
265
+ }
266
+
267
+ static int tls_write_buffer_flush(SSL *ssl) {
268
+ SSL3_BUFFER *buf = &ssl->s3->write_buffer;
269
+
270
+ while (buf->len > 0) {
271
+ ssl->rwstate = SSL_WRITING;
272
+ int ret = BIO_write(ssl->wbio, buf->buf + buf->offset, buf->len);
273
+ if (ret <= 0) {
274
+ return ret;
275
+ }
276
+ ssl->rwstate = SSL_NOTHING;
277
+ consume_buffer(buf, (size_t)ret);
278
+ }
279
+ ssl_write_buffer_clear(ssl);
280
+ return 1;
281
+ }
282
+
283
+ static int dtls_write_buffer_flush(SSL *ssl) {
284
+ SSL3_BUFFER *buf = &ssl->s3->write_buffer;
285
+ if (buf->len == 0) {
286
+ return 1;
287
+ }
288
+
289
+ ssl->rwstate = SSL_WRITING;
290
+ int ret = BIO_write(ssl->wbio, buf->buf + buf->offset, buf->len);
291
+ if (ret <= 0) {
292
+ /* If the write failed, drop the write buffer anyway. Datagram transports
293
+ * can't write half a packet, so the caller is expected to retry from the
294
+ * top. */
295
+ ssl_write_buffer_clear(ssl);
296
+ return ret;
297
+ }
298
+ ssl->rwstate = SSL_NOTHING;
299
+ ssl_write_buffer_clear(ssl);
300
+ return 1;
301
+ }
302
+
303
+ int ssl_write_buffer_flush(SSL *ssl) {
304
+ if (ssl->wbio == NULL) {
305
+ OPENSSL_PUT_ERROR(SSL, SSL_R_BIO_NOT_SET);
306
+ return -1;
307
+ }
308
+ ERR_clear_system_error();
309
+
310
+ if (SSL_IS_DTLS(ssl)) {
311
+ return dtls_write_buffer_flush(ssl);
312
+ } else {
313
+ return tls_write_buffer_flush(ssl);
314
+ }
315
+ }
316
+
317
+ void ssl_write_buffer_clear(SSL *ssl) {
318
+ clear_buffer(&ssl->s3->write_buffer);
319
+ }
@@ -0,0 +1,539 @@
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-2007 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
+ */
110
+ /* ====================================================================
111
+ * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED.
112
+ * ECC cipher suite support in OpenSSL originally developed by
113
+ * SUN MICROSYSTEMS, INC., and contributed to the OpenSSL project. */
114
+
115
+ #include <openssl/ssl.h>
116
+
117
+ #include <string.h>
118
+
119
+ #include <openssl/bn.h>
120
+ #include <openssl/buf.h>
121
+ #include <openssl/ec_key.h>
122
+ #include <openssl/dh.h>
123
+ #include <openssl/err.h>
124
+ #include <openssl/mem.h>
125
+ #include <openssl/x509.h>
126
+ #include <openssl/x509v3.h>
127
+
128
+ #include "../crypto/dh/internal.h"
129
+ #include "../crypto/internal.h"
130
+ #include "internal.h"
131
+
132
+
133
+ int SSL_get_ex_data_X509_STORE_CTX_idx(void) {
134
+ /* The ex_data index to go from |X509_STORE_CTX| to |SSL| always uses the
135
+ * reserved app_data slot. Before ex_data was introduced, app_data was used.
136
+ * Avoid breaking any software which assumes |X509_STORE_CTX_get_app_data|
137
+ * works. */
138
+ return 0;
139
+ }
140
+
141
+ CERT *ssl_cert_new(void) {
142
+ CERT *ret = (CERT *)OPENSSL_malloc(sizeof(CERT));
143
+ if (ret == NULL) {
144
+ OPENSSL_PUT_ERROR(SSL, ERR_R_MALLOC_FAILURE);
145
+ return NULL;
146
+ }
147
+ memset(ret, 0, sizeof(CERT));
148
+
149
+ return ret;
150
+ }
151
+
152
+ CERT *ssl_cert_dup(CERT *cert) {
153
+ CERT *ret = (CERT *)OPENSSL_malloc(sizeof(CERT));
154
+ if (ret == NULL) {
155
+ OPENSSL_PUT_ERROR(SSL, ERR_R_MALLOC_FAILURE);
156
+ return NULL;
157
+ }
158
+ memset(ret, 0, sizeof(CERT));
159
+
160
+ ret->mask_k = cert->mask_k;
161
+ ret->mask_a = cert->mask_a;
162
+
163
+ if (cert->dh_tmp != NULL) {
164
+ ret->dh_tmp = DHparams_dup(cert->dh_tmp);
165
+ if (ret->dh_tmp == NULL) {
166
+ OPENSSL_PUT_ERROR(SSL, ERR_R_DH_LIB);
167
+ goto err;
168
+ }
169
+ }
170
+ ret->dh_tmp_cb = cert->dh_tmp_cb;
171
+
172
+ if (cert->x509 != NULL) {
173
+ ret->x509 = X509_up_ref(cert->x509);
174
+ }
175
+
176
+ if (cert->privatekey != NULL) {
177
+ ret->privatekey = EVP_PKEY_up_ref(cert->privatekey);
178
+ }
179
+
180
+ if (cert->chain) {
181
+ ret->chain = X509_chain_up_ref(cert->chain);
182
+ if (!ret->chain) {
183
+ OPENSSL_PUT_ERROR(SSL, ERR_R_MALLOC_FAILURE);
184
+ goto err;
185
+ }
186
+ }
187
+
188
+ ret->cert_cb = cert->cert_cb;
189
+ ret->cert_cb_arg = cert->cert_cb_arg;
190
+
191
+ return ret;
192
+
193
+ err:
194
+ ssl_cert_free(ret);
195
+ return NULL;
196
+ }
197
+
198
+ /* Free up and clear all certificates and chains */
199
+ void ssl_cert_clear_certs(CERT *cert) {
200
+ if (cert == NULL) {
201
+ return;
202
+ }
203
+
204
+ X509_free(cert->x509);
205
+ cert->x509 = NULL;
206
+ EVP_PKEY_free(cert->privatekey);
207
+ cert->privatekey = NULL;
208
+ sk_X509_pop_free(cert->chain, X509_free);
209
+ cert->chain = NULL;
210
+ cert->key_method = NULL;
211
+ }
212
+
213
+ void ssl_cert_free(CERT *c) {
214
+ if (c == NULL) {
215
+ return;
216
+ }
217
+
218
+ DH_free(c->dh_tmp);
219
+
220
+ ssl_cert_clear_certs(c);
221
+ OPENSSL_free(c->peer_sigalgs);
222
+ OPENSSL_free(c->digest_nids);
223
+
224
+ OPENSSL_free(c);
225
+ }
226
+
227
+ int ssl_cert_set0_chain(CERT *cert, STACK_OF(X509) *chain) {
228
+ sk_X509_pop_free(cert->chain, X509_free);
229
+ cert->chain = chain;
230
+ return 1;
231
+ }
232
+
233
+ int ssl_cert_set1_chain(CERT *cert, STACK_OF(X509) *chain) {
234
+ STACK_OF(X509) *dchain;
235
+ if (chain == NULL) {
236
+ return ssl_cert_set0_chain(cert, NULL);
237
+ }
238
+
239
+ dchain = X509_chain_up_ref(chain);
240
+ if (dchain == NULL) {
241
+ return 0;
242
+ }
243
+
244
+ if (!ssl_cert_set0_chain(cert, dchain)) {
245
+ sk_X509_pop_free(dchain, X509_free);
246
+ return 0;
247
+ }
248
+
249
+ return 1;
250
+ }
251
+
252
+ int ssl_cert_add0_chain_cert(CERT *cert, X509 *x509) {
253
+ if (cert->chain == NULL) {
254
+ cert->chain = sk_X509_new_null();
255
+ }
256
+ if (cert->chain == NULL || !sk_X509_push(cert->chain, x509)) {
257
+ return 0;
258
+ }
259
+
260
+ return 1;
261
+ }
262
+
263
+ int ssl_cert_add1_chain_cert(CERT *cert, X509 *x509) {
264
+ if (!ssl_cert_add0_chain_cert(cert, x509)) {
265
+ return 0;
266
+ }
267
+
268
+ X509_up_ref(x509);
269
+ return 1;
270
+ }
271
+
272
+ void ssl_cert_set_cert_cb(CERT *c, int (*cb)(SSL *ssl, void *arg), void *arg) {
273
+ c->cert_cb = cb;
274
+ c->cert_cb_arg = arg;
275
+ }
276
+
277
+ int ssl_verify_cert_chain(SSL *ssl, STACK_OF(X509) *cert_chain) {
278
+ if (cert_chain == NULL || sk_X509_num(cert_chain) == 0) {
279
+ return 0;
280
+ }
281
+
282
+ X509 *leaf = sk_X509_value(cert_chain, 0);
283
+ int ret = 0;
284
+ X509_STORE_CTX ctx;
285
+ if (!X509_STORE_CTX_init(&ctx, ssl->ctx->cert_store, leaf, cert_chain)) {
286
+ OPENSSL_PUT_ERROR(SSL, ERR_R_X509_LIB);
287
+ return 0;
288
+ }
289
+ if (!X509_STORE_CTX_set_ex_data(&ctx, SSL_get_ex_data_X509_STORE_CTX_idx(),
290
+ ssl)) {
291
+ goto err;
292
+ }
293
+
294
+ /* We need to inherit the verify parameters. These can be determined by the
295
+ * context: if its a server it will verify SSL client certificates or vice
296
+ * versa. */
297
+ X509_STORE_CTX_set_default(&ctx, ssl->server ? "ssl_client" : "ssl_server");
298
+
299
+ /* Anything non-default in "param" should overwrite anything in the ctx. */
300
+ X509_VERIFY_PARAM_set1(X509_STORE_CTX_get0_param(&ctx), ssl->param);
301
+
302
+ if (ssl->verify_callback) {
303
+ X509_STORE_CTX_set_verify_cb(&ctx, ssl->verify_callback);
304
+ }
305
+
306
+ if (ssl->ctx->app_verify_callback != NULL) {
307
+ ret = ssl->ctx->app_verify_callback(&ctx, ssl->ctx->app_verify_arg);
308
+ } else {
309
+ ret = X509_verify_cert(&ctx);
310
+ }
311
+
312
+ ssl->verify_result = ctx.error;
313
+
314
+ err:
315
+ X509_STORE_CTX_cleanup(&ctx);
316
+ return ret;
317
+ }
318
+
319
+ static void set_client_CA_list(STACK_OF(X509_NAME) **ca_list,
320
+ STACK_OF(X509_NAME) *name_list) {
321
+ sk_X509_NAME_pop_free(*ca_list, X509_NAME_free);
322
+ *ca_list = name_list;
323
+ }
324
+
325
+ STACK_OF(X509_NAME) *SSL_dup_CA_list(STACK_OF(X509_NAME) *list) {
326
+ STACK_OF(X509_NAME) *ret = sk_X509_NAME_new_null();
327
+ if (ret == NULL) {
328
+ return NULL;
329
+ }
330
+
331
+ size_t i;
332
+ for (i = 0; i < sk_X509_NAME_num(list); i++) {
333
+ X509_NAME *name = X509_NAME_dup(sk_X509_NAME_value(list, i));
334
+ if (name == NULL || !sk_X509_NAME_push(ret, name)) {
335
+ X509_NAME_free(name);
336
+ sk_X509_NAME_pop_free(ret, X509_NAME_free);
337
+ return NULL;
338
+ }
339
+ }
340
+
341
+ return ret;
342
+ }
343
+
344
+ void SSL_set_client_CA_list(SSL *ssl, STACK_OF(X509_NAME) *name_list) {
345
+ set_client_CA_list(&ssl->client_CA, name_list);
346
+ }
347
+
348
+ void SSL_CTX_set_client_CA_list(SSL_CTX *ctx, STACK_OF(X509_NAME) *name_list) {
349
+ set_client_CA_list(&ctx->client_CA, name_list);
350
+ }
351
+
352
+ STACK_OF(X509_NAME) *SSL_CTX_get_client_CA_list(const SSL_CTX *ctx) {
353
+ return ctx->client_CA;
354
+ }
355
+
356
+ STACK_OF(X509_NAME) *SSL_get_client_CA_list(const SSL *ssl) {
357
+ /* For historical reasons, this function is used both to query configuration
358
+ * state on a server as well as handshake state on a client. However, whether
359
+ * |ssl| is a client or server is not known until explicitly configured with
360
+ * |SSL_set_connect_state|. If |handshake_func| is NULL, |ssl| is in an
361
+ * indeterminate mode and |ssl->server| is unset. */
362
+ if (ssl->handshake_func != NULL && !ssl->server) {
363
+ return ssl->s3->tmp.ca_names;
364
+ }
365
+
366
+ if (ssl->client_CA != NULL) {
367
+ return ssl->client_CA;
368
+ }
369
+ return ssl->ctx->client_CA;
370
+ }
371
+
372
+ static int add_client_CA(STACK_OF(X509_NAME) **sk, X509 *x509) {
373
+ X509_NAME *name;
374
+
375
+ if (x509 == NULL) {
376
+ return 0;
377
+ }
378
+ if (*sk == NULL) {
379
+ *sk = sk_X509_NAME_new_null();
380
+ if (*sk == NULL) {
381
+ return 0;
382
+ }
383
+ }
384
+
385
+ name = X509_NAME_dup(X509_get_subject_name(x509));
386
+ if (name == NULL) {
387
+ return 0;
388
+ }
389
+
390
+ if (!sk_X509_NAME_push(*sk, name)) {
391
+ X509_NAME_free(name);
392
+ return 0;
393
+ }
394
+
395
+ return 1;
396
+ }
397
+
398
+ int SSL_add_client_CA(SSL *ssl, X509 *x509) {
399
+ return add_client_CA(&ssl->client_CA, x509);
400
+ }
401
+
402
+ int SSL_CTX_add_client_CA(SSL_CTX *ctx, X509 *x509) {
403
+ return add_client_CA(&ctx->client_CA, x509);
404
+ }
405
+
406
+ /* Add a certificate to a BUF_MEM structure */
407
+ static int ssl_add_cert_to_buf(BUF_MEM *buf, unsigned long *l, X509 *x) {
408
+ int n;
409
+ uint8_t *p;
410
+
411
+ n = i2d_X509(x, NULL);
412
+ if (!BUF_MEM_grow_clean(buf, (int)(n + (*l) + 3))) {
413
+ OPENSSL_PUT_ERROR(SSL, ERR_R_BUF_LIB);
414
+ return 0;
415
+ }
416
+ p = (uint8_t *)&(buf->data[*l]);
417
+ l2n3(n, p);
418
+ i2d_X509(x, &p);
419
+ *l += n + 3;
420
+
421
+ return 1;
422
+ }
423
+
424
+ /* Add certificate chain to internal SSL BUF_MEM structure. */
425
+ int ssl_add_cert_chain(SSL *ssl, unsigned long *l) {
426
+ CERT *cert = ssl->cert;
427
+ BUF_MEM *buf = ssl->init_buf;
428
+ int no_chain = 0;
429
+ size_t i;
430
+
431
+ X509 *x = cert->x509;
432
+ STACK_OF(X509) *chain = cert->chain;
433
+
434
+ if (x == NULL) {
435
+ OPENSSL_PUT_ERROR(SSL, SSL_R_NO_CERTIFICATE_SET);
436
+ return 0;
437
+ }
438
+
439
+ if ((ssl->mode & SSL_MODE_NO_AUTO_CHAIN) || chain != NULL) {
440
+ no_chain = 1;
441
+ }
442
+
443
+ if (no_chain) {
444
+ if (!ssl_add_cert_to_buf(buf, l, x)) {
445
+ return 0;
446
+ }
447
+
448
+ for (i = 0; i < sk_X509_num(chain); i++) {
449
+ x = sk_X509_value(chain, i);
450
+ if (!ssl_add_cert_to_buf(buf, l, x)) {
451
+ return 0;
452
+ }
453
+ }
454
+ } else {
455
+ X509_STORE_CTX xs_ctx;
456
+
457
+ if (!X509_STORE_CTX_init(&xs_ctx, ssl->ctx->cert_store, x, NULL)) {
458
+ OPENSSL_PUT_ERROR(SSL, ERR_R_X509_LIB);
459
+ return 0;
460
+ }
461
+ X509_verify_cert(&xs_ctx);
462
+ /* Don't leave errors in the queue */
463
+ ERR_clear_error();
464
+ for (i = 0; i < sk_X509_num(xs_ctx.chain); i++) {
465
+ x = sk_X509_value(xs_ctx.chain, i);
466
+
467
+ if (!ssl_add_cert_to_buf(buf, l, x)) {
468
+ X509_STORE_CTX_cleanup(&xs_ctx);
469
+ return 0;
470
+ }
471
+ }
472
+ X509_STORE_CTX_cleanup(&xs_ctx);
473
+ }
474
+
475
+ return 1;
476
+ }
477
+
478
+ int SSL_CTX_set0_chain(SSL_CTX *ctx, STACK_OF(X509) *chain) {
479
+ return ssl_cert_set0_chain(ctx->cert, chain);
480
+ }
481
+
482
+ int SSL_CTX_set1_chain(SSL_CTX *ctx, STACK_OF(X509) *chain) {
483
+ return ssl_cert_set1_chain(ctx->cert, chain);
484
+ }
485
+
486
+ int SSL_set0_chain(SSL *ssl, STACK_OF(X509) *chain) {
487
+ return ssl_cert_set0_chain(ssl->cert, chain);
488
+ }
489
+
490
+ int SSL_set1_chain(SSL *ssl, STACK_OF(X509) *chain) {
491
+ return ssl_cert_set1_chain(ssl->cert, chain);
492
+ }
493
+
494
+ int SSL_CTX_add0_chain_cert(SSL_CTX *ctx, X509 *x509) {
495
+ return ssl_cert_add0_chain_cert(ctx->cert, x509);
496
+ }
497
+
498
+ int SSL_CTX_add1_chain_cert(SSL_CTX *ctx, X509 *x509) {
499
+ return ssl_cert_add1_chain_cert(ctx->cert, x509);
500
+ }
501
+
502
+ int SSL_CTX_add_extra_chain_cert(SSL_CTX *ctx, X509 *x509) {
503
+ return SSL_CTX_add0_chain_cert(ctx, x509);
504
+ }
505
+
506
+ int SSL_add0_chain_cert(SSL *ssl, X509 *x509) {
507
+ return ssl_cert_add0_chain_cert(ssl->cert, x509);
508
+ }
509
+
510
+ int SSL_add1_chain_cert(SSL *ssl, X509 *x509) {
511
+ return ssl_cert_add1_chain_cert(ssl->cert, x509);
512
+ }
513
+
514
+ int SSL_CTX_clear_chain_certs(SSL_CTX *ctx) {
515
+ return SSL_CTX_set0_chain(ctx, NULL);
516
+ }
517
+
518
+ int SSL_CTX_clear_extra_chain_certs(SSL_CTX *ctx) {
519
+ return SSL_CTX_clear_chain_certs(ctx);
520
+ }
521
+
522
+ int SSL_clear_chain_certs(SSL *ssl) {
523
+ return SSL_set0_chain(ssl, NULL);
524
+ }
525
+
526
+ int SSL_CTX_get0_chain_certs(const SSL_CTX *ctx, STACK_OF(X509) **out_chain) {
527
+ *out_chain = ctx->cert->chain;
528
+ return 1;
529
+ }
530
+
531
+ int SSL_CTX_get_extra_chain_certs(const SSL_CTX *ctx,
532
+ STACK_OF(X509) **out_chain) {
533
+ return SSL_CTX_get0_chain_certs(ctx, out_chain);
534
+ }
535
+
536
+ int SSL_get0_chain_certs(const SSL *ssl, STACK_OF(X509) **out_chain) {
537
+ *out_chain = ssl->cert->chain;
538
+ return 1;
539
+ }