grpc 0.13.1 → 0.14.1.pre1

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of grpc might be problematic. Click here for more details.

Files changed (724) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +2098 -828
  3. data/include/grpc/byte_buffer.h +1 -1
  4. data/include/grpc/byte_buffer_reader.h +1 -20
  5. data/include/grpc/census.h +4 -4
  6. data/include/grpc/compression.h +6 -5
  7. data/include/grpc/grpc.h +31 -20
  8. data/include/grpc/grpc_security.h +17 -31
  9. data/include/grpc/grpc_security_constants.h +114 -0
  10. data/include/grpc/grpc_zookeeper.h +1 -1
  11. data/include/grpc/impl/codegen/alloc.h +1 -1
  12. data/include/grpc/impl/codegen/atm.h +1 -1
  13. data/include/grpc/impl/codegen/atm_gcc_atomic.h +1 -1
  14. data/include/grpc/impl/codegen/atm_gcc_sync.h +1 -1
  15. data/include/grpc/impl/codegen/atm_win32.h +1 -1
  16. data/include/grpc/impl/codegen/byte_buffer.h +1 -1
  17. data/{src/core/client_config/lb_policies/round_robin.h → include/grpc/impl/codegen/byte_buffer_reader.h} +19 -8
  18. data/include/grpc/impl/codegen/grpc_types.h +20 -3
  19. data/include/grpc/impl/codegen/log.h +9 -2
  20. data/include/grpc/impl/codegen/port_platform.h +102 -17
  21. data/include/grpc/impl/codegen/propagation_bits.h +3 -3
  22. data/include/grpc/impl/codegen/slice.h +3 -3
  23. data/include/grpc/impl/codegen/slice_buffer.h +3 -3
  24. data/include/grpc/impl/codegen/status.h +1 -1
  25. data/include/grpc/impl/codegen/sync_generic.h +1 -1
  26. data/include/grpc/impl/codegen/sync_posix.h +1 -1
  27. data/include/grpc/impl/codegen/sync_win32.h +1 -1
  28. data/include/grpc/impl/codegen/time.h +3 -3
  29. data/include/grpc/status.h +1 -1
  30. data/include/grpc/support/alloc.h +1 -1
  31. data/include/grpc/support/atm.h +1 -1
  32. data/include/grpc/support/atm_gcc_atomic.h +4 -4
  33. data/include/grpc/support/atm_gcc_sync.h +1 -1
  34. data/include/grpc/support/atm_win32.h +1 -1
  35. data/include/grpc/support/avl.h +1 -1
  36. data/include/grpc/support/cmdline.h +1 -1
  37. data/include/grpc/support/cpu.h +1 -1
  38. data/include/grpc/support/histogram.h +1 -1
  39. data/include/grpc/support/host_port.h +1 -1
  40. data/include/grpc/support/log.h +1 -1
  41. data/include/grpc/support/log_win32.h +1 -1
  42. data/include/grpc/support/port_platform.h +1 -1
  43. data/include/grpc/support/slice.h +1 -1
  44. data/include/grpc/support/slice_buffer.h +1 -1
  45. data/include/grpc/support/string_util.h +3 -1
  46. data/include/grpc/support/subprocess.h +2 -2
  47. data/include/grpc/support/sync.h +1 -1
  48. data/include/grpc/support/sync_generic.h +1 -1
  49. data/include/grpc/support/sync_posix.h +1 -1
  50. data/include/grpc/support/sync_win32.h +1 -1
  51. data/include/grpc/support/thd.h +1 -1
  52. data/include/grpc/support/time.h +1 -1
  53. data/include/grpc/support/tls.h +1 -1
  54. data/include/grpc/support/tls_gcc.h +45 -1
  55. data/include/grpc/support/tls_msvc.h +3 -3
  56. data/include/grpc/support/tls_pthread.h +1 -1
  57. data/include/grpc/support/useful.h +1 -1
  58. data/src/boringssl/err_data.c +258 -252
  59. data/src/core/{census → ext/census}/aggregation.h +3 -3
  60. data/src/core/{statistics → ext/census}/census_interface.h +3 -3
  61. data/src/core/{statistics → ext/census}/census_rpc_stats.h +4 -4
  62. data/src/core/{census → ext/census}/context.c +2 -2
  63. data/src/core/{census → ext/census}/grpc_context.c +2 -2
  64. data/src/core/{census → ext/census}/grpc_filter.c +30 -16
  65. data/src/core/{census → ext/census}/grpc_filter.h +4 -4
  66. data/src/core/ext/census/grpc_plugin.c +82 -0
  67. data/src/core/{census → ext/census}/initialize.c +1 -1
  68. data/src/core/{census → ext/census}/mlog.c +2 -2
  69. data/src/core/{census → ext/census}/mlog.h +4 -4
  70. data/src/core/{census → ext/census}/operation.c +0 -0
  71. data/src/core/{census → ext/census}/placeholders.c +0 -0
  72. data/src/core/{census → ext/census}/rpc_metric_id.h +3 -3
  73. data/src/core/{census → ext/census}/tracing.c +0 -0
  74. data/src/core/{surface → ext/client_config}/channel_connectivity.c +8 -21
  75. data/src/core/{channel → ext/client_config}/client_channel.c +80 -35
  76. data/src/core/{channel → ext/client_config}/client_channel.h +5 -5
  77. data/src/core/{client_config/subchannel_factory.c → ext/client_config/client_channel_factory.c} +14 -6
  78. data/src/core/ext/client_config/client_channel_factory.h +85 -0
  79. data/src/core/{client_config → ext/client_config}/client_config.c +4 -2
  80. data/src/core/{client_config → ext/client_config}/client_config.h +4 -4
  81. data/src/core/ext/client_config/client_config_plugin.c +95 -0
  82. data/src/core/{client_config → ext/client_config}/connector.c +2 -2
  83. data/src/core/{client_config → ext/client_config}/connector.h +7 -10
  84. data/src/core/{client_config → ext/client_config}/default_initial_connect_string.c +1 -1
  85. data/src/core/{client_config → ext/client_config}/initial_connect_string.c +1 -1
  86. data/src/core/{client_config → ext/client_config}/initial_connect_string.h +4 -4
  87. data/src/core/{client_config → ext/client_config}/lb_policy.c +12 -3
  88. data/src/core/{client_config → ext/client_config}/lb_policy.h +19 -6
  89. data/src/core/{client_config → ext/client_config}/lb_policy_factory.c +4 -3
  90. data/src/core/{client_config → ext/client_config}/lb_policy_factory.h +14 -9
  91. data/src/core/{client_config → ext/client_config}/lb_policy_registry.c +4 -9
  92. data/src/core/{client_config → ext/client_config}/lb_policy_registry.h +7 -6
  93. data/src/core/ext/client_config/parse_address.c +137 -0
  94. data/src/core/ext/client_config/parse_address.h +56 -0
  95. data/src/core/{client_config → ext/client_config}/resolver.c +1 -1
  96. data/src/core/{client_config → ext/client_config}/resolver.h +6 -6
  97. data/src/core/{client_config → ext/client_config}/resolver_factory.c +1 -1
  98. data/src/core/{client_config → ext/client_config}/resolver_factory.h +7 -7
  99. data/src/core/{client_config → ext/client_config}/resolver_registry.c +25 -11
  100. data/src/core/{client_config → ext/client_config}/resolver_registry.h +9 -5
  101. data/src/core/{client_config → ext/client_config}/subchannel.c +90 -126
  102. data/src/core/{client_config → ext/client_config}/subchannel.h +15 -15
  103. data/src/core/{channel → ext/client_config}/subchannel_call_holder.c +9 -8
  104. data/src/core/{channel → ext/client_config}/subchannel_call_holder.h +7 -7
  105. data/src/core/{client_config → ext/client_config}/subchannel_index.c +3 -2
  106. data/src/core/{client_config → ext/client_config}/subchannel_index.h +5 -5
  107. data/src/core/{client_config → ext/client_config}/uri_parser.c +69 -1
  108. data/src/core/{client_config → ext/client_config}/uri_parser.h +15 -3
  109. data/src/core/{client_config/lb_policies → ext/lb_policy/grpclb}/load_balancer_api.c +18 -9
  110. data/src/core/{client_config/lb_policies → ext/lb_policy/grpclb}/load_balancer_api.h +5 -5
  111. data/src/core/{proto → ext/lb_policy/grpclb/proto}/grpc/lb/v0/load_balancer.pb.c +1 -1
  112. data/src/core/{proto → ext/lb_policy/grpclb/proto}/grpc/lb/v0/load_balancer.pb.h +0 -0
  113. data/src/core/{client_config/lb_policies → ext/lb_policy/pick_first}/pick_first.c +95 -32
  114. data/src/core/{client_config/lb_policies → ext/lb_policy/round_robin}/round_robin.c +98 -34
  115. data/src/core/{client_config/resolvers → ext/resolver/dns/native}/dns_resolver.c +83 -39
  116. data/src/core/{client_config/resolvers → ext/resolver/sockaddr}/sockaddr_resolver.c +66 -169
  117. data/src/core/{transport/chttp2 → ext/transport/chttp2/alpn}/alpn.c +1 -1
  118. data/src/core/{transport/chttp2 → ext/transport/chttp2/alpn}/alpn.h +3 -3
  119. data/src/core/{surface → ext/transport/chttp2/client/insecure}/channel_create.c +65 -59
  120. data/src/core/{surface → ext/transport/chttp2/client/secure}/secure_channel_create.c +77 -69
  121. data/src/core/{surface → ext/transport/chttp2/server/insecure}/server_chttp2.c +8 -11
  122. data/src/core/{security → ext/transport/chttp2/server/secure}/server_secure_chttp2.c +14 -17
  123. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/bin_encoder.c +28 -74
  124. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/bin_encoder.h +5 -5
  125. data/src/core/ext/transport/chttp2/transport/chttp2_plugin.c +46 -0
  126. data/src/core/{transport → ext/transport/chttp2/transport}/chttp2_transport.c +551 -310
  127. data/src/core/{transport → ext/transport/chttp2/transport}/chttp2_transport.h +5 -5
  128. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/frame.h +3 -3
  129. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/frame_data.c +30 -14
  130. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/frame_data.h +10 -7
  131. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/frame_goaway.c +2 -2
  132. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/frame_goaway.h +5 -5
  133. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/frame_ping.c +2 -2
  134. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/frame_ping.h +5 -5
  135. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/frame_rst_stream.c +9 -5
  136. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/frame_rst_stream.h +8 -6
  137. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/frame_settings.c +6 -6
  138. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/frame_settings.h +5 -5
  139. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/frame_window_update.c +11 -5
  140. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/frame_window_update.h +8 -6
  141. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/hpack_encoder.c +21 -12
  142. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/hpack_encoder.h +8 -6
  143. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/hpack_parser.c +42 -25
  144. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/hpack_parser.h +7 -7
  145. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/hpack_table.c +21 -11
  146. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/hpack_table.h +4 -4
  147. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/http2_errors.h +3 -3
  148. data/src/core/ext/transport/chttp2/transport/huffsyms.c +105 -0
  149. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/huffsyms.h +3 -3
  150. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/incoming_metadata.c +2 -2
  151. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/incoming_metadata.h +4 -4
  152. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/internal.h +81 -37
  153. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/parsing.c +54 -21
  154. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/status_conversion.c +1 -1
  155. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/status_conversion.h +4 -4
  156. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/stream_lists.c +10 -2
  157. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/stream_map.c +1 -1
  158. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/stream_map.h +3 -3
  159. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/timeout_encoding.c +4 -4
  160. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/timeout_encoding.h +4 -4
  161. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/varint.c +1 -1
  162. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/varint.h +3 -3
  163. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/writing.c +30 -20
  164. data/src/core/{channel → lib/channel}/channel_args.c +3 -15
  165. data/src/core/{channel → lib/channel}/channel_args.h +11 -15
  166. data/src/core/{channel → lib/channel}/channel_stack.c +5 -3
  167. data/src/core/{channel → lib/channel}/channel_stack.h +13 -8
  168. data/src/core/lib/channel/channel_stack_builder.c +277 -0
  169. data/src/core/lib/channel/channel_stack_builder.h +161 -0
  170. data/src/core/{channel → lib/channel}/compress_filter.c +51 -16
  171. data/src/core/{channel → lib/channel}/compress_filter.h +6 -4
  172. data/src/core/{channel → lib/channel}/connected_channel.c +34 -24
  173. data/src/core/lib/channel/connected_channel.h +42 -0
  174. data/src/core/{channel → lib/channel}/context.h +3 -3
  175. data/src/core/{channel → lib/channel}/http_client_filter.c +24 -13
  176. data/src/core/{channel → lib/channel}/http_client_filter.h +4 -4
  177. data/src/core/{channel → lib/channel}/http_server_filter.c +39 -19
  178. data/src/core/{channel → lib/channel}/http_server_filter.h +4 -4
  179. data/src/core/{compression → lib/compression}/algorithm_metadata.h +4 -4
  180. data/src/core/{compression → lib/compression}/compression_algorithm.c +46 -9
  181. data/src/core/{compression → lib/compression}/message_compress.c +1 -1
  182. data/src/core/{compression → lib/compression}/message_compress.h +3 -3
  183. data/src/core/{debug → lib/debug}/trace.c +2 -2
  184. data/src/core/{debug → lib/debug}/trace.h +3 -3
  185. data/src/core/{httpcli → lib/http}/format_request.c +8 -8
  186. data/src/core/{httpcli → lib/http}/format_request.h +4 -4
  187. data/src/core/{httpcli → lib/http}/httpcli.c +24 -19
  188. data/src/core/{httpcli → lib/http}/httpcli.h +14 -33
  189. data/src/core/{httpcli → lib/http}/httpcli_security_connector.c +5 -5
  190. data/src/core/lib/http/parser.c +341 -0
  191. data/src/core/lib/http/parser.h +119 -0
  192. data/src/core/{iomgr → lib/iomgr}/closure.c +8 -2
  193. data/src/core/{iomgr → lib/iomgr}/closure.h +7 -4
  194. data/src/core/{iomgr → lib/iomgr}/endpoint.c +1 -1
  195. data/src/core/{iomgr → lib/iomgr}/endpoint.h +5 -5
  196. data/src/core/{iomgr → lib/iomgr}/endpoint_pair.h +4 -4
  197. data/src/core/{iomgr → lib/iomgr}/endpoint_pair_posix.c +8 -7
  198. data/src/core/{iomgr → lib/iomgr}/endpoint_pair_windows.c +4 -4
  199. data/src/core/lib/iomgr/ev_poll_and_epoll_posix.c +1936 -0
  200. data/src/core/lib/iomgr/ev_poll_and_epoll_posix.h +41 -0
  201. data/src/core/lib/iomgr/ev_posix.c +164 -0
  202. data/src/core/lib/iomgr/ev_posix.h +158 -0
  203. data/src/core/{iomgr → lib/iomgr}/exec_ctx.c +78 -3
  204. data/src/core/{iomgr → lib/iomgr}/exec_ctx.h +25 -10
  205. data/src/core/{iomgr → lib/iomgr}/executor.c +3 -3
  206. data/src/core/{iomgr → lib/iomgr}/executor.h +5 -5
  207. data/src/core/{iomgr → lib/iomgr}/iocp_windows.c +6 -6
  208. data/src/core/{iomgr → lib/iomgr}/iocp_windows.h +5 -5
  209. data/src/core/{iomgr → lib/iomgr}/iomgr.c +13 -10
  210. data/src/core/{iomgr → lib/iomgr}/iomgr.h +3 -3
  211. data/src/core/{iomgr → lib/iomgr}/iomgr_internal.h +5 -9
  212. data/src/core/{iomgr → lib/iomgr}/iomgr_posix.c +6 -6
  213. data/src/core/{iomgr → lib/iomgr}/iomgr_posix.h +4 -4
  214. data/src/core/{iomgr → lib/iomgr}/iomgr_windows.c +7 -4
  215. data/src/core/{iomgr → lib/iomgr}/pollset.h +11 -11
  216. data/src/core/{iomgr → lib/iomgr}/pollset_set.h +5 -5
  217. data/src/core/{iomgr → lib/iomgr}/pollset_set_windows.c +2 -2
  218. data/src/core/lib/iomgr/pollset_set_windows.h +39 -0
  219. data/src/core/{iomgr → lib/iomgr}/pollset_windows.c +7 -7
  220. data/src/core/{iomgr → lib/iomgr}/pollset_windows.h +8 -5
  221. data/src/core/{iomgr → lib/iomgr}/resolve_address.h +10 -9
  222. data/src/core/{iomgr → lib/iomgr}/resolve_address_posix.c +22 -22
  223. data/src/core/{iomgr → lib/iomgr}/resolve_address_windows.c +20 -12
  224. data/src/core/{iomgr → lib/iomgr}/sockaddr.h +5 -5
  225. data/src/core/{iomgr → lib/iomgr}/sockaddr_posix.h +5 -5
  226. data/src/core/{iomgr → lib/iomgr}/sockaddr_utils.c +9 -16
  227. data/src/core/{iomgr → lib/iomgr}/sockaddr_utils.h +4 -4
  228. data/src/core/{iomgr → lib/iomgr}/sockaddr_win32.h +6 -4
  229. data/src/core/{iomgr → lib/iomgr}/socket_utils_common_posix.c +29 -7
  230. data/src/core/{iomgr → lib/iomgr}/socket_utils_linux.c +2 -2
  231. data/src/core/{iomgr → lib/iomgr}/socket_utils_posix.c +1 -1
  232. data/src/core/{iomgr → lib/iomgr}/socket_utils_posix.h +14 -4
  233. data/src/core/{iomgr → lib/iomgr}/socket_windows.c +7 -5
  234. data/src/core/{iomgr → lib/iomgr}/socket_windows.h +6 -6
  235. data/src/core/{iomgr → lib/iomgr}/tcp_client.h +6 -6
  236. data/src/core/{iomgr → lib/iomgr}/tcp_client_posix.c +33 -18
  237. data/src/core/{iomgr → lib/iomgr}/tcp_client_windows.c +30 -20
  238. data/src/core/{iomgr → lib/iomgr}/tcp_posix.c +9 -10
  239. data/src/core/{iomgr → lib/iomgr}/tcp_posix.h +6 -6
  240. data/src/core/{iomgr → lib/iomgr}/tcp_server.h +6 -6
  241. data/src/core/{iomgr → lib/iomgr}/tcp_server_posix.c +24 -37
  242. data/src/core/{iomgr → lib/iomgr}/tcp_server_windows.c +8 -36
  243. data/src/core/{iomgr → lib/iomgr}/tcp_windows.c +27 -17
  244. data/src/core/{iomgr → lib/iomgr}/tcp_windows.h +5 -5
  245. data/src/core/{iomgr → lib/iomgr}/time_averaged_stats.c +1 -1
  246. data/src/core/{iomgr → lib/iomgr}/time_averaged_stats.h +3 -3
  247. data/src/core/{iomgr → lib/iomgr}/timer.c +31 -4
  248. data/src/core/{iomgr → lib/iomgr}/timer.h +6 -7
  249. data/src/core/{iomgr → lib/iomgr}/timer_heap.c +2 -2
  250. data/src/core/{iomgr → lib/iomgr}/timer_heap.h +4 -4
  251. data/src/core/{iomgr → lib/iomgr}/udp_server.c +13 -37
  252. data/src/core/{iomgr → lib/iomgr}/udp_server.h +11 -10
  253. data/src/core/lib/iomgr/unix_sockets_posix.c +89 -0
  254. data/src/core/{client_config/resolvers/sockaddr_resolver.h → lib/iomgr/unix_sockets_posix.h} +15 -11
  255. data/src/core/lib/iomgr/unix_sockets_posix_noop.c +59 -0
  256. data/src/core/{iomgr → lib/iomgr}/wakeup_fd_eventfd.c +2 -2
  257. data/src/core/{iomgr → lib/iomgr}/wakeup_fd_nospecial.c +1 -1
  258. data/src/core/{iomgr → lib/iomgr}/wakeup_fd_pipe.c +8 -3
  259. data/src/core/{iomgr → lib/iomgr}/wakeup_fd_pipe.h +4 -4
  260. data/src/core/{iomgr → lib/iomgr}/wakeup_fd_posix.c +2 -2
  261. data/src/core/{iomgr → lib/iomgr}/wakeup_fd_posix.h +3 -3
  262. data/src/core/{iomgr → lib/iomgr}/workqueue.h +10 -10
  263. data/src/core/{iomgr → lib/iomgr}/workqueue_posix.c +5 -6
  264. data/src/core/{iomgr → lib/iomgr}/workqueue_posix.h +5 -5
  265. data/src/core/{iomgr → lib/iomgr}/workqueue_windows.c +1 -1
  266. data/src/core/{iomgr → lib/iomgr}/workqueue_windows.h +3 -3
  267. data/src/core/{json → lib/json}/json.c +1 -1
  268. data/src/core/{json → lib/json}/json.h +4 -4
  269. data/src/core/{json → lib/json}/json_common.h +3 -3
  270. data/src/core/{json → lib/json}/json_reader.c +16 -4
  271. data/src/core/{json → lib/json}/json_reader.h +4 -4
  272. data/src/core/{json → lib/json}/json_string.c +4 -4
  273. data/src/core/{json → lib/json}/json_writer.c +1 -1
  274. data/src/core/{json → lib/json}/json_writer.h +4 -4
  275. data/src/core/{profiling → lib/profiling}/basic_timers.c +3 -2
  276. data/src/core/{profiling → lib/profiling}/stap_timers.c +2 -2
  277. data/src/core/{profiling → lib/profiling}/timers.h +3 -3
  278. data/src/core/{security → lib/security}/auth_filters.h +4 -4
  279. data/src/core/{security → lib/security}/b64.c +2 -2
  280. data/src/core/{security → lib/security}/b64.h +4 -4
  281. data/src/core/{security → lib/security}/client_auth_filter.c +16 -16
  282. data/src/core/{security → lib/security}/credentials.c +42 -26
  283. data/src/core/{security → lib/security}/credentials.h +11 -10
  284. data/src/core/{security → lib/security}/credentials_metadata.c +1 -1
  285. data/src/core/{security → lib/security}/credentials_posix.c +3 -3
  286. data/src/core/{security → lib/security}/credentials_win32.c +3 -3
  287. data/src/core/{security → lib/security}/google_default_credentials.c +10 -9
  288. data/src/core/{security → lib/security}/handshake.c +4 -4
  289. data/src/core/{security → lib/security}/handshake.h +6 -6
  290. data/src/core/{security → lib/security}/json_token.c +4 -4
  291. data/src/core/{security → lib/security}/json_token.h +4 -4
  292. data/src/core/{security → lib/security}/jwt_verifier.c +14 -14
  293. data/src/core/{security → lib/security}/jwt_verifier.h +5 -5
  294. data/src/core/{security → lib/security}/secure_endpoint.c +9 -8
  295. data/src/core/{security → lib/security}/secure_endpoint.h +4 -4
  296. data/src/core/{security → lib/security}/security_connector.c +53 -21
  297. data/src/core/{security → lib/security}/security_connector.h +8 -8
  298. data/src/core/{security → lib/security}/security_context.c +5 -5
  299. data/src/core/{security → lib/security}/security_context.h +5 -5
  300. data/src/core/{security → lib/security}/server_auth_filter.c +9 -9
  301. data/src/core/{support → lib/support}/alloc.c +5 -3
  302. data/src/core/{support → lib/support}/avl.c +1 -1
  303. data/src/core/lib/support/backoff.c +76 -0
  304. data/src/core/lib/support/backoff.h +68 -0
  305. data/src/core/{support → lib/support}/block_annotate.h +3 -3
  306. data/src/core/{support → lib/support}/cmdline.c +1 -1
  307. data/src/core/{support → lib/support}/cpu_iphone.c +0 -0
  308. data/src/core/{support → lib/support}/cpu_linux.c +2 -2
  309. data/src/core/{support → lib/support}/cpu_posix.c +2 -2
  310. data/src/core/{support → lib/support}/cpu_windows.c +0 -0
  311. data/src/core/{support → lib/support}/env.h +3 -3
  312. data/src/core/{support → lib/support}/env_linux.c +3 -3
  313. data/src/core/{support → lib/support}/env_posix.c +2 -2
  314. data/src/core/{support → lib/support}/env_win32.c +27 -21
  315. data/src/core/{support → lib/support}/histogram.c +1 -1
  316. data/src/core/{support → lib/support}/host_port.c +1 -1
  317. data/src/core/{support → lib/support}/load_file.c +4 -4
  318. data/src/core/{support → lib/support}/load_file.h +4 -4
  319. data/src/core/{support → lib/support}/log.c +33 -0
  320. data/src/core/{support → lib/support}/log_android.c +2 -2
  321. data/src/core/{support → lib/support}/log_linux.c +6 -5
  322. data/src/core/{support → lib/support}/log_posix.c +3 -3
  323. data/src/core/{support → lib/support}/log_win32.c +8 -22
  324. data/src/core/{support → lib/support}/murmur_hash.c +1 -1
  325. data/src/core/{support → lib/support}/murmur_hash.h +3 -3
  326. data/src/core/{support → lib/support}/slice.c +0 -0
  327. data/src/core/{support → lib/support}/slice_buffer.c +0 -0
  328. data/src/core/{support → lib/support}/stack_lockfree.c +7 -7
  329. data/src/core/{support → lib/support}/stack_lockfree.h +3 -3
  330. data/src/core/{support → lib/support}/string.c +1 -1
  331. data/src/core/{support → lib/support}/string.h +4 -4
  332. data/src/core/{support → lib/support}/string_posix.c +1 -1
  333. data/src/core/{support/string_win32.c → lib/support/string_util_win32.c} +23 -38
  334. data/src/core/lib/support/string_win32.c +83 -0
  335. data/src/core/{support → lib/support}/string_win32.h +3 -3
  336. data/src/core/{support → lib/support}/subprocess_posix.c +3 -3
  337. data/src/core/{support → lib/support}/subprocess_windows.c +3 -3
  338. data/src/core/{support → lib/support}/sync.c +2 -2
  339. data/src/core/{support → lib/support}/sync_posix.c +3 -3
  340. data/src/core/{support → lib/support}/sync_win32.c +1 -1
  341. data/src/core/{support → lib/support}/thd.c +0 -0
  342. data/src/core/{support → lib/support}/thd_internal.h +3 -3
  343. data/src/core/{support → lib/support}/thd_posix.c +4 -3
  344. data/src/core/{support → lib/support}/thd_win32.c +1 -1
  345. data/src/core/{support → lib/support}/time.c +2 -2
  346. data/src/core/{support → lib/support}/time_posix.c +12 -6
  347. data/src/core/{support → lib/support}/time_precise.c +0 -0
  348. data/src/core/{support → lib/support}/time_precise.h +3 -3
  349. data/src/core/{support → lib/support}/time_win32.c +7 -7
  350. data/src/core/{support → lib/support}/tls_pthread.c +0 -0
  351. data/src/core/{support → lib/support}/tmpfile.h +4 -4
  352. data/src/core/lib/support/tmpfile_msys.c +73 -0
  353. data/src/core/{support → lib/support}/tmpfile_posix.c +5 -5
  354. data/src/core/{support → lib/support}/tmpfile_win32.c +5 -5
  355. data/src/core/{support → lib/support}/wrap_memcpy.c +0 -0
  356. data/src/core/{surface → lib/surface}/alarm.c +3 -3
  357. data/src/core/{surface → lib/surface}/api_trace.c +1 -1
  358. data/src/core/{surface → lib/surface}/api_trace.h +4 -4
  359. data/src/core/{surface → lib/surface}/byte_buffer.c +3 -3
  360. data/src/core/{surface → lib/surface}/byte_buffer_reader.c +3 -3
  361. data/src/core/{surface → lib/surface}/call.c +145 -73
  362. data/src/core/{surface → lib/surface}/call.h +14 -7
  363. data/src/core/{surface → lib/surface}/call_details.c +1 -1
  364. data/src/core/{surface → lib/surface}/call_log_batch.c +2 -2
  365. data/src/core/{surface → lib/surface}/call_test_only.h +3 -3
  366. data/src/core/{surface → lib/surface}/channel.c +33 -34
  367. data/src/core/{surface → lib/surface}/channel.h +9 -9
  368. data/src/core/lib/surface/channel_init.c +140 -0
  369. data/src/core/lib/surface/channel_init.h +87 -0
  370. data/src/core/{surface → lib/surface}/channel_ping.c +4 -4
  371. data/src/core/lib/surface/channel_stack_type.c +54 -0
  372. data/src/core/{httpcli/parser.h → lib/surface/channel_stack_type.h} +22 -28
  373. data/src/core/{surface → lib/surface}/completion_queue.c +15 -11
  374. data/src/core/{surface → lib/surface}/completion_queue.h +4 -4
  375. data/src/core/{surface → lib/surface}/event_string.c +2 -2
  376. data/src/core/{surface → lib/surface}/event_string.h +3 -3
  377. data/src/core/lib/surface/init.c +217 -0
  378. data/src/core/{surface → lib/surface}/init.h +4 -3
  379. data/src/core/lib/surface/init_secure.c +89 -0
  380. data/src/core/{surface → lib/surface}/lame_client.c +31 -19
  381. data/src/core/{iomgr/pollset_set_windows.h → lib/surface/lame_client.h} +7 -5
  382. data/src/core/{surface → lib/surface}/metadata_array.c +1 -1
  383. data/src/core/{surface → lib/surface}/server.c +208 -183
  384. data/src/core/{surface → lib/surface}/server.h +6 -11
  385. data/src/core/{surface → lib/surface}/surface_trace.h +5 -5
  386. data/src/core/{surface → lib/surface}/validate_metadata.c +1 -1
  387. data/src/core/{surface → lib/surface}/version.c +2 -2
  388. data/src/core/{transport → lib/transport}/byte_stream.c +1 -1
  389. data/src/core/{transport → lib/transport}/byte_stream.h +4 -4
  390. data/src/core/{transport → lib/transport}/connectivity_state.c +2 -2
  391. data/src/core/{transport → lib/transport}/connectivity_state.h +4 -4
  392. data/src/core/{transport → lib/transport}/metadata.c +71 -19
  393. data/src/core/{transport → lib/transport}/metadata.h +11 -4
  394. data/src/core/{transport → lib/transport}/metadata_batch.c +2 -2
  395. data/src/core/{transport → lib/transport}/metadata_batch.h +4 -4
  396. data/src/core/{transport → lib/transport}/static_metadata.c +100 -32
  397. data/src/core/{transport → lib/transport}/static_metadata.h +58 -58
  398. data/src/core/{transport → lib/transport}/transport.c +25 -5
  399. data/src/core/{transport → lib/transport}/transport.h +41 -16
  400. data/src/core/{transport → lib/transport}/transport_impl.h +8 -5
  401. data/src/core/{transport → lib/transport}/transport_op_string.c +2 -2
  402. data/src/core/{tsi → lib/tsi}/fake_transport_security.c +18 -14
  403. data/src/core/{tsi → lib/tsi}/fake_transport_security.h +4 -4
  404. data/src/core/{tsi → lib/tsi}/ssl_transport_security.c +173 -63
  405. data/src/core/{tsi → lib/tsi}/ssl_transport_security.h +24 -6
  406. data/src/core/{tsi → lib/tsi}/ssl_types.h +3 -3
  407. data/src/core/{tsi → lib/tsi}/transport_security.c +12 -28
  408. data/src/core/{tsi → lib/tsi}/transport_security.h +4 -4
  409. data/src/core/{tsi → lib/tsi}/transport_security_interface.h +12 -3
  410. data/src/core/plugin_registry/grpc_plugin_registry.c +66 -0
  411. data/src/ruby/ext/grpc/extconf.rb +14 -20
  412. data/src/ruby/ext/grpc/rb_byte_buffer.c +2 -3
  413. data/src/ruby/ext/grpc/rb_call.c +37 -4
  414. data/src/ruby/ext/grpc/rb_call_credentials.c +13 -3
  415. data/src/ruby/ext/grpc/rb_channel.c +2 -3
  416. data/src/ruby/ext/grpc/rb_channel_args.c +2 -3
  417. data/src/ruby/ext/grpc/rb_channel_credentials.c +31 -3
  418. data/src/ruby/ext/grpc/rb_completion_queue.c +2 -2
  419. data/src/ruby/ext/grpc/rb_event_thread.c +1 -1
  420. data/src/ruby/ext/grpc/rb_grpc.c +4 -2
  421. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +8 -0
  422. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +14 -2
  423. data/src/ruby/ext/grpc/rb_server.c +2 -3
  424. data/src/ruby/ext/grpc/rb_server_credentials.c +16 -13
  425. data/src/ruby/ext/grpc/rb_signal.c +70 -0
  426. data/src/ruby/ext/grpc/rb_signal.h +39 -0
  427. data/src/ruby/lib/grpc.rb +21 -13
  428. data/src/ruby/lib/grpc/core/time_consts.rb +2 -2
  429. data/src/ruby/lib/grpc/errors.rb +2 -2
  430. data/src/ruby/lib/grpc/generic/active_call.rb +10 -3
  431. data/src/ruby/lib/grpc/generic/bidi_call.rb +2 -2
  432. data/src/ruby/lib/grpc/generic/client_stub.rb +10 -7
  433. data/src/ruby/lib/grpc/generic/rpc_desc.rb +2 -2
  434. data/src/ruby/lib/grpc/generic/rpc_server.rb +21 -61
  435. data/src/ruby/lib/grpc/generic/service.rb +5 -15
  436. data/src/ruby/lib/grpc/grpc.rb +3 -3
  437. data/src/ruby/{bin/interop/interop_server.rb → lib/grpc/signals.rb} +39 -20
  438. data/src/ruby/lib/grpc/version.rb +2 -2
  439. data/src/ruby/pb/generate_proto_ruby.sh +9 -2
  440. data/src/ruby/pb/grpc/health/checker.rb +1 -1
  441. data/src/ruby/pb/grpc/testing/duplicate/echo_duplicate_services.rb +28 -0
  442. data/src/ruby/pb/grpc/testing/metrics.rb +28 -0
  443. data/src/ruby/pb/grpc/testing/metrics_services.rb +27 -0
  444. data/src/ruby/pb/test/client.rb +12 -23
  445. data/src/ruby/pb/test/server.rb +1 -1
  446. data/src/ruby/spec/client_server_spec.rb +1 -1
  447. data/src/ruby/spec/generic/client_stub_spec.rb +18 -17
  448. data/src/ruby/spec/generic/rpc_server_spec.rb +23 -7
  449. data/src/ruby/spec/generic/service_spec.rb +0 -69
  450. data/src/ruby/{bin/interop/interop_client.rb → spec/pb/duplicate/codegen_spec.rb} +41 -21
  451. data/src/ruby/spec/pb/health/checker_spec.rb +1 -1
  452. data/third_party/boringssl/crypto/asn1/a_bitstr.c +184 -176
  453. data/third_party/boringssl/crypto/asn1/a_bool.c +42 -44
  454. data/third_party/boringssl/crypto/asn1/a_bytes.c +236 -245
  455. data/third_party/boringssl/crypto/asn1/a_d2i_fp.c +173 -192
  456. data/third_party/boringssl/crypto/asn1/a_dup.c +43 -35
  457. data/third_party/boringssl/crypto/asn1/a_enum.c +107 -109
  458. data/third_party/boringssl/crypto/asn1/a_gentm.c +180 -181
  459. data/third_party/boringssl/crypto/asn1/a_i2d_fp.c +73 -80
  460. data/third_party/boringssl/crypto/asn1/a_int.c +357 -353
  461. data/third_party/boringssl/crypto/asn1/a_mbstr.c +272 -253
  462. data/third_party/boringssl/crypto/asn1/a_object.c +293 -309
  463. data/third_party/boringssl/crypto/asn1/a_octet.c +13 -6
  464. data/third_party/boringssl/crypto/asn1/a_print.c +54 -52
  465. data/third_party/boringssl/crypto/asn1/a_strnid.c +179 -157
  466. data/third_party/boringssl/crypto/asn1/a_time.c +125 -129
  467. data/third_party/boringssl/crypto/asn1/a_type.c +79 -86
  468. data/third_party/boringssl/crypto/asn1/a_utctm.c +246 -255
  469. data/third_party/boringssl/crypto/asn1/a_utf8.c +159 -135
  470. data/third_party/boringssl/crypto/asn1/asn1_lib.c +361 -368
  471. data/third_party/boringssl/crypto/asn1/asn1_locl.h +11 -11
  472. data/third_party/boringssl/crypto/asn1/asn1_par.c +309 -351
  473. data/third_party/boringssl/crypto/asn1/asn_pack.c +30 -29
  474. data/third_party/boringssl/crypto/asn1/bio_asn1.c +375 -394
  475. data/third_party/boringssl/crypto/asn1/bio_ndef.c +146 -149
  476. data/third_party/boringssl/crypto/asn1/f_enum.c +128 -134
  477. data/third_party/boringssl/crypto/asn1/f_int.c +131 -139
  478. data/third_party/boringssl/crypto/asn1/f_string.c +125 -133
  479. data/third_party/boringssl/crypto/asn1/t_bitst.c +30 -29
  480. data/third_party/boringssl/crypto/asn1/t_pkey.c +45 -47
  481. data/third_party/boringssl/crypto/asn1/tasn_dec.c +1099 -1216
  482. data/third_party/boringssl/crypto/asn1/tasn_enc.c +556 -592
  483. data/third_party/boringssl/crypto/asn1/tasn_fre.c +175 -193
  484. data/third_party/boringssl/crypto/asn1/tasn_new.c +271 -288
  485. data/third_party/boringssl/crypto/asn1/tasn_prn.c +462 -508
  486. data/third_party/boringssl/crypto/asn1/tasn_typ.c +28 -21
  487. data/third_party/boringssl/crypto/asn1/x_bignum.c +62 -52
  488. data/third_party/boringssl/crypto/asn1/x_long.c +101 -86
  489. data/third_party/boringssl/crypto/bio/buffer.c +3 -3
  490. data/third_party/boringssl/crypto/bn/asm/x86_64-gcc.c +8 -68
  491. data/third_party/boringssl/crypto/bn/bn.c +1 -1
  492. data/third_party/boringssl/crypto/bn/bn_asn1.c +9 -22
  493. data/third_party/boringssl/crypto/bn/convert.c +9 -4
  494. data/third_party/boringssl/crypto/bn/div.c +0 -20
  495. data/third_party/boringssl/crypto/bn/exponentiation.c +22 -13
  496. data/third_party/boringssl/crypto/bn/generic.c +6 -242
  497. data/third_party/boringssl/crypto/bn/internal.h +9 -70
  498. data/third_party/boringssl/crypto/bn/montgomery.c +1 -2
  499. data/third_party/boringssl/crypto/bn/mul.c +6 -26
  500. data/third_party/boringssl/crypto/bn/rsaz_exp.c +21 -28
  501. data/third_party/boringssl/crypto/bytestring/asn1_compat.c +51 -0
  502. data/third_party/boringssl/crypto/bytestring/ber.c +128 -87
  503. data/third_party/boringssl/crypto/bytestring/cbb.c +37 -3
  504. data/third_party/boringssl/crypto/bytestring/internal.h +39 -10
  505. data/third_party/boringssl/crypto/chacha/chacha_vec.c +18 -13
  506. data/third_party/boringssl/crypto/cipher/e_aes.c +2 -2
  507. data/third_party/boringssl/crypto/cipher/e_chacha20poly1305.c +4 -9
  508. data/third_party/boringssl/crypto/cipher/tls_cbc.c +39 -10
  509. data/third_party/boringssl/crypto/conf/conf.c +9 -0
  510. data/third_party/boringssl/crypto/cpu-intel.c +1 -1
  511. data/third_party/boringssl/crypto/crypto.c +2 -0
  512. data/third_party/boringssl/crypto/curve25519/curve25519.c +125 -120
  513. data/third_party/boringssl/crypto/curve25519/internal.h +45 -0
  514. data/third_party/boringssl/crypto/curve25519/x25519-x86_64.c +225 -0
  515. data/third_party/boringssl/crypto/dh/check.c +32 -10
  516. data/third_party/boringssl/crypto/dh/dh.c +1 -1
  517. data/third_party/boringssl/crypto/digest/md32_common.h +0 -60
  518. data/third_party/boringssl/crypto/dsa/dsa.c +47 -21
  519. data/third_party/boringssl/crypto/dsa/dsa_asn1.c +249 -64
  520. data/third_party/boringssl/crypto/ec/ec.c +45 -31
  521. data/third_party/boringssl/crypto/ec/ec_asn1.c +315 -382
  522. data/third_party/boringssl/crypto/ec/ec_key.c +1 -4
  523. data/third_party/boringssl/crypto/ec/ec_montgomery.c +0 -9
  524. data/third_party/boringssl/crypto/ec/internal.h +1 -19
  525. data/third_party/boringssl/crypto/ec/oct.c +12 -0
  526. data/third_party/boringssl/crypto/ec/p224-64.c +4 -65
  527. data/third_party/boringssl/crypto/ec/p256-64.c +9 -71
  528. data/third_party/boringssl/crypto/ec/p256-x86_64-table.h +1 -6
  529. data/third_party/boringssl/crypto/ec/p256-x86_64.c +3 -13
  530. data/third_party/boringssl/crypto/ec/simple.c +0 -76
  531. data/third_party/boringssl/crypto/ecdsa/ecdsa.c +1 -1
  532. data/third_party/boringssl/crypto/ecdsa/ecdsa_asn1.c +10 -24
  533. data/third_party/boringssl/crypto/evp/evp.c +4 -3
  534. data/third_party/boringssl/crypto/evp/evp_asn1.c +101 -0
  535. data/third_party/boringssl/crypto/evp/evp_ctx.c +22 -51
  536. data/third_party/boringssl/crypto/evp/internal.h +28 -27
  537. data/third_party/boringssl/crypto/evp/p_dsa_asn1.c +78 -249
  538. data/third_party/boringssl/crypto/evp/p_ec.c +19 -66
  539. data/third_party/boringssl/crypto/evp/p_ec_asn1.c +74 -231
  540. data/third_party/boringssl/crypto/evp/p_rsa.c +90 -13
  541. data/third_party/boringssl/crypto/evp/p_rsa_asn1.c +49 -48
  542. data/third_party/boringssl/crypto/internal.h +16 -1
  543. data/third_party/boringssl/crypto/mem.c +2 -2
  544. data/third_party/boringssl/crypto/modes/ctr.c +2 -1
  545. data/third_party/boringssl/crypto/modes/gcm.c +5 -3
  546. data/third_party/boringssl/crypto/obj/obj_dat.h +6 -3
  547. data/third_party/boringssl/crypto/pem/pem_all.c +83 -102
  548. data/third_party/boringssl/crypto/pem/pem_info.c +286 -309
  549. data/third_party/boringssl/crypto/pem/pem_lib.c +690 -710
  550. data/third_party/boringssl/crypto/pem/pem_oth.c +15 -16
  551. data/third_party/boringssl/crypto/pem/pem_pk8.c +132 -119
  552. data/third_party/boringssl/crypto/pem/pem_pkey.c +144 -220
  553. data/third_party/boringssl/crypto/pem/pem_x509.c +3 -3
  554. data/third_party/boringssl/crypto/pem/pem_xaux.c +5 -4
  555. data/third_party/boringssl/crypto/pkcs8/pkcs8.c +54 -60
  556. data/third_party/boringssl/crypto/poly1305/poly1305_arm.c +3 -1
  557. data/third_party/boringssl/crypto/poly1305/poly1305_vec.c +48 -50
  558. data/third_party/boringssl/crypto/rand/rand.c +2 -0
  559. data/third_party/boringssl/crypto/rsa/blinding.c +8 -48
  560. data/third_party/boringssl/crypto/rsa/internal.h +1 -9
  561. data/third_party/boringssl/crypto/rsa/padding.c +73 -77
  562. data/third_party/boringssl/crypto/rsa/rsa.c +1 -1
  563. data/third_party/boringssl/crypto/rsa/rsa_asn1.c +27 -46
  564. data/third_party/boringssl/crypto/rsa/rsa_impl.c +23 -34
  565. data/third_party/boringssl/crypto/test/scoped_types.h +3 -0
  566. data/third_party/boringssl/crypto/thread_win.c +15 -13
  567. data/third_party/boringssl/crypto/time_support.c +0 -6
  568. data/third_party/boringssl/crypto/x509/a_digest.c +26 -27
  569. data/third_party/boringssl/crypto/x509/a_sign.c +63 -64
  570. data/third_party/boringssl/crypto/x509/a_strex.c +482 -413
  571. data/third_party/boringssl/crypto/x509/a_verify.c +45 -51
  572. data/third_party/boringssl/crypto/x509/asn1_gen.c +715 -769
  573. data/third_party/boringssl/crypto/x509/by_dir.c +355 -393
  574. data/third_party/boringssl/crypto/x509/by_file.c +186 -206
  575. data/third_party/boringssl/crypto/x509/charmap.h +11 -11
  576. data/third_party/boringssl/crypto/x509/i2d_pr.c +21 -22
  577. data/third_party/boringssl/crypto/x509/t_crl.c +50 -51
  578. data/third_party/boringssl/crypto/x509/t_x509.c +414 -406
  579. data/third_party/boringssl/crypto/x509/t_x509a.c +44 -42
  580. data/third_party/boringssl/crypto/x509/vpm_int.h +13 -13
  581. data/third_party/boringssl/crypto/x509/x509_att.c +241 -219
  582. data/third_party/boringssl/crypto/x509/x509_cmp.c +343 -359
  583. data/third_party/boringssl/crypto/x509/x509_d2.c +36 -35
  584. data/third_party/boringssl/crypto/x509/x509_def.c +23 -13
  585. data/third_party/boringssl/crypto/x509/x509_ext.c +75 -75
  586. data/third_party/boringssl/crypto/x509/x509_lu.c +574 -612
  587. data/third_party/boringssl/crypto/x509/x509_obj.c +104 -115
  588. data/third_party/boringssl/crypto/x509/x509_r2x.c +40 -40
  589. data/third_party/boringssl/crypto/x509/x509_req.c +181 -174
  590. data/third_party/boringssl/crypto/x509/x509_set.c +71 -76
  591. data/third_party/boringssl/crypto/x509/x509_trs.c +193 -171
  592. data/third_party/boringssl/crypto/x509/x509_txt.c +135 -138
  593. data/third_party/boringssl/crypto/x509/x509_v3.c +174 -167
  594. data/third_party/boringssl/crypto/x509/x509_vfy.c +2079 -2130
  595. data/third_party/boringssl/crypto/x509/x509_vpm.c +486 -522
  596. data/third_party/boringssl/crypto/x509/x509cset.c +96 -99
  597. data/third_party/boringssl/crypto/x509/x509name.c +280 -275
  598. data/third_party/boringssl/crypto/x509/x509rset.c +15 -14
  599. data/third_party/boringssl/crypto/x509/x509spki.c +62 -60
  600. data/third_party/boringssl/crypto/x509/x509type.c +58 -60
  601. data/third_party/boringssl/crypto/x509/x_algor.c +70 -73
  602. data/third_party/boringssl/crypto/x509/x_all.c +282 -328
  603. data/third_party/boringssl/crypto/x509/x_attrib.c +36 -42
  604. data/third_party/boringssl/crypto/x509/x_crl.c +397 -418
  605. data/third_party/boringssl/crypto/x509/x_exten.c +5 -5
  606. data/third_party/boringssl/crypto/x509/x_info.c +30 -27
  607. data/third_party/boringssl/crypto/x509/x_name.c +387 -388
  608. data/third_party/boringssl/crypto/x509/x_pkey.c +32 -29
  609. data/third_party/boringssl/crypto/x509/x_pubkey.c +261 -280
  610. data/third_party/boringssl/crypto/x509/x_req.c +30 -33
  611. data/third_party/boringssl/crypto/x509/x_sig.c +2 -2
  612. data/third_party/boringssl/crypto/x509/x_spki.c +9 -7
  613. data/third_party/boringssl/crypto/x509/x_val.c +2 -2
  614. data/third_party/boringssl/crypto/x509/x_x509.c +120 -119
  615. data/third_party/boringssl/crypto/x509/x_x509a.c +99 -91
  616. data/third_party/boringssl/crypto/x509v3/ext_dat.h +57 -51
  617. data/third_party/boringssl/crypto/x509v3/pcy_cache.c +199 -214
  618. data/third_party/boringssl/crypto/x509v3/pcy_data.c +57 -64
  619. data/third_party/boringssl/crypto/x509v3/pcy_int.h +95 -90
  620. data/third_party/boringssl/crypto/x509v3/pcy_lib.c +86 -87
  621. data/third_party/boringssl/crypto/x509v3/pcy_map.c +61 -64
  622. data/third_party/boringssl/crypto/x509v3/pcy_node.c +108 -117
  623. data/third_party/boringssl/crypto/x509v3/pcy_tree.c +676 -724
  624. data/third_party/boringssl/crypto/x509v3/v3_akey.c +128 -136
  625. data/third_party/boringssl/crypto/x509v3/v3_akeya.c +7 -6
  626. data/third_party/boringssl/crypto/x509v3/v3_alt.c +499 -507
  627. data/third_party/boringssl/crypto/x509v3/v3_bcons.c +54 -47
  628. data/third_party/boringssl/crypto/x509v3/v3_bitst.c +67 -67
  629. data/third_party/boringssl/crypto/x509v3/v3_conf.c +330 -328
  630. data/third_party/boringssl/crypto/x509v3/v3_cpols.c +354 -338
  631. data/third_party/boringssl/crypto/x509v3/v3_crld.c +441 -496
  632. data/third_party/boringssl/crypto/x509v3/v3_enum.c +35 -33
  633. data/third_party/boringssl/crypto/x509v3/v3_extku.c +66 -63
  634. data/third_party/boringssl/crypto/x509v3/v3_genn.c +157 -159
  635. data/third_party/boringssl/crypto/x509v3/v3_ia5.c +45 -43
  636. data/third_party/boringssl/crypto/x509v3/v3_info.c +124 -112
  637. data/third_party/boringssl/crypto/x509v3/v3_int.c +30 -26
  638. data/third_party/boringssl/crypto/x509v3/v3_lib.c +231 -204
  639. data/third_party/boringssl/crypto/x509v3/v3_ncons.c +353 -381
  640. data/third_party/boringssl/crypto/x509v3/v3_pci.c +252 -270
  641. data/third_party/boringssl/crypto/x509v3/v3_pcia.c +9 -8
  642. data/third_party/boringssl/crypto/x509v3/v3_pcons.c +58 -61
  643. data/third_party/boringssl/crypto/x509v3/v3_pku.c +35 -34
  644. data/third_party/boringssl/crypto/x509v3/v3_pmaps.c +72 -74
  645. data/third_party/boringssl/crypto/x509v3/v3_prn.c +146 -121
  646. data/third_party/boringssl/crypto/x509v3/v3_purp.c +651 -582
  647. data/third_party/boringssl/crypto/x509v3/v3_skey.c +76 -72
  648. data/third_party/boringssl/crypto/x509v3/v3_sxnet.c +139 -131
  649. data/third_party/boringssl/crypto/x509v3/v3_utl.c +1072 -1068
  650. data/third_party/boringssl/include/openssl/asn1.h +40 -38
  651. data/third_party/boringssl/include/openssl/base.h +10 -1
  652. data/third_party/boringssl/include/openssl/bio.h +10 -11
  653. data/third_party/boringssl/include/openssl/bn.h +12 -9
  654. data/third_party/boringssl/include/openssl/buf.h +1 -1
  655. data/third_party/boringssl/include/openssl/bytestring.h +29 -0
  656. data/third_party/boringssl/include/openssl/conf.h +25 -0
  657. data/third_party/boringssl/include/openssl/crypto.h +6 -1
  658. data/third_party/boringssl/include/openssl/curve25519.h +6 -3
  659. data/third_party/boringssl/include/openssl/dh.h +7 -3
  660. data/third_party/boringssl/include/openssl/dsa.h +108 -51
  661. data/third_party/boringssl/include/openssl/ec.h +46 -21
  662. data/third_party/boringssl/include/openssl/ec_key.h +78 -42
  663. data/third_party/boringssl/include/openssl/ecdsa.h +4 -4
  664. data/third_party/boringssl/include/openssl/err.h +3 -2
  665. data/third_party/boringssl/include/openssl/evp.h +120 -37
  666. data/third_party/boringssl/include/openssl/mem.h +4 -13
  667. data/third_party/boringssl/include/openssl/obj_mac.h +4 -0
  668. data/third_party/boringssl/include/openssl/pem.h +0 -9
  669. data/third_party/boringssl/include/openssl/pkcs8.h +6 -2
  670. data/third_party/boringssl/include/openssl/rand.h +3 -0
  671. data/third_party/boringssl/include/openssl/rsa.h +42 -42
  672. data/third_party/boringssl/include/openssl/ssl.h +115 -41
  673. data/third_party/boringssl/include/openssl/stack.h +0 -3
  674. data/third_party/boringssl/include/openssl/stack_macros.h +0 -256
  675. data/third_party/boringssl/include/openssl/tls1.h +1 -1
  676. data/third_party/boringssl/include/openssl/x509.h +0 -2
  677. data/third_party/boringssl/include/openssl/x509_vfy.h +5 -0
  678. data/third_party/boringssl/ssl/d1_both.c +102 -101
  679. data/third_party/boringssl/ssl/d1_clnt.c +145 -150
  680. data/third_party/boringssl/ssl/d1_lib.c +63 -62
  681. data/third_party/boringssl/ssl/d1_pkt.c +73 -71
  682. data/third_party/boringssl/ssl/d1_srvr.c +116 -125
  683. data/third_party/boringssl/ssl/dtls_record.c +3 -3
  684. data/third_party/boringssl/ssl/internal.h +210 -208
  685. data/third_party/boringssl/ssl/pqueue/pqueue.c +2 -2
  686. data/third_party/boringssl/ssl/s3_both.c +116 -130
  687. data/third_party/boringssl/ssl/s3_clnt.c +589 -740
  688. data/third_party/boringssl/ssl/s3_enc.c +52 -151
  689. data/third_party/boringssl/ssl/s3_lib.c +70 -76
  690. data/third_party/boringssl/ssl/s3_pkt.c +105 -144
  691. data/third_party/boringssl/ssl/s3_srvr.c +542 -806
  692. data/third_party/boringssl/ssl/ssl_aead_ctx.c +1 -1
  693. data/third_party/boringssl/ssl/ssl_cert.c +2 -2
  694. data/third_party/boringssl/ssl/ssl_cipher.c +7 -3
  695. data/third_party/boringssl/ssl/ssl_ecdh.c +374 -0
  696. data/third_party/boringssl/ssl/ssl_lib.c +260 -221
  697. data/third_party/boringssl/ssl/ssl_session.c +17 -17
  698. data/third_party/boringssl/ssl/t1_enc.c +128 -273
  699. data/third_party/boringssl/ssl/t1_lib.c +134 -258
  700. data/third_party/boringssl/ssl/test/test_config.h +2 -0
  701. data/third_party/boringssl/ssl/tls_record.c +52 -15
  702. metadata +385 -359
  703. data/src/core/channel/client_uchannel.c +0 -243
  704. data/src/core/channel/client_uchannel.h +0 -60
  705. data/src/core/channel/connected_channel.h +0 -51
  706. data/src/core/client_config/lb_policies/pick_first.h +0 -43
  707. data/src/core/client_config/resolvers/dns_resolver.h +0 -42
  708. data/src/core/client_config/subchannel_factory.h +0 -66
  709. data/src/core/httpcli/parser.c +0 -211
  710. data/src/core/iomgr/fd_posix.c +0 -451
  711. data/src/core/iomgr/fd_posix.h +0 -192
  712. data/src/core/iomgr/pollset_multipoller_with_epoll.c +0 -324
  713. data/src/core/iomgr/pollset_multipoller_with_poll_posix.c +0 -234
  714. data/src/core/iomgr/pollset_posix.c +0 -633
  715. data/src/core/iomgr/pollset_posix.h +0 -153
  716. data/src/core/iomgr/pollset_set_posix.c +0 -202
  717. data/src/core/iomgr/pollset_set_posix.h +0 -45
  718. data/src/core/surface/init.c +0 -174
  719. data/src/core/surface/init_secure.c +0 -42
  720. data/src/core/surface/server_create.c +0 -48
  721. data/src/core/transport/chttp2/huffsyms.c +0 -297
  722. data/src/ruby/bin/grpc_ruby_interop_client +0 -33
  723. data/src/ruby/bin/grpc_ruby_interop_server +0 -33
  724. data/third_party/boringssl/crypto/dsa/internal.h +0 -78
