mirror of
https://github.com/chris2511/xca.git
synced 2026-09-12 19:51:05 +05:00
OpenSSL-3: Adopt builtin-curves.cpp
This commit is contained in:
parent
8c72633186
commit
9cd0e4c0f8
@ -5,7 +5,7 @@
|
|||||||
*/
|
*/
|
||||||
#include <openssl/evp.h>
|
#include <openssl/evp.h>
|
||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
#include <QList>
|
#include <QMap>
|
||||||
|
|
||||||
#include "builtin_curves.h"
|
#include "builtin_curves.h"
|
||||||
#include "exception.h"
|
#include "exception.h"
|
||||||
@ -15,112 +15,96 @@
|
|||||||
#include <openssl/ec.h>
|
#include <openssl/ec.h>
|
||||||
#include "opensc-pkcs11.h"
|
#include "opensc-pkcs11.h"
|
||||||
|
|
||||||
static const QList<int> rfc5480_curve_nids()
|
static int curve_class(int nid)
|
||||||
{
|
{
|
||||||
return QList<int> {
|
static const QMap<int, int> map {
|
||||||
NID_X9_62_prime192v1,
|
{ NID_X9_62_prime192v1, CURVE_RFC5480 },
|
||||||
NID_secp224r1,
|
{ NID_X9_62_prime256v1, CURVE_RFC5480 },
|
||||||
NID_X9_62_prime256v1,
|
{ NID_secp224r1, CURVE_RFC5480 },
|
||||||
NID_secp384r1,
|
{ NID_secp384r1, CURVE_RFC5480 },
|
||||||
NID_secp521r1,
|
{ NID_secp521r1, CURVE_RFC5480 },
|
||||||
};
|
|
||||||
};
|
{ NID_X9_62_prime192v2, CURVE_X962 },
|
||||||
|
{ NID_X9_62_prime192v3, CURVE_X962 },
|
||||||
static const QList<int> x962_curve_nids()
|
{ NID_X9_62_prime239v1, CURVE_X962 },
|
||||||
{
|
{ NID_X9_62_prime239v2, CURVE_X962 },
|
||||||
return QList<int> {
|
{ NID_X9_62_prime239v3, CURVE_X962 },
|
||||||
NID_X9_62_prime192v1,
|
|
||||||
NID_X9_62_prime192v2,
|
{ NID_X9_62_c2pnb163v1, CURVE_X962 },
|
||||||
NID_X9_62_prime192v3,
|
{ NID_X9_62_c2pnb163v2, CURVE_X962 },
|
||||||
NID_X9_62_prime239v1,
|
{ NID_X9_62_c2pnb163v3, CURVE_X962 },
|
||||||
NID_X9_62_prime239v2,
|
{ NID_X9_62_c2pnb176v1, CURVE_X962 },
|
||||||
NID_X9_62_prime239v3,
|
{ NID_X9_62_c2tnb191v1, CURVE_X962 },
|
||||||
NID_X9_62_prime256v1,
|
{ NID_X9_62_c2tnb191v2, CURVE_X962 },
|
||||||
|
{ NID_X9_62_c2tnb191v3, CURVE_X962 },
|
||||||
NID_X9_62_c2pnb163v1,
|
{ NID_X9_62_c2pnb208w1, CURVE_X962 },
|
||||||
NID_X9_62_c2pnb163v2,
|
{ NID_X9_62_c2tnb239v1, CURVE_X962 },
|
||||||
NID_X9_62_c2pnb163v3,
|
{ NID_X9_62_c2tnb239v2, CURVE_X962 },
|
||||||
NID_X9_62_c2pnb176v1,
|
{ NID_X9_62_c2tnb239v3, CURVE_X962 },
|
||||||
NID_X9_62_c2tnb191v1,
|
{ NID_X9_62_c2pnb272w1, CURVE_X962 },
|
||||||
NID_X9_62_c2tnb191v2,
|
{ NID_X9_62_c2pnb304w1, CURVE_X962 },
|
||||||
NID_X9_62_c2tnb191v3,
|
{ NID_X9_62_c2tnb359v1, CURVE_X962 },
|
||||||
NID_X9_62_c2pnb208w1,
|
{ NID_X9_62_c2pnb368w1, CURVE_X962 },
|
||||||
NID_X9_62_c2tnb239v1,
|
{ NID_X9_62_c2tnb431r1, CURVE_X962 },
|
||||||
NID_X9_62_c2tnb239v2,
|
|
||||||
NID_X9_62_c2tnb239v3,
|
{ NID_sect113r1, CURVE_OTHER },
|
||||||
NID_X9_62_c2pnb272w1,
|
{ NID_sect113r2, CURVE_OTHER },
|
||||||
NID_X9_62_c2pnb304w1,
|
{ NID_sect131r1, CURVE_OTHER },
|
||||||
NID_X9_62_c2tnb359v1,
|
{ NID_sect131r2, CURVE_OTHER },
|
||||||
NID_X9_62_c2pnb368w1,
|
{ NID_sect163k1, CURVE_OTHER },
|
||||||
NID_X9_62_c2tnb431r1
|
{ NID_sect163r1, CURVE_OTHER },
|
||||||
};
|
{ NID_sect163r2, CURVE_OTHER },
|
||||||
};
|
{ NID_sect193r1, CURVE_OTHER },
|
||||||
|
{ NID_sect193r2, CURVE_OTHER },
|
||||||
static const QList<int> other_curve_nids()
|
{ NID_sect233k1, CURVE_OTHER },
|
||||||
{
|
{ NID_sect233r1, CURVE_OTHER },
|
||||||
return QList<int> {
|
{ NID_sect239k1, CURVE_OTHER },
|
||||||
NID_sect113r1,
|
{ NID_sect283k1, CURVE_OTHER },
|
||||||
NID_sect113r2,
|
{ NID_sect283r1, CURVE_OTHER },
|
||||||
NID_sect131r1,
|
{ NID_sect409k1, CURVE_OTHER },
|
||||||
NID_sect131r2,
|
{ NID_sect409r1, CURVE_OTHER },
|
||||||
NID_sect163k1,
|
{ NID_sect571k1, CURVE_OTHER },
|
||||||
NID_sect163r1,
|
{ NID_sect571r1, CURVE_OTHER },
|
||||||
NID_sect163r2,
|
|
||||||
NID_sect193r1,
|
{ NID_secp112r1, CURVE_OTHER },
|
||||||
NID_sect193r2,
|
{ NID_secp112r2, CURVE_OTHER },
|
||||||
NID_sect233k1,
|
{ NID_secp128r1, CURVE_OTHER },
|
||||||
NID_sect233r1,
|
{ NID_secp128r2, CURVE_OTHER },
|
||||||
NID_sect239k1,
|
{ NID_secp160k1, CURVE_OTHER },
|
||||||
NID_sect283k1,
|
{ NID_secp160r1, CURVE_OTHER },
|
||||||
NID_sect283r1,
|
{ NID_secp160r2, CURVE_OTHER },
|
||||||
NID_sect409k1,
|
{ NID_secp192k1, CURVE_OTHER },
|
||||||
NID_sect409r1,
|
{ NID_secp224k1, CURVE_OTHER },
|
||||||
NID_sect571k1,
|
{ NID_secp256k1, CURVE_OTHER },
|
||||||
NID_sect571r1,
|
|
||||||
|
{ NID_wap_wsg_idm_ecid_wtls1, CURVE_OTHER },
|
||||||
NID_secp112r1,
|
{ NID_wap_wsg_idm_ecid_wtls3, CURVE_OTHER },
|
||||||
NID_secp112r2,
|
{ NID_wap_wsg_idm_ecid_wtls4, CURVE_OTHER },
|
||||||
NID_secp128r1,
|
{ NID_wap_wsg_idm_ecid_wtls5, CURVE_OTHER },
|
||||||
NID_secp128r2,
|
{ NID_wap_wsg_idm_ecid_wtls6, CURVE_OTHER },
|
||||||
NID_secp160k1,
|
{ NID_wap_wsg_idm_ecid_wtls7, CURVE_OTHER },
|
||||||
NID_secp160r1,
|
{ NID_wap_wsg_idm_ecid_wtls8, CURVE_OTHER },
|
||||||
NID_secp160r2,
|
{ NID_wap_wsg_idm_ecid_wtls9, CURVE_OTHER },
|
||||||
NID_secp192k1,
|
{ NID_wap_wsg_idm_ecid_wtls10, CURVE_OTHER },
|
||||||
NID_secp224k1,
|
{ NID_wap_wsg_idm_ecid_wtls11, CURVE_OTHER },
|
||||||
NID_secp224r1,
|
{ NID_wap_wsg_idm_ecid_wtls12, CURVE_OTHER },
|
||||||
NID_secp256k1,
|
|
||||||
NID_secp384r1,
|
{ NID_brainpoolP160r1, CURVE_BRAINPOOL },
|
||||||
NID_secp521r1,
|
{ NID_brainpoolP160t1, CURVE_BRAINPOOL },
|
||||||
|
{ NID_brainpoolP192r1, CURVE_BRAINPOOL },
|
||||||
NID_wap_wsg_idm_ecid_wtls1,
|
{ NID_brainpoolP192t1, CURVE_BRAINPOOL },
|
||||||
NID_wap_wsg_idm_ecid_wtls3,
|
{ NID_brainpoolP224r1, CURVE_BRAINPOOL },
|
||||||
NID_wap_wsg_idm_ecid_wtls4,
|
{ NID_brainpoolP224t1, CURVE_BRAINPOOL },
|
||||||
NID_wap_wsg_idm_ecid_wtls5,
|
{ NID_brainpoolP256r1, CURVE_BRAINPOOL },
|
||||||
NID_wap_wsg_idm_ecid_wtls6,
|
{ NID_brainpoolP256t1, CURVE_BRAINPOOL },
|
||||||
NID_wap_wsg_idm_ecid_wtls7,
|
{ NID_brainpoolP320r1, CURVE_BRAINPOOL },
|
||||||
NID_wap_wsg_idm_ecid_wtls8,
|
{ NID_brainpoolP320t1, CURVE_BRAINPOOL },
|
||||||
NID_wap_wsg_idm_ecid_wtls9,
|
{ NID_brainpoolP384r1, CURVE_BRAINPOOL },
|
||||||
NID_wap_wsg_idm_ecid_wtls10,
|
{ NID_brainpoolP384t1, CURVE_BRAINPOOL },
|
||||||
NID_wap_wsg_idm_ecid_wtls11,
|
{ NID_brainpoolP512r1, CURVE_BRAINPOOL },
|
||||||
NID_wap_wsg_idm_ecid_wtls12,
|
{ NID_brainpoolP512t1, CURVE_BRAINPOOL },
|
||||||
|
|
||||||
#ifdef NID_brainpoolP160r1
|
|
||||||
NID_brainpoolP160r1,
|
|
||||||
NID_brainpoolP160t1,
|
|
||||||
NID_brainpoolP192r1,
|
|
||||||
NID_brainpoolP192t1,
|
|
||||||
NID_brainpoolP224r1,
|
|
||||||
NID_brainpoolP224t1,
|
|
||||||
NID_brainpoolP256r1,
|
|
||||||
NID_brainpoolP256t1,
|
|
||||||
NID_brainpoolP320r1,
|
|
||||||
NID_brainpoolP320t1,
|
|
||||||
NID_brainpoolP384r1,
|
|
||||||
NID_brainpoolP384t1,
|
|
||||||
NID_brainpoolP512r1,
|
|
||||||
NID_brainpoolP512t1
|
|
||||||
#endif
|
|
||||||
};
|
};
|
||||||
|
return map.value(nid, -1);
|
||||||
};
|
};
|
||||||
|
|
||||||
builtin_curves::builtin_curves()
|
builtin_curves::builtin_curves()
|
||||||
@ -130,28 +114,19 @@ builtin_curves::builtin_curves()
|
|||||||
|
|
||||||
Q_CHECK_PTR(curves);
|
Q_CHECK_PTR(curves);
|
||||||
|
|
||||||
BIGNUM *order = BN_new();
|
|
||||||
Q_CHECK_PTR(order);
|
|
||||||
|
|
||||||
EC_get_builtin_curves(curves, num_curves);
|
EC_get_builtin_curves(curves, num_curves);
|
||||||
|
|
||||||
for (i=0; i < num_curves; i++) {
|
for (i=0; i < num_curves; i++) {
|
||||||
int flag = 0, nid = curves[i].nid;
|
int sortgroup, nid = curves[i].nid;
|
||||||
unsigned long type = 0;
|
unsigned long type = 0;
|
||||||
|
|
||||||
if (rfc5480_curve_nids().contains(nid))
|
if ((sortgroup = curve_class(nid)) == -1)
|
||||||
flag = CURVE_RFC5480;
|
|
||||||
else if (x962_curve_nids().contains(nid))
|
|
||||||
flag = CURVE_X962;
|
|
||||||
else if (other_curve_nids().contains(nid))
|
|
||||||
flag = CURVE_OTHER;
|
|
||||||
else
|
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
EC_GROUP *group = EC_GROUP_new_by_curve_name(nid);
|
EC_GROUP *group = EC_GROUP_new_by_curve_name(nid);
|
||||||
EC_GROUP_get_order(group, order, NULL);
|
const BIGNUM *order = EC_GROUP_get0_order(group);
|
||||||
|
|
||||||
switch (EC_METHOD_get_field_type(EC_GROUP_method_of(group))) {
|
switch (EC_GROUP_get_field_type(group)) {
|
||||||
case NID_X9_62_prime_field:
|
case NID_X9_62_prime_field:
|
||||||
type = CKF_EC_F_P;
|
type = CKF_EC_F_P;
|
||||||
break;
|
break;
|
||||||
@ -166,13 +141,13 @@ builtin_curves::builtin_curves()
|
|||||||
qDebug() << QString(curves[i].comment).leftJustified(50)
|
qDebug() << QString(curves[i].comment).leftJustified(50)
|
||||||
<< QString(OBJ_nid2sn(nid)).leftJustified(27)
|
<< QString(OBJ_nid2sn(nid)).leftJustified(27)
|
||||||
<< OBJ_obj2QString(OBJ_nid2obj(nid),1).leftJustified(20)
|
<< OBJ_obj2QString(OBJ_nid2obj(nid),1).leftJustified(20)
|
||||||
<< (type == CKF_EC_F_P ? "Fp" : "F2m");
|
<< (type == CKF_EC_F_P ? "Fp " : "F2m") << type
|
||||||
|
<< nid << sortgroup << EC_GROUP_get_field_type(group);
|
||||||
#endif
|
#endif
|
||||||
append(builtin_curve(nid, QString(curves[i].comment),
|
append(builtin_curve(nid, QString(curves[i].comment),
|
||||||
BN_num_bits(order), flag, type));
|
BN_num_bits(order), sortgroup, type));
|
||||||
EC_GROUP_free(group);
|
EC_GROUP_free(group);
|
||||||
}
|
}
|
||||||
BN_free(order);
|
|
||||||
delete[] curves;
|
delete[] curves;
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
|
|||||||
@ -13,9 +13,11 @@
|
|||||||
|
|
||||||
#include "base.h"
|
#include "base.h"
|
||||||
|
|
||||||
#define CURVE_X962 1
|
#define CURVE_RFC5480 0
|
||||||
#define CURVE_OTHER 2
|
#define CURVE_BRAINPOOL 1
|
||||||
#define CURVE_RFC5480 3
|
#define CURVE_X962 2
|
||||||
|
#define CURVE_OTHER 3
|
||||||
|
#define CURVE_MAX 4
|
||||||
|
|
||||||
class builtin_curve
|
class builtin_curve
|
||||||
{
|
{
|
||||||
@ -23,12 +25,13 @@ class builtin_curve
|
|||||||
int nid{};
|
int nid{};
|
||||||
QString comment{};
|
QString comment{};
|
||||||
unsigned order_size{};
|
unsigned order_size{};
|
||||||
int flags{};
|
/* CURVE_xxxx */
|
||||||
|
int sortgroup{};
|
||||||
/* type: CKF_EC_F_P || CKF_EC_F_2M */
|
/* type: CKF_EC_F_P || CKF_EC_F_2M */
|
||||||
unsigned long type{};
|
unsigned long type{};
|
||||||
|
|
||||||
builtin_curve(int n, QString c, int s, int f, int t)
|
builtin_curve(int n, const QString &c, int s, int g, int t)
|
||||||
: nid(n), comment(c), order_size(s), flags(f), type(t) { };
|
: nid(n), comment(c), order_size(s), sortgroup(g), type(t) { };
|
||||||
builtin_curve() = delete;
|
builtin_curve() = delete;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -151,7 +151,7 @@ void NewKey::addCurveBoxCurves(const QList<builtin_curve> &curves)
|
|||||||
void NewKey::updateCurves(unsigned min, unsigned max, unsigned long ec_flags)
|
void NewKey::updateCurves(unsigned min, unsigned max, unsigned long ec_flags)
|
||||||
{
|
{
|
||||||
#ifndef OPENSSL_NO_EC
|
#ifndef OPENSSL_NO_EC
|
||||||
QList<builtin_curve> curve_rfc5480, curve_x962, curve_other;
|
QList<builtin_curve> curves[CURVE_MAX];
|
||||||
|
|
||||||
foreach(builtin_curve curve, builtinCurves) {
|
foreach(builtin_curve curve, builtinCurves) {
|
||||||
const char *sn = OBJ_nid2sn(curve.nid);
|
const char *sn = OBJ_nid2sn(curve.nid);
|
||||||
@ -160,18 +160,14 @@ void NewKey::updateCurves(unsigned min, unsigned max, unsigned long ec_flags)
|
|||||||
continue;
|
continue;
|
||||||
if (ec_flags && (curve.type & ec_flags) == 0)
|
if (ec_flags && (curve.type & ec_flags) == 0)
|
||||||
continue;
|
continue;
|
||||||
switch (curve.flags) {
|
curves[curve.sortgroup] << curve;
|
||||||
case CURVE_RFC5480: curve_rfc5480 << curve; break;
|
|
||||||
case CURVE_X962: curve_x962 << curve; break;
|
|
||||||
case CURVE_OTHER: curve_other << curve; break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
curveBox->clear();
|
curveBox->clear();
|
||||||
addCurveBoxCurves(curve_rfc5480);
|
for (int i = 0; i<CURVE_MAX; i++) {
|
||||||
curveBox->insertSeparator(curveBox->count());
|
addCurveBoxCurves(curves[i]);
|
||||||
addCurveBoxCurves(curve_x962);
|
if (!curves[i].isEmpty() && i < CURVE_MAX-1)
|
||||||
curveBox->insertSeparator(curveBox->count());
|
curveBox->insertSeparator(curveBox->count());
|
||||||
addCurveBoxCurves(curve_other);
|
}
|
||||||
|
|
||||||
int default_index = curveBox->findData(
|
int default_index = curveBox->findData(
|
||||||
QVariant(keyjob::defaultjob.ec_nid));
|
QVariant(keyjob::defaultjob.ec_nid));
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user