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
@@ -1,4 +1,4 @@
1
- /* Copyright (c) 2014, Google Inc.
1
+ /* Copyright (c) 2017, Google Inc.
2
2
  *
3
3
  * Permission to use, copy, modify, and/or distribute this software for any
4
4
  * purpose with or without fee is hereby granted, provided that the above
@@ -12,7 +12,7 @@
12
12
  * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
13
13
  * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */
14
14
 
15
- #include <openssl/x509.h>
15
+ #include <openssl/pkcs7.h>
16
16
 
17
17
  #include <assert.h>
18
18
  #include <limits.h>
@@ -20,113 +20,28 @@
20
20
  #include <openssl/bytestring.h>
21
21
  #include <openssl/err.h>
22
22
  #include <openssl/mem.h>
23
- #include <openssl/obj.h>
24
23
  #include <openssl/pem.h>
24
+ #include <openssl/pool.h>
25
25
  #include <openssl/stack.h>
26
+ #include <openssl/x509.h>
26
27
 
27
- #include "../bytestring/internal.h"
28
-
29
-
30
- /* pkcs7_parse_header reads the non-certificate/non-CRL prefix of a PKCS#7
31
- * SignedData blob from |cbs| and sets |*out| to point to the rest of the
32
- * input. If the input is in BER format, then |*der_bytes| will be set to a
33
- * pointer that needs to be freed by the caller once they have finished
34
- * processing |*out| (which will be pointing into |*der_bytes|).
35
- *
36
- * It returns one on success or zero on error. On error, |*der_bytes| is
37
- * NULL. */
38
- static int pkcs7_parse_header(uint8_t **der_bytes, CBS *out, CBS *cbs) {
39
- size_t der_len;
40
- CBS in, content_info, content_type, wrapped_signed_data, signed_data;
41
- uint64_t version;
42
-
43
- /* The input may be in BER format. */
44
- *der_bytes = NULL;
45
- if (!CBS_asn1_ber_to_der(cbs, der_bytes, &der_len)) {
46
- return 0;
47
- }
48
- if (*der_bytes != NULL) {
49
- CBS_init(&in, *der_bytes, der_len);
50
- } else {
51
- CBS_init(&in, CBS_data(cbs), CBS_len(cbs));
52
- }
53
-
54
- /* See https://tools.ietf.org/html/rfc2315#section-7 */
55
- if (!CBS_get_asn1(&in, &content_info, CBS_ASN1_SEQUENCE) ||
56
- !CBS_get_asn1(&content_info, &content_type, CBS_ASN1_OBJECT)) {
57
- goto err;
58
- }
59
-
60
- if (OBJ_cbs2nid(&content_type) != NID_pkcs7_signed) {
61
- OPENSSL_PUT_ERROR(X509, X509_R_NOT_PKCS7_SIGNED_DATA);
62
- goto err;
63
- }
64
-
65
- /* See https://tools.ietf.org/html/rfc2315#section-9.1 */
66
- if (!CBS_get_asn1(&content_info, &wrapped_signed_data,
67
- CBS_ASN1_CONTEXT_SPECIFIC | CBS_ASN1_CONSTRUCTED | 0) ||
68
- !CBS_get_asn1(&wrapped_signed_data, &signed_data, CBS_ASN1_SEQUENCE) ||
69
- !CBS_get_asn1_uint64(&signed_data, &version) ||
70
- !CBS_get_asn1(&signed_data, NULL /* digests */, CBS_ASN1_SET) ||
71
- !CBS_get_asn1(&signed_data, NULL /* content */, CBS_ASN1_SEQUENCE)) {
72
- goto err;
73
- }
74
-
75
- if (version < 1) {
76
- OPENSSL_PUT_ERROR(X509, X509_R_BAD_PKCS7_VERSION);
77
- goto err;
78
- }
79
-
80
- CBS_init(out, CBS_data(&signed_data), CBS_len(&signed_data));
81
- return 1;
82
-
83
- err:
84
- if (*der_bytes) {
85
- OPENSSL_free(*der_bytes);
86
- *der_bytes = NULL;
87
- }
28
+ #include "internal.h"
88
29
 
89
- return 0;
90
- }
91
30
 
