Here's another one. OpenSSLCryptoKeyRSA.cpp line 198:
unsigned char sigVal[512];
I was using 4096 bit RSA key and it was corrupting stack during
signature verification. I changed buffer size to 1024 and it works
now. EVP_DecodeUpdate still returns 512 bytes and EVP_DecodeFinal()
returns 0 and probably 513 bytes would be enough, but I like even
numbers. Anyhow, there's a problem there.
Vadim
On Sun, 28 Nov 2004 22:36:20 +1100, Berin Lautenbach
<[EMAIL PROTECTED]> wrote:
> Michael,
>
> Thanks for that! I have just committed to CVS.
>
> Cheers,
> Berin
>
> Michael Braunoeder wrote:
> > Hi,
> >
> > I noticed some problems generating XML-signatures with certificates
> > which have a key longer than 1024 bits. DSIGSignature::sign produced an
> > signature without an errors, but when I tried to verify the signature I
> > got an "OpenSSL:RSA::verify() - Error decrypting signature" execption.
> >
> > The problem was the
> > char b64Buf[256];
> > in DSIGSignature::sign. This is to small for longer keys.
> > The attached patch changes the length to 1024. It works now for keys
> > with a key length of 2048 and 4096.
> >
> > kind regards,
> > Michael
> >
> >
> > ------------------------------------------------------------------------
> >
> > diff -r -u xml-security-c-1.1.0.orig/src/dsig/DSIGSignature.cpp
> > xml-security-c-1.1.0/src/dsig/DSIGSignature.cpp
> > --- xml-security-c-1.1.0.orig/src/dsig/DSIGSignature.cpp 2004-03-07
> > 04:20:51.000000000 +0100
> > +++ xml-security-c-1.1.0/src/dsig/DSIGSignature.cpp 2004-11-16
> > 12:07:08.000000000 +0100
> > @@ -1102,7 +1102,7 @@
> >
> > // Now check the calculated hash
> >
> > - char b64Buf[256];
> > + char b64Buf[1024];
> > unsigned int b64Len;
> > safeBuffer b64SB;
> >
> > @@ -1122,7 +1122,7 @@
> > hash,
> > hashLen,
> > (char *) b64Buf,
> > - 256);
> > + 1024);
> >
> > if (b64Len <= 0) {
> >
> > @@ -1152,7 +1152,7 @@
> > hash,
> > hashLen,
> > (char *) b64Buf,
> > - 256);
> > + 1024);
> >
> > if (b64Len <= 0) {
> >
> > @@ -1186,7 +1186,7 @@
> > hashLen,
> >
> > mp_signedInfo->getHMACOutputLength());
> >
> > - strncpy(b64Buf, (char *) b64SB.rawBuffer(), 255);
> > + strncpy(b64Buf, (char *) b64SB.rawBuffer(), 1024);
> > break;
> >
> > default :
>