@@ -61,635 +61,599 @@
61
61
  #include <openssl/asn1t.h>
62
62
  #include <openssl/mem.h>
63
63
 
64
-
65
64
  static int asn1_i2d_ex_primitive(ASN1_VALUE **pval, unsigned char **out,
66
- const ASN1_ITEM *it,
67
- int tag, int aclass);
65
+ const ASN1_ITEM *it, int tag, int aclass);
68
66
  static int asn1_set_seq_out(STACK_OF(ASN1_VALUE) *sk, unsigned char **out,
69
- int skcontlen, const ASN1_ITEM *item,
70
- int do_sort, int iclass);
67
+ int skcontlen, const ASN1_ITEM *item,
68
+ int do_sort, int iclass);
71
69
  static int asn1_template_ex_i2d(ASN1_VALUE **pval, unsigned char **out,
72
- const ASN1_TEMPLATE *tt,
73
- int tag, int aclass);
70
+ const ASN1_TEMPLATE *tt, int tag, int aclass);
74
71
  static int asn1_item_flags_i2d(ASN1_VALUE *val, unsigned char **out,
75
- const ASN1_ITEM *it, int flags);
72
+ const ASN1_ITEM *it, int flags);
76
73
 
77
- /* Top level i2d equivalents: the 'ndef' variant instructs the encoder
78
- * to use indefinite length constructed encoding, where appropriate
74
+ /*
75
+ * Top level i2d equivalents: the 'ndef' variant instructs the encoder to use
76
+ * indefinite length constructed encoding, where appropriate
79
77
  */
