pkcs11 framework-pkcs15: add EC key generation mechanism
git-svn-id: https://www.opensc-project.org/svnp/opensc/trunk@5384 c6295689-39f2-0310-b995-f0e70906c6a9
This commit is contained in:
parent
e430fe9d87
commit
7db9532f00
|
@ -3262,30 +3262,34 @@ static int register_gost_mechanisms(struct sc_pkcs11_card *p11card, int flags)
|
|||
return CKR_OK;
|
||||
}
|
||||
|
||||
static int register_ec_mechanisms(struct sc_pkcs11_card *p11card,
|
||||
|
||||
static int register_ec_mechanisms(struct sc_pkcs11_card *p11card, int flags,
|
||||
unsigned long ext_flags, CK_ULONG min_key_size, CK_ULONG max_key_size)
|
||||
{
|
||||
CK_MECHANISM_INFO mech_info;
|
||||
sc_pkcs11_mechanism_type_t *mt;
|
||||
CK_FLAGS ec_flags = 0;
|
||||
int rc;
|
||||
|
||||
mech_info.flags = CKF_HW | CKF_SIGN; /* check for more */
|
||||
if (ext_flags & SC_ALGORITHM_EXT_EC_F_P)
|
||||
mech_info.flags |= CKF_EC_F_P;
|
||||
ec_flags |= CKF_EC_F_P;
|
||||
if (ext_flags & SC_ALGORITHM_EXT_EC_F_2M)
|
||||
mech_info.flags |= CKF_EC_F_2M;
|
||||
ec_flags |= CKF_EC_F_2M;
|
||||
if (ext_flags & SC_ALGORITHM_EXT_EC_ECPARAMETERS)
|
||||
mech_info.flags |= CKF_EC_ECPARAMETERS;
|
||||
ec_flags |= CKF_EC_ECPARAMETERS;
|
||||
if (ext_flags & SC_ALGORITHM_EXT_EC_NAMEDCURVE)
|
||||
mech_info.flags |= CKF_EC_NAMEDCURVE;
|
||||
ec_flags |= CKF_EC_NAMEDCURVE;
|
||||
if (ext_flags & SC_ALGORITHM_EXT_EC_UNCOMPRESES)
|
||||
mech_info.flags |= CKF_EC_UNCOMPRESES;
|
||||
ec_flags |= CKF_EC_UNCOMPRESES;
|
||||
if (ext_flags & SC_ALGORITHM_EXT_EC_COMPRESS)
|
||||
mech_info.flags |= CKF_EC_COMPRESS;
|
||||
ec_flags |= CKF_EC_COMPRESS;
|
||||
|
||||
mech_info.flags = CKF_HW | CKF_SIGN; /* check for more */
|
||||
mech_info.flags |= ec_flags;
|
||||
mech_info.ulMinKeySize = min_key_size;
|
||||
mech_info.ulMaxKeySize = max_key_size;
|
||||
mt = sc_pkcs11_new_fw_mechanism(CKM_ECDSA,
|
||||
&mech_info, CKK_EC, NULL);
|
||||
|
||||
mt = sc_pkcs11_new_fw_mechanism(CKM_ECDSA, &mech_info, CKK_EC, NULL);
|
||||
if (!mt)
|
||||
return CKR_HOST_MEMORY;
|
||||
rc = sc_pkcs11_register_mechanism(p11card, mt);
|
||||
|
@ -3301,6 +3305,17 @@ static int register_ec_mechanisms(struct sc_pkcs11_card *p11card,
|
|||
if (rc != CKR_OK)
|
||||
return rc;
|
||||
#endif
|
||||
if (flags & SC_ALGORITHM_ONBOARD_KEY_GEN) {
|
||||
mech_info.flags = CKF_HW | CKF_GENERATE_KEY_PAIR;
|
||||
mech_info.flags |= ec_flags;
|
||||
mt = sc_pkcs11_new_fw_mechanism(CKM_EC_KEY_PAIR_GEN, &mech_info, CKK_EC, NULL);
|
||||
if (!mt)
|
||||
return CKR_HOST_MEMORY;
|
||||
rc = sc_pkcs11_register_mechanism(p11card, mt);
|
||||
if (rc != CKR_OK)
|
||||
return rc;
|
||||
}
|
||||
|
||||
|
||||
#if 0
|
||||
/* TODO: -DEE Add CKM_ECDH1_COFACTOR_DERIVE as PIV can do this */
|
||||
|
@ -3316,6 +3331,7 @@ static int register_ec_mechanisms(struct sc_pkcs11_card *p11card,
|
|||
return CKR_OK;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Mechanism handling
|
||||
* FIXME: We should consult the card's algorithm list to
|
||||
|
@ -3382,9 +3398,8 @@ static CK_RV register_mechanisms(struct sc_pkcs11_card *p11card)
|
|||
alg_info++;
|
||||
}
|
||||
|
||||
if (flags & SC_ALGORITHM_ECDSA_RAW) {
|
||||
rc = register_ec_mechanisms(p11card, ec_ext_flags, ec_min_key_size, ec_max_key_size);
|
||||
}
|
||||
if (flags & SC_ALGORITHM_ECDSA_RAW)
|
||||
rc = register_ec_mechanisms(p11card, flags, ec_ext_flags, ec_min_key_size, ec_max_key_size);
|
||||
|
||||
if (flags & (SC_ALGORITHM_GOSTR3410_RAW
|
||||
| SC_ALGORITHM_GOSTR3410_HASH_NONE
|
||||
|
|
Loading…
Reference in New Issue