The branch, v4-3-stable has been updated via a05925b VERSION: Release Samba 4.3.0rc4 via 087e2f2 WHATSNEW: Update release notes for Samba 4.3.0rc3 via 5cf3083 WHATSNEW: mention improved sparse file support via b9e5d16 ldb:wscript: make it possible to build samba with a system ldb again via c1c5a2e selftest: add a check for disabled change notify via 8464dcf selftest: add change notify = no to simpleserver env via e1ad520 notify: check for valid notify_ctx in notify_remove via 8370cb4 winbind: Remove "have_idmap_config" from winbindd_domain via 4e987b3 winbind: Do not look for the domain in wb_gid2sid via 9021612 winbind: Do not look for the domain in wb_uid2sid via 79a1174 idmap: Remove dom_name from wbint_Gid2Sid via 617687d idmap: Remove dom_name from wbint_Uid2Sid via 7f4b57e idmap: Remove "domname" from idmap_gid_to_sid via 92976d0 idmap: Remove "domname" from idmap_uid_to_sid via 64450da idmap: Remove "domname" from idmap_backends_unixid_to_sid via 9de5e9b idmap: Use a range search in idmap_backends_unixid_to_sid via 4fed476 idmap: Initialize all idmap domains at startup via 56ac018 idmap: Move idmap_init() under the static vars via ef97c16 loadparm3: Add lp_wi_scan_global_parametrics() via f484b24 lib/crypto: make it possible to use only parts of aes.[ch] via 922732a lib/crypto: sync AES_cfb8_encrypt() from heimdal via 8863034 lib/crypto: make use of aes_test.h in aes_gcm_128_test.c via d7e5e1e lib/crypto: optimize aes_gcm_128 via e5b015c lib/crypto: optimize aes_ccm_128 via ec84abe lib/crypto: optimize aes_cmac_128 via 3a63317 lib/crypto: add optimized helper functions aes_block_{xor,lshift,rshift}() via da29dc5 lib/crypto: add aes_ccm_128 tests via a4bc721 lib/crypto: verify 0 updates in aes_gcm_128 tests via 33c7c5a lib/crypto: run all aes_gcm_128 testcases via 862b204 lib/crypto: add aes_cmac_128 chunked tests via c3ecf14 s3:vfs_smb_traffic_analyzer: remove samba_ prefix from AES_* function calls via 8fc7a9a vfs: fix build warning in smb traffic analyzer. via ae3c0c8 s3-util: Compare the maximum allowed length of a NetBIOS name via aca49d0 s3-auth: Fix a memory leak in make_server_info_info3() via f5c6c89 s3-auth: Pass nt_username to check_account() via 3271b5b s3-auth: Fix 'map to guest = Bad Uid' support via f55942d s4-torture: don't build the lsa forest trust krb5 tests when building with MIT Kerberos. via f26e93c ctdb: Fix the build on FreeBSD 10.1 via 02d549a replace: Fix bug 11455 via 610de62 WHATSNEW: Prepare release notes for Samba 4.3.0rc4 via 554a887 VERSION: Bump version up to 4.3.0rc4... from 5d9f4f9 VERSION: Release Samba 4.3.0rc3
https://git.samba.org/?p=samba.git;a=shortlog;h=v4-3-stable - Log ----------------------------------------------------------------- ----------------------------------------------------------------------- Summary of changes: VERSION | 2 +- WHATSNEW.txt | 35 +- ctdb/common/system_util.c | 2 +- lib/crypto/aes.c | 43 ++- lib/crypto/aes.h | 592 ++++++++++++++++++++++++++++- lib/crypto/aes_ccm_128.c | 117 +++--- lib/crypto/aes_ccm_128.h | 8 +- lib/crypto/aes_ccm_128_test.c | 376 ++++++++++++++++++ lib/crypto/aes_cmac_128.c | 104 +---- lib/crypto/aes_cmac_128.h | 6 + lib/crypto/aes_cmac_128_test.c | 26 ++ lib/crypto/aes_gcm_128.c | 46 +-- lib/crypto/aes_gcm_128.h | 15 +- lib/crypto/aes_gcm_128_test.c | 370 ++++++++---------- lib/crypto/aes_test.h | 67 ++++ lib/crypto/wscript_build | 11 +- lib/ldb/wscript | 4 +- lib/replace/replace.c | 1 + librpc/idl/winbind.idl | 2 - selftest/target/Samba3.pm | 1 + source3/auth/auth_util.c | 48 ++- source3/include/proto.h | 9 + source3/lib/util.c | 2 +- source3/modules/vfs_smb_traffic_analyzer.c | 6 +- source3/modules/wscript_build | 1 - source3/param/loadparm.c | 73 ++++ source3/selftest/tests.py | 2 + source3/smbd/notify_msg.c | 5 + source3/torture/test_idmap_tdb_common.c | 2 +- source3/winbindd/idmap.c | 244 ++++++------ source3/winbindd/idmap_proto.h | 7 +- source3/winbindd/idmap_util.c | 14 +- source3/winbindd/wb_gid2sid.c | 15 +- source3/winbindd/wb_uid2sid.c | 15 +- source3/winbindd/winbindd.h | 7 - source3/winbindd/winbindd_dual_srv.c | 6 +- source3/winbindd/winbindd_util.c | 33 -- source4/selftest/tests.py | 4 +- source4/torture/local/local.c | 2 + source4/torture/rpc/lsa.c | 11 + source4/torture/smb2/notify_disabled.c | 119 ++++++ source4/torture/smb2/smb2.c | 1 + source4/torture/smb2/wscript_build | 2 +- 43 files changed, 1821 insertions(+), 635 deletions(-) create mode 100644 lib/crypto/aes_ccm_128_test.c create mode 100644 lib/crypto/aes_test.h create mode 100644 source4/torture/smb2/notify_disabled.c Changeset truncated at 500 lines: diff --git a/VERSION b/VERSION index 799aa62..041639a 100644 --- a/VERSION +++ b/VERSION @@ -87,7 +87,7 @@ SAMBA_VERSION_PRE_RELEASE= # e.g. SAMBA_VERSION_RC_RELEASE=1 # # -> "3.0.0rc1" # ######################################################## -SAMBA_VERSION_RC_RELEASE=3 +SAMBA_VERSION_RC_RELEASE=4 ######################################################## # To mark SVN snapshots this should be set to 'yes' # diff --git a/WHATSNEW.txt b/WHATSNEW.txt index 68ff6ef..2a8e09a 100644 --- a/WHATSNEW.txt +++ b/WHATSNEW.txt @@ -1,7 +1,7 @@ Release Announcements ===================== -This is the third release candidate of Samba 4.3. This is *not* +This is the fourth release candidate of Samba 4.3. This is *not* intended for production environments and is designed for testing purposes only. Please report any defects via the Samba bug reporting system at https://bugzilla.samba.org/. @@ -257,6 +257,13 @@ results are more accurate than running the test with an emulator, because they reflect the exact kernel and system libraries that exist on the target. +Improved Sparse File Support +---------------------------- +Support for the FSCTL_SET_ZERO_DATA and FSCTL_QUERY_ALLOCATED_RANGES +SMB2 requests has been added to the smbd file server. +This allows for clients to deallocate (hole punch) regions within a +sparse file, and check which portions of a file are allocated. + ###################################################################### Changes @@ -290,6 +297,32 @@ KNOWN ISSUES Currently none. +CHANGES SINCE 4.2.0rc3 +====================== + +o Ralph Boehme <s...@samba.org> + * Bug 11444: Crash in notify_remove caused by change notify = no + +o Günther Deschner <g...@samba.org> + * Bug 11411: smbtorture does not build when configured --with-system-mitkrb5 + +o Volker Lendecke <v...@samba.org> + * Bug 11455: fix recursion problem in rep_strtoll in lib/replace/replace.c + * Bug 11464: xid2sid gives inconsistent results + * Bug 11465: ctdb: Fix the build on FreeBSD 10.1 + +o Roel van Meer <r...@1afa.com> + * Bug 11427: nmbd incorrectly matches netbios names as own name + +o Stefan Metzmacher <me...@samba.org> + * Bug 11451: Poor SMB3 encryption performance with AES-GCM + * Bug 11458: --bundled-libraries=!ldb,!pyldb,!pyldb-util doesn't + disable ldb build and install + +o Andreas Schneider <a...@samba.org> + * Bug 9862: Samba "map to guest = Bad uid" doesn't work + + CHANGES SINCE 4.3.0rc2 ====================== diff --git a/ctdb/common/system_util.c b/ctdb/common/system_util.c index 1ae0bae..663df6e 100644 --- a/ctdb/common/system_util.c +++ b/ctdb/common/system_util.c @@ -157,7 +157,7 @@ bool parse_ipv4(const char *s, unsigned port, struct sockaddr_in *sin) } #ifdef HAVE_SOCK_SIN_LEN - sin->ip.sin_len = sizeof(*sin); + sin->sin_len = sizeof(*sin); #endif return true; } diff --git a/lib/crypto/aes.c b/lib/crypto/aes.c index a47a456..800a97e 100644 --- a/lib/crypto/aes.c +++ b/lib/crypto/aes.c @@ -32,9 +32,10 @@ */ #include "replace.h" +#include "aes.h" +#ifdef SAMBA_RIJNDAEL #include "rijndael-alg-fst.h" -#include "aes.h" int AES_set_encrypt_key(const unsigned char *userkey, const int bits, AES_KEY *key) @@ -65,7 +66,9 @@ AES_decrypt(const unsigned char *in, unsigned char *out, const AES_KEY *key) { rijndaelDecrypt(key->key, key->rounds, in, out); } +#endif /* SAMBA_RIJNDAEL */ +#ifdef SAMBA_AES_CBC_ENCRYPT void AES_cbc_encrypt(const unsigned char *in, unsigned char *out, unsigned long size, const AES_KEY *key, @@ -112,25 +115,29 @@ AES_cbc_encrypt(const unsigned char *in, unsigned char *out, } } } +#endif /* SAMBA_AES_CBC_ENCRYPT */ -void aes_cfb8_encrypt(const uint8_t *in, uint8_t *out, - size_t length, const AES_KEY *key, - uint8_t *iv, int forward) +#ifdef SAMBA_AES_CFB8_ENCRYPT +void +AES_cfb8_encrypt(const unsigned char *in, unsigned char *out, + unsigned long size, const AES_KEY *key, + unsigned char *iv, int forward_encrypt) { - size_t i; + int i; - for (i=0; i < length; i++) { - uint8_t tiv[AES_BLOCK_SIZE*2]; + for (i = 0; i < size; i++) { + unsigned char tmp[AES_BLOCK_SIZE + 1]; - memcpy(tiv, iv, AES_BLOCK_SIZE); - AES_encrypt(iv, iv, key); - if (!forward) { - tiv[AES_BLOCK_SIZE] = in[i]; - } - out[i] = in[i] ^ iv[0]; - if (forward) { - tiv[AES_BLOCK_SIZE] = out[i]; - } - memcpy(iv, tiv+1, AES_BLOCK_SIZE); - } + memcpy(tmp, iv, AES_BLOCK_SIZE); + AES_encrypt(iv, iv, key); + if (!forward_encrypt) { + tmp[AES_BLOCK_SIZE] = in[i]; + } + out[i] = in[i] ^ iv[0]; + if (forward_encrypt) { + tmp[AES_BLOCK_SIZE] = out[i]; + } + memcpy(iv, &tmp[1], AES_BLOCK_SIZE); + } } +#endif /* SAMBA_AES_CFB8_ENCRYPT */ diff --git a/lib/crypto/aes.h b/lib/crypto/aes.h index a2b6c07..48ea764 100644 --- a/lib/crypto/aes.h +++ b/lib/crypto/aes.h @@ -36,12 +36,18 @@ #ifndef LIB_CRYPTO_AES_H #define LIB_CRYPTO_AES_H 1 +#define SAMBA_RIJNDAEL 1 +#define SAMBA_AES_CBC_ENCRYPT 1 +#define SAMBA_AES_CFB8_ENCRYPT 1 +#define SAMBA_AES_BLOCK_XOR 1 + /* symbol renaming */ #define AES_set_encrypt_key samba_AES_set_encrypt_key #define AES_set_decrypt_key samba_AES_decrypt_key #define AES_encrypt samba_AES_encrypt #define AES_decrypt samba_AES_decrypt #define AES_cbc_encrypt samba_AES_cbc_encrypt +#define AES_cfb8_encrypt samba_AES_cfb8_encrypt /* * @@ -72,12 +78,592 @@ void AES_cbc_encrypt(const unsigned char *, unsigned char *, const unsigned long, const AES_KEY *, unsigned char *, int); -void aes_cfb8_encrypt(const uint8_t *in, uint8_t *out, - size_t length, const AES_KEY *key, - uint8_t *iv, int forward); +void AES_cfb8_encrypt(const unsigned char *in, unsigned char *out, + unsigned long size, const AES_KEY *key, + unsigned char *iv, int forward_encrypt); + +#define aes_cfb8_encrypt(in, out, size, key, iv, forward_encrypt) \ + AES_cfb8_encrypt(in, out, size, key, iv, forward_encrypt) #ifdef __cplusplus } #endif +#ifdef SAMBA_AES_BLOCK_XOR +static inline void aes_block_xor(const uint8_t in1[AES_BLOCK_SIZE], + const uint8_t in2[AES_BLOCK_SIZE], + uint8_t out[AES_BLOCK_SIZE]) +{ +#define __IS_ALIGN8(p) ((((uintptr_t)(p)) & 0x7) == 0) +#define __IS_ALIGNED(a,b,c) __IS_ALIGN8(\ + ((uintptr_t)(a)) | \ + ((uintptr_t)(b)) | \ + ((uintptr_t)(c))) + /* If everything is aligned we can optimize */ + if (likely(__IS_ALIGNED(in1, in2, out))) { +#define __RO64(p) ((const uint64_t *)(p)) +#define __RW64(p) ((uint64_t *)(p)) + __RW64(out)[0] = __RO64(in1)[0] ^ __RO64(in2)[0]; + __RW64(out)[1] = __RO64(in1)[1] ^ __RO64(in2)[1]; + } else { + uint64_t i1[2]; + uint64_t i2[2]; + uint64_t o[2]; + + memcpy(i1, in1, AES_BLOCK_SIZE); + memcpy(i2, in2, AES_BLOCK_SIZE); + o[0] = i1[0] ^ i2[0]; + o[1] = i1[1] ^ i2[1]; + memcpy(out, o, AES_BLOCK_SIZE); + } +} +#endif /* SAMBA_AES_BLOCK_XOR */ + +static inline void aes_block_lshift(const uint8_t in[AES_BLOCK_SIZE], + uint8_t out[AES_BLOCK_SIZE]) +{ + static const struct aes_block_lshift_entry { + uint8_t lshift; + uint8_t overflow; + } aes_block_lshift_table[UINT8_MAX+1] = { + [0x00] = { .lshift = 0x00, .overflow = 0x00 }, + [0x01] = { .lshift = 0x02, .overflow = 0x00 }, + [0x02] = { .lshift = 0x04, .overflow = 0x00 }, + [0x03] = { .lshift = 0x06, .overflow = 0x00 }, + [0x04] = { .lshift = 0x08, .overflow = 0x00 }, + [0x05] = { .lshift = 0x0a, .overflow = 0x00 }, + [0x06] = { .lshift = 0x0c, .overflow = 0x00 }, + [0x07] = { .lshift = 0x0e, .overflow = 0x00 }, + [0x08] = { .lshift = 0x10, .overflow = 0x00 }, + [0x09] = { .lshift = 0x12, .overflow = 0x00 }, + [0x0a] = { .lshift = 0x14, .overflow = 0x00 }, + [0x0b] = { .lshift = 0x16, .overflow = 0x00 }, + [0x0c] = { .lshift = 0x18, .overflow = 0x00 }, + [0x0d] = { .lshift = 0x1a, .overflow = 0x00 }, + [0x0e] = { .lshift = 0x1c, .overflow = 0x00 }, + [0x0f] = { .lshift = 0x1e, .overflow = 0x00 }, + [0x10] = { .lshift = 0x20, .overflow = 0x00 }, + [0x11] = { .lshift = 0x22, .overflow = 0x00 }, + [0x12] = { .lshift = 0x24, .overflow = 0x00 }, + [0x13] = { .lshift = 0x26, .overflow = 0x00 }, + [0x14] = { .lshift = 0x28, .overflow = 0x00 }, + [0x15] = { .lshift = 0x2a, .overflow = 0x00 }, + [0x16] = { .lshift = 0x2c, .overflow = 0x00 }, + [0x17] = { .lshift = 0x2e, .overflow = 0x00 }, + [0x18] = { .lshift = 0x30, .overflow = 0x00 }, + [0x19] = { .lshift = 0x32, .overflow = 0x00 }, + [0x1a] = { .lshift = 0x34, .overflow = 0x00 }, + [0x1b] = { .lshift = 0x36, .overflow = 0x00 }, + [0x1c] = { .lshift = 0x38, .overflow = 0x00 }, + [0x1d] = { .lshift = 0x3a, .overflow = 0x00 }, + [0x1e] = { .lshift = 0x3c, .overflow = 0x00 }, + [0x1f] = { .lshift = 0x3e, .overflow = 0x00 }, + [0x20] = { .lshift = 0x40, .overflow = 0x00 }, + [0x21] = { .lshift = 0x42, .overflow = 0x00 }, + [0x22] = { .lshift = 0x44, .overflow = 0x00 }, + [0x23] = { .lshift = 0x46, .overflow = 0x00 }, + [0x24] = { .lshift = 0x48, .overflow = 0x00 }, + [0x25] = { .lshift = 0x4a, .overflow = 0x00 }, + [0x26] = { .lshift = 0x4c, .overflow = 0x00 }, + [0x27] = { .lshift = 0x4e, .overflow = 0x00 }, + [0x28] = { .lshift = 0x50, .overflow = 0x00 }, + [0x29] = { .lshift = 0x52, .overflow = 0x00 }, + [0x2a] = { .lshift = 0x54, .overflow = 0x00 }, + [0x2b] = { .lshift = 0x56, .overflow = 0x00 }, + [0x2c] = { .lshift = 0x58, .overflow = 0x00 }, + [0x2d] = { .lshift = 0x5a, .overflow = 0x00 }, + [0x2e] = { .lshift = 0x5c, .overflow = 0x00 }, + [0x2f] = { .lshift = 0x5e, .overflow = 0x00 }, + [0x30] = { .lshift = 0x60, .overflow = 0x00 }, + [0x31] = { .lshift = 0x62, .overflow = 0x00 }, + [0x32] = { .lshift = 0x64, .overflow = 0x00 }, + [0x33] = { .lshift = 0x66, .overflow = 0x00 }, + [0x34] = { .lshift = 0x68, .overflow = 0x00 }, + [0x35] = { .lshift = 0x6a, .overflow = 0x00 }, + [0x36] = { .lshift = 0x6c, .overflow = 0x00 }, + [0x37] = { .lshift = 0x6e, .overflow = 0x00 }, + [0x38] = { .lshift = 0x70, .overflow = 0x00 }, + [0x39] = { .lshift = 0x72, .overflow = 0x00 }, + [0x3a] = { .lshift = 0x74, .overflow = 0x00 }, + [0x3b] = { .lshift = 0x76, .overflow = 0x00 }, + [0x3c] = { .lshift = 0x78, .overflow = 0x00 }, + [0x3d] = { .lshift = 0x7a, .overflow = 0x00 }, + [0x3e] = { .lshift = 0x7c, .overflow = 0x00 }, + [0x3f] = { .lshift = 0x7e, .overflow = 0x00 }, + [0x40] = { .lshift = 0x80, .overflow = 0x00 }, + [0x41] = { .lshift = 0x82, .overflow = 0x00 }, + [0x42] = { .lshift = 0x84, .overflow = 0x00 }, + [0x43] = { .lshift = 0x86, .overflow = 0x00 }, + [0x44] = { .lshift = 0x88, .overflow = 0x00 }, + [0x45] = { .lshift = 0x8a, .overflow = 0x00 }, + [0x46] = { .lshift = 0x8c, .overflow = 0x00 }, + [0x47] = { .lshift = 0x8e, .overflow = 0x00 }, + [0x48] = { .lshift = 0x90, .overflow = 0x00 }, + [0x49] = { .lshift = 0x92, .overflow = 0x00 }, + [0x4a] = { .lshift = 0x94, .overflow = 0x00 }, + [0x4b] = { .lshift = 0x96, .overflow = 0x00 }, + [0x4c] = { .lshift = 0x98, .overflow = 0x00 }, + [0x4d] = { .lshift = 0x9a, .overflow = 0x00 }, + [0x4e] = { .lshift = 0x9c, .overflow = 0x00 }, + [0x4f] = { .lshift = 0x9e, .overflow = 0x00 }, + [0x50] = { .lshift = 0xa0, .overflow = 0x00 }, + [0x51] = { .lshift = 0xa2, .overflow = 0x00 }, + [0x52] = { .lshift = 0xa4, .overflow = 0x00 }, + [0x53] = { .lshift = 0xa6, .overflow = 0x00 }, + [0x54] = { .lshift = 0xa8, .overflow = 0x00 }, + [0x55] = { .lshift = 0xaa, .overflow = 0x00 }, + [0x56] = { .lshift = 0xac, .overflow = 0x00 }, + [0x57] = { .lshift = 0xae, .overflow = 0x00 }, + [0x58] = { .lshift = 0xb0, .overflow = 0x00 }, + [0x59] = { .lshift = 0xb2, .overflow = 0x00 }, + [0x5a] = { .lshift = 0xb4, .overflow = 0x00 }, + [0x5b] = { .lshift = 0xb6, .overflow = 0x00 }, + [0x5c] = { .lshift = 0xb8, .overflow = 0x00 }, + [0x5d] = { .lshift = 0xba, .overflow = 0x00 }, + [0x5e] = { .lshift = 0xbc, .overflow = 0x00 }, + [0x5f] = { .lshift = 0xbe, .overflow = 0x00 }, + [0x60] = { .lshift = 0xc0, .overflow = 0x00 }, + [0x61] = { .lshift = 0xc2, .overflow = 0x00 }, + [0x62] = { .lshift = 0xc4, .overflow = 0x00 }, + [0x63] = { .lshift = 0xc6, .overflow = 0x00 }, + [0x64] = { .lshift = 0xc8, .overflow = 0x00 }, + [0x65] = { .lshift = 0xca, .overflow = 0x00 }, + [0x66] = { .lshift = 0xcc, .overflow = 0x00 }, + [0x67] = { .lshift = 0xce, .overflow = 0x00 }, + [0x68] = { .lshift = 0xd0, .overflow = 0x00 }, + [0x69] = { .lshift = 0xd2, .overflow = 0x00 }, + [0x6a] = { .lshift = 0xd4, .overflow = 0x00 }, + [0x6b] = { .lshift = 0xd6, .overflow = 0x00 }, + [0x6c] = { .lshift = 0xd8, .overflow = 0x00 }, + [0x6d] = { .lshift = 0xda, .overflow = 0x00 }, + [0x6e] = { .lshift = 0xdc, .overflow = 0x00 }, + [0x6f] = { .lshift = 0xde, .overflow = 0x00 }, + [0x70] = { .lshift = 0xe0, .overflow = 0x00 }, + [0x71] = { .lshift = 0xe2, .overflow = 0x00 }, + [0x72] = { .lshift = 0xe4, .overflow = 0x00 }, + [0x73] = { .lshift = 0xe6, .overflow = 0x00 }, + [0x74] = { .lshift = 0xe8, .overflow = 0x00 }, + [0x75] = { .lshift = 0xea, .overflow = 0x00 }, + [0x76] = { .lshift = 0xec, .overflow = 0x00 }, + [0x77] = { .lshift = 0xee, .overflow = 0x00 }, + [0x78] = { .lshift = 0xf0, .overflow = 0x00 }, + [0x79] = { .lshift = 0xf2, .overflow = 0x00 }, + [0x7a] = { .lshift = 0xf4, .overflow = 0x00 }, + [0x7b] = { .lshift = 0xf6, .overflow = 0x00 }, + [0x7c] = { .lshift = 0xf8, .overflow = 0x00 }, + [0x7d] = { .lshift = 0xfa, .overflow = 0x00 }, + [0x7e] = { .lshift = 0xfc, .overflow = 0x00 }, + [0x7f] = { .lshift = 0xfe, .overflow = 0x00 }, + [0x80] = { .lshift = 0x00, .overflow = 0x01 }, + [0x81] = { .lshift = 0x02, .overflow = 0x01 }, + [0x82] = { .lshift = 0x04, .overflow = 0x01 }, + [0x83] = { .lshift = 0x06, .overflow = 0x01 }, + [0x84] = { .lshift = 0x08, .overflow = 0x01 }, + [0x85] = { .lshift = 0x0a, .overflow = 0x01 }, + [0x86] = { .lshift = 0x0c, .overflow = 0x01 }, + [0x87] = { .lshift = 0x0e, .overflow = 0x01 }, + [0x88] = { .lshift = 0x10, .overflow = 0x01 }, + [0x89] = { .lshift = 0x12, .overflow = 0x01 }, + [0x8a] = { .lshift = 0x14, .overflow = 0x01 }, + [0x8b] = { .lshift = 0x16, .overflow = 0x01 }, + [0x8c] = { .lshift = 0x18, .overflow = 0x01 }, + [0x8d] = { .lshift = 0x1a, .overflow = 0x01 }, + [0x8e] = { .lshift = 0x1c, .overflow = 0x01 }, + [0x8f] = { .lshift = 0x1e, .overflow = 0x01 }, + [0x90] = { .lshift = 0x20, .overflow = 0x01 }, + [0x91] = { .lshift = 0x22, .overflow = 0x01 }, + [0x92] = { .lshift = 0x24, .overflow = 0x01 }, + [0x93] = { .lshift = 0x26, .overflow = 0x01 }, + [0x94] = { .lshift = 0x28, .overflow = 0x01 }, + [0x95] = { .lshift = 0x2a, .overflow = 0x01 }, + [0x96] = { .lshift = 0x2c, .overflow = 0x01 }, + [0x97] = { .lshift = 0x2e, .overflow = 0x01 }, + [0x98] = { .lshift = 0x30, .overflow = 0x01 }, + [0x99] = { .lshift = 0x32, .overflow = 0x01 }, + [0x9a] = { .lshift = 0x34, .overflow = 0x01 }, + [0x9b] = { .lshift = 0x36, .overflow = 0x01 }, + [0x9c] = { .lshift = 0x38, .overflow = 0x01 }, + [0x9d] = { .lshift = 0x3a, .overflow = 0x01 }, + [0x9e] = { .lshift = 0x3c, .overflow = 0x01 }, + [0x9f] = { .lshift = 0x3e, .overflow = 0x01 }, + [0xa0] = { .lshift = 0x40, .overflow = 0x01 }, + [0xa1] = { .lshift = 0x42, .overflow = 0x01 }, + [0xa2] = { .lshift = 0x44, .overflow = 0x01 }, + [0xa3] = { .lshift = 0x46, .overflow = 0x01 }, + [0xa4] = { .lshift = 0x48, .overflow = 0x01 }, + [0xa5] = { .lshift = 0x4a, .overflow = 0x01 }, + [0xa6] = { .lshift = 0x4c, .overflow = 0x01 }, + [0xa7] = { .lshift = 0x4e, .overflow = 0x01 }, + [0xa8] = { .lshift = 0x50, .overflow = 0x01 }, + [0xa9] = { .lshift = 0x52, .overflow = 0x01 }, + [0xaa] = { .lshift = 0x54, .overflow = 0x01 }, + [0xab] = { .lshift = 0x56, .overflow = 0x01 }, + [0xac] = { .lshift = 0x58, .overflow = 0x01 }, + [0xad] = { .lshift = 0x5a, .overflow = 0x01 }, + [0xae] = { .lshift = 0x5c, .overflow = 0x01 }, + [0xaf] = { .lshift = 0x5e, .overflow = 0x01 }, + [0xb0] = { .lshift = 0x60, .overflow = 0x01 }, + [0xb1] = { .lshift = 0x62, .overflow = 0x01 }, + [0xb2] = { .lshift = 0x64, .overflow = 0x01 }, + [0xb3] = { .lshift = 0x66, .overflow = 0x01 }, + [0xb4] = { .lshift = 0x68, .overflow = 0x01 }, + [0xb5] = { .lshift = 0x6a, .overflow = 0x01 }, + [0xb6] = { .lshift = 0x6c, .overflow = 0x01 }, + [0xb7] = { .lshift = 0x6e, .overflow = 0x01 }, + [0xb8] = { .lshift = 0x70, .overflow = 0x01 }, + [0xb9] = { .lshift = 0x72, .overflow = 0x01 }, + [0xba] = { .lshift = 0x74, .overflow = 0x01 }, + [0xbb] = { .lshift = 0x76, .overflow = 0x01 }, + [0xbc] = { .lshift = 0x78, .overflow = 0x01 }, + [0xbd] = { .lshift = 0x7a, .overflow = 0x01 }, + [0xbe] = { .lshift = 0x7c, .overflow = 0x01 }, + [0xbf] = { .lshift = 0x7e, .overflow = 0x01 }, + [0xc0] = { .lshift = 0x80, .overflow = 0x01 }, + [0xc1] = { .lshift = 0x82, .overflow = 0x01 }, + [0xc2] = { .lshift = 0x84, .overflow = 0x01 }, + [0xc3] = { .lshift = 0x86, .overflow = 0x01 }, + [0xc4] = { .lshift = 0x88, .overflow = 0x01 }, + [0xc5] = { .lshift = 0x8a, .overflow = 0x01 }, + [0xc6] = { .lshift = 0x8c, .overflow = 0x01 }, + [0xc7] = { .lshift = 0x8e, .overflow = 0x01 }, + [0xc8] = { .lshift = 0x90, .overflow = 0x01 }, + [0xc9] = { .lshift = 0x92, .overflow = 0x01 }, + [0xca] = { .lshift = 0x94, .overflow = 0x01 }, + [0xcb] = { .lshift = 0x96, .overflow = 0x01 }, + [0xcc] = { .lshift = 0x98, .overflow = 0x01 }, + [0xcd] = { .lshift = 0x9a, .overflow = 0x01 }, + [0xce] = { .lshift = 0x9c, .overflow = 0x01 }, + [0xcf] = { .lshift = 0x9e, .overflow = 0x01 }, + [0xd0] = { .lshift = 0xa0, .overflow = 0x01 }, + [0xd1] = { .lshift = 0xa2, .overflow = 0x01 }, + [0xd2] = { .lshift = 0xa4, .overflow = 0x01 }, + [0xd3] = { .lshift = 0xa6, .overflow = 0x01 }, + [0xd4] = { .lshift = 0xa8, .overflow = 0x01 }, + [0xd5] = { .lshift = 0xaa, .overflow = 0x01 }, + [0xd6] = { .lshift = 0xac, .overflow = 0x01 }, + [0xd7] = { .lshift = 0xae, .overflow = 0x01 }, + [0xd8] = { .lshift = 0xb0, .overflow = 0x01 }, + [0xd9] = { .lshift = 0xb2, .overflow = 0x01 }, + [0xda] = { .lshift = 0xb4, .overflow = 0x01 }, + [0xdb] = { .lshift = 0xb6, .overflow = 0x01 }, + [0xdc] = { .lshift = 0xb8, .overflow = 0x01 }, + [0xdd] = { .lshift = 0xba, .overflow = 0x01 }, + [0xde] = { .lshift = 0xbc, .overflow = 0x01 }, + [0xdf] = { .lshift = 0xbe, .overflow = 0x01 }, + [0xe0] = { .lshift = 0xc0, .overflow = 0x01 }, + [0xe1] = { .lshift = 0xc2, .overflow = 0x01 }, + [0xe2] = { .lshift = 0xc4, .overflow = 0x01 }, + [0xe3] = { .lshift = 0xc6, .overflow = 0x01 }, + [0xe4] = { .lshift = 0xc8, .overflow = 0x01 }, + [0xe5] = { .lshift = 0xca, .overflow = 0x01 }, + [0xe6] = { .lshift = 0xcc, .overflow = 0x01 }, + [0xe7] = { .lshift = 0xce, .overflow = 0x01 }, + [0xe8] = { .lshift = 0xd0, .overflow = 0x01 }, + [0xe9] = { .lshift = 0xd2, .overflow = 0x01 }, + [0xea] = { .lshift = 0xd4, .overflow = 0x01 }, + [0xeb] = { .lshift = 0xd6, .overflow = 0x01 }, + [0xec] = { .lshift = 0xd8, .overflow = 0x01 }, + [0xed] = { .lshift = 0xda, .overflow = 0x01 }, + [0xee] = { .lshift = 0xdc, .overflow = 0x01 }, + [0xef] = { .lshift = 0xde, .overflow = 0x01 }, + [0xf0] = { .lshift = 0xe0, .overflow = 0x01 }, + [0xf1] = { .lshift = 0xe2, .overflow = 0x01 }, + [0xf2] = { .lshift = 0xe4, .overflow = 0x01 }, + [0xf3] = { .lshift = 0xe6, .overflow = 0x01 }, + [0xf4] = { .lshift = 0xe8, .overflow = 0x01 }, + [0xf5] = { .lshift = 0xea, .overflow = 0x01 }, + [0xf6] = { .lshift = 0xec, .overflow = 0x01 }, + [0xf7] = { .lshift = 0xee, .overflow = 0x01 }, + [0xf8] = { .lshift = 0xf0, .overflow = 0x01 }, + [0xf9] = { .lshift = 0xf2, .overflow = 0x01 }, + [0xfa] = { .lshift = 0xf4, .overflow = 0x01 }, + [0xfb] = { .lshift = 0xf6, .overflow = 0x01 }, + [0xfc] = { .lshift = 0xf8, .overflow = 0x01 }, + [0xfd] = { .lshift = 0xfa, .overflow = 0x01 }, + [0xfe] = { .lshift = 0xfc, .overflow = 0x01 }, + [0xff] = { .lshift = 0xfe, .overflow = 0x01 }, + }; + int8_t i; + uint8_t overflow = 0; + + for (i = AES_BLOCK_SIZE - 1; i >= 0; i--) { + const struct aes_block_lshift_entry *e = &aes_block_lshift_table[in[i]]; + out[i] = e->lshift | overflow; -- Samba Shared Repository