80
78
 
81
79
  int ASN1_item_ndef_i2d(ASN1_VALUE *val, unsigned char **out,
82
- const ASN1_ITEM *it)
83
- {
84
- return asn1_item_flags_i2d(val, out, it, ASN1_TFLG_NDEF);
85
- }
80
+ const ASN1_ITEM *it)
81
+ {
82
+ return asn1_item_flags_i2d(val, out, it, ASN1_TFLG_NDEF);
83
+ }
86
84
 
87
85
  int ASN1_item_i2d(ASN1_VALUE *val, unsigned char **out, const ASN1_ITEM *it)
88
- {
89
- return asn1_item_flags_i2d(val, out, it, 0);
90
- }
86
+ {
87
+ return asn1_item_flags_i2d(val, out, it, 0);
88
+ }
91
89
 
92
- /* Encode an ASN1 item, this is use by the
93
- * standard 'i2d' function. 'out' points to
94
- * a buffer to output the data to.
95
- *
96
- * The new i2d has one additional feature. If the output
97
- * buffer is NULL (i.e. *out == NULL) then a buffer is
90
+ /*
91
+ * Encode an ASN1 item, this is use by the standard 'i2d' function. 'out'
92
+ * points to a buffer to output the data to. The new i2d has one additional
93
+ * feature. If the output buffer is NULL (i.e. *out == NULL) then a buffer is
98
94
  * allocated and populated with the encoding.
99
95
  */
