diff --git a/cipher/dsa.c b/cipher/dsa.c
index e23f05c..e496d69 100644
--- a/cipher/dsa.c
+++ b/cipher/dsa.c
@@ -93,6 +93,7 @@ gen_k( MPI q )
 	    progress('.');
 
 	if( !rndbuf || nbits < 32 ) {
+	    if (rndbuf) memset(rndbuf, 0, nbytes);
 	    xfree(rndbuf);
 	    rndbuf = get_random_bits( nbits, 1, 1 );
 	}
@@ -115,15 +116,18 @@ gen_k( MPI q )
 	if( !(mpi_cmp( k, q ) < 0) ) {	/* check: k < q */
 	    if( DBG_CIPHER )
 		progress('+');
+	    memset(rndbuf, 0, nbytes);
 	    continue; /* no  */
 	}
 	if( !(mpi_cmp_ui( k, 0 ) > 0) ) { /* check: k > 0 */
 	    if( DBG_CIPHER )
 		progress('-');
+	    memset(rndbuf, 0, nbytes);
 	    continue; /* no */
 	}
 	break;	/* okay */
     }
+    memset(rndbuf, 0, nbytes);
     xfree(rndbuf);
     if( DBG_CIPHER )
 	progress('\n');
