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
@@ -70,64 +70,58 @@
70
70
 
71
71
  #include "../evp/internal.h"
72
72
 
73
-
74
73
  int ASN1_item_verify(const ASN1_ITEM *it, X509_ALGOR *a,
75
- ASN1_BIT_STRING *signature, void *asn, EVP_PKEY *pkey)
76
- {
77
- EVP_MD_CTX ctx;
78
- uint8_t *buf_in = NULL;
79
- int ret = 0, inl;
74
+ ASN1_BIT_STRING *signature, void *asn, EVP_PKEY *pkey)
75
+ {
76
+ EVP_MD_CTX ctx;
77
+ uint8_t *buf_in = NULL;
78
+ int ret = 0, inl;
80
79
 
81
- if (!pkey)
82
- {
83
- OPENSSL_PUT_ERROR(X509, ERR_R_PASSED_NULL_PARAMETER);
84
- return 0;
85
- }
80
+ if (!pkey) {
81
+ OPENSSL_PUT_ERROR(X509, ERR_R_PASSED_NULL_PARAMETER);
82
+ return 0;
83
+ }
86
84
 
87
- if (signature->type == V_ASN1_BIT_STRING && signature->flags & 0x7)
88
- {
89
- OPENSSL_PUT_ERROR(X509, X509_R_INVALID_BIT_STRING_BITS_LEFT);
90
- return 0;
91
- }
85
+ if (signature->type == V_ASN1_BIT_STRING && signature->flags & 0x7) {
86
+ OPENSSL_PUT_ERROR(X509, X509_R_INVALID_BIT_STRING_BITS_LEFT);
87
+ return 0;
88
+ }
92
89
 
93
- EVP_MD_CTX_init(&ctx);
90
+ EVP_MD_CTX_init(&ctx);
94
91
 
95
- if (!EVP_DigestVerifyInitFromAlgorithm(&ctx, a, pkey))
96
- {
97
- goto err;
98
- }
92
+ if (!EVP_DigestVerifyInitFromAlgorithm(&ctx, a, pkey)) {
93
+ goto err;
94
+ }
99
95
 
100
- inl = ASN1_item_i2d(asn, &buf_in, it);
101
-
102
- if (buf_in == NULL)
103
- {
104
- OPENSSL_PUT_ERROR(X509, ERR_R_MALLOC_FAILURE);
105
- goto err;
106
- }
96
+ inl = ASN1_item_i2d(asn, &buf_in, it);
107
97
 
108
- if (!EVP_DigestVerifyUpdate(&ctx,buf_in,inl))
109
- {
110
- OPENSSL_cleanse(buf_in,(unsigned int)inl);
111
- OPENSSL_free(buf_in);
112
- OPENSSL_PUT_ERROR(X509, ERR_R_EVP_LIB);
113
- goto err;
114
- }
98
+ if (buf_in == NULL) {
99
+ OPENSSL_PUT_ERROR(X509, ERR_R_MALLOC_FAILURE);
100
+ goto err;
101
+ }
115
102
 
116
- OPENSSL_cleanse(buf_in,(unsigned int)inl);
117
- OPENSSL_free(buf_in);
103
+ if (!EVP_DigestVerifyUpdate(&ctx, buf_in, inl)) {
104
+ OPENSSL_cleanse(buf_in, (unsigned int)inl);
105
+ OPENSSL_free(buf_in);
106
+ OPENSSL_PUT_ERROR(X509, ERR_R_EVP_LIB);
107
+ goto err;
108
+ }
118
109
 
119
- if (EVP_DigestVerifyFinal(&ctx,signature->data,
120
- (size_t)signature->length) <= 0)
121
- {
122
- OPENSSL_PUT_ERROR(X509, ERR_R_EVP_LIB);
123
- goto err;
124
- }
125
- /* we don't need to zero the 'ctx' because we just checked
126
- * public information */
127
- /* memset(&ctx,0,sizeof(ctx)); */
128
- ret = 1;
129
- err:
130
- EVP_MD_CTX_cleanup(&ctx);
131
- return ret;
132
- }
110
+ OPENSSL_cleanse(buf_in, (unsigned int)inl);
111
+ OPENSSL_free(buf_in);
133
112
 
113
+ if (EVP_DigestVerifyFinal(&ctx, signature->data,
114
+ (size_t)signature->length) <= 0) {
115
+ OPENSSL_PUT_ERROR(X509, ERR_R_EVP_LIB);
116
+ goto err;
117
+ }
118
+ /*
119
+ * we don't need to zero the 'ctx' because we just checked public
120
+ * information
121
+ */
122
+ /* memset(&ctx,0,sizeof(ctx)); */
123
+ ret = 1;
124
+ err:
125
+ EVP_MD_CTX_cleanup(&ctx);
126
+ return ret;
127
+ }
@@ -66,808 +66,754 @@
66
66
 
67
67
  #include "../internal.h"
68
68
 
69
+ /*
70
+ * Although this file is in crypto/x509 for layering purposes, it emits
71
+ * errors from the ASN.1 module for OpenSSL compatibility.
72
+ */
69
73
 
70
- /* Although this file is in crypto/x509 for layering purposes, it emits errors
71
- * from the ASN.1 module for OpenSSL compatibility. */
74
+ #define ASN1_GEN_FLAG 0x10000
75
+ #define ASN1_GEN_FLAG_IMP (ASN1_GEN_FLAG|1)
76
+ #define ASN1_GEN_FLAG_EXP (ASN1_GEN_FLAG|2)
77
+ #define ASN1_GEN_FLAG_TAG (ASN1_GEN_FLAG|3)
78
+ #define ASN1_GEN_FLAG_BITWRAP (ASN1_GEN_FLAG|4)
79
+ #define ASN1_GEN_FLAG_OCTWRAP (ASN1_GEN_FLAG|5)
80
+ #define ASN1_GEN_FLAG_SEQWRAP (ASN1_GEN_FLAG|6)
81
+ #define ASN1_GEN_FLAG_SETWRAP (ASN1_GEN_FLAG|7)
82
+ #define ASN1_GEN_FLAG_FORMAT (ASN1_GEN_FLAG|8)
72
83
 
73
- #define ASN1_GEN_FLAG 0x10000
74
- #define ASN1_GEN_FLAG_IMP (ASN1_GEN_FLAG|1)
75
- #define ASN1_GEN_FLAG_EXP (ASN1_GEN_FLAG|2)
76
- #define ASN1_GEN_FLAG_TAG (ASN1_GEN_FLAG|3)
77
- #define ASN1_GEN_FLAG_BITWRAP (ASN1_GEN_FLAG|4)
78
- #define ASN1_GEN_FLAG_OCTWRAP (ASN1_GEN_FLAG|5)
79
- #define ASN1_GEN_FLAG_SEQWRAP (ASN1_GEN_FLAG|6)
80
- #define ASN1_GEN_FLAG_SETWRAP (ASN1_GEN_FLAG|7)
81
- #define ASN1_GEN_FLAG_FORMAT (ASN1_GEN_FLAG|8)
84
+ #define ASN1_GEN_STR(str,val) {str, sizeof(str) - 1, val}
82
85
 
83
- #define ASN1_GEN_STR(str,val) {str, sizeof(str) - 1, val}
84
-
85
- #define ASN1_FLAG_EXP_MAX 20
86
+ #define ASN1_FLAG_EXP_MAX 20
86
87
 
87
88
  /* Input formats */
88
89
 
89
90
  /* ASCII: default */
90
- #define ASN1_GEN_FORMAT_ASCII 1
91
+ #define ASN1_GEN_FORMAT_ASCII 1
91
92
  /* UTF8 */
92
- #define ASN1_GEN_FORMAT_UTF8 2
93
+ #define ASN1_GEN_FORMAT_UTF8 2
93
94
  /* Hex */
94
- #define ASN1_GEN_FORMAT_HEX 3
95
+ #define ASN1_GEN_FORMAT_HEX 3
95
96
  /* List of bits */
96
- #define ASN1_GEN_FORMAT_BITLIST 4
97
-
98
-
99
- struct tag_name_st
100
- {
101
- const char *strnam;
102
- int len;
103
- int tag;
104
- };
105
-
106
- typedef struct
107
- {
108
- int exp_tag;
109
- int exp_class;
110
- int exp_constructed;
111
- int exp_pad;
112
- long exp_len;
113
- } tag_exp_type;
114
-
115
- typedef struct
116
- {
117
- int imp_tag;
118
- int imp_class;
119
- int utype;
120
- int format;
121
- const char *str;
122
- tag_exp_type exp_list[ASN1_FLAG_EXP_MAX];
123
- int exp_count;
124
- } tag_exp_arg;
97
+ #define ASN1_GEN_FORMAT_BITLIST 4
98
+
99
+ struct tag_name_st {
100
+ const char *strnam;
101
+ int len;
102
+ int tag;
103
+ };
104
+
105
+ typedef struct {
106
+ int exp_tag;
107
+ int exp_class;
108
+ int exp_constructed;
109
+ int exp_pad;
110
+ long exp_len;
111
+ } tag_exp_type;
112
+
113
+ typedef struct {
114
+ int imp_tag;
115
+ int imp_class;
116
+ int utype;
117
+ int format;
118
+ const char *str;
119
+ tag_exp_type exp_list[ASN1_FLAG_EXP_MAX];
120
+ int exp_count;
121
+ } tag_exp_arg;
125
122
 
