summaryrefslogtreecommitdiffstats
path: root/src/crypto/des/des.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/crypto/des/des.c')
-rw-r--r--src/crypto/des/des.c157
1 files changed, 78 insertions, 79 deletions
diff --git a/src/crypto/des/des.c b/src/crypto/des/des.c
index a5669a6..9cd75f5 100644
--- a/src/crypto/des/des.c
+++ b/src/crypto/des/des.c
@@ -298,8 +298,10 @@ void DES_set_key(const DES_cblock *key, DES_key_schedule *schedule) {
0, 1, 1, 1, 1, 1, 1, 0};
uint32_t c, d, t, s, t2;
const uint8_t *in;
+ uint32_t *k;
int i;
+ k = &schedule->ks->deslong[0];
in = key->bytes;
c2l(in, c);
@@ -342,10 +344,10 @@ void DES_set_key(const DES_cblock *key, DES_key_schedule *schedule) {
/* table contained 0213 4657 */
t2 = ((t << 16L) | (s & 0x0000ffffL)) & 0xffffffffL;
- schedule->subkeys[i][0] = ROTATE(t2, 30) & 0xffffffffL;
+ *(k++) = ROTATE(t2, 30) & 0xffffffffL;
t2 = ((s >> 16L) | (t & 0xffff0000L));
- schedule->subkeys[i][1] = ROTATE(t2, 26) & 0xffffffffL;
+ *(k++) = ROTATE(t2, 26) & 0xffffffffL;
}
}
@@ -380,6 +382,7 @@ void DES_set_odd_parity(DES_cblock *key) {
static void DES_encrypt1(uint32_t *data, const DES_key_schedule *ks, int enc) {
uint32_t l, r, t, u;
+ const uint32_t *s;
r = data[0];
l = data[1];
@@ -395,42 +398,43 @@ static void DES_encrypt1(uint32_t *data, const DES_key_schedule *ks, int enc) {
r = ROTATE(r, 29) & 0xffffffffL;
l = ROTATE(l, 29) & 0xffffffffL;
+ s = ks->ks->deslong;
/* I don't know if it is worth the effort of loop unrolling the
* inner loop */
if (enc) {
- D_ENCRYPT(ks, l, r, 0);
- D_ENCRYPT(ks, r, l, 1);
- D_ENCRYPT(ks, l, r, 2);
- D_ENCRYPT(ks, r, l, 3);
- D_ENCRYPT(ks, l, r, 4);
- D_ENCRYPT(ks, r, l, 5);
- D_ENCRYPT(ks, l, r, 6);
- D_ENCRYPT(ks, r, l, 7);
- D_ENCRYPT(ks, l, r, 8);
- D_ENCRYPT(ks, r, l, 9);
- D_ENCRYPT(ks, l, r, 10);
- D_ENCRYPT(ks, r, l, 11);
- D_ENCRYPT(ks, l, r, 12);
- D_ENCRYPT(ks, r, l, 13);
- D_ENCRYPT(ks, l, r, 14);
- D_ENCRYPT(ks, r, l, 15);
+ D_ENCRYPT(l, r, 0); /* 1 */
+ D_ENCRYPT(r, l, 2); /* 2 */
+ D_ENCRYPT(l, r, 4); /* 3 */
+ D_ENCRYPT(r, l, 6); /* 4 */
+ D_ENCRYPT(l, r, 8); /* 5 */
+ D_ENCRYPT(r, l, 10); /* 6 */
+ D_ENCRYPT(l, r, 12); /* 7 */
+ D_ENCRYPT(r, l, 14); /* 8 */
+ D_ENCRYPT(l, r, 16); /* 9 */
+ D_ENCRYPT(r, l, 18); /* 10 */
+ D_ENCRYPT(l, r, 20); /* 11 */
+ D_ENCRYPT(r, l, 22); /* 12 */
+ D_ENCRYPT(l, r, 24); /* 13 */
+ D_ENCRYPT(r, l, 26); /* 14 */
+ D_ENCRYPT(l, r, 28); /* 15 */
+ D_ENCRYPT(r, l, 30); /* 16 */
} else {
- D_ENCRYPT(ks, l, r, 15);
- D_ENCRYPT(ks, r, l, 14);
- D_ENCRYPT(ks, l, r, 13);
- D_ENCRYPT(ks, r, l, 12);
- D_ENCRYPT(ks, l, r, 11);
- D_ENCRYPT(ks, r, l, 10);
- D_ENCRYPT(ks, l, r, 9);
- D_ENCRYPT(ks, r, l, 8);
- D_ENCRYPT(ks, l, r, 7);
- D_ENCRYPT(ks, r, l, 6);
- D_ENCRYPT(ks, l, r, 5);
- D_ENCRYPT(ks, r, l, 4);
- D_ENCRYPT(ks, l, r, 3);
- D_ENCRYPT(ks, r, l, 2);
- D_ENCRYPT(ks, l, r, 1);
- D_ENCRYPT(ks, r, l, 0);
+ D_ENCRYPT(l, r, 30); /* 16 */
+ D_ENCRYPT(r, l, 28); /* 15 */
+ D_ENCRYPT(l, r, 26); /* 14 */
+ D_ENCRYPT(r, l, 24); /* 13 */
+ D_ENCRYPT(l, r, 22); /* 12 */
+ D_ENCRYPT(r, l, 20); /* 11 */
+ D_ENCRYPT(l, r, 18); /* 10 */
+ D_ENCRYPT(r, l, 16); /* 9 */
+ D_ENCRYPT(l, r, 14); /* 8 */
+ D_ENCRYPT(r, l, 12); /* 7 */
+ D_ENCRYPT(l, r, 10); /* 6 */
+ D_ENCRYPT(r, l, 8); /* 5 */
+ D_ENCRYPT(l, r, 6); /* 4 */
+ D_ENCRYPT(r, l, 4); /* 3 */
+ D_ENCRYPT(l, r, 2); /* 2 */
+ D_ENCRYPT(r, l, 0); /* 1 */
}
/* rotate and clear the top bits on machines with 8byte longs */
@@ -444,6 +448,7 @@ static void DES_encrypt1(uint32_t *data, const DES_key_schedule *ks, int enc) {
static void DES_encrypt2(uint32_t *data, const DES_key_schedule *ks, int enc) {
uint32_t l, r, t, u;
+ const uint32_t *s;
r = data[0];
l = data[1];
@@ -457,51 +462,52 @@ static void DES_encrypt2(uint32_t *data, const DES_key_schedule *ks, int enc) {
r = ROTATE(r, 29) & 0xffffffffL;
l = ROTATE(l, 29) & 0xffffffffL;
+ s = ks->ks->deslong;
/* I don't know if it is worth the effort of loop unrolling the
* inner loop */
if (enc) {
- D_ENCRYPT(ks, l, r, 0);
- D_ENCRYPT(ks, r, l, 1);
- D_ENCRYPT(ks, l, r, 2);
- D_ENCRYPT(ks, r, l, 3);
- D_ENCRYPT(ks, l, r, 4);
- D_ENCRYPT(ks, r, l, 5);
- D_ENCRYPT(ks, l, r, 6);
- D_ENCRYPT(ks, r, l, 7);
- D_ENCRYPT(ks, l, r, 8);
- D_ENCRYPT(ks, r, l, 9);
- D_ENCRYPT(ks, l, r, 10);
- D_ENCRYPT(ks, r, l, 11);
- D_ENCRYPT(ks, l, r, 12);
- D_ENCRYPT(ks, r, l, 13);
- D_ENCRYPT(ks, l, r, 14);
- D_ENCRYPT(ks, r, l, 15);
+ D_ENCRYPT(l, r, 0); /* 1 */
+ D_ENCRYPT(r, l, 2); /* 2 */
+ D_ENCRYPT(l, r, 4); /* 3 */
+ D_ENCRYPT(r, l, 6); /* 4 */
+ D_ENCRYPT(l, r, 8); /* 5 */
+ D_ENCRYPT(r, l, 10); /* 6 */
+ D_ENCRYPT(l, r, 12); /* 7 */
+ D_ENCRYPT(r, l, 14); /* 8 */
+ D_ENCRYPT(l, r, 16); /* 9 */
+ D_ENCRYPT(r, l, 18); /* 10 */
+ D_ENCRYPT(l, r, 20); /* 11 */
+ D_ENCRYPT(r, l, 22); /* 12 */
+ D_ENCRYPT(l, r, 24); /* 13 */
+ D_ENCRYPT(r, l, 26); /* 14 */
+ D_ENCRYPT(l, r, 28); /* 15 */
+ D_ENCRYPT(r, l, 30); /* 16 */
} else {
- D_ENCRYPT(ks, l, r, 15);
- D_ENCRYPT(ks, r, l, 14);
- D_ENCRYPT(ks, l, r, 13);
- D_ENCRYPT(ks, r, l, 12);
- D_ENCRYPT(ks, l, r, 11);
- D_ENCRYPT(ks, r, l, 10);
- D_ENCRYPT(ks, l, r, 9);
- D_ENCRYPT(ks, r, l, 8);
- D_ENCRYPT(ks, l, r, 7);
- D_ENCRYPT(ks, r, l, 6);
- D_ENCRYPT(ks, l, r, 5);
- D_ENCRYPT(ks, r, l, 4);
- D_ENCRYPT(ks, l, r, 3);
- D_ENCRYPT(ks, r, l, 2);
- D_ENCRYPT(ks, l, r, 1);
- D_ENCRYPT(ks, r, l, 0);
+ D_ENCRYPT(l, r, 30); /* 16 */
+ D_ENCRYPT(r, l, 28); /* 15 */
+ D_ENCRYPT(l, r, 26); /* 14 */
+ D_ENCRYPT(r, l, 24); /* 13 */
+ D_ENCRYPT(l, r, 22); /* 12 */
+ D_ENCRYPT(r, l, 20); /* 11 */
+ D_ENCRYPT(l, r, 18); /* 10 */
+ D_ENCRYPT(r, l, 16); /* 9 */
+ D_ENCRYPT(l, r, 14); /* 8 */
+ D_ENCRYPT(r, l, 12); /* 7 */
+ D_ENCRYPT(l, r, 10); /* 6 */
+ D_ENCRYPT(r, l, 8); /* 5 */
+ D_ENCRYPT(l, r, 6); /* 4 */
+ D_ENCRYPT(r, l, 4); /* 3 */
+ D_ENCRYPT(l, r, 2); /* 2 */
+ D_ENCRYPT(r, l, 0); /* 1 */
}
/* rotate and clear the top bits on machines with 8byte longs */
data[0] = ROTATE(l, 3) & 0xffffffffL;
data[1] = ROTATE(r, 3) & 0xffffffffL;
}
-/* DES_encrypt3 is not static because it's used in decrepit. */
-void DES_encrypt3(uint32_t *data, const DES_key_schedule *ks1,
- const DES_key_schedule *ks2, const DES_key_schedule *ks3) {
+static void DES_encrypt3(uint32_t *data, const DES_key_schedule *ks1,
+ const DES_key_schedule *ks2,
+ const DES_key_schedule *ks3) {
uint32_t l, r;
l = data[0];
@@ -519,9 +525,9 @@ void DES_encrypt3(uint32_t *data, const DES_key_schedule *ks1,
data[1] = r;
}
-/* DES_decrypt3 is not static because it's used in decrepit. */
-void DES_decrypt3(uint32_t *data, const DES_key_schedule *ks1,
- const DES_key_schedule *ks2, const DES_key_schedule *ks3) {
+static void DES_decrypt3(uint32_t *data, const DES_key_schedule *ks1,
+ const DES_key_schedule *ks2,
+ const DES_key_schedule *ks3) {
uint32_t l, r;
l = data[0];
@@ -764,10 +770,3 @@ void DES_ede2_cbc_encrypt(const uint8_t *in, uint8_t *out, size_t len,
int enc) {
DES_ede3_cbc_encrypt(in, out, len, ks1, ks2, ks1, ivec, enc);
}
-
-
-/* Deprecated functions. */
-
-void DES_set_key_unchecked(const DES_cblock *key, DES_key_schedule *schedule) {
- DES_set_key(key, schedule);
-}