100
96
 
101
97
  static int asn1_item_flags_i2d(ASN1_VALUE *val, unsigned char **out,
102
- const ASN1_ITEM *it, int flags)
103
- {
104
- if (out && !*out)
105
- {
106
- unsigned char *p, *buf;
107
- int len;
108
- len = ASN1_item_ex_i2d(&val, NULL, it, -1, flags);
109
- if (len <= 0)
110
- return len;
111
- buf = OPENSSL_malloc(len);
112
- if (!buf)
113
- return -1;
114
- p = buf;
115
- ASN1_item_ex_i2d(&val, &p, it, -1, flags);
116
- *out = buf;
117
- return len;
118
- }
119
-
120
- return ASN1_item_ex_i2d(&val, out, it, -1, flags);
121
- }
122
-
123
- /* Encode an item, taking care of IMPLICIT tagging (if any).
124
- * This function performs the normal item handling: it can be
125
- * used in external types.
98
+ const ASN1_ITEM *it, int flags)
99
+ {
100
+ if (out && !*out) {
101
+ unsigned char *p, *buf;
102
+ int len;
103
+ len = ASN1_item_ex_i2d(&val, NULL, it, -1, flags);
104
+ if (len <= 0)
105
+ return len;
106
+ buf = OPENSSL_malloc(len);
107
+ if (!buf)
108
+ return -1;
109
+ p = buf;
110
+ ASN1_item_ex_i2d(&val, &p, it, -1, flags);
111
+ *out = buf;
112
+ return len;
113
+ }
114
+
115
+ return ASN1_item_ex_i2d(&val, out, it, -1, flags);
116
+ }
117
+
118
+ /*
119
+ * Encode an item, taking care of IMPLICIT tagging (if any). This function
120
+ * performs the normal item handling: it can be used in external types.
126
121
  */
