wearefair-grpc 1.3.1.pre.a

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1161) hide show
  1. checksums.yaml +7 -0
  2. data/.yardopts +1 -0
  3. data/Makefile +19484 -0
  4. data/etc/roots.pem +5288 -0
  5. data/include/grpc/byte_buffer.h +102 -0
  6. data/include/grpc/byte_buffer_reader.h +39 -0
  7. data/include/grpc/census.h +484 -0
  8. data/include/grpc/compression.h +85 -0
  9. data/include/grpc/grpc.h +509 -0
  10. data/include/grpc/grpc_cronet.h +51 -0
  11. data/include/grpc/grpc_posix.h +81 -0
  12. data/include/grpc/grpc_security.h +390 -0
  13. data/include/grpc/grpc_security_constants.h +114 -0
  14. data/include/grpc/impl/codegen/atm.h +100 -0
  15. data/include/grpc/impl/codegen/atm_gcc_atomic.h +97 -0
  16. data/include/grpc/impl/codegen/atm_gcc_sync.h +97 -0
  17. data/include/grpc/impl/codegen/atm_windows.h +140 -0
  18. data/include/grpc/impl/codegen/byte_buffer_reader.h +57 -0
  19. data/include/grpc/impl/codegen/compression_types.h +122 -0
  20. data/include/grpc/impl/codegen/connectivity_state.h +61 -0
  21. data/include/grpc/impl/codegen/exec_ctx_fwd.h +41 -0
  22. data/include/grpc/impl/codegen/gpr_slice.h +84 -0
  23. data/include/grpc/impl/codegen/gpr_types.h +75 -0
  24. data/include/grpc/impl/codegen/grpc_types.h +550 -0
  25. data/include/grpc/impl/codegen/port_platform.h +421 -0
  26. data/include/grpc/impl/codegen/propagation_bits.h +67 -0
  27. data/include/grpc/impl/codegen/slice.h +157 -0
  28. data/include/grpc/impl/codegen/status.h +163 -0
  29. data/include/grpc/impl/codegen/sync.h +75 -0
  30. data/include/grpc/impl/codegen/sync_generic.h +55 -0
  31. data/include/grpc/impl/codegen/sync_posix.h +47 -0
  32. data/include/grpc/impl/codegen/sync_windows.h +49 -0
  33. data/include/grpc/load_reporting.h +63 -0
  34. data/include/grpc/module.modulemap +13 -0
  35. data/include/grpc/slice.h +168 -0
  36. data/include/grpc/slice_buffer.h +94 -0
  37. data/include/grpc/status.h +39 -0
  38. data/include/grpc/support/alloc.h +82 -0
  39. data/include/grpc/support/atm.h +39 -0
  40. data/include/grpc/support/atm_gcc_atomic.h +39 -0
  41. data/include/grpc/support/atm_gcc_sync.h +39 -0
  42. data/include/grpc/support/atm_windows.h +39 -0
  43. data/include/grpc/support/avl.h +97 -0
  44. data/include/grpc/support/cmdline.h +103 -0
  45. data/include/grpc/support/cpu.h +59 -0
  46. data/include/grpc/support/histogram.h +79 -0
  47. data/include/grpc/support/host_port.h +66 -0
  48. data/include/grpc/support/log.h +118 -0
  49. data/include/grpc/support/log_windows.h +53 -0
  50. data/include/grpc/support/port_platform.h +39 -0
  51. data/include/grpc/support/string_util.h +64 -0
  52. data/include/grpc/support/subprocess.h +59 -0
  53. data/include/grpc/support/sync.h +295 -0
  54. data/include/grpc/support/sync_generic.h +39 -0
  55. data/include/grpc/support/sync_posix.h +39 -0
  56. data/include/grpc/support/sync_windows.h +39 -0
  57. data/include/grpc/support/thd.h +91 -0
  58. data/include/grpc/support/time.h +105 -0
  59. data/include/grpc/support/tls.h +77 -0
  60. data/include/grpc/support/tls_gcc.h +100 -0
  61. data/include/grpc/support/tls_msvc.h +56 -0
  62. data/include/grpc/support/tls_pthread.h +60 -0
  63. data/include/grpc/support/useful.h +80 -0
  64. data/src/boringssl/err_data.c +1270 -0
  65. data/src/core/ext/census/aggregation.h +66 -0
  66. data/src/core/ext/census/base_resources.c +71 -0
  67. data/src/core/ext/census/base_resources.h +39 -0
  68. data/src/core/ext/census/census_interface.h +76 -0
  69. data/src/core/ext/census/census_rpc_stats.h +101 -0
  70. data/src/core/ext/census/context.c +509 -0
  71. data/src/core/ext/census/gen/census.pb.c +176 -0
  72. data/src/core/ext/census/gen/census.pb.h +295 -0
  73. data/src/core/ext/census/gen/trace_context.pb.c +54 -0
  74. data/src/core/ext/census/gen/trace_context.pb.h +93 -0
  75. data/src/core/ext/census/grpc_context.c +53 -0
  76. data/src/core/ext/census/grpc_filter.c +213 -0
  77. data/src/core/ext/census/grpc_filter.h +44 -0
  78. data/src/core/ext/census/grpc_plugin.c +85 -0
  79. data/src/core/ext/census/initialize.c +66 -0
  80. data/src/core/ext/census/mlog.c +600 -0
  81. data/src/core/ext/census/mlog.h +95 -0
  82. data/src/core/ext/census/operation.c +63 -0
  83. data/src/core/ext/census/placeholders.c +64 -0
  84. data/src/core/ext/census/resource.c +312 -0
  85. data/src/core/ext/census/resource.h +63 -0
  86. data/src/core/ext/census/rpc_metric_id.h +51 -0
  87. data/src/core/ext/census/trace_context.c +86 -0
  88. data/src/core/ext/census/trace_context.h +71 -0
  89. data/src/core/ext/census/trace_label.h +61 -0
  90. data/src/core/ext/census/trace_propagation.h +63 -0
  91. data/src/core/ext/census/trace_status.h +45 -0
  92. data/src/core/ext/census/trace_string.h +50 -0
  93. data/src/core/ext/census/tracing.c +71 -0
  94. data/src/core/ext/census/tracing.h +124 -0
  95. data/src/core/ext/filters/client_channel/channel_connectivity.c +226 -0
  96. data/src/core/ext/filters/client_channel/client_channel.c +1410 -0
  97. data/src/core/ext/filters/client_channel/client_channel.h +64 -0
  98. data/src/core/ext/filters/client_channel/client_channel_factory.c +87 -0
  99. data/src/core/ext/filters/client_channel/client_channel_factory.h +92 -0
  100. data/src/core/ext/filters/client_channel/client_channel_plugin.c +106 -0
  101. data/src/core/ext/filters/client_channel/connector.c +55 -0
  102. data/src/core/ext/filters/client_channel/connector.h +88 -0
  103. data/src/core/ext/filters/client_channel/http_connect_handshaker.c +389 -0
  104. data/src/core/ext/filters/client_channel/http_connect_handshaker.h +49 -0
  105. data/src/core/ext/filters/client_channel/http_proxy.c +125 -0
  106. data/src/core/ext/filters/client_channel/http_proxy.h +39 -0
  107. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.c +1419 -0
  108. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h +44 -0
  109. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.h +57 -0
  110. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.c +107 -0
  111. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.c +249 -0
  112. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +105 -0
  113. data/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.c +88 -0
  114. data/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.h +158 -0
  115. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.c +476 -0
  116. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.c +795 -0
  117. data/src/core/ext/filters/client_channel/lb_policy.c +167 -0
  118. data/src/core/ext/filters/client_channel/lb_policy.h +209 -0
  119. data/src/core/ext/filters/client_channel/lb_policy_factory.c +163 -0
  120. data/src/core/ext/filters/client_channel/lb_policy_factory.h +134 -0
  121. data/src/core/ext/filters/client_channel/lb_policy_registry.c +85 -0
  122. data/src/core/ext/filters/client_channel/lb_policy_registry.h +55 -0
  123. data/src/core/ext/filters/client_channel/parse_address.c +170 -0
  124. data/src/core/ext/filters/client_channel/parse_address.h +54 -0
  125. data/src/core/ext/filters/client_channel/proxy_mapper.c +63 -0
  126. data/src/core/ext/filters/client_channel/proxy_mapper.h +89 -0
  127. data/src/core/ext/filters/client_channel/proxy_mapper_registry.c +139 -0
  128. data/src/core/ext/filters/client_channel/proxy_mapper_registry.h +59 -0
  129. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.c +350 -0
  130. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +66 -0
  131. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.c +319 -0
  132. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.c +289 -0
  133. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +64 -0
  134. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.c +325 -0
  135. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.c +234 -0
  136. data/src/core/ext/filters/client_channel/resolver.c +88 -0
  137. data/src/core/ext/filters/client_channel/resolver.h +101 -0
  138. data/src/core/ext/filters/client_channel/resolver_factory.c +56 -0
  139. data/src/core/ext/filters/client_channel/resolver_factory.h +85 -0
  140. data/src/core/ext/filters/client_channel/resolver_registry.c +174 -0
  141. data/src/core/ext/filters/client_channel/resolver_registry.h +84 -0
  142. data/src/core/ext/filters/client_channel/retry_throttle.c +210 -0
  143. data/src/core/ext/filters/client_channel/retry_throttle.h +65 -0
  144. data/src/core/ext/filters/client_channel/subchannel.c +835 -0
  145. data/src/core/ext/filters/client_channel/subchannel.h +203 -0
  146. data/src/core/ext/filters/client_channel/subchannel_index.c +262 -0
  147. data/src/core/ext/filters/client_channel/subchannel_index.h +77 -0
  148. data/src/core/ext/filters/client_channel/uri_parser.c +315 -0
  149. data/src/core/ext/filters/client_channel/uri_parser.h +65 -0
  150. data/src/core/ext/filters/load_reporting/load_reporting.c +106 -0
  151. data/src/core/ext/filters/load_reporting/load_reporting.h +73 -0
  152. data/src/core/ext/filters/load_reporting/load_reporting_filter.c +218 -0
  153. data/src/core/ext/filters/load_reporting/load_reporting_filter.h +42 -0
  154. data/src/core/ext/filters/max_age/max_age_filter.c +439 -0
  155. data/src/core/ext/filters/max_age/max_age_filter.h +39 -0
  156. data/src/core/ext/transport/chttp2/alpn/alpn.c +56 -0
  157. data/src/core/ext/transport/chttp2/alpn/alpn.h +49 -0
  158. data/src/core/ext/transport/chttp2/client/chttp2_connector.c +221 -0
  159. data/src/core/ext/transport/chttp2/client/chttp2_connector.h +41 -0
  160. data/src/core/ext/transport/chttp2/client/insecure/channel_create.c +121 -0
  161. data/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.c +95 -0
  162. data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.c +239 -0
  163. data/src/core/ext/transport/chttp2/server/chttp2_server.c +304 -0
  164. data/src/core/ext/transport/chttp2/server/chttp2_server.h +47 -0
  165. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.c +59 -0
  166. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.c +90 -0
  167. data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.c +101 -0
  168. data/src/core/ext/transport/chttp2/transport/bin_decoder.c +236 -0
  169. data/src/core/ext/transport/chttp2/transport/bin_decoder.h +67 -0
  170. data/src/core/ext/transport/chttp2/transport/bin_encoder.c +241 -0
  171. data/src/core/ext/transport/chttp2/transport/bin_encoder.h +54 -0
  172. data/src/core/ext/transport/chttp2/transport/chttp2_plugin.c +43 -0
  173. data/src/core/ext/transport/chttp2/transport/chttp2_transport.c +2847 -0
  174. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +53 -0
  175. data/src/core/ext/transport/chttp2/transport/frame.h +61 -0
  176. data/src/core/ext/transport/chttp2/transport/frame_data.c +287 -0
  177. data/src/core/ext/transport/chttp2/transport/frame_data.h +104 -0
  178. data/src/core/ext/transport/chttp2/transport/frame_goaway.c +198 -0
  179. data/src/core/ext/transport/chttp2/transport/frame_goaway.h +78 -0
  180. data/src/core/ext/transport/chttp2/transport/frame_ping.c +145 -0
  181. data/src/core/ext/transport/chttp2/transport/frame_ping.h +59 -0
  182. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.c +125 -0
  183. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +58 -0
  184. data/src/core/ext/transport/chttp2/transport/frame_settings.c +239 -0
  185. data/src/core/ext/transport/chttp2/transport/frame_settings.h +76 -0
  186. data/src/core/ext/transport/chttp2/transport/frame_window_update.c +134 -0
  187. data/src/core/ext/transport/chttp2/transport/frame_window_update.h +57 -0
  188. data/src/core/ext/transport/chttp2/transport/hpack_encoder.c +661 -0
  189. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +107 -0
  190. data/src/core/ext/transport/chttp2/transport/hpack_parser.c +1734 -0
  191. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +129 -0
  192. data/src/core/ext/transport/chttp2/transport/hpack_table.c +383 -0
  193. data/src/core/ext/transport/chttp2/transport/hpack_table.h +112 -0
  194. data/src/core/ext/transport/chttp2/transport/http2_settings.c +75 -0
  195. data/src/core/ext/transport/chttp2/transport/http2_settings.h +74 -0
  196. data/src/core/ext/transport/chttp2/transport/huffsyms.c +105 -0
  197. data/src/core/ext/transport/chttp2/transport/huffsyms.h +48 -0
  198. data/src/core/ext/transport/chttp2/transport/incoming_metadata.c +88 -0
  199. data/src/core/ext/transport/chttp2/transport/incoming_metadata.h +63 -0
  200. data/src/core/ext/transport/chttp2/transport/internal.h +852 -0
  201. data/src/core/ext/transport/chttp2/transport/parsing.c +825 -0
  202. data/src/core/ext/transport/chttp2/transport/stream_lists.c +194 -0
  203. data/src/core/ext/transport/chttp2/transport/stream_map.c +176 -0
  204. data/src/core/ext/transport/chttp2/transport/stream_map.h +83 -0
  205. data/src/core/ext/transport/chttp2/transport/varint.c +65 -0
  206. data/src/core/ext/transport/chttp2/transport/varint.h +75 -0
  207. data/src/core/ext/transport/chttp2/transport/writing.c +429 -0
  208. data/src/core/lib/channel/channel_args.c +355 -0
  209. data/src/core/lib/channel/channel_args.h +126 -0
  210. data/src/core/lib/channel/channel_stack.c +291 -0
  211. data/src/core/lib/channel/channel_stack.h +319 -0
  212. data/src/core/lib/channel/channel_stack_builder.c +284 -0
  213. data/src/core/lib/channel/channel_stack_builder.h +170 -0
  214. data/src/core/lib/channel/compress_filter.c +353 -0
  215. data/src/core/lib/channel/compress_filter.h +67 -0
  216. data/src/core/lib/channel/connected_channel.c +188 -0
  217. data/src/core/lib/channel/connected_channel.h +48 -0
  218. data/src/core/lib/channel/context.h +64 -0
  219. data/src/core/lib/channel/deadline_filter.c +348 -0
  220. data/src/core/lib/channel/deadline_filter.h +102 -0
  221. data/src/core/lib/channel/handshaker.c +281 -0
  222. data/src/core/lib/channel/handshaker.h +182 -0
  223. data/src/core/lib/channel/handshaker_factory.c +54 -0
  224. data/src/core/lib/channel/handshaker_factory.h +66 -0
  225. data/src/core/lib/channel/handshaker_registry.c +113 -0
  226. data/src/core/lib/channel/handshaker_registry.h +63 -0
  227. data/src/core/lib/channel/http_client_filter.c +601 -0
  228. data/src/core/lib/channel/http_client_filter.h +47 -0
  229. data/src/core/lib/channel/http_server_filter.c +445 -0
  230. data/src/core/lib/channel/http_server_filter.h +42 -0
  231. data/src/core/lib/channel/message_size_filter.c +270 -0
  232. data/src/core/lib/channel/message_size_filter.h +39 -0
  233. data/src/core/lib/compression/algorithm_metadata.h +53 -0
  234. data/src/core/lib/compression/compression.c +198 -0
  235. data/src/core/lib/compression/message_compress.c +204 -0
  236. data/src/core/lib/compression/message_compress.h +54 -0
  237. data/src/core/lib/debug/trace.c +140 -0
  238. data/src/core/lib/debug/trace.h +43 -0
  239. data/src/core/lib/http/format_request.c +135 -0
  240. data/src/core/lib/http/format_request.h +47 -0
  241. data/src/core/lib/http/httpcli.c +336 -0
  242. data/src/core/lib/http/httpcli.h +141 -0
  243. data/src/core/lib/http/httpcli_security_connector.c +199 -0
  244. data/src/core/lib/http/parser.c +379 -0
  245. data/src/core/lib/http/parser.h +126 -0
  246. data/src/core/lib/iomgr/closure.c +168 -0
  247. data/src/core/lib/iomgr/closure.h +153 -0
  248. data/src/core/lib/iomgr/combiner.c +460 -0
  249. data/src/core/lib/iomgr/combiner.h +83 -0
  250. data/src/core/lib/iomgr/endpoint.c +78 -0
  251. data/src/core/lib/iomgr/endpoint.h +117 -0
  252. data/src/core/lib/iomgr/endpoint_pair.h +47 -0
  253. data/src/core/lib/iomgr/endpoint_pair_posix.c +87 -0
  254. data/src/core/lib/iomgr/endpoint_pair_uv.c +53 -0
  255. data/src/core/lib/iomgr/endpoint_pair_windows.c +101 -0
  256. data/src/core/lib/iomgr/error.c +793 -0
  257. data/src/core/lib/iomgr/error.h +218 -0
  258. data/src/core/lib/iomgr/error_internal.h +75 -0
  259. data/src/core/lib/iomgr/ev_epoll_linux.c +1965 -0
  260. data/src/core/lib/iomgr/ev_epoll_linux.h +48 -0
  261. data/src/core/lib/iomgr/ev_poll_posix.c +1593 -0
  262. data/src/core/lib/iomgr/ev_poll_posix.h +42 -0
  263. data/src/core/lib/iomgr/ev_posix.c +287 -0
  264. data/src/core/lib/iomgr/ev_posix.h +189 -0
  265. data/src/core/lib/iomgr/exec_ctx.c +117 -0
  266. data/src/core/lib/iomgr/exec_ctx.h +117 -0
  267. data/src/core/lib/iomgr/executor.c +170 -0
  268. data/src/core/lib/iomgr/executor.h +51 -0
  269. data/src/core/lib/iomgr/iocp_windows.c +168 -0
  270. data/src/core/lib/iomgr/iocp_windows.h +55 -0
  271. data/src/core/lib/iomgr/iomgr.c +183 -0
  272. data/src/core/lib/iomgr/iomgr.h +47 -0
  273. data/src/core/lib/iomgr/iomgr_internal.h +58 -0
  274. data/src/core/lib/iomgr/iomgr_posix.c +56 -0
  275. data/src/core/lib/iomgr/iomgr_posix.h +39 -0
  276. data/src/core/lib/iomgr/iomgr_uv.c +49 -0
  277. data/src/core/lib/iomgr/iomgr_windows.c +76 -0
  278. data/src/core/lib/iomgr/load_file.c +92 -0
  279. data/src/core/lib/iomgr/load_file.h +56 -0
  280. data/src/core/lib/iomgr/lockfree_event.c +238 -0
  281. data/src/core/lib/iomgr/lockfree_event.h +54 -0
  282. data/src/core/lib/iomgr/network_status_tracker.c +48 -0
  283. data/src/core/lib/iomgr/network_status_tracker.h +45 -0
  284. data/src/core/lib/iomgr/polling_entity.c +104 -0
  285. data/src/core/lib/iomgr/polling_entity.h +81 -0
  286. data/src/core/lib/iomgr/pollset.h +97 -0
  287. data/src/core/lib/iomgr/pollset_set.h +62 -0
  288. data/src/core/lib/iomgr/pollset_set_uv.c +63 -0
  289. data/src/core/lib/iomgr/pollset_set_windows.c +64 -0
  290. data/src/core/lib/iomgr/pollset_set_windows.h +39 -0
  291. data/src/core/lib/iomgr/pollset_uv.c +156 -0
  292. data/src/core/lib/iomgr/pollset_uv.h +42 -0
  293. data/src/core/lib/iomgr/pollset_windows.c +232 -0
  294. data/src/core/lib/iomgr/pollset_windows.h +78 -0
  295. data/src/core/lib/iomgr/port.h +138 -0
  296. data/src/core/lib/iomgr/resolve_address.h +70 -0
  297. data/src/core/lib/iomgr/resolve_address_posix.c +207 -0
  298. data/src/core/lib/iomgr/resolve_address_uv.c +284 -0
  299. data/src/core/lib/iomgr/resolve_address_windows.c +190 -0
  300. data/src/core/lib/iomgr/resource_quota.c +877 -0
  301. data/src/core/lib/iomgr/resource_quota.h +167 -0
  302. data/src/core/lib/iomgr/sockaddr.h +55 -0
  303. data/src/core/lib/iomgr/sockaddr_posix.h +44 -0
  304. data/src/core/lib/iomgr/sockaddr_utils.c +272 -0
  305. data/src/core/lib/iomgr/sockaddr_utils.h +93 -0
  306. data/src/core/lib/iomgr/sockaddr_windows.h +43 -0
  307. data/src/core/lib/iomgr/socket_factory_posix.c +110 -0
  308. data/src/core/lib/iomgr/socket_factory_posix.h +90 -0
  309. data/src/core/lib/iomgr/socket_mutator.c +98 -0
  310. data/src/core/lib/iomgr/socket_mutator.h +80 -0
  311. data/src/core/lib/iomgr/socket_utils.h +42 -0
  312. data/src/core/lib/iomgr/socket_utils_common_posix.c +330 -0
  313. data/src/core/lib/iomgr/socket_utils_linux.c +57 -0
  314. data/src/core/lib/iomgr/socket_utils_posix.c +73 -0
  315. data/src/core/lib/iomgr/socket_utils_posix.h +147 -0
  316. data/src/core/lib/iomgr/socket_utils_uv.c +49 -0
  317. data/src/core/lib/iomgr/socket_utils_windows.c +52 -0
  318. data/src/core/lib/iomgr/socket_windows.c +167 -0
  319. data/src/core/lib/iomgr/socket_windows.h +125 -0
  320. data/src/core/lib/iomgr/tcp_client.h +55 -0
  321. data/src/core/lib/iomgr/tcp_client_posix.c +368 -0
  322. data/src/core/lib/iomgr/tcp_client_posix.h +45 -0
  323. data/src/core/lib/iomgr/tcp_client_uv.c +192 -0
  324. data/src/core/lib/iomgr/tcp_client_windows.c +260 -0
  325. data/src/core/lib/iomgr/tcp_posix.c +677 -0
  326. data/src/core/lib/iomgr/tcp_posix.h +70 -0
  327. data/src/core/lib/iomgr/tcp_server.h +116 -0
  328. data/src/core/lib/iomgr/tcp_server_posix.c +579 -0
  329. data/src/core/lib/iomgr/tcp_server_utils_posix.h +135 -0
  330. data/src/core/lib/iomgr/tcp_server_utils_posix_common.c +221 -0
  331. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.c +196 -0
  332. data/src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.c +49 -0
  333. data/src/core/lib/iomgr/tcp_server_uv.c +393 -0
  334. data/src/core/lib/iomgr/tcp_server_windows.c +558 -0
  335. data/src/core/lib/iomgr/tcp_uv.c +374 -0
  336. data/src/core/lib/iomgr/tcp_uv.h +59 -0
  337. data/src/core/lib/iomgr/tcp_windows.c +462 -0
  338. data/src/core/lib/iomgr/tcp_windows.h +59 -0
  339. data/src/core/lib/iomgr/time_averaged_stats.c +77 -0
  340. data/src/core/lib/iomgr/time_averaged_stats.h +88 -0
  341. data/src/core/lib/iomgr/timer.h +111 -0
  342. data/src/core/lib/iomgr/timer_generic.c +567 -0
  343. data/src/core/lib/iomgr/timer_generic.h +49 -0
  344. data/src/core/lib/iomgr/timer_heap.c +152 -0
  345. data/src/core/lib/iomgr/timer_heap.h +57 -0
  346. data/src/core/lib/iomgr/timer_uv.c +103 -0
  347. data/src/core/lib/iomgr/timer_uv.h +47 -0
  348. data/src/core/lib/iomgr/udp_server.c +529 -0
  349. data/src/core/lib/iomgr/udp_server.h +89 -0
  350. data/src/core/lib/iomgr/unix_sockets_posix.c +108 -0
  351. data/src/core/lib/iomgr/unix_sockets_posix.h +56 -0
  352. data/src/core/lib/iomgr/unix_sockets_posix_noop.c +62 -0
  353. data/src/core/lib/iomgr/wakeup_fd_cv.c +118 -0
  354. data/src/core/lib/iomgr/wakeup_fd_cv.h +80 -0
  355. data/src/core/lib/iomgr/wakeup_fd_eventfd.c +97 -0
  356. data/src/core/lib/iomgr/wakeup_fd_nospecial.c +51 -0
  357. data/src/core/lib/iomgr/wakeup_fd_pipe.c +112 -0
  358. data/src/core/lib/iomgr/wakeup_fd_pipe.h +41 -0
  359. data/src/core/lib/iomgr/wakeup_fd_posix.c +101 -0
  360. data/src/core/lib/iomgr/wakeup_fd_posix.h +109 -0
  361. data/src/core/lib/iomgr/workqueue.h +87 -0
  362. data/src/core/lib/iomgr/workqueue_uv.c +65 -0
  363. data/src/core/lib/iomgr/workqueue_uv.h +37 -0
  364. data/src/core/lib/iomgr/workqueue_windows.c +63 -0
  365. data/src/core/lib/iomgr/workqueue_windows.h +37 -0
  366. data/src/core/lib/json/json.c +63 -0
  367. data/src/core/lib/json/json.h +88 -0
  368. data/src/core/lib/json/json_common.h +49 -0
  369. data/src/core/lib/json/json_reader.c +675 -0
  370. data/src/core/lib/json/json_reader.h +160 -0
  371. data/src/core/lib/json/json_string.c +379 -0
  372. data/src/core/lib/json/json_writer.c +258 -0
  373. data/src/core/lib/json/json_writer.h +97 -0
  374. data/src/core/lib/profiling/basic_timers.c +298 -0
  375. data/src/core/lib/profiling/stap_timers.c +65 -0
  376. data/src/core/lib/profiling/timers.h +121 -0
  377. data/src/core/lib/security/context/security_context.c +350 -0
  378. data/src/core/lib/security/context/security_context.h +134 -0
  379. data/src/core/lib/security/credentials/composite/composite_credentials.c +274 -0
  380. data/src/core/lib/security/credentials/composite/composite_credentials.h +72 -0
  381. data/src/core/lib/security/credentials/credentials.c +308 -0
  382. data/src/core/lib/security/credentials/credentials.h +268 -0
  383. data/src/core/lib/security/credentials/credentials_metadata.c +103 -0
  384. data/src/core/lib/security/credentials/fake/fake_credentials.c +141 -0
  385. data/src/core/lib/security/credentials/fake/fake_credentials.h +71 -0
  386. data/src/core/lib/security/credentials/google_default/credentials_generic.c +54 -0
  387. data/src/core/lib/security/credentials/google_default/google_default_credentials.c +337 -0
  388. data/src/core/lib/security/credentials/google_default/google_default_credentials.h +60 -0
  389. data/src/core/lib/security/credentials/iam/iam_credentials.c +85 -0
  390. data/src/core/lib/security/credentials/iam/iam_credentials.h +44 -0
  391. data/src/core/lib/security/credentials/jwt/json_token.c +321 -0
  392. data/src/core/lib/security/credentials/jwt/json_token.h +88 -0
  393. data/src/core/lib/security/credentials/jwt/jwt_credentials.c +195 -0
  394. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +63 -0
  395. data/src/core/lib/security/credentials/jwt/jwt_verifier.c +910 -0
  396. data/src/core/lib/security/credentials/jwt/jwt_verifier.h +140 -0
  397. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.c +468 -0
  398. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +109 -0
  399. data/src/core/lib/security/credentials/plugin/plugin_credentials.c +153 -0
  400. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +45 -0
  401. data/src/core/lib/security/credentials/ssl/ssl_credentials.c +242 -0
  402. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +48 -0
  403. data/src/core/lib/security/transport/auth_filters.h +42 -0
  404. data/src/core/lib/security/transport/client_auth_filter.c +384 -0
  405. data/src/core/lib/security/transport/lb_targets_info.c +70 -0
  406. data/src/core/lib/security/transport/lb_targets_info.h +47 -0
  407. data/src/core/lib/security/transport/secure_endpoint.c +427 -0
  408. data/src/core/lib/security/transport/secure_endpoint.h +49 -0
  409. data/src/core/lib/security/transport/security_connector.c +909 -0
  410. data/src/core/lib/security/transport/security_connector.h +252 -0
  411. data/src/core/lib/security/transport/security_handshaker.c +507 -0
  412. data/src/core/lib/security/transport/security_handshaker.h +49 -0
  413. data/src/core/lib/security/transport/server_auth_filter.c +277 -0
  414. data/src/core/lib/security/transport/tsi_error.c +42 -0
  415. data/src/core/lib/security/transport/tsi_error.h +42 -0
  416. data/src/core/lib/security/util/json_util.c +61 -0
  417. data/src/core/lib/security/util/json_util.h +55 -0
  418. data/src/core/lib/slice/b64.c +251 -0
  419. data/src/core/lib/slice/b64.h +65 -0
  420. data/src/core/lib/slice/percent_encoding.c +182 -0
  421. data/src/core/lib/slice/percent_encoding.h +78 -0
  422. data/src/core/lib/slice/slice.c +466 -0
  423. data/src/core/lib/slice/slice_buffer.c +355 -0
  424. data/src/core/lib/slice/slice_hash_table.c +125 -0
  425. data/src/core/lib/slice/slice_hash_table.h +77 -0
  426. data/src/core/lib/slice/slice_intern.c +346 -0
  427. data/src/core/lib/slice/slice_internal.h +64 -0
  428. data/src/core/lib/slice/slice_string_helpers.c +95 -0
  429. data/src/core/lib/slice/slice_string_helpers.h +63 -0
  430. data/src/core/lib/support/alloc.c +117 -0
  431. data/src/core/lib/support/arena.c +98 -0
  432. data/src/core/lib/support/arena.h +54 -0
  433. data/src/core/lib/support/atm.c +47 -0
  434. data/src/core/lib/support/avl.c +299 -0
  435. data/src/core/lib/support/backoff.c +87 -0
  436. data/src/core/lib/support/backoff.h +71 -0
  437. data/src/core/lib/support/block_annotate.h +48 -0
  438. data/src/core/lib/support/cmdline.c +345 -0
  439. data/src/core/lib/support/cpu_iphone.c +49 -0
  440. data/src/core/lib/support/cpu_linux.c +83 -0
  441. data/src/core/lib/support/cpu_posix.c +72 -0
  442. data/src/core/lib/support/cpu_windows.c +47 -0
  443. data/src/core/lib/support/env.h +58 -0
  444. data/src/core/lib/support/env_linux.c +89 -0
  445. data/src/core/lib/support/env_posix.c +57 -0
  446. data/src/core/lib/support/env_windows.c +79 -0
  447. data/src/core/lib/support/histogram.c +243 -0
  448. data/src/core/lib/support/host_port.c +110 -0
  449. data/src/core/lib/support/log.c +103 -0
  450. data/src/core/lib/support/log_android.c +87 -0
  451. data/src/core/lib/support/log_linux.c +105 -0
  452. data/src/core/lib/support/log_posix.c +106 -0
  453. data/src/core/lib/support/log_windows.c +112 -0
  454. data/src/core/lib/support/mpscq.c +83 -0
  455. data/src/core/lib/support/mpscq.h +65 -0
  456. data/src/core/lib/support/murmur_hash.c +94 -0
  457. data/src/core/lib/support/murmur_hash.h +44 -0
  458. data/src/core/lib/support/spinlock.h +52 -0
  459. data/src/core/lib/support/stack_lockfree.c +185 -0
  460. data/src/core/lib/support/stack_lockfree.h +53 -0
  461. data/src/core/lib/support/string.c +315 -0
  462. data/src/core/lib/support/string.h +128 -0
  463. data/src/core/lib/support/string_posix.c +86 -0
  464. data/src/core/lib/support/string_util_windows.c +94 -0
  465. data/src/core/lib/support/string_windows.c +83 -0
  466. data/src/core/lib/support/string_windows.h +47 -0
  467. data/src/core/lib/support/subprocess_posix.c +114 -0
  468. data/src/core/lib/support/subprocess_windows.c +141 -0
  469. data/src/core/lib/support/sync.c +137 -0
  470. data/src/core/lib/support/sync_posix.c +113 -0
  471. data/src/core/lib/support/sync_windows.c +133 -0
  472. data/src/core/lib/support/thd.c +64 -0
  473. data/src/core/lib/support/thd_internal.h +39 -0
  474. data/src/core/lib/support/thd_posix.c +95 -0
  475. data/src/core/lib/support/thd_windows.c +117 -0
  476. data/src/core/lib/support/time.c +262 -0
  477. data/src/core/lib/support/time_posix.c +176 -0
  478. data/src/core/lib/support/time_precise.c +89 -0
  479. data/src/core/lib/support/time_precise.h +42 -0
  480. data/src/core/lib/support/time_windows.c +116 -0
  481. data/src/core/lib/support/tls_pthread.c +45 -0
  482. data/src/core/lib/support/tmpfile.h +53 -0
  483. data/src/core/lib/support/tmpfile_msys.c +73 -0
  484. data/src/core/lib/support/tmpfile_posix.c +85 -0
  485. data/src/core/lib/support/tmpfile_windows.c +84 -0
  486. data/src/core/lib/support/wrap_memcpy.c +55 -0
  487. data/src/core/lib/surface/alarm.c +87 -0
  488. data/src/core/lib/surface/api_trace.c +36 -0
  489. data/src/core/lib/surface/api_trace.h +65 -0
  490. data/src/core/lib/surface/byte_buffer.c +103 -0
  491. data/src/core/lib/surface/byte_buffer_reader.c +140 -0
  492. data/src/core/lib/surface/call.c +1835 -0
  493. data/src/core/lib/surface/call.h +135 -0
  494. data/src/core/lib/surface/call_details.c +56 -0
  495. data/src/core/lib/surface/call_log_batch.c +131 -0
  496. data/src/core/lib/surface/call_test_only.h +64 -0
  497. data/src/core/lib/surface/channel.c +434 -0
  498. data/src/core/lib/surface/channel.h +99 -0
  499. data/src/core/lib/surface/channel_init.c +140 -0
  500. data/src/core/lib/surface/channel_init.h +96 -0
  501. data/src/core/lib/surface/channel_ping.c +80 -0
  502. data/src/core/lib/surface/channel_stack_type.c +54 -0
  503. data/src/core/lib/surface/channel_stack_type.h +58 -0
  504. data/src/core/lib/surface/completion_queue.c +692 -0
  505. data/src/core/lib/surface/completion_queue.h +102 -0
  506. data/src/core/lib/surface/completion_queue_factory.c +77 -0
  507. data/src/core/lib/surface/completion_queue_factory.h +51 -0
  508. data/src/core/lib/surface/event_string.c +81 -0
  509. data/src/core/lib/surface/event_string.h +42 -0
  510. data/src/core/lib/surface/init.c +261 -0
  511. data/src/core/lib/surface/init.h +42 -0
  512. data/src/core/lib/surface/init_secure.c +94 -0
  513. data/src/core/lib/surface/lame_client.c +188 -0
  514. data/src/core/lib/surface/lame_client.h +41 -0
  515. data/src/core/lib/surface/metadata_array.c +49 -0
  516. data/src/core/lib/surface/server.c +1529 -0
  517. data/src/core/lib/surface/server.h +71 -0
  518. data/src/core/lib/surface/validate_metadata.c +108 -0
  519. data/src/core/lib/surface/validate_metadata.h +43 -0
  520. data/src/core/lib/surface/version.c +41 -0
  521. data/src/core/lib/transport/bdp_estimator.c +104 -0
  522. data/src/core/lib/transport/bdp_estimator.h +76 -0
  523. data/src/core/lib/transport/byte_stream.c +81 -0
  524. data/src/core/lib/transport/byte_stream.h +85 -0
  525. data/src/core/lib/transport/connectivity_state.c +219 -0
  526. data/src/core/lib/transport/connectivity_state.h +101 -0
  527. data/src/core/lib/transport/error_utils.c +124 -0
  528. data/src/core/lib/transport/error_utils.h +56 -0
  529. data/src/core/lib/transport/http2_errors.h +56 -0
  530. data/src/core/lib/transport/metadata.c +529 -0
  531. data/src/core/lib/transport/metadata.h +186 -0
  532. data/src/core/lib/transport/metadata_batch.c +328 -0
  533. data/src/core/lib/transport/metadata_batch.h +166 -0
  534. data/src/core/lib/transport/pid_controller.c +78 -0
  535. data/src/core/lib/transport/pid_controller.h +77 -0
  536. data/src/core/lib/transport/service_config.c +266 -0
  537. data/src/core/lib/transport/service_config.h +77 -0
  538. data/src/core/lib/transport/static_metadata.c +801 -0
  539. data/src/core/lib/transport/static_metadata.h +557 -0
  540. data/src/core/lib/transport/status_conversion.c +113 -0
  541. data/src/core/lib/transport/status_conversion.h +49 -0
  542. data/src/core/lib/transport/timeout_encoding.c +190 -0
  543. data/src/core/lib/transport/timeout_encoding.h +49 -0
  544. data/src/core/lib/transport/transport.c +282 -0
  545. data/src/core/lib/transport/transport.h +354 -0
  546. data/src/core/lib/transport/transport_impl.h +90 -0
  547. data/src/core/lib/transport/transport_op_string.c +217 -0
  548. data/src/core/plugin_registry/grpc_plugin_registry.c +82 -0
  549. data/src/core/tsi/fake_transport_security.c +527 -0
  550. data/src/core/tsi/fake_transport_security.h +61 -0
  551. data/src/core/tsi/ssl_transport_security.c +1533 -0
  552. data/src/core/tsi/ssl_transport_security.h +214 -0
  553. data/src/core/tsi/ssl_types.h +55 -0
  554. data/src/core/tsi/transport_security.c +266 -0
  555. data/src/core/tsi/transport_security.h +111 -0
  556. data/src/core/tsi/transport_security_interface.h +353 -0
  557. data/src/ruby/bin/apis/google/protobuf/empty.rb +44 -0
  558. data/src/ruby/bin/apis/pubsub_demo.rb +256 -0
  559. data/src/ruby/bin/apis/tech/pubsub/proto/pubsub.rb +174 -0
  560. data/src/ruby/bin/apis/tech/pubsub/proto/pubsub_services.rb +103 -0
  561. data/src/ruby/bin/math_client.rb +147 -0
  562. data/src/ruby/bin/math_pb.rb +32 -0
  563. data/src/ruby/bin/math_server.rb +206 -0
  564. data/src/ruby/bin/math_services_pb.rb +66 -0
  565. data/src/ruby/bin/noproto_client.rb +108 -0
  566. data/src/ruby/bin/noproto_server.rb +112 -0
  567. data/src/ruby/ext/grpc/extconf.rb +131 -0
  568. data/src/ruby/ext/grpc/rb_byte_buffer.c +77 -0
  569. data/src/ruby/ext/grpc/rb_byte_buffer.h +50 -0
  570. data/src/ruby/ext/grpc/rb_call.c +1009 -0
  571. data/src/ruby/ext/grpc/rb_call.h +66 -0
  572. data/src/ruby/ext/grpc/rb_call_credentials.c +295 -0
  573. data/src/ruby/ext/grpc/rb_call_credentials.h +46 -0
  574. data/src/ruby/ext/grpc/rb_channel.c +662 -0
  575. data/src/ruby/ext/grpc/rb_channel.h +49 -0
  576. data/src/ruby/ext/grpc/rb_channel_args.c +168 -0
  577. data/src/ruby/ext/grpc/rb_channel_args.h +53 -0
  578. data/src/ruby/ext/grpc/rb_channel_credentials.c +268 -0
  579. data/src/ruby/ext/grpc/rb_channel_credentials.h +47 -0
  580. data/src/ruby/ext/grpc/rb_completion_queue.c +117 -0
  581. data/src/ruby/ext/grpc/rb_completion_queue.h +51 -0
  582. data/src/ruby/ext/grpc/rb_compression_options.c +472 -0
  583. data/src/ruby/ext/grpc/rb_compression_options.h +44 -0
  584. data/src/ruby/ext/grpc/rb_event_thread.c +158 -0
  585. data/src/ruby/ext/grpc/rb_event_thread.h +37 -0
  586. data/src/ruby/ext/grpc/rb_grpc.c +343 -0
  587. data/src/ruby/ext/grpc/rb_grpc.h +87 -0
  588. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +634 -0
  589. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +955 -0
  590. data/src/ruby/ext/grpc/rb_loader.c +72 -0
  591. data/src/ruby/ext/grpc/rb_loader.h +40 -0
  592. data/src/ruby/ext/grpc/rb_server.c +359 -0
  593. data/src/ruby/ext/grpc/rb_server.h +47 -0
  594. data/src/ruby/ext/grpc/rb_server_credentials.c +258 -0
  595. data/src/ruby/ext/grpc/rb_server_credentials.h +47 -0
  596. data/src/ruby/lib/grpc/core/time_consts.rb +71 -0
  597. data/src/ruby/lib/grpc/errors.rb +215 -0
  598. data/src/ruby/lib/grpc/generic/active_call.rb +547 -0
  599. data/src/ruby/lib/grpc/generic/bidi_call.rb +229 -0
  600. data/src/ruby/lib/grpc/generic/client_stub.rb +463 -0
  601. data/src/ruby/lib/grpc/generic/rpc_desc.rb +173 -0
  602. data/src/ruby/lib/grpc/generic/rpc_server.rb +476 -0
  603. data/src/ruby/lib/grpc/generic/service.rb +225 -0
  604. data/src/ruby/lib/grpc/grpc.rb +39 -0
  605. data/src/ruby/lib/grpc/grpc_c.bundle +0 -0
  606. data/src/ruby/lib/grpc/logconfig.rb +59 -0
  607. data/src/ruby/lib/grpc/notifier.rb +60 -0
  608. data/src/ruby/lib/grpc/version.rb +33 -0
  609. data/src/ruby/lib/grpc.rb +49 -0
  610. data/src/ruby/pb/README.md +42 -0
  611. data/src/ruby/pb/generate_proto_ruby.sh +58 -0
  612. data/src/ruby/pb/grpc/health/checker.rb +77 -0
  613. data/src/ruby/pb/grpc/health/v1/health_pb.rb +28 -0
  614. data/src/ruby/pb/grpc/health/v1/health_services_pb.rb +56 -0
  615. data/src/ruby/pb/grpc/testing/duplicate/echo_duplicate_services_pb.rb +58 -0
  616. data/src/ruby/pb/grpc/testing/metrics_pb.rb +28 -0
  617. data/src/ruby/pb/grpc/testing/metrics_services_pb.rb +64 -0
  618. data/src/ruby/pb/src/proto/grpc/testing/empty_pb.rb +15 -0
  619. data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +82 -0
  620. data/src/ruby/pb/src/proto/grpc/testing/test_pb.rb +14 -0
  621. data/src/ruby/pb/src/proto/grpc/testing/test_services_pb.rb +117 -0
  622. data/src/ruby/pb/test/client.rb +779 -0
  623. data/src/ruby/pb/test/server.rb +267 -0
  624. data/src/ruby/spec/call_credentials_spec.rb +57 -0
  625. data/src/ruby/spec/call_spec.rb +162 -0
  626. data/src/ruby/spec/channel_connection_spec.rb +141 -0
  627. data/src/ruby/spec/channel_credentials_spec.rb +97 -0
  628. data/src/ruby/spec/channel_spec.rb +205 -0
  629. data/src/ruby/spec/client_server_spec.rb +491 -0
  630. data/src/ruby/spec/compression_options_spec.rb +164 -0
  631. data/src/ruby/spec/error_sanity_spec.rb +64 -0
  632. data/src/ruby/spec/generic/active_call_spec.rb +632 -0
  633. data/src/ruby/spec/generic/client_stub_spec.rb +556 -0
  634. data/src/ruby/spec/generic/rpc_desc_spec.rb +351 -0
  635. data/src/ruby/spec/generic/rpc_server_pool_spec.rb +142 -0
  636. data/src/ruby/spec/generic/rpc_server_spec.rb +524 -0
  637. data/src/ruby/spec/generic/service_spec.rb +276 -0
  638. data/src/ruby/spec/pb/duplicate/codegen_spec.rb +71 -0
  639. data/src/ruby/spec/pb/health/checker_spec.rb +222 -0
  640. data/src/ruby/spec/server_credentials_spec.rb +94 -0
  641. data/src/ruby/spec/server_spec.rb +205 -0
  642. data/src/ruby/spec/spec_helper.rb +71 -0
  643. data/src/ruby/spec/testdata/README +1 -0
  644. data/src/ruby/spec/testdata/ca.pem +15 -0
  645. data/src/ruby/spec/testdata/server1.key +16 -0
  646. data/src/ruby/spec/testdata/server1.pem +16 -0
  647. data/src/ruby/spec/time_consts_spec.rb +89 -0
  648. data/third_party/boringssl/crypto/aes/aes.c +1142 -0
  649. data/third_party/boringssl/crypto/aes/internal.h +87 -0
  650. data/third_party/boringssl/crypto/aes/mode_wrappers.c +112 -0
  651. data/third_party/boringssl/crypto/asn1/a_bitstr.c +263 -0
  652. data/third_party/boringssl/crypto/asn1/a_bool.c +110 -0
  653. data/third_party/boringssl/crypto/asn1/a_d2i_fp.c +282 -0
  654. data/third_party/boringssl/crypto/asn1/a_dup.c +111 -0
  655. data/third_party/boringssl/crypto/asn1/a_enum.c +181 -0
  656. data/third_party/boringssl/crypto/asn1/a_gentm.c +256 -0
  657. data/third_party/boringssl/crypto/asn1/a_i2d_fp.c +147 -0
  658. data/third_party/boringssl/crypto/asn1/a_int.c +460 -0
  659. data/third_party/boringssl/crypto/asn1/a_mbstr.c +409 -0
  660. data/third_party/boringssl/crypto/asn1/a_object.c +400 -0
  661. data/third_party/boringssl/crypto/asn1/a_octet.c +77 -0
  662. data/third_party/boringssl/crypto/asn1/a_print.c +121 -0
  663. data/third_party/boringssl/crypto/asn1/a_strnid.c +309 -0
  664. data/third_party/boringssl/crypto/asn1/a_time.c +206 -0
  665. data/third_party/boringssl/crypto/asn1/a_type.c +151 -0
  666. data/third_party/boringssl/crypto/asn1/a_utctm.c +304 -0
  667. data/third_party/boringssl/crypto/asn1/a_utf8.c +234 -0
  668. data/third_party/boringssl/crypto/asn1/asn1_lib.c +483 -0
  669. data/third_party/boringssl/crypto/asn1/asn1_locl.h +63 -0
  670. data/third_party/boringssl/crypto/asn1/asn1_par.c +80 -0
  671. data/third_party/boringssl/crypto/asn1/asn_pack.c +105 -0
  672. data/third_party/boringssl/crypto/asn1/f_enum.c +93 -0
  673. data/third_party/boringssl/crypto/asn1/f_int.c +97 -0
  674. data/third_party/boringssl/crypto/asn1/f_string.c +91 -0
  675. data/third_party/boringssl/crypto/asn1/t_bitst.c +103 -0
  676. data/third_party/boringssl/crypto/asn1/tasn_dec.c +1221 -0
  677. data/third_party/boringssl/crypto/asn1/tasn_enc.c +665 -0
  678. data/third_party/boringssl/crypto/asn1/tasn_fre.c +246 -0
  679. data/third_party/boringssl/crypto/asn1/tasn_new.c +381 -0
  680. data/third_party/boringssl/crypto/asn1/tasn_typ.c +131 -0
  681. data/third_party/boringssl/crypto/asn1/tasn_utl.c +266 -0
  682. data/third_party/boringssl/crypto/asn1/x_bignum.c +153 -0
  683. data/third_party/boringssl/crypto/asn1/x_long.c +197 -0
  684. data/third_party/boringssl/crypto/base64/base64.c +442 -0
  685. data/third_party/boringssl/crypto/bio/bio.c +598 -0
  686. data/third_party/boringssl/crypto/bio/bio_mem.c +328 -0
  687. data/third_party/boringssl/crypto/bio/buffer.c +496 -0
  688. data/third_party/boringssl/crypto/bio/connect.c +553 -0
  689. data/third_party/boringssl/crypto/bio/fd.c +277 -0
  690. data/third_party/boringssl/crypto/bio/file.c +313 -0
  691. data/third_party/boringssl/crypto/bio/hexdump.c +191 -0
  692. data/third_party/boringssl/crypto/bio/internal.h +111 -0
  693. data/third_party/boringssl/crypto/bio/pair.c +803 -0
  694. data/third_party/boringssl/crypto/bio/printf.c +119 -0
  695. data/third_party/boringssl/crypto/bio/socket.c +203 -0
  696. data/third_party/boringssl/crypto/bio/socket_helper.c +113 -0
  697. data/third_party/boringssl/crypto/bn/add.c +377 -0
  698. data/third_party/boringssl/crypto/bn/asm/x86_64-gcc.c +531 -0
  699. data/third_party/boringssl/crypto/bn/bn.c +379 -0
  700. data/third_party/boringssl/crypto/bn/bn_asn1.c +80 -0
  701. data/third_party/boringssl/crypto/bn/cmp.c +225 -0
  702. data/third_party/boringssl/crypto/bn/convert.c +599 -0
  703. data/third_party/boringssl/crypto/bn/ctx.c +311 -0
  704. data/third_party/boringssl/crypto/bn/div.c +671 -0
  705. data/third_party/boringssl/crypto/bn/exponentiation.c +1258 -0
  706. data/third_party/boringssl/crypto/bn/gcd.c +628 -0
  707. data/third_party/boringssl/crypto/bn/generic.c +703 -0
  708. data/third_party/boringssl/crypto/bn/internal.h +245 -0
  709. data/third_party/boringssl/crypto/bn/kronecker.c +175 -0
  710. data/third_party/boringssl/crypto/bn/montgomery.c +410 -0
  711. data/third_party/boringssl/crypto/bn/montgomery_inv.c +160 -0
  712. data/third_party/boringssl/crypto/bn/mul.c +869 -0
  713. data/third_party/boringssl/crypto/bn/prime.c +861 -0
  714. data/third_party/boringssl/crypto/bn/random.c +340 -0
  715. data/third_party/boringssl/crypto/bn/rsaz_exp.c +319 -0
  716. data/third_party/boringssl/crypto/bn/rsaz_exp.h +56 -0
  717. data/third_party/boringssl/crypto/bn/shift.c +299 -0
  718. data/third_party/boringssl/crypto/bn/sqrt.c +504 -0
  719. data/third_party/boringssl/crypto/buf/buf.c +239 -0
  720. data/third_party/boringssl/crypto/bytestring/asn1_compat.c +51 -0
  721. data/third_party/boringssl/crypto/bytestring/ber.c +263 -0
  722. data/third_party/boringssl/crypto/bytestring/cbb.c +473 -0
  723. data/third_party/boringssl/crypto/bytestring/cbs.c +439 -0
  724. data/third_party/boringssl/crypto/bytestring/internal.h +75 -0
  725. data/third_party/boringssl/crypto/chacha/chacha.c +167 -0
  726. data/third_party/boringssl/crypto/cipher/aead.c +156 -0
  727. data/third_party/boringssl/crypto/cipher/cipher.c +652 -0
  728. data/third_party/boringssl/crypto/cipher/derive_key.c +154 -0
  729. data/third_party/boringssl/crypto/cipher/e_aes.c +1717 -0
  730. data/third_party/boringssl/crypto/cipher/e_chacha20poly1305.c +300 -0
  731. data/third_party/boringssl/crypto/cipher/e_des.c +205 -0
  732. data/third_party/boringssl/crypto/cipher/e_null.c +85 -0
  733. data/third_party/boringssl/crypto/cipher/e_rc2.c +443 -0
  734. data/third_party/boringssl/crypto/cipher/e_rc4.c +87 -0
  735. data/third_party/boringssl/crypto/cipher/e_ssl3.c +403 -0
  736. data/third_party/boringssl/crypto/cipher/e_tls.c +602 -0
  737. data/third_party/boringssl/crypto/cipher/internal.h +162 -0
  738. data/third_party/boringssl/crypto/cipher/tls_cbc.c +553 -0
  739. data/third_party/boringssl/crypto/cmac/cmac.c +239 -0
  740. data/third_party/boringssl/crypto/conf/conf.c +788 -0
  741. data/third_party/boringssl/crypto/conf/conf_def.h +127 -0
  742. data/third_party/boringssl/crypto/conf/internal.h +31 -0
  743. data/third_party/boringssl/crypto/cpu-aarch64-linux.c +61 -0
  744. data/third_party/boringssl/crypto/cpu-arm-linux.c +360 -0
  745. data/third_party/boringssl/crypto/cpu-arm.c +38 -0
  746. data/third_party/boringssl/crypto/cpu-intel.c +263 -0
  747. data/third_party/boringssl/crypto/cpu-ppc64le.c +40 -0
  748. data/third_party/boringssl/crypto/crypto.c +164 -0
  749. data/third_party/boringssl/crypto/curve25519/curve25519.c +4944 -0
  750. data/third_party/boringssl/crypto/curve25519/internal.h +109 -0
  751. data/third_party/boringssl/crypto/curve25519/spake25519.c +464 -0
  752. data/third_party/boringssl/crypto/curve25519/x25519-x86_64.c +246 -0
  753. data/third_party/boringssl/crypto/des/des.c +771 -0
  754. data/third_party/boringssl/crypto/des/internal.h +212 -0
  755. data/third_party/boringssl/crypto/dh/check.c +218 -0
  756. data/third_party/boringssl/crypto/dh/dh.c +487 -0
  757. data/third_party/boringssl/crypto/dh/dh_asn1.c +160 -0
  758. data/third_party/boringssl/crypto/dh/params.c +253 -0
  759. data/third_party/boringssl/crypto/digest/digest.c +248 -0
  760. data/third_party/boringssl/crypto/digest/digests.c +321 -0
  761. data/third_party/boringssl/crypto/digest/internal.h +112 -0
  762. data/third_party/boringssl/crypto/digest/md32_common.h +262 -0
  763. data/third_party/boringssl/crypto/dsa/dsa.c +964 -0
  764. data/third_party/boringssl/crypto/dsa/dsa_asn1.c +339 -0
  765. data/third_party/boringssl/crypto/ec/ec.c +847 -0
  766. data/third_party/boringssl/crypto/ec/ec_asn1.c +549 -0
  767. data/third_party/boringssl/crypto/ec/ec_key.c +479 -0
  768. data/third_party/boringssl/crypto/ec/ec_montgomery.c +308 -0
  769. data/third_party/boringssl/crypto/ec/internal.h +276 -0
  770. data/third_party/boringssl/crypto/ec/oct.c +428 -0
  771. data/third_party/boringssl/crypto/ec/p224-64.c +1187 -0
  772. data/third_party/boringssl/crypto/ec/p256-64.c +1741 -0
  773. data/third_party/boringssl/crypto/ec/p256-x86_64-table.h +9543 -0
  774. data/third_party/boringssl/crypto/ec/p256-x86_64.c +574 -0
  775. data/third_party/boringssl/crypto/ec/simple.c +1117 -0
  776. data/third_party/boringssl/crypto/ec/util-64.c +109 -0
  777. data/third_party/boringssl/crypto/ec/wnaf.c +449 -0
  778. data/third_party/boringssl/crypto/ecdh/ecdh.c +159 -0
  779. data/third_party/boringssl/crypto/ecdsa/ecdsa.c +478 -0
  780. data/third_party/boringssl/crypto/ecdsa/ecdsa_asn1.c +227 -0
  781. data/third_party/boringssl/crypto/engine/engine.c +96 -0
  782. data/third_party/boringssl/crypto/err/err.c +756 -0
  783. data/third_party/boringssl/crypto/evp/digestsign.c +159 -0
  784. data/third_party/boringssl/crypto/evp/evp.c +367 -0
  785. data/third_party/boringssl/crypto/evp/evp_asn1.c +337 -0
  786. data/third_party/boringssl/crypto/evp/evp_ctx.c +448 -0
  787. data/third_party/boringssl/crypto/evp/internal.h +237 -0
  788. data/third_party/boringssl/crypto/evp/p_dsa_asn1.c +268 -0
  789. data/third_party/boringssl/crypto/evp/p_ec.c +236 -0
  790. data/third_party/boringssl/crypto/evp/p_ec_asn1.c +257 -0
  791. data/third_party/boringssl/crypto/evp/p_rsa.c +673 -0
  792. data/third_party/boringssl/crypto/evp/p_rsa_asn1.c +200 -0
  793. data/third_party/boringssl/crypto/evp/pbkdf.c +151 -0
  794. data/third_party/boringssl/crypto/evp/print.c +520 -0
  795. data/third_party/boringssl/crypto/evp/sign.c +151 -0
  796. data/third_party/boringssl/crypto/ex_data.c +292 -0
  797. data/third_party/boringssl/crypto/hkdf/hkdf.c +110 -0
  798. data/third_party/boringssl/crypto/hmac/hmac.c +213 -0
  799. data/third_party/boringssl/crypto/internal.h +527 -0
  800. data/third_party/boringssl/crypto/lhash/lhash.c +342 -0
  801. data/third_party/boringssl/crypto/md4/md4.c +234 -0
  802. data/third_party/boringssl/crypto/md5/md5.c +275 -0
  803. data/third_party/boringssl/crypto/mem.c +200 -0
  804. data/third_party/boringssl/crypto/modes/cbc.c +216 -0
  805. data/third_party/boringssl/crypto/modes/cfb.c +230 -0
  806. data/third_party/boringssl/crypto/modes/ctr.c +219 -0
  807. data/third_party/boringssl/crypto/modes/gcm.c +1288 -0
  808. data/third_party/boringssl/crypto/modes/internal.h +358 -0
  809. data/third_party/boringssl/crypto/modes/ofb.c +95 -0
  810. data/third_party/boringssl/crypto/newhope/error_correction.c +131 -0
  811. data/third_party/boringssl/crypto/newhope/internal.h +71 -0
  812. data/third_party/boringssl/crypto/newhope/newhope.c +174 -0
  813. data/third_party/boringssl/crypto/newhope/ntt.c +148 -0
  814. data/third_party/boringssl/crypto/newhope/poly.c +183 -0
  815. data/third_party/boringssl/crypto/newhope/precomp.c +306 -0
  816. data/third_party/boringssl/crypto/newhope/reduce.c +42 -0
  817. data/third_party/boringssl/crypto/obj/obj.c +640 -0
  818. data/third_party/boringssl/crypto/obj/obj_dat.h +5254 -0
  819. data/third_party/boringssl/crypto/obj/obj_xref.c +124 -0
  820. data/third_party/boringssl/crypto/obj/obj_xref.h +96 -0
  821. data/third_party/boringssl/crypto/pem/pem_all.c +262 -0
  822. data/third_party/boringssl/crypto/pem/pem_info.c +381 -0
  823. data/third_party/boringssl/crypto/pem/pem_lib.c +778 -0
  824. data/third_party/boringssl/crypto/pem/pem_oth.c +88 -0
  825. data/third_party/boringssl/crypto/pem/pem_pk8.c +257 -0
  826. data/third_party/boringssl/crypto/pem/pem_pkey.c +227 -0
  827. data/third_party/boringssl/crypto/pem/pem_x509.c +65 -0
  828. data/third_party/boringssl/crypto/pem/pem_xaux.c +67 -0
  829. data/third_party/boringssl/crypto/pkcs8/internal.h +83 -0
  830. data/third_party/boringssl/crypto/pkcs8/p5_pbe.c +151 -0
  831. data/third_party/boringssl/crypto/pkcs8/p5_pbev2.c +441 -0
  832. data/third_party/boringssl/crypto/pkcs8/p8_pkey.c +85 -0
  833. data/third_party/boringssl/crypto/pkcs8/pkcs8.c +1219 -0
  834. data/third_party/boringssl/crypto/poly1305/internal.h +40 -0
  835. data/third_party/boringssl/crypto/poly1305/poly1305.c +324 -0
  836. data/third_party/boringssl/crypto/poly1305/poly1305_arm.c +304 -0
  837. data/third_party/boringssl/crypto/poly1305/poly1305_vec.c +890 -0
  838. data/third_party/boringssl/crypto/rand/deterministic.c +47 -0
  839. data/third_party/boringssl/crypto/rand/internal.h +32 -0
  840. data/third_party/boringssl/crypto/rand/rand.c +244 -0
  841. data/third_party/boringssl/crypto/rand/urandom.c +221 -0
  842. data/third_party/boringssl/crypto/rand/windows.c +53 -0
  843. data/third_party/boringssl/crypto/rc4/rc4.c +98 -0
  844. data/third_party/boringssl/crypto/refcount_c11.c +67 -0
  845. data/third_party/boringssl/crypto/refcount_lock.c +53 -0
  846. data/third_party/boringssl/crypto/rsa/blinding.c +264 -0
  847. data/third_party/boringssl/crypto/rsa/internal.h +148 -0
  848. data/third_party/boringssl/crypto/rsa/padding.c +708 -0
  849. data/third_party/boringssl/crypto/rsa/rsa.c +830 -0
  850. data/third_party/boringssl/crypto/rsa/rsa_asn1.c +446 -0
  851. data/third_party/boringssl/crypto/rsa/rsa_impl.c +1139 -0
  852. data/third_party/boringssl/crypto/sha/sha1.c +337 -0
  853. data/third_party/boringssl/crypto/sha/sha256.c +327 -0
  854. data/third_party/boringssl/crypto/sha/sha512.c +607 -0
  855. data/third_party/boringssl/crypto/stack/stack.c +377 -0
  856. data/third_party/boringssl/crypto/thread.c +110 -0
  857. data/third_party/boringssl/crypto/thread_none.c +59 -0
  858. data/third_party/boringssl/crypto/thread_pthread.c +176 -0
  859. data/third_party/boringssl/crypto/thread_win.c +237 -0
  860. data/third_party/boringssl/crypto/time_support.c +206 -0
  861. data/third_party/boringssl/crypto/x509/a_digest.c +96 -0
  862. data/third_party/boringssl/crypto/x509/a_sign.c +135 -0
  863. data/third_party/boringssl/crypto/x509/a_strex.c +633 -0
  864. data/third_party/boringssl/crypto/x509/a_verify.c +127 -0
  865. data/third_party/boringssl/crypto/x509/algorithm.c +137 -0
  866. data/third_party/boringssl/crypto/x509/asn1_gen.c +818 -0
  867. data/third_party/boringssl/crypto/x509/by_dir.c +453 -0
  868. data/third_party/boringssl/crypto/x509/by_file.c +275 -0
  869. data/third_party/boringssl/crypto/x509/charmap.h +15 -0
  870. data/third_party/boringssl/crypto/x509/i2d_pr.c +83 -0
  871. data/third_party/boringssl/crypto/x509/internal.h +66 -0
  872. data/third_party/boringssl/crypto/x509/pkcs7.c +353 -0
  873. data/third_party/boringssl/crypto/x509/rsa_pss.c +385 -0
  874. data/third_party/boringssl/crypto/x509/t_crl.c +128 -0
  875. data/third_party/boringssl/crypto/x509/t_req.c +246 -0
  876. data/third_party/boringssl/crypto/x509/t_x509.c +506 -0
  877. data/third_party/boringssl/crypto/x509/t_x509a.c +111 -0
  878. data/third_party/boringssl/crypto/x509/vpm_int.h +70 -0
  879. data/third_party/boringssl/crypto/x509/x509.c +157 -0
  880. data/third_party/boringssl/crypto/x509/x509_att.c +381 -0
  881. data/third_party/boringssl/crypto/x509/x509_cmp.c +474 -0
  882. data/third_party/boringssl/crypto/x509/x509_d2.c +106 -0
  883. data/third_party/boringssl/crypto/x509/x509_def.c +98 -0
  884. data/third_party/boringssl/crypto/x509/x509_ext.c +206 -0
  885. data/third_party/boringssl/crypto/x509/x509_lu.c +690 -0
  886. data/third_party/boringssl/crypto/x509/x509_obj.c +197 -0
  887. data/third_party/boringssl/crypto/x509/x509_r2x.c +117 -0
  888. data/third_party/boringssl/crypto/x509/x509_req.c +322 -0
  889. data/third_party/boringssl/crypto/x509/x509_set.c +154 -0
  890. data/third_party/boringssl/crypto/x509/x509_trs.c +326 -0
  891. data/third_party/boringssl/crypto/x509/x509_txt.c +211 -0
  892. data/third_party/boringssl/crypto/x509/x509_v3.c +278 -0
  893. data/third_party/boringssl/crypto/x509/x509_vfy.c +2436 -0
  894. data/third_party/boringssl/crypto/x509/x509_vpm.c +647 -0
  895. data/third_party/boringssl/crypto/x509/x509cset.c +170 -0
  896. data/third_party/boringssl/crypto/x509/x509name.c +386 -0
  897. data/third_party/boringssl/crypto/x509/x509rset.c +81 -0
  898. data/third_party/boringssl/crypto/x509/x509spki.c +137 -0
  899. data/third_party/boringssl/crypto/x509/x509type.c +126 -0
  900. data/third_party/boringssl/crypto/x509/x_algor.c +151 -0
  901. data/third_party/boringssl/crypto/x509/x_all.c +501 -0
  902. data/third_party/boringssl/crypto/x509/x_attrib.c +111 -0
  903. data/third_party/boringssl/crypto/x509/x_crl.c +539 -0
  904. data/third_party/boringssl/crypto/x509/x_exten.c +75 -0
  905. data/third_party/boringssl/crypto/x509/x_info.c +98 -0
  906. data/third_party/boringssl/crypto/x509/x_name.c +534 -0
  907. data/third_party/boringssl/crypto/x509/x_pkey.c +103 -0
  908. data/third_party/boringssl/crypto/x509/x_pubkey.c +368 -0
  909. data/third_party/boringssl/crypto/x509/x_req.c +109 -0
  910. data/third_party/boringssl/crypto/x509/x_sig.c +69 -0
  911. data/third_party/boringssl/crypto/x509/x_spki.c +80 -0
  912. data/third_party/boringssl/crypto/x509/x_val.c +69 -0
  913. data/third_party/boringssl/crypto/x509/x_x509.c +289 -0
  914. data/third_party/boringssl/crypto/x509/x_x509a.c +205 -0
  915. data/third_party/boringssl/crypto/x509v3/ext_dat.h +135 -0
  916. data/third_party/boringssl/crypto/x509v3/pcy_cache.c +284 -0
  917. data/third_party/boringssl/crypto/x509v3/pcy_data.c +130 -0
  918. data/third_party/boringssl/crypto/x509v3/pcy_int.h +217 -0
  919. data/third_party/boringssl/crypto/x509v3/pcy_lib.c +164 -0
  920. data/third_party/boringssl/crypto/x509v3/pcy_map.c +130 -0
  921. data/third_party/boringssl/crypto/x509v3/pcy_node.c +188 -0
  922. data/third_party/boringssl/crypto/x509v3/pcy_tree.c +829 -0
  923. data/third_party/boringssl/crypto/x509v3/v3_akey.c +204 -0
  924. data/third_party/boringssl/crypto/x509v3/v3_akeya.c +72 -0
  925. data/third_party/boringssl/crypto/x509v3/v3_alt.c +614 -0
  926. data/third_party/boringssl/crypto/x509v3/v3_bcons.c +133 -0
  927. data/third_party/boringssl/crypto/x509v3/v3_bitst.c +141 -0
  928. data/third_party/boringssl/crypto/x509v3/v3_conf.c +462 -0
  929. data/third_party/boringssl/crypto/x509v3/v3_cpols.c +496 -0
  930. data/third_party/boringssl/crypto/x509v3/v3_crld.c +561 -0
  931. data/third_party/boringssl/crypto/x509v3/v3_enum.c +100 -0
  932. data/third_party/boringssl/crypto/x509v3/v3_extku.c +148 -0
  933. data/third_party/boringssl/crypto/x509v3/v3_genn.c +250 -0
  934. data/third_party/boringssl/crypto/x509v3/v3_ia5.c +119 -0
  935. data/third_party/boringssl/crypto/x509v3/v3_info.c +212 -0
  936. data/third_party/boringssl/crypto/x509v3/v3_int.c +91 -0
  937. data/third_party/boringssl/crypto/x509v3/v3_lib.c +362 -0
  938. data/third_party/boringssl/crypto/x509v3/v3_ncons.c +482 -0
  939. data/third_party/boringssl/crypto/x509v3/v3_pci.c +317 -0
  940. data/third_party/boringssl/crypto/x509v3/v3_pcia.c +57 -0
  941. data/third_party/boringssl/crypto/x509v3/v3_pcons.c +139 -0
  942. data/third_party/boringssl/crypto/x509v3/v3_pku.c +110 -0
  943. data/third_party/boringssl/crypto/x509v3/v3_pmaps.c +154 -0
  944. data/third_party/boringssl/crypto/x509v3/v3_prn.c +229 -0
  945. data/third_party/boringssl/crypto/x509v3/v3_purp.c +874 -0
  946. data/third_party/boringssl/crypto/x509v3/v3_skey.c +152 -0
  947. data/third_party/boringssl/crypto/x509v3/v3_sxnet.c +274 -0
  948. data/third_party/boringssl/crypto/x509v3/v3_utl.c +1327 -0
  949. data/third_party/boringssl/include/openssl/aead.h +345 -0
  950. data/third_party/boringssl/include/openssl/aes.h +158 -0
  951. data/third_party/boringssl/include/openssl/arm_arch.h +121 -0
  952. data/third_party/boringssl/include/openssl/asn1.h +1038 -0
  953. data/third_party/boringssl/include/openssl/asn1_mac.h +18 -0
  954. data/third_party/boringssl/include/openssl/asn1t.h +896 -0
  955. data/third_party/boringssl/include/openssl/base.h +412 -0
  956. data/third_party/boringssl/include/openssl/base64.h +187 -0
  957. data/third_party/boringssl/include/openssl/bio.h +926 -0
  958. data/third_party/boringssl/include/openssl/blowfish.h +93 -0
  959. data/third_party/boringssl/include/openssl/bn.h +955 -0
  960. data/third_party/boringssl/include/openssl/buf.h +133 -0
  961. data/third_party/boringssl/include/openssl/buffer.h +18 -0
  962. data/third_party/boringssl/include/openssl/bytestring.h +437 -0
  963. data/third_party/boringssl/include/openssl/cast.h +96 -0
  964. data/third_party/boringssl/include/openssl/chacha.h +37 -0
  965. data/third_party/boringssl/include/openssl/cipher.h +588 -0
  966. data/third_party/boringssl/include/openssl/cmac.h +87 -0
  967. data/third_party/boringssl/include/openssl/conf.h +181 -0
  968. data/third_party/boringssl/include/openssl/cpu.h +181 -0
  969. data/third_party/boringssl/include/openssl/crypto.h +94 -0
  970. data/third_party/boringssl/include/openssl/curve25519.h +183 -0
  971. data/third_party/boringssl/include/openssl/des.h +177 -0
  972. data/third_party/boringssl/include/openssl/dh.h +297 -0
  973. data/third_party/boringssl/include/openssl/digest.h +285 -0
  974. data/third_party/boringssl/include/openssl/dsa.h +436 -0
  975. data/third_party/boringssl/include/openssl/dtls1.h +16 -0
  976. data/third_party/boringssl/include/openssl/ec.h +406 -0
  977. data/third_party/boringssl/include/openssl/ec_key.h +337 -0
  978. data/third_party/boringssl/include/openssl/ecdh.h +102 -0
  979. data/third_party/boringssl/include/openssl/ecdsa.h +217 -0
  980. data/third_party/boringssl/include/openssl/engine.h +109 -0
  981. data/third_party/boringssl/include/openssl/err.h +488 -0
  982. data/third_party/boringssl/include/openssl/evp.h +797 -0
  983. data/third_party/boringssl/include/openssl/ex_data.h +213 -0
  984. data/third_party/boringssl/include/openssl/hkdf.h +64 -0
  985. data/third_party/boringssl/include/openssl/hmac.h +174 -0
  986. data/third_party/boringssl/include/openssl/lhash.h +192 -0
  987. data/third_party/boringssl/include/openssl/lhash_macros.h +132 -0
  988. data/third_party/boringssl/include/openssl/md4.h +106 -0
  989. data/third_party/boringssl/include/openssl/md5.h +107 -0
  990. data/third_party/boringssl/include/openssl/mem.h +150 -0
  991. data/third_party/boringssl/include/openssl/newhope.h +158 -0
  992. data/third_party/boringssl/include/openssl/nid.h +4166 -0
  993. data/third_party/boringssl/include/openssl/obj.h +226 -0
  994. data/third_party/boringssl/include/openssl/obj_mac.h +18 -0
  995. data/third_party/boringssl/include/openssl/objects.h +18 -0
  996. data/third_party/boringssl/include/openssl/opensslconf.h +60 -0
  997. data/third_party/boringssl/include/openssl/opensslv.h +18 -0
  998. data/third_party/boringssl/include/openssl/ossl_typ.h +18 -0
  999. data/third_party/boringssl/include/openssl/pem.h +517 -0
  1000. data/third_party/boringssl/include/openssl/pkcs12.h +18 -0
  1001. data/third_party/boringssl/include/openssl/pkcs7.h +16 -0
  1002. data/third_party/boringssl/include/openssl/pkcs8.h +236 -0
  1003. data/third_party/boringssl/include/openssl/poly1305.h +51 -0
  1004. data/third_party/boringssl/include/openssl/rand.h +122 -0
  1005. data/third_party/boringssl/include/openssl/rc4.h +96 -0
  1006. data/third_party/boringssl/include/openssl/ripemd.h +107 -0
  1007. data/third_party/boringssl/include/openssl/rsa.h +699 -0
  1008. data/third_party/boringssl/include/openssl/safestack.h +16 -0
  1009. data/third_party/boringssl/include/openssl/sha.h +260 -0
  1010. data/third_party/boringssl/include/openssl/srtp.h +18 -0
  1011. data/third_party/boringssl/include/openssl/ssl.h +4826 -0
  1012. data/third_party/boringssl/include/openssl/ssl3.h +434 -0
  1013. data/third_party/boringssl/include/openssl/stack.h +293 -0
  1014. data/third_party/boringssl/include/openssl/stack_macros.h +3902 -0
  1015. data/third_party/boringssl/include/openssl/thread.h +191 -0
  1016. data/third_party/boringssl/include/openssl/time_support.h +91 -0
  1017. data/third_party/boringssl/include/openssl/tls1.h +657 -0
  1018. data/third_party/boringssl/include/openssl/type_check.h +91 -0
  1019. data/third_party/boringssl/include/openssl/x509.h +1299 -0
  1020. data/third_party/boringssl/include/openssl/x509_vfy.h +618 -0
  1021. data/third_party/boringssl/include/openssl/x509v3.h +819 -0
  1022. data/third_party/boringssl/ssl/custom_extensions.c +255 -0
  1023. data/third_party/boringssl/ssl/d1_both.c +845 -0
  1024. data/third_party/boringssl/ssl/d1_lib.c +270 -0
  1025. data/third_party/boringssl/ssl/d1_pkt.c +419 -0
  1026. data/third_party/boringssl/ssl/d1_srtp.c +236 -0
  1027. data/third_party/boringssl/ssl/dtls_method.c +203 -0
  1028. data/third_party/boringssl/ssl/dtls_record.c +309 -0
  1029. data/third_party/boringssl/ssl/handshake_client.c +2002 -0
  1030. data/third_party/boringssl/ssl/handshake_server.c +1932 -0
  1031. data/third_party/boringssl/ssl/internal.h +1551 -0
  1032. data/third_party/boringssl/ssl/s3_both.c +745 -0
  1033. data/third_party/boringssl/ssl/s3_enc.c +412 -0
  1034. data/third_party/boringssl/ssl/s3_lib.c +336 -0
  1035. data/third_party/boringssl/ssl/s3_pkt.c +497 -0
  1036. data/third_party/boringssl/ssl/ssl_aead_ctx.c +329 -0
  1037. data/third_party/boringssl/ssl/ssl_asn1.c +748 -0
  1038. data/third_party/boringssl/ssl/ssl_buffer.c +311 -0
  1039. data/third_party/boringssl/ssl/ssl_cert.c +814 -0
  1040. data/third_party/boringssl/ssl/ssl_cipher.c +2062 -0
  1041. data/third_party/boringssl/ssl/ssl_ecdh.c +610 -0
  1042. data/third_party/boringssl/ssl/ssl_file.c +586 -0
  1043. data/third_party/boringssl/ssl/ssl_lib.c +3063 -0
  1044. data/third_party/boringssl/ssl/ssl_rsa.c +793 -0
  1045. data/third_party/boringssl/ssl/ssl_session.c +985 -0
  1046. data/third_party/boringssl/ssl/ssl_stat.c +509 -0
  1047. data/third_party/boringssl/ssl/t1_enc.c +547 -0
  1048. data/third_party/boringssl/ssl/t1_lib.c +3279 -0
  1049. data/third_party/boringssl/ssl/tls13_both.c +440 -0
  1050. data/third_party/boringssl/ssl/tls13_client.c +682 -0
  1051. data/third_party/boringssl/ssl/tls13_enc.c +391 -0
  1052. data/third_party/boringssl/ssl/tls13_server.c +672 -0
  1053. data/third_party/boringssl/ssl/tls_method.c +245 -0
  1054. data/third_party/boringssl/ssl/tls_record.c +461 -0
  1055. data/third_party/cares/ares_build.h +264 -0
  1056. data/third_party/cares/cares/ares.h +636 -0
  1057. data/third_party/cares/cares/ares__close_sockets.c +61 -0
  1058. data/third_party/cares/cares/ares__get_hostent.c +261 -0
  1059. data/third_party/cares/cares/ares__read_line.c +73 -0
  1060. data/third_party/cares/cares/ares__timeval.c +111 -0
  1061. data/third_party/cares/cares/ares_cancel.c +63 -0
  1062. data/third_party/cares/cares/ares_create_query.c +202 -0
  1063. data/third_party/cares/cares/ares_data.c +221 -0
  1064. data/third_party/cares/cares/ares_data.h +72 -0
  1065. data/third_party/cares/cares/ares_destroy.c +108 -0
  1066. data/third_party/cares/cares/ares_dns.h +103 -0
  1067. data/third_party/cares/cares/ares_expand_name.c +205 -0
  1068. data/third_party/cares/cares/ares_expand_string.c +70 -0
  1069. data/third_party/cares/cares/ares_fds.c +59 -0
  1070. data/third_party/cares/cares/ares_free_hostent.c +41 -0
  1071. data/third_party/cares/cares/ares_free_string.c +25 -0
  1072. data/third_party/cares/cares/ares_getenv.c +30 -0
  1073. data/third_party/cares/cares/ares_getenv.h +26 -0
  1074. data/third_party/cares/cares/ares_gethostbyaddr.c +294 -0
  1075. data/third_party/cares/cares/ares_gethostbyname.c +518 -0
  1076. data/third_party/cares/cares/ares_getnameinfo.c +422 -0
  1077. data/third_party/cares/cares/ares_getopt.c +122 -0
  1078. data/third_party/cares/cares/ares_getopt.h +53 -0
  1079. data/third_party/cares/cares/ares_getsock.c +66 -0
  1080. data/third_party/cares/cares/ares_inet_net_pton.h +25 -0
  1081. data/third_party/cares/cares/ares_init.c +2146 -0
  1082. data/third_party/cares/cares/ares_iphlpapi.h +221 -0
  1083. data/third_party/cares/cares/ares_ipv6.h +78 -0
  1084. data/third_party/cares/cares/ares_library_init.c +167 -0
  1085. data/third_party/cares/cares/ares_library_init.h +42 -0
  1086. data/third_party/cares/cares/ares_llist.c +63 -0
  1087. data/third_party/cares/cares/ares_llist.h +39 -0
  1088. data/third_party/cares/cares/ares_mkquery.c +24 -0
  1089. data/third_party/cares/cares/ares_nowarn.c +260 -0
  1090. data/third_party/cares/cares/ares_nowarn.h +61 -0
  1091. data/third_party/cares/cares/ares_options.c +402 -0
  1092. data/third_party/cares/cares/ares_parse_a_reply.c +264 -0
  1093. data/third_party/cares/cares/ares_parse_aaaa_reply.c +264 -0
  1094. data/third_party/cares/cares/ares_parse_mx_reply.c +170 -0
  1095. data/third_party/cares/cares/ares_parse_naptr_reply.c +188 -0
  1096. data/third_party/cares/cares/ares_parse_ns_reply.c +183 -0
  1097. data/third_party/cares/cares/ares_parse_ptr_reply.c +219 -0
  1098. data/third_party/cares/cares/ares_parse_soa_reply.c +133 -0
  1099. data/third_party/cares/cares/ares_parse_srv_reply.c +179 -0
  1100. data/third_party/cares/cares/ares_parse_txt_reply.c +220 -0
  1101. data/third_party/cares/cares/ares_platform.c +11035 -0
  1102. data/third_party/cares/cares/ares_platform.h +43 -0
  1103. data/third_party/cares/cares/ares_private.h +363 -0
  1104. data/third_party/cares/cares/ares_process.c +1359 -0
  1105. data/third_party/cares/cares/ares_query.c +186 -0
  1106. data/third_party/cares/cares/ares_rules.h +125 -0
  1107. data/third_party/cares/cares/ares_search.c +316 -0
  1108. data/third_party/cares/cares/ares_send.c +131 -0
  1109. data/third_party/cares/cares/ares_setup.h +217 -0
  1110. data/third_party/cares/cares/ares_strcasecmp.c +66 -0
  1111. data/third_party/cares/cares/ares_strcasecmp.h +30 -0
  1112. data/third_party/cares/cares/ares_strdup.c +49 -0
  1113. data/third_party/cares/cares/ares_strdup.h +24 -0
  1114. data/third_party/cares/cares/ares_strerror.c +56 -0
  1115. data/third_party/cares/cares/ares_timeout.c +88 -0
  1116. data/third_party/cares/cares/ares_version.c +11 -0
  1117. data/third_party/cares/cares/ares_version.h +24 -0
  1118. data/third_party/cares/cares/ares_writev.c +79 -0
  1119. data/third_party/cares/cares/bitncmp.c +59 -0
  1120. data/third_party/cares/cares/bitncmp.h +26 -0
  1121. data/third_party/cares/cares/config-win32.h +377 -0
  1122. data/third_party/cares/cares/inet_net_pton.c +450 -0
  1123. data/third_party/cares/cares/inet_ntop.c +208 -0
  1124. data/third_party/cares/cares/setup_once.h +554 -0
  1125. data/third_party/cares/cares/windows_port.c +22 -0
  1126. data/third_party/cares/config_darwin/ares_config.h +523 -0
  1127. data/third_party/cares/config_linux/ares_config.h +524 -0
  1128. data/third_party/nanopb/pb.h +579 -0
  1129. data/third_party/nanopb/pb_common.c +97 -0
  1130. data/third_party/nanopb/pb_common.h +42 -0
  1131. data/third_party/nanopb/pb_decode.c +1347 -0
  1132. data/third_party/nanopb/pb_decode.h +149 -0
  1133. data/third_party/nanopb/pb_encode.c +696 -0
  1134. data/third_party/nanopb/pb_encode.h +154 -0
  1135. data/third_party/zlib/adler32.c +179 -0
  1136. data/third_party/zlib/compress.c +80 -0
  1137. data/third_party/zlib/crc32.c +425 -0
  1138. data/third_party/zlib/crc32.h +441 -0
  1139. data/third_party/zlib/deflate.c +1967 -0
  1140. data/third_party/zlib/deflate.h +346 -0
  1141. data/third_party/zlib/gzclose.c +25 -0
  1142. data/third_party/zlib/gzguts.h +209 -0
  1143. data/third_party/zlib/gzlib.c +634 -0
  1144. data/third_party/zlib/gzread.c +594 -0
  1145. data/third_party/zlib/gzwrite.c +577 -0
  1146. data/third_party/zlib/infback.c +640 -0
  1147. data/third_party/zlib/inffast.c +340 -0
  1148. data/third_party/zlib/inffast.h +11 -0
  1149. data/third_party/zlib/inffixed.h +94 -0
  1150. data/third_party/zlib/inflate.c +1512 -0
  1151. data/third_party/zlib/inflate.h +122 -0
  1152. data/third_party/zlib/inftrees.c +306 -0
  1153. data/third_party/zlib/inftrees.h +62 -0
  1154. data/third_party/zlib/trees.c +1226 -0
  1155. data/third_party/zlib/trees.h +128 -0
  1156. data/third_party/zlib/uncompr.c +59 -0
  1157. data/third_party/zlib/zconf.h +511 -0
  1158. data/third_party/zlib/zlib.h +1768 -0
  1159. data/third_party/zlib/zutil.c +324 -0
  1160. data/third_party/zlib/zutil.h +253 -0
  1161. metadata +1397 -0
