A method of cryptographically transforming data text c comprising the step of generating an integer representation m of the data text c according to m = c d where d is a predetermined exponent, the step of generating the integer representation m including generating a sequence of intermediate numbers, each intermediate number being based on two or fewer earlier numbers in the sequence, generating a sequence of intermediate numbers including retrieving a pre-stored instruction (opcode) to determine which two or fewer earlier numbers in the sequence a given intermediate number is based on and the functional manipulation of the or each earlier number required to generate the given intermediate number, wherein generating the integer representation m further includes the step of deriving and storing a list of instructions, each instruction corresponding to the generation of a given intermediate number, wherein deriving and storing a list of instructions includes deriving the instructions from the predetermined exponent d, wherein deriving the instructions from the predetermined exponent includes: - splitting the binary equivalent of the predetermined exponent d into first (x) and second (y) bit portions; - executing a convergent sequence of operations on the first (x) and second (y) bit portions to reduce each bit portion to 1; and - deriving an instruction (opcode) at each step of the convergent sequence of operations, wherein executing a convergent sequence of operations on the first and second bit portions includes: - identifying the bit portion (x; y) having the larger magnitude; - halving the larger magnitude bit portion if the larger magnitude bit portion is even; and - subtracting the smaller magnitude bit portion from the larger magnitude bit portion if the larger magnitude bit portion is odd; and - repeating the foregoing steps until each bit portion is 1, wherein deriving an instruction at each step of the convergent sequence of operations includes: - deriving a double instruction (R1 = 2*R1) when the larger magnitude bit portion is halved; and - deriving an add instruction (R1 = R1 + R2) when the smaller magnitude bit portion is subtracted from the larger magnitude bit portion, wherein deriving a double instruction (R1 = 2*R1) includes indicating the memory element in which the larger magnitude bit portion resides, and deriving an add instruction (R1 = R1 + R2) includes indicating the respective memory elements in which each of the larger magnitude bit portion and the smaller magnitude bit portion resides, wherein generating a sequence of intermediate numbers further includes: (a) initialising first and second memory elements with the binary equivalent of the data text c; (b) retrieving a pre-stored instruction; (c) functionally manipulating one or both of the first and second memory elements according to the retrieved instruction to generate an intermediate number; and (d) repeating each of steps (b) and (c) for each instruction in the list of instructions, further including the step of combining the bit information in the first and second memory elements to produce the integer representation m. - splitting the binary equivalent of the predetermined exponent d into first (x) and second (y) bit portions; - executing a convergent sequence of operations on the first (x) and second (y) bit portions to reduce each bit portion to 1; and - deriving an instruction (opcode) at each step of the convergent sequence of operations, - identifying the bit portion (x; y) having the larger magnitude; - halving the larger magnitude bit portion if the larger magnitude bit portion is even; and - subtracting the smaller magnitude bit portion from the larger magnitude bit portion if the larger magnitude bit portion is odd; and - repeating the foregoing steps until each bit portion is 1, - deriving a double instruction (R1 = 2*R1) when the larger magnitude bit portion is halved; and - deriving an add instruction (R1 = R1 + R2) when the smaller magnitude bit portion is subtracted from the larger magnitude bit portion, (a) initialising first and second memory elements with the binary equivalent of the data text c; (b) retrieving a pre-stored instruction; (c) functionally manipulating one or both of the first and second memory elements according to the retrieved instruction to generate an intermediate number; and (d) repeating each of steps (b) and (c) for each instruction in the list of instructions,