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
@@ -30,7 +30,7 @@
30
30
  // A block_t is a Salsa20 block.
31
31
  typedef struct { uint32_t words[16]; } block_t;
32
32
 
33
- OPENSSL_COMPILE_ASSERT(sizeof(block_t) == 64, block_t_has_padding);
33
+ OPENSSL_STATIC_ASSERT(sizeof(block_t) == 64, "block_t has padding");
34
34
 
35
35
  #define R(a, b) (((a) << (b)) | ((a) >> (32 - (b))))
36
36
 
@@ -173,7 +173,7 @@ int EVP_PBE_scrypt(const char *password, size_t password_len,
173
173
 
174
174
  // Allocate and divide up the scratch space. |max_mem| fits in a size_t, which
175
175
  // is no bigger than uint64_t, so none of these operations may overflow.
176
- OPENSSL_COMPILE_ASSERT(UINT64_MAX >= ((size_t)-1), size_t_exceeds_u64);
176
+ OPENSSL_STATIC_ASSERT(UINT64_MAX >= ((size_t)-1), "size_t exceeds uint64_t");
177
177
  size_t B_blocks = p * 2 * r;
178
178
  size_t B_bytes = B_blocks * sizeof(block_t);
179
179
  size_t T_blocks = 2 * r;
@@ -187,6 +187,10 @@ int EVP_PBE_scrypt(const char *password, size_t password_len,
187
187
  int ret = 0;
188
188
  block_t *T = B + B_blocks;
189
189
  block_t *V = T + T_blocks;
190
+
191
+ // NOTE: PKCS5_PBKDF2_HMAC can only fail due to allocation failure
192
+ // or |iterations| of 0 (we pass 1 here). This is consistent with
193
+ // the documented failure conditions of EVP_PBE_scrypt.
190
194
  if (!PKCS5_PBKDF2_HMAC(password, password_len, salt, salt_len, 1,
191
195
  EVP_sha256(), B_bytes, (uint8_t *)B)) {
192
196
  goto err;
@@ -6,7 +6,7 @@
6
6
  * are met:
7
7
  *
8
8
  * 1. Redistributions of source code must retain the above copyright
9
- * notice, this list of conditions and the following disclaimer.
9
+ * notice, this list of conditions and the following disclaimer.
10
10
  *
11
11
  * 2. Redistributions in binary form must reproduce the above copyright
12
12
  * notice, this list of conditions and the following disclaimer in
@@ -534,7 +534,8 @@ static const uint32_t rcon[] = {
534
534
  // for 128-bit blocks, Rijndael never uses more than 10 rcon values
535
535
  };
536
536
 
537
- int AES_set_encrypt_key(const uint8_t *key, unsigned bits, AES_KEY *aeskey) {
537
+ int aes_nohw_set_encrypt_key(const uint8_t *key, unsigned bits,
538
+ AES_KEY *aeskey) {
538
539
  uint32_t *rk;
539
540
  int i = 0;
540
541
  uint32_t temp;
@@ -629,7 +630,8 @@ int AES_set_encrypt_key(const uint8_t *key, unsigned bits, AES_KEY *aeskey) {
629
630
  return 0;
630
631
  }
631
632
 
632
- int AES_set_decrypt_key(const uint8_t *key, unsigned bits, AES_KEY *aeskey) {
633
+ int aes_nohw_set_decrypt_key(const uint8_t *key, unsigned bits,
634
+ AES_KEY *aeskey) {
633
635
  uint32_t *rk;
634
636
  int i, j, status;
635
637
  uint32_t temp;
@@ -677,12 +679,10 @@ int AES_set_decrypt_key(const uint8_t *key, unsigned bits, AES_KEY *aeskey) {
677
679
  return 0;
678
680
  }
679
681
 
680
- void AES_encrypt(const uint8_t *in, uint8_t *out, const AES_KEY *key) {
682
+ void aes_nohw_encrypt(const uint8_t *in, uint8_t *out, const AES_KEY *key) {
681
683
  const uint32_t *rk;
682
684
  uint32_t s0, s1, s2, s3, t0, t1, t2, t3;
683
- #ifndef FULL_UNROLL
684
685
  int r;
685
- #endif // ?FULL_UNROLL
686
686
 
687
687
  assert(in && out && key);
688
688
  rk = key->rd_key;
@@ -693,130 +693,7 @@ void AES_encrypt(const uint8_t *in, uint8_t *out, const AES_KEY *key) {
693
693
  s1 = GETU32(in + 4) ^ rk[1];
694
694
  s2 = GETU32(in + 8) ^ rk[2];
695
695
  s3 = GETU32(in + 12) ^ rk[3];
696
- #ifdef FULL_UNROLL
697
- // round 1:
698
- t0 = Te0[s0 >> 24] ^ Te1[(s1 >> 16) & 0xff] ^ Te2[(s2 >> 8) & 0xff] ^
699
- Te3[s3 & 0xff] ^ rk[4];
700
- t1 = Te0[s1 >> 24] ^ Te1[(s2 >> 16) & 0xff] ^ Te2[(s3 >> 8) & 0xff] ^
701
- Te3[s0 & 0xff] ^ rk[5];
702
- t2 = Te0[s2 >> 24] ^ Te1[(s3 >> 16) & 0xff] ^ Te2[(s0 >> 8) & 0xff] ^
703
- Te3[s1 & 0xff] ^ rk[6];
704
- t3 = Te0[s3 >> 24] ^ Te1[(s0 >> 16) & 0xff] ^ Te2[(s1 >> 8) & 0xff] ^
705
- Te3[s2 & 0xff] ^ rk[7];
706
- // round 2:
707
- s0 = Te0[t0 >> 24] ^ Te1[(t1 >> 16) & 0xff] ^ Te2[(t2 >> 8) & 0xff] ^
708
- Te3[t3 & 0xff] ^ rk[8];
709
- s1 = Te0[t1 >> 24] ^ Te1[(t2 >> 16) & 0xff] ^ Te2[(t3 >> 8) & 0xff] ^
710
- Te3[t0 & 0xff] ^ rk[9];
711
- s2 = Te0[t2 >> 24] ^ Te1[(t3 >> 16) & 0xff] ^ Te2[(t0 >> 8) & 0xff] ^
712
- Te3[t1 & 0xff] ^ rk[10];
713
- s3 = Te0[t3 >> 24] ^ Te1[(t0 >> 16) & 0xff] ^ Te2[(t1 >> 8) & 0xff] ^
714
- Te3[t2 & 0xff] ^ rk[11];
715
- // round 3:
716
- t0 = Te0[s0 >> 24] ^ Te1[(s1 >> 16) & 0xff] ^ Te2[(s2 >> 8) & 0xff] ^
717
- Te3[s3 & 0xff] ^ rk[12];
718
- t1 = Te0[s1 >> 24] ^ Te1[(s2 >> 16) & 0xff] ^ Te2[(s3 >> 8) & 0xff] ^
719
- Te3[s0 & 0xff] ^ rk[13];
720
- t2 = Te0[s2 >> 24] ^ Te1[(s3 >> 16) & 0xff] ^ Te2[(s0 >> 8) & 0xff] ^
721
- Te3[s1 & 0xff] ^ rk[14];
722
- t3 = Te0[s3 >> 24] ^ Te1[(s0 >> 16) & 0xff] ^ Te2[(s1 >> 8) & 0xff] ^
723
- Te3[s2 & 0xff] ^ rk[15];
724
- // round 4:
725
- s0 = Te0[t0 >> 24] ^ Te1[(t1 >> 16) & 0xff] ^ Te2[(t2 >> 8) & 0xff] ^
726
- Te3[t3 & 0xff] ^ rk[16];
727
- s1 = Te0[t1 >> 24] ^ Te1[(t2 >> 16) & 0xff] ^ Te2[(t3 >> 8) & 0xff] ^
728
- Te3[t0 & 0xff] ^ rk[17];
729
- s2 = Te0[t2 >> 24] ^ Te1[(t3 >> 16) & 0xff] ^ Te2[(t0 >> 8) & 0xff] ^
730
- Te3[t1 & 0xff] ^ rk[18];
731
- s3 = Te0[t3 >> 24] ^ Te1[(t0 >> 16) & 0xff] ^ Te2[(t1 >> 8) & 0xff] ^
732
- Te3[t2 & 0xff] ^ rk[19];
733
- // round 5:
734
- t0 = Te0[s0 >> 24] ^ Te1[(s1 >> 16) & 0xff] ^ Te2[(s2 >> 8) & 0xff] ^
735
- Te3[s3 & 0xff] ^ rk[20];
736
- t1 = Te0[s1 >> 24] ^ Te1[(s2 >> 16) & 0xff] ^ Te2[(s3 >> 8) & 0xff] ^
737
- Te3[s0 & 0xff] ^ rk[21];
738
- t2 = Te0[s2 >> 24] ^ Te1[(s3 >> 16) & 0xff] ^ Te2[(s0 >> 8) & 0xff] ^
739
- Te3[s1 & 0xff] ^ rk[22];
740
- t3 = Te0[s3 >> 24] ^ Te1[(s0 >> 16) & 0xff] ^ Te2[(s1 >> 8) & 0xff] ^
741
- Te3[s2 & 0xff] ^ rk[23];
742
- // round 6:
743
- s0 = Te0[t0 >> 24] ^ Te1[(t1 >> 16) & 0xff] ^ Te2[(t2 >> 8) & 0xff] ^
744
- Te3[t3 & 0xff] ^ rk[24];
745
- s1 = Te0[t1 >> 24] ^ Te1[(t2 >> 16) & 0xff] ^ Te2[(t3 >> 8) & 0xff] ^
746
- Te3[t0 & 0xff] ^ rk[25];
747
- s2 = Te0[t2 >> 24] ^ Te1[(t3 >> 16) & 0xff] ^ Te2[(t0 >> 8) & 0xff] ^
748
- Te3[t1 & 0xff] ^ rk[26];
749
- s3 = Te0[t3 >> 24] ^ Te1[(t0 >> 16) & 0xff] ^ Te2[(t1 >> 8) & 0xff] ^
750
- Te3[t2 & 0xff] ^ rk[27];
751
- // round 7:
752
- t0 = Te0[s0 >> 24] ^ Te1[(s1 >> 16) & 0xff] ^ Te2[(s2 >> 8) & 0xff] ^
753
- Te3[s3 & 0xff] ^ rk[28];
754
- t1 = Te0[s1 >> 24] ^ Te1[(s2 >> 16) & 0xff] ^ Te2[(s3 >> 8) & 0xff] ^
755
- Te3[s0 & 0xff] ^ rk[29];
756
- t2 = Te0[s2 >> 24] ^ Te1[(s3 >> 16) & 0xff] ^ Te2[(s0 >> 8) & 0xff] ^
757
- Te3[s1 & 0xff] ^ rk[30];
758
- t3 = Te0[s3 >> 24] ^ Te1[(s0 >> 16) & 0xff] ^ Te2[(s1 >> 8) & 0xff] ^
759
- Te3[s2 & 0xff] ^ rk[31];
760
- // round 8:
761
- s0 = Te0[t0 >> 24] ^ Te1[(t1 >> 16) & 0xff] ^ Te2[(t2 >> 8) & 0xff] ^
762
- Te3[t3 & 0xff] ^ rk[32];
763
- s1 = Te0[t1 >> 24] ^ Te1[(t2 >> 16) & 0xff] ^ Te2[(t3 >> 8) & 0xff] ^
764
- Te3[t0 & 0xff] ^ rk[33];
765
- s2 = Te0[t2 >> 24] ^ Te1[(t3 >> 16) & 0xff] ^ Te2[(t0 >> 8) & 0xff] ^
766
- Te3[t1 & 0xff] ^ rk[34];
767
- s3 = Te0[t3 >> 24] ^ Te1[(t0 >> 16) & 0xff] ^ Te2[(t1 >> 8) & 0xff] ^
768
- Te3[t2 & 0xff] ^ rk[35];
769
- // round 9:
770
- t0 = Te0[s0 >> 24] ^ Te1[(s1 >> 16) & 0xff] ^ Te2[(s2 >> 8) & 0xff] ^
771
- Te3[s3 & 0xff] ^ rk[36];
772
- t1 = Te0[s1 >> 24] ^ Te1[(s2 >> 16) & 0xff] ^ Te2[(s3 >> 8) & 0xff] ^
773
- Te3[s0 & 0xff] ^ rk[37];
774
- t2 = Te0[s2 >> 24] ^ Te1[(s3 >> 16) & 0xff] ^ Te2[(s0 >> 8) & 0xff] ^
775
- Te3[s1 & 0xff] ^ rk[38];
776
- t3 = Te0[s3 >> 24] ^ Te1[(s0 >> 16) & 0xff] ^ Te2[(s1 >> 8) & 0xff] ^
777
- Te3[s2 & 0xff] ^ rk[39];
778
- if (key->rounds > 10) {
779
- // round 10:
780
- s0 = Te0[t0 >> 24] ^ Te1[(t1 >> 16) & 0xff] ^ Te2[(t2 >> 8) & 0xff] ^
781
- Te3[t3 & 0xff] ^ rk[40];
782
- s1 = Te0[t1 >> 24] ^ Te1[(t2 >> 16) & 0xff] ^ Te2[(t3 >> 8) & 0xff] ^
783
- Te3[t0 & 0xff] ^ rk[41];
784
- s2 = Te0[t2 >> 24] ^ Te1[(t3 >> 16) & 0xff] ^ Te2[(t0 >> 8) & 0xff] ^
785
- Te3[t1 & 0xff] ^ rk[42];
786
- s3 = Te0[t3 >> 24] ^ Te1[(t0 >> 16) & 0xff] ^ Te2[(t1 >> 8) & 0xff] ^
787
- Te3[t2 & 0xff] ^ rk[43];
788
- // round 11:
789
- t0 = Te0[s0 >> 24] ^ Te1[(s1 >> 16) & 0xff] ^ Te2[(s2 >> 8) & 0xff] ^
790
- Te3[s3 & 0xff] ^ rk[44];
791
- t1 = Te0[s1 >> 24] ^ Te1[(s2 >> 16) & 0xff] ^ Te2[(s3 >> 8) & 0xff] ^
792
- Te3[s0 & 0xff] ^ rk[45];
793
- t2 = Te0[s2 >> 24] ^ Te1[(s3 >> 16) & 0xff] ^ Te2[(s0 >> 8) & 0xff] ^
794
- Te3[s1 & 0xff] ^ rk[46];
795
- t3 = Te0[s3 >> 24] ^ Te1[(s0 >> 16) & 0xff] ^ Te2[(s1 >> 8) & 0xff] ^
796
- Te3[s2 & 0xff] ^ rk[47];
797
- if (key->rounds > 12) {
798
- // round 12:
799
- s0 = Te0[t0 >> 24] ^ Te1[(t1 >> 16) & 0xff] ^ Te2[(t2 >> 8) & 0xff] ^
800
- Te3[t3 & 0xff] ^ rk[48];
801
- s1 = Te0[t1 >> 24] ^ Te1[(t2 >> 16) & 0xff] ^ Te2[(t3 >> 8) & 0xff] ^
802
- Te3[t0 & 0xff] ^ rk[49];
803
- s2 = Te0[t2 >> 24] ^ Te1[(t3 >> 16) & 0xff] ^ Te2[(t0 >> 8) & 0xff] ^
804
- Te3[t1 & 0xff] ^ rk[50];
805
- s3 = Te0[t3 >> 24] ^ Te1[(t0 >> 16) & 0xff] ^ Te2[(t1 >> 8) & 0xff] ^
806
- Te3[t2 & 0xff] ^ rk[51];
807
- // round 13:
808
- t0 = Te0[s0 >> 24] ^ Te1[(s1 >> 16) & 0xff] ^ Te2[(s2 >> 8) & 0xff] ^
809
- Te3[s3 & 0xff] ^ rk[52];
810
- t1 = Te0[s1 >> 24] ^ Te1[(s2 >> 16) & 0xff] ^ Te2[(s3 >> 8) & 0xff] ^
811
- Te3[s0 & 0xff] ^ rk[53];
812
- t2 = Te0[s2 >> 24] ^ Te1[(s3 >> 16) & 0xff] ^ Te2[(s0 >> 8) & 0xff] ^
813
- Te3[s1 & 0xff] ^ rk[54];
814
- t3 = Te0[s3 >> 24] ^ Te1[(s0 >> 16) & 0xff] ^ Te2[(s1 >> 8) & 0xff] ^
815
- Te3[s2 & 0xff] ^ rk[55];
816
- }
817
- }
818
- rk += key->rounds << 2;
819
- #else // !FULL_UNROLL
696
+
820
697
  // Nr - 1 full rounds:
821
698
  r = key->rounds >> 1;
822
699
  for (;;) {
@@ -843,7 +720,7 @@ void AES_encrypt(const uint8_t *in, uint8_t *out, const AES_KEY *key) {
843
720
  s3 = Te0[(t3 >> 24)] ^ Te1[(t0 >> 16) & 0xff] ^ Te2[(t1 >> 8) & 0xff] ^
844
721
  Te3[(t2) & 0xff] ^ rk[3];
845
722
  }
846
- #endif // ?FULL_UNROLL
723
+
847
724
  // apply last round and map cipher state to byte array block:
848
725
  s0 = (Te2[(t0 >> 24)] & 0xff000000) ^ (Te3[(t1 >> 16) & 0xff] & 0x00ff0000) ^
849
726
  (Te0[(t2 >> 8) & 0xff] & 0x0000ff00) ^ (Te1[(t3) & 0xff] & 0x000000ff) ^
@@ -863,12 +740,10 @@ void AES_encrypt(const uint8_t *in, uint8_t *out, const AES_KEY *key) {
863
740
  PUTU32(out + 12, s3);
864
741
  }
865
742
 
866
- void AES_decrypt(const uint8_t *in, uint8_t *out, const AES_KEY *key) {
743
+ void aes_nohw_decrypt(const uint8_t *in, uint8_t *out, const AES_KEY *key) {
867
744
  const uint32_t *rk;
868
745
  uint32_t s0, s1, s2, s3, t0, t1, t2, t3;
869
- #ifndef FULL_UNROLL
870
746
  int r;
871
- #endif // ?FULL_UNROLL
872
747
 
873
748
  assert(in && out && key);
874
749
  rk = key->rd_key;
@@ -879,130 +754,7 @@ void AES_decrypt(const uint8_t *in, uint8_t *out, const AES_KEY *key) {
879
754
  s1 = GETU32(in + 4) ^ rk[1];
880
755
  s2 = GETU32(in + 8) ^ rk[2];
881
756
  s3 = GETU32(in + 12) ^ rk[3];
882
- #ifdef FULL_UNROLL
883
- // round 1:
884
- t0 = Td0[s0 >> 24] ^ Td1[(s3 >> 16) & 0xff] ^ Td2[(s2 >> 8) & 0xff] ^
885
- Td3[s1 & 0xff] ^ rk[4];
886
- t1 = Td0[s1 >> 24] ^ Td1[(s0 >> 16) & 0xff] ^ Td2[(s3 >> 8) & 0xff] ^
887
- Td3[s2 & 0xff] ^ rk[5];
888
- t2 = Td0[s2 >> 24] ^ Td1[(s1 >> 16) & 0xff] ^ Td2[(s0 >> 8) & 0xff] ^
889
- Td3[s3 & 0xff] ^ rk[6];
890
- t3 = Td0[s3 >> 24] ^ Td1[(s2 >> 16) & 0xff] ^ Td2[(s1 >> 8) & 0xff] ^
891
- Td3[s0 & 0xff] ^ rk[7];
892
- // round 2:
893
- s0 = Td0[t0 >> 24] ^ Td1[(t3 >> 16) & 0xff] ^ Td2[(t2 >> 8) & 0xff] ^
894
- Td3[t1 & 0xff] ^ rk[8];
895
- s1 = Td0[t1 >> 24] ^ Td1[(t0 >> 16) & 0xff] ^ Td2[(t3 >> 8) & 0xff] ^
896
- Td3[t2 & 0xff] ^ rk[9];
897
- s2 = Td0[t2 >> 24] ^ Td1[(t1 >> 16) & 0xff] ^ Td2[(t0 >> 8) & 0xff] ^
898
- Td3[t3 & 0xff] ^ rk[10];
899
- s3 = Td0[t3 >> 24] ^ Td1[(t2 >> 16) & 0xff] ^ Td2[(t1 >> 8) & 0xff] ^
900
- Td3[t0 & 0xff] ^ rk[11];
901
- // round 3:
902
- t0 = Td0[s0 >> 24] ^ Td1[(s3 >> 16) & 0xff] ^ Td2[(s2 >> 8) & 0xff] ^
903
- Td3[s1 & 0xff] ^ rk[12];
904
- t1 = Td0[s1 >> 24] ^ Td1[(s0 >> 16) & 0xff] ^ Td2[(s3 >> 8) & 0xff] ^
905
- Td3[s2 & 0xff] ^ rk[13];
906
- t2 = Td0[s2 >> 24] ^ Td1[(s1 >> 16) & 0xff] ^ Td2[(s0 >> 8) & 0xff] ^
907
- Td3[s3 & 0xff] ^ rk[14];
908
- t3 = Td0[s3 >> 24] ^ Td1[(s2 >> 16) & 0xff] ^ Td2[(s1 >> 8) & 0xff] ^
909
- Td3[s0 & 0xff] ^ rk[15];
910
- // round 4:
911
- s0 = Td0[t0 >> 24] ^ Td1[(t3 >> 16) & 0xff] ^ Td2[(t2 >> 8) & 0xff] ^
912
- Td3[t1 & 0xff] ^ rk[16];
913
- s1 = Td0[t1 >> 24] ^ Td1[(t0 >> 16) & 0xff] ^ Td2[(t3 >> 8) & 0xff] ^
914
- Td3[t2 & 0xff] ^ rk[17];
915
- s2 = Td0[t2 >> 24] ^ Td1[(t1 >> 16) & 0xff] ^ Td2[(t0 >> 8) & 0xff] ^
916
- Td3[t3 & 0xff] ^ rk[18];
917
- s3 = Td0[t3 >> 24] ^ Td1[(t2 >> 16) & 0xff] ^ Td2[(t1 >> 8) & 0xff] ^
918
- Td3[t0 & 0xff] ^ rk[19];
919
- // round 5:
920
- t0 = Td0[s0 >> 24] ^ Td1[(s3 >> 16) & 0xff] ^ Td2[(s2 >> 8) & 0xff] ^
921
- Td3[s1 & 0xff] ^ rk[20];
922
- t1 = Td0[s1 >> 24] ^ Td1[(s0 >> 16) & 0xff] ^ Td2[(s3 >> 8) & 0xff] ^
923
- Td3[s2 & 0xff] ^ rk[21];
924
- t2 = Td0[s2 >> 24] ^ Td1[(s1 >> 16) & 0xff] ^ Td2[(s0 >> 8) & 0xff] ^
925
- Td3[s3 & 0xff] ^ rk[22];
926
- t3 = Td0[s3 >> 24] ^ Td1[(s2 >> 16) & 0xff] ^ Td2[(s1 >> 8) & 0xff] ^
927
- Td3[s0 & 0xff] ^ rk[23];
928
- // round 6:
929
- s0 = Td0[t0 >> 24] ^ Td1[(t3 >> 16) & 0xff] ^ Td2[(t2 >> 8) & 0xff] ^
930
- Td3[t1 & 0xff] ^ rk[24];
931
- s1 = Td0[t1 >> 24] ^ Td1[(t0 >> 16) & 0xff] ^ Td2[(t3 >> 8) & 0xff] ^
932
- Td3[t2 & 0xff] ^ rk[25];
933
- s2 = Td0[t2 >> 24] ^ Td1[(t1 >> 16) & 0xff] ^ Td2[(t0 >> 8) & 0xff] ^
934
- Td3[t3 & 0xff] ^ rk[26];
935
- s3 = Td0[t3 >> 24] ^ Td1[(t2 >> 16) & 0xff] ^ Td2[(t1 >> 8) & 0xff] ^
936
- Td3[t0 & 0xff] ^ rk[27];
937
- // round 7:
938
- t0 = Td0[s0 >> 24] ^ Td1[(s3 >> 16) & 0xff] ^ Td2[(s2 >> 8) & 0xff] ^
939
- Td3[s1 & 0xff] ^ rk[28];
940
- t1 = Td0[s1 >> 24] ^ Td1[(s0 >> 16) & 0xff] ^ Td2[(s3 >> 8) & 0xff] ^
941
- Td3[s2 & 0xff] ^ rk[29];
942
- t2 = Td0[s2 >> 24] ^ Td1[(s1 >> 16) & 0xff] ^ Td2[(s0 >> 8) & 0xff] ^
943
- Td3[s3 & 0xff] ^ rk[30];
944
- t3 = Td0[s3 >> 24] ^ Td1[(s2 >> 16) & 0xff] ^ Td2[(s1 >> 8) & 0xff] ^
945
- Td3[s0 & 0xff] ^ rk[31];
946
- // round 8:
947
- s0 = Td0[t0 >> 24] ^ Td1[(t3 >> 16) & 0xff] ^ Td2[(t2 >> 8) & 0xff] ^
948
- Td3[t1 & 0xff] ^ rk[32];
949
- s1 = Td0[t1 >> 24] ^ Td1[(t0 >> 16) & 0xff] ^ Td2[(t3 >> 8) & 0xff] ^
950
- Td3[t2 & 0xff] ^ rk[33];
951
- s2 = Td0[t2 >> 24] ^ Td1[(t1 >> 16) & 0xff] ^ Td2[(t0 >> 8) & 0xff] ^
952
- Td3[t3 & 0xff] ^ rk[34];
953
- s3 = Td0[t3 >> 24] ^ Td1[(t2 >> 16) & 0xff] ^ Td2[(t1 >> 8) & 0xff] ^
954
- Td3[t0 & 0xff] ^ rk[35];
955
- // round 9:
956
- t0 = Td0[s0 >> 24] ^ Td1[(s3 >> 16) & 0xff] ^ Td2[(s2 >> 8) & 0xff] ^
957
- Td3[s1 & 0xff] ^ rk[36];
958
- t1 = Td0[s1 >> 24] ^ Td1[(s0 >> 16) & 0xff] ^ Td2[(s3 >> 8) & 0xff] ^
959
- Td3[s2 & 0xff] ^ rk[37];
960
- t2 = Td0[s2 >> 24] ^ Td1[(s1 >> 16) & 0xff] ^ Td2[(s0 >> 8) & 0xff] ^
961
- Td3[s3 & 0xff] ^ rk[38];
962
- t3 = Td0[s3 >> 24] ^ Td1[(s2 >> 16) & 0xff] ^ Td2[(s1 >> 8) & 0xff] ^
963
- Td3[s0 & 0xff] ^ rk[39];
964
- if (key->rounds > 10) {
965
- // round 10:
966
- s0 = Td0[t0 >> 24] ^ Td1[(t3 >> 16) & 0xff] ^ Td2[(t2 >> 8) & 0xff] ^
967
- Td3[t1 & 0xff] ^ rk[40];
968
- s1 = Td0[t1 >> 24] ^ Td1[(t0 >> 16) & 0xff] ^ Td2[(t3 >> 8) & 0xff] ^
969
- Td3[t2 & 0xff] ^ rk[41];
970
- s2 = Td0[t2 >> 24] ^ Td1[(t1 >> 16) & 0xff] ^ Td2[(t0 >> 8) & 0xff] ^
971
- Td3[t3 & 0xff] ^ rk[42];
972
- s3 = Td0[t3 >> 24] ^ Td1[(t2 >> 16) & 0xff] ^ Td2[(t1 >> 8) & 0xff] ^
973
- Td3[t0 & 0xff] ^ rk[43];
974
- // round 11:
975
- t0 = Td0[s0 >> 24] ^ Td1[(s3 >> 16) & 0xff] ^ Td2[(s2 >> 8) & 0xff] ^
976
- Td3[s1 & 0xff] ^ rk[44];
977
- t1 = Td0[s1 >> 24] ^ Td1[(s0 >> 16) & 0xff] ^ Td2[(s3 >> 8) & 0xff] ^
978
- Td3[s2 & 0xff] ^ rk[45];
979
- t2 = Td0[s2 >> 24] ^ Td1[(s1 >> 16) & 0xff] ^ Td2[(s0 >> 8) & 0xff] ^
980
- Td3[s3 & 0xff] ^ rk[46];
981
- t3 = Td0[s3 >> 24] ^ Td1[(s2 >> 16) & 0xff] ^ Td2[(s1 >> 8) & 0xff] ^
982
- Td3[s0 & 0xff] ^ rk[47];
983
- if (key->rounds > 12) {
984
- // round 12:
985
- s0 = Td0[t0 >> 24] ^ Td1[(t3 >> 16) & 0xff] ^ Td2[(t2 >> 8) & 0xff] ^
986
- Td3[t1 & 0xff] ^ rk[48];
987
- s1 = Td0[t1 >> 24] ^ Td1[(t0 >> 16) & 0xff] ^ Td2[(t3 >> 8) & 0xff] ^
988
- Td3[t2 & 0xff] ^ rk[49];
989
- s2 = Td0[t2 >> 24] ^ Td1[(t1 >> 16) & 0xff] ^ Td2[(t0 >> 8) & 0xff] ^
990
- Td3[t3 & 0xff] ^ rk[50];
991
- s3 = Td0[t3 >> 24] ^ Td1[(t2 >> 16) & 0xff] ^ Td2[(t1 >> 8) & 0xff] ^
992
- Td3[t0 & 0xff] ^ rk[51];
993
- // round 13:
994
- t0 = Td0[s0 >> 24] ^ Td1[(s3 >> 16) & 0xff] ^ Td2[(s2 >> 8) & 0xff] ^
995
- Td3[s1 & 0xff] ^ rk[52];
996
- t1 = Td0[s1 >> 24] ^ Td1[(s0 >> 16) & 0xff] ^ Td2[(s3 >> 8) & 0xff] ^
997
- Td3[s2 & 0xff] ^ rk[53];
998
- t2 = Td0[s2 >> 24] ^ Td1[(s1 >> 16) & 0xff] ^ Td2[(s0 >> 8) & 0xff] ^
999
- Td3[s3 & 0xff] ^ rk[54];
1000
- t3 = Td0[s3 >> 24] ^ Td1[(s2 >> 16) & 0xff] ^ Td2[(s1 >> 8) & 0xff] ^
1001
- Td3[s0 & 0xff] ^ rk[55];
1002
- }
1003
- }
1004
- rk += key->rounds << 2;
1005
- #else // !FULL_UNROLL
757
+
1006
758
  // Nr - 1 full rounds:
1007
759
  r = key->rounds >> 1;
1008
760
  for (;;) {
@@ -1029,7 +781,7 @@ void AES_decrypt(const uint8_t *in, uint8_t *out, const AES_KEY *key) {
1029
781
  s3 = Td0[(t3 >> 24)] ^ Td1[(t2 >> 16) & 0xff] ^ Td2[(t1 >> 8) & 0xff] ^
1030
782
  Td3[(t0) & 0xff] ^ rk[3];
1031
783
  }
1032
- #endif // ?FULL_UNROLL
784
+
1033
785
  // apply last round and
1034
786
  // map cipher state to byte array block:
1035
787
  s0 = ((uint32_t)Td4[(t0 >> 24)] << 24) ^
@@ -1054,47 +806,55 @@ void AES_decrypt(const uint8_t *in, uint8_t *out, const AES_KEY *key) {
1054
806
  PUTU32(out + 12, s3);
1055
807
  }
1056
808
 
1057
- #else
809
+ #endif // NO_ASM || (!X86 && !X86_64 && !ARM)
1058
810
 
1059
- // In this case several functions are provided by asm code. However, one cannot
1060
- // control asm symbol visibility with command line flags and such so they are
1061
- // always hidden and wrapped by these C functions, which can be so
1062
- // controlled.
811
+ // Be aware that different sets of AES functions use incompatible key
812
+ // representations, varying in format of the key schedule, the |AES_KEY.rounds|
813
+ // value, or both. Therefore they cannot mix. Also, on AArch64, the plain-C
814
+ // code, above, is incompatible with the |aes_hw_*| functions.
1063
815
 
1064
- void asm_AES_encrypt(const uint8_t *in, uint8_t *out, const AES_KEY *key);
1065
816
  void AES_encrypt(const uint8_t *in, uint8_t *out, const AES_KEY *key) {
1066
817
  if (hwaes_capable()) {
1067
818
  aes_hw_encrypt(in, out, key);
819
+ } else if (vpaes_capable()) {
820
+ vpaes_encrypt(in, out, key);
1068
821
  } else {
1069
- asm_AES_encrypt(in, out, key);
822
+ aes_nohw_encrypt(in, out, key);
1070
823
  }
1071
824
  }
1072
825
 
1073
- void asm_AES_decrypt(const uint8_t *in, uint8_t *out, const AES_KEY *key);
1074
826
  void AES_decrypt(const uint8_t *in, uint8_t *out, const AES_KEY *key) {
1075
827
  if (hwaes_capable()) {
1076
828
  aes_hw_decrypt(in, out, key);
829
+ } else if (vpaes_capable()) {
830
+ vpaes_decrypt(in, out, key);
1077
831
  } else {
1078
- asm_AES_decrypt(in, out, key);
832
+ aes_nohw_decrypt(in, out, key);
1079
833
  }
1080
834
  }
1081
835
 
1082
- int asm_AES_set_encrypt_key(const uint8_t *key, unsigned bits, AES_KEY *aeskey);
1083
836
  int AES_set_encrypt_key(const uint8_t *key, unsigned bits, AES_KEY *aeskey) {
837
+ if (bits != 128 && bits != 192 && bits != 256) {
838
+ return -2;
839
+ }
1084
840
  if (hwaes_capable()) {
1085
841
  return aes_hw_set_encrypt_key(key, bits, aeskey);
842
+ } else if (vpaes_capable()) {
843
+ return vpaes_set_encrypt_key(key, bits, aeskey);
1086
844
  } else {
1087
- return asm_AES_set_encrypt_key(key, bits, aeskey);
845
+ return aes_nohw_set_encrypt_key(key, bits, aeskey);
1088
846
  }
1089
847
  }
1090
848
 
1091
- int asm_AES_set_decrypt_key(const uint8_t *key, unsigned bits, AES_KEY *aeskey);
1092
849
  int AES_set_decrypt_key(const uint8_t *key, unsigned bits, AES_KEY *aeskey) {
850
+ if (bits != 128 && bits != 192 && bits != 256) {
851
+ return -2;
852
+ }
1093
853
  if (hwaes_capable()) {
1094
854
  return aes_hw_set_decrypt_key(key, bits, aeskey);
855
+ } else if (vpaes_capable()) {
856
+ return vpaes_set_decrypt_key(key, bits, aeskey);
1095
857
  } else {
1096
- return asm_AES_set_decrypt_key(key, bits, aeskey);
858
+ return aes_nohw_set_decrypt_key(key, bits, aeskey);
1097
859
  }
1098
860
  }
1099
-
1100
- #endif // OPENSSL_NO_ASM || (!OPENSSL_X86 && !OPENSSL_X86_64 && !OPENSSL_ARM)
@@ -24,21 +24,54 @@ extern "C" {
24
24
  #endif
25
25
 
26
26
 
27
- #if !defined(OPENSSL_NO_ASM) && (defined(OPENSSL_ARM) || defined(OPENSSL_AARCH64))
27
+ #if !defined(OPENSSL_NO_ASM)
28
+
29
+ #if defined(OPENSSL_X86) || defined(OPENSSL_X86_64)
28
30
  #define HWAES
31
+ #define HWAES_ECB
32
+
33
+ OPENSSL_INLINE int hwaes_capable(void) {
34
+ return (OPENSSL_ia32cap_get()[1] & (1 << (57 - 32))) != 0;
35
+ }
29
36
 
30
- static int hwaes_capable(void) {
31
- return CRYPTO_is_ARMv8_AES_capable();
37
+ #define VPAES
38
+ #if defined(OPENSSL_X86_64)
39
+ #define VPAES_CTR32
40
+ #endif
41
+ #define VPAES_CBC
42
+ OPENSSL_INLINE int vpaes_capable(void) {
43
+ return (OPENSSL_ia32cap_get()[1] & (1 << (41 - 32))) != 0;
32
44
  }
33
- #endif // !NO_ASM && (AES || AARCH64)
34
45
 
35
- #if !defined(OPENSSL_NO_ASM) && defined(OPENSSL_PPC64LE)
46
+ #elif defined(OPENSSL_ARM) || defined(OPENSSL_AARCH64)
47
+ #define HWAES
48
+
49
+ OPENSSL_INLINE int hwaes_capable(void) { return CRYPTO_is_ARMv8_AES_capable(); }
50
+
51
+ #if defined(OPENSSL_ARM)
52
+ #define BSAES
53
+ #define VPAES
54
+ #define VPAES_CTR32
55
+ OPENSSL_INLINE int bsaes_capable(void) { return CRYPTO_is_NEON_capable(); }
56
+ OPENSSL_INLINE int vpaes_capable(void) { return CRYPTO_is_NEON_capable(); }
57
+ #endif
58
+
59
+ #if defined(OPENSSL_AARCH64)
60
+ #define VPAES
61
+ #define VPAES_CBC
62
+ #define VPAES_CTR32
63
+ OPENSSL_INLINE int vpaes_capable(void) { return CRYPTO_is_NEON_capable(); }
64
+ #endif
65
+
66
+ #elif defined(OPENSSL_PPC64LE)
36
67
  #define HWAES
37
68
 
38
- static int hwaes_capable(void) {
69
+ OPENSSL_INLINE int hwaes_capable(void) {
39
70
  return CRYPTO_is_PPC64LE_vcrypto_capable();
40
71
  }
41
- #endif // !NO_ASM && PPC64LE
72
+ #endif
73
+
74
+ #endif // !NO_ASM
42
75
 
43
76
 
44
77
  #if defined(HWAES)
@@ -58,41 +91,148 @@ void aes_hw_ctr32_encrypt_blocks(const uint8_t *in, uint8_t *out, size_t len,
58
91
 
59
92
  // If HWAES isn't defined then we provide dummy functions for each of the hwaes
60
93
  // functions.
61
- static int hwaes_capable(void) { return 0; }
94
+ OPENSSL_INLINE int hwaes_capable(void) { return 0; }
62
95
 
63
- static int aes_hw_set_encrypt_key(const uint8_t *user_key, int bits,
64
- AES_KEY *key) {
96
+ OPENSSL_INLINE int aes_hw_set_encrypt_key(const uint8_t *user_key, int bits,
97
+ AES_KEY *key) {
65
98
  abort();
66
99
  }
67
100
 
68
- static int aes_hw_set_decrypt_key(const uint8_t *user_key, int bits,
69
- AES_KEY *key) {
101
+ OPENSSL_INLINE int aes_hw_set_decrypt_key(const uint8_t *user_key, int bits,
102
+ AES_KEY *key) {
70
103
  abort();
71
104
  }
72
105
 
73
- static void aes_hw_encrypt(const uint8_t *in, uint8_t *out,
74
- const AES_KEY *key) {
106
+ OPENSSL_INLINE void aes_hw_encrypt(const uint8_t *in, uint8_t *out,
107
+ const AES_KEY *key) {
75
108
  abort();
76
109
  }
77
110
 
78
- static void aes_hw_decrypt(const uint8_t *in, uint8_t *out,
79
- const AES_KEY *key) {
111
+ OPENSSL_INLINE void aes_hw_decrypt(const uint8_t *in, uint8_t *out,
112
+ const AES_KEY *key) {
80
113
  abort();
81
114
  }
82
115
 
83
- static void aes_hw_cbc_encrypt(const uint8_t *in, uint8_t *out, size_t length,
84
- const AES_KEY *key, uint8_t *ivec, int enc) {
116
+ OPENSSL_INLINE void aes_hw_cbc_encrypt(const uint8_t *in, uint8_t *out,
117
+ size_t length, const AES_KEY *key,
118
+ uint8_t *ivec, int enc) {
85
119
  abort();
86
120
  }
87
121
 
88
- static void aes_hw_ctr32_encrypt_blocks(const uint8_t *in, uint8_t *out,
89
- size_t len, const AES_KEY *key,
90
- const uint8_t ivec[16]) {
122
+ OPENSSL_INLINE void aes_hw_ctr32_encrypt_blocks(const uint8_t *in, uint8_t *out,
123
+ size_t len, const AES_KEY *key,
124
+ const uint8_t ivec[16]) {
91
125
  abort();
92
126
  }
93
127
 
94
128
  #endif // !HWAES
95
129
 
130
+
131
+ #if defined(HWAES_ECB)
132
+ void aes_hw_ecb_encrypt(const uint8_t *in, uint8_t *out, size_t length,
133
+ const AES_KEY *key, const int enc);
134
+ #endif // HWAES_ECB
135
+
136
+
137
+ #if defined(BSAES)
138
+ // Note |bsaes_cbc_encrypt| requires |enc| to be zero.
139
+ void bsaes_cbc_encrypt(const uint8_t *in, uint8_t *out, size_t length,
140
+ const AES_KEY *key, uint8_t ivec[16], int enc);
141
+ void bsaes_ctr32_encrypt_blocks(const uint8_t *in, uint8_t *out, size_t len,
142
+ const AES_KEY *key, const uint8_t ivec[16]);
143
+ // VPAES to BSAES conversions are available on all BSAES platforms.
144
+ void vpaes_encrypt_key_to_bsaes(AES_KEY *out_bsaes, const AES_KEY *vpaes);
145
+ void vpaes_decrypt_key_to_bsaes(AES_KEY *out_bsaes, const AES_KEY *vpaes);
146
+ #else
147
+ OPENSSL_INLINE char bsaes_capable(void) { return 0; }
148
+
149
+ // On other platforms, bsaes_capable() will always return false and so the
150
+ // following will never be called.
151
+ OPENSSL_INLINE void bsaes_cbc_encrypt(const uint8_t *in, uint8_t *out,
152
+ size_t length, const AES_KEY *key,
153
+ uint8_t ivec[16], int enc) {
154
+ abort();
155
+ }
156
+
157
+ OPENSSL_INLINE void bsaes_ctr32_encrypt_blocks(const uint8_t *in, uint8_t *out,
158
+ size_t len, const AES_KEY *key,
159
+ const uint8_t ivec[16]) {
160
+ abort();
161
+ }
162
+
163
+ OPENSSL_INLINE void vpaes_encrypt_key_to_bsaes(AES_KEY *out_bsaes,
164
+ const AES_KEY *vpaes) {
165
+ abort();
166
+ }
167
+
168
+ OPENSSL_INLINE void vpaes_decrypt_key_to_bsaes(AES_KEY *out_bsaes,
169
+ const AES_KEY *vpaes) {
170
+ abort();
171
+ }
172
+ #endif // !BSAES
173
+
174
+
175
+ #if defined(VPAES)
176
+ // On platforms where VPAES gets defined (just above), then these functions are
177
+ // provided by asm.
178
+ int vpaes_set_encrypt_key(const uint8_t *userKey, int bits, AES_KEY *key);
179
+ int vpaes_set_decrypt_key(const uint8_t *userKey, int bits, AES_KEY *key);
180
+
181
+ void vpaes_encrypt(const uint8_t *in, uint8_t *out, const AES_KEY *key);
182
+ void vpaes_decrypt(const uint8_t *in, uint8_t *out, const AES_KEY *key);
183
+
184
+ #if defined(VPAES_CBC)
185
+ void vpaes_cbc_encrypt(const uint8_t *in, uint8_t *out, size_t length,
186
+ const AES_KEY *key, uint8_t *ivec, int enc);
187
+ #endif
188
+ #if defined(VPAES_CTR32)
189
+ void vpaes_ctr32_encrypt_blocks(const uint8_t *in, uint8_t *out, size_t len,
190
+ const AES_KEY *key, const uint8_t ivec[16]);
191
+ #endif
192
+ #else
193
+ OPENSSL_INLINE char vpaes_capable(void) { return 0; }
194
+
195
+ // On other platforms, vpaes_capable() will always return false and so the
196
+ // following will never be called.
197
+ OPENSSL_INLINE int vpaes_set_encrypt_key(const uint8_t *userKey, int bits,
198
+ AES_KEY *key) {
199
+ abort();
200
+ }
201
+ OPENSSL_INLINE int vpaes_set_decrypt_key(const uint8_t *userKey, int bits,
202
+ AES_KEY *key) {
203
+ abort();
204
+ }
205
+ OPENSSL_INLINE void vpaes_encrypt(const uint8_t *in, uint8_t *out,
206
+ const AES_KEY *key) {
207
+ abort();
208
+ }
209
+ OPENSSL_INLINE void vpaes_decrypt(const uint8_t *in, uint8_t *out,
210
+ const AES_KEY *key) {
211
+ abort();
212
+ }
213
+ OPENSSL_INLINE void vpaes_cbc_encrypt(const uint8_t *in, uint8_t *out,
214
+ size_t length, const AES_KEY *key,
215
+ uint8_t *ivec, int enc) {
216
+ abort();
217
+ }
218
+ #endif // !VPAES
219
+
220
+
221
+ void aes_nohw_encrypt(const uint8_t *in, uint8_t *out, const AES_KEY *key);
222
+ void aes_nohw_decrypt(const uint8_t *in, uint8_t *out, const AES_KEY *key);
223
+ int aes_nohw_set_encrypt_key(const uint8_t *key, unsigned bits,
224
+ AES_KEY *aeskey);
225
+ int aes_nohw_set_decrypt_key(const uint8_t *key, unsigned bits,
226
+ AES_KEY *aeskey);
227
+
228
+ #if !defined(OPENSSL_NO_ASM) && \
229
+ (defined(OPENSSL_X86_64) || defined(OPENSSL_X86))
230
+ #define AES_NOHW_CBC
231
+ void aes_nohw_cbc_encrypt(const uint8_t *in, uint8_t *out, size_t len,
232
+ const AES_KEY *key, uint8_t *ivec, const int enc);
233
+ #endif
234
+
235
+
96
236
  #if defined(__cplusplus)
97
237
  } // extern C
98
238
  #endif