grpc 1.24.0 → 1.25.0

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 (505) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +306 -243
  3. data/etc/roots.pem +0 -100
  4. data/include/grpc/grpc_security.h +44 -18
  5. data/include/grpc/impl/codegen/grpc_types.h +15 -0
  6. data/include/grpc/impl/codegen/port_platform.h +27 -11
  7. data/include/grpc/impl/codegen/sync_generic.h +1 -1
  8. data/src/boringssl/err_data.c +695 -650
  9. data/src/core/ext/filters/client_channel/client_channel.cc +257 -179
  10. data/src/core/ext/filters/client_channel/client_channel.h +24 -0
  11. data/src/core/ext/filters/client_channel/client_channel_channelz.cc +2 -3
  12. data/src/core/ext/filters/client_channel/client_channel_factory.h +1 -5
  13. data/src/core/ext/filters/client_channel/health/health_check_client.cc +18 -45
  14. data/src/core/ext/filters/client_channel/health/health_check_client.h +5 -13
  15. data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +1 -1
  16. data/src/core/ext/filters/client_channel/lb_policy.cc +2 -3
  17. data/src/core/ext/filters/client_channel/lb_policy.h +65 -55
  18. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +14 -14
  19. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +113 -36
  20. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +14 -19
  21. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +36 -13
  22. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +3 -10
  23. data/src/core/ext/filters/client_channel/lb_policy/xds/xds.cc +814 -1589
  24. data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +2 -5
  25. data/src/core/ext/filters/client_channel/lb_policy_factory.h +3 -6
  26. data/src/core/ext/filters/client_channel/resolver.cc +1 -2
  27. data/src/core/ext/filters/client_channel/resolver.h +8 -16
  28. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +25 -8
  29. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.cc +46 -12
  30. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +10 -17
  31. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_libuv.cc +7 -8
  32. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +4 -4
  33. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +111 -44
  34. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +22 -14
  35. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +1 -1
  36. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.cc +2 -2
  37. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +29 -10
  38. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +27 -36
  39. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +7 -10
  40. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +60 -16
  41. data/src/core/ext/filters/client_channel/resolver_factory.h +4 -8
  42. data/src/core/ext/filters/client_channel/resolver_registry.cc +1 -1
  43. data/src/core/ext/filters/client_channel/resolver_registry.h +1 -1
  44. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +7 -10
  45. data/src/core/ext/filters/client_channel/resolving_lb_policy.cc +7 -8
  46. data/src/core/ext/filters/client_channel/resolving_lb_policy.h +1 -1
  47. data/src/core/ext/filters/client_channel/retry_throttle.cc +5 -5
  48. data/src/core/ext/filters/client_channel/retry_throttle.h +1 -4
  49. data/src/core/ext/filters/client_channel/service_config.h +8 -8
  50. data/src/core/ext/filters/client_channel/subchannel.cc +53 -86
  51. data/src/core/ext/filters/client_channel/subchannel.h +7 -9
  52. data/src/core/ext/filters/client_channel/subchannel_interface.h +9 -13
  53. data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +3 -6
  54. data/src/core/ext/filters/client_channel/{lb_policy/xds/xds_load_balancer_api.cc → xds/xds_api.cc} +169 -52
  55. data/src/core/ext/filters/client_channel/xds/xds_api.h +171 -0
  56. data/src/core/ext/filters/client_channel/xds/xds_bootstrap.cc +450 -0
  57. data/src/core/ext/filters/client_channel/xds/xds_bootstrap.h +99 -0
  58. data/src/core/ext/filters/client_channel/{lb_policy/xds → xds}/xds_channel.h +8 -6
  59. data/src/core/ext/filters/client_channel/xds/xds_channel_args.h +26 -0
  60. data/src/core/ext/filters/client_channel/{lb_policy/xds → xds}/xds_channel_secure.cc +28 -11
  61. data/src/core/ext/filters/client_channel/xds/xds_client.cc +1413 -0
  62. data/src/core/ext/filters/client_channel/xds/xds_client.h +221 -0
  63. data/src/core/ext/filters/client_channel/{lb_policy/xds → xds}/xds_client_stats.cc +1 -5
  64. data/src/core/ext/filters/client_channel/{lb_policy/xds → xds}/xds_client_stats.h +3 -4
  65. data/src/core/ext/filters/deadline/deadline_filter.cc +20 -20
  66. data/src/core/ext/filters/http/client/http_client_filter.cc +15 -15
  67. data/src/core/ext/filters/http/client_authority_filter.cc +14 -14
  68. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +12 -12
  69. data/src/core/ext/filters/max_age/max_age_filter.cc +59 -50
  70. data/src/core/ext/filters/message_size/message_size_filter.cc +18 -18
  71. data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc +15 -14
  72. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +233 -175
  73. data/src/core/ext/transport/chttp2/transport/flow_control.h +21 -24
  74. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +253 -163
  75. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +24 -12
  76. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +2 -3
  77. data/src/core/ext/transport/chttp2/transport/internal.h +13 -15
  78. data/src/core/ext/transport/chttp2/transport/writing.cc +3 -0
  79. data/src/core/ext/transport/inproc/inproc_transport.cc +20 -13
  80. data/src/core/lib/channel/channel_args.cc +16 -0
  81. data/src/core/lib/channel/channel_args.h +22 -0
  82. data/src/core/lib/channel/channelz.cc +5 -6
  83. data/src/core/lib/channel/channelz.h +1 -1
  84. data/src/core/lib/channel/connected_channel.cc +20 -20
  85. data/src/core/lib/channel/handshaker.h +3 -4
  86. data/src/core/lib/channel/handshaker_factory.h +1 -3
  87. data/src/core/lib/debug/trace.h +3 -2
  88. data/src/core/lib/gprpp/arena.cc +3 -3
  89. data/src/core/lib/gprpp/arena.h +2 -3
  90. data/src/core/lib/gprpp/inlined_vector.h +9 -0
  91. data/src/core/lib/gprpp/map.h +3 -501
  92. data/src/core/lib/gprpp/memory.h +45 -41
  93. data/src/core/lib/gprpp/mpscq.cc +108 -0
  94. data/src/core/lib/gprpp/mpscq.h +98 -0
  95. data/src/core/lib/gprpp/orphanable.h +6 -11
  96. data/src/core/lib/gprpp/ref_counted.h +25 -19
  97. data/src/core/lib/gprpp/set.h +33 -0
  98. data/src/core/lib/gprpp/thd.h +2 -4
  99. data/src/core/lib/http/httpcli.cc +1 -1
  100. data/src/core/lib/http/httpcli_security_connector.cc +15 -11
  101. data/src/core/lib/http/parser.cc +1 -1
  102. data/src/core/lib/iomgr/buffer_list.cc +4 -5
  103. data/src/core/lib/iomgr/buffer_list.h +5 -6
  104. data/src/core/lib/iomgr/call_combiner.cc +4 -5
  105. data/src/core/lib/iomgr/call_combiner.h +2 -2
  106. data/src/core/lib/iomgr/cfstream_handle.h +3 -5
  107. data/src/core/lib/iomgr/closure.h +8 -3
  108. data/src/core/lib/iomgr/combiner.cc +45 -82
  109. data/src/core/lib/iomgr/combiner.h +32 -8
  110. data/src/core/lib/iomgr/endpoint_cfstream.cc +5 -3
  111. data/src/core/lib/iomgr/ev_epoll1_linux.cc +19 -15
  112. data/src/core/lib/iomgr/ev_poll_posix.cc +3 -1
  113. data/src/core/lib/iomgr/exec_ctx.h +4 -3
  114. data/src/core/lib/iomgr/executor.cc +4 -2
  115. data/src/core/lib/iomgr/executor.h +3 -0
  116. data/src/core/lib/iomgr/executor/mpmcqueue.h +3 -6
  117. data/src/core/lib/iomgr/executor/threadpool.cc +1 -2
  118. data/src/core/lib/iomgr/executor/threadpool.h +7 -11
  119. data/src/core/lib/iomgr/resource_quota.cc +55 -51
  120. data/src/core/lib/iomgr/resource_quota.h +13 -9
  121. data/src/core/lib/iomgr/socket_utils_common_posix.cc +13 -0
  122. data/src/core/lib/iomgr/socket_utils_posix.h +4 -0
  123. data/src/core/lib/iomgr/tcp_client_posix.cc +4 -11
  124. data/src/core/lib/iomgr/tcp_custom.cc +9 -7
  125. data/src/core/lib/iomgr/tcp_posix.cc +20 -16
  126. data/src/core/lib/iomgr/tcp_server.h +1 -4
  127. data/src/core/lib/iomgr/tcp_server_custom.cc +5 -5
  128. data/src/core/lib/iomgr/tcp_server_posix.cc +1 -1
  129. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +2 -11
  130. data/src/core/lib/iomgr/timer_custom.cc +2 -2
  131. data/src/core/lib/iomgr/udp_server.cc +3 -2
  132. data/src/core/lib/iomgr/udp_server.h +6 -12
  133. data/src/core/lib/json/json.h +1 -1
  134. data/src/core/lib/json/json_string.cc +2 -2
  135. data/src/core/lib/profiling/basic_timers.cc +2 -2
  136. data/src/core/lib/security/credentials/alts/alts_credentials.cc +2 -2
  137. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc +1 -1
  138. data/src/core/lib/security/credentials/credentials.h +4 -20
  139. data/src/core/lib/security/credentials/fake/fake_credentials.cc +4 -4
  140. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +1 -3
  141. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +64 -0
  142. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +4 -4
  143. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +9 -7
  144. data/src/core/lib/security/security_connector/load_system_roots_linux.cc +2 -0
  145. data/src/core/lib/security/security_connector/local/local_security_connector.cc +4 -4
  146. data/src/core/lib/security/security_connector/security_connector.cc +1 -0
  147. data/src/core/lib/security/security_connector/security_connector.h +19 -17
  148. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +8 -5
  149. data/src/core/lib/security/security_connector/ssl_utils.cc +2 -2
  150. data/src/core/lib/security/security_connector/ssl_utils.h +1 -1
  151. data/src/core/lib/security/security_connector/tls/spiffe_security_connector.cc +14 -6
  152. data/src/core/lib/security/security_connector/tls/spiffe_security_connector.h +4 -2
  153. data/src/core/lib/security/transport/client_auth_filter.cc +17 -17
  154. data/src/core/lib/security/transport/security_handshaker.cc +29 -13
  155. data/src/core/lib/security/transport/security_handshaker.h +4 -2
  156. data/src/core/lib/security/transport/server_auth_filter.cc +14 -14
  157. data/src/core/lib/slice/slice.cc +2 -10
  158. data/src/core/lib/slice/slice_hash_table.h +4 -6
  159. data/src/core/lib/slice/slice_intern.cc +42 -39
  160. data/src/core/lib/slice/slice_internal.h +3 -3
  161. data/src/core/lib/slice/slice_utils.h +21 -4
  162. data/src/core/lib/slice/slice_weak_hash_table.h +4 -6
  163. data/src/core/lib/surface/call.cc +3 -3
  164. data/src/core/lib/surface/channel.cc +7 -0
  165. data/src/core/lib/surface/completion_queue.cc +12 -11
  166. data/src/core/lib/surface/completion_queue.h +4 -2
  167. data/src/core/lib/surface/init.cc +1 -0
  168. data/src/core/lib/surface/lame_client.cc +33 -18
  169. data/src/core/lib/surface/server.cc +77 -76
  170. data/src/core/lib/surface/version.cc +1 -1
  171. data/src/core/lib/transport/byte_stream.h +3 -7
  172. data/src/core/lib/transport/connectivity_state.cc +112 -98
  173. data/src/core/lib/transport/connectivity_state.h +100 -50
  174. data/src/core/lib/transport/static_metadata.cc +276 -288
  175. data/src/core/lib/transport/static_metadata.h +73 -76
  176. data/src/core/lib/transport/status_conversion.cc +1 -1
  177. data/src/core/lib/transport/status_metadata.cc +1 -1
  178. data/src/core/lib/transport/transport.cc +2 -2
  179. data/src/core/lib/transport/transport.h +12 -4
  180. data/src/core/lib/transport/transport_op_string.cc +14 -11
  181. data/src/core/tsi/alts/frame_protector/alts_unseal_privacy_integrity_crypter.cc +1 -1
  182. data/src/core/tsi/alts/handshaker/alts_shared_resource.cc +1 -1
  183. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +5 -5
  184. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +12 -2
  185. data/src/core/tsi/fake_transport_security.cc +7 -5
  186. data/src/core/tsi/grpc_shadow_boringssl.h +2918 -2627
  187. data/src/core/tsi/local_transport_security.cc +8 -6
  188. data/src/core/tsi/ssl/session_cache/ssl_session.h +1 -3
  189. data/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc +1 -2
  190. data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +7 -5
  191. data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +4 -6
  192. data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +1 -2
  193. data/src/core/tsi/ssl_transport_security.cc +12 -12
  194. data/src/core/tsi/ssl_transport_security.h +2 -2
  195. data/src/core/tsi/transport_security_grpc.cc +7 -0
  196. data/src/core/tsi/transport_security_grpc.h +6 -0
  197. data/src/ruby/ext/grpc/extconf.rb +1 -0
  198. data/src/ruby/ext/grpc/rb_call.c +1 -1
  199. data/src/ruby/ext/grpc/rb_channel.c +1 -1
  200. data/src/ruby/lib/grpc/generic/bidi_call.rb +1 -1
  201. data/src/ruby/lib/grpc/generic/rpc_server.rb +1 -1
  202. data/src/ruby/lib/grpc/version.rb +1 -1
  203. data/src/ruby/spec/google_rpc_status_utils_spec.rb +2 -2
  204. data/third_party/boringssl/crypto/asn1/a_bool.c +18 -5
  205. data/third_party/boringssl/crypto/asn1/a_d2i_fp.c +17 -221
  206. data/third_party/boringssl/crypto/asn1/a_dup.c +0 -24
  207. data/third_party/boringssl/crypto/asn1/a_enum.c +2 -2
  208. data/third_party/boringssl/crypto/asn1/a_i2d_fp.c +10 -72
  209. data/third_party/boringssl/crypto/asn1/a_int.c +12 -71
  210. data/third_party/boringssl/crypto/asn1/a_mbstr.c +110 -216
  211. data/third_party/boringssl/crypto/asn1/a_object.c +16 -5
  212. data/third_party/boringssl/crypto/asn1/a_strnid.c +1 -0
  213. data/third_party/boringssl/crypto/asn1/asn1_lib.c +5 -1
  214. data/third_party/boringssl/crypto/asn1/tasn_enc.c +3 -1
  215. data/third_party/boringssl/crypto/base64/base64.c +2 -2
  216. data/third_party/boringssl/crypto/bio/bio.c +73 -9
  217. data/third_party/boringssl/crypto/bio/connect.c +4 -0
  218. data/third_party/boringssl/crypto/bio/fd.c +4 -0
  219. data/third_party/boringssl/crypto/bio/file.c +5 -2
  220. data/third_party/boringssl/crypto/bio/socket.c +4 -0
  221. data/third_party/boringssl/crypto/bio/socket_helper.c +4 -0
  222. data/third_party/boringssl/crypto/bn_extra/convert.c +11 -7
  223. data/third_party/boringssl/crypto/bytestring/ber.c +8 -4
  224. data/third_party/boringssl/crypto/bytestring/cbb.c +19 -7
  225. data/third_party/boringssl/crypto/bytestring/cbs.c +28 -15
  226. data/third_party/boringssl/crypto/bytestring/internal.h +28 -7
  227. data/third_party/boringssl/crypto/bytestring/unicode.c +155 -0
  228. data/third_party/boringssl/crypto/chacha/chacha.c +36 -19
  229. data/third_party/boringssl/crypto/chacha/internal.h +45 -0
  230. data/third_party/boringssl/crypto/cipher_extra/cipher_extra.c +29 -0
  231. data/third_party/boringssl/crypto/cipher_extra/e_aesccm.c +269 -25
  232. data/third_party/boringssl/crypto/cipher_extra/e_aesctrhmac.c +16 -14
  233. data/third_party/boringssl/crypto/cipher_extra/e_aesgcmsiv.c +54 -38
  234. data/third_party/boringssl/crypto/cipher_extra/e_chacha20poly1305.c +133 -41
  235. data/third_party/boringssl/crypto/cipher_extra/e_tls.c +23 -15
  236. data/third_party/boringssl/crypto/cipher_extra/tls_cbc.c +24 -15
  237. data/third_party/boringssl/crypto/cmac/cmac.c +62 -25
  238. data/third_party/boringssl/crypto/conf/conf.c +7 -0
  239. data/third_party/boringssl/crypto/cpu-arm-linux.c +4 -148
  240. data/third_party/boringssl/crypto/cpu-arm-linux.h +201 -0
  241. data/third_party/boringssl/crypto/cpu-intel.c +45 -51
  242. data/third_party/boringssl/crypto/crypto.c +39 -22
  243. data/third_party/boringssl/crypto/curve25519/spake25519.c +1 -1
  244. data/third_party/boringssl/crypto/dsa/dsa.c +77 -53
  245. data/third_party/boringssl/crypto/ec_extra/ec_asn1.c +20 -8
  246. data/third_party/boringssl/crypto/ec_extra/ec_derive.c +96 -0
  247. data/third_party/boringssl/crypto/{ecdh/ecdh.c → ecdh_extra/ecdh_extra.c} +20 -58
  248. data/third_party/boringssl/crypto/ecdsa_extra/ecdsa_asn1.c +1 -9
  249. data/third_party/boringssl/crypto/engine/engine.c +2 -1
  250. data/third_party/boringssl/crypto/err/err.c +2 -0
  251. data/third_party/boringssl/crypto/err/internal.h +2 -2
  252. data/third_party/boringssl/crypto/evp/evp.c +89 -8
  253. data/third_party/boringssl/crypto/evp/evp_asn1.c +56 -5
  254. data/third_party/boringssl/crypto/evp/evp_ctx.c +52 -14
  255. data/third_party/boringssl/crypto/evp/internal.h +18 -1
  256. data/third_party/boringssl/crypto/evp/p_dsa_asn1.c +5 -0
  257. data/third_party/boringssl/crypto/evp/p_ec.c +51 -3
  258. data/third_party/boringssl/crypto/evp/p_ec_asn1.c +6 -7
  259. data/third_party/boringssl/crypto/evp/p_ed25519.c +36 -3
  260. data/third_party/boringssl/crypto/evp/p_ed25519_asn1.c +76 -45
  261. data/third_party/boringssl/crypto/evp/p_rsa.c +3 -1
  262. data/third_party/boringssl/crypto/evp/p_rsa_asn1.c +5 -0
  263. data/third_party/boringssl/crypto/evp/p_x25519.c +110 -0
  264. data/third_party/boringssl/crypto/evp/p_x25519_asn1.c +249 -0
  265. data/third_party/boringssl/crypto/evp/scrypt.c +6 -2
  266. data/third_party/boringssl/crypto/fipsmodule/aes/aes.c +34 -274
  267. data/third_party/boringssl/crypto/fipsmodule/aes/internal.h +161 -21
  268. data/third_party/boringssl/crypto/fipsmodule/aes/key_wrap.c +111 -13
  269. data/third_party/boringssl/crypto/fipsmodule/aes/mode_wrappers.c +17 -21
  270. data/third_party/boringssl/crypto/fipsmodule/bcm.c +119 -7
  271. data/third_party/boringssl/crypto/fipsmodule/bn/bn.c +19 -2
  272. data/third_party/boringssl/crypto/fipsmodule/bn/cmp.c +2 -2
  273. data/third_party/boringssl/crypto/fipsmodule/bn/ctx.c +93 -160
  274. data/third_party/boringssl/crypto/fipsmodule/bn/div.c +48 -57
  275. data/third_party/boringssl/crypto/fipsmodule/bn/div_extra.c +87 -0
  276. data/third_party/boringssl/crypto/fipsmodule/bn/exponentiation.c +143 -211
  277. data/third_party/boringssl/crypto/fipsmodule/bn/gcd.c +0 -305
  278. data/third_party/boringssl/crypto/fipsmodule/bn/gcd_extra.c +325 -0
  279. data/third_party/boringssl/crypto/fipsmodule/bn/internal.h +168 -50
  280. data/third_party/boringssl/crypto/fipsmodule/bn/montgomery.c +68 -92
  281. data/third_party/boringssl/crypto/fipsmodule/bn/montgomery_inv.c +7 -6
  282. data/third_party/boringssl/crypto/fipsmodule/bn/mul.c +11 -14
  283. data/third_party/boringssl/crypto/fipsmodule/bn/prime.c +358 -443
  284. data/third_party/boringssl/crypto/fipsmodule/bn/random.c +25 -35
  285. data/third_party/boringssl/crypto/fipsmodule/bn/rsaz_exp.c +20 -25
  286. data/third_party/boringssl/crypto/fipsmodule/bn/rsaz_exp.h +76 -5
  287. data/third_party/boringssl/crypto/fipsmodule/bn/shift.c +14 -14
  288. data/third_party/boringssl/crypto/fipsmodule/cipher/cipher.c +7 -2
  289. data/third_party/boringssl/crypto/fipsmodule/cipher/e_aes.c +383 -516
  290. data/third_party/boringssl/crypto/fipsmodule/cipher/e_des.c +4 -0
  291. data/third_party/boringssl/crypto/fipsmodule/cipher/internal.h +3 -4
  292. data/third_party/boringssl/crypto/fipsmodule/delocate.h +3 -2
  293. data/third_party/boringssl/crypto/fipsmodule/digest/digest.c +32 -17
  294. data/third_party/boringssl/crypto/fipsmodule/digest/md32_common.h +3 -3
  295. data/third_party/boringssl/crypto/fipsmodule/ec/ec.c +228 -122
  296. data/third_party/boringssl/crypto/fipsmodule/ec/ec_key.c +34 -8
  297. data/third_party/boringssl/crypto/fipsmodule/ec/ec_montgomery.c +311 -98
  298. data/third_party/boringssl/crypto/fipsmodule/ec/felem.c +82 -0
  299. data/third_party/boringssl/crypto/fipsmodule/ec/internal.h +263 -97
  300. data/third_party/boringssl/crypto/fipsmodule/ec/oct.c +22 -59
  301. data/third_party/boringssl/crypto/fipsmodule/ec/p224-64.c +317 -234
  302. data/third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64-table.h +9473 -9475
  303. data/third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64.c +313 -109
  304. data/third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64.h +36 -0
  305. data/third_party/boringssl/crypto/fipsmodule/ec/scalar.c +96 -0
  306. data/third_party/boringssl/crypto/fipsmodule/ec/simple.c +126 -792
  307. data/third_party/boringssl/crypto/fipsmodule/ec/simple_mul.c +84 -0
  308. data/third_party/boringssl/crypto/fipsmodule/ec/util.c +163 -12
  309. data/third_party/boringssl/crypto/fipsmodule/ec/wnaf.c +84 -211
  310. data/third_party/boringssl/crypto/fipsmodule/ecdh/ecdh.c +122 -0
  311. data/third_party/boringssl/crypto/fipsmodule/ecdsa/ecdsa.c +60 -205
  312. data/third_party/boringssl/crypto/fipsmodule/fips_shared_support.c +32 -0
  313. data/third_party/boringssl/crypto/fipsmodule/is_fips.c +2 -0
  314. data/third_party/boringssl/crypto/fipsmodule/md4/md4.c +3 -1
  315. data/third_party/boringssl/crypto/fipsmodule/md5/internal.h +37 -0
  316. data/third_party/boringssl/crypto/fipsmodule/md5/md5.c +11 -8
  317. data/third_party/boringssl/crypto/fipsmodule/modes/cbc.c +35 -79
  318. data/third_party/boringssl/crypto/fipsmodule/modes/cfb.c +7 -39
  319. data/third_party/boringssl/crypto/fipsmodule/modes/ctr.c +7 -27
  320. data/third_party/boringssl/crypto/fipsmodule/modes/gcm.c +123 -309
  321. data/third_party/boringssl/crypto/fipsmodule/modes/internal.h +189 -126
  322. data/third_party/boringssl/crypto/fipsmodule/modes/ofb.c +3 -2
  323. data/third_party/boringssl/crypto/fipsmodule/rand/ctrdrbg.c +2 -2
  324. data/third_party/boringssl/crypto/fipsmodule/rand/internal.h +35 -0
  325. data/third_party/boringssl/crypto/fipsmodule/rand/rand.c +24 -19
  326. data/third_party/boringssl/crypto/fipsmodule/rand/urandom.c +256 -77
  327. data/third_party/boringssl/crypto/fipsmodule/rsa/padding.c +10 -7
  328. data/third_party/boringssl/crypto/fipsmodule/rsa/rsa.c +5 -1
  329. data/third_party/boringssl/crypto/fipsmodule/rsa/rsa_impl.c +131 -14
  330. data/third_party/boringssl/crypto/fipsmodule/self_check/self_check.c +83 -10
  331. data/third_party/boringssl/crypto/fipsmodule/sha/internal.h +53 -0
  332. data/third_party/boringssl/crypto/fipsmodule/sha/sha1.c +9 -13
  333. data/third_party/boringssl/crypto/fipsmodule/sha/sha256.c +18 -12
  334. data/third_party/boringssl/crypto/fipsmodule/sha/sha512.c +95 -168
  335. data/third_party/boringssl/crypto/hrss/hrss.c +2201 -0
  336. data/third_party/boringssl/crypto/hrss/internal.h +62 -0
  337. data/third_party/boringssl/crypto/internal.h +95 -20
  338. data/third_party/boringssl/crypto/lhash/lhash.c +45 -33
  339. data/third_party/boringssl/crypto/mem.c +39 -2
  340. data/third_party/boringssl/crypto/obj/obj.c +4 -4
  341. data/third_party/boringssl/crypto/obj/obj_dat.h +6181 -875
  342. data/third_party/boringssl/crypto/pem/pem_all.c +2 -3
  343. data/third_party/boringssl/crypto/pem/pem_info.c +144 -162
  344. data/third_party/boringssl/crypto/pem/pem_lib.c +53 -52
  345. data/third_party/boringssl/crypto/pem/pem_pkey.c +13 -21
  346. data/third_party/boringssl/crypto/pkcs7/pkcs7.c +15 -22
  347. data/third_party/boringssl/crypto/pkcs7/pkcs7_x509.c +168 -16
  348. data/third_party/boringssl/crypto/pkcs8/internal.h +11 -0
  349. data/third_party/boringssl/crypto/pkcs8/p5_pbev2.c +24 -15
  350. data/third_party/boringssl/crypto/pkcs8/pkcs8.c +42 -25
  351. data/third_party/boringssl/crypto/pkcs8/pkcs8_x509.c +559 -43
  352. data/third_party/boringssl/crypto/pool/internal.h +1 -1
  353. data/third_party/boringssl/crypto/pool/pool.c +21 -0
  354. data/third_party/boringssl/crypto/rand_extra/deterministic.c +8 -0
  355. data/third_party/boringssl/crypto/rand_extra/fuchsia.c +1 -14
  356. data/third_party/boringssl/crypto/refcount_lock.c +2 -2
  357. data/third_party/boringssl/crypto/rsa_extra/rsa_print.c +22 -0
  358. data/third_party/boringssl/crypto/siphash/siphash.c +80 -0
  359. data/third_party/boringssl/crypto/stack/stack.c +83 -32
  360. data/third_party/boringssl/crypto/thread_none.c +2 -2
  361. data/third_party/boringssl/crypto/thread_pthread.c +2 -2
  362. data/third_party/boringssl/crypto/thread_win.c +38 -19
  363. data/third_party/boringssl/crypto/x509/a_strex.c +22 -2
  364. data/third_party/boringssl/crypto/x509/asn1_gen.c +2 -1
  365. data/third_party/boringssl/crypto/x509/by_dir.c +7 -0
  366. data/third_party/boringssl/crypto/x509/by_file.c +12 -10
  367. data/third_party/boringssl/crypto/x509/t_crl.c +5 -8
  368. data/third_party/boringssl/crypto/x509/t_req.c +1 -3
  369. data/third_party/boringssl/crypto/x509/t_x509.c +5 -8
  370. data/third_party/boringssl/crypto/x509/x509_cmp.c +1 -1
  371. data/third_party/boringssl/crypto/x509/x509_def.c +1 -1
  372. data/third_party/boringssl/crypto/x509/x509_lu.c +114 -5
  373. data/third_party/boringssl/crypto/x509/x509_req.c +20 -0
  374. data/third_party/boringssl/crypto/x509/x509_set.c +5 -0
  375. data/third_party/boringssl/crypto/x509/x509_trs.c +1 -0
  376. data/third_party/boringssl/crypto/x509/x509_txt.c +4 -5
  377. data/third_party/boringssl/crypto/x509/x509_vfy.c +145 -138
  378. data/third_party/boringssl/crypto/x509/x509_vpm.c +2 -0
  379. data/third_party/boringssl/crypto/x509/x509cset.c +40 -0
  380. data/third_party/boringssl/crypto/x509/x509name.c +2 -3
  381. data/third_party/boringssl/crypto/x509/x_all.c +109 -210
  382. data/third_party/boringssl/crypto/x509/x_x509.c +6 -0
  383. data/third_party/boringssl/crypto/x509v3/ext_dat.h +1 -3
  384. data/third_party/boringssl/crypto/x509v3/internal.h +56 -0
  385. data/third_party/boringssl/crypto/x509v3/pcy_cache.c +2 -0
  386. data/third_party/boringssl/crypto/x509v3/pcy_node.c +1 -0
  387. data/third_party/boringssl/crypto/x509v3/pcy_tree.c +4 -2
  388. data/third_party/boringssl/crypto/x509v3/v3_akey.c +5 -2
  389. data/third_party/boringssl/crypto/x509v3/v3_alt.c +19 -13
  390. data/third_party/boringssl/crypto/x509v3/v3_conf.c +2 -1
  391. data/third_party/boringssl/crypto/x509v3/v3_cpols.c +3 -2
  392. data/third_party/boringssl/crypto/x509v3/v3_genn.c +1 -6
  393. data/third_party/boringssl/crypto/x509v3/v3_lib.c +1 -0
  394. data/third_party/boringssl/crypto/x509v3/v3_ocsp.c +68 -0
  395. data/third_party/boringssl/crypto/x509v3/v3_pci.c +2 -1
  396. data/third_party/boringssl/crypto/x509v3/v3_purp.c +47 -69
  397. data/third_party/boringssl/crypto/x509v3/v3_skey.c +5 -2
  398. data/third_party/boringssl/crypto/x509v3/v3_utl.c +69 -25
  399. data/third_party/boringssl/include/openssl/aead.h +45 -19
  400. data/third_party/boringssl/include/openssl/aes.h +32 -7
  401. data/third_party/boringssl/include/openssl/asn1.h +7 -77
  402. data/third_party/boringssl/include/openssl/base.h +120 -6
  403. data/third_party/boringssl/include/openssl/base64.h +4 -1
  404. data/third_party/boringssl/include/openssl/bio.h +112 -81
  405. data/third_party/boringssl/include/openssl/blowfish.h +3 -3
  406. data/third_party/boringssl/include/openssl/bn.h +55 -29
  407. data/third_party/boringssl/include/openssl/buf.h +2 -2
  408. data/third_party/boringssl/include/openssl/bytestring.h +54 -32
  409. data/third_party/boringssl/include/openssl/cast.h +2 -2
  410. data/third_party/boringssl/include/openssl/cipher.h +46 -16
  411. data/third_party/boringssl/include/openssl/cmac.h +6 -2
  412. data/third_party/boringssl/include/openssl/conf.h +3 -6
  413. data/third_party/boringssl/include/openssl/cpu.h +25 -9
  414. data/third_party/boringssl/include/openssl/crypto.h +32 -10
  415. data/third_party/boringssl/include/openssl/curve25519.h +4 -4
  416. data/third_party/boringssl/include/openssl/dh.h +3 -2
  417. data/third_party/boringssl/include/openssl/digest.h +21 -7
  418. data/third_party/boringssl/include/openssl/dsa.h +8 -2
  419. data/third_party/boringssl/include/openssl/e_os2.h +18 -0
  420. data/third_party/boringssl/include/openssl/ec.h +25 -21
  421. data/third_party/boringssl/include/openssl/ec_key.h +36 -8
  422. data/third_party/boringssl/include/openssl/ecdh.h +17 -0
  423. data/third_party/boringssl/include/openssl/ecdsa.h +3 -3
  424. data/third_party/boringssl/include/openssl/engine.h +4 -4
  425. data/third_party/boringssl/include/openssl/err.h +3 -0
  426. data/third_party/boringssl/include/openssl/evp.h +199 -42
  427. data/third_party/boringssl/include/openssl/hmac.h +4 -4
  428. data/third_party/boringssl/include/openssl/hrss.h +100 -0
  429. data/third_party/boringssl/include/openssl/lhash.h +131 -23
  430. data/third_party/boringssl/include/openssl/md4.h +6 -4
  431. data/third_party/boringssl/include/openssl/md5.h +6 -4
  432. data/third_party/boringssl/include/openssl/mem.h +6 -2
  433. data/third_party/boringssl/include/openssl/nid.h +3 -0
  434. data/third_party/boringssl/include/openssl/obj.h +3 -0
  435. data/third_party/boringssl/include/openssl/pem.h +102 -64
  436. data/third_party/boringssl/include/openssl/pkcs7.h +136 -3
  437. data/third_party/boringssl/include/openssl/pkcs8.h +42 -3
  438. data/third_party/boringssl/include/openssl/pool.h +13 -2
  439. data/third_party/boringssl/include/openssl/ripemd.h +5 -4
  440. data/third_party/boringssl/include/openssl/rsa.h +46 -15
  441. data/third_party/boringssl/include/openssl/sha.h +40 -28
  442. data/third_party/boringssl/include/openssl/siphash.h +37 -0
  443. data/third_party/boringssl/include/openssl/span.h +17 -9
  444. data/third_party/boringssl/include/openssl/ssl.h +766 -393
  445. data/third_party/boringssl/include/openssl/ssl3.h +4 -3
  446. data/third_party/boringssl/include/openssl/stack.h +134 -77
  447. data/third_party/boringssl/include/openssl/thread.h +1 -1
  448. data/third_party/boringssl/include/openssl/tls1.h +25 -9
  449. data/third_party/boringssl/include/openssl/type_check.h +14 -15
  450. data/third_party/boringssl/include/openssl/x509.h +28 -3
  451. data/third_party/boringssl/include/openssl/x509_vfy.h +98 -32
  452. data/third_party/boringssl/include/openssl/x509v3.h +17 -13
  453. data/third_party/boringssl/ssl/d1_both.cc +9 -18
  454. data/third_party/boringssl/ssl/d1_lib.cc +4 -3
  455. data/third_party/boringssl/ssl/d1_pkt.cc +4 -4
  456. data/third_party/boringssl/ssl/d1_srtp.cc +15 -15
  457. data/third_party/boringssl/ssl/dtls_method.cc +0 -1
  458. data/third_party/boringssl/ssl/dtls_record.cc +28 -28
  459. data/third_party/boringssl/ssl/handoff.cc +295 -91
  460. data/third_party/boringssl/ssl/handshake.cc +133 -72
  461. data/third_party/boringssl/ssl/handshake_client.cc +218 -189
  462. data/third_party/boringssl/ssl/handshake_server.cc +399 -272
  463. data/third_party/boringssl/ssl/internal.h +1413 -928
  464. data/third_party/boringssl/ssl/s3_both.cc +175 -36
  465. data/third_party/boringssl/ssl/s3_lib.cc +9 -13
  466. data/third_party/boringssl/ssl/s3_pkt.cc +63 -29
  467. data/third_party/boringssl/ssl/ssl_aead_ctx.cc +55 -35
  468. data/third_party/boringssl/ssl/ssl_asn1.cc +57 -73
  469. data/third_party/boringssl/ssl/ssl_buffer.cc +13 -12
  470. data/third_party/boringssl/ssl/ssl_cert.cc +313 -210
  471. data/third_party/boringssl/ssl/ssl_cipher.cc +159 -221
  472. data/third_party/boringssl/ssl/ssl_file.cc +2 -0
  473. data/third_party/boringssl/ssl/ssl_key_share.cc +164 -19
  474. data/third_party/boringssl/ssl/ssl_lib.cc +847 -555
  475. data/third_party/boringssl/ssl/ssl_privkey.cc +441 -111
  476. data/third_party/boringssl/ssl/ssl_session.cc +230 -178
  477. data/third_party/boringssl/ssl/ssl_transcript.cc +21 -142
  478. data/third_party/boringssl/ssl/ssl_versions.cc +88 -93
  479. data/third_party/boringssl/ssl/ssl_x509.cc +279 -218
  480. data/third_party/boringssl/ssl/t1_enc.cc +5 -96
  481. data/third_party/boringssl/ssl/t1_lib.cc +931 -678
  482. data/third_party/boringssl/ssl/tls13_both.cc +251 -121
  483. data/third_party/boringssl/ssl/tls13_client.cc +129 -73
  484. data/third_party/boringssl/ssl/tls13_enc.cc +350 -282
  485. data/third_party/boringssl/ssl/tls13_server.cc +259 -192
  486. data/third_party/boringssl/ssl/tls_method.cc +26 -21
  487. data/third_party/boringssl/ssl/tls_record.cc +42 -47
  488. data/third_party/boringssl/third_party/fiat/curve25519.c +261 -1324
  489. data/third_party/boringssl/third_party/fiat/curve25519_32.h +911 -0
  490. data/third_party/boringssl/third_party/fiat/curve25519_64.h +559 -0
  491. data/third_party/boringssl/third_party/fiat/p256.c +238 -999
  492. data/third_party/boringssl/third_party/fiat/p256_32.h +3226 -0
  493. data/third_party/boringssl/third_party/fiat/p256_64.h +1217 -0
  494. data/third_party/upb/upb/port_def.inc +1 -1
  495. data/third_party/upb/upb/table.c +2 -1
  496. metadata +72 -44
  497. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_load_balancer_api.h +0 -127
  498. data/src/core/lib/gpr/mpscq.cc +0 -117
  499. data/src/core/lib/gpr/mpscq.h +0 -88
  500. data/src/core/lib/gprpp/abstract.h +0 -47
  501. data/src/core/lib/gprpp/pair.h +0 -38
  502. data/third_party/boringssl/crypto/cipher_extra/e_ssl3.c +0 -460
  503. data/third_party/boringssl/crypto/fipsmodule/modes/ccm.c +0 -256
  504. data/third_party/boringssl/include/openssl/lhash_macros.h +0 -174
  505. data/third_party/boringssl/ssl/custom_extensions.cc +0 -265
