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).