def bruteforce_lost_bits(result, mask, validation_func):
    """
    Brute force البتات المفقودة فقط
    """
    # Identify lost bits
    lost_bits_mask = ~mask & 0xFFFFFFFF
    preserved_bits = result & mask
    
    candidates = []
    
    # Try all combinations of lost bits
    num_lost_bits = bin(lost_bits_mask).count('1')
    for i in range(2 ** num_lost_bits):
        # Reconstruct candidate key
        candidate = preserved_bits
        
        # Fill in lost bits with current iteration
        bit_pos = 0
        for shift in range(32):
            if (lost_bits_mask >> shift) & 1:
                if (i >> bit_pos) & 1:
                    candidate |= (1 << shift)
                bit_pos += 1
        
        # Validate candidate
        if validation_func(candidate):
            candidates.append(candidate)
    
    return candidates

# Example validation: check if decryption produces valid plaintext
def validate_key(key):
    """Test if key is correct"""
    test_ciphertext = 0x12345678
    plaintext = test_ciphertext ^ key
    # Check if plaintext looks valid
    return 0x20 <= (plaintext & 0xFF) <= 0x7E  # ASCII printable

# Execute attack
result = 0b00010110101011110000111101010101
mask = 0x1FFFFFF

valid_keys = bruteforce_lost_bits(result, mask, validate_key)
print(f"Found {len(valid_keys)} valid key candidates")