126
123
  static int bitstr_cb(const char *elem, int len, void *bitstr);
127
124
  static int asn1_cb(const char *elem, int len, void *bitstr);
128
- static int append_exp(tag_exp_arg *arg, int exp_tag, int exp_class, int exp_constructed, int exp_pad, int imp_ok);
129
- static int parse_tagging(const char *vstart, int vlen, int *ptag, int *pclass);
125
+ static int append_exp(tag_exp_arg *arg, int exp_tag, int exp_class,
126
+ int exp_constructed, int exp_pad, int imp_ok);
127
+ static int parse_tagging(const char *vstart, int vlen, int *ptag,
128
+ int *pclass);
130
129
  static ASN1_TYPE *asn1_multi(int utype, const char *section, X509V3_CTX *cnf);
131
130
  static ASN1_TYPE *asn1_str2type(const char *str, int format, int utype);
132
131
  static int asn1_str2tag(const char *tagstr, int len);
133
132
 
134
133
  ASN1_TYPE *ASN1_generate_nconf(char *str, CONF *nconf)
135
- {
136
- X509V3_CTX cnf;
134
+ {
135
+ X509V3_CTX cnf;
137
136
 
138
- if (!nconf)
139
- return ASN1_generate_v3(str, NULL);
137
+ if (!nconf)
138
+ return ASN1_generate_v3(str, NULL);
140
139
 
141
- X509V3_set_nconf(&cnf, nconf);
142
- return ASN1_generate_v3(str, &cnf);
143
- }
140
+ X509V3_set_nconf(&cnf, nconf);
141
+ return ASN1_generate_v3(str, &cnf);
142
+ }
144
143
 
145
144
  ASN1_TYPE *ASN1_generate_v3(char *str, X509V3_CTX *cnf)
146
- OPENSSL_SUPPRESS_POTENTIALLY_UNINITIALIZED_WARNINGS
147
- {
148
- ASN1_TYPE *ret;
149
- tag_exp_arg asn1_tags;
150
- tag_exp_type *etmp;
151
-
152
- int i, len;
153
-
154
- unsigned char *orig_der = NULL, *new_der = NULL;
155
- const unsigned char *cpy_start;
156
- unsigned char *p;
157
- const unsigned char *cp;
158
- int cpy_len;
159
- long hdr_len;
160
- int hdr_constructed = 0, hdr_tag, hdr_class;
161
- int r;
162
-
163
- asn1_tags.imp_tag = -1;
164
- asn1_tags.imp_class = -1;
165
- asn1_tags.format = ASN1_GEN_FORMAT_ASCII;
166
- asn1_tags.exp_count = 0;
167
- if (CONF_parse_list(str, ',', 1, asn1_cb, &asn1_tags) != 0)
168
- return NULL;
169
-
170
- if ((asn1_tags.utype == V_ASN1_SEQUENCE) || (asn1_tags.utype == V_ASN1_SET))
171
- {
172
- if (!cnf)
173
- {
174
- OPENSSL_PUT_ERROR(ASN1, ASN1_R_SEQUENCE_OR_SET_NEEDS_CONFIG);
175
- return NULL;
176
- }
177
- ret = asn1_multi(asn1_tags.utype, asn1_tags.str, cnf);
178
- }
179
- else
180
- ret = asn1_str2type(asn1_tags.str, asn1_tags.format, asn1_tags.utype);
181
-
182
- if (!ret)
183
- return NULL;
184
-
185
- /* If no tagging return base type */
186
- if ((asn1_tags.imp_tag == -1) && (asn1_tags.exp_count == 0))
187
- return ret;
188
-
189
- /* Generate the encoding */
190
- cpy_len = i2d_ASN1_TYPE(ret, &orig_der);
191
- ASN1_TYPE_free(ret);
192
- ret = NULL;
193
- /* Set point to start copying for modified encoding */
194
- cpy_start = orig_der;
195
-
196
- /* Do we need IMPLICIT tagging? */
197
- if (asn1_tags.imp_tag != -1)
198
- {
199
- /* If IMPLICIT we will replace the underlying tag */
200
- /* Skip existing tag+len */
201
- r = ASN1_get_object(&cpy_start, &hdr_len, &hdr_tag, &hdr_class, cpy_len);
202
- if (r & 0x80)
203
- goto err;
204
- /* Update copy length */
205
- cpy_len -= cpy_start - orig_der;
206
- /* For IMPLICIT tagging the length should match the
207
- * original length and constructed flag should be
208
- * consistent.
209
- */
210
- if (r & 0x1)
211
- {
212
- /* Indefinite length constructed */
213
- hdr_constructed = 2;
214
- hdr_len = 0;
215
- }
216
- else
217
- /* Just retain constructed flag */
218
- hdr_constructed = r & V_ASN1_CONSTRUCTED;
219
- /* Work out new length with IMPLICIT tag: ignore constructed
220
- * because it will mess up if indefinite length
221
- */
222
- len = ASN1_object_size(0, hdr_len, asn1_tags.imp_tag);
223
- }
224
- else
225
- len = cpy_len;
226
-
227
- /* Work out length in any EXPLICIT, starting from end */
228
-
229
- for(i = 0, etmp = asn1_tags.exp_list + asn1_tags.exp_count - 1; i < asn1_tags.exp_count; i++, etmp--)
230
- {
231
- /* Content length: number of content octets + any padding */
232
- len += etmp->exp_pad;
233
- etmp->exp_len = len;
234
- /* Total object length: length including new header */
235
- len = ASN1_object_size(0, len, etmp->exp_tag);
236
- }
237
-
238
- /* Allocate buffer for new encoding */
239
-
240
- new_der = OPENSSL_malloc(len);
241
- if (!new_der)
242
- goto err;
243
-
244
- /* Generate tagged encoding */
245
-
246
- p = new_der;
247
-
248
- /* Output explicit tags first */
249
-
250
- for (i = 0, etmp = asn1_tags.exp_list; i < asn1_tags.exp_count; i++, etmp++)
251
- {
252
- ASN1_put_object(&p, etmp->exp_constructed, etmp->exp_len,
253
- etmp->exp_tag, etmp->exp_class);
254
- if (etmp->exp_pad)
255
- *p++ = 0;
256
- }
257
-
258
- /* If IMPLICIT, output tag */
259
-
260
- if (asn1_tags.imp_tag != -1)
261
- {
262
- if (asn1_tags.imp_class == V_ASN1_UNIVERSAL
263
- && (asn1_tags.imp_tag == V_ASN1_SEQUENCE
264
- || asn1_tags.imp_tag == V_ASN1_SET) )
265
- hdr_constructed = V_ASN1_CONSTRUCTED;
266
- ASN1_put_object(&p, hdr_constructed, hdr_len,
267
- asn1_tags.imp_tag, asn1_tags.imp_class);
268
- }
269
-
270
- /* Copy across original encoding */
271
- memcpy(p, cpy_start, cpy_len);
272
-
273
- cp = new_der;
274
-
275
- /* Obtain new ASN1_TYPE structure */
276
- ret = d2i_ASN1_TYPE(NULL, &cp, len);
277
-
278
- err:
279
- if (orig_der)
280
- OPENSSL_free(orig_der);
281
- if (new_der)
282
- OPENSSL_free(new_der);
283
-
284
- return ret;
285
-
286
- }
145
+ OPENSSL_SUPPRESS_POTENTIALLY_UNINITIALIZED_WARNINGS
146
+ {
147
+ ASN1_TYPE *ret;
148
+ tag_exp_arg asn1_tags;
149
+ tag_exp_type *etmp;
150
+
151
+ int i, len;
152
+
153
+ unsigned char *orig_der = NULL, *new_der = NULL;
154
+ const unsigned char *cpy_start;
155
+ unsigned char *p;
156
+ const unsigned char *cp;
157
+ int cpy_len;
158
+ long hdr_len;
159
+ int hdr_constructed = 0, hdr_tag, hdr_class;
160
+ int r;
161
+
162
+ asn1_tags.imp_tag = -1;
163
+ asn1_tags.imp_class = -1;
164
+ asn1_tags.format = ASN1_GEN_FORMAT_ASCII;
165
+ asn1_tags.exp_count = 0;
166
+ if (CONF_parse_list(str, ',', 1, asn1_cb, &asn1_tags) != 0)
167
+ return NULL;
168
+
169
+ if ((asn1_tags.utype == V_ASN1_SEQUENCE)
170
+ || (asn1_tags.utype == V_ASN1_SET)) {
171
+ if (!cnf) {
172
+ OPENSSL_PUT_ERROR(ASN1, ASN1_R_SEQUENCE_OR_SET_NEEDS_CONFIG);
173
+ return NULL;
174
+ }
175
+ ret = asn1_multi(asn1_tags.utype, asn1_tags.str, cnf);
176
+ } else
177
+ ret = asn1_str2type(asn1_tags.str, asn1_tags.format, asn1_tags.utype);
178
+
179
+ if (!ret)
180
+ return NULL;
181
+
182
+ /* If no tagging return base type */
183
+ if ((asn1_tags.imp_tag == -1) && (asn1_tags.exp_count == 0))
184
+ return ret;
185
+
186
+ /* Generate the encoding */
187
+ cpy_len = i2d_ASN1_TYPE(ret, &orig_der);
188
+ ASN1_TYPE_free(ret);
189
+ ret = NULL;
190
+ /* Set point to start copying for modified encoding */
191
+ cpy_start = orig_der;
192
+
193
+ /* Do we need IMPLICIT tagging? */
194
+ if (asn1_tags.imp_tag != -1) {
195
+ /* If IMPLICIT we will replace the underlying tag */
196
+ /* Skip existing tag+len */
197
+ r = ASN1_get_object(&cpy_start, &hdr_len, &hdr_tag, &hdr_class,
198
+ cpy_len);
199
+ if (r & 0x80)
200
+ goto err;
201
+ /* Update copy length */
202
+ cpy_len -= cpy_start - orig_der;
203
+ /*
204
+ * For IMPLICIT tagging the length should match the original length
205
+ * and constructed flag should be consistent.
206
+ */
207
+ if (r & 0x1) {
208
+ /* Indefinite length constructed */
209
+ hdr_constructed = 2;
210
+ hdr_len = 0;
211
+ } else
212
+ /* Just retain constructed flag */
213
+ hdr_constructed = r & V_ASN1_CONSTRUCTED;
214
+ /*
215
+ * Work out new length with IMPLICIT tag: ignore constructed because
216
+ * it will mess up if indefinite length
217
+ */
218
+ len = ASN1_object_size(0, hdr_len, asn1_tags.imp_tag);
219
+ } else
220
+ len = cpy_len;
221
+
222
+ /* Work out length in any EXPLICIT, starting from end */
223
+
224
+ for (i = 0, etmp = asn1_tags.exp_list + asn1_tags.exp_count - 1;
225
+ i < asn1_tags.exp_count; i++, etmp--) {
226
+ /* Content length: number of content octets + any padding */
227
+ len += etmp->exp_pad;
228
+ etmp->exp_len = len;
229
+ /* Total object length: length including new header */
230
+ len = ASN1_object_size(0, len, etmp->exp_tag);
231
+ }
232
+
233
+ /* Allocate buffer for new encoding */
234
+
235
+ new_der = OPENSSL_malloc(len);
236
+ if (!new_der)
237
+ goto err;
238
+
239
+ /* Generate tagged encoding */
240
+
241
+ p = new_der;
242
+
243
+ /* Output explicit tags first */
244
+
245
+ for (i = 0, etmp = asn1_tags.exp_list; i < asn1_tags.exp_count;
246
+ i++, etmp++) {
247
+ ASN1_put_object(&p, etmp->exp_constructed, etmp->exp_len,
248
+ etmp->exp_tag, etmp->exp_class);
249
+ if (etmp->exp_pad)
250
+ *p++ = 0;
251
+ }
252
+
253
+ /* If IMPLICIT, output tag */
254
+
255
+ if (asn1_tags.imp_tag != -1) {
256
+ if (asn1_tags.imp_class == V_ASN1_UNIVERSAL
257
+ && (asn1_tags.imp_tag == V_ASN1_SEQUENCE
258
+ || asn1_tags.imp_tag == V_ASN1_SET))
259
+ hdr_constructed = V_ASN1_CONSTRUCTED;
260
+ ASN1_put_object(&p, hdr_constructed, hdr_len,
261
+ asn1_tags.imp_tag, asn1_tags.imp_class);
262
+ }
263
+
264
+ /* Copy across original encoding */
265
+ memcpy(p, cpy_start, cpy_len);
266
+
267
+ cp = new_der;
268
+
269
+ /* Obtain new ASN1_TYPE structure */
270
+ ret = d2i_ASN1_TYPE(NULL, &cp, len);
271
+
272
+ err:
273
+ if (orig_der)
274
+ OPENSSL_free(orig_der);
275
+ if (new_der)
276
+ OPENSSL_free(new_der);
277
+
278
+ return ret;
279
+
280
+ }
287
281
 
