grpc 1.9.1 → 1.10.0.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 (637) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +2654 -953
  3. data/etc/roots.pem +282 -683
  4. data/include/grpc/compression.h +9 -26
  5. data/include/grpc/grpc.h +10 -24
  6. data/include/grpc/grpc_security.h +7 -1
  7. data/include/grpc/impl/codegen/compression_types.h +5 -62
  8. data/include/grpc/impl/codegen/grpc_types.h +10 -6
  9. data/include/grpc/module.modulemap +1 -10
  10. data/include/grpc/support/alloc.h +3 -2
  11. data/include/grpc/support/log.h +1 -2
  12. data/{src/core/lib/gpr/thd_internal.h → include/grpc/support/thd_id.h} +23 -9
  13. data/src/boringssl/err_data.c +550 -496
  14. data/src/core/ext/census/grpc_context.cc +2 -1
  15. data/src/core/ext/filters/client_channel/backup_poller.cc +5 -4
  16. data/src/core/ext/filters/client_channel/channel_connectivity.cc +7 -7
  17. data/src/core/ext/filters/client_channel/client_channel.cc +162 -172
  18. data/src/core/ext/filters/client_channel/client_channel_factory.cc +4 -2
  19. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +10 -10
  20. data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +18 -14
  21. data/src/core/ext/filters/client_channel/http_proxy.cc +3 -1
  22. data/src/core/ext/filters/client_channel/lb_policy.cc +21 -105
  23. data/src/core/ext/filters/client_channel/lb_policy.h +166 -170
  24. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +41 -36
  25. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +1452 -1459
  26. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.h +1 -1
  27. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +3 -2
  28. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc +7 -8
  29. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +27 -27
  30. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +279 -304
  31. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +358 -330
  32. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.cc +30 -41
  33. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +7 -14
  34. data/src/core/ext/filters/client_channel/lb_policy_factory.cc +8 -21
  35. data/src/core/ext/filters/client_channel/lb_policy_factory.h +23 -27
  36. data/src/core/ext/filters/client_channel/lb_policy_registry.cc +58 -33
  37. data/src/core/ext/filters/client_channel/lb_policy_registry.h +25 -12
  38. data/src/core/ext/filters/client_channel/parse_address.cc +10 -8
  39. data/src/core/ext/filters/client_channel/proxy_mapper_registry.cc +2 -2
  40. data/src/core/ext/filters/client_channel/resolver.cc +6 -52
  41. data/src/core/ext/filters/client_channel/resolver.h +98 -55
  42. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +266 -237
  43. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +5 -5
  44. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +31 -27
  45. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +244 -207
  46. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +161 -148
  47. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +47 -31
  48. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +126 -126
  49. data/src/core/ext/filters/client_channel/resolver_factory.h +33 -32
  50. data/src/core/ext/filters/client_channel/resolver_registry.cc +110 -90
  51. data/src/core/ext/filters/client_channel/resolver_registry.h +49 -36
  52. data/src/core/ext/filters/client_channel/retry_throttle.cc +29 -22
  53. data/src/core/ext/filters/client_channel/subchannel.cc +173 -173
  54. data/src/core/ext/filters/client_channel/subchannel.h +38 -45
  55. data/src/core/ext/filters/client_channel/subchannel_index.cc +44 -40
  56. data/src/core/ext/filters/client_channel/uri_parser.cc +3 -3
  57. data/src/core/ext/filters/deadline/deadline_filter.cc +27 -18
  58. data/src/core/ext/filters/http/client/http_client_filter.cc +26 -23
  59. data/src/core/ext/filters/http/http_filters_plugin.cc +3 -2
  60. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +78 -110
  61. data/src/core/ext/filters/http/server/http_server_filter.cc +29 -26
  62. data/src/core/ext/filters/load_reporting/server_load_reporting_filter.cc +9 -11
  63. data/src/core/ext/filters/load_reporting/server_load_reporting_plugin.cc +2 -1
  64. data/src/core/ext/filters/max_age/max_age_filter.cc +14 -14
  65. data/src/core/ext/filters/message_size/message_size_filter.cc +20 -18
  66. data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc +4 -4
  67. data/src/core/ext/filters/workarounds/workaround_utils.cc +4 -4
  68. data/src/core/ext/transport/chttp2/alpn/alpn.cc +2 -1
  69. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +10 -10
  70. data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +4 -4
  71. data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +11 -12
  72. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +16 -13
  73. data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +36 -9
  74. data/src/core/ext/transport/chttp2/transport/bin_decoder.h +3 -0
  75. data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +17 -14
  76. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +139 -145
  77. data/src/core/ext/transport/chttp2/transport/flow_control.cc +16 -14
  78. data/src/core/ext/transport/chttp2/transport/flow_control.h +8 -7
  79. data/src/core/ext/transport/chttp2/transport/frame_data.cc +35 -33
  80. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +27 -25
  81. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +12 -12
  82. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +16 -15
  83. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +19 -19
  84. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +11 -11
  85. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +23 -22
  86. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +35 -35
  87. data/src/core/ext/transport/chttp2/transport/hpack_table.cc +10 -7
  88. data/src/core/ext/transport/chttp2/transport/http2_settings.cc +2 -2
  89. data/src/core/ext/transport/chttp2/transport/incoming_metadata.cc +2 -2
  90. data/src/core/ext/transport/chttp2/transport/internal.h +1 -1
  91. data/src/core/ext/transport/chttp2/transport/parsing.cc +35 -39
  92. data/src/core/ext/transport/chttp2/transport/stream_map.cc +8 -7
  93. data/src/core/ext/transport/chttp2/transport/varint.cc +5 -5
  94. data/src/core/ext/transport/chttp2/transport/writing.cc +18 -18
  95. data/src/core/ext/transport/inproc/inproc_transport.cc +43 -23
  96. data/src/core/lib/{gpr → avl}/avl.cc +61 -57
  97. data/{include/grpc/support → src/core/lib/avl}/avl.h +25 -35
  98. data/src/core/lib/backoff/backoff.cc +6 -5
  99. data/src/core/lib/channel/channel_args.cc +23 -109
  100. data/src/core/lib/channel/channel_args.h +5 -31
  101. data/src/core/lib/channel/channel_stack.cc +11 -8
  102. data/src/core/lib/channel/channel_stack_builder.cc +10 -7
  103. data/src/core/lib/channel/connected_channel.cc +18 -17
  104. data/src/core/lib/channel/handshaker.cc +8 -8
  105. data/src/core/lib/channel/handshaker_registry.cc +3 -2
  106. data/src/core/lib/compression/algorithm_metadata.h +13 -6
  107. data/src/core/lib/compression/compression.cc +72 -183
  108. data/src/core/lib/compression/compression_internal.cc +274 -0
  109. data/src/core/lib/compression/compression_internal.h +86 -0
  110. data/src/core/lib/compression/message_compress.cc +15 -15
  111. data/src/core/lib/compression/message_compress.h +4 -3
  112. data/src/core/lib/compression/stream_compression_gzip.cc +8 -8
  113. data/src/core/lib/compression/stream_compression_identity.cc +1 -1
  114. data/src/core/lib/debug/stats.cc +10 -8
  115. data/src/core/lib/debug/stats_data.cc +2 -1
  116. data/src/core/lib/debug/trace.cc +3 -3
  117. data/src/core/lib/gpr/alloc.cc +7 -11
  118. data/src/core/lib/gpr/arena.cc +34 -12
  119. data/src/core/lib/gpr/atm.cc +2 -1
  120. data/src/core/lib/gpr/cpu_linux.cc +3 -3
  121. data/src/core/lib/gpr/cpu_posix.cc +2 -1
  122. data/src/core/lib/gpr/env.h +1 -1
  123. data/src/core/lib/gpr/env_linux.cc +1 -1
  124. data/src/core/lib/gpr/env_windows.cc +4 -4
  125. data/src/core/lib/gpr/fork.cc +16 -2
  126. data/src/core/lib/gpr/host_port.cc +5 -4
  127. data/{include/grpc/support → src/core/lib/gpr}/host_port.h +5 -13
  128. data/src/core/lib/gpr/log.cc +5 -4
  129. data/src/core/lib/gpr/log_linux.cc +1 -1
  130. data/src/core/lib/gpr/mpscq.cc +1 -0
  131. data/src/core/lib/gpr/murmur_hash.cc +4 -4
  132. data/src/core/lib/gpr/string.cc +19 -16
  133. data/src/core/lib/gpr/string_posix.cc +3 -3
  134. data/src/core/lib/gpr/sync_posix.cc +5 -9
  135. data/src/core/lib/gpr/thd.cc +3 -3
  136. data/{include/grpc/support → src/core/lib/gpr}/thd.h +20 -28
  137. data/src/core/lib/gpr/thd_posix.cc +6 -4
  138. data/src/core/lib/gpr/thd_windows.cc +3 -1
  139. data/src/core/lib/gpr/time.cc +6 -4
  140. data/src/core/lib/gpr/time_posix.cc +2 -2
  141. data/{include/grpc/support → src/core/lib/gpr}/tls.h +6 -6
  142. data/{include/grpc/support → src/core/lib/gpr}/tls_gcc.h +3 -3
  143. data/{include/grpc/support → src/core/lib/gpr}/tls_msvc.h +3 -3
  144. data/src/core/lib/gpr/tls_pthread.cc +1 -1
  145. data/{include/grpc/support → src/core/lib/gpr}/tls_pthread.h +3 -3
  146. data/{include/grpc/support → src/core/lib/gpr}/useful.h +3 -3
  147. data/src/core/lib/{gpr++ → gprpp}/abstract.h +3 -3
  148. data/src/core/lib/{gpr++ → gprpp}/atomic.h +5 -5
  149. data/src/core/lib/{gpr++ → gprpp}/atomic_with_atm.h +3 -3
  150. data/src/core/lib/{gpr++ → gprpp}/atomic_with_std.h +3 -3
  151. data/src/core/lib/{gpr++ → gprpp}/debug_location.h +3 -3
  152. data/src/core/lib/{gpr++ → gprpp}/inlined_vector.h +44 -22
  153. data/src/core/lib/{gpr++ → gprpp}/manual_constructor.h +2 -2
  154. data/src/core/lib/{gpr++ → gprpp}/memory.h +14 -5
  155. data/src/core/lib/{gpr++ → gprpp}/orphanable.h +39 -14
  156. data/src/core/lib/{gpr++ → gprpp}/ref_counted.h +42 -10
  157. data/src/core/lib/{gpr++ → gprpp}/ref_counted_ptr.h +18 -8
  158. data/src/core/lib/http/format_request.cc +3 -3
  159. data/src/core/lib/http/httpcli.cc +6 -7
  160. data/src/core/lib/http/httpcli_security_connector.cc +10 -10
  161. data/src/core/lib/http/parser.cc +16 -12
  162. data/src/core/lib/iomgr/call_combiner.cc +12 -13
  163. data/src/core/lib/iomgr/closure.h +4 -6
  164. data/src/core/lib/iomgr/combiner.cc +10 -21
  165. data/src/core/lib/iomgr/error.cc +50 -55
  166. data/src/core/lib/iomgr/ev_epoll1_linux.cc +41 -52
  167. data/src/core/lib/iomgr/ev_epollex_linux.cc +80 -28
  168. data/src/core/lib/iomgr/ev_epollsig_linux.cc +23 -30
  169. data/src/core/lib/iomgr/ev_poll_posix.cc +52 -46
  170. data/src/core/lib/iomgr/ev_posix.cc +47 -6
  171. data/src/core/lib/iomgr/exec_ctx.cc +10 -10
  172. data/src/core/lib/iomgr/exec_ctx.h +1 -1
  173. data/src/core/lib/iomgr/executor.cc +16 -13
  174. data/src/core/lib/iomgr/fork_posix.cc +1 -3
  175. data/src/core/lib/iomgr/gethostname_host_name_max.cc +1 -1
  176. data/src/core/lib/iomgr/iocp_windows.cc +1 -2
  177. data/src/core/lib/iomgr/iomgr.cc +2 -2
  178. data/src/core/lib/iomgr/iomgr_uv.cc +2 -0
  179. data/src/core/lib/iomgr/iomgr_uv.h +1 -1
  180. data/src/core/lib/iomgr/is_epollexclusive_available.cc +5 -4
  181. data/src/core/lib/iomgr/load_file.cc +3 -3
  182. data/src/core/lib/iomgr/pollset_windows.cc +1 -1
  183. data/src/core/lib/iomgr/resolve_address_posix.cc +10 -9
  184. data/src/core/lib/iomgr/resolve_address_uv.cc +2 -2
  185. data/src/core/lib/iomgr/resolve_address_windows.cc +3 -2
  186. data/src/core/lib/iomgr/resource_quota.cc +36 -34
  187. data/src/core/lib/iomgr/sockaddr_utils.cc +39 -23
  188. data/src/core/lib/iomgr/socket_factory_posix.cc +5 -5
  189. data/src/core/lib/iomgr/socket_mutator.cc +7 -7
  190. data/src/core/lib/iomgr/socket_utils_common_posix.cc +7 -4
  191. data/src/core/lib/iomgr/socket_utils_linux.cc +3 -2
  192. data/src/core/lib/iomgr/tcp_client_posix.cc +7 -6
  193. data/src/core/lib/iomgr/tcp_client_windows.cc +0 -1
  194. data/src/core/lib/iomgr/tcp_posix.cc +47 -55
  195. data/src/core/lib/iomgr/tcp_server_posix.cc +12 -10
  196. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +7 -5
  197. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +4 -3
  198. data/src/core/lib/iomgr/tcp_windows.cc +1 -1
  199. data/src/core/lib/iomgr/timer_generic.cc +16 -14
  200. data/src/core/lib/iomgr/timer_heap.cc +8 -7
  201. data/src/core/lib/iomgr/timer_manager.cc +4 -3
  202. data/src/core/lib/iomgr/udp_server.cc +24 -16
  203. data/src/core/lib/iomgr/unix_sockets_posix.cc +15 -10
  204. data/src/core/lib/iomgr/wakeup_fd_cv.cc +6 -5
  205. data/src/core/lib/iomgr/wakeup_fd_eventfd.cc +1 -2
  206. data/src/core/lib/json/json.cc +1 -1
  207. data/src/core/lib/json/json_reader.cc +8 -6
  208. data/src/core/lib/json/json_string.cc +19 -18
  209. data/src/core/lib/json/json_writer.cc +10 -8
  210. data/src/core/lib/profiling/basic_timers.cc +1 -1
  211. data/src/core/lib/profiling/timers.h +3 -20
  212. data/src/core/lib/security/context/security_context.cc +16 -14
  213. data/src/core/lib/security/credentials/composite/composite_credentials.cc +17 -14
  214. data/src/core/lib/security/credentials/credentials.cc +9 -8
  215. data/src/core/lib/security/credentials/credentials.h +1 -1
  216. data/src/core/lib/security/credentials/credentials_metadata.cc +2 -2
  217. data/src/core/lib/security/credentials/fake/fake_credentials.cc +12 -13
  218. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +7 -4
  219. data/src/core/lib/security/credentials/iam/iam_credentials.cc +5 -3
  220. data/src/core/lib/security/credentials/jwt/json_token.cc +4 -3
  221. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +7 -7
  222. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +21 -18
  223. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +23 -18
  224. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +11 -7
  225. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +22 -21
  226. data/src/core/lib/security/{transport → security_connector}/security_connector.cc +46 -43
  227. data/src/core/lib/security/{transport → security_connector}/security_connector.h +3 -3
  228. data/src/core/lib/security/transport/client_auth_filter.cc +32 -34
  229. data/src/core/lib/security/transport/lb_targets_info.cc +7 -5
  230. data/src/core/lib/security/transport/secure_endpoint.cc +21 -21
  231. data/src/core/lib/security/transport/security_handshaker.cc +19 -18
  232. data/src/core/lib/security/transport/security_handshaker.h +1 -1
  233. data/src/core/lib/security/transport/server_auth_filter.cc +21 -21
  234. data/src/core/lib/slice/b64.cc +19 -16
  235. data/src/core/lib/slice/percent_encoding.cc +5 -5
  236. data/src/core/lib/slice/slice.cc +35 -33
  237. data/src/core/lib/slice/slice_buffer.cc +16 -14
  238. data/src/core/lib/slice/slice_hash_table.cc +3 -2
  239. data/src/core/lib/slice/slice_intern.cc +21 -25
  240. data/src/core/lib/slice/slice_string_helpers.cc +45 -9
  241. data/src/core/lib/slice/slice_string_helpers.h +6 -0
  242. data/src/core/lib/surface/byte_buffer.cc +2 -2
  243. data/src/core/lib/surface/byte_buffer_reader.cc +6 -3
  244. data/src/core/lib/surface/call.cc +171 -260
  245. data/src/core/lib/surface/call_test_only.h +1 -13
  246. data/src/core/lib/surface/channel.cc +20 -43
  247. data/src/core/lib/surface/channel_init.cc +7 -7
  248. data/src/core/lib/surface/channel_ping.cc +2 -2
  249. data/src/core/lib/surface/completion_queue.cc +69 -75
  250. data/src/core/lib/surface/init.cc +4 -5
  251. data/src/core/lib/surface/init_secure.cc +1 -1
  252. data/src/core/lib/surface/lame_client.cc +1 -1
  253. data/src/core/lib/surface/server.cc +64 -59
  254. data/src/core/lib/surface/version.cc +2 -2
  255. data/src/core/lib/transport/bdp_estimator.cc +6 -5
  256. data/src/core/lib/transport/byte_stream.cc +23 -14
  257. data/src/core/lib/transport/byte_stream.h +1 -1
  258. data/src/core/lib/transport/connectivity_state.cc +9 -13
  259. data/src/core/lib/transport/error_utils.cc +10 -7
  260. data/src/core/lib/transport/metadata.cc +27 -26
  261. data/src/core/lib/transport/metadata.h +1 -1
  262. data/src/core/lib/transport/pid_controller.cc +2 -1
  263. data/src/core/lib/transport/service_config.cc +5 -5
  264. data/src/core/lib/transport/static_metadata.cc +225 -222
  265. data/src/core/lib/transport/static_metadata.h +77 -76
  266. data/src/core/lib/transport/timeout_encoding.cc +3 -2
  267. data/src/core/lib/transport/transport.cc +6 -5
  268. data/src/core/lib/transport/transport_op_string.cc +0 -1
  269. data/src/core/plugin_registry/grpc_plugin_registry.cc +4 -4
  270. data/src/core/tsi/alts_transport_security.cc +61 -0
  271. data/src/core/tsi/{gts_transport_security.h → alts_transport_security.h} +16 -8
  272. data/src/core/tsi/fake_transport_security.cc +59 -43
  273. data/src/core/tsi/ssl_transport_security.cc +122 -107
  274. data/src/core/tsi/transport_security.cc +3 -3
  275. data/src/core/tsi/transport_security_adapter.cc +16 -10
  276. data/src/ruby/bin/apis/pubsub_demo.rb +1 -1
  277. data/src/ruby/ext/grpc/rb_channel.c +3 -4
  278. data/src/ruby/ext/grpc/rb_compression_options.c +13 -3
  279. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +4 -76
  280. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +8 -120
  281. data/src/ruby/ext/grpc/rb_server.c +52 -28
  282. data/src/ruby/lib/grpc/generic/rpc_server.rb +7 -4
  283. data/src/ruby/lib/grpc/version.rb +1 -1
  284. data/src/ruby/pb/test/client.rb +1 -1
  285. data/src/ruby/pb/test/server.rb +1 -1
  286. data/src/ruby/spec/client_server_spec.rb +4 -2
  287. data/src/ruby/spec/generic/active_call_spec.rb +2 -1
  288. data/src/ruby/spec/generic/client_stub_spec.rb +32 -8
  289. data/src/ruby/spec/server_spec.rb +26 -7
  290. data/third_party/boringssl/crypto/asn1/a_bitstr.c +7 -2
  291. data/third_party/boringssl/crypto/asn1/a_d2i_fp.c +15 -0
  292. data/third_party/boringssl/crypto/asn1/a_gentm.c +1 -1
  293. data/third_party/boringssl/crypto/asn1/a_print.c +0 -28
  294. data/third_party/boringssl/crypto/asn1/a_strnid.c +3 -0
  295. data/third_party/boringssl/crypto/asn1/a_time.c +17 -9
  296. data/third_party/boringssl/crypto/asn1/a_utctm.c +1 -1
  297. data/third_party/boringssl/crypto/asn1/asn1_lib.c +5 -49
  298. data/third_party/boringssl/crypto/asn1/asn1_locl.h +1 -1
  299. data/third_party/boringssl/crypto/asn1/tasn_dec.c +9 -9
  300. data/third_party/boringssl/crypto/asn1/tasn_enc.c +0 -6
  301. data/third_party/boringssl/crypto/asn1/time_support.c +5 -5
  302. data/third_party/boringssl/crypto/base64/base64.c +65 -43
  303. data/third_party/boringssl/crypto/bio/bio.c +134 -110
  304. data/third_party/boringssl/crypto/bio/bio_mem.c +9 -9
  305. data/third_party/boringssl/crypto/bio/connect.c +17 -17
  306. data/third_party/boringssl/crypto/bio/fd.c +2 -1
  307. data/third_party/boringssl/crypto/bio/file.c +14 -14
  308. data/third_party/boringssl/crypto/bio/hexdump.c +15 -16
  309. data/third_party/boringssl/crypto/bio/internal.h +14 -14
  310. data/third_party/boringssl/crypto/bio/pair.c +45 -45
  311. data/third_party/boringssl/crypto/bio/printf.c +6 -10
  312. data/third_party/boringssl/crypto/{bn → bn_extra}/bn_asn1.c +9 -9
  313. data/third_party/boringssl/crypto/{bn → bn_extra}/convert.c +18 -223
  314. data/third_party/boringssl/crypto/buf/buf.c +20 -44
  315. data/third_party/boringssl/crypto/bytestring/ber.c +35 -35
  316. data/third_party/boringssl/crypto/bytestring/cbb.c +24 -24
  317. data/third_party/boringssl/crypto/bytestring/cbs.c +33 -37
  318. data/third_party/boringssl/crypto/bytestring/internal.h +38 -38
  319. data/third_party/boringssl/crypto/chacha/chacha.c +7 -7
  320. data/third_party/boringssl/crypto/{asn1/t_bitst.c → cipher_extra/cipher_extra.c} +49 -38
  321. data/third_party/boringssl/crypto/{cipher → cipher_extra}/derive_key.c +0 -2
  322. data/third_party/boringssl/crypto/cipher_extra/e_aesctrhmac.c +281 -0
  323. data/third_party/boringssl/crypto/cipher_extra/e_aesgcmsiv.c +867 -0
  324. data/third_party/boringssl/crypto/cipher_extra/e_chacha20poly1305.c +326 -0
  325. data/third_party/boringssl/crypto/{cipher → cipher_extra}/e_null.c +0 -1
  326. data/third_party/boringssl/crypto/{cipher → cipher_extra}/e_rc2.c +22 -10
  327. data/third_party/boringssl/crypto/{cipher → cipher_extra}/e_rc4.c +0 -0
  328. data/third_party/boringssl/crypto/{cipher → cipher_extra}/e_ssl3.c +120 -64
  329. data/third_party/boringssl/crypto/{cipher → cipher_extra}/e_tls.c +220 -141
  330. data/third_party/boringssl/crypto/{asn1/x_bignum.c → cipher_extra/internal.h} +61 -86
  331. data/third_party/boringssl/crypto/cipher_extra/tls_cbc.c +482 -0
  332. data/third_party/boringssl/crypto/cmac/cmac.c +20 -20
  333. data/third_party/boringssl/crypto/conf/conf.c +32 -20
  334. data/third_party/boringssl/crypto/conf/internal.h +3 -3
  335. data/third_party/boringssl/crypto/cpu-aarch64-linux.c +5 -5
  336. data/third_party/boringssl/crypto/cpu-arm-linux.c +44 -41
  337. data/third_party/boringssl/crypto/cpu-intel.c +68 -43
  338. data/third_party/boringssl/crypto/cpu-ppc64le.c +5 -7
  339. data/third_party/boringssl/crypto/crypto.c +54 -32
  340. data/third_party/boringssl/crypto/curve25519/curve25519.c +269 -269
  341. data/third_party/boringssl/crypto/curve25519/internal.h +28 -8
  342. data/third_party/boringssl/crypto/curve25519/spake25519.c +180 -106
  343. data/third_party/boringssl/crypto/curve25519/x25519-x86_64.c +9 -9
  344. data/third_party/boringssl/crypto/dh/check.c +33 -34
  345. data/third_party/boringssl/crypto/dh/dh.c +72 -36
  346. data/third_party/boringssl/crypto/dh/dh_asn1.c +1 -1
  347. data/third_party/boringssl/crypto/dh/params.c +1 -161
  348. data/third_party/boringssl/crypto/digest_extra/digest_extra.c +240 -0
  349. data/third_party/boringssl/crypto/dsa/dsa.c +127 -87
  350. data/third_party/boringssl/crypto/dsa/dsa_asn1.c +1 -1
  351. data/third_party/boringssl/crypto/{ec → ec_extra}/ec_asn1.c +83 -70
  352. data/third_party/boringssl/crypto/ecdh/ecdh.c +1 -1
  353. data/third_party/boringssl/crypto/{ecdsa → ecdsa_extra}/ecdsa_asn1.c +86 -31
  354. data/third_party/boringssl/crypto/engine/engine.c +6 -6
  355. data/third_party/boringssl/crypto/err/err.c +197 -106
  356. data/third_party/boringssl/crypto/err/internal.h +58 -0
  357. data/third_party/boringssl/crypto/evp/digestsign.c +86 -14
  358. data/third_party/boringssl/crypto/evp/evp.c +6 -11
  359. data/third_party/boringssl/crypto/evp/evp_asn1.c +17 -17
  360. data/third_party/boringssl/crypto/evp/evp_ctx.c +15 -11
  361. data/third_party/boringssl/crypto/evp/internal.h +66 -51
  362. data/third_party/boringssl/crypto/evp/p_dsa_asn1.c +11 -11
  363. data/third_party/boringssl/crypto/evp/p_ec.c +10 -8
  364. data/third_party/boringssl/crypto/evp/p_ec_asn1.c +11 -12
  365. data/third_party/boringssl/crypto/evp/p_ed25519.c +71 -0
  366. data/third_party/boringssl/crypto/evp/p_ed25519_asn1.c +190 -0
  367. data/third_party/boringssl/crypto/evp/p_rsa.c +50 -95
  368. data/third_party/boringssl/crypto/evp/p_rsa_asn1.c +28 -18
  369. data/third_party/boringssl/crypto/evp/pbkdf.c +49 -56
  370. data/third_party/boringssl/crypto/evp/print.c +5 -36
  371. data/third_party/boringssl/crypto/evp/scrypt.c +209 -0
  372. data/third_party/boringssl/crypto/ex_data.c +15 -45
  373. data/third_party/boringssl/crypto/fipsmodule/aes/internal.h +100 -0
  374. data/third_party/boringssl/crypto/fipsmodule/bcm.c +679 -0
  375. data/third_party/boringssl/crypto/{bn → fipsmodule/bn}/internal.h +40 -27
  376. data/third_party/boringssl/crypto/{bn → fipsmodule/bn}/rsaz_exp.h +0 -0
  377. data/third_party/boringssl/crypto/{cipher → fipsmodule/cipher}/internal.h +34 -67
  378. data/third_party/boringssl/crypto/fipsmodule/delocate.h +88 -0
  379. data/third_party/boringssl/crypto/{des → fipsmodule/des}/internal.h +18 -4
  380. data/third_party/boringssl/crypto/{digest → fipsmodule/digest}/internal.h +18 -18
  381. data/third_party/boringssl/crypto/{digest → fipsmodule/digest}/md32_common.h +58 -64
  382. data/third_party/boringssl/crypto/{ec → fipsmodule/ec}/internal.h +58 -52
  383. data/third_party/boringssl/crypto/{ec → fipsmodule/ec}/p256-x86_64-table.h +11 -11
  384. data/third_party/boringssl/crypto/{ec → fipsmodule/ec}/p256-x86_64.h +32 -32
  385. data/third_party/boringssl/crypto/{rand/internal.h → fipsmodule/is_fips.c} +10 -15
  386. data/third_party/boringssl/crypto/{modes → fipsmodule/modes}/internal.h +112 -119
  387. data/third_party/boringssl/crypto/fipsmodule/rand/internal.h +92 -0
  388. data/third_party/boringssl/crypto/{rsa → fipsmodule/rsa}/internal.h +36 -49
  389. data/third_party/boringssl/crypto/hkdf/hkdf.c +6 -6
  390. data/third_party/boringssl/crypto/internal.h +301 -233
  391. data/third_party/boringssl/crypto/lhash/lhash.c +26 -45
  392. data/third_party/boringssl/crypto/mem.c +76 -33
  393. data/third_party/boringssl/crypto/obj/obj.c +44 -28
  394. data/third_party/boringssl/crypto/obj/obj_dat.h +102 -34
  395. data/third_party/boringssl/crypto/obj/obj_xref.c +6 -6
  396. data/third_party/boringssl/crypto/pem/pem_info.c +3 -5
  397. data/third_party/boringssl/crypto/pem/pem_lib.c +1 -6
  398. data/third_party/boringssl/crypto/pem/pem_pk8.c +1 -0
  399. data/third_party/boringssl/crypto/pem/pem_pkey.c +1 -1
  400. data/third_party/boringssl/crypto/pem/pem_xaux.c +0 -2
  401. data/third_party/boringssl/crypto/pkcs7/internal.h +49 -0
  402. data/third_party/boringssl/crypto/pkcs7/pkcs7.c +166 -0
  403. data/third_party/boringssl/crypto/{x509/pkcs7.c → pkcs7/pkcs7_x509.c} +27 -147
  404. data/third_party/boringssl/crypto/pkcs8/internal.h +34 -16
  405. data/third_party/boringssl/crypto/pkcs8/p5_pbev2.c +120 -39
  406. data/third_party/boringssl/crypto/pkcs8/pkcs8.c +144 -857
  407. data/third_party/boringssl/crypto/pkcs8/pkcs8_x509.c +789 -0
  408. data/third_party/boringssl/crypto/poly1305/internal.h +4 -3
  409. data/third_party/boringssl/crypto/poly1305/poly1305.c +14 -14
  410. data/third_party/boringssl/crypto/poly1305/poly1305_arm.c +11 -11
  411. data/third_party/boringssl/crypto/poly1305/poly1305_vec.c +41 -41
  412. data/third_party/boringssl/crypto/pool/internal.h +2 -2
  413. data/third_party/boringssl/crypto/pool/pool.c +15 -15
  414. data/third_party/boringssl/crypto/{rand → rand_extra}/deterministic.c +7 -7
  415. data/third_party/boringssl/crypto/rand_extra/forkunsafe.c +46 -0
  416. data/third_party/boringssl/crypto/{rand → rand_extra}/fuchsia.c +7 -7
  417. data/third_party/boringssl/crypto/rand_extra/rand_extra.c +70 -0
  418. data/third_party/boringssl/crypto/{rand → rand_extra}/windows.c +5 -5
  419. data/third_party/boringssl/crypto/refcount_c11.c +2 -2
  420. data/third_party/boringssl/crypto/refcount_lock.c +1 -1
  421. data/third_party/boringssl/crypto/{rsa → rsa_extra}/rsa_asn1.c +12 -120
  422. data/third_party/boringssl/crypto/stack/stack.c +13 -13
  423. data/third_party/boringssl/crypto/thread_none.c +1 -1
  424. data/third_party/boringssl/crypto/thread_pthread.c +1 -1
  425. data/third_party/boringssl/crypto/thread_win.c +40 -40
  426. data/third_party/boringssl/crypto/x509/a_sign.c +5 -12
  427. data/third_party/boringssl/crypto/x509/a_verify.c +6 -18
  428. data/third_party/boringssl/crypto/x509/algorithm.c +22 -6
  429. data/third_party/boringssl/crypto/x509/asn1_gen.c +30 -7
  430. data/third_party/boringssl/crypto/x509/by_dir.c +2 -2
  431. data/third_party/boringssl/crypto/x509/by_file.c +2 -2
  432. data/third_party/boringssl/crypto/x509/rsa_pss.c +5 -5
  433. data/third_party/boringssl/crypto/x509/t_x509.c +2 -1
  434. data/third_party/boringssl/crypto/x509/x509_def.c +5 -0
  435. data/third_party/boringssl/crypto/x509/x509_lu.c +35 -4
  436. data/third_party/boringssl/crypto/x509/x509_set.c +10 -0
  437. data/third_party/boringssl/crypto/x509/x509_vfy.c +20 -17
  438. data/third_party/boringssl/crypto/x509/x_name.c +13 -16
  439. data/third_party/boringssl/crypto/x509/x_x509.c +3 -3
  440. data/third_party/boringssl/crypto/x509/x_x509a.c +0 -7
  441. data/third_party/boringssl/crypto/x509v3/ext_dat.h +8 -0
  442. data/third_party/boringssl/crypto/x509v3/pcy_int.h +2 -2
  443. data/third_party/boringssl/crypto/x509v3/pcy_lib.c +0 -9
  444. data/third_party/boringssl/crypto/x509v3/pcy_node.c +1 -1
  445. data/third_party/boringssl/crypto/x509v3/pcy_tree.c +25 -15
  446. data/third_party/boringssl/crypto/x509v3/v3_alt.c +21 -11
  447. data/third_party/boringssl/crypto/x509v3/v3_cpols.c +9 -3
  448. data/third_party/boringssl/crypto/x509v3/v3_info.c +22 -14
  449. data/third_party/boringssl/crypto/x509v3/v3_ncons.c +27 -11
  450. data/third_party/boringssl/crypto/x509v3/v3_pci.c +0 -33
  451. data/third_party/boringssl/crypto/x509v3/v3_utl.c +4 -4
  452. data/third_party/boringssl/include/openssl/aead.h +280 -191
  453. data/third_party/boringssl/include/openssl/aes.h +50 -50
  454. data/third_party/boringssl/include/openssl/arm_arch.h +12 -12
  455. data/third_party/boringssl/include/openssl/asn1.h +14 -77
  456. data/third_party/boringssl/include/openssl/asn1t.h +11 -15
  457. data/third_party/boringssl/include/openssl/base.h +78 -51
  458. data/third_party/boringssl/include/openssl/base64.h +68 -68
  459. data/third_party/boringssl/include/openssl/bio.h +472 -406
  460. data/third_party/boringssl/include/openssl/blowfish.h +1 -1
  461. data/third_party/boringssl/include/openssl/bn.h +454 -435
  462. data/third_party/boringssl/include/openssl/buf.h +27 -27
  463. data/third_party/boringssl/include/openssl/bytestring.h +282 -267
  464. data/third_party/boringssl/include/openssl/cast.h +2 -2
  465. data/third_party/boringssl/include/openssl/chacha.h +5 -5
  466. data/third_party/boringssl/include/openssl/cipher.h +209 -200
  467. data/third_party/boringssl/include/openssl/cmac.h +27 -27
  468. data/third_party/boringssl/include/openssl/conf.h +49 -46
  469. data/third_party/boringssl/include/openssl/cpu.h +60 -45
  470. data/third_party/boringssl/include/openssl/crypto.h +59 -35
  471. data/third_party/boringssl/include/openssl/curve25519.h +97 -92
  472. data/third_party/boringssl/include/openssl/des.h +25 -25
  473. data/third_party/boringssl/include/openssl/dh.h +98 -97
  474. data/third_party/boringssl/include/openssl/digest.h +143 -114
  475. data/third_party/boringssl/include/openssl/dsa.h +217 -202
  476. data/third_party/boringssl/include/openssl/ec.h +132 -131
  477. data/third_party/boringssl/include/openssl/ec_key.h +132 -128
  478. data/third_party/boringssl/include/openssl/ecdh.h +9 -9
  479. data/third_party/boringssl/include/openssl/ecdsa.h +66 -66
  480. data/third_party/boringssl/include/openssl/engine.h +38 -38
  481. data/third_party/boringssl/include/openssl/err.h +189 -219
  482. data/third_party/boringssl/include/openssl/evp.h +473 -397
  483. data/third_party/boringssl/include/openssl/ex_data.h +46 -56
  484. data/third_party/boringssl/include/openssl/hkdf.h +17 -17
  485. data/third_party/boringssl/include/openssl/hmac.h +55 -43
  486. data/third_party/boringssl/include/openssl/is_boringssl.h +16 -0
  487. data/third_party/boringssl/include/openssl/lhash.h +67 -67
  488. data/third_party/boringssl/include/openssl/lhash_macros.h +4 -4
  489. data/third_party/boringssl/include/openssl/md4.h +14 -14
  490. data/third_party/boringssl/include/openssl/md5.h +14 -14
  491. data/third_party/boringssl/include/openssl/mem.h +39 -33
  492. data/third_party/boringssl/include/openssl/nid.h +43 -0
  493. data/third_party/boringssl/include/openssl/obj.h +93 -87
  494. data/third_party/boringssl/include/openssl/opensslconf.h +8 -1
  495. data/third_party/boringssl/include/openssl/pem.h +2 -122
  496. data/third_party/boringssl/include/openssl/pkcs7.h +68 -2
  497. data/third_party/boringssl/include/openssl/pkcs8.h +81 -66
  498. data/third_party/boringssl/include/openssl/poly1305.h +11 -11
  499. data/third_party/boringssl/include/openssl/pool.h +29 -25
  500. data/third_party/boringssl/include/openssl/rand.h +48 -45
  501. data/third_party/boringssl/include/openssl/rc4.h +9 -9
  502. data/third_party/boringssl/include/openssl/ripemd.h +13 -13
  503. data/third_party/boringssl/include/openssl/rsa.h +371 -340
  504. data/third_party/boringssl/include/openssl/sha.h +71 -71
  505. data/third_party/boringssl/include/openssl/span.h +191 -0
  506. data/third_party/boringssl/include/openssl/ssl.h +2639 -2519
  507. data/third_party/boringssl/include/openssl/ssl3.h +39 -122
  508. data/third_party/boringssl/include/openssl/stack.h +355 -164
  509. data/third_party/boringssl/include/openssl/thread.h +43 -43
  510. data/third_party/boringssl/include/openssl/tls1.h +60 -63
  511. data/third_party/boringssl/include/openssl/type_check.h +10 -14
  512. data/third_party/boringssl/include/openssl/x509.h +41 -116
  513. data/third_party/boringssl/include/openssl/x509_vfy.h +17 -25
  514. data/third_party/boringssl/include/openssl/x509v3.h +27 -21
  515. data/third_party/boringssl/ssl/{bio_ssl.c → bio_ssl.cc} +9 -5
  516. data/third_party/boringssl/ssl/{custom_extensions.c → custom_extensions.cc} +19 -12
  517. data/third_party/boringssl/ssl/{d1_both.c → d1_both.cc} +224 -193
  518. data/third_party/boringssl/ssl/{d1_lib.c → d1_lib.cc} +86 -79
  519. data/third_party/boringssl/ssl/{d1_pkt.c → d1_pkt.cc} +55 -87
  520. data/third_party/boringssl/ssl/{d1_srtp.c → d1_srtp.cc} +12 -16
  521. data/third_party/boringssl/ssl/{dtls_method.c → dtls_method.cc} +33 -50
  522. data/third_party/boringssl/ssl/{dtls_record.c → dtls_record.cc} +76 -64
  523. data/third_party/boringssl/ssl/handshake.cc +547 -0
  524. data/third_party/boringssl/ssl/handshake_client.cc +1828 -0
  525. data/third_party/boringssl/ssl/handshake_server.cc +1672 -0
  526. data/third_party/boringssl/ssl/internal.h +2027 -1280
  527. data/third_party/boringssl/ssl/s3_both.cc +603 -0
  528. data/third_party/boringssl/ssl/{s3_lib.c → s3_lib.cc} +22 -10
  529. data/third_party/boringssl/ssl/{s3_pkt.c → s3_pkt.cc} +171 -75
  530. data/third_party/boringssl/ssl/ssl_aead_ctx.cc +415 -0
  531. data/third_party/boringssl/ssl/{ssl_asn1.c → ssl_asn1.cc} +257 -261
  532. data/third_party/boringssl/ssl/{ssl_buffer.c → ssl_buffer.cc} +81 -97
  533. data/third_party/boringssl/ssl/{ssl_cert.c → ssl_cert.cc} +304 -414
  534. data/third_party/boringssl/ssl/{ssl_cipher.c → ssl_cipher.cc} +427 -505
  535. data/third_party/boringssl/ssl/{ssl_file.c → ssl_file.cc} +24 -16
  536. data/third_party/boringssl/ssl/ssl_key_share.cc +245 -0
  537. data/third_party/boringssl/ssl/{ssl_lib.c → ssl_lib.cc} +665 -828
  538. data/third_party/boringssl/ssl/ssl_privkey.cc +518 -0
  539. data/third_party/boringssl/ssl/{ssl_session.c → ssl_session.cc} +596 -471
  540. data/third_party/boringssl/ssl/{ssl_stat.c → ssl_stat.cc} +5 -224
  541. data/third_party/boringssl/ssl/{ssl_transcript.c → ssl_transcript.cc} +117 -140
  542. data/third_party/boringssl/ssl/ssl_versions.cc +439 -0
  543. data/third_party/boringssl/ssl/{ssl_x509.c → ssl_x509.cc} +751 -267
  544. data/third_party/boringssl/ssl/{t1_enc.c → t1_enc.cc} +120 -161
  545. data/third_party/boringssl/ssl/{t1_lib.c → t1_lib.cc} +859 -966
  546. data/third_party/boringssl/ssl/{tls13_both.c → tls13_both.cc} +202 -284
  547. data/third_party/boringssl/ssl/tls13_client.cc +842 -0
  548. data/third_party/boringssl/ssl/{tls13_enc.c → tls13_enc.cc} +108 -90
  549. data/third_party/boringssl/ssl/tls13_server.cc +967 -0
  550. data/third_party/boringssl/ssl/{tls_method.c → tls_method.cc} +94 -73
  551. data/third_party/boringssl/ssl/tls_record.cc +675 -0
  552. metadata +117 -168
  553. data/include/grpc/support/cmdline.h +0 -88
  554. data/include/grpc/support/subprocess.h +0 -44
  555. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h +0 -29
  556. data/src/core/ext/filters/client_channel/resolver_factory.cc +0 -40
  557. data/src/core/lib/gpr/cmdline.cc +0 -330
  558. data/src/core/lib/gpr/subprocess_posix.cc +0 -99
  559. data/src/core/lib/gpr/subprocess_windows.cc +0 -126
  560. data/src/core/lib/surface/alarm.cc +0 -137
  561. data/src/core/lib/surface/alarm_internal.h +0 -40
  562. data/src/core/tsi/gts_transport_security.cc +0 -40
  563. data/third_party/boringssl/crypto/aes/aes.c +0 -1142
  564. data/third_party/boringssl/crypto/aes/internal.h +0 -87
  565. data/third_party/boringssl/crypto/aes/key_wrap.c +0 -138
  566. data/third_party/boringssl/crypto/aes/mode_wrappers.c +0 -112
  567. data/third_party/boringssl/crypto/asn1/x_long.c +0 -200
  568. data/third_party/boringssl/crypto/bn/add.c +0 -377
  569. data/third_party/boringssl/crypto/bn/asm/x86_64-gcc.c +0 -532
  570. data/third_party/boringssl/crypto/bn/bn.c +0 -365
  571. data/third_party/boringssl/crypto/bn/cmp.c +0 -239
  572. data/third_party/boringssl/crypto/bn/ctx.c +0 -313
  573. data/third_party/boringssl/crypto/bn/div.c +0 -728
  574. data/third_party/boringssl/crypto/bn/exponentiation.c +0 -1240
  575. data/third_party/boringssl/crypto/bn/gcd.c +0 -635
  576. data/third_party/boringssl/crypto/bn/generic.c +0 -707
  577. data/third_party/boringssl/crypto/bn/kronecker.c +0 -176
  578. data/third_party/boringssl/crypto/bn/montgomery.c +0 -409
  579. data/third_party/boringssl/crypto/bn/montgomery_inv.c +0 -207
  580. data/third_party/boringssl/crypto/bn/mul.c +0 -871
  581. data/third_party/boringssl/crypto/bn/prime.c +0 -861
  582. data/third_party/boringssl/crypto/bn/random.c +0 -343
  583. data/third_party/boringssl/crypto/bn/rsaz_exp.c +0 -254
  584. data/third_party/boringssl/crypto/bn/shift.c +0 -307
  585. data/third_party/boringssl/crypto/bn/sqrt.c +0 -506
  586. data/third_party/boringssl/crypto/cipher/aead.c +0 -156
  587. data/third_party/boringssl/crypto/cipher/cipher.c +0 -657
  588. data/third_party/boringssl/crypto/cipher/e_aes.c +0 -1771
  589. data/third_party/boringssl/crypto/cipher/e_chacha20poly1305.c +0 -276
  590. data/third_party/boringssl/crypto/cipher/e_des.c +0 -205
  591. data/third_party/boringssl/crypto/cipher/tls_cbc.c +0 -482
  592. data/third_party/boringssl/crypto/des/des.c +0 -771
  593. data/third_party/boringssl/crypto/digest/digest.c +0 -251
  594. data/third_party/boringssl/crypto/digest/digests.c +0 -358
  595. data/third_party/boringssl/crypto/ec/ec.c +0 -847
  596. data/third_party/boringssl/crypto/ec/ec_key.c +0 -479
  597. data/third_party/boringssl/crypto/ec/ec_montgomery.c +0 -303
  598. data/third_party/boringssl/crypto/ec/oct.c +0 -416
  599. data/third_party/boringssl/crypto/ec/p224-64.c +0 -1143
  600. data/third_party/boringssl/crypto/ec/p256-64.c +0 -1701
  601. data/third_party/boringssl/crypto/ec/p256-x86_64.c +0 -561
  602. data/third_party/boringssl/crypto/ec/simple.c +0 -1118
  603. data/third_party/boringssl/crypto/ec/util-64.c +0 -109
  604. data/third_party/boringssl/crypto/ec/wnaf.c +0 -458
  605. data/third_party/boringssl/crypto/ecdsa/ecdsa.c +0 -479
  606. data/third_party/boringssl/crypto/hmac/hmac.c +0 -215
  607. data/third_party/boringssl/crypto/md4/md4.c +0 -236
  608. data/third_party/boringssl/crypto/md5/md5.c +0 -285
  609. data/third_party/boringssl/crypto/modes/cbc.c +0 -212
  610. data/third_party/boringssl/crypto/modes/cfb.c +0 -230
  611. data/third_party/boringssl/crypto/modes/ctr.c +0 -219
  612. data/third_party/boringssl/crypto/modes/gcm.c +0 -1071
  613. data/third_party/boringssl/crypto/modes/ofb.c +0 -95
  614. data/third_party/boringssl/crypto/modes/polyval.c +0 -94
  615. data/third_party/boringssl/crypto/pkcs8/p8_pkey.c +0 -85
  616. data/third_party/boringssl/crypto/rand/rand.c +0 -244
  617. data/third_party/boringssl/crypto/rand/urandom.c +0 -335
  618. data/third_party/boringssl/crypto/rsa/blinding.c +0 -265
  619. data/third_party/boringssl/crypto/rsa/padding.c +0 -708
  620. data/third_party/boringssl/crypto/rsa/rsa.c +0 -830
  621. data/third_party/boringssl/crypto/rsa/rsa_impl.c +0 -1100
  622. data/third_party/boringssl/crypto/sha/sha1-altivec.c +0 -346
  623. data/third_party/boringssl/crypto/sha/sha1.c +0 -355
  624. data/third_party/boringssl/crypto/sha/sha256.c +0 -329
  625. data/third_party/boringssl/crypto/sha/sha512.c +0 -609
  626. data/third_party/boringssl/crypto/x509/x509type.c +0 -126
  627. data/third_party/boringssl/include/openssl/stack_macros.h +0 -3987
  628. data/third_party/boringssl/ssl/handshake_client.c +0 -1883
  629. data/third_party/boringssl/ssl/handshake_server.c +0 -1950
  630. data/third_party/boringssl/ssl/s3_both.c +0 -895
  631. data/third_party/boringssl/ssl/ssl_aead_ctx.c +0 -335
  632. data/third_party/boringssl/ssl/ssl_ecdh.c +0 -465
  633. data/third_party/boringssl/ssl/ssl_privkey.c +0 -683
  634. data/third_party/boringssl/ssl/ssl_privkey_cc.cc +0 -76
  635. data/third_party/boringssl/ssl/tls13_client.c +0 -712
  636. data/third_party/boringssl/ssl/tls13_server.c +0 -680
  637. data/third_party/boringssl/ssl/tls_record.c +0 -556
