1460923901-c77c30f0-9b5f-4972-9119-258dd88f7db4

What is claimed is:

1. A method of providing software security, the software comprising program code, the method comprising the steps of:
replacing at least one portion of program code with a corresponding at least one token;
creating a key in which the at least one token is associated with an indication of functionality of the at least one portion of program code replaced by the at least one token; and
storing the key in memory separate from the software.
2. The method according to claim 1, further comprising the step of:
encrypting the key using information identifying a particular computer on which the software is authorized to be run.
3. The method according to claim 1, wherein the at least one portion of program code and the at least one token comprise a plurality of portions of program code and a plurality of tokens, and wherein the step of creating a key comprises the step of:
interleaving the positions of the indications of functionalities corresponding to the tokens such that they do not correspond in order to the order in which the tokens are substituted for portions of program code in the step of replacing.
4. The method according to claim 1, wherein the step of replacing comprises the steps of:
compiling the software to produce object code;
performing the replacing within the resulting object code, wherein each token represents a new instruction not included in a standard instruction set of a CPU for which the object code was produced; and
programming the CPU such that each new instruction will be recognized as a valid CPU instruction.
5. The method according to claim 1, wherein the step of replacing comprises the steps of:
replacing at least one operator within the program code with a function call to a generic function that executes tokens and passes as parameters an appropriate token identifier and any arguments originally used with the operator.
6. The method according to claim 1, wherein the at least one portion of program code comprises at least one of an operator and a system function.
7. The method according to claim 1, further comprising the step of:
replacing at least one entry point memory address of at least one portion of the software intended to be protected with at least one corresponding entry point token.
8. The method according to claim 7, further comprising the steps of:
computing at least one value using the key and at least one entry point; and
replacing the at least one corresponding entry point token with the at least one value.
9. A method of executing a portion of the software protected according to the method of claim 8, comprising the steps of:
loading the key into memory;
computing at least one entry point based on the at least one value; and
redirecting execution of the software to the computed entry point.
10. A method of executing a portion of the software protected according to the method of claim 1, comprising the steps of:
loading the key into memory; and
substituting for at least one token in the portion of the software at least one functionality indicated by the key as corresponding to the at least one token.
11. A method of executing a portion of the software protected according to the method of claim 2, comprising the steps of:
loading the key into memory;
decrypting the key to produce a decrypted key; and
substituting for at least one token in the portion of the software at least one functionality indicated by the decrypted key as corresponding to the at least one token.
12. A method of executing a portion of the software protected according to the method of claim 3, comprising the steps of:
loading the key into memory;
de-interleaving the key; and
substituting for at least one token in the portion of the software at least one functionality indicated by the de-interleaved key as corresponding to the at least one token.
13. A method of executing a portion of the software protected according to the method of claim 4, comprising the steps of:
loading the key into memory; and
substituting for at least one token in the portion of the software at least one corresponding CPU instruction indicated by the key as corresponding to the at least one token.
14. A method of executing a portion of the software protected according to the method of claim 4, comprising the steps of:
loading the key into memory; and
executing, when at least one token in the portion of the software is detected, a software emulator that executes at least one functionality, as indicated by the key, defined as corresponding to the at least one token.
15. The method according to claim 1, wherein the step of storing the key in memory separate from the software comprises the step of:
storing the key in non-volatile memory of a BIOS.
16. The method according to claim 1, wherein the step of storing the key in memory separate from the software comprises the step of:
storing the key on a computer-readable medium different from that on which the software is stored.
17. A method of providing secure software, the software comprising program code, the method comprising the steps of:
replacing at least one portion of program code with a corresponding at least one token;
creating a key in which the at least one token is associated with an indication of functionality of the at least one portion of program code replaced by the at least one token;
providing the software to a user; and
separately providing the key to the user for storage separately from the software.
18. The method according to claim 17, wherein the step of separately providing the key comprises the step of:
providing instructions to the user for downloading the key and storing it separately from the software.
19. The method according to claim 17, wherein the step of separately providing the key comprises the step of:
providing the user with a computer-readable medium containing the key, where the computer-readable medium is separate from any computer-readable medium on which the software is stored.

The claims below are in addition to those above.
All refrences to claim(s) which appear below refer to the numbering after this setence.

1. Method for correcting chromatic aberration between first and second color component data of a current pixel of an image, comprising:
determining, in the image, an analyzing area around the current pixel,
comparing, for the current pixel, a first color component data of a first two dimensional block of m\xd7n pixels comprising the current pixel to a second color component data of pixels of second two dimensional blocks of pixels having the same size as the first two dimensional block of m\xd7n pixels within the analyzing area, wherein m and n are both more than 1,
selecting the second two dimensional block of pixels having the highest correlation with the first two dimensional block of m\xd7n pixels, determining the shift vector to be applied to the selected second two dimensional block in order that said selected second two dimensional block coincides spatially with said first two dimensional block of m\xd7n pixels, and
shifting the second color component data of the pixel of the selected second two dimensional block corresponding to the current pixel in accordance with the shift vector so as to correct chromatic aberration.
2. Method according to claim 1, wherein the first block of pixels is centered on the current pixel.
3. Method according to claim 1, wherein the size of the analyzing area depends on the size of the first block of pixels and the maximum aberration between the first and second color component data.