288
282
  static int asn1_cb(const char *elem, int len, void *bitstr)
289
- {
290
- tag_exp_arg *arg = bitstr;
291
- int i;
292
- int utype;
293
- int vlen = 0;
294
- const char *p, *vstart = NULL;
295
-
296
- int tmp_tag, tmp_class;
297
-
298
- if (elem == NULL)
299
- return 0;
300
-
301
- for(i = 0, p = elem; i < len; p++, i++)
302
- {
303
- /* Look for the ':' in name value pairs */
304
- if (*p == ':')
305
- {
306
- vstart = p + 1;
307
- vlen = len - (vstart - elem);
308
- len = p - elem;
309
- break;
310
- }
311
- }
312
-
313
- utype = asn1_str2tag(elem, len);
314
-
315
- if (utype == -1)
316
- {
317
- OPENSSL_PUT_ERROR(ASN1, ASN1_R_UNKNOWN_TAG);
318
- ERR_add_error_data(2, "tag=", elem);
319
- return -1;
320
- }
321
-
322
- /* If this is not a modifier mark end of string and exit */
323
- if (!(utype & ASN1_GEN_FLAG))
324
- {
325
- arg->utype = utype;
326
- arg->str = vstart;
327
- /* If no value and not end of string, error */
328
- if (!vstart && elem[len])
329
- {
330
- OPENSSL_PUT_ERROR(ASN1, ASN1_R_MISSING_VALUE);
331
- return -1;
332
- }
333
- return 0;
334
- }
335
-
336
- switch(utype)
337
- {
338
-
339
- case ASN1_GEN_FLAG_IMP:
340
- /* Check for illegal multiple IMPLICIT tagging */
341
- if (arg->imp_tag != -1)
342
- {
343
- OPENSSL_PUT_ERROR(ASN1, ASN1_R_ILLEGAL_NESTED_TAGGING);
344
- return -1;
345
- }
346
- if (!parse_tagging(vstart, vlen, &arg->imp_tag, &arg->imp_class))
347
- return -1;
348
- break;
349
-
350
- case ASN1_GEN_FLAG_EXP:
351
-
352
- if (!parse_tagging(vstart, vlen, &tmp_tag, &tmp_class))
353
- return -1;
354
- if (!append_exp(arg, tmp_tag, tmp_class, 1, 0, 0))
355
- return -1;
356
- break;
357
-
358
- case ASN1_GEN_FLAG_SEQWRAP:
359
- if (!append_exp(arg, V_ASN1_SEQUENCE, V_ASN1_UNIVERSAL, 1, 0, 1))
360
- return -1;
361
- break;
362
-
363
- case ASN1_GEN_FLAG_SETWRAP:
364
- if (!append_exp(arg, V_ASN1_SET, V_ASN1_UNIVERSAL, 1, 0, 1))
365
- return -1;
366
- break;
367
-
368
- case ASN1_GEN_FLAG_BITWRAP:
369
- if (!append_exp(arg, V_ASN1_BIT_STRING, V_ASN1_UNIVERSAL, 0, 1, 1))
370
- return -1;
371
- break;
372
-
373
- case ASN1_GEN_FLAG_OCTWRAP:
374
- if (!append_exp(arg, V_ASN1_OCTET_STRING, V_ASN1_UNIVERSAL, 0, 0, 1))
375
- return -1;
376
- break;
377
-
378
- case ASN1_GEN_FLAG_FORMAT:
379
- if (!vstart)
380
- {
381
- OPENSSL_PUT_ERROR(ASN1, ASN1_R_UNKNOWN_FORMAT);
382
- return -1;
383
- }
384
- if (!strncmp(vstart, "ASCII", 5))
385
- arg->format = ASN1_GEN_FORMAT_ASCII;
386
- else if (!strncmp(vstart, "UTF8", 4))
387
- arg->format = ASN1_GEN_FORMAT_UTF8;
388
- else if (!strncmp(vstart, "HEX", 3))
389
- arg->format = ASN1_GEN_FORMAT_HEX;
390
- else if (!strncmp(vstart, "BITLIST", 7))
391
- arg->format = ASN1_GEN_FORMAT_BITLIST;
392
- else
393
- {
394
- OPENSSL_PUT_ERROR(ASN1, ASN1_R_UNKNOWN_FORMAT);
395
- return -1;
396
- }
397
- break;
398
-
399
- }
400
-
401
- return 1;
402
-
403
- }
283
+ {
284
+ tag_exp_arg *arg = bitstr;
285
+ int i;
286
+ int utype;
287
+ int vlen = 0;
288
+ const char *p, *vstart = NULL;
289
+
290
+ int tmp_tag, tmp_class;
291
+
292
+ if (elem == NULL)
293
+ return 0;
294
+
295
+ for (i = 0, p = elem; i < len; p++, i++) {
296
+ /* Look for the ':' in name value pairs */
297
+ if (*p == ':') {
298
+ vstart = p + 1;
299
+ vlen = len - (vstart - elem);
300
+ len = p - elem;
301
+ break;
302
+ }
303
+ }
304
+
305
+ utype = asn1_str2tag(elem, len);
306
+
307
+ if (utype == -1) {
308
+ OPENSSL_PUT_ERROR(ASN1, ASN1_R_UNKNOWN_TAG);
309
+ ERR_add_error_data(2, "tag=", elem);
310
+ return -1;
311
+ }
312
+
313
+ /* If this is not a modifier mark end of string and exit */
314
+ if (!(utype & ASN1_GEN_FLAG)) {
315
+ arg->utype = utype;
316
+ arg->str = vstart;
317
+ /* If no value and not end of string, error */
318
+ if (!vstart && elem[len]) {
319
+ OPENSSL_PUT_ERROR(ASN1, ASN1_R_MISSING_VALUE);
320
+ return -1;
321
+ }
322
+ return 0;
323
+ }
324
+
325
+ switch (utype) {
326
+
327
+ case ASN1_GEN_FLAG_IMP:
328
+ /* Check for illegal multiple IMPLICIT tagging */
329
+ if (arg->imp_tag != -1) {
330
+ OPENSSL_PUT_ERROR(ASN1, ASN1_R_ILLEGAL_NESTED_TAGGING);
331
+ return -1;
332
+ }
333
+ if (!parse_tagging(vstart, vlen, &arg->imp_tag, &arg->imp_class))
334
+ return -1;
335
+ break;
336
+
337
+ case ASN1_GEN_FLAG_EXP:
338
+
339
+ if (!parse_tagging(vstart, vlen, &tmp_tag, &tmp_class))
340
+ return -1;
341
+ if (!append_exp(arg, tmp_tag, tmp_class, 1, 0, 0))
342
+ return -1;
343
+ break;
344
+
345
+ case ASN1_GEN_FLAG_SEQWRAP:
346
+ if (!append_exp(arg, V_ASN1_SEQUENCE, V_ASN1_UNIVERSAL, 1, 0, 1))
347
+ return -1;
348
+ break;
349
+
350
+ case ASN1_GEN_FLAG_SETWRAP:
351
+ if (!append_exp(arg, V_ASN1_SET, V_ASN1_UNIVERSAL, 1, 0, 1))
352
+ return -1;
353
+ break;
354
+
355
+ case ASN1_GEN_FLAG_BITWRAP:
356
+ if (!append_exp(arg, V_ASN1_BIT_STRING, V_ASN1_UNIVERSAL, 0, 1, 1))
357
+ return -1;
358
+ break;
359
+
360
+ case ASN1_GEN_FLAG_OCTWRAP:
361
+ if (!append_exp(arg, V_ASN1_OCTET_STRING, V_ASN1_UNIVERSAL, 0, 0, 1))
362
+ return -1;
363
+ break;
364
+
365
+ case ASN1_GEN_FLAG_FORMAT:
366
+ if (!vstart) {
367
+ OPENSSL_PUT_ERROR(ASN1, ASN1_R_UNKNOWN_FORMAT);
368
+ return -1;
369
+ }
370
+ if (!strncmp(vstart, "ASCII", 5))
371
+ arg->format = ASN1_GEN_FORMAT_ASCII;
372
+ else if (!strncmp(vstart, "UTF8", 4))
373
+ arg->format = ASN1_GEN_FORMAT_UTF8;
374
+ else if (!strncmp(vstart, "HEX", 3))
375
+ arg->format = ASN1_GEN_FORMAT_HEX;
376
+ else if (!strncmp(vstart, "BITLIST", 7))
377
+ arg->format = ASN1_GEN_FORMAT_BITLIST;
378
+ else {
379
+ OPENSSL_PUT_ERROR(ASN1, ASN1_R_UNKNOWN_FORMAT);
380
+ return -1;
381
+ }
382
+ break;
383
+
384
+ }
385
+
386
+ return 1;
387
+
388
+ }
404
389
 