@@ -59,27 +59,18 @@
59
59
  #include <limits.h>
60
60
  #include <string.h>
61
61
 
62
- #include <openssl/asn1.h>
63
- #include <openssl/buf.h>
64
62
  #include <openssl/bytestring.h>
65
63
  #include <openssl/cipher.h>
66
64
  #include <openssl/digest.h>
67
65
  #include <openssl/err.h>
68
- #include <openssl/hmac.h>
69
66
  #include <openssl/mem.h>
70
- #include <openssl/obj.h>
67
+ #include <openssl/nid.h>
71
68
  #include <openssl/rand.h>
72
- #include <openssl/x509.h>
73
69
 
74
70
  #include "internal.h"
75
71
  #include "../internal.h"
76
- #include "../bytestring/internal.h"
77
72
 
78
73
 
79
- #define PKCS12_KEY_ID 1
80
- #define PKCS12_IV_ID 2
81
- #define PKCS12_MAC_ID 3
82
-
83
74
  static int ascii_to_ucs2(const char *ascii, size_t ascii_len,
84
75
  uint8_t **out, size_t *out_len) {
85
76
  size_t ulen = ascii_len * 2 + 2;
@@ -89,6 +80,7 @@ static int ascii_to_ucs2(const char *ascii, size_t ascii_len,
89
80
 
90
81
  uint8_t *unitmp = OPENSSL_malloc(ulen);
91
82
  if (unitmp == NULL) {
83
+ OPENSSL_PUT_ERROR(PKCS8, ERR_R_MALLOC_FAILURE);
92
84
  return 0;
93
85
  }
94
86
  for (size_t i = 0; i < ulen - 2; i += 2) {
@@ -96,7 +88,7 @@ static int ascii_to_ucs2(const char *ascii, size_t ascii_len,
96
88
  unitmp[i + 1] = ascii[i >> 1];
97
89
  }
98
90
 
99
- /* Terminate the result with a UCS-2 NUL. */
91
+ // Terminate the result with a UCS-2 NUL.
100
92
  unitmp[ulen - 2] = 0;
101
93
  unitmp[ulen - 1] = 0;
102
94
  *out_len = ulen;
@@ -104,54 +96,64 @@ static int ascii_to_ucs2(const char *ascii, size_t ascii_len,
104
96
  return 1;
105
97
  }
106
98
 
107
- static int pkcs12_key_gen_raw(const uint8_t *pass_raw, size_t pass_raw_len,
108
- const uint8_t *salt, size_t salt_len,
109
- uint8_t id, unsigned iterations,
110
- size_t out_len, uint8_t *out,
111
- const EVP_MD *md) {
112
- /* See https://tools.ietf.org/html/rfc7292#appendix-B. Quoted parts of the
113
- * specification have errata applied and other typos fixed. */
99
+ int pkcs12_key_gen(const char *pass, size_t pass_len, const uint8_t *salt,
100
+ size_t salt_len, uint8_t id, unsigned iterations,
101
+ size_t out_len, uint8_t *out, const EVP_MD *md) {
102
+ // See https://tools.ietf.org/html/rfc7292#appendix-B. Quoted parts of the
103
+ // specification have errata applied and other typos fixed.
114
104
 
115
105
  if (iterations < 1) {
116
106
  OPENSSL_PUT_ERROR(PKCS8, PKCS8_R_BAD_ITERATION_COUNT);
117
107
  return 0;
118
108
  }
119
109
 
120
- /* In the spec, |block_size| is called "v", but measured in bits. */
110
+ int ret = 0;
111
+ EVP_MD_CTX ctx;
112
+ EVP_MD_CTX_init(&ctx);
113
+ uint8_t *pass_raw = NULL, *I = NULL;
114
+ size_t pass_raw_len = 0, I_len = 0;
115
+ // If |pass| is NULL, we use the empty string rather than {0, 0} as the raw
116
+ // password.
117
+ if (pass != NULL &&
118
+ !ascii_to_ucs2(pass, pass_len, &pass_raw, &pass_raw_len)) {
119
+ goto err;
120
+ }
121
+
122
+ // In the spec, |block_size| is called "v", but measured in bits.
121
123
  size_t block_size = EVP_MD_block_size(md);
122
124
 
123
- /* 1. Construct a string, D (the "diversifier"), by concatenating v/8 copies
124
- * of ID. */
125
+ // 1. Construct a string, D (the "diversifier"), by concatenating v/8 copies
126
+ // of ID.
125
127
  uint8_t D[EVP_MAX_MD_BLOCK_SIZE];
126
128
  OPENSSL_memset(D, id, block_size);
127
129
 
128
- /* 2. Concatenate copies of the salt together to create a string S of length
129
- * v(ceiling(s/v)) bits (the final copy of the salt may be truncated to
130
- * create S). Note that if the salt is the empty string, then so is S.
131
- *
132
- * 3. Concatenate copies of the password together to create a string P of
133
- * length v(ceiling(p/v)) bits (the final copy of the password may be
134
- * truncated to create P). Note that if the password is the empty string,
135
- * then so is P.
136
- *
137
- * 4. Set I=S||P to be the concatenation of S and P. */
130
+ // 2. Concatenate copies of the salt together to create a string S of length
131
+ // v(ceiling(s/v)) bits (the final copy of the salt may be truncated to
132
+ // create S). Note that if the salt is the empty string, then so is S.
133
+ //
134
+ // 3. Concatenate copies of the password together to create a string P of
135
+ // length v(ceiling(p/v)) bits (the final copy of the password may be
136
+ // truncated to create P). Note that if the password is the empty string,
137
+ // then so is P.
138
+ //
139
+ // 4. Set I=S||P to be the concatenation of S and P.
138
140
  if (salt_len + block_size - 1 < salt_len ||
139
141
  pass_raw_len + block_size - 1 < pass_raw_len) {
140
142
  OPENSSL_PUT_ERROR(PKCS8, ERR_R_OVERFLOW);
141
- return 0;
143
+ goto err;
142
144
  }
143
145
  size_t S_len = block_size * ((salt_len + block_size - 1) / block_size);
144
146
  size_t P_len = block_size * ((pass_raw_len + block_size - 1) / block_size);
145
- size_t I_len = S_len + P_len;
147
+ I_len = S_len + P_len;
146
148
  if (I_len < S_len) {
147
149
  OPENSSL_PUT_ERROR(PKCS8, ERR_R_OVERFLOW);
148
- return 0;
150
+ goto err;
149
151
  }
150
152
 
151
- uint8_t *I = OPENSSL_malloc(I_len);
153
+ I = OPENSSL_malloc(I_len);
152
154
  if (I_len != 0 && I == NULL) {
153
155
  OPENSSL_PUT_ERROR(PKCS8, ERR_R_MALLOC_FAILURE);
154
- return 0;
156
+ goto err;
155
157
  }
156
158
 
157
159
  for (size_t i = 0; i < S_len; i++) {
@@ -161,13 +163,9 @@ static int pkcs12_key_gen_raw(const uint8_t *pass_raw, size_t pass_raw_len,
161
163
  I[i + S_len] = pass_raw[i % pass_raw_len];
162
164
  }
163
165
 
164
- int ret = 0;
165
- EVP_MD_CTX ctx;
166
- EVP_MD_CTX_init(&ctx);
167
-
168
166
  while (out_len != 0) {
169
- /* A. Set A_i=H^r(D||I). (i.e., the r-th hash of D||I,
170
- * H(H(H(... H(D||I)))) */
167
+ // A. Set A_i=H^r(D||I). (i.e., the r-th hash of D||I,
168
+ // H(H(H(... H(D||I))))
171
169
  uint8_t A[EVP_MAX_MD_SIZE];
172
170
  unsigned A_len;
173
171
  if (!EVP_DigestInit_ex(&ctx, md, NULL) ||
@@ -192,16 +190,16 @@ static int pkcs12_key_gen_raw(const uint8_t *pass_raw, size_t pass_raw_len,
192
190
  break;
193
191
  }
194
192
 
195
- /* B. Concatenate copies of A_i to create a string B of length v bits (the
196
- * final copy of A_i may be truncated to create B). */
193
+ // B. Concatenate copies of A_i to create a string B of length v bits (the
194
+ // final copy of A_i may be truncated to create B).
197
195
  uint8_t B[EVP_MAX_MD_BLOCK_SIZE];
198
196
  for (size_t i = 0; i < block_size; i++) {
199
197
  B[i] = A[i % A_len];
200
198
  }
201
199
 
202
- /* C. Treating I as a concatenation I_0, I_1, ..., I_(k-1) of v-bit blocks,
203
- * where k=ceiling(s/v)+ceiling(p/v), modify I by setting I_j=(I_j+B+1) mod
204
- * 2^v for each j. */
200
+ // C. Treating I as a concatenation I_0, I_1, ..., I_(k-1) of v-bit blocks,
201
+ // where k=ceiling(s/v)+ceiling(p/v), modify I by setting I_j=(I_j+B+1) mod
202
+ // 2^v for each j.
205
203
  assert(I_len % block_size == 0);
206
204
  for (size_t i = 0; i < I_len; i += block_size) {
207
205
  unsigned carry = 1;
@@ -216,32 +214,26 @@ static int pkcs12_key_gen_raw(const uint8_t *pass_raw, size_t pass_raw_len,
216
214
  ret = 1;
217
215
 
218
216
  err:
219
- OPENSSL_cleanse(I, I_len);
220
217
  OPENSSL_free(I);
218
+ OPENSSL_free(pass_raw);
221
219
  EVP_MD_CTX_cleanup(&ctx);
222
220
  return ret;
223
221
  }
224
222
 
225
223
  static int pkcs12_pbe_cipher_init(const struct pbe_suite *suite,
226
224
  EVP_CIPHER_CTX *ctx, unsigned iterations,
227
- const uint8_t *pass_raw, size_t pass_raw_len,
225
+ const char *pass, size_t pass_len,
228
226
  const uint8_t *salt, size_t salt_len,
229
227
  int is_encrypt) {
230
228
  const EVP_CIPHER *cipher = suite->cipher_func();
231
229
  const EVP_MD *md = suite->md_func();
232
230
 
233
231
  uint8_t key[EVP_MAX_KEY_LENGTH];
234
- if (!pkcs12_key_gen_raw(pass_raw, pass_raw_len, salt,
235
- salt_len, PKCS12_KEY_ID, iterations,
236
- EVP_CIPHER_key_length(cipher), key, md)) {
237
- OPENSSL_PUT_ERROR(PKCS8, PKCS8_R_KEY_GEN_ERROR);
238
- return 0;
239
- }
240
-
241
232
  uint8_t iv[EVP_MAX_IV_LENGTH];
242
- if (!pkcs12_key_gen_raw(pass_raw, pass_raw_len, salt,
243
- salt_len, PKCS12_IV_ID, iterations,
244
- EVP_CIPHER_iv_length(cipher), iv, md)) {
233
+ if (!pkcs12_key_gen(pass, pass_len, salt, salt_len, PKCS12_KEY_ID, iterations,
234
+ EVP_CIPHER_key_length(cipher), key, md) ||
235
+ !pkcs12_key_gen(pass, pass_len, salt, salt_len, PKCS12_IV_ID, iterations,
236
+ EVP_CIPHER_iv_length(cipher), iv, md)) {
245
237
  OPENSSL_PUT_ERROR(PKCS8, PKCS8_R_KEY_GEN_ERROR);
246
238
  return 0;
247
239
  }
@@ -253,8 +245,8 @@ static int pkcs12_pbe_cipher_init(const struct pbe_suite *suite,
253
245
  }
254
246
 
255
247
  static int pkcs12_pbe_decrypt_init(const struct pbe_suite *suite,
256
- EVP_CIPHER_CTX *ctx, const uint8_t *pass_raw,
257
- size_t pass_raw_len, CBS *param) {
248
+ EVP_CIPHER_CTX *ctx, const char *pass,
249
+ size_t pass_len, CBS *param) {
258
250
  CBS pbe_param, salt;
259
251
  uint64_t iterations;
260
252
  if (!CBS_get_asn1(param, &pbe_param, CBS_ASN1_SEQUENCE) ||
@@ -271,32 +263,52 @@ static int pkcs12_pbe_decrypt_init(const struct pbe_suite *suite,
271
263
  return 0;
272
264
  }
273
265
 
274
- return pkcs12_pbe_cipher_init(suite, ctx, (unsigned)iterations, pass_raw,
275
- pass_raw_len, CBS_data(&salt), CBS_len(&salt),
266
+ return pkcs12_pbe_cipher_init(suite, ctx, (unsigned)iterations, pass,
267
+ pass_len, CBS_data(&salt), CBS_len(&salt),
276
268
  0 /* decrypt */);
277
269
  }
278
270
 
279
271
  static const struct pbe_suite kBuiltinPBE[] = {
280
272
  {
281
- NID_pbe_WithSHA1And40BitRC2_CBC, EVP_rc2_40_cbc, EVP_sha1,
282
- pkcs12_pbe_decrypt_init, PBE_UCS2_CONVERT_PASSWORD,
273
+ NID_pbe_WithSHA1And40BitRC2_CBC,
274
+ // 1.2.840.113549.1.12.1.6
275
+ {0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x0c, 0x01, 0x06},
276
+ 10,
277
+ EVP_rc2_40_cbc,
278
+ EVP_sha1,
279
+ pkcs12_pbe_decrypt_init,
283
280
  },
284
281
  {
285
- NID_pbe_WithSHA1And128BitRC4, EVP_rc4, EVP_sha1,
286
- pkcs12_pbe_decrypt_init, PBE_UCS2_CONVERT_PASSWORD,
282
+ NID_pbe_WithSHA1And128BitRC4,
283
+ // 1.2.840.113549.1.12.1.1
284
+ {0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x0c, 0x01, 0x01},
285
+ 10,
286
+ EVP_rc4,
287
+ EVP_sha1,
288
+ pkcs12_pbe_decrypt_init,
287
289
  },
288
290
  {
289
- NID_pbe_WithSHA1And3_Key_TripleDES_CBC, EVP_des_ede3_cbc, EVP_sha1,
290
- pkcs12_pbe_decrypt_init, PBE_UCS2_CONVERT_PASSWORD,
291
+ NID_pbe_WithSHA1And3_Key_TripleDES_CBC,
292
+ // 1.2.840.113549.1.12.1.3
293
+ {0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x0c, 0x01, 0x03},
294
+ 10,
295
+ EVP_des_ede3_cbc,
296
+ EVP_sha1,
297
+ pkcs12_pbe_decrypt_init,
291
298
  },
292
299
  {
293
- NID_pbes2, NULL, NULL, PKCS5_pbe2_decrypt_init, 0,
300
+ NID_pbes2,
301
+ // 1.2.840.113549.1.5.13
302
+ {0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x05, 0x0d},
303
+ 9,
304
+ NULL,
305
+ NULL,
306
+ PKCS5_pbe2_decrypt_init,
294
307
  },
295
308
  };
296
309
 
297
310
  static const struct pbe_suite *get_pbe_suite(int pbe_nid) {
298
- unsigned i;
299
- for (i = 0; i < OPENSSL_ARRAY_SIZE(kBuiltinPBE); i++) {
311
+ for (unsigned i = 0; i < OPENSSL_ARRAY_SIZE(kBuiltinPBE); i++) {
300
312
  if (kBuiltinPBE[i].pbe_nid == pbe_nid) {
301
313
  return &kBuiltinPBE[i];
302
314
  }
@@ -305,51 +317,9 @@ static const struct pbe_suite *get_pbe_suite(int pbe_nid) {
305
317
  return NULL;
306
318
  }
307
319
 
308
- /* pass_to_pass_raw performs a password conversion (possibly a no-op)
309
- * appropriate to the supplied |pbe_nid|. The input |pass| is treated as a
310
- * NUL-terminated string if |pass_len| is -1, otherwise it is treated as a
311
- * buffer of the specified length. If the supplied PBE NID sets the
312
- * |PBE_UCS2_CONVERT_PASSWORD| flag, the supplied |pass| will be converted to
313
- * UCS-2.
314
- *
315
- * It sets |*out_pass_raw| to a new buffer that must be freed by the caller. It
316
- * returns one on success and zero on error. */
317
- static int pass_to_pass_raw(int pbe_nid, const char *pass, int pass_len,
318
- uint8_t **out_pass_raw, size_t *out_pass_raw_len) {
319
- if (pass == NULL) {
320
- *out_pass_raw = NULL;
321
- *out_pass_raw_len = 0;
322
- return 1;
323
- }
324
-
325
- if (pass_len == -1) {
326
- pass_len = strlen(pass);
327
- } else if (pass_len < 0 || pass_len > 2000000000) {
328
- OPENSSL_PUT_ERROR(PKCS8, ERR_R_OVERFLOW);
329
- return 0;
330
- }
331
-
332
- const struct pbe_suite *suite = get_pbe_suite(pbe_nid);
333
- if (suite != NULL && (suite->flags & PBE_UCS2_CONVERT_PASSWORD)) {
334
- if (!ascii_to_ucs2(pass, pass_len, out_pass_raw, out_pass_raw_len)) {
335
- OPENSSL_PUT_ERROR(PKCS8, PKCS8_R_DECODE_ERROR);
336
- return 0;
337
- }
338
- } else {
339
- *out_pass_raw = BUF_memdup(pass, pass_len);
340
- if (*out_pass_raw == NULL) {
341
- OPENSSL_PUT_ERROR(PKCS8, ERR_R_MALLOC_FAILURE);
342
- return 0;
343
- }
344
- *out_pass_raw_len = (size_t)pass_len;
345
- }
346
-
347
- return 1;
348
- }
349
-
350
320
  static int pkcs12_pbe_encrypt_init(CBB *out, EVP_CIPHER_CTX *ctx, int alg,
351
- unsigned iterations, const uint8_t *pass_raw,
352
- size_t pass_raw_len, const uint8_t *salt,
321
+ unsigned iterations, const char *pass,
322
+ size_t pass_len, const uint8_t *salt,
353
323
  size_t salt_len) {
354
324
  const struct pbe_suite *suite = get_pbe_suite(alg);
355
325
  if (suite == NULL) {
@@ -357,10 +327,11 @@ static int pkcs12_pbe_encrypt_init(CBB *out, EVP_CIPHER_CTX *ctx, int alg,
357
327
  return 0;
358
328
  }
359
329
 
360
- /* See RFC 2898, appendix A.3. */
361
- CBB algorithm, param, salt_cbb;
330
+ // See RFC 2898, appendix A.3.
331
+ CBB algorithm, oid, param, salt_cbb;
362
332
  if (!CBB_add_asn1(out, &algorithm, CBS_ASN1_SEQUENCE) ||
363
- !OBJ_nid2cbb(&algorithm, alg) ||
333
+ !CBB_add_asn1(&algorithm, &oid, CBS_ASN1_OBJECT) ||
334
+ !CBB_add_bytes(&oid, suite->oid, suite->oid_len) ||
364
335
  !CBB_add_asn1(&algorithm, &param, CBS_ASN1_SEQUENCE) ||
365
336
  !CBB_add_asn1(&param, &salt_cbb, CBS_ASN1_OCTETSTRING) ||
366
337
  !CBB_add_bytes(&salt_cbb, salt, salt_len) ||
@@ -369,13 +340,13 @@ static int pkcs12_pbe_encrypt_init(CBB *out, EVP_CIPHER_CTX *ctx, int alg,
369
340
  return 0;
370
341
  }
371
342
 
372
- return pkcs12_pbe_cipher_init(suite, ctx, iterations, pass_raw, pass_raw_len,
373
- salt, salt_len, 1 /* encrypt */);
343
+ return pkcs12_pbe_cipher_init(suite, ctx, iterations, pass, pass_len, salt,
344
+ salt_len, 1 /* encrypt */);
374
345
  }
375
346
 
376
- static int pbe_decrypt(uint8_t **out, size_t *out_len, CBS *algorithm,
377
- const uint8_t *pass_raw, size_t pass_raw_len,
378
- const uint8_t *in, size_t in_len) {
347
+ int pkcs8_pbe_decrypt(uint8_t **out, size_t *out_len, CBS *algorithm,
348
+ const char *pass, size_t pass_len, const uint8_t *in,
349
+ size_t in_len) {
379
350
  int ret = 0;
380
351
  uint8_t *buf = NULL;;
381
352
  EVP_CIPHER_CTX ctx;
@@ -387,13 +358,19 @@ static int pbe_decrypt(uint8_t **out, size_t *out_len, CBS *algorithm,
387
358
  goto err;
388
359
  }
389
360
 
390
- const struct pbe_suite *suite = get_pbe_suite(OBJ_cbs2nid(&obj));
361
+ const struct pbe_suite *suite = NULL;
362
+ for (unsigned i = 0; i < OPENSSL_ARRAY_SIZE(kBuiltinPBE); i++) {
363
+ if (CBS_mem_equal(&obj, kBuiltinPBE[i].oid, kBuiltinPBE[i].oid_len)) {
364
+ suite = &kBuiltinPBE[i];
365
+ break;
366
+ }
367
+ }
391
368
  if (suite == NULL) {
392
369
  OPENSSL_PUT_ERROR(PKCS8, PKCS8_R_UNKNOWN_ALGORITHM);
393
370
  goto err;
394
371
  }
395
372
 
396
- if (!suite->decrypt_init(suite, &ctx, pass_raw, pass_raw_len, algorithm)) {
373
+ if (!suite->decrypt_init(suite, &ctx, pass, pass_len, algorithm)) {
397
374
  OPENSSL_PUT_ERROR(PKCS8, PKCS8_R_KEYGEN_FAILURE);
398
375
  goto err;
399
376
  }
@@ -426,90 +403,44 @@ err:
426
403
  return ret;
427
404
  }
428
405
 
429
- static PKCS8_PRIV_KEY_INFO *pkcs8_decrypt_raw(X509_SIG *pkcs8,
430
- const uint8_t *pass_raw,
431
- size_t pass_raw_len) {
432
- PKCS8_PRIV_KEY_INFO *ret = NULL;
433
- uint8_t *in = NULL, *out = NULL;
434
- size_t out_len = 0;
435
-
436
- /* Convert the legacy ASN.1 object to a byte string. */
437
- int in_len = i2d_X509_SIG(pkcs8, &in);
438
- if (in_len < 0) {
439
- goto err;
440
- }
441
-
442
- /* See RFC 5208, section 6. */
443
- CBS cbs, epki, algorithm, ciphertext;
444
- CBS_init(&cbs, in, in_len);
445
- if (!CBS_get_asn1(&cbs, &epki, CBS_ASN1_SEQUENCE) ||
406
+ EVP_PKEY *PKCS8_parse_encrypted_private_key(CBS *cbs, const char *pass,
407
+ size_t pass_len) {
408
+ // See RFC 5208, section 6.
409
+ CBS epki, algorithm, ciphertext;
410
+ if (!CBS_get_asn1(cbs, &epki, CBS_ASN1_SEQUENCE) ||
446
411
  !CBS_get_asn1(&epki, &algorithm, CBS_ASN1_SEQUENCE) ||
447
412
  !CBS_get_asn1(&epki, &ciphertext, CBS_ASN1_OCTETSTRING) ||
448
- CBS_len(&epki) != 0 ||
449
- CBS_len(&cbs) != 0) {
450
- OPENSSL_PUT_ERROR(PKCS8, PKCS8_R_DECODE_ERROR);
451
- goto err;
452
- }
453
-
454
- if (!pbe_decrypt(&out, &out_len, &algorithm, pass_raw, pass_raw_len,
455
- CBS_data(&ciphertext), CBS_len(&ciphertext))) {
456
- goto err;
457
- }
458
-
459
- if (out_len > LONG_MAX) {
413
+ CBS_len(&epki) != 0) {
460
414
  OPENSSL_PUT_ERROR(PKCS8, PKCS8_R_DECODE_ERROR);
461
- goto err;
415
+ return 0;
462
416
  }
463
417
 
464
- /* Convert back to legacy ASN.1 objects. */
465
- const uint8_t *ptr = out;
466
- ret = d2i_PKCS8_PRIV_KEY_INFO(NULL, &ptr, (long)out_len);
467
- OPENSSL_cleanse(out, out_len);
468
- if (ret == NULL || ptr != out + out_len) {
469
- OPENSSL_PUT_ERROR(PKCS8, PKCS8_R_DECODE_ERROR);
470
- PKCS8_PRIV_KEY_INFO_free(ret);
471
- ret = NULL;
418
+ uint8_t *out;
419
+ size_t out_len;
420
+ if (!pkcs8_pbe_decrypt(&out, &out_len, &algorithm, pass, pass_len,
421
+ CBS_data(&ciphertext), CBS_len(&ciphertext))) {
422
+ return 0;
472
423
  }
473
424
 
474
- err:
475
- OPENSSL_free(in);
476
- OPENSSL_cleanse(out, out_len);
425
+ CBS pki;
426
+ CBS_init(&pki, out, out_len);
427
+ EVP_PKEY *ret = EVP_parse_private_key(&pki);
477
428
  OPENSSL_free(out);
478
429
  return ret;
479
430
  }
480
431
 
481
- PKCS8_PRIV_KEY_INFO *PKCS8_decrypt(X509_SIG *pkcs8, const char *pass,
482
- int pass_len) {
483
- uint8_t *pass_raw = NULL;
484
- size_t pass_raw_len = 0;
485
- if (!pass_to_pass_raw(OBJ_obj2nid(pkcs8->algor->algorithm), pass, pass_len,
486
- &pass_raw, &pass_raw_len)) {
487
- return NULL;
488
- }
489
-
490
- PKCS8_PRIV_KEY_INFO *ret = pkcs8_decrypt_raw(pkcs8, pass_raw, pass_raw_len);
491
-
492
- if (pass_raw) {
493
- OPENSSL_cleanse(pass_raw, pass_raw_len);
494
- OPENSSL_free(pass_raw);
495
- }
496
- return ret;
497
- }
498
-
499
- static X509_SIG *pkcs8_encrypt_raw(int pbe_nid, const EVP_CIPHER *cipher,
500
- const uint8_t *pass_raw, size_t pass_raw_len,
501
- const uint8_t *salt, size_t salt_len,
502
- int iterations, PKCS8_PRIV_KEY_INFO *p8inf) {
503
- X509_SIG *ret = NULL;
504
- uint8_t *plaintext = NULL, *salt_buf = NULL, *der = NULL;
505
- int plaintext_len = -1;
506
- size_t der_len;
507
- CBB cbb;
508
- CBB_zero(&cbb);
432
+ int PKCS8_marshal_encrypted_private_key(CBB *out, int pbe_nid,
433
+ const EVP_CIPHER *cipher,
434
+ const char *pass, size_t pass_len,
435
+ const uint8_t *salt, size_t salt_len,
436
+ int iterations, const EVP_PKEY *pkey) {
437
+ int ret = 0;
438
+ uint8_t *plaintext = NULL, *salt_buf = NULL;
439
+ size_t plaintext_len = 0;
509
440
  EVP_CIPHER_CTX ctx;
510
441
  EVP_CIPHER_CTX_init(&ctx);
511
442
 
512
- /* Generate a random salt if necessary. */
443
+ // Generate a random salt if necessary.
513
444
  if (salt == NULL) {
514
445
  if (salt_len == 0) {
515
446
  salt_len = PKCS5_SALT_LEN;
@@ -528,699 +459,55 @@ static X509_SIG *pkcs8_encrypt_raw(int pbe_nid, const EVP_CIPHER *cipher,
528
459
  iterations = PKCS5_DEFAULT_ITERATIONS;
529
460
  }
530
461
 
531
- /* Convert the input from the legacy ASN.1 format. */
532
- plaintext_len = i2d_PKCS8_PRIV_KEY_INFO(p8inf, &plaintext);
533
- if (plaintext_len < 0) {
462
+ // Serialize the input key.
463
+ CBB plaintext_cbb;
464
+ if (!CBB_init(&plaintext_cbb, 128) ||
465
+ !EVP_marshal_private_key(&plaintext_cbb, pkey) ||
466
+ !CBB_finish(&plaintext_cbb, &plaintext, &plaintext_len)) {
467
+ CBB_cleanup(&plaintext_cbb);
534
468
  goto err;
535
469
  }
536
470
 
537
471
  CBB epki;
538
- if (!CBB_init(&cbb, 128) ||
539
- !CBB_add_asn1(&cbb, &epki, CBS_ASN1_SEQUENCE)) {
472
+ if (!CBB_add_asn1(out, &epki, CBS_ASN1_SEQUENCE)) {
540
473
  goto err;
541
474
  }
542
475
 
543
476
  int alg_ok;
544
477
  if (pbe_nid == -1) {
545
478
  alg_ok = PKCS5_pbe2_encrypt_init(&epki, &ctx, cipher, (unsigned)iterations,
546
- pass_raw, pass_raw_len, salt, salt_len);
479
+ pass, pass_len, salt, salt_len);
547
480
  } else {
548
481
  alg_ok = pkcs12_pbe_encrypt_init(&epki, &ctx, pbe_nid, (unsigned)iterations,
549
- pass_raw, pass_raw_len, salt, salt_len);
482
+ pass, pass_len, salt, salt_len);
550
483
  }
551
484
  if (!alg_ok) {
552
485
  goto err;
553
486
  }
554
487
 
555
- size_t max_out = (size_t)plaintext_len + EVP_CIPHER_CTX_block_size(&ctx);
556
- if (max_out < (size_t)plaintext_len) {
488
+ size_t max_out = plaintext_len + EVP_CIPHER_CTX_block_size(&ctx);
489
+ if (max_out < plaintext_len) {
557
490
  OPENSSL_PUT_ERROR(PKCS8, PKCS8_R_TOO_LONG);
558
491
  goto err;
559
492
  }
560
493
 
561
494
  CBB ciphertext;
562
- uint8_t *out;
495
+ uint8_t *ptr;
563
496
  int n1, n2;
564
497
  if (!CBB_add_asn1(&epki, &ciphertext, CBS_ASN1_OCTETSTRING) ||
565
- !CBB_reserve(&ciphertext, &out, max_out) ||
566
- !EVP_CipherUpdate(&ctx, out, &n1, plaintext, plaintext_len) ||
567
- !EVP_CipherFinal_ex(&ctx, out + n1, &n2) ||
498
+ !CBB_reserve(&ciphertext, &ptr, max_out) ||
499
+ !EVP_CipherUpdate(&ctx, ptr, &n1, plaintext, plaintext_len) ||
500
+ !EVP_CipherFinal_ex(&ctx, ptr + n1, &n2) ||
568
501
  !CBB_did_write(&ciphertext, n1 + n2) ||
569
- !CBB_finish(&cbb, &der, &der_len)) {
502
+ !CBB_flush(out)) {
570
503
  goto err;
571
504
  }
572
505
 
573
- /* Convert back to legacy ASN.1 objects. */
574
- const uint8_t *ptr = der;
575
- ret = d2i_X509_SIG(NULL, &ptr, der_len);
576
- if (ret == NULL || ptr != der + der_len) {
577
- OPENSSL_PUT_ERROR(PKCS8, ERR_R_INTERNAL_ERROR);
578
- X509_SIG_free(ret);
579
- ret = NULL;
580
- }
506
+ ret = 1;
581
507
 
582
508
  err:
583
- if (plaintext_len > 0) {
584
- OPENSSL_cleanse(plaintext, plaintext_len);
585
- }
586
509
  OPENSSL_free(plaintext);
587
510
  OPENSSL_free(salt_buf);
588
- OPENSSL_free(der);
589
- CBB_cleanup(&cbb);
590
511
  EVP_CIPHER_CTX_cleanup(&ctx);
591
512
  return ret;
592
513
  }
593
-
594
- X509_SIG *PKCS8_encrypt(int pbe_nid, const EVP_CIPHER *cipher, const char *pass,
595
- int pass_len, const uint8_t *salt, size_t salt_len,
596
- int iterations, PKCS8_PRIV_KEY_INFO *p8inf) {
597
- uint8_t *pass_raw = NULL;
598
- size_t pass_raw_len = 0;
599
- if (!pass_to_pass_raw(pbe_nid, pass, pass_len, &pass_raw, &pass_raw_len)) {
600
- return NULL;
601
- }
602
-
603
- X509_SIG *ret = pkcs8_encrypt_raw(pbe_nid, cipher, pass_raw, pass_raw_len,
604
- salt, salt_len, iterations, p8inf);
605
-
606
- if (pass_raw) {
607
- OPENSSL_cleanse(pass_raw, pass_raw_len);
608
- OPENSSL_free(pass_raw);
609
- }
610
- return ret;
611
- }
612
-
613
- EVP_PKEY *EVP_PKCS82PKEY(PKCS8_PRIV_KEY_INFO *p8) {
614
- uint8_t *der = NULL;
615
- int der_len = i2d_PKCS8_PRIV_KEY_INFO(p8, &der);
616
- if (der_len < 0) {
617
- return NULL;
618
- }
619
-
620
- CBS cbs;
621
- CBS_init(&cbs, der, (size_t)der_len);
622
- EVP_PKEY *ret = EVP_parse_private_key(&cbs);
623
- if (ret == NULL || CBS_len(&cbs) != 0) {
624
- OPENSSL_PUT_ERROR(PKCS8, PKCS8_R_DECODE_ERROR);
625
- EVP_PKEY_free(ret);
626
- OPENSSL_free(der);
627
- return NULL;
628
- }
629
-
630
- OPENSSL_free(der);
631
- return ret;
632
- }
633
-
634
- PKCS8_PRIV_KEY_INFO *EVP_PKEY2PKCS8(EVP_PKEY *pkey) {
635
- CBB cbb;
636
- uint8_t *der = NULL;
637
- size_t der_len;
638
- if (!CBB_init(&cbb, 0) ||
639
- !EVP_marshal_private_key(&cbb, pkey) ||
640
- !CBB_finish(&cbb, &der, &der_len) ||
641
- der_len > LONG_MAX) {
642
- CBB_cleanup(&cbb);
643
- OPENSSL_PUT_ERROR(PKCS8, PKCS8_R_ENCODE_ERROR);
644
- goto err;
645
- }
646
-
647
- const uint8_t *p = der;
648
- PKCS8_PRIV_KEY_INFO *p8 = d2i_PKCS8_PRIV_KEY_INFO(NULL, &p, (long)der_len);
649
- if (p8 == NULL || p != der + der_len) {
650
- PKCS8_PRIV_KEY_INFO_free(p8);
651
- OPENSSL_PUT_ERROR(PKCS8, PKCS8_R_DECODE_ERROR);
652
- goto err;
653
- }
654
-
655
- OPENSSL_free(der);
656
- return p8;
657
-
658
- err:
659
- OPENSSL_free(der);
660
- return NULL;
661
- }
662
-
663
- struct pkcs12_context {
664
- EVP_PKEY **out_key;
665
- STACK_OF(X509) *out_certs;
666
- uint8_t *password;
667
- size_t password_len;
668
- };
669
-
670
- /* PKCS12_handle_sequence parses a BER-encoded SEQUENCE of elements in a PKCS#12
671
- * structure. */
672
- static int PKCS12_handle_sequence(
673
- CBS *sequence, struct pkcs12_context *ctx,
674
- int (*handle_element)(CBS *cbs, struct pkcs12_context *ctx)) {
675
- uint8_t *der_bytes = NULL;
676
- size_t der_len;
677
- CBS in;
678
- int ret = 0;
679
-
680
- /* Although a BER->DER conversion is done at the beginning of |PKCS12_parse|,
681
- * the ASN.1 data gets wrapped in OCTETSTRINGs and/or encrypted and the
682
- * conversion cannot see through those wrappings. So each time we step
683
- * through one we need to convert to DER again. */
684
- if (!CBS_asn1_ber_to_der(sequence, &der_bytes, &der_len)) {
685
- OPENSSL_PUT_ERROR(PKCS8, PKCS8_R_BAD_PKCS12_DATA);
686
- return 0;
687
- }
688
-
689
- if (der_bytes != NULL) {
690
- CBS_init(&in, der_bytes, der_len);
691
- } else {
692
- CBS_init(&in, CBS_data(sequence), CBS_len(sequence));
693
- }
694
-
695
- CBS child;
696
- if (!CBS_get_asn1(&in, &child, CBS_ASN1_SEQUENCE) ||
697
- CBS_len(&in) != 0) {
698
- OPENSSL_PUT_ERROR(PKCS8, PKCS8_R_BAD_PKCS12_DATA);
699
- goto err;
700
- }
701
-
702
- while (CBS_len(&child) > 0) {
703
- CBS element;
704
- if (!CBS_get_asn1(&child, &element, CBS_ASN1_SEQUENCE)) {
705
- OPENSSL_PUT_ERROR(PKCS8, PKCS8_R_BAD_PKCS12_DATA);
706
- goto err;
707
- }
708
-
709
- if (!handle_element(&element, ctx)) {
710
- goto err;
711
- }
712
- }
713
-
714
- ret = 1;
715
-
716
- err:
717
- OPENSSL_free(der_bytes);
718
- return ret;
719
- }
720
-
721
- /* PKCS12_handle_safe_bag parses a single SafeBag element in a PKCS#12
722
- * structure. */
723
- static int PKCS12_handle_safe_bag(CBS *safe_bag, struct pkcs12_context *ctx) {
724
- CBS bag_id, wrapped_value;
725
- if (!CBS_get_asn1(safe_bag, &bag_id, CBS_ASN1_OBJECT) ||
726
- !CBS_get_asn1(safe_bag, &wrapped_value,
727
- CBS_ASN1_CONTEXT_SPECIFIC | CBS_ASN1_CONSTRUCTED | 0)
728
- /* Ignore the bagAttributes field. */) {
729
- OPENSSL_PUT_ERROR(PKCS8, PKCS8_R_BAD_PKCS12_DATA);
730
- return 0;
731
- }
732
-
733
- int nid = OBJ_cbs2nid(&bag_id);
734
- if (nid == NID_pkcs8ShroudedKeyBag) {
735
- /* See RFC 7292, section 4.2.2. */
736
- if (*ctx->out_key) {
737
- OPENSSL_PUT_ERROR(PKCS8, PKCS8_R_MULTIPLE_PRIVATE_KEYS_IN_PKCS12);
738
- return 0;
739
- }
740
-
741
- if (CBS_len(&wrapped_value) > LONG_MAX) {
742
- OPENSSL_PUT_ERROR(PKCS8, PKCS8_R_BAD_PKCS12_DATA);
743
- return 0;
744
- }
745
-
746
- /* |encrypted| isn't actually an X.509 signature, but it has the same
747
- * structure as one and so |X509_SIG| is reused to store it. */
748
- const uint8_t *inp = CBS_data(&wrapped_value);
749
- X509_SIG *encrypted =
750
- d2i_X509_SIG(NULL, &inp, (long)CBS_len(&wrapped_value));
751
- if (encrypted == NULL) {
752
- OPENSSL_PUT_ERROR(PKCS8, PKCS8_R_BAD_PKCS12_DATA);
753
- return 0;
754
- }
755
- if (inp != CBS_data(&wrapped_value) + CBS_len(&wrapped_value)) {
756
- OPENSSL_PUT_ERROR(PKCS8, PKCS8_R_BAD_PKCS12_DATA);
757
- X509_SIG_free(encrypted);
758
- return 0;
759
- }
760
-
761
- PKCS8_PRIV_KEY_INFO *pki =
762
- pkcs8_decrypt_raw(encrypted, ctx->password, ctx->password_len);
763
- X509_SIG_free(encrypted);
764
- if (pki == NULL) {
765
- return 0;
766
- }
767
-
768
- *ctx->out_key = EVP_PKCS82PKEY(pki);
769
- PKCS8_PRIV_KEY_INFO_free(pki);
770
- return ctx->out_key != NULL;
771
- }
772
-
773
- if (nid == NID_certBag) {
774
- /* See RFC 7292, section 4.2.3. */
775
- CBS cert_bag, cert_type, wrapped_cert, cert;
776
- if (!CBS_get_asn1(&wrapped_value, &cert_bag, CBS_ASN1_SEQUENCE) ||
777
- !CBS_get_asn1(&cert_bag, &cert_type, CBS_ASN1_OBJECT) ||
778
- !CBS_get_asn1(&cert_bag, &wrapped_cert,
779
- CBS_ASN1_CONTEXT_SPECIFIC | CBS_ASN1_CONSTRUCTED | 0) ||
780
- !CBS_get_asn1(&wrapped_cert, &cert, CBS_ASN1_OCTETSTRING)) {
781
- OPENSSL_PUT_ERROR(PKCS8, PKCS8_R_BAD_PKCS12_DATA);
782
- return 0;
783
- }
784
-
785
- if (OBJ_cbs2nid(&cert_type) != NID_x509Certificate) {
786
- return 1;
787
- }
788
-
789
- if (CBS_len(&cert) > LONG_MAX) {
790
- OPENSSL_PUT_ERROR(PKCS8, PKCS8_R_BAD_PKCS12_DATA);
791
- return 0;
792
- }
793
-
794
- const uint8_t *inp = CBS_data(&cert);
795
- X509 *x509 = d2i_X509(NULL, &inp, (long)CBS_len(&cert));
796
- if (!x509) {
797
- OPENSSL_PUT_ERROR(PKCS8, PKCS8_R_BAD_PKCS12_DATA);
798
- return 0;
799
- }
800
-
801
- if (inp != CBS_data(&cert) + CBS_len(&cert)) {
802
- OPENSSL_PUT_ERROR(PKCS8, PKCS8_R_BAD_PKCS12_DATA);
803
- X509_free(x509);
804
- return 0;
805
- }
806
-
807
- if (0 == sk_X509_push(ctx->out_certs, x509)) {
808
- X509_free(x509);
809
- return 0;
810
- }
811
-
812
- return 1;
813
- }
814
-
815
- /* Unknown element type - ignore it. */
816
- return 1;
817
- }
818
-
819
- /* PKCS12_handle_content_info parses a single PKCS#7 ContentInfo element in a
820
- * PKCS#12 structure. */
821
- static int PKCS12_handle_content_info(CBS *content_info,
822
- struct pkcs12_context *ctx) {
823
- CBS content_type, wrapped_contents, contents;
824
- int nid, ret = 0;
825
- uint8_t *storage = NULL;
826
-
827
- if (!CBS_get_asn1(content_info, &content_type, CBS_ASN1_OBJECT) ||
828
- !CBS_get_asn1(content_info, &wrapped_contents,
829
- CBS_ASN1_CONTEXT_SPECIFIC | CBS_ASN1_CONSTRUCTED | 0) ||
830
- CBS_len(content_info) != 0) {
831
- OPENSSL_PUT_ERROR(PKCS8, PKCS8_R_BAD_PKCS12_DATA);
832
- goto err;
833
- }
834
-
835
- nid = OBJ_cbs2nid(&content_type);
836
- if (nid == NID_pkcs7_encrypted) {
837
- /* See https://tools.ietf.org/html/rfc2315#section-13.
838
- *
839
- * PKCS#7 encrypted data inside a PKCS#12 structure is generally an
840
- * encrypted certificate bag and it's generally encrypted with 40-bit
841
- * RC2-CBC. */
842
- CBS version_bytes, eci, contents_type, ai, encrypted_contents;
843
- uint8_t *out;
844
- size_t out_len;
845
-
846
- if (!CBS_get_asn1(&wrapped_contents, &contents, CBS_ASN1_SEQUENCE) ||
847
- !CBS_get_asn1(&contents, &version_bytes, CBS_ASN1_INTEGER) ||
848
- /* EncryptedContentInfo, see
849
- * https://tools.ietf.org/html/rfc2315#section-10.1 */
850
- !CBS_get_asn1(&contents, &eci, CBS_ASN1_SEQUENCE) ||
851
- !CBS_get_asn1(&eci, &contents_type, CBS_ASN1_OBJECT) ||
852
- /* AlgorithmIdentifier, see
853
- * https://tools.ietf.org/html/rfc5280#section-4.1.1.2 */
854
- !CBS_get_asn1(&eci, &ai, CBS_ASN1_SEQUENCE) ||
855
- !CBS_get_asn1_implicit_string(
856
- &eci, &encrypted_contents, &storage,
857
- CBS_ASN1_CONTEXT_SPECIFIC | 0, CBS_ASN1_OCTETSTRING)) {
858
- OPENSSL_PUT_ERROR(PKCS8, PKCS8_R_BAD_PKCS12_DATA);
859
- goto err;
860
- }
861
-
862
- if (OBJ_cbs2nid(&contents_type) != NID_pkcs7_data) {
863
- OPENSSL_PUT_ERROR(PKCS8, PKCS8_R_BAD_PKCS12_DATA);
864
- goto err;
865
- }
866
-
867
- if (!pbe_decrypt(&out, &out_len, &ai, ctx->password, ctx->password_len,
868
- CBS_data(&encrypted_contents),
869
- CBS_len(&encrypted_contents))) {
870
- goto err;
871
- }
872
-
873
- CBS safe_contents;
874
- CBS_init(&safe_contents, out, out_len);
875
- ret = PKCS12_handle_sequence(&safe_contents, ctx, PKCS12_handle_safe_bag);
876
- OPENSSL_free(out);
877
- } else if (nid == NID_pkcs7_data) {
878
- CBS octet_string_contents;
879
-
880
- if (!CBS_get_asn1(&wrapped_contents, &octet_string_contents,
881
- CBS_ASN1_OCTETSTRING)) {
882
- OPENSSL_PUT_ERROR(PKCS8, PKCS8_R_BAD_PKCS12_DATA);
883
- goto err;
884
- }
885
-
886
- ret = PKCS12_handle_sequence(&octet_string_contents, ctx,
887
- PKCS12_handle_safe_bag);
888
- } else {
889
- /* Unknown element type - ignore it. */
890
- ret = 1;
891
- }
892
-
893
- err:
894
- OPENSSL_free(storage);
895
- return ret;
896
- }
897
-
898
- int PKCS12_get_key_and_certs(EVP_PKEY **out_key, STACK_OF(X509) *out_certs,
899
- CBS *ber_in, const char *password) {
900
- uint8_t *der_bytes = NULL;
901
- size_t der_len;
902
- CBS in, pfx, mac_data, authsafe, content_type, wrapped_authsafes, authsafes;
903
- uint64_t version;
904
- int ret = 0;
905
- struct pkcs12_context ctx;
906
- const size_t original_out_certs_len = sk_X509_num(out_certs);
907
-
908
- /* The input may be in BER format. */
909
- if (!CBS_asn1_ber_to_der(ber_in, &der_bytes, &der_len)) {
910
- OPENSSL_PUT_ERROR(PKCS8, PKCS8_R_BAD_PKCS12_DATA);
911
- return 0;
912
- }
913
- if (der_bytes != NULL) {
914
- CBS_init(&in, der_bytes, der_len);
915
- } else {
916
- CBS_init(&in, CBS_data(ber_in), CBS_len(ber_in));
917
- }
918
-
919
- *out_key = NULL;
920
- OPENSSL_memset(&ctx, 0, sizeof(ctx));
921
-
922
- /* See ftp://ftp.rsasecurity.com/pub/pkcs/pkcs-12/pkcs-12v1.pdf, section
923
- * four. */
924
- if (!CBS_get_asn1(&in, &pfx, CBS_ASN1_SEQUENCE) ||
925
- CBS_len(&in) != 0 ||
926
- !CBS_get_asn1_uint64(&pfx, &version)) {
927
- OPENSSL_PUT_ERROR(PKCS8, PKCS8_R_BAD_PKCS12_DATA);
928
- goto err;
929
- }
930
-
931
- if (version < 3) {
932
- OPENSSL_PUT_ERROR(PKCS8, PKCS8_R_BAD_PKCS12_VERSION);
933
- goto err;
934
- }
935
-
936
- if (!CBS_get_asn1(&pfx, &authsafe, CBS_ASN1_SEQUENCE)) {
937
- OPENSSL_PUT_ERROR(PKCS8, PKCS8_R_BAD_PKCS12_DATA);
938
- goto err;
939
- }
940
-
941
- if (CBS_len(&pfx) == 0) {
942
- OPENSSL_PUT_ERROR(PKCS8, PKCS8_R_MISSING_MAC);
943
- goto err;
944
- }
945
-
946
- if (!CBS_get_asn1(&pfx, &mac_data, CBS_ASN1_SEQUENCE)) {
947
- OPENSSL_PUT_ERROR(PKCS8, PKCS8_R_BAD_PKCS12_DATA);
948
- goto err;
949
- }
950
-
951
- /* authsafe is a PKCS#7 ContentInfo. See
952
- * https://tools.ietf.org/html/rfc2315#section-7. */
953
- if (!CBS_get_asn1(&authsafe, &content_type, CBS_ASN1_OBJECT) ||
954
- !CBS_get_asn1(&authsafe, &wrapped_authsafes,
955
- CBS_ASN1_CONTEXT_SPECIFIC | CBS_ASN1_CONSTRUCTED | 0)) {
956
- OPENSSL_PUT_ERROR(PKCS8, PKCS8_R_BAD_PKCS12_DATA);
957
- goto err;
958
- }
959
-
960
- /* The content type can either be |NID_pkcs7_data| or |NID_pkcs7_signed|. The
961
- * latter indicates that it's signed by a public key, which isn't
962
- * supported. */
963
- if (OBJ_cbs2nid(&content_type) != NID_pkcs7_data) {
964
- OPENSSL_PUT_ERROR(PKCS8, PKCS8_R_PKCS12_PUBLIC_KEY_INTEGRITY_NOT_SUPPORTED);
965
- goto err;
966
- }
967
-
968
- if (!CBS_get_asn1(&wrapped_authsafes, &authsafes, CBS_ASN1_OCTETSTRING)) {
969
- OPENSSL_PUT_ERROR(PKCS8, PKCS8_R_BAD_PKCS12_DATA);
970
- goto err;
971
- }
972
-
973
- ctx.out_key = out_key;
974
- ctx.out_certs = out_certs;
975
- if (!ascii_to_ucs2(password, password ? strlen(password) : 0, &ctx.password,
976
- &ctx.password_len)) {
977
- OPENSSL_PUT_ERROR(PKCS8, PKCS8_R_DECODE_ERROR);
978
- goto err;
979
- }
980
-
981
- /* Verify the MAC. */
982
- {
983
- CBS mac, hash_type_seq, hash_oid, salt, expected_mac;
984
- uint64_t iterations;
985
- int hash_nid;
986
- const EVP_MD *md;
987
- uint8_t hmac_key[EVP_MAX_MD_SIZE];
988
- uint8_t hmac[EVP_MAX_MD_SIZE];
989
- unsigned hmac_len;
990
-
991
- if (!CBS_get_asn1(&mac_data, &mac, CBS_ASN1_SEQUENCE) ||
992
- !CBS_get_asn1(&mac, &hash_type_seq, CBS_ASN1_SEQUENCE) ||
993
- !CBS_get_asn1(&hash_type_seq, &hash_oid, CBS_ASN1_OBJECT) ||
994
- !CBS_get_asn1(&mac, &expected_mac, CBS_ASN1_OCTETSTRING) ||
995
- !CBS_get_asn1(&mac_data, &salt, CBS_ASN1_OCTETSTRING)) {
996
- OPENSSL_PUT_ERROR(PKCS8, PKCS8_R_BAD_PKCS12_DATA);
997
- goto err;
998
- }
999
-
1000
- /* The iteration count is optional and the default is one. */
1001
- iterations = 1;
1002
- if (CBS_len(&mac_data) > 0) {
1003
- if (!CBS_get_asn1_uint64(&mac_data, &iterations) ||
1004
- iterations > UINT_MAX) {
1005
- OPENSSL_PUT_ERROR(PKCS8, PKCS8_R_BAD_PKCS12_DATA);
1006
- goto err;
1007
- }
1008
- }
1009
-
1010
- hash_nid = OBJ_cbs2nid(&hash_oid);
1011
- if (hash_nid == NID_undef ||
1012
- (md = EVP_get_digestbynid(hash_nid)) == NULL) {
1013
- OPENSSL_PUT_ERROR(PKCS8, PKCS8_R_UNKNOWN_HASH);
1014
- goto err;
1015
- }
1016
-
1017
- if (!pkcs12_key_gen_raw(ctx.password, ctx.password_len, CBS_data(&salt),
1018
- CBS_len(&salt), PKCS12_MAC_ID, iterations,
1019
- EVP_MD_size(md), hmac_key, md)) {
1020
- goto err;
1021
- }
1022
-
1023
- if (NULL == HMAC(md, hmac_key, EVP_MD_size(md), CBS_data(&authsafes),
1024
- CBS_len(&authsafes), hmac, &hmac_len)) {
1025
- goto err;
1026
- }
1027
-
1028
- if (!CBS_mem_equal(&expected_mac, hmac, hmac_len)) {
1029
- OPENSSL_PUT_ERROR(PKCS8, PKCS8_R_INCORRECT_PASSWORD);
1030
- goto err;
1031
- }
1032
- }
1033
-
1034
- /* authsafes contains a series of PKCS#7 ContentInfos. */
1035
- if (!PKCS12_handle_sequence(&authsafes, &ctx, PKCS12_handle_content_info)) {
1036
- goto err;
1037
- }
1038
-
1039
- ret = 1;
1040
-
1041
- err:
1042
- OPENSSL_free(ctx.password);
1043
- OPENSSL_free(der_bytes);
1044
- if (!ret) {
1045
- EVP_PKEY_free(*out_key);
1046
- *out_key = NULL;
1047
- while (sk_X509_num(out_certs) > original_out_certs_len) {
1048
- X509 *x509 = sk_X509_pop(out_certs);
1049
- X509_free(x509);
1050
- }
1051
- }
1052
-
1053
- return ret;
1054
- }
1055
-
1056
- void PKCS12_PBE_add(void) {}
1057
-
1058
- struct pkcs12_st {
1059
- uint8_t *ber_bytes;
1060
- size_t ber_len;
1061
- };
1062
-
1063
- PKCS12 *d2i_PKCS12(PKCS12 **out_p12, const uint8_t **ber_bytes,
1064
- size_t ber_len) {
1065
- PKCS12 *p12;
1066
-
1067
- p12 = OPENSSL_malloc(sizeof(PKCS12));
1068
- if (!p12) {
1069
- return NULL;
1070
- }
1071
-
1072
- p12->ber_bytes = OPENSSL_malloc(ber_len);
1073
- if (!p12->ber_bytes) {
1074
- OPENSSL_free(p12);
1075
- return NULL;
1076
- }
1077
-
1078
- OPENSSL_memcpy(p12->ber_bytes, *ber_bytes, ber_len);
1079
- p12->ber_len = ber_len;
1080
- *ber_bytes += ber_len;
1081
-
1082
- if (out_p12) {
1083
- PKCS12_free(*out_p12);
1084
-
1085
- *out_p12 = p12;
1086
- }
1087
-
1088
- return p12;
1089
- }
1090
-
1091
- PKCS12* d2i_PKCS12_bio(BIO *bio, PKCS12 **out_p12) {
1092
- size_t used = 0;
1093
- BUF_MEM *buf;
1094
- const uint8_t *dummy;
1095
- static const size_t kMaxSize = 256 * 1024;
1096
- PKCS12 *ret = NULL;
1097
-
1098
- buf = BUF_MEM_new();
1099
- if (buf == NULL) {
1100
- return NULL;
1101
- }
1102
- if (BUF_MEM_grow(buf, 8192) == 0) {
1103
- goto out;
1104
- }
1105
-
1106
- for (;;) {
1107
- int n = BIO_read(bio, &buf->data[used], buf->length - used);
1108
- if (n < 0) {
1109
- if (used == 0) {
1110
- goto out;
1111
- }
1112
- /* Workaround a bug in node.js. It uses a memory BIO for this in the wrong
1113
- * mode. */
1114
- n = 0;
1115
- }
1116
-
1117
- if (n == 0) {
1118
- break;
1119
- }
1120
- used += n;
1121
-
1122
- if (used < buf->length) {
1123
- continue;
1124
- }
1125
-
1126
- if (buf->length > kMaxSize ||
1127
- BUF_MEM_grow(buf, buf->length * 2) == 0) {
1128
- goto out;
1129
- }
1130
- }
1131
-
1132
- dummy = (uint8_t*) buf->data;
1133
- ret = d2i_PKCS12(out_p12, &dummy, used);
1134
-
1135
- out:
1136
- BUF_MEM_free(buf);
1137
- return ret;
1138
- }
1139
-
1140
- PKCS12* d2i_PKCS12_fp(FILE *fp, PKCS12 **out_p12) {
1141
- BIO *bio;
1142
- PKCS12 *ret;
1143
-
1144
- bio = BIO_new_fp(fp, 0 /* don't take ownership */);
1145
- if (!bio) {
1146
- return NULL;
1147
- }
1148
-
1149
- ret = d2i_PKCS12_bio(bio, out_p12);
1150
- BIO_free(bio);
1151
- return ret;
1152
- }
1153
-
1154
- int PKCS12_parse(const PKCS12 *p12, const char *password, EVP_PKEY **out_pkey,
1155
- X509 **out_cert, STACK_OF(X509) **out_ca_certs) {
1156
- CBS ber_bytes;
1157
- STACK_OF(X509) *ca_certs = NULL;
1158
- char ca_certs_alloced = 0;
1159
-
1160
- if (out_ca_certs != NULL && *out_ca_certs != NULL) {
1161
- ca_certs = *out_ca_certs;
1162
- }
1163
-
1164
- if (!ca_certs) {
1165
- ca_certs = sk_X509_new_null();
1166
- if (ca_certs == NULL) {
1167
- OPENSSL_PUT_ERROR(PKCS8, ERR_R_MALLOC_FAILURE);
1168
- return 0;
1169
- }
1170
- ca_certs_alloced = 1;
1171
- }
1172
-
1173
- CBS_init(&ber_bytes, p12->ber_bytes, p12->ber_len);
1174
- if (!PKCS12_get_key_and_certs(out_pkey, ca_certs, &ber_bytes, password)) {
1175
- if (ca_certs_alloced) {
1176
- sk_X509_free(ca_certs);
1177
- }
1178
- return 0;
1179
- }
1180
-
1181
- *out_cert = NULL;
1182
- if (sk_X509_num(ca_certs) > 0) {
1183
- *out_cert = sk_X509_shift(ca_certs);
1184
- }
1185
-
1186
- if (out_ca_certs) {
1187
- *out_ca_certs = ca_certs;
1188
- } else {
1189
- sk_X509_pop_free(ca_certs, X509_free);
1190
- }
1191
-
1192
- return 1;
1193
- }
1194
-
1195
- int PKCS12_verify_mac(const PKCS12 *p12, const char *password,
1196
- int password_len) {
1197
- if (password == NULL) {
1198
- if (password_len != 0) {
1199
- return 0;
1200
- }
1201
- } else if (password_len != -1 &&
1202
- (password[password_len] != 0 ||
1203
- OPENSSL_memchr(password, 0, password_len) != NULL)) {
1204
- return 0;
1205
- }
1206
-
1207
- EVP_PKEY *pkey = NULL;
1208
- X509 *cert = NULL;
1209
- if (!PKCS12_parse(p12, password, &pkey, &cert, NULL)) {
1210
- ERR_clear_error();
1211
- return 0;
1212
- }
1213
-
1214
- EVP_PKEY_free(pkey);
1215
- X509_free(cert);
1216
-
1217
- return 1;
1218
- }
1219
-
1220
- void PKCS12_free(PKCS12 *p12) {
1221
- if (p12 == NULL) {
1222
- return;
1223
- }
1224
- OPENSSL_free(p12->ber_bytes);
1225
- OPENSSL_free(p12);
1226
- }