Контейнер VeraCrypt - PullRequest
       70

Контейнер VeraCrypt

0 голосов
/ 21 декабря 2018

Я хочу расшифровать заголовок контейнера 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;
                }
            }
    }
...