| 1398 | static void desfunc(ulong32 *block, const ulong32 *keys) |
| 1399 | #else |
| 1400 | static void _desfunc(ulong32 *block, const ulong32 *keys) |
| 1401 | #endif |
| 1402 | { |
| 1403 | ulong32 work, right, leftt; |
| 1404 | int cur_round; |
| 1405 | |
| 1406 | leftt = block[0]; |
| 1407 | right = block[1]; |
| 1408 | |
| 1409 | #ifdef LTC_SMALL_CODE |
| 1410 | work = ((leftt >> 4) ^ right) & 0x0f0f0f0fL; |
| 1411 | right ^= work; |
| 1412 | leftt ^= (work << 4); |
| 1413 | |
| 1414 | work = ((leftt >> 16) ^ right) & 0x0000ffffL; |
| 1415 | right ^= work; |
| 1416 | leftt ^= (work << 16); |
| 1417 | |
| 1418 | work = ((right >> 2) ^ leftt) & 0x33333333L; |
| 1419 | leftt ^= work; |
| 1420 | right ^= (work << 2); |
| 1421 | |
| 1422 | work = ((right >> 8) ^ leftt) & 0x00ff00ffL; |
| 1423 | leftt ^= work; |
| 1424 | right ^= (work << 8); |
| 1425 | |
| 1426 | right = ROLc(right, 1); |
| 1427 | work = (leftt ^ right) & 0xaaaaaaaaL; |
| 1428 | |
| 1429 | leftt ^= work; |
| 1430 | right ^= work; |
| 1431 | leftt = ROLc(leftt, 1); |
| 1432 | #else |
| 1433 | { |
| 1434 | ulong64 tmp; |
| 1435 | tmp = des_ip[0][byte(leftt, 0)] ^ |
| 1436 | des_ip[1][byte(leftt, 1)] ^ |
| 1437 | des_ip[2][byte(leftt, 2)] ^ |
| 1438 | des_ip[3][byte(leftt, 3)] ^ |
| 1439 | des_ip[4][byte(right, 0)] ^ |
| 1440 | des_ip[5][byte(right, 1)] ^ |
| 1441 | des_ip[6][byte(right, 2)] ^ |
| 1442 | des_ip[7][byte(right, 3)]; |
| 1443 | leftt = (ulong32)(tmp >> 32); |
| 1444 | right = (ulong32)(tmp & 0xFFFFFFFFUL); |
| 1445 | } |
| 1446 | #endif |
| 1447 | |
| 1448 | for (cur_round = 0; cur_round < 8; cur_round++) { |
| 1449 | work = RORc(right, 4) ^ *keys++; |
| 1450 | leftt ^= SP7[work & 0x3fL] |
| 1451 | ^ SP5[(work >> 8) & 0x3fL] |
| 1452 | ^ SP3[(work >> 16) & 0x3fL] |
| 1453 | ^ SP1[(work >> 24) & 0x3fL]; |
| 1454 | work = right ^ *keys++; |
| 1455 | leftt ^= SP8[ work & 0x3fL] |
| 1456 | ^ SP6[(work >> 8) & 0x3fL] |
| 1457 | ^ SP4[(work >> 16) & 0x3fL] |