PAD is a small command-line utility to separate one file into two, each
indistinguishable from white noise, and put them back together into the
original.

Usage: pad [options] [input files]

options:

  -r [num]    - Pad will XOR in [num] pads generated from random data. if this
                is ommited, pad will use either 1 or 0 random pads, depending on
                if there is only one input file or more than one, respectively.

  -o [output] - The result of all the XOR operations will be stored in this
                file. If [output] is ommitted, pad will name the file according
                to its MD5-sum, along with the rest of the random pads.

  -s [size]   - The output data will be [size] bytes. If this is less than the 
                smallest input file, the output will be clipped to match, if it
                is larger, random data will be appended to the end. [size] can
                be any value in bytes, or a string such as "2M", or "140K".

  -h          - Show usage.


Any number of input files may be specified, but if they are unequal in size, pad
will only process the number of bytes in the smallest file unless otherwise
specified by the -s flag.

Examples:

	pad myfile.txt

You now have pad-md5-xxxxxx.dat and pad-md5-yyyyyy.dat.

	pad pad-md5-xxxxxx.dat pad-md5-yyyyyy.dat -o output-file

You now have output-file, which is identical to the original myfile.txt, built
from your two pad files.

        Let's use David Madore's method of distributed free speech:

<download pad-md5-aaaaaaa through ddddddd.dat from a pad repository>
        #pad -s 128k myfile.txt pad-md5-*.dat
        Wrote pad-md5-eeeeeee.dat

Now you upload pad-md5-eeeeeee.dat to some pad repository, and tell your
message's receiver where to get all files, aaaaaaa - eeeeeee, and the size of
the original file, let's say, 12345 bytes. Receiver:

        #pad -s 12345 pad-md5-*.dat -o myfile.txt
        Wrote myfile.txt

Now your receiver has the same file you started with, myfile.txt.

Possible uses-

Free speech enforcement:
	Let's say you have a file called decss.c (for example ;), and
	want to distribute it, but are afraid of censorship.  Break
	it up into two pad files, distribute these each on separate
	unrelated systems, and tell people where to get each (and how
	to re-assemble them).  Should someone go to one (or both) of the
	hosting systems and pressure them to remove it, each can claim
	they're only hosting harmless, random data.  It is mathematically
	impossible to prove that either one is the random one and the
	other was derived from the original file.

        Another possibility here (and probably better) is the use of 5 or more
        pad files for this. This is shown in the second example above. See 
	http://www.eleves.ens.fr:8080/home/madore/misc/freespeech.html for more
        information about this.

Privacy:
	One-Time-Pad (OTP) encryption dates to long ago, and is in many
	ways much more secure than other forms of encryption that can
	be brute forced.  Keep a private random pad between those you
	want to share data with, and simply transmit messages that have
	been merged with this pad, via any medium.  OTP encryption is as
	secure as your random source (in this case, from OpenSSL), and
	the pad itself. Keep in mind it's called "One-time pad" for
	a reason -- If you use the same pad on two different plaintexts,
	the messages (either one) can no longer be considered secure.


Please let me know if you can think of others.

You can likely find support and/or information regarding this program
on irc.stratius.com in #pad.

--xercist@mindless.com

