/* * Generate one of the Sboxes */ void Blowfish::generate_sbox(secure_vector<uint32_t>& box, uint32_t& L, uint32_t& R, const uint8_t salt[], size_t salt_length, size_t salt_off) const { for(size_t i = 0; i != box.size(); i += 2) { if(salt_length > 0) { L ^= load_be<uint32_t>(salt, (i + salt_off) % (salt_length / 4)); R ^= load_be<uint32_t>(salt, (i + salt_off + 1) % (salt_length / 4)); } for(size_t r = 0; r != 16; r += 2) { L ^= m_P[r]; R ^= BFF(L, m_S); R ^= m_P[r+1]; L ^= BFF(R, m_S); } uint32_t T = R; R = L ^ m_P[16]; L = T ^ m_P[17]; box[i] = L; box[i+1] = R; } }
int main(int argc, char* argv[]){ Parameters param; param.max = 30; srand(time(NULL)); handleArgs(argc, argv, ¶m); if (param.marathon){ Boolean foundSolution = false; do { if (initGameFromTerminal(¶m.game) != DS_OK){ showError("INVALID GAME ENTERED"); exit(EXIT_FAILURE); } fflush(stdin); // printf("min moves: %hhu\n", minMoves(¶m.game)); // getchar(); foundSolution = BFF(¶m.game, param.max); param.max--; printf("\n\n"); // getchar(); } while(foundSolution && param.max > 0); }else{ // printf("min moves: %hhu\n", minMoves(¶m.game)); // getchar(); if(param.decompress){ printBoard(¶m.game); }else{ BFF(¶m.game, param.max); printf("\n\n"); } } return 0; }
/* * Blowfish Decryption */ void Blowfish::decrypt_n(const uint8_t in[], uint8_t out[], size_t blocks) const { verify_key_set(m_S.empty() == false); while(blocks >= 2) { uint32_t L0, R0, L1, R1; load_be(in, L0, R0, L1, R1); for(size_t r = 17; r != 1; r -= 2) { L0 ^= m_P[r]; L1 ^= m_P[r]; R0 ^= BFF(L0, m_S); R1 ^= BFF(L1, m_S); R0 ^= m_P[r-1]; R1 ^= m_P[r-1]; L0 ^= BFF(R0, m_S); L1 ^= BFF(R1, m_S); } L0 ^= m_P[1]; R0 ^= m_P[0]; L1 ^= m_P[1]; R1 ^= m_P[0]; store_be(out, R0, L0, R1, L1); in += 2*BLOCK_SIZE; out += 2*BLOCK_SIZE; blocks -= 2; } if(blocks) { uint32_t L, R; load_be(in, L, R); for(size_t r = 17; r != 1; r -= 2) { L ^= m_P[r]; R ^= BFF(L, m_S); R ^= m_P[r-1]; L ^= BFF(R, m_S); } L ^= m_P[1]; R ^= m_P[0]; store_be(out, R, L); } }
MainAppData* GetMainAppData() { return (MainAppData*)BFF()->getData(BFF()); }