grpc 1.24.0 → 1.25.0.pre1

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of grpc might be problematic. Click here for more details.

Files changed (504) 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/exec_ctx.h +4 -3
  113. data/src/core/lib/iomgr/executor.cc +4 -2
  114. data/src/core/lib/iomgr/executor.h +3 -0
  115. data/src/core/lib/iomgr/executor/mpmcqueue.h +3 -6
  116. data/src/core/lib/iomgr/executor/threadpool.cc +1 -2
  117. data/src/core/lib/iomgr/executor/threadpool.h +7 -11
  118. data/src/core/lib/iomgr/resource_quota.cc +55 -51
  119. data/src/core/lib/iomgr/resource_quota.h +13 -9
  120. data/src/core/lib/iomgr/socket_utils_common_posix.cc +13 -0
  121. data/src/core/lib/iomgr/socket_utils_posix.h +4 -0
  122. data/src/core/lib/iomgr/tcp_client_posix.cc +4 -11
  123. data/src/core/lib/iomgr/tcp_custom.cc +9 -7
  124. data/src/core/lib/iomgr/tcp_posix.cc +20 -16
  125. data/src/core/lib/iomgr/tcp_server.h +1 -4
  126. data/src/core/lib/iomgr/tcp_server_custom.cc +5 -5
  127. data/src/core/lib/iomgr/tcp_server_posix.cc +1 -1
  128. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +2 -11
  129. data/src/core/lib/iomgr/timer_custom.cc +2 -2
  130. data/src/core/lib/iomgr/udp_server.cc +3 -2
  131. data/src/core/lib/iomgr/udp_server.h +6 -12
  132. data/src/core/lib/json/json.h +1 -1
  133. data/src/core/lib/json/json_string.cc +2 -2
  134. data/src/core/lib/profiling/basic_timers.cc +2 -2
  135. data/src/core/lib/security/credentials/alts/alts_credentials.cc +2 -2
  136. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc +1 -1
  137. data/src/core/lib/security/credentials/credentials.h +4 -20
  138. data/src/core/lib/security/credentials/fake/fake_credentials.cc +4 -4
  139. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +1 -3
  140. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +64 -0
  141. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +4 -4
  142. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +9 -7
  143. data/src/core/lib/security/security_connector/load_system_roots_linux.cc +2 -0
  144. data/src/core/lib/security/security_connector/local/local_security_connector.cc +4 -4
  145. data/src/core/lib/security/security_connector/security_connector.cc +1 -0
  146. data/src/core/lib/security/security_connector/security_connector.h +19 -17
  147. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +8 -5
  148. data/src/core/lib/security/security_connector/ssl_utils.cc +2 -2
  149. data/src/core/lib/security/security_connector/ssl_utils.h +1 -1
  150. data/src/core/lib/security/security_connector/tls/spiffe_security_connector.cc +14 -6
  151. data/src/core/lib/security/security_connector/tls/spiffe_security_connector.h +4 -2
  152. data/src/core/lib/security/transport/client_auth_filter.cc +17 -17
  153. data/src/core/lib/security/transport/security_handshaker.cc +29 -13
  154. data/src/core/lib/security/transport/security_handshaker.h +4 -2
  155. data/src/core/lib/security/transport/server_auth_filter.cc +14 -14
  156. data/src/core/lib/slice/slice.cc +2 -10
  157. data/src/core/lib/slice/slice_hash_table.h +4 -6
  158. data/src/core/lib/slice/slice_intern.cc +42 -39
  159. data/src/core/lib/slice/slice_internal.h +3 -3
  160. data/src/core/lib/slice/slice_utils.h +21 -4
  161. data/src/core/lib/slice/slice_weak_hash_table.h +4 -6
  162. data/src/core/lib/surface/call.cc +3 -3
  163. data/src/core/lib/surface/channel.cc +7 -0
  164. data/src/core/lib/surface/completion_queue.cc +12 -11
  165. data/src/core/lib/surface/completion_queue.h +4 -2
  166. data/src/core/lib/surface/init.cc +1 -0
  167. data/src/core/lib/surface/lame_client.cc +33 -18
  168. data/src/core/lib/surface/server.cc +77 -76
  169. data/src/core/lib/surface/version.cc +1 -1
  170. data/src/core/lib/transport/byte_stream.h +3 -7
  171. data/src/core/lib/transport/connectivity_state.cc +112 -98
  172. data/src/core/lib/transport/connectivity_state.h +100 -50
  173. data/src/core/lib/transport/static_metadata.cc +276 -288
  174. data/src/core/lib/transport/static_metadata.h +73 -76
  175. data/src/core/lib/transport/status_conversion.cc +1 -1
  176. data/src/core/lib/transport/status_metadata.cc +1 -1
  177. data/src/core/lib/transport/transport.cc +2 -2
  178. data/src/core/lib/transport/transport.h +12 -4
  179. data/src/core/lib/transport/transport_op_string.cc +14 -11
  180. data/src/core/tsi/alts/frame_protector/alts_unseal_privacy_integrity_crypter.cc +1 -1
  181. data/src/core/tsi/alts/handshaker/alts_shared_resource.cc +1 -1
  182. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +5 -5
  183. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +12 -2
  184. data/src/core/tsi/fake_transport_security.cc +7 -5
  185. data/src/core/tsi/grpc_shadow_boringssl.h +2918 -2627
  186. data/src/core/tsi/local_transport_security.cc +8 -6
  187. data/src/core/tsi/ssl/session_cache/ssl_session.h +1 -3
  188. data/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc +1 -2
  189. data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +7 -5
  190. data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +4 -6
  191. data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +1 -2
  192. data/src/core/tsi/ssl_transport_security.cc +12 -12
  193. data/src/core/tsi/ssl_transport_security.h +2 -2
  194. data/src/core/tsi/transport_security_grpc.cc +7 -0
  195. data/src/core/tsi/transport_security_grpc.h +6 -0
  196. data/src/ruby/ext/grpc/extconf.rb +1 -0
  197. data/src/ruby/ext/grpc/rb_call.c +1 -1
  198. data/src/ruby/ext/grpc/rb_channel.c +1 -1
  199. data/src/ruby/lib/grpc/generic/bidi_call.rb +1 -1
  200. data/src/ruby/lib/grpc/generic/rpc_server.rb +1 -1
  201. data/src/ruby/lib/grpc/version.rb +1 -1
  202. data/src/ruby/spec/google_rpc_status_utils_spec.rb +2 -2
  203. data/third_party/boringssl/crypto/asn1/a_bool.c +18 -5
  204. data/third_party/boringssl/crypto/asn1/a_d2i_fp.c +17 -221
  205. data/third_party/boringssl/crypto/asn1/a_dup.c +0 -24
  206. data/third_party/boringssl/crypto/asn1/a_enum.c +2 -2
  207. data/third_party/boringssl/crypto/asn1/a_i2d_fp.c +10 -72
  208. data/third_party/boringssl/crypto/asn1/a_int.c +12 -71
  209. data/third_party/boringssl/crypto/asn1/a_mbstr.c +110 -216
  210. data/third_party/boringssl/crypto/asn1/a_object.c +16 -5
  211. data/third_party/boringssl/crypto/asn1/a_strnid.c +1 -0
  212. data/third_party/boringssl/crypto/asn1/asn1_lib.c +5 -1
  213. data/third_party/boringssl/crypto/asn1/tasn_enc.c +3 -1
  214. data/third_party/boringssl/crypto/base64/base64.c +2 -2
  215. data/third_party/boringssl/crypto/bio/bio.c +73 -9
  216. data/third_party/boringssl/crypto/bio/connect.c +4 -0
  217. data/third_party/boringssl/crypto/bio/fd.c +4 -0
  218. data/third_party/boringssl/crypto/bio/file.c +5 -2
  219. data/third_party/boringssl/crypto/bio/socket.c +4 -0
  220. data/third_party/boringssl/crypto/bio/socket_helper.c +4 -0
  221. data/third_party/boringssl/crypto/bn_extra/convert.c +11 -7
  222. data/third_party/boringssl/crypto/bytestring/ber.c +8 -4
  223. data/third_party/boringssl/crypto/bytestring/cbb.c +19 -7
  224. data/third_party/boringssl/crypto/bytestring/cbs.c +28 -15
  225. data/third_party/boringssl/crypto/bytestring/internal.h +28 -7
  226. data/third_party/boringssl/crypto/bytestring/unicode.c +155 -0
  227. data/third_party/boringssl/crypto/chacha/chacha.c +36 -19
  228. data/third_party/boringssl/crypto/chacha/internal.h +45 -0
  229. data/third_party/boringssl/crypto/cipher_extra/cipher_extra.c +29 -0
  230. data/third_party/boringssl/crypto/cipher_extra/e_aesccm.c +269 -25
  231. data/third_party/boringssl/crypto/cipher_extra/e_aesctrhmac.c +16 -14
  232. data/third_party/boringssl/crypto/cipher_extra/e_aesgcmsiv.c +54 -38
  233. data/third_party/boringssl/crypto/cipher_extra/e_chacha20poly1305.c +133 -41
  234. data/third_party/boringssl/crypto/cipher_extra/e_tls.c +23 -15
  235. data/third_party/boringssl/crypto/cipher_extra/tls_cbc.c +24 -15
  236. data/third_party/boringssl/crypto/cmac/cmac.c +62 -25
  237. data/third_party/boringssl/crypto/conf/conf.c +7 -0
  238. data/third_party/boringssl/crypto/cpu-arm-linux.c +4 -148
  239. data/third_party/boringssl/crypto/cpu-arm-linux.h +201 -0
  240. data/third_party/boringssl/crypto/cpu-intel.c +45 -51
  241. data/third_party/boringssl/crypto/crypto.c +39 -22
  242. data/third_party/boringssl/crypto/curve25519/spake25519.c +1 -1
  243. data/third_party/boringssl/crypto/dsa/dsa.c +77 -53
  244. data/third_party/boringssl/crypto/ec_extra/ec_asn1.c +20 -8
  245. data/third_party/boringssl/crypto/ec_extra/ec_derive.c +96 -0
  246. data/third_party/boringssl/crypto/{ecdh/ecdh.c → ecdh_extra/ecdh_extra.c} +20 -58
  247. data/third_party/boringssl/crypto/ecdsa_extra/ecdsa_asn1.c +1 -9
  248. data/third_party/boringssl/crypto/engine/engine.c +2 -1
  249. data/third_party/boringssl/crypto/err/err.c +2 -0
  250. data/third_party/boringssl/crypto/err/internal.h +2 -2
  251. data/third_party/boringssl/crypto/evp/evp.c +89 -8
  252. data/third_party/boringssl/crypto/evp/evp_asn1.c +56 -5
  253. data/third_party/boringssl/crypto/evp/evp_ctx.c +52 -14
  254. data/third_party/boringssl/crypto/evp/internal.h +18 -1
  255. data/third_party/boringssl/crypto/evp/p_dsa_asn1.c +5 -0
  256. data/third_party/boringssl/crypto/evp/p_ec.c +51 -3
  257. data/third_party/boringssl/crypto/evp/p_ec_asn1.c +6 -7
  258. data/third_party/boringssl/crypto/evp/p_ed25519.c +36 -3
  259. data/third_party/boringssl/crypto/evp/p_ed25519_asn1.c +76 -45
  260. data/third_party/boringssl/crypto/evp/p_rsa.c +3 -1
  261. data/third_party/boringssl/crypto/evp/p_rsa_asn1.c +5 -0
  262. data/third_party/boringssl/crypto/evp/p_x25519.c +110 -0
  263. data/third_party/boringssl/crypto/evp/p_x25519_asn1.c +249 -0
  264. data/third_party/boringssl/crypto/evp/scrypt.c +6 -2
  265. data/third_party/boringssl/crypto/fipsmodule/aes/aes.c +34 -274
  266. data/third_party/boringssl/crypto/fipsmodule/aes/internal.h +161 -21
  267. data/third_party/boringssl/crypto/fipsmodule/aes/key_wrap.c +111 -13
  268. data/third_party/boringssl/crypto/fipsmodule/aes/mode_wrappers.c +17 -21
  269. data/third_party/boringssl/crypto/fipsmodule/bcm.c +119 -7
  270. data/third_party/boringssl/crypto/fipsmodule/bn/bn.c +19 -2
  271. data/third_party/boringssl/crypto/fipsmodule/bn/cmp.c +2 -2
  272. data/third_party/boringssl/crypto/fipsmodule/bn/ctx.c +93 -160
  273. data/third_party/boringssl/crypto/fipsmodule/bn/div.c +48 -57
  274. data/third_party/boringssl/crypto/fipsmodule/bn/div_extra.c +87 -0
  275. data/third_party/boringssl/crypto/fipsmodule/bn/exponentiation.c +143 -211
  276. data/third_party/boringssl/crypto/fipsmodule/bn/gcd.c +0 -305
  277. data/third_party/boringssl/crypto/fipsmodule/bn/gcd_extra.c +325 -0
  278. data/third_party/boringssl/crypto/fipsmodule/bn/internal.h +168 -50
  279. data/third_party/boringssl/crypto/fipsmodule/bn/montgomery.c +68 -92
  280. data/third_party/boringssl/crypto/fipsmodule/bn/montgomery_inv.c +7 -6
  281. data/third_party/boringssl/crypto/fipsmodule/bn/mul.c +11 -14
  282. data/third_party/boringssl/crypto/fipsmodule/bn/prime.c +358 -443
  283. data/third_party/boringssl/crypto/fipsmodule/bn/random.c +25 -35
  284. data/third_party/boringssl/crypto/fipsmodule/bn/rsaz_exp.c +20 -25
  285. data/third_party/boringssl/crypto/fipsmodule/bn/rsaz_exp.h +76 -5
  286. data/third_party/boringssl/crypto/fipsmodule/bn/shift.c +14 -14
  287. data/third_party/boringssl/crypto/fipsmodule/cipher/cipher.c +7 -2
  288. data/third_party/boringssl/crypto/fipsmodule/cipher/e_aes.c +383 -516
  289. data/third_party/boringssl/crypto/fipsmodule/cipher/e_des.c +4 -0
  290. data/third_party/boringssl/crypto/fipsmodule/cipher/internal.h +3 -4
  291. data/third_party/boringssl/crypto/fipsmodule/delocate.h +3 -2
  292. data/third_party/boringssl/crypto/fipsmodule/digest/digest.c +32 -17
  293. data/third_party/boringssl/crypto/fipsmodule/digest/md32_common.h +3 -3
  294. data/third_party/boringssl/crypto/fipsmodule/ec/ec.c +228 -122
  295. data/third_party/boringssl/crypto/fipsmodule/ec/ec_key.c +34 -8
  296. data/third_party/boringssl/crypto/fipsmodule/ec/ec_montgomery.c +311 -98
  297. data/third_party/boringssl/crypto/fipsmodule/ec/felem.c +82 -0
  298. data/third_party/boringssl/crypto/fipsmodule/ec/internal.h +263 -97
  299. data/third_party/boringssl/crypto/fipsmodule/ec/oct.c +22 -59
  300. data/third_party/boringssl/crypto/fipsmodule/ec/p224-64.c +317 -234
  301. data/third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64-table.h +9473 -9475
  302. data/third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64.c +313 -109
  303. data/third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64.h +36 -0
  304. data/third_party/boringssl/crypto/fipsmodule/ec/scalar.c +96 -0
  305. data/third_party/boringssl/crypto/fipsmodule/ec/simple.c +126 -792
  306. data/third_party/boringssl/crypto/fipsmodule/ec/simple_mul.c +84 -0
  307. data/third_party/boringssl/crypto/fipsmodule/ec/util.c +163 -12
  308. data/third_party/boringssl/crypto/fipsmodule/ec/wnaf.c +84 -211
  309. data/third_party/boringssl/crypto/fipsmodule/ecdh/ecdh.c +122 -0
  310. data/third_party/boringssl/crypto/fipsmodule/ecdsa/ecdsa.c +60 -205
  311. data/third_party/boringssl/crypto/fipsmodule/fips_shared_support.c +32 -0
  312. data/third_party/boringssl/crypto/fipsmodule/is_fips.c +2 -0
  313. data/third_party/boringssl/crypto/fipsmodule/md4/md4.c +3 -1
  314. data/third_party/boringssl/crypto/fipsmodule/md5/internal.h +37 -0
  315. data/third_party/boringssl/crypto/fipsmodule/md5/md5.c +11 -8
  316. data/third_party/boringssl/crypto/fipsmodule/modes/cbc.c +35 -79
  317. data/third_party/boringssl/crypto/fipsmodule/modes/cfb.c +7 -39
  318. data/third_party/boringssl/crypto/fipsmodule/modes/ctr.c +7 -27
  319. data/third_party/boringssl/crypto/fipsmodule/modes/gcm.c +123 -309
  320. data/third_party/boringssl/crypto/fipsmodule/modes/internal.h +189 -126
  321. data/third_party/boringssl/crypto/fipsmodule/modes/ofb.c +3 -2
  322. data/third_party/boringssl/crypto/fipsmodule/rand/ctrdrbg.c +2 -2
  323. data/third_party/boringssl/crypto/fipsmodule/rand/internal.h +35 -0
  324. data/third_party/boringssl/crypto/fipsmodule/rand/rand.c +24 -19
  325. data/third_party/boringssl/crypto/fipsmodule/rand/urandom.c +256 -77
  326. data/third_party/boringssl/crypto/fipsmodule/rsa/padding.c +10 -7
  327. data/third_party/boringssl/crypto/fipsmodule/rsa/rsa.c +5 -1
  328. data/third_party/boringssl/crypto/fipsmodule/rsa/rsa_impl.c +131 -14
  329. data/third_party/boringssl/crypto/fipsmodule/self_check/self_check.c +83 -10
  330. data/third_party/boringssl/crypto/fipsmodule/sha/internal.h +53 -0
  331. data/third_party/boringssl/crypto/fipsmodule/sha/sha1.c +9 -13
  332. data/third_party/boringssl/crypto/fipsmodule/sha/sha256.c +18 -12
  333. data/third_party/boringssl/crypto/fipsmodule/sha/sha512.c +95 -168
  334. data/third_party/boringssl/crypto/hrss/hrss.c +2201 -0
  335. data/third_party/boringssl/crypto/hrss/internal.h +62 -0
  336. data/third_party/boringssl/crypto/internal.h +95 -20
  337. data/third_party/boringssl/crypto/lhash/lhash.c +45 -33
  338. data/third_party/boringssl/crypto/mem.c +39 -2
  339. data/third_party/boringssl/crypto/obj/obj.c +4 -4
  340. data/third_party/boringssl/crypto/obj/obj_dat.h +6181 -875
  341. data/third_party/boringssl/crypto/pem/pem_all.c +2 -3
  342. data/third_party/boringssl/crypto/pem/pem_info.c +144 -162
  343. data/third_party/boringssl/crypto/pem/pem_lib.c +53 -52
  344. data/third_party/boringssl/crypto/pem/pem_pkey.c +13 -21
  345. data/third_party/boringssl/crypto/pkcs7/pkcs7.c +15 -22
  346. data/third_party/boringssl/crypto/pkcs7/pkcs7_x509.c +168 -16
  347. data/third_party/boringssl/crypto/pkcs8/internal.h +11 -0
  348. data/third_party/boringssl/crypto/pkcs8/p5_pbev2.c +24 -15
  349. data/third_party/boringssl/crypto/pkcs8/pkcs8.c +42 -25
  350. data/third_party/boringssl/crypto/pkcs8/pkcs8_x509.c +559 -43
  351. data/third_party/boringssl/crypto/pool/internal.h +1 -1
  352. data/third_party/boringssl/crypto/pool/pool.c +21 -0
  353. data/third_party/boringssl/crypto/rand_extra/deterministic.c +8 -0
  354. data/third_party/boringssl/crypto/rand_extra/fuchsia.c +1 -14
  355. data/third_party/boringssl/crypto/refcount_lock.c +2 -2
  356. data/third_party/boringssl/crypto/rsa_extra/rsa_print.c +22 -0
  357. data/third_party/boringssl/crypto/siphash/siphash.c +80 -0
  358. data/third_party/boringssl/crypto/stack/stack.c +83 -32
  359. data/third_party/boringssl/crypto/thread_none.c +2 -2
  360. data/third_party/boringssl/crypto/thread_pthread.c +2 -2
  361. data/third_party/boringssl/crypto/thread_win.c +38 -19
  362. data/third_party/boringssl/crypto/x509/a_strex.c +22 -2
  363. data/third_party/boringssl/crypto/x509/asn1_gen.c +2 -1
  364. data/third_party/boringssl/crypto/x509/by_dir.c +7 -0
  365. data/third_party/boringssl/crypto/x509/by_file.c +12 -10
  366. data/third_party/boringssl/crypto/x509/t_crl.c +5 -8
  367. data/third_party/boringssl/crypto/x509/t_req.c +1 -3
  368. data/third_party/boringssl/crypto/x509/t_x509.c +5 -8
  369. data/third_party/boringssl/crypto/x509/x509_cmp.c +1 -1
  370. data/third_party/boringssl/crypto/x509/x509_def.c +1 -1
  371. data/third_party/boringssl/crypto/x509/x509_lu.c +114 -5
  372. data/third_party/boringssl/crypto/x509/x509_req.c +20 -0
  373. data/third_party/boringssl/crypto/x509/x509_set.c +5 -0
  374. data/third_party/boringssl/crypto/x509/x509_trs.c +1 -0
  375. data/third_party/boringssl/crypto/x509/x509_txt.c +4 -5
  376. data/third_party/boringssl/crypto/x509/x509_vfy.c +145 -138
  377. data/third_party/boringssl/crypto/x509/x509_vpm.c +2 -0
  378. data/third_party/boringssl/crypto/x509/x509cset.c +40 -0
  379. data/third_party/boringssl/crypto/x509/x509name.c +2 -3
  380. data/third_party/boringssl/crypto/x509/x_all.c +109 -210
  381. data/third_party/boringssl/crypto/x509/x_x509.c +6 -0
  382. data/third_party/boringssl/crypto/x509v3/ext_dat.h +1 -3
  383. data/third_party/boringssl/crypto/x509v3/internal.h +56 -0
  384. data/third_party/boringssl/crypto/x509v3/pcy_cache.c +2 -0
  385. data/third_party/boringssl/crypto/x509v3/pcy_node.c +1 -0
  386. data/third_party/boringssl/crypto/x509v3/pcy_tree.c +4 -2
  387. data/third_party/boringssl/crypto/x509v3/v3_akey.c +5 -2
  388. data/third_party/boringssl/crypto/x509v3/v3_alt.c +19 -13
  389. data/third_party/boringssl/crypto/x509v3/v3_conf.c +2 -1
  390. data/third_party/boringssl/crypto/x509v3/v3_cpols.c +3 -2
  391. data/third_party/boringssl/crypto/x509v3/v3_genn.c +1 -6
  392. data/third_party/boringssl/crypto/x509v3/v3_lib.c +1 -0
  393. data/third_party/boringssl/crypto/x509v3/v3_ocsp.c +68 -0
  394. data/third_party/boringssl/crypto/x509v3/v3_pci.c +2 -1
  395. data/third_party/boringssl/crypto/x509v3/v3_purp.c +47 -69
  396. data/third_party/boringssl/crypto/x509v3/v3_skey.c +5 -2
  397. data/third_party/boringssl/crypto/x509v3/v3_utl.c +69 -25
  398. data/third_party/boringssl/include/openssl/aead.h +45 -19
  399. data/third_party/boringssl/include/openssl/aes.h +32 -7
  400. data/third_party/boringssl/include/openssl/asn1.h +7 -77
  401. data/third_party/boringssl/include/openssl/base.h +120 -6
  402. data/third_party/boringssl/include/openssl/base64.h +4 -1
  403. data/third_party/boringssl/include/openssl/bio.h +112 -81
  404. data/third_party/boringssl/include/openssl/blowfish.h +3 -3
  405. data/third_party/boringssl/include/openssl/bn.h +55 -29
  406. data/third_party/boringssl/include/openssl/buf.h +2 -2
  407. data/third_party/boringssl/include/openssl/bytestring.h +54 -32
  408. data/third_party/boringssl/include/openssl/cast.h +2 -2
  409. data/third_party/boringssl/include/openssl/cipher.h +46 -16
  410. data/third_party/boringssl/include/openssl/cmac.h +6 -2
  411. data/third_party/boringssl/include/openssl/conf.h +3 -6
  412. data/third_party/boringssl/include/openssl/cpu.h +25 -9
  413. data/third_party/boringssl/include/openssl/crypto.h +32 -10
  414. data/third_party/boringssl/include/openssl/curve25519.h +4 -4
  415. data/third_party/boringssl/include/openssl/dh.h +3 -2
  416. data/third_party/boringssl/include/openssl/digest.h +21 -7
  417. data/third_party/boringssl/include/openssl/dsa.h +8 -2
  418. data/third_party/boringssl/include/openssl/e_os2.h +18 -0
  419. data/third_party/boringssl/include/openssl/ec.h +25 -21
  420. data/third_party/boringssl/include/openssl/ec_key.h +36 -8
  421. data/third_party/boringssl/include/openssl/ecdh.h +17 -0
  422. data/third_party/boringssl/include/openssl/ecdsa.h +3 -3
  423. data/third_party/boringssl/include/openssl/engine.h +4 -4
  424. data/third_party/boringssl/include/openssl/err.h +3 -0
  425. data/third_party/boringssl/include/openssl/evp.h +199 -42
  426. data/third_party/boringssl/include/openssl/hmac.h +4 -4
  427. data/third_party/boringssl/include/openssl/hrss.h +100 -0
  428. data/third_party/boringssl/include/openssl/lhash.h +131 -23
  429. data/third_party/boringssl/include/openssl/md4.h +6 -4
  430. data/third_party/boringssl/include/openssl/md5.h +6 -4
  431. data/third_party/boringssl/include/openssl/mem.h +6 -2
  432. data/third_party/boringssl/include/openssl/nid.h +3 -0
  433. data/third_party/boringssl/include/openssl/obj.h +3 -0
  434. data/third_party/boringssl/include/openssl/pem.h +102 -64
  435. data/third_party/boringssl/include/openssl/pkcs7.h +136 -3
  436. data/third_party/boringssl/include/openssl/pkcs8.h +42 -3
  437. data/third_party/boringssl/include/openssl/pool.h +13 -2
  438. data/third_party/boringssl/include/openssl/ripemd.h +5 -4
  439. data/third_party/boringssl/include/openssl/rsa.h +46 -15
  440. data/third_party/boringssl/include/openssl/sha.h +40 -28
  441. data/third_party/boringssl/include/openssl/siphash.h +37 -0
  442. data/third_party/boringssl/include/openssl/span.h +17 -9
  443. data/third_party/boringssl/include/openssl/ssl.h +766 -393
  444. data/third_party/boringssl/include/openssl/ssl3.h +4 -3
  445. data/third_party/boringssl/include/openssl/stack.h +134 -77
  446. data/third_party/boringssl/include/openssl/thread.h +1 -1
  447. data/third_party/boringssl/include/openssl/tls1.h +25 -9
  448. data/third_party/boringssl/include/openssl/type_check.h +14 -15
  449. data/third_party/boringssl/include/openssl/x509.h +28 -3
  450. data/third_party/boringssl/include/openssl/x509_vfy.h +98 -32
  451. data/third_party/boringssl/include/openssl/x509v3.h +17 -13
  452. data/third_party/boringssl/ssl/d1_both.cc +9 -18
  453. data/third_party/boringssl/ssl/d1_lib.cc +4 -3
  454. data/third_party/boringssl/ssl/d1_pkt.cc +4 -4
  455. data/third_party/boringssl/ssl/d1_srtp.cc +15 -15
  456. data/third_party/boringssl/ssl/dtls_method.cc +0 -1
  457. data/third_party/boringssl/ssl/dtls_record.cc +28 -28
  458. data/third_party/boringssl/ssl/handoff.cc +295 -91
  459. data/third_party/boringssl/ssl/handshake.cc +133 -72
  460. data/third_party/boringssl/ssl/handshake_client.cc +218 -189
  461. data/third_party/boringssl/ssl/handshake_server.cc +399 -272
  462. data/third_party/boringssl/ssl/internal.h +1413 -928
  463. data/third_party/boringssl/ssl/s3_both.cc +175 -36
  464. data/third_party/boringssl/ssl/s3_lib.cc +9 -13
  465. data/third_party/boringssl/ssl/s3_pkt.cc +63 -29
  466. data/third_party/boringssl/ssl/ssl_aead_ctx.cc +55 -35
  467. data/third_party/boringssl/ssl/ssl_asn1.cc +57 -73
  468. data/third_party/boringssl/ssl/ssl_buffer.cc +13 -12
  469. data/third_party/boringssl/ssl/ssl_cert.cc +313 -210
  470. data/third_party/boringssl/ssl/ssl_cipher.cc +159 -221
  471. data/third_party/boringssl/ssl/ssl_file.cc +2 -0
  472. data/third_party/boringssl/ssl/ssl_key_share.cc +164 -19
  473. data/third_party/boringssl/ssl/ssl_lib.cc +847 -555
  474. data/third_party/boringssl/ssl/ssl_privkey.cc +441 -111
  475. data/third_party/boringssl/ssl/ssl_session.cc +230 -178
  476. data/third_party/boringssl/ssl/ssl_transcript.cc +21 -142
  477. data/third_party/boringssl/ssl/ssl_versions.cc +88 -93
  478. data/third_party/boringssl/ssl/ssl_x509.cc +279 -218
  479. data/third_party/boringssl/ssl/t1_enc.cc +5 -96
  480. data/third_party/boringssl/ssl/t1_lib.cc +931 -678
  481. data/third_party/boringssl/ssl/tls13_both.cc +251 -121
  482. data/third_party/boringssl/ssl/tls13_client.cc +129 -73
  483. data/third_party/boringssl/ssl/tls13_enc.cc +350 -282
  484. data/third_party/boringssl/ssl/tls13_server.cc +259 -192
  485. data/third_party/boringssl/ssl/tls_method.cc +26 -21
  486. data/third_party/boringssl/ssl/tls_record.cc +42 -47
  487. data/third_party/boringssl/third_party/fiat/curve25519.c +261 -1324
  488. data/third_party/boringssl/third_party/fiat/curve25519_32.h +911 -0
  489. data/third_party/boringssl/third_party/fiat/curve25519_64.h +559 -0
  490. data/third_party/boringssl/third_party/fiat/p256.c +238 -999
  491. data/third_party/boringssl/third_party/fiat/p256_32.h +3226 -0
  492. data/third_party/boringssl/third_party/fiat/p256_64.h +1217 -0
  493. data/third_party/upb/upb/port_def.inc +1 -1
  494. data/third_party/upb/upb/table.c +2 -1
  495. metadata +71 -43
  496. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_load_balancer_api.h +0 -127
  497. data/src/core/lib/gpr/mpscq.cc +0 -117
  498. data/src/core/lib/gpr/mpscq.h +0 -88
  499. data/src/core/lib/gprpp/abstract.h +0 -47
  500. data/src/core/lib/gprpp/pair.h +0 -38
  501. data/third_party/boringssl/crypto/cipher_extra/e_ssl3.c +0 -460
  502. data/third_party/boringssl/crypto/fipsmodule/modes/ccm.c +0 -256
  503. data/third_party/boringssl/include/openssl/lhash_macros.h +0 -174
  504. data/third_party/boringssl/ssl/custom_extensions.cc +0 -265
