Commit d38226a4 authored by Davide Galassi's avatar Davide Galassi

DES small code revision

int replaced by unsigned char for permutation tabs
parent e4ca0bea
...@@ -14,7 +14,7 @@ ...@@ -14,7 +14,7 @@
#define SUBKEY_SIZE 6 #define SUBKEY_SIZE 6
/* Initial permutation table */ /* Initial permutation table */
static const int ip_tab[] = { static const unsigned char ip_tab[] = {
58, 50, 42, 34, 26, 18, 10, 2, 58, 50, 42, 34, 26, 18, 10, 2,
60, 52, 44, 36, 28, 20, 12, 4, 60, 52, 44, 36, 28, 20, 12, 4,
62, 54, 46, 38, 30, 22, 14, 6, 62, 54, 46, 38, 30, 22, 14, 6,
...@@ -26,7 +26,7 @@ static const int ip_tab[] = { ...@@ -26,7 +26,7 @@ static const int ip_tab[] = {
}; };
/* Final permutation table */ /* Final permutation table */
static const int fp_tab[] = { static const unsigned char fp_tab[] = {
40, 8, 48, 16, 56, 24, 64, 32, 40, 8, 48, 16, 56, 24, 64, 32,
39, 7, 47, 15, 55, 23, 63, 31, 39, 7, 47, 15, 55, 23, 63, 31,
38, 6, 46, 14, 54, 22, 62, 30, 38, 6, 46, 14, 54, 22, 62, 30,
...@@ -37,7 +37,7 @@ static const int fp_tab[] = { ...@@ -37,7 +37,7 @@ static const int fp_tab[] = {
33, 1, 41, 9, 49, 17, 57, 25 33, 1, 41, 9, 49, 17, 57, 25
}; };
static const int pc1_tab[] = { static const unsigned char pc1_tab[] = {
57, 49, 41, 33, 25, 17, 9, 1, 57, 49, 41, 33, 25, 17, 9, 1,
58, 50, 42, 34, 26, 18, 10, 2, 58, 50, 42, 34, 26, 18, 10, 2,
59, 51, 43, 35, 27, 19, 11, 3, 59, 51, 43, 35, 27, 19, 11, 3,
...@@ -47,7 +47,7 @@ static const int pc1_tab[] = { ...@@ -47,7 +47,7 @@ static const int pc1_tab[] = {
29, 21, 13, 5, 28, 20, 12, 4 29, 21, 13, 5, 28, 20, 12, 4
}; };
static const int pc2_tab[] = { static const unsigned char pc2_tab[] = {
14, 17, 11, 24, 1, 5, 3, 28, 14, 17, 11, 24, 1, 5, 3, 28,
15, 6, 21, 10, 23, 19, 12, 4, 15, 6, 21, 10, 23, 19, 12, 4,
26, 8, 16, 7, 27, 20, 13, 2, 26, 8, 16, 7, 27, 20, 13, 2,
...@@ -57,7 +57,7 @@ static const int pc2_tab[] = { ...@@ -57,7 +57,7 @@ static const int pc2_tab[] = {
}; };
/* Block expansion permutation table */ /* Block expansion permutation table */
static const int exp_tab[] = { static const unsigned char exp_tab[] = {
32, 1, 2, 3, 4, 5, 32, 1, 2, 3, 4, 5,
4, 5, 6, 7, 8, 9, 4, 5, 6, 7, 8, 9,
8, 9, 10, 11, 12, 13, 8, 9, 10, 11, 12, 13,
...@@ -68,14 +68,24 @@ static const int exp_tab[] = { ...@@ -68,14 +68,24 @@ static const int exp_tab[] = {
28, 29, 30, 31, 32, 1 28, 29, 30, 31, 32, 1
}; };
static const int p_tab[] = { static const unsigned char p_tab[] = {
16, 7, 20, 21, 29, 12, 28, 17, 16, 7, 20, 21, 29, 12, 28, 17,
1, 15, 23, 26, 5, 18, 31, 10, 1, 15, 23, 26, 5, 18, 31, 10,
2, 8, 24, 14, 32, 27, 3, 9, 2, 8, 24, 14, 32, 27, 3, 9,
19, 13, 30, 6, 22, 11, 4, 25 19, 13, 30, 6, 22, 11, 4, 25
}; };
static const int sbox[8][64] = { /* S-Box table.
* In textbooks, the presented S-Box table is usually constructed by
* interpreting the six bits input as
* [ R1 | C3 | C2 | C1 | C0 | R0 ]
* Thus, for example, the output for the bit string 101100 is found
* in row 2 and column 6.
* The table below was obviously constructed as a more software
* friendly array. Thus the same element could be found at offset 44.
*
*/
static const unsigned char sbox[8][64] = {
{ {
14, 0, 4, 15, 13, 7, 1, 4, 2, 14, 15, 2, 11, 13, 8, 1, 14, 0, 4, 15, 13, 7, 1, 4, 2, 14, 15, 2, 11, 13, 8, 1,
3, 10, 10, 6, 6, 12, 12, 11, 5, 9, 9, 5, 0, 3, 7, 8, 3, 10, 10, 6, 6, 12, 12, 11, 5, 9, 9, 5, 0, 3, 7, 8,
...@@ -134,24 +144,24 @@ static const int sbox[8][64] = { ...@@ -134,24 +144,24 @@ static const int sbox[8][64] = {
* rather than 0-based arrays, since they're given that way in the * rather than 0-based arrays, since they're given that way in the
* specification. * specification.
*/ */
static void permute(unsigned char dst[], const unsigned char src[], static void permute(unsigned char *dst, const unsigned char *src,
const int permute_tab[], int len) const unsigned char *tab, unsigned int len)
{ {
int i; unsigned int i;
for (i = 0; i < len * 8; i++) { for (i = 0; i < len * 8; i++) {
if (GET_BIT(src, permute_tab[i] - 1)) if (GET_BIT(src, tab[i] - 1))
SET_BIT(dst, i); SET_BIT(dst, i);
else else
CLEAR_BIT(dst, i); CLEAR_BIT(dst, i);
} }
} }
/** /*
* Perform the left rotation operation on the key. This is made fairly * Perform the left rotation operation on the key.
* complex by the fact that the key is split into two 28-bit halves, each * This is made fairly complex by the fact that the key is split into
* of which has to be rotated independently (so the second rotation operation * two 28-bit halves, each of which has to be rotated independentlyi
* starts in the middle of byte 3). * (so the second rotation operation starts in the middle of byte 3).
*/ */
static void rol(unsigned char *buf) static void rol(unsigned char *buf)
{ {
...@@ -192,7 +202,8 @@ static void ror(unsigned char *buf) ...@@ -192,7 +202,8 @@ static void ror(unsigned char *buf)
buf[0] = (buf[0] >> 1) | carry_left; buf[0] = (buf[0] >> 1) | carry_left;
} }
static void memxor(unsigned char *dst, unsigned char *src, int len) static void memxor(unsigned char *dst, unsigned char *src,
unsigned int len)
{ {
while (len--) while (len--)
*dst++ ^= *src++; *dst++ ^= *src++;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment