=====================================================================
Absolute.exe written by: Kelly Helfenstein.
ReadMe  .txt written by: Kelly Helfenstein.
Copyright June 1999.
=====================================================================
This program may be distributed freely as long as no fee is charged
and it and any accompanying files are not changed in any way.
=====================================================================

<Introduction>
=====================================================================
Absolute is a unique encryption program. I believe that it is the first
in which the encryption algorithm is NOT mathematically reversible. This
file contains a set of simple instructions on how to use Absolute,
registration instructions, a description of how Absolute encrypts,
files, and most importantly a small disclaimer which officially warns
potential users that this program could potentially destroy data if
misused. So importantly it is in fact I will put it right next.


**********************************************************************
                        !!!WARNING!!!

This is your official warning that the program Absolute.exe has the
potential to permanently corrupt and/or destroy files that it encrypts.
Be just as sure you want to encrypt a file as you would want to delete
one. Though careful use of this application will keep data safe, the
changes this application makes are PERMANENT.

*Please read carefully the instructions before using this application.
*I (Kelly Helfenstein) will not be held responsible for lost or
 corrupted data.
*I recommend testing this software out on a few unimportant files
 before regular use.
*It is imperative that you remember each "Key File" and "Offset"
 used for each file encrypted. Failure to do so will result in
 permanent loss or corruption of data.
*It is imperative that you use a "Key File" which WILL NOT change or
 be deleted over time. Failure to do so will result in permanent loss
 or corruption of data.
*You are using this application at YOUR OWN RISK!

**********************************************************************

I'll be putting this disclaimer at the bottom again too.
Have I scared you out of using this little program? Hope not.
I really want to cover my butt on this. You should know that
in the process of writing and testing this application, I've
lost files. And if I've lost files, other people are sure to
as well. However the files I've lost were due to forgetting
the "Key File" or "Offset" or by using a "Key File" which
changed over time.

<Instructions>
=====================================================================
First a few definitions are in order.

-Key File: This is the file which provides the data required on how
           to alter the bytes of a file. It can be any file at all
           but should be one which won't change over time. Changes to
           a file used as a key file means files encrypted with it
           can't be recovered.           

-Offset:   This a value which all bytes of a file to be encrypted will
           be affected by. It is important to remember this value or
           an encrypted file can't be recovered.

The controls of Absolute are pretty straight forward.
Type the name of the file that you want encrypted in the box next
to "File to encrypt" or select a file by using the "Browse" button. 
Next type the name of the file that you want to use for a key file
in the box next to "Key file" or select a file by using the "Browse"
button. (Optional) next set an offset value. An offset value can be
any number from 0 to 255. (Optional) if you want to make sure your
key file doesn't change you can check the box next to "Make key file
read-only." It will set the key file's attributes to read only just
before encryption/decryption begins. If you want to remove the 
read-only attribute you will need to do it manually. Lastly select
the Encrypt or Decrypt button. The title bar will then change
according to the progress.

To view the about dialog, select the icon above the Encrypt/Decrypt
buttons.

Pressing ESC will quit the program as will selecting the close options
from the system menu.

<What this program will do>
=====================================================================
This program will encrypt individual files based on the settings.
It reads data from both files specified then writes the result to
a new file as it goes then deletes the original and renames the
new file. The edit box for the "file to encrypt" is then cleared
for the next filename to be entered. The encrypted file is always
the same size as its original file. Files can be encrypted more
than once using a different (or the same) key file. If such is the 
case it doesn't matter what order the key files are used to decrypt
the file as long as the correct offset is used along side the key file.

<What this program will not do>
=====================================================================
This program will not encrypt multiple files. Sorry you can't enter
wildcard specifiers in this version. You have to enter them one at
a time. It also won't automatically encrypt files as they are being
written to a specific directory, drive, or mapped drive. This is a
nice feature that commercial encryption packages have available, what
do you expect for free? Also there is no compression applied.

