summaryrefslogtreecommitdiff
path: root/data/xor.c
diff options
context:
space:
mode:
Diffstat (limited to 'data/xor.c')
-rw-r--r--data/xor.c92
1 files changed, 0 insertions, 92 deletions
diff --git a/data/xor.c b/data/xor.c
deleted file mode 100644
index 9feead0..0000000
--- a/data/xor.c
+++ /dev/null
@@ -1,92 +0,0 @@
-/* Generic xor handler.
-
- With no args, xors stdin against 0xFF to stdout. A single argument is a
- file to read xor-bytes out of. Any zero in the xor-bytes array is treated
- as the end; if you need to xor against a string that *includes* zeros,
- you're on your own.
-
- The indirect file can be generated easily with data.c.
-
- Written because there are so many lame schemes for "masking" plaintext
- passwords and the like floating around, and it's handy to just run an
- obscure binary-format configuration file through this and look for strings.
-
- *Hobbit*, 960208 */
-
-#include <stdio.h>
-#include <fcntl.h>
-
-char buf[8192];
-char bytes[256];
-char * py;
-
-/* do the xor, in place. Uses global ptr "py" to maintain "bytes" state */
-xorb (buf, len)
- char * buf;
- int len;
-{
- register int x;
- register char * pb;
-
- pb = buf;
- x = len;
- while (x > 0) {
- *pb = (*pb ^ *py);
- pb++;
- py++;
- if (! *py)
- py = bytes;
- x--;
- }
-} /* xorb */
-
-/* blah */
-main (argc, argv)
- int argc;
- char ** argv;
-{
- register int x = 0;
- register int y;
-
-/* manually preload; xor-with-0xFF is all too common */
- memset (bytes, 0, sizeof (bytes));
- bytes[0] = 0xff;
-
-/* if file named in any arg, reload from that */
-#ifdef O_BINARY /* DOS shit... */
- x = setmode (0, O_BINARY); /* make stdin raw */
- if (x < 0) {
- fprintf (stderr, "stdin binary setmode oops: %d\n", x);
- exit (1);
- }
- x = setmode (1, O_BINARY); /* make stdout raw */
- if (x < 0) {
- fprintf (stderr, "stdout binary setmode oops: %d\n", x);
- exit (1);
- }
-#endif /* O_BINARY */
-
- if (argv[1])
-#ifdef O_BINARY
- x = open (argv[1], O_RDONLY | O_BINARY);
-#else
- x = open (argv[1], O_RDONLY);
-#endif
- if (x > 0) {
- read (x, bytes, 250); /* nothin' fancy here */
- close (x);
- }
- py = bytes;
- x = 1;
- while (x > 0) {
- x = read (0, buf, sizeof (buf));
- if (x <= 0)
- break;
- xorb (buf, x);
- y = write (1, buf, x);
- if (y <= 0)
- exit (1);
- }
- exit (0);
-}
-