Link to home
Start Free TrialLog in
Avatar of BeginToLearn
BeginToLearn

asked on

blowfish

hi all,
 I visited this link http://www.schneier.com/blowfish-download.html and download the c++ code from "author unknown" and want to use it. Then i split it into 3 files. I try to compile it , but it fails with comments

ubuntu@ubuntu:~/program$ g++ -o BFtest BFtest.c
In file included from BFtest.c:7:
blowfish.h:29: error: redefinition of ‘struct WordByte’
blowfish.h:20: error: previous definition of ‘struct WordByte’


please advise. tks.
BFtest.c
blowfish.c
blowfish.h
Avatar of mrjoltcola
mrjoltcola
Flag of United States of America image

The problem is that both LITTLE_ENDIAN and BIG_ENDIAN are defined. You need to either find out why both are defined, or change the code to hardcode according to your platform. They should not both be defined.

#ifdef BIG_ENDIAN
struct WordByte
{
...
};
#endif

#ifdef LITTLE_ENDIAN
struct WordByte
{
 ...
};
#endif

Open in new window

Avatar of ozo
Do you have both BIG_ENDIAN and LITTLE_ENDIAN defined?
You should define only the one appropriate for your machine.
Avatar of BeginToLearn
BeginToLearn

ASKER

let me move BIGG_ENDIAN because my system is LITTLE_ENDIAN.
With both of these lines

// #define BIG_ENDIAN
// #define LITTLE_ENDIAN

commented out, you should rather get an 'type undefined' error. Make sure that only one of these is commented out and exactly one is active, depending on your CPU architecture - which is

#define LITTLE_ENDIAN

for Intel and alike CPUs.

