You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@santuario.apache.org by Berin Lautenbach <be...@wingsofhermes.org> on 2005/05/14 07:33:49 UTC

Re: [Patch] b64Buf to short for certs with a key length longer than 1024 bits

Done (belatedly).

Thanks!

Cheers,
	Berin

Vadim Ismailov wrote:

> 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
> <be...@wingsofhermes.org> 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 :
>>
> 
>