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
@@ -48,6 +48,7 @@
48
48
 
49
49
  #include <openssl/aes.h>
50
50
 
51
+ #include <assert.h>
51
52
  #include <limits.h>
52
53
  #include <string.h>
53
54
 
@@ -65,9 +66,10 @@ static const unsigned kBound = 6;
65
66
 
66
67
  int AES_wrap_key(const AES_KEY *key, const uint8_t *iv, uint8_t *out,
67
68
  const uint8_t *in, size_t in_len) {
68
- // See RFC 3394, section 2.2.1.
69
+ // See RFC 3394, section 2.2.1. Additionally, note that section 2 requires the
70
+ // plaintext be at least two 8-byte blocks.
69
71
 
70
- if (in_len > INT_MAX - 8 || in_len < 8 || in_len % 8 != 0) {
72
+ if (in_len > INT_MAX - 8 || in_len < 16 || in_len % 8 != 0) {
71
73
  return -1;
72
74
  }
73
75
 
@@ -99,16 +101,17 @@ int AES_wrap_key(const AES_KEY *key, const uint8_t *iv, uint8_t *out,
99
101
  return (int)in_len + 8;
100
102
  }
101
103
 
102
- int AES_unwrap_key(const AES_KEY *key, const uint8_t *iv, uint8_t *out,
103
- const uint8_t *in, size_t in_len) {
104
- // See RFC 3394, section 2.2.2.
105
-
106
- if (in_len > INT_MAX || in_len < 16 || in_len % 8 != 0) {
107
- return -1;
108
- }
109
-
110
- if (iv == NULL) {
111
- iv = kDefaultIV;
104
+ // aes_unwrap_key_inner performs steps one and two from
105
+ // https://tools.ietf.org/html/rfc3394#section-2.2.2
106
+ static int aes_unwrap_key_inner(const AES_KEY *key, uint8_t *out,
107
+ uint8_t out_iv[8], const uint8_t *in,
108
+ size_t in_len) {
109
+ // See RFC 3394, section 2.2.2. Additionally, note that section 2 requires the
110
+ // plaintext be at least two 8-byte blocks, so the ciphertext must be at least
111
+ // three blocks.
112
+
113
+ if (in_len > INT_MAX || in_len < 24 || in_len % 8 != 0) {
114
+ return 0;
112
115
  }
113
116
 
114
117
  uint8_t A[AES_BLOCK_SIZE];
@@ -130,9 +133,104 @@ int AES_unwrap_key(const AES_KEY *key, const uint8_t *iv, uint8_t *out,
130
133
  }
131
134
  }
132
135
 
133
- if (CRYPTO_memcmp(A, iv, 8) != 0) {
136
+ memcpy(out_iv, A, 8);
137
+ return 1;
138
+ }
139
+
140
+ int AES_unwrap_key(const AES_KEY *key, const uint8_t *iv, uint8_t *out,
141
+ const uint8_t *in, size_t in_len) {
142
+ uint8_t calculated_iv[8];
143
+ if (!aes_unwrap_key_inner(key, out, calculated_iv, in, in_len)) {
144
+ return -1;
145
+ }
146
+
147
+ if (iv == NULL) {
148
+ iv = kDefaultIV;
149
+ }
150
+ if (CRYPTO_memcmp(calculated_iv, iv, 8) != 0) {
134
151
  return -1;
135
152
  }
136
153
 
137
154
  return (int)in_len - 8;
138
155
  }
156
+
157
+ // kPaddingConstant is used in Key Wrap with Padding. See
158
+ // https://tools.ietf.org/html/rfc5649#section-3
159
+ static const uint8_t kPaddingConstant[4] = {0xa6, 0x59, 0x59, 0xa6};
160
+
161
+ int AES_wrap_key_padded(const AES_KEY *key, uint8_t *out, size_t *out_len,
162
+ size_t max_out, const uint8_t *in, size_t in_len) {
163
+ // See https://tools.ietf.org/html/rfc5649#section-4.1
164
+ const uint32_t in_len32_be = CRYPTO_bswap4(in_len);
165
+ const uint64_t in_len64 = in_len;
166
+ const size_t padded_len = (in_len + 7) & ~7;
167
+
168
+ *out_len = 0;
169
+ if (in_len == 0 || in_len64 > 0xffffffffu || in_len + 7 < in_len ||
170
+ padded_len + 8 < padded_len || max_out < padded_len + 8) {
171
+ return 0;
172
+ }
173
+
174
+ uint8_t block[AES_BLOCK_SIZE];
175
+ memcpy(block, kPaddingConstant, sizeof(kPaddingConstant));
176
+ memcpy(block + 4, &in_len32_be, sizeof(in_len32_be));
177
+
178
+ if (in_len <= 8) {
179
+ memset(block + 8, 0, 8);
180
+ memcpy(block + 8, in, in_len);
181
+ AES_encrypt(block, out, key);
182
+ *out_len = AES_BLOCK_SIZE;
183
+ return 1;
184
+ }
185
+
186
+ uint8_t *padded_in = OPENSSL_malloc(padded_len);
187
+ if (padded_in == NULL) {
188
+ return 0;
189
+ }
190
+ assert(padded_len >= 8);
191
+ memset(padded_in + padded_len - 8, 0, 8);
192
+ memcpy(padded_in, in, in_len);
193
+ const int ret = AES_wrap_key(key, block, out, padded_in, padded_len);
194
+ OPENSSL_free(padded_in);
195
+ if (ret < 0) {
196
+ return 0;
197
+ }
198
+ *out_len = ret;
199
+ return 1;
200
+ }
201
+
202
+ int AES_unwrap_key_padded(const AES_KEY *key, uint8_t *out, size_t *out_len,
203
+ size_t max_out, const uint8_t *in, size_t in_len) {
204
+ *out_len = 0;
205
+ if (in_len < AES_BLOCK_SIZE || max_out < in_len - 8) {
206
+ return 0;
207
+ }
208
+
209
+ uint8_t iv[8];
210
+ if (in_len == AES_BLOCK_SIZE) {
211
+ uint8_t block[AES_BLOCK_SIZE];
212
+ AES_decrypt(in, block, key);
213
+ memcpy(iv, block, sizeof(iv));
214
+ memcpy(out, block + 8, 8);
215
+ } else if (!aes_unwrap_key_inner(key, out, iv, in, in_len)) {
216
+ return 0;
217
+ }
218
+ assert(in_len % 8 == 0);
219
+
220
+ crypto_word_t ok = constant_time_eq_int(
221
+ CRYPTO_memcmp(iv, kPaddingConstant, sizeof(kPaddingConstant)), 0);
222
+
223
+ uint32_t claimed_len32;
224
+ memcpy(&claimed_len32, iv + 4, sizeof(claimed_len32));
225
+ const size_t claimed_len = CRYPTO_bswap4(claimed_len32);
226
+ ok &= ~constant_time_is_zero_w(claimed_len);
227
+ ok &= constant_time_eq_w((claimed_len - 1) >> 3, (in_len - 9) >> 3);
228
+
229
+ // Check that padding bytes are all zero.
230
+ for (size_t i = in_len - 15; i < in_len - 8; i++) {
231
+ ok &= constant_time_is_zero_w(constant_time_ge_8(i, claimed_len) & out[i]);
232
+ }
233
+
234
+ *out_len = constant_time_select_w(ok, claimed_len, 0);
235
+ return ok & 1;
236
+ }
@@ -6,7 +6,7 @@
6
6
  * are met:
7
7
  *
8
8
  * 1. Redistributions of source code must retain the above copyright
9
- * notice, this list of conditions and the following disclaimer.
9
+ * notice, this list of conditions and the following disclaimer.
10
10
  *
11
11
  * 2. Redistributions in binary form must reproduce the above copyright
12
12
  * notice, this list of conditions and the following disclaimer in
@@ -50,14 +50,14 @@
50
50
 
51
51
  #include <assert.h>
52
52
 
53
+ #include "../aes/internal.h"
53
54
  #include "../modes/internal.h"
54
55
 
55
56
 
56
57
  void AES_ctr128_encrypt(const uint8_t *in, uint8_t *out, size_t len,
57
58
  const AES_KEY *key, uint8_t ivec[AES_BLOCK_SIZE],
58
59
  uint8_t ecount_buf[AES_BLOCK_SIZE], unsigned int *num) {
59
- CRYPTO_ctr128_encrypt(in, out, len, key, ivec, ecount_buf, num,
60
- (block128_f)AES_encrypt);
60
+ CRYPTO_ctr128_encrypt(in, out, len, key, ivec, ecount_buf, num, AES_encrypt);
61
61
  }
62
62
 
63
63
  void AES_ecb_encrypt(const uint8_t *in, uint8_t *out, const AES_KEY *key,
@@ -72,33 +72,30 @@ void AES_ecb_encrypt(const uint8_t *in, uint8_t *out, const AES_KEY *key,
72
72
  }
73
73
  }
74
74
 
75
- #if defined(OPENSSL_NO_ASM) || \
76
- (!defined(OPENSSL_X86_64) && !defined(OPENSSL_X86))
77
75
  void AES_cbc_encrypt(const uint8_t *in, uint8_t *out, size_t len,
78
76
  const AES_KEY *key, uint8_t *ivec, const int enc) {
77
+ if (hwaes_capable()) {
78
+ aes_hw_cbc_encrypt(in, out, len, key, ivec, enc);
79
+ return;
80
+ }
79
81
 
82
+ #if defined(AES_NOHW_CBC)
83
+ if (!vpaes_capable()) {
84
+ aes_nohw_cbc_encrypt(in, out, len, key, ivec, enc);
85
+ return;
86
+ }
87
+ #endif
80
88
  if (enc) {
81
- CRYPTO_cbc128_encrypt(in, out, len, key, ivec, (block128_f)AES_encrypt);
89
+ CRYPTO_cbc128_encrypt(in, out, len, key, ivec, AES_encrypt);
82
90
  } else {
83
- CRYPTO_cbc128_decrypt(in, out, len, key, ivec, (block128_f)AES_decrypt);
91
+ CRYPTO_cbc128_decrypt(in, out, len, key, ivec, AES_decrypt);
84
92
  }
85
93
  }
86
- #else
87
-
88
- void asm_AES_cbc_encrypt(const uint8_t *in, uint8_t *out, size_t len,
89
- const AES_KEY *key, uint8_t *ivec, const int enc);
90
- void AES_cbc_encrypt(const uint8_t *in, uint8_t *out, size_t len,
91
- const AES_KEY *key, uint8_t *ivec, const int enc) {
92
- asm_AES_cbc_encrypt(in, out, len, key, ivec, enc);
93
- }
94
-
95
- #endif // OPENSSL_NO_ASM || (!OPENSSL_X86_64 && !OPENSSL_X86)
96
94
 
97
95
  void AES_ofb128_encrypt(const uint8_t *in, uint8_t *out, size_t length,
98
96
  const AES_KEY *key, uint8_t *ivec, int *num) {
99
97
  unsigned num_u = (unsigned)(*num);
100
- CRYPTO_ofb128_encrypt(in, out, length, key, ivec, &num_u,
101
- (block128_f)AES_encrypt);
98
+ CRYPTO_ofb128_encrypt(in, out, length, key, ivec, &num_u, AES_encrypt);
102
99
  *num = (int)num_u;
103
100
  }
104
101
 
@@ -106,7 +103,6 @@ void AES_cfb128_encrypt(const uint8_t *in, uint8_t *out, size_t length,
106
103
  const AES_KEY *key, uint8_t *ivec, int *num,
107
104
  int enc) {
108
105
  unsigned num_u = (unsigned)(*num);
109
- CRYPTO_cfb128_encrypt(in, out, length, key, ivec, &num_u, enc,
110
- (block128_f)AES_encrypt);
106
+ CRYPTO_cfb128_encrypt(in, out, length, key, ivec, &num_u, enc, AES_encrypt);
111
107
  *num = (int)num_u;
112
108
  }
@@ -19,6 +19,10 @@
19
19
  #include <openssl/crypto.h>
20
20
 
21
21
  #include <stdlib.h>
22
+ #if defined(BORINGSSL_FIPS)
23
+ #include <sys/mman.h>
24
+ #include <unistd.h>
25
+ #endif
22
26
 
23
27
  #include <openssl/digest.h>
24
28
  #include <openssl/hmac.h>
@@ -36,8 +40,10 @@
36
40
  #include "bn/cmp.c"
37
41
  #include "bn/ctx.c"
38
42
  #include "bn/div.c"
43
+ #include "bn/div_extra.c"
39
44
  #include "bn/exponentiation.c"
40
45
  #include "bn/gcd.c"
46
+ #include "bn/gcd_extra.c"
41
47
  #include "bn/generic.c"
42
48
  #include "bn/jacobi.c"
43
49
  #include "bn/montgomery.c"
@@ -55,22 +61,25 @@
55
61
  #include "des/des.c"
56
62
  #include "digest/digest.c"
57
63
  #include "digest/digests.c"
64
+ #include "ecdh/ecdh.c"
58
65
  #include "ecdsa/ecdsa.c"
59
66
  #include "ec/ec.c"
60
67
  #include "ec/ec_key.c"
61
68
  #include "ec/ec_montgomery.c"
69
+ #include "ec/felem.c"
62
70
  #include "ec/oct.c"
63
71
  #include "ec/p224-64.c"
64
72
  #include "../../third_party/fiat/p256.c"
65
73
  #include "ec/p256-x86_64.c"
74
+ #include "ec/scalar.c"
66
75
  #include "ec/simple.c"
76
+ #include "ec/simple_mul.c"
67
77
  #include "ec/util.c"
68
78
  #include "ec/wnaf.c"
69
79
  #include "hmac/hmac.c"
70
80
  #include "md4/md4.c"
71
81
  #include "md5/md5.c"
72
82
  #include "modes/cbc.c"
73
- #include "modes/ccm.c"
74
83
  #include "modes/cfb.c"
75
84
  #include "modes/ctr.c"
76
85
  #include "modes/gcm.c"
@@ -94,13 +103,61 @@
94
103
  #if defined(BORINGSSL_FIPS)
95
104
 
96
105
  #if !defined(OPENSSL_ASAN)
97
- // These symbols are filled in by delocate.go. They point to the start and end
98
- // of the module, and the location of the integrity hash, respectively.
106
+
107
+ // These symbols are filled in by delocate.go (in static builds) or a linker
108
+ // script (in shared builds). They point to the start and end of the module, and
109
+ // the location of the integrity hash, respectively.
99
110
  extern const uint8_t BORINGSSL_bcm_text_start[];
100
111
  extern const uint8_t BORINGSSL_bcm_text_end[];
101
112
  extern const uint8_t BORINGSSL_bcm_text_hash[];
113
+ #if defined(BORINGSSL_SHARED_LIBRARY)
114
+ extern const uint8_t BORINGSSL_bcm_rodata_start[];
115
+ extern const uint8_t BORINGSSL_bcm_rodata_end[];
102
116
  #endif
103
117
 
118
+ // assert_within is used to sanity check that certain symbols are within the
119
+ // bounds of the integrity check. It checks that start <= symbol < end and
120
+ // aborts otherwise.
121
+ static void assert_within(const void *start, const void *symbol,
122
+ const void *end) {
123
+ const uintptr_t start_val = (uintptr_t) start;
124
+ const uintptr_t symbol_val = (uintptr_t) symbol;
125
+ const uintptr_t end_val = (uintptr_t) end;
126
+
127
+ if (start_val <= symbol_val && symbol_val < end_val) {
128
+ return;
129
+ }
130
+
131
+ fprintf(
132
+ stderr,
133
+ "FIPS module doesn't span expected symbol. Expected %p <= %p < %p\n",
134
+ start, symbol, end);
135
+ BORINGSSL_FIPS_abort();
136
+ }
137
+
138
+ #if defined(OPENSSL_ANDROID) && defined(OPENSSL_AARCH64)
139
+ static void BORINGSSL_maybe_set_module_text_permissions(int permission) {
140
+ // Android may be compiled in execute-only-memory mode, in which case the
141
+ // .text segment cannot be read. That conflicts with the need for a FIPS
142
+ // module to hash its own contents, therefore |mprotect| is used to make
143
+ // the module's .text readable for the duration of the hashing process. In
144
+ // other build configurations this is a no-op.
145
+ const uintptr_t page_size = getpagesize();
146
+ const uintptr_t page_start =
147
+ ((uintptr_t)BORINGSSL_bcm_text_start) & ~(page_size - 1);
148
+
149
+ if (mprotect((void *)page_start,
150
+ ((uintptr_t)BORINGSSL_bcm_text_end) - page_start,
151
+ permission) != 0) {
152
+ perror("BoringSSL: mprotect");
153
+ }
154
+ }
155
+ #else
156
+ static void BORINGSSL_maybe_set_module_text_permissions(int permission) {}
157
+ #endif // !ANDROID
158
+
159
+ #endif // !ASAN
160
+
104
161
  static void __attribute__((constructor))
105
162
  BORINGSSL_bcm_power_on_self_test(void) {
106
163
  CRYPTO_library_init();
@@ -111,26 +168,81 @@ BORINGSSL_bcm_power_on_self_test(void) {
111
168
  const uint8_t *const start = BORINGSSL_bcm_text_start;
112
169
  const uint8_t *const end = BORINGSSL_bcm_text_end;
113
170
 
114
- static const uint8_t kHMACKey[64] = {0};
171
+ assert_within(start, AES_encrypt, end);
172
+ assert_within(start, RSA_sign, end);
173
+ assert_within(start, RAND_bytes, end);
174
+ assert_within(start, EC_GROUP_cmp, end);
175
+ assert_within(start, SHA256_Update, end);
176
+ assert_within(start, ECDSA_do_verify, end);
177
+ assert_within(start, EVP_AEAD_CTX_seal, end);
178
+
179
+ #if defined(BORINGSSL_SHARED_LIBRARY)
180
+ const uint8_t *const rodata_start = BORINGSSL_bcm_rodata_start;
181
+ const uint8_t *const rodata_end = BORINGSSL_bcm_rodata_end;
182
+ #else
183
+ // In the static build, read-only data is placed within the .text segment.
184
+ const uint8_t *const rodata_start = BORINGSSL_bcm_text_start;
185
+ const uint8_t *const rodata_end = BORINGSSL_bcm_text_end;
186
+ #endif
187
+
188
+ assert_within(rodata_start, kPrimes, rodata_end);
189
+ assert_within(rodata_start, des_skb, rodata_end);
190
+ assert_within(rodata_start, kP256Params, rodata_end);
191
+ assert_within(rodata_start, kPKCS1SigPrefixes, rodata_end);
192
+
193
+ #if defined(OPENSSL_ANDROID)
194
+ uint8_t result[SHA256_DIGEST_LENGTH];
195
+ const EVP_MD *const kHashFunction = EVP_sha256();
196
+ #else
115
197
  uint8_t result[SHA512_DIGEST_LENGTH];
198
+ const EVP_MD *const kHashFunction = EVP_sha512();
199
+ #endif
116
200
 
201
+ static const uint8_t kHMACKey[64] = {0};
117
202
  unsigned result_len;
118
- if (!HMAC(EVP_sha512(), kHMACKey, sizeof(kHMACKey), start, end - start,
119
- result, &result_len) ||
203
+ HMAC_CTX hmac_ctx;
204
+ HMAC_CTX_init(&hmac_ctx);
205
+ if (!HMAC_Init_ex(&hmac_ctx, kHMACKey, sizeof(kHMACKey), kHashFunction,
206
+ NULL /* no ENGINE */)) {
207
+ fprintf(stderr, "HMAC_Init_ex failed.\n");
208
+ goto err;
209
+ }
210
+
211
+ BORINGSSL_maybe_set_module_text_permissions(PROT_READ | PROT_EXEC);
212
+ #if defined(BORINGSSL_SHARED_LIBRARY)
213
+ uint64_t length = end - start;
214
+ HMAC_Update(&hmac_ctx, (const uint8_t *) &length, sizeof(length));
215
+ HMAC_Update(&hmac_ctx, start, length);
216
+
217
+ length = rodata_end - rodata_start;
218
+ HMAC_Update(&hmac_ctx, (const uint8_t *) &length, sizeof(length));
219
+ HMAC_Update(&hmac_ctx, rodata_start, length);
220
+ #else
221
+ HMAC_Update(&hmac_ctx, start, end - start);
222
+ #endif
223
+ BORINGSSL_maybe_set_module_text_permissions(PROT_EXEC);
224
+
225
+ if (!HMAC_Final(&hmac_ctx, result, &result_len) ||
120
226
  result_len != sizeof(result)) {
227
+ fprintf(stderr, "HMAC failed.\n");
121
228
  goto err;
122
229
  }
230
+ HMAC_CTX_cleanup(&hmac_ctx);
123
231
 
124
232
  const uint8_t *expected = BORINGSSL_bcm_text_hash;
125
233
 
126
234
  if (!check_test(expected, result, sizeof(result), "FIPS integrity test")) {
127
235
  goto err;
128
236
  }
129
- #endif
130
237
 
238
+ if (!boringssl_fips_self_test(BORINGSSL_bcm_text_hash, sizeof(result))) {
239
+ goto err;
240
+ }
241
+ #else
131
242
  if (!BORINGSSL_self_test()) {
132
243
  goto err;
133
244
  }
245
+ #endif // OPENSSL_ASAN
134
246
 
135
247
  return;
136
248
 
@@ -384,6 +384,23 @@ int bn_expand(BIGNUM *bn, size_t bits) {
384
384
  }
385
385
 
386
386
  int bn_resize_words(BIGNUM *bn, size_t words) {
387
+ #if defined(OPENSSL_PPC64LE)
388
+ // This is a workaround for a miscompilation bug in Clang 7.0.1 on POWER.
389
+ // The unittests catch the miscompilation, if it occurs, and it manifests
390
+ // as a crash in |bn_fits_in_words|.
391
+ //
392
+ // The bug only triggers if building in FIPS mode and with -O3. Clang 8.0.1
393
+ // has the same bug but this workaround is not effective there---I've not
394
+ // been able to find a workaround for 8.0.1.
395
+ //
396
+ // At the time of writing (2019-08-08), Clang git does *not* have this bug
397
+ // and does not need this workaroud. The current git version should go on to
398
+ // be Clang 10 thus, once we can depend on that, this can be removed.
399
+ if (value_barrier_w((size_t)bn->width == words)) {
400
+ return 1;
401
+ }
402
+ #endif
403
+
387
404
  if ((size_t)bn->width <= words) {
388
405
  if (!bn_wexpand(bn, words)) {
389
406
  return 0;
@@ -406,8 +423,8 @@ int bn_resize_words(BIGNUM *bn, size_t words) {
406
423
  void bn_select_words(BN_ULONG *r, BN_ULONG mask, const BN_ULONG *a,
407
424
  const BN_ULONG *b, size_t num) {
408
425
  for (size_t i = 0; i < num; i++) {
409
- OPENSSL_COMPILE_ASSERT(sizeof(BN_ULONG) <= sizeof(crypto_word_t),
410
- crypto_word_t_too_small);
426
+ OPENSSL_STATIC_ASSERT(sizeof(BN_ULONG) <= sizeof(crypto_word_t),
427
+ "crypto_word_t is too small");
411
428
  r[i] = constant_time_select_w(mask, a[i], b[i]);
412
429
  }
413
430
  }