BTW, you should rename 'blowfish.c' to 'blowfish.cpp', so the compiler will treat it as C++ code, which it definitely is.
ubuntu@ubuntu:~/program$ g++ -o BFtest BFtest.c
BFtest.c: In function ‘int Test(Blowfish*)’:
BFtest.c:47: warning: deprecated conversion from string constant to ‘char*’
BFtest.c:47: warning: deprecated conversion from string constant to ‘char*’
BFtest.c: In function ‘double Speed(Blowfish*)’:
BFtest.c:85: warning: deprecated conversion from string constant to ‘char*’
/tmp/ccEoVni2.o: In function `main':
BFtest.c:(.text+0x16): undefined reference to `Blowfish::Blowfish()'
BFtest.c:(.text+0x19e): undefined reference to `Blowfish::~Blowfish()'
BFtest.c:(.text+0x1bc): undefined reference to `Blowfish::~Blowfish()'
/tmp/ccEoVni2.o: In function `Test(Blowfish*)':
BFtest.c:(.text+0x24a): undefined reference to `Blowfish::Set_Passwd(char*)'
BFtest.c:(.text+0x264): undefined reference to `Blowfish::Encrypt(void*, unsigned int)'
BFtest.c:(.text+0x2a2): undefined reference to `Blowfish::Decrypt(void*, unsigned int)'
/tmp/ccEoVni2.o: In function `Speed(Blowfish*)':
BFtest.c:(.text+0x371): undefined reference to `Blowfish::Set_Passwd(char*)'
BFtest.c:(.text+0x3a3): undefined reference to `Blowfish::Encrypt(void*, unsigned int)'
collect2: ld returned 1 exit status
ubuntu@ubuntu:~/program$


could you help me to solve it? TKS>
i think the reason is i don't know how to compile so it can link objects together.
You forgot to specify 'blowfish.cpp' when compiling the code. Furthermore, the file you posted seems to be missing some important parts. Use the following
/********** blowfish.cc **********/

#include <iostream.h>
#include <string.h>
#include "blowfish.h"


#define F(x)    (((SB[0][x.byte.zero] + SB[1][x.byte.one]) ^ SB[2][x.byte.two]) +
SB[3][x.byte.three])


void Blowfish::Gen_Subkeys(char *Passwd)
{
  unsigned int i,j,len=strlen(Passwd);
  Word Work,null0,null1;

  if (len > 0)
  {
	j = 0;
    for (i=0;i<NUM_SUBKEYS;i++)
    {
	Work.byte.zero = Passwd[(j++)%len];
	Work.byte.one = Passwd[(j++)%len];
	Work.byte.two = Passwd[(j++)%len];
			Work.byte.three = Passwd[(j++)%len];
			PA[i] ^= Work.word;
		}

	null0.word = null1.word = 0;
	
    for (i=0;i<NUM_SUBKEYS;i+=2)
	  {
			BF_En(&null0,&null1);
		PA[i] = null0.word;
			PA[i+1] = null1.word;
		}

    for (j=0;j<NUM_S_BOXES;j++)
			for (i=0;i<NUM_ENTRIES;i+=2)
		{
		BF_En(&null0,&null1);
		SB[j][i] = null0.word;
		SB[j][i+1] = null1.word;
		}
   }

   Work.word = null0.word = null1.word = 0;
   Passwd = NULL;
   len = 0;
}

void Blowfish::BF_En(Word *x1,Word *x2)
{
  Word w1=*x1,w2=*x2;

  w1.word ^= PA[0];
  w2.word ^= F(w1)^PA[1];       w1.word ^= F(w2)^PA[2];
  w2.word ^= F(w1)^PA[3];       w1.word ^= F(w2)^PA[4];
  w2.word ^= F(w1)^PA[5];       w1.word ^= F(w2)^PA[6];
  w2.word ^= F(w1)^PA[7];       w1.word ^= F(w2)^PA[8];
  w2.word ^= F(w1)^PA[9];       w1.word ^= F(w2)^PA[10];
  w2.word ^= F(w1)^PA[11];      w1.word ^= F(w2)^PA[12];
  w2.word ^= F(w1)^PA[13];      w1.word ^= F(w2)^PA[14];
  w2.word ^= F(w1)^PA[15];      w1.word ^= F(w2)^PA[16];
  w2.word ^= PA[17];

  *x1 = w2;
  *x2 = w1;
}

void Blowfish::BF_De(Word *x1,Word *x2)
{
  Word w1=*x1,w2=*x2;

  w1.word ^= PA[17];
  w2.word ^= F(w1)^PA[16];      w1.word ^= F(w2)^PA[15];
  w2.word ^= F(w1)^PA[14];      w1.word ^= F(w2)^PA[13];
  w2.word ^= F(w1)^PA[12];      w1.word ^= F(w2)^PA[11];
  w2.word ^= F(w1)^PA[10];      w1.word ^= F(w2)^PA[9];
  w2.word ^= F(w1)^PA[8];       w1.word ^= F(w2)^PA[7];
  w2.word ^= F(w1)^PA[6];       w1.word ^= F(w2)^PA[5];
  w2.word ^= F(w1)^PA[4];       w1.word ^= F(w2)^PA[3];
  w2.word ^= F(w1)^PA[2];       w1.word ^= F(w2)^PA[1];
  w2.word ^= PA[0];

  *x1 = w2;
  *x2 = w1;
}


Blowfish::Blowfish()
{
  Reset();
}

Blowfish::~Blowfish()
{
  Reset();
}


void Blowfish::Reset()
{
  unsigned int i,j;

  unsigned int PA_Init[NUM_SUBKEYS] =
  {
    0x243f6a88, 0x85a308d3, 0x13198a2e, 0x03707344,
    0xa4093822, 0x299f31d0, 0x082efa98, 0xec4e6c89,
    0x452821e6, 0x38d01377, 0xbe5466cf, 0x34e90c6c,
    0xc0ac29b7, 0xc97c50dd, 0x3f84d5b5, 0xb5470917,
    0x9216d5d9, 0x8979fb1b
  };

  unsigned int SB_Init[NUM_S_BOXES][NUM_ENTRIES] =
  {
    0xd1310ba6, 0x98dfb5ac, 0x2ffd72db, 0xd01adfb7,
    0xb8e1afed, 0x6a267e96, 0xba7c9045, 0xf12c7f99,
    0x24a19947, 0xb3916cf7, 0x0801f2e2, 0x858efc16,
    0x636920d8, 0x71574e69, 0xa458fea3, 0xf4933d7e,
    0x0d95748f, 0x728eb658, 0x718bcd58, 0x82154aee,
    0x7b54a41d, 0xc25a59b5, 0x9c30d539, 0x2af26013,
    0xc5d1b023, 0x286085f0, 0xca417918, 0xb8db38ef,
    0x8e79dcb0, 0x603a180e, 0x6c9e0e8b, 0xb01e8a3e,
    0xd71577c1, 0xbd314b27, 0x78af2fda, 0x55605c60,
    0xe65525f3, 0xaa55ab94, 0x57489862, 0x63e81440,
    0x55ca396a, 0x2aab10b6, 0xb4cc5c34, 0x1141e8ce,
    0xa15486af, 0x7c72e993, 0xb3ee1411, 0x636fbc2a,
    0x2ba9c55d, 0x741831f6, 0xce5c3e16, 0x9b87931e,
    0xafd6ba33, 0x6c24cf5c, 0x7a325381, 0x28958677,
    0x3b8f4898, 0x6b4bb9af, 0xc4bfe81b, 0x66282193,
    0x61d809cc, 0xfb21a991, 0x487cac60, 0x5dec8032,
    0xef845d5d, 0xe98575b1, 0xdc262302, 0xeb651b88,
    0x23893e81, 0xd396acc5, 0x0f6d6ff3, 0x83f44239,
    0x2e0b4482, 0xa4842004, 0x69c8f04a, 0x9e1f9b5e,
    0x21c66842, 0xf6e96c9a, 0x670c9c61, 0xabd388f0,
    0x6a51a0d2, 0xd8542f68, 0x960fa728, 0xab5133a3,
    0x6eef0b6c, 0x137a3be4, 0xba3bf050, 0x7efb2a98,
    0xa1f1651d, 0x39af0176, 0x66ca593e, 0x82430e88,
    0x8cee8619, 0x456f9fb4, 0x7d84a5c3, 0x3b8b5ebe,
    0xe06f75d8, 0x85c12073, 0x401a449f, 0x56c16aa6,
    0x4ed3aa62, 0x363f7706, 0x1bfedf72, 0x429b023d,
    0x37d0d724, 0xd00a1248, 0xdb0fead3, 0x49f1c09b,
    0x075372c9, 0x80991b7b, 0x25d479d8, 0xf6e8def7,
    0xe3fe501a, 0xb6794c3b, 0x976ce0bd, 0x04c006ba,
    0xc1a94fb6, 0x409f60c4, 0x5e5c9ec2, 0x196a2463,
    0x68fb6faf, 0x3e6c53b5, 0x1339b2eb, 0x3b52ec6f,
    0x6dfc511f, 0x9b30952c, 0xcc814544, 0xaf5ebd09,
    0xbee3d004, 0xde334afd, 0x660f2807, 0x192e4bb3,
    0xc0cba857, 0x45c8740f, 0xd20b5f39, 0xb9d3fbdb,
    0x5579c0bd, 0x1a60320a, 0xd6a100c6, 0x402c7279,
    0x679f25fe, 0xfb1fa3cc, 0x8ea5e9f8, 0xdb3222f8,
    0x3c7516df, 0xfd616b15, 0x2f501ec8, 0xad0552ab,
    0x323db5fa, 0xfd238760, 0x53317b48, 0x3e00df82,
    0x9e5c57bb, 0xca6f8ca0, 0x1a87562e, 0xdf1769db,
    0xd542a8f6, 0x287effc3, 0xac6732c6, 0x8c4f5573,
    0x695b27b0, 0xbbca58c8, 0xe1ffa35d, 0xb8f011a0,
    0x10fa3d98, 0xfd2183b8, 0x4afcb56c, 0x2dd1d35b,
    0x9a53e479, 0xb6f84565, 0xd28e49bc, 0x4bfb9790,
    0xe1ddf2da, 0xa4cb7e33, 0x62fb1341, 0xcee4c6e8,
    0xef20cada, 0x36774c01, 0xd07e9efe, 0x2bf11fb4,
    0x95dbda4d, 0xae909198, 0xeaad8e71, 0x6b93d5a0,
    0xd08ed1d0, 0xafc725e0, 0x8e3c5b2f, 0x8e7594b7,
    0x8ff6e2fb, 0xf2122b64, 0x8888b812, 0x900df01c,
    0x4fad5ea0, 0x688fc31c, 0xd1cff191, 0xb3a8c1ad,
    0x2f2f2218, 0xbe0e1777, 0xea752dfe, 0x8b021fa1,
    0xe5a0cc0f, 0xb56f74e8, 0x18acf3d6, 0xce89e299,
    0xb4a84fe0, 0xfd13e0b7, 0x7cc43b81, 0xd2ada8d9,
    0x165fa266, 0x80957705, 0x93cc7314, 0x211a1477,
    0xe6ad2065, 0x77b5fa86, 0xc75442f5, 0xfb9d35cf,
    0xebcdaf0c, 0x7b3e89a0, 0xd6411bd3, 0xae1e7e49,
    0x00250e2d, 0x2071b35e, 0x226800bb, 0x57b8e0af,
    0x2464369b, 0xf009b91e, 0x5563911d, 0x59dfa6aa,
    0x78c14389, 0xd95a537f, 0x207d5ba2, 0x02e5b9c5,
    0x83260376, 0x6295cfa9, 0x11c81968, 0x4e734a41,
    0xb3472dca, 0x7b14a94a, 0x1b510052, 0x9a532915,
    0xd60f573f, 0xbc9bc6e4, 0x2b60a476, 0x81e67400,
    0x08ba6fb5, 0x571be91f, 0xf296ec6b, 0x2a0dd915,
    0xb6636521, 0xe7b9f9b6, 0xff34052e, 0xc5855664,
    0x53b02d5d, 0xa99f8fa1, 0x08ba4799, 0x6e85076a,
    0x4b7a70e9, 0xb5b32944, 0xdb75092e, 0xc4192623,
    0xad6ea6b0, 0x49a7df7d, 0x9cee60b8, 0x8fedb266,
    0xecaa8c71, 0x699a17ff, 0x5664526c, 0xc2b19ee1,
    0x193602a5, 0x75094c29, 0xa0591340, 0xe4183a3e,
    0x3f54989a, 0x5b429d65, 0x6b8fe4d6, 0x99f73fd6,
    0xa1d29c07, 0xefe830f5, 0x4d2d38e6, 0xf0255dc1,
    0x4cdd2086, 0x8470eb26, 0x6382e9c6, 0x021ecc5e,
    0x09686b3f, 0x3ebaefc9, 0x3c971814, 0x6b6a70a1,
    0x687f3584, 0x52a0e286, 0xb79c5305, 0xaa500737,
    0x3e07841c, 0x7fdeae5c, 0x8e7d44ec, 0x5716f2b8,
    0xb03ada37, 0xf0500c0d, 0xf01c1f04, 0x0200b3ff,
    0xae0cf51a, 0x3cb574b2, 0x25837a58, 0xdc0921bd,
    0xd19113f9, 0x7ca92ff6, 0x94324773, 0x22f54701,
    0x3ae5e581, 0x37c2dadc, 0xc8b57634, 0x9af3dda7,
    0xa9446146, 0x0fd0030e, 0xecc8c73e, 0xa4751e41,
    0xe238cd99, 0x3bea0e2f, 0x3280bba1, 0x183eb331,
    0x4e548b38, 0x4f6db908, 0x6f420d03, 0xf60a04bf,
    0x2cb81290, 0x24977c79, 0x5679b072, 0xbcaf89af,
    0xde9a771f, 0xd9930810, 0xb38bae12, 0xdccf3f2e,
    0x5512721f, 0x2e6b7124, 0x501adde6, 0x9f84cd87,
    0x7a584718, 0x7408da17, 0xbc9f9abc, 0xe94b7d8c,
    0xec7aec3a, 0xdb851dfa, 0x63094366, 0xc464c3d2,
    0xef1c1847, 0x3215d908, 0xdd433b37, 0x24c2ba16,
    0x12a14d43, 0x2a65c451, 0x50940002, 0x133ae4dd,
    0x71dff89e, 0x10314e55, 0x81ac77d6, 0x5f11199b,
    0x043556f1, 0xd7a3c76b, 0x3c11183b, 0x5924a509,
    0xf28fe6ed, 0x97f1fbfa, 0x9ebabf2c, 0x1e153c6e,
    0x86e34570, 0xeae96fb1, 0x860e5e0a, 0x5a3e2ab3,
    0x771fe71c, 0x4e3d06fa, 0x2965dcb9, 0x99e71d0f,
    0x803e89d6, 0x5266c825, 0x2e4cc978, 0x9c10b36a,
    0xc6150eba, 0x94e2ea78, 0xa5fc3c53, 0x1e0a2df4,
    0xf2f74ea7, 0x361d2b3d, 0x1939260f, 0x19c27960,
    0x5223a708, 0xf71312b6, 0xebadfe6e, 0xeac31f66,
    0xe3bc4595, 0xa67bc883, 0xb17f37d1, 0x018cff28,
    0xc332ddef, 0xbe6c5aa5, 0x65582185, 0x68ab9802,
    0xeecea50f, 0xdb2f953b, 0x2aef7dad, 0x5b6e2f84,
    0x1521b628, 0x29076170, 0xecdd4775, 0x619f1510,
    0x13cca830, 0xeb61bd96, 0x0334fe1e, 0xaa0363cf,
    0xb5735c90, 0x4c70a239, 0xd59e9e0b, 0xcbaade14,
    0xeecc86bc, 0x60622ca7, 0x9cab5cab, 0xb2f3846e,
    0x648b1eaf, 0x19bdf0ca, 0xa02369b9, 0x655abb50,
    0x40685a32, 0x3c2ab4b3, 0x319ee9d5, 0xc021b8f7,
    0x9b540b19, 0x875fa099, 0x95f7997e, 0x623d7da8,
    0xf837889a, 0x97e32d77, 0x11ed935f, 0x16681281,
    0x0e358829, 0xc7e61fd6, 0x96dedfa1, 0x7858ba99,
    0x57f584a5, 0x1b227263, 0x9b83c3ff, 0x1ac24696,
    0xcdb30aeb, 0x532e3054, 0x8fd948e4, 0x6dbc3128,
    0x58ebf2ef, 0x34c6ffea, 0xfe28ed61, 0xee7c3c73,
    0x5d4a14d9, 0xe864b7e3, 0x42105d14, 0x203e13e0,
    0x45eee2b6, 0xa3aaabea, 0xdb6c4f15, 0xfacb4fd0,
    0xc742f442, 0xef6abbb5, 0x654f3b1d, 0x41cd2105,
    0xd81e799e, 0x86854dc7, 0xe44b476a, 0x3d816250,
    0xcf62a1f2, 0x5b8d2646, 0xfc8883a0, 0xc1c7b6a3,
    0x7f1524c3, 0x69cb7492, 0x47848a0b, 0x5692b285,
    0x095bbf00, 0xad19489d, 0x1462b174, 0x23820e00,
    0x58428d2a, 0x0c55f5ea, 0x1dadf43e, 0x233f7061,
    0x3372f092, 0x8d937e41, 0xd65fecf1, 0x6c223bdb,
    0x7cde3759, 0xcbee7460, 0x4085f2a7, 0xce77326e,
    0xa6078084, 0x19f8509e, 0xe8efd855, 0x61d99735,
    0xa969a7aa, 0xc50c06c2, 0x5a04abfc, 0x800bcadc,
    0x9e447a2e, 0xc3453484, 0xfdd56705, 0x0e1e9ec9,
    0xdb73dbd3, 0x105588cd, 0x675fda79, 0xe3674340,
    0xc5c43465, 0x713e38d8, 0x3d28f89e, 0xf16dff20,
    0x153e21e7, 0x8fb03d4a, 0xe6e39f2b, 0xdb83adf7,
    0xe93d5a68, 0x948140f7, 0xf64c261c, 0x94692934,
    0x411520f7, 0x7602d4f7, 0xbcf46b2e, 0xd4a20068,
    0xd4082471, 0x3320f46a, 0x43b7d4b7, 0x500061af,
    0x1e39f62e, 0x97244546, 0x14214f74, 0xbf8b8840,
    0x4d95fc1d, 0x96b591af, 0x70f4ddd3, 0x66a02f45,
    0xbfbc09ec, 0x03bd9785, 0x7fac6dd0, 0x31cb8504,
    0x96eb27b3, 0x55fd3941, 0xda2547e6, 0xabca0a9a,
    0x28507825, 0x530429f4, 0x0a2c86da, 0xe9b66dfb,
    0x68dc1462, 0xd7486900, 0x680ec0a4, 0x27a18dee,
    0x4f3ffea2, 0xe887ad8c, 0xb58ce006, 0x7af4d6b6,
    0xaace1e7c, 0xd3375fec, 0xce78a399, 0x406b2a42,
    0x20fe9e35, 0xd9f385b9, 0xee39d7ab, 0x3b124e8b,
    0x1dc9faf7, 0x4b6d1856, 0x26a36631, 0xeae397b2,
    0x3a6efa74, 0xdd5b4332, 0x6841e7f7, 0xca7820fb,
    0xfb0af54e, 0xd8feb397, 0x454056ac, 0xba489527,
    0x55533a3a, 0x20838d87, 0xfe6ba9b7, 0xd096954b,
    0x55a867bc, 0xa1159a58, 0xcca92963, 0x99e1db33,
    0xa62a4a56, 0x3f3125f9, 0x5ef47e1c, 0x9029317c,
    0xfdf8e802, 0x04272f70, 0x80bb155c, 0x05282ce3,
    0x95c11548, 0xe4c66d22, 0x48c1133f, 0xc70f86dc,
    0x07f9c9ee, 0x41041f0f, 0x404779a4, 0x5d886e17,
    0x325f51eb, 0xd59bc0d1, 0xf2bcc18f, 0x41113564,
    0x257b7834, 0x602a9c60, 0xdff8e8a3, 0x1f636c1b,
    0x0e12b4c2, 0x02e1329e, 0xaf664fd1, 0xcad18115,
    0x6b2395e0, 0x333e92e1, 0x3b240b62, 0xeebeb922,
    0x85b2a20e, 0xe6ba0d99, 0xde720c8c, 0x2da2f728,
    0xd0127845, 0x95b794fd, 0x647d0862, 0xe7ccf5f0,
    0x5449a36f, 0x877d48fa, 0xc39dfd27, 0xf33e8d1e,
    0x0a476341, 0x992eff74, 0x3a6f6eab, 0xf4f8fd37,
    0xa812dc60, 0xa1ebddf8, 0x991be14c, 0xdb6e6b0d,
    0xc67b5510, 0x6d672c37, 0x2765d43b, 0xdcd0e804,
    0xf1290dc7, 0xcc00ffa3, 0xb5390f92, 0x690fed0b,
    0x667b9ffb, 0xcedb7d9c, 0xa091cf0b, 0xd9155ea3,
    0xbb132f88, 0x515bad24, 0x7b9479bf, 0x763bd6eb,
    0x37392eb3, 0xcc115979, 0x8026e297, 0xf42e312d,
    0x6842ada7, 0xc66a2b3b, 0x12754ccc, 0x782ef11c,
    0x6a124237, 0xb79251e7, 0x06a1bbe6, 0x4bfb6350,
    0x1a6b1018, 0x11caedfa, 0x3d25bdd8, 0xe2e1c3c9,
    0x44421659, 0x0a121386, 0xd90cec6e, 0xd5abea2a,
    0x64af674e, 0xda86a85f, 0xbebfe988, 0x64e4c3fe,
    0x9dbc8057, 0xf0f7c086, 0x60787bf8, 0x6003604d,
    0xd1fd8346, 0xf6381fb0, 0x7745ae04, 0xd736fccc,
    0x83426b33, 0xf01eab71, 0xb0804187, 0x3c005e5f,
    0x77a057be, 0xbde8ae24, 0x55464299, 0xbf582e61,
    0x4e58f48f, 0xf2ddfda2, 0xf474ef38, 0x8789bdc2,
    0x5366f9c3, 0xc8b38e74, 0xb475f255, 0x46fcd9b9,
    0x7aeb2661, 0x8b1ddf84, 0x846a0e79, 0x915f95e2,
    0x466e598e, 0x20b45770, 0x8cd55591, 0xc902de4c,
    0xb90bace1, 0xbb8205d0, 0x11a86248, 0x7574a99e,
    0xb77f19b6, 0xe0a9dc09, 0x662d09a1, 0xc4324633,
    0xe85a1f02, 0x09f0be8c, 0x4a99a025, 0x1d6efe10,
    0x1ab93d1d, 0x0ba5a4df, 0xa186f20f, 0x2868f169,
    0xdcb7da83, 0x573906fe, 0xa1e2ce9b, 0x4fcd7f52,
    0x50115e01, 0xa70683fa, 0xa002b5c4, 0x0de6d027,
    0x9af88c27, 0x773f8641, 0xc3604c06, 0x61a806b5,
    0xf0177a28, 0xc0f586e0, 0x006058aa, 0x30dc7d62,
    0x11e69ed7, 0x2338ea63, 0x53c2dd94, 0xc2c21634,
    0xbbcbee56, 0x90bcb6de, 0xebfc7da1, 0xce591d76,
    0x6f05e409, 0x4b7c0188, 0x39720a3d, 0x7c927c24,
    0x86e3725f, 0x724d9db9, 0x1ac15bb4, 0xd39eb8fc,
    0xed545578, 0x08fca5b5, 0xd83d7cd3, 0x4dad0fc4,
    0x1e50ef5e, 0xb161e6f8, 0xa28514d9, 0x6c51133c,
    0x6fd5c7e7, 0x56e14ec4, 0x362abfce, 0xddc6c837,
    0xd79a3234, 0x92638212, 0x670efa8e, 0x406000e0,
    0x3a39ce37, 0xd3faf5cf, 0xabc27737, 0x5ac52d1b,
    0x5cb0679e, 0x4fa33742, 0xd3822740, 0x99bc9bbe,
    0xd5118e9d, 0xbf0f7315, 0xd62d1c7e, 0xc700c47b,
    0xb78c1b6b, 0x21a19045, 0xb26eb1be, 0x6a366eb4,
    0x5748ab2f, 0xbc946e79, 0xc6a376d2, 0x6549c2c8,
    0x530ff8ee, 0x468dde7d, 0xd5730a1d, 0x4cd04dc6,
    0x2939bbdb, 0xa9ba4650, 0xac9526e8, 0xbe5ee304,
    0xa1fad5f0, 0x6a2d519a, 0x63ef8ce2, 0x9a86ee22,
    0xc089c2b8, 0x43242ef6, 0xa51e03aa, 0x9cf2d0a4,
    0x83c061ba, 0x9be96a4d, 0x8fe51550, 0xba645bd6,
    0x2826a2f9, 0xa73a3ae1, 0x4ba99586, 0xef5562e9,
    0xc72fefd3, 0xf752f7da, 0x3f046f69, 0x77fa0a59,
    0x80e4a915, 0x87b08601, 0x9b09e6ad, 0x3b3ee593,
    0xe990fd5a, 0x9e34d797, 0x2cf0b7d9, 0x022b8b51,
    0x96d5ac3a, 0x017da67d, 0xd1cf3ed6, 0x7c7d2d28,
    0x1f9f25cf, 0xadf2b89b, 0x5ad6b472, 0x5a88f54c,
    0xe029ac71, 0xe019a5e6, 0x47b0acfd, 0xed93fa9b,
    0xe8d3c48d, 0x283b57cc, 0xf8d56629, 0x79132e28,
    0x785f0191, 0xed756055, 0xf7960e44, 0xe3d35e8c,
    0x15056dd4, 0x88f46dba, 0x03a16125, 0x0564f0bd,
    0xc3eb9e15, 0x3c9057a2, 0x97271aec, 0xa93a072a,
    0x1b3f6d9b, 0x1e6321f5, 0xf59c66fb, 0x26dcf319,
    0x7533d928, 0xb155fdf5, 0x03563482, 0x8aba3cbb,
    0x28517711, 0xc20ad9f8, 0xabcc5167, 0xccad925f,
    0x4de81751, 0x3830dc8e, 0x379d5862, 0x9320f991,
    0xea7a90c2, 0xfb3e7bce, 0x5121ce64, 0x774fbe32,
    0xa8b6e37e, 0xc3293d46, 0x48de5369, 0x6413e680,
    0xa2ae0810, 0xdd6db224, 0x69852dfd, 0x09072166,
    0xb39a460a, 0x6445c0dd, 0x586cdecf, 0x1c20c8ae,
    0x5bbef7dd, 0x1b588d40, 0xccd2017f, 0x6bb4e3bb,
    0xdda26a7e, 0x3a59ff45, 0x3e350a44, 0xbcb4cdd5,
    0x72eacea8, 0xfa6484bb, 0x8d6612ae, 0xbf3c6f47,
    0xd29be463, 0x542f5d9e, 0xaec2771b, 0xf64e6370,
    0x740e0d8d, 0xe75b1357, 0xf8721671, 0xaf537d5d,
    0x4040cb08, 0x4eb4e2cc, 0x34d2466a, 0x0115af84,
    0xe1b00428, 0x95983a1d, 0x06b89fb4, 0xce6ea048,
    0x6f3f3b82, 0x3520ab82, 0x011a1d4b, 0x277227f8,
    0x611560b1, 0xe7933fdc, 0xbb3a792b, 0x344525bd,
    0xa08839e1, 0x51ce794b, 0x2f32c9b7, 0xa01fbac9,
    0xe01cc87e, 0xbcc7d1f6, 0xcf0111c3, 0xa1e8aac7,
    0x1a908749, 0xd44fbd9a, 0xd0dadecb, 0xd50ada38,
    0x0339c32a, 0xc6913667, 0x8df9317c, 0xe0b12b4f,
    0xf79e59b7, 0x43f5bb3a, 0xf2d519ff, 0x27d9459c,
    0xbf97222c, 0x15e6fc2a, 0x0f91fc71, 0x9b941525,
    0xfae59361, 0xceb69ceb, 0xc2a86459, 0x12baa8d1,
    0xb6c1075e, 0xe3056a0c, 0x10d25065, 0xcb03a442,
    0xe0ec6e0e, 0x1698db3b, 0x4c98a0be, 0x3278e964,
    0x9f1f9532, 0xe0d392df, 0xd3a0342b, 0x8971f21e,
    0x1b0a7441, 0x4ba3348c, 0xc5be7120, 0xc37632d8,
    0xdf359f8d, 0x9b992f2e, 0xe60b6f47, 0x0fe3f11d,
    0xe54cda54, 0x1edad891, 0xce6279cf, 0xcd3e7e6f,
    0x1618b166, 0xfd2c1d05, 0x848fd2c5, 0xf6fb2299,
    0xf523f357, 0xa6327623, 0x93a83531, 0x56cccd02,
    0xacf08162, 0x5a75ebb5, 0x6e163697, 0x88d273cc,
    0xde966292, 0x81b949d0, 0x4c50901b, 0x71c65614,
    0xe6c6c7bd, 0x327a140a, 0x45e1d006, 0xc3f27b9a,
    0xc9aa53fd, 0x62a80f00, 0xbb25bfe2, 0x35bdd2f6,
    0x71126905, 0xb2040222, 0xb6cbcf7c, 0xcd769c2b,
    0x53113ec0, 0x1640e3d3, 0x38abbd60, 0x2547adf0,
    0xba38209c, 0xf746ce76, 0x77afa1c5, 0x20756060,
    0x85cbfe4e, 0x8ae88dd8, 0x7aaaf9b0, 0x4cf9aa7e,
    0x1948c25c, 0x02fb8a8c, 0x01c36ae4, 0xd6ebe1f9,
    0x90d4f869, 0xa65cdea0, 0x3f09252d, 0xc208e69f,
    0xb74e6132, 0xce77e25b, 0x578fdfe3, 0x3ac372e6
  };

  for (i=0;i<NUM_SUBKEYS;i++)
    PA[i] = PA_Init[i];

  for (j=0;j<NUM_S_BOXES;j++)
    for (i=0;i<NUM_ENTRIES;i++)
      SB[j][i] = SB_Init[j][i];
}

void Blowfish::Set_Passwd(char *Passwd)
{
  char New_Passwd[MAX_STRING];
  unsigned int i,len;

	if (Passwd == NULL)
	{
	do
	{
	cout << "\aEnter your password: ";
	cin.get(New_Passwd,MAX_STRING,'\n');
	len = strlen(New_Passwd);
	}
	while (len > MAX_PASSWD);
	Passwd = New_Passwd;
  }
  else
	len = strlen(Passwd);

  Reset();
  if (len > 0)
	Gen_Subkeys(Passwd);

  for (i=0;i<MAX_STRING;i++)
    New_Passwd[i] = '\0';
   Passwd = NULL;
   len = 0;
}

void Blowfish::Encrypt(void *Ptr,unsigned int N_Bytes)
{
  unsigned int i;
  DWord *Work;

  if (N_Bytes%8)
  {
    cerr << "\aBlowfish requires the input to be a multiple of 8 bytes (64
bits) to work.\n";
    return;
  }

	N_Bytes /= 8;
  Work = (DWord *)Ptr;

  for (i=0;i<N_Bytes;i++)
  {
    BF_En(&Work->word0,&Work->word1);
    Work++;
  }

  Work = NULL;
}

void Blowfish::Decrypt(void *Ptr,unsigned int N_Bytes)
{
  unsigned int i;
  DWord *Work;

  if (N_Bytes%8)
  {
    cerr << "\aBlowfish requires the input to be a multiple of 8 bytes (64
bits) to work.\n";
    return;
  }

	N_Bytes /= 8;
  Work = (DWord *)Ptr;
  for (i=0;i<N_Bytes;i++)
  {
    BF_De(&Work->word0,&Work->word1);
    Work++;
  }

  Work = NULL;
}

Open in new window


and compile it like

g++ -o BFtest BFtest.cpp blowfish.cpp

('BFTest' clearly uses C++ code also, thus change the extension)
I after i change extension and use command to compile, i got messages:

ubuntu@ubuntu:~/program$ g++ -o BFtest BFtest.cpp blowfish.cpp
BFtest.cpp: In function ‘int Test(Blowfish*)’:
BFtest.cpp:47: warning: deprecated conversion from string constant to ‘char*’
BFtest.cpp:47: warning: deprecated conversion from string constant to ‘char*’
BFtest.cpp: In function ‘double Speed(Blowfish*)’:
BFtest.cpp:85: warning: deprecated conversion from string constant to ‘char*’
blowfish.cpp:3: fatal error: iostream.h: No such file or directory
compilation terminated.


I tried to delete .h from isostream.h , and add using namespace std; but still errors. tks.
If you change 'iostream.h' to 'iostream', only the warnings should be left... to address these, try adding '-Wno-deprecated', e.g.

$ g++ -o BFtest BFtest.cpp blowfish.cpp -Wno-deprecated
ubuntu@ubuntu:~/program$ g++ -o BFtest BFtest.cpp blowfish.cpp -Wno-deprecated
BFtest.cpp: In function ‘int Test(Blowfish*)’:
BFtest.cpp:47: warning: deprecated conversion from string constant to ‘char*’
BFtest.cpp:47: warning: deprecated conversion from string constant to ‘char*’
BFtest.cpp: In function ‘double Speed(Blowfish*)’:
BFtest.cpp:85: warning: deprecated conversion from string constant to ‘char*’
blowfish.cpp:3: fatal error: iostream.h: No such file or directory
compilation terminated.
ubuntu@ubuntu:~/program$

can you post those files that you use to compile ? I use Ubuntu
OK, the file should be
/********** blowfish.cpp **********/

#include <iostream>
#include <string>
#include "blowfish.h"

using namespace std;

#define F(x)    (((SB[0][x.byte.zero] + SB[1][x.byte.one]) ^ SB[2][x.byte.two]) +
SB[3][x.byte.three])


void Blowfish::Gen_Subkeys(char *Passwd)
{
  unsigned int i,j,len=strlen(Passwd);
  Word Work,null0,null1;

  if (len > 0)
  {
	j = 0;
    for (i=0;i<NUM_SUBKEYS;i++)
    {
	Work.byte.zero = Passwd[(j++)%len];
	Work.byte.one = Passwd[(j++)%len];
	Work.byte.two = Passwd[(j++)%len];
			Work.byte.three = Passwd[(j++)%len];
			PA[i] ^= Work.word;
		}

	null0.word = null1.word = 0;
	
    for (i=0;i<NUM_SUBKEYS;i+=2)
	  {
			BF_En(&null0,&null1);
		PA[i] = null0.word;
			PA[i+1] = null1.word;
		}

    for (j=0;j<NUM_S_BOXES;j++)
			for (i=0;i<NUM_ENTRIES;i+=2)
		{
		BF_En(&null0,&null1);
		SB[j][i] = null0.word;
		SB[j][i+1] = null1.word;
		}
   }

   Work.word = null0.word = null1.word = 0;
   Passwd = NULL;
   len = 0;
}

void Blowfish::BF_En(Word *x1,Word *x2)
{
  Word w1=*x1,w2=*x2;

  w1.word ^= PA[0];
  w2.word ^= F(w1)^PA[1];       w1.word ^= F(w2)^PA[2];
  w2.word ^= F(w1)^PA[3];       w1.word ^= F(w2)^PA[4];
  w2.word ^= F(w1)^PA[5];       w1.word ^= F(w2)^PA[6];
  w2.word ^= F(w1)^PA[7];       w1.word ^= F(w2)^PA[8];
  w2.word ^= F(w1)^PA[9];       w1.word ^= F(w2)^PA[10];
  w2.word ^= F(w1)^PA[11];      w1.word ^= F(w2)^PA[12];
  w2.word ^= F(w1)^PA[13];      w1.word ^= F(w2)^PA[14];
  w2.word ^= F(w1)^PA[15];      w1.word ^= F(w2)^PA[16];
  w2.word ^= PA[17];

  *x1 = w2;
  *x2 = w1;
}

void Blowfish::BF_De(Word *x1,Word *x2)
{
  Word w1=*x1,w2=*x2;

  w1.word ^= PA[17];
  w2.word ^= F(w1)^PA[16];      w1.word ^= F(w2)^PA[15];
  w2.word ^= F(w1)^PA[14];      w1.word ^= F(w2)^PA[13];
  w2.word ^= F(w1)^PA[12];      w1.word ^= F(w2)^PA[11];
  w2.word ^= F(w1)^PA[10];      w1.word ^= F(w2)^PA[9];
  w2.word ^= F(w1)^PA[8];       w1.word ^= F(w2)^PA[7];
  w2.word ^= F(w1)^PA[6];       w1.word ^= F(w2)^PA[5];
  w2.word ^= F(w1)^PA[4];       w1.word ^= F(w2)^PA[3];
  w2.word ^= F(w1)^PA[2];       w1.word ^= F(w2)^PA[1];
  w2.word ^= PA[0];

  *x1 = w2;
  *x2 = w1;
}


Blowfish::Blowfish()
{
  Reset();
}

Blowfish::~Blowfish()
{
  Reset();
}


void Blowfish::Reset()
{
  unsigned int i,j;

  unsigned int PA_Init[NUM_SUBKEYS] =
  {
    0x243f6a88, 0x85a308d3, 0x13198a2e, 0x03707344,
    0xa4093822, 0x299f31d0, 0x082efa98, 0xec4e6c89,
    0x452821e6, 0x38d01377, 0xbe5466cf, 0x34e90c6c,
    0xc0ac29b7, 0xc97c50dd, 0x3f84d5b5, 0xb5470917,
    0x9216d5d9, 0x8979fb1b
  };

  unsigned int SB_Init[NUM_S_BOXES][NUM_ENTRIES] =
  {
    0xd1310ba6, 0x98dfb5ac, 0x2ffd72db, 0xd01adfb7,
    0xb8e1afed, 0x6a267e96, 0xba7c9045, 0xf12c7f99,
    0x24a19947, 0xb3916cf7, 0x0801f2e2, 0x858efc16,
    0x636920d8, 0x71574e69, 0xa458fea3, 0xf4933d7e,
    0x0d95748f, 0x728eb658, 0x718bcd58, 0x82154aee,
    0x7b54a41d, 0xc25a59b5, 0x9c30d539, 0x2af26013,
    0xc5d1b023, 0x286085f0, 0xca417918, 0xb8db38ef,
    0x8e79dcb0, 0x603a180e, 0x6c9e0e8b, 0xb01e8a3e,
    0xd71577c1, 0xbd314b27, 0x78af2fda, 0x55605c60,
    0xe65525f3, 0xaa55ab94, 0x57489862, 0x63e81440,
    0x55ca396a, 0x2aab10b6, 0xb4cc5c34, 0x1141e8ce,
    0xa15486af, 0x7c72e993, 0xb3ee1411, 0x636fbc2a,
    0x2ba9c55d, 0x741831f6, 0xce5c3e16, 0x9b87931e,
    0xafd6ba33, 0x6c24cf5c, 0x7a325381, 0x28958677,
    0x3b8f4898, 0x6b4bb9af, 0xc4bfe81b, 0x66282193,
    0x61d809cc, 0xfb21a991, 0x487cac60, 0x5dec8032,
    0xef845d5d, 0xe98575b1, 0xdc262302, 0xeb651b88,
    0x23893e81, 0xd396acc5, 0x0f6d6ff3, 0x83f44239,
    0x2e0b4482, 0xa4842004, 0x69c8f04a, 0x9e1f9b5e,
    0x21c66842, 0xf6e96c9a, 0x670c9c61, 0xabd388f0,
    0x6a51a0d2, 0xd8542f68, 0x960fa728, 0xab5133a3,
    0x6eef0b6c, 0x137a3be4, 0xba3bf050, 0x7efb2a98,
    0xa1f1651d, 0x39af0176, 0x66ca593e, 0x82430e88,
    0x8cee8619, 0x456f9fb4, 0x7d84a5c3, 0x3b8b5ebe,
    0xe06f75d8, 0x85c12073, 0x401a449f, 0x56c16aa6,
    0x4ed3aa62, 0x363f7706, 0x1bfedf72, 0x429b023d,
    0x37d0d724, 0xd00a1248, 0xdb0fead3, 0x49f1c09b,
    0x075372c9, 0x80991b7b, 0x25d479d8, 0xf6e8def7,
    0xe3fe501a, 0xb6794c3b, 0x976ce0bd, 0x04c006ba,
    0xc1a94fb6, 0x409f60c4, 0x5e5c9ec2, 0x196a2463,
    0x68fb6faf, 0x3e6c53b5, 0x1339b2eb, 0x3b52ec6f,
    0x6dfc511f, 0x9b30952c, 0xcc814544, 0xaf5ebd09,
    0xbee3d004, 0xde334afd, 0x660f2807, 0x192e4bb3,
    0xc0cba857, 0x45c8740f, 0xd20b5f39, 0xb9d3fbdb,
    0x5579c0bd, 0x1a60320a, 0xd6a100c6, 0x402c7279,
    0x679f25fe, 0xfb1fa3cc, 0x8ea5e9f8, 0xdb3222f8,
    0x3c7516df, 0xfd616b15, 0x2f501ec8, 0xad0552ab,
    0x323db5fa, 0xfd238760, 0x53317b48, 0x3e00df82,
    0x9e5c57bb, 0xca6f8ca0, 0x1a87562e, 0xdf1769db,
    0xd542a8f6, 0x287effc3, 0xac6732c6, 0x8c4f5573,
    0x695b27b0, 0xbbca58c8, 0xe1ffa35d, 0xb8f011a0,
    0x10fa3d98, 0xfd2183b8, 0x4afcb56c, 0x2dd1d35b,
    0x9a53e479, 0xb6f84565, 0xd28e49bc, 0x4bfb9790,
    0xe1ddf2da, 0xa4cb7e33, 0x62fb1341, 0xcee4c6e8,
    0xef20cada, 0x36774c01, 0xd07e9efe, 0x2bf11fb4,
    0x95dbda4d, 0xae909198, 0xeaad8e71, 0x6b93d5a0,
    0xd08ed1d0, 0xafc725e0, 0x8e3c5b2f, 0x8e7594b7,
    0x8ff6e2fb, 0xf2122b64, 0x8888b812, 0x900df01c,
    0x4fad5ea0, 0x688fc31c, 0xd1cff191, 0xb3a8c1ad,
    0x2f2f2218, 0xbe0e1777, 0xea752dfe, 0x8b021fa1,
    0xe5a0cc0f, 0xb56f74e8, 0x18acf3d6, 0xce89e299,
    0xb4a84fe0, 0xfd13e0b7, 0x7cc43b81, 0xd2ada8d9,
    0x165fa266, 0x80957705, 0x93cc7314, 0x211a1477,
    0xe6ad2065, 0x77b5fa86, 0xc75442f5, 0xfb9d35cf,
    0xebcdaf0c, 0x7b3e89a0, 0xd6411bd3, 0xae1e7e49,
    0x00250e2d, 0x2071b35e, 0x226800bb, 0x57b8e0af,
    0x2464369b, 0xf009b91e, 0x5563911d, 0x59dfa6aa,
    0x78c14389, 0xd95a537f, 0x207d5ba2, 0x02e5b9c5,
    0x83260376, 0x6295cfa9, 0x11c81968, 0x4e734a41,
    0xb3472dca, 0x7b14a94a, 0x1b510052, 0x9a532915,
    0xd60f573f, 0xbc9bc6e4, 0x2b60a476, 0x81e67400,
    0x08ba6fb5, 0x571be91f, 0xf296ec6b, 0x2a0dd915,
    0xb6636521, 0xe7b9f9b6, 0xff34052e, 0xc5855664,
    0x53b02d5d, 0xa99f8fa1, 0x08ba4799, 0x6e85076a,
    0x4b7a70e9, 0xb5b32944, 0xdb75092e, 0xc4192623,
    0xad6ea6b0, 0x49a7df7d, 0x9cee60b8, 0x8fedb266,
    0xecaa8c71, 0x699a17ff, 0x5664526c, 0xc2b19ee1,
    0x193602a5, 0x75094c29, 0xa0591340, 0xe4183a3e,
    0x3f54989a, 0x5b429d65, 0x6b8fe4d6, 0x99f73fd6,
    0xa1d29c07, 0xefe830f5, 0x4d2d38e6, 0xf0255dc1,
    0x4cdd2086, 0x8470eb26, 0x6382e9c6, 0x021ecc5e,
    0x09686b3f, 0x3ebaefc9, 0x3c971814, 0x6b6a70a1,
    0x687f3584, 0x52a0e286, 0xb79c5305, 0xaa500737,
    0x3e07841c, 0x7fdeae5c, 0x8e7d44ec, 0x5716f2b8,
    0xb03ada37, 0xf0500c0d, 0xf01c1f04, 0x0200b3ff,
    0xae0cf51a, 0x3cb574b2, 0x25837a58, 0xdc0921bd,
    0xd19113f9, 0x7ca92ff6, 0x94324773, 0x22f54701,
    0x3ae5e581, 0x37c2dadc, 0xc8b57634, 0x9af3dda7,
    0xa9446146, 0x0fd0030e, 0xecc8c73e, 0xa4751e41,
    0xe238cd99, 0x3bea0e2f, 0x3280bba1, 0x183eb331,
    0x4e548b38, 0x4f6db908, 0x6f420d03, 0xf60a04bf,
    0x2cb81290, 0x24977c79, 0x5679b072, 0xbcaf89af,
    0xde9a771f, 0xd9930810, 0xb38bae12, 0xdccf3f2e,
    0x5512721f, 0x2e6b7124, 0x501adde6, 0x9f84cd87,
    0x7a584718, 0x7408da17, 0xbc9f9abc, 0xe94b7d8c,
    0xec7aec3a, 0xdb851dfa, 0x63094366, 0xc464c3d2,
    0xef1c1847, 0x3215d908, 0xdd433b37, 0x24c2ba16,
    0x12a14d43, 0x2a65c451, 0x50940002, 0x133ae4dd,
    0x71dff89e, 0x10314e55, 0x81ac77d6, 0x5f11199b,
    0x043556f1, 0xd7a3c76b, 0x3c11183b, 0x5924a509,
    0xf28fe6ed, 0x97f1fbfa, 0x9ebabf2c, 0x1e153c6e,
    0x86e34570, 0xeae96fb1, 0x860e5e0a, 0x5a3e2ab3,
    0x771fe71c, 0x4e3d06fa, 0x2965dcb9, 0x99e71d0f,
    0x803e89d6, 0x5266c825, 0x2e4cc978, 0x9c10b36a,
    0xc6150eba, 0x94e2ea78, 0xa5fc3c53, 0x1e0a2df4,
    0xf2f74ea7, 0x361d2b3d, 0x1939260f, 0x19c27960,
    0x5223a708, 0xf71312b6, 0xebadfe6e, 0xeac31f66,
    0xe3bc4595, 0xa67bc883, 0xb17f37d1, 0x018cff28,
    0xc332ddef, 0xbe6c5aa5, 0x65582185, 0x68ab9802,
    0xeecea50f, 0xdb2f953b, 0x2aef7dad, 0x5b6e2f84,
    0x1521b628, 0x29076170, 0xecdd4775, 0x619f1510,
    0x13cca830, 0xeb61bd96, 0x0334fe1e, 0xaa0363cf,
    0xb5735c90, 0x4c70a239, 0xd59e9e0b, 0xcbaade14,
    0xeecc86bc, 0x60622ca7, 0x9cab5cab, 0xb2f3846e,
    0x648b1eaf, 0x19bdf0ca, 0xa02369b9, 0x655abb50,
    0x40685a32, 0x3c2ab4b3, 0x319ee9d5, 0xc021b8f7,
    0x9b540b19, 0x875fa099, 0x95f7997e, 0x623d7da8,
    0xf837889a, 0x97e32d77, 0x11ed935f, 0x16681281,
    0x0e358829, 0xc7e61fd6, 0x96dedfa1, 0x7858ba99,
    0x57f584a5, 0x1b227263, 0x9b83c3ff, 0x1ac24696,
    0xcdb30aeb, 0x532e3054, 0x8fd948e4, 0x6dbc3128,
    0x58ebf2ef, 0x34c6ffea, 0xfe28ed61, 0xee7c3c73,
    0x5d4a14d9, 0xe864b7e3, 0x42105d14, 0x203e13e0,
    0x45eee2b6, 0xa3aaabea, 0xdb6c4f15, 0xfacb4fd0,
    0xc742f442, 0xef6abbb5, 0x654f3b1d, 0x41cd2105,
    0xd81e799e, 0x86854dc7, 0xe44b476a, 0x3d816250,
    0xcf62a1f2, 0x5b8d2646, 0xfc8883a0, 0xc1c7b6a3,
    0x7f1524c3, 0x69cb7492, 0x47848a0b, 0x5692b285,
    0x095bbf00, 0xad19489d, 0x1462b174, 0x23820e00,
    0x58428d2a, 0x0c55f5ea, 0x1dadf43e, 0x233f7061,
    0x3372f092, 0x8d937e41, 0xd65fecf1, 0x6c223bdb,
    0x7cde3759, 0xcbee7460, 0x4085f2a7, 0xce77326e,
    0xa6078084, 0x19f8509e, 0xe8efd855, 0x61d99735,
    0xa969a7aa, 0xc50c06c2, 0x5a04abfc, 0x800bcadc,
    0x9e447a2e, 0xc3453484, 0xfdd56705, 0x0e1e9ec9,
    0xdb73dbd3, 0x105588cd, 0x675fda79, 0xe3674340,
    0xc5c43465, 0x713e38d8, 0x3d28f89e, 0xf16dff20,
    0x153e21e7, 0x8fb03d4a, 0xe6e39f2b, 0xdb83adf7,
    0xe93d5a68, 0x948140f7, 0xf64c261c, 0x94692934,
    0x411520f7, 0x7602d4f7, 0xbcf46b2e, 0xd4a20068,
    0xd4082471, 0x3320f46a, 0x43b7d4b7, 0x500061af,
    0x1e39f62e, 0x97244546, 0x14214f74, 0xbf8b8840,
    0x4d95fc1d, 0x96b591af, 0x70f4ddd3, 0x66a02f45,
    0xbfbc09ec, 0x03bd9785, 0x7fac6dd0, 0x31cb8504,
    0x96eb27b3, 0x55fd3941, 0xda2547e6, 0xabca0a9a,
    0x28507825, 0x530429f4, 0x0a2c86da, 0xe9b66dfb,
    0x68dc1462, 0xd7486900, 0x680ec0a4, 0x27a18dee,
    0x4f3ffea2, 0xe887ad8c, 0xb58ce006, 0x7af4d6b6,
    0xaace1e7c, 0xd3375fec, 0xce78a399, 0x406b2a42,
    0x20fe9e35, 0xd9f385b9, 0xee39d7ab, 0x3b124e8b,
    0x1dc9faf7, 0x4b6d1856, 0x26a36631, 0xeae397b2,
    0x3a6efa74, 0xdd5b4332, 0x6841e7f7, 0xca7820fb,
    0xfb0af54e, 0xd8feb397, 0x454056ac, 0xba489527,
    0x55533a3a, 0x20838d87, 0xfe6ba9b7, 0xd096954b,
    0x55a867bc, 0xa1159a58, 0xcca92963, 0x99e1db33,
    0xa62a4a56, 0x3f3125f9, 0x5ef47e1c, 0x9029317c,
    0xfdf8e802, 0x04272f70, 0x80bb155c, 0x05282ce3,
    0x95c11548, 0xe4c66d22, 0x48c1133f, 0xc70f86dc,
    0x07f9c9ee, 0x41041f0f, 0x404779a4, 0x5d886e17,
    0x325f51eb, 0xd59bc0d1, 0xf2bcc18f, 0x41113564,
    0x257b7834, 0x602a9c60, 0xdff8e8a3, 0x1f636c1b,
    0x0e12b4c2, 0x02e1329e, 0xaf664fd1, 0xcad18115,
    0x6b2395e0, 0x333e92e1, 0x3b240b62, 0xeebeb922,
    0x85b2a20e, 0xe6ba0d99, 0xde720c8c, 0x2da2f728,
    0xd0127845, 0x95b794fd, 0x647d0862, 0xe7ccf5f0,
    0x5449a36f, 0x877d48fa, 0xc39dfd27, 0xf33e8d1e,
    0x0a476341, 0x992eff74, 0x3a6f6eab, 0xf4f8fd37,
    0xa812dc60, 0xa1ebddf8, 0x991be14c, 0xdb6e6b0d,
    0xc67b5510, 0x6d672c37, 0x2765d43b, 0xdcd0e804,
    0xf1290dc7, 0xcc00ffa3, 0xb5390f92, 0x690fed0b,
    0x667b9ffb, 0xcedb7d9c, 0xa091cf0b, 0xd9155ea3,
    0xbb132f88, 0x515bad24, 0x7b9479bf, 0x763bd6eb,
    0x37392eb3, 0xcc115979, 0x8026e297, 0xf42e312d,
    0x6842ada7, 0xc66a2b3b, 0x12754ccc, 0x782ef11c,
    0x6a124237, 0xb79251e7, 0x06a1bbe6, 0x4bfb6350,
    0x1a6b1018, 0x11caedfa, 0x3d25bdd8, 0xe2e1c3c9,
    0x44421659, 0x0a121386, 0xd90cec6e, 0xd5abea2a,
    0x64af674e, 0xda86a85f, 0xbebfe988, 0x64e4c3fe,
    0x9dbc8057, 0xf0f7c086, 0x60787bf8, 0x6003604d,
    0xd1fd8346, 0xf6381fb0, 0x7745ae04, 0xd736fccc,
    0x83426b33, 0xf01eab71, 0xb0804187, 0x3c005e5f,
    0x77a057be, 0xbde8ae24, 0x55464299, 0xbf582e61,
    0x4e58f48f, 0xf2ddfda2, 0xf474ef38, 0x8789bdc2,
    0x5366f9c3, 0xc8b38e74, 0xb475f255, 0x46fcd9b9,
    0x7aeb2661, 0x8b1ddf84, 0x846a0e79, 0x915f95e2,
    0x466e598e, 0x20b45770, 0x8cd55591, 0xc902de4c,
    0xb90bace1, 0xbb8205d0, 0x11a86248, 0x7574a99e,
    0xb77f19b6, 0xe0a9dc09, 0x662d09a1, 0xc4324633,
    0xe85a1f02, 0x09f0be8c, 0x4a99a025, 0x1d6efe10,
    0x1ab93d1d, 0x0ba5a4df, 0xa186f20f, 0x2868f169,
    0xdcb7da83, 0x573906fe, 0xa1e2ce9b, 0x4fcd7f52,
    0x50115e01, 0xa70683fa, 0xa002b5c4, 0x0de6d027,
    0x9af88c27, 0x773f8641, 0xc3604c06, 0x61a806b5,
    0xf0177a28, 0xc0f586e0, 0x006058aa, 0x30dc7d62,
    0x11e69ed7, 0x2338ea63, 0x53c2dd94, 0xc2c21634,
    0xbbcbee56, 0x90bcb6de, 0xebfc7da1, 0xce591d76,
    0x6f05e409, 0x4b7c0188, 0x39720a3d, 0x7c927c24,
    0x86e3725f, 0x724d9db9, 0x1ac15bb4, 0xd39eb8fc,
    0xed545578, 0x08fca5b5, 0xd83d7cd3, 0x4dad0fc4,
    0x1e50ef5e, 0xb161e6f8, 0xa28514d9, 0x6c51133c,
    0x6fd5c7e7, 0x56e14ec4, 0x362abfce, 0xddc6c837,
    0xd79a3234, 0x92638212, 0x670efa8e, 0x406000e0,
    0x3a39ce37, 0xd3faf5cf, 0xabc27737, 0x5ac52d1b,
    0x5cb0679e, 0x4fa33742, 0xd3822740, 0x99bc9bbe,
    0xd5118e9d, 0xbf0f7315, 0xd62d1c7e, 0xc700c47b,
    0xb78c1b6b, 0x21a19045, 0xb26eb1be, 0x6a366eb4,
    0x5748ab2f, 0xbc946e79, 0xc6a376d2, 0x6549c2c8,
    0x530ff8ee, 0x468dde7d, 0xd5730a1d, 0x4cd04dc6,
    0x2939bbdb, 0xa9ba4650, 0xac9526e8, 0xbe5ee304,
    0xa1fad5f0, 0x6a2d519a, 0x63ef8ce2, 0x9a86ee22,
    0xc089c2b8, 0x43242ef6, 0xa51e03aa, 0x9cf2d0a4,
    0x83c061ba, 0x9be96a4d, 0x8fe51550, 0xba645bd6,
    0x2826a2f9, 0xa73a3ae1, 0x4ba99586, 0xef5562e9,
    0xc72fefd3, 0xf752f7da, 0x3f046f69, 0x77fa0a59,
    0x80e4a915, 0x87b08601, 0x9b09e6ad, 0x3b3ee593,
    0xe990fd5a, 0x9e34d797, 0x2cf0b7d9, 0x022b8b51,
    0x96d5ac3a, 0x017da67d, 0xd1cf3ed6, 0x7c7d2d28,
    0x1f9f25cf, 0xadf2b89b, 0x5ad6b472, 0x5a88f54c,
    0xe029ac71, 0xe019a5e6, 0x47b0acfd, 0xed93fa9b,
    0xe8d3c48d, 0x283b57cc, 0xf8d56629, 0x79132e28,
    0x785f0191, 0xed756055, 0xf7960e44, 0xe3d35e8c,
    0x15056dd4, 0x88f46dba, 0x03a16125, 0x0564f0bd,
    0xc3eb9e15, 0x3c9057a2, 0x97271aec, 0xa93a072a,
    0x1b3f6d9b, 0x1e6321f5, 0xf59c66fb, 0x26dcf319,
    0x7533d928, 0xb155fdf5, 0x03563482, 0x8aba3cbb,
    0x28517711, 0xc20ad9f8, 0xabcc5167, 0xccad925f,
    0x4de81751, 0x3830dc8e, 0x379d5862, 0x9320f991,
    0xea7a90c2, 0xfb3e7bce, 0x5121ce64, 0x774fbe32,
    0xa8b6e37e, 0xc3293d46, 0x48de5369, 0x6413e680,
    0xa2ae0810, 0xdd6db224, 0x69852dfd, 0x09072166,
    0xb39a460a, 0x6445c0dd, 0x586cdecf, 0x1c20c8ae,
    0x5bbef7dd, 0x1b588d40, 0xccd2017f, 0x6bb4e3bb,
    0xdda26a7e, 0x3a59ff45, 0x3e350a44, 0xbcb4cdd5,
    0x72eacea8, 0xfa6484bb, 0x8d6612ae, 0xbf3c6f47,
    0xd29be463, 0x542f5d9e, 0xaec2771b, 0xf64e6370,
    0x740e0d8d, 0xe75b1357, 0xf8721671, 0xaf537d5d,
    0x4040cb08, 0x4eb4e2cc, 0x34d2466a, 0x0115af84,
    0xe1b00428, 0x95983a1d, 0x06b89fb4, 0xce6ea048,
    0x6f3f3b82, 0x3520ab82, 0x011a1d4b, 0x277227f8,
    0x611560b1, 0xe7933fdc, 0xbb3a792b, 0x344525bd,
    0xa08839e1, 0x51ce794b, 0x2f32c9b7, 0xa01fbac9,
    0xe01cc87e, 0xbcc7d1f6, 0xcf0111c3, 0xa1e8aac7,
    0x1a908749, 0xd44fbd9a, 0xd0dadecb, 0xd50ada38,
    0x0339c32a, 0xc6913667, 0x8df9317c, 0xe0b12b4f,
    0xf79e59b7, 0x43f5bb3a, 0xf2d519ff, 0x27d9459c,
    0xbf97222c, 0x15e6fc2a, 0x0f91fc71, 0x9b941525,
    0xfae59361, 0xceb69ceb, 0xc2a86459, 0x12baa8d1,
    0xb6c1075e, 0xe3056a0c, 0x10d25065, 0xcb03a442,
    0xe0ec6e0e, 0x1698db3b, 0x4c98a0be, 0x3278e964,
    0x9f1f9532, 0xe0d392df, 0xd3a0342b, 0x8971f21e,
    0x1b0a7441, 0x4ba3348c, 0xc5be7120, 0xc37632d8,
    0xdf359f8d, 0x9b992f2e, 0xe60b6f47, 0x0fe3f11d,
    0xe54cda54, 0x1edad891, 0xce6279cf, 0xcd3e7e6f,
    0x1618b166, 0xfd2c1d05, 0x848fd2c5, 0xf6fb2299,
    0xf523f357, 0xa6327623, 0x93a83531, 0x56cccd02,
    0xacf08162, 0x5a75ebb5, 0x6e163697, 0x88d273cc,
    0xde966292, 0x81b949d0, 0x4c50901b, 0x71c65614,
    0xe6c6c7bd, 0x327a140a, 0x45e1d006, 0xc3f27b9a,
    0xc9aa53fd, 0x62a80f00, 0xbb25bfe2, 0x35bdd2f6,
    0x71126905, 0xb2040222, 0xb6cbcf7c, 0xcd769c2b,
    0x53113ec0, 0x1640e3d3, 0x38abbd60, 0x2547adf0,
    0xba38209c, 0xf746ce76, 0x77afa1c5, 0x20756060,
    0x85cbfe4e, 0x8ae88dd8, 0x7aaaf9b0, 0x4cf9aa7e,
    0x1948c25c, 0x02fb8a8c, 0x01c36ae4, 0xd6ebe1f9,
    0x90d4f869, 0xa65cdea0, 0x3f09252d, 0xc208e69f,
    0xb74e6132, 0xce77e25b, 0x578fdfe3, 0x3ac372e6
  };

  for (i=0;i<NUM_SUBKEYS;i++)
    PA[i] = PA_Init[i];

  for (j=0;j<NUM_S_BOXES;j++)
    for (i=0;i<NUM_ENTRIES;i++)
      SB[j][i] = SB_Init[j][i];
}

void Blowfish::Set_Passwd(char *Passwd)
{
  char New_Passwd[MAX_STRING];
  unsigned int i,len;

	if (Passwd == NULL)
	{
	do
	{
	cout << "\aEnter your password: ";
	cin.get(New_Passwd,MAX_STRING,'\n');
	len = strlen(New_Passwd);
	}
	while (len > MAX_PASSWD);
	Passwd = New_Passwd;
  }
  else
	len = strlen(Passwd);

  Reset();
  if (len > 0)
	Gen_Subkeys(Passwd);

  for (i=0;i<MAX_STRING;i++)
    New_Passwd[i] = '\0';
   Passwd = NULL;
   len = 0;
}

void Blowfish::Encrypt(void *Ptr,unsigned int N_Bytes)
{
  unsigned int i;
  DWord *Work;

  if (N_Bytes%8)
  {
    cerr << "\aBlowfish requires the input to be a multiple of 8 bytes (64
bits) to work.\n";
    return;
  }

	N_Bytes /= 8;
  Work = (DWord *)Ptr;

  for (i=0;i<N_Bytes;i++)
  {
    BF_En(&Work->word0,&Work->word1);
    Work++;
  }

  Work = NULL;
}

void Blowfish::Decrypt(void *Ptr,unsigned int N_Bytes)
{
  unsigned int i;
  DWord *Work;

  if (N_Bytes%8)
  {
    cerr << "\aBlowfish requires the input to be a multiple of 8 bytes (64
bits) to work.\n";
    return;
  }

	N_Bytes /= 8;
  Work = (DWord *)Ptr;
  for (i=0;i<N_Bytes;i++)
  {
    BF_De(&Work->word0,&Work->word1);
    Work++;
  }

  Work = NULL;
}

Open in new window

errors stilll insist :)

ubuntu@ubuntu:~/program$ g++ -o BFtest BFtest.cpp blowfish.cpp -Wno-deprecated
BFtest.cpp: In function ‘int Test(Blowfish*)’:
BFtest.cpp:47: warning: deprecated conversion from string constant to ‘char*’
BFtest.cpp:47: warning: deprecated conversion from string constant to ‘char*’
BFtest.cpp: In function ‘double Speed(Blowfish*)’:
BFtest.cpp:85: warning: deprecated conversion from string constant to ‘char*’
blowfish.cpp:420: warning: missing terminating " character
blowfish.cpp:420: error: missing terminating " character
blowfish.cpp:421: error: stray ‘\’ in program
blowfish.cpp:421: warning: missing terminating " character
blowfish.cpp:421: error: missing terminating " character
blowfish.cpp:444: warning: missing terminating " character
blowfish.cpp:444: error: missing terminating " character
blowfish.cpp:445: error: stray ‘\’ in program
blowfish.cpp:445: warning: missing terminating " character
blowfish.cpp:445: error: missing terminating " character
blowfish.cpp:10: error: ‘x’ was not declared in this scope
blowfish.cpp:10: error: array bound is not an integer constant before ‘]’ token
blowfish.cpp:10: error: expected constructor, destructor, or type conversion before ‘)’ token
OK, for these

blowfish.cpp:420: warning: missing terminating " character
blowfish.cpp:420: error: missing terminating " character
blowfish.cpp:421: error: stray ‘\’ in program
blowfish.cpp:421: warning: missing terminating " character
blowfish.cpp:421: error: missing terminating " character
blowfish.cpp:444: warning: missing terminating " character
blowfish.cpp:444: error: missing terminating " character
blowfish.cpp:445: error: stray ‘\’ in program
blowfish.cpp:445: warning: missing terminating " character
blowfish.cpp:445: error: missing terminating " character

all you need to do is to make sure the string literals are one *one* line (apparently EE's code pasting box cannot ensure that). The same for

blowfish.cpp:10: error: ‘x’ was not declared in this scope

which should be
#define F(x) (((SB[0][x.byte.zero] + SB[1][x.byte.one]) ^ SB[2][x.byte.two] + SB[3][x.byte.three])

Open in new window


on a single line.
i think it is ok now after i change some things:
  + instead of using include <string>, i use <cstring>
  + make same line for line 445.

Hm, the whole sample is a little outdated... http://www.schneier.com/code/bfsh-con.zip looks a lot better.
let me move on the bfsh-con. downloading and extracting now
i am editing to make same line now
oh jkr, i emailed to your email. Could you please check  your email? tks.
Um, sorry, but email communication to address questions on EE is strictly forbidden...
I gonna write the main for it.
Why don't you use the one in BFTest.cpp?
oh i forgot about it. Let me use it. I just want to give a file to encrypt , then encrypted file to deencrypt it. gonna go to work now. I gonna be back in 9 hrs. tks. jkr.
after i change some variables  in BFtest.cpp to match with classname in blowfish.h, i still get stuck. could you please take a look at it? tks.
I just rewrite the main to test it. Please help me on how to use constructor for it. tks a lot.
blowfish.cpp
blowfish.h
blowfish.h2.h
testtub.cpp
the constructor is ok. but you need to add call of Initialize member function where you pass an individual byte key:

unsigned char bfkey[] = { 123, 77, 255, 0, 42, 12, 97, ... };  
A.Initialize(bfkey, sizeof(bfkey)/sizeof(unsigned char));

Open in new window


you could use a key of maximum 56 bytes (beside you would change MAXKEYBYTES in blowfish.h) and to make it not so easy to evaluate it from your executable, you may find a way to compute the byte numbers rather than define them hardcoded like in the above code snippet.

Sara

after update, it gets "segmentation fault"
did you check the core file with the debugger? it should point you exactly to the faulty statement.

Sara
let me try because i just arrived school
here it is
Core was generated by `./testtub encrypt'.
Program terminated with signal 11, Segmentation fault.
#0  0x0017068d in fseek () from /lib/libc.so.6