405
390
  static int parse_tagging(const char *vstart, int vlen, int *ptag, int *pclass)
406
- {
407
- char erch[2];
408
- long tag_num;
409
- char *eptr;
410
- if (!vstart)
411
- return 0;
412
- tag_num = strtoul(vstart, &eptr, 10);
413
- /* Check we haven't gone past max length: should be impossible */
414
- if (eptr && *eptr && (eptr > vstart + vlen))
415
- return 0;
416
- if (tag_num < 0)
417
- {
418
- OPENSSL_PUT_ERROR(ASN1, ASN1_R_INVALID_NUMBER);
419
- return 0;
420
- }
421
- *ptag = tag_num;
422
- /* If we have non numeric characters, parse them */
423
- if (eptr)
424
- vlen -= eptr - vstart;
425
- else
426
- vlen = 0;
427
- if (vlen)
428
- {
429
- switch (*eptr)
430
- {
431
-
432
- case 'U':
433
- *pclass = V_ASN1_UNIVERSAL;
434
- break;
435
-
436
- case 'A':
437
- *pclass = V_ASN1_APPLICATION;
438
- break;
439
-
440
- case 'P':
441
- *pclass = V_ASN1_PRIVATE;
442
- break;
443
-
444
- case 'C':
445
- *pclass = V_ASN1_CONTEXT_SPECIFIC;
446
- break;
447
-
448
- default:
449
- erch[0] = *eptr;
450
- erch[1] = 0;
451
- OPENSSL_PUT_ERROR(ASN1, ASN1_R_INVALID_MODIFIER);
452
- ERR_add_error_data(2, "Char=", erch);
453
- return 0;
454
- break;
455
-
456
- }
457
- }
458
- else
459
- *pclass = V_ASN1_CONTEXT_SPECIFIC;
460
-
461
- return 1;
462
-
463
- }
391
+ {
392
+ char erch[2];
393
+ long tag_num;
394
+ char *eptr;
395
+ if (!vstart)
396
+ return 0;
397
+ tag_num = strtoul(vstart, &eptr, 10);
398
+ /* Check we haven't gone past max length: should be impossible */
399
+ if (eptr && *eptr && (eptr > vstart + vlen))
400
+ return 0;
401
+ if (tag_num < 0) {
402
+ OPENSSL_PUT_ERROR(ASN1, ASN1_R_INVALID_NUMBER);
403
+ return 0;
404
+ }
405
+ *ptag = tag_num;
406
+ /* If we have non numeric characters, parse them */
407
+ if (eptr)
408
+ vlen -= eptr - vstart;
409
+ else
410
+ vlen = 0;
411
+ if (vlen) {
412
+ switch (*eptr) {
413
+
414
+ case 'U':
415
+ *pclass = V_ASN1_UNIVERSAL;
416
+ break;
417
+
418
+ case 'A':
419
+ *pclass = V_ASN1_APPLICATION;
420
+ break;
421
+
422
+ case 'P':
423
+ *pclass = V_ASN1_PRIVATE;
424
+ break;
425
+
426
+ case 'C':
427
+ *pclass = V_ASN1_CONTEXT_SPECIFIC;
428
+ break;
429
+
430
+ default:
431
+ erch[0] = *eptr;
432
+ erch[1] = 0;
433
+ OPENSSL_PUT_ERROR(ASN1, ASN1_R_INVALID_MODIFIER);
434
+ ERR_add_error_data(2, "Char=", erch);
435
+ return 0;
436
+ break;
437
+
438
+ }
439
+ } else
440
+ *pclass = V_ASN1_CONTEXT_SPECIFIC;
441
+
442
+ return 1;
443
+
444
+ }
464
445
 
465
446
  /* Handle multiple types: SET and SEQUENCE */
466
447
 
467
448
  static ASN1_TYPE *asn1_multi(int utype, const char *section, X509V3_CTX *cnf)
