diff options
Diffstat (limited to '')
| -rw-r--r-- | NEWS | 9 | ||||
| -rw-r--r-- | lang/cpp/src/gpggencardkeyinteractor.cpp | 22 | ||||
| -rw-r--r-- | lang/cpp/src/gpggencardkeyinteractor.h | 19 | 
3 files changed, 43 insertions, 7 deletions
| @@ -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)  ------------------------------------------------- diff --git a/lang/cpp/src/gpggencardkeyinteractor.cpp b/lang/cpp/src/gpggencardkeyinteractor.cpp index 4d90aa0b..a28169ec 100644 --- a/lang/cpp/src/gpggencardkeyinteractor.cpp +++ b/lang/cpp/src/gpggencardkeyinteractor.cpp @@ -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: diff --git a/lang/cpp/src/gpggencardkeyinteractor.h b/lang/cpp/src/gpggencardkeyinteractor.h index 3d9c7136..09a73b6a 100644 --- a/lang/cpp/src/gpggencardkeyinteractor.h +++ b/lang/cpp/src/gpggencardkeyinteractor.h @@ -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: | 