@@ -51,6 +51,10 @@
51
51
 
52
52
  #include <openssl/base.h>
53
53
 
54
+ #include <openssl/aes.h>
55
+ #include <openssl/cpu.h>
56
+
57
+ #include <stdlib.h>
54
58
  #include <string.h>
55
59
 
56
60
  #include "../../internal.h"
@@ -60,12 +64,6 @@ extern "C" {
60
64
  #endif
61
65
 
62
66
 
63
- #define STRICT_ALIGNMENT 1
64
- #if defined(OPENSSL_X86_64) || defined(OPENSSL_X86) || defined(OPENSSL_AARCH64)
65
- #undef STRICT_ALIGNMENT
66
- #define STRICT_ALIGNMENT 0
67
- #endif
68
-
69
67
  static inline uint32_t GETU32(const void *in) {
70
68
  uint32_t v;
71
69
  OPENSSL_memcpy(&v, in, sizeof(v));
@@ -87,62 +85,24 @@ static inline void store_word_le(void *out, size_t v) {
87
85
  OPENSSL_memcpy(out, &v, sizeof(v));
88
86
  }
89
87
 
90
- // block128_f is the type of a 128-bit, block cipher.
88
+ // block128_f is the type of an AES block cipher implementation.
89
+ //
90
+ // Unlike upstream OpenSSL, it and the other functions in this file hard-code
91
+ // |AES_KEY|. It is undefined in C to call a function pointer with anything
92
+ // other than the original type. Thus we either must match |block128_f| to the
93
+ // type signature of |AES_encrypt| and friends or pass in |void*| wrapper
94
+ // functions.
95
+ //
96
+ // These functions are called exclusively with AES, so we use the former.
91
97
  typedef void (*block128_f)(const uint8_t in[16], uint8_t out[16],
92
- const void *key);
93
-
94
- // GCM definitions
95
- typedef struct { uint64_t hi,lo; } u128;
96
-
97
- // gmult_func multiplies |Xi| by the GCM key and writes the result back to
98
- // |Xi|.
99
- typedef void (*gmult_func)(uint64_t Xi[2], const u128 Htable[16]);
100
-
101
- // ghash_func repeatedly multiplies |Xi| by the GCM key and adds in blocks from
102
- // |inp|. The result is written back to |Xi| and the |len| argument must be a
103
- // multiple of 16.
104
- typedef void (*ghash_func)(uint64_t Xi[2], const u128 Htable[16],
105
- const uint8_t *inp, size_t len);
106
-
107
- // This differs from upstream's |gcm128_context| in that it does not have the
108
- // |key| pointer, in order to make it |memcpy|-friendly. Rather the key is
109
- // passed into each call that needs it.
110
- struct gcm128_context {
111
- // Following 6 names follow names in GCM specification
112
- union {
113
- uint64_t u[2];
114
- uint32_t d[4];
115
- uint8_t c[16];
116
- size_t t[16 / sizeof(size_t)];
117
- } Yi, EKi, EK0, len, Xi;
118
-
119
- // Note that the order of |Xi|, |H| and |Htable| is fixed by the MOVBE-based,
120
- // x86-64, GHASH assembly.
121
- u128 H;
122
- u128 Htable[16];
123
- gmult_func gmult;
124
- ghash_func ghash;
125
-
126
- unsigned int mres, ares;
127
- block128_f block;
128
-
129
- // use_aesni_gcm_crypt is true if this context should use the assembly
130
- // functions |aesni_gcm_encrypt| and |aesni_gcm_decrypt| to process data.
131
- unsigned use_aesni_gcm_crypt:1;
132
- };
133
-
134
- #if defined(OPENSSL_X86) || defined(OPENSSL_X86_64)
135
- // crypto_gcm_clmul_enabled returns one if the CLMUL implementation of GCM is
136
- // used.
137
- int crypto_gcm_clmul_enabled(void);
138
- #endif
98
+ const AES_KEY *key);
139
99
 
140
100
 
141
101
  // CTR.
142
102
 
143
103
  // ctr128_f is the type of a function that performs CTR-mode encryption.
144
104
  typedef void (*ctr128_f)(const uint8_t *in, uint8_t *out, size_t blocks,
145
- const void *key, const uint8_t ivec[16]);
105
+ const AES_KEY *key, const uint8_t ivec[16]);
146
106
 