468
- {
469
- ASN1_TYPE *ret = NULL;
470
- STACK_OF(ASN1_TYPE) *sk = NULL;
471
- STACK_OF(CONF_VALUE) *sect = NULL;
472
- unsigned char *der = NULL;
473
- int derlen;
474
- size_t i;
475
- sk = sk_ASN1_TYPE_new_null();
476
- if (!sk)
477
- goto bad;
478
- if (section)
479
- {
480
- if (!cnf)
481
- goto bad;
482
- sect = X509V3_get_section(cnf, (char *)section);
483
- if (!sect)
484
- goto bad;
485
- for (i = 0; i < sk_CONF_VALUE_num(sect); i++)
486
- {
487
- ASN1_TYPE *typ = ASN1_generate_v3(sk_CONF_VALUE_value(sect, i)->value, cnf);
488
- if (!typ)
489
- goto bad;
490
- if (!sk_ASN1_TYPE_push(sk, typ))
491
- goto bad;
492
- }
493
- }
494
-
495
- /* Now we has a STACK of the components, convert to the correct form */
496
-
497
- if (utype == V_ASN1_SET)
498
- derlen = i2d_ASN1_SET_ANY(sk, &der);
499
- else
500
- derlen = i2d_ASN1_SEQUENCE_ANY(sk, &der);
501
-
502
- if (derlen < 0)
503
- goto bad;
504
-
505
- if (!(ret = ASN1_TYPE_new()))
506
- goto bad;
507
-
508
- if (!(ret->value.asn1_string = ASN1_STRING_type_new(utype)))
509
- goto bad;
510
-
511
- ret->type = utype;
512
-
513
- ret->value.asn1_string->data = der;
514
- ret->value.asn1_string->length = derlen;
515
-
516
- der = NULL;
517
-
518
- bad:
519
-
520
- if (der)
521
- OPENSSL_free(der);
522
-
523
- if (sk)
524
- sk_ASN1_TYPE_pop_free(sk, ASN1_TYPE_free);
525
- if (sect)
526
- X509V3_section_free(cnf, sect);
527
-
528
- return ret;
529
- }
530
-
531
- static int append_exp(tag_exp_arg *arg, int exp_tag, int exp_class, int exp_constructed, int exp_pad, int imp_ok)
532
- {
533
- tag_exp_type *exp_tmp;
534
- /* Can only have IMPLICIT if permitted */
535
- if ((arg->imp_tag != -1) && !imp_ok)
536
- {
537
- OPENSSL_PUT_ERROR(ASN1, ASN1_R_ILLEGAL_IMPLICIT_TAG);
538
- return 0;
539
- }
540
-
541
- if (arg->exp_count == ASN1_FLAG_EXP_MAX)
542
- {
543
- OPENSSL_PUT_ERROR(ASN1, ASN1_R_DEPTH_EXCEEDED);
544
- return 0;
545
- }
546
-
547
- exp_tmp = &arg->exp_list[arg->exp_count++];
548
-
549
- /* If IMPLICIT set tag to implicit value then
550
- * reset implicit tag since it has been used.
551
- */
552
- if (arg->imp_tag != -1)
553
- {
554
- exp_tmp->exp_tag = arg->imp_tag;
555
- exp_tmp->exp_class = arg->imp_class;
556
- arg->imp_tag = -1;
557
- arg->imp_class = -1;
558
- }
559
- else
560
- {
561
- exp_tmp->exp_tag = exp_tag;
562
- exp_tmp->exp_class = exp_class;
563
- }
564
- exp_tmp->exp_constructed = exp_constructed;
565
- exp_tmp->exp_pad = exp_pad;
566
-
567
- return 1;
568
- }
569
-
449
+ {
450
+ ASN1_TYPE *ret = NULL;
451
+ STACK_OF(ASN1_TYPE) *sk = NULL;
452
+ STACK_OF(CONF_VALUE) *sect = NULL;
453
+ unsigned char *der = NULL;
454
+ int derlen;
455
+ size_t i;
456
+ sk = sk_ASN1_TYPE_new_null();
457
+ if (!sk)
458
+ goto bad;
459
+ if (section) {
460
+ if (!cnf)
461
+ goto bad;
462
+ sect = X509V3_get_section(cnf, (char *)section);
463
+ if (!sect)
464
+ goto bad;
465
+ for (i = 0; i < sk_CONF_VALUE_num(sect); i++) {
466
+ ASN1_TYPE *typ =
467
+ ASN1_generate_v3(sk_CONF_VALUE_value(sect, i)->value, cnf);
468
+ if (!typ)
469
+ goto bad;
470
+ if (!sk_ASN1_TYPE_push(sk, typ))
471
+ goto bad;
472
+ }
473
+ }
474
+
475
+ /*
476
+ * Now we has a STACK of the components, convert to the correct form
477
+ */
478
+
479
+ if (utype == V_ASN1_SET)
480
+ derlen = i2d_ASN1_SET_ANY(sk, &der);
481
+ else
482
+ derlen = i2d_ASN1_SEQUENCE_ANY(sk, &der);
483
+
484
+ if (derlen < 0)
485
+ goto bad;
486
+
487
+ if (!(ret = ASN1_TYPE_new()))
488
+ goto bad;
489
+
490
+ if (!(ret->value.asn1_string = ASN1_STRING_type_new(utype)))
491
+ goto bad;
492
+
493
+ ret->type = utype;
494
+
495
+ ret->value.asn1_string->data = der;
496
+ ret->value.asn1_string->length = derlen;
497
+
498
+ der = NULL;
499
+
500
+ bad:
501
+
502
+ if (der)
503
+ OPENSSL_free(der);
504
+
505
+ if (sk)
506
+ sk_ASN1_TYPE_pop_free(sk, ASN1_TYPE_free);
507
+ if (sect)
508
+ X509V3_section_free(cnf, sect);
509
+
510
+ return ret;
511
+ }
512
+
513
+ static int append_exp(tag_exp_arg *arg, int exp_tag, int exp_class,
514
+ int exp_constructed, int exp_pad, int imp_ok)
515
+ {
516
+ tag_exp_type *exp_tmp;
517
+ /* Can only have IMPLICIT if permitted */
518
+ if ((arg->imp_tag != -1) && !imp_ok) {
519
+ OPENSSL_PUT_ERROR(ASN1, ASN1_R_ILLEGAL_IMPLICIT_TAG);
520
+ return 0;
521
+ }
522
+
523
+ if (arg->exp_count == ASN1_FLAG_EXP_MAX) {
524
+ OPENSSL_PUT_ERROR(ASN1, ASN1_R_DEPTH_EXCEEDED);
525
+ return 0;
526
+ }
527
+
528
+ exp_tmp = &arg->exp_list[arg->exp_count++];
529
+
530
+ /*
531
+ * If IMPLICIT set tag to implicit value then reset implicit tag since it
532
+ * has been used.
533
+ */
534
+ if (arg->imp_tag != -1) {
535
+ exp_tmp->exp_tag = arg->imp_tag;
536
+ exp_tmp->exp_class = arg->imp_class;
537
+ arg->imp_tag = -1;
538
+ arg->imp_class = -1;
539
+ } else {
540
+ exp_tmp->exp_tag = exp_tag;
541
+ exp_tmp->exp_class = exp_class;
542
+ }
543
+ exp_tmp->exp_constructed = exp_constructed;
544
+ exp_tmp->exp_pad = exp_pad;
545
+
546
+ return 1;
547
+ }
570
548
 
571
549
  static int asn1_str2tag(const char *tagstr, int len)
