mirror of
git://git.gnupg.org/gnupg.git
synced 2025-07-02 22:46:30 +02:00
Support the not anymore patented IDEA cipher algorithm.
* cipher/idea.c: New. Take from Libgcrypt master and adjust for direct use in GnuPG. * cipher/idea-stub.c: Remove. * cipher/Makefile.am: Add idea.c and remove idea-stub.c rules. * configure.ac: Remove idea-stub code. * g10/gpg.c (check_permissions): Remove code path for ITEM==2. (main): Make --load-extension a dummy option. * g10/keygen.c (keygen_set_std_prefs): Include IDEA only in PGP2 compatibility mode. * g10/misc.c (idea_cipher_warn): Remove. Also remove all callers. * g10/seckey-cert.c (do_check): Remove emitting of STATUS_RSA_OR_IDEA. * g10/status.c (get_status_string): Remove STATUS_RSA_OR_IDEA. * g10/status.h (STATUS_RSA_OR_IDEA): Remove. -- To keep the number of actually used algorithms low, we support IDEA only in a basically read-only way (unless --pgp2 is used during key generation). It does not make sense to suggest the use of this old 64 bit blocksize algorithm. However, there is old data available where it might be helpful to have IDEA available.
This commit is contained in:
parent
c3a5448379
commit
b1eac93431
18 changed files with 575 additions and 452 deletions
111
g10/pkclist.c
111
g10/pkclist.c
|
@ -162,7 +162,7 @@ show_revocation_reason( PKT_public_key *pk, int mode )
|
|||
* mode: 0 = standard
|
||||
* 1 = Without key info and additional menu option 'm'
|
||||
* this does also add an option to set the key to ultimately trusted.
|
||||
* Returns:
|
||||
* Returns:
|
||||
* -2 = nothing changed - caller should show some additional info
|
||||
* -1 = quit operation
|
||||
* 0 = nothing changed
|
||||
|
@ -198,7 +198,7 @@ do_edit_ownertrust (PKT_public_key *pk, int mode,
|
|||
uppercase. Below you will find the matching strings which
|
||||
should be translated accordingly and the letter changed to
|
||||
match the one in the answer string.
|
||||
|
||||
|
||||
i = please show me more information
|
||||
m = back to the main menu
|
||||
s = skip this key
|
||||
|
@ -206,9 +206,9 @@ do_edit_ownertrust (PKT_public_key *pk, int mode,
|
|||
*/
|
||||
const char *ans = _("iImMqQsS");
|
||||
|
||||
if( !did_help )
|
||||
if( !did_help )
|
||||
{
|
||||
if( !mode )
|
||||
if( !mode )
|
||||
{
|
||||
KBNODE keyblock, un;
|
||||
|
||||
|
@ -235,7 +235,7 @@ do_edit_ownertrust (PKT_public_key *pk, int mode,
|
|||
if (un->pkt->pkt.user_id->is_primary
|
||||
&& !un->pkt->pkt.user_id->attrib_data )
|
||||
continue;
|
||||
|
||||
|
||||
if((opt.verify_options&VERIFY_SHOW_PHOTOS)
|
||||
&& un->pkt->pkt.user_id->attrib_data)
|
||||
show_photos(un->pkt->pkt.user_id->attribs,
|
||||
|
@ -247,7 +247,7 @@ do_edit_ownertrust (PKT_public_key *pk, int mode,
|
|||
|
||||
tty_printf(_(" aka \"%s\"\n"),p);
|
||||
}
|
||||
|
||||
|
||||
print_fingerprint (pk, NULL, 2);
|
||||
tty_printf("\n");
|
||||
release_kbnode (keyblock);
|
||||
|
@ -305,7 +305,7 @@ do_edit_ownertrust (PKT_public_key *pk, int mode,
|
|||
did_help = 0;
|
||||
else if( *p && p[1] )
|
||||
;
|
||||
else if( !p[1] && ((*p >= '0'+min_num) && *p <= (mode?'5':'4')) )
|
||||
else if( !p[1] && ((*p >= '0'+min_num) && *p <= (mode?'5':'4')) )
|
||||
{
|
||||
unsigned int trust;
|
||||
switch( *p )
|
||||
|
@ -331,14 +331,14 @@ do_edit_ownertrust (PKT_public_key *pk, int mode,
|
|||
}
|
||||
#if 0
|
||||
/* not yet implemented */
|
||||
else if( *p == ans[0] || *p == ans[1] )
|
||||
else if( *p == ans[0] || *p == ans[1] )
|
||||
{
|
||||
tty_printf(_("Certificates leading to an ultimately trusted key:\n"));
|
||||
show = 1;
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
else if( mode && (*p == ans[2] || *p == ans[3] || *p == CONTROL_D ) )
|
||||
else if( mode && (*p == ans[2] || *p == ans[3] || *p == CONTROL_D ) )
|
||||
{
|
||||
break ; /* back to the menu */
|
||||
}
|
||||
|
@ -357,9 +357,9 @@ do_edit_ownertrust (PKT_public_key *pk, int mode,
|
|||
return show? -2: quit? -1 : changed;
|
||||
}
|
||||
|
||||
/*
|
||||
/*
|
||||
* Display a menu to change the ownertrust of the key PK (which should
|
||||
* be a primary key).
|
||||
* be a primary key).
|
||||
* For mode values see do_edit_ownertrust ()
|
||||
*/
|
||||
int
|
||||
|
@ -416,7 +416,7 @@ do_we_trust( PKT_public_key *pk, unsigned int trustlevel )
|
|||
log_error ("invalid trustlevel %u returned from validation layer\n",
|
||||
trustlevel);
|
||||
/* fall thru */
|
||||
case TRUST_UNKNOWN:
|
||||
case TRUST_UNKNOWN:
|
||||
case TRUST_UNDEFINED:
|
||||
log_info(_("%s: There is no assurance this key belongs"
|
||||
" to the named user\n"),keystr_from_pk(pk));
|
||||
|
@ -491,7 +491,7 @@ check_signatures_trust( PKT_signature *sig )
|
|||
int rc=0;
|
||||
|
||||
rc = get_pubkey( pk, sig->keyid );
|
||||
if (rc)
|
||||
if (rc)
|
||||
{ /* this should not happen */
|
||||
log_error("Ooops; the key vanished - can't check the trust\n");
|
||||
rc = G10ERR_NO_PUBKEY;
|
||||
|
@ -513,7 +513,7 @@ check_signatures_trust( PKT_signature *sig )
|
|||
|
||||
trustlevel = get_validity (pk, NULL);
|
||||
|
||||
if ( (trustlevel & TRUST_FLAG_REVOKED) )
|
||||
if ( (trustlevel & TRUST_FLAG_REVOKED) )
|
||||
{
|
||||
write_status( STATUS_KEYREVOKED );
|
||||
if(pk->is_revoked==2)
|
||||
|
@ -524,13 +524,13 @@ check_signatures_trust( PKT_signature *sig )
|
|||
log_info(_(" This could mean that the signature is forged.\n"));
|
||||
show_revocation_reason( pk, 0 );
|
||||
}
|
||||
else if ((trustlevel & TRUST_FLAG_SUB_REVOKED) )
|
||||
else if ((trustlevel & TRUST_FLAG_SUB_REVOKED) )
|
||||
{
|
||||
write_status( STATUS_KEYREVOKED );
|
||||
log_info(_("WARNING: This subkey has been revoked by its owner!\n"));
|
||||
show_revocation_reason( pk, 0 );
|
||||
}
|
||||
|
||||
|
||||
if ((trustlevel & TRUST_FLAG_DISABLED))
|
||||
log_info (_("Note: This key has been disabled.\n"));
|
||||
|
||||
|
@ -563,9 +563,9 @@ check_signatures_trust( PKT_signature *sig )
|
|||
"does not match DNS entry\n"), sig->pka_info->email);
|
||||
}
|
||||
|
||||
switch ( (trustlevel & TRUST_MASK) )
|
||||
switch ( (trustlevel & TRUST_MASK) )
|
||||
{
|
||||
case TRUST_UNKNOWN:
|
||||
case TRUST_UNKNOWN:
|
||||
case TRUST_UNDEFINED:
|
||||
case TRUST_MARGINAL:
|
||||
if (okay && opt.verify_options&VERIFY_PKA_TRUST_INCREASE)
|
||||
|
@ -587,18 +587,18 @@ check_signatures_trust( PKT_signature *sig )
|
|||
}
|
||||
|
||||
/* Now let the user know what up with the trustlevel. */
|
||||
switch ( (trustlevel & TRUST_MASK) )
|
||||
switch ( (trustlevel & TRUST_MASK) )
|
||||
{
|
||||
case TRUST_EXPIRED:
|
||||
log_info(_("Note: This key has expired!\n"));
|
||||
print_fingerprint (pk, NULL, 1);
|
||||
break;
|
||||
|
||||
|
||||
default:
|
||||
log_error ("invalid trustlevel %u returned from validation layer\n",
|
||||
trustlevel);
|
||||
/* fall thru */
|
||||
case TRUST_UNKNOWN:
|
||||
case TRUST_UNKNOWN:
|
||||
case TRUST_UNDEFINED:
|
||||
write_status( STATUS_TRUST_UNDEFINED );
|
||||
log_info(_("WARNING: This key is not certified with"
|
||||
|
@ -790,7 +790,7 @@ build_pk_list( STRLIST rcpts, PK_LIST *ret_pk_list, unsigned int use )
|
|||
|
||||
/* Check whether there are any recipients in the list and build the
|
||||
* list of the encrypt-to ones (we always trust them). */
|
||||
for ( rov = remusr; rov; rov = rov->next )
|
||||
for ( rov = remusr; rov; rov = rov->next )
|
||||
{
|
||||
if ( !(rov->flags & 1) )
|
||||
{
|
||||
|
@ -809,7 +809,7 @@ build_pk_list( STRLIST rcpts, PK_LIST *ret_pk_list, unsigned int use )
|
|||
compliance_failure();
|
||||
}
|
||||
}
|
||||
else if ( (use & PUBKEY_USAGE_ENC) && !opt.no_encrypt_to )
|
||||
else if ( (use & PUBKEY_USAGE_ENC) && !opt.no_encrypt_to )
|
||||
{
|
||||
/* Encryption has been requested and --encrypt-to has not
|
||||
been disabled. Check this encrypt-to key. */
|
||||
|
@ -818,7 +818,7 @@ build_pk_list( STRLIST rcpts, PK_LIST *ret_pk_list, unsigned int use )
|
|||
|
||||
/* We explicitly allow encrypt-to to an disabled key; thus
|
||||
we pass 1 as last argument. */
|
||||
if ( (rc = get_pubkey_byname ( pk, rov->d, NULL, NULL, 1 )) )
|
||||
if ( (rc = get_pubkey_byname ( pk, rov->d, NULL, NULL, 1 )) )
|
||||
{
|
||||
free_public_key ( pk ); pk = NULL;
|
||||
log_error (_("%s: skipped: %s\n"), rov->d, g10_errstr(rc) );
|
||||
|
@ -826,7 +826,7 @@ build_pk_list( STRLIST rcpts, PK_LIST *ret_pk_list, unsigned int use )
|
|||
rov->d, strlen (rov->d), -1);
|
||||
goto fail;
|
||||
}
|
||||
else if ( !(rc=check_pubkey_algo2 (pk->pubkey_algo, use )) )
|
||||
else if ( !(rc=check_pubkey_algo2 (pk->pubkey_algo, use )) )
|
||||
{
|
||||
/* Skip the actual key if the key is already present
|
||||
* in the list. Add it to our list if not. */
|
||||
|
@ -858,7 +858,7 @@ build_pk_list( STRLIST rcpts, PK_LIST *ret_pk_list, unsigned int use )
|
|||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
else
|
||||
{
|
||||
/* The public key is not usable for encryption or not
|
||||
available. */
|
||||
|
@ -873,8 +873,8 @@ build_pk_list( STRLIST rcpts, PK_LIST *ret_pk_list, unsigned int use )
|
|||
|
||||
/* If we don't have any recipients yet and we are not in batch mode
|
||||
drop into interactive selection mode. */
|
||||
if ( !any_recipients && !opt.batch )
|
||||
{
|
||||
if ( !any_recipients && !opt.batch )
|
||||
{
|
||||
int have_def_rec;
|
||||
char *answer = NULL;
|
||||
STRLIST backlog = NULL;
|
||||
|
@ -886,7 +886,7 @@ build_pk_list( STRLIST rcpts, PK_LIST *ret_pk_list, unsigned int use )
|
|||
if ( !have_def_rec )
|
||||
tty_printf(_("You did not specify a user ID. (you may use \"-r\")\n"));
|
||||
|
||||
for (;;)
|
||||
for (;;)
|
||||
{
|
||||
rc = 0;
|
||||
xfree(answer);
|
||||
|
@ -896,7 +896,7 @@ build_pk_list( STRLIST rcpts, PK_LIST *ret_pk_list, unsigned int use )
|
|||
answer = def_rec;
|
||||
def_rec = NULL;
|
||||
}
|
||||
else if (backlog)
|
||||
else if (backlog)
|
||||
{
|
||||
/* This is part of our trick to expand and display groups. */
|
||||
answer = pop_strlist (&backlog);
|
||||
|
@ -939,8 +939,8 @@ build_pk_list( STRLIST rcpts, PK_LIST *ret_pk_list, unsigned int use )
|
|||
trim_spaces(answer);
|
||||
cpr_kill_prompt();
|
||||
}
|
||||
|
||||
if ( !answer || !*answer )
|
||||
|
||||
if ( !answer || !*answer )
|
||||
{
|
||||
xfree(answer);
|
||||
break; /* No more recipients entered - get out of loop. */
|
||||
|
@ -960,12 +960,12 @@ build_pk_list( STRLIST rcpts, PK_LIST *ret_pk_list, unsigned int use )
|
|||
rc = get_pubkey_byname( pk, answer, NULL, NULL, 0 );
|
||||
if (rc)
|
||||
tty_printf(_("No such user ID.\n"));
|
||||
else if ( !(rc=check_pubkey_algo2(pk->pubkey_algo, use)) )
|
||||
else if ( !(rc=check_pubkey_algo2(pk->pubkey_algo, use)) )
|
||||
{
|
||||
if ( have_def_rec )
|
||||
{
|
||||
/* No validation for a default recipient. */
|
||||
if (!key_present_in_pk_list(pk_list, pk))
|
||||
if (!key_present_in_pk_list(pk_list, pk))
|
||||
{
|
||||
free_public_key (pk); pk = NULL;
|
||||
log_info (_("skipped: public key "
|
||||
|
@ -985,13 +985,13 @@ build_pk_list( STRLIST rcpts, PK_LIST *ret_pk_list, unsigned int use )
|
|||
else
|
||||
{ /* Check validity of this key. */
|
||||
int trustlevel;
|
||||
|
||||
|
||||
trustlevel = get_validity (pk, pk->user_id);
|
||||
if ( (trustlevel & TRUST_FLAG_DISABLED) )
|
||||
if ( (trustlevel & TRUST_FLAG_DISABLED) )
|
||||
{
|
||||
tty_printf (_("Public key is disabled.\n") );
|
||||
}
|
||||
else if ( do_we_trust_pre (pk, trustlevel) )
|
||||
else if ( do_we_trust_pre (pk, trustlevel) )
|
||||
{
|
||||
/* Skip the actual key if the key is already
|
||||
* present in the list */
|
||||
|
@ -1023,7 +1023,7 @@ build_pk_list( STRLIST rcpts, PK_LIST *ret_pk_list, unsigned int use )
|
|||
pk = NULL;
|
||||
}
|
||||
}
|
||||
else if ( !any_recipients && (def_rec = default_recipient()) )
|
||||
else if ( !any_recipients && (def_rec = default_recipient()) )
|
||||
{
|
||||
/* We are in batch mode and have only a default recipient. */
|
||||
pk = xmalloc_clear( sizeof *pk );
|
||||
|
@ -1034,7 +1034,7 @@ build_pk_list( STRLIST rcpts, PK_LIST *ret_pk_list, unsigned int use )
|
|||
rc = get_pubkey_byname (pk, def_rec, NULL, NULL, 1);
|
||||
if (rc)
|
||||
log_error(_("unknown default recipient \"%s\"\n"), def_rec );
|
||||
else if ( !(rc=check_pubkey_algo2(pk->pubkey_algo, use)) )
|
||||
else if ( !(rc=check_pubkey_algo2(pk->pubkey_algo, use)) )
|
||||
{
|
||||
/* Mark any_recipients here since the default recipient
|
||||
would have been used if it wasn't already there. It
|
||||
|
@ -1044,7 +1044,7 @@ build_pk_list( STRLIST rcpts, PK_LIST *ret_pk_list, unsigned int use )
|
|||
if (!key_present_in_pk_list(pk_list, pk))
|
||||
log_info (_("skipped: public key already set "
|
||||
"as default recipient\n"));
|
||||
else
|
||||
else
|
||||
{
|
||||
PK_LIST r = xmalloc( sizeof *r );
|
||||
r->pk = pk; pk = NULL;
|
||||
|
@ -1060,18 +1060,18 @@ build_pk_list( STRLIST rcpts, PK_LIST *ret_pk_list, unsigned int use )
|
|||
}
|
||||
xfree(def_rec); def_rec = NULL;
|
||||
}
|
||||
else
|
||||
else
|
||||
{
|
||||
/* General case: Check all keys. */
|
||||
any_recipients = 0;
|
||||
for (; remusr; remusr = remusr->next )
|
||||
for (; remusr; remusr = remusr->next )
|
||||
{
|
||||
if ( (remusr->flags & 1) )
|
||||
continue; /* encrypt-to keys are already handled. */
|
||||
|
||||
pk = xmalloc_clear( sizeof *pk );
|
||||
pk->req_usage = use;
|
||||
if ( (rc = get_pubkey_byname( pk, remusr->d, NULL, NULL, 0 )) )
|
||||
if ( (rc = get_pubkey_byname( pk, remusr->d, NULL, NULL, 0 )) )
|
||||
{
|
||||
/* Key not found or other error. */
|
||||
free_public_key( pk ); pk = NULL;
|
||||
|
@ -1081,13 +1081,13 @@ build_pk_list( STRLIST rcpts, PK_LIST *ret_pk_list, unsigned int use )
|
|||
-1);
|
||||
goto fail;
|
||||
}
|
||||
else if ( !(rc=check_pubkey_algo2(pk->pubkey_algo, use )) )
|
||||
else if ( !(rc=check_pubkey_algo2(pk->pubkey_algo, use )) )
|
||||
{
|
||||
/* Key found and usable. Check validity. */
|
||||
int trustlevel;
|
||||
|
||||
|
||||
trustlevel = get_validity (pk, pk->user_id);
|
||||
if ( (trustlevel & TRUST_FLAG_DISABLED) )
|
||||
if ( (trustlevel & TRUST_FLAG_DISABLED) )
|
||||
{
|
||||
/*Key has been disabled. */
|
||||
free_public_key(pk); pk = NULL;
|
||||
|
@ -1100,7 +1100,7 @@ build_pk_list( STRLIST rcpts, PK_LIST *ret_pk_list, unsigned int use )
|
|||
rc=G10ERR_UNU_PUBKEY;
|
||||
goto fail;
|
||||
}
|
||||
else if ( do_we_trust_pre( pk, trustlevel ) )
|
||||
else if ( do_we_trust_pre( pk, trustlevel ) )
|
||||
{
|
||||
/* Note: do_we_trust may have changed the trustlevel */
|
||||
|
||||
|
@ -1110,7 +1110,7 @@ build_pk_list( STRLIST rcpts, PK_LIST *ret_pk_list, unsigned int use )
|
|||
|
||||
/* Skip the actual key if the key is already present
|
||||
* in the list */
|
||||
if (!key_present_in_pk_list(pk_list, pk))
|
||||
if (!key_present_in_pk_list(pk_list, pk))
|
||||
{
|
||||
free_public_key(pk); pk = NULL;
|
||||
log_info(_("%s: skipped: public key already present\n"),
|
||||
|
@ -1150,14 +1150,14 @@ build_pk_list( STRLIST rcpts, PK_LIST *ret_pk_list, unsigned int use )
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ( !rc && !any_recipients )
|
||||
|
||||
if ( !rc && !any_recipients )
|
||||
{
|
||||
log_error(_("no valid addressees\n"));
|
||||
write_status_text (STATUS_NO_RECP, "0");
|
||||
rc = G10ERR_NO_USER_ID;
|
||||
}
|
||||
|
||||
|
||||
fail:
|
||||
|
||||
if ( rc )
|
||||
|
@ -1196,7 +1196,7 @@ algo_available( preftype_t preftype, int algo, const union pref_hint *hint )
|
|||
&& algo != CIPHER_ALGO_3DES
|
||||
&& algo != CIPHER_ALGO_CAST5))
|
||||
return 0;
|
||||
|
||||
|
||||
if(PGP7 && (algo != CIPHER_ALGO_IDEA
|
||||
&& algo != CIPHER_ALGO_3DES
|
||||
&& algo != CIPHER_ALGO_CAST5
|
||||
|
@ -1287,8 +1287,7 @@ select_algo_from_prefs(PK_LIST pk_list, int preftype,
|
|||
/* IDEA is implicitly there for v3 keys with v3 selfsigs if
|
||||
--pgp2 mode is on. This was a 2440 thing that was
|
||||
dropped from 4880 but is still relevant to GPG's 1991
|
||||
support. All this doesn't mean IDEA is actually
|
||||
available, of course. */
|
||||
support. */
|
||||
if(PGP2 && pkr->pk->version<4 && pkr->pk->selfsigversion<4)
|
||||
implicit=CIPHER_ALGO_IDEA;
|
||||
else
|
||||
|
@ -1402,7 +1401,7 @@ select_algo_from_prefs(PK_LIST pk_list, int preftype,
|
|||
|
||||
if(result==-1)
|
||||
{
|
||||
unsigned int best=-1;
|
||||
unsigned int best=-1;
|
||||
|
||||
/* At this point, we have not selected an algorithm due to a
|
||||
special request or via personal prefs. Pick the highest
|
||||
|
@ -1451,7 +1450,7 @@ select_algo_from_prefs(PK_LIST pk_list, int preftype,
|
|||
|
||||
/*
|
||||
* Select the MDC flag from the pk_list. We can only use MDC if all recipients
|
||||
* support this feature
|
||||
* support this feature
|
||||
*/
|
||||
int
|
||||
select_mdc_from_pklist (PK_LIST pk_list)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue