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,133 @@
1
+ /* pcy_map.c */
2
+ /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL
3
+ * project 2004.
4
+ */
5
+ /* ====================================================================
6
+ * Copyright (c) 2004 The OpenSSL Project. All rights reserved.
7
+ *
8
+ * Redistribution and use in source and binary forms, with or without
9
+ * modification, are permitted provided that the following conditions
10
+ * are met:
11
+ *
12
+ * 1. Redistributions of source code must retain the above copyright
13
+ * notice, this list of conditions and the following disclaimer.
14
+ *
15
+ * 2. Redistributions in binary form must reproduce the above copyright
16
+ * notice, this list of conditions and the following disclaimer in
17
+ * the documentation and/or other materials provided with the
18
+ * distribution.
19
+ *
20
+ * 3. All advertising materials mentioning features or use of this
21
+ * software must display the following acknowledgment:
22
+ * "This product includes software developed by the OpenSSL Project
23
+ * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)"
24
+ *
25
+ * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
26
+ * endorse or promote products derived from this software without
27
+ * prior written permission. For written permission, please contact
28
+ * licensing@OpenSSL.org.
29
+ *
30
+ * 5. Products derived from this software may not be called "OpenSSL"
31
+ * nor may "OpenSSL" appear in their names without prior written
32
+ * permission of the OpenSSL Project.
33
+ *
34
+ * 6. Redistributions of any form whatsoever must retain the following
35
+ * acknowledgment:
36
+ * "This product includes software developed by the OpenSSL Project
37
+ * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)"
38
+ *
39
+ * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
40
+ * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
41
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
42
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
43
+ * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
44
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
45
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
46
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
47
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
48
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
49
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
50
+ * OF THE POSSIBILITY OF SUCH DAMAGE.
51
+ * ====================================================================
52
+ *
53
+ * This product includes cryptographic software written by Eric Young
54
+ * (eay@cryptsoft.com). This product includes software written by Tim
55
+ * Hudson (tjh@cryptsoft.com).
56
+ *
57
+ */
58
+
59
+ #include <openssl/obj.h>
60
+ #include <openssl/x509.h>
61
+ #include <openssl/x509v3.h>
62
+
63
+ #include "pcy_int.h"
64
+
65
+
66
+ /* Set policy mapping entries in cache.
67
+ * Note: this modifies the passed POLICY_MAPPINGS structure
68
+ */
69
+
70
+ int policy_cache_set_mapping(X509 *x, POLICY_MAPPINGS *maps)
71
+ {
72
+ POLICY_MAPPING *map;
73
+ X509_POLICY_DATA *data;
74
+ X509_POLICY_CACHE *cache = x->policy_cache;
75
+ size_t i;
76
+ int ret = 0;
77
+ if (sk_POLICY_MAPPING_num(maps) == 0)
78
+ {
79
+ ret = -1;
80
+ goto bad_mapping;
81
+ }
82
+ for (i = 0; i < sk_POLICY_MAPPING_num(maps); i++)
83
+ {
84
+ map = sk_POLICY_MAPPING_value(maps, i);
85
+ /* Reject if map to or from anyPolicy */
86
+ if ((OBJ_obj2nid(map->subjectDomainPolicy) == NID_any_policy)
87
+ || (OBJ_obj2nid(map->issuerDomainPolicy) == NID_any_policy))
88
+ {
89
+ ret = -1;
90
+ goto bad_mapping;
91
+ }
92
+
93
+ /* Attempt to find matching policy data */
94
+ data = policy_cache_find_data(cache, map->issuerDomainPolicy);
95
+ /* If we don't have anyPolicy can't map */
96
+ if (!data && !cache->anyPolicy)
97
+ continue;
98
+
99
+ /* Create a NODE from anyPolicy */
100
+ if (!data)
101
+ {
102
+ data = policy_data_new(NULL, map->issuerDomainPolicy,
103
+ cache->anyPolicy->flags
104
+ & POLICY_DATA_FLAG_CRITICAL);
105
+ if (!data)
106
+ goto bad_mapping;
107
+ data->qualifier_set = cache->anyPolicy->qualifier_set;
108
+ /*map->issuerDomainPolicy = NULL;*/
109
+ data->flags |= POLICY_DATA_FLAG_MAPPED_ANY;
110
+ data->flags |= POLICY_DATA_FLAG_SHARED_QUALIFIERS;
111
+ if (!sk_X509_POLICY_DATA_push(cache->data, data))
112
+ {
113
+ policy_data_free(data);
114
+ goto bad_mapping;
115
+ }
116
+ }
117
+ else
118
+ data->flags |= POLICY_DATA_FLAG_MAPPED;
119
+ if (!sk_ASN1_OBJECT_push(data->expected_policy_set,
120
+ map->subjectDomainPolicy))
121
+ goto bad_mapping;
122
+ map->subjectDomainPolicy = NULL;
123
+
124
+ }
125
+
126
+ ret = 1;
127
+ bad_mapping:
128
+ if (ret == -1)
129
+ x->ex_flags |= EXFLAG_INVALID_POLICY;
130
+ sk_POLICY_MAPPING_pop_free(maps, POLICY_MAPPING_free);
131
+ return ret;
132
+
133
+ }
@@ -0,0 +1,197 @@
1
+ /* pcy_node.c */
2
+ /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL
3
+ * project 2004.
4
+ */
5
+ /* ====================================================================
6
+ * Copyright (c) 2004 The OpenSSL Project. All rights reserved.
7
+ *
8
+ * Redistribution and use in source and binary forms, with or without
9
+ * modification, are permitted provided that the following conditions
10
+ * are met:
11
+ *
12
+ * 1. Redistributions of source code must retain the above copyright
13
+ * notice, this list of conditions and the following disclaimer.
14
+ *
15
+ * 2. Redistributions in binary form must reproduce the above copyright
16
+ * notice, this list of conditions and the following disclaimer in
17
+ * the documentation and/or other materials provided with the
18
+ * distribution.
19
+ *
20
+ * 3. All advertising materials mentioning features or use of this
21
+ * software must display the following acknowledgment:
22
+ * "This product includes software developed by the OpenSSL Project
23
+ * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)"
24
+ *
25
+ * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
26
+ * endorse or promote products derived from this software without
27
+ * prior written permission. For written permission, please contact
28
+ * licensing@OpenSSL.org.
29
+ *
30
+ * 5. Products derived from this software may not be called "OpenSSL"
31
+ * nor may "OpenSSL" appear in their names without prior written
32
+ * permission of the OpenSSL Project.
33
+ *
34
+ * 6. Redistributions of any form whatsoever must retain the following
35
+ * acknowledgment:
36
+ * "This product includes software developed by the OpenSSL Project
37
+ * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)"
38
+ *
39
+ * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
40
+ * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
41
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
42
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
43
+ * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
44
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
45
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
46
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
47
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
48
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
49
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
50
+ * OF THE POSSIBILITY OF SUCH DAMAGE.
51
+ * ====================================================================
52
+ *
53
+ * This product includes cryptographic software written by Eric Young
54
+ * (eay@cryptsoft.com). This product includes software written by Tim
55
+ * Hudson (tjh@cryptsoft.com). */
56
+
57
+ #include <openssl/asn1.h>
58
+ #include <openssl/mem.h>
59
+ #include <openssl/obj.h>
60
+ #include <openssl/x509.h>
61
+ #include <openssl/x509v3.h>
62
+
63
+ #include "pcy_int.h"
64
+
65
+
66
+ static int node_cmp(const X509_POLICY_NODE **a,
67
+ const X509_POLICY_NODE **b)
68
+ {
69
+ return OBJ_cmp((*a)->data->valid_policy, (*b)->data->valid_policy);
70
+ }
71
+
72
+ STACK_OF(X509_POLICY_NODE) *policy_node_cmp_new(void)
73
+ {
74
+ return sk_X509_POLICY_NODE_new(node_cmp);
75
+ }
76
+
77
+ X509_POLICY_NODE *tree_find_sk(STACK_OF(X509_POLICY_NODE) *nodes,
78
+ const ASN1_OBJECT *id)
79
+ {
80
+ X509_POLICY_DATA n;
81
+ X509_POLICY_NODE l;
82
+ size_t idx;
83
+
84
+ n.valid_policy = (ASN1_OBJECT *)id;
85
+ l.data = &n;
86
+
87
+ if (!sk_X509_POLICY_NODE_find(nodes, &idx, &l))
88
+ return NULL;
89
+
90
+ return sk_X509_POLICY_NODE_value(nodes, idx);
91
+
92
+ }
93
+
94
+ X509_POLICY_NODE *level_find_node(const X509_POLICY_LEVEL *level,
95
+ const X509_POLICY_NODE *parent,
96
+ const ASN1_OBJECT *id)
97
+ {
98
+ X509_POLICY_NODE *node;
99
+ size_t i;
100
+ for (i = 0; i < sk_X509_POLICY_NODE_num(level->nodes); i++)
101
+ {
102
+ node = sk_X509_POLICY_NODE_value(level->nodes, i);
103
+ if (node->parent == parent)
104
+ {
105
+ if (!OBJ_cmp(node->data->valid_policy, id))
106
+ return node;
107
+ }
108
+ }
109
+ return NULL;
110
+ }
111
+
112
+ X509_POLICY_NODE *level_add_node(X509_POLICY_LEVEL *level,
113
+ const X509_POLICY_DATA *data,
114
+ X509_POLICY_NODE *parent,
115
+ X509_POLICY_TREE *tree)
116
+ {
117
+ X509_POLICY_NODE *node;
118
+ node = OPENSSL_malloc(sizeof(X509_POLICY_NODE));
119
+ if (!node)
120
+ return NULL;
121
+ node->data = data;
122
+ node->parent = parent;
123
+ node->nchild = 0;
124
+ if (level)
125
+ {
126
+ if (OBJ_obj2nid(data->valid_policy) == NID_any_policy)
127
+ {
128
+ if (level->anyPolicy)
129
+ goto node_error;
130
+ level->anyPolicy = node;
131
+ }
132
+ else
133
+ {
134
+
135
+ if (!level->nodes)
136
+ level->nodes = policy_node_cmp_new();
137
+ if (!level->nodes)
138
+ goto node_error;
139
+ if (!sk_X509_POLICY_NODE_push(level->nodes, node))
140
+ goto node_error;
141
+ }
142
+ }
143
+
144
+ if (tree)
145
+ {
146
+ if (!tree->extra_data)
147
+ tree->extra_data = sk_X509_POLICY_DATA_new_null();
148
+ if (!tree->extra_data)
149
+ goto node_error;
150
+ if (!sk_X509_POLICY_DATA_push(tree->extra_data, data))
151
+ goto node_error;
152
+ }
153
+
154
+ if (parent)
155
+ parent->nchild++;
156
+
157
+ return node;
158
+
159
+ node_error:
160
+ policy_node_free(node);
161
+ return 0;
162
+
163
+ }
164
+
165
+ void policy_node_free(X509_POLICY_NODE *node)
166
+ {
167
+ OPENSSL_free(node);
168
+ }
169
+
170
+ /* See if a policy node matches a policy OID. If mapping enabled look through
171
+ * expected policy set otherwise just valid policy.
172
+ */
173
+
174
+ int policy_node_match(const X509_POLICY_LEVEL *lvl,
175
+ const X509_POLICY_NODE *node, const ASN1_OBJECT *oid)
176
+ {
177
+ size_t i;
178
+ ASN1_OBJECT *policy_oid;
179
+ const X509_POLICY_DATA *x = node->data;
180
+
181
+ if ( (lvl->flags & X509_V_FLAG_INHIBIT_MAP)
182
+ || !(x->flags & POLICY_DATA_FLAG_MAP_MASK))
183
+ {
184
+ if (!OBJ_cmp(x->valid_policy, oid))
185
+ return 1;
186
+ return 0;
187
+ }
188
+
189
+ for (i = 0; i < sk_ASN1_OBJECT_num(x->expected_policy_set); i++)
190
+ {
191
+ policy_oid = sk_ASN1_OBJECT_value(x->expected_policy_set, i);
192
+ if (!OBJ_cmp(policy_oid, oid))
193
+ return 1;
194
+ }
195
+ return 0;
196
+
197
+ }
@@ -0,0 +1,876 @@
1
+ /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL
2
+ * project 2004.
3
+ */
4
+ /* ====================================================================
5
+ * Copyright (c) 2004 The OpenSSL Project. All rights reserved.
6
+ *
7
+ * Redistribution and use in source and binary forms, with or without
8
+ * modification, are permitted provided that the following conditions
9
+ * are met:
10
+ *
11
+ * 1. Redistributions of source code must retain the above copyright
12
+ * notice, this list of conditions and the following disclaimer.
13
+ *
14
+ * 2. Redistributions in binary form must reproduce the above copyright
15
+ * notice, this list of conditions and the following disclaimer in
16
+ * the documentation and/or other materials provided with the
17
+ * distribution.
18
+ *
19
+ * 3. All advertising materials mentioning features or use of this
20
+ * software must display the following acknowledgment:
21
+ * "This product includes software developed by the OpenSSL Project
22
+ * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)"
23
+ *
24
+ * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
25
+ * endorse or promote products derived from this software without
26
+ * prior written permission. For written permission, please contact
27
+ * licensing@OpenSSL.org.
28
+ *
29
+ * 5. Products derived from this software may not be called "OpenSSL"
30
+ * nor may "OpenSSL" appear in their names without prior written
31
+ * permission of the OpenSSL Project.
32
+ *
33
+ * 6. Redistributions of any form whatsoever must retain the following
34
+ * acknowledgment:
35
+ * "This product includes software developed by the OpenSSL Project
36
+ * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)"
37
+ *
38
+ * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
39
+ * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
40
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
41
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
42
+ * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
43
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
44
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
45
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
46
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
47
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
48
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
49
+ * OF THE POSSIBILITY OF SUCH DAMAGE.
50
+ * ====================================================================
51
+ *
52
+ * This product includes cryptographic software written by Eric Young
53
+ * (eay@cryptsoft.com). This product includes software written by Tim
54
+ * Hudson (tjh@cryptsoft.com).
55
+ *
56
+ */
57
+
58
+ #include <string.h>
59
+
60
+ #include <openssl/mem.h>
61
+ #include <openssl/obj.h>
62
+ #include <openssl/stack.h>
63
+ #include <openssl/thread.h>
64
+ #include <openssl/x509.h>
65
+ #include <openssl/x509v3.h>
66
+
67
+ #include "pcy_int.h"
68
+
69
+
70
+ /* Enable this to print out the complete policy tree at various point during
71
+ * evaluation.
72
+ */
73
+
74
+ /*#define OPENSSL_POLICY_DEBUG*/
75
+
76
+ #ifdef OPENSSL_POLICY_DEBUG
77
+
78
+ static void expected_print(BIO *err, X509_POLICY_LEVEL *lev,
79
+ X509_POLICY_NODE *node, int indent)
80
+ {
81
+ if ( (lev->flags & X509_V_FLAG_INHIBIT_MAP)
82
+ || !(node->data->flags & POLICY_DATA_FLAG_MAP_MASK))
83
+ BIO_puts(err, " Not Mapped\n");
84
+ else
85
+ {
86
+ int i;
87
+ STACK_OF(ASN1_OBJECT) *pset = node->data->expected_policy_set;
88
+ ASN1_OBJECT *oid;
89
+ BIO_puts(err, " Expected: ");
90
+ for (i = 0; i < sk_ASN1_OBJECT_num(pset); i++)
91
+ {
92
+ oid = sk_ASN1_OBJECT_value(pset, i);
93
+ if (i)
94
+ BIO_puts(err, ", ");
95
+ i2a_ASN1_OBJECT(err, oid);
96
+ }
97
+ BIO_puts(err, "\n");
98
+ }
99
+ }
100
+
101
+ static void tree_print(char *str, X509_POLICY_TREE *tree,
102
+ X509_POLICY_LEVEL *curr)
103
+ {
104
+ X509_POLICY_LEVEL *plev;
105
+ X509_POLICY_NODE *node;
106
+ int i;
107
+ BIO *err;
108
+ err = BIO_new_fp(stderr, BIO_NOCLOSE);
109
+ if (!curr)
110
+ curr = tree->levels + tree->nlevel;
111
+ else
112
+ curr++;
113
+ BIO_printf(err, "Level print after %s\n", str);
114
+ BIO_printf(err, "Printing Up to Level %ld\n", curr - tree->levels);
115
+ for (plev = tree->levels; plev != curr; plev++)
116
+ {
117
+ BIO_printf(err, "Level %ld, flags = %x\n",
118
+ plev - tree->levels, plev->flags);
119
+ for (i = 0; i < sk_X509_POLICY_NODE_num(plev->nodes); i++)
120
+ {
121
+ node = sk_X509_POLICY_NODE_value(plev->nodes, i);
122
+ X509_POLICY_NODE_print(err, node, 2);
123
+ expected_print(err, plev, node, 2);
124
+ BIO_printf(err, " Flags: %x\n", node->data->flags);
125
+ }
126
+ if (plev->anyPolicy)
127
+ X509_POLICY_NODE_print(err, plev->anyPolicy, 2);
128
+ }
129
+
130
+ BIO_free(err);
131
+
132
+ }
133
+ #else
134
+
135
+ #define tree_print(a,b,c) /* */
136
+
137
+ #endif
138
+
139
+ /* Initialize policy tree. Return values:
140
+ * 0 Some internal error occured.
141
+ * -1 Inconsistent or invalid extensions in certificates.
142
+ * 1 Tree initialized OK.
143
+ * 2 Policy tree is empty.
144
+ * 5 Tree OK and requireExplicitPolicy true.
145
+ * 6 Tree empty and requireExplicitPolicy true.
146
+ */
147
+
148
+ static int tree_init(X509_POLICY_TREE **ptree, STACK_OF(X509) *certs,
149
+ unsigned int flags)
150
+ {
151
+ X509_POLICY_TREE *tree;
152
+ X509_POLICY_LEVEL *level;
153
+ const X509_POLICY_CACHE *cache;
154
+ X509_POLICY_DATA *data = NULL;
155
+ X509 *x;
156
+ int ret = 1;
157
+ int i, n;
158
+ int explicit_policy;
159
+ int any_skip;
160
+ int map_skip;
161
+ *ptree = NULL;
162
+ n = sk_X509_num(certs);
163
+
164
+ #if 0
165
+ /* Disable policy mapping for now... */
166
+ flags |= X509_V_FLAG_INHIBIT_MAP;
167
+ #endif
168
+
169
+ if (flags & X509_V_FLAG_EXPLICIT_POLICY)
170
+ explicit_policy = 0;
171
+ else
172
+ explicit_policy = n + 1;
173
+
174
+ if (flags & X509_V_FLAG_INHIBIT_ANY)
175
+ any_skip = 0;
176
+ else
177
+ any_skip = n + 1;
178
+
179
+ if (flags & X509_V_FLAG_INHIBIT_MAP)
180
+ map_skip = 0;
181
+ else
182
+ map_skip = n + 1;
183
+
184
+ /* Can't do anything with just a trust anchor */
185
+ if (n == 1)
186
+ return 1;
187
+ /* First setup policy cache in all certificates apart from the
188
+ * trust anchor. Note any bad cache results on the way. Also can
189
+ * calculate explicit_policy value at this point.
190
+ */
191
+ for (i = n - 2; i >= 0; i--)
192
+ {
193
+ x = sk_X509_value(certs, i);
194
+ X509_check_purpose(x, -1, -1);
195
+ cache = policy_cache_set(x);
196
+ /* If cache NULL something bad happened: return immediately */
197
+ if (cache == NULL)
198
+ return 0;
199
+ /* If inconsistent extensions keep a note of it but continue */
200
+ if (x->ex_flags & EXFLAG_INVALID_POLICY)
201
+ ret = -1;
202
+ /* Otherwise if we have no data (hence no CertificatePolicies)
203
+ * and haven't already set an inconsistent code note it.
204
+ */
205
+ else if ((ret == 1) && !cache->data)
206
+ ret = 2;
207
+ if (explicit_policy > 0)
208
+ {
209
+ if (!(x->ex_flags & EXFLAG_SI))
210
+ explicit_policy--;
211
+ if ((cache->explicit_skip != -1)
212
+ && (cache->explicit_skip < explicit_policy))
213
+ explicit_policy = cache->explicit_skip;
214
+ }
215
+ }
216
+
217
+ if (ret != 1)
218
+ {
219
+ if (ret == 2 && !explicit_policy)
220
+ return 6;
221
+ return ret;
222
+ }
223
+
224
+
225
+ /* If we get this far initialize the tree */
226
+
227
+ tree = OPENSSL_malloc(sizeof(X509_POLICY_TREE));
228
+
229
+ if (!tree)
230
+ return 0;
231
+
232
+ tree->flags = 0;
233
+ tree->levels = OPENSSL_malloc(sizeof(X509_POLICY_LEVEL) * n);
234
+ tree->nlevel = 0;
235
+ tree->extra_data = NULL;
236
+ tree->auth_policies = NULL;
237
+ tree->user_policies = NULL;
238
+
239
+ if (!tree->levels)
240
+ {
241
+ OPENSSL_free(tree);
242
+ return 0;
243
+ }
244
+
245
+ memset(tree->levels, 0, n * sizeof(X509_POLICY_LEVEL));
246
+
247
+ tree->nlevel = n;
248
+
249
+ level = tree->levels;
250
+
251
+ /* Root data: initialize to anyPolicy */
252
+
253
+ data = policy_data_new(NULL, OBJ_nid2obj(NID_any_policy), 0);
254
+
255
+ if (!data || !level_add_node(level, data, NULL, tree))
256
+ goto bad_tree;
257
+
258
+ for (i = n - 2; i >= 0; i--)
259
+ {
260
+ level++;
261
+ x = sk_X509_value(certs, i);
262
+ cache = policy_cache_set(x);
263
+ level->cert = X509_up_ref(x);
264
+
265
+ if (!cache->anyPolicy)
266
+ level->flags |= X509_V_FLAG_INHIBIT_ANY;
267
+
268
+ /* Determine inhibit any and inhibit map flags */
269
+ if (any_skip == 0)
270
+ {
271
+ /* Any matching allowed if certificate is self
272
+ * issued and not the last in the chain.
273
+ */
274
+ if (!(x->ex_flags & EXFLAG_SI) || (i == 0))
275
+ level->flags |= X509_V_FLAG_INHIBIT_ANY;
276
+ }
277
+ else
278
+ {
279
+ if (!(x->ex_flags & EXFLAG_SI))
280
+ any_skip--;
281
+ if ((cache->any_skip >= 0)
282
+ && (cache->any_skip < any_skip))
283
+ any_skip = cache->any_skip;
284
+ }
285
+
286
+ if (map_skip == 0)
287
+ level->flags |= X509_V_FLAG_INHIBIT_MAP;
288
+ else
289
+ {
290
+ if (!(x->ex_flags & EXFLAG_SI))
291
+ map_skip--;
292
+ if ((cache->map_skip >= 0)
293
+ && (cache->map_skip < map_skip))
294
+ map_skip = cache->map_skip;
295
+ }
296
+
297
+ }
298
+
299
+ *ptree = tree;
300
+
301
+ if (explicit_policy)
302
+ return 1;
303
+ else
304
+ return 5;
305
+
306
+ bad_tree:
307
+
308
+ X509_policy_tree_free(tree);
309
+
310
+ return 0;
311
+
312
+ }
313
+
314
+ static int tree_link_matching_nodes(X509_POLICY_LEVEL *curr,
315
+ const X509_POLICY_DATA *data)
316
+ {
317
+ X509_POLICY_LEVEL *last = curr - 1;
318
+ X509_POLICY_NODE *node;
319
+ int matched = 0;
320
+ size_t i;
321
+ /* Iterate through all in nodes linking matches */
322
+ for (i = 0; i < sk_X509_POLICY_NODE_num(last->nodes); i++)
323
+ {
324
+ node = sk_X509_POLICY_NODE_value(last->nodes, i);
325
+ if (policy_node_match(last, node, data->valid_policy))
326
+ {
327
+ if (!level_add_node(curr, data, node, NULL))
328
+ return 0;
329
+ matched = 1;
330
+ }
331
+ }
332
+ if (!matched && last->anyPolicy)
333
+ {
334
+ if (!level_add_node(curr, data, last->anyPolicy, NULL))
335
+ return 0;
336
+ }
337
+ return 1;
338
+ }
339
+
340
+ /* This corresponds to RFC3280 6.1.3(d)(1):
341
+ * link any data from CertificatePolicies onto matching parent
342
+ * or anyPolicy if no match.
343
+ */
344
+
345
+ static int tree_link_nodes(X509_POLICY_LEVEL *curr,
346
+ const X509_POLICY_CACHE *cache)
347
+ {
348
+ size_t i;
349
+ X509_POLICY_DATA *data;
350
+
351
+ for (i = 0; i < sk_X509_POLICY_DATA_num(cache->data); i++)
352
+ {
353
+ data = sk_X509_POLICY_DATA_value(cache->data, i);
354
+ /* If a node is mapped any it doesn't have a corresponding
355
+ * CertificatePolicies entry.
356
+ * However such an identical node would be created
357
+ * if anyPolicy matching is enabled because there would be
358
+ * no match with the parent valid_policy_set. So we create
359
+ * link because then it will have the mapping flags
360
+ * right and we can prune it later.
361
+ */
362
+ #if 0
363
+ if ((data->flags & POLICY_DATA_FLAG_MAPPED_ANY)
364
+ && !(curr->flags & X509_V_FLAG_INHIBIT_ANY))
365
+ continue;
366
+ #endif
367
+ /* Look for matching nodes in previous level */
368
+ if (!tree_link_matching_nodes(curr, data))
369
+ return 0;
370
+ }
371
+ return 1;
372
+ }
373
+
374
+ /* This corresponds to RFC3280 6.1.3(d)(2):
375
+ * Create new data for any unmatched policies in the parent and link
376
+ * to anyPolicy.
377
+ */
378
+
379
+ static int tree_add_unmatched(X509_POLICY_LEVEL *curr,
380
+ const X509_POLICY_CACHE *cache,
381
+ const ASN1_OBJECT *id,
382
+ X509_POLICY_NODE *node,
383
+ X509_POLICY_TREE *tree)
384
+ {
385
+ X509_POLICY_DATA *data;
386
+ if (id == NULL)
387
+ id = node->data->valid_policy;
388
+ /* Create a new node with qualifiers from anyPolicy and
389
+ * id from unmatched node.
390
+ */
391
+ data = policy_data_new(NULL, id, node_critical(node));
392
+
393
+ if (data == NULL)
394
+ return 0;
395
+ /* Curr may not have anyPolicy */
396
+ data->qualifier_set = cache->anyPolicy->qualifier_set;
397
+ data->flags |= POLICY_DATA_FLAG_SHARED_QUALIFIERS;
398
+ if (!level_add_node(curr, data, node, tree))
399
+ {
400
+ policy_data_free(data);
401
+ return 0;
402
+ }
403
+
404
+ return 1;
405
+ }
406
+
407
+ static int tree_link_unmatched(X509_POLICY_LEVEL *curr,
408
+ const X509_POLICY_CACHE *cache,
409
+ X509_POLICY_NODE *node,
410
+ X509_POLICY_TREE *tree)
411
+ {
412
+ const X509_POLICY_LEVEL *last = curr - 1;
413
+ size_t i;
414
+
415
+ if ( (last->flags & X509_V_FLAG_INHIBIT_MAP)
416
+ || !(node->data->flags & POLICY_DATA_FLAG_MAPPED))
417
+ {
418
+ /* If no policy mapping: matched if one child present */
419
+ if (node->nchild)
420
+ return 1;
421
+ if (!tree_add_unmatched(curr, cache, NULL, node, tree))
422
+ return 0;
423
+ /* Add it */
424
+ }
425
+ else
426
+ {
427
+ /* If mapping: matched if one child per expected policy set */
428
+ STACK_OF(ASN1_OBJECT) *expset = node->data->expected_policy_set;
429
+ if ((size_t) node->nchild == sk_ASN1_OBJECT_num(expset))
430
+ return 1;
431
+ /* Locate unmatched nodes */
432
+ for (i = 0; i < sk_ASN1_OBJECT_num(expset); i++)
433
+ {
434
+ ASN1_OBJECT *oid = sk_ASN1_OBJECT_value(expset, i);
435
+ if (level_find_node(curr, node, oid))
436
+ continue;
437
+ if (!tree_add_unmatched(curr, cache, oid, node, tree))
438
+ return 0;
439
+ }
440
+
441
+ }
442
+
443
+ return 1;
444
+
445
+ }
446
+
447
+ static int tree_link_any(X509_POLICY_LEVEL *curr,
448
+ const X509_POLICY_CACHE *cache,
449
+ X509_POLICY_TREE *tree)
450
+ {
451
+ size_t i;
452
+ /*X509_POLICY_DATA *data;*/
453
+ X509_POLICY_NODE *node;
454
+ X509_POLICY_LEVEL *last = curr - 1;
455
+
456
+ for (i = 0; i < sk_X509_POLICY_NODE_num(last->nodes); i++)
457
+ {
458
+ node = sk_X509_POLICY_NODE_value(last->nodes, i);
459
+
460
+ if (!tree_link_unmatched(curr, cache, node, tree))
461
+ return 0;
462
+
463
+ #if 0
464
+
465
+ /* Skip any node with any children: we only want unmathced
466
+ * nodes.
467
+ *
468
+ * Note: need something better for policy mapping
469
+ * because each node may have multiple children
470
+ */
471
+ if (node->nchild)
472
+ continue;
473
+
474
+ /* Create a new node with qualifiers from anyPolicy and
475
+ * id from unmatched node.
476
+ */
477
+ data = policy_data_new(NULL, node->data->valid_policy,
478
+ node_critical(node));
479
+
480
+ if (data == NULL)
481
+ return 0;
482
+ /* Curr may not have anyPolicy */
483
+ data->qualifier_set = cache->anyPolicy->qualifier_set;
484
+ data->flags |= POLICY_DATA_FLAG_SHARED_QUALIFIERS;
485
+ if (!level_add_node(curr, data, node, tree))
486
+ {
487
+ policy_data_free(data);
488
+ return 0;
489
+ }
490
+
491
+ #endif
492
+
493
+ }
494
+ /* Finally add link to anyPolicy */
495
+ if (last->anyPolicy)
496
+ {
497
+ if (!level_add_node(curr, cache->anyPolicy,
498
+ last->anyPolicy, NULL))
499
+ return 0;
500
+ }
501
+ return 1;
502
+ }
503
+
504
+ /* Prune the tree: delete any child mapped child data on the current level
505
+ * then proceed up the tree deleting any data with no children. If we ever
506
+ * have no data on a level we can halt because the tree will be empty.
507
+ */
508
+
509
+ static int tree_prune(X509_POLICY_TREE *tree, X509_POLICY_LEVEL *curr)
510
+ {
511
+ STACK_OF(X509_POLICY_NODE) *nodes;
512
+ X509_POLICY_NODE *node;
513
+ int i;
514
+ nodes = curr->nodes;
515
+ if (curr->flags & X509_V_FLAG_INHIBIT_MAP)
516
+ {
517
+ for (i = sk_X509_POLICY_NODE_num(nodes) - 1; i >= 0; i--)
518
+ {
519
+ node = sk_X509_POLICY_NODE_value(nodes, i);
520
+ /* Delete any mapped data: see RFC3280 XXXX */
521
+ if (node->data->flags & POLICY_DATA_FLAG_MAP_MASK)
522
+ {
523
+ node->parent->nchild--;
524
+ OPENSSL_free(node);
525
+ (void)sk_X509_POLICY_NODE_delete(nodes,i);
526
+ }
527
+ }
528
+ }
529
+
530
+ for(;;) {
531
+ --curr;
532
+ nodes = curr->nodes;
533
+ for (i = sk_X509_POLICY_NODE_num(nodes) - 1; i >= 0; i--)
534
+ {
535
+ node = sk_X509_POLICY_NODE_value(nodes, i);
536
+ if (node->nchild == 0)
537
+ {
538
+ node->parent->nchild--;
539
+ OPENSSL_free(node);
540
+ (void)sk_X509_POLICY_NODE_delete(nodes, i);
541
+ }
542
+ }
543
+ if (curr->anyPolicy && !curr->anyPolicy->nchild)
544
+ {
545
+ if (curr->anyPolicy->parent)
546
+ curr->anyPolicy->parent->nchild--;
547
+ OPENSSL_free(curr->anyPolicy);
548
+ curr->anyPolicy = NULL;
549
+ }
550
+ if (curr == tree->levels)
551
+ {
552
+ /* If we zapped anyPolicy at top then tree is empty */
553
+ if (!curr->anyPolicy)
554
+ return 2;
555
+ return 1;
556
+ }
557
+ }
558
+
559
+ }
560
+
561
+ static int tree_add_auth_node(STACK_OF(X509_POLICY_NODE) **pnodes,
562
+ X509_POLICY_NODE *pcy)
563
+ {
564
+ if (!*pnodes)
565
+ {
566
+ *pnodes = policy_node_cmp_new();
567
+ if (!*pnodes)
568
+ return 0;
569
+ }
570
+ else if (sk_X509_POLICY_NODE_find(*pnodes, NULL, pcy))
571
+ return 1;
572
+
573
+ if (!sk_X509_POLICY_NODE_push(*pnodes, pcy))
574
+ return 0;
575
+
576
+ return 1;
577
+
578
+ }
579
+
580
+ /* Calculate the authority set based on policy tree.
581
+ * The 'pnodes' parameter is used as a store for the set of policy nodes
582
+ * used to calculate the user set. If the authority set is not anyPolicy
583
+ * then pnodes will just point to the authority set. If however the authority
584
+ * set is anyPolicy then the set of valid policies (other than anyPolicy)
585
+ * is store in pnodes. The return value of '2' is used in this case to indicate
586
+ * that pnodes should be freed.
587
+ */
588
+
589
+ static int tree_calculate_authority_set(X509_POLICY_TREE *tree,
590
+ STACK_OF(X509_POLICY_NODE) **pnodes)
591
+ {
592
+ X509_POLICY_LEVEL *curr;
593
+ X509_POLICY_NODE *node, *anyptr;
594
+ STACK_OF(X509_POLICY_NODE) **addnodes;
595
+ int i;
596
+ size_t j;
597
+ curr = tree->levels + tree->nlevel - 1;
598
+
599
+ /* If last level contains anyPolicy set is anyPolicy */
600
+ if (curr->anyPolicy)
601
+ {
602
+ if (!tree_add_auth_node(&tree->auth_policies, curr->anyPolicy))
603
+ return 0;
604
+ addnodes = pnodes;
605
+ }
606
+ else
607
+ /* Add policies to authority set */
608
+ addnodes = &tree->auth_policies;
609
+
610
+ curr = tree->levels;
611
+ for (i = 1; i < tree->nlevel; i++)
612
+ {
613
+ /* If no anyPolicy node on this this level it can't
614
+ * appear on lower levels so end search.
615
+ */
616
+ if (!(anyptr = curr->anyPolicy))
617
+ break;
618
+ curr++;
619
+ for (j = 0; j < sk_X509_POLICY_NODE_num(curr->nodes); j++)
620
+ {
621
+ node = sk_X509_POLICY_NODE_value(curr->nodes, j);
622
+ if ((node->parent == anyptr)
623
+ && !tree_add_auth_node(addnodes, node))
624
+ return 0;
625
+ }
626
+ }
627
+
628
+ if (addnodes == pnodes)
629
+ return 2;
630
+
631
+ *pnodes = tree->auth_policies;
632
+
633
+ return 1;
634
+ }
635
+
636
+ static int tree_calculate_user_set(X509_POLICY_TREE *tree,
637
+ STACK_OF(ASN1_OBJECT) *policy_oids,
638
+ STACK_OF(X509_POLICY_NODE) *auth_nodes)
639
+ {
640
+ size_t i;
641
+ X509_POLICY_NODE *node;
642
+ ASN1_OBJECT *oid;
643
+
644
+ X509_POLICY_NODE *anyPolicy;
645
+ X509_POLICY_DATA *extra;
646
+
647
+ /* Check if anyPolicy present in authority constrained policy set:
648
+ * this will happen if it is a leaf node.
649
+ */
650
+
651
+ if (sk_ASN1_OBJECT_num(policy_oids) <= 0)
652
+ return 1;
653
+
654
+ anyPolicy = tree->levels[tree->nlevel - 1].anyPolicy;
655
+
656
+ for (i = 0; i < sk_ASN1_OBJECT_num(policy_oids); i++)
657
+ {
658
+ oid = sk_ASN1_OBJECT_value(policy_oids, i);
659
+ if (OBJ_obj2nid(oid) == NID_any_policy)
660
+ {
661
+ tree->flags |= POLICY_FLAG_ANY_POLICY;
662
+ return 1;
663
+ }
664
+ }
665
+
666
+ for (i = 0; i < sk_ASN1_OBJECT_num(policy_oids); i++)
667
+ {
668
+ oid = sk_ASN1_OBJECT_value(policy_oids, i);
669
+ node = tree_find_sk(auth_nodes, oid);
670
+ if (!node)
671
+ {
672
+ if (!anyPolicy)
673
+ continue;
674
+ /* Create a new node with policy ID from user set
675
+ * and qualifiers from anyPolicy.
676
+ */
677
+ extra = policy_data_new(NULL, oid,
678
+ node_critical(anyPolicy));
679
+ if (!extra)
680
+ return 0;
681
+ extra->qualifier_set = anyPolicy->data->qualifier_set;
682
+ extra->flags = POLICY_DATA_FLAG_SHARED_QUALIFIERS
683
+ | POLICY_DATA_FLAG_EXTRA_NODE;
684
+ node = level_add_node(NULL, extra, anyPolicy->parent,
685
+ tree);
686
+ }
687
+ if (!tree->user_policies)
688
+ {
689
+ tree->user_policies = sk_X509_POLICY_NODE_new_null();
690
+ if (!tree->user_policies)
691
+ return 1;
692
+ }
693
+ if (!sk_X509_POLICY_NODE_push(tree->user_policies, node))
694
+ return 0;
695
+ }
696
+ return 1;
697
+
698
+ }
699
+
700
+ static int tree_evaluate(X509_POLICY_TREE *tree)
701
+ {
702
+ int ret, i;
703
+ X509_POLICY_LEVEL *curr = tree->levels + 1;
704
+ const X509_POLICY_CACHE *cache;
705
+
706
+ for(i = 1; i < tree->nlevel; i++, curr++)
707
+ {
708
+ cache = policy_cache_set(curr->cert);
709
+ if (!tree_link_nodes(curr, cache))
710
+ return 0;
711
+
712
+ if (!(curr->flags & X509_V_FLAG_INHIBIT_ANY)
713
+ && !tree_link_any(curr, cache, tree))
714
+ return 0;
715
+ tree_print("before tree_prune()", tree, curr);
716
+ ret = tree_prune(tree, curr);
717
+ if (ret != 1)
718
+ return ret;
719
+ }
720
+
721
+ return 1;
722
+
723
+ }
724
+
725
+ static void exnode_free(X509_POLICY_NODE *node)
726
+ {
727
+ if (node->data && (node->data->flags & POLICY_DATA_FLAG_EXTRA_NODE))
728
+ OPENSSL_free(node);
729
+ }
730
+
731
+
732
+ void X509_policy_tree_free(X509_POLICY_TREE *tree)
733
+ {
734
+ X509_POLICY_LEVEL *curr;
735
+ int i;
736
+
737
+ if (!tree)
738
+ return;
739
+
740
+ sk_X509_POLICY_NODE_free(tree->auth_policies);
741
+ sk_X509_POLICY_NODE_pop_free(tree->user_policies, exnode_free);
742
+
743
+ for(i = 0, curr = tree->levels; i < tree->nlevel; i++, curr++)
744
+ {
745
+ if (curr->cert)
746
+ X509_free(curr->cert);
747
+ if (curr->nodes)
748
+ sk_X509_POLICY_NODE_pop_free(curr->nodes,
749
+ policy_node_free);
750
+ if (curr->anyPolicy)
751
+ policy_node_free(curr->anyPolicy);
752
+ }
753
+
754
+ if (tree->extra_data)
755
+ sk_X509_POLICY_DATA_pop_free(tree->extra_data,
756
+ policy_data_free);
757
+
758
+ OPENSSL_free(tree->levels);
759
+ OPENSSL_free(tree);
760
+
761
+ }
762
+
763
+ /* Application policy checking function.
764
+ * Return codes:
765
+ * 0 Internal Error.
766
+ * 1 Successful.
767
+ * -1 One or more certificates contain invalid or inconsistent extensions
768
+ * -2 User constrained policy set empty and requireExplicit true.
769
+ */
770
+
771
+ int X509_policy_check(X509_POLICY_TREE **ptree, int *pexplicit_policy,
772
+ STACK_OF(X509) *certs,
773
+ STACK_OF(ASN1_OBJECT) *policy_oids,
774
+ unsigned int flags)
775
+ {
776
+ int ret;
777
+ X509_POLICY_TREE *tree = NULL;
778
+ STACK_OF(X509_POLICY_NODE) *nodes, *auth_nodes = NULL;
779
+ *ptree = NULL;
780
+
781
+ *pexplicit_policy = 0;
782
+ ret = tree_init(&tree, certs, flags);
783
+
784
+ switch (ret)
785
+ {
786
+
787
+ /* Tree empty requireExplicit False: OK */
788
+ case 2:
789
+ return 1;
790
+
791
+ /* Some internal error */
792
+ case -1:
793
+ return -1;
794
+
795
+ /* Some internal error */
796
+ case 0:
797
+ return 0;
798
+
799
+ /* Tree empty requireExplicit True: Error */
800
+
801
+ case 6:
802
+ *pexplicit_policy = 1;
803
+ return -2;
804
+
805
+ /* Tree OK requireExplicit True: OK and continue */
806
+ case 5:
807
+ *pexplicit_policy = 1;
808
+ break;
809
+
810
+ /* Tree OK: continue */
811
+
812
+ case 1:
813
+ if (!tree)
814
+ /*
815
+ * tree_init() returns success and a null tree
816
+ * if it's just looking at a trust anchor.
817
+ * I'm not sure that returning success here is
818
+ * correct, but I'm sure that reporting this
819
+ * as an internal error which our caller
820
+ * interprets as a malloc failure is wrong.
821
+ */
822
+ return 1;
823
+ break;
824
+ }
825
+
826
+ if (!tree) goto error;
827
+ ret = tree_evaluate(tree);
828
+
829
+ tree_print("tree_evaluate()", tree, NULL);
830
+
831
+ if (ret <= 0)
832
+ goto error;
833
+
834
+ /* Return value 2 means tree empty */
835
+ if (ret == 2)
836
+ {
837
+ X509_policy_tree_free(tree);
838
+ if (*pexplicit_policy)
839
+ return -2;
840
+ else
841
+ return 1;
842
+ }
843
+
844
+ /* Tree is not empty: continue */
845
+
846
+ ret = tree_calculate_authority_set(tree, &auth_nodes);
847
+
848
+ if (!ret)
849
+ goto error;
850
+
851
+ if (!tree_calculate_user_set(tree, policy_oids, auth_nodes))
852
+ goto error;
853
+
854
+ if (ret == 2)
855
+ sk_X509_POLICY_NODE_free(auth_nodes);
856
+
857
+ if (tree)
858
+ *ptree = tree;
859
+
860
+ if (*pexplicit_policy)
861
+ {
862
+ nodes = X509_policy_tree_get0_user_policies(tree);
863
+ if (sk_X509_POLICY_NODE_num(nodes) <= 0)
864
+ return -2;
865
+ }
866
+
867
+ return 1;
868
+
869
+ error:
870
+
871
+ X509_policy_tree_free(tree);
872
+
873
+ return 0;
874
+
875
+ }
876
+