127
122
 
128
123
  int ASN1_item_ex_i2d(ASN1_VALUE **pval, unsigned char **out,
129
- const ASN1_ITEM *it, int tag, int aclass)
130
- {
131
- const ASN1_TEMPLATE *tt = NULL;
132
- unsigned char *p = NULL;
133
- int i, seqcontlen, seqlen, ndef = 1;
134
- const ASN1_COMPAT_FUNCS *cf;
135
- const ASN1_EXTERN_FUNCS *ef;
136
- const ASN1_AUX *aux = it->funcs;
137
- ASN1_aux_cb *asn1_cb = 0;
138
-
139
- if ((it->itype != ASN1_ITYPE_PRIMITIVE) && !*pval)
140
- return 0;
141
-
142
- if (aux && aux->asn1_cb)
143
- asn1_cb = aux->asn1_cb;
144
-
145
- switch(it->itype)
146
- {
147
-
148
- case ASN1_ITYPE_PRIMITIVE:
149
- if (it->templates)
150
- return asn1_template_ex_i2d(pval, out, it->templates,
151
- tag, aclass);
152
- return asn1_i2d_ex_primitive(pval, out, it, tag, aclass);
153
- break;
154
-
155
- case ASN1_ITYPE_MSTRING:
156
- return asn1_i2d_ex_primitive(pval, out, it, -1, aclass);
157
-
158
- case ASN1_ITYPE_CHOICE:
159
- if (asn1_cb && !asn1_cb(ASN1_OP_I2D_PRE, pval, it, NULL))
160
- return 0;
161
- i = asn1_get_choice_selector(pval, it);
162
- if ((i >= 0) && (i < it->tcount))
163
- {
164
- ASN1_VALUE **pchval;
165
- const ASN1_TEMPLATE *chtt;
166
- chtt = it->templates + i;
167
- pchval = asn1_get_field_ptr(pval, chtt);
168
- return asn1_template_ex_i2d(pchval, out, chtt,
169
- -1, aclass);
170
- }
171
- /* Fixme: error condition if selector out of range */
172
- if (asn1_cb && !asn1_cb(ASN1_OP_I2D_POST, pval, it, NULL))
173
- return 0;
174
- break;
175
-
176
- case ASN1_ITYPE_EXTERN:
177
- /* If new style i2d it does all the work */
178
- ef = it->funcs;
179
- return ef->asn1_ex_i2d(pval, out, it, tag, aclass);
180
-
181
- case ASN1_ITYPE_COMPAT:
182
- /* old style hackery... */
183
- cf = it->funcs;
184
- if (out)
185
- p = *out;
186
- i = cf->asn1_i2d(*pval, out);
187
- /* Fixup for IMPLICIT tag: note this messes up for tags > 30,
188
- * but so did the old code. Tags > 30 are very rare anyway.
189
- */
190
- if (out && (tag != -1))
191
- *p = aclass | tag | (*p & V_ASN1_CONSTRUCTED);
192
- return i;
193
-
194
- case ASN1_ITYPE_NDEF_SEQUENCE:
195
- /* Use indefinite length constructed if requested */
196
- if (aclass & ASN1_TFLG_NDEF) ndef = 2;
197
- /* fall through */
198
-
199
- case ASN1_ITYPE_SEQUENCE:
200
- i = asn1_enc_restore(&seqcontlen, out, pval, it);
201
- /* An error occurred */
202
- if (i < 0)
203
- return 0;
204
- /* We have a valid cached encoding... */
205
- if (i > 0)
206
- return seqcontlen;
207
- /* Otherwise carry on */
208
- seqcontlen = 0;
209
- /* If no IMPLICIT tagging set to SEQUENCE, UNIVERSAL */
210
- if (tag == -1)
211
- {
212
- tag = V_ASN1_SEQUENCE;
213
- /* Retain any other flags in aclass */
214
- aclass = (aclass & ~ASN1_TFLG_TAG_CLASS)
215
- | V_ASN1_UNIVERSAL;
216
- }
217
- if (asn1_cb && !asn1_cb(ASN1_OP_I2D_PRE, pval, it, NULL))
218
- return 0;
219
- /* First work out sequence content length */
220
- for (i = 0, tt = it->templates; i < it->tcount; tt++, i++)
221
- {
222
- const ASN1_TEMPLATE *seqtt;
223
- ASN1_VALUE **pseqval;
224
- seqtt = asn1_do_adb(pval, tt, 1);
225
- if (!seqtt)
226
- return 0;
227
- pseqval = asn1_get_field_ptr(pval, seqtt);
228
- /* FIXME: check for errors in enhanced version */
229
- seqcontlen += asn1_template_ex_i2d(pseqval, NULL, seqtt,
230
- -1, aclass);
231
- }
232
-
233
- seqlen = ASN1_object_size(ndef, seqcontlen, tag);
234
- if (!out)
235
- return seqlen;
236
- /* Output SEQUENCE header */
237
- ASN1_put_object(out, ndef, seqcontlen, tag, aclass);
238
- for (i = 0, tt = it->templates; i < it->tcount; tt++, i++)
239
- {
240
- const ASN1_TEMPLATE *seqtt;
241
- ASN1_VALUE **pseqval;
242
- seqtt = asn1_do_adb(pval, tt, 1);
243
- if (!seqtt)
244
- return 0;
245
- pseqval = asn1_get_field_ptr(pval, seqtt);
246
- /* FIXME: check for errors in enhanced version */
247
- asn1_template_ex_i2d(pseqval, out, seqtt, -1, aclass);
248
- }
249
- if (ndef == 2)
250
- ASN1_put_eoc(out);
251
- if (asn1_cb && !asn1_cb(ASN1_OP_I2D_POST, pval, it, NULL))
252
- return 0;
253
- return seqlen;
254
-
255
- default:
256
- return 0;
257
-
258
- }
259
- return 0;
260
- }
124
+ const ASN1_ITEM *it, int tag, int aclass)
125
+ {
126
+ const ASN1_TEMPLATE *tt = NULL;
127
+ unsigned char *p = NULL;
128
+ int i, seqcontlen, seqlen, ndef = 1;
129
+ const ASN1_COMPAT_FUNCS *cf;
130
+ const ASN1_EXTERN_FUNCS *ef;
131
+ const ASN1_AUX *aux = it->funcs;
132
+ ASN1_aux_cb *asn1_cb = 0;
133
+
134
+ if ((it->itype != ASN1_ITYPE_PRIMITIVE) && !*pval)
135
+ return 0;
136
+
137
+ if (aux && aux->asn1_cb)
138
+ asn1_cb = aux->asn1_cb;
139
+
140
+ switch (it->itype) {
141
+
142
+ case ASN1_ITYPE_PRIMITIVE:
143
+ if (it->templates)
144
+ return asn1_template_ex_i2d(pval, out, it->templates,
145
+ tag, aclass);
146
+ return asn1_i2d_ex_primitive(pval, out, it, tag, aclass);
147
+ break;
148
+
149
+ case ASN1_ITYPE_MSTRING:
150
+ return asn1_i2d_ex_primitive(pval, out, it, -1, aclass);
151
+
152
+ case ASN1_ITYPE_CHOICE:
153
+ if (asn1_cb && !asn1_cb(ASN1_OP_I2D_PRE, pval, it, NULL))
154
+ return 0;
155
+ i = asn1_get_choice_selector(pval, it);
156
+ if ((i >= 0) && (i < it->tcount)) {
157
+ ASN1_VALUE **pchval;
158
+ const ASN1_TEMPLATE *chtt;
159
+ chtt = it->templates + i;
160
+ pchval = asn1_get_field_ptr(pval, chtt);
161
+ return asn1_template_ex_i2d(pchval, out, chtt, -1, aclass);
162
+ }
163
+ /* Fixme: error condition if selector out of range */
164
+ if (asn1_cb && !asn1_cb(ASN1_OP_I2D_POST, pval, it, NULL))
165
+ return 0;
166
+ break;
167
+
168
+ case ASN1_ITYPE_EXTERN:
169
+ /* If new style i2d it does all the work */
170
+ ef = it->funcs;
171
+ return ef->asn1_ex_i2d(pval, out, it, tag, aclass);
172
+
173
+ case ASN1_ITYPE_COMPAT:
174
+ /* old style hackery... */
175
+ cf = it->funcs;
176
+ if (out)
177
+ p = *out;
178
+ i = cf->asn1_i2d(*pval, out);
179
+ /*
180
+ * Fixup for IMPLICIT tag: note this messes up for tags > 30, but so
181
+ * did the old code. Tags > 30 are very rare anyway.
182
+ */
183
+ if (out && (tag != -1))
184
+ *p = aclass | tag | (*p & V_ASN1_CONSTRUCTED);
185
+ return i;
186
+
187
+ case ASN1_ITYPE_NDEF_SEQUENCE:
188
+ /* Use indefinite length constructed if requested */
189
+ if (aclass & ASN1_TFLG_NDEF)
190
+ ndef = 2;
191
+ /* fall through */
192
+
193
+ case ASN1_ITYPE_SEQUENCE:
194
+ i = asn1_enc_restore(&seqcontlen, out, pval, it);
195
+ /* An error occurred */
196
+ if (i < 0)
197
+ return 0;
198
+ /* We have a valid cached encoding... */
199
+ if (i > 0)
200
+ return seqcontlen;
201
+ /* Otherwise carry on */
202
+ seqcontlen = 0;
203
+ /* If no IMPLICIT tagging set to SEQUENCE, UNIVERSAL */
204
+ if (tag == -1) {
205
+ tag = V_ASN1_SEQUENCE;
206
+ /* Retain any other flags in aclass */
207
+ aclass = (aclass & ~ASN1_TFLG_TAG_CLASS)
208
+ | V_ASN1_UNIVERSAL;
209
+ }
210
+ if (asn1_cb && !asn1_cb(ASN1_OP_I2D_PRE, pval, it, NULL))
211
+ return 0;
212
+ /* First work out sequence content length */
213
+ for (i = 0, tt = it->templates; i < it->tcount; tt++, i++) {
214
+ const ASN1_TEMPLATE *seqtt;
215
+ ASN1_VALUE **pseqval;
216
+ seqtt = asn1_do_adb(pval, tt, 1);
217
+ if (!seqtt)
218
+ return 0;
219
+ pseqval = asn1_get_field_ptr(pval, seqtt);
220
+ /* FIXME: check for errors in enhanced version */
221
+ seqcontlen += asn1_template_ex_i2d(pseqval, NULL, seqtt,
222
+ -1, aclass);
223
+ }
224
+
225
+ seqlen = ASN1_object_size(ndef, seqcontlen, tag);
226
+ if (!out)
227
+ return seqlen;
228
+ /* Output SEQUENCE header */
229
+ ASN1_put_object(out, ndef, seqcontlen, tag, aclass);
230
+ for (i = 0, tt = it->templates; i < it->tcount; tt++, i++) {
231
+ const ASN1_TEMPLATE *seqtt;
232
+ ASN1_VALUE **pseqval;
233
+ seqtt = asn1_do_adb(pval, tt, 1);
234
+ if (!seqtt)
235
+ return 0;
236
+ pseqval = asn1_get_field_ptr(pval, seqtt);
237
+ /* FIXME: check for errors in enhanced version */
238
+ asn1_template_ex_i2d(pseqval, out, seqtt, -1, aclass);
239
+ }
240
+ if (ndef == 2)
241
+ ASN1_put_eoc(out);
242
+ if (asn1_cb && !asn1_cb(ASN1_OP_I2D_POST, pval, it, NULL))
243
+ return 0;
244
+ return seqlen;
245
+
246
+ default:
247
+ return 0;
248
+
249
+ }
250
+ return 0;
251
+ }
261
252
 
