Patent ID: 7890565

Claim:
A method of computing whitening vectors, the method comprising: (A) entering a tweakable 128-bit key T to a first functional unit to produce a 128-bit T 0 value, where T 0 =TØ3, (B) entering To into a second functional unit to produce 128 128-bit values T 1 -T 128 , where, T 1 =T 0 2, T 2 =T 1 2, T 128 =T 127 2, (C) entering a 128-bit address value n into a third functional unit to produce 7-bit m values, where m represents a count of trailing values of one in a binary expansion of the address value n, (D) using the address value n, reduce the values T 1-128 in a fourth functional unit to produce one 128-bit value T m+1 , by: (i) using the least significant bit m 0 of m, compute sixty-four 128-bit values, by: T 1.0 =m 0 ?T 1 :T 2 , T 2.0 =m 0 ?T 3 :T 4 , T 3.0 =m 0 ?T 5 :T 6 , T 64.0 =m 0 ?T 127 :T 128 , (ii) using the second least significant bit m 1 of m, compute thirty-two 128-bit values, by: T 1.1 =m 1 ?T 1.0 :T 2.0, T 2.1 =m 1 ?T 3.0 :T 4.0, T 3.1 =m 1 ?T 5.0 :T 6.0, T 32.1 =m 1 ?T 63.0 :T 64.0, (iii) using the third least significant bit m 2 of m, compute sixteen 128-bit values, by: T 1.2 =m 2 ?T 1.1 :T 2.1, T 2.2 =m 2 ?T 3.1 :T 4.1, T 3.2 =m 2 ?T 5.1 :T 6.1, T 16.2 =m 2 ?T 31.1 :T 32.1, (iv) using the fourth least significant bit m 3 of m, compute eight 128-bit values in the same manner as described in steps (D)(i) through (D)(iii), (v) using the fifth least significant bit m 4 of m, compute four 128-bit values in the same manner as described in steps (D)(i) through (D)(iii), (vi) using the sixth least significant bit m 5 of m, compute two 128-bit values in the same manner as described in steps (D)(i) through (D)(iii), and (vii) using the seventh least significant bit m 6 of m, compute the 128-bit value T m+1 in the same manner as described in steps (D)(i) through (D)(iii), (E) input T m+1 and T 0 into a fifth functional unit to compute differential D T (n)=T m+1 ⊕T 0 , and (F) using the differential D T (n), compute whitening vector P n+1 =P n ⊕D T (n+1) and use P n+1 to encrypt/decrypt a data block for storage, where P n0 has been computed in an external multiplication unit once, at a beginning of a series of sequentially indexed data blocks.