#include "des-base.h"
#include "des.h"
#include "desx.h"
-#include "desx-tab.h"
#include "gcipher.h"
+#include "permute.h"
/*----- Tables ------------------------------------------------------------*/
-static const octet s[256] = DESX_S;
+extern const octet desx_s[256];
/*----- Global variables --------------------------------------------------*/
* Use: Initializes a DESX key buffer. The key buffer contains, in
* order, a single-DES key (either 7 or 8 bytes), an optional
* 8-byte pre-whitening key, and an optional 8-byte
- * port-whitening key. If no whitening keys are specified, the
+ * post-whitening key. If no whitening keys are specified, the
* algorithm becomes the same as single-DES.
*/
unsigned i;
for (i = 0; i < 8; i++)
- b[i] = *p++ ^ s[b[i] ^ b[(i + 1) & 7u]];
+ b[i] = *p++ ^ desx_s[b[i] ^ b[(i + 1) & 7u]];
}
void desx_init(desx_ctx *k, const void *buf, size_t sz)
void desx_eblk(const desx_ctx *k, const uint32 *s, uint32 *d)
{
+#define REGWD 32
+ typedef uint32 regty;
+
uint32 x = s[0], y = s[1];
x ^= k->prea; y ^= k->preb;
DES_IP(x, y);
DES_IPINV(x, y);
x ^= k->posta; y ^= k->postb;
d[0] = x, d[1] = y;
+
+#undef REGWD
}
void desx_dblk(const desx_ctx *k, const uint32 *s, uint32 *d)
{
+#define REGWD 32
+ typedef uint32 regty;
+
uint32 x = s[0], y = s[1];
x ^= k->posta; y ^= k->postb;
DES_IP(x, y);
DES_IPINV(x, y);
x ^= k->prea; y ^= k->preb;
d[0] = x, d[1] = y;
+
+#undef REGWD
}
BLKC_TEST(DESX, desx)