my netbook is so slow .
and now

Program terminated with signal 11, Segmentation fault.
#0  0x00bb1b4c in fwrite () from /lib/libc.so.6
i can't see anything wrong with this
fwrite( outbuffer, 1,sizeof(outbuffer), fout);

do you see anything wrong?
except for testtubcpp, other files were downloaded from the author website. that's why i am curious if anything thing wrong in outbuffer
after i made some changes, i got those errors.

ubuntu@solaris:~/program$ ./testtub encrypt
*** glibc detected *** ./testtub: double free or corruption (out): 0x09f53f40 ***
======= Backtrace: =========
/lib/libc.so.6(+0x6c501)[0x17c501]
/lib/libc.so.6(+0x6dd70)[0x17dd70]
/lib/libc.so.6(cfree+0x6d)[0x180e5d]
/usr/lib/libstdc++.so.6(_ZdlPv+0x21)[0x70d441]
./testtub[0x8048e89]
./testtub[0x8048ce1]
/lib/libc.so.6(__libc_start_main+0xe7)[0x126ce7]
./testtub[0x8048931]
======= Memory map: ========
00110000-00267000 r-xp 00000000 08:01 539276     /lib/libc-2.12.1.so
00267000-00269000 r--p 00157000 08:01 539276     /lib/libc-2.12.1.so
00269000-0026a000 rw-p 00159000 08:01 539276     /lib/libc-2.12.1.so
0026a000-0026d000 rw-p 00000000 00:00 0
00663000-00742000 r-xp 00000000 08:01 265988     /usr/lib/libstdc++.so.6.0.14
00742000-00746000 r--p 000de000 08:01 265988     /usr/lib/libstdc++.so.6.0.14
00746000-00747000 rw-p 000e2000 08:01 265988     /usr/lib/libstdc++.so.6.0.14
00747000-0074e000 rw-p 00000000 00:00 0
008db000-008f7000 r-xp 00000000 08:01 537989     /lib/ld-2.12.1.so
008f7000-008f8000 r--p 0001b000 08:01 537989     /lib/ld-2.12.1.so
008f8000-008f9000 rw-p 0001c000 08:01 537989     /lib/ld-2.12.1.so
0092f000-00930000 r-xp 00000000 00:00 0          [vdso]
00afb000-00b1f000 r-xp 00000000 08:01 539282     /lib/libm-2.12.1.so
00b1f000-00b20000 r--p 00023000 08:01 539282     /lib/libm-2.12.1.so
00b20000-00b21000 rw-p 00024000 08:01 539282     /lib/libm-2.12.1.so
00ca9000-00cc3000 r-xp 00000000 08:01 526900     /lib/libgcc_s.so.1
00cc3000-00cc4000 r--p 00019000 08:01 526900     /lib/libgcc_s.so.1
00cc4000-00cc5000 rw-p 0001a000 08:01 526900     /lib/libgcc_s.so.1
08048000-0804b000 r-xp 00000000 08:01 554482     /home/ubuntu/program/testtub
0804b000-0804c000 r--p 00002000 08:01 554482     /home/ubuntu/program/testtub
0804c000-0804f000 rw-p 00003000 08:01 554482     /home/ubuntu/program/testtub
09f53000-09f74000 rw-p 00000000 00:00 0          [heap]
b7700000-b7721000 rw-p 00000000 00:00 0
b7721000-b7800000 ---p 00000000 00:00 0
b78a2000-b78a5000 rw-p 00000000 00:00 0
b78b0000-b78b4000 rw-p 00000000 00:00 0
bfd2d000-bfd4e000 rw-p 00000000 00:00 0          [stack]
Aborted (core dumped)
ubuntu@solaris:~/program$


