cpp: Allow setting the curve to use when generating ECC keys
lang/cpp/src/gpggencardkeyinteractor.h (class GpgGenCardKeyInteractor): Add enum Curve. Add member function setCurve. lang/cpp/src/gpggencardkeyinteractor.cpp (class GpgGenCardKeyInteractor::Private): Initialize simple members in-class. Add member curve. (GpgGenCardKeyInteractor::~GpgGenCardKeyInteractor): Use default d'tor. (GpgGenCardKeyInteractor::setCurve): New. (GpgGenCardKeyInteractor::action): Return curve defaulting to Curve25519. -- This enables users of this interactor to request the generation of ECC keys with a specific curve as smart card keys. It's up to the user to specify a curve that is actually supported by the smart card. GnuPG-bug-id: 4429
This commit is contained in:
parent
d36905bb80
commit
d9ac138595
9
NEWS
9
NEWS
@ -10,6 +10,15 @@ Noteworthy changes in version 1.18.1 (unreleased)
|
||||
* qt: Fix problem with expiration dates after 2038-01-19 on 32-bit systems
|
||||
when adding an existing subkey to another key. [T6137]
|
||||
|
||||
* cpp: Allow setting the curve to use when generating ECC keys
|
||||
for smart cards. [T4429]
|
||||
|
||||
* Interface changes relative to the 1.18.0 release:
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
cpp: GpgGenCardKeyInteractor::Curve NEW.
|
||||
cpp: GpgGenCardKeyInteractor::setCurve NEW.
|
||||
|
||||
|
||||
Noteworthy changes in version 1.18.0 (2022-08-10)
|
||||
-------------------------------------------------
|
||||
|
||||
|
@ -36,16 +36,17 @@ using namespace GpgME;
|
||||
class GpgGenCardKeyInteractor::Private
|
||||
{
|
||||
public:
|
||||
Private() : keysize("2048"), backup(false), algo(RSA)
|
||||
Private() : keysize("2048")
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
std::string name, email, backupFileName, expiry, serial, keysize;
|
||||
bool backup;
|
||||
Algo algo;
|
||||
bool backup = false;
|
||||
Algo algo = RSA;
|
||||
std::string curve;
|
||||
};
|
||||
|
||||
GpgGenCardKeyInteractor::~GpgGenCardKeyInteractor() {}
|
||||
GpgGenCardKeyInteractor::~GpgGenCardKeyInteractor() = default;
|
||||
|
||||
GpgGenCardKeyInteractor::GpgGenCardKeyInteractor(const std::string &serial):
|
||||
d(new Private)
|
||||
@ -88,6 +89,15 @@ void GpgGenCardKeyInteractor::setAlgo(Algo algo)
|
||||
d->algo = algo;
|
||||
}
|
||||
|
||||
void GpgGenCardKeyInteractor::setCurve(Curve curve)
|
||||
{
|
||||
if (curve == DefaultCurve) {
|
||||
d->curve.clear();
|
||||
} else if (curve >= 1 && curve <= LastCurve) {
|
||||
d->curve = std::to_string(static_cast<int>(curve));
|
||||
}
|
||||
}
|
||||
|
||||
namespace GpgGenCardKeyInteractor_Private
|
||||
{
|
||||
enum {
|
||||
@ -141,7 +151,7 @@ const char *GpgGenCardKeyInteractor::action(Error &err) const
|
||||
case KEY_CURVE1:
|
||||
case KEY_CURVE2:
|
||||
case KEY_CURVE3:
|
||||
return "1"; // Only cv25519 supported.
|
||||
return d->curve.empty() ? "1" : d->curve.c_str(); // default is Curve25519
|
||||
case NAME:
|
||||
return d->name.c_str();
|
||||
case EMAIL:
|
||||
|
@ -58,10 +58,27 @@ public:
|
||||
|
||||
enum Algo {
|
||||
RSA = 1,
|
||||
ECC = 2
|
||||
ECC = 2,
|
||||
};
|
||||
void setAlgo(Algo algo);
|
||||
|
||||
// the enum values minus 1 have to match the indexes of the curves used by
|
||||
// ask_curve() in gnupg's g10/keygen.c
|
||||
enum Curve {
|
||||
DefaultCurve = 0, // currently Curve25519
|
||||
Curve25519 = 1,
|
||||
Curve448,
|
||||
NISTP256,
|
||||
NISTP384,
|
||||
NISTP521,
|
||||
BrainpoolP256,
|
||||
BrainpoolP384,
|
||||
BrainpoolP512,
|
||||
Secp256k1,
|
||||
LastCurve = Secp256k1,
|
||||
};
|
||||
void setCurve(Curve curve);
|
||||
|
||||
std::string backupFileName() const;
|
||||
|
||||
private:
|
||||
|
Loading…
Reference in New Issue
Block a user