grpc 1.24.0 → 1.25.0

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

Potentially problematic release.


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

Files changed (505) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +306 -243
  3. data/etc/roots.pem +0 -100
  4. data/include/grpc/grpc_security.h +44 -18
  5. data/include/grpc/impl/codegen/grpc_types.h +15 -0
  6. data/include/grpc/impl/codegen/port_platform.h +27 -11
  7. data/include/grpc/impl/codegen/sync_generic.h +1 -1
  8. data/src/boringssl/err_data.c +695 -650
  9. data/src/core/ext/filters/client_channel/client_channel.cc +257 -179
  10. data/src/core/ext/filters/client_channel/client_channel.h +24 -0
  11. data/src/core/ext/filters/client_channel/client_channel_channelz.cc +2 -3
  12. data/src/core/ext/filters/client_channel/client_channel_factory.h +1 -5
  13. data/src/core/ext/filters/client_channel/health/health_check_client.cc +18 -45
  14. data/src/core/ext/filters/client_channel/health/health_check_client.h +5 -13
  15. data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +1 -1
  16. data/src/core/ext/filters/client_channel/lb_policy.cc +2 -3
  17. data/src/core/ext/filters/client_channel/lb_policy.h +65 -55
  18. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +14 -14
  19. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +113 -36
  20. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +14 -19
  21. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +36 -13
  22. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +3 -10
  23. data/src/core/ext/filters/client_channel/lb_policy/xds/xds.cc +814 -1589
  24. data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +2 -5
  25. data/src/core/ext/filters/client_channel/lb_policy_factory.h +3 -6
  26. data/src/core/ext/filters/client_channel/resolver.cc +1 -2
  27. data/src/core/ext/filters/client_channel/resolver.h +8 -16
  28. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +25 -8
  29. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.cc +46 -12
  30. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +10 -17
  31. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_libuv.cc +7 -8
  32. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +4 -4
  33. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +111 -44
  34. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +22 -14
  35. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +1 -1
  36. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.cc +2 -2
  37. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +29 -10
  38. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +27 -36
  39. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +7 -10
  40. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +60 -16
  41. data/src/core/ext/filters/client_channel/resolver_factory.h +4 -8
  42. data/src/core/ext/filters/client_channel/resolver_registry.cc +1 -1
  43. data/src/core/ext/filters/client_channel/resolver_registry.h +1 -1
  44. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +7 -10
  45. data/src/core/ext/filters/client_channel/resolving_lb_policy.cc +7 -8
  46. data/src/core/ext/filters/client_channel/resolving_lb_policy.h +1 -1
  47. data/src/core/ext/filters/client_channel/retry_throttle.cc +5 -5
  48. data/src/core/ext/filters/client_channel/retry_throttle.h +1 -4
  49. data/src/core/ext/filters/client_channel/service_config.h +8 -8
  50. data/src/core/ext/filters/client_channel/subchannel.cc +53 -86
  51. data/src/core/ext/filters/client_channel/subchannel.h +7 -9
  52. data/src/core/ext/filters/client_channel/subchannel_interface.h +9 -13
  53. data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +3 -6
  54. data/src/core/ext/filters/client_channel/{lb_policy/xds/xds_load_balancer_api.cc → xds/xds_api.cc} +169 -52
  55. data/src/core/ext/filters/client_channel/xds/xds_api.h +171 -0
  56. data/src/core/ext/filters/client_channel/xds/xds_bootstrap.cc +450 -0
  57. data/src/core/ext/filters/client_channel/xds/xds_bootstrap.h +99 -0
  58. data/src/core/ext/filters/client_channel/{lb_policy/xds → xds}/xds_channel.h +8 -6
  59. data/src/core/ext/filters/client_channel/xds/xds_channel_args.h +26 -0
  60. data/src/core/ext/filters/client_channel/{lb_policy/xds → xds}/xds_channel_secure.cc +28 -11
  61. data/src/core/ext/filters/client_channel/xds/xds_client.cc +1413 -0
  62. data/src/core/ext/filters/client_channel/xds/xds_client.h +221 -0
  63. data/src/core/ext/filters/client_channel/{lb_policy/xds → xds}/xds_client_stats.cc +1 -5
  64. data/src/core/ext/filters/client_channel/{lb_policy/xds → xds}/xds_client_stats.h +3 -4
  65. data/src/core/ext/filters/deadline/deadline_filter.cc +20 -20
  66. data/src/core/ext/filters/http/client/http_client_filter.cc +15 -15
  67. data/src/core/ext/filters/http/client_authority_filter.cc +14 -14
  68. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +12 -12
  69. data/src/core/ext/filters/max_age/max_age_filter.cc +59 -50
  70. data/src/core/ext/filters/message_size/message_size_filter.cc +18 -18
  71. data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc +15 -14
  72. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +233 -175
  73. data/src/core/ext/transport/chttp2/transport/flow_control.h +21 -24
  74. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +253 -163
  75. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +24 -12
  76. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +2 -3
  77. data/src/core/ext/transport/chttp2/transport/internal.h +13 -15
  78. data/src/core/ext/transport/chttp2/transport/writing.cc +3 -0
  79. data/src/core/ext/transport/inproc/inproc_transport.cc +20 -13
  80. data/src/core/lib/channel/channel_args.cc +16 -0
  81. data/src/core/lib/channel/channel_args.h +22 -0
  82. data/src/core/lib/channel/channelz.cc +5 -6
  83. data/src/core/lib/channel/channelz.h +1 -1
  84. data/src/core/lib/channel/connected_channel.cc +20 -20
  85. data/src/core/lib/channel/handshaker.h +3 -4
  86. data/src/core/lib/channel/handshaker_factory.h +1 -3
  87. data/src/core/lib/debug/trace.h +3 -2
  88. data/src/core/lib/gprpp/arena.cc +3 -3
  89. data/src/core/lib/gprpp/arena.h +2 -3
  90. data/src/core/lib/gprpp/inlined_vector.h +9 -0
  91. data/src/core/lib/gprpp/map.h +3 -501
  92. data/src/core/lib/gprpp/memory.h +45 -41
  93. data/src/core/lib/gprpp/mpscq.cc +108 -0
  94. data/src/core/lib/gprpp/mpscq.h +98 -0
  95. data/src/core/lib/gprpp/orphanable.h +6 -11
  96. data/src/core/lib/gprpp/ref_counted.h +25 -19
  97. data/src/core/lib/gprpp/set.h +33 -0
  98. data/src/core/lib/gprpp/thd.h +2 -4
  99. data/src/core/lib/http/httpcli.cc +1 -1
  100. data/src/core/lib/http/httpcli_security_connector.cc +15 -11
  101. data/src/core/lib/http/parser.cc +1 -1
  102. data/src/core/lib/iomgr/buffer_list.cc +4 -5
  103. data/src/core/lib/iomgr/buffer_list.h +5 -6
  104. data/src/core/lib/iomgr/call_combiner.cc +4 -5
  105. data/src/core/lib/iomgr/call_combiner.h +2 -2
  106. data/src/core/lib/iomgr/cfstream_handle.h +3 -5
  107. data/src/core/lib/iomgr/closure.h +8 -3
  108. data/src/core/lib/iomgr/combiner.cc +45 -82
  109. data/src/core/lib/iomgr/combiner.h +32 -8
  110. data/src/core/lib/iomgr/endpoint_cfstream.cc +5 -3
  111. data/src/core/lib/iomgr/ev_epoll1_linux.cc +19 -15
  112. data/src/core/lib/iomgr/ev_poll_posix.cc +3 -1
  113. data/src/core/lib/iomgr/exec_ctx.h +4 -3
  114. data/src/core/lib/iomgr/executor.cc +4 -2
  115. data/src/core/lib/iomgr/executor.h +3 -0
  116. data/src/core/lib/iomgr/executor/mpmcqueue.h +3 -6
  117. data/src/core/lib/iomgr/executor/threadpool.cc +1 -2
  118. data/src/core/lib/iomgr/executor/threadpool.h +7 -11
  119. data/src/core/lib/iomgr/resource_quota.cc +55 -51
  120. data/src/core/lib/iomgr/resource_quota.h +13 -9
  121. data/src/core/lib/iomgr/socket_utils_common_posix.cc +13 -0
  122. data/src/core/lib/iomgr/socket_utils_posix.h +4 -0
  123. data/src/core/lib/iomgr/tcp_client_posix.cc +4 -11
  124. data/src/core/lib/iomgr/tcp_custom.cc +9 -7
  125. data/src/core/lib/iomgr/tcp_posix.cc +20 -16
  126. data/src/core/lib/iomgr/tcp_server.h +1 -4
  127. data/src/core/lib/iomgr/tcp_server_custom.cc +5 -5
  128. data/src/core/lib/iomgr/tcp_server_posix.cc +1 -1
  129. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +2 -11
  130. data/src/core/lib/iomgr/timer_custom.cc +2 -2
  131. data/src/core/lib/iomgr/udp_server.cc +3 -2
  132. data/src/core/lib/iomgr/udp_server.h +6 -12
  133. data/src/core/lib/json/json.h +1 -1
  134. data/src/core/lib/json/json_string.cc +2 -2
  135. data/src/core/lib/profiling/basic_timers.cc +2 -2
  136. data/src/core/lib/security/credentials/alts/alts_credentials.cc +2 -2
  137. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc +1 -1
  138. data/src/core/lib/security/credentials/credentials.h +4 -20
  139. data/src/core/lib/security/credentials/fake/fake_credentials.cc +4 -4
  140. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +1 -3
  141. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +64 -0
  142. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +4 -4
  143. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +9 -7
  144. data/src/core/lib/security/security_connector/load_system_roots_linux.cc +2 -0
  145. data/src/core/lib/security/security_connector/local/local_security_connector.cc +4 -4
  146. data/src/core/lib/security/security_connector/security_connector.cc +1 -0
  147. data/src/core/lib/security/security_connector/security_connector.h +19 -17
  148. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +8 -5
  149. data/src/core/lib/security/security_connector/ssl_utils.cc +2 -2
  150. data/src/core/lib/security/security_connector/ssl_utils.h +1 -1
  151. data/src/core/lib/security/security_connector/tls/spiffe_security_connector.cc +14 -6
  152. data/src/core/lib/security/security_connector/tls/spiffe_security_connector.h +4 -2
  153. data/src/core/lib/security/transport/client_auth_filter.cc +17 -17
  154. data/src/core/lib/security/transport/security_handshaker.cc +29 -13
  155. data/src/core/lib/security/transport/security_handshaker.h +4 -2
  156. data/src/core/lib/security/transport/server_auth_filter.cc +14 -14
  157. data/src/core/lib/slice/slice.cc +2 -10
  158. data/src/core/lib/slice/slice_hash_table.h +4 -6
  159. data/src/core/lib/slice/slice_intern.cc +42 -39
  160. data/src/core/lib/slice/slice_internal.h +3 -3
  161. data/src/core/lib/slice/slice_utils.h +21 -4
  162. data/src/core/lib/slice/slice_weak_hash_table.h +4 -6
  163. data/src/core/lib/surface/call.cc +3 -3
  164. data/src/core/lib/surface/channel.cc +7 -0
  165. data/src/core/lib/surface/completion_queue.cc +12 -11
  166. data/src/core/lib/surface/completion_queue.h +4 -2
  167. data/src/core/lib/surface/init.cc +1 -0
  168. data/src/core/lib/surface/lame_client.cc +33 -18
  169. data/src/core/lib/surface/server.cc +77 -76
  170. data/src/core/lib/surface/version.cc +1 -1
  171. data/src/core/lib/transport/byte_stream.h +3 -7
  172. data/src/core/lib/transport/connectivity_state.cc +112 -98
  173. data/src/core/lib/transport/connectivity_state.h +100 -50
  174. data/src/core/lib/transport/static_metadata.cc +276 -288
  175. data/src/core/lib/transport/static_metadata.h +73 -76
  176. data/src/core/lib/transport/status_conversion.cc +1 -1
  177. data/src/core/lib/transport/status_metadata.cc +1 -1
  178. data/src/core/lib/transport/transport.cc +2 -2
  179. data/src/core/lib/transport/transport.h +12 -4
  180. data/src/core/lib/transport/transport_op_string.cc +14 -11
  181. data/src/core/tsi/alts/frame_protector/alts_unseal_privacy_integrity_crypter.cc +1 -1
  182. data/src/core/tsi/alts/handshaker/alts_shared_resource.cc +1 -1
  183. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +5 -5
  184. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +12 -2
  185. data/src/core/tsi/fake_transport_security.cc +7 -5
  186. data/src/core/tsi/grpc_shadow_boringssl.h +2918 -2627
  187. data/src/core/tsi/local_transport_security.cc +8 -6
  188. data/src/core/tsi/ssl/session_cache/ssl_session.h +1 -3
  189. data/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc +1 -2
  190. data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +7 -5
  191. data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +4 -6
  192. data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +1 -2
  193. data/src/core/tsi/ssl_transport_security.cc +12 -12
  194. data/src/core/tsi/ssl_transport_security.h +2 -2
  195. data/src/core/tsi/transport_security_grpc.cc +7 -0
  196. data/src/core/tsi/transport_security_grpc.h +6 -0
  197. data/src/ruby/ext/grpc/extconf.rb +1 -0
  198. data/src/ruby/ext/grpc/rb_call.c +1 -1
  199. data/src/ruby/ext/grpc/rb_channel.c +1 -1
  200. data/src/ruby/lib/grpc/generic/bidi_call.rb +1 -1
  201. data/src/ruby/lib/grpc/generic/rpc_server.rb +1 -1
  202. data/src/ruby/lib/grpc/version.rb +1 -1
  203. data/src/ruby/spec/google_rpc_status_utils_spec.rb +2 -2
  204. data/third_party/boringssl/crypto/asn1/a_bool.c +18 -5
  205. data/third_party/boringssl/crypto/asn1/a_d2i_fp.c +17 -221
  206. data/third_party/boringssl/crypto/asn1/a_dup.c +0 -24
  207. data/third_party/boringssl/crypto/asn1/a_enum.c +2 -2
  208. data/third_party/boringssl/crypto/asn1/a_i2d_fp.c +10 -72
  209. data/third_party/boringssl/crypto/asn1/a_int.c +12 -71
  210. data/third_party/boringssl/crypto/asn1/a_mbstr.c +110 -216
  211. data/third_party/boringssl/crypto/asn1/a_object.c +16 -5
  212. data/third_party/boringssl/crypto/asn1/a_strnid.c +1 -0
  213. data/third_party/boringssl/crypto/asn1/asn1_lib.c +5 -1
  214. data/third_party/boringssl/crypto/asn1/tasn_enc.c +3 -1
  215. data/third_party/boringssl/crypto/base64/base64.c +2 -2
  216. data/third_party/boringssl/crypto/bio/bio.c +73 -9
  217. data/third_party/boringssl/crypto/bio/connect.c +4 -0
  218. data/third_party/boringssl/crypto/bio/fd.c +4 -0
  219. data/third_party/boringssl/crypto/bio/file.c +5 -2
  220. data/third_party/boringssl/crypto/bio/socket.c +4 -0
  221. data/third_party/boringssl/crypto/bio/socket_helper.c +4 -0
  222. data/third_party/boringssl/crypto/bn_extra/convert.c +11 -7
  223. data/third_party/boringssl/crypto/bytestring/ber.c +8 -4
  224. data/third_party/boringssl/crypto/bytestring/cbb.c +19 -7
  225. data/third_party/boringssl/crypto/bytestring/cbs.c +28 -15
  226. data/third_party/boringssl/crypto/bytestring/internal.h +28 -7
  227. data/third_party/boringssl/crypto/bytestring/unicode.c +155 -0
  228. data/third_party/boringssl/crypto/chacha/chacha.c +36 -19
  229. data/third_party/boringssl/crypto/chacha/internal.h +45 -0
  230. data/third_party/boringssl/crypto/cipher_extra/cipher_extra.c +29 -0
  231. data/third_party/boringssl/crypto/cipher_extra/e_aesccm.c +269 -25
  232. data/third_party/boringssl/crypto/cipher_extra/e_aesctrhmac.c +16 -14
  233. data/third_party/boringssl/crypto/cipher_extra/e_aesgcmsiv.c +54 -38
  234. data/third_party/boringssl/crypto/cipher_extra/e_chacha20poly1305.c +133 -41
  235. data/third_party/boringssl/crypto/cipher_extra/e_tls.c +23 -15
  236. data/third_party/boringssl/crypto/cipher_extra/tls_cbc.c +24 -15
  237. data/third_party/boringssl/crypto/cmac/cmac.c +62 -25
  238. data/third_party/boringssl/crypto/conf/conf.c +7 -0
  239. data/third_party/boringssl/crypto/cpu-arm-linux.c +4 -148
  240. data/third_party/boringssl/crypto/cpu-arm-linux.h +201 -0
  241. data/third_party/boringssl/crypto/cpu-intel.c +45 -51
  242. data/third_party/boringssl/crypto/crypto.c +39 -22
  243. data/third_party/boringssl/crypto/curve25519/spake25519.c +1 -1
  244. data/third_party/boringssl/crypto/dsa/dsa.c +77 -53
  245. data/third_party/boringssl/crypto/ec_extra/ec_asn1.c +20 -8
  246. data/third_party/boringssl/crypto/ec_extra/ec_derive.c +96 -0
  247. data/third_party/boringssl/crypto/{ecdh/ecdh.c → ecdh_extra/ecdh_extra.c} +20 -58
  248. data/third_party/boringssl/crypto/ecdsa_extra/ecdsa_asn1.c +1 -9
  249. data/third_party/boringssl/crypto/engine/engine.c +2 -1
  250. data/third_party/boringssl/crypto/err/err.c +2 -0
  251. data/third_party/boringssl/crypto/err/internal.h +2 -2
  252. data/third_party/boringssl/crypto/evp/evp.c +89 -8
  253. data/third_party/boringssl/crypto/evp/evp_asn1.c +56 -5
  254. data/third_party/boringssl/crypto/evp/evp_ctx.c +52 -14
  255. data/third_party/boringssl/crypto/evp/internal.h +18 -1
  256. data/third_party/boringssl/crypto/evp/p_dsa_asn1.c +5 -0
  257. data/third_party/boringssl/crypto/evp/p_ec.c +51 -3
  258. data/third_party/boringssl/crypto/evp/p_ec_asn1.c +6 -7
  259. data/third_party/boringssl/crypto/evp/p_ed25519.c +36 -3
  260. data/third_party/boringssl/crypto/evp/p_ed25519_asn1.c +76 -45
  261. data/third_party/boringssl/crypto/evp/p_rsa.c +3 -1
  262. data/third_party/boringssl/crypto/evp/p_rsa_asn1.c +5 -0
  263. data/third_party/boringssl/crypto/evp/p_x25519.c +110 -0
  264. data/third_party/boringssl/crypto/evp/p_x25519_asn1.c +249 -0
  265. data/third_party/boringssl/crypto/evp/scrypt.c +6 -2
  266. data/third_party/boringssl/crypto/fipsmodule/aes/aes.c +34 -274
  267. data/third_party/boringssl/crypto/fipsmodule/aes/internal.h +161 -21
  268. data/third_party/boringssl/crypto/fipsmodule/aes/key_wrap.c +111 -13
  269. data/third_party/boringssl/crypto/fipsmodule/aes/mode_wrappers.c +17 -21
  270. data/third_party/boringssl/crypto/fipsmodule/bcm.c +119 -7
  271. data/third_party/boringssl/crypto/fipsmodule/bn/bn.c +19 -2
  272. data/third_party/boringssl/crypto/fipsmodule/bn/cmp.c +2 -2
  273. data/third_party/boringssl/crypto/fipsmodule/bn/ctx.c +93 -160
  274. data/third_party/boringssl/crypto/fipsmodule/bn/div.c +48 -57
  275. data/third_party/boringssl/crypto/fipsmodule/bn/div_extra.c +87 -0
  276. data/third_party/boringssl/crypto/fipsmodule/bn/exponentiation.c +143 -211
  277. data/third_party/boringssl/crypto/fipsmodule/bn/gcd.c +0 -305
  278. data/third_party/boringssl/crypto/fipsmodule/bn/gcd_extra.c +325 -0
  279. data/third_party/boringssl/crypto/fipsmodule/bn/internal.h +168 -50
  280. data/third_party/boringssl/crypto/fipsmodule/bn/montgomery.c +68 -92
  281. data/third_party/boringssl/crypto/fipsmodule/bn/montgomery_inv.c +7 -6
  282. data/third_party/boringssl/crypto/fipsmodule/bn/mul.c +11 -14
  283. data/third_party/boringssl/crypto/fipsmodule/bn/prime.c +358 -443
  284. data/third_party/boringssl/crypto/fipsmodule/bn/random.c +25 -35
  285. data/third_party/boringssl/crypto/fipsmodule/bn/rsaz_exp.c +20 -25
  286. data/third_party/boringssl/crypto/fipsmodule/bn/rsaz_exp.h +76 -5
  287. data/third_party/boringssl/crypto/fipsmodule/bn/shift.c +14 -14
  288. data/third_party/boringssl/crypto/fipsmodule/cipher/cipher.c +7 -2
  289. data/third_party/boringssl/crypto/fipsmodule/cipher/e_aes.c +383 -516
  290. data/third_party/boringssl/crypto/fipsmodule/cipher/e_des.c +4 -0
  291. data/third_party/boringssl/crypto/fipsmodule/cipher/internal.h +3 -4
  292. data/third_party/boringssl/crypto/fipsmodule/delocate.h +3 -2
  293. data/third_party/boringssl/crypto/fipsmodule/digest/digest.c +32 -17
  294. data/third_party/boringssl/crypto/fipsmodule/digest/md32_common.h +3 -3
  295. data/third_party/boringssl/crypto/fipsmodule/ec/ec.c +228 -122
  296. data/third_party/boringssl/crypto/fipsmodule/ec/ec_key.c +34 -8
  297. data/third_party/boringssl/crypto/fipsmodule/ec/ec_montgomery.c +311 -98
  298. data/third_party/boringssl/crypto/fipsmodule/ec/felem.c +82 -0
  299. data/third_party/boringssl/crypto/fipsmodule/ec/internal.h +263 -97
  300. data/third_party/boringssl/crypto/fipsmodule/ec/oct.c +22 -59
  301. data/third_party/boringssl/crypto/fipsmodule/ec/p224-64.c +317 -234
  302. data/third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64-table.h +9473 -9475
  303. data/third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64.c +313 -109
  304. data/third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64.h +36 -0
  305. data/third_party/boringssl/crypto/fipsmodule/ec/scalar.c +96 -0
  306. data/third_party/boringssl/crypto/fipsmodule/ec/simple.c +126 -792
  307. data/third_party/boringssl/crypto/fipsmodule/ec/simple_mul.c +84 -0
  308. data/third_party/boringssl/crypto/fipsmodule/ec/util.c +163 -12
  309. data/third_party/boringssl/crypto/fipsmodule/ec/wnaf.c +84 -211
  310. data/third_party/boringssl/crypto/fipsmodule/ecdh/ecdh.c +122 -0
  311. data/third_party/boringssl/crypto/fipsmodule/ecdsa/ecdsa.c +60 -205
  312. data/third_party/boringssl/crypto/fipsmodule/fips_shared_support.c +32 -0
  313. data/third_party/boringssl/crypto/fipsmodule/is_fips.c +2 -0
  314. data/third_party/boringssl/crypto/fipsmodule/md4/md4.c +3 -1
  315. data/third_party/boringssl/crypto/fipsmodule/md5/internal.h +37 -0
  316. data/third_party/boringssl/crypto/fipsmodule/md5/md5.c +11 -8
  317. data/third_party/boringssl/crypto/fipsmodule/modes/cbc.c +35 -79
  318. data/third_party/boringssl/crypto/fipsmodule/modes/cfb.c +7 -39
  319. data/third_party/boringssl/crypto/fipsmodule/modes/ctr.c +7 -27
  320. data/third_party/boringssl/crypto/fipsmodule/modes/gcm.c +123 -309
  321. data/third_party/boringssl/crypto/fipsmodule/modes/internal.h +189 -126
  322. data/third_party/boringssl/crypto/fipsmodule/modes/ofb.c +3 -2
  323. data/third_party/boringssl/crypto/fipsmodule/rand/ctrdrbg.c +2 -2
  324. data/third_party/boringssl/crypto/fipsmodule/rand/internal.h +35 -0
  325. data/third_party/boringssl/crypto/fipsmodule/rand/rand.c +24 -19
  326. data/third_party/boringssl/crypto/fipsmodule/rand/urandom.c +256 -77
  327. data/third_party/boringssl/crypto/fipsmodule/rsa/padding.c +10 -7
  328. data/third_party/boringssl/crypto/fipsmodule/rsa/rsa.c +5 -1
  329. data/third_party/boringssl/crypto/fipsmodule/rsa/rsa_impl.c +131 -14
  330. data/third_party/boringssl/crypto/fipsmodule/self_check/self_check.c +83 -10
  331. data/third_party/boringssl/crypto/fipsmodule/sha/internal.h +53 -0
  332. data/third_party/boringssl/crypto/fipsmodule/sha/sha1.c +9 -13
  333. data/third_party/boringssl/crypto/fipsmodule/sha/sha256.c +18 -12
  334. data/third_party/boringssl/crypto/fipsmodule/sha/sha512.c +95 -168
  335. data/third_party/boringssl/crypto/hrss/hrss.c +2201 -0
  336. data/third_party/boringssl/crypto/hrss/internal.h +62 -0
  337. data/third_party/boringssl/crypto/internal.h +95 -20
  338. data/third_party/boringssl/crypto/lhash/lhash.c +45 -33
  339. data/third_party/boringssl/crypto/mem.c +39 -2
  340. data/third_party/boringssl/crypto/obj/obj.c +4 -4
  341. data/third_party/boringssl/crypto/obj/obj_dat.h +6181 -875
  342. data/third_party/boringssl/crypto/pem/pem_all.c +2 -3
  343. data/third_party/boringssl/crypto/pem/pem_info.c +144 -162
  344. data/third_party/boringssl/crypto/pem/pem_lib.c +53 -52
  345. data/third_party/boringssl/crypto/pem/pem_pkey.c +13 -21
  346. data/third_party/boringssl/crypto/pkcs7/pkcs7.c +15 -22
  347. data/third_party/boringssl/crypto/pkcs7/pkcs7_x509.c +168 -16
  348. data/third_party/boringssl/crypto/pkcs8/internal.h +11 -0
  349. data/third_party/boringssl/crypto/pkcs8/p5_pbev2.c +24 -15
  350. data/third_party/boringssl/crypto/pkcs8/pkcs8.c +42 -25
  351. data/third_party/boringssl/crypto/pkcs8/pkcs8_x509.c +559 -43
  352. data/third_party/boringssl/crypto/pool/internal.h +1 -1
  353. data/third_party/boringssl/crypto/pool/pool.c +21 -0
  354. data/third_party/boringssl/crypto/rand_extra/deterministic.c +8 -0
  355. data/third_party/boringssl/crypto/rand_extra/fuchsia.c +1 -14
  356. data/third_party/boringssl/crypto/refcount_lock.c +2 -2
  357. data/third_party/boringssl/crypto/rsa_extra/rsa_print.c +22 -0
  358. data/third_party/boringssl/crypto/siphash/siphash.c +80 -0
  359. data/third_party/boringssl/crypto/stack/stack.c +83 -32
  360. data/third_party/boringssl/crypto/thread_none.c +2 -2
  361. data/third_party/boringssl/crypto/thread_pthread.c +2 -2
  362. data/third_party/boringssl/crypto/thread_win.c +38 -19
  363. data/third_party/boringssl/crypto/x509/a_strex.c +22 -2
  364. data/third_party/boringssl/crypto/x509/asn1_gen.c +2 -1
  365. data/third_party/boringssl/crypto/x509/by_dir.c +7 -0
  366. data/third_party/boringssl/crypto/x509/by_file.c +12 -10
  367. data/third_party/boringssl/crypto/x509/t_crl.c +5 -8
  368. data/third_party/boringssl/crypto/x509/t_req.c +1 -3
  369. data/third_party/boringssl/crypto/x509/t_x509.c +5 -8
  370. data/third_party/boringssl/crypto/x509/x509_cmp.c +1 -1
  371. data/third_party/boringssl/crypto/x509/x509_def.c +1 -1
  372. data/third_party/boringssl/crypto/x509/x509_lu.c +114 -5
  373. data/third_party/boringssl/crypto/x509/x509_req.c +20 -0
  374. data/third_party/boringssl/crypto/x509/x509_set.c +5 -0
  375. data/third_party/boringssl/crypto/x509/x509_trs.c +1 -0
  376. data/third_party/boringssl/crypto/x509/x509_txt.c +4 -5
  377. data/third_party/boringssl/crypto/x509/x509_vfy.c +145 -138
  378. data/third_party/boringssl/crypto/x509/x509_vpm.c +2 -0
  379. data/third_party/boringssl/crypto/x509/x509cset.c +40 -0
  380. data/third_party/boringssl/crypto/x509/x509name.c +2 -3
  381. data/third_party/boringssl/crypto/x509/x_all.c +109 -210
  382. data/third_party/boringssl/crypto/x509/x_x509.c +6 -0
  383. data/third_party/boringssl/crypto/x509v3/ext_dat.h +1 -3
  384. data/third_party/boringssl/crypto/x509v3/internal.h +56 -0
  385. data/third_party/boringssl/crypto/x509v3/pcy_cache.c +2 -0
  386. data/third_party/boringssl/crypto/x509v3/pcy_node.c +1 -0
  387. data/third_party/boringssl/crypto/x509v3/pcy_tree.c +4 -2
  388. data/third_party/boringssl/crypto/x509v3/v3_akey.c +5 -2
  389. data/third_party/boringssl/crypto/x509v3/v3_alt.c +19 -13
  390. data/third_party/boringssl/crypto/x509v3/v3_conf.c +2 -1
  391. data/third_party/boringssl/crypto/x509v3/v3_cpols.c +3 -2
  392. data/third_party/boringssl/crypto/x509v3/v3_genn.c +1 -6
  393. data/third_party/boringssl/crypto/x509v3/v3_lib.c +1 -0
  394. data/third_party/boringssl/crypto/x509v3/v3_ocsp.c +68 -0
  395. data/third_party/boringssl/crypto/x509v3/v3_pci.c +2 -1
  396. data/third_party/boringssl/crypto/x509v3/v3_purp.c +47 -69
  397. data/third_party/boringssl/crypto/x509v3/v3_skey.c +5 -2
  398. data/third_party/boringssl/crypto/x509v3/v3_utl.c +69 -25
  399. data/third_party/boringssl/include/openssl/aead.h +45 -19
  400. data/third_party/boringssl/include/openssl/aes.h +32 -7
  401. data/third_party/boringssl/include/openssl/asn1.h +7 -77
  402. data/third_party/boringssl/include/openssl/base.h +120 -6
  403. data/third_party/boringssl/include/openssl/base64.h +4 -1
  404. data/third_party/boringssl/include/openssl/bio.h +112 -81
  405. data/third_party/boringssl/include/openssl/blowfish.h +3 -3
  406. data/third_party/boringssl/include/openssl/bn.h +55 -29
  407. data/third_party/boringssl/include/openssl/buf.h +2 -2
  408. data/third_party/boringssl/include/openssl/bytestring.h +54 -32
  409. data/third_party/boringssl/include/openssl/cast.h +2 -2
  410. data/third_party/boringssl/include/openssl/cipher.h +46 -16
  411. data/third_party/boringssl/include/openssl/cmac.h +6 -2
  412. data/third_party/boringssl/include/openssl/conf.h +3 -6
  413. data/third_party/boringssl/include/openssl/cpu.h +25 -9
  414. data/third_party/boringssl/include/openssl/crypto.h +32 -10
  415. data/third_party/boringssl/include/openssl/curve25519.h +4 -4
  416. data/third_party/boringssl/include/openssl/dh.h +3 -2
  417. data/third_party/boringssl/include/openssl/digest.h +21 -7
  418. data/third_party/boringssl/include/openssl/dsa.h +8 -2
  419. data/third_party/boringssl/include/openssl/e_os2.h +18 -0
  420. data/third_party/boringssl/include/openssl/ec.h +25 -21
  421. data/third_party/boringssl/include/openssl/ec_key.h +36 -8
  422. data/third_party/boringssl/include/openssl/ecdh.h +17 -0
  423. data/third_party/boringssl/include/openssl/ecdsa.h +3 -3
  424. data/third_party/boringssl/include/openssl/engine.h +4 -4
  425. data/third_party/boringssl/include/openssl/err.h +3 -0
  426. data/third_party/boringssl/include/openssl/evp.h +199 -42
  427. data/third_party/boringssl/include/openssl/hmac.h +4 -4
  428. data/third_party/boringssl/include/openssl/hrss.h +100 -0
  429. data/third_party/boringssl/include/openssl/lhash.h +131 -23
  430. data/third_party/boringssl/include/openssl/md4.h +6 -4
  431. data/third_party/boringssl/include/openssl/md5.h +6 -4
  432. data/third_party/boringssl/include/openssl/mem.h +6 -2
  433. data/third_party/boringssl/include/openssl/nid.h +3 -0
  434. data/third_party/boringssl/include/openssl/obj.h +3 -0
  435. data/third_party/boringssl/include/openssl/pem.h +102 -64
  436. data/third_party/boringssl/include/openssl/pkcs7.h +136 -3
  437. data/third_party/boringssl/include/openssl/pkcs8.h +42 -3
  438. data/third_party/boringssl/include/openssl/pool.h +13 -2
  439. data/third_party/boringssl/include/openssl/ripemd.h +5 -4
  440. data/third_party/boringssl/include/openssl/rsa.h +46 -15
  441. data/third_party/boringssl/include/openssl/sha.h +40 -28
  442. data/third_party/boringssl/include/openssl/siphash.h +37 -0
  443. data/third_party/boringssl/include/openssl/span.h +17 -9
  444. data/third_party/boringssl/include/openssl/ssl.h +766 -393
  445. data/third_party/boringssl/include/openssl/ssl3.h +4 -3
  446. data/third_party/boringssl/include/openssl/stack.h +134 -77
  447. data/third_party/boringssl/include/openssl/thread.h +1 -1
  448. data/third_party/boringssl/include/openssl/tls1.h +25 -9
  449. data/third_party/boringssl/include/openssl/type_check.h +14 -15
  450. data/third_party/boringssl/include/openssl/x509.h +28 -3
  451. data/third_party/boringssl/include/openssl/x509_vfy.h +98 -32
  452. data/third_party/boringssl/include/openssl/x509v3.h +17 -13
  453. data/third_party/boringssl/ssl/d1_both.cc +9 -18
  454. data/third_party/boringssl/ssl/d1_lib.cc +4 -3
  455. data/third_party/boringssl/ssl/d1_pkt.cc +4 -4
  456. data/third_party/boringssl/ssl/d1_srtp.cc +15 -15
  457. data/third_party/boringssl/ssl/dtls_method.cc +0 -1
  458. data/third_party/boringssl/ssl/dtls_record.cc +28 -28
  459. data/third_party/boringssl/ssl/handoff.cc +295 -91
  460. data/third_party/boringssl/ssl/handshake.cc +133 -72
  461. data/third_party/boringssl/ssl/handshake_client.cc +218 -189
  462. data/third_party/boringssl/ssl/handshake_server.cc +399 -272
  463. data/third_party/boringssl/ssl/internal.h +1413 -928
  464. data/third_party/boringssl/ssl/s3_both.cc +175 -36
  465. data/third_party/boringssl/ssl/s3_lib.cc +9 -13
  466. data/third_party/boringssl/ssl/s3_pkt.cc +63 -29
  467. data/third_party/boringssl/ssl/ssl_aead_ctx.cc +55 -35
  468. data/third_party/boringssl/ssl/ssl_asn1.cc +57 -73
  469. data/third_party/boringssl/ssl/ssl_buffer.cc +13 -12
  470. data/third_party/boringssl/ssl/ssl_cert.cc +313 -210
  471. data/third_party/boringssl/ssl/ssl_cipher.cc +159 -221
  472. data/third_party/boringssl/ssl/ssl_file.cc +2 -0
  473. data/third_party/boringssl/ssl/ssl_key_share.cc +164 -19
  474. data/third_party/boringssl/ssl/ssl_lib.cc +847 -555
  475. data/third_party/boringssl/ssl/ssl_privkey.cc +441 -111
  476. data/third_party/boringssl/ssl/ssl_session.cc +230 -178
  477. data/third_party/boringssl/ssl/ssl_transcript.cc +21 -142
  478. data/third_party/boringssl/ssl/ssl_versions.cc +88 -93
  479. data/third_party/boringssl/ssl/ssl_x509.cc +279 -218
  480. data/third_party/boringssl/ssl/t1_enc.cc +5 -96
  481. data/third_party/boringssl/ssl/t1_lib.cc +931 -678
  482. data/third_party/boringssl/ssl/tls13_both.cc +251 -121
  483. data/third_party/boringssl/ssl/tls13_client.cc +129 -73
  484. data/third_party/boringssl/ssl/tls13_enc.cc +350 -282
  485. data/third_party/boringssl/ssl/tls13_server.cc +259 -192
  486. data/third_party/boringssl/ssl/tls_method.cc +26 -21
  487. data/third_party/boringssl/ssl/tls_record.cc +42 -47
  488. data/third_party/boringssl/third_party/fiat/curve25519.c +261 -1324
  489. data/third_party/boringssl/third_party/fiat/curve25519_32.h +911 -0
  490. data/third_party/boringssl/third_party/fiat/curve25519_64.h +559 -0
  491. data/third_party/boringssl/third_party/fiat/p256.c +238 -999
  492. data/third_party/boringssl/third_party/fiat/p256_32.h +3226 -0
  493. data/third_party/boringssl/third_party/fiat/p256_64.h +1217 -0
  494. data/third_party/upb/upb/port_def.inc +1 -1
  495. data/third_party/upb/upb/table.c +2 -1
  496. metadata +72 -44
  497. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_load_balancer_api.h +0 -127
  498. data/src/core/lib/gpr/mpscq.cc +0 -117
  499. data/src/core/lib/gpr/mpscq.h +0 -88
  500. data/src/core/lib/gprpp/abstract.h +0 -47
  501. data/src/core/lib/gprpp/pair.h +0 -38
  502. data/third_party/boringssl/crypto/cipher_extra/e_ssl3.c +0 -460
  503. data/third_party/boringssl/crypto/fipsmodule/modes/ccm.c +0 -256
  504. data/third_party/boringssl/include/openssl/lhash_macros.h +0 -174
  505. data/third_party/boringssl/ssl/custom_extensions.cc +0 -265