below is my testtub.cpp
/********* testtub.cpp **********/
#include <stdio.h>
#include <iostream>
#include <stdlib.h>
#include <time.h>
#include <sys/stat.h>
#include <string.h>

#include "blowfish.h"
#include "blowfish.h2"

using namespace std;

#define BUFF_SIZE 1048576  // 1MB
#define NUM_TRIALS 100


int main ( int argc, char** argv) {

    int operMode = 0;
    struct stat st;
    string key = "abcde";
   
     //input format : ./testtub encrypt
     // or            ./testtub decrypt  

    if ( strcmp(argv[1], "encrypt") == 0 ) operMode = 1;
    if ( strcmp(argv[1], "decrypt") == 0 ) operMode = 2;

    string fileinput = "coretest", fileoutput;
   
    FILE * fin, *fout ;
    fin = fopen(fileinput.c_str(), "rb");
    if( fin == NULL)
    {
      printf("Error to open file to read!!");
    }
      
    fseek(fin, 0, SEEK_END);
    size_t size = ftell(fin);
    rewind( fin);
    fileoutput = "myoutput.txt";
    fout = fopen(fileoutput.c_str(), "wb");
    if( fout == NULL)
    {
      printf("Error to open file to write!!");
    }

    char * inbuffer= (char*) malloc(size);
    char *outbuffer =(char*) malloc(size);
    fread(inbuffer, 1, size, fin);
      
    CBlowFish A; //how to use constructor???
    unsigned char bfkey[] = { 123 };  
    A.Initialize(bfkey, sizeof(bfkey)/sizeof(unsigned char));

    if ( operMode == 1)
        A.Encode((unsigned char*)inbuffer, (unsigned char*)outbuffer, size);
    else
        A.Decode((unsigned char*)inbuffer, (unsigned char*)outbuffer, size);

    fwrite( outbuffer, 1,sizeof(outbuffer), fout);
   
    return 0;
}
i think i know why :)
no more core dump. However, after encryption output file has wrong size . Please help. tks.
======================
/********* testtub.cpp **********/
#include <stdio.h>
#include <iostream>
#include <stdlib.h>
#include <time.h>
#include <sys/stat.h>
#include <string.h>
#include "blowfish.h"
#include "blowfish.h2"