@@ -0,0 +1,152 @@
1
+ /* v3_skey.c */
2
+ /*
3
+ * Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL project
4
+ * 1999.
5
+ */
6
+ /* ====================================================================
7
+ * Copyright (c) 1999 The OpenSSL Project. All rights reserved.
8
+ *
9
+ * Redistribution and use in source and binary forms, with or without
10
+ * modification, are permitted provided that the following conditions
11
+ * are met:
12
+ *
13
+ * 1. Redistributions of source code must retain the above copyright
14
+ * notice, this list of conditions and the following disclaimer.
15
+ *
16
+ * 2. Redistributions in binary form must reproduce the above copyright
17
+ * notice, this list of conditions and the following disclaimer in
18
+ * the documentation and/or other materials provided with the
19
+ * distribution.
20
+ *
21
+ * 3. All advertising materials mentioning features or use of this
22
+ * software must display the following acknowledgment:
23
+ * "This product includes software developed by the OpenSSL Project
24
+ * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)"
25
+ *
26
+ * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
27
+ * endorse or promote products derived from this software without
28
+ * prior written permission. For written permission, please contact
29
+ * licensing@OpenSSL.org.
30
+ *
31
+ * 5. Products derived from this software may not be called "OpenSSL"
32
+ * nor may "OpenSSL" appear in their names without prior written
33
+ * permission of the OpenSSL Project.
34
+ *
35
+ * 6. Redistributions of any form whatsoever must retain the following
36
+ * acknowledgment:
37
+ * "This product includes software developed by the OpenSSL Project
38
+ * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)"
39
+ *
40
+ * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
41
+ * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
42
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
43
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
44
+ * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
45
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
46
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
47
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
48
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
49
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
50
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
51
+ * OF THE POSSIBILITY OF SUCH DAMAGE.
52
+ * ====================================================================
53
+ *
54
+ * This product includes cryptographic software written by Eric Young
55
+ * (eay@cryptsoft.com). This product includes software written by Tim
56
+ * Hudson (tjh@cryptsoft.com). */
57
+
58
+ #include <stdio.h>
59
+ #include <string.h>
60
+
61
+ #include <openssl/digest.h>
62
+ #include <openssl/err.h>
63
+ #include <openssl/obj.h>
64
+ #include <openssl/x509v3.h>
65
+
66
+ static ASN1_OCTET_STRING *s2i_skey_id(X509V3_EXT_METHOD *method,
67
+ X509V3_CTX *ctx, char *str);
68
+ const X509V3_EXT_METHOD v3_skey_id = {
69
+ NID_subject_key_identifier, 0, ASN1_ITEM_ref(ASN1_OCTET_STRING),
70
+ 0, 0, 0, 0,
71
+ (X509V3_EXT_I2S)i2s_ASN1_OCTET_STRING,
72
+ (X509V3_EXT_S2I)s2i_skey_id,
73
+ 0, 0, 0, 0,
74
+ NULL
75
+ };
76
+
77
+ char *i2s_ASN1_OCTET_STRING(X509V3_EXT_METHOD *method, ASN1_OCTET_STRING *oct)
78
+ {
79
+ return hex_to_string(oct->data, oct->length);
80
+ }
81
+
82
+ ASN1_OCTET_STRING *s2i_ASN1_OCTET_STRING(X509V3_EXT_METHOD *method,
83
+ X509V3_CTX *ctx, char *str)
84
+ {
85
+ ASN1_OCTET_STRING *oct;
86
+ long length;
87
+
88
+ if (!(oct = M_ASN1_OCTET_STRING_new())) {
89
+ OPENSSL_PUT_ERROR(X509V3, ERR_R_MALLOC_FAILURE);
90
+ return NULL;
91
+ }
92
+
93
+ if (!(oct->data = string_to_hex(str, &length))) {
94
+ M_ASN1_OCTET_STRING_free(oct);
95
+ return NULL;
96
+ }
97
+
98
+ oct->length = length;
99
+
100
+ return oct;
101
+
102
+ }
103
+
104
+ static ASN1_OCTET_STRING *s2i_skey_id(X509V3_EXT_METHOD *method,
105
+ X509V3_CTX *ctx, char *str)
106
+ {
107
+ ASN1_OCTET_STRING *oct;
108
+ ASN1_BIT_STRING *pk;
109
+ unsigned char pkey_dig[EVP_MAX_MD_SIZE];
110
+ unsigned int diglen;
111
+
112
+ if (strcmp(str, "hash"))
113
+ return s2i_ASN1_OCTET_STRING(method, ctx, str);
114
+
115
+ if (!(oct = M_ASN1_OCTET_STRING_new())) {
116
+ OPENSSL_PUT_ERROR(X509V3, ERR_R_MALLOC_FAILURE);
117
+ return NULL;
118
+ }
119
+
120
+ if (ctx && (ctx->flags == CTX_TEST))
121
+ return oct;
122
+
123
+ if (!ctx || (!ctx->subject_req && !ctx->subject_cert)) {
124
+ OPENSSL_PUT_ERROR(X509V3, X509V3_R_NO_PUBLIC_KEY);
125
+ goto err;
126
+ }
127
+
128
+ if (ctx->subject_req)
129
+ pk = ctx->subject_req->req_info->pubkey->public_key;
130
+ else
131
+ pk = ctx->subject_cert->cert_info->key->public_key;
132
+
133
+ if (!pk) {
134
+ OPENSSL_PUT_ERROR(X509V3, X509V3_R_NO_PUBLIC_KEY);
135
+ goto err;
136
+ }
137
+
138
+ if (!EVP_Digest
139
+ (pk->data, pk->length, pkey_dig, &diglen, EVP_sha1(), NULL))
140
+ goto err;
141
+
142
+ if (!M_ASN1_OCTET_STRING_set(oct, pkey_dig, diglen)) {
143
+ OPENSSL_PUT_ERROR(X509V3, ERR_R_MALLOC_FAILURE);
144
+ goto err;
145
+ }
146
+
147
+ return oct;
148
+
149
+ err:
150
+ M_ASN1_OCTET_STRING_free(oct);
151
+ return NULL;
152
+ }
@@ -0,0 +1,274 @@
1
+ /* v3_sxnet.c */
2
+ /*
3
+ * Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL project
4
+ * 1999.
5
+ */
6
+ /* ====================================================================
7
+ * Copyright (c) 1999 The OpenSSL Project. All rights reserved.
8
+ *
9
+ * Redistribution and use in source and binary forms, with or without
10
+ * modification, are permitted provided that the following conditions
11
+ * are met:
12
+ *
13
+ * 1. Redistributions of source code must retain the above copyright
14
+ * notice, this list of conditions and the following disclaimer.
15
+ *
16
+ * 2. Redistributions in binary form must reproduce the above copyright
17
+ * notice, this list of conditions and the following disclaimer in
18
+ * the documentation and/or other materials provided with the
19
+ * distribution.
20
+ *
21
+ * 3. All advertising materials mentioning features or use of this
22
+ * software must display the following acknowledgment:
23
+ * "This product includes software developed by the OpenSSL Project
24
+ * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)"
25
+ *
26
+ * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
27
+ * endorse or promote products derived from this software without
28
+ * prior written permission. For written permission, please contact
29
+ * licensing@OpenSSL.org.
30
+ *
31
+ * 5. Products derived from this software may not be called "OpenSSL"
32
+ * nor may "OpenSSL" appear in their names without prior written
33
+ * permission of the OpenSSL Project.
34
+ *
35
+ * 6. Redistributions of any form whatsoever must retain the following
36
+ * acknowledgment:
37
+ * "This product includes software developed by the OpenSSL Project
38
+ * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)"
39
+ *
40
+ * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
41
+ * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
42
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
43
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
44
+ * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
45
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
46
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
47
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
48
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
49
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
50
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
51
+ * OF THE POSSIBILITY OF SUCH DAMAGE.
52
+ * ====================================================================
53
+ *
54
+ * This product includes cryptographic software written by Eric Young
55
+ * (eay@cryptsoft.com). This product includes software written by Tim
56
+ * Hudson (tjh@cryptsoft.com).
57
+ *
58
+ */
59
+
60
+ #include <stdio.h>
61
+ #include <string.h>
62
+
63
+ #include <openssl/asn1.h>
64
+ #include <openssl/asn1t.h>
65
+ #include <openssl/conf.h>
66
+ #include <openssl/err.h>
67
+ #include <openssl/mem.h>
68
+ #include <openssl/obj.h>
69
+ #include <openssl/x509v3.h>
70
+
71
+ /* Support for Thawte strong extranet extension */
72
+
73
+ #define SXNET_TEST
74
+
75
+ static int sxnet_i2r(X509V3_EXT_METHOD *method, SXNET *sx, BIO *out,
76
+ int indent);
77
+ #ifdef SXNET_TEST
78
+ static SXNET *sxnet_v2i(X509V3_EXT_METHOD *method, X509V3_CTX *ctx,
79
+ STACK_OF(CONF_VALUE) *nval);
80
+ #endif
81
+ const X509V3_EXT_METHOD v3_sxnet = {
82
+ NID_sxnet, X509V3_EXT_MULTILINE, ASN1_ITEM_ref(SXNET),
83
+ 0, 0, 0, 0,
84
+ 0, 0,
85
+ 0,
86
+ #ifdef SXNET_TEST
87
+ (X509V3_EXT_V2I)sxnet_v2i,
88
+ #else
89
+ 0,
90
+ #endif
91
+ (X509V3_EXT_I2R)sxnet_i2r,
92
+ 0,
93
+ NULL
94
+ };
95
+
96
+ ASN1_SEQUENCE(SXNETID) = {
97
+ ASN1_SIMPLE(SXNETID, zone, ASN1_INTEGER),
98
+ ASN1_SIMPLE(SXNETID, user, ASN1_OCTET_STRING)
99
+ } ASN1_SEQUENCE_END(SXNETID)
100
+
101
+ IMPLEMENT_ASN1_FUNCTIONS(SXNETID)
102
+
103
+ ASN1_SEQUENCE(SXNET) = {
104
+ ASN1_SIMPLE(SXNET, version, ASN1_INTEGER),
105
+ ASN1_SEQUENCE_OF(SXNET, ids, SXNETID)
106
+ } ASN1_SEQUENCE_END(SXNET)
107
+
108
+ IMPLEMENT_ASN1_FUNCTIONS(SXNET)
109
+
110
+ static int sxnet_i2r(X509V3_EXT_METHOD *method, SXNET *sx, BIO *out,
111
+ int indent)
112
+ {
113
+ long v;
114
+ char *tmp;
115
+ SXNETID *id;
116
+ size_t i;
117
+ v = ASN1_INTEGER_get(sx->version);
118
+ BIO_printf(out, "%*sVersion: %ld (0x%lX)", indent, "", v + 1, v);
119
+ for (i = 0; i < sk_SXNETID_num(sx->ids); i++) {
120
+ id = sk_SXNETID_value(sx->ids, i);
121
+ tmp = i2s_ASN1_INTEGER(NULL, id->zone);
122
+ BIO_printf(out, "\n%*sZone: %s, User: ", indent, "", tmp);
123
+ OPENSSL_free(tmp);
124
+ M_ASN1_OCTET_STRING_print(out, id->user);
125
+ }
126
+ return 1;
127
+ }
128
+
129
+ #ifdef SXNET_TEST
130
+
131
+ /*
132
+ * NBB: this is used for testing only. It should *not* be used for anything
133
+ * else because it will just take static IDs from the configuration file and
134
+ * they should really be separate values for each user.
135
+ */
136
+
137
+ static SXNET *sxnet_v2i(X509V3_EXT_METHOD *method, X509V3_CTX *ctx,
138
+ STACK_OF(CONF_VALUE) *nval)
139
+ {
140
+ CONF_VALUE *cnf;
141
+ SXNET *sx = NULL;
142
+ size_t i;
143
+ for (i = 0; i < sk_CONF_VALUE_num(nval); i++) {
144
+ cnf = sk_CONF_VALUE_value(nval, i);
145
+ if (!SXNET_add_id_asc(&sx, cnf->name, cnf->value, -1))
146
+ return NULL;
147
+ }
148
+ return sx;
149
+ }
150
+
151
+ #endif
152
+
153
+ /* Strong Extranet utility functions */
154
+
155
+ /* Add an id given the zone as an ASCII number */
156
+
157
+ int SXNET_add_id_asc(SXNET **psx, char *zone, char *user, int userlen)
158
+ {
159
+ ASN1_INTEGER *izone = NULL;
160
+ if (!(izone = s2i_ASN1_INTEGER(NULL, zone))) {
161
+ OPENSSL_PUT_ERROR(X509V3, X509V3_R_ERROR_CONVERTING_ZONE);
162
+ return 0;
163
+ }
164
+ return SXNET_add_id_INTEGER(psx, izone, user, userlen);
165
+ }
166
+
167
+ /* Add an id given the zone as an unsigned long */
168
+
169
+ int SXNET_add_id_ulong(SXNET **psx, unsigned long lzone, char *user,
170
+ int userlen)
171
+ {
172
+ ASN1_INTEGER *izone = NULL;
173
+ if (!(izone = M_ASN1_INTEGER_new()) || !ASN1_INTEGER_set(izone, lzone)) {
174
+ OPENSSL_PUT_ERROR(X509V3, ERR_R_MALLOC_FAILURE);
175
+ M_ASN1_INTEGER_free(izone);
176
+ return 0;
177
+ }
178
+ return SXNET_add_id_INTEGER(psx, izone, user, userlen);
179
+
180
+ }
181
+
182
+ /*
183
+ * Add an id given the zone as an ASN1_INTEGER. Note this version uses the
184
+ * passed integer and doesn't make a copy so don't free it up afterwards.
185
+ */
186
+
187
+ int SXNET_add_id_INTEGER(SXNET **psx, ASN1_INTEGER *zone, char *user,
188
+ int userlen)
189
+ {
190
+ SXNET *sx = NULL;
191
+ SXNETID *id = NULL;
192
+ if (!psx || !zone || !user) {
193
+ OPENSSL_PUT_ERROR(X509V3, X509V3_R_INVALID_NULL_ARGUMENT);
194
+ return 0;
195
+ }
196
+ if (userlen == -1)
197
+ userlen = strlen(user);
198
+ if (userlen > 64) {
199
+ OPENSSL_PUT_ERROR(X509V3, X509V3_R_USER_TOO_LONG);
200
+ return 0;
201
+ }
202
+ if (!*psx) {
203
+ if (!(sx = SXNET_new()))
204
+ goto err;
205
+ if (!ASN1_INTEGER_set(sx->version, 0))
206
+ goto err;
207
+ *psx = sx;
208
+ } else
209
+ sx = *psx;
210
+ if (SXNET_get_id_INTEGER(sx, zone)) {
211
+ OPENSSL_PUT_ERROR(X509V3, X509V3_R_DUPLICATE_ZONE_ID);
212
+ return 0;
213
+ }
214
+
215
+ if (!(id = SXNETID_new()))
216
+ goto err;
217
+ if (userlen == -1)
218
+ userlen = strlen(user);
219
+
220
+ if (!M_ASN1_OCTET_STRING_set(id->user, user, userlen))
221
+ goto err;
222
+ if (!sk_SXNETID_push(sx->ids, id))
223
+ goto err;
224
+ id->zone = zone;
225
+ return 1;
226
+
227
+ err:
228
+ OPENSSL_PUT_ERROR(X509V3, ERR_R_MALLOC_FAILURE);
229
+ SXNETID_free(id);
230
+ SXNET_free(sx);
231
+ *psx = NULL;
232
+ return 0;
233
+ }
234
+
235
+ ASN1_OCTET_STRING *SXNET_get_id_asc(SXNET *sx, char *zone)
236
+ {
237
+ ASN1_INTEGER *izone = NULL;
238
+ ASN1_OCTET_STRING *oct;
239
+ if (!(izone = s2i_ASN1_INTEGER(NULL, zone))) {
240
+ OPENSSL_PUT_ERROR(X509V3, X509V3_R_ERROR_CONVERTING_ZONE);
241
+ return NULL;
242
+ }
243
+ oct = SXNET_get_id_INTEGER(sx, izone);
244
+ M_ASN1_INTEGER_free(izone);
245
+ return oct;
246
+ }
247
+
248
+ ASN1_OCTET_STRING *SXNET_get_id_ulong(SXNET *sx, unsigned long lzone)
249
+ {
250
+ ASN1_INTEGER *izone = NULL;
251
+ ASN1_OCTET_STRING *oct;
252
+ if (!(izone = M_ASN1_INTEGER_new()) || !ASN1_INTEGER_set(izone, lzone)) {
253
+ OPENSSL_PUT_ERROR(X509V3, ERR_R_MALLOC_FAILURE);
254
+ M_ASN1_INTEGER_free(izone);
255
+ return NULL;
256
+ }
257
+ oct = SXNET_get_id_INTEGER(sx, izone);
258
+ M_ASN1_INTEGER_free(izone);
259
+ return oct;
260
+ }
261
+
262
+ ASN1_OCTET_STRING *SXNET_get_id_INTEGER(SXNET *sx, ASN1_INTEGER *zone)
263
+ {
264
+ SXNETID *id;
265
+ size_t i;
266
+ for (i = 0; i < sk_SXNETID_num(sx->ids); i++) {
267
+ id = sk_SXNETID_value(sx->ids, i);
268
+ if (!M_ASN1_INTEGER_cmp(id->zone, zone))
269
+ return id->user;
270
+ }
271
+ return NULL;
272
+ }
273
+
274
+ IMPLEMENT_ASN1_SET_OF(SXNETID)
@@ -0,0 +1,1327 @@
1
+ /* v3_utl.c */
2
+ /*
3
+ * Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL
4
+ * project.
5
+ */
6
+ /* ====================================================================
7
+ * Copyright (c) 1999-2003 The OpenSSL Project. All rights reserved.
8
+ *
9
+ * Redistribution and use in source and binary forms, with or without
10
+ * modification, are permitted provided that the following conditions
11
+ * are met:
12
+ *
13
+ * 1. Redistributions of source code must retain the above copyright
14
+ * notice, this list of conditions and the following disclaimer.
15
+ *
16
+ * 2. Redistributions in binary form must reproduce the above copyright
17
+ * notice, this list of conditions and the following disclaimer in
18
+ * the documentation and/or other materials provided with the
19
+ * distribution.
20
+ *
21
+ * 3. All advertising materials mentioning features or use of this
22
+ * software must display the following acknowledgment:
23
+ * "This product includes software developed by the OpenSSL Project
24
+ * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)"
25
+ *
26
+ * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
27
+ * endorse or promote products derived from this software without
28
+ * prior written permission. For written permission, please contact
29
+ * licensing@OpenSSL.org.
30
+ *
31
+ * 5. Products derived from this software may not be called "OpenSSL"
32
+ * nor may "OpenSSL" appear in their names without prior written
33
+ * permission of the OpenSSL Project.
34
+ *
35
+ * 6. Redistributions of any form whatsoever must retain the following
36
+ * acknowledgment:
37
+ * "This product includes software developed by the OpenSSL Project
38
+ * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)"
39
+ *
40
+ * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
41
+ * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
42
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
43
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
44
+ * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
45
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
46
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
47
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
48
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
49
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
50
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
51
+ * OF THE POSSIBILITY OF SUCH DAMAGE.
52
+ * ====================================================================
53
+ *
54
+ * This product includes cryptographic software written by Eric Young
55
+ * (eay@cryptsoft.com). This product includes software written by Tim
56
+ * Hudson (tjh@cryptsoft.com).
57
+ *
58
+ */
59
+ /* X509 v3 extension utilities */
60
+
61
+ #include <ctype.h>
62
+ #include <stdio.h>
63
+ #include <string.h>
64
+
65
+ #include <openssl/bn.h>
66
+ #include <openssl/buf.h>
67
+ #include <openssl/conf.h>
68
+ #include <openssl/err.h>
69
+ #include <openssl/mem.h>
70
+ #include <openssl/obj.h>
71
+ #include <openssl/x509v3.h>
72
+
73
+ #include "../conf/internal.h"
74
+
75
+ static char *strip_spaces(char *name);
76
+ static int sk_strcmp(const OPENSSL_STRING *a, const OPENSSL_STRING *b);
77
+ static STACK_OF(OPENSSL_STRING) *get_email(X509_NAME *name,
78
+ GENERAL_NAMES *gens);
79
+ static void str_free(OPENSSL_STRING str);
80
+ static int append_ia5(STACK_OF(OPENSSL_STRING) **sk, ASN1_IA5STRING *email);
81
+
82
+ static int ipv4_from_asc(unsigned char *v4, const char *in);
83
+ static int ipv6_from_asc(unsigned char *v6, const char *in);
84
+ static int ipv6_cb(const char *elem, int len, void *usr);
85
+ static int ipv6_hex(unsigned char *out, const char *in, int inlen);
86
+
87
+ /* Add a CONF_VALUE name value pair to stack */
88
+
89
+ int X509V3_add_value(const char *name, const char *value,
90
+ STACK_OF(CONF_VALUE) **extlist)
91
+ {
92
+ CONF_VALUE *vtmp = NULL;
93
+ char *tname = NULL, *tvalue = NULL;
94
+ if (name && !(tname = BUF_strdup(name)))
95
+ goto err;
96
+ if (value && !(tvalue = BUF_strdup(value)))
97
+ goto err;
98
+ if (!(vtmp = CONF_VALUE_new()))
99
+ goto err;
100
+ if (!*extlist && !(*extlist = sk_CONF_VALUE_new_null()))
101
+ goto err;
102
+ vtmp->section = NULL;
103
+ vtmp->name = tname;
104
+ vtmp->value = tvalue;
105
+ if (!sk_CONF_VALUE_push(*extlist, vtmp))
106
+ goto err;
107
+ return 1;
108
+ err:
109
+ OPENSSL_PUT_ERROR(X509V3, ERR_R_MALLOC_FAILURE);
110
+ if (vtmp)
111
+ OPENSSL_free(vtmp);
112
+ if (tname)
113
+ OPENSSL_free(tname);
114
+ if (tvalue)
115
+ OPENSSL_free(tvalue);
116
+ return 0;
117
+ }
118
+
119
+ int X509V3_add_value_uchar(const char *name, const unsigned char *value,
120
+ STACK_OF(CONF_VALUE) **extlist)
121
+ {
122
+ return X509V3_add_value(name, (const char *)value, extlist);
123
+ }
124
+
125
+ /* Free function for STACK_OF(CONF_VALUE) */
126
+
127
+ void X509V3_conf_free(CONF_VALUE *conf)
128
+ {
129
+ if (!conf)
130
+ return;
131
+ if (conf->name)
132
+ OPENSSL_free(conf->name);
133
+ if (conf->value)
134
+ OPENSSL_free(conf->value);
135
+ if (conf->section)
136
+ OPENSSL_free(conf->section);
137
+ OPENSSL_free(conf);
138
+ }
139
+
140
+ int X509V3_add_value_bool(const char *name, int asn1_bool,
141
+ STACK_OF(CONF_VALUE) **extlist)
142
+ {
143
+ if (asn1_bool)
144
+ return X509V3_add_value(name, "TRUE", extlist);
145
+ return X509V3_add_value(name, "FALSE", extlist);
146
+ }
147
+
148
+ int X509V3_add_value_bool_nf(char *name, int asn1_bool,
149
+ STACK_OF(CONF_VALUE) **extlist)
150
+ {
151
+ if (asn1_bool)
152
+ return X509V3_add_value(name, "TRUE", extlist);
153
+ return 1;
154
+ }
155
+
156
+ char *i2s_ASN1_ENUMERATED(X509V3_EXT_METHOD *method, ASN1_ENUMERATED *a)
157
+ {
158
+ BIGNUM *bntmp = NULL;
159
+ char *strtmp = NULL;
160
+ if (!a)
161
+ return NULL;
162
+ if (!(bntmp = ASN1_ENUMERATED_to_BN(a, NULL)) ||
163
+ !(strtmp = BN_bn2dec(bntmp)))
164
+ OPENSSL_PUT_ERROR(X509V3, ERR_R_MALLOC_FAILURE);
165
+ BN_free(bntmp);
166
+ return strtmp;
167
+ }
168
+
169
+ char *i2s_ASN1_INTEGER(X509V3_EXT_METHOD *method, ASN1_INTEGER *a)
170
+ {
171
+ BIGNUM *bntmp = NULL;
172
+ char *strtmp = NULL;
173
+ if (!a)
174
+ return NULL;
175
+ if (!(bntmp = ASN1_INTEGER_to_BN(a, NULL)) ||
176
+ !(strtmp = BN_bn2dec(bntmp)))
177
+ OPENSSL_PUT_ERROR(X509V3, ERR_R_MALLOC_FAILURE);
178
+ BN_free(bntmp);
179
+ return strtmp;
180
+ }
181
+
182
+ ASN1_INTEGER *s2i_ASN1_INTEGER(X509V3_EXT_METHOD *method, char *value)
183
+ {
184
+ BIGNUM *bn = NULL;
185
+ ASN1_INTEGER *aint;
186
+ int isneg, ishex;
187
+ int ret;
188
+ if (!value) {
189
+ OPENSSL_PUT_ERROR(X509V3, X509V3_R_INVALID_NULL_VALUE);
190
+ return 0;
191
+ }
192
+ bn = BN_new();
193
+ if (value[0] == '-') {
194
+ value++;
195
+ isneg = 1;
196
+ } else
197
+ isneg = 0;
198
+
199
+ if (value[0] == '0' && ((value[1] == 'x') || (value[1] == 'X'))) {
200
+ value += 2;
201
+ ishex = 1;
202
+ } else
203
+ ishex = 0;
204
+
205
+ if (ishex)
206
+ ret = BN_hex2bn(&bn, value);
207
+ else
208
+ ret = BN_dec2bn(&bn, value);
209
+
210
+ if (!ret || value[ret]) {
211
+ BN_free(bn);
212
+ OPENSSL_PUT_ERROR(X509V3, X509V3_R_BN_DEC2BN_ERROR);
213
+ return 0;
214
+ }
215
+
216
+ if (isneg && BN_is_zero(bn))
217
+ isneg = 0;
218
+
219
+ aint = BN_to_ASN1_INTEGER(bn, NULL);
220
+ BN_free(bn);
221
+ if (!aint) {
222
+ OPENSSL_PUT_ERROR(X509V3, X509V3_R_BN_TO_ASN1_INTEGER_ERROR);
223
+ return 0;
224
+ }
225
+ if (isneg)
226
+ aint->type |= V_ASN1_NEG;
227
+ return aint;
228
+ }
229
+
230
+ int X509V3_add_value_int(const char *name, ASN1_INTEGER *aint,
231
+ STACK_OF(CONF_VALUE) **extlist)
232
+ {
233
+ char *strtmp;
234
+ int ret;
235
+ if (!aint)
236
+ return 1;
237
+ if (!(strtmp = i2s_ASN1_INTEGER(NULL, aint)))
238
+ return 0;
239
+ ret = X509V3_add_value(name, strtmp, extlist);
240
+ OPENSSL_free(strtmp);
241
+ return ret;
242
+ }
243
+
244
+ int X509V3_get_value_bool(CONF_VALUE *value, int *asn1_bool)
245
+ {
246
+ char *btmp;
247
+ if (!(btmp = value->value))
248
+ goto err;
249
+ if (!strcmp(btmp, "TRUE") || !strcmp(btmp, "true")
250
+ || !strcmp(btmp, "Y") || !strcmp(btmp, "y")
251
+ || !strcmp(btmp, "YES") || !strcmp(btmp, "yes")) {
252
+ *asn1_bool = 0xff;
253
+ return 1;
254
+ } else if (!strcmp(btmp, "FALSE") || !strcmp(btmp, "false")
255
+ || !strcmp(btmp, "N") || !strcmp(btmp, "n")
256
+ || !strcmp(btmp, "NO") || !strcmp(btmp, "no")) {
257
+ *asn1_bool = 0;
258
+ return 1;
259
+ }
260
+ err:
261
+ OPENSSL_PUT_ERROR(X509V3, X509V3_R_INVALID_BOOLEAN_STRING);
262
+ X509V3_conf_err(value);
263
+ return 0;
264
+ }
265
+
266
+ int X509V3_get_value_int(CONF_VALUE *value, ASN1_INTEGER **aint)
267
+ {
268
+ ASN1_INTEGER *itmp;
269
+ if (!(itmp = s2i_ASN1_INTEGER(NULL, value->value))) {
270
+ X509V3_conf_err(value);
271
+ return 0;
272
+ }
273
+ *aint = itmp;
274
+ return 1;
275
+ }
276
+
277
+ #define HDR_NAME 1
278
+ #define HDR_VALUE 2
279
+
280
+ /*
281
+ * #define DEBUG
282
+ */
283
+
284
+ STACK_OF(CONF_VALUE) *X509V3_parse_list(const char *line)
285
+ {
286
+ char *p, *q, c;
287
+ char *ntmp, *vtmp;
288
+ STACK_OF(CONF_VALUE) *values = NULL;
289
+ char *linebuf;
290
+ int state;
291
+ /* We are going to modify the line so copy it first */
292
+ linebuf = BUF_strdup(line);
293
+ if (linebuf == NULL) {
294
+ OPENSSL_PUT_ERROR(X509V3, ERR_R_MALLOC_FAILURE);
295
+ goto err;
296
+ }
297
+ state = HDR_NAME;
298
+ ntmp = NULL;
299
+ /* Go through all characters */
300
+ for (p = linebuf, q = linebuf; (c = *p) && (c != '\r') && (c != '\n');
301
+ p++) {
302
+
303
+ switch (state) {
304
+ case HDR_NAME:
305
+ if (c == ':') {
306
+ state = HDR_VALUE;
307
+ *p = 0;
308
+ ntmp = strip_spaces(q);
309
+ if (!ntmp) {
310
+ OPENSSL_PUT_ERROR(X509V3, X509V3_R_INVALID_NULL_NAME);
311
+ goto err;
312
+ }
313
+ q = p + 1;
314
+ } else if (c == ',') {
315
+ *p = 0;
316
+ ntmp = strip_spaces(q);
317
+ q = p + 1;
318
+ #if 0
319
+ printf("%s\n", ntmp);
320
+ #endif
321
+ if (!ntmp) {
322
+ OPENSSL_PUT_ERROR(X509V3, X509V3_R_INVALID_NULL_NAME);
323
+ goto err;
324
+ }
325
+ X509V3_add_value(ntmp, NULL, &values);
326
+ }
327
+ break;
328
+
329
+ case HDR_VALUE:
330
+ if (c == ',') {
331
+ state = HDR_NAME;
332
+ *p = 0;
333
+ vtmp = strip_spaces(q);
334
+ #if 0
335
+ printf("%s\n", ntmp);
336
+ #endif
337
+ if (!vtmp) {
338
+ OPENSSL_PUT_ERROR(X509V3, X509V3_R_INVALID_NULL_VALUE);
339
+ goto err;
340
+ }
341
+ X509V3_add_value(ntmp, vtmp, &values);
342
+ ntmp = NULL;
343
+ q = p + 1;
344
+ }
345
+
346
+ }
347
+ }
348
+
349
+ if (state == HDR_VALUE) {
350
+ vtmp = strip_spaces(q);
351
+ #if 0
352
+ printf("%s=%s\n", ntmp, vtmp);
353
+ #endif
354
+ if (!vtmp) {
355
+ OPENSSL_PUT_ERROR(X509V3, X509V3_R_INVALID_NULL_VALUE);
356
+ goto err;
357
+ }
358
+ X509V3_add_value(ntmp, vtmp, &values);
359
+ } else {
360
+ ntmp = strip_spaces(q);
361
+ #if 0
362
+ printf("%s\n", ntmp);
363
+ #endif
364
+ if (!ntmp) {
365
+ OPENSSL_PUT_ERROR(X509V3, X509V3_R_INVALID_NULL_NAME);
366
+ goto err;
367
+ }
368
+ X509V3_add_value(ntmp, NULL, &values);
369
+ }
370
+ OPENSSL_free(linebuf);
371
+ return values;
372
+
373
+ err:
374
+ OPENSSL_free(linebuf);
375
+ sk_CONF_VALUE_pop_free(values, X509V3_conf_free);
376
+ return NULL;
377
+
378
+ }
379
+
380
+ /* Delete leading and trailing spaces from a string */
381
+ static char *strip_spaces(char *name)
382
+ {
383
+ char *p, *q;
384
+ /* Skip over leading spaces */
385
+ p = name;
386
+ while (*p && isspace((unsigned char)*p))
387
+ p++;
388
+ if (!*p)
389
+ return NULL;
390
+ q = p + strlen(p) - 1;
391
+ while ((q != p) && isspace((unsigned char)*q))
392
+ q--;
393
+ if (p != q)
394
+ q[1] = 0;
395
+ if (!*p)
396
+ return NULL;
397
+ return p;
398
+ }
399
+
400
+ /* hex string utilities */
401
+
402
+ /*
403
+ * Given a buffer of length 'len' return a OPENSSL_malloc'ed string with its
404
+ * hex representation @@@ (Contents of buffer are always kept in ASCII, also
405
+ * on EBCDIC machines)
406
+ */
407
+
408
+ char *hex_to_string(const unsigned char *buffer, long len)
409
+ {
410
+ char *tmp, *q;
411
+ const unsigned char *p;
412
+ int i;
413
+ static const char hexdig[] = "0123456789ABCDEF";
414
+ if (!buffer || !len)
415
+ return NULL;
416
+ if (!(tmp = OPENSSL_malloc(len * 3 + 1))) {
417
+ OPENSSL_PUT_ERROR(X509V3, ERR_R_MALLOC_FAILURE);
418
+ return NULL;
419
+ }
420
+ q = tmp;
421
+ for (i = 0, p = buffer; i < len; i++, p++) {
422
+ *q++ = hexdig[(*p >> 4) & 0xf];
423
+ *q++ = hexdig[*p & 0xf];
424
+ *q++ = ':';
425
+ }
426
+ q[-1] = 0;
427
+
428
+ return tmp;
429
+ }
430
+
431
+ /*
432
+ * Give a string of hex digits convert to a buffer
433
+ */
434
+
435
+ unsigned char *string_to_hex(const char *str, long *len)
436
+ {
437
+ unsigned char *hexbuf, *q;
438
+ unsigned char ch, cl, *p;
439
+ if (!str) {
440
+ OPENSSL_PUT_ERROR(X509V3, X509V3_R_INVALID_NULL_ARGUMENT);
441
+ return NULL;
442
+ }
443
+ if (!(hexbuf = OPENSSL_malloc(strlen(str) >> 1)))
444
+ goto err;
445
+ for (p = (unsigned char *)str, q = hexbuf; *p;) {
446
+ ch = *p++;
447
+ if (ch == ':')
448
+ continue;
449
+ cl = *p++;
450
+ if (!cl) {
451
+ OPENSSL_PUT_ERROR(X509V3, X509V3_R_ODD_NUMBER_OF_DIGITS);
452
+ OPENSSL_free(hexbuf);
453
+ return NULL;
454
+ }
455
+ if (isupper(ch))
456
+ ch = tolower(ch);
457
+ if (isupper(cl))
458
+ cl = tolower(cl);
459
+
460
+ if ((ch >= '0') && (ch <= '9'))
461
+ ch -= '0';
462
+ else if ((ch >= 'a') && (ch <= 'f'))
463
+ ch -= 'a' - 10;
464
+ else
465
+ goto badhex;
466
+
467
+ if ((cl >= '0') && (cl <= '9'))
468
+ cl -= '0';
469
+ else if ((cl >= 'a') && (cl <= 'f'))
470
+ cl -= 'a' - 10;
471
+ else
472
+ goto badhex;
473
+
474
+ *q++ = (ch << 4) | cl;
475
+ }
476
+
477
+ if (len)
478
+ *len = q - hexbuf;
479
+
480
+ return hexbuf;
481
+
482
+ err:
483
+ if (hexbuf)
484
+ OPENSSL_free(hexbuf);
485
+ OPENSSL_PUT_ERROR(X509V3, ERR_R_MALLOC_FAILURE);
486
+ return NULL;
487
+
488
+ badhex:
489
+ OPENSSL_free(hexbuf);
490
+ OPENSSL_PUT_ERROR(X509V3, X509V3_R_ILLEGAL_HEX_DIGIT);
491
+ return NULL;
492
+
493
+ }
494
+
495
+ /*
496
+ * V2I name comparison function: returns zero if 'name' matches cmp or cmp.*
497
+ */
498
+
499
+ int name_cmp(const char *name, const char *cmp)
500
+ {
501
+ int len, ret;
502
+ char c;
503
+ len = strlen(cmp);
504
+ if ((ret = strncmp(name, cmp, len)))
505
+ return ret;
506
+ c = name[len];
507
+ if (!c || (c == '.'))
508
+ return 0;
509
+ return 1;
510
+ }
511
+
512
+ static int sk_strcmp(const OPENSSL_STRING *a, const OPENSSL_STRING *b)
513
+ {
514
+ return strcmp(*a, *b);
515
+ }
516
+
517
+ STACK_OF(OPENSSL_STRING) *X509_get1_email(X509 *x)
518
+ {
519
+ GENERAL_NAMES *gens;
520
+ STACK_OF(OPENSSL_STRING) *ret;
521
+
522
+ gens = X509_get_ext_d2i(x, NID_subject_alt_name, NULL, NULL);
523
+ ret = get_email(X509_get_subject_name(x), gens);
524
+ sk_GENERAL_NAME_pop_free(gens, GENERAL_NAME_free);
525
+ return ret;
526
+ }
527
+
528
+ STACK_OF(OPENSSL_STRING) *X509_get1_ocsp(X509 *x)
529
+ {
530
+ AUTHORITY_INFO_ACCESS *info;
531
+ STACK_OF(OPENSSL_STRING) *ret = NULL;
532
+ size_t i;
533
+
534
+ info = X509_get_ext_d2i(x, NID_info_access, NULL, NULL);
535
+ if (!info)
536
+ return NULL;
537
+ for (i = 0; i < sk_ACCESS_DESCRIPTION_num(info); i++) {
538
+ ACCESS_DESCRIPTION *ad = sk_ACCESS_DESCRIPTION_value(info, i);
539
+ if (OBJ_obj2nid(ad->method) == NID_ad_OCSP) {
540
+ if (ad->location->type == GEN_URI) {
541
+ if (!append_ia5
542
+ (&ret, ad->location->d.uniformResourceIdentifier))
543
+ break;
544
+ }
545
+ }
546
+ }
547
+ AUTHORITY_INFO_ACCESS_free(info);
548
+ return ret;
549
+ }
550
+
551
+ STACK_OF(OPENSSL_STRING) *X509_REQ_get1_email(X509_REQ *x)
552
+ {
553
+ GENERAL_NAMES *gens;
554
+ STACK_OF(X509_EXTENSION) *exts;
555
+ STACK_OF(OPENSSL_STRING) *ret;
556
+
557
+ exts = X509_REQ_get_extensions(x);
558
+ gens = X509V3_get_d2i(exts, NID_subject_alt_name, NULL, NULL);
559
+ ret = get_email(X509_REQ_get_subject_name(x), gens);
560
+ sk_GENERAL_NAME_pop_free(gens, GENERAL_NAME_free);
561
+ sk_X509_EXTENSION_pop_free(exts, X509_EXTENSION_free);
562
+ return ret;
563
+ }
564
+
565
+ static STACK_OF(OPENSSL_STRING) *get_email(X509_NAME *name,
566
+ GENERAL_NAMES *gens)
567
+ {
568
+ STACK_OF(OPENSSL_STRING) *ret = NULL;
569
+ X509_NAME_ENTRY *ne;
570
+ ASN1_IA5STRING *email;
571
+ GENERAL_NAME *gen;
572
+ int i;
573
+ size_t j;
574
+ /* Now add any email address(es) to STACK */
575
+ i = -1;
576
+ /* First supplied X509_NAME */
577
+ while ((i = X509_NAME_get_index_by_NID(name,
578
+ NID_pkcs9_emailAddress, i)) >= 0) {
579
+ ne = X509_NAME_get_entry(name, i);
580
+ email = X509_NAME_ENTRY_get_data(ne);
581
+ if (!append_ia5(&ret, email))
582
+ return NULL;
583
+ }
584
+ for (j = 0; j < sk_GENERAL_NAME_num(gens); j++) {
585
+ gen = sk_GENERAL_NAME_value(gens, j);
586
+ if (gen->type != GEN_EMAIL)
587
+ continue;
588
+ if (!append_ia5(&ret, gen->d.ia5))
589
+ return NULL;
590
+ }
591
+ return ret;
592
+ }
593
+
594
+ static void str_free(OPENSSL_STRING str)
595
+ {
596
+ OPENSSL_free(str);
597
+ }
598
+
599
+ static int append_ia5(STACK_OF(OPENSSL_STRING) **sk, ASN1_IA5STRING *email)
600
+ {
601
+ char *emtmp;
602
+ /* First some sanity checks */
603
+ if (email->type != V_ASN1_IA5STRING)
604
+ return 1;
605
+ if (!email->data || !email->length)
606
+ return 1;
607
+ if (!*sk)
608
+ *sk = sk_OPENSSL_STRING_new(sk_strcmp);
609
+ if (!*sk)
610
+ return 0;
611
+ /* Don't add duplicates */
612
+ if (sk_OPENSSL_STRING_find(*sk, NULL, (char *)email->data))
613
+ return 1;
614
+ emtmp = BUF_strdup((char *)email->data);
615
+ if (!emtmp || !sk_OPENSSL_STRING_push(*sk, emtmp)) {
616
+ X509_email_free(*sk);
617
+ *sk = NULL;
618
+ return 0;
619
+ }
620
+ return 1;
621
+ }
622
+
623
+ void X509_email_free(STACK_OF(OPENSSL_STRING) *sk)
624
+ {
625
+ sk_OPENSSL_STRING_pop_free(sk, str_free);
626
+ }
627
+
628
+ typedef int (*equal_fn) (const unsigned char *pattern, size_t pattern_len,
629
+ const unsigned char *subject, size_t subject_len,
630
+ unsigned int flags);
631
+
632
+ /* Skip pattern prefix to match "wildcard" subject */
633
+ static void skip_prefix(const unsigned char **p, size_t *plen,
634
+ const unsigned char *subject, size_t subject_len,
635
+ unsigned int flags)
636
+ {
637
+ const unsigned char *pattern = *p;
638
+ size_t pattern_len = *plen;
639
+
640
+ /*
641
+ * If subject starts with a leading '.' followed by more octets, and
642
+ * pattern is longer, compare just an equal-length suffix with the
643
+ * full subject (starting at the '.'), provided the prefix contains
644
+ * no NULs.
645
+ */
646
+ if ((flags & _X509_CHECK_FLAG_DOT_SUBDOMAINS) == 0)
647
+ return;
648
+
649
+ while (pattern_len > subject_len && *pattern) {
650
+ if ((flags & X509_CHECK_FLAG_SINGLE_LABEL_SUBDOMAINS) &&
651
+ *pattern == '.')
652
+ break;
653
+ ++pattern;
654
+ --pattern_len;
655
+ }
656
+
657
+ /* Skip if entire prefix acceptable */
658
+ if (pattern_len == subject_len) {
659
+ *p = pattern;
660
+ *plen = pattern_len;
661
+ }
662
+ }
663
+
664
+ /* Compare while ASCII ignoring case. */
665
+ static int equal_nocase(const unsigned char *pattern, size_t pattern_len,
666
+ const unsigned char *subject, size_t subject_len,
667
+ unsigned int flags)
668
+ {
669
+ skip_prefix(&pattern, &pattern_len, subject, subject_len, flags);
670
+ if (pattern_len != subject_len)
671
+ return 0;
672
+ while (pattern_len) {
673
+ unsigned char l = *pattern;
674
+ unsigned char r = *subject;
675
+ /* The pattern must not contain NUL characters. */
676
+ if (l == 0)
677
+ return 0;
678
+ if (l != r) {
679
+ if ('A' <= l && l <= 'Z')
680
+ l = (l - 'A') + 'a';
681
+ if ('A' <= r && r <= 'Z')
682
+ r = (r - 'A') + 'a';
683
+ if (l != r)
684
+ return 0;
685
+ }
686
+ ++pattern;
687
+ ++subject;
688
+ --pattern_len;
689
+ }
690
+ return 1;
691
+ }
692
+
693
+ /* Compare using memcmp. */
694
+ static int equal_case(const unsigned char *pattern, size_t pattern_len,
695
+ const unsigned char *subject, size_t subject_len,
696
+ unsigned int flags)
697
+ {
698
+ skip_prefix(&pattern, &pattern_len, subject, subject_len, flags);
699
+ if (pattern_len != subject_len)
700
+ return 0;
701
+ return !memcmp(pattern, subject, pattern_len);
702
+ }
703
+
704
+ /*
705
+ * RFC 5280, section 7.5, requires that only the domain is compared in a
706
+ * case-insensitive manner.
707
+ */
708
+ static int equal_email(const unsigned char *a, size_t a_len,
709
+ const unsigned char *b, size_t b_len,
710
+ unsigned int unused_flags)
711
+ {
712
+ size_t i = a_len;
713
+ if (a_len != b_len)
714
+ return 0;
715
+ /*
716
+ * We search backwards for the '@' character, so that we do not have to
717
+ * deal with quoted local-parts. The domain part is compared in a
718
+ * case-insensitive manner.
719
+ */
720
+ while (i > 0) {
721
+ --i;
722
+ if (a[i] == '@' || b[i] == '@') {
723
+ if (!equal_nocase(a + i, a_len - i, b + i, a_len - i, 0))
724
+ return 0;
725
+ break;
726
+ }
727
+ }
728
+ if (i == 0)
729
+ i = a_len;
730
+ return equal_case(a, i, b, i, 0);
731
+ }
732
+
733
+ /*
734
+ * Compare the prefix and suffix with the subject, and check that the
735
+ * characters in-between are valid.
736
+ */
737
+ static int wildcard_match(const unsigned char *prefix, size_t prefix_len,
738
+ const unsigned char *suffix, size_t suffix_len,
739
+ const unsigned char *subject, size_t subject_len,
740
+ unsigned int flags)
741
+ {
742
+ const unsigned char *wildcard_start;
743
+ const unsigned char *wildcard_end;
744
+ const unsigned char *p;
745
+ int allow_multi = 0;
746
+ int allow_idna = 0;
747
+
748
+ if (subject_len < prefix_len + suffix_len)
749
+ return 0;
750
+ if (!equal_nocase(prefix, prefix_len, subject, prefix_len, flags))
751
+ return 0;
752
+ wildcard_start = subject + prefix_len;
753
+ wildcard_end = subject + (subject_len - suffix_len);
754
+ if (!equal_nocase(wildcard_end, suffix_len, suffix, suffix_len, flags))
755
+ return 0;
756
+ /*
757
+ * If the wildcard makes up the entire first label, it must match at
758
+ * least one character.
759
+ */
760
+ if (prefix_len == 0 && *suffix == '.') {
761
+ if (wildcard_start == wildcard_end)
762
+ return 0;
763
+ allow_idna = 1;
764
+ if (flags & X509_CHECK_FLAG_MULTI_LABEL_WILDCARDS)
765
+ allow_multi = 1;
766
+ }
767
+ /* IDNA labels cannot match partial wildcards */
768
+ if (!allow_idna &&
769
+ subject_len >= 4
770
+ && OPENSSL_strncasecmp((char *)subject, "xn--", 4) == 0)
771
+ return 0;
772
+ /* The wildcard may match a literal '*' */
773
+ if (wildcard_end == wildcard_start + 1 && *wildcard_start == '*')
774
+ return 1;
775
+ /*
776
+ * Check that the part matched by the wildcard contains only
777
+ * permitted characters and only matches a single label unless
778
+ * allow_multi is set.
779
+ */
780
+ for (p = wildcard_start; p != wildcard_end; ++p)
781
+ if (!(('0' <= *p && *p <= '9') ||
782
+ ('A' <= *p && *p <= 'Z') ||
783
+ ('a' <= *p && *p <= 'z') ||
784
+ *p == '-' || (allow_multi && *p == '.')))
785
+ return 0;
786
+ return 1;
787
+ }
788
+
789
+ #define LABEL_START (1 << 0)
790
+ #define LABEL_END (1 << 1)
791
+ #define LABEL_HYPHEN (1 << 2)
792
+ #define LABEL_IDNA (1 << 3)
793
+
794
+ static const unsigned char *valid_star(const unsigned char *p, size_t len,
795
+ unsigned int flags)
796
+ {
797
+ const unsigned char *star = 0;
798
+ size_t i;
799
+ int state = LABEL_START;
800
+ int dots = 0;
801
+ for (i = 0; i < len; ++i) {
802
+ /*
803
+ * Locate first and only legal wildcard, either at the start
804
+ * or end of a non-IDNA first and not final label.
805
+ */
806
+ if (p[i] == '*') {
807
+ int atstart = (state & LABEL_START);
808
+ int atend = (i == len - 1 || p[i + 1] == '.');
809
+ /*
810
+ * At most one wildcard per pattern.
811
+ * No wildcards in IDNA labels.
812
+ * No wildcards after the first label.
813
+ */
814
+ if (star != NULL || (state & LABEL_IDNA) != 0 || dots)
815
+ return NULL;
816
+ /* Only full-label '*.example.com' wildcards? */
817
+ if ((flags & X509_CHECK_FLAG_NO_PARTIAL_WILDCARDS)
818
+ && (!atstart || !atend))
819
+ return NULL;
820
+ /* No 'foo*bar' wildcards */
821
+ if (!atstart && !atend)
822
+ return NULL;
823
+ star = &p[i];
824
+ state &= ~LABEL_START;
825
+ } else if ((state & LABEL_START) != 0) {
826
+ /*
827
+ * At the start of a label, skip any "xn--" and
828
+ * remain in the LABEL_START state, but set the
829
+ * IDNA label state
830
+ */
831
+ if ((state & LABEL_IDNA) == 0 && len - i >= 4
832
+ && OPENSSL_strncasecmp((char *)&p[i], "xn--", 4) == 0) {
833
+ i += 3;
834
+ state |= LABEL_IDNA;
835
+ continue;
836
+ }
837
+ /* Labels must start with a letter or digit */
838
+ state &= ~LABEL_START;
839
+ if (('a' <= p[i] && p[i] <= 'z')
840
+ || ('A' <= p[i] && p[i] <= 'Z')
841
+ || ('0' <= p[i] && p[i] <= '9'))
842
+ continue;
843
+ return NULL;
844
+ } else if (('a' <= p[i] && p[i] <= 'z')
845
+ || ('A' <= p[i] && p[i] <= 'Z')
846
+ || ('0' <= p[i] && p[i] <= '9')) {
847
+ state &= LABEL_IDNA;
848
+ continue;
849
+ } else if (p[i] == '.') {
850
+ if (state & (LABEL_HYPHEN | LABEL_START))
851
+ return NULL;
852
+ state = LABEL_START;
853
+ ++dots;
854
+ } else if (p[i] == '-') {
855
+ /* no domain/subdomain starts with '-' */
856
+ if ((state & LABEL_START) != 0)
857
+ return NULL;
858
+ state |= LABEL_HYPHEN;
859
+ } else
860
+ return NULL;
861
+ }
862
+
863
+ /*
864
+ * The final label must not end in a hyphen or ".", and
865
+ * there must be at least two dots after the star.
866
+ */
867
+ if ((state & (LABEL_START | LABEL_HYPHEN)) != 0 || dots < 2)
868
+ return NULL;
869
+ return star;
870
+ }
871
+
872
+ /* Compare using wildcards. */
873
+ static int equal_wildcard(const unsigned char *pattern, size_t pattern_len,
874
+ const unsigned char *subject, size_t subject_len,
875
+ unsigned int flags)
876
+ {
877
+ const unsigned char *star = NULL;
878
+
879
+ /*
880
+ * Subject names starting with '.' can only match a wildcard pattern
881
+ * via a subject sub-domain pattern suffix match.
882
+ */
883
+ if (!(subject_len > 1 && subject[0] == '.'))
884
+ star = valid_star(pattern, pattern_len, flags);
885
+ if (star == NULL)
886
+ return equal_nocase(pattern, pattern_len,
887
+ subject, subject_len, flags);
888
+ return wildcard_match(pattern, star - pattern,
889
+ star + 1, (pattern + pattern_len) - star - 1,
890
+ subject, subject_len, flags);
891
+ }
892
+
893
+ /*
894
+ * Compare an ASN1_STRING to a supplied string. If they match return 1. If
895
+ * cmp_type > 0 only compare if string matches the type, otherwise convert it
896
+ * to UTF8.
897
+ */
898
+
899
+ static int do_check_string(ASN1_STRING *a, int cmp_type, equal_fn equal,
900
+ unsigned int flags, const char *b, size_t blen,
901
+ char **peername)
902
+ {
903
+ int rv = 0;
904
+
905
+ if (!a->data || !a->length)
906
+ return 0;
907
+ if (cmp_type > 0) {
908
+ if (cmp_type != a->type)
909
+ return 0;
910
+ if (cmp_type == V_ASN1_IA5STRING)
911
+ rv = equal(a->data, a->length, (unsigned char *)b, blen, flags);
912
+ else if (a->length == (int)blen && !memcmp(a->data, b, blen))
913
+ rv = 1;
914
+ if (rv > 0 && peername)
915
+ *peername = BUF_strndup((char *)a->data, a->length);
916
+ } else {
917
+ int astrlen;
918
+ unsigned char *astr;
919
+ astrlen = ASN1_STRING_to_UTF8(&astr, a);
920
+ if (astrlen < 0)
921
+ return -1;
922
+ rv = equal(astr, astrlen, (unsigned char *)b, blen, flags);
923
+ if (rv > 0 && peername)
924
+ *peername = BUF_strndup((char *)astr, astrlen);
925
+ OPENSSL_free(astr);
926
+ }
927
+ return rv;
928
+ }
929
+
930
+ static int do_x509_check(X509 *x, const char *chk, size_t chklen,
931
+ unsigned int flags, int check_type, char **peername)
932
+ {
933
+ GENERAL_NAMES *gens = NULL;
934
+ X509_NAME *name = NULL;
935
+ size_t i;
936
+ int j;
937
+ int cnid = NID_undef;
938
+ int alt_type;
939
+ int san_present = 0;
940
+ int rv = 0;
941
+ equal_fn equal;
942
+
943
+ /* See below, this flag is internal-only */
944
+ flags &= ~_X509_CHECK_FLAG_DOT_SUBDOMAINS;
945
+ if (check_type == GEN_EMAIL) {
946
+ cnid = NID_pkcs9_emailAddress;
947
+ alt_type = V_ASN1_IA5STRING;
948
+ equal = equal_email;
949
+ } else if (check_type == GEN_DNS) {
950
+ cnid = NID_commonName;
951
+ /* Implicit client-side DNS sub-domain pattern */
952
+ if (chklen > 1 && chk[0] == '.')
953
+ flags |= _X509_CHECK_FLAG_DOT_SUBDOMAINS;
954
+ alt_type = V_ASN1_IA5STRING;
955
+ if (flags & X509_CHECK_FLAG_NO_WILDCARDS)
956
+ equal = equal_nocase;
957
+ else
958
+ equal = equal_wildcard;
959
+ } else {
960
+ alt_type = V_ASN1_OCTET_STRING;
961
+ equal = equal_case;
962
+ }
963
+
964
+ gens = X509_get_ext_d2i(x, NID_subject_alt_name, NULL, NULL);
965
+ if (gens) {
966
+ for (i = 0; i < sk_GENERAL_NAME_num(gens); i++) {
967
+ GENERAL_NAME *gen;
968
+ ASN1_STRING *cstr;
969
+ gen = sk_GENERAL_NAME_value(gens, i);
970
+ if (gen->type != check_type)
971
+ continue;
972
+ san_present = 1;
973
+ if (check_type == GEN_EMAIL)
974
+ cstr = gen->d.rfc822Name;
975
+ else if (check_type == GEN_DNS)
976
+ cstr = gen->d.dNSName;
977
+ else
978
+ cstr = gen->d.iPAddress;
979
+ /* Positive on success, negative on error! */
980
+ if ((rv = do_check_string(cstr, alt_type, equal, flags,
981
+ chk, chklen, peername)) != 0)
982
+ break;
983
+ }
984
+ GENERAL_NAMES_free(gens);
985
+ if (rv != 0)
986
+ return rv;
987
+ if (cnid == NID_undef
988
+ || (san_present
989
+ && !(flags & X509_CHECK_FLAG_ALWAYS_CHECK_SUBJECT)))
990
+ return 0;
991
+ }
992
+
993
+ /* We're done if CN-ID is not pertinent */
994
+ if (cnid == NID_undef)
995
+ return 0;
996
+
997
+ j = -1;
998
+ name = X509_get_subject_name(x);
999
+ while ((j = X509_NAME_get_index_by_NID(name, cnid, j)) >= 0) {
1000
+ X509_NAME_ENTRY *ne;
1001
+ ASN1_STRING *str;
1002
+ ne = X509_NAME_get_entry(name, j);
1003
+ str = X509_NAME_ENTRY_get_data(ne);
1004
+ /* Positive on success, negative on error! */
1005
+ if ((rv = do_check_string(str, -1, equal, flags,
1006
+ chk, chklen, peername)) != 0)
1007
+ return rv;
1008
+ }
1009
+ return 0;
1010
+ }
1011
+
1012
+ int X509_check_host(X509 *x, const char *chk, size_t chklen,
1013
+ unsigned int flags, char **peername)
1014
+ {
1015
+ if (chk == NULL)
1016
+ return -2;
1017
+ if (memchr(chk, '\0', chklen))
1018
+ return -2;
1019
+ return do_x509_check(x, chk, chklen, flags, GEN_DNS, peername);
1020
+ }
1021
+
1022
+ int X509_check_email(X509 *x, const char *chk, size_t chklen,
1023
+ unsigned int flags)
1024
+ {
1025
+ if (chk == NULL)
1026
+ return -2;
1027
+ if (memchr(chk, '\0', chklen))
1028
+ return -2;
1029
+ return do_x509_check(x, chk, chklen, flags, GEN_EMAIL, NULL);
1030
+ }
1031
+
1032
+ int X509_check_ip(X509 *x, const unsigned char *chk, size_t chklen,
1033
+ unsigned int flags)
1034
+ {
1035
+ if (chk == NULL)
1036
+ return -2;
1037
+ return do_x509_check(x, (char *)chk, chklen, flags, GEN_IPADD, NULL);
1038
+ }
1039
+
1040
+ int X509_check_ip_asc(X509 *x, const char *ipasc, unsigned int flags)
1041
+ {
1042
+ unsigned char ipout[16];
1043
+ size_t iplen;
1044
+
1045
+ if (ipasc == NULL)
1046
+ return -2;
1047
+ iplen = (size_t)a2i_ipadd(ipout, ipasc);
1048
+ if (iplen == 0)
1049
+ return -2;
1050
+ return do_x509_check(x, (char *)ipout, iplen, flags, GEN_IPADD, NULL);
1051
+ }
1052
+
1053
+ /*
1054
+ * Convert IP addresses both IPv4 and IPv6 into an OCTET STRING compatible
1055
+ * with RFC3280.
1056
+ */
1057
+
1058
+ ASN1_OCTET_STRING *a2i_IPADDRESS(const char *ipasc)
1059
+ {
1060
+ unsigned char ipout[16];
1061
+ ASN1_OCTET_STRING *ret;
1062
+ int iplen;
1063
+
1064
+ /* If string contains a ':' assume IPv6 */
1065
+
1066
+ iplen = a2i_ipadd(ipout, ipasc);
1067
+
1068
+ if (!iplen)
1069
+ return NULL;
1070
+
1071
+ ret = ASN1_OCTET_STRING_new();
1072
+ if (!ret)
1073
+ return NULL;
1074
+ if (!ASN1_OCTET_STRING_set(ret, ipout, iplen)) {
1075
+ ASN1_OCTET_STRING_free(ret);
1076
+ return NULL;
1077
+ }
1078
+ return ret;
1079
+ }
1080
+
1081
+ ASN1_OCTET_STRING *a2i_IPADDRESS_NC(const char *ipasc)
1082
+ {
1083
+ ASN1_OCTET_STRING *ret = NULL;
1084
+ unsigned char ipout[32];
1085
+ char *iptmp = NULL, *p;
1086
+ int iplen1, iplen2;
1087
+ p = strchr(ipasc, '/');
1088
+ if (!p)
1089
+ return NULL;
1090
+ iptmp = BUF_strdup(ipasc);
1091
+ if (!iptmp)
1092
+ return NULL;
1093
+ p = iptmp + (p - ipasc);
1094
+ *p++ = 0;
1095
+
1096
+ iplen1 = a2i_ipadd(ipout, iptmp);
1097
+
1098
+ if (!iplen1)
1099
+ goto err;
1100
+
1101
+ iplen2 = a2i_ipadd(ipout + iplen1, p);
1102
+
1103
+ OPENSSL_free(iptmp);
1104
+ iptmp = NULL;
1105
+
1106
+ if (!iplen2 || (iplen1 != iplen2))
1107
+ goto err;
1108
+
1109
+ ret = ASN1_OCTET_STRING_new();
1110
+ if (!ret)
1111
+ goto err;
1112
+ if (!ASN1_OCTET_STRING_set(ret, ipout, iplen1 + iplen2))
1113
+ goto err;
1114
+
1115
+ return ret;
1116
+
1117
+ err:
1118
+ if (iptmp)
1119
+ OPENSSL_free(iptmp);
1120
+ if (ret)
1121
+ ASN1_OCTET_STRING_free(ret);
1122
+ return NULL;
1123
+ }
1124
+
1125
+ int a2i_ipadd(unsigned char *ipout, const char *ipasc)
1126
+ {
1127
+ /* If string contains a ':' assume IPv6 */
1128
+
1129
+ if (strchr(ipasc, ':')) {
1130
+ if (!ipv6_from_asc(ipout, ipasc))
1131
+ return 0;
1132
+ return 16;
1133
+ } else {
1134
+ if (!ipv4_from_asc(ipout, ipasc))
1135
+ return 0;
1136
+ return 4;
1137
+ }
1138
+ }
1139
+
1140
+ static int ipv4_from_asc(unsigned char *v4, const char *in)
1141
+ {
1142
+ int a0, a1, a2, a3;
1143
+ if (sscanf(in, "%d.%d.%d.%d", &a0, &a1, &a2, &a3) != 4)
1144
+ return 0;
1145
+ if ((a0 < 0) || (a0 > 255) || (a1 < 0) || (a1 > 255)
1146
+ || (a2 < 0) || (a2 > 255) || (a3 < 0) || (a3 > 255))
1147
+ return 0;
1148
+ v4[0] = a0;
1149
+ v4[1] = a1;
1150
+ v4[2] = a2;
1151
+ v4[3] = a3;
1152
+ return 1;
1153
+ }
1154
+
1155
+ typedef struct {
1156
+ /* Temporary store for IPV6 output */
1157
+ unsigned char tmp[16];
1158
+ /* Total number of bytes in tmp */
1159
+ int total;
1160
+ /* The position of a zero (corresponding to '::') */
1161
+ int zero_pos;
1162
+ /* Number of zeroes */
1163
+ int zero_cnt;
1164
+ } IPV6_STAT;
1165
+
1166
+ static int ipv6_from_asc(unsigned char *v6, const char *in)
1167
+ {
1168
+ IPV6_STAT v6stat;
1169
+ v6stat.total = 0;
1170
+ v6stat.zero_pos = -1;
1171
+ v6stat.zero_cnt = 0;
1172
+ /*
1173
+ * Treat the IPv6 representation as a list of values separated by ':'.
1174
+ * The presence of a '::' will parse as one, two or three zero length
1175
+ * elements.
1176
+ */
1177
+ if (!CONF_parse_list(in, ':', 0, ipv6_cb, &v6stat))
1178
+ return 0;
1179
+
1180
+ /* Now for some sanity checks */
1181
+
1182
+ if (v6stat.zero_pos == -1) {
1183
+ /* If no '::' must have exactly 16 bytes */
1184
+ if (v6stat.total != 16)
1185
+ return 0;
1186
+ } else {
1187
+ /* If '::' must have less than 16 bytes */
1188
+ if (v6stat.total == 16)
1189
+ return 0;
1190
+ /* More than three zeroes is an error */
1191
+ if (v6stat.zero_cnt > 3)
1192
+ return 0;
1193
+ /* Can only have three zeroes if nothing else present */
1194
+ else if (v6stat.zero_cnt == 3) {
1195
+ if (v6stat.total > 0)
1196
+ return 0;
1197
+ }
1198
+ /* Can only have two zeroes if at start or end */
1199
+ else if (v6stat.zero_cnt == 2) {
1200
+ if ((v6stat.zero_pos != 0)
1201
+ && (v6stat.zero_pos != v6stat.total))
1202
+ return 0;
1203
+ } else
1204
+ /* Can only have one zero if *not* start or end */
1205
+ {
1206
+ if ((v6stat.zero_pos == 0)
1207
+ || (v6stat.zero_pos == v6stat.total))
1208
+ return 0;
1209
+ }
1210
+ }
1211
+
1212
+ /* Format result */
1213
+
1214
+ if (v6stat.zero_pos >= 0) {
1215
+ /* Copy initial part */
1216
+ memcpy(v6, v6stat.tmp, v6stat.zero_pos);
1217
+ /* Zero middle */
1218
+ memset(v6 + v6stat.zero_pos, 0, 16 - v6stat.total);
1219
+ /* Copy final part */
1220
+ if (v6stat.total != v6stat.zero_pos)
1221
+ memcpy(v6 + v6stat.zero_pos + 16 - v6stat.total,
1222
+ v6stat.tmp + v6stat.zero_pos,
1223
+ v6stat.total - v6stat.zero_pos);
1224
+ } else
1225
+ memcpy(v6, v6stat.tmp, 16);
1226
+
1227
+ return 1;
1228
+ }
1229
+
1230
+ static int ipv6_cb(const char *elem, int len, void *usr)
1231
+ {
1232
+ IPV6_STAT *s = usr;
1233
+ /* Error if 16 bytes written */
1234
+ if (s->total == 16)
1235
+ return 0;
1236
+ if (len == 0) {
1237
+ /* Zero length element, corresponds to '::' */
1238
+ if (s->zero_pos == -1)
1239
+ s->zero_pos = s->total;
1240
+ /* If we've already got a :: its an error */
1241
+ else if (s->zero_pos != s->total)
1242
+ return 0;
1243
+ s->zero_cnt++;
1244
+ } else {
1245
+ /* If more than 4 characters could be final a.b.c.d form */
1246
+ if (len > 4) {
1247
+ /* Need at least 4 bytes left */
1248
+ if (s->total > 12)
1249
+ return 0;
1250
+ /* Must be end of string */
1251
+ if (elem[len])
1252
+ return 0;
1253
+ if (!ipv4_from_asc(s->tmp + s->total, elem))
1254
+ return 0;
1255
+ s->total += 4;
1256
+ } else {
1257
+ if (!ipv6_hex(s->tmp + s->total, elem, len))
1258
+ return 0;
1259
+ s->total += 2;
1260
+ }
1261
+ }
1262
+ return 1;
1263
+ }
1264
+
1265
+ /*
1266
+ * Convert a string of up to 4 hex digits into the corresponding IPv6 form.
1267
+ */
1268
+
1269
+ static int ipv6_hex(unsigned char *out, const char *in, int inlen)
1270
+ {
1271
+ unsigned char c;
1272
+ unsigned int num = 0;
1273
+ if (inlen > 4)
1274
+ return 0;
1275
+ while (inlen--) {
1276
+ c = *in++;
1277
+ num <<= 4;
1278
+ if ((c >= '0') && (c <= '9'))
1279
+ num |= c - '0';
1280
+ else if ((c >= 'A') && (c <= 'F'))
1281
+ num |= c - 'A' + 10;
1282
+ else if ((c >= 'a') && (c <= 'f'))
1283
+ num |= c - 'a' + 10;
1284
+ else
1285
+ return 0;
1286
+ }
1287
+ out[0] = num >> 8;
1288
+ out[1] = num & 0xff;
1289
+ return 1;
1290
+ }
1291
+
1292
+ int X509V3_NAME_from_section(X509_NAME *nm, STACK_OF (CONF_VALUE) * dn_sk,
1293
+ unsigned long chtype)
1294
+ {
1295
+ CONF_VALUE *v;
1296
+ int mval;
1297
+ size_t i;
1298
+ char *p, *type;
1299
+ if (!nm)
1300
+ return 0;
1301
+
1302
+ for (i = 0; i < sk_CONF_VALUE_num(dn_sk); i++) {
1303
+ v = sk_CONF_VALUE_value(dn_sk, i);
1304
+ type = v->name;
1305
+ /*
1306
+ * Skip past any leading X. X: X, etc to allow for multiple instances
1307
+ */
1308
+ for (p = type; *p; p++)
1309
+ if ((*p == ':') || (*p == ',') || (*p == '.')) {
1310
+ p++;
1311
+ if (*p)
1312
+ type = p;
1313
+ break;
1314
+ }
1315
+ if (*type == '+') {
1316
+ mval = -1;
1317
+ type++;
1318
+ } else
1319
+ mval = 0;
1320
+ if (!X509_NAME_add_entry_by_txt(nm, type, chtype,
1321
+ (unsigned char *)v->value, -1, -1,
1322
+ mval))
1323
+ return 0;
1324
+
1325
+ }
1326
+ return 1;
1327
+ }