Спасибо!
Всё оказалось проще. Там у меня баг. Нельзя так делать
ULONG* xl = reinterpret_cast<ULONG*>(&initialization_vector[0]);
ULONG* xr = reinterpret_cast<ULONG*>(&initialization_vector[4]);
---
Надо
ULONG xl = initialization_vector[0] << 24 | initialization_vector[1] << 16 | initialization_vector[2] << 8 | initialization_vector[3];
ULONG xr = initialization_vector[4] << 24 | initialization_vector[5] << 16 | initialization_vector[6] << 8 | initialization_vector[7];
---
Короче
void _encrypt_one_cfb_block(BLOWFISH_CTX& ctx, _8BYTES& initialization_vector, const _8BYTES& plain_in, _8BYTES& encrypted_out)
{
ULONG xl = initialization_vector[0] << 24 | initialization_vector[1] << 16 | initialization_vector[2] << 8 | initialization_vector[3];
ULONG xr = initialization_vector[4] << 24 | initialization_vector[5] << 16 | initialization_vector[6] << 8 | initialization_vector[7];
Blowfish_Encrypt(&ctx, &xl, &xr);
initialization_vector[0] = (xl >> 24) & 0xff;
initialization_vector[1] = (xl >> 16) & 0xff;
initialization_vector[2] = (xl >> 8) & 0xff;
initialization_vector[3] = xl & 0xff;
initialization_vector[4] = (xr >> 24) & 0xff;
initialization_vector[5] = (xr >> 16) & 0xff;
initialization_vector[6] = (xr >> 8) & 0xff;
initialization_vector[7] = xr & 0xff;
for (size_t i = 0; i < sizeof(_8BYTES); i++) {
encrypted_out[i] = initialization_vector[i] ^ plain_in[i];
}
}
---
Так что тест ветор Ерика работает нормально.
|