using namespace std;

#define BUFF_SIZE 1048576  // 1MB
#define NUM_TRIALS 100

int main ( int argc, char** argv) {

    int operMode = 0;
    struct stat st;
    string key = "abcde";
   
    if( argc != 4)
    {
        printf("input format : ./testtub operation inputfile outputfile\n");
           printf("operation is encrypt or decrypt\n");  
    }

    if ( strcmp(argv[1], "encrypt") == 0 ) operMode = 1;
    if ( strcmp(argv[1], "decrypt") == 0 ) operMode = 2;

    string fileinput = argv[2], fileoutput= argv[3];
    cout<<"fileinput :"<<fileinput<<endl;
    cout<<"fileoutput :"<<fileoutput<<endl;
   
    FILE * fin, *fout ;
    fin = fopen(fileinput.c_str(), "rb");
    if( fin == NULL)
    {
      printf("Error to open file to read!!");
    }
   
    stat( fileinput.c_str(), &st);
    size_t size = st.st_size;

    fout = fopen(fileoutput.c_str(), "wb");
    if( fout == NULL)
    {
      printf("Error to open file to write!!");
    }
    char * inbuffer= (char*) malloc(size+ 1);
    char *outbuffer =(char*) malloc(size+ 1);
   
    fread(inbuffer, 1, size, fin);
     
    CBlowFish A;
    unsigned char bfkey[] = { 123 };  
    A.Initialize(bfkey, sizeof(bfkey)/sizeof(unsigned char));

    if ( operMode == 1)
        A.Encode((unsigned char*)inbuffer, (unsigned char*)outbuffer, size);
    else
        A.Decode((unsigned char*)inbuffer, (unsigned char*)outbuffer, size);

    fwrite( outbuffer, 1,sizeof(outbuffer), fout);
   
    return 0;
}
hi Sara,
 Could you please tell me what i did on my code? tks.