572
- {
573
- unsigned int i;
574
- static const struct tag_name_st *tntmp, tnst [] = {
575
- ASN1_GEN_STR("BOOL", V_ASN1_BOOLEAN),
576
- ASN1_GEN_STR("BOOLEAN", V_ASN1_BOOLEAN),
577
- ASN1_GEN_STR("NULL", V_ASN1_NULL),
578
- ASN1_GEN_STR("INT", V_ASN1_INTEGER),
579
- ASN1_GEN_STR("INTEGER", V_ASN1_INTEGER),
580
- ASN1_GEN_STR("ENUM", V_ASN1_ENUMERATED),
581
- ASN1_GEN_STR("ENUMERATED", V_ASN1_ENUMERATED),
582
- ASN1_GEN_STR("OID", V_ASN1_OBJECT),
583
- ASN1_GEN_STR("OBJECT", V_ASN1_OBJECT),
584
- ASN1_GEN_STR("UTCTIME", V_ASN1_UTCTIME),
585
- ASN1_GEN_STR("UTC", V_ASN1_UTCTIME),
586
- ASN1_GEN_STR("GENERALIZEDTIME", V_ASN1_GENERALIZEDTIME),
587
- ASN1_GEN_STR("GENTIME", V_ASN1_GENERALIZEDTIME),
588
- ASN1_GEN_STR("OCT", V_ASN1_OCTET_STRING),
589
- ASN1_GEN_STR("OCTETSTRING", V_ASN1_OCTET_STRING),
590
- ASN1_GEN_STR("BITSTR", V_ASN1_BIT_STRING),
591
- ASN1_GEN_STR("BITSTRING", V_ASN1_BIT_STRING),
592
- ASN1_GEN_STR("UNIVERSALSTRING", V_ASN1_UNIVERSALSTRING),
593
- ASN1_GEN_STR("UNIV", V_ASN1_UNIVERSALSTRING),
594
- ASN1_GEN_STR("IA5", V_ASN1_IA5STRING),
595
- ASN1_GEN_STR("IA5STRING", V_ASN1_IA5STRING),
596
- ASN1_GEN_STR("UTF8", V_ASN1_UTF8STRING),
597
- ASN1_GEN_STR("UTF8String", V_ASN1_UTF8STRING),
598
- ASN1_GEN_STR("BMP", V_ASN1_BMPSTRING),
599
- ASN1_GEN_STR("BMPSTRING", V_ASN1_BMPSTRING),
600
- ASN1_GEN_STR("VISIBLESTRING", V_ASN1_VISIBLESTRING),
601
- ASN1_GEN_STR("VISIBLE", V_ASN1_VISIBLESTRING),
602
- ASN1_GEN_STR("PRINTABLESTRING", V_ASN1_PRINTABLESTRING),
603
- ASN1_GEN_STR("PRINTABLE", V_ASN1_PRINTABLESTRING),
604
- ASN1_GEN_STR("T61", V_ASN1_T61STRING),
605
- ASN1_GEN_STR("T61STRING", V_ASN1_T61STRING),
606
- ASN1_GEN_STR("TELETEXSTRING", V_ASN1_T61STRING),
607
- ASN1_GEN_STR("GeneralString", V_ASN1_GENERALSTRING),
608
- ASN1_GEN_STR("GENSTR", V_ASN1_GENERALSTRING),
609
- ASN1_GEN_STR("NUMERIC", V_ASN1_NUMERICSTRING),
610
- ASN1_GEN_STR("NUMERICSTRING", V_ASN1_NUMERICSTRING),
611
-
612
- /* Special cases */
613
- ASN1_GEN_STR("SEQUENCE", V_ASN1_SEQUENCE),
614
- ASN1_GEN_STR("SEQ", V_ASN1_SEQUENCE),
615
- ASN1_GEN_STR("SET", V_ASN1_SET),
616
- /* type modifiers */
617
- /* Explicit tag */
618
- ASN1_GEN_STR("EXP", ASN1_GEN_FLAG_EXP),
619
- ASN1_GEN_STR("EXPLICIT", ASN1_GEN_FLAG_EXP),
620
- /* Implicit tag */
621
- ASN1_GEN_STR("IMP", ASN1_GEN_FLAG_IMP),
622
- ASN1_GEN_STR("IMPLICIT", ASN1_GEN_FLAG_IMP),
623
- /* OCTET STRING wrapper */
624
- ASN1_GEN_STR("OCTWRAP", ASN1_GEN_FLAG_OCTWRAP),
625
- /* SEQUENCE wrapper */
626
- ASN1_GEN_STR("SEQWRAP", ASN1_GEN_FLAG_SEQWRAP),
627
- /* SET wrapper */
628
- ASN1_GEN_STR("SETWRAP", ASN1_GEN_FLAG_SETWRAP),
629
- /* BIT STRING wrapper */
630
- ASN1_GEN_STR("BITWRAP", ASN1_GEN_FLAG_BITWRAP),
631
- ASN1_GEN_STR("FORM", ASN1_GEN_FLAG_FORMAT),
632
- ASN1_GEN_STR("FORMAT", ASN1_GEN_FLAG_FORMAT),
633
- };
634
-
635
- if (len == -1)
636
- len = strlen(tagstr);
637
-
638
- tntmp = tnst;
639
- for (i = 0; i < sizeof(tnst) / sizeof(struct tag_name_st); i++, tntmp++)
640
- {
641
- if ((len == tntmp->len) && !strncmp(tntmp->strnam, tagstr, len))
642
- return tntmp->tag;
643
- }
644
-
645
- return -1;
646
- }
550
+ {
551
+ unsigned int i;
552
+ static const struct tag_name_st *tntmp, tnst[] = {
553
+ ASN1_GEN_STR("BOOL", V_ASN1_BOOLEAN),
554
+ ASN1_GEN_STR("BOOLEAN", V_ASN1_BOOLEAN),
555
+ ASN1_GEN_STR("NULL", V_ASN1_NULL),
556
+ ASN1_GEN_STR("INT", V_ASN1_INTEGER),
557
+ ASN1_GEN_STR("INTEGER", V_ASN1_INTEGER),
558
+ ASN1_GEN_STR("ENUM", V_ASN1_ENUMERATED),
559
+ ASN1_GEN_STR("ENUMERATED", V_ASN1_ENUMERATED),
560
+ ASN1_GEN_STR("OID", V_ASN1_OBJECT),
561
+ ASN1_GEN_STR("OBJECT", V_ASN1_OBJECT),
562
+ ASN1_GEN_STR("UTCTIME", V_ASN1_UTCTIME),
563
+ ASN1_GEN_STR("UTC", V_ASN1_UTCTIME),
564
+ ASN1_GEN_STR("GENERALIZEDTIME", V_ASN1_GENERALIZEDTIME),
565
+ ASN1_GEN_STR("GENTIME", V_ASN1_GENERALIZEDTIME),
566
+ ASN1_GEN_STR("OCT", V_ASN1_OCTET_STRING),
567
+ ASN1_GEN_STR("OCTETSTRING", V_ASN1_OCTET_STRING),
568
+ ASN1_GEN_STR("BITSTR", V_ASN1_BIT_STRING),
569
+ ASN1_GEN_STR("BITSTRING", V_ASN1_BIT_STRING),
570
+ ASN1_GEN_STR("UNIVERSALSTRING", V_ASN1_UNIVERSALSTRING),
571
+ ASN1_GEN_STR("UNIV", V_ASN1_UNIVERSALSTRING),
572
+ ASN1_GEN_STR("IA5", V_ASN1_IA5STRING),
573
+ ASN1_GEN_STR("IA5STRING", V_ASN1_IA5STRING),
574
+ ASN1_GEN_STR("UTF8", V_ASN1_UTF8STRING),
575
+ ASN1_GEN_STR("UTF8String", V_ASN1_UTF8STRING),
576
+ ASN1_GEN_STR("BMP", V_ASN1_BMPSTRING),
577
+ ASN1_GEN_STR("BMPSTRING", V_ASN1_BMPSTRING),
578
+ ASN1_GEN_STR("VISIBLESTRING", V_ASN1_VISIBLESTRING),
579
+ ASN1_GEN_STR("VISIBLE", V_ASN1_VISIBLESTRING),
580
+ ASN1_GEN_STR("PRINTABLESTRING", V_ASN1_PRINTABLESTRING),
581
+ ASN1_GEN_STR("PRINTABLE", V_ASN1_PRINTABLESTRING),
582
+ ASN1_GEN_STR("T61", V_ASN1_T61STRING),
583
+ ASN1_GEN_STR("T61STRING", V_ASN1_T61STRING),
584
+ ASN1_GEN_STR("TELETEXSTRING", V_ASN1_T61STRING),
585
+ ASN1_GEN_STR("GeneralString", V_ASN1_GENERALSTRING),
586
+ ASN1_GEN_STR("GENSTR", V_ASN1_GENERALSTRING),
587
+ ASN1_GEN_STR("NUMERIC", V_ASN1_NUMERICSTRING),
588
+ ASN1_GEN_STR("NUMERICSTRING", V_ASN1_NUMERICSTRING),
589
+
590
+ /* Special cases */
591
+ ASN1_GEN_STR("SEQUENCE", V_ASN1_SEQUENCE),
592
+ ASN1_GEN_STR("SEQ", V_ASN1_SEQUENCE),
593
+ ASN1_GEN_STR("SET", V_ASN1_SET),
594
+ /* type modifiers */
595
+ /* Explicit tag */
596
+ ASN1_GEN_STR("EXP", ASN1_GEN_FLAG_EXP),
597
+ ASN1_GEN_STR("EXPLICIT", ASN1_GEN_FLAG_EXP),
598
+ /* Implicit tag */
599
+ ASN1_GEN_STR("IMP", ASN1_GEN_FLAG_IMP),
600
+ ASN1_GEN_STR("IMPLICIT", ASN1_GEN_FLAG_IMP),
601
+ /* OCTET STRING wrapper */
602
+ ASN1_GEN_STR("OCTWRAP", ASN1_GEN_FLAG_OCTWRAP),
603
+ /* SEQUENCE wrapper */
604
+ ASN1_GEN_STR("SEQWRAP", ASN1_GEN_FLAG_SEQWRAP),
605
+ /* SET wrapper */
606
+ ASN1_GEN_STR("SETWRAP", ASN1_GEN_FLAG_SETWRAP),
607
+ /* BIT STRING wrapper */
608
+ ASN1_GEN_STR("BITWRAP", ASN1_GEN_FLAG_BITWRAP),
609
+ ASN1_GEN_STR("FORM", ASN1_GEN_FLAG_FORMAT),
610
+ ASN1_GEN_STR("FORMAT", ASN1_GEN_FLAG_FORMAT),
611
+ };
612
+
613
+ if (len == -1)
614
+ len = strlen(tagstr);
615
+
616
+ tntmp = tnst;
617
+ for (i = 0; i < sizeof(tnst) / sizeof(struct tag_name_st); i++, tntmp++) {
618
+ if ((len == tntmp->len) && !strncmp(tntmp->strnam, tagstr, len))
619
+ return tntmp->tag;
620
+ }
621
+
622
+ return -1;
623
+ }
647
624
 
