X-Git-Url: https://git.distorted.org.uk/u/mdw/catacomb/blobdiff_plain/b348397a95fab4bd1688746448e2d1abb24a4304..7fb0660b6d7237a7ec859459b2e511eebc0dcdb5:/desx.c diff --git a/desx.c b/desx.c index 2d325b4..d779482 100644 --- a/desx.c +++ b/desx.c @@ -1,13 +1,13 @@ /* -*-c-*- * - * $Id: desx.c,v 1.1 2001/04/03 19:36:50 mdw Exp $ + * $Id$ * * Implementation of DESX * * (c) 2001 Straylight/Edgeware */ -/*----- Licensing notice --------------------------------------------------* +/*----- Licensing notice --------------------------------------------------* * * This file is part of Catacomb. * @@ -15,26 +15,18 @@ * it under the terms of the GNU Library General Public License as * published by the Free Software Foundation; either version 2 of the * License, or (at your option) any later version. - * + * * Catacomb is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Library General Public License for more details. - * + * * You should have received a copy of the GNU Library General Public * License along with Catacomb; if not, write to the Free * Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, * MA 02111-1307, USA. */ -/*----- Revision history --------------------------------------------------* - * - * $Log: desx.c,v $ - * Revision 1.1 2001/04/03 19:36:50 mdw - * New block cipher DESX added. - * - */ - /*----- Header files ------------------------------------------------------*/ #include @@ -53,11 +45,11 @@ /*----- Tables ------------------------------------------------------------*/ -static octet s[256] = DESX_S; +static const octet s[256] = DESX_S; /*----- Global variables --------------------------------------------------*/ -const octet desx_keysz[] = { KSZ_SET, 7, 8, 15, 16, 23, 24, 0 }; +const octet desx_keysz[] = { KSZ_SET, 23, 7, 8, 15, 16, 24, 0 }; /*----- Main code ---------------------------------------------------------*/ @@ -108,38 +100,15 @@ void desx_init(desx_ctx *k, const void *buf, size_t sz) k->postb = LOAD32(p + 4); } else { octet b[16]; + uint32 x, y; - if (n == 7) { - - /* --- Expand 7 bits to 8 bits --- * - * - * Cloned and hacked from @des_init@ to set parity. - */ - - uint32 x, y, z; - x = LOAD32(kk + 0); - x = (x & 0xfe000000) | ((x & 0x01fffff0) >> 1); - x = (x & 0xfffe0000) | ((x & 0x0001fff8) >> 1); - x = (x & 0xfffffe00) | ((x & 0x000001fc) >> 1); - z = x; z ^= z >> 4; z ^= z >> 2; z ^= z >> 1; - x |= (z & 0x01010101) ^ 0x01010101; - - y = LOAD32(kk + 3) << 1; - y = (y & 0x000000fe) | ((y & 0x1fffff00) << 1); - y = (y & 0x0000fefe) | ((y & 0x3fff0000) << 1); - y = (y & 0x00fefefe) | ((y & 0x7f000000) << 1); - z = y; z ^= z >> 4; z ^= z >> 2; z ^= z >> 1; - y |= (z & 0x01010101) ^ 0x01010101; - - kk = b + 8; - STORE32(kk + 0, x); STORE32(kk + 4, y); - } - + des_expand(kk, n, &x, &y); + STORE32(b + 8, x); STORE32(b + 12, y); memset(b, 0, 8); - mangle(b, kk); + mangle(b, b + 8); mangle(b, q); k->posta = LOAD32(b + 0); - k->postb = LOAD32(b + 4); + k->postb = LOAD32(b + 4); } } }