3535
3636namespace GpgFrontend {
3737
38+ namespace {
39+
40+ auto FindAlgoByIdAndType (const QContainer<KeyAlgo> &algos, const QString &id,
41+ const QString &type) -> KeyAlgo {
42+ const auto it =
43+ std::find_if (algos.cbegin (), algos.cend (), [&](const KeyAlgo &algo) {
44+ return algo.Id () == id && algo.Type () == type;
45+ });
46+
47+ assert (it != algos.cend ());
48+ return it != algos.cend () ? *it : KeyAlgo{};
49+ }
50+
51+ auto FindSubAlgo (const QString &id, const QString &type) -> KeyAlgo {
52+ return FindAlgoByIdAndType (KeyGenerateInfo::kSubKeyAlgos , id, type);
53+ }
54+
55+ auto FindPrimaryAlgo (const QString &id, const QString &type) -> KeyAlgo {
56+ return FindAlgoByIdAndType (KeyGenerateInfo::kPrimaryKeyAlgos , id, type);
57+ }
58+
59+ } // namespace
60+
3861const KeyAlgo KeyGenerateInfo::kNoneAlgo = {
3962 " none" ,
4063 KeyGenerateInfo::tr (" None" ),
@@ -216,7 +239,7 @@ const QContainer<KeyAlgo> KeyGenerateInfo::kHybridPrimaryKeyAlgo = {
216239 {{OpenPGPEngine::kRPGP , " 0.1.2" }},
217240 {
218241 {
219- kPrimaryKeyAlgos [ 8 ] , // ed25519
242+ FindPrimaryAlgo ( " ed25519 " , " EdDSA " ) , // ed25519
220243 {
221244 {OpenPGPEngine::kRPGP , " 0.1.2" },
222245 },
@@ -230,7 +253,7 @@ const QContainer<KeyAlgo> KeyGenerateInfo::kHybridPrimaryKeyAlgo = {
230253 {{OpenPGPEngine::kRPGP , " 0.1.2" }},
231254 {
232255 {
233- kPrimaryKeyAlgos [ 15 ] , // ed448
256+ FindPrimaryAlgo ( " ed448 " , " EdDSA " ) , // ed448
234257 {
235258 {OpenPGPEngine::kRPGP , " 0.1.2" },
236259 },
@@ -337,6 +360,30 @@ const QContainer<KeyAlgo> KeyGenerateInfo::kSubKeyAlgos = {
337360 kENCRYPT ,
338361 {{OpenPGPEngine::kGNUPG , " 2.2.0" }, {OpenPGPEngine::kRPGP , " 0.1.0" }},
339362 },
363+ {
364+ " nistp256" ,
365+ " NIST" ,
366+ " ECDSA" ,
367+ 256 ,
368+ kSIGN | kAUTH ,
369+ {{OpenPGPEngine::kGNUPG , " 2.2.0" }, {OpenPGPEngine::kRPGP , " 0.1.0" }},
370+ },
371+ {
372+ " nistp384" ,
373+ " NIST" ,
374+ " ECDSA" ,
375+ 384 ,
376+ kSIGN | kAUTH ,
377+ {{OpenPGPEngine::kGNUPG , " 2.2.0" }, {OpenPGPEngine::kRPGP , " 0.1.0" }},
378+ },
379+ {
380+ " nistp521" ,
381+ " NIST" ,
382+ " ECDSA" ,
383+ 521 ,
384+ kSIGN | kAUTH ,
385+ {{OpenPGPEngine::kGNUPG , " 2.2.0" }, {OpenPGPEngine::kRPGP , " 0.1.0" }},
386+ },
340387 {
341388 " brainpoolp256r1" ,
342389 " BrainPooL" ,
@@ -361,6 +408,30 @@ const QContainer<KeyAlgo> KeyGenerateInfo::kSubKeyAlgos = {
361408 kENCRYPT ,
362409 {{OpenPGPEngine::kGNUPG , " 2.3.0" }},
363410 },
411+ {
412+ " brainpoolp256r1" ,
413+ " BrainPooL" ,
414+ " ECDSA" ,
415+ 256 ,
416+ kSIGN | kAUTH ,
417+ {{OpenPGPEngine::kGNUPG , " 2.3.0" }},
418+ },
419+ {
420+ " brainpoolp384r1" ,
421+ " BrainPooL" ,
422+ " ECDSA" ,
423+ 384 ,
424+ kSIGN | kAUTH ,
425+ {{OpenPGPEngine::kGNUPG , " 2.3.0" }},
426+ },
427+ {
428+ " brainpoolp512r1" ,
429+ " BrainPooL" ,
430+ " ECDSA" ,
431+ 512 ,
432+ kSIGN | kAUTH ,
433+ {{OpenPGPEngine::kGNUPG , " 2.3.0" }},
434+ },
364435 {
365436 " x448" ,
366437 " X448" ,
@@ -461,50 +532,50 @@ const QContainer<KeyAlgo> KeyGenerateInfo::kHybridSubKeyAlgos = {
461532 {{OpenPGPEngine::kGNUPG , " 2.5.0" }, {OpenPGPEngine::kRPGP , " 0.1.2" }},
462533 {
463534 {
464- kSubKeyAlgos [ 9 ] , // cv25519
535+ FindSubAlgo ( " cv25519 " , " ECDH " ) , // cv25519
465536 {
466537 {OpenPGPEngine::kGNUPG , " 2.5.0" },
467538 {OpenPGPEngine::kRPGP , " 0.1.2" },
468539 },
469540 },
470541 {
471- kSubKeyAlgos [ 10 ] , // nistp256
542+ FindSubAlgo ( " nistp256 " , " ECDH " ) , // nistp256
472543 {
473544 {OpenPGPEngine::kGNUPG , " 2.5.0" },
474545 },
475546 },
476547 {
477- kSubKeyAlgos [ 11 ] , // nistp384
548+ FindSubAlgo ( " nistp384 " , " ECDH " ) , // nistp384
478549 {
479550 {OpenPGPEngine::kGNUPG , " 2.5.0" },
480551 },
481552 },
482553 {
483- kSubKeyAlgos [ 12 ] , // nistp521
554+ FindSubAlgo ( " nistp521 " , " ECDH " ) , // nistp521
484555 {
485556 {OpenPGPEngine::kGNUPG , " 2.5.0" },
486557 },
487558 },
488559 {
489- kSubKeyAlgos [ 13 ] , // brainpoolp256r1
560+ FindSubAlgo ( " brainpoolp256r1 " , " ECDH " ) , // brainpoolp256r1
490561 {
491562 {OpenPGPEngine::kGNUPG , " 2.5.0" },
492563 },
493564 },
494565 {
495- kSubKeyAlgos [ 14 ] , // brainpoolp384r1
566+ FindSubAlgo ( " brainpoolp384r1 " , " ECDH " ) , // brainpoolp384r1
496567 {
497568 {OpenPGPEngine::kGNUPG , " 2.5.0" },
498569 },
499570 },
500571 {
501- kSubKeyAlgos [ 15 ] , // brainpoolp512r1
572+ FindSubAlgo ( " brainpoolp512r1 " , " ECDH " ) , // brainpoolp512r1
502573 {
503574 {OpenPGPEngine::kGNUPG , " 2.5.0" },
504575 },
505576 },
506577 {
507- kSubKeyAlgos [ 16 ] , // x448
578+ FindSubAlgo ( " x448 " , " ECDH " ) , // x448
508579 {{OpenPGPEngine::kGNUPG , " 2.5.0" }},
509580 },
510581 }},
@@ -516,49 +587,49 @@ const QContainer<KeyAlgo> KeyGenerateInfo::kHybridSubKeyAlgos = {
516587 {{OpenPGPEngine::kGNUPG , " 2.5.0" }, {OpenPGPEngine::kRPGP , " 0.1.2" }},
517588 {
518589 {
519- kSubKeyAlgos [ 9 ] , // cv25519
590+ FindSubAlgo ( " cv25519 " , " ECDH " ) , // cv25519
520591 {
521592 {OpenPGPEngine::kGNUPG , " 2.5.0" },
522593 },
523594 },
524595 {
525- kSubKeyAlgos [ 10 ] , // nistp256
596+ FindSubAlgo ( " nistp256 " , " ECDH " ) , // nistp256
526597 {
527598 {OpenPGPEngine::kGNUPG , " 2.5.0" },
528599 },
529600 },
530601 {
531- kSubKeyAlgos [ 11 ] , // nistp384
602+ FindSubAlgo ( " nistp384 " , " ECDH " ) , // nistp384
532603 {
533604 {OpenPGPEngine::kGNUPG , " 2.5.0" },
534605 },
535606 },
536607 {
537- kSubKeyAlgos [ 12 ] , // nistp521
608+ FindSubAlgo ( " nistp521 " , " ECDH " ) , // nistp521
538609 {
539610 {OpenPGPEngine::kGNUPG , " 2.5.0" },
540611 },
541612 },
542613 {
543- kSubKeyAlgos [ 13 ] , // brainpoolp256r1
614+ FindSubAlgo ( " brainpoolp256r1 " , " ECDH " ) , // brainpoolp256r1
544615 {
545616 {OpenPGPEngine::kGNUPG , " 2.5.0" },
546617 },
547618 },
548619 {
549- kSubKeyAlgos [ 14 ] , // brainpoolp384r1
620+ FindSubAlgo ( " brainpoolp384r1 " , " ECDH " ) , // brainpoolp384r1
550621 {
551622 {OpenPGPEngine::kGNUPG , " 2.5.0" },
552623 },
553624 },
554625 {
555- kSubKeyAlgos [ 15 ] , // brainpoolp512r1
626+ FindSubAlgo ( " brainpoolp512r1 " , " ECDH " ) , // brainpoolp512r1
556627 {
557628 {OpenPGPEngine::kGNUPG , " 2.5.0" },
558629 },
559630 },
560631 {
561- kSubKeyAlgos [ 16 ] , // x448
632+ FindSubAlgo ( " x448 " , " ECDH " ) , // x448
562633 {
563634 {OpenPGPEngine::kGNUPG , " 2.5.0" },
564635 {OpenPGPEngine::kRPGP , " 0.1.2" },
@@ -573,7 +644,7 @@ const QContainer<KeyAlgo> KeyGenerateInfo::kHybridSubKeyAlgos = {
573644 {{OpenPGPEngine::kRPGP , " 0.1.2" }},
574645 {
575646 {
576- kSubKeyAlgos [ 8 ] , // ed25519
647+ FindSubAlgo ( " ed25519 " , " EdDSA " ) , // ed25519
577648 {
578649 {OpenPGPEngine::kRPGP , " 0.1.2" },
579650 },
@@ -587,7 +658,7 @@ const QContainer<KeyAlgo> KeyGenerateInfo::kHybridSubKeyAlgos = {
587658 {{OpenPGPEngine::kRPGP , " 0.1.2" }},
588659 {
589660 {
590- kSubKeyAlgos [ 22 ] , // ed448
661+ FindSubAlgo ( " ed448 " , " EdDSA " ) , // ed448
591662 {
592663 {OpenPGPEngine::kRPGP , " 0.1.2" },
593664 },
@@ -628,7 +699,10 @@ auto KeyGenerateInfo::GetSupportedKeyAlgo(int channel) -> QContainer<KeyAlgo> {
628699 }
629700
630701 std::sort (algos.begin (), algos.end (), [](const KeyAlgo &a, const KeyAlgo &b) {
631- return a.Name () < b.Name () && a.KeyLength () < b.KeyLength ();
702+ if (a.Name () != b.Name ()) return a.Name () < b.Name ();
703+ if (a.KeyLength () != b.KeyLength ()) return a.KeyLength () < b.KeyLength ();
704+ if (a.Type () != b.Type ()) return a.Type () < b.Type ();
705+ return a.Id () < b.Id ();
632706 });
633707
634708 return algos;
@@ -1030,7 +1104,11 @@ auto KeyAlgo::SupportedVersion() const -> QContainer<EngineSupportIf> {
10301104}
10311105
10321106auto KeyAlgo::operator ==(const KeyAlgo &o) const -> bool {
1033- return this ->id_ == o.id_ ;
1107+ return id_ == o.id_ && type_ == o.type_ && length_ == o.length_ ;
1108+ }
1109+
1110+ auto KeyAlgo::operator !=(const KeyAlgo &o) const -> bool {
1111+ return !(*this == o);
10341112}
10351113
10361114[[nodiscard]] auto KeyAlgo::SubAlgos (int channel) const -> QContainer<KeyAlgo> {
0 commit comments