648
625
  static ASN1_TYPE *asn1_str2type(const char *str, int format, int utype)
649
- {
650
- ASN1_TYPE *atmp = NULL;
651
-
652
- CONF_VALUE vtmp;
653
-
654
- unsigned char *rdata;
655
- long rdlen;
656
-
657
- int no_unused = 1;
658
-
659
- if (!(atmp = ASN1_TYPE_new()))
660
- {
661
- OPENSSL_PUT_ERROR(ASN1, ERR_R_MALLOC_FAILURE);
662
- return NULL;
663
- }
664
-
665
- if (!str)
666
- str = "";
667
-
668
- switch(utype)
669
- {
670
-
671
- case V_ASN1_NULL:
672
- if (str && *str)
673
- {
674
- OPENSSL_PUT_ERROR(ASN1, ASN1_R_ILLEGAL_NULL_VALUE);
675
- goto bad_form;
676
- }
677
- break;
678
-
679
- case V_ASN1_BOOLEAN:
680
- if (format != ASN1_GEN_FORMAT_ASCII)
681
- {
682
- OPENSSL_PUT_ERROR(ASN1, ASN1_R_NOT_ASCII_FORMAT);
683
- goto bad_form;
684
- }
685
- vtmp.name = NULL;
686
- vtmp.section = NULL;
687
- vtmp.value = (char *)str;
688
- if (!X509V3_get_value_bool(&vtmp, &atmp->value.boolean))
689
- {
690
- OPENSSL_PUT_ERROR(ASN1, ASN1_R_ILLEGAL_BOOLEAN);
691
- goto bad_str;
692
- }
693
- break;
694
-
695
- case V_ASN1_INTEGER:
696
- case V_ASN1_ENUMERATED:
697
- if (format != ASN1_GEN_FORMAT_ASCII)
698
- {
699
- OPENSSL_PUT_ERROR(ASN1, ASN1_R_INTEGER_NOT_ASCII_FORMAT);
700
- goto bad_form;
701
- }
702
- if (!(atmp->value.integer = s2i_ASN1_INTEGER(NULL, (char *)str)))
703
- {
704
- OPENSSL_PUT_ERROR(ASN1, ASN1_R_ILLEGAL_INTEGER);
705
- goto bad_str;
706
- }
707
- break;
708
-
709
- case V_ASN1_OBJECT:
710
- if (format != ASN1_GEN_FORMAT_ASCII)
711
- {
712
- OPENSSL_PUT_ERROR(ASN1, ASN1_R_OBJECT_NOT_ASCII_FORMAT);
713
- goto bad_form;
714
- }
715
- if (!(atmp->value.object = OBJ_txt2obj(str, 0)))
716
- {
717
- OPENSSL_PUT_ERROR(ASN1, ASN1_R_ILLEGAL_OBJECT);
718
- goto bad_str;
719
- }
720
- break;
721
-
722
- case V_ASN1_UTCTIME:
723
- case V_ASN1_GENERALIZEDTIME:
724
- if (format != ASN1_GEN_FORMAT_ASCII)
725
- {
726
- OPENSSL_PUT_ERROR(ASN1, ASN1_R_TIME_NOT_ASCII_FORMAT);
727
- goto bad_form;
728
- }
729
- if (!(atmp->value.asn1_string = ASN1_STRING_new()))
730
- {
731
- OPENSSL_PUT_ERROR(ASN1, ERR_R_MALLOC_FAILURE);
732
- goto bad_str;
733
- }
734
- if (!ASN1_STRING_set(atmp->value.asn1_string, str, -1))
735
- {
736
- OPENSSL_PUT_ERROR(ASN1, ERR_R_MALLOC_FAILURE);
737
- goto bad_str;
738
- }
739
- atmp->value.asn1_string->type = utype;
740
- if (!ASN1_TIME_check(atmp->value.asn1_string))
741
- {
742
- OPENSSL_PUT_ERROR(ASN1, ASN1_R_ILLEGAL_TIME_VALUE);
743
- goto bad_str;
744
- }
745
-
746
- break;
747
-
748
- case V_ASN1_BMPSTRING:
749
- case V_ASN1_PRINTABLESTRING:
750
- case V_ASN1_IA5STRING:
751
- case V_ASN1_T61STRING:
752
- case V_ASN1_UTF8STRING:
753
- case V_ASN1_VISIBLESTRING:
754
- case V_ASN1_UNIVERSALSTRING:
755
- case V_ASN1_GENERALSTRING:
756
- case V_ASN1_NUMERICSTRING:
757
-
758
- if (format == ASN1_GEN_FORMAT_ASCII)
759
- format = MBSTRING_ASC;
760
- else if (format == ASN1_GEN_FORMAT_UTF8)
761
- format = MBSTRING_UTF8;
762
- else
763
- {
764
- OPENSSL_PUT_ERROR(ASN1, ASN1_R_ILLEGAL_FORMAT);
765
- goto bad_form;
766
- }
767
-
768
-
769
- if (ASN1_mbstring_copy(&atmp->value.asn1_string, (unsigned char *)str,
770
- -1, format, ASN1_tag2bit(utype)) <= 0)
771
- {
772
- OPENSSL_PUT_ERROR(ASN1, ERR_R_MALLOC_FAILURE);
773
- goto bad_str;
774
- }
775
-
776
-
777
- break;
778
-
779
- case V_ASN1_BIT_STRING:
780
-
781
- case V_ASN1_OCTET_STRING:
782
-
783
- if (!(atmp->value.asn1_string = ASN1_STRING_new()))
784
- {
785
- OPENSSL_PUT_ERROR(ASN1, ERR_R_MALLOC_FAILURE);
786
- goto bad_form;
787
- }
788
-
789
- if (format == ASN1_GEN_FORMAT_HEX)
790
- {
791
-
792
- if (!(rdata = string_to_hex((char *)str, &rdlen)))
793
- {
794
- OPENSSL_PUT_ERROR(ASN1, ASN1_R_ILLEGAL_HEX);
795
- goto bad_str;
796
- }
797
-
798
- atmp->value.asn1_string->data = rdata;
799
- atmp->value.asn1_string->length = rdlen;
800
- atmp->value.asn1_string->type = utype;
801
-
802
- }
803
- else if (format == ASN1_GEN_FORMAT_ASCII)
804
- ASN1_STRING_set(atmp->value.asn1_string, str, -1);
805
- else if ((format == ASN1_GEN_FORMAT_BITLIST) && (utype == V_ASN1_BIT_STRING))
806
- {
807
- if (!CONF_parse_list(str, ',', 1, bitstr_cb, atmp->value.bit_string))
808
- {
809
- OPENSSL_PUT_ERROR(ASN1, ASN1_R_LIST_ERROR);
810
- goto bad_str;
811
- }
812
- no_unused = 0;
813
-
814
- }
815
- else
816
- {
817
- OPENSSL_PUT_ERROR(ASN1, ASN1_R_ILLEGAL_BITSTRING_FORMAT);
818
- goto bad_form;
819
- }
820
-
821
- if ((utype == V_ASN1_BIT_STRING) && no_unused)
822
- {
823
- atmp->value.asn1_string->flags
824
- &= ~(ASN1_STRING_FLAG_BITS_LEFT|0x07);
825
- atmp->value.asn1_string->flags
826
- |= ASN1_STRING_FLAG_BITS_LEFT;
827
- }
828
-
829
-
830
- break;
831
-
832
- default:
833
- OPENSSL_PUT_ERROR(ASN1, ASN1_R_UNSUPPORTED_TYPE);
834
- goto bad_str;
835
- break;
836
- }
837
-
838
-
839
- atmp->type = utype;
840
- return atmp;
841
-
842
-
843
- bad_str:
844
- ERR_add_error_data(2, "string=", str);
845
- bad_form:
846
-
847
- ASN1_TYPE_free(atmp);
848
- return NULL;
849
-
850
- }
626
+ {
627
+ ASN1_TYPE *atmp = NULL;
628
+
629
+ CONF_VALUE vtmp;
630
+
631
+ unsigned char *rdata;
632
+ long rdlen;
633
+
634
+ int no_unused = 1;
635
+
636
+ if (!(atmp = ASN1_TYPE_new())) {
637
+ OPENSSL_PUT_ERROR(ASN1, ERR_R_MALLOC_FAILURE);
638
+ return NULL;
639
+ }
640
+
641
+ if (!str)
642
+ str = "";
643
+
644
+ switch (utype) {
645
+
646
+ case V_ASN1_NULL:
647
+ if (str && *str) {
648
+ OPENSSL_PUT_ERROR(ASN1, ASN1_R_ILLEGAL_NULL_VALUE);
649
+ goto bad_form;
650
+ }
651
+ break;
652
+
653
+ case V_ASN1_BOOLEAN:
654
+ if (format != ASN1_GEN_FORMAT_ASCII) {
655
+ OPENSSL_PUT_ERROR(ASN1, ASN1_R_NOT_ASCII_FORMAT);
656
+ goto bad_form;
657
+ }
658
+ vtmp.name = NULL;
659
+ vtmp.section = NULL;
660
+ vtmp.value = (char *)str;
661
+ if (!X509V3_get_value_bool(&vtmp, &atmp->value.boolean)) {
662
+ OPENSSL_PUT_ERROR(ASN1, ASN1_R_ILLEGAL_BOOLEAN);
663
+ goto bad_str;
664
+ }
665
+ break;
666
+
667
+ case V_ASN1_INTEGER:
668
+ case V_ASN1_ENUMERATED:
669
+ if (format != ASN1_GEN_FORMAT_ASCII) {
670
+ OPENSSL_PUT_ERROR(ASN1, ASN1_R_INTEGER_NOT_ASCII_FORMAT);
671
+ goto bad_form;
672
+ }
673
+ if (!(atmp->value.integer = s2i_ASN1_INTEGER(NULL, (char *)str))) {
674
+ OPENSSL_PUT_ERROR(ASN1, ASN1_R_ILLEGAL_INTEGER);
675
+ goto bad_str;
676
+ }
677
+ break;
678
+
679
+ case V_ASN1_OBJECT:
680
+ if (format != ASN1_GEN_FORMAT_ASCII) {
681
+ OPENSSL_PUT_ERROR(ASN1, ASN1_R_OBJECT_NOT_ASCII_FORMAT);
682
+ goto bad_form;
683
+ }
684
+ if (!(atmp->value.object = OBJ_txt2obj(str, 0))) {
685
+ OPENSSL_PUT_ERROR(ASN1, ASN1_R_ILLEGAL_OBJECT);
686
+ goto bad_str;
687
+ }
688
+ break;
689
+
690
+ case V_ASN1_UTCTIME:
691
+ case V_ASN1_GENERALIZEDTIME:
692
+ if (format != ASN1_GEN_FORMAT_ASCII) {
693
+ OPENSSL_PUT_ERROR(ASN1, ASN1_R_TIME_NOT_ASCII_FORMAT);
694
+ goto bad_form;
695
+ }
696
+ if (!(atmp->value.asn1_string = ASN1_STRING_new())) {
697
+ OPENSSL_PUT_ERROR(ASN1, ERR_R_MALLOC_FAILURE);
698
+ goto bad_str;
699
+ }
700
+ if (!ASN1_STRING_set(atmp->value.asn1_string, str, -1)) {
701
+ OPENSSL_PUT_ERROR(ASN1, ERR_R_MALLOC_FAILURE);
702
+ goto bad_str;
703
+ }
704
+ atmp->value.asn1_string->type = utype;
705
+ if (!ASN1_TIME_check(atmp->value.asn1_string)) {
706
+ OPENSSL_PUT_ERROR(ASN1, ASN1_R_ILLEGAL_TIME_VALUE);
707
+ goto bad_str;
708
+ }
709
+
710
+ break;
711
+
712
+ case V_ASN1_BMPSTRING:
713
+ case V_ASN1_PRINTABLESTRING:
714
+ case V_ASN1_IA5STRING:
715
+ case V_ASN1_T61STRING:
716
+ case V_ASN1_UTF8STRING:
717
+ case V_ASN1_VISIBLESTRING:
718
+ case V_ASN1_UNIVERSALSTRING:
719
+ case V_ASN1_GENERALSTRING:
720
+ case V_ASN1_NUMERICSTRING:
721
+
722
+ if (format == ASN1_GEN_FORMAT_ASCII)
723
+ format = MBSTRING_ASC;
724
+ else if (format == ASN1_GEN_FORMAT_UTF8)
725
+ format = MBSTRING_UTF8;
726
+ else {
727
+ OPENSSL_PUT_ERROR(ASN1, ASN1_R_ILLEGAL_FORMAT);
728
+ goto bad_form;
729
+ }
730
+
731
+ if (ASN1_mbstring_copy(&atmp->value.asn1_string, (unsigned char *)str,
732
+ -1, format, ASN1_tag2bit(utype)) <= 0) {
733
+ OPENSSL_PUT_ERROR(ASN1, ERR_R_MALLOC_FAILURE);
734
+ goto bad_str;
735
+ }
736
+
737
+ break;
738
+
739
+ case V_ASN1_BIT_STRING:
740
+
741
+ case V_ASN1_OCTET_STRING:
742
+
743
+ if (!(atmp->value.asn1_string = ASN1_STRING_new())) {
744
+ OPENSSL_PUT_ERROR(ASN1, ERR_R_MALLOC_FAILURE);
745
+ goto bad_form;
746
+ }
747
+
748
+ if (format == ASN1_GEN_FORMAT_HEX) {
749
+
750
+ if (!(rdata = string_to_hex((char *)str, &rdlen))) {
751
+ OPENSSL_PUT_ERROR(ASN1, ASN1_R_ILLEGAL_HEX);
752
+ goto bad_str;
753
+ }
754
+
755
+ atmp->value.asn1_string->data = rdata;
756
+ atmp->value.asn1_string->length = rdlen;
757
+ atmp->value.asn1_string->type = utype;
758
+
759
+ } else if (format == ASN1_GEN_FORMAT_ASCII)
760
+ ASN1_STRING_set(atmp->value.asn1_string, str, -1);
761
+ else if ((format == ASN1_GEN_FORMAT_BITLIST)
762
+ && (utype == V_ASN1_BIT_STRING)) {
763
+ if (!CONF_parse_list
764
+ (str, ',', 1, bitstr_cb, atmp->value.bit_string)) {
765
+ OPENSSL_PUT_ERROR(ASN1, ASN1_R_LIST_ERROR);
766
+ goto bad_str;
767
+ }
768
+ no_unused = 0;
769
+
770
+ } else {
771
+ OPENSSL_PUT_ERROR(ASN1, ASN1_R_ILLEGAL_BITSTRING_FORMAT);
772
+ goto bad_form;
773
+ }
774
+
775
+ if ((utype == V_ASN1_BIT_STRING) && no_unused) {
776
+ atmp->value.asn1_string->flags
777
+ &= ~(ASN1_STRING_FLAG_BITS_LEFT | 0x07);
778
+ atmp->value.asn1_string->flags |= ASN1_STRING_FLAG_BITS_LEFT;
779
+ }
780
+
781
+ break;
782
+
783
+ default:
784
+ OPENSSL_PUT_ERROR(ASN1, ASN1_R_UNSUPPORTED_TYPE);
785
+ goto bad_str;
786
+ break;
787
+ }
788
+
789
+ atmp->type = utype;
790
+ return atmp;
791
+
792
+ bad_str:
793
+ ERR_add_error_data(2, "string=", str);
794
+ bad_form:
795
+
796
+ ASN1_TYPE_free(atmp);
797
+ return NULL;
798
+
799
+ }
851
800
 