262
253
  int ASN1_template_i2d(ASN1_VALUE **pval, unsigned char **out,
263
- const ASN1_TEMPLATE *tt)
264
- {
265
- return asn1_template_ex_i2d(pval, out, tt, -1, 0);
266
- }
254
+ const ASN1_TEMPLATE *tt)
255
+ {
256
+ return asn1_template_ex_i2d(pval, out, tt, -1, 0);
257
+ }
267
258
 
268
259
  static int asn1_template_ex_i2d(ASN1_VALUE **pval, unsigned char **out,
269
- const ASN1_TEMPLATE *tt, int tag, int iclass)
270
- {
271
- int i, ret, flags, ttag, tclass, ndef;
272
- size_t j;
273
- flags = tt->flags;
274
- /* Work out tag and class to use: tagging may come
275
- * either from the template or the arguments, not both
276
- * because this would create ambiguity. Additionally
277
- * the iclass argument may contain some additional flags
278
- * which should be noted and passed down to other levels.
279
- */
280
- if (flags & ASN1_TFLG_TAG_MASK)
281
- {
282
- /* Error if argument and template tagging */
283
- if (tag != -1)
284
- /* FIXME: error code here */
285
- return -1;
286
- /* Get tagging from template */
287
- ttag = tt->tag;
288
- tclass = flags & ASN1_TFLG_TAG_CLASS;
289
- }
290
- else if (tag != -1)
291
- {
292
- /* No template tagging, get from arguments */
293
- ttag = tag;
294
- tclass = iclass & ASN1_TFLG_TAG_CLASS;
295
- }
296
- else
297
- {
298
- ttag = -1;
299
- tclass = 0;
300
- }
301
- /*
302
- * Remove any class mask from iflag.
303
- */
304
- iclass &= ~ASN1_TFLG_TAG_CLASS;
305
-
306
- /* At this point 'ttag' contains the outer tag to use,
307
- * 'tclass' is the class and iclass is any flags passed
308
- * to this function.
309
- */
310
-
311
- /* if template and arguments require ndef, use it */
312
- if ((flags & ASN1_TFLG_NDEF) && (iclass & ASN1_TFLG_NDEF))
313
- ndef = 2;
314
- else ndef = 1;
315
-
316
- if (flags & ASN1_TFLG_SK_MASK)
317
- {
318
- /* SET OF, SEQUENCE OF */
319
- STACK_OF(ASN1_VALUE) *sk = (STACK_OF(ASN1_VALUE) *)*pval;
320
- int isset, sktag, skaclass;
321
- int skcontlen, sklen;
322
- ASN1_VALUE *skitem;
323
-
324
- if (!*pval)
325
- return 0;
326
-
327
- if (flags & ASN1_TFLG_SET_OF)
328
- {
329
- isset = 1;
330
- /* 2 means we reorder */
331
- if (flags & ASN1_TFLG_SEQUENCE_OF)
332
- isset = 2;
333
- }
334
- else isset = 0;
335
-
336
- /* Work out inner tag value: if EXPLICIT
337
- * or no tagging use underlying type.
338
- */
339
- if ((ttag != -1) && !(flags & ASN1_TFLG_EXPTAG))
340
- {
341
- sktag = ttag;
342
- skaclass = tclass;
343
- }
344
- else
345
- {
346
- skaclass = V_ASN1_UNIVERSAL;
347
- if (isset)
348
- sktag = V_ASN1_SET;
349
- else sktag = V_ASN1_SEQUENCE;
350
- }
351
-
352
- /* Determine total length of items */
353
- skcontlen = 0;
354
- for (j = 0; j < sk_ASN1_VALUE_num(sk); j++)
355
- {
356
- skitem = sk_ASN1_VALUE_value(sk, j);
357
- skcontlen += ASN1_item_ex_i2d(&skitem, NULL,
358
- ASN1_ITEM_ptr(tt->item),
359
- -1, iclass);
360
- }
361
- sklen = ASN1_object_size(ndef, skcontlen, sktag);
362
- /* If EXPLICIT need length of surrounding tag */
363
- if (flags & ASN1_TFLG_EXPTAG)
364
- ret = ASN1_object_size(ndef, sklen, ttag);
365
- else ret = sklen;
366
-
367
- if (!out)
368
- return ret;
369
-
370
- /* Now encode this lot... */
371
- /* EXPLICIT tag */
372
- if (flags & ASN1_TFLG_EXPTAG)
373
- ASN1_put_object(out, ndef, sklen, ttag, tclass);
374
- /* SET or SEQUENCE and IMPLICIT tag */
375
- ASN1_put_object(out, ndef, skcontlen, sktag, skaclass);
376
- /* And the stuff itself */
377
- asn1_set_seq_out(sk, out, skcontlen, ASN1_ITEM_ptr(tt->item),
378
- isset, iclass);
379
- if (ndef == 2)
380
- {
381
- ASN1_put_eoc(out);
382
- if (flags & ASN1_TFLG_EXPTAG)
383
- ASN1_put_eoc(out);
384
- }
385
-
386
- return ret;
387
- }
388
-
389
- if (flags & ASN1_TFLG_EXPTAG)
390
- {
391
- /* EXPLICIT tagging */
392
- /* Find length of tagged item */
393
- i = ASN1_item_ex_i2d(pval, NULL, ASN1_ITEM_ptr(tt->item),
394
- -1, iclass);
395
- if (!i)
396
- return 0;
397
- /* Find length of EXPLICIT tag */
398
- ret = ASN1_object_size(ndef, i, ttag);
399
- if (out)
400
- {
401
- /* Output tag and item */
402
- ASN1_put_object(out, ndef, i, ttag, tclass);
403
- ASN1_item_ex_i2d(pval, out, ASN1_ITEM_ptr(tt->item),
404
- -1, iclass);
405
- if (ndef == 2)
406
- ASN1_put_eoc(out);
407
- }
408
- return ret;
409
- }
410
-
411
- /* Either normal or IMPLICIT tagging: combine class and flags */
412
- return ASN1_item_ex_i2d(pval, out, ASN1_ITEM_ptr(tt->item),
413
- ttag, tclass | iclass);
260
+ const ASN1_TEMPLATE *tt, int tag, int iclass)
261
+ {
262
+ int i, ret, flags, ttag, tclass, ndef;
263
+ size_t j;
264
+ flags = tt->flags;
265
+ /*
266
+ * Work out tag and class to use: tagging may come either from the
267
+ * template or the arguments, not both because this would create
268
+ * ambiguity. Additionally the iclass argument may contain some
269
+ * additional flags which should be noted and passed down to other
270
+ * levels.
271
+ */
272
+ if (flags & ASN1_TFLG_TAG_MASK) {
273
+ /* Error if argument and template tagging */
274
+ if (tag != -1)
275
+ /* FIXME: error code here */
276
+ return -1;
277
+ /* Get tagging from template */
278
+ ttag = tt->tag;
279
+ tclass = flags & ASN1_TFLG_TAG_CLASS;
280
+ } else if (tag != -1) {
281
+ /* No template tagging, get from arguments */
282
+ ttag = tag;
283
+ tclass = iclass & ASN1_TFLG_TAG_CLASS;
284
+ } else {
285
+ ttag = -1;
286
+ tclass = 0;
287
+ }
288
+ /*
289
+ * Remove any class mask from iflag.
290
+ */
291
+ iclass &= ~ASN1_TFLG_TAG_CLASS;
292
+
293
+ /*
294
+ * At this point 'ttag' contains the outer tag to use, 'tclass' is the
295
+ * class and iclass is any flags passed to this function.
296
+ */
297
+
298
+ /* if template and arguments require ndef, use it */
299
+ if ((flags & ASN1_TFLG_NDEF) && (iclass & ASN1_TFLG_NDEF))
300
+ ndef = 2;
301
+ else
302
+ ndef = 1;
303
+
304
+ if (flags & ASN1_TFLG_SK_MASK) {
305
+ /* SET OF, SEQUENCE OF */
306
+ STACK_OF(ASN1_VALUE) *sk = (STACK_OF(ASN1_VALUE) *)*pval;
307
+ int isset, sktag, skaclass;
308
+ int skcontlen, sklen;
309
+ ASN1_VALUE *skitem;
310
+
311
+ if (!*pval)
312
+ return 0;
313
+
314
+ if (flags & ASN1_TFLG_SET_OF) {
315
+ isset = 1;
316
+ /* 2 means we reorder */
317
+ if (flags & ASN1_TFLG_SEQUENCE_OF)
318
+ isset = 2;
319
+ } else
320
+ isset = 0;
321
+
322
+ /*
323
+ * Work out inner tag value: if EXPLICIT or no tagging use underlying
324
+ * type.
325
+ */
326
+ if ((ttag != -1) && !(flags & ASN1_TFLG_EXPTAG)) {
327
+ sktag = ttag;
328
+ skaclass = tclass;
329
+ } else {
330
+ skaclass = V_ASN1_UNIVERSAL;
331
+ if (isset)
332
+ sktag = V_ASN1_SET;
333
+ else
334
+ sktag = V_ASN1_SEQUENCE;
335
+ }
336
+
337
+ /* Determine total length of items */
338
+ skcontlen = 0;
339
+ for (j = 0; j < sk_ASN1_VALUE_num(sk); j++) {
340
+ skitem = sk_ASN1_VALUE_value(sk, j);
341
+ skcontlen += ASN1_item_ex_i2d(&skitem, NULL,
342
+ ASN1_ITEM_ptr(tt->item),
343
+ -1, iclass);
344
+ }
345
+ sklen = ASN1_object_size(ndef, skcontlen, sktag);
346
+ /* If EXPLICIT need length of surrounding tag */
347
+ if (flags & ASN1_TFLG_EXPTAG)
348
+ ret = ASN1_object_size(ndef, sklen, ttag);
349
+ else
350
+ ret = sklen;
351
+
352
+ if (!out)
353
+ return ret;
354
+
355
+ /* Now encode this lot... */
356
+ /* EXPLICIT tag */
357
+ if (flags & ASN1_TFLG_EXPTAG)
358
+ ASN1_put_object(out, ndef, sklen, ttag, tclass);
359
+ /* SET or SEQUENCE and IMPLICIT tag */
360
+ ASN1_put_object(out, ndef, skcontlen, sktag, skaclass);
361
+ /* And the stuff itself */
362
+ asn1_set_seq_out(sk, out, skcontlen, ASN1_ITEM_ptr(tt->item),
363
+ isset, iclass);
364
+ if (ndef == 2) {
365
+ ASN1_put_eoc(out);
366
+ if (flags & ASN1_TFLG_EXPTAG)
367
+ ASN1_put_eoc(out);
368
+ }
369
+
370
+ return ret;
371
+ }
372
+
373
+ if (flags & ASN1_TFLG_EXPTAG) {
374
+ /* EXPLICIT tagging */
375
+ /* Find length of tagged item */
376
+ i = ASN1_item_ex_i2d(pval, NULL, ASN1_ITEM_ptr(tt->item), -1, iclass);
377
+ if (!i)
378
+ return 0;
379
+ /* Find length of EXPLICIT tag */
380
+ ret = ASN1_object_size(ndef, i, ttag);
381
+ if (out) {
382
+ /* Output tag and item */
383
+ ASN1_put_object(out, ndef, i, ttag, tclass);
384
+ ASN1_item_ex_i2d(pval, out, ASN1_ITEM_ptr(tt->item), -1, iclass);
385
+ if (ndef == 2)
386
+ ASN1_put_eoc(out);
387
+ }
388
+ return ret;
389
+ }
390
+
391
+ /* Either normal or IMPLICIT tagging: combine class and flags */
392
+ return ASN1_item_ex_i2d(pval, out, ASN1_ITEM_ptr(tt->item),
393
+ ttag, tclass | iclass);
414
394
 
415
395
  }
