svn: ecrypt/trunk/submissions/vest/provest-16/vest_16.h
File:
[svn] /
ecrypt /
trunk /
submissions /
vest /
provest-16 / vest_16.h
(
download)
(
as text)
Revision:
98,
Fri Sep 2 10:45:41 2005 UTC (7 years, 8 months ago) by
cdecanni
File size: 15668 byte(s)
* The different variants selected by ECRYPT_VARIANT are not just different
implementations; they are really different ciphers. In order to solve this
problem I have created three separate directories. The code still needs to be cleaned up though.
/* VEST-16 core accumulator input and output bit permutations */
static const vest_core_inputs vest_16_structure[vest_16_bits] =
{
{ 0, 1, 2, 3, 4,326}, /* 0 */
{ 0, 1, 2, 3, 4, 34}, /* 1 */
{ 0, 1, 2, 3, 4,122}, /* 2 */
{ 0, 1, 2, 3, 4,209}, /* 3 */
{ 0, 1, 2, 3, 4,180}, /* 4 */
{ 4, 4, 1, 3, 2,266}, /* 5 */
{ 5, 5, 2, 1, 3,178}, /* 6 */
{ 1, 1, 3, 5, 4,189}, /* 7 */
{ 7, 7, 4, 1, 0, 85}, /* 8 */
{ 8, 8, 5, 2, 6,118}, /* 9 */
{ 2, 6, 3, 4, 5,223}, /* 10 */
{ 10, 8, 6, 5, 9,243}, /* 11 */
{ 11, 8, 5, 10, 9,200}, /* 12 */
{ 5, 9, 6, 2, 3, 86}, /* 13 */
{ 1, 10, 7, 2, 4,301}, /* 14 */
{ 1, 11, 14, 4, 8,117}, /* 15 */
{ 1, 0, 3, 4, 7,143}, /* 16 */
{ 16, 13, 7, 6, 0,233}, /* 17 */
{ 17, 13, 9, 5, 6,123}, /* 18 */
{ 17, 13, 12, 3, 7,114}, /* 19 */
{ 19, 17, 13, 12, 16,296}, /* 20 */
{ 4, 3, 11, 10, 14, 39}, /* 21 */
{ 21, 18, 15, 11, 9,265}, /* 22 */
{ 20, 19, 13, 12, 15,163}, /* 23 */
{ 15, 20, 9, 13, 23,218}, /* 24 */
{ 15, 9, 18, 14, 11,293}, /* 25 */
{ 20, 22, 19, 15, 9, 92}, /* 26 */
{ 8, 11, 12, 25, 10, 64}, /* 27 */
{ 15, 8, 12, 16, 11,227}, /* 28 */
{ 26, 20, 28, 18, 12,175}, /* 29 */
{ 26, 20, 29, 19, 24,283}, /* 30 */
{ 23, 25, 24, 10, 14,245}, /* 31 */
{ 12, 28, 25, 21, 29,204}, /* 32 */
{ 32, 19, 26, 22, 20,201}, /* 33 */
{ 26, 14, 19, 21, 30,231}, /* 34 */
{ 12, 20, 13, 17, 18,244}, /* 35 */
{ 33, 11, 31, 25, 14,267}, /* 36 */
{ 36, 33, 30, 26, 20, 10}, /* 37 */
{ 24, 37, 25, 31, 27,309}, /* 38 */
{ 6, 0, 16, 13, 8,255}, /* 39 */
{ 25, 31, 14, 28, 10,330}, /* 40 */
{ 40, 31, 37, 30, 24, 18}, /* 41 */
{ 34, 27, 38, 31, 25,146}, /* 42 */
{ 42, 39, 36, 32, 26, 54}, /* 43 */
{ 43, 26, 22, 11, 27,186}, /* 44 */
{ 42, 41, 35, 20, 37,100}, /* 45 */
{ 45, 42, 36, 39, 30,202}, /* 46 */
{ 46, 43, 45, 42, 30,104}, /* 47 */
{ 40, 11, 25, 10, 31,167}, /* 48 */
{ 47, 43, 42, 32, 10,166}, /* 49 */
{ 47, 46, 42, 17, 34, 11}, /* 50 */
{ 50, 47, 44, 43, 22,134}, /* 51 */
{ 51, 36, 45, 41, 35,211}, /* 52 */
{ 50, 30, 46, 42, 43,217}, /* 53 */
{ 53, 50, 44, 28, 51, 19}, /* 54 */
{ 23, 53, 43, 52, 29,297}, /* 55 */
{ 55, 52, 32, 45, 39, 31}, /* 56 */
{ 42, 43, 19, 56, 26,298}, /* 57 */
{ 57, 16, 51, 13, 12, 37}, /* 58 */
{ 58, 53, 55, 48, 54,232}, /* 59 */
{ 17, 59, 47, 49, 43,274}, /* 60 */
{ 29, 28, 32, 23, 5,311}, /* 61 */
{ 54, 58, 8, 6, 9,289}, /* 62 */
{ 49, 45, 43, 47, 36,188}, /* 63 */
{ 50, 51, 44, 53, 47,230}, /* 64 */
{ 45, 57, 58, 54, 48,147}, /* 65 */
{ 20, 38, 24, 55, 23,216}, /* 66 */
{ 65, 63, 45, 47, 49,197}, /* 67 */
{ 44, 64, 65, 31, 49,312}, /* 68 */
{ 68, 65, 62, 49, 45,119}, /* 69 */
{ 2, 65, 68, 69, 22,170}, /* 70 */
{ 61, 40, 31, 60, 62, 16}, /* 71 */
{ 58, 70, 69, 62, 65,288}, /* 72 */
{ 58, 61, 35, 51, 56,220}, /* 73 */
{ 73, 51, 61, 50, 57,179}, /* 74 */
{ 63, 7, 1, 38, 74,271}, /* 75 */
{ 75, 72, 63, 47, 44,125}, /* 76 */
{ 29, 53, 68, 64, 51,273}, /* 77 */
{ 40, 65, 24, 69, 61,131}, /* 78 */
{ 46, 75, 72, 52, 62,176}, /* 79 */
{ 46, 76, 73, 16, 64,276}, /* 80 */
{ 65, 77, 74, 70, 64, 30}, /* 81 */
{ 63, 78, 75, 38, 66,295}, /* 82 */
{ 82, 33, 76, 47, 73, 77}, /* 83 */
{ 40, 80, 30, 44, 67,193}, /* 84 */
{ 72, 81, 23, 29, 75,130}, /* 85 */
{ 54, 80, 59, 77, 85,169}, /* 86 */
{ 73, 83, 57, 76, 56,172}, /* 87 */
{ 48, 78, 55, 66, 59,150}, /* 88 */
{ 60, 86, 80, 70, 79,242}, /* 89 */
{ 89, 75, 83, 72, 73, 25}, /* 90 */
{ 90, 79, 84, 80, 74,325}, /* 91 */
{ 38, 88, 43, 68, 63, 40}, /* 92 */
{ 68, 89, 69, 82, 24, 0}, /* 93 */
{ 73, 76, 90, 36, 28, 66}, /* 94 */
{ 94, 91, 88, 8, 78, 56}, /* 95 */
{ 15, 21, 89, 82, 79,194}, /* 96 */
{ 21, 59, 93, 86, 66,154}, /* 97 */
{ 97, 94, 91, 87, 95,238}, /* 98 */
{ 98, 78, 92, 88, 63,165}, /* 99 */
{ 82, 7, 93, 89, 83,268}, /* 100 */
{ 91, 97, 94, 90, 53,162}, /* 101 */
{ 14, 37, 48, 40, 69,205}, /* 102 */
{102, 99, 96, 60, 45, 76}, /* 103 */
{103, 29, 59, 93, 60, 38}, /* 104 */
{ 79, 84,100, 94, 28, 27}, /* 105 */
{ 90,100, 56, 71, 72,212}, /* 106 */
{ 82, 2, 98, 85, 27,262}, /* 107 */
{ 71, 89, 72, 95, 96,284}, /* 108 */
{108,105, 33, 98, 5, 15}, /* 109 */
{108,104, 92, 99, 33, 58}, /* 110 */
{ 87, 95, 21, 14, 28,279}, /* 111 */
{ 94,108, 55,101,107, 29}, /* 112 */
{ 53, 9, 83, 33, 91,141}, /* 113 */
{ 4,111, 81, 69,106, 63}, /* 114 */
{107, 88,108, 77, 98,126}, /* 115 */
{ 96,102,108, 48, 99,305}, /* 116 */
{116, 79,110,100, 86, 32}, /* 117 */
{112,114,104, 80, 59,249}, /* 118 */
{ 71,118, 22,110,115,304}, /* 119 */
{ 59, 77,108, 93, 97,127}, /* 120 */
{ 81,117,115,110,106,151}, /* 121 */
{ 79, 95,121,111, 74,152}, /* 122 */
{122,104,113, 59,109,226}, /* 123 */
{123, 34, 97,113,107,299}, /* 124 */
{ 54,101, 33,122,109,254}, /* 125 */
{125, 43,119, 87, 61,157}, /* 126 */
{ 40, 62, 69,114,118,264}, /* 127 */
{ 74, 86, 64, 71,110,303}, /* 128 */
{ 24, 76,114,106,112, 50}, /* 129 */
{106, 49, 16,121, 92,116}, /* 130 */
{130,121,124,127,118, 53}, /* 131 */
{131,117,110, 71,115,236}, /* 132 */
{ 78,120,126,132, 59, 2}, /* 133 */
{ 83,103, 60, 93,113,307}, /* 134 */
{108, 18,128,124, 71,158}, /* 135 */
{115, 89,131, 70,127, 49}, /* 136 */
{ 59,133,130,126,120, 26}, /* 137 */
{ 41,112, 37,107,119,161}, /* 138 */
{ 18,135, 92,128, 80,308}, /* 139 */
{ 94, 55, 52, 83,130,324}, /* 140 */
{140, 99,134, 42, 17, 23}, /* 141 */
{141,138,135,131,125,105}, /* 142 */
{ 64,128,136,132, 68, 99}, /* 143 */
{142, 95,122, 7, 62,137}, /* 144 */
{ 96, 93, 89, 82, 21,135}, /* 145 */
{ 44,131,139,135,124, 88}, /* 146 */
{116,123, 99,102,139,133}, /* 147 */
{147,117, 61,137,100,129}, /* 148 */
{ 62,145,142,138, 77, 48}, /* 149 */
{ 70,136,143,145,115, 51}, /* 150 */
{150, 28, 57, 95,111,132}, /* 151 */
{ 41,148, 1,142, 37, 87}, /* 152 */
{138,149,121, 35,145,234}, /* 153 */
{128,104,113,112, 68,323}, /* 154 */
{154, 61,151,144, 40, 72}, /* 155 */
{138, 87,149,133,126,199}, /* 156 */
{103,102,132, 22, 15,317}, /* 157 */
{157,154,151, 17,141, 74}, /* 158 */
{116,102, 41,148,142,214}, /* 159 */
{159,136,153,150, 70, 93}, /* 160 */
{ 69,128, 98,127, 67,278}, /* 161 */
{161,158,155,151,145, 8}, /* 162 */
{153,136,149,133,159,196}, /* 163 */
{112,116,107,139,147,185}, /* 164 */
{147, 32, 61,163,155,113}, /* 165 */
{165, 94, 91,155, 90,221}, /* 166 */
{162,137, 74,111,113,198}, /* 167 */
{ 66, 59, 78,133,126,148}, /* 168 */
{135,112,162,155,165,252}, /* 169 */
{169,109,163,159,153,195}, /* 170 */
{131,167,151, 98,154,257}, /* 171 */
{161,168,155,171, 67,139}, /* 172 */
{138,169,149,162,156,300}, /* 173 */
{167,101,107, 21,164,313}, /* 174 */
{ 76,152,174,168, 36,206}, /* 175 */
{175, 35,169,165, 87, 81}, /* 176 */
{176,173,170,166,160, 95}, /* 177 */
{177,174,171,167, 97, 84}, /* 178 */
{173,109,141,117,103,203}, /* 179 */
{179,176,149,136,173, 6}, /* 180 */
{171, 49,174,155,132,101}, /* 181 */
{178,177,166,176,165,145}, /* 182 */
{109,170,176, 98,166, 83}, /* 183 */
{ 56,156,163, 53,119,258}, /* 184 */
{ 0, 96,102, 60,168,110}, /* 185 */
{112,182,165,153,169, 79}, /* 186 */
{186,183, 52,109,105, 97}, /* 187 */
{130,172, 92,161,182,306}, /* 188 */
{110,188,181,128,160,328}, /* 189 */
{115,174,183,186,173,256}, /* 190 */
{124,171,167, 97,174, 22}, /* 191 */
{159,157,185,177,123, 46}, /* 192 */
{ 11,141,175,177,182,320}, /* 193 */
{183,190,157,118,177,215}, /* 194 */
{ 35,191,101,125,124, 14}, /* 195 */
{143,187,175,134,152,263}, /* 196 */
{196,194, 68,186,182,106}, /* 197 */
{197,194,191,187,181, 12}, /* 198 */
{198,195,192,188,164, 44}, /* 199 */
{119,196,134,146,183,235}, /* 200 */
{200,197,194,190,184, 1}, /* 201 */
{120, 80,164,128, 84, 41}, /* 202 */
{202,123,196,182,186,275}, /* 203 */
{203,196,152,193,190, 55}, /* 204 */
{172,201,198,192,202,281}, /* 205 */
{205,111,146,195,160, 5}, /* 206 */
{172,198,201,154,191,259}, /* 207 */
{199, 86,201,202, 85,103}, /* 208 */
{172,205,202,198,192,121}, /* 209 */
{127,206,203,199,208, 35}, /* 210 */
{160, 84,158,146,157,270}, /* 211 */
{211,168, 67,155, 46,153}, /* 212 */
{210,143,207, 81,196,174}, /* 213 */
{213,210,207,203,140, 96}, /* 214 */
{214,128,208,203,160,239}, /* 215 */
{215, 52,140,134, 48,322}, /* 216 */
{208, 66, 88,201, 48,181}, /* 217 */
{217,184,192,161,158,246}, /* 218 */
{213,184,212,126,210,237}, /* 219 */
{219,216,162, 75,137, 80}, /* 220 */
{129,217, 84,152,204, 69}, /* 221 */
{203,160,215,214,167,294}, /* 222 */
{191, 94, 7,212, 38,321}, /* 223 */
{149,129,217,138,145,269}, /* 224 */
{224,188,168,214, 81,156}, /* 225 */
{185,200,184,190,194,171}, /* 226 */
{185,140,223,216,210,111}, /* 227 */
{182,175,195,146,211, 57}, /* 228 */
{228,225,147,223,212, 75}, /* 229 */
{142,189, 41,110,203,319}, /* 230 */
{213,173,229,222,207, 70}, /* 231 */
{125,195, 23, 56,158,208}, /* 232 */
{220,219,215, 54, 27,108}, /* 233 */
{144,113,224, 83,228,315}, /* 234 */
{139,231,234,224,218, 17}, /* 235 */
{235,232,229,225,228,187}, /* 236 */
{152, 37,221, 92,158,329}, /* 237 */
{237,185,231,227,216,138}, /* 238 */
{237,177,235,228,151,292}, /* 239 */
{239,236,235,229,228,149}, /* 240 */
{157,171,234,183,224, 78}, /* 241 */
{236,238,235,232,225, 21}, /* 242 */
{174,239,236,219,142,192}, /* 243 */
{241,240,215,156, 77, 60}, /* 244 */
{154,170,227, 71,185,285}, /* 245 */
{188,129,239,242,241,260}, /* 246 */
{206, 73,229,180,144, 91}, /* 247 */
{207,239,240,237,241, 52}, /* 248 */
{207,222,192,238,213, 7}, /* 249 */
{241,240,229,239,125,107}, /* 250 */
{209,226,181,191,234,287}, /* 251 */
{234,134,146,200, 26,327}, /* 252 */
{232,225,246,242,236,302}, /* 253 */
{144,129,247,243,237, 13}, /* 254 */
{ 82,251,237, 27,144,164}, /* 255 */
{252,226,230,180,222,248}, /* 256 */
{241,256,249,246,240,210}, /* 257 */
{202,254,234,247,251,207}, /* 258 */
{258,254,238,179, 67,253}, /* 259 */
{205,256,253,249,213, 73}, /* 260 */
{260,253,244,250,177,280}, /* 261 */
{255,142,261,251,181,182}, /* 262 */
{222,259,256,252,246,224}, /* 263 */
{263,260,257,253,261,128}, /* 264 */
{179,261,258,254,247, 47}, /* 265 */
{156,208, 67,255,249, 65}, /* 266 */
{105,263,260,256,250, 62}, /* 267 */
{215,263,222,250, 96,251}, /* 268 */
{230,267,180, 21,218,168}, /* 269 */
{269,248,258,247,268, 28}, /* 270 */
{270,106,269,218,124,291}, /* 271 */
{156,262,220,181,255,183}, /* 272 */
{272,269,206,143,208, 89}, /* 273 */
{268,193,204,103,190, 9}, /* 274 */
{134,141,236,264, 52,316}, /* 275 */
{275,272,262,197,259,219}, /* 276 */
{265,255,245,251,214, 90}, /* 277 */
{173,241,271,267,277,191}, /* 278 */
{278,276,272,101,275,290}, /* 279 */
{264,261,245,144,263,190}, /* 280 */
{252,277,256, 95,213,261}, /* 281 */
{230,252,226,189,281, 71}, /* 282 */
{260,279,276,272, 84,228}, /* 283 */
{ 55,246,148,259,271,155}, /* 284 */
{252,281,278,274,268,229}, /* 285 */
{223,218,150,206,269,250}, /* 286 */
{286,283,280,276,272,124}, /* 287 */
{274,241,257,277,270,222}, /* 288 */
{266,273,282,219,269,277}, /* 289 */
{289,286,244,226,273,142}, /* 290 */
{281,265,284,283,274,120}, /* 291 */
{250,279,288,282,275,318}, /* 292 */
{292,285,221,282,209, 20}, /* 293 */
{262,290,120,245,277, 61}, /* 294 */
{235,291,121,284,278, 45}, /* 295 */
{267,292,289,285,193, 82}, /* 296 */
{294,105,290,286,280, 3}, /* 297 */
{294,290,280,287,240, 67}, /* 298 */
{273,140,266,288,282,240}, /* 299 */
{264,224,293,166,135,159}, /* 300 */
{300,211,294,290,264,310}, /* 301 */
{281,298,295,278,284,140}, /* 302 */
{302,293,296,292,286,115}, /* 303 */
{298,271, 90,300,127,286}, /* 304 */
{299,282,140,279,288,314}, /* 305 */
{305,302,299,248,295, 24}, /* 306 */
{306,303,187,233,220, 4}, /* 307 */
{307,304,301,297,291, 98}, /* 308 */
{292,302,221,137,275,109}, /* 309 */
{296,306,257,299,305, 94}, /* 310 */
{228,301,304,300,307,112}, /* 311 */
{253,308,305,248,295,173}, /* 312 */
{311,289,184,238,217,136}, /* 313 */
{313,291,307,303,297,177}, /* 314 */
{219,311,308,304,298, 36}, /* 315 */
{243,280,309,214,242,247}, /* 316 */
{225,211,212,137,159,282}, /* 317 */
{306,287,198,114,187,160}, /* 318 */
{318,315,309,308,301, 68}, /* 319 */
{310,216,317,204,123,213}, /* 320 */
{320,317,302,310,285, 43}, /* 321 */
{321,318,315,312,320,225}, /* 322 */
{139,164,316,314,184,272}, /* 323 */
{270,287,319,179,258,144}, /* 324 */
{178,321,323,314,316,102}, /* 325 */
{325,199,321,315,322,184}, /* 326 */
{251,314,246,319,300, 33}, /* 327 */
{327,324,233,325,279,241}, /* 328 */
{328,325,322,318,312, 42}, /* 329 */
{329,314,323,319,313, 59} /* 330 */
};
/* VEST-16 root cipher family */
static const u32 provest_16[vest_16_family_words] =
{
/* RNS counters indexes (rns) */
0, 16, 17, 18, 1, 19, 20, 2, 3, 4, 5, 6, 7, 8, 9, 10,
/* Feedback functions indexes (vest_f) */
78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97,
98, 99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,
118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,
138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,
158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,
178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,
198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,
218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,
238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,
258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,
278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,
298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,
318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,
338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,
358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,
378,379,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,
398,399,400,401,402,403,
/* Input bit permutation indexes (p5) */
83, 84, 53, 38, 25, 42, 87, 66, 29, 55, 21,114, 98,111, 5,110, 46,115,117,104,
107, 76, 1, 44, 3,113, 69, 71,102, 41, 85, 4, 19,108, 80, 9, 79, 77, 65, 48,
23, 14, 82,109, 6, 17, 75, 0,105, 64, 61, 74, 24,100, 16, 90, 10, 2, 78,116,
106, 27, 68, 33, 60, 12, 13, 52, 49, 15, 50, 94,119, 92,112, 40, 58,103, 99, 54,
30, 37, 73,118, 62, 35,101, 88, 97, 22, 93, 20, 91, 96, 39, 8, 51, 43, 81, 95,
28, 18, 7, 57, 11, 63, 70, 26, 59, 32, 56, 72, 47, 36, 31, 86, 89, 34, 45, 67,
0, 86, 69, 83, 84, 45, 49, 54, 32, 67,105,112,104,101,114, 32, 70, 97,109,105,
108,121, 32, 84,114,101,101, 10, 68,101,115,105,103,110,101,100, 32, 98,121, 32,
83,101, 97,110, 32, 79, 39, 78,101,105,108, 10, 67, 66, 32, 67, 97,112,105,116,
97,108, 32, 77, 97,110, 97,103,101,109,101,110,116, 32, 83, 46, 65, 46, 0, 45,
42,103,106, 71, 82, 29, 86, 90, 4, 33, 70, 31,114, 9, 99, 15, 72, 46, 79, 61,
75, 97, 78, 63,115, 34, 67, 96,116, 51, 5, 55, 50, 21,112,118, 40,104, 26, 98,
14, 60, 91, 65, 92, 49, 6, 47, 24, 23, 20, 57, 18, 80, 2, 54, 19, 74, 64, 59,
111, 48,108, 37, 30, 35, 17, 39, 62, 85, 53, 94, 52, 16, 38, 7, 36, 3,102, 44,
100, 13, 76, 89, 66, 27, 88, 32, 58, 81, 8,119, 1, 69,110, 87, 77,101, 22,107,
0,105, 73, 28,117, 12, 93, 84, 43, 83,113, 95, 10, 56,109, 11, 68, 41, 25, 2,
3, 5, 7, 11, 13, 17
};