92
31
  int PKCS7_get_certificates(STACK_OF(X509) *out_certs, CBS *cbs) {
93
- CBS signed_data, certificates;
94
- uint8_t *der_bytes = NULL;
95
32
  int ret = 0;
96
33
  const size_t initial_certs_len = sk_X509_num(out_certs);
97
-
98
- if (!pkcs7_parse_header(&der_bytes, &signed_data, cbs)) {
99
- return 0;
100
- }
101
-
102
- /* See https://tools.ietf.org/html/rfc2315#section-9.1 */
103
- if (!CBS_get_asn1(&signed_data, &certificates,
104
- CBS_ASN1_CONTEXT_SPECIFIC | CBS_ASN1_CONSTRUCTED | 0)) {
105
- OPENSSL_PUT_ERROR(X509, X509_R_NO_CERTIFICATES_INCLUDED);
34
+ STACK_OF(CRYPTO_BUFFER) *raw = sk_CRYPTO_BUFFER_new_null();
35
+ if (raw == NULL ||
36
+ !PKCS7_get_raw_certificates(raw, cbs, NULL)) {
106
37
  goto err;
107
38
  }
108
39
 
109
- while (CBS_len(&certificates) > 0) {
110
- CBS cert;
111
- X509 *x509;
112
- const uint8_t *inp;
113
-
114
- if (!CBS_get_asn1_element(&certificates, &cert, CBS_ASN1_SEQUENCE)) {
115
- goto err;
116
- }
117
-
118
- if (CBS_len(&cert) > LONG_MAX) {
119
- goto err;
120
- }
121
- inp = CBS_data(&cert);
122
- x509 = d2i_X509(NULL, &inp, (long)CBS_len(&cert));
123
- if (!x509) {
124
- goto err;
125
- }
126
-
127
- assert(inp == CBS_data(&cert) + CBS_len(&cert));
128
-
129
- if (sk_X509_push(out_certs, x509) == 0) {
40
+ for (size_t i = 0; i < sk_CRYPTO_BUFFER_num(raw); i++) {
41
+ CRYPTO_BUFFER *buf = sk_CRYPTO_BUFFER_value(raw, i);
42
+ X509 *x509 = X509_parse_from_buffer(buf);
43
+ if (x509 == NULL ||
44
+ !sk_X509_push(out_certs, x509)) {
130
45
  X509_free(x509);
131
46
  goto err;
132
47
  }
@@ -135,10 +50,7 @@ int PKCS7_get_certificates(STACK_OF(X509) *out_certs, CBS *cbs) {
135
50
  ret = 1;
136
51
 
137
52
  err:
138
- if (der_bytes) {
139
- OPENSSL_free(der_bytes);
140
- }
141
-
53
+ sk_CRYPTO_BUFFER_pop_free(raw, CRYPTO_BUFFER_free);
142
54
  if (!ret) {
143
55
  while (sk_X509_num(out_certs) != initial_certs_len) {
144
56
  X509 *x509 = sk_X509_pop(out_certs);
@@ -159,10 +71,10 @@ int PKCS7_get_CRLs(STACK_OF(X509_CRL) *out_crls, CBS *cbs) {
159
71
  return 0;
160
72
  }
161
73
 
162
- /* See https://tools.ietf.org/html/rfc2315#section-9.1 */
74
+ // See https://tools.ietf.org/html/rfc2315#section-9.1
163
75
 
164
- /* Even if only CRLs are included, there may be an empty certificates block.
165
- * OpenSSL does this, for example. */
76
+ // Even if only CRLs are included, there may be an empty certificates block.
77
+ // OpenSSL does this, for example.
166
78
  if (CBS_peek_asn1_tag(&signed_data,
167
79
  CBS_ASN1_CONTEXT_SPECIFIC | CBS_ASN1_CONSTRUCTED | 0) &&
168
80
  !CBS_get_asn1(&signed_data, NULL /* certificates */,
@@ -172,7 +84,7 @@ int PKCS7_get_CRLs(STACK_OF(X509_CRL) *out_crls, CBS *cbs) {
172
84
 
173
85
  if (!CBS_get_asn1(&signed_data, &crls,
174
86
  CBS_ASN1_CONTEXT_SPECIFIC | CBS_ASN1_CONSTRUCTED | 1)) {
175
- OPENSSL_PUT_ERROR(X509, X509_R_NO_CRLS_INCLUDED);
87
+ OPENSSL_PUT_ERROR(PKCS7, PKCS7_R_NO_CRLS_INCLUDED);
176
88
  goto err;
177
89
  }
178
90
 
@@ -205,9 +117,7 @@ int PKCS7_get_CRLs(STACK_OF(X509_CRL) *out_crls, CBS *cbs) {
205
117
  ret = 1;
206
118
 
207
119
  err:
208
- if (der_bytes) {
209
- OPENSSL_free(der_bytes);
210
- }
120
+ OPENSSL_free(der_bytes);
211
121
 
212
122
  if (!ret) {
213
123
  while (sk_X509_CRL_num(out_crls) != initial_crls_len) {
@@ -223,9 +133,9 @@ int PKCS7_get_PEM_certificates(STACK_OF(X509) *out_certs, BIO *pem_bio) {
223
133
  long len;
224
134
  int ret;
225
135
 
226
- /* Even though we pass PEM_STRING_PKCS7 as the expected PEM type here, PEM
227
- * internally will actually allow several other values too, including
228
- * "CERTIFICATE". */
136
+ // Even though we pass PEM_STRING_PKCS7 as the expected PEM type here, PEM
137
+ // internally will actually allow several other values too, including
138
+ // "CERTIFICATE".
229
139
  if (!PEM_bytes_read_bio(&data, &len, NULL /* PEM type output */,
230
140
  PEM_STRING_PKCS7, pem_bio,
231
141
  NULL /* password callback */,
@@ -245,9 +155,9 @@ int PKCS7_get_PEM_CRLs(STACK_OF(X509_CRL) *out_crls, BIO *pem_bio) {
245
155
  long len;
246
156
  int ret;
247
157
 
248
- /* Even though we pass PEM_STRING_PKCS7 as the expected PEM type here, PEM
249
- * internally will actually allow several other values too, including
250
- * "CERTIFICATE". */
158
+ // Even though we pass PEM_STRING_PKCS7 as the expected PEM type here, PEM
159
+ // internally will actually allow several other values too, including
160
+ // "CERTIFICATE".
251
161
  if (!PEM_bytes_read_bio(&data, &len, NULL /* PEM type output */,
252
162
  PEM_STRING_PKCS7, pem_bio,
253
163
  NULL /* password callback */,
@@ -262,42 +172,12 @@ int PKCS7_get_PEM_CRLs(STACK_OF(X509_CRL) *out_crls, BIO *pem_bio) {
262
172
  return ret;
263
173
  }
264
174
 
265
- /* pkcs7_bundle writes a PKCS#7, SignedData structure to |out| and then calls
266
- * |cb| with a CBB to which certificate or CRL data can be written, and the
267
- * opaque context pointer, |arg|. The callback can return zero to indicate an
268
- * error.
269
- *
270
- * pkcs7_bundle returns one on success or zero on error. */
271
- static int pkcs7_bundle(CBB *out, int (*cb)(CBB *out, const void *arg),
272
- const void *arg) {
273
- CBB outer_seq, wrapped_seq, seq, version_bytes, digest_algos_set,
274
- content_info;
275
-
276
- /* See https://tools.ietf.org/html/rfc2315#section-7 */
277
- if (!CBB_add_asn1(out, &outer_seq, CBS_ASN1_SEQUENCE) ||
278
- !OBJ_nid2cbb(&outer_seq, NID_pkcs7_signed) ||
279
- !CBB_add_asn1(&outer_seq, &wrapped_seq,
280
- CBS_ASN1_CONTEXT_SPECIFIC | CBS_ASN1_CONSTRUCTED | 0) ||
281
- /* See https://tools.ietf.org/html/rfc2315#section-9.1 */
282
- !CBB_add_asn1(&wrapped_seq, &seq, CBS_ASN1_SEQUENCE) ||
283
- !CBB_add_asn1(&seq, &version_bytes, CBS_ASN1_INTEGER) ||
284
- !CBB_add_u8(&version_bytes, 1) ||
285
- !CBB_add_asn1(&seq, &digest_algos_set, CBS_ASN1_SET) ||
286
- !CBB_add_asn1(&seq, &content_info, CBS_ASN1_SEQUENCE) ||
287
- !OBJ_nid2cbb(&content_info, NID_pkcs7_data) ||
288
- !cb(&seq, arg)) {
289
- return 0;
290
- }
291
-
292
- return CBB_flush(out);
293
- }
294
-
295
175
  static int pkcs7_bundle_certificates_cb(CBB *out, const void *arg) {
296
176
  const STACK_OF(X509) *certs = arg;
297
177
  size_t i;
298
178
  CBB certificates;
299
179
 
300
- /* See https://tools.ietf.org/html/rfc2315#section-9.1 */
180
+ // See https://tools.ietf.org/html/rfc2315#section-9.1
301
181
  if (!CBB_add_asn1(out, &certificates,
302
182
  CBS_ASN1_CONTEXT_SPECIFIC | CBS_ASN1_CONSTRUCTED | 0)) {
303
183
  return 0;
@@ -327,7 +207,7 @@ static int pkcs7_bundle_crls_cb(CBB *out, const void *arg) {
327
207
  size_t i;
328
208
  CBB crl_data;
329
209
 
330
- /* See https://tools.ietf.org/html/rfc2315#section-9.1 */
210
+ // See https://tools.ietf.org/html/rfc2315#section-9.1
331
211
  if (!CBB_add_asn1(out, &crl_data,
332
212
  CBS_ASN1_CONTEXT_SPECIFIC | CBS_ASN1_CONSTRUCTED | 1)) {
333
213
  return 0;
@@ -63,40 +63,58 @@ extern "C" {
63
63
  #endif
64
64
 
65
65
 
66
- #define PBE_UCS2_CONVERT_PASSWORD 0x1
66
+ // pkcs8_pbe_decrypt decrypts |in| using the PBE scheme described by
67
+ // |algorithm|, which should be a serialized AlgorithmIdentifier structure. On
68
+ // success, it sets |*out| to a newly-allocated buffer containing the decrypted
69
+ // result and returns one. Otherwise, it returns zero.
70
+ int pkcs8_pbe_decrypt(uint8_t **out, size_t *out_len, CBS *algorithm,
71
+ const char *pass, size_t pass_len, const uint8_t *in,
72
+ size_t in_len);
73
+
74
+ #define PKCS12_KEY_ID 1
75
+ #define PKCS12_IV_ID 2
76
+ #define PKCS12_MAC_ID 3
77
+
78
+ // pkcs12_key_gen runs the PKCS#12 key derivation function as specified in
79
+ // RFC 7292, appendix B. On success, it writes the resulting |out_len| bytes of
80
+ // key material to |out| and returns one. Otherwise, it returns zero. |id|
81
+ // should be one of the |PKCS12_*_ID| values.
82
+ int pkcs12_key_gen(const char *pass, size_t pass_len, const uint8_t *salt,
83
+ size_t salt_len, uint8_t id, unsigned iterations,
84
+ size_t out_len, uint8_t *out, const EVP_MD *md);
67
85
 
68
86
  struct pbe_suite {
69
87
  int pbe_nid;
88
+ uint8_t oid[10];
89
+ uint8_t oid_len;
70
90
  const EVP_CIPHER *(*cipher_func)(void);
71
91
  const EVP_MD *(*md_func)(void);
72
- /* decrypt_init initialize |ctx| for decrypting. The password is specified by
73
- * |pass_raw| and |pass_raw_len|. |param| contains the serialized parameters
74
- * field of the AlgorithmIdentifier.
75
- *
76
- * It returns one on success and zero on error. */
92
+ // decrypt_init initialize |ctx| for decrypting. The password is specified by
93
+ // |pass| and |pass_len|. |param| contains the serialized parameters field of
94
+ // the AlgorithmIdentifier.
95
+ //
96
+ // It returns one on success and zero on error.
77
97
  int (*decrypt_init)(const struct pbe_suite *suite, EVP_CIPHER_CTX *ctx,
78
- const uint8_t *pass_raw, size_t pass_raw_len, CBS *param);
79
- int flags;
98
+ const char *pass, size_t pass_len, CBS *param);
80
99
  };
81
100
 
82
101
  #define PKCS5_DEFAULT_ITERATIONS 2048
83
102
  #define PKCS5_SALT_LEN 8
84
103
 
85
104
  int PKCS5_pbe2_decrypt_init(const struct pbe_suite *suite, EVP_CIPHER_CTX *ctx,
86
- const uint8_t *pass_raw, size_t pass_raw_len,
87
- CBS *param);
105
+ const char *pass, size_t pass_len, CBS *param);
88
106
 
89
- /* PKCS5_pbe2_encrypt_init configures |ctx| for encrypting with PKCS #5 PBES2,
90
- * as defined in RFC 2998, with the specified parameters. It writes the
91
- * corresponding AlgorithmIdentifier to |out|. */
107
+ // PKCS5_pbe2_encrypt_init configures |ctx| for encrypting with PKCS #5 PBES2,
108
+ // as defined in RFC 2998, with the specified parameters. It writes the
109
+ // corresponding AlgorithmIdentifier to |out|.
92
110
  int PKCS5_pbe2_encrypt_init(CBB *out, EVP_CIPHER_CTX *ctx,
93
111
  const EVP_CIPHER *cipher, unsigned iterations,
94
- const uint8_t *pass_raw, size_t pass_raw_len,
112
+ const char *pass, size_t pass_len,
95
113
  const uint8_t *salt, size_t salt_len);
96
114
 
97
115
 
98
116
  #if defined(__cplusplus)
99
- } /* extern C */
117
+ } // extern C
100
118
  #endif
101
119
 
102
- #endif /* OPENSSL_HEADER_PKCS8_INTERNAL_H */
120
+ #endif // OPENSSL_HEADER_PKCS8_INTERNAL_H
@@ -62,16 +62,86 @@
62
62
  #include <openssl/cipher.h>
63
63
  #include <openssl/err.h>
64
64
  #include <openssl/mem.h>
65
- #include <openssl/obj.h>
65
+ #include <openssl/nid.h>
66
66
  #include <openssl/rand.h>
67
67
 
68
68
  #include "internal.h"
69
69
  #include "../internal.h"
70
70
 
71
71
 
72
+ // 1.2.840.113549.1.5.12
73
+ static const uint8_t kPBKDF2[] = {0x2a, 0x86, 0x48, 0x86, 0xf7,
74
+ 0x0d, 0x01, 0x05, 0x0c};
75
+
76
+ // 1.2.840.113549.1.5.13
77
+ static const uint8_t kPBES2[] = {0x2a, 0x86, 0x48, 0x86, 0xf7,
78
+ 0x0d, 0x01, 0x05, 0x0d};
79
+
80
+ // 1.2.840.113549.2.7
81
+ static const uint8_t kHMACWithSHA1[] = {0x2a, 0x86, 0x48, 0x86,
82
+ 0xf7, 0x0d, 0x02, 0x07};
83
+
84
+ static const struct {
85
+ uint8_t oid[9];
86
+ uint8_t oid_len;
87
+ int nid;
88
+ const EVP_CIPHER *(*cipher_func)(void);
89
+ } kCipherOIDs[] = {
90
+ // 1.2.840.113549.3.2
91
+ {{0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x03, 0x02},
92
+ 8,
93
+ NID_rc2_cbc,
94
+ &EVP_rc2_cbc},
95
+ // 1.2.840.113549.3.7
96
+ {{0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x03, 0x07},
97
+ 8,
98
+ NID_des_ede3_cbc,
99
+ &EVP_des_ede3_cbc},
100
+ // 2.16.840.1.101.3.4.1.2
101
+ {{0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x01, 0x02},
102
+ 9,
103
+ NID_aes_128_cbc,
104
+ &EVP_aes_128_cbc},
105
+ // 2.16.840.1.101.3.4.1.22
106
+ {{0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x01, 0x16},
107
+ 9,
108
+ NID_aes_192_cbc,
109
+ &EVP_aes_192_cbc},
110
+ // 2.16.840.1.101.3.4.1.42
111
+ {{0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x01, 0x2a},
112
+ 9,
113
+ NID_aes_256_cbc,
114
+ &EVP_aes_256_cbc},
115
+ };
116
+
117
+ static const EVP_CIPHER *cbs_to_cipher(const CBS *cbs) {
118
+ for (size_t i = 0; i < OPENSSL_ARRAY_SIZE(kCipherOIDs); i++) {
119
+ if (CBS_mem_equal(cbs, kCipherOIDs[i].oid, kCipherOIDs[i].oid_len)) {
120
+ return kCipherOIDs[i].cipher_func();
121
+ }
122
+ }
123
+
124
+ return NULL;
125
+ }
126
+
127
+ static int add_cipher_oid(CBB *out, int nid) {
128
+ for (size_t i = 0; i < OPENSSL_ARRAY_SIZE(kCipherOIDs); i++) {
129
+ if (kCipherOIDs[i].nid == nid) {
130
+ CBB child;
131
+ return CBB_add_asn1(out, &child, CBS_ASN1_OBJECT) &&
132
+ CBB_add_bytes(&child, kCipherOIDs[i].oid,
133
+ kCipherOIDs[i].oid_len) &&
134
+ CBB_flush(out);
135
+ }
136
+ }
137
+
138
+ OPENSSL_PUT_ERROR(PKCS8, PKCS8_R_UNSUPPORTED_CIPHER);
139
+ return 0;
140
+ }
141
+
72
142
  static int pkcs5_pbe2_cipher_init(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher,
73
- unsigned iterations, const uint8_t *pass_raw,
74
- size_t pass_raw_len, const uint8_t *salt,
143
+ unsigned iterations, const char *pass,
144
+ size_t pass_len, const uint8_t *salt,
75
145
  size_t salt_len, const uint8_t *iv,
76
146
  size_t iv_len, int enc) {
77
147
  if (iv_len != EVP_CIPHER_iv_length(cipher)) {
@@ -80,8 +150,7 @@ static int pkcs5_pbe2_cipher_init(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher,
80
150
  }
81
151
 
82
152
  uint8_t key[EVP_MAX_KEY_LENGTH];
83
- int ret = PKCS5_PBKDF2_HMAC_SHA1((const char *)pass_raw, pass_raw_len, salt,
84
- salt_len, iterations,
153
+ int ret = PKCS5_PBKDF2_HMAC_SHA1(pass, pass_len, salt, salt_len, iterations,
85
154
  EVP_CIPHER_key_length(cipher), key) &&
86
155
  EVP_CipherInit_ex(ctx, cipher, NULL /* engine */, key, iv, enc);
87
156
  OPENSSL_cleanse(key, EVP_MAX_KEY_LENGTH);
@@ -90,7 +159,7 @@ static int pkcs5_pbe2_cipher_init(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher,
90
159
 
91
160
  int PKCS5_pbe2_encrypt_init(CBB *out, EVP_CIPHER_CTX *ctx,
92
161
  const EVP_CIPHER *cipher, unsigned iterations,
93
- const uint8_t *pass_raw, size_t pass_raw_len,
162
+ const char *pass, size_t pass_len,
94
163
  const uint8_t *salt, size_t salt_len) {
95
164
  int cipher_nid = EVP_CIPHER_nid(cipher);
96
165
  if (cipher_nid == NID_undef) {
@@ -98,45 +167,47 @@ int PKCS5_pbe2_encrypt_init(CBB *out, EVP_CIPHER_CTX *ctx,
98
167
  return 0;
99
168
  }
100
169
 
101
- /* Generate a random IV. */
170
+ // Generate a random IV.
102
171
  uint8_t iv[EVP_MAX_IV_LENGTH];
103
172
  if (!RAND_bytes(iv, EVP_CIPHER_iv_length(cipher))) {
104
173
  return 0;
105
174
  }
106
175
 
107
- /* See RFC 2898, appendix A. */
108
- CBB algorithm, param, kdf, kdf_param, salt_cbb, cipher_cbb, iv_cbb;
176
+ // See RFC 2898, appendix A.
177
+ CBB algorithm, oid, param, kdf, kdf_oid, kdf_param, salt_cbb, cipher_cbb,
178
+ iv_cbb;
109
179
  if (!CBB_add_asn1(out, &algorithm, CBS_ASN1_SEQUENCE) ||
110
- !OBJ_nid2cbb(&algorithm, NID_pbes2) ||
180
+ !CBB_add_asn1(&algorithm, &oid, CBS_ASN1_OBJECT) ||
181
+ !CBB_add_bytes(&oid, kPBES2, sizeof(kPBES2)) ||
111
182
  !CBB_add_asn1(&algorithm, &param, CBS_ASN1_SEQUENCE) ||
112
183
  !CBB_add_asn1(&param, &kdf, CBS_ASN1_SEQUENCE) ||
113
- !OBJ_nid2cbb(&kdf, NID_id_pbkdf2) ||
184
+ !CBB_add_asn1(&kdf, &kdf_oid, CBS_ASN1_OBJECT) ||
185
+ !CBB_add_bytes(&kdf_oid, kPBKDF2, sizeof(kPBKDF2)) ||
114
186
  !CBB_add_asn1(&kdf, &kdf_param, CBS_ASN1_SEQUENCE) ||
115
187
  !CBB_add_asn1(&kdf_param, &salt_cbb, CBS_ASN1_OCTETSTRING) ||
116
188
  !CBB_add_bytes(&salt_cbb, salt, salt_len) ||
117
189
  !CBB_add_asn1_uint64(&kdf_param, iterations) ||
118
- /* Specify a key length for RC2. */
190
+ // Specify a key length for RC2.
119
191
  (cipher_nid == NID_rc2_cbc &&
120
192
  !CBB_add_asn1_uint64(&kdf_param, EVP_CIPHER_key_length(cipher))) ||
121
- /* Omit the PRF. We use the default hmacWithSHA1. */
193
+ // Omit the PRF. We use the default hmacWithSHA1.
122
194
  !CBB_add_asn1(&param, &cipher_cbb, CBS_ASN1_SEQUENCE) ||
123
- !OBJ_nid2cbb(&cipher_cbb, cipher_nid) ||
124
- /* RFC 2898 says RC2-CBC and RC5-CBC-Pad use a SEQUENCE with version and
125
- * IV, but OpenSSL always uses an OCTET STRING IV, so we do the same. */
195
+ !add_cipher_oid(&cipher_cbb, cipher_nid) ||
196
+ // RFC 2898 says RC2-CBC and RC5-CBC-Pad use a SEQUENCE with version and
197
+ // IV, but OpenSSL always uses an OCTET STRING IV, so we do the same.
126
198
  !CBB_add_asn1(&cipher_cbb, &iv_cbb, CBS_ASN1_OCTETSTRING) ||
127
199
  !CBB_add_bytes(&iv_cbb, iv, EVP_CIPHER_iv_length(cipher)) ||
128
200
  !CBB_flush(out)) {
129
201
  return 0;
130
202
  }
131
203
 
132
- return pkcs5_pbe2_cipher_init(ctx, cipher, iterations, pass_raw, pass_raw_len,
133
- salt, salt_len, iv,
134
- EVP_CIPHER_iv_length(cipher), 1 /* encrypt */);
204
+ return pkcs5_pbe2_cipher_init(ctx, cipher, iterations, pass, pass_len, salt,
205
+ salt_len, iv, EVP_CIPHER_iv_length(cipher),
206
+ 1 /* encrypt */);
135
207
  }
136
208
 
137
209
  int PKCS5_pbe2_decrypt_init(const struct pbe_suite *suite, EVP_CIPHER_CTX *ctx,
138
- const uint8_t *pass_raw, size_t pass_raw_len,
139
- CBS *param) {
210
+ const char *pass, size_t pass_len, CBS *param) {
140
211
  CBS pbe_param, kdf, kdf_obj, enc_scheme, enc_obj;
141
212
  if (!CBS_get_asn1(param, &pbe_param, CBS_ASN1_SEQUENCE) ||
142
213
  CBS_len(param) != 0 ||
@@ -149,20 +220,20 @@ int PKCS5_pbe2_decrypt_init(const struct pbe_suite *suite, EVP_CIPHER_CTX *ctx,
149
220
  return 0;
150
221
  }
151
222
 
152
- /* Check that the key derivation function is PBKDF2. */
153
- if (OBJ_cbs2nid(&kdf_obj) != NID_id_pbkdf2) {
223
+ // Only PBKDF2 is supported.
224
+ if (!CBS_mem_equal(&kdf_obj, kPBKDF2, sizeof(kPBKDF2))) {
154
225
  OPENSSL_PUT_ERROR(PKCS8, PKCS8_R_UNSUPPORTED_KEY_DERIVATION_FUNCTION);
155
226
  return 0;
156
227
  }
157
228
 
158
- /* See if we recognise the encryption algorithm. */
159
- const EVP_CIPHER *cipher = EVP_get_cipherbynid(OBJ_cbs2nid(&enc_obj));
229
+ // See if we recognise the encryption algorithm.
230
+ const EVP_CIPHER *cipher = cbs_to_cipher(&enc_obj);
160
231
  if (cipher == NULL) {
161
232
  OPENSSL_PUT_ERROR(PKCS8, PKCS8_R_UNSUPPORTED_CIPHER);
162
233
  return 0;
163
234
  }
164
235
 
165
- /* Parse the KDF parameters. */
236
+ // Parse the KDF parameters. See RFC 8018, appendix A.2.
166
237
  CBS pbkdf2_params, salt;
167
238
  uint64_t iterations;
168
239
  if (!CBS_get_asn1(&kdf, &pbkdf2_params, CBS_ASN1_SEQUENCE) ||
@@ -178,8 +249,8 @@ int PKCS5_pbe2_decrypt_init(const struct pbe_suite *suite, EVP_CIPHER_CTX *ctx,
178
249
  return 0;
179
250
  }
180
251
 
181
- /* The optional keyLength parameter, if present, must match the key length of
182
- * the cipher. */
252
+ // The optional keyLength parameter, if present, must match the key length of
253
+ // the cipher.
183
254
  if (CBS_peek_asn1_tag(&pbkdf2_params, CBS_ASN1_INTEGER)) {
184
255
  uint64_t key_len;
185
256
  if (!CBS_get_asn1_uint64(&pbkdf2_params, &key_len)) {
@@ -194,25 +265,35 @@ int PKCS5_pbe2_decrypt_init(const struct pbe_suite *suite, EVP_CIPHER_CTX *ctx,
194
265
  }
195
266
 
196
267
  if (CBS_len(&pbkdf2_params) != 0) {
197
- CBS prf;
198
- if (!CBS_get_asn1(&pbkdf2_params, &prf, CBS_ASN1_OBJECT) ||
268
+ CBS alg_id, prf;
269
+ if (!CBS_get_asn1(&pbkdf2_params, &alg_id, CBS_ASN1_SEQUENCE) ||
270
+ !CBS_get_asn1(&alg_id, &prf, CBS_ASN1_OBJECT) ||
199
271
  CBS_len(&pbkdf2_params) != 0) {
200
272
  OPENSSL_PUT_ERROR(PKCS8, PKCS8_R_DECODE_ERROR);
201
273
  return 0;
202
274
  }
203
275
 
204
- /* We only support hmacWithSHA1. It is the DEFAULT, so DER requires it be
205
- * omitted, but we match OpenSSL in tolerating it being present. */
206
- if (OBJ_cbs2nid(&prf) != NID_hmacWithSHA1) {
276
+ // We only support hmacWithSHA1. It is the DEFAULT, so DER requires it be
277
+ // omitted, but we match OpenSSL in tolerating it being present.
278
+ if (!CBS_mem_equal(&prf, kHMACWithSHA1, sizeof(kHMACWithSHA1))) {
207
279
  OPENSSL_PUT_ERROR(PKCS8, PKCS8_R_UNSUPPORTED_PRF);
208
280
  return 0;
209
281
  }
282
+
283
+ // hmacWithSHA1 has a NULL parameter.
284
+ CBS null;
285
+ if (!CBS_get_asn1(&alg_id, &null, CBS_ASN1_NULL) ||
286
+ CBS_len(&null) != 0 ||
287
+ CBS_len(&alg_id) != 0) {
288
+ OPENSSL_PUT_ERROR(PKCS8, PKCS8_R_DECODE_ERROR);
289
+ return 0;
290
+ }
210
291
  }
211
292
 
212
- /* Parse the encryption scheme parameters. Note OpenSSL does not match the
213
- * specification. Per RFC 2898, this should depend on the encryption scheme.
214
- * In particular, RC2-CBC and RC5-CBC-Pad use a SEQUENCE with version and IV.
215
- * We align with OpenSSL. */
293
+ // Parse the encryption scheme parameters. Note OpenSSL does not match the
294
+ // specification. Per RFC 2898, this should depend on the encryption scheme.
295
+ // In particular, RC2-CBC uses a SEQUENCE with version and IV. We align with
296
+ // OpenSSL.
216
297
  CBS iv;
217
298
  if (!CBS_get_asn1(&enc_scheme, &iv, CBS_ASN1_OCTETSTRING) ||
218
299
  CBS_len(&enc_scheme) != 0) {
@@ -220,7 +301,7 @@ int PKCS5_pbe2_decrypt_init(const struct pbe_suite *suite, EVP_CIPHER_CTX *ctx,
220
301
  return 0;
221
302
  }
222
303
 
223
- return pkcs5_pbe2_cipher_init(ctx, cipher, (unsigned)iterations, pass_raw,
224
- pass_raw_len, CBS_data(&salt), CBS_len(&salt),
304
+ return pkcs5_pbe2_cipher_init(ctx, cipher, (unsigned)iterations, pass,
305
+ pass_len, CBS_data(&salt), CBS_len(&salt),
225
306
  CBS_data(&iv), CBS_len(&iv), 0 /* decrypt */);
226
307
  }