Mercurial > dropbear
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]); |