diff options
author | Werner Koch <[email protected]> | 1998-09-14 15:49:56 +0000 |
---|---|---|
committer | Werner Koch <[email protected]> | 1998-09-14 15:49:56 +0000 |
commit | c07a88da5d293db89726767fef58090177b423f4 (patch) | |
tree | 7ea1d5d10d3e65cf29c4b03616772fb4c829f4d1 /g10/seskey.c | |
parent | Updates (diff) | |
download | gnupg-c07a88da5d293db89726767fef58090177b423f4.tar.gz gnupg-c07a88da5d293db89726767fef58090177b423f4.zip |
New release
Diffstat (limited to 'g10/seskey.c')
-rw-r--r-- | g10/seskey.c | 20 |
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); } |