147
107
  // CRYPTO_ctr128_encrypt encrypts (or decrypts, it's the same in CTR mode)
148
108
  // |len| bytes from |in| to |out| using |block| in counter mode. There's no
@@ -151,7 +111,7 @@ typedef void (*ctr128_f)(const uint8_t *in, uint8_t *out, size_t blocks,
151
111
  // call. The counter is a 128-bit, big-endian value in |ivec| and is
152
112
  // incremented by this function.
153
113
  void CRYPTO_ctr128_encrypt(const uint8_t *in, uint8_t *out, size_t len,
154
- const void *key, uint8_t ivec[16],
114
+ const AES_KEY *key, uint8_t ivec[16],
155
115
  uint8_t ecount_buf[16], unsigned *num,
156
116
  block128_f block);
157
117
 
@@ -160,25 +120,74 @@ void CRYPTO_ctr128_encrypt(const uint8_t *in, uint8_t *out, size_t len,
160
120
  // bits of the counter. This is useful when |ctr| can be an optimised
161
121
  // function.
162
122
  void CRYPTO_ctr128_encrypt_ctr32(const uint8_t *in, uint8_t *out, size_t len,
163
- const void *key, uint8_t ivec[16],
123
+ const AES_KEY *key, uint8_t ivec[16],
164
124
  uint8_t ecount_buf[16], unsigned *num,
165
125
  ctr128_f ctr);
166
126
 
167
- #if !defined(OPENSSL_NO_ASM) && \
168
- (defined(OPENSSL_X86) || defined(OPENSSL_X86_64))
169
- void aesni_ctr32_encrypt_blocks(const uint8_t *in, uint8_t *out, size_t blocks,
170
- const void *key, const uint8_t *ivec);
171
- #endif
172
-
173
127
 
174
128
  // GCM.
175
129
  //
176
130
  // This API differs from the upstream API slightly. The |GCM128_CONTEXT| does
177
131
  // not have a |key| pointer that points to the key as upstream's version does.
178
132
  // Instead, every function takes a |key| parameter. This way |GCM128_CONTEXT|
179
- // can be safely copied.
133
+ // can be safely copied. Additionally, |gcm_key| is split into a separate
134
+ // struct.
135
+
136
+ typedef struct { uint64_t hi,lo; } u128;
137
+
138
+ // gmult_func multiplies |Xi| by the GCM key and writes the result back to
139
+ // |Xi|.
140
+ typedef void (*gmult_func)(uint64_t Xi[2], const u128 Htable[16]);
141
+
142
+ // ghash_func repeatedly multiplies |Xi| by the GCM key and adds in blocks from
143
+ // |inp|. The result is written back to |Xi| and the |len| argument must be a
144
+ // multiple of 16.
145
+ typedef void (*ghash_func)(uint64_t Xi[2], const u128 Htable[16],
146
+ const uint8_t *inp, size_t len);
147
+
148
+ typedef struct gcm128_key_st {
149
+ // Note the MOVBE-based, x86-64, GHASH assembly requires |H| and |Htable| to
150
+ // be the first two elements of this struct. Additionally, some assembly
151
+ // routines require a 16-byte-aligned |Htable| when hashing data, but not
152
+ // initialization. |GCM128_KEY| is not itself aligned to simplify embedding in
153
+ // |EVP_AEAD_CTX|, but |Htable|'s offset must be a multiple of 16.
154
+ u128 H;
155
+ u128 Htable[16];
156
+ gmult_func gmult;
157
+ ghash_func ghash;
158
+
159
+ block128_f block;
160
+
161
+ // use_aesni_gcm_crypt is true if this context should use the assembly
162
+ // functions |aesni_gcm_encrypt| and |aesni_gcm_decrypt| to process data.
163
+ unsigned use_aesni_gcm_crypt:1;
164
+ } GCM128_KEY;
165
+
166
+ // GCM128_CONTEXT contains state for a single GCM operation. The structure
167
+ // should be zero-initialized before use.
168
+ typedef struct {
169
+ // The following 5 names follow names in GCM specification
170
+ union {
171
+ uint64_t u[2];
172
+ uint32_t d[4];
173
+ uint8_t c[16];
174
+ size_t t[16 / sizeof(size_t)];
175
+ } Yi, EKi, EK0, len, Xi;
176
+
177
+ // Note that the order of |Xi| and |gcm_key| is fixed by the MOVBE-based,
178
+ // x86-64, GHASH assembly. Additionally, some assembly routines require
179
+ // |gcm_key| to be 16-byte aligned. |GCM128_KEY| is not itself aligned to
180
+ // simplify embedding in |EVP_AEAD_CTX|.
181
+ alignas(16) GCM128_KEY gcm_key;
180
182
 
181
- typedef struct gcm128_context GCM128_CONTEXT;
183
+ unsigned mres, ares;
184
+ } GCM128_CONTEXT;
185
+
186
+ #if defined(OPENSSL_X86) || defined(OPENSSL_X86_64)
187
+ // crypto_gcm_clmul_enabled returns one if the CLMUL implementation of GCM is
188
+ // used.
189
+ int crypto_gcm_clmul_enabled(void);
190
+ #endif
182
191
 
183
192
  // CRYPTO_ghash_init writes a precomputed table of powers of |gcm_key| to
184
193
  // |out_table| and sets |*out_mult| and |*out_hash| to (potentially hardware
@@ -186,16 +195,17 @@ typedef struct gcm128_context GCM128_CONTEXT;
186
195
  // AVX implementation was used |*out_is_avx| will be true.
187
196
  void CRYPTO_ghash_init(gmult_func *out_mult, ghash_func *out_hash,
188
197
  u128 *out_key, u128 out_table[16], int *out_is_avx,
189
- const uint8_t *gcm_key);
198
+ const uint8_t gcm_key[16]);
190
199
 
191
- // CRYPTO_gcm128_init initialises |ctx| to use |block| (typically AES) with
192
- // the given key. |is_aesni_encrypt| is one if |block| is |aesni_encrypt|.
193
- OPENSSL_EXPORT void CRYPTO_gcm128_init(GCM128_CONTEXT *ctx, const void *key,
194
- block128_f block, int is_aesni_encrypt);
200
+ // CRYPTO_gcm128_init_key initialises |gcm_key| to use |block| (typically AES)
201
+ // with the given key. |block_is_hwaes| is one if |block| is |aes_hw_encrypt|.
202
+ OPENSSL_EXPORT void CRYPTO_gcm128_init_key(GCM128_KEY *gcm_key,
203
+ const AES_KEY *key, block128_f block,
204
+ int block_is_hwaes);
195
205
 
196
206
  // CRYPTO_gcm128_setiv sets the IV (nonce) for |ctx|. The |key| must be the
197
207
  // same key that was passed to |CRYPTO_gcm128_init|.
198
- OPENSSL_EXPORT void CRYPTO_gcm128_setiv(GCM128_CONTEXT *ctx, const void *key,
208
+ OPENSSL_EXPORT void CRYPTO_gcm128_setiv(GCM128_CONTEXT *ctx, const AES_KEY *key,
199
209
  const uint8_t *iv, size_t iv_len);
200
210
 
201
211
  // CRYPTO_gcm128_aad sets the authenticated data for an instance of GCM.
@@ -207,16 +217,16 @@ OPENSSL_EXPORT int CRYPTO_gcm128_aad(GCM128_CONTEXT *ctx, const uint8_t *aad,
207
217
  // CRYPTO_gcm128_encrypt encrypts |len| bytes from |in| to |out|. The |key|
208
218
  // must be the same key that was passed to |CRYPTO_gcm128_init|. It returns one
209
219
  // on success and zero otherwise.
210
- OPENSSL_EXPORT int CRYPTO_gcm128_encrypt(GCM128_CONTEXT *ctx, const void *key,
211
- const uint8_t *in, uint8_t *out,
212
- size_t len);
220
+ OPENSSL_EXPORT int CRYPTO_gcm128_encrypt(GCM128_CONTEXT *ctx,
221
+ const AES_KEY *key, const uint8_t *in,
222
+ uint8_t *out, size_t len);
213
223
 
214
224
  // CRYPTO_gcm128_decrypt decrypts |len| bytes from |in| to |out|. The |key|
215
225
  // must be the same key that was passed to |CRYPTO_gcm128_init|. It returns one
216
226
  // on success and zero otherwise.
217
- OPENSSL_EXPORT int CRYPTO_gcm128_decrypt(GCM128_CONTEXT *ctx, const void *key,
218
- const uint8_t *in, uint8_t *out,
219
- size_t len);
227
+ OPENSSL_EXPORT int CRYPTO_gcm128_decrypt(GCM128_CONTEXT *ctx,
228
+ const AES_KEY *key, const uint8_t *in,
229
+ uint8_t *out, size_t len);
220
230
 
221
231
  // CRYPTO_gcm128_encrypt_ctr32 encrypts |len| bytes from |in| to |out| using
222
232
  // a CTR function that only handles the bottom 32 bits of the nonce, like
@@ -224,7 +234,7 @@ OPENSSL_EXPORT int CRYPTO_gcm128_decrypt(GCM128_CONTEXT *ctx, const void *key,
224
234
  // passed to |CRYPTO_gcm128_init|. It returns one on success and zero
225
235
  // otherwise.
226
236
  OPENSSL_EXPORT int CRYPTO_gcm128_encrypt_ctr32(GCM128_CONTEXT *ctx,
227
- const void *key,
237
+ const AES_KEY *key,
228
238
  const uint8_t *in, uint8_t *out,
229
239
  size_t len, ctr128_f stream);
230
240
 
@@ -234,7 +244,7 @@ OPENSSL_EXPORT int CRYPTO_gcm128_encrypt_ctr32(GCM128_CONTEXT *ctx,
234
244
  // passed to |CRYPTO_gcm128_init|. It returns one on success and zero
235
245
  // otherwise.
236
246
  OPENSSL_EXPORT int CRYPTO_gcm128_decrypt_ctr32(GCM128_CONTEXT *ctx,
237
- const void *key,
247
+ const AES_KEY *key,
238
248
  const uint8_t *in, uint8_t *out,
239
249
  size_t len, ctr128_f stream);
240
250
 
@@ -249,61 +259,113 @@ OPENSSL_EXPORT void CRYPTO_gcm128_tag(GCM128_CONTEXT *ctx, uint8_t *tag,
249
259
  size_t len);
250
260
 
251
261
 
252
- // CCM.
262
+ // GCM assembly.
253
263
 
254
- typedef struct ccm128_context {
255
- block128_f block;
256
- ctr128_f ctr;
257
- unsigned M, L;
258
- } CCM128_CONTEXT;
259
-
260
- // CRYPTO_ccm128_init initialises |ctx| to use |block| (typically AES) with the
261
- // specified |M| and |L| parameters. It returns one on success and zero if |M|
262
- // or |L| is invalid.
263
- int CRYPTO_ccm128_init(CCM128_CONTEXT *ctx, const void *key, block128_f block,
264
- ctr128_f ctr, unsigned M, unsigned L);
265
-
266
- // CRYPTO_ccm128_max_input returns the maximum input length accepted by |ctx|.
267
- size_t CRYPTO_ccm128_max_input(const CCM128_CONTEXT *ctx);
268
-
269
- // CRYPTO_ccm128_encrypt encrypts |len| bytes from |in| to |out| writing the tag
270
- // to |out_tag|. |key| must be the same key that was passed to
271
- // |CRYPTO_ccm128_init|. It returns one on success and zero otherwise.
272
- int CRYPTO_ccm128_encrypt(const CCM128_CONTEXT *ctx, const void *key,
273
- uint8_t *out, uint8_t *out_tag, size_t tag_len,
274
- const uint8_t *nonce, size_t nonce_len,
275
- const uint8_t *in, size_t len, const uint8_t *aad,
276
- size_t aad_len);
277
-
278
- // CRYPTO_ccm128_decrypt decrypts |len| bytes from |in| to |out|, writing the
279
- // expected tag to |out_tag|. |key| must be the same key that was passed to
280
- // |CRYPTO_ccm128_init|. It returns one on success and zero otherwise.
281
- int CRYPTO_ccm128_decrypt(const CCM128_CONTEXT *ctx, const void *key,
282
- uint8_t *out, uint8_t *out_tag, size_t tag_len,
283
- const uint8_t *nonce, size_t nonce_len,
284
- const uint8_t *in, size_t len, const uint8_t *aad,
285
- size_t aad_len);
264
+ #if !defined(OPENSSL_NO_ASM) && \
265
+ (defined(OPENSSL_X86) || defined(OPENSSL_X86_64) || \
266
+ defined(OPENSSL_ARM) || defined(OPENSSL_AARCH64) || \
267
+ defined(OPENSSL_PPC64LE))
268
+ #define GHASH_ASM
269
+ #endif
270
+
271
+ void gcm_init_4bit(u128 Htable[16], const uint64_t H[2]);
272
+ void gcm_gmult_4bit(uint64_t Xi[2], const u128 Htable[16]);
273
+ void gcm_ghash_4bit(uint64_t Xi[2], const u128 Htable[16], const uint8_t *inp,
274
+ size_t len);
275
+
276
+ #if defined(GHASH_ASM)
277
+
278
+ #if defined(OPENSSL_X86) || defined(OPENSSL_X86_64)
279
+ #define GCM_FUNCREF_4BIT
280
+ void gcm_init_clmul(u128 Htable[16], const uint64_t Xi[2]);
281
+ void gcm_gmult_clmul(uint64_t Xi[2], const u128 Htable[16]);
282
+ void gcm_ghash_clmul(uint64_t Xi[2], const u128 Htable[16], const uint8_t *inp,
283
+ size_t len);
284
+
285
+ OPENSSL_INLINE char gcm_ssse3_capable(void) {
286
+ return (OPENSSL_ia32cap_get()[1] & (1 << (41 - 32))) != 0;
287
+ }
288
+
289
+ // |gcm_gmult_ssse3| and |gcm_ghash_ssse3| require |Htable| to be
290
+ // 16-byte-aligned, but |gcm_init_ssse3| does not.
291
+ void gcm_init_ssse3(u128 Htable[16], const uint64_t Xi[2]);
292
+ void gcm_gmult_ssse3(uint64_t Xi[2], const u128 Htable[16]);
293
+ void gcm_ghash_ssse3(uint64_t Xi[2], const u128 Htable[16], const uint8_t *in,
294
+ size_t len);
295
+
296
+ #if defined(OPENSSL_X86_64)
297
+ #define GHASH_ASM_X86_64
298
+ void gcm_init_avx(u128 Htable[16], const uint64_t Xi[2]);
299
+ void gcm_gmult_avx(uint64_t Xi[2], const u128 Htable[16]);
300
+ void gcm_ghash_avx(uint64_t Xi[2], const u128 Htable[16], const uint8_t *in,
301
+ size_t len);
302
+
303
+ #define AESNI_GCM
304
+ size_t aesni_gcm_encrypt(const uint8_t *in, uint8_t *out, size_t len,
305
+ const AES_KEY *key, uint8_t ivec[16], uint64_t *Xi);
306
+ size_t aesni_gcm_decrypt(const uint8_t *in, uint8_t *out, size_t len,
307
+ const AES_KEY *key, uint8_t ivec[16], uint64_t *Xi);
308
+ #endif // OPENSSL_X86_64
309
+
310
+ #if defined(OPENSSL_X86)
311
+ #define GHASH_ASM_X86
312
+ void gcm_gmult_4bit_mmx(uint64_t Xi[2], const u128 Htable[16]);
313
+ void gcm_ghash_4bit_mmx(uint64_t Xi[2], const u128 Htable[16], const uint8_t *inp,
314
+ size_t len);
315
+ #endif // OPENSSL_X86
316
+
317
+ #elif defined(OPENSSL_ARM) || defined(OPENSSL_AARCH64)
318
+ #define GHASH_ASM_ARM
319
+ #define GCM_FUNCREF_4BIT
320
+
321
+ OPENSSL_INLINE int gcm_pmull_capable(void) {
322
+ return CRYPTO_is_ARMv8_PMULL_capable();
323
+ }
324
+
325
+ void gcm_init_v8(u128 Htable[16], const uint64_t Xi[2]);
326
+ void gcm_gmult_v8(uint64_t Xi[2], const u128 Htable[16]);
327
+ void gcm_ghash_v8(uint64_t Xi[2], const u128 Htable[16], const uint8_t *inp,
328
+ size_t len);
329
+
330
+ OPENSSL_INLINE int gcm_neon_capable(void) { return CRYPTO_is_NEON_capable(); }
331
+
332
+ void gcm_init_neon(u128 Htable[16], const uint64_t Xi[2]);
333
+ void gcm_gmult_neon(uint64_t Xi[2], const u128 Htable[16]);
334
+ void gcm_ghash_neon(uint64_t Xi[2], const u128 Htable[16], const uint8_t *inp,
335
+ size_t len);
336
+
337
+ #elif defined(OPENSSL_PPC64LE)
338
+ #define GHASH_ASM_PPC64LE
339
+ #define GCM_FUNCREF_4BIT
340
+ void gcm_init_p8(u128 Htable[16], const uint64_t Xi[2]);
341
+ void gcm_gmult_p8(uint64_t Xi[2], const u128 Htable[16]);
342
+ void gcm_ghash_p8(uint64_t Xi[2], const u128 Htable[16], const uint8_t *inp,
343
+ size_t len);
344
+ #endif
345
+ #endif // GHASH_ASM
286
346
 
287
347
 
288
348
  // CBC.
289
349
 
290
350
  // cbc128_f is the type of a function that performs CBC-mode encryption.
291
351
  typedef void (*cbc128_f)(const uint8_t *in, uint8_t *out, size_t len,
292
- const void *key, uint8_t ivec[16], int enc);
352
+ const AES_KEY *key, uint8_t ivec[16], int enc);
293
353
 
294
354
  // CRYPTO_cbc128_encrypt encrypts |len| bytes from |in| to |out| using the
295
355
  // given IV and block cipher in CBC mode. The input need not be a multiple of
296
356
  // 128 bits long, but the output will round up to the nearest 128 bit multiple,
297
357
  // zero padding the input if needed. The IV will be updated on return.
298
358
  void CRYPTO_cbc128_encrypt(const uint8_t *in, uint8_t *out, size_t len,
299
- const void *key, uint8_t ivec[16], block128_f block);
359
+ const AES_KEY *key, uint8_t ivec[16],
360
+ block128_f block);
300
361
 
301
362
  // CRYPTO_cbc128_decrypt decrypts |len| bytes from |in| to |out| using the
302
363
  // given IV and block cipher in CBC mode. If |len| is not a multiple of 128
303
364
  // bits then only that many bytes will be written, but a multiple of 128 bits
304
365
  // is always read from |in|. The IV will be updated on return.
305
366
  void CRYPTO_cbc128_decrypt(const uint8_t *in, uint8_t *out, size_t len,
306
- const void *key, uint8_t ivec[16], block128_f block);
367
+ const AES_KEY *key, uint8_t ivec[16],
368
+ block128_f block);
307
369
 
308
370
 
309
371
  // OFB.
@@ -313,9 +375,9 @@ void CRYPTO_cbc128_decrypt(const uint8_t *in, uint8_t *out, size_t len,
313
375
  // requirement that |len| be a multiple of any value and any partial blocks are
314
376
  // stored in |ivec| and |*num|, the latter must be zero before the initial
315
377
  // call.
316
- void CRYPTO_ofb128_encrypt(const uint8_t *in, uint8_t *out,
317
- size_t len, const void *key, uint8_t ivec[16],
318
- unsigned *num, block128_f block);
378
+ void CRYPTO_ofb128_encrypt(const uint8_t *in, uint8_t *out, size_t len,
379
+ const AES_KEY *key, uint8_t ivec[16], unsigned *num,
380
+ block128_f block);
319
381
 
320
382
 
321
383
  // CFB.
@@ -325,25 +387,25 @@ void CRYPTO_ofb128_encrypt(const uint8_t *in, uint8_t *out,
325
387
  // |len| be a multiple of any value and any partial blocks are stored in |ivec|
326
388
  // and |*num|, the latter must be zero before the initial call.
327
389
  void CRYPTO_cfb128_encrypt(const uint8_t *in, uint8_t *out, size_t len,
328
- const void *key, uint8_t ivec[16], unsigned *num,
390
+ const AES_KEY *key, uint8_t ivec[16], unsigned *num,
329
391
  int enc, block128_f block);
330
392
 
331
393
  // CRYPTO_cfb128_8_encrypt encrypts (or decrypts, if |enc| is zero) |len| bytes
332
394
  // from |in| to |out| using |block| in CFB-8 mode. Prior to the first call
333
395
  // |num| should be set to zero.
334
396
  void CRYPTO_cfb128_8_encrypt(const uint8_t *in, uint8_t *out, size_t len,
335
- const void *key, uint8_t ivec[16], unsigned *num,
336
- int enc, block128_f block);
397
+ const AES_KEY *key, uint8_t ivec[16],
398
+ unsigned *num, int enc, block128_f block);
337
399
 
338
400
  // CRYPTO_cfb128_1_encrypt encrypts (or decrypts, if |enc| is zero) |len| bytes
339
401
  // from |in| to |out| using |block| in CFB-1 mode. Prior to the first call
340
402
  // |num| should be set to zero.
341
403
  void CRYPTO_cfb128_1_encrypt(const uint8_t *in, uint8_t *out, size_t bits,
342
- const void *key, uint8_t ivec[16], unsigned *num,
343
- int enc, block128_f block);
404
+ const AES_KEY *key, uint8_t ivec[16],
405
+ unsigned *num, int enc, block128_f block);
344
406
 
345
407
  size_t CRYPTO_cts128_encrypt_block(const uint8_t *in, uint8_t *out, size_t len,
346
- const void *key, uint8_t ivec[16],
408
+ const AES_KEY *key, uint8_t ivec[16],
347
409
  block128_f block);
348
410
 
349
411
 
@@ -360,10 +422,11 @@ typedef union {
360
422
 
361
423
  struct polyval_ctx {
362
424
  // Note that the order of |S|, |H| and |Htable| is fixed by the MOVBE-based,
363
- // x86-64, GHASH assembly.
425
+ // x86-64, GHASH assembly. Additionally, some assembly routines require
426
+ // |Htable| to be 16-byte aligned.
364
427
  polyval_block S;
365
428
  u128 H;
366
- u128 Htable[16];
429
+ alignas(16) u128 Htable[16];
367
430
  gmult_func gmult;
368
431
  ghash_func ghash;
369
432
  };