You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
konversation/konversation/src/blowfish/oldblowfish1.h

142 lines
4.3 KiB

/*
blowfish1.h interface file for mc_blowfish.cpp
_THE BLOWFISH ENCRYPTION ALGORITHM_
by Bruce Schneier, 1996, Applied Cryptography, 2nd ed., John Wiley & Sons
Public Domain.
Copyright (C) 1994 Bruce Schneier <schneier@counterpane.com>
Copyright (C) 1996 Jim Conger <jconger@cox.net>
*/
//---------------------------------------------------------------------------
// To prevent multiple includes
#ifndef _oldblowfish1h
#define _oldblowfish1h
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
// Forward declarations
char *encrypt_string_oldecb(char *key, char *str);
char *decrypt_string_oldecb(char *key, char *str);
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
#define MAXKEYBYTES 56 // 448 bits max
#define NPASS 16 // SBox passes
#define DWORD unsigned long
#define WORD unsigned short
#define BYTE unsigned char
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
// for fish compatibility we use 80 instead of 56
#define MAXKEYBYTES_COMPATMODE 80
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
//#include "oldblowfish2.h"
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
// choose a byte order for your hardware
// NEW 7/10/03 trying to be smarter about endian
// first try to be smart about it, and user can define LITTLE_ENDIAN or BIG_ENDIAN from makefile
#ifdef LITTLE_ENDIAN
#define ORDER_DCBA // choosing Intel in this case
#else
#ifdef BIG_ENDIAN
#define ORDER_ABCD
#endif
#endif
// default to intel if not overridden
#ifndef ORDER_DCBA
#ifndef ORDER_ABCD
#define ORDER_DCBA
#endif
#endif
#ifdef ORDER_DCBA // DCBA - little endian - intel
// ATTN: THIS IS THE MAJOR CAUSE OF INCOMPATIBILITIES WITH OTHER BLOWFISH IMPLEMENTATIONS
// AS THIS LITTLE ENDIAN MODE IS USED ON THE PC BY THIS BLOWFISH, AND *NOT* IN OTHER BLOWFISHES
// THE FIX I THINK IS SIMPLE, THE bytex VARS ARE USED IN ONLY 1 PLACE IN MC_BLOWFISH.CPP AND YOU
// SHOULD BE ABLE TO MODIFY YOUR BLOWFISH CODE TO USE (4-BYTE#) instead of BYTE# IN ONE LINE OF CODE
// TO FIX THE INCOMPATIBILITY.
// THERE IS ALSO A BASE64 INCOMPATIBILITY THAT YOU NEED TO FIX TO USE OTHER BLOWFISH ALGORITHMS.
// WE ARE WORKING TO MAKE A COLLECTION OF COMPATIBLE ROUTINES IN DIF. LANGUAGES (java, php, perl).
// PLEASE BARE WITH US - WE CHOSE TO USE THESE METHODS TO INSURE BACKWARD COMPATIBILITY WITH EXISTING SCRIPTS
union aword {
DWORD dword;
BYTE byte [4];
struct {
unsigned int byte3:8;
unsigned int byte2:8;
unsigned int byte1:8;
unsigned int byte0:8;
} w;
};
#endif
#ifdef ORDER_ABCD // ABCD - big endian - motorola
union aword {
DWORD dword;
BYTE byte [4];
struct {
unsigned int byte0:8;
unsigned int byte1:8;
unsigned int byte2:8;
unsigned int byte3:8;
} w;
};
#endif
#ifdef ORDER_BADC // BADC - vax
union aword {
DWORD dword;
BYTE byte [4];
struct {
unsigned int byte1:8;
unsigned int byte0:8;
unsigned int byte3:8;
unsigned int byte2:8;
} w;
};
#endif
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
class oldCBlowFish
{
private:
DWORD * PArray ;
DWORD (* SBoxes)[256];
public:
void Blowfish_encipher (DWORD *xl, DWORD *xr) ;
void Blowfish_decipher (DWORD *xl, DWORD *xr) ;
public:
oldCBlowFish () ;
~oldCBlowFish () ;
void Initialize (BYTE key[], int keybytes) ;
DWORD GetOutputLength (DWORD lInputLong) ;
DWORD Encode (BYTE * pInput, BYTE * pOutput, DWORD lSize) ;
void Decode (BYTE * pInput, BYTE * pOutput, DWORD lSize) ;
} ;
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
#endif
//---------------------------------------------------------------------------