mirror of
git://git.gnupg.org/gnupg.git
synced 2024-11-04 20:38:50 +01:00
* keydb.h, pkclist.c (select_algo_from_prefs, algo_available): Pass a
union for preference hints rather than doing void * games. * sign.c (sign_file): Use it here.
This commit is contained in:
parent
2a31983ef8
commit
cb117d7457
@ -1,5 +1,10 @@
|
|||||||
2006-06-28 David Shaw <dshaw@jabberwocky.com>
|
2006-06-28 David Shaw <dshaw@jabberwocky.com>
|
||||||
|
|
||||||
|
* keydb.h, pkclist.c (select_algo_from_prefs, algo_available):
|
||||||
|
Pass a union for preference hints rather than doing void * games.
|
||||||
|
|
||||||
|
* sign.c (sign_file): Use it here.
|
||||||
|
|
||||||
* sign.c (sign_file): When signing with multiple DSA keys, one
|
* sign.c (sign_file): When signing with multiple DSA keys, one
|
||||||
being DSA1 and one being DSA2 and encrypting at the same time, if
|
being DSA1 and one being DSA2 and encrypting at the same time, if
|
||||||
the recipient preferences give a hash that can work with the DSA2
|
the recipient preferences give a hash that can work with the DSA2
|
||||||
|
@ -177,9 +177,14 @@ void show_revocation_reason( PKT_public_key *pk, int mode );
|
|||||||
int check_signatures_trust( PKT_signature *sig );
|
int check_signatures_trust( PKT_signature *sig );
|
||||||
void release_pk_list( PK_LIST pk_list );
|
void release_pk_list( PK_LIST pk_list );
|
||||||
int build_pk_list( STRLIST rcpts, PK_LIST *ret_pk_list, unsigned use );
|
int build_pk_list( STRLIST rcpts, PK_LIST *ret_pk_list, unsigned use );
|
||||||
int algo_available( preftype_t preftype, int algo, void *hint );
|
union pref_hint
|
||||||
|
{
|
||||||
|
int digest_length;
|
||||||
|
};
|
||||||
|
int algo_available( preftype_t preftype, int algo,
|
||||||
|
const union pref_hint *hint );
|
||||||
int select_algo_from_prefs( PK_LIST pk_list, int preftype,
|
int select_algo_from_prefs( PK_LIST pk_list, int preftype,
|
||||||
int request, void *hint );
|
int request, const union pref_hint *hint );
|
||||||
int select_mdc_from_pklist (PK_LIST pk_list);
|
int select_mdc_from_pklist (PK_LIST pk_list);
|
||||||
|
|
||||||
/*-- skclist.c --*/
|
/*-- skclist.c --*/
|
||||||
|
@ -1186,7 +1186,7 @@ build_pk_list( STRLIST rcpts, PK_LIST *ret_pk_list, unsigned int use )
|
|||||||
preference list, so I'm including it. -dms */
|
preference list, so I'm including it. -dms */
|
||||||
|
|
||||||
int
|
int
|
||||||
algo_available( preftype_t preftype, int algo, void *hint )
|
algo_available( preftype_t preftype, int algo, const union pref_hint *hint )
|
||||||
{
|
{
|
||||||
if( preftype == PREFTYPE_SYM )
|
if( preftype == PREFTYPE_SYM )
|
||||||
{
|
{
|
||||||
@ -1210,18 +1210,18 @@ algo_available( preftype_t preftype, int algo, void *hint )
|
|||||||
}
|
}
|
||||||
else if( preftype == PREFTYPE_HASH )
|
else if( preftype == PREFTYPE_HASH )
|
||||||
{
|
{
|
||||||
if(hint)
|
if(hint && hint->digest_length)
|
||||||
{
|
{
|
||||||
if((*(int *)hint)!=20 || opt.flags.dsa2)
|
if(hint->digest_length!=20 || opt.flags.dsa2)
|
||||||
{
|
{
|
||||||
/* If --enable-dsa2 is set or the hash isn't 160 bits
|
/* If --enable-dsa2 is set or the hash isn't 160 bits
|
||||||
(which implies DSA2), then we'll accept a hash that
|
(which implies DSA2), then we'll accept a hash that
|
||||||
is larger than we need. Otherwise we won't accept
|
is larger than we need. Otherwise we won't accept
|
||||||
any hash that isn't exactly the right size. */
|
any hash that isn't exactly the right size. */
|
||||||
if((*(int *)hint) > md_digest_length(algo))
|
if(hint->digest_length > md_digest_length(algo))
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
else if(((*(int *)hint) != md_digest_length(algo)))
|
else if(hint->digest_length != md_digest_length(algo))
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1259,7 +1259,8 @@ algo_available( preftype_t preftype, int algo, void *hint )
|
|||||||
* Return -1 if we could not find an algorithm.
|
* Return -1 if we could not find an algorithm.
|
||||||
*/
|
*/
|
||||||
int
|
int
|
||||||
select_algo_from_prefs(PK_LIST pk_list, int preftype, int request, void *hint)
|
select_algo_from_prefs(PK_LIST pk_list, int preftype,
|
||||||
|
int request, const union pref_hint *hint)
|
||||||
{
|
{
|
||||||
PK_LIST pkr;
|
PK_LIST pkr;
|
||||||
u32 bits[8];
|
u32 bits[8];
|
||||||
|
14
g10/sign.c
14
g10/sign.c
@ -866,7 +866,10 @@ sign_file( STRLIST filenames, int detached, STRLIST locusr,
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
int hashlen=0,algo,smartcard=0;
|
union pref_hint hint;
|
||||||
|
int algo,smartcard=0;
|
||||||
|
|
||||||
|
hint.digest_length=0;
|
||||||
|
|
||||||
/* Of course, if the recipient asks for something
|
/* Of course, if the recipient asks for something
|
||||||
unreasonable (like the wrong hash for a DSA key) then
|
unreasonable (like the wrong hash for a DSA key) then
|
||||||
@ -894,8 +897,8 @@ sign_file( STRLIST filenames, int detached, STRLIST locusr,
|
|||||||
/* Pick a hash that is large enough for our
|
/* Pick a hash that is large enough for our
|
||||||
largest q */
|
largest q */
|
||||||
|
|
||||||
if(hashlen<temp_hashlen)
|
if(hint.digest_length<temp_hashlen)
|
||||||
hashlen=temp_hashlen;
|
hint.digest_length=temp_hashlen;
|
||||||
}
|
}
|
||||||
else if(sk_rover->sk->is_protected
|
else if(sk_rover->sk->is_protected
|
||||||
&& sk_rover->sk->protect.s2k.mode==1002)
|
&& sk_rover->sk->protect.s2k.mode==1002)
|
||||||
@ -909,10 +912,9 @@ sign_file( STRLIST filenames, int detached, STRLIST locusr,
|
|||||||
single hash for all signatures. All this may well have
|
single hash for all signatures. All this may well have
|
||||||
to change as the cards add algorithms. */
|
to change as the cards add algorithms. */
|
||||||
|
|
||||||
if(!smartcard || (smartcard && hashlen==20))
|
if(!smartcard || (smartcard && hint.digest_length==20))
|
||||||
if((algo=
|
if((algo=
|
||||||
select_algo_from_prefs(pk_list,PREFTYPE_HASH,-1,
|
select_algo_from_prefs(pk_list,PREFTYPE_HASH,-1,&hint))>0)
|
||||||
hashlen?&hashlen:NULL))>0)
|
|
||||||
recipient_digest_algo=algo;
|
recipient_digest_algo=algo;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user