%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% Copyright: 2010 Integrated Sytems Laboratory, ETH Zurich %% http://www.iis.ee.ethz.ch/~sha3 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function y = NTT(M, f) y = zeros(1,128); y(1:64) = M; FFT64_8_8_Twiddle = [ 1, 1, 1, 1, 1, 1, 1, 1; 1, 2, 4, 8, 16, 32, 64, 128; 1, 60, 2, 120, 4, -17, 8, -34; 1, 120, 8, -68, 64, -30, -2, 17; 1, 46, 60, -67, 2, 92, 120, 123; 1, 92, -17, -22, 32, 117, -30, 67; 1, -67, 120, -73, 8, -22, -68, -70; 1, 123, -34, -70, 128, 67, 17, 35]; FFT128_2_64_Twiddle = [ 1, -118, 46, -31, 60, 116, -67, -61, ... 2, 21, 92, -62, 120, -25, 123, -122, ... 4, 42, -73, -124, -17, -50, -11, 13, ... 8, 84, 111, 9, -34, -100, -22, 26, ... 16, -89, -35, 18, -68, 57, -44, 52, ... 32, 79, -70, 36, 121, 114, -88, 104, ... 64, -99, 117, 72, -15, -29, 81, -49, ... 128, 59, -23, -113, -30, -58, -95, -98]; P = [1 65 33 97 17 81 49 113 9 73 41 105 25 89 57 121 5 69 37 101 21 85 53 117 13 77 45 109 29 93 61 125 3 67 35 99 19 83 51 115 11 75 43 107 27 91 59 123 7 71 39 103 23 87 55 119 15 79 47 111 31 95 63 127 2 66 34 98 18 82 50 114 10 74 42 106 26 90 58 122 6 70 38 102 22 86 54 118 14 78 46 110 30 94 62 126 4 68 36 100 20 84 52 116 12 76 44 108 28 92 60 124 8 72 40 104 24 88 56 120 16 80 48 112 32 96 64 128]; Pf = [ 1 65 33 97 17 81 49 113 9 73 41 105 25 89 57 121 5 69 37 101 21 85 53 117 13 77 45 109 29 93 61 125 3 67 35 99 19 83 51 115 11 75 43 107 27 91 59 123 7 71 39 103 23 87 55 119 15 79 47 111 31 95 63 127 2 66 34 98 18 82 50 114 10 74 42 106 26 90 58 122 6 70 38 102 22 86 54 118 14 78 46 110 30 94 62 126 4 68 36 100 20 84 52 116 12 76 44 108 28 92 60 124 8 72 40 104 24 88 56 120 16 80 48 112 32 96 64 128]; yo = y; tmp = y(64); for i=0:62, y(64+i+1) = reduce(y(i+1) * FFT128_2_64_Twiddle(i+1)); end if f == 1, tmp2 = y(62); y(62) = reduce(tmp2 + 1); y(126) = reduce((tmp2 - 1) * FFT128_2_64_Twiddle(62)); end y(63+1) = reduce(tmp + 1); y(127+1) = reduce((tmp - 1) * FFT128_2_64_Twiddle(63+1)); ym = zeros(16,8); for i = 1:16, ym(i,1:8) = int16(y(i*8-8+[1:8])); end % first ------------------------------------------------------------------- for i=0:7, ym(:,i+1) = FFT_8(ym(:,i+1)); end for i=1:8 for j = 1:8, ym(i,j) = reduce(ym(i,j)*FFT64_8_8_Twiddle(i,j)); end end for i=0:7, ym(i+1,:) = FFT_8(ym(i+1,:)); end % Second ------------------------------------------------------------------ for i=0:7, ym(9:end,i+1) = FFT_8(ym(9:end,i+1)); end for i=1:8 for j = 1:8, ym(8+i,j) = reduce(ym(8+i,j)*FFT64_8_8_Twiddle(i,j)); end end for i=0:7, ym(i+9,:) = FFT_8(ym(i+9,:)); end y2 = [ym(1,:) ym(2,:) ym(3,:) ym(4,:) ... ym(5,:) ym(6,:) ym(7,:) ym(8,:) ... ym(9,:) ym(10,:) ym(11,:) ym(12,:) ... ym(13,:) ym(14,:) ym(15,:) ym(16,:)]; % y = y2(P(1:128)); % else % y = y2(Pf(1:128)); % end