comparison noekeon.c @ 143:5d99163f7e32 libtomcrypt-orig

import of libtomcrypt 0.99
author Matt Johnston <matt@ucc.asn.au>
date Sun, 19 Dec 2004 11:34:45 +0000
parents 7faae8f46238
children
comparison
equal deleted inserted replaced
15:6362d3854bb4 143:5d99163f7e32
31 0x0000002fUL, 0x0000005eUL, 0x000000bcUL, 0x00000063UL, 31 0x0000002fUL, 0x0000005eUL, 0x000000bcUL, 0x00000063UL,
32 0x000000c6UL, 0x00000097UL, 0x00000035UL, 0x0000006aUL, 32 0x000000c6UL, 0x00000097UL, 0x00000035UL, 0x0000006aUL,
33 0x000000d4UL 33 0x000000d4UL
34 }; 34 };
35 35
36
37 #define kTHETA(a, b, c, d) \ 36 #define kTHETA(a, b, c, d) \
38 temp = a^c; temp = temp ^ ROL(temp, 8) ^ ROR(temp, 8); \ 37 temp = a^c; temp = temp ^ ROL(temp, 8) ^ ROR(temp, 8); \
39 b ^= temp; d ^= temp; \ 38 b ^= temp; d ^= temp; \
40 temp = b^d; temp = temp ^ ROL(temp, 8) ^ ROR(temp, 8); \ 39 temp = b^d; temp = temp ^ ROL(temp, 8) ^ ROR(temp, 8); \
41 a ^= temp; c ^= temp; 40 a ^= temp; c ^= temp;
95 #else 94 #else
96 void noekeon_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *key) 95 void noekeon_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *key)
97 #endif 96 #endif
98 { 97 {
99 ulong32 a,b,c,d,temp; 98 ulong32 a,b,c,d,temp;
100 #ifdef SMALL_CODE
101 int r; 99 int r;
102 #endif
103 100
104 _ARGCHK(key != NULL); 101 _ARGCHK(key != NULL);
105 _ARGCHK(pt != NULL); 102 _ARGCHK(pt != NULL);
106 _ARGCHK(ct != NULL); 103 _ARGCHK(ct != NULL);
107 104
113 THETA(key->noekeon.K, a,b,c,d); \ 110 THETA(key->noekeon.K, a,b,c,d); \
114 PI1(a,b,c,d); \ 111 PI1(a,b,c,d); \
115 GAMMA(a,b,c,d); \ 112 GAMMA(a,b,c,d); \
116 PI2(a,b,c,d); 113 PI2(a,b,c,d);
117 114
118 #ifdef SMALL_CODE
119 for (r = 0; r < 16; ++r) { 115 for (r = 0; r < 16; ++r) {
120 ROUND(r); 116 ROUND(r);
121 } 117 }
122 #else
123 ROUND( 0); ROUND( 1); ROUND( 2); ROUND( 3);
124 ROUND( 4); ROUND( 5); ROUND( 6); ROUND( 7);
125 ROUND( 8); ROUND( 9); ROUND(10); ROUND(11);
126 ROUND(12); ROUND(13); ROUND(14); ROUND(15);
127 #endif
128 118
129 #undef ROUND 119 #undef ROUND
130 120
131 a ^= RC[16]; 121 a ^= RC[16];
132 THETA(key->noekeon.K, a, b, c, d); 122 THETA(key->noekeon.K, a, b, c, d);
148 #else 138 #else
149 void noekeon_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *key) 139 void noekeon_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *key)
150 #endif 140 #endif
151 { 141 {
152 ulong32 a,b,c,d, temp; 142 ulong32 a,b,c,d, temp;
153 #ifdef SMALL_CODE
154 int r; 143 int r;
155 #endif
156 144
157 _ARGCHK(key != NULL); 145 _ARGCHK(key != NULL);
158 _ARGCHK(pt != NULL); 146 _ARGCHK(pt != NULL);
159 _ARGCHK(ct != NULL); 147 _ARGCHK(ct != NULL);
160 148
167 a ^= RC[i]; \ 155 a ^= RC[i]; \
168 PI1(a,b,c,d); \ 156 PI1(a,b,c,d); \
169 GAMMA(a,b,c,d); \ 157 GAMMA(a,b,c,d); \
170 PI2(a,b,c,d); 158 PI2(a,b,c,d);
171 159
172 #ifdef SMALL_CODE
173 for (r = 16; r > 0; --r) { 160 for (r = 16; r > 0; --r) {
174 ROUND(r); 161 ROUND(r);
175 } 162 }
176 #else 163
177 ROUND(16); ROUND(15); ROUND(14); ROUND(13);
178 ROUND(12); ROUND(11); ROUND(10); ROUND( 9);
179 ROUND( 8); ROUND( 7); ROUND( 6); ROUND( 5);
180 ROUND( 4); ROUND( 3); ROUND( 2); ROUND( 1);
181 #endif
182
183 #undef ROUND 164 #undef ROUND
184 165
185 THETA(key->noekeon.dK, a,b,c,d); 166 THETA(key->noekeon.dK, a,b,c,d);
186 a ^= RC[0]; 167 a ^= RC[0];
187 STORE32H(a,&pt[0]); STORE32H(b, &pt[4]); 168 STORE32H(a,&pt[0]); STORE32H(b, &pt[4]);