public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* *.c no error, *.cpp a error
@ 2003-12-21 20:24 Karol Krizka
  2004-01-06 18:38 ` Jim Wilson
  0 siblings, 1 reply; 2+ messages in thread
From: Karol Krizka @ 2003-12-21 20:24 UTC (permalink / raw)
  To: gcc-bugs

Hello,
I have problem. When I try to compile a file (attached bellow) ending in
.c with gcc, I get no error. But when I copy the file to ending with
.cpp, and try to compile it with g++, I get the following errors:

/usr/include/md5.h: In function `void hmac_md5(unsigned char*, int,
unsigned
   char*, int, char*)':
/usr/include/md5.h:38: error: too many arguments to function `void
MD5Init()'
hmac.cpp:12: error: at this point in file
/usr/include/md5.h:39: error: too many arguments to function `void
MD5Update()'
hmac.cpp:13: error: at this point in file
/usr/include/md5.h:41: error: too many arguments to function `void
MD5Final()'
hmac.cpp:14: error: at this point in file
/usr/include/md5.h:38: error: too many arguments to function `void
MD5Init()'
hmac.cpp:30: error: at this point in file
/usr/include/md5.h:39: error: too many arguments to function `void
MD5Update()'
hmac.cpp:31: error: at this point in file
/usr/include/md5.h:39: error: too many arguments to function `void
MD5Update()'
hmac.cpp:32: error: at this point in file
/usr/include/md5.h:41: error: too many arguments to function `void
MD5Final()'
hmac.cpp:33: error: at this point in file
/usr/include/md5.h:38: error: too many arguments to function `void
MD5Init()'
hmac.cpp:34: error: at this point in file
/usr/include/md5.h:39: error: too many arguments to function `void
MD5Update()'
hmac.cpp:35: error: at this point in file
/usr/include/md5.h:39: error: too many arguments to function `void
MD5Update()'
hmac.cpp:36: error: at this point in file
/usr/include/md5.h:41: error: too many arguments to function `void
MD5Final()'
hmac.cpp:37: error: at this point in file

I compile it with, gcc hmac.c -lsasl, and g++ hmac.cpp -lsasl. The file
contains a hmac function, and of course a main() that will test it. I
was trying to use the hmac function in /usr/include/hmac-md5.h, but have
no idea what to link it against.

hmac.c: (without main(), obtained from
http://www.faqs.org/rfcs/rfc2104.html)
-------------------------------------------------------------------------
#include <md5global.h>
#include <md5.h>
/*
** Function: hmac_md5
*/

void
hmac_md5(text, text_len, key, key_len, digest)
unsigned char*  text;                /* pointer to data stream */
int             text_len;            /* length of data stream */
unsigned char*  key;                 /* pointer to authentication key */
int             key_len;             /* length of authentication key */
caddr_t         digest;              /* caller digest to be filled in */

{
        MD5_CTX context;
        unsigned char k_ipad[65];    /* inner padding -
                                      * key XORd with ipad
                                      */
        unsigned char k_opad[65];    /* outer padding -
                                      * key XORd with opad
                                      */
        unsigned char tk[16];
        int i;
        /* if key is longer than 64 bytes reset it to key=MD5(key) */
        if (key_len > 64) {

                MD5_CTX      tctx;

                MD5Init(&tctx);
                MD5Update(&tctx, key, key_len);
                MD5Final(tk, &tctx);

                key = tk;
                key_len = 16;
        }

        /*
         * the HMAC_MD5 transform looks like:
         *
         * MD5(K XOR opad, MD5(K XOR ipad, text))
         *
         * where K is an n byte key
         * ipad is the byte 0x36 repeated 64 times

         * opad is the byte 0x5c repeated 64 times
         * and text is the data being protected
         */

        /* start out by storing key in pads */
        bzero( k_ipad, sizeof k_ipad);
        bzero( k_opad, sizeof k_opad);
        bcopy( key, k_ipad, key_len);
        bcopy( key, k_opad, key_len);

        /* XOR key with ipad and opad values */
        for (i=0; i<64; i++) {
                k_ipad[i] ^= 0x36;
                k_opad[i] ^= 0x5c;
        }
        /*
         * perform inner MD5
         */
        MD5Init(&context);                   /* init context for 1st
                                              * pass */
        MD5Update(&context, k_ipad, 64)      /* start with inner pad */
        MD5Update(&context, text, text_len); /* then text of datagram */
        MD5Final(digest, &context);          /* finish up 1st pass */
        /*
         * perform outer MD5
         */
        MD5Init(&context);                   /* init context for 2nd
                                              * pass */
        MD5Update(&context, k_opad, 64);     /* start with outer pad */
        MD5Update(&context, digest, 16);     /* then results of 1st
                                              * hash */
        MD5Final(digest, &context);          /* finish up 2nd pass */
}

-- 
Karol Krizka <roadkillbunny@msn.com>


^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: *.c no error, *.cpp a error
  2003-12-21 20:24 *.c no error, *.cpp a error Karol Krizka
@ 2004-01-06 18:38 ` Jim Wilson
  0 siblings, 0 replies; 2+ messages in thread
From: Jim Wilson @ 2004-01-06 18:38 UTC (permalink / raw)
  To: Karol Krizka; +Cc: gcc-bugs

Karol Krizka wrote:
> /usr/include/md5.h:38: error: too many arguments to function `void
> MD5Init()'

This isn't a gcc problem.  This is a problem with the header files, 
which are not C++ safe by default.  C++ requires prototypes for 
functions, the C language does not.  Or more specifically,
	void MD5Update();
means something different in C++ than it means in C.

You can partly work around this by adding -DPROTOTYPES=1.  Even with 
that though, there are still lots of problems with compiling this code 
as C++.  I get over a hundred errors using gcc-3.2.
-- 
Jim Wilson, GNU Tools Support, http://www.SpecifixInc.com


^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2004-01-06 18:38 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2003-12-21 20:24 *.c no error, *.cpp a error Karol Krizka
2004-01-06 18:38 ` Jim Wilson

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).