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.
- checksums.yaml +4 -4
- data/Makefile +306 -243
- data/etc/roots.pem +0 -100
- data/include/grpc/grpc_security.h +44 -18
- data/include/grpc/impl/codegen/grpc_types.h +15 -0
- data/include/grpc/impl/codegen/port_platform.h +27 -11
- data/include/grpc/impl/codegen/sync_generic.h +1 -1
- data/src/boringssl/err_data.c +695 -650
- data/src/core/ext/filters/client_channel/client_channel.cc +257 -179
- data/src/core/ext/filters/client_channel/client_channel.h +24 -0
- data/src/core/ext/filters/client_channel/client_channel_channelz.cc +2 -3
- data/src/core/ext/filters/client_channel/client_channel_factory.h +1 -5
- data/src/core/ext/filters/client_channel/health/health_check_client.cc +18 -45
- data/src/core/ext/filters/client_channel/health/health_check_client.h +5 -13
- data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +1 -1
- data/src/core/ext/filters/client_channel/lb_policy.cc +2 -3
- data/src/core/ext/filters/client_channel/lb_policy.h +65 -55
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +14 -14
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +113 -36
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +14 -19
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +36 -13
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +3 -10
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds.cc +814 -1589
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +2 -5
- data/src/core/ext/filters/client_channel/lb_policy_factory.h +3 -6
- data/src/core/ext/filters/client_channel/resolver.cc +1 -2
- data/src/core/ext/filters/client_channel/resolver.h +8 -16
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +25 -8
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.cc +46 -12
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +10 -17
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_libuv.cc +7 -8
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +4 -4
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +111 -44
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +22 -14
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +1 -1
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.cc +2 -2
- data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +29 -10
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +27 -36
- data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +7 -10
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +60 -16
- data/src/core/ext/filters/client_channel/resolver_factory.h +4 -8
- data/src/core/ext/filters/client_channel/resolver_registry.cc +1 -1
- data/src/core/ext/filters/client_channel/resolver_registry.h +1 -1
- data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +7 -10
- data/src/core/ext/filters/client_channel/resolving_lb_policy.cc +7 -8
- data/src/core/ext/filters/client_channel/resolving_lb_policy.h +1 -1
- data/src/core/ext/filters/client_channel/retry_throttle.cc +5 -5
- data/src/core/ext/filters/client_channel/retry_throttle.h +1 -4
- data/src/core/ext/filters/client_channel/service_config.h +8 -8
- data/src/core/ext/filters/client_channel/subchannel.cc +53 -86
- data/src/core/ext/filters/client_channel/subchannel.h +7 -9
- data/src/core/ext/filters/client_channel/subchannel_interface.h +9 -13
- data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +3 -6
- data/src/core/ext/filters/client_channel/{lb_policy/xds/xds_load_balancer_api.cc → xds/xds_api.cc} +169 -52
- data/src/core/ext/filters/client_channel/xds/xds_api.h +171 -0
- data/src/core/ext/filters/client_channel/xds/xds_bootstrap.cc +450 -0
- data/src/core/ext/filters/client_channel/xds/xds_bootstrap.h +99 -0
- data/src/core/ext/filters/client_channel/{lb_policy/xds → xds}/xds_channel.h +8 -6
- data/src/core/ext/filters/client_channel/xds/xds_channel_args.h +26 -0
- data/src/core/ext/filters/client_channel/{lb_policy/xds → xds}/xds_channel_secure.cc +28 -11
- data/src/core/ext/filters/client_channel/xds/xds_client.cc +1413 -0
- data/src/core/ext/filters/client_channel/xds/xds_client.h +221 -0
- data/src/core/ext/filters/client_channel/{lb_policy/xds → xds}/xds_client_stats.cc +1 -5
- data/src/core/ext/filters/client_channel/{lb_policy/xds → xds}/xds_client_stats.h +3 -4
- data/src/core/ext/filters/deadline/deadline_filter.cc +20 -20
- data/src/core/ext/filters/http/client/http_client_filter.cc +15 -15
- data/src/core/ext/filters/http/client_authority_filter.cc +14 -14
- data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +12 -12
- data/src/core/ext/filters/max_age/max_age_filter.cc +59 -50
- data/src/core/ext/filters/message_size/message_size_filter.cc +18 -18
- data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc +15 -14
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +233 -175
- data/src/core/ext/transport/chttp2/transport/flow_control.h +21 -24
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +253 -163
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +24 -12
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +2 -3
- data/src/core/ext/transport/chttp2/transport/internal.h +13 -15
- data/src/core/ext/transport/chttp2/transport/writing.cc +3 -0
- data/src/core/ext/transport/inproc/inproc_transport.cc +20 -13
- data/src/core/lib/channel/channel_args.cc +16 -0
- data/src/core/lib/channel/channel_args.h +22 -0
- data/src/core/lib/channel/channelz.cc +5 -6
- data/src/core/lib/channel/channelz.h +1 -1
- data/src/core/lib/channel/connected_channel.cc +20 -20
- data/src/core/lib/channel/handshaker.h +3 -4
- data/src/core/lib/channel/handshaker_factory.h +1 -3
- data/src/core/lib/debug/trace.h +3 -2
- data/src/core/lib/gprpp/arena.cc +3 -3
- data/src/core/lib/gprpp/arena.h +2 -3
- data/src/core/lib/gprpp/inlined_vector.h +9 -0
- data/src/core/lib/gprpp/map.h +3 -501
- data/src/core/lib/gprpp/memory.h +45 -41
- data/src/core/lib/gprpp/mpscq.cc +108 -0
- data/src/core/lib/gprpp/mpscq.h +98 -0
- data/src/core/lib/gprpp/orphanable.h +6 -11
- data/src/core/lib/gprpp/ref_counted.h +25 -19
- data/src/core/lib/gprpp/set.h +33 -0
- data/src/core/lib/gprpp/thd.h +2 -4
- data/src/core/lib/http/httpcli.cc +1 -1
- data/src/core/lib/http/httpcli_security_connector.cc +15 -11
- data/src/core/lib/http/parser.cc +1 -1
- data/src/core/lib/iomgr/buffer_list.cc +4 -5
- data/src/core/lib/iomgr/buffer_list.h +5 -6
- data/src/core/lib/iomgr/call_combiner.cc +4 -5
- data/src/core/lib/iomgr/call_combiner.h +2 -2
- data/src/core/lib/iomgr/cfstream_handle.h +3 -5
- data/src/core/lib/iomgr/closure.h +8 -3
- data/src/core/lib/iomgr/combiner.cc +45 -82
- data/src/core/lib/iomgr/combiner.h +32 -8
- data/src/core/lib/iomgr/endpoint_cfstream.cc +5 -3
- data/src/core/lib/iomgr/ev_epoll1_linux.cc +19 -15
- data/src/core/lib/iomgr/ev_poll_posix.cc +3 -1
- data/src/core/lib/iomgr/exec_ctx.h +4 -3
- data/src/core/lib/iomgr/executor.cc +4 -2
- data/src/core/lib/iomgr/executor.h +3 -0
- data/src/core/lib/iomgr/executor/mpmcqueue.h +3 -6
- data/src/core/lib/iomgr/executor/threadpool.cc +1 -2
- data/src/core/lib/iomgr/executor/threadpool.h +7 -11
- data/src/core/lib/iomgr/resource_quota.cc +55 -51
- data/src/core/lib/iomgr/resource_quota.h +13 -9
- data/src/core/lib/iomgr/socket_utils_common_posix.cc +13 -0
- data/src/core/lib/iomgr/socket_utils_posix.h +4 -0
- data/src/core/lib/iomgr/tcp_client_posix.cc +4 -11
- data/src/core/lib/iomgr/tcp_custom.cc +9 -7
- data/src/core/lib/iomgr/tcp_posix.cc +20 -16
- data/src/core/lib/iomgr/tcp_server.h +1 -4
- data/src/core/lib/iomgr/tcp_server_custom.cc +5 -5
- data/src/core/lib/iomgr/tcp_server_posix.cc +1 -1
- data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +2 -11
- data/src/core/lib/iomgr/timer_custom.cc +2 -2
- data/src/core/lib/iomgr/udp_server.cc +3 -2
- data/src/core/lib/iomgr/udp_server.h +6 -12
- data/src/core/lib/json/json.h +1 -1
- data/src/core/lib/json/json_string.cc +2 -2
- data/src/core/lib/profiling/basic_timers.cc +2 -2
- data/src/core/lib/security/credentials/alts/alts_credentials.cc +2 -2
- data/src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc +1 -1
- data/src/core/lib/security/credentials/credentials.h +4 -20
- data/src/core/lib/security/credentials/fake/fake_credentials.cc +4 -4
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +1 -3
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +64 -0
- data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +4 -4
- data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +9 -7
- data/src/core/lib/security/security_connector/load_system_roots_linux.cc +2 -0
- data/src/core/lib/security/security_connector/local/local_security_connector.cc +4 -4
- data/src/core/lib/security/security_connector/security_connector.cc +1 -0
- data/src/core/lib/security/security_connector/security_connector.h +19 -17
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +8 -5
- data/src/core/lib/security/security_connector/ssl_utils.cc +2 -2
- data/src/core/lib/security/security_connector/ssl_utils.h +1 -1
- data/src/core/lib/security/security_connector/tls/spiffe_security_connector.cc +14 -6
- data/src/core/lib/security/security_connector/tls/spiffe_security_connector.h +4 -2
- data/src/core/lib/security/transport/client_auth_filter.cc +17 -17
- data/src/core/lib/security/transport/security_handshaker.cc +29 -13
- data/src/core/lib/security/transport/security_handshaker.h +4 -2
- data/src/core/lib/security/transport/server_auth_filter.cc +14 -14
- data/src/core/lib/slice/slice.cc +2 -10
- data/src/core/lib/slice/slice_hash_table.h +4 -6
- data/src/core/lib/slice/slice_intern.cc +42 -39
- data/src/core/lib/slice/slice_internal.h +3 -3
- data/src/core/lib/slice/slice_utils.h +21 -4
- data/src/core/lib/slice/slice_weak_hash_table.h +4 -6
- data/src/core/lib/surface/call.cc +3 -3
- data/src/core/lib/surface/channel.cc +7 -0
- data/src/core/lib/surface/completion_queue.cc +12 -11
- data/src/core/lib/surface/completion_queue.h +4 -2
- data/src/core/lib/surface/init.cc +1 -0
- data/src/core/lib/surface/lame_client.cc +33 -18
- data/src/core/lib/surface/server.cc +77 -76
- data/src/core/lib/surface/version.cc +1 -1
- data/src/core/lib/transport/byte_stream.h +3 -7
- data/src/core/lib/transport/connectivity_state.cc +112 -98
- data/src/core/lib/transport/connectivity_state.h +100 -50
- data/src/core/lib/transport/static_metadata.cc +276 -288
- data/src/core/lib/transport/static_metadata.h +73 -76
- data/src/core/lib/transport/status_conversion.cc +1 -1
- data/src/core/lib/transport/status_metadata.cc +1 -1
- data/src/core/lib/transport/transport.cc +2 -2
- data/src/core/lib/transport/transport.h +12 -4
- data/src/core/lib/transport/transport_op_string.cc +14 -11
- data/src/core/tsi/alts/frame_protector/alts_unseal_privacy_integrity_crypter.cc +1 -1
- data/src/core/tsi/alts/handshaker/alts_shared_resource.cc +1 -1
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +5 -5
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +12 -2
- data/src/core/tsi/fake_transport_security.cc +7 -5
- data/src/core/tsi/grpc_shadow_boringssl.h +2918 -2627
- data/src/core/tsi/local_transport_security.cc +8 -6
- data/src/core/tsi/ssl/session_cache/ssl_session.h +1 -3
- data/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc +1 -2
- data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +7 -5
- data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +4 -6
- data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +1 -2
- data/src/core/tsi/ssl_transport_security.cc +12 -12
- data/src/core/tsi/ssl_transport_security.h +2 -2
- data/src/core/tsi/transport_security_grpc.cc +7 -0
- data/src/core/tsi/transport_security_grpc.h +6 -0
- data/src/ruby/ext/grpc/extconf.rb +1 -0
- data/src/ruby/ext/grpc/rb_call.c +1 -1
- data/src/ruby/ext/grpc/rb_channel.c +1 -1
- data/src/ruby/lib/grpc/generic/bidi_call.rb +1 -1
- data/src/ruby/lib/grpc/generic/rpc_server.rb +1 -1
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/spec/google_rpc_status_utils_spec.rb +2 -2
- data/third_party/boringssl/crypto/asn1/a_bool.c +18 -5
- data/third_party/boringssl/crypto/asn1/a_d2i_fp.c +17 -221
- data/third_party/boringssl/crypto/asn1/a_dup.c +0 -24
- data/third_party/boringssl/crypto/asn1/a_enum.c +2 -2
- data/third_party/boringssl/crypto/asn1/a_i2d_fp.c +10 -72
- data/third_party/boringssl/crypto/asn1/a_int.c +12 -71
- data/third_party/boringssl/crypto/asn1/a_mbstr.c +110 -216
- data/third_party/boringssl/crypto/asn1/a_object.c +16 -5
- data/third_party/boringssl/crypto/asn1/a_strnid.c +1 -0
- data/third_party/boringssl/crypto/asn1/asn1_lib.c +5 -1
- data/third_party/boringssl/crypto/asn1/tasn_enc.c +3 -1
- data/third_party/boringssl/crypto/base64/base64.c +2 -2
- data/third_party/boringssl/crypto/bio/bio.c +73 -9
- data/third_party/boringssl/crypto/bio/connect.c +4 -0
- data/third_party/boringssl/crypto/bio/fd.c +4 -0
- data/third_party/boringssl/crypto/bio/file.c +5 -2
- data/third_party/boringssl/crypto/bio/socket.c +4 -0
- data/third_party/boringssl/crypto/bio/socket_helper.c +4 -0
- data/third_party/boringssl/crypto/bn_extra/convert.c +11 -7
- data/third_party/boringssl/crypto/bytestring/ber.c +8 -4
- data/third_party/boringssl/crypto/bytestring/cbb.c +19 -7
- data/third_party/boringssl/crypto/bytestring/cbs.c +28 -15
- data/third_party/boringssl/crypto/bytestring/internal.h +28 -7
- data/third_party/boringssl/crypto/bytestring/unicode.c +155 -0
- data/third_party/boringssl/crypto/chacha/chacha.c +36 -19
- data/third_party/boringssl/crypto/chacha/internal.h +45 -0
- data/third_party/boringssl/crypto/cipher_extra/cipher_extra.c +29 -0
- data/third_party/boringssl/crypto/cipher_extra/e_aesccm.c +269 -25
- data/third_party/boringssl/crypto/cipher_extra/e_aesctrhmac.c +16 -14
- data/third_party/boringssl/crypto/cipher_extra/e_aesgcmsiv.c +54 -38
- data/third_party/boringssl/crypto/cipher_extra/e_chacha20poly1305.c +133 -41
- data/third_party/boringssl/crypto/cipher_extra/e_tls.c +23 -15
- data/third_party/boringssl/crypto/cipher_extra/tls_cbc.c +24 -15
- data/third_party/boringssl/crypto/cmac/cmac.c +62 -25
- data/third_party/boringssl/crypto/conf/conf.c +7 -0
- data/third_party/boringssl/crypto/cpu-arm-linux.c +4 -148
- data/third_party/boringssl/crypto/cpu-arm-linux.h +201 -0
- data/third_party/boringssl/crypto/cpu-intel.c +45 -51
- data/third_party/boringssl/crypto/crypto.c +39 -22
- data/third_party/boringssl/crypto/curve25519/spake25519.c +1 -1
- data/third_party/boringssl/crypto/dsa/dsa.c +77 -53
- data/third_party/boringssl/crypto/ec_extra/ec_asn1.c +20 -8
- data/third_party/boringssl/crypto/ec_extra/ec_derive.c +96 -0
- data/third_party/boringssl/crypto/{ecdh/ecdh.c → ecdh_extra/ecdh_extra.c} +20 -58
- data/third_party/boringssl/crypto/ecdsa_extra/ecdsa_asn1.c +1 -9
- data/third_party/boringssl/crypto/engine/engine.c +2 -1
- data/third_party/boringssl/crypto/err/err.c +2 -0
- data/third_party/boringssl/crypto/err/internal.h +2 -2
- data/third_party/boringssl/crypto/evp/evp.c +89 -8
- data/third_party/boringssl/crypto/evp/evp_asn1.c +56 -5
- data/third_party/boringssl/crypto/evp/evp_ctx.c +52 -14
- data/third_party/boringssl/crypto/evp/internal.h +18 -1
- data/third_party/boringssl/crypto/evp/p_dsa_asn1.c +5 -0
- data/third_party/boringssl/crypto/evp/p_ec.c +51 -3
- data/third_party/boringssl/crypto/evp/p_ec_asn1.c +6 -7
- data/third_party/boringssl/crypto/evp/p_ed25519.c +36 -3
- data/third_party/boringssl/crypto/evp/p_ed25519_asn1.c +76 -45
- data/third_party/boringssl/crypto/evp/p_rsa.c +3 -1
- data/third_party/boringssl/crypto/evp/p_rsa_asn1.c +5 -0
- data/third_party/boringssl/crypto/evp/p_x25519.c +110 -0
- data/third_party/boringssl/crypto/evp/p_x25519_asn1.c +249 -0
- data/third_party/boringssl/crypto/evp/scrypt.c +6 -2
- data/third_party/boringssl/crypto/fipsmodule/aes/aes.c +34 -274
- data/third_party/boringssl/crypto/fipsmodule/aes/internal.h +161 -21
- data/third_party/boringssl/crypto/fipsmodule/aes/key_wrap.c +111 -13
- data/third_party/boringssl/crypto/fipsmodule/aes/mode_wrappers.c +17 -21
- data/third_party/boringssl/crypto/fipsmodule/bcm.c +119 -7
- data/third_party/boringssl/crypto/fipsmodule/bn/bn.c +19 -2
- data/third_party/boringssl/crypto/fipsmodule/bn/cmp.c +2 -2
- data/third_party/boringssl/crypto/fipsmodule/bn/ctx.c +93 -160
- data/third_party/boringssl/crypto/fipsmodule/bn/div.c +48 -57
- data/third_party/boringssl/crypto/fipsmodule/bn/div_extra.c +87 -0
- data/third_party/boringssl/crypto/fipsmodule/bn/exponentiation.c +143 -211
- data/third_party/boringssl/crypto/fipsmodule/bn/gcd.c +0 -305
- data/third_party/boringssl/crypto/fipsmodule/bn/gcd_extra.c +325 -0
- data/third_party/boringssl/crypto/fipsmodule/bn/internal.h +168 -50
- data/third_party/boringssl/crypto/fipsmodule/bn/montgomery.c +68 -92
- data/third_party/boringssl/crypto/fipsmodule/bn/montgomery_inv.c +7 -6
- data/third_party/boringssl/crypto/fipsmodule/bn/mul.c +11 -14
- data/third_party/boringssl/crypto/fipsmodule/bn/prime.c +358 -443
- data/third_party/boringssl/crypto/fipsmodule/bn/random.c +25 -35
- data/third_party/boringssl/crypto/fipsmodule/bn/rsaz_exp.c +20 -25
- data/third_party/boringssl/crypto/fipsmodule/bn/rsaz_exp.h +76 -5
- data/third_party/boringssl/crypto/fipsmodule/bn/shift.c +14 -14
- data/third_party/boringssl/crypto/fipsmodule/cipher/cipher.c +7 -2
- data/third_party/boringssl/crypto/fipsmodule/cipher/e_aes.c +383 -516
- data/third_party/boringssl/crypto/fipsmodule/cipher/e_des.c +4 -0
- data/third_party/boringssl/crypto/fipsmodule/cipher/internal.h +3 -4
- data/third_party/boringssl/crypto/fipsmodule/delocate.h +3 -2
- data/third_party/boringssl/crypto/fipsmodule/digest/digest.c +32 -17
- data/third_party/boringssl/crypto/fipsmodule/digest/md32_common.h +3 -3
- data/third_party/boringssl/crypto/fipsmodule/ec/ec.c +228 -122
- data/third_party/boringssl/crypto/fipsmodule/ec/ec_key.c +34 -8
- data/third_party/boringssl/crypto/fipsmodule/ec/ec_montgomery.c +311 -98
- data/third_party/boringssl/crypto/fipsmodule/ec/felem.c +82 -0
- data/third_party/boringssl/crypto/fipsmodule/ec/internal.h +263 -97
- data/third_party/boringssl/crypto/fipsmodule/ec/oct.c +22 -59
- data/third_party/boringssl/crypto/fipsmodule/ec/p224-64.c +317 -234
- data/third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64-table.h +9473 -9475
- data/third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64.c +313 -109
- data/third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64.h +36 -0
- data/third_party/boringssl/crypto/fipsmodule/ec/scalar.c +96 -0
- data/third_party/boringssl/crypto/fipsmodule/ec/simple.c +126 -792
- data/third_party/boringssl/crypto/fipsmodule/ec/simple_mul.c +84 -0
- data/third_party/boringssl/crypto/fipsmodule/ec/util.c +163 -12
- data/third_party/boringssl/crypto/fipsmodule/ec/wnaf.c +84 -211
- data/third_party/boringssl/crypto/fipsmodule/ecdh/ecdh.c +122 -0
- data/third_party/boringssl/crypto/fipsmodule/ecdsa/ecdsa.c +60 -205
- data/third_party/boringssl/crypto/fipsmodule/fips_shared_support.c +32 -0
- data/third_party/boringssl/crypto/fipsmodule/is_fips.c +2 -0
- data/third_party/boringssl/crypto/fipsmodule/md4/md4.c +3 -1
- data/third_party/boringssl/crypto/fipsmodule/md5/internal.h +37 -0
- data/third_party/boringssl/crypto/fipsmodule/md5/md5.c +11 -8
- data/third_party/boringssl/crypto/fipsmodule/modes/cbc.c +35 -79
- data/third_party/boringssl/crypto/fipsmodule/modes/cfb.c +7 -39
- data/third_party/boringssl/crypto/fipsmodule/modes/ctr.c +7 -27
- data/third_party/boringssl/crypto/fipsmodule/modes/gcm.c +123 -309
- data/third_party/boringssl/crypto/fipsmodule/modes/internal.h +189 -126
- data/third_party/boringssl/crypto/fipsmodule/modes/ofb.c +3 -2
- data/third_party/boringssl/crypto/fipsmodule/rand/ctrdrbg.c +2 -2
- data/third_party/boringssl/crypto/fipsmodule/rand/internal.h +35 -0
- data/third_party/boringssl/crypto/fipsmodule/rand/rand.c +24 -19
- data/third_party/boringssl/crypto/fipsmodule/rand/urandom.c +256 -77
- data/third_party/boringssl/crypto/fipsmodule/rsa/padding.c +10 -7
- data/third_party/boringssl/crypto/fipsmodule/rsa/rsa.c +5 -1
- data/third_party/boringssl/crypto/fipsmodule/rsa/rsa_impl.c +131 -14
- data/third_party/boringssl/crypto/fipsmodule/self_check/self_check.c +83 -10
- data/third_party/boringssl/crypto/fipsmodule/sha/internal.h +53 -0
- data/third_party/boringssl/crypto/fipsmodule/sha/sha1.c +9 -13
- data/third_party/boringssl/crypto/fipsmodule/sha/sha256.c +18 -12
- data/third_party/boringssl/crypto/fipsmodule/sha/sha512.c +95 -168
- data/third_party/boringssl/crypto/hrss/hrss.c +2201 -0
- data/third_party/boringssl/crypto/hrss/internal.h +62 -0
- data/third_party/boringssl/crypto/internal.h +95 -20
- data/third_party/boringssl/crypto/lhash/lhash.c +45 -33
- data/third_party/boringssl/crypto/mem.c +39 -2
- data/third_party/boringssl/crypto/obj/obj.c +4 -4
- data/third_party/boringssl/crypto/obj/obj_dat.h +6181 -875
- data/third_party/boringssl/crypto/pem/pem_all.c +2 -3
- data/third_party/boringssl/crypto/pem/pem_info.c +144 -162
- data/third_party/boringssl/crypto/pem/pem_lib.c +53 -52
- data/third_party/boringssl/crypto/pem/pem_pkey.c +13 -21
- data/third_party/boringssl/crypto/pkcs7/pkcs7.c +15 -22
- data/third_party/boringssl/crypto/pkcs7/pkcs7_x509.c +168 -16
- data/third_party/boringssl/crypto/pkcs8/internal.h +11 -0
- data/third_party/boringssl/crypto/pkcs8/p5_pbev2.c +24 -15
- data/third_party/boringssl/crypto/pkcs8/pkcs8.c +42 -25
- data/third_party/boringssl/crypto/pkcs8/pkcs8_x509.c +559 -43
- data/third_party/boringssl/crypto/pool/internal.h +1 -1
- data/third_party/boringssl/crypto/pool/pool.c +21 -0
- data/third_party/boringssl/crypto/rand_extra/deterministic.c +8 -0
- data/third_party/boringssl/crypto/rand_extra/fuchsia.c +1 -14
- data/third_party/boringssl/crypto/refcount_lock.c +2 -2
- data/third_party/boringssl/crypto/rsa_extra/rsa_print.c +22 -0
- data/third_party/boringssl/crypto/siphash/siphash.c +80 -0
- data/third_party/boringssl/crypto/stack/stack.c +83 -32
- data/third_party/boringssl/crypto/thread_none.c +2 -2
- data/third_party/boringssl/crypto/thread_pthread.c +2 -2
- data/third_party/boringssl/crypto/thread_win.c +38 -19
- data/third_party/boringssl/crypto/x509/a_strex.c +22 -2
- data/third_party/boringssl/crypto/x509/asn1_gen.c +2 -1
- data/third_party/boringssl/crypto/x509/by_dir.c +7 -0
- data/third_party/boringssl/crypto/x509/by_file.c +12 -10
- data/third_party/boringssl/crypto/x509/t_crl.c +5 -8
- data/third_party/boringssl/crypto/x509/t_req.c +1 -3
- data/third_party/boringssl/crypto/x509/t_x509.c +5 -8
- data/third_party/boringssl/crypto/x509/x509_cmp.c +1 -1
- data/third_party/boringssl/crypto/x509/x509_def.c +1 -1
- data/third_party/boringssl/crypto/x509/x509_lu.c +114 -5
- data/third_party/boringssl/crypto/x509/x509_req.c +20 -0
- data/third_party/boringssl/crypto/x509/x509_set.c +5 -0
- data/third_party/boringssl/crypto/x509/x509_trs.c +1 -0
- data/third_party/boringssl/crypto/x509/x509_txt.c +4 -5
- data/third_party/boringssl/crypto/x509/x509_vfy.c +145 -138
- data/third_party/boringssl/crypto/x509/x509_vpm.c +2 -0
- data/third_party/boringssl/crypto/x509/x509cset.c +40 -0
- data/third_party/boringssl/crypto/x509/x509name.c +2 -3
- data/third_party/boringssl/crypto/x509/x_all.c +109 -210
- data/third_party/boringssl/crypto/x509/x_x509.c +6 -0
- data/third_party/boringssl/crypto/x509v3/ext_dat.h +1 -3
- data/third_party/boringssl/crypto/x509v3/internal.h +56 -0
- data/third_party/boringssl/crypto/x509v3/pcy_cache.c +2 -0
- data/third_party/boringssl/crypto/x509v3/pcy_node.c +1 -0
- data/third_party/boringssl/crypto/x509v3/pcy_tree.c +4 -2
- data/third_party/boringssl/crypto/x509v3/v3_akey.c +5 -2
- data/third_party/boringssl/crypto/x509v3/v3_alt.c +19 -13
- data/third_party/boringssl/crypto/x509v3/v3_conf.c +2 -1
- data/third_party/boringssl/crypto/x509v3/v3_cpols.c +3 -2
- data/third_party/boringssl/crypto/x509v3/v3_genn.c +1 -6
- data/third_party/boringssl/crypto/x509v3/v3_lib.c +1 -0
- data/third_party/boringssl/crypto/x509v3/v3_ocsp.c +68 -0
- data/third_party/boringssl/crypto/x509v3/v3_pci.c +2 -1
- data/third_party/boringssl/crypto/x509v3/v3_purp.c +47 -69
- data/third_party/boringssl/crypto/x509v3/v3_skey.c +5 -2
- data/third_party/boringssl/crypto/x509v3/v3_utl.c +69 -25
- data/third_party/boringssl/include/openssl/aead.h +45 -19
- data/third_party/boringssl/include/openssl/aes.h +32 -7
- data/third_party/boringssl/include/openssl/asn1.h +7 -77
- data/third_party/boringssl/include/openssl/base.h +120 -6
- data/third_party/boringssl/include/openssl/base64.h +4 -1
- data/third_party/boringssl/include/openssl/bio.h +112 -81
- data/third_party/boringssl/include/openssl/blowfish.h +3 -3
- data/third_party/boringssl/include/openssl/bn.h +55 -29
- data/third_party/boringssl/include/openssl/buf.h +2 -2
- data/third_party/boringssl/include/openssl/bytestring.h +54 -32
- data/third_party/boringssl/include/openssl/cast.h +2 -2
- data/third_party/boringssl/include/openssl/cipher.h +46 -16
- data/third_party/boringssl/include/openssl/cmac.h +6 -2
- data/third_party/boringssl/include/openssl/conf.h +3 -6
- data/third_party/boringssl/include/openssl/cpu.h +25 -9
- data/third_party/boringssl/include/openssl/crypto.h +32 -10
- data/third_party/boringssl/include/openssl/curve25519.h +4 -4
- data/third_party/boringssl/include/openssl/dh.h +3 -2
- data/third_party/boringssl/include/openssl/digest.h +21 -7
- data/third_party/boringssl/include/openssl/dsa.h +8 -2
- data/third_party/boringssl/include/openssl/e_os2.h +18 -0
- data/third_party/boringssl/include/openssl/ec.h +25 -21
- data/third_party/boringssl/include/openssl/ec_key.h +36 -8
- data/third_party/boringssl/include/openssl/ecdh.h +17 -0
- data/third_party/boringssl/include/openssl/ecdsa.h +3 -3
- data/third_party/boringssl/include/openssl/engine.h +4 -4
- data/third_party/boringssl/include/openssl/err.h +3 -0
- data/third_party/boringssl/include/openssl/evp.h +199 -42
- data/third_party/boringssl/include/openssl/hmac.h +4 -4
- data/third_party/boringssl/include/openssl/hrss.h +100 -0
- data/third_party/boringssl/include/openssl/lhash.h +131 -23
- data/third_party/boringssl/include/openssl/md4.h +6 -4
- data/third_party/boringssl/include/openssl/md5.h +6 -4
- data/third_party/boringssl/include/openssl/mem.h +6 -2
- data/third_party/boringssl/include/openssl/nid.h +3 -0
- data/third_party/boringssl/include/openssl/obj.h +3 -0
- data/third_party/boringssl/include/openssl/pem.h +102 -64
- data/third_party/boringssl/include/openssl/pkcs7.h +136 -3
- data/third_party/boringssl/include/openssl/pkcs8.h +42 -3
- data/third_party/boringssl/include/openssl/pool.h +13 -2
- data/third_party/boringssl/include/openssl/ripemd.h +5 -4
- data/third_party/boringssl/include/openssl/rsa.h +46 -15
- data/third_party/boringssl/include/openssl/sha.h +40 -28
- data/third_party/boringssl/include/openssl/siphash.h +37 -0
- data/third_party/boringssl/include/openssl/span.h +17 -9
- data/third_party/boringssl/include/openssl/ssl.h +766 -393
- data/third_party/boringssl/include/openssl/ssl3.h +4 -3
- data/third_party/boringssl/include/openssl/stack.h +134 -77
- data/third_party/boringssl/include/openssl/thread.h +1 -1
- data/third_party/boringssl/include/openssl/tls1.h +25 -9
- data/third_party/boringssl/include/openssl/type_check.h +14 -15
- data/third_party/boringssl/include/openssl/x509.h +28 -3
- data/third_party/boringssl/include/openssl/x509_vfy.h +98 -32
- data/third_party/boringssl/include/openssl/x509v3.h +17 -13
- data/third_party/boringssl/ssl/d1_both.cc +9 -18
- data/third_party/boringssl/ssl/d1_lib.cc +4 -3
- data/third_party/boringssl/ssl/d1_pkt.cc +4 -4
- data/third_party/boringssl/ssl/d1_srtp.cc +15 -15
- data/third_party/boringssl/ssl/dtls_method.cc +0 -1
- data/third_party/boringssl/ssl/dtls_record.cc +28 -28
- data/third_party/boringssl/ssl/handoff.cc +295 -91
- data/third_party/boringssl/ssl/handshake.cc +133 -72
- data/third_party/boringssl/ssl/handshake_client.cc +218 -189
- data/third_party/boringssl/ssl/handshake_server.cc +399 -272
- data/third_party/boringssl/ssl/internal.h +1413 -928
- data/third_party/boringssl/ssl/s3_both.cc +175 -36
- data/third_party/boringssl/ssl/s3_lib.cc +9 -13
- data/third_party/boringssl/ssl/s3_pkt.cc +63 -29
- data/third_party/boringssl/ssl/ssl_aead_ctx.cc +55 -35
- data/third_party/boringssl/ssl/ssl_asn1.cc +57 -73
- data/third_party/boringssl/ssl/ssl_buffer.cc +13 -12
- data/third_party/boringssl/ssl/ssl_cert.cc +313 -210
- data/third_party/boringssl/ssl/ssl_cipher.cc +159 -221
- data/third_party/boringssl/ssl/ssl_file.cc +2 -0
- data/third_party/boringssl/ssl/ssl_key_share.cc +164 -19
- data/third_party/boringssl/ssl/ssl_lib.cc +847 -555
- data/third_party/boringssl/ssl/ssl_privkey.cc +441 -111
- data/third_party/boringssl/ssl/ssl_session.cc +230 -178
- data/third_party/boringssl/ssl/ssl_transcript.cc +21 -142
- data/third_party/boringssl/ssl/ssl_versions.cc +88 -93
- data/third_party/boringssl/ssl/ssl_x509.cc +279 -218
- data/third_party/boringssl/ssl/t1_enc.cc +5 -96
- data/third_party/boringssl/ssl/t1_lib.cc +931 -678
- data/third_party/boringssl/ssl/tls13_both.cc +251 -121
- data/third_party/boringssl/ssl/tls13_client.cc +129 -73
- data/third_party/boringssl/ssl/tls13_enc.cc +350 -282
- data/third_party/boringssl/ssl/tls13_server.cc +259 -192
- data/third_party/boringssl/ssl/tls_method.cc +26 -21
- data/third_party/boringssl/ssl/tls_record.cc +42 -47
- data/third_party/boringssl/third_party/fiat/curve25519.c +261 -1324
- data/third_party/boringssl/third_party/fiat/curve25519_32.h +911 -0
- data/third_party/boringssl/third_party/fiat/curve25519_64.h +559 -0
- data/third_party/boringssl/third_party/fiat/p256.c +238 -999
- data/third_party/boringssl/third_party/fiat/p256_32.h +3226 -0
- data/third_party/boringssl/third_party/fiat/p256_64.h +1217 -0
- data/third_party/upb/upb/port_def.inc +1 -1
- data/third_party/upb/upb/table.c +2 -1
- metadata +72 -44
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_load_balancer_api.h +0 -127
- data/src/core/lib/gpr/mpscq.cc +0 -117
- data/src/core/lib/gpr/mpscq.h +0 -88
- data/src/core/lib/gprpp/abstract.h +0 -47
- data/src/core/lib/gprpp/pair.h +0 -38
- data/third_party/boringssl/crypto/cipher_extra/e_ssl3.c +0 -460
- data/third_party/boringssl/crypto/fipsmodule/modes/ccm.c +0 -256
- data/third_party/boringssl/include/openssl/lhash_macros.h +0 -174
- 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
|
-
|
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
|
-
|
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
|
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
|
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
|
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
|
-
|
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
|
-
|
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
|
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
|
-
|
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
|
-
|
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
|
-
#
|
809
|
+
#endif // NO_ASM || (!X86 && !X86_64 && !ARM)
|
1058
810
|
|
1059
|
-
//
|
1060
|
-
//
|
1061
|
-
//
|
1062
|
-
//
|
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
|
-
|
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
|
-
|
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
|
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
|
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)
|
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
|
-
|
31
|
-
|
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
|
-
#
|
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
|
-
|
69
|
+
OPENSSL_INLINE int hwaes_capable(void) {
|
39
70
|
return CRYPTO_is_PPC64LE_vcrypto_capable();
|
40
71
|
}
|
41
|
-
#endif
|
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
|
-
|
94
|
+
OPENSSL_INLINE int hwaes_capable(void) { return 0; }
|
62
95
|
|
63
|
-
|
64
|
-
|
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
|
-
|
69
|
-
|
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
|
-
|
74
|
-
|
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
|
-
|
79
|
-
|
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
|
-
|
84
|
-
|
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
|
-
|
89
|
-
|
90
|
-
|
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
|