A data permutation/division method in which 4 k-bit long registers are provided, k being an integer, and 16 pieces of k-bit data {a4i+j}, where 0≦i≦3, 0≦j≦3, are permuted and divided into a set {a4(i+j mod 4)+j}, where 0≦i≦1, 0≦j≦3, and a set {a4(i+j mod 4)+j}, where 2≦i≦3, 0≦j≦3, said method comprising the steps of:
- (a) storing {a4i+j} in a register Ti for each i, where 0≦j≦3 and 0≦i≦3;
- (b) rotating the value of each of registers T0 and T2 in one direction for k bits;
- (c) concatenating said registers T0 and T2 into a virtual 8 k-bit long register, shifting its stored data in an arbitrary direction for 2 k bits, then extracting therefrom 4 k-bit data at the end thereof in the shift direction, and storing said extracted 4 k-bit data in a register T4;
- (d) concatenating registers T1 and T3 into a virtual 8 k-bit long register, shifting its stored contents in an arbitrary direction for 2 k bits, then extracting therefrom 4 k-bit data at the end thereof in the shift direction, and storing said extracted 4 k-bit data in a register T5;
- (e) concatenating registers T2 and T0 into a virtual 8 k-bit long register, shifting its stored contents in an arbitrary direction for 2 k bits, then extracting therefrom 4 k-bit data at the end thereof in the shift direction, and storing said extracted 4 k-bit data in a register T6;
- (f) concatenating registers T3 and T1 into a virtual 8 k-bit long register, shifting its stored contents in an arbitrary direction for 2 k bits, then extracting therefrom 4 k-bit data at the end thereof in the shift direction, and storing said extracted 4 k-bit data in a register T7;
- and
- (g) outputting the data of said registers T4, T5 and the data of said registers T6, T7 as two groups.