int main()
{
    const char * input = "Burning 'em, if you ain't quick and nimble\n"
                         "I go crazy when I hear a cymbal";
    size_t input_size = strlen(input);
    const char * key = "ICE";
    size_t key_size = strlen(key);
    size_t output_max_size = 148;
    char output[output_max_size];

    size_t output_used_size = repeating_key_xor(input,
                                                input_size,
                                                key, key_size,
                                                output,
                                                output_max_size);
    if (output_used_size != 0) {
        for (size_t i = 0; i < output_used_size; ++i) {
            printf("%c", output[i]);
        }
        printf("\n");
        return 0;
    }
    else {
        return 1;
    }
}
void break_repeating_key_xor(const unsigned char *in, size_t in_len,
		unsigned char *key, size_t key_max_len, unsigned int *key_len,
		unsigned char *out)
{
	unsigned int i, j;
	unsigned int base_limit, limit, leftover;
	unsigned char *buf;

	*key_len = get_key_len(in, in_len, key_max_len);
	base_limit = in_len / *key_len;
	leftover = in_len % *key_len;
	buf = malloc(base_limit + !!leftover);
	if (!buf)
		exit(1);
	for (i = 0; i < *key_len; i++) {
		limit = base_limit + (leftover > i);
		for (j = 0; j < limit; j++)
			out[j] = in[j * *key_len + i];
		key[i] = crack_single_byte_xor(out, limit, buf);
	}
	free(buf);
	repeating_key_xor(in, in_len, key, *key_len, out);
}