-/* $OpenBSD: bf_local.h,v 1.2 2024/03/27 11:44:39 jsing Exp $ */
+/* $OpenBSD: bf_local.h,v 1.3 2024/03/27 11:54:29 jsing Exp $ */
/* Copyright (C) 1995-1997 Eric Young (eay@cryptsoft.com)
* All rights reserved.
*
* [including the GNU Public Licence.]
*/
-#include <openssl/opensslconf.h> /* BF_PTR, BF_PTR2 */
+#include <openssl/opensslconf.h> /* BF_PTR */
#ifndef HEADER_BF_LOCL_H
#define HEADER_BF_LOCL_H
/* This is actually a big endian algorithm, the most significant byte
* is used to lookup array 0 */
-#if defined(BF_PTR2)
-
-/*
- * This is basically a special Intel version. Point is that Intel
- * doesn't have many registers, but offers a reach choice of addressing
- * modes. So we spare some registers by directly traversing BF_KEY
- * structure and hiring the most decorated addressing mode. The code
- * generated by EGCS is *perfectly* competitive with assembler
- * implementation!
- */
-#define BF_ENC(LL,R,KEY,Pi) (\
- LL^=KEY[Pi], \
- t= KEY[BF_ROUNDS+2 + 0 + ((R>>24)&0xFF)], \
- t+= KEY[BF_ROUNDS+2 + 256 + ((R>>16)&0xFF)], \
- t^= KEY[BF_ROUNDS+2 + 512 + ((R>>8 )&0xFF)], \
- t+= KEY[BF_ROUNDS+2 + 768 + ((R )&0xFF)], \
- LL^=t \
- )
-
-#elif defined(BF_PTR)
+#if defined(BF_PTR)
#ifndef BF_LONG_LOG2
#define BF_LONG_LOG2 2 /* default to BF_LONG being 32 bits */
-/* $OpenBSD: blowfish.c,v 1.1 2024/03/27 11:24:15 jsing Exp $ */
+/* $OpenBSD: blowfish.c,v 1.2 2024/03/27 11:54:29 jsing Exp $ */
/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
* All rights reserved.
*
void
BF_encrypt(BF_LONG *data, const BF_KEY *key)
{
-#ifndef BF_PTR2
BF_LONG l, r;
const BF_LONG *p, *s;
data[1] = l&0xffffffffL;
data[0] = r&0xffffffffL;
-#else
- BF_LONG l, r,t, *k;
-
- l = data[0];
- r = data[1];
- k = (BF_LONG*)key;
-
- l ^= k[0];
- BF_ENC(r, l, k, 1);
- BF_ENC(l, r, k, 2);
- BF_ENC(r, l, k, 3);
- BF_ENC(l, r, k, 4);
- BF_ENC(r, l, k, 5);
- BF_ENC(l, r, k, 6);
- BF_ENC(r, l, k, 7);
- BF_ENC(l, r, k, 8);
- BF_ENC(r, l, k, 9);
- BF_ENC(l, r,k, 10);
- BF_ENC(r, l,k, 11);
- BF_ENC(l, r,k, 12);
- BF_ENC(r, l,k, 13);
- BF_ENC(l, r,k, 14);
- BF_ENC(r, l,k, 15);
- BF_ENC(l, r,k, 16);
-#if BF_ROUNDS == 20
- BF_ENC(r, l,k, 17);
- BF_ENC(l, r,k, 18);
- BF_ENC(r, l,k, 19);
- BF_ENC(l, r,k, 20);
-#endif
- r ^= k[BF_ROUNDS + 1];
-
- data[1] = l&0xffffffffL;
- data[0] = r&0xffffffffL;
-#endif
}
#ifndef BF_DEFAULT_OPTIONS
void
BF_decrypt(BF_LONG *data, const BF_KEY *key)
{
-#ifndef BF_PTR2
BF_LONG l, r;
const BF_LONG *p, *s;
data[1] = l&0xffffffffL;
data[0] = r&0xffffffffL;
-#else
- BF_LONG l, r,t, *k;
-
- l = data[0];
- r = data[1];
- k = (BF_LONG *)key;
-
- l ^= k[BF_ROUNDS + 1];
-#if BF_ROUNDS == 20
- BF_ENC(r, l,k, 20);
- BF_ENC(l, r,k, 19);
- BF_ENC(r, l,k, 18);
- BF_ENC(l, r,k, 17);
-#endif
- BF_ENC(r, l,k, 16);
- BF_ENC(l, r,k, 15);
- BF_ENC(r, l,k, 14);
- BF_ENC(l, r,k, 13);
- BF_ENC(r, l,k, 12);
- BF_ENC(l, r,k, 11);
- BF_ENC(r, l,k, 10);
- BF_ENC(l, r, k, 9);
- BF_ENC(r, l, k, 8);
- BF_ENC(l, r, k, 7);
- BF_ENC(r, l, k, 6);
- BF_ENC(l, r, k, 5);
- BF_ENC(r, l, k, 4);
- BF_ENC(l, r, k, 3);
- BF_ENC(r, l, k, 2);
- BF_ENC(l, r, k, 1);
- r ^= k[0];
-
- data[1] = l&0xffffffffL;
- data[0] = r&0xffffffffL;
-#endif
}
void