852
801
  static int bitstr_cb(const char *elem, int len, void *bitstr)
853
- {
854
- long bitnum;
855
- char *eptr;
856
- if (!elem)
857
- return 0;
858
- bitnum = strtoul(elem, &eptr, 10);
859
- if (eptr && *eptr && (eptr != elem + len))
860
- return 0;
861
- if (bitnum < 0)
862
- {
863
- OPENSSL_PUT_ERROR(ASN1, ASN1_R_INVALID_NUMBER);
864
- return 0;
865
- }
866
- if (!ASN1_BIT_STRING_set_bit(bitstr, bitnum, 1))
867
- {
868
- OPENSSL_PUT_ERROR(ASN1, ERR_R_MALLOC_FAILURE);
869
- return 0;
870
- }
871
- return 1;
872
- }
873
-
802
+ {
803
+ long bitnum;
804
+ char *eptr;
805
+ if (!elem)
806
+ return 0;
807
+ bitnum = strtoul(elem, &eptr, 10);
808
+ if (eptr && *eptr && (eptr != elem + len))
809
+ return 0;
810
+ if (bitnum < 0) {
811
+ OPENSSL_PUT_ERROR(ASN1, ASN1_R_INVALID_NUMBER);
812
+ return 0;
813
+ }
814
+ if (!ASN1_BIT_STRING_set_bit(bitstr, bitnum, 1)) {
815
+ OPENSSL_PUT_ERROR(ASN1, ERR_R_MALLOC_FAILURE);
816
+ return 0;
817
+ }
818
+ return 1;
819
+ }