instead of unsigned char bfkey[] = { 123 }; which only has a key length of 1 you should use a key up to 56 bytes, like

  bfkey[] = { 123, 45, 19, 231, 221, 0, 89, 13, 97, 101, 2, 65, 79, 31, 41, 6, 243, 202, 187, 195 };

the fwrite shouldn't write buffer size but length of encoded/decoded output what is size.

The  'sizeof(outbuffer)' cannot work correctly cause you outbuffer is a pointer. so the sizeof(outbufffer) always is pointer size (4 or 8 depending on compiler).

generally i wouldn't read the file in total. that will fail for very big files. instead read the file in chunks same as you did it for backup.

do you know for sure that the encoded output has same size than input? you might check the docs for functions Encode, Decode.

Sara
Let me figure out it soon because i need to demo it tomorrow insteal of may 8th.I am importing compress/decompress now. The standalone code is work perfect . after import it to the backup, the compress function is ok. The weird thing is decompress just create empty file
as told the fwrite only writes 4 bytes because of the wrong sizeof. that never could have worked correctly beside you had a fixed-sized buffer before.

you should try

  fwrite( outbuffer, 1,size, fout);

Sara
After i change it as you suggest, after encrypt a file and use it to decrypt again. All files are same size.However, it can't open decrypt output file even it is a text file.
hi Sara,
I really can't find any error in my decompress function because it just copy and paste from my standalone code. Ironically, the standalone code works perfect. after i import that part to my project, it fail to work because of the gzread already return 0.
 I can't figure out why because it just copy and paste. May i open a new question about it so you can take a look at it? tks a lot.