416
396
 
417
397
  /* Temporary structure used to hold DER encoding of items for SET OF */
418
398
 
419
- typedef struct {
420
- unsigned char *data;
421
- int length;
422
- ASN1_VALUE *field;
399
+ typedef struct {
400
+ unsigned char *data;
401
+ int length;
402
+ ASN1_VALUE *field;
423
403
  } DER_ENC;
424
404
 
425
405
  static int der_cmp(const void *a, const void *b)
426
- {
427
- const DER_ENC *d1 = a, *d2 = b;
428
- int cmplen, i;
429
- cmplen = (d1->length < d2->length) ? d1->length : d2->length;
430
- i = memcmp(d1->data, d2->data, cmplen);
431
- if (i)
432
- return i;
433
- return d1->length - d2->length;
434
- }
406
+ {
407
+ const DER_ENC *d1 = a, *d2 = b;
408
+ int cmplen, i;
409
+ cmplen = (d1->length < d2->length) ? d1->length : d2->length;
410
+ i = memcmp(d1->data, d2->data, cmplen);
411
+ if (i)
412
+ return i;
413
+ return d1->length - d2->length;
414
+ }
435
415
 
436
416
  /* Output the content octets of SET OF or SEQUENCE OF */
437
417
 
438
418
  static int asn1_set_seq_out(STACK_OF(ASN1_VALUE) *sk, unsigned char **out,
439
- int skcontlen, const ASN1_ITEM *item,
440
- int do_sort, int iclass)
441
- {
442
- size_t i;
443
- ASN1_VALUE *skitem;
444
- unsigned char *tmpdat = NULL, *p = NULL;
445
- DER_ENC *derlst = NULL, *tder;
446
- if (do_sort)
447
- {
448
- /* Don't need to sort less than 2 items */
449
- if (sk_ASN1_VALUE_num(sk) < 2)
450
- do_sort = 0;
451
- else
452
- {
453
- derlst = OPENSSL_malloc(sk_ASN1_VALUE_num(sk)
454
- * sizeof(*derlst));
455
- if (!derlst)
456
- return 0;
457
- tmpdat = OPENSSL_malloc(skcontlen);
458
- if (!tmpdat)
459
- {
460
- OPENSSL_free(derlst);
461
- return 0;
462
- }
463
- }
464
- }
465
- /* If not sorting just output each item */
466
- if (!do_sort)
467
- {
468
- for (i = 0; i < sk_ASN1_VALUE_num(sk); i++)
469
- {
470
- skitem = sk_ASN1_VALUE_value(sk, i);
471
- ASN1_item_ex_i2d(&skitem, out, item, -1, iclass);
472
- }
473
- return 1;
474
- }
475
- p = tmpdat;
476
-
477
- /* Doing sort: build up a list of each member's DER encoding */
478
- for (i = 0, tder = derlst; i < sk_ASN1_VALUE_num(sk); i++, tder++)
479
- {
480
- skitem = sk_ASN1_VALUE_value(sk, i);
481
- tder->data = p;
482
- tder->length = ASN1_item_ex_i2d(&skitem, &p, item, -1, iclass);
483
- tder->field = skitem;
484
- }
485
-
486
- /* Now sort them */
487
- qsort(derlst, sk_ASN1_VALUE_num(sk), sizeof(*derlst), der_cmp);
488
- /* Output sorted DER encoding */
489
- p = *out;
490
- for (i = 0, tder = derlst; i < sk_ASN1_VALUE_num(sk); i++, tder++)
491
- {
492
- memcpy(p, tder->data, tder->length);
493
- p += tder->length;
494
- }
495
- *out = p;
496
- /* If do_sort is 2 then reorder the STACK */
497
- if (do_sort == 2)
498
- {
499
- for (i = 0, tder = derlst; i < sk_ASN1_VALUE_num(sk);
500
- i++, tder++)
501
- (void)sk_ASN1_VALUE_set(sk, i, tder->field);
502
- }
503
- OPENSSL_free(derlst);
504
- OPENSSL_free(tmpdat);
505
- return 1;
506
- }
419
+ int skcontlen, const ASN1_ITEM *item,
420
+ int do_sort, int iclass)
421
+ {
422
+ size_t i;
423
+ ASN1_VALUE *skitem;
424
+ unsigned char *tmpdat = NULL, *p = NULL;
425
+ DER_ENC *derlst = NULL, *tder;
426
+ if (do_sort) {
427
+ /* Don't need to sort less than 2 items */
428
+ if (sk_ASN1_VALUE_num(sk) < 2)
429
+ do_sort = 0;
430
+ else {
431
+ derlst = OPENSSL_malloc(sk_ASN1_VALUE_num(sk)
432
+ * sizeof(*derlst));
433
+ if (!derlst)
434
+ return 0;
435
+ tmpdat = OPENSSL_malloc(skcontlen);
436
+ if (!tmpdat) {
437
+ OPENSSL_free(derlst);
438
+ return 0;
439
+ }
440
+ }
441
+ }
442
+ /* If not sorting just output each item */
443
+ if (!do_sort) {
444
+ for (i = 0; i < sk_ASN1_VALUE_num(sk); i++) {
445
+ skitem = sk_ASN1_VALUE_value(sk, i);
446
+ ASN1_item_ex_i2d(&skitem, out, item, -1, iclass);
447
+ }
448
+ return 1;
449
+ }
450
+ p = tmpdat;
451
+
452
+ /* Doing sort: build up a list of each member's DER encoding */
453
+ for (i = 0, tder = derlst; i < sk_ASN1_VALUE_num(sk); i++, tder++) {
454
+ skitem = sk_ASN1_VALUE_value(sk, i);
455
+ tder->data = p;
456
+ tder->length = ASN1_item_ex_i2d(&skitem, &p, item, -1, iclass);
457
+ tder->field = skitem;
458
+ }
459
+
460
+ /* Now sort them */
461
+ qsort(derlst, sk_ASN1_VALUE_num(sk), sizeof(*derlst), der_cmp);
462
+ /* Output sorted DER encoding */
463
+ p = *out;
464
+ for (i = 0, tder = derlst; i < sk_ASN1_VALUE_num(sk); i++, tder++) {
465
+ memcpy(p, tder->data, tder->length);
466
+ p += tder->length;
467
+ }
468
+ *out = p;
469
+ /* If do_sort is 2 then reorder the STACK */
470
+ if (do_sort == 2) {
471
+ for (i = 0, tder = derlst; i < sk_ASN1_VALUE_num(sk); i++, tder++)
472
+ (void)sk_ASN1_VALUE_set(sk, i, tder->field);
473
+ }
474
+ OPENSSL_free(derlst);
475
+ OPENSSL_free(tmpdat);
476
+ return 1;
477
+ }
507
478
 
