[Okta Webinar] Learn how to a build a cloud-first strategyRegister Now

x
?
Solved

blowfish

Posted on 2011-04-28
75
Medium Priority
?
1,128 Views
Last Modified: 2012-08-14
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
0
Comment
Question by:BeginToLearn
  • 52
  • 13
  • 8
  • +2
75 Comments
 
LVL 40

Expert Comment

by:mrjoltcola
ID: 35486316
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

0
 
LVL 85

Expert Comment

by:ozo
ID: 35486342
Do you have both BIG_ENDIAN and LITTLE_ENDIAN defined?
You should define only the one appropriate for your machine.
0
 

Author Comment

by:BeginToLearn
ID: 35486343
let me move BIGG_ENDIAN because my system is LITTLE_ENDIAN.
0
Concerto Cloud for Software Providers & ISVs

Can Concerto Cloud Services help you focus on evolving your application offerings, while delivering the best cloud experience to your customers? From DevOps to revenue models and customer support, the answer is yes!

Learn how Concerto can help you.

 
LVL 86

Expert Comment

by:jkr
ID: 35486364
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.
0
 

Author Comment

by:BeginToLearn
ID: 35486470
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>
0
 

Author Comment

by:BeginToLearn
ID: 35486490
i think the reason is i don't know how to compile so it can link objects together.
0
 
LVL 86

Expert Comment

by:jkr
ID: 35486521
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)
0
 

Author Comment

by:BeginToLearn
ID: 35486581
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.
0
 
LVL 86

Expert Comment

by:jkr
ID: 35486625
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
0
 

Author Comment

by:BeginToLearn
ID: 35486652
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
0
 
LVL 86

Expert Comment

by:jkr
ID: 35486677
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

0
 

Author Comment

by:BeginToLearn
ID: 35486749
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
0
 
LVL 86

Expert Comment

by:jkr
ID: 35486811
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.
0
 

Author Comment

by:BeginToLearn
ID: 35486818
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.

0
 
LVL 86

Expert Comment

by:jkr
ID: 35486857
Hm, the whole sample is a little outdated... http://www.schneier.com/code/bfsh-con.zip looks a lot better.
0
 

Author Comment

by:BeginToLearn
ID: 35486876
let me move on the bfsh-con. downloading and extracting now
0
 

Author Comment

by:BeginToLearn
ID: 35486986
i am editing to make same line now
0
 

Author Comment

by:BeginToLearn
ID: 35487286
oh jkr, i emailed to your email. Could you please check  your email? tks.
0
 
LVL 86

Expert Comment

by:jkr
ID: 35487369
Um, sorry, but email communication to address questions on EE is strictly forbidden...
0
 

Author Comment

by:BeginToLearn
ID: 35487429
I gonna write the main for it.
0
 
LVL 86

Expert Comment

by:jkr
ID: 35487522
Why don't you use the one in BFTest.cpp?
0
 

Author Comment

by:BeginToLearn
ID: 35487541
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.
0
 

Author Comment

by:BeginToLearn
ID: 35489216
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.
0
 

Author Comment

by:BeginToLearn
ID: 35489607
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
0
 
LVL 35

Expert Comment

by:sarabande
ID: 35489886
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

0
 

Author Comment

by:BeginToLearn
ID: 35491641
after update, it gets "segmentation fault"
0
 
LVL 35

Expert Comment

by:sarabande
ID: 35491829
did you check the core file with the debugger? it should point you exactly to the faulty statement.

Sara
0
 

Author Comment

by:BeginToLearn
ID: 35492260
let me try because i just arrived school
0
 

Author Comment

by:BeginToLearn
ID: 35492541
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 .
0
 

Author Comment

by:BeginToLearn
ID: 35492591
and now

Program terminated with signal 11, Segmentation fault.
#0  0x00bb1b4c in fwrite () from /lib/libc.so.6
0
 

Author Comment

by:BeginToLearn
ID: 35492615
i can't see anything wrong with this
fwrite( outbuffer, 1,sizeof(outbuffer), fout);

do you see anything wrong?
0
 

Author Comment

by:BeginToLearn
ID: 35492673
except for testtubcpp, other files were downloaded from the author website. that's why i am curious if anything thing wrong in outbuffer
0
 

Author Comment

by:BeginToLearn
ID: 35493737
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;
}
0
 

Author Comment

by:BeginToLearn
ID: 35496226
i think i know why :)
0
 

Author Comment

by:BeginToLearn
ID: 35496280
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;
}
0
 

Author Comment

by:BeginToLearn
ID: 35503536
hi Sara,
 Could you please tell me what i did on my code? tks.
0
 
LVL 35

Expert Comment

by:sarabande
ID: 35503947
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
0
 

Author Comment

by:BeginToLearn
ID: 35505746
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
0
 
LVL 35

Expert Comment

by:sarabande
ID: 35506079
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
0
 

Author Comment

by:BeginToLearn
ID: 35506185
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.
0
 

Author Comment

by:BeginToLearn
ID: 35506567
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.
0
 

