aboutsummaryrefslogtreecommitdiffstats
path: root/g10/seskey.c
diff options
context:
space:
mode:
authorWerner Koch <[email protected]>1998-09-14 15:49:56 +0000
committerWerner Koch <[email protected]>1998-09-14 15:49:56 +0000
commitc07a88da5d293db89726767fef58090177b423f4 (patch)
tree7ea1d5d10d3e65cf29c4b03616772fb4c829f4d1 /g10/seskey.c
parentUpdates (diff)
downloadgnupg-c07a88da5d293db89726767fef58090177b423f4.tar.gz
gnupg-c07a88da5d293db89726767fef58090177b423f4.zip
New release
Diffstat (limited to 'g10/seskey.c')
-rw-r--r--g10/seskey.c20
1 files changed, 19 insertions, 1 deletions
diff --git a/g10/seskey.c b/g10/seskey.c
index d4d2ab1fb..c268d1559 100644
--- a/g10/seskey.c
+++ b/g10/seskey.c
@@ -27,6 +27,7 @@
#include "cipher.h"
#include "mpi.h"
#include "main.h"
+#include "i18n.h"
/****************
@@ -35,8 +36,25 @@
void
make_session_key( DEK *dek )
{
+ CIPHER_HANDLE chd;
+ int i, rc;
+
dek->keylen = cipher_get_keylen( dek->algo ) / 8;
- randomize_buffer( dek->key, dek->keylen, 1 );
+
+ chd = cipher_open( dek->algo, CIPHER_MODE_AUTO_CFB, 1 );
+ for(i=0; i < 16; i++ ) {
+ rc = cipher_setkey( chd, dek->key, dek->keylen );
+ if( !rc ) {
+ cipher_close( chd );
+ return;
+ }
+ log_info(_("weak key created - retrying\n") );
+ /* Renew the session key until we get a non-weak key. */
+ randomize_buffer( dek->key, dek->keylen, 1 );
+ }
+ log_fatal(_(
+ "cannot avoid weak key for symmetric cipher; tried %d times!\n"),
+ i);
}