#include <zeusbase/Security/DESCrypter.h>Defines | |
| #define | DO_PERMUTATION(a, temp, b, offset, mask) |
| #define | INITIAL_PERMUTATION(left, temp, right) |
| #define | FINAL_PERMUTATION(left, temp, right) |
| #define | DES_ROUND(from, to, work, subkey) |
| #define | READ_64BIT_DATA(data, left, right) |
| #define | WRITE_64BIT_DATA(data, left, right) |
| #define DES_ROUND | ( | from, | |
| to, | |||
| work, | |||
| subkey | |||
| ) |
work = from ^ *subkey++; \
to ^= sbox8[ work & 0x3f ]; \
to ^= sbox6[ (work>>8) & 0x3f ]; \
to ^= sbox4[ (work>>16) & 0x3f ]; \
to ^= sbox2[ (work>>24) & 0x3f ]; \
work = ((from << 28) | (from >> 4)) ^ *subkey++; \
to ^= sbox7[ work & 0x3f ]; \
to ^= sbox5[ (work>>8) & 0x3f ]; \
to ^= sbox3[ (work>>16) & 0x3f ]; \
to ^= sbox1[ (work>>24) & 0x3f ];
| #define DO_PERMUTATION | ( | a, | |
| temp, | |||
| b, | |||
| offset, | |||
| mask | |||
| ) |
temp = ((a>>offset) ^ b) & mask; \
b ^= temp; \
a ^= temp<<offset;
| #define FINAL_PERMUTATION | ( | left, | |
| temp, | |||
| right | |||
| ) |
left = (left << 31) | (left >> 1); \
temp = (left ^ right) & 0xaaaaaaaa; \
left ^= temp; \
right ^= temp; \
right = (right << 31) | (right >> 1); \
DO_PERMUTATION(right, temp, left, 8, 0x00ff00ff) \
DO_PERMUTATION(right, temp, left, 2, 0x33333333) \
DO_PERMUTATION(left, temp, right, 16, 0x0000ffff) \
DO_PERMUTATION(left, temp, right, 4, 0x0f0f0f0f)
| #define INITIAL_PERMUTATION | ( | left, | |
| temp, | |||
| right | |||
| ) |
DO_PERMUTATION(left, temp, right, 4, 0x0f0f0f0f) \ DO_PERMUTATION(left, temp, right, 16, 0x0000ffff) \ DO_PERMUTATION(right, temp, left, 2, 0x33333333) \ DO_PERMUTATION(right, temp, left, 8, 0x00ff00ff) \ right = (right << 1) | (right >> 31); \ temp = (left ^ right) & 0xaaaaaaaa; \ right ^= temp; \ left ^= temp; \ left = (left << 1) | (left >> 31);
| #define READ_64BIT_DATA | ( | data, | |
| left, | |||
| right | |||
| ) |
left = (data[0] << 24) | (data[1] << 16) | (data[2] << 8) | data[3]; \
right = (data[4] << 24) | (data[5] << 16) | (data[6] << 8) | data[7];
| #define WRITE_64BIT_DATA | ( | data, | |
| left, | |||
| right | |||
| ) |
data[0] = (Uint8)((left >> 24) & 0xff); data[1] = (Uint8)((left >> 16) & 0xff); \ data[2] = (Uint8)((left >> 8) & 0xff); data[3] = (Uint8)(left &0xff); \ data[4] = (Uint8)((right >> 24) & 0xff); data[5] = (Uint8)((right >> 16) & 0xff); \ data[6] = (Uint8)((right >> 8) & 0xff); data[7] = (Uint8)(right & 0xff);