508
479
  static int asn1_i2d_ex_primitive(ASN1_VALUE **pval, unsigned char **out,
509
- const ASN1_ITEM *it, int tag, int aclass)
510
- {
511
- int len;
512
- int utype;
513
- int usetag;
514
- int ndef = 0;
515
-
516
- utype = it->utype;
517
-
518
- /* Get length of content octets and maybe find
519
- * out the underlying type.
520
- */
521
-
522
- len = asn1_ex_i2c(pval, NULL, &utype, it);
523
-
524
- /* If SEQUENCE, SET or OTHER then header is
525
- * included in pseudo content octets so don't
526
- * include tag+length. We need to check here
527
- * because the call to asn1_ex_i2c() could change
528
- * utype.
529
- */
530
- if ((utype == V_ASN1_SEQUENCE) || (utype == V_ASN1_SET) ||
531
- (utype == V_ASN1_OTHER))
532
- usetag = 0;
533
- else usetag = 1;
534
-
535
- /* -1 means omit type */
536
-
537
- if (len == -1)
538
- return 0;
539
-
540
- /* -2 return is special meaning use ndef */
541
- if (len == -2)
542
- {
543
- ndef = 2;
544
- len = 0;
545
- }
546
-
547
- /* If not implicitly tagged get tag from underlying type */
548
- if (tag == -1) tag = utype;
549
-
550
- /* Output tag+length followed by content octets */
551
- if (out)
552
- {
553
- if (usetag)
554
- ASN1_put_object(out, ndef, len, tag, aclass);
555
- asn1_ex_i2c(pval, *out, &utype, it);
556
- if (ndef)
557
- ASN1_put_eoc(out);
558
- else
559
- *out += len;
560
- }
561
-
562
- if (usetag)
563
- return ASN1_object_size(ndef, len, tag);
564
- return len;
565
- }
480
+ const ASN1_ITEM *it, int tag, int aclass)
481
+ {
482
+ int len;
483
+ int utype;
484
+ int usetag;
485
+ int ndef = 0;
486
+
487
+ utype = it->utype;
488
+
489
+ /*
490
+ * Get length of content octets and maybe find out the underlying type.
491
+ */
492
+
493
+ len = asn1_ex_i2c(pval, NULL, &utype, it);
494
+
495
+ /*
496
+ * If SEQUENCE, SET or OTHER then header is included in pseudo content
497
+ * octets so don't include tag+length. We need to check here because the
498
+ * call to asn1_ex_i2c() could change utype.
499
+ */
500
+ if ((utype == V_ASN1_SEQUENCE) || (utype == V_ASN1_SET) ||
501
+ (utype == V_ASN1_OTHER))
502
+ usetag = 0;
503
+ else
504
+ usetag = 1;
505
+
506
+ /* -1 means omit type */
507
+
508
+ if (len == -1)
509
+ return 0;
510
+
511
+ /* -2 return is special meaning use ndef */
512
+ if (len == -2) {
513
+ ndef = 2;
514
+ len = 0;
515
+ }
516
+
517
+ /* If not implicitly tagged get tag from underlying type */
518
+ if (tag == -1)
519
+ tag = utype;
520
+
521
+ /* Output tag+length followed by content octets */
522
+ if (out) {
523
+ if (usetag)
524
+ ASN1_put_object(out, ndef, len, tag, aclass);
525
+ asn1_ex_i2c(pval, *out, &utype, it);
526
+ if (ndef)
527
+ ASN1_put_eoc(out);
528
+ else
529
+ *out += len;
530
+ }
531
+
532
+ if (usetag)
533
+ return ASN1_object_size(ndef, len, tag);
534
+ return len;
535
+ }
566
536
 
567
537
  /* Produce content octets from a structure */
568
538
 
569
539
  int asn1_ex_i2c(ASN1_VALUE **pval, unsigned char *cout, int *putype,
570
- const ASN1_ITEM *it)
571
- {
572
- ASN1_BOOLEAN *tbool = NULL;
573
- ASN1_STRING *strtmp;
574
- ASN1_OBJECT *otmp;
575
- int utype;
576
- const unsigned char *cont;
577
- unsigned char c;
578
- int len;
579
- const ASN1_PRIMITIVE_FUNCS *pf;
580
- pf = it->funcs;
581
- if (pf && pf->prim_i2c)
582
- return pf->prim_i2c(pval, cout, putype, it);
583
-
584
- /* Should type be omitted? */
585
- if ((it->itype != ASN1_ITYPE_PRIMITIVE)
586
- || (it->utype != V_ASN1_BOOLEAN))
587
- {
588
- if (!*pval) return -1;
589
- }
590
-
591
- if (it->itype == ASN1_ITYPE_MSTRING)
592
- {
593
- /* If MSTRING type set the underlying type */
594
- strtmp = (ASN1_STRING *)*pval;
595
- utype = strtmp->type;
596
- *putype = utype;
597
- }
598
- else if (it->utype == V_ASN1_ANY)
599
- {
600
- /* If ANY set type and pointer to value */
601
- ASN1_TYPE *typ;
602
- typ = (ASN1_TYPE *)*pval;
603
- utype = typ->type;
604
- *putype = utype;
605
- pval = &typ->value.asn1_value;
606
- }
607
- else utype = *putype;
608
-
609
- switch(utype)
610
- {
611
- case V_ASN1_OBJECT:
612
- otmp = (ASN1_OBJECT *)*pval;
613
- cont = otmp->data;
614
- len = otmp->length;
615
- break;
616
-
617
- case V_ASN1_NULL:
618
- cont = NULL;
619
- len = 0;
620
- break;
621
-
622
- case V_ASN1_BOOLEAN:
623
- tbool = (ASN1_BOOLEAN *)pval;
624
- if (*tbool == -1)
625
- return -1;
626
- if (it->utype != V_ASN1_ANY)
627
- {
628
- /* Default handling if value == size field then omit */
629
- if (*tbool && (it->size > 0))
630
- return -1;
631
- if (!*tbool && !it->size)
632
- return -1;
633
- }
634
- c = (unsigned char)*tbool;
635
- cont = &c;
636
- len = 1;
637
- break;
638
-
639
- case V_ASN1_BIT_STRING:
640
- return i2c_ASN1_BIT_STRING((ASN1_BIT_STRING *)*pval,
641
- cout ? &cout : NULL);
642
- break;
643
-
644
- case V_ASN1_INTEGER:
645
- case V_ASN1_NEG_INTEGER:
646
- case V_ASN1_ENUMERATED:
647
- case V_ASN1_NEG_ENUMERATED:
648
- /* These are all have the same content format
649
- * as ASN1_INTEGER
650
- */
651
- return i2c_ASN1_INTEGER((ASN1_INTEGER *)*pval,
652
- cout ? &cout : NULL);
653
- break;
654
-
655
- case V_ASN1_OCTET_STRING:
656
- case V_ASN1_NUMERICSTRING:
657
- case V_ASN1_PRINTABLESTRING:
658
- case V_ASN1_T61STRING:
659
- case V_ASN1_VIDEOTEXSTRING:
660
- case V_ASN1_IA5STRING:
661
- case V_ASN1_UTCTIME:
662
- case V_ASN1_GENERALIZEDTIME:
663
- case V_ASN1_GRAPHICSTRING:
664
- case V_ASN1_VISIBLESTRING:
665
- case V_ASN1_GENERALSTRING:
666
- case V_ASN1_UNIVERSALSTRING:
667
- case V_ASN1_BMPSTRING:
668
- case V_ASN1_UTF8STRING:
669
- case V_ASN1_SEQUENCE:
670
- case V_ASN1_SET:
671
- default:
672
- /* All based on ASN1_STRING and handled the same */
673
- strtmp = (ASN1_STRING *)*pval;
674
- /* Special handling for NDEF */
675
- if ((it->size == ASN1_TFLG_NDEF)
676
- && (strtmp->flags & ASN1_STRING_FLAG_NDEF))
677
- {
678
- if (cout)
679
- {
680
- strtmp->data = cout;
681
- strtmp->length = 0;
682
- }
683
- /* Special return code */
684
- return -2;
685
- }
686
- cont = strtmp->data;
687
- len = strtmp->length;
688
-
689
- break;
690
-
691
- }
692
- if (cout && len)
693
- memcpy(cout, cont, len);
694
- return len;
695
- }
540
+ const ASN1_ITEM *it)
541
+ {
542
+ ASN1_BOOLEAN *tbool = NULL;
543
+ ASN1_STRING *strtmp;
544
+ ASN1_OBJECT *otmp;
545
+ int utype;
546
+ const unsigned char *cont;
547
+ unsigned char c;
548
+ int len;
549
+ const ASN1_PRIMITIVE_FUNCS *pf;
550
+ pf = it->funcs;
551
+ if (pf && pf->prim_i2c)
552
+ return pf->prim_i2c(pval, cout, putype, it);
553
+
554
+ /* Should type be omitted? */
555
+ if ((it->itype != ASN1_ITYPE_PRIMITIVE)
556
+ || (it->utype != V_ASN1_BOOLEAN)) {
557
+ if (!*pval)
558
+ return -1;
559
+ }
560
+
561
+ if (it->itype == ASN1_ITYPE_MSTRING) {
562
+ /* If MSTRING type set the underlying type */
563
+ strtmp = (ASN1_STRING *)*pval;
564
+ utype = strtmp->type;
565
+ *putype = utype;
566
+ } else if (it->utype == V_ASN1_ANY) {
567
+ /* If ANY set type and pointer to value */
568
+ ASN1_TYPE *typ;
569
+ typ = (ASN1_TYPE *)*pval;
570
+ utype = typ->type;
571
+ *putype = utype;
572
+ pval = &typ->value.asn1_value;
573
+ } else
574
+ utype = *putype;
575
+
576
+ switch (utype) {
577
+ case V_ASN1_OBJECT:
578
+ otmp = (ASN1_OBJECT *)*pval;
579
+ cont = otmp->data;
580
+ len = otmp->length;
581
+ break;
582
+
583
+ case V_ASN1_NULL:
584
+ cont = NULL;
585
+ len = 0;
586
+ break;
587
+
588
+ case V_ASN1_BOOLEAN:
589
+ tbool = (ASN1_BOOLEAN *)pval;
590
+ if (*tbool == -1)
591
+ return -1;
592
+ if (it->utype != V_ASN1_ANY) {
593
+ /*
594
+ * Default handling if value == size field then omit
595
+ */
596
+ if (*tbool && (it->size > 0))
597
+ return -1;
598
+ if (!*tbool && !it->size)
599
+ return -1;
600
+ }
601
+ c = (unsigned char)*tbool;
602
+ cont = &c;
603
+ len = 1;
604
+ break;
605
+
606
+ case V_ASN1_BIT_STRING:
607
+ return i2c_ASN1_BIT_STRING((ASN1_BIT_STRING *)*pval,
608
+ cout ? &cout : NULL);
609
+ break;
610
+
611
+ case V_ASN1_INTEGER:
612
+ case V_ASN1_NEG_INTEGER:
613
+ case V_ASN1_ENUMERATED:
614
+ case V_ASN1_NEG_ENUMERATED:
615
+ /*
616
+ * These are all have the same content format as ASN1_INTEGER
617
+ */
618
+ return i2c_ASN1_INTEGER((ASN1_INTEGER *)*pval, cout ? &cout : NULL);
619
+ break;
620
+
621
+ case V_ASN1_OCTET_STRING:
622
+ case V_ASN1_NUMERICSTRING:
623
+ case V_ASN1_PRINTABLESTRING:
624
+ case V_ASN1_T61STRING:
625
+ case V_ASN1_VIDEOTEXSTRING:
626
+ case V_ASN1_IA5STRING:
627
+ case V_ASN1_UTCTIME:
628
+ case V_ASN1_GENERALIZEDTIME:
629
+ case V_ASN1_GRAPHICSTRING:
630
+ case V_ASN1_VISIBLESTRING:
631
+ case V_ASN1_GENERALSTRING:
632
+ case V_ASN1_UNIVERSALSTRING:
633
+ case V_ASN1_BMPSTRING:
634
+ case V_ASN1_UTF8STRING:
635
+ case V_ASN1_SEQUENCE:
636
+ case V_ASN1_SET:
637
+ default:
638
+ /* All based on ASN1_STRING and handled the same */
639
+ strtmp = (ASN1_STRING *)*pval;
640
+ /* Special handling for NDEF */
641
+ if ((it->size == ASN1_TFLG_NDEF)
642
+ && (strtmp->flags & ASN1_STRING_FLAG_NDEF)) {
643
+ if (cout) {
644
+ strtmp->data = cout;
645
+ strtmp->length = 0;
646
+ }
647
+ /* Special return code */
648
+ return -2;
649
+ }
650
+ cont = strtmp->data;
651
+ len = strtmp->length;
652
+
653
+ break;
654
+
655
+ }
656
+ if (cout && len)
657
+ memcpy(cout, cont, len);
658
+ return len;
659
+ }