Я хочу расшифровать заголовок контейнера VeraCrypt.Я создал контейнер.Я извлек зашифрованные данные из заголовка контейнера (соль, зашифрованная позиция строки VERA и т. Д.).Я реализовал AES в режиме XTS и функции PBKDF2 для создания заголовков, шифрующих заголовок.У меня проблема с функцией XTS_EncryptSector.Я понятия не имею, каково значение настройки для контейнера VeraCrypt.Я искал документацию VeraCrypt и режима XTS и нигде не нашел.Сможет ли он сказать мне, где его найти?Заранее спасибо!
const uint8_t AES_BLK_BYTES=16;
const uint8_t GF_128_FDBK=0x87;
void XTS_EncryptSector(const uint8_t* input, const uint8_t* masterkey1, const uint8_t* masterkey2, uint8_t* output, uint8_t* tweak, int sectorsize){
int i=0,j=0;
uint8_t T[AES_BLK_BYTES];
uint8_t x[AES_BLK_BYTES];
uint8_t cin, cout;
for(i=0;i<16;i++){
x[i]=0x00;
T[i]=0x00;
}
for(j=0;j< AES_BLK_BYTES;j++){
T[j]=(uint8_t)(tweak[j]&0xFF );
tweak[j]=tweak[j];
}
aes(T,masterkey2,T);
for(i=0;i<sectorsize;i+=16){
for (j=0;j<AES_BLK_BYTES;j++)
x[j] = input[i+j] ^ T[j];
aes(x,masterkey1,x);
for (j=0;j<AES_BLK_BYTES;j++)
output[i+j] = x[j] ^ T[j];
//Multiply T by a
cin=0;
for(j=0;j<AES_BLK_BYTES;j++){
cout=(T[j] >> 7) & 1;
T[j] = (( T[j] << 1 ) + cin ) & 0xFF;
cin=cout;
}
if(cout) {
T[0] ^= GF_128_FDBK;
}
}
}