ubuntu@ubuntu:~/program$ ./testtub encrypt test.c test1.c
fileinput :test.c
fileoutput :test1.c
EncodeReturnSize : 3360
size is:3356
ubuntu@ubuntu:~/program$ ./testtub decrypt test1.c test2.c
fileinput :test1.c
fileoutput :test2.c
size is:3356
ubuntu@ubuntu:~/program$

I compare and see test.c and test2.c almost the same except for the last few line and also the value of EncodeReturnSize and size almost same. So i believe we are in right track.

I think the clue is at this paragraph in documentation.

"// Encode pIntput into pOutput.  Input length in lSize.  Returned value
      // is length of output which will be even MOD 8 bytes.  Inputbuffer and
      // output buffer can be the same, but be sure buffer length is even MOD 8."

and
"
// Decode pIntput into pOutput.  Input length in lSize.  Input buffer and
      // output buffer can be the same, but be sure buffer length is even MOD 8."

Could you please elaborate it Sara? tks a lot.I guess we are very close to solution.


ASKER CERTIFIED SOLUTION
Avatar of sarabande
sarabande
Flag of Luxembourg image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
if done so far you would memcpy the input size into the outbuffer adn pass outbuffer+sizeof(size) to the Encode

--> did you mean Decode? .
if done so far you would memcpy the input size into the outbuffer adn pass outbuffer+sizeof(size) to the Encode.

