MCPcopy Create free account
hub / github.com/FirebirdSQL/firebird / _desfunc

Function _desfunc

extern/libtomcrypt/src/ciphers/des.c:1400–1509  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1398static void desfunc(ulong32 *block, const ulong32 *keys)
1399#else
1400static 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]

Callers 1

desfuncFunction · 0.85

Calls 2

ROLcFunction · 0.85
RORcFunction · 0.85

Tested by

no test coverage detected