hi,

i'm trying to develop a simple application which will encrypt text file
using triple des. actually i got the code from my friend, and he's using
openssl 0.9.8a while i'm using 0.9.9b. i faced a problem when compiling the
source code using borland... i'll always get the error msg
"[C++ Error] testDes.cpp(45): E2034 Cannot convert 'des_ks_struct ( *)[16]'
to 'des_ks_struct *'"  and
"[C++ Error] testDes.cpp(45): E2342 Type mismatch in parameter 'ks1' (wanted
'des_ks_struct *', got 'des_ks_struct ( *)[16]')"

can someone please help me? thanks a lot.

the source code is below:


#pragma hdrstop

#include "testDes.h"
#include <Classes.hpp>
#include <openssl/des.h>

//---------------------------------------------------------------------------

#pragma package(smart_init)

void TRIPLEDESchipherFile()
{
   TFileStream *j = new TFileStream("source.txt",fmOpenRead);
   TFileStream *n = new TFileStream("destination.txt",fmCreate);
   AnsiString myKey = "test1234";
   int Mode = 1;

   char ch[8], outch[8]; //Encrypt every 8 byte per block
   des_cblock k1,k2,k3;
   des_key_schedule  ks1,ks2,ks3;

   des_string_to_key(myKey.SubString(1,8).c_str(),&k1);
   des_set_key_unchecked(&k1,ks1);
   des_string_to_key(myKey.SubString(9,8).c_str(),&k2);
   des_set_key_unchecked(&k2,ks2);
   des_string_to_key(myKey.SubString(17,8).c_str(),&k3);
   des_set_key_unchecked(&k3,ks3);

   if(!Mode)
       j->Seek(128, soFromBeginning);
   else
       j->Seek(0, soFromBeginning);

   int la;
   int sizefile = 0;

   for(;;)
   {
       if(sizefile < j->Size && (j->Size - sizefile) >= 8)
       {
           j->Read(ch,8);
           des_ecb3_encrypt((const_des_cblock *) ch, (des_cblock *)
outch,&ks1,&ks2,&ks3,Mode);
           n->Write(outch,8);
           sizefile += 8;
       }
       else
       {
           if(sizefile < j->Size)
           {
               j->Read(ch, j->Size -sizefile);
               for(la = (j->Size - sizefile); la < 8; la++)
               {
                   //Add some pad
                   ch[la] = ' ';
               }
               des_ecb3_encrypt((const_des_cblock *) ch, (des_cblock *)
outch,&ks1,&ks2,&ks3,Mode);
               n->Write(outch,8);
               sizefile += (j->Size -sizefile);
           }
           else
               break;
       }
   }
   FileClose(j->Handle);
   FileClose(n->Handle);
}

Reply via email to