mirror of
git://git.gnupg.org/gnupg.git
synced 2025-03-23 21:59:57 +01:00
g10: More card key generation change.
* g10/keygen.c (gen_card_key): Add back ALGO as the second argument. Don't get ALGO by KEY-ATTR by this function. It's caller to provide ALGO. Don't do that by both of caller and callee. (generate_keypair): Only put paramerters needed. Use parameters for ALGO to call gen_card_key. (generate_card_subkeypair): Get ALGO and call gen_card_key with it. -- Signed-off-by: NIIBE Yutaka <gniibe@fsij.org>
This commit is contained in:
parent
f7e50634be
commit
987bbb2276
63
g10/keygen.c
63
g10/keygen.c
@ -152,10 +152,11 @@ static gpg_error_t parse_algo_usage_expire (ctrl_t ctrl, int for_subkey,
|
||||
u32 *r_expire,
|
||||
unsigned int *r_nbits, char **r_curve);
|
||||
static void do_generate_keypair (ctrl_t ctrl, struct para_data_s *para,
|
||||
struct output_control_s *outctrl, int card );
|
||||
struct output_control_s *outctrl, int card );
|
||||
static int write_keyblock (iobuf_t out, kbnode_t node);
|
||||
static gpg_error_t gen_card_key (int keyno, int is_primary, kbnode_t pub_root,
|
||||
u32 *timestamp, u32 expireval);
|
||||
static gpg_error_t gen_card_key (int keyno, int algo, int is_primary,
|
||||
kbnode_t pub_root, u32 *timestamp,
|
||||
u32 expireval);
|
||||
|
||||
|
||||
static void
|
||||
@ -255,7 +256,7 @@ keygen_add_key_expire (PKT_signature *sig, void *opaque)
|
||||
|
||||
buf[0] = (u >> 24) & 0xff;
|
||||
buf[1] = (u >> 16) & 0xff;
|
||||
buf[2] = (u >> 8) & 0xff;
|
||||
buf[2] = (u >> 8) & 0xff;
|
||||
buf[3] = u & 0xff;
|
||||
build_sig_subpkt (sig, SIGSUBPKT_KEY_EXPIRE, buf, 4);
|
||||
}
|
||||
@ -3783,24 +3784,6 @@ generate_keypair (ctrl_t ctrl, int full, const char *fname,
|
||||
strcpy (r->u.value, "sign");
|
||||
r->next = para;
|
||||
para = r;
|
||||
if (info.key_attr[0].algo == PUBKEY_ALGO_RSA)
|
||||
{
|
||||
r = xcalloc (1, sizeof *r + 20 );
|
||||
r->key = pKEYLENGTH;
|
||||
sprintf( r->u.value, "%u", info.key_attr[0].nbits);
|
||||
r->next = para;
|
||||
para = r;
|
||||
}
|
||||
else if (info.key_attr[0].algo == PUBKEY_ALGO_ECDSA
|
||||
|| info.key_attr[0].algo == PUBKEY_ALGO_EDDSA
|
||||
|| info.key_attr[0].algo == PUBKEY_ALGO_ECDH)
|
||||
{
|
||||
r = xcalloc (1, sizeof *r + strlen (info.key_attr[0].curve));
|
||||
r->key = pKEYCURVE;
|
||||
strcpy (r->u.value, info.key_attr[0].curve);
|
||||
r->next = para;
|
||||
para = r;
|
||||
}
|
||||
|
||||
r = xcalloc (1, sizeof *r + 20 );
|
||||
r->key = pSUBKEYTYPE;
|
||||
@ -4282,7 +4265,8 @@ do_generate_keypair (ctrl_t ctrl, struct para_data_s *para,
|
||||
get_parameter_passphrase (para),
|
||||
&cache_nonce, NULL);
|
||||
else
|
||||
err = gen_card_key (1, 1, pub_root, ×tamp,
|
||||
err = gen_card_key (1, get_parameter_algo( para, pKEYTYPE, NULL ),
|
||||
1, pub_root, ×tamp,
|
||||
get_parameter_u32 (para, pKEYEXPIRE));
|
||||
|
||||
/* Get the pointer to the generated public key packet. */
|
||||
@ -4320,7 +4304,8 @@ do_generate_keypair (ctrl_t ctrl, struct para_data_s *para,
|
||||
|
||||
if (!err && card && get_parameter (para, pAUTHKEYTYPE))
|
||||
{
|
||||
err = gen_card_key (3, 0, pub_root, ×tamp,
|
||||
err = gen_card_key (3, get_parameter_algo( para, pAUTHKEYTYPE, NULL ),
|
||||
0, pub_root, ×tamp,
|
||||
get_parameter_u32 (para, pKEYEXPIRE));
|
||||
if (!err)
|
||||
err = write_keybinding (pub_root, pri_psk, NULL,
|
||||
@ -4359,7 +4344,8 @@ do_generate_keypair (ctrl_t ctrl, struct para_data_s *para,
|
||||
}
|
||||
else
|
||||
{
|
||||
err = gen_card_key (2, 0, pub_root, ×tamp,
|
||||
err = gen_card_key (2, 0, get_parameter_algo (para, pSUBKEYTYPE, NULL),
|
||||
pub_root, ×tamp,
|
||||
get_parameter_u32 (para, pKEYEXPIRE));
|
||||
}
|
||||
|
||||
@ -4796,9 +4782,20 @@ generate_card_subkeypair (kbnode_t pub_keyblock,
|
||||
u32 cur_time;
|
||||
struct para_data_s *para = NULL;
|
||||
PKT_public_key *sub_pk = NULL;
|
||||
int algo;
|
||||
struct agent_card_info_s info;
|
||||
|
||||
log_assert (keyno >= 1 && keyno <= 3);
|
||||
|
||||
memset (&info, 0, sizeof (info));
|
||||
err = agent_scd_getattr ("KEY-ATTR", &info);
|
||||
if (err)
|
||||
{
|
||||
log_error (_("error getting current key info: %s\n"), gpg_strerror (err));
|
||||
return err;
|
||||
}
|
||||
algo = info.key_attr[keyno-1].algo;
|
||||
|
||||
para = xtrycalloc (1, sizeof *para + strlen (serialno) );
|
||||
if (!para)
|
||||
{
|
||||
@ -4857,7 +4854,7 @@ generate_card_subkeypair (kbnode_t pub_keyblock,
|
||||
|
||||
/* Note, that depending on the backend, the card key generation may
|
||||
update CUR_TIME. */
|
||||
err = gen_card_key (keyno, 0, pub_keyblock, &cur_time, expire);
|
||||
err = gen_card_key (keyno, algo, 0, pub_keyblock, &cur_time, expire);
|
||||
/* Get the pointer to the generated public subkey packet. */
|
||||
if (!err)
|
||||
{
|
||||
@ -4905,29 +4902,17 @@ write_keyblock( IOBUF out, KBNODE node )
|
||||
|
||||
/* Note that timestamp is an in/out arg. */
|
||||
static gpg_error_t
|
||||
gen_card_key (int keyno, int is_primary, kbnode_t pub_root,
|
||||
gen_card_key (int keyno, int algo, int is_primary, kbnode_t pub_root,
|
||||
u32 *timestamp, u32 expireval)
|
||||
{
|
||||
#ifdef ENABLE_CARD_SUPPORT
|
||||
gpg_error_t err;
|
||||
struct agent_card_info_s info;
|
||||
int algo;
|
||||
PACKET *pkt;
|
||||
PKT_public_key *pk;
|
||||
char keyid[10];
|
||||
unsigned char *public;
|
||||
gcry_sexp_t s_key;
|
||||
|
||||
memset (&info, 0, sizeof (info));
|
||||
err = agent_scd_getattr ("KEY-ATTR", &info);
|
||||
if (err)
|
||||
{
|
||||
log_error (_("error getting current key info: %s\n"), gpg_strerror (err));
|
||||
return err;
|
||||
}
|
||||
|
||||
algo = info.key_attr[keyno-1].algo;
|
||||
|
||||
snprintf (keyid, DIM(keyid), "OPENPGP.%d", keyno);
|
||||
|
||||
pk = xtrycalloc (1, sizeof *pk );
|
||||
|
Loading…
x
Reference in New Issue
Block a user