Skip to content

Commit 0478be3

Browse files
Add alignment constants for derived key and KEY_INFO buffers to ensure SIMD compatibility. (#1526)
1 parent 5eb358c commit 0478be3

File tree

2 files changed

+10
-4
lines changed

2 files changed

+10
-4
lines changed

src/Common/Volumes.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -173,11 +173,11 @@ int ReadVolumeHeader (BOOL bBoot, unsigned char *encryptedHeader, Password *pass
173173
{
174174
unsigned char header[TC_VOLUME_HEADER_EFFECTIVE_SIZE];
175175
unsigned char* keyInfoBuffer = NULL;
176-
int keyInfoBufferSize = sizeof (KEY_INFO) + 16;
176+
int keyInfoBufferSize = sizeof (KEY_INFO) + TC_KEY_INFO_BUFFER_ALIGNMENT;
177177
size_t keyInfoBufferOffset;
178178
PKEY_INFO keyInfo;
179179
PCRYPTO_INFO cryptoInfo;
180-
CRYPTOPP_ALIGN_DATA(16) unsigned char dk[MASTER_KEYDATA_SIZE];
180+
CRYPTOPP_ALIGN_DATA(TC_DERIVED_KEY_BUFFER_ALIGNMENT) unsigned char dk[MASTER_KEYDATA_SIZE];
181181
int enqPkcs5Prf, pkcs5_prf;
182182
uint16 headerVersion;
183183
int status = ERR_PARAMETER_INCORRECT;
@@ -199,7 +199,7 @@ int ReadVolumeHeader (BOOL bBoot, unsigned char *encryptedHeader, Password *pass
199199
keyInfoBuffer = TCalloc(keyInfoBufferSize);
200200
if (!keyInfoBuffer)
201201
return ERR_OUTOFMEMORY;
202-
keyInfoBufferOffset = 16 - (((uint64) keyInfoBuffer) % 16);
202+
keyInfoBufferOffset = TC_KEY_INFO_BUFFER_ALIGNMENT - (((uint64) keyInfoBuffer) % TC_KEY_INFO_BUFFER_ALIGNMENT);
203203
keyInfo = (PKEY_INFO) (keyInfoBuffer + keyInfoBufferOffset);
204204

205205
#if !defined(DEVICE_DRIVER) && !defined(_UEFI)
@@ -884,7 +884,7 @@ int CreateVolumeHeaderInMemory (HWND hwndDlg, BOOL bBoot, unsigned char *header,
884884
#endif // !defined(_UEFI)
885885
{
886886
unsigned char *p = header;
887-
static CRYPTOPP_ALIGN_DATA(16) KEY_INFO keyInfo;
887+
static CRYPTOPP_ALIGN_DATA(TC_KEY_INFO_BUFFER_ALIGNMENT) KEY_INFO keyInfo;
888888

889889
int nUserKeyLen = password? password->Length : 0;
890890
PCRYPTO_INFO cryptoInfo = crypto_open ();

src/Common/Volumes.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,12 @@ extern "C" {
3535
// specifies the minimum program version required to decrypt the system partition/drive
3636
#define TC_SYSENC_KEYSCOPE_MIN_REQ_PROG_VERSION 0x010b
3737

38+
// Required 16-byte alignment for derived key buffers to ensure optimal performance and compatibility with SIMD instructions.
39+
#define TC_DERIVED_KEY_BUFFER_ALIGNMENT 16
40+
41+
// Required 16-byte alignment for KEY_INFO buffer to ensure optimal performance and compatibility with SIMD instructions.
42+
#define TC_KEY_INFO_BUFFER_ALIGNMENT 16
43+
3844
// Current volume format version (created by TrueCrypt 6.0+)
3945
#define TC_VOLUME_FORMAT_VERSION 2
4046

0 commit comments

Comments
 (0)