* The trick I used here allows to compare one ciphertext against all the * DES_bs_crypt() outputs in just O(log2(ARCH_BITS)) operations. */ int DES_bs_cmp_all(ARCH_WORD *binary, int count) { register int bit; register ARCH_WORD mask; mask = 0; if (DES_bs_mem_saving) for (bit = 0; bit < ((count < 32) ? count : 32); bit++) mask else for (bit = 0; bit < count; bit++) = DES_bs_all. B[bit] ^ binary[bit]; if (mask == ~(ARCH_WORD)0) return 0; return 1; }
int DES_bs_cmp_one(ARCH_WORD *binary, int count, int index) { register int bit; register ARCH_WORD mask; if (DES_bs_mem_saving) { for (bit = 0; bit < count; bit++) if (((DES_bs_all. B[bit] >> index) ^ (binary[bit >> 5] >> (bit & 0x1F))) & 1) return 0; return 1; } mask = (ARCH_WORD)1 for (bit = 0; bit < count; bit++) if ((DES_bs_all. B[bit] ^ binary[bit]) & mask) return 0; return 1; }
Страницы: 1, 2, 3, 4