mirror of
git://git.gnupg.org/gnupg.git
synced 2025-07-02 22:46:30 +02:00
2003-08-18 Timo Schulz <twoaday@freakmail.de>
* encode.c (encode_sesskey): Checked the code and removed the warning since all compatibility checks with PGP succeeded. * mainproc.c (symkey_decrypt_sesskey): Better check for the algorithm and check the return values of some functions.
This commit is contained in:
parent
4eb5165019
commit
73b5da4c7d
3 changed files with 64 additions and 49 deletions
47
g10/encode.c
47
g10/encode.c
|
@ -78,34 +78,37 @@ encode_store( const char *filename )
|
|||
}
|
||||
|
||||
static void
|
||||
encode_sesskey( DEK *dek, DEK **ret_dek, byte *enckey )
|
||||
encode_sesskey (DEK * dek, DEK ** ret_dek, byte * enckey)
|
||||
{
|
||||
#warning This functions needs a review.
|
||||
CIPHER_HANDLE hd;
|
||||
DEK *c;
|
||||
byte buf[33];
|
||||
CIPHER_HANDLE hd;
|
||||
DEK * c;
|
||||
byte buf[33];
|
||||
|
||||
assert ( dek->keylen < 32 );
|
||||
assert (dek->keylen < 32);
|
||||
|
||||
c = xcalloc (1, sizeof *c );
|
||||
c->keylen = dek->keylen;
|
||||
c->algo = dek->algo;
|
||||
make_session_key( c );
|
||||
/*log_hexdump( "thekey", c->key, c->keylen );*/
|
||||
c = xcalloc (1, sizeof *c);
|
||||
c->keylen = dek->keylen;
|
||||
c->algo = dek->algo;
|
||||
make_session_key (c);
|
||||
/*log_hexdump ("thekey", c->key, c->keylen);*/
|
||||
|
||||
buf[0] = c->algo;
|
||||
memcpy( buf + 1, c->key, c->keylen );
|
||||
/* the encrypted session key is prefixed with a one-octet algorithm id */
|
||||
buf[0] = c->algo;
|
||||
memcpy (buf + 1, c->key, c->keylen);
|
||||
|
||||
/* due to the fact that we use only checked values, consider each
|
||||
failure as fatal. */
|
||||
if (gcry_cipher_open (&hd, dek->algo, GCRY_CIPHER_MODE_CFB, 1))
|
||||
BUG();
|
||||
if (gcry_cipher_setkey (hd, dek->key, dek->keylen))
|
||||
BUG();
|
||||
gcry_cipher_setiv (hd, NULL, 0);
|
||||
gcry_cipher_encrypt (hd, buf, c->keylen + 1, NULL, 0);
|
||||
gcry_cipher_close (hd);
|
||||
|
||||
gcry_cipher_open (&hd, dek->algo, GCRY_CIPHER_MODE_CFB, 1 );
|
||||
gcry_cipher_setkey( hd, dek->key, dek->keylen );
|
||||
gcry_cipher_setiv( hd, NULL, 0 );
|
||||
gcry_cipher_encrypt( hd, buf, c->keylen + 1, NULL, 0 );
|
||||
gcry_cipher_close( hd );
|
||||
|
||||
memcpy( enckey, buf, c->keylen + 1 );
|
||||
wipememory( buf, sizeof buf ); /* burn key */
|
||||
*ret_dek = c;
|
||||
memcpy (enckey, buf, c->keylen + 1);
|
||||
wipememory (buf, sizeof buf); /* burn key */
|
||||
*ret_dek = c;
|
||||
}
|
||||
|
||||
/* We try very hard to use a MDC */
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue