mirror of
https://github.com/chris2511/xca.git
synced 2026-09-12 19:51:05 +05:00
parent
1a0ef9c9ee
commit
dbb3c48ef3
@ -119,7 +119,7 @@ void pki_evp::generate(const keyjob &task)
|
||||
break;
|
||||
}
|
||||
#ifndef OPENSSL_NO_EC
|
||||
case EVP_PKEY_EC:
|
||||
case EVP_PKEY_EC: {
|
||||
EC_KEY *eckey;
|
||||
EC_GROUP *group = EC_GROUP_new_by_curve_name(task.ec_nid);
|
||||
if (!group)
|
||||
@ -140,6 +140,18 @@ void pki_evp::generate(const keyjob &task)
|
||||
EC_KEY_free(eckey);
|
||||
EC_GROUP_free(group);
|
||||
break;
|
||||
}
|
||||
#ifdef EVP_PKEY_ED25519
|
||||
case EVP_PKEY_ED25519: {
|
||||
EVP_PKEY *pkey = NULL;
|
||||
EVP_PKEY_CTX *pctx = EVP_PKEY_CTX_new_id(EVP_PKEY_ED25519, NULL);
|
||||
EVP_PKEY_keygen_init(pctx);
|
||||
EVP_PKEY_keygen(pctx, &pkey);
|
||||
EVP_PKEY_CTX_free(pctx);
|
||||
EVP_PKEY_free(key);
|
||||
key = pkey;
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
#if OPENSSL_VERSION_NUMBER >= 0x10100000L
|
||||
|
||||
@ -31,21 +31,28 @@ class keytype
|
||||
static QList<keytype> types()
|
||||
{
|
||||
return QList<keytype> {
|
||||
keytype(EVP_PKEY_RSA, "RSA", CKM_RSA_PKCS_KEY_PAIR_GEN),
|
||||
keytype(EVP_PKEY_DSA, "DSA", CKM_DSA_KEY_PAIR_GEN),
|
||||
keytype(EVP_PKEY_RSA, "RSA", CKM_RSA_PKCS_KEY_PAIR_GEN,
|
||||
false, true),
|
||||
keytype(EVP_PKEY_DSA, "DSA", CKM_DSA_KEY_PAIR_GEN,
|
||||
false, true),
|
||||
#ifndef OPENSSL_NO_EC
|
||||
keytype(EVP_PKEY_EC, "EC", CKM_EC_KEY_PAIR_GEN),
|
||||
keytype(EVP_PKEY_EC, "EC", CKM_EC_KEY_PAIR_GEN,
|
||||
true, false),
|
||||
#ifdef EVP_PKEY_ED25519
|
||||
keytype(EVP_PKEY_ED25519, "ED25519", 0, false, false),
|
||||
#endif
|
||||
#endif
|
||||
};
|
||||
}
|
||||
int type;
|
||||
QString name;
|
||||
CK_MECHANISM_TYPE mech;
|
||||
bool curve, length;
|
||||
|
||||
keytype(int t, const QString &n, CK_MECHANISM_TYPE m)
|
||||
: type(t), name(n), mech(m) { }
|
||||
keytype() : type(-1), name(QString()), mech(0) { }
|
||||
|
||||
keytype(int t, const QString &n, CK_MECHANISM_TYPE m, bool c, bool l)
|
||||
: type(t), name(n), mech(m), curve(c), length(l) { }
|
||||
keytype() : type(-1), name(QString()), mech(0),
|
||||
curve(false), length(true) { }
|
||||
bool isValid()
|
||||
{
|
||||
return type != -1;
|
||||
|
||||
@ -182,17 +182,15 @@ void NewKey::updateCurves(unsigned min, unsigned max, unsigned long ec_flags)
|
||||
|
||||
void NewKey::on_keyType_currentIndexChanged(int idx)
|
||||
{
|
||||
bool curve_enabled;
|
||||
keyListItem ki = keyType->itemData(idx).value<keyListItem>();
|
||||
|
||||
curve_enabled = ki.type() == EVP_PKEY_EC;
|
||||
curveBox->setVisible(curve_enabled);
|
||||
curveLabel->setVisible(curve_enabled);
|
||||
keySizeLabel->setVisible(!curve_enabled);
|
||||
keyLength->setVisible(!curve_enabled);
|
||||
curveBox->setVisible(ki.ktype.curve);
|
||||
curveLabel->setVisible(ki.ktype.curve);
|
||||
keySizeLabel->setVisible(ki.ktype.length);
|
||||
keyLength->setVisible(ki.ktype.length);
|
||||
|
||||
rememberDefault->setEnabled(!ki.card);
|
||||
if (curve_enabled && ki.card) {
|
||||
if (ki.ktype.curve && ki.card) {
|
||||
updateCurves(ki.minKeySize, ki.maxKeySize, ki.ec_flags);
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user