@@ -313,6 +313,12 @@ int i2d_X509_AUX(X509 *a, unsigned char **pp)
313
313
  return length;
314
314
  }
315
315
 
316
+ int i2d_re_X509_tbs(X509 *x, unsigned char **pp)
317
+ {
318
+ x->cert_info->enc.modified = 1;
319
+ return i2d_X509_CINF(x->cert_info, pp);
320
+ }
321
+
316
322
  void X509_get0_signature(const ASN1_BIT_STRING **psig, const X509_ALGOR **palg,
317
323
  const X509 *x)
318
324
  {
@@ -107,19 +107,17 @@ static const X509V3_EXT_METHOD *const standard_exts[] = {
107
107
  &v3_ext_ku,
108
108
  &v3_delta_crl,
109
109
  &v3_crl_reason,
110
- #ifndef OPENSSL_NO_OCSP
111
110
  &v3_crl_invdate,
112
- #endif
113
111
  &v3_sxnet,
114
112
  &v3_info,
115
113
  #ifndef OPENSSL_NO_OCSP
116
114
  &v3_ocsp_nonce,
117
115
  &v3_ocsp_crlid,
118
116
  &v3_ocsp_accresp,
119
- &v3_ocsp_nocheck,
120
117
  &v3_ocsp_acutoff,
121
118
  &v3_ocsp_serviceloc,
122
119
  #endif
120
+ &v3_ocsp_nocheck,
123
121
  &v3_sinfo,
124
122
  &v3_policy_constraints,
125
123
  #ifndef OPENSSL_NO_OCSP
@@ -0,0 +1,56 @@
1
+ /* Copyright (c) 2018, Google Inc.
2
+ *
3
+ * Permission to use, copy, modify, and/or distribute this software for any
4
+ * purpose with or without fee is hereby granted, provided that the above
5
+ * copyright notice and this permission notice appear in all copies.
6
+ *
7
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
8
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
9
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
10
+ * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
11
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
12
+ * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
13
+ * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */
14
+
15
+ #ifndef OPENSSL_HEADER_X509V3_INTERNAL_H
16
+ #define OPENSSL_HEADER_X509V3_INTERNAL_H
17
+
18
+ #include <openssl/base.h>
19
+
20
+ #if defined(__cplusplus)
21
+ extern "C" {
22
+ #endif
23
+
24
+
25
+ // x509v3_bytes_to_hex encodes |len| bytes from |buffer| to hex and returns a
26
+ // newly-allocated NUL-terminated string containing the result, or NULL on
27
+ // allocation error.
28
+ //
29
+ // Note this function was historically named |hex_to_string| in OpenSSL, not
30
+ // |string_to_hex|.
31
+ char *x509v3_bytes_to_hex(const unsigned char *buffer, long len);
32
+
33
+ // x509v3_hex_string_to_bytes decodes |str| in hex and returns a newly-allocated
34
+ // array containing the result, or NULL on error. On success, it sets |*len| to
35
+ // the length of the result. Colon separators between bytes in the input are
36
+ // allowed and ignored.
37
+ //
38
+ // Note this function was historically named |string_to_hex| in OpenSSL, not
39
+ // |hex_to_string|.
40
+ unsigned char *x509v3_hex_to_bytes(const char *str, long *len);
41
+
42
+ // x509v3_name_cmp returns zero if |name| is equal to |cmp| or begins with |cmp|
43
+ // followed by '.'. Otherwise, it returns a non-zero number.
44
+ int x509v3_name_cmp(const char *name, const char *cmp);
45
+
46
+ // x509v3_looks_like_dns_name returns one if |in| looks like a DNS name and zero
47
+ // otherwise.
48
+ OPENSSL_EXPORT int x509v3_looks_like_dns_name(const unsigned char *in,
49
+ size_t len);
50
+
51
+
52
+ #if defined(__cplusplus)
53
+ } /* extern C */
54
+ #endif
55
+
56
+ #endif /* OPENSSL_HEADER_X509V3_INTERNAL_H */
@@ -93,6 +93,7 @@ static int policy_cache_create(X509 *x,
93
93
  /*
94
94
  * Duplicate policy OIDs are illegal: reject if matches found.
95
95
  */
96
+ sk_X509_POLICY_DATA_sort(cache->data);
96
97
  if (OBJ_obj2nid(data->valid_policy) == NID_any_policy) {
97
98
  if (cache->anyPolicy) {
98
99
  ret = -1;
@@ -262,6 +263,7 @@ X509_POLICY_DATA *policy_cache_find_data(const X509_POLICY_CACHE *cache,
262
263
  X509_POLICY_DATA tmp;
263
264
 
264
265
  tmp.valid_policy = (ASN1_OBJECT *)id;
266
+ sk_X509_POLICY_DATA_sort(cache->data);
265
267
  if (!sk_X509_POLICY_DATA_find(cache->data, &idx, &tmp))
266
268
  return NULL;
267
269
  return sk_X509_POLICY_DATA_value(cache->data, idx);
@@ -83,6 +83,7 @@ X509_POLICY_NODE *tree_find_sk(STACK_OF(X509_POLICY_NODE) *nodes,
83
83
  n.valid_policy = (ASN1_OBJECT *)id;
84
84
  l.data = &n;
85
85
 
86
+ sk_X509_POLICY_NODE_sort(nodes);
86
87
  if (!sk_X509_POLICY_NODE_find(nodes, &idx, &l))
87
88
  return NULL;
88
89
 
@@ -543,9 +543,11 @@ static int tree_add_auth_node(STACK_OF(X509_POLICY_NODE) **pnodes,
543
543
  *pnodes = policy_node_cmp_new();
544
544
  if (!*pnodes)
545
545
  return 0;
546
- } else if (sk_X509_POLICY_NODE_find(*pnodes, NULL, pcy))
546
+ } else {
547
+ sk_X509_POLICY_NODE_sort(*pnodes);
548
+ if (sk_X509_POLICY_NODE_find(*pnodes, NULL, pcy))
547
549
  return 1;
548
-
550
+ }
549
551
  if (!sk_X509_POLICY_NODE_push(*pnodes, pcy))
550
552
  return 0;
551
553
 
@@ -66,6 +66,9 @@
66
66
  #include <openssl/obj.h>
67
67
  #include <openssl/x509v3.h>
68
68
 
69
+ #include "internal.h"
70
+
71
+
69
72
  static STACK_OF(CONF_VALUE) *i2v_AUTHORITY_KEYID(X509V3_EXT_METHOD *method,
70
73
  AUTHORITY_KEYID *akeyid,
71
74
  STACK_OF(CONF_VALUE)
@@ -92,14 +95,14 @@ static STACK_OF(CONF_VALUE) *i2v_AUTHORITY_KEYID(X509V3_EXT_METHOD *method,
92
95
  {
93
96
  char *tmp;
94
97
  if (akeyid->keyid) {
95
- tmp = hex_to_string(akeyid->keyid->data, akeyid->keyid->length);
98
+ tmp = x509v3_bytes_to_hex(akeyid->keyid->data, akeyid->keyid->length);
96
99
  X509V3_add_value("keyid", tmp, &extlist);
97
100
  OPENSSL_free(tmp);
98
101
  }
99
102
  if (akeyid->issuer)
100
103
  extlist = i2v_GENERAL_NAMES(NULL, akeyid->issuer, extlist);
101
104
  if (akeyid->serial) {
102
- tmp = hex_to_string(akeyid->serial->data, akeyid->serial->length);
105
+ tmp = x509v3_bytes_to_hex(akeyid->serial->data, akeyid->serial->length);
103
106
  X509V3_add_value("serial", tmp, &extlist);
104
107
  OPENSSL_free(tmp);
105
108
  }
@@ -64,6 +64,9 @@
64
64
  #include <openssl/obj.h>
65
65
  #include <openssl/x509v3.h>
66
66
 
67
+ #include "internal.h"
68
+
69
+
67
70
  static GENERAL_NAMES *v2i_subject_alt(X509V3_EXT_METHOD *method,
68
71
  X509V3_CTX *ctx,
69
72
  STACK_OF(CONF_VALUE) *nval);
@@ -207,15 +210,18 @@ int GENERAL_NAME_print(BIO *out, GENERAL_NAME *gen)
207
210
  break;
208
211
 
209
212
  case GEN_EMAIL:
210
- BIO_printf(out, "email:%s", gen->d.ia5->data);
213
+ BIO_printf(out, "email:");
214
+ ASN1_STRING_print(out, gen->d.ia5);
211
215
  break;
212
216
 
213
217
  case GEN_DNS:
214
- BIO_printf(out, "DNS:%s", gen->d.ia5->data);
218
+ BIO_printf(out, "DNS:");
219
+ ASN1_STRING_print(out, gen->d.ia5);
215
220
  break;
216
221
 
217
222
  case GEN_URI:
218
- BIO_printf(out, "URI:%s", gen->d.ia5->data);
223
+ BIO_printf(out, "URI:");
224
+ ASN1_STRING_print(out, gen->d.ia5);
219
225
  break;
220
226
 
221
227
  case GEN_DIRNAME:
@@ -261,7 +267,7 @@ static GENERAL_NAMES *v2i_issuer_alt(X509V3_EXT_METHOD *method,
261
267
  }
262
268
  for (i = 0; i < sk_CONF_VALUE_num(nval); i++) {
263
269
  cnf = sk_CONF_VALUE_value(nval, i);
264
- if (!name_cmp(cnf->name, "issuer") && cnf->value &&
270
+ if (!x509v3_name_cmp(cnf->name, "issuer") && cnf->value &&
265
271
  !strcmp(cnf->value, "copy")) {
266
272
  if (!copy_issuer(ctx, gens))
267
273
  goto err;
@@ -331,11 +337,11 @@ static GENERAL_NAMES *v2i_subject_alt(X509V3_EXT_METHOD *method,
331
337
  }
332
338
  for (i = 0; i < sk_CONF_VALUE_num(nval); i++) {
333
339
  cnf = sk_CONF_VALUE_value(nval, i);
334
- if (!name_cmp(cnf->name, "email") && cnf->value &&
340
+ if (!x509v3_name_cmp(cnf->name, "email") && cnf->value &&
335
341
  !strcmp(cnf->value, "copy")) {
336
342
  if (!copy_email(ctx, gens, 0))
337
343
  goto err;
338
- } else if (!name_cmp(cnf->name, "email") && cnf->value &&
344
+ } else if (!x509v3_name_cmp(cnf->name, "email") && cnf->value &&
339
345
  !strcmp(cnf->value, "move")) {
340
346
  if (!copy_email(ctx, gens, 1))
341
347
  goto err;
@@ -545,19 +551,19 @@ GENERAL_NAME *v2i_GENERAL_NAME_ex(GENERAL_NAME *out,
545
551
  return NULL;
546
552
  }
547
553
 
548
- if (!name_cmp(name, "email"))
554
+ if (!x509v3_name_cmp(name, "email"))
549
555
  type = GEN_EMAIL;
550
- else if (!name_cmp(name, "URI"))
556
+ else if (!x509v3_name_cmp(name, "URI"))
551
557
  type = GEN_URI;
552
- else if (!name_cmp(name, "DNS"))
558
+ else if (!x509v3_name_cmp(name, "DNS"))
553
559
  type = GEN_DNS;
554
- else if (!name_cmp(name, "RID"))
560
+ else if (!x509v3_name_cmp(name, "RID"))
555
561
  type = GEN_RID;
556
- else if (!name_cmp(name, "IP"))
562
+ else if (!x509v3_name_cmp(name, "IP"))
557
563
  type = GEN_IPADD;
558
- else if (!name_cmp(name, "dirName"))
564
+ else if (!x509v3_name_cmp(name, "dirName"))
559
565
  type = GEN_DIRNAME;
560
- else if (!name_cmp(name, "otherName"))
566
+ else if (!x509v3_name_cmp(name, "otherName"))
561
567
  type = GEN_OTHERNAME;
562
568
  else {
563
569
  OPENSSL_PUT_ERROR(X509V3, X509V3_R_UNSUPPORTED_OPTION);
@@ -69,6 +69,7 @@
69
69
  #include <openssl/x509v3.h>
70
70
 
71
71
  #include "../internal.h"
72
+ #include "internal.h"
72
73
 
73
74
  static int v3_check_critical(char **value);
74
75
  static int v3_check_generic(char **value);
@@ -278,7 +279,7 @@ static X509_EXTENSION *v3_generic_extension(const char *ext, char *value,
278
279
  }
279
280
 
280
281
  if (gen_type == 1)
281
- ext_der = string_to_hex(value, &ext_len);
282
+ ext_der = x509v3_hex_to_bytes(value, &ext_len);
282
283
  else if (gen_type == 2)
283
284
  ext_der = generic_asn1(value, ctx, &ext_len);
284
285
 
@@ -69,6 +69,7 @@
69
69
  #include <openssl/stack.h>
70
70
  #include <openssl/x509v3.h>
71
71
 
72
+ #include "internal.h"
72
73
  #include "pcy_int.h"
73
74
 
74
75
  /* Certificate policies extension support: this one is a bit complex... */
@@ -231,7 +232,7 @@ static POLICYINFO *policy_section(X509V3_CTX *ctx,
231
232
  }
232
233
  pol->policyid = pobj;
233
234
 
234
- } else if (!name_cmp(cnf->name, "CPS")) {
235
+ } else if (!x509v3_name_cmp(cnf->name, "CPS")) {
235
236
  if (!pol->qualifiers)
236
237
  pol->qualifiers = sk_POLICYQUALINFO_new_null();
237
238
  if (!(qual = POLICYQUALINFO_new()))
@@ -251,7 +252,7 @@ static POLICYINFO *policy_section(X509V3_CTX *ctx,
251
252
  if (!ASN1_STRING_set(qual->d.cpsuri, cnf->value,
252
253
  strlen(cnf->value)))
253
254
  goto merr;
254
- } else if (!name_cmp(cnf->name, "userNotice")) {
255
+ } else if (!x509v3_name_cmp(cnf->name, "userNotice")) {
255
256
  STACK_OF(CONF_VALUE) *unot;
256
257
  if (*cnf->value != '@') {
257
258
  OPENSSL_PUT_ERROR(X509V3, X509V3_R_EXPECTED_A_SECTION_NAME);
@@ -100,12 +100,7 @@ ASN1_ITEM_TEMPLATE_END(GENERAL_NAMES)
100
100
 
101
101
  IMPLEMENT_ASN1_FUNCTIONS(GENERAL_NAMES)
102
102
 
103
- GENERAL_NAME *GENERAL_NAME_dup(GENERAL_NAME *a)
104
- {
105
- return (GENERAL_NAME *)ASN1_dup((i2d_of_void *)i2d_GENERAL_NAME,
106
- (d2i_of_void *)d2i_GENERAL_NAME,
107
- (char *)a);
108
- }
103
+ IMPLEMENT_ASN1_DUP_FUNCTION(GENERAL_NAME)
109
104
 
110
105
  /* Returns 0 if they are equal, != 0 otherwise. */
111
106
  int GENERAL_NAME_cmp(GENERAL_NAME *a, GENERAL_NAME *b)
@@ -116,6 +116,7 @@ const X509V3_EXT_METHOD *X509V3_EXT_get_nid(int nid)
116
116
  if (!ext_list)
117
117
  return NULL;
118
118
 
119
+ sk_X509V3_EXT_METHOD_sort(ext_list);
119
120
  if (!sk_X509V3_EXT_METHOD_find(ext_list, &idx, &tmp))
120
121
  return NULL;
121
122
  return sk_X509V3_EXT_METHOD_value(ext_list, idx);
@@ -0,0 +1,68 @@
1
+ /*
2
+ * Copyright 2000-2016 The OpenSSL Project Authors. All Rights Reserved.
3
+ *
4
+ * Licensed under the OpenSSL license (the "License"). You may not use
5
+ * this file except in compliance with the License. You can obtain a copy
6
+ * in the file LICENSE in the source distribution or at
7
+ * https://www.openssl.org/source/license.html
8
+ */
9
+
10
+ #include <openssl/x509v3.h>
11
+
12
+ #include <openssl/asn1.h>
13
+ #include <openssl/bio.h>
14
+ #include <openssl/nid.h>
15
+
16
+ /*
17
+ * OCSP extensions and a couple of CRL entry extensions
18
+ */
19
+
20
+ static int i2r_ocsp_acutoff(const X509V3_EXT_METHOD *method, void *nonce,
21
+ BIO *out, int indent);
22
+
23
+ static int i2r_ocsp_nocheck(const X509V3_EXT_METHOD *method,
24
+ void *nocheck, BIO *out, int indent);
25
+ static void *s2i_ocsp_nocheck(const X509V3_EXT_METHOD *method,
26
+ X509V3_CTX *ctx, const char *str);
27
+
28
+ const X509V3_EXT_METHOD v3_crl_invdate = {
29
+ NID_invalidity_date, 0, ASN1_ITEM_ref(ASN1_GENERALIZEDTIME),
30
+ 0, 0, 0, 0,
31
+ 0, 0,
32
+ 0, 0,
33
+ i2r_ocsp_acutoff, 0,
34
+ NULL
35
+ };
36
+
37
+ const X509V3_EXT_METHOD v3_ocsp_nocheck = {
38
+ NID_id_pkix_OCSP_noCheck, 0, ASN1_ITEM_ref(ASN1_NULL),
39
+ 0, 0, 0, 0,
40
+ 0, s2i_ocsp_nocheck,
41
+ 0, 0,
42
+ i2r_ocsp_nocheck, 0,
43
+ NULL
44
+ };
45
+
46
+ static int i2r_ocsp_acutoff(const X509V3_EXT_METHOD *method, void *cutoff,
47
+ BIO *bp, int ind)
48
+ {
49
+ if (BIO_printf(bp, "%*s", ind, "") <= 0)
50
+ return 0;
51
+ if (!ASN1_GENERALIZEDTIME_print(bp, cutoff))
52
+ return 0;
53
+ return 1;
54
+ }
55
+
56
+ /* Nocheck is just a single NULL. Don't print anything and always set it */
57
+
58
+ static int i2r_ocsp_nocheck(const X509V3_EXT_METHOD *method, void *nocheck,
59
+ BIO *out, int indent)
60
+ {
61
+ return 1;
62
+ }
63
+
64
+ static void *s2i_ocsp_nocheck(const X509V3_EXT_METHOD *method,
65
+ X509V3_CTX *ctx, const char *str)
66
+ {
67
+ return ASN1_NULL_new();
68
+ }
@@ -44,6 +44,7 @@
44
44
  #include <openssl/x509v3.h>
45
45
 
46
46
  #include "../internal.h"
47
+ #include "internal.h"
47
48
 
48
49
 
49
50
  static int i2r_pci(X509V3_EXT_METHOD *method, PROXY_CERT_INFO_EXTENSION *ext,
@@ -123,7 +124,7 @@ static int process_pci_value(CONF_VALUE *val,
123
124
  }
124
125
  if (strncmp(val->value, "hex:", 4) == 0) {
125
126
  unsigned char *tmp_data2 =
126
- string_to_hex(val->value + 4, &val_len);
127
+ x509v3_hex_to_bytes(val->value + 4, &val_len);
127
128
 
128
129
  if (!tmp_data2) {
129
130
  OPENSSL_PUT_ERROR(X509V3, X509V3_R_ILLEGAL_HEX_DIGIT);
@@ -80,7 +80,6 @@
80
80
 
81
81
  static void x509v3_cache_extensions(X509 *x);
82
82
 
83
- static int check_ssl_ca(const X509 *x);
84
83
  static int check_purpose_ssl_client(const X509_PURPOSE *xp, const X509 *x,
85
84
  int ca);
86
85
  static int check_purpose_ssl_server(const X509_PURPOSE *xp, const X509 *x,
@@ -205,6 +204,7 @@ int X509_PURPOSE_get_by_id(int purpose)
205
204
  if (!xptable)
206
205
  return -1;
207
206
 
207
+ sk_X509_PURPOSE_sort(xptable);
208
208
  if (!sk_X509_PURPOSE_find(xptable, &idx, &tmp))
209
209
  return -1;
210
210
  return idx + X509_PURPOSE_COUNT;
@@ -562,39 +562,20 @@ static void x509v3_cache_extensions(X509 *x)
562
562
  CRYPTO_MUTEX_unlock_write(&x->lock);
563
563
  }
564
564
 
565
- /*
566
- * CA checks common to all purposes return codes: 0 not a CA 1 is a CA 2
567
- * basicConstraints absent so "maybe" a CA 3 basicConstraints absent but self
568
- * signed V1. 4 basicConstraints absent but keyUsage present and keyCertSign
569
- * asserted.
570
- */
571
-
565
+ /* check_ca returns one if |x| should be considered a CA certificate and zero
566
+ * otherwise. */
572
567
  static int check_ca(const X509 *x)
573
568
  {
574
569
  /* keyUsage if present should allow cert signing */
575
570
  if (ku_reject(x, KU_KEY_CERT_SIGN))
576
571
  return 0;
577
- if (x->ex_flags & EXFLAG_BCONS) {
578
- if (x->ex_flags & EXFLAG_CA)
579
- return 1;
580
- /* If basicConstraints says not a CA then say so */
581
- else
582
- return 0;
583
- } else {
584
- /* we support V1 roots for... uh, I don't really know why. */
585
- if ((x->ex_flags & V1_ROOT) == V1_ROOT)
586
- return 3;
587
- /*
588
- * If key usage present it must have certSign so tolerate it
589
- */
590
- else if (x->ex_flags & EXFLAG_KUSAGE)
591
- return 4;
592
- /* Older certificates could have Netscape-specific CA types */
593
- else if (x->ex_flags & EXFLAG_NSCERT && x->ex_nscert & NS_ANY_CA)
594
- return 5;
595
- /* can this still be regarded a CA certificate? I doubt it */
596
- return 0;
572
+ /* Version 1 certificates are considered CAs and don't have extensions. */
573
+ if ((x->ex_flags & V1_ROOT) == V1_ROOT) {
574
+ return 1;
597
575
  }
576
+ /* Otherwise, it's only a CA if basicConstraints says so. */
577
+ return ((x->ex_flags & EXFLAG_BCONS) &&
578
+ (x->ex_flags & EXFLAG_CA));
598
579
  }
599
580
 
600
581
  int X509_check_ca(X509 *x)
@@ -603,27 +584,13 @@ int X509_check_ca(X509 *x)
603
584
  return check_ca(x);
604
585
  }
605
586
 
606
- /* Check SSL CA: common checks for SSL client and server */
607
- static int check_ssl_ca(const X509 *x)
608
- {
609
- int ca_ret;
610
- ca_ret = check_ca(x);
611
- if (!ca_ret)
612
- return 0;
613
- /* check nsCertType if present */
614
- if (ca_ret != 5 || x->ex_nscert & NS_SSL_CA)
615
- return ca_ret;
616
- else
617
- return 0;
618
- }
619
-
620
587
  static int check_purpose_ssl_client(const X509_PURPOSE *xp, const X509 *x,
621
588
  int ca)
622
589
  {
623
590
  if (xku_reject(x, XKU_SSL_CLIENT))
624
591
  return 0;
625
592
  if (ca)
626
- return check_ssl_ca(x);
593
+ return check_ca(x);
627
594
  /* We need to do digital signatures or key agreement */
628
595
  if (ku_reject(x, KU_DIGITAL_SIGNATURE | KU_KEY_AGREEMENT))
629
596
  return 0;
@@ -644,10 +611,10 @@ static int check_purpose_ssl_client(const X509_PURPOSE *xp, const X509 *x,
644
611
  static int check_purpose_ssl_server(const X509_PURPOSE *xp, const X509 *x,
645
612
  int ca)
646
613
  {
647
- if (xku_reject(x, XKU_SSL_SERVER | XKU_SGC))
614
+ if (xku_reject(x, XKU_SSL_SERVER))
648
615
  return 0;
649
616
  if (ca)
650
- return check_ssl_ca(x);
617
+ return check_ca(x);
651
618
 
652
619
  if (ns_reject(x, NS_SSL_SERVER))
653
620
  return 0;
@@ -671,29 +638,23 @@ static int check_purpose_ns_ssl_server(const X509_PURPOSE *xp, const X509 *x,
671
638
  return ret;
672
639
  }
673
640
 
674
- /* common S/MIME checks */
641
+ /* purpose_smime returns one if |x| is a valid S/MIME leaf (|ca| is zero) or CA
642
+ * (|ca| is one) certificate, and zero otherwise. */
675
643
  static int purpose_smime(const X509 *x, int ca)
676
644
  {
677
645
  if (xku_reject(x, XKU_SMIME))
678
646
  return 0;
679
647
  if (ca) {
680
- int ca_ret;
681
- ca_ret = check_ca(x);
682
- if (!ca_ret)
683
- return 0;
684
648
  /* check nsCertType if present */
685
- if (ca_ret != 5 || x->ex_nscert & NS_SMIME_CA)
686
- return ca_ret;
687
- else
688
- return 0;
649
+ if ((x->ex_flags & EXFLAG_NSCERT) &&
650
+ (x->ex_nscert & NS_SMIME_CA) == 0) {
651
+ return 0;
652
+ }
653
+
654
+ return check_ca(x);
689
655
  }
690
656
  if (x->ex_flags & EXFLAG_NSCERT) {
691
- if (x->ex_nscert & NS_SMIME)
692
- return 1;
693
- /* Workaround for some buggy certificates */
694
- if (x->ex_nscert & NS_SSL_CLIENT)
695
- return 2;
696
- return 0;
657
+ return (x->ex_nscert & NS_SMIME) == NS_SMIME;
697
658
  }
698
659
  return 1;
699
660
  }
@@ -726,11 +687,7 @@ static int check_purpose_crl_sign(const X509_PURPOSE *xp, const X509 *x,
726
687
  int ca)
727
688
  {
728
689
  if (ca) {
729
- int ca_ret;
730
- if ((ca_ret = check_ca(x)) != 2)
731
- return ca_ret;
732
- else
733
- return 0;
690
+ return check_ca(x);
734
691
  }
735
692
  if (ku_reject(x, KU_CRL_SIGN))
736
693
  return 0;
@@ -744,10 +701,6 @@ static int check_purpose_crl_sign(const X509_PURPOSE *xp, const X509 *x,
744
701
 
745
702
  static int ocsp_helper(const X509_PURPOSE *xp, const X509 *x, int ca)
746
703
  {
747
- /*
748
- * Must be a valid CA. Should we really support the "I don't know" value
749
- * (2)?
750
- */
751
704
  if (ca)
752
705
  return check_ca(x);
753
706
  /* leaf certificate is checked in OCSP_verify() */
@@ -864,3 +817,28 @@ int X509_check_akid(X509 *issuer, AUTHORITY_KEYID *akid)
864
817
  }
865
818
  return X509_V_OK;
866
819
  }
820
+
821
+ uint32_t X509_get_extension_flags(X509 *x)
822
+ {
823
+ /* Call for side-effect of computing hash and caching extensions */
824
+ X509_check_purpose(x, -1, -1);
825
+ return x->ex_flags;
826
+ }
827
+
828
+ uint32_t X509_get_key_usage(X509 *x)
829
+ {
830
+ /* Call for side-effect of computing hash and caching extensions */
831
+ X509_check_purpose(x, -1, -1);
832
+ if (x->ex_flags & EXFLAG_KUSAGE)
833
+ return x->ex_kusage;
834
+ return UINT32_MAX;
835
+ }
836
+
837
+ uint32_t X509_get_extended_key_usage(X509 *x)
838
+ {
839
+ /* Call for side-effect of computing hash and caching extensions */
840
+ X509_check_purpose(x, -1, -1);
841
+ if (x->ex_flags & EXFLAG_XKUSAGE)
842
+ return x->ex_xkusage;
843
+ return UINT32_MAX;
844
+ }