@@ -1,21 +1,56 @@
1
- /* Copyright (c) 2018, Google Inc.
1
+ /* ====================================================================
2
+ * Copyright (c) 2008 The OpenSSL Project. All rights reserved.
2
3
  *
3
- * Permission to use, copy, modify, and/or distribute this software for any
4
- * purpose with or without fee is hereby granted, provided that the above
5
- * copyright notice and this permission notice appear in all copies.
4
+ * Redistribution and use in source and binary forms, with or without
5
+ * modification, are permitted provided that the following conditions
6
+ * are met:
6
7
  *
7
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
8
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
9
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
10
- * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
11
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
12
- * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
13
- * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */
8
+ * 1. Redistributions of source code must retain the above copyright
9
+ * notice, this list of conditions and the following disclaimer.
10
+ *
11
+ * 2. Redistributions in binary form must reproduce the above copyright
12
+ * notice, this list of conditions and the following disclaimer in
13
+ * the documentation and/or other materials provided with the
14
+ * distribution.
15
+ *
16
+ * 3. All advertising materials mentioning features or use of this
17
+ * software must display the following acknowledgment:
18
+ * "This product includes software developed by the OpenSSL Project
19
+ * for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
20
+ *
21
+ * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
22
+ * endorse or promote products derived from this software without
23
+ * prior written permission. For written permission, please contact
24
+ * openssl-core@openssl.org.
25
+ *
26
+ * 5. Products derived from this software may not be called "OpenSSL"
27
+ * nor may "OpenSSL" appear in their names without prior written
28
+ * permission of the OpenSSL Project.
29
+ *
30
+ * 6. Redistributions of any form whatsoever must retain the following
31
+ * acknowledgment:
32
+ * "This product includes software developed by the OpenSSL Project
33
+ * for use in the OpenSSL Toolkit (http://www.openssl.org/)"
34
+ *
35
+ * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
36
+ * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
37
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
38
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
39
+ * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
40
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
41
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
42
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
43
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
44
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
45
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
46
+ * OF THE POSSIBILITY OF SUCH DAMAGE.
47
+ * ==================================================================== */
14
48
 
15
49
  #include <openssl/aead.h>
16
50
 
17
51
  #include <assert.h>
18
52
 
53
+ #include <openssl/cpu.h>
19
54
  #include <openssl/cipher.h>
20
55
  #include <openssl/err.h>
21
56
  #include <openssl/mem.h>
@@ -23,6 +58,213 @@
23
58
  #include "../fipsmodule/cipher/internal.h"
24
59
 
25
60
 
61
+ struct ccm128_context {
62
+ block128_f block;
63
+ ctr128_f ctr;
64
+ unsigned M, L;
65
+ };
66
+
67
+ struct ccm128_state {
68
+ union {
69
+ uint64_t u[2];
70
+ uint8_t c[16];
71
+ } nonce, cmac;
72
+ };
73
+
74
+ static int CRYPTO_ccm128_init(struct ccm128_context *ctx, const AES_KEY *key,
75
+ block128_f block, ctr128_f ctr, unsigned M,
76
+ unsigned L) {
77
+ if (M < 4 || M > 16 || (M & 1) != 0 || L < 2 || L > 8) {
78
+ return 0;
79
+ }
80
+ ctx->block = block;
81
+ ctx->ctr = ctr;
82
+ ctx->M = M;
83
+ ctx->L = L;
84
+ return 1;
85
+ }
86
+
87
+ static size_t CRYPTO_ccm128_max_input(const struct ccm128_context *ctx) {
88
+ return ctx->L >= sizeof(size_t) ? (size_t)-1
89
+ : (((size_t)1) << (ctx->L * 8)) - 1;
90
+ }
91
+
92
+ static int ccm128_init_state(const struct ccm128_context *ctx,
93
+ struct ccm128_state *state, const AES_KEY *key,
94
+ const uint8_t *nonce, size_t nonce_len,
95
+ const uint8_t *aad, size_t aad_len,
96
+ size_t plaintext_len) {
97
+ const block128_f block = ctx->block;
98
+ const unsigned M = ctx->M;
99
+ const unsigned L = ctx->L;
100
+
101
+ // |L| determines the expected |nonce_len| and the limit for |plaintext_len|.
102
+ if (plaintext_len > CRYPTO_ccm128_max_input(ctx) ||
103
+ nonce_len != 15 - L) {
104
+ return 0;
105
+ }
106
+
107
+ // Assemble the first block for computing the MAC.
108
+ OPENSSL_memset(state, 0, sizeof(*state));
109
+ state->nonce.c[0] = (uint8_t)((L - 1) | ((M - 2) / 2) << 3);
110
+ if (aad_len != 0) {
111
+ state->nonce.c[0] |= 0x40; // Set AAD Flag
112
+ }
113
+ OPENSSL_memcpy(&state->nonce.c[1], nonce, nonce_len);
114
+ for (unsigned i = 0; i < L; i++) {
115
+ state->nonce.c[15 - i] = (uint8_t)(plaintext_len >> (8 * i));
116
+ }
117
+
118
+ (*block)(state->nonce.c, state->cmac.c, key);
119
+ size_t blocks = 1;
120
+
121
+ if (aad_len != 0) {
122
+ unsigned i;
123
+ // Cast to u64 to avoid the compiler complaining about invalid shifts.
124
+ uint64_t aad_len_u64 = aad_len;
125
+ if (aad_len_u64 < 0x10000 - 0x100) {
126
+ state->cmac.c[0] ^= (uint8_t)(aad_len_u64 >> 8);
127
+ state->cmac.c[1] ^= (uint8_t)aad_len_u64;
128
+ i = 2;
129
+ } else if (aad_len_u64 <= 0xffffffff) {
130
+ state->cmac.c[0] ^= 0xff;
131
+ state->cmac.c[1] ^= 0xfe;
132
+ state->cmac.c[2] ^= (uint8_t)(aad_len_u64 >> 24);
133
+ state->cmac.c[3] ^= (uint8_t)(aad_len_u64 >> 16);
134
+ state->cmac.c[4] ^= (uint8_t)(aad_len_u64 >> 8);
135
+ state->cmac.c[5] ^= (uint8_t)aad_len_u64;
136
+ i = 6;
137
+ } else {
138
+ state->cmac.c[0] ^= 0xff;
139
+ state->cmac.c[1] ^= 0xff;
140
+ state->cmac.c[2] ^= (uint8_t)(aad_len_u64 >> 56);
141
+ state->cmac.c[3] ^= (uint8_t)(aad_len_u64 >> 48);
142
+ state->cmac.c[4] ^= (uint8_t)(aad_len_u64 >> 40);
143
+ state->cmac.c[5] ^= (uint8_t)(aad_len_u64 >> 32);
144
+ state->cmac.c[6] ^= (uint8_t)(aad_len_u64 >> 24);
145
+ state->cmac.c[7] ^= (uint8_t)(aad_len_u64 >> 16);
146
+ state->cmac.c[8] ^= (uint8_t)(aad_len_u64 >> 8);
147
+ state->cmac.c[9] ^= (uint8_t)aad_len_u64;
148
+ i = 10;
149
+ }
150
+
151
+ do {
152
+ for (; i < 16 && aad_len != 0; i++) {
153
+ state->cmac.c[i] ^= *aad;
154
+ aad++;
155
+ aad_len--;
156
+ }
157
+ (*block)(state->cmac.c, state->cmac.c, key);
158
+ blocks++;
159
+ i = 0;
160
+ } while (aad_len != 0);
161
+ }
162
+
163
+ // Per RFC 3610, section 2.6, the total number of block cipher operations done
164
+ // must not exceed 2^61. There are two block cipher operations remaining per
165
+ // message block, plus one block at the end to encrypt the MAC.
166
+ size_t remaining_blocks = 2 * ((plaintext_len + 15) / 16) + 1;
167
+ if (plaintext_len + 15 < plaintext_len ||
168
+ remaining_blocks + blocks < blocks ||
169
+ (uint64_t) remaining_blocks + blocks > UINT64_C(1) << 61) {
170
+ return 0;
171
+ }
172
+
173
+ // Assemble the first block for encrypting and decrypting. The bottom |L|
174
+ // bytes are replaced with a counter and all bit the encoding of |L| is
175
+ // cleared in the first byte.
176
+ state->nonce.c[0] &= 7;
177
+ return 1;
178
+ }
179
+
180
+ static int ccm128_encrypt(const struct ccm128_context *ctx,
181
+ struct ccm128_state *state, const AES_KEY *key,
182
+ uint8_t *out, const uint8_t *in, size_t len) {
183
+ // The counter for encryption begins at one.
184
+ for (unsigned i = 0; i < ctx->L; i++) {
185
+ state->nonce.c[15 - i] = 0;
186
+ }
187
+ state->nonce.c[15] = 1;
188
+
189
+ uint8_t partial_buf[16];
190
+ unsigned num = 0;
191
+ if (ctx->ctr != NULL) {
192
+ CRYPTO_ctr128_encrypt_ctr32(in, out, len, key, state->nonce.c, partial_buf,
193
+ &num, ctx->ctr);
194
+ } else {
195
+ CRYPTO_ctr128_encrypt(in, out, len, key, state->nonce.c, partial_buf, &num,
196
+ ctx->block);
197
+ }
198
+ return 1;
199
+ }
200
+
201
+ static int ccm128_compute_mac(const struct ccm128_context *ctx,
202
+ struct ccm128_state *state, const AES_KEY *key,
203
+ uint8_t *out_tag, size_t tag_len,
204
+ const uint8_t *in, size_t len) {
205
+ block128_f block = ctx->block;
206
+ if (tag_len != ctx->M) {
207
+ return 0;
208
+ }
209
+
210
+ // Incorporate |in| into the MAC.
211
+ union {
212
+ uint64_t u[2];
213
+ uint8_t c[16];
214
+ } tmp;
215
+ while (len >= 16) {
216
+ OPENSSL_memcpy(tmp.c, in, 16);
217
+ state->cmac.u[0] ^= tmp.u[0];
218
+ state->cmac.u[1] ^= tmp.u[1];
219
+ (*block)(state->cmac.c, state->cmac.c, key);
220
+ in += 16;
221
+ len -= 16;
222
+ }
223
+ if (len > 0) {
224
+ for (size_t i = 0; i < len; i++) {
225
+ state->cmac.c[i] ^= in[i];
226
+ }
227
+ (*block)(state->cmac.c, state->cmac.c, key);
228
+ }
229
+
230
+ // Encrypt the MAC with counter zero.
231
+ for (unsigned i = 0; i < ctx->L; i++) {
232
+ state->nonce.c[15 - i] = 0;
233
+ }
234
+ (*block)(state->nonce.c, tmp.c, key);
235
+ state->cmac.u[0] ^= tmp.u[0];
236
+ state->cmac.u[1] ^= tmp.u[1];
237
+
238
+ OPENSSL_memcpy(out_tag, state->cmac.c, tag_len);
239
+ return 1;
240
+ }
241
+
242
+ static int CRYPTO_ccm128_encrypt(const struct ccm128_context *ctx,
243
+ const AES_KEY *key, uint8_t *out,
244
+ uint8_t *out_tag, size_t tag_len,
245
+ const uint8_t *nonce, size_t nonce_len,
246
+ const uint8_t *in, size_t len,
247
+ const uint8_t *aad, size_t aad_len) {
248
+ struct ccm128_state state;
249
+ return ccm128_init_state(ctx, &state, key, nonce, nonce_len, aad, aad_len,
250
+ len) &&
251
+ ccm128_compute_mac(ctx, &state, key, out_tag, tag_len, in, len) &&
252
+ ccm128_encrypt(ctx, &state, key, out, in, len);
253
+ }
254
+
255
+ static int CRYPTO_ccm128_decrypt(const struct ccm128_context *ctx,
256
+ const AES_KEY *key, uint8_t *out,
257
+ uint8_t *out_tag, size_t tag_len,
258
+ const uint8_t *nonce, size_t nonce_len,
259
+ const uint8_t *in, size_t len,
260
+ const uint8_t *aad, size_t aad_len) {
261
+ struct ccm128_state state;
262
+ return ccm128_init_state(ctx, &state, key, nonce, nonce_len, aad, aad_len,
263
+ len) &&
264
+ ccm128_encrypt(ctx, &state, key, out, in, len) &&
265
+ ccm128_compute_mac(ctx, &state, key, out_tag, tag_len, out, len);
266
+ }
267
+
26
268
  #define EVP_AEAD_AES_CCM_MAX_TAG_LEN 16
27
269
 
28
270
  struct aead_aes_ccm_ctx {
@@ -30,9 +272,18 @@ struct aead_aes_ccm_ctx {
30
272
  double align;
31
273
  AES_KEY ks;
32
274
  } ks;
33
- CCM128_CONTEXT ccm;
275
+ struct ccm128_context ccm;
34
276
  };
35
277
 
278
+ OPENSSL_STATIC_ASSERT(sizeof(((EVP_AEAD_CTX *)NULL)->state) >=
279
+ sizeof(struct aead_aes_ccm_ctx),
280
+ "AEAD state is too small");
281
+ #if defined(__GNUC__) || defined(__clang__)
282
+ OPENSSL_STATIC_ASSERT(alignof(union evp_aead_ctx_st_state) >=
283
+ alignof(struct aead_aes_ccm_ctx),
284
+ "AEAD state has insufficient alignment");
285
+ #endif
286
+
36
287
  static int aead_aes_ccm_init(EVP_AEAD_CTX *ctx, const uint8_t *key,
37
288
  size_t key_len, size_t tag_len, unsigned M,
38
289
  unsigned L) {
@@ -54,36 +305,28 @@ static int aead_aes_ccm_init(EVP_AEAD_CTX *ctx, const uint8_t *key,
54
305
  return 0;
55
306
  }
56
307
 
57
- struct aead_aes_ccm_ctx *ccm_ctx =
58
- OPENSSL_malloc(sizeof(struct aead_aes_ccm_ctx));
59
- if (ccm_ctx == NULL) {
60
- OPENSSL_PUT_ERROR(CIPHER, ERR_R_MALLOC_FAILURE);
61
- return 0;
62
- }
308
+ struct aead_aes_ccm_ctx *ccm_ctx = (struct aead_aes_ccm_ctx *)&ctx->state;
63
309
 
64
310
  block128_f block;
65
311
  ctr128_f ctr = aes_ctr_set_key(&ccm_ctx->ks.ks, NULL, &block, key, key_len);
66
312
  ctx->tag_len = tag_len;
67
313
  if (!CRYPTO_ccm128_init(&ccm_ctx->ccm, &ccm_ctx->ks.ks, block, ctr, M, L)) {
68
314
  OPENSSL_PUT_ERROR(CIPHER, ERR_R_INTERNAL_ERROR);
69
- OPENSSL_free(ccm_ctx);
70
315
  return 0;
71
316
  }
72
317
 
73
- ctx->aead_state = ccm_ctx;
74
318
  return 1;
75
319
  }
76
320
 
77
- static void aead_aes_ccm_cleanup(EVP_AEAD_CTX *ctx) {
78
- OPENSSL_free(ctx->aead_state);
79
- }
321
+ static void aead_aes_ccm_cleanup(EVP_AEAD_CTX *ctx) {}
80
322
 
81
323
  static int aead_aes_ccm_seal_scatter(
82
324
  const EVP_AEAD_CTX *ctx, uint8_t *out, uint8_t *out_tag,
83
325
  size_t *out_tag_len, size_t max_out_tag_len, const uint8_t *nonce,
84
326
  size_t nonce_len, const uint8_t *in, size_t in_len, const uint8_t *extra_in,
85
327
  size_t extra_in_len, const uint8_t *ad, size_t ad_len) {
86
- const struct aead_aes_ccm_ctx *ccm_ctx = ctx->aead_state;
328
+ const struct aead_aes_ccm_ctx *ccm_ctx =
329
+ (struct aead_aes_ccm_ctx *)&ctx->state;
87
330
 
88
331
  if (in_len > CRYPTO_ccm128_max_input(&ccm_ctx->ccm)) {
89
332
  OPENSSL_PUT_ERROR(CIPHER, CIPHER_R_TOO_LARGE);
@@ -116,7 +359,8 @@ static int aead_aes_ccm_open_gather(const EVP_AEAD_CTX *ctx, uint8_t *out,
116
359
  const uint8_t *in, size_t in_len,
117
360
  const uint8_t *in_tag, size_t in_tag_len,
118
361
  const uint8_t *ad, size_t ad_len) {
119
- const struct aead_aes_ccm_ctx *ccm_ctx = ctx->aead_state;
362
+ const struct aead_aes_ccm_ctx *ccm_ctx =
363
+ (struct aead_aes_ccm_ctx *)&ctx->state;
120
364
 
121
365
  if (in_len > CRYPTO_ccm128_max_input(&ccm_ctx->ccm)) {
122
366
  OPENSSL_PUT_ERROR(CIPHER, CIPHER_R_TOO_LARGE);
@@ -35,6 +35,15 @@ struct aead_aes_ctr_hmac_sha256_ctx {
35
35
  SHA256_CTX outer_init_state;
36
36
  };
37
37
 
38
+ OPENSSL_STATIC_ASSERT(sizeof(((EVP_AEAD_CTX *)NULL)->state) >=
39
+ sizeof(struct aead_aes_ctr_hmac_sha256_ctx),
40
+ "AEAD state is too small");
41
+ #if defined(__GNUC__) || defined(__clang__)
42
+ OPENSSL_STATIC_ASSERT(alignof(union evp_aead_ctx_st_state) >=
43
+ alignof(struct aead_aes_ctr_hmac_sha256_ctx),
44
+ "AEAD state has insufficient alignment");
45
+ #endif
46
+
38
47
  static void hmac_init(SHA256_CTX *out_inner, SHA256_CTX *out_outer,
39
48
  const uint8_t hmac_key[32]) {
40
49
  static const size_t hmac_key_len = 32;
@@ -61,7 +70,8 @@ static void hmac_init(SHA256_CTX *out_inner, SHA256_CTX *out_outer,
61
70
 
62
71
  static int aead_aes_ctr_hmac_sha256_init(EVP_AEAD_CTX *ctx, const uint8_t *key,
63
72
  size_t key_len, size_t tag_len) {
64
- struct aead_aes_ctr_hmac_sha256_ctx *aes_ctx;
73
+ struct aead_aes_ctr_hmac_sha256_ctx *aes_ctx =
74
+ (struct aead_aes_ctr_hmac_sha256_ctx *)&ctx->state;
65
75
  static const size_t hmac_key_len = 32;
66
76
 
67
77
  if (key_len < hmac_key_len) {
@@ -84,26 +94,16 @@ static int aead_aes_ctr_hmac_sha256_init(EVP_AEAD_CTX *ctx, const uint8_t *key,
84
94
  return 0;
85
95
  }
86
96
 
87
- aes_ctx = OPENSSL_malloc(sizeof(struct aead_aes_ctr_hmac_sha256_ctx));
88
- if (aes_ctx == NULL) {
89
- OPENSSL_PUT_ERROR(CIPHER, ERR_R_MALLOC_FAILURE);
90
- return 0;
91
- }
92
-
93
97
  aes_ctx->ctr =
94
98
  aes_ctr_set_key(&aes_ctx->ks.ks, NULL, &aes_ctx->block, key, aes_key_len);
95
99
  ctx->tag_len = tag_len;
96
100
  hmac_init(&aes_ctx->inner_init_state, &aes_ctx->outer_init_state,
97
101
  key + aes_key_len);
98
102
 
99
- ctx->aead_state = aes_ctx;
100
-
101
103
  return 1;
102
104
  }
103
105
 
104
- static void aead_aes_ctr_hmac_sha256_cleanup(EVP_AEAD_CTX *ctx) {
105
- OPENSSL_free(ctx->aead_state);
106
- }
106
+ static void aead_aes_ctr_hmac_sha256_cleanup(EVP_AEAD_CTX *ctx) {}
107
107
 
108
108
  static void hmac_update_uint64(SHA256_CTX *sha256, uint64_t value) {
109
109
  unsigned i;
@@ -178,7 +178,8 @@ static int aead_aes_ctr_hmac_sha256_seal_scatter(
178
178
  size_t *out_tag_len, size_t max_out_tag_len, const uint8_t *nonce,
179
179
  size_t nonce_len, const uint8_t *in, size_t in_len, const uint8_t *extra_in,
180
180
  size_t extra_in_len, const uint8_t *ad, size_t ad_len) {
181
- const struct aead_aes_ctr_hmac_sha256_ctx *aes_ctx = ctx->aead_state;
181
+ const struct aead_aes_ctr_hmac_sha256_ctx *aes_ctx =
182
+ (struct aead_aes_ctr_hmac_sha256_ctx *) &ctx->state;
182
183
  const uint64_t in_len_64 = in_len;
183
184
 
184
185
  if (in_len_64 >= (UINT64_C(1) << 32) * AES_BLOCK_SIZE) {
@@ -212,7 +213,8 @@ static int aead_aes_ctr_hmac_sha256_open_gather(
212
213
  const EVP_AEAD_CTX *ctx, uint8_t *out, const uint8_t *nonce,
213
214
  size_t nonce_len, const uint8_t *in, size_t in_len, const uint8_t *in_tag,
214
215
  size_t in_tag_len, const uint8_t *ad, size_t ad_len) {
215
- const struct aead_aes_ctr_hmac_sha256_ctx *aes_ctx = ctx->aead_state;
216
+ const struct aead_aes_ctr_hmac_sha256_ctx *aes_ctx =
217
+ (struct aead_aes_ctr_hmac_sha256_ctx *) &ctx->state;
216
218
 
217
219
  if (in_tag_len != ctx->tag_len) {
218
220
  OPENSSL_PUT_ERROR(CIPHER, CIPHER_R_BAD_DECRYPT);
@@ -27,28 +27,47 @@
27
27
  #define EVP_AEAD_AES_GCM_SIV_NONCE_LEN 12
28
28
  #define EVP_AEAD_AES_GCM_SIV_TAG_LEN 16
29
29
 
30
- #if defined(OPENSSL_X86_64) && !defined(OPENSSL_NO_ASM)
30
+ // TODO(davidben): AES-GCM-SIV assembly is not correct for Windows. It must save
31
+ // and restore xmm6 through xmm15.
32
+ #if defined(OPENSSL_X86_64) && !defined(OPENSSL_NO_ASM) && \
33
+ !defined(OPENSSL_WINDOWS)
34
+ #define AES_GCM_SIV_ASM
31
35
 
32
36
  // Optimised AES-GCM-SIV
33
37
 
34
38
  struct aead_aes_gcm_siv_asm_ctx {
35
39
  alignas(16) uint8_t key[16*15];
36
40
  int is_128_bit;
37
- // ptr contains the original pointer from |OPENSSL_malloc|, which may only be
38
- // 8-byte aligned. When freeing this structure, actually call |OPENSSL_free|
39
- // on this pointer.
40
- void *ptr;
41
41
  };
42
42
 
43
+ // The assembly code assumes 8-byte alignment of the EVP_AEAD_CTX's state, and
44
+ // aligns to 16 bytes itself.
45
+ OPENSSL_STATIC_ASSERT(sizeof(((EVP_AEAD_CTX *)NULL)->state) + 8 >=
46
+ sizeof(struct aead_aes_gcm_siv_asm_ctx),
47
+ "AEAD state is too small");
48
+ #if defined(__GNUC__) || defined(__clang__)
49
+ OPENSSL_STATIC_ASSERT(alignof(union evp_aead_ctx_st_state) >= 8,
50
+ "AEAD state has insufficient alignment");
51
+ #endif
52
+
53
+ // asm_ctx_from_ctx returns a 16-byte aligned context pointer from |ctx|.
54
+ static struct aead_aes_gcm_siv_asm_ctx *asm_ctx_from_ctx(
55
+ const EVP_AEAD_CTX *ctx) {
56
+ // ctx->state must already be 8-byte aligned. Thus, at most, we may need to
57
+ // add eight to align it to 16 bytes.
58
+ const uintptr_t offset = ((uintptr_t)&ctx->state) & 8;
59
+ return (struct aead_aes_gcm_siv_asm_ctx *)(&ctx->state.opaque[offset]);
60
+ }
61
+
43
62
  // aes128gcmsiv_aes_ks writes an AES-128 key schedule for |key| to
44
63
  // |out_expanded_key|.
45
64
  extern void aes128gcmsiv_aes_ks(
46
65
  const uint8_t key[16], uint8_t out_expanded_key[16*15]);
47
66
 
48
- // aes128gcmsiv_aes_ks writes an AES-128 key schedule for |key| to
67
+ // aes256gcmsiv_aes_ks writes an AES-256 key schedule for |key| to
49
68
  // |out_expanded_key|.
50
69
  extern void aes256gcmsiv_aes_ks(
51
- const uint8_t key[16], uint8_t out_expanded_key[16*15]);
70
+ const uint8_t key[32], uint8_t out_expanded_key[16*15]);
52
71
 
53
72
  static int aead_aes_gcm_siv_asm_init(EVP_AEAD_CTX *ctx, const uint8_t *key,
54
73
  size_t key_len, size_t tag_len) {
@@ -68,18 +87,8 @@ static int aead_aes_gcm_siv_asm_init(EVP_AEAD_CTX *ctx, const uint8_t *key,
68
87
  return 0;
69
88
  }
70
89
 
71
- char *ptr = OPENSSL_malloc(sizeof(struct aead_aes_gcm_siv_asm_ctx) + 8);
72
- if (ptr == NULL) {
73
- return 0;
74
- }
75
- assert((((uintptr_t)ptr) & 7) == 0);
76
-
77
- // gcm_siv_ctx needs to be 16-byte aligned in a cross-platform way.
78
- struct aead_aes_gcm_siv_asm_ctx *gcm_siv_ctx =
79
- (struct aead_aes_gcm_siv_asm_ctx *)(ptr + (((uintptr_t)ptr) & 8));
80
-
90
+ struct aead_aes_gcm_siv_asm_ctx *gcm_siv_ctx = asm_ctx_from_ctx(ctx);
81
91
  assert((((uintptr_t)gcm_siv_ctx) & 15) == 0);
82
- gcm_siv_ctx->ptr = ptr;
83
92
 
84
93
  if (key_bits == 128) {
85
94
  aes128gcmsiv_aes_ks(key, &gcm_siv_ctx->key[0]);
@@ -88,16 +97,13 @@ static int aead_aes_gcm_siv_asm_init(EVP_AEAD_CTX *ctx, const uint8_t *key,
88
97
  aes256gcmsiv_aes_ks(key, &gcm_siv_ctx->key[0]);
89
98
  gcm_siv_ctx->is_128_bit = 0;
90
99
  }
91
- ctx->aead_state = gcm_siv_ctx;
100
+
92
101
  ctx->tag_len = tag_len;
93
102
 
94
103
  return 1;
95
104
  }
96
105
 
97
- static void aead_aes_gcm_siv_asm_cleanup(EVP_AEAD_CTX *ctx) {
98
- const struct aead_aes_gcm_siv_asm_ctx *gcm_siv_ctx = ctx->aead_state;
99
- OPENSSL_free(gcm_siv_ctx->ptr);
100
- }
106
+ static void aead_aes_gcm_siv_asm_cleanup(EVP_AEAD_CTX *ctx) {}
101
107
 
102
108
  // aesgcmsiv_polyval_horner updates the POLYVAL value in |in_out_poly| to
103
109
  // include a number (|in_blocks|) of 16-byte blocks of data from |in|, given
@@ -337,7 +343,7 @@ static int aead_aes_gcm_siv_asm_seal_scatter(
337
343
  size_t *out_tag_len, size_t max_out_tag_len, const uint8_t *nonce,
338
344
  size_t nonce_len, const uint8_t *in, size_t in_len, const uint8_t *extra_in,
339
345
  size_t extra_in_len, const uint8_t *ad, size_t ad_len) {
340
- const struct aead_aes_gcm_siv_asm_ctx *gcm_siv_ctx = ctx->aead_state;
346
+ const struct aead_aes_gcm_siv_asm_ctx *gcm_siv_ctx = asm_ctx_from_ctx(ctx);
341
347
  const uint64_t in_len_64 = in_len;
342
348
  const uint64_t ad_len_64 = ad_len;
343
349
 
@@ -420,7 +426,12 @@ static int aead_aes_gcm_siv_asm_open(const EVP_AEAD_CTX *ctx, uint8_t *out,
420
426
  return 0;
421
427
  }
422
428
 
423
- const struct aead_aes_gcm_siv_asm_ctx *gcm_siv_ctx = ctx->aead_state;
429
+ if (nonce_len != EVP_AEAD_AES_GCM_SIV_NONCE_LEN) {
430
+ OPENSSL_PUT_ERROR(CIPHER, CIPHER_R_UNSUPPORTED_NONCE_SIZE);
431
+ return 0;
432
+ }
433
+
434
+ const struct aead_aes_gcm_siv_asm_ctx *gcm_siv_ctx = asm_ctx_from_ctx(ctx);
424
435
  const size_t plaintext_len = in_len - EVP_AEAD_AES_GCM_SIV_TAG_LEN;
425
436
  const uint8_t *const given_tag = in + plaintext_len;
426
437
 
@@ -547,7 +558,7 @@ static const EVP_AEAD aead_aes_256_gcm_siv_asm = {
547
558
  NULL /* tag_len */,
548
559
  };
549
560
 
550
- #endif // X86_64 && !NO_ASM
561
+ #endif // X86_64 && !NO_ASM && !WINDOWS
551
562
 
552
563
  struct aead_aes_gcm_siv_ctx {
553
564
  union {
@@ -558,6 +569,15 @@ struct aead_aes_gcm_siv_ctx {
558
569
  unsigned is_256:1;
559
570
  };
560
571
 
572
+ OPENSSL_STATIC_ASSERT(sizeof(((EVP_AEAD_CTX *)NULL)->state) >=
573
+ sizeof(struct aead_aes_gcm_siv_ctx),
574
+ "AEAD state is too small");
575
+ #if defined(__GNUC__) || defined(__clang__)
576
+ OPENSSL_STATIC_ASSERT(alignof(union evp_aead_ctx_st_state) >=
577
+ alignof(struct aead_aes_gcm_siv_ctx),
578
+ "AEAD state has insufficient alignment");
579
+ #endif
580
+
561
581
  static int aead_aes_gcm_siv_init(EVP_AEAD_CTX *ctx, const uint8_t *key,
562
582
  size_t key_len, size_t tag_len) {
563
583
  const size_t key_bits = key_len * 8;
@@ -576,24 +596,18 @@ static int aead_aes_gcm_siv_init(EVP_AEAD_CTX *ctx, const uint8_t *key,
576
596
  }
577
597
 
578
598
  struct aead_aes_gcm_siv_ctx *gcm_siv_ctx =
579
- OPENSSL_malloc(sizeof(struct aead_aes_gcm_siv_ctx));
580
- if (gcm_siv_ctx == NULL) {
581
- return 0;
582
- }
599
+ (struct aead_aes_gcm_siv_ctx *)&ctx->state;
583
600
  OPENSSL_memset(gcm_siv_ctx, 0, sizeof(struct aead_aes_gcm_siv_ctx));
584
601
 
585
602
  aes_ctr_set_key(&gcm_siv_ctx->ks.ks, NULL, &gcm_siv_ctx->kgk_block, key,
586
603
  key_len);
587
604
  gcm_siv_ctx->is_256 = (key_len == 32);
588
- ctx->aead_state = gcm_siv_ctx;
589
605
  ctx->tag_len = tag_len;
590
606
 
591
607
  return 1;
592
608
  }
593
609
 
594
- static void aead_aes_gcm_siv_cleanup(EVP_AEAD_CTX *ctx) {
595
- OPENSSL_free(ctx->aead_state);
596
- }
610
+ static void aead_aes_gcm_siv_cleanup(EVP_AEAD_CTX *ctx) {}
597
611
 
598
612
  // gcm_siv_crypt encrypts (or decrypts—it's the same thing) |in_len| bytes from
599
613
  // |in| to |out|, using the block function |enc_block| with |key| in counter
@@ -718,7 +732,8 @@ static int aead_aes_gcm_siv_seal_scatter(
718
732
  size_t *out_tag_len, size_t max_out_tag_len, const uint8_t *nonce,
719
733
  size_t nonce_len, const uint8_t *in, size_t in_len, const uint8_t *extra_in,
720
734
  size_t extra_in_len, const uint8_t *ad, size_t ad_len) {
721
- const struct aead_aes_gcm_siv_ctx *gcm_siv_ctx = ctx->aead_state;
735
+ const struct aead_aes_gcm_siv_ctx *gcm_siv_ctx =
736
+ (struct aead_aes_gcm_siv_ctx *)&ctx->state;
722
737
  const uint64_t in_len_64 = in_len;
723
738
  const uint64_t ad_len_64 = ad_len;
724
739
 
@@ -778,7 +793,8 @@ static int aead_aes_gcm_siv_open_gather(const EVP_AEAD_CTX *ctx, uint8_t *out,
778
793
  return 0;
779
794
  }
780
795
 
781
- const struct aead_aes_gcm_siv_ctx *gcm_siv_ctx = ctx->aead_state;
796
+ const struct aead_aes_gcm_siv_ctx *gcm_siv_ctx =
797
+ (struct aead_aes_gcm_siv_ctx *)&ctx->state;
782
798
 
783
799
  struct gcm_siv_record_keys keys;
784
800
  gcm_siv_keys(gcm_siv_ctx, &keys, nonce);
@@ -831,7 +847,7 @@ static const EVP_AEAD aead_aes_256_gcm_siv = {
831
847
  NULL /* tag_len */,
832
848
  };
833
849
 
834
- #if defined(OPENSSL_X86_64) && !defined(OPENSSL_NO_ASM)
850
+ #if defined(AES_GCM_SIV_ASM)
835
851
 
836
852
  static char avx_aesni_capable(void) {
837
853
  const uint32_t ecx = OPENSSL_ia32cap_P[1];
@@ -864,4 +880,4 @@ const EVP_AEAD *EVP_aead_aes_256_gcm_siv(void) {
864
880
  return &aead_aes_256_gcm_siv;
865
881
  }
866
882
 
867
- #endif // X86_64 && !NO_ASM
883
+ #endif // AES_GCM_SIV_ASM