Hi, first of all: could you please reassign this bug to libgnutls11? Thanks.
I found the reason for the errors after checking newer versions of gnutls (newer than the sarge version, which is based on 1.0.16). Version 1.0.20 solved the problem: http://lists.gnupg.org/pipermail/gnutls-dev/2004-August/000719.html http://lists.gnupg.org/pipermail/gnutls-dev/2004-August/000712.html The fix in 1.0.20 was not backported into the sarge gnutls package. I append it for simplicity. It would be nice if this fix could be incorporated somehow into sarge since libgnutls11 in sarge is broken without it. regards, Daniel -- ----------------------------------------------------------------- Daniel Hermann, Institut fuer Theorie der Kondensierten Materie Universitaet Karlsruhe Tel: ++49 (0)721 608-7328 Postfach 6980 Fax: ++49 (0)721 608-7779 76128 Karlsruhe, Germany email: [EMAIL PROTECTED] -----------------------------------------------------------------
--- lib/gnutls_pk.c 2004-08-04 23:36:02.000000000 +0200 +++ lib/gnutls_pk.c 2004-08-17 11:13:29.000000000 +0200 @@ -95,33 +95,15 @@ gnutls_afree(edata); return ret; } - for (i = 0; i < psize; i++) { - opaque rnd[3]; - - /* Read three random bytes that will be - * used to replace the zeros. - */ - if ( (ret=_gnutls_get_random( rnd, 3, GNUTLS_STRONG_RANDOM)) < 0) { - gnutls_assert(); - gnutls_afree(edata); - return ret; - } - /* use non zero values for - * the first two. - */ - if (rnd[0]==0) rnd[0] = 0xaf; - if (rnd[1]==0) rnd[1] = 0xae; - - if (ps[i] == 0) { - /* If the first one is zero then set it to rnd[0]. - * If the second one is zero then set it to rnd[1]. - * Otherwise add (mod 256) the two previous ones plus rnd[2], or use - * rnd[1] if the value == 0. - */ - if (i<2) ps[i] = rnd[i]; - else ps[i] = GMAX( rnd[2] + ps[i-1] + ps[i-2], rnd[1]); - } - } + for (i = 0; i < psize; i++) + while (ps[i] == 0) { + if ((ret = + _gnutls_get_random(&ps[i], 1, GNUTLS_STRONG_RANDOM)) < 0) { + gnutls_assert(); + gnutls_afree(edata); + return ret; + } + } break; case 1: /* using private key */