I don't think I can emphasise enough how important it is to use a key
file which isn't going to change. I once used an EXE, which I thought
would be a safe choice, but as it turned out the EXE changed as a
result of its own programming. It's important to set that Read-only
attribute and choose carefully. I recommend using graphic or text
files which you are certain won't be edited in the future. Even then
have that Read-only attribute set. More adventurous types might opt
to use EXE's or others as key files. I REALLY recommend AGAINST using
file types of INI, TMP, BAT, or CFG. These types change fairly often.
I also recommend AGAINST using your CONFIG.SYS or AUTOEXEC.BAT files
for the same reason. If you're not too imaginative you can use
Absolute.exe as a key file, I can guarantee that it doesn't make
changes to itself. For a small fee I can supply randomly generated
key files (in variable sizes). (Please see weaknesses.)

<The encryption algorithm>
=====================================================================
I am so confident in this encryption algorithm that I can completely
disclose what exactly it does and it STILL maintains its effectiveness.

(Boring background stuff: Creation Thought Process)
One day I was thinking about encryption techniques and how they are
all reversible by some mathematical equation or another. I remembered
a story in a comic book where a not so bright student in a math class
beat all the smart kids to the following what comes next question:

S M T W T ?

The kid recognised the pattern as the first letter in the days of the
week. So the next letter of course was 'F'. And so I thought that the
best codes aren't mathematically derived. I remembered another code where
a series of numbers were used, each belonging to a page number in the
telephone book. The number represented the letter you were at. All the
receiver would need is a copy of the phone book used. Another code not
derived by a mathematical formula. And so I thought, what would be the
ultimate code? The answer I came up with was to randomly alter each
byte of a file. That would certainly do the trick, but how would you
get the data back if you don't know what was done to each byte? I
eventually remembered how my old C-64 generated random numbers based
on the system timer which started when you turned it on. It assumed
that you weren't going to run a file down to the same millisecond very
often. If you did though you would get the same set of numbers
generated by the random number generator. So technically they weren't
REAL random numbers. What else might generate such an effect? Then
it hit me, other files. So long as they don't change, they'd be
perfect! Each file is different and from a mathematical perspective
there is no pattern to consecutive bytes.

(The Encryption Process)
What Absolute does is simply adds the bytes of one file to another.
I couldn't believe I hadn't heard of this being done before, it's
so simple. But some executables have large sections of 'NULL' data
so I included an optional "Offset" value which also gets added to
each byte. For example in two files the first few bytes as viewed
from a hex-editor might be:

File A:   01 02 03 04 05 06 07
File B:   A9 E5 19 32 F6 FF FF

Offset=10
So then the first few bytes in the result would be:

File C:   B4 F1 26 40 05 0F 10

(i.e.  1+169+10=180, 2+229+10=241,etc...)

Decryption is just subtracting all these values.

If a key file is smaller than the file to be encrypted then something
worth noting occurs. Instead of starting at the beginning of the
key file again I opted to just continue adding the offset. I thought
about changing it to return to the beginning of the key file but then
realised that the unpredictability of a files size lends to the chaotic
nature of the algorithm. If you're encrypting anything other than
a text file, it won't really be an issue anyway. I would've made it
an option to "reset" the key file at the beginning each time the end
is met, but then what reason would you have to register?

Any programmer worth his/her salt could come up with a program to do
this or something similar but I've done it first and made this
program publicly available. So I hereby declare this encryption
technique the Helfenstein Encryption Technique. (Or if that sounds a
bit too egotistical you can call it the Merge File Technique, just
remember I did it first:)

The reason the file doesn't get larger (for those of you
who don't know) is that bytes can only range from 0 to 255 (hence
the range of the offset value). When either value is exceeded it just
'wraps around' to the opposite end of the spectrum. If you must know
the details, a little binary math lesson:

   1010 1001          169
  +1110 0101         +229
  ==========         ====
 1 1000 1110          398