Author Comment

by:BeginToLearn
ID: 35510365
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.


0
 
LVL 35

Accepted Solution

by:
sarabande earned 2000 total points
ID: 35511274
the Encode and Decode functions do return a size parameter which is made even (a multiple of 8) size. you should consider that already when creating the input/output buffers. unfortunately it also means that you need to store the (original) size with the output file (similar to us sending filesize prior to buffers on backup) cause you wouldn't be able to retrieve the original input size from the encrypted output.

so you would correct the outsize like

if ((outsize%8)!=0)
    outsize  += (8-(outsize%8));

and before allocating memory you would add space for storing the input size.

if done so far you would memcpy the input size into the outbuffer adn pass outbuffer+sizeof(size) to the Encode.

Sara
0
 

Author Comment

by:BeginToLearn
ID: 35513391
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? .
0
 

Author Comment

by:BeginToLearn
ID: 35513528
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?
0
 

Author Comment

by:BeginToLearn
ID: 35513992
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 *
0
 

Author Comment

by:BeginToLearn
ID: 35514228
  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?
0
 

Author Comment

by:BeginToLearn
ID: 35517746
I just finished it, but using ssh hihi
0
 

Author Comment

by:BeginToLearn
ID: 35687630
do you want to take a look at my code? it reads portion of file and encrypt until it finish.
0
 
LVL 35

Expert Comment

by:sarabande
ID: 35692036
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


0
 

Author Comment

by:BeginToLearn
ID: 35692078
i will implement that idea once i get home tonight. Tks Sara. Blowfish is harder to use in comparison to ssh
0
 

Author Comment

by:BeginToLearn
ID: 35695831
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;
}
0
 
LVL 35

Expert Comment

by:sarabande
ID: 35696049
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
0
 

Author Comment

by:BeginToLearn
ID: 35696142
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.
0
 

Author Comment

by:BeginToLearn
ID: 35696151
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
0
 

Author Comment

by:BeginToLearn
ID: 35696170
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
0
 

Author Comment

by:BeginToLearn
ID: 35696196
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 !!!!!!!!!!!!!!!!
0
 

Author Comment

by:BeginToLearn
ID: 35696208
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.
0
 

Author Comment

by:BeginToLearn
ID: 35696215
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."
0
 

Author Comment

by:BeginToLearn
ID: 35696227
I use kdiff3 to compare a.txt and c.txt . you can see in the pic.
Screenshot.png
0
 
LVL 35

Expert Comment

by:sarabande
ID: 35697076
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
0
 

Author Comment

by:BeginToLearn
ID: 35698857
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++;
    }

0
 
LVL 35

Expert Comment

by:sarabande
ID: 35699270
ok. i didn't see the i < outsize - size .

Sara
0
 

Author Comment

by:BeginToLearn
ID: 35699297
i used the ssh which is much easier API. i have no idea why the author creates some complicated API interface like this.
0
 
LVL 35

Expert Comment

by:sarabande
ID: 35700391
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
0
 

Author Comment

by:BeginToLearn
ID: 35701130
I really want to make it work :)
0
 
LVL 35

Expert Comment

by:sarabande
ID: 35701804
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


0
 

Author Comment

by:BeginToLearn
ID: 35701841
let me test it.
0
 

Author Comment

by:BeginToLearn
ID: 35701957
we don't know how to obtain DecodeReturnSize. I  made change based on your suggestion. Same output as the screen pic i posted .  
0
 

Author Comment

by:BeginToLearn
ID: 35710920
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.
0
 
LVL 35

Expert Comment

by:sarabande
ID: 35719560
good luck.

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

Sara
0
 

Author Comment

by:BeginToLearn
ID: 35722192
letl me  know when you test it .TKS.
0
 

Author Comment

by:BeginToLearn
ID: 35744056
oh hi Sara,
Have you ever written any program that follow finite state machine? or when do we need to follow that mode? tks.
0
 
LVL 35

Expert Comment

by:sarabande
ID: 35745037
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
0
 

Author Comment

by:BeginToLearn
ID: 35747244
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.
0

Featured Post

Vote for the Most Valuable Expert

It’s time to recognize experts that go above and beyond with helpful solutions and engagement on site. Choose from the top experts in the Hall of Fame or on the right rail of your favorite topic page. Look for the blue “Nominate” button on their profile to vote.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

When writing generic code, using template meta-programming techniques, it is sometimes useful to know if a type is convertible to another type. A good example of when this might be is if you are writing diagnostic instrumentation for code to generat…
Preface I don't like visual development tools that are supposed to write a program for me. Even if it is Xcode and I can use Interface Builder. Yes, it is a perfect tool and has helped me a lot, mainly, in the beginning, when my programs were small…
Video by: Grant
The goal of this video is to provide viewers with basic examples to understand and use for-loops in the C programming language.
The goal of the video will be to teach the user the difference and consequence of passing data by value vs passing data by reference in C++. An example of passing data by value as well as an example of passing data by reference will be be given. Bot…

873 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question