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
@@ -57,12 +57,6 @@
57
57
  #include "internal.h"
58
58
  #include "../../internal.h"
59
59
 
60
- #if !defined(OPENSSL_NO_ASM) && \
61
- (defined(OPENSSL_X86) || defined(OPENSSL_X86_64) || \
62
- defined(OPENSSL_ARM) || defined(OPENSSL_AARCH64) || \
63
- defined(OPENSSL_PPC64LE))
64
- #define GHASH_ASM
65
- #endif
66
60
 
67
61
  #define PACK(s) ((size_t)(s) << (sizeof(size_t) * 8 - 16))
68
62
  #define REDUCE1BIT(V) \
@@ -82,7 +76,7 @@
82
76
  // bits of a |size_t|.
83
77
  static const size_t kSizeTWithoutLower4Bits = (size_t) -16;
84
78
 
85
- static void gcm_init_4bit(u128 Htable[16], uint64_t H[2]) {
79
+ void gcm_init_4bit(u128 Htable[16], const uint64_t H[2]) {
86
80
  u128 V;
87
81
 
88
82
  Htable[0].hi = 0;
@@ -127,7 +121,7 @@ static const size_t rem_4bit[16] = {
127
121
  PACK(0xE100), PACK(0xFD20), PACK(0xD940), PACK(0xC560),
128
122
  PACK(0x9180), PACK(0x8DA0), PACK(0xA9C0), PACK(0xB5E0)};
129
123
 
130
- static void gcm_gmult_4bit(uint64_t Xi[2], const u128 Htable[16]) {
124
+ void gcm_gmult_4bit(uint64_t Xi[2], const u128 Htable[16]) {
131
125
  u128 Z;
132
126
  int cnt = 15;
133
127
  size_t rem, nlo, nhi;
@@ -182,8 +176,8 @@ static void gcm_gmult_4bit(uint64_t Xi[2], const u128 Htable[16]) {
182
176
  // performance improvement, at least not on x86[_64]. It's here
183
177
  // mostly as reference and a placeholder for possible future
184
178
  // non-trivial optimization[s]...
185
- static void gcm_ghash_4bit(uint64_t Xi[2], const u128 Htable[16],
186
- const uint8_t *inp, size_t len) {
179
+ void gcm_ghash_4bit(uint64_t Xi[2], const u128 Htable[16], const uint8_t *inp,
180
+ size_t len) {
187
181
  u128 Z;
188
182
  int cnt;
189
183
  size_t rem, nlo, nhi;
@@ -237,117 +231,54 @@ static void gcm_ghash_4bit(uint64_t Xi[2], const u128 Htable[16],
237
231
  Xi[1] = CRYPTO_bswap8(Z.lo);
238
232
  } while (inp += 16, len -= 16);
239
233
  }
240
- #else // GHASH_ASM
241
- void gcm_gmult_4bit(uint64_t Xi[2], const u128 Htable[16]);
242
- void gcm_ghash_4bit(uint64_t Xi[2], const u128 Htable[16], const uint8_t *inp,
243
- size_t len);
244
- #endif
234
+ #endif // !GHASH_ASM || AARCH64 || PPC64LE
245
235
 
246
- #define GCM_MUL(ctx, Xi) gcm_gmult_4bit((ctx)->Xi.u, (ctx)->Htable)
247
- #if defined(GHASH_ASM)
248
- #define GHASH(ctx, in, len) gcm_ghash_4bit((ctx)->Xi.u, (ctx)->Htable, in, len)
236
+ #define GCM_MUL(ctx, Xi) gcm_gmult_4bit((ctx)->Xi.u, (ctx)->gcm_key.Htable)
237
+ #define GHASH(ctx, in, len) \
238
+ gcm_ghash_4bit((ctx)->Xi.u, (ctx)->gcm_key.Htable, in, len)
249
239
  // GHASH_CHUNK is "stride parameter" missioned to mitigate cache
250
240
  // trashing effect. In other words idea is to hash data while it's
251
241
  // still in L1 cache after encryption pass...
252
242
  #define GHASH_CHUNK (3 * 1024)
253
- #endif
254
-
255
-
256
- #if defined(GHASH_ASM)
257
243
 
258
- #if defined(OPENSSL_X86) || defined(OPENSSL_X86_64)
259
- #define GCM_FUNCREF_4BIT
260
- void gcm_init_clmul(u128 Htable[16], const uint64_t Xi[2]);
261
- void gcm_gmult_clmul(uint64_t Xi[2], const u128 Htable[16]);
262
- void gcm_ghash_clmul(uint64_t Xi[2], const u128 Htable[16], const uint8_t *inp,
263
- size_t len);
264
-
265
- #if defined(OPENSSL_X86_64)
266
- #define GHASH_ASM_X86_64
267
- void gcm_init_avx(u128 Htable[16], const uint64_t Xi[2]);
268
- void gcm_gmult_avx(uint64_t Xi[2], const u128 Htable[16]);
269
- void gcm_ghash_avx(uint64_t Xi[2], const u128 Htable[16], const uint8_t *in,
270
- size_t len);
271
- #define AESNI_GCM
272
- size_t aesni_gcm_encrypt(const uint8_t *in, uint8_t *out, size_t len,
273
- const void *key, uint8_t ivec[16], uint64_t *Xi);
274
- size_t aesni_gcm_decrypt(const uint8_t *in, uint8_t *out, size_t len,
275
- const void *key, uint8_t ivec[16], uint64_t *Xi);
276
- #endif
277
-
278
- #if defined(OPENSSL_X86)
279
- #define GHASH_ASM_X86
280
- void gcm_gmult_4bit_mmx(uint64_t Xi[2], const u128 Htable[16]);
281
- void gcm_ghash_4bit_mmx(uint64_t Xi[2], const u128 Htable[16], const uint8_t *inp,
282
- size_t len);
283
- #endif
284
-
285
- #elif defined(OPENSSL_ARM) || defined(OPENSSL_AARCH64)
286
- #include <openssl/arm_arch.h>
287
- #if __ARM_ARCH__ >= 7
288
- #define GHASH_ASM_ARM
289
- #define GCM_FUNCREF_4BIT
290
-
291
- static int pmull_capable(void) {
292
- return CRYPTO_is_ARMv8_PMULL_capable();
293
- }
244
+ #if defined(GHASH_ASM_X86_64) || defined(GHASH_ASM_X86)
245
+ void gcm_init_ssse3(u128 Htable[16], const uint64_t Xi[2]) {
246
+ // Run the existing 4-bit version.
247
+ gcm_init_4bit(Htable, Xi);
294
248
 
295
- void gcm_init_v8(u128 Htable[16], const uint64_t Xi[2]);
296
- void gcm_gmult_v8(uint64_t Xi[2], const u128 Htable[16]);
297
- void gcm_ghash_v8(uint64_t Xi[2], const u128 Htable[16], const uint8_t *inp,
298
- size_t len);
299
-
300
- #if defined(OPENSSL_ARM)
301
- // 32-bit ARM also has support for doing GCM with NEON instructions.
302
- static int neon_capable(void) {
303
- return CRYPTO_is_NEON_capable();
304
- }
249
+ // First, swap hi and lo. The "4bit" version places hi first. It treats the
250
+ // two fields separately, so the order does not matter, but ghash-ssse3 reads
251
+ // the entire state into one 128-bit register.
252
+ for (int i = 0; i < 16; i++) {
253
+ uint64_t tmp = Htable[i].hi;
254
+ Htable[i].hi = Htable[i].lo;
255
+ Htable[i].lo = tmp;
256
+ }
305
257
 
306
- void gcm_init_neon(u128 Htable[16], const uint64_t Xi[2]);
307
- void gcm_gmult_neon(uint64_t Xi[2], const u128 Htable[16]);
308
- void gcm_ghash_neon(uint64_t Xi[2], const u128 Htable[16], const uint8_t *inp,
309
- size_t len);
310
- #else
311
- // AArch64 only has the ARMv8 versions of functions.
312
- static int neon_capable(void) {
313
- return 0;
314
- }
315
- static void gcm_init_neon(u128 Htable[16], const uint64_t Xi[2]) {
316
- abort();
317
- }
318
- static void gcm_gmult_neon(uint64_t Xi[2], const u128 Htable[16]) {
319
- abort();
320
- }
321
- static void gcm_ghash_neon(uint64_t Xi[2], const u128 Htable[16],
322
- const uint8_t *inp, size_t len) {
323
- abort();
258
+ // Treat |Htable| as a 16x16 byte table and transpose it. Thus, Htable[i]
259
+ // contains the i'th byte of j*H for all j.
260
+ uint8_t *Hbytes = (uint8_t *)Htable;
261
+ for (int i = 0; i < 16; i++) {
262
+ for (int j = 0; j < i; j++) {
263
+ uint8_t tmp = Hbytes[16*i + j];
264
+ Hbytes[16*i + j] = Hbytes[16*j + i];
265
+ Hbytes[16*j + i] = tmp;
266
+ }
267
+ }
324
268
  }
325
- #endif
326
-
327
- #endif
328
- #elif defined(OPENSSL_PPC64LE)
329
- #define GHASH_ASM_PPC64LE
330
- #define GCM_FUNCREF_4BIT
331
- void gcm_init_p8(u128 Htable[16], const uint64_t Xi[2]);
332
- void gcm_gmult_p8(uint64_t Xi[2], const u128 Htable[16]);
333
- void gcm_ghash_p8(uint64_t Xi[2], const u128 Htable[16], const uint8_t *inp,
334
- size_t len);
335
- #endif
336
- #endif
269
+ #endif // GHASH_ASM_X86_64 || GHASH_ASM_X86
337
270
 
338
271
  #ifdef GCM_FUNCREF_4BIT
339
272
  #undef GCM_MUL
340
- #define GCM_MUL(ctx, Xi) (*gcm_gmult_p)((ctx)->Xi.u, (ctx)->Htable)
341
- #ifdef GHASH
273
+ #define GCM_MUL(ctx, Xi) (*gcm_gmult_p)((ctx)->Xi.u, (ctx)->gcm_key.Htable)
342
274
  #undef GHASH
343
- #define GHASH(ctx, in, len) (*gcm_ghash_p)((ctx)->Xi.u, (ctx)->Htable, in, len)
344
- #endif
345
- #endif
275
+ #define GHASH(ctx, in, len) \
276
+ (*gcm_ghash_p)((ctx)->Xi.u, (ctx)->gcm_key.Htable, in, len)
277
+ #endif // GCM_FUNCREF_4BIT
346
278
 
347
279
  void CRYPTO_ghash_init(gmult_func *out_mult, ghash_func *out_hash,
348
- u128 *out_key, u128 out_table[16],
349
- int *out_is_avx,
350
- const uint8_t *gcm_key) {
280
+ u128 *out_key, u128 out_table[16], int *out_is_avx,
281
+ const uint8_t gcm_key[16]) {
351
282
  *out_is_avx = 0;
352
283
 
353
284
  union {
@@ -377,6 +308,12 @@ void CRYPTO_ghash_init(gmult_func *out_mult, ghash_func *out_hash,
377
308
  *out_hash = gcm_ghash_clmul;
378
309
  return;
379
310
  }
311
+ if (gcm_ssse3_capable()) {
312
+ gcm_init_ssse3(out_table, H.u);
313
+ *out_mult = gcm_gmult_ssse3;
314
+ *out_hash = gcm_ghash_ssse3;
315
+ return;
316
+ }
380
317
  #elif defined(GHASH_ASM_X86)
381
318
  if (crypto_gcm_clmul_enabled()) {
382
319
  gcm_init_clmul(out_table, H.u);
@@ -384,15 +321,21 @@ void CRYPTO_ghash_init(gmult_func *out_mult, ghash_func *out_hash,
384
321
  *out_hash = gcm_ghash_clmul;
385
322
  return;
386
323
  }
324
+ if (gcm_ssse3_capable()) {
325
+ gcm_init_ssse3(out_table, H.u);
326
+ *out_mult = gcm_gmult_ssse3;
327
+ *out_hash = gcm_ghash_ssse3;
328
+ return;
329
+ }
387
330
  #elif defined(GHASH_ASM_ARM)
388
- if (pmull_capable()) {
331
+ if (gcm_pmull_capable()) {
389
332
  gcm_init_v8(out_table, H.u);
390
333
  *out_mult = gcm_gmult_v8;
391
334
  *out_hash = gcm_ghash_v8;
392
335
  return;
393
336
  }
394
337
 
395
- if (neon_capable()) {
338
+ if (gcm_neon_capable()) {
396
339
  gcm_init_neon(out_table, H.u);
397
340
  *out_mult = gcm_gmult_neon;
398
341
  *out_hash = gcm_ghash_neon;
@@ -417,27 +360,27 @@ void CRYPTO_ghash_init(gmult_func *out_mult, ghash_func *out_hash,
417
360
  #endif
418
361
  }
419
362
 
420
- void CRYPTO_gcm128_init(GCM128_CONTEXT *ctx, const void *aes_key,
421
- block128_f block, int is_aesni_encrypt) {
422
- OPENSSL_memset(ctx, 0, sizeof(*ctx));
423
- ctx->block = block;
363
+ void CRYPTO_gcm128_init_key(GCM128_KEY *gcm_key, const AES_KEY *aes_key,
364
+ block128_f block, int block_is_hwaes) {
365
+ OPENSSL_memset(gcm_key, 0, sizeof(*gcm_key));
366
+ gcm_key->block = block;
424
367
 
425
- uint8_t gcm_key[16];
426
- OPENSSL_memset(gcm_key, 0, sizeof(gcm_key));
427
- (*block)(gcm_key, gcm_key, aes_key);
368
+ uint8_t ghash_key[16];
369
+ OPENSSL_memset(ghash_key, 0, sizeof(ghash_key));
370
+ (*block)(ghash_key, ghash_key, aes_key);
428
371
 
429
372
  int is_avx;
430
- CRYPTO_ghash_init(&ctx->gmult, &ctx->ghash, &ctx->H, ctx->Htable, &is_avx,
431
- gcm_key);
373
+ CRYPTO_ghash_init(&gcm_key->gmult, &gcm_key->ghash, &gcm_key->H,
374
+ gcm_key->Htable, &is_avx, ghash_key);
432
375
 
433
- ctx->use_aesni_gcm_crypt = (is_avx && is_aesni_encrypt) ? 1 : 0;
376
+ gcm_key->use_aesni_gcm_crypt = (is_avx && block_is_hwaes) ? 1 : 0;
434
377
  }
435
378
 
436
- void CRYPTO_gcm128_setiv(GCM128_CONTEXT *ctx, const void *key,
379
+ void CRYPTO_gcm128_setiv(GCM128_CONTEXT *ctx, const AES_KEY *key,
437
380
  const uint8_t *iv, size_t len) {
438
- unsigned int ctr;
439
381
  #ifdef GCM_FUNCREF_4BIT
440
- void (*gcm_gmult_p)(uint64_t Xi[2], const u128 Htable[16]) = ctx->gmult;
382
+ void (*gcm_gmult_p)(uint64_t Xi[2], const u128 Htable[16]) =
383
+ ctx->gcm_key.gmult;
441
384
  #endif
442
385
 
443
386
  ctx->Yi.u[0] = 0;
@@ -449,6 +392,7 @@ void CRYPTO_gcm128_setiv(GCM128_CONTEXT *ctx, const void *key,
449
392
  ctx->ares = 0;
450
393
  ctx->mres = 0;
451
394
 
395
+ uint32_t ctr;
452
396
  if (len == 12) {
453
397
  OPENSSL_memcpy(ctx->Yi.c, iv, 12);
454
398
  ctx->Yi.c[15] = 1;
@@ -477,19 +421,18 @@ void CRYPTO_gcm128_setiv(GCM128_CONTEXT *ctx, const void *key,
477
421
  ctr = CRYPTO_bswap4(ctx->Yi.d[3]);
478
422
  }
479
423
 
480
- (*ctx->block)(ctx->Yi.c, ctx->EK0.c, key);
424
+ (*ctx->gcm_key.block)(ctx->Yi.c, ctx->EK0.c, key);
481
425
  ++ctr;
482
426
  ctx->Yi.d[3] = CRYPTO_bswap4(ctr);
483
427
  }
484
428
 
485
429
  int CRYPTO_gcm128_aad(GCM128_CONTEXT *ctx, const uint8_t *aad, size_t len) {
486
- unsigned int n;
487
- uint64_t alen = ctx->len.u[0];
488
430
  #ifdef GCM_FUNCREF_4BIT
489
- void (*gcm_gmult_p)(uint64_t Xi[2], const u128 Htable[16]) = ctx->gmult;
431
+ void (*gcm_gmult_p)(uint64_t Xi[2], const u128 Htable[16]) =
432
+ ctx->gcm_key.gmult;
490
433
  #ifdef GHASH
491
434
  void (*gcm_ghash_p)(uint64_t Xi[2], const u128 Htable[16], const uint8_t *inp,
492
- size_t len) = ctx->ghash;
435
+ size_t len) = ctx->gcm_key.ghash;
493
436
  #endif
494
437
  #endif
495
438
 
@@ -497,13 +440,13 @@ int CRYPTO_gcm128_aad(GCM128_CONTEXT *ctx, const uint8_t *aad, size_t len) {
497
440
  return 0;
498
441
  }
499
442
 
500
- alen += len;
443
+ uint64_t alen = ctx->len.u[0] + len;
501
444
  if (alen > (UINT64_C(1) << 61) || (sizeof(len) == 8 && alen < len)) {
502
445
  return 0;
503
446
  }
504
447
  ctx->len.u[0] = alen;
505
448
 
506
- n = ctx->ares;
449
+ unsigned n = ctx->ares;
507
450
  if (n) {
508
451
  while (n && len) {
509
452
  ctx->Xi.c[n] ^= *(aad++);
@@ -519,23 +462,12 @@ int CRYPTO_gcm128_aad(GCM128_CONTEXT *ctx, const uint8_t *aad, size_t len) {
519
462
  }
520
463
 
521
464
  // Process a whole number of blocks.
522
- #ifdef GHASH
523
465
  size_t len_blocks = len & kSizeTWithoutLower4Bits;
524
466
  if (len_blocks != 0) {
525
467
  GHASH(ctx, aad, len_blocks);
526
468
  aad += len_blocks;
527
469
  len -= len_blocks;
528
470
  }
529
- #else
530
- while (len >= 16) {
531
- for (size_t i = 0; i < 16; ++i) {
532
- ctx->Xi.c[i] ^= aad[i];
533
- }
534
- GCM_MUL(ctx, Xi);
535
- aad += 16;
536
- len -= 16;
537
- }
538
- #endif
539
471
 
540
472
  // Process the remainder.
541
473
  if (len != 0) {
@@ -549,20 +481,17 @@ int CRYPTO_gcm128_aad(GCM128_CONTEXT *ctx, const uint8_t *aad, size_t len) {
549
481
  return 1;
550
482
  }
551
483
 
552
- int CRYPTO_gcm128_encrypt(GCM128_CONTEXT *ctx, const void *key,
484
+ int CRYPTO_gcm128_encrypt(GCM128_CONTEXT *ctx, const AES_KEY *key,
553
485
  const uint8_t *in, uint8_t *out, size_t len) {
554
- unsigned int n, ctr;
555
- uint64_t mlen = ctx->len.u[1];
556
- block128_f block = ctx->block;
486
+ block128_f block = ctx->gcm_key.block;
557
487
  #ifdef GCM_FUNCREF_4BIT
558
- void (*gcm_gmult_p)(uint64_t Xi[2], const u128 Htable[16]) = ctx->gmult;
559
- #ifdef GHASH
488
+ void (*gcm_gmult_p)(uint64_t Xi[2], const u128 Htable[16]) =
489
+ ctx->gcm_key.gmult;
560
490
  void (*gcm_ghash_p)(uint64_t Xi[2], const u128 Htable[16], const uint8_t *inp,
561
- size_t len) = ctx->ghash;
562
- #endif
491
+ size_t len) = ctx->gcm_key.ghash;
563
492
  #endif
564
493
 
565
- mlen += len;
494
+ uint64_t mlen = ctx->len.u[1] + len;
566
495
  if (mlen > ((UINT64_C(1) << 36) - 32) ||
567
496
  (sizeof(len) == 8 && mlen < len)) {
568
497
  return 0;
@@ -575,9 +504,7 @@ int CRYPTO_gcm128_encrypt(GCM128_CONTEXT *ctx, const void *key,
575
504
  ctx->ares = 0;
576
505
  }
577
506
 
578
- ctr = CRYPTO_bswap4(ctx->Yi.d[3]);
579
-
580
- n = ctx->mres;
507
+ unsigned n = ctx->mres;
581
508
  if (n) {
582
509
  while (n && len) {
583
510
  ctx->Xi.c[n] ^= *(out++) = *(in++) ^ ctx->EKi.c[n];
@@ -591,25 +518,8 @@ int CRYPTO_gcm128_encrypt(GCM128_CONTEXT *ctx, const void *key,
591
518
  return 1;
592
519
  }
593
520
  }
594
- if (STRICT_ALIGNMENT &&
595
- ((uintptr_t)in | (uintptr_t)out) % sizeof(size_t) != 0) {
596
- for (size_t i = 0; i < len; ++i) {
597
- if (n == 0) {
598
- (*block)(ctx->Yi.c, ctx->EKi.c, key);
599
- ++ctr;
600
- ctx->Yi.d[3] = CRYPTO_bswap4(ctr);
601
- }
602
- ctx->Xi.c[n] ^= out[i] = in[i] ^ ctx->EKi.c[n];
603
- n = (n + 1) % 16;
604
- if (n == 0) {
605
- GCM_MUL(ctx, Xi);
606
- }
607
- }
608
521
 
609
- ctx->mres = n;
610
- return 1;
611
- }
612
- #if defined(GHASH) && defined(GHASH_CHUNK)
522
+ uint32_t ctr = CRYPTO_bswap4(ctx->Yi.d[3]);
613
523
  while (len >= GHASH_CHUNK) {
614
524
  size_t j = GHASH_CHUNK;
615
525
 
@@ -644,22 +554,6 @@ int CRYPTO_gcm128_encrypt(GCM128_CONTEXT *ctx, const void *key,
644
554
  }
645
555
  GHASH(ctx, out - len_blocks, len_blocks);
646
556
  }
647
- #else
648
- while (len >= 16) {
649
- (*block)(ctx->Yi.c, ctx->EKi.c, key);
650
- ++ctr;
651
- ctx->Yi.d[3] = CRYPTO_bswap4(ctr);
652
- for (size_t i = 0; i < 16; i += sizeof(size_t)) {
653
- size_t tmp = load_word_le(in + i) ^ ctx->EKi.t[i / sizeof(size_t)];
654
- store_word_le(out + i, tmp);
655
- ctx->Xi.t[i / sizeof(size_t)] ^= tmp;
656
- }
657
- GCM_MUL(ctx, Xi);
658
- out += 16;
659
- in += 16;
660
- len -= 16;
661
- }
662
- #endif
663
557
  if (len) {
664
558
  (*block)(ctx->Yi.c, ctx->EKi.c, key);
665
559
  ++ctr;
@@ -674,21 +568,18 @@ int CRYPTO_gcm128_encrypt(GCM128_CONTEXT *ctx, const void *key,
674
568
  return 1;
675
569
  }
676
570
 
677
- int CRYPTO_gcm128_decrypt(GCM128_CONTEXT *ctx, const void *key,
571
+ int CRYPTO_gcm128_decrypt(GCM128_CONTEXT *ctx, const AES_KEY *key,
678
572
  const unsigned char *in, unsigned char *out,
679
573
  size_t len) {
680
- unsigned int n, ctr;
681
- uint64_t mlen = ctx->len.u[1];
682
- block128_f block = ctx->block;
574
+ block128_f block = ctx->gcm_key.block;
683
575
  #ifdef GCM_FUNCREF_4BIT
684
- void (*gcm_gmult_p)(uint64_t Xi[2], const u128 Htable[16]) = ctx->gmult;
685
- #ifdef GHASH
576
+ void (*gcm_gmult_p)(uint64_t Xi[2], const u128 Htable[16]) =
577
+ ctx->gcm_key.gmult;
686
578
  void (*gcm_ghash_p)(uint64_t Xi[2], const u128 Htable[16], const uint8_t *inp,
687
- size_t len) = ctx->ghash;
688
- #endif
579
+ size_t len) = ctx->gcm_key.ghash;
689
580
  #endif
690
581
 
691
- mlen += len;
582
+ uint64_t mlen = ctx->len.u[1] + len;
692
583
  if (mlen > ((UINT64_C(1) << 36) - 32) ||
693
584
  (sizeof(len) == 8 && mlen < len)) {
694
585
  return 0;
@@ -701,9 +592,7 @@ int CRYPTO_gcm128_decrypt(GCM128_CONTEXT *ctx, const void *key,
701
592
  ctx->ares = 0;
702
593
  }
703
594
 
704
- ctr = CRYPTO_bswap4(ctx->Yi.d[3]);
705
-
706
- n = ctx->mres;
595
+ unsigned n = ctx->mres;
707
596
  if (n) {
708
597
  while (n && len) {
709
598
  uint8_t c = *(in++);
@@ -719,28 +608,8 @@ int CRYPTO_gcm128_decrypt(GCM128_CONTEXT *ctx, const void *key,
719
608
  return 1;
720
609
  }
721
610
  }
722
- if (STRICT_ALIGNMENT &&
723
- ((uintptr_t)in | (uintptr_t)out) % sizeof(size_t) != 0) {
724
- for (size_t i = 0; i < len; ++i) {
725
- uint8_t c;
726
- if (n == 0) {
727
- (*block)(ctx->Yi.c, ctx->EKi.c, key);
728
- ++ctr;
729
- ctx->Yi.d[3] = CRYPTO_bswap4(ctr);
730
- }
731
- c = in[i];
732
- out[i] = c ^ ctx->EKi.c[n];
733
- ctx->Xi.c[n] ^= c;
734
- n = (n + 1) % 16;
735
- if (n == 0) {
736
- GCM_MUL(ctx, Xi);
737
- }
738
- }
739
611
 
740
- ctx->mres = n;
741
- return 1;
742
- }
743
- #if defined(GHASH) && defined(GHASH_CHUNK)
612
+ uint32_t ctr = CRYPTO_bswap4(ctx->Yi.d[3]);
744
613
  while (len >= GHASH_CHUNK) {
745
614
  size_t j = GHASH_CHUNK;
746
615
 
@@ -775,22 +644,6 @@ int CRYPTO_gcm128_decrypt(GCM128_CONTEXT *ctx, const void *key,
775
644
  len -= 16;
776
645
  }
777
646
  }
778
- #else
779
- while (len >= 16) {
780
- (*block)(ctx->Yi.c, ctx->EKi.c, key);
781
- ++ctr;
782
- ctx->Yi.d[3] = CRYPTO_bswap4(ctr);
783
- for (size_t i = 0; i < 16; i += sizeof(size_t)) {
784
- size_t c = load_word_le(in + i);
785
- store_word_le(out + i, c ^ ctx->EKi.t[i / sizeof(size_t)]);
786
- ctx->Xi.t[i / sizeof(size_t)] ^= c;
787
- }
788
- GCM_MUL(ctx, Xi);
789
- out += 16;
790
- in += 16;
791
- len -= 16;
792
- }
793
- #endif
794
647
  if (len) {
795
648
  (*block)(ctx->Yi.c, ctx->EKi.c, key);
796
649
  ++ctr;
@@ -807,20 +660,17 @@ int CRYPTO_gcm128_decrypt(GCM128_CONTEXT *ctx, const void *key,
807
660
  return 1;
808
661
  }
809
662
 
810
- int CRYPTO_gcm128_encrypt_ctr32(GCM128_CONTEXT *ctx, const void *key,
663
+ int CRYPTO_gcm128_encrypt_ctr32(GCM128_CONTEXT *ctx, const AES_KEY *key,
811
664
  const uint8_t *in, uint8_t *out, size_t len,
812
665
  ctr128_f stream) {
813
- unsigned int n, ctr;
814
- uint64_t mlen = ctx->len.u[1];
815
666
  #ifdef GCM_FUNCREF_4BIT
816
- void (*gcm_gmult_p)(uint64_t Xi[2], const u128 Htable[16]) = ctx->gmult;
817
- #ifdef GHASH
667
+ void (*gcm_gmult_p)(uint64_t Xi[2], const u128 Htable[16]) =
668
+ ctx->gcm_key.gmult;
818
669
  void (*gcm_ghash_p)(uint64_t Xi[2], const u128 Htable[16], const uint8_t *inp,
819
- size_t len) = ctx->ghash;
820
- #endif
670
+ size_t len) = ctx->gcm_key.ghash;
821
671
  #endif
822
672
 
823
- mlen += len;
673
+ uint64_t mlen = ctx->len.u[1] + len;
824
674
  if (mlen > ((UINT64_C(1) << 36) - 32) ||
825
675
  (sizeof(len) == 8 && mlen < len)) {
826
676
  return 0;
@@ -833,7 +683,7 @@ int CRYPTO_gcm128_encrypt_ctr32(GCM128_CONTEXT *ctx, const void *key,
833
683
  ctx->ares = 0;
834
684
  }
835
685
 
836
- n = ctx->mres;
686
+ unsigned n = ctx->mres;
837
687
  if (n) {
838
688
  while (n && len) {
839
689
  ctx->Xi.c[n] ^= *(out++) = *(in++) ^ ctx->EKi.c[n];
@@ -849,7 +699,7 @@ int CRYPTO_gcm128_encrypt_ctr32(GCM128_CONTEXT *ctx, const void *key,
849
699
  }
850
700
 
851
701
  #if defined(AESNI_GCM)
852
- if (ctx->use_aesni_gcm_crypt) {
702
+ if (ctx->gcm_key.use_aesni_gcm_crypt) {
853
703
  // |aesni_gcm_encrypt| may not process all the input given to it. It may
854
704
  // not process *any* of its input if it is deemed too small.
855
705
  size_t bulk = aesni_gcm_encrypt(in, out, len, key, ctx->Yi.c, ctx->Xi.u);
@@ -859,9 +709,7 @@ int CRYPTO_gcm128_encrypt_ctr32(GCM128_CONTEXT *ctx, const void *key,
859
709
  }
860
710
  #endif
861
711
 
862
- ctr = CRYPTO_bswap4(ctx->Yi.d[3]);
863
-
864
- #if defined(GHASH)
712
+ uint32_t ctr = CRYPTO_bswap4(ctx->Yi.d[3]);
865
713
  while (len >= GHASH_CHUNK) {
866
714
  (*stream)(in, out, GHASH_CHUNK / 16, key, ctx->Yi.c);
867
715
  ctr += GHASH_CHUNK / 16;
@@ -871,31 +719,20 @@ int CRYPTO_gcm128_encrypt_ctr32(GCM128_CONTEXT *ctx, const void *key,
871
719
  in += GHASH_CHUNK;
872
720
  len -= GHASH_CHUNK;
873
721
  }
874
- #endif
875
- size_t i = len & kSizeTWithoutLower4Bits;
876
- if (i != 0) {
877
- size_t j = i / 16;
722
+ size_t len_blocks = len & kSizeTWithoutLower4Bits;
723
+ if (len_blocks != 0) {
724
+ size_t j = len_blocks / 16;
878
725
 
879
726
  (*stream)(in, out, j, key, ctx->Yi.c);
880
727
  ctr += (unsigned int)j;
881
728
  ctx->Yi.d[3] = CRYPTO_bswap4(ctr);
882
- in += i;
883
- len -= i;
884
- #if defined(GHASH)
885
- GHASH(ctx, out, i);
886
- out += i;
887
- #else
888
- while (j--) {
889
- for (i = 0; i < 16; ++i) {
890
- ctx->Xi.c[i] ^= out[i];
891
- }
892
- GCM_MUL(ctx, Xi);
893
- out += 16;
894
- }
895
- #endif
729
+ in += len_blocks;
730
+ len -= len_blocks;
731
+ GHASH(ctx, out, len_blocks);
732
+ out += len_blocks;
896
733
  }
897
734
  if (len) {
898
- (*ctx->block)(ctx->Yi.c, ctx->EKi.c, key);
735
+ (*ctx->gcm_key.block)(ctx->Yi.c, ctx->EKi.c, key);
899
736
  ++ctr;
900
737
  ctx->Yi.d[3] = CRYPTO_bswap4(ctr);
901
738
  while (len--) {
@@ -908,20 +745,17 @@ int CRYPTO_gcm128_encrypt_ctr32(GCM128_CONTEXT *ctx, const void *key,
908
745
  return 1;
909
746
  }
910
747
 
911
- int CRYPTO_gcm128_decrypt_ctr32(GCM128_CONTEXT *ctx, const void *key,
748
+ int CRYPTO_gcm128_decrypt_ctr32(GCM128_CONTEXT *ctx, const AES_KEY *key,
912
749
  const uint8_t *in, uint8_t *out, size_t len,
913
750
  ctr128_f stream) {
914
- unsigned int n, ctr;
915
- uint64_t mlen = ctx->len.u[1];
916
751
  #ifdef GCM_FUNCREF_4BIT
917
- void (*gcm_gmult_p)(uint64_t Xi[2], const u128 Htable[16]) = ctx->gmult;
918
- #ifdef GHASH
752
+ void (*gcm_gmult_p)(uint64_t Xi[2], const u128 Htable[16]) =
753
+ ctx->gcm_key.gmult;
919
754
  void (*gcm_ghash_p)(uint64_t Xi[2], const u128 Htable[16], const uint8_t *inp,
920
- size_t len) = ctx->ghash;
921
- #endif
755
+ size_t len) = ctx->gcm_key.ghash;
922
756
  #endif
923
757
 
924
- mlen += len;
758
+ uint64_t mlen = ctx->len.u[1] + len;
925
759
  if (mlen > ((UINT64_C(1) << 36) - 32) ||
926
760
  (sizeof(len) == 8 && mlen < len)) {
927
761
  return 0;
@@ -934,7 +768,7 @@ int CRYPTO_gcm128_decrypt_ctr32(GCM128_CONTEXT *ctx, const void *key,
934
768
  ctx->ares = 0;
935
769
  }
936
770
 
937
- n = ctx->mres;
771
+ unsigned n = ctx->mres;
938
772
  if (n) {
939
773
  while (n && len) {
940
774
  uint8_t c = *(in++);
@@ -952,7 +786,7 @@ int CRYPTO_gcm128_decrypt_ctr32(GCM128_CONTEXT *ctx, const void *key,
952
786
  }
953
787
 
954
788
  #if defined(AESNI_GCM)
955
- if (ctx->use_aesni_gcm_crypt) {
789
+ if (ctx->gcm_key.use_aesni_gcm_crypt) {
956
790
  // |aesni_gcm_decrypt| may not process all the input given to it. It may
957
791
  // not process *any* of its input if it is deemed too small.
958
792
  size_t bulk = aesni_gcm_decrypt(in, out, len, key, ctx->Yi.c, ctx->Xi.u);
@@ -962,9 +796,7 @@ int CRYPTO_gcm128_decrypt_ctr32(GCM128_CONTEXT *ctx, const void *key,
962
796
  }
963
797
  #endif
964
798
 
965
- ctr = CRYPTO_bswap4(ctx->Yi.d[3]);
966
-
967
- #if defined(GHASH)
799
+ uint32_t ctr = CRYPTO_bswap4(ctx->Yi.d[3]);
968
800
  while (len >= GHASH_CHUNK) {
969
801
  GHASH(ctx, in, GHASH_CHUNK);
970
802
  (*stream)(in, out, GHASH_CHUNK / 16, key, ctx->Yi.c);
@@ -974,34 +806,20 @@ int CRYPTO_gcm128_decrypt_ctr32(GCM128_CONTEXT *ctx, const void *key,
974
806
  in += GHASH_CHUNK;
975
807
  len -= GHASH_CHUNK;
976
808
  }
977
- #endif
978
- size_t i = len & kSizeTWithoutLower4Bits;
979
- if (i != 0) {
980
- size_t j = i / 16;
809
+ size_t len_blocks = len & kSizeTWithoutLower4Bits;
810
+ if (len_blocks != 0) {
811
+ size_t j = len_blocks / 16;
981
812
 
982
- #if defined(GHASH)
983
- GHASH(ctx, in, i);
984
- #else
985
- while (j--) {
986
- size_t k;
987
- for (k = 0; k < 16; ++k) {
988
- ctx->Xi.c[k] ^= in[k];
989
- }
990
- GCM_MUL(ctx, Xi);
991
- in += 16;
992
- }
993
- j = i / 16;
994
- in -= i;
995
- #endif
813
+ GHASH(ctx, in, len_blocks);
996
814
  (*stream)(in, out, j, key, ctx->Yi.c);
997
815
  ctr += (unsigned int)j;
998
816
  ctx->Yi.d[3] = CRYPTO_bswap4(ctr);
999
- out += i;
1000
- in += i;
1001
- len -= i;
817
+ out += len_blocks;
818
+ in += len_blocks;
819
+ len -= len_blocks;
1002
820
  }
1003
821
  if (len) {
1004
- (*ctx->block)(ctx->Yi.c, ctx->EKi.c, key);
822
+ (*ctx->gcm_key.block)(ctx->Yi.c, ctx->EKi.c, key);
1005
823
  ++ctr;
1006
824
  ctx->Yi.d[3] = CRYPTO_bswap4(ctr);
1007
825
  while (len--) {
@@ -1017,21 +835,17 @@ int CRYPTO_gcm128_decrypt_ctr32(GCM128_CONTEXT *ctx, const void *key,
1017
835
  }
1018
836
 
1019
837
  int CRYPTO_gcm128_finish(GCM128_CONTEXT *ctx, const uint8_t *tag, size_t len) {
1020
- uint64_t alen = ctx->len.u[0] << 3;
1021
- uint64_t clen = ctx->len.u[1] << 3;
1022
838
  #ifdef GCM_FUNCREF_4BIT
1023
- void (*gcm_gmult_p)(uint64_t Xi[2], const u128 Htable[16]) = ctx->gmult;
839
+ void (*gcm_gmult_p)(uint64_t Xi[2], const u128 Htable[16]) =
840
+ ctx->gcm_key.gmult;
1024
841
  #endif
1025
842
 
1026
843
  if (ctx->mres || ctx->ares) {
1027
844
  GCM_MUL(ctx, Xi);
1028
845
  }
1029
846
 
1030
- alen = CRYPTO_bswap8(alen);
1031
- clen = CRYPTO_bswap8(clen);
1032
-
1033
- ctx->Xi.u[0] ^= alen;
1034
- ctx->Xi.u[1] ^= clen;
847
+ ctx->Xi.u[0] ^= CRYPTO_bswap8(ctx->len.u[0] << 3);
848
+ ctx->Xi.u[1] ^= CRYPTO_bswap8(ctx->len.u[1] << 3);
1035
849
  GCM_MUL(ctx, Xi);
1036
850
 
1037
851
  ctx->Xi.u[0] ^= ctx->EK0.u[0];