Computers are physically limited to how high they can count. It's like
being limited to how high you can count by the number of fingers on
your hand. Once you get to ten you have to start over and when you're
done, the number of the finger you're on is the result. The binary
math on the right shows the result of adding the two numbers together.
1 1000 1110 is the binary equivalent to 398 (the correct answer),
however a byte is only allowed to be 8 bits (1's or 0's) long. Because
of this, and the way computers are wired, the most significant bit, the
one which represents a value of 256, isn't used. The answer would then
be 398-256=142.

(Weaknesses)
The original version of this program was developed to transmit files
over the internet without fear of them being intercepted. Sending
a file encrypted with absolute is quite safe. I'd say unbreakable
but if a code was unbreakable then the original data could never
be recovered. Just remember that the person you're sending an
encrypted file to must have a copy of the key file and know the offset.
If you don't want to transmit the key file over the internet, make sure
that it's a file both computers have. Or you can always send a disk
with the file personally or by courier. Another idea might be to agree
upon a file both people can access on the internet, like a game
or music file or something. If both people can agree on the precise
wording (and formatting) then a nursery rhyme saved as a text file
will do. Giving someone the offset is as simple as a telephone call
if need be. But if you're going to be creative I suggest testing
things out on unimportant files first.

The weakest link in the encryption is when it is on your hard drive 
on your computer. Someone with time and your hard drive could still decrypt
your encrypted files. First they'd need to figure out what sort of file your
encrypted file might have been. Then they'd need to iterate through each 256
different results the offset provides for a single key file for every file
that could've possibly been used. This is done until either a file type can
be determined or data is recognised. The process gets harder as a file
is consecutively encrypted by the same or other methods.

The more unique a key file is the less likely someone who intercepts an
encrypted file off the internet will be able to decode it. However if
a file is so unique that it can serve no other purpose than to be a key
file, it tends to stick out like a sore thumb on your hard drive. Also
a really unique key file is harder to replace if it is accidently dammaged
or corrupted.

The only other real weakness is that I completely explain how files
are encrypted. But remember the protection is still good and you're
getting this program for free.

Bonus Encryption Technique.
=====================================================================
For those sensitive picture files you don't want children to see
or those spreadsheets that tell how the company is REALLY doing
sometimes just changing the file's extenuation is enough to confuse
computer illiterates enough to keep prying eyes away.


<Registration and how to contact me>
=====================================================================
You don't actually have to register THIS program. It is free to
distribute and copy. However future improvements depends on demand.

Registration costs only $10 Canadian. Registering gets you any updates 
free and three randomly generated key files. Or you can order randomly
generated key files for $5/Mb (minimum $5). You can also direct any
questions or comments free of charge to the same address.

If you have any questions or comments or would like to register,
I can be reached by email at:

helfenst@freenet.edmonton.ab.ca

I have a number of improvements in mind but so far demand has been
quite low. Some improvements I have in mind...

1. The option to log how a file was encrypted incase you forget.
2. Pre and post byte operations. 
    (ie invert bits before adding the key file value, etc.)
3. The option to work with word and dword sized data instead of
   just bytes.
4. Making Absolute into an ActiveX control.

If there are any adition sugestions I'd be glad to hear them.

**********************************************************************
                        !!!WARNING!!!

This is your official warning that the program Absolute.exe has the
potential to permanently corrupt and/or destroy files that it encrypts.
Be just as sure you want to encrypt a file as you would want to delete
one. Though careful use of this application will keep data safe, the
changes this application makes are PERMANENT.

*Please read carefully the instructions before using this application.
*I (Kelly Helfenstein) will not be held responsible for lost or
 corrupted data.
*I recommend testing this software out on a few unimportant files
 before regular use.
*It is imperative that you remember each "Key File" and "Offset"
 used for each file encrypted. Failure to do so will result in
 permanent loss or corruption of data.
*It is imperative that you use a "Key File" which WILL NOT change or
 be deleted over time. Failure to do so will result in permanent loss
 or corruption of data.
*You are using this application at YOUR OWN RISK!

**********************************************************************
All libraries (dll's) provided are property of their respective
creators.


