/* 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 };