If there is no typo error, I understand your explanation like this:

 + First of all, call the Encode with original input in order to get return value of  outsize
and correct the outsize like
          if ((outsize%8)!=0)
                outsize  += (8-(outsize%8));
 to assure it is multplie of 8. Store original input file in  and pad  space in ( in case not multiple of 8)

   + Secondly, call Encode function again with input from previous step ( always multiple of 8).

Am I right?
Now I understand more now. We are implementing method 5  in this article
http://www.di-mgt.com.au/cryptopad.html

Let me think on how padding in char *
  This code is to pad space to comply multiple of 8 in inbuffer.

    stat( fileinput.c_str(), &st);
    size_t size = st.st_size;
    size_t outsize= size;

    if( outsize %8 != 0)
    {
      outsize += (8-(outsize%8));
    }
    char * inbuffer= (char*) malloc(outsize +1);
    char *outbuffer =(char*) malloc(outsize +1);
   
    fread(inbuffer, 1, size, fin);
    char *ptr = inbuffer;
    ptr = ptr + size;
    // need to pad space inbuffer
    for( int i = 0; i < outsize - size; i++)
    {
      *ptr= ' ';
         ptr++;
    }

Is it right?
I just finished it, but using ssh hihi
do you want to take a look at my code? it reads portion of file and encrypt until it finish.
begintolearn, because of

Inputbuffer and output buffer can be the same, but be sure buffer length is even MOD 8.


you would need to allocate a size which is a multiple of 8 for both input and output buffer. make the input buffer all zero so that the last bytes are well defined and not garbage. the problem is if you read the outputfile back you might get a bigger size than that of the original input file because of the rounding up to a multiple of 8. so i think there is no reliable way to get the original size back. therefore i would store the original input size at begin of the output file similar we didi it when sending messages. so you should do two writes to the output file. first the size value as size_t like

   fwrite((char*)&inputsize, 1, sizeof(inputsize), fout);

second the outbuffer with full length as calculated.

Sara


i will implement that idea once i get home tonight. Tks Sara. Blowfish is harder to use in comparison to ssh
i think there is no reliable way to get the original size back. therefore i would store the original input size at begin of the output file similar we didi it when sending messages. so you should do two writes to the output file.

--> I think the original size must be the input file size before Encode because no matter what it encodes, after decoding, it must get back to the original size. If so, the Decode gonna get the EncodeReturnSize as one parameter.
That's why I change my code like this below:
---------------------------------------

/********* testtub.cpp **********/
#include <stdio.h>
#include <iostream>
#include <stdlib.h>
#include <time.h>
#include <sys/stat.h>
#include <string.h>
#include "blowfish.h"
#include "blowfish.h2"

using namespace std;

#define BUFF_SIZE 1048576  // 1MB
#define NUM_TRIALS 100

int main ( int argc, char** argv) {

    int operMode = 0;
    struct stat st;
   
    if( argc != 4)
    {
        printf("input format : ./testtub operation inputfile outputfile\n");
           printf("operation is encrypt or decrypt\n");  
    }

    if ( strcmp(argv[1], "encrypt") == 0 ) operMode = 1;
    if ( strcmp(argv[1], "decrypt") == 0 ) operMode = 2;

    string fileinput = argv[2], fileoutput= argv[3];

   
    FILE * fin, *fout ;
    fin = fopen(fileinput.c_str(), "rb");
    if( fin == NULL)
    {
      printf("Error to open file to read!!");
    }
   
    stat( fileinput.c_str(), &st);
    size_t size = st.st_size;
    size_t outsize= size;

    if( outsize %8 != 0)
    {
      outsize += (8-(outsize%8));
    }
    char * inbuffer= (char*) malloc(outsize +1);
    char *outbuffer =(char*) malloc(outsize +1);

    memset(inbuffer, '\0', outsize +1);
   
    fread(inbuffer, 1, size, fin);
    char *ptr = inbuffer;
    ptr = ptr + size;
    // need to pad space inbuffer
    for( int i = 0; i < outsize - size; i++)
    {
      *ptr= 0;
         ptr++;
    }
    fout = fopen(fileoutput.c_str(), "wb");
    if( fout == NULL)
    {
      printf("Error to open file to write!!");
    }  
    CBlowFish A;
    unsigned char bfkey[] = { 123, 45, 19, 231, 221, 0, 89, 13, 97, 101, 2, 65, 79, 31, 41, 6, 243, 202, 187, 195 };
    A.Initialize(bfkey, sizeof(bfkey)/sizeof(unsigned char));
 
    int EncodeReturnSize,DecodeReturnSize ;
      
    if ( operMode == 1)
    {
        EncodeReturnSize = A.Encode((unsigned char*)inbuffer, (unsigned char*)outbuffer, size);
        cout<<"EncodeReturnSize : "<<EncodeReturnSize<<endl;      
    }    
    else
    {
         A.Decode((unsigned char*)inbuffer, (unsigned char*)outbuffer, EncodeReturnSize);
    }  

    cout<<"size is:"<<size<<endl;
    fwrite( outbuffer, 1,size, fout);
   
    return 0;
}
i think the size of the input buffer also should made a multiple of 8. look at the requirements for Encode function. it has only one size as argument and this should be a multiple of 8.

what is the output for EncodeReturnSize?

if it was greater than input size, Encode might get problems to encode the last bytes correctly, or it could access the input buffer outside of allocated size what will not crash but could give strange results at end of buffer. in any case you should increase the allocated size of input buffer to a multiple of 8. you also should try with binary files which have an odd size whether encode and decode give same file contents again.

Sara

Sara
first of all, without making inputbuffer multiple of 8, I create 80 byte input file. the output of Encode is 80 byte. and EncodeReturnSize is 80 . It seems good. Then when i run decode, it has segmenation core at fwrite().
Let me change input buffer size and test again.
stat( fileinput.c_str(), &st);
    size_t size = st.st_size;
    size_t outsize= size;

    if( outsize %8 != 0)
    {
      outsize += (8-(outsize%8));
    }
    char * inbuffer= (char*) malloc(outsize +1);
    char *outbuffer =(char*) malloc(outsize +1);
--> inbuffer is multiple of 8
latest mesage:

Core was generated by `./testtub decrypt encryptoutput.tx decryptoutput.txt'.
Program terminated with signal 11, Segmentation fault.
#0  0x006756ac in fread () from /lib/libc.so.6
ubuntu@ubuntu:~/program$ ./testtub decrypt encryptoutput.tx decryptoutput.txt
Error to open file to read!!size is:134537716
Segmentation fault (core dumped)


--> but encryptoutput is 80 byte. and size is 134537716 !!!!!!!!!!!!!!!!
let me start over with the input file to test. input file for a to test will be a.txt, after encode become b.txt, after decode become c.txt. So a.txt and c.txt must be the same. I easily make mistake in typing. sorry about it Sara.
ubuntu@ubuntu:~/program$ ./testtub encrypt a.txt b.txt
size is:80
result is 80
EncodeReturnSize : 80
ubuntu@ubuntu:~/program$ ./testtub decrypt b.txt c.txt
size is:80
result is 80
ubuntu@ubuntu:~/program$


However, when i open c.txt, i see red message " gedit has not been able to detect the character encoding.
Please check that you are not trying to open a binary file.
Select a character encoding from the menu and try again."
I use kdiff3 to compare a.txt and c.txt . you can see in the pic.
Screenshot.png
i was wondering about that statement:

     ptr = ptr + size;

you set ptr to end of inbuffer and then do a loop from 0 to outsize where you set *ptr = 0; and then increment the ptr.

i don't know whether that causes your issues but in any case you write outside of allocated memory.

Sara
I think that statement is safe because ptr is set to the end of inbuffer, then do a loop from 0 to the difference of ( outsize -size). I just verified with the current 80-byte input file for encrypt, it just ignore below portion code:

char *ptr = inbuffer;
    ptr = ptr + size;
    // need to pad space inbuffer
    for( int i = 0; i < outsize - size; i++)
    {
         cout<<"padding"<<endl;
      *ptr= 0;
         ptr++;
    }

ok. i didn't see the i < outsize - size .

Sara
i used the ssh which is much easier API. i have no idea why the author creates some complicated API interface like this.
if it works it is best.

probably the blowfish had worked if you wouldn't have cut the outsize to size. i mean i have read that blowfish encoding always is dependent of whole input. so not providing an input size which is  a multiple of 8 may have caused the problems.

Sara
I really want to make it work :)
i would try to pass outsize into the ncode function.

and check that outsize equals to EncodeReturnSize (operMode == 1) or equals to DecodeReturnSize(operMode == 2)

then use

   fwrite( outbuffer, 1,outsize, fout);

that should give no error and a c.txt which only has a difference in the last bytes from a.txt

if it works so far we could go to solve the odd size problem.

Sara


let me test it.
we don't know how to obtain DecodeReturnSize. I  made change based on your suggestion. Same output as the screen pic i posted .  
Hi Sara,
I give up on this. Sorry because I need to focus on final exam preparation. I am appreciated you help during last 3 months. I will see you in September.
good luck.

i'll see if i find some time to install the blowfish on my system to verify your results.

Sara
letl me  know when you test it .TKS.
oh hi Sara,
Have you ever written any program that follow finite state machine? or when do we need to follow that mode? tks.
yes, i have written such programs. though not in an academical context what means i can't help you with a starter.

as far as i understand the finite state machine is a design pattern which pretty well can be used when you can divide your problem into a finite number of states and transactions where the latters would move the 'process' (machine) from one state to another. a simple example is a machine which has states 'on' and 'off' and transactions to go from 'off' to 'on' and back.

did you already look on wikepedia for that topic?

Sara
oh i read Transport Layer chapter and they talked about it. That's why I wonder. Now I can see the purpose of your design more and more clearer.