#include <stdio.h>
#include <stdlib.h>

int main(int argc, char ** argv) {

	FILE *fp, *out = NULL;
	char c;
	int xorval;

	if (argc != 3 && argc != 4) {
		printf("Usage: %s <xor_value> <file_to_xor> [<output>]\n",argv[0]);
		exit(1);
	}
	xorval=atoi(argv[1]);

	if ((fp = fopen(argv[2],"r")) == NULL || (argc == 4 && (out = fopen(argv[3],"w")) == NULL)) {
		printf("Invalid file");
		exit(1);
	}
	//printf("Result xored with 0x%x\n",xorval);
	for (c=fgetc(fp);!feof(fp);c=fgetc(fp)) {
		if (argc == 4)
			fputc((c^xorval)&0xff,out);
		if (argc == 3)
			printf("\\x%02x",(c^xorval)&0xff);
	}

	if (out != NULL)
		fclose